Linux-Magazin Schnittstellen-Magie (Vorschau)
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
12/12<br />
Anzeige:<br />
SPEED dreams!<br />
Vergleichen lohnt sich richtig! » strato-pro.de siehe Beihefter<br />
STR1112_DE_TKS_DServer_120x17.indd 1<br />
16.10.2012 14:19:38 Uhr<br />
Meetings und Seminare<br />
am PC abhalten<br />
Test von Webkonferenz-Systemen, die Audio,<br />
Video & Vortragsfolien verteilen S. 42<br />
Terminals<br />
Was der Kernel mit realen,<br />
virtuellen, Pseudo- und<br />
Bootkonsolen anstellt S. 88<br />
Kanban-Prinzip<br />
Das Projektmanagement-<br />
Tool Rike setzt auf Eigenverant<br />
wortung S. 52<br />
<strong>Schnittstellen</strong>-<strong>Magie</strong><br />
Einfach zauberhaft: Webdienste<br />
per API abfragen und steuern<br />
■ Soap vs. REST: Webservices-Einmaleins S. 20<br />
■ Facebook, Twitter und Xing anzapfen<br />
am Beispiel zweier Groupwares S. 22<br />
■ Leitfaden für Ebay- und Amazon-Verkäufer,<br />
um eigene Programme anzubinden S. 28<br />
■ API-Praxis: Google Maps & Open Streetmap S. 32<br />
■ Bugzilla, OTRS, Github, Google Code & Co.<br />
per Python fernsteuern S. 36<br />
■ Rechtsfallen mit Web-APIs S. 70<br />
■ Die Zeit ist reif: Armbanduhren<br />
mit <strong>Linux</strong> programmieren S. 80<br />
■ Freies Cfengine 3.4.0 mit Posix-ACLs<br />
für Unix, <strong>Linux</strong> und Windows S. 62<br />
Perlmeister Schilli geht Büchern mit einem Monster-Messer und einem Einzugsscanner ans Leder S. 102<br />
www.linux-magazin.de<br />
Deutschland Österreich Schweiz Benelux Spanien Italien<br />
4 5,95 4 6,70 sfr 11,90 4 7,00 4 7,95 4 7,95<br />
4 192587 305954 12
CityCloud<br />
Die Cloud in Ihrer Stadt<br />
Hamburg<br />
Berlin<br />
Frankfurt<br />
Stuttgart<br />
München<br />
Willkommen in der CityCloud<br />
Nutzen Sie sichere und flexible Cloudlösungen<br />
und Managed Hosting direkt in Ihrer Stadt.<br />
Sie wissen immer, wo Ihre Daten und Anwendungen<br />
betrieben werden. Selbstverständlich<br />
nach den Anforderungen des deutschen und<br />
europäischen Datenschutzes.<br />
Sprechen Sie uns an!<br />
Tel.: 0 30 / 420 200 24<br />
hostserver.de/citycloud<br />
Vorteile der CityCloud:<br />
Daten sicher in Ihrer Stadt<br />
ISO 9001 zertifiziertes<br />
Managed Hosting<br />
Umfassender Datenschutz<br />
24/7 Service und Support<br />
Managed Hosting<br />
zertifiziert nach<br />
ISO 9001 : 2008
Yes, ICANN<br />
Login 12/2012<br />
Editorial<br />
Neulich im Bundestag ging es, mal wieder, um Vorratsdatenspeicherung. Rund<br />
64 000 Bürger hatten erreicht, dass sich der Petitionsausschuss mit der Frage<br />
auseinandersetzen muss, ob das anlasslose Speichern rechtswidrig ist. Warum<br />
die Debatte, mag man einwenden. Hatte das Bundesverfassungsgericht im März<br />
2010 nicht die Speichervorschriften komplett gekippt? Und prüft der Europäische<br />
Gerichtshof nicht gerade, das Gleiche mit der EU-Speicher-Richtline zu tun?<br />
Bestätigte er das nationale Urteil, wäre damit auch das laufende EU-Vertragsverletzungsverfahren<br />
gegen Deutschland vom Tisch. In der Zwischenzeit speichern<br />
deutsche Provider für sieben Tage, eine Ermittlungspraxis, die – seltsam genug<br />
– den Segen des Bundesdatenschutzbeauftragten hat. Die Bundesregierung diskutiert<br />
währenddessen intern über ein „Quick Freeze plus“-Gesetz.<br />
Die Anhörung in Berlin verlief nicht sonderlich kontrovers: Kai-Uwe Steffens, Jan Kleinert, Chefredakteur<br />
der die Petition eingereicht hatte, legte die Argumente der Gegner dar, und<br />
Max Stadler, parlamentarischer Staatssekretär im FDP-geführten Justizministerium, teilte die Bedenken der<br />
Bürger in wesentlichen Punkten. Einzig ein Vertreter des Innenministeriums hielt dagegen, dass ohne Vorratsdatenspeicherung<br />
insbesondere Internetdelikte oft nicht aufklärbar seien. Dass der strafrechtliche Nutzen des<br />
Speicherns nicht wissenschaftlich belegt ist, musste aber auch er einräumen.<br />
Eine Vorratsspeicherung in Kombination mit verschärfter Nutzerdaten-Verifikation hat sich die ICANN gerade<br />
zugelegt. Die Internet Corporation for Assigned Names and Numbers, eine eher schwerfällige Non-Profit-Organisation,<br />
die der Öffentlichkeit, wenn überhaupt, nur als weltweite Hüterin der Toplevel-Domains und Betreiberin<br />
des Root-DNS bekannt ist, will Domainanbieter verpflichten, nicht nur Daten der Inhaber einer aktiven Domain<br />
anlasslos zu speichern, sondern sogar zwei Jahre nach Vertragsende aufzubewahren.<br />
Dabei geht es nicht nur um die Whois-Felder, sondern auch um Telefonnummern, E-Mail-Adressen, Skype-Namen,<br />
Kreditkartendaten, Quell- und Ziel-IPs der Kommunikation zum Kunden sowie HTTP-Header. Da der ICANN die<br />
demokratische Legitimation fehlt, braucht man kein Staatsexamen in Jura, um das frech zu finden. Die zentrale<br />
Frage lautet: Warum denkt sich das Standesamt des Internet eine so absurde Regelung aus? Seit Jahren üben<br />
Strafverfolgungsbehörden, besonders US-amerikanische, Druck auf diverse Domainregistrare aus. Und die wiederum<br />
sitzen neben Regierungsvertretern in den ICANN-Gremien. Die Vorratsdatenspeicherung kam auf Initiative<br />
des FBI hinzu. Am Ende haben alle zugestimmt und die Chose war perfekt. Fast. Denn beim ICANN-Treffen<br />
in Toronto vor ein paar Tagen kristallisierte sich heraus, dass europäische Registrare per Ausnahmeregelung<br />
die Vorratsdatenspeicherung nicht umzusetzen brauchen – was die US-Registrare wiederum wurmt.<br />
Deutschland, EU und weltweit: Warum nur ist das Thema einfach nicht totzukriegen?! Kometengleich kehrt<br />
es alle ein, zwei Jahre zurück und bedroht die digitale Zivilisation aufs Neue. Was macht es für Schlapphüte,<br />
Terrorfahnder und weiß Gott wen noch so attraktiv, statt einiger Verdächtiger die komplette Einwohnerschaft<br />
eines Landes kommunikationstechnisch zu durchleuchten? Die Angst, die Kontrolle zu verlieren?<br />
Vielleicht ist es ja ganz harmlos, und alle Sicherheitsbehörden sind bloß mit nicht-enttarnten Stasi-Agenten<br />
durchsetzt, die nach der Wende mangels Instruktionen und zweitem Gehalt aus Ostberlin eine gesamtdeutsche<br />
Karriere anstreben. Und was tun die? Das was sie gelernt haben: überwachen.<br />
www.linux-magazin.de<br />
3
Inhalt<br />
www.linux-magazin.de 12/2012 12/2012<br />
4<br />
Laien muss es wie pure <strong>Magie</strong> vorkommen, wenn Adressen aus sozialen Netzwerken plötzlich<br />
in einer normalen Groupware auftauchen, wenn Ebay- oder Amazon-Verkäufer ohne Browser<br />
ihre Artikel managen, eine Intranet-Anwendung Reiserouten berechnet oder Python-Skripte<br />
Webdienste fernsteuern. Doch stets geht es mit rechten Dingen zu: mit APIs.<br />
Aktuell<br />
Titelthema: Webdienste über <strong>Schnittstellen</strong> abfragen und steuern<br />
6 N ew s<br />
n Gnublin-DIP: Rechner in IC-Größe<br />
n Mapi: Sogo integriert Open Change<br />
20 Einführung<br />
Titel<br />
Datenaustausch im Web über XML-RPC,<br />
Soap und REST.<br />
22 Social-Network-APIs<br />
Wie Open-Xchange und Zarafa auf die<br />
APIs von sozialen Netzwerken zugreifen.<br />
32 GIS-APIs<br />
Einfache Web-Kartenanwendungen program<br />
mieren mit Google Maps, Open<br />
Streetmap und Open Layers.<br />
Novius OS ist ein junges CMS, hat aber bereits<br />
ein schickes Medienarchiv.<br />
n Gnome verbessert Eingabemethoden<br />
n Kernel 3.6 erschwert Symlink-Angriffe<br />
11 Zahlen & Trends<br />
n Freies Office: Leipzig, München, Freiburg<br />
n VIncent Utz leitet Open Suse Board<br />
Moderne Groupware-Suites integrieren<br />
Twitter, Facebook, Linked In und Xing.<br />
28 E-Commerce-APIs<br />
Die Webservices von Ebay und Amazon.<br />
Je ein Klick für Start und Ziel, schon berechnen<br />
die Javascript-Programme die Entfernung.<br />
36 APIs für Entwicklertools<br />
Mit eigenen Python-Skripten automatisieren<br />
Entwickler Webanwendungen wie<br />
Git, Github und OTRS.<br />
Studenten aufgepasst! Jetzt bewerben für<br />
den Univention-Absolven ten preis 2013<br />
16 Zacks Kernel-News<br />
n Einweg-IDs für Geräte<br />
n Langzeit-Support für Kernel 3.2<br />
Das neue PWM-Subsystem macht es leichter,<br />
Treiber für die Controller von ARM-Systemen<br />
wie Nvidias Tegra zu schreiben.<br />
Professioneller Einkaufen: Waren wirtschaft und<br />
Buchhaltung lassen sich an die APIs anbinden.<br />
DELUG-DVD<br />
Dank ihrer APIs lassen sich viele Entwicklerwerkzeuge<br />
bequem fernsteuern.<br />
Details zu DVD-<br />
TOOL<br />
Inhalten auf S. 41<br />
Ubuntu 12.04.1 Caine 3.0<br />
TOOL<br />
Für den Produktiveinsatz: Erste<br />
fehlerbereinigte LTS-Release<br />
TOOL<br />
Owncloud 4.5<br />
TOOL<br />
Mit neuen Features und nur im<br />
<strong>Linux</strong>-<strong>Magazin</strong>: Virtuelle Maschine<br />
mit der freien Dropbox-Alternative TOOL<br />
TOOL<br />
Spezial-<strong>Linux</strong> zum Entdecken<br />
von Rechnereinbrüchen<br />
O’Reilly Tech Feeds<br />
E-Book: „Cross- Site Scripting“<br />
Susecon-Keynotes<br />
Das Chamäleon-Jubiläum in Orlando
12/2012 12/2012<br />
Inhalt<br />
42 Sehen, hören, zeigen<br />
Ein Whiteboard für Vortragsfolien,<br />
Textchat, Desktopsharing, Sprachund<br />
Videoübertragung: Was moderne<br />
Konferenzsysteme leisten.<br />
56 Zugriff verwehrt<br />
Alien Vaults Security Information and<br />
Event Management (SIEM) verspricht,<br />
Angriffsversuche automatisch zu erkennen<br />
und integriert zahlreiche Tools.<br />
102 Papierbuch am Ende<br />
Automatisiert, mit Guillotine, Scanner<br />
und Perl-Skripten bewaffnet greift<br />
Perlmeister Schilli zum Äußersten und<br />
digitalisiert seine Bücher.<br />
www.linux-magazin.de<br />
5<br />
Software<br />
Sysadmin<br />
Hardware<br />
41<br />
Einführung<br />
Auf der DELUG-DVD: Caine, Ubuntu<br />
12.04.1, Owncloud und ein E-Book zu XSS.<br />
55 Einführung<br />
Aus dem Alltag eines Sysadmin: Charly<br />
spielt mit Gif-Animationen.<br />
80 Smart Watches<br />
Titel<br />
Smart Watches im Hack-Test: Hightech-<br />
Uhren unter <strong>Linux</strong> ansprechen.<br />
42 Bitparade<br />
Titel<br />
Drei Tools für Echtzeit-Vorlesungen und<br />
Konferenzen treten an zum Vergleich.<br />
56 OSSIM und Alienvault<br />
Sowohl die Appliance als auch die freie<br />
Variante des IDS offenbaren Schwächen.<br />
62 Cfengine 3.4<br />
Titel<br />
Von der kommerziellen Variante lernt<br />
das Konfigurationstool Posix-ACLs.<br />
Acht Uhren von Sony, Fossil, TI und I‘m Watch im<br />
Test. Die Metawatch gab es in zwei Varianten.<br />
Big Blue Button präsentiert einen übersichtlichen<br />
virtuellen Hörsaal im Browser.<br />
Know-how<br />
48 Tooltipps<br />
Diffimg, LPVS, Profanity, Squid-Analyzer,<br />
Taskwarrior und Xc im Kurztest.<br />
52 Planen nach Kanban-Prinzip<br />
Titel<br />
Leichtgewichtiges Open-Source-Projektmanagement<br />
mit Rike.<br />
Auch Rikes Weboberfläche kann überzeugen.<br />
Service<br />
3 Editorial<br />
107 Stellenanzeigen<br />
108 IT-Profimarkt<br />
112 Veranstaltungen<br />
112 Inserenten<br />
113 Impressum<br />
114 <strong>Vorschau</strong><br />
Jede Menge Snippets und Ideen für Cfengine<br />
bietet das Design Center.<br />
Forum<br />
65 Bücher<br />
Bücher über HTML-5-<br />
Apps sowie Computer<br />
Vision mit Python.<br />
66 20 Jahre Suse<br />
Von der Susecon in Orlando, Florida: Wie<br />
Suse Amerika erobern will.<br />
69 Leserbriefe<br />
Auf den Punkt gebracht.<br />
70 Recht<br />
Nutzungsbedingungen von Web-APIs.<br />
74 Reusing in der Praxis<br />
Wie Firmen Code wiederverwenden.<br />
88 Kern-Technik 65<br />
Titel<br />
Reale, virtuelle, Pseudo-, Controllingund<br />
eigene Terminals.<br />
Programmieren<br />
92 Bash Bashing – Folge 23<br />
Shellskripte aus der Stümper-Liga -<br />
Folge 23: Dash statt Bash.<br />
96 C++11 – Folge 7<br />
Modernes C++ in der Praxis: Move.<br />
102 Perl-Snapshot<br />
Bücher scannen und in Google Drive<br />
speichern.<br />
Ein Teppichmesser schneidet ritsch-ratsch<br />
den Buchdeckel ab.
Aktuell<br />
www.linux-magazin.de News 12/2012<br />
6<br />
News<br />
Gnublin-DIP: <strong>Linux</strong>-Server in IC-Größe<br />
Die Embedded Projects GmbH<br />
aus Augsburg bietet einen Mini-<strong>Linux</strong>-Server<br />
in der Größe<br />
eines IC-Bausteins an. Das<br />
ARM9-System mit 180 MHz<br />
und 32 MByte RAM lässt sich<br />
wie ein Standard-DIP-40-Gehäuse<br />
(8,3 mal 54 Millimeter)<br />
verbauen. Die Pins bieten die<br />
folgenden Anschlüsse und<br />
<strong>Schnittstellen</strong>: fünfmal GPIO,<br />
viermal AD-Wandler (10 Bit)<br />
sowie PWM, I 2 C, SPI, UART<br />
und USB. Unter der Platine<br />
hat außerdem ein Micro-SD-<br />
Kartenslot Platz gefunden.<br />
Der Rechner nimmt bei 5 Volt<br />
50 bis 70 Milliampere auf.<br />
Der Hersteller liefert den Server<br />
mit vorinstalliertem GNU<br />
<strong>Linux</strong> (Kernel 2.6.33) aus, es<br />
laufen SSH und HTTP(S). Optional<br />
gibt es weitere Dienste<br />
wie FTP oder Samba, außerdem<br />
bietet Embedded Projects<br />
ein passendes Softwarearchiv.<br />
Der Winzling eignet sich beispielsweise<br />
für die Heimautomatisierung,<br />
auch kann er<br />
einen klassischen Mikrocontroller<br />
ersetzen.<br />
Das Gnublin-DIP-Modul ist<br />
zum Stückpreis von rund<br />
35 Euro unter [http://shop.<br />
embedded‐projects.net] erhältlich,<br />
ab einer Bestellmenge<br />
von zehn Stück gibt es Rabatt.<br />
Ein Evaluation-Kit mit<br />
zwei DIP-Modulen und einer<br />
CD mit allen Unterlagen und<br />
Quelltexten ist für rund 100<br />
Euro im Angebot. n<br />
Das Gnublin-DIP packt einen ganzen Embedded-<strong>Linux</strong>-Server ins IC-Format. An<br />
der Unterseite befindet sich der Micro-SD-Kartenslot.<br />
Lancom LSM überwacht große Netzwerke<br />
Word-Leser<br />
Lancom, Hersteller von Netzwerklösungen,<br />
bietet ein<br />
neues System für die Überwachung<br />
mittlerer und großer<br />
Netze an. Der Large Scale Monitor<br />
(LSM) setzt auf Open-<br />
Source-Komponenten und<br />
läuft unter <strong>Linux</strong>.<br />
Das Monitoringsystem eignet<br />
sich laut Lancom für die<br />
Überwachung von 25 bis<br />
1000 Geräten wie WLAN-<br />
Accesspoints, Switches und<br />
Router. Als Benutzerschnittstelle<br />
dient eine Weboberfläche,<br />
die auch für Mobilgeräte<br />
passen soll. Daneben kann die<br />
Software Administratoren per<br />
E-Mail benachrichtigen, die<br />
Auslöser für die Meldungen<br />
sind konfigurierbar.<br />
Die Netzwerkgeräte samt<br />
Status stellt LSM übersichtlich<br />
auf einer Gebäudekarte<br />
oder in einer Ordner- oder<br />
Topologie-Struktur dar. Das<br />
Monitoringsystem kennt außerdem<br />
die Roaming-Historie<br />
für WLAN-Clients an Accesspoints<br />
des Herstellers. Das ist<br />
beispielsweise für Logistikunternehmen<br />
interessant, die<br />
etwa einen Gabelstapler auf<br />
dem Weg durch das Lager verfolgen<br />
möchten.<br />
Außerdem beherrscht LSM<br />
Benutzer-, Rollen- und Rechteverwaltung<br />
und überwacht<br />
auch VPN-Verbindungen. Weitere<br />
Informationen gibt es unter<br />
[http://www.lancom‐systems.<br />
de]. Ein kurzes Video sowie<br />
eine Demo-Installation vermitteln<br />
einen Eindruck des<br />
Systems. Lancom LSM ist in<br />
verschiedenen Paketierungen<br />
sowie als bootfähige <strong>Linux</strong>-<br />
DVD und als VMware-Image<br />
erhältlich. Die Preise beginnen<br />
bei rund 2800 Euro für 25<br />
überwachte Geräte.<br />
Eine Kernkomponente von<br />
LSM ist das Nagios-Addon<br />
Check_mk, wie dessen Autor<br />
Mathias Kettner dem<br />
<strong>Linux</strong>-<strong>Magazin</strong> mitteilte. Viele<br />
der neuen Features, die die<br />
Open-Source-Software in den<br />
vergangenen anderthalb Jahren<br />
gewonnen habe, seien das<br />
Resultat der Entwicklung für<br />
Lancom, lässt der selbstständige<br />
Informatiker wissen. n<br />
Die Lesesoftware „FBReader for<br />
Android“ (vormals FBReaderJ)<br />
ist in Version 1.6.1 erhältlich.<br />
Erstmals kann sie »*.doc«-<br />
Dateien von Microsoft Word<br />
anzeigen. Daneben haben die<br />
Entwickler die Performance<br />
beim Einlesen der Bibliothek<br />
verbessert und ein Problem<br />
mit Buchduplikaten behoben.<br />
Auch gibt es neue Lokalisierungen<br />
für Norwegisch, Serbisch<br />
und Türkisch.<br />
Das Java-Programm für zahlreiche<br />
Android-Versionen ist<br />
unter GPLv2 oder neuer lizenziert.<br />
Weitere Informationen,<br />
der Quelltext sowie ein Download-Link<br />
für die kostenlose<br />
App finden sich unter [http://<br />
www.fbreader.org/FBReaderJ]. n
Kernel 3.6 erschwert Symlink-Angriffe<br />
Der neue stabile <strong>Linux</strong>-Kernel<br />
3.6 beschränkt das Anlegen<br />
von harten und symbolischen<br />
Links und behebt damit eine<br />
ganze Klasse von Sicherheitslücken.<br />
Diese Schwächen<br />
treten auf, wenn ein normaler<br />
Anwender einen symbolischen<br />
Link auf eine Datei<br />
legt, in die er nicht schreiben<br />
darf. Handelt es sich um eine<br />
Systemdatei oder eine temporäre<br />
in »/tmp«, kann es<br />
vorkommen, dass ein Rootprozess<br />
dem Link folgt und<br />
die gewünschte Änderung an<br />
der Datei für einen Angreifer<br />
ausführt.<br />
Um das zu verhindern, folgt<br />
<strong>Linux</strong> 3.6 solchen Links nicht<br />
mehr, wenn sie sich in einem<br />
Verzeichnis wie »/tmp« befinden,<br />
das für alle Benutzer<br />
beschreibbar ist und Berechtigungen<br />
per Sticky-Bit vererbt.<br />
Daneben muss die UID des<br />
Links gleich der des Prozesses<br />
sein oder derselbe Benutzer<br />
Link und Zieldatei besitzen.<br />
Hardlinks darf nur anlegen,<br />
Webconverger, eine <strong>Linux</strong>-<br />
Distribution für den Betrieb<br />
von Webkiosken, ist in Version<br />
15 mit neuen Features<br />
erhältlich. Die neue Release<br />
aktualisiert den Firefox-Browser<br />
auf Version 15.0.1 und repariert<br />
Probleme mit der PDF-<br />
Unterstützung und dem Drucken.<br />
Daneben eignet sich die<br />
Distribution nun auch wieder<br />
für ältere Rechner der i486-<br />
Architektur.<br />
Stolz sind die Entwickler auf<br />
ihren neuen Update-/Upgrade-<br />
Mechanismus. Dieser benutzt<br />
das Versionskontrollsystem<br />
wer auch der Eigentümer der<br />
Zieldatei ist.<br />
Damit beugt der jüngste <strong>Linux</strong>-Kernel<br />
Sicherheitslücken<br />
des Typs „Time of Check to<br />
Time of Use“ vor, insbesondere<br />
der Symlink-Schwachstelle.<br />
Die Diskussion über solche<br />
Vorkehrungen sei alt, es habe<br />
sie bereits im Jahr 1996 gegeben,<br />
schreibt der Entwickler<br />
Kees Cook in seiner Commit-<br />
Nachricht. Die jetzt für das <strong>Linux</strong>-VFS<br />
gewählte Implementierung<br />
stammt von der Distribution<br />
Openwall und dem<br />
Patchset Grsecurity. Daneben<br />
hat der Kernelentwickler Al<br />
Viro noch einige Anregungen<br />
gegeben.<br />
Distributionen wie Openwall<br />
sowie Ubuntu oder Chrome<br />
OS benutzen bereits länger<br />
derartige Link-Beschränkungen.<br />
Diese können zwar Probleme<br />
mit dem At-Daemon<br />
verursachen, die sich aber<br />
beheben lassen, wie das beispielsweise<br />
Ubuntu mit einem<br />
At-Patch getan hat. n<br />
Webconverger 15 aktualisiert sich per Git<br />
Git, um das Dateisystem bei<br />
jedem Booten automatisch<br />
aus dem Internet zu aktualisieren.<br />
Das funktioniert selbstverständlich<br />
nur bei der auf<br />
Festplatte oder USB-Speicher<br />
installierten Version, nicht<br />
beim Livebetrieb von CD.<br />
Git macht auch Rollbacks<br />
möglich, um neu erkannte<br />
Bugs zu beheben. Das Update-<br />
Feature lässt sich auf Wunsch<br />
deaktivieren. Weitere Informationen<br />
gibt es unter [http://<br />
webconverger.org], wo auch das<br />
neue ISO-Image zum Download<br />
bereitsteht.<br />
n<br />
Firefox 16 mit Apps und Kommandozeile<br />
Mozilla hat seinen Open-Source-Browser<br />
Firefox in Version<br />
16 freigegeben. Die neue Release<br />
führt Mozillas Konzept<br />
für Webapps ein: eigenständige<br />
Anwendungen, die mit<br />
Webtechnologien gebaut sind<br />
und online oder offline arbeiten.<br />
Firefox-Anwender können<br />
sie vom Mozilla Marketplace<br />
oder einer beliebigen Website<br />
installieren.<br />
Interessant für Entwickler ist<br />
die neue Firefox-Kommandozeile.<br />
Sie soll den Programmierer<br />
beim Debuggen und<br />
Verbessern von Webanwendungen<br />
unterstützen. Daneben<br />
lassen sich CSS-3-Features<br />
wie Animationen, Übergänge<br />
Neues CMS: Novius OS<br />
Mit Versionsnummer 0.1<br />
stellt sich ein neues Contentmanagement-System<br />
(CMS)<br />
namens Novius OS vor. Die<br />
Vision der Entwickler ist eine<br />
zentrale Verwaltungsstelle für<br />
alle Online-Inhalte. Version<br />
0.1 publiziert statische Seiten<br />
und Blogeinträge, daneben<br />
schickt sie Postings auch an<br />
Twitter und Facebook. HTML<br />
5 und Jquery sorgen für eine<br />
reaktionsfreudige Oberfläche,<br />
die sich beispielsweise beim<br />
und Transformationen nun<br />
ohne Präfix schreiben.<br />
Den Anwendern verspricht<br />
Firefox 16 fließendere Bedienung,<br />
denn dank inkrementeller<br />
Garbage Collection soll<br />
Javascript schneller laufen,<br />
was besonders Animationen<br />
und Spielen zugutekommen<br />
soll. Den neuen Audio-Codec<br />
Opus (siehe „Zahlen und<br />
Trends“) unterstützt Firefox<br />
16 von Haus aus.<br />
Firefox ist mittlerweile in<br />
über 70 Sprachen übersetzt,<br />
zwei kamen jetzt noch dazu.<br />
Version 16 steht für <strong>Linux</strong>,<br />
Windows und Mac OS X zum<br />
Download unter [http://www.<br />
mozilla.org/firefox/] bereit. n<br />
Durchstöbern des Medienarchivs<br />
bewährt.<br />
Der noch bescheidene Funktionsumfang<br />
soll wachsen,<br />
die Roadmap sieht monatliche<br />
Releases vor. Novius OS<br />
verwendet PHP, MySQL und<br />
Fuel PHP. Hinter dem Projekt<br />
steht die französische Firma<br />
Novius, die den Code unter<br />
AGPLv3 veröffentlicht. Informationen<br />
sowie Dateien zum<br />
Download gibt es unter [http://<br />
www.novius‐os.org].<br />
n<br />
Novius OS ist ein junges CMS, hat aber bereits ein schickes Medienarchiv.<br />
News 12/2012<br />
Aktuell<br />
www.linux-magazin.de<br />
7
Aktuell<br />
www.linux-magazin.de News 12/2012<br />
8<br />
Sogo 2.0 integriert Open Change<br />
Das Sogo-Projekt (Scalable<br />
Open Groupware) hat Version<br />
2.0 seiner freien Groupware<br />
veröffentlicht. Das auf<br />
Open Groupware aufbauende<br />
Sogo integriert die freien<br />
Exchange-Bibliotheken von<br />
Open Change, um Outlook-<br />
Clients einzubinden. Mit einer<br />
Kombination aus MAPI, Samba<br />
4, LDAP, SQL und einem<br />
Webserver bietet das Projekt<br />
neben Windows-Unterstützung<br />
und Active-Directory-<br />
Integration auch erweiterten<br />
Support für das auf Apples<br />
Rechnern verbreitete Caldav-<br />
Protokoll. Als funktionierende<br />
Clients geben die Entwickler<br />
jetzt Mozilla Thunderbird und<br />
Lightning, Microsoft Outlook<br />
(2003, 2007, 2010), Apple I-Cal<br />
und RIMs Blackberry an. Ein<br />
Ajax-Webclient steht ebenfalls<br />
zur Verfügung.<br />
Ein Howto beschreibt die Integration<br />
mit Outlook sowie mit<br />
einem externen LDAP-Server<br />
oder Microsofts Active Directory,<br />
alternativ dank Samba<br />
4 auch ohne separaten Verzeichnisdienst.<br />
Zum Download gibt es unter<br />
[http://www.sogo.nu] Sourcecode,<br />
RPMs und Debian-Pakete<br />
sowie einen Funambol-<br />
Konnektor für Sync ML und<br />
ein eigenes Webmin-Modul.<br />
Der Ajax-Webclient von Sogo 2.0 in der Kalenderansicht.<br />
Daneben haben die Entwickler<br />
zahlreiche Bugs gefixt,<br />
Übersetzungen aktualisiert,<br />
Kalender, Aufgaben und Ansichten<br />
verbessert sowie die<br />
Darstellung des Webclients in<br />
Microsofts Internet Explorer 8<br />
und 9 optimiert.<br />
n<br />
Gnome 3.6 verbessert Eingabemethoden und Barrierefreiheit<br />
Slackware 14.0<br />
Das Gnome-Projekt hat Version<br />
3.6 seiner freien Desktopumgebung<br />
veröffentlicht.<br />
Die Software hat Verbesserungen<br />
in vielen Details erfahren.<br />
Dazu gehören das überarbeitete<br />
Message Tray, kleinere<br />
Benachrichtigungsfenster mit<br />
Button zum Schließen sowie<br />
eine Bildschirmsperre mit<br />
Komfortfunktionen. Sie gewährt<br />
trotz Sperrung Zugriff<br />
auf den Lautstärkeregler und<br />
zeigt Benachrichtigungen<br />
an. Die Integration mehrerer<br />
Eingabemethoden hilft unter<br />
anderem beim Schreiben von<br />
chinesischen und japanischen<br />
Zeichen.<br />
Auch bei den Technologien<br />
für die Barrierefreiheit gibt<br />
es Fortschritte: Bei der Bildschirmlupe<br />
lassen sich inverse<br />
Darstellung, Graustufen sowie<br />
Helligkeit und Kontrast einstellen,<br />
der Screenreader Orca<br />
Überarbeitet: Das Message Tray in Gnome 3.6 überdeckt die Bildschirminhalte<br />
nicht mehr, sondern verschiebt sie nach oben.<br />
hat seine Braille-Ausgabe verbessert.<br />
Die Hilfstechnologien<br />
stehen nun standardmäßig<br />
bereit, der Anwender braucht<br />
sie nur mit einem Klick zu<br />
aktivieren.<br />
Erstmals zum Lieferumfang<br />
gehört das Programm Gnome<br />
Boxes. Die GUI-Anwendung<br />
zum Verwalten virtueller Maschinen<br />
bietet verbesserte Suche,<br />
Auswahl und Umbenennen<br />
und kann zudem hängen<br />
gebliebene Instanzen zum<br />
Shutdown zwingen.<br />
Die neue Release verwendet<br />
das GUI-Toolkit GTK+ in Version<br />
3.6, die drei neue Widgets<br />
mitbringt. Daneben erfuhr die<br />
Szenengraph-Bibliothek ein<br />
Update auf Version 1.12 und<br />
Glib trägt die Nummer 2.34.<br />
Gnome ist unter GPL und LG-<br />
PL lizenziert. Version 3.6 ist<br />
im Quellcode, in Binärpaketen<br />
und als Livedistribution<br />
unter [http://www.gnome.org/<br />
getting‐gnome/] erhältlich. n<br />
Die <strong>Linux</strong>-Distribution Slackware<br />
ist in Version 14.0 verfügbar.<br />
Sie steigt auf einen<br />
Kernel aus dem Zweig 3 um,<br />
genauer auf Version 3.2.29,<br />
für die die Kernelentwickler<br />
mindestens zwei weitere Jahre<br />
Support leisten. Für die jüngeren<br />
Kernelversion 3.4.11, 3.5.4<br />
und 3.6-rc4 liefert Slackware<br />
Konfigurationsdateien mit.<br />
Daneben gehören GCC 4.7.1,<br />
Glibc 2.15 und X11R7.7 zum<br />
System. Erstmals ist LLVM/<br />
Clang als alternativer Compiler<br />
mit von der Partie. Als<br />
Desktopumgebungen stehen<br />
KDE 4.8.5 und Xfce 4.10.0 zur<br />
Verfügung. Unter den Anwendungen<br />
finden sich Firefox<br />
15.0.1, Thunderbird 15.0.1<br />
und Gimp 2.8.2.<br />
Weitere Einzelheiten verrät<br />
der Chefentwickler Patrick<br />
Volkerding unter [http://www.<br />
slackware.com], wo auch ISO-<br />
Images der neuen Version bereitstehen.<br />
n
Xen 4.2 unterstützt größere Systeme<br />
Nach rund anderthalbjähriger<br />
Entwicklungszeit ist die<br />
Virtualisierungssoftware Xen<br />
in Version 4.2 erschienen.<br />
Nachdem die Entwickler die<br />
zugrunde liegende Bibliothek<br />
Libxl generalüberholt haben,<br />
löst nun das Kommando<br />
»xl« das vorherige »xend« als<br />
hauptsächlicher Toolstack für<br />
die Verwaltung ab.<br />
Außerdem unterstützt Xen<br />
jetzt wesentlich größere Systeme<br />
mit bis zu 4095 Host-<br />
CPUs und bis zu 512 Gast-<br />
CPUs. Zudem ist es möglich,<br />
automatisch einen CPU-Pool<br />
pro Numa-Node zu bilden<br />
und die VCPUs intelligenter<br />
auf vorhandene Numa-Nodes<br />
zu verteilen. Xen 4.2 unterstützt<br />
nun auch bis zu 5 TByte<br />
Host Memory auf 64-Bit-Plattformen.<br />
Das XSM-Framework hat Verbesserungen<br />
bei Sicherheitsfunktionen<br />
erfahren durch eine<br />
Implementierung des Flux<br />
Advanced Security Kernel<br />
(Flask). Die Performance hat<br />
Xen weiter gesteigert, unter<br />
anderem durch Verbesserungen<br />
beim Paging und beim<br />
Scheduler. Weitere Informationen<br />
sowie den Quelltext gibt<br />
es unter [http://www.xen.org]. n<br />
primeLine<br />
SOLUTIONS<br />
News 12/2012<br />
Aktuell<br />
Ideal für Firewall<br />
oder Monitoring<br />
Anwendungen<br />
wie IPCop & Nagios<br />
www.linux-magazin.de<br />
9<br />
Backdoor in PHP-Myadmin-Download<br />
Ein Download-Mirror des<br />
Sourceforge-Netzwerks hat<br />
Ende September die Software<br />
PHP Myadmin in einer mit einer<br />
Backdoor versehenen Version<br />
verteilt. Es handelt sich<br />
dabei um die Datei »phpMy-<br />
Admin‐3.5.2.2‐all‐languages.<br />
zip«, die rund 400 Benutzer<br />
zwischen dem 22. und 25.<br />
September heruntergeladen<br />
haben.<br />
Der betroffene Server steht<br />
in Korea und hat den Hostnamen<br />
»cdnetworks‐kr‐1«,<br />
Sourceforge hat ihn aus dem<br />
Mirror-Netzwerk entfernt. Die<br />
kompromittierte Version der<br />
Software enthält in der Datei<br />
»server_sync.php« zusätzlichen<br />
PHP-Code, der HTTP-<br />
Post-Daten evaluiert und eine<br />
Installation damit von außen<br />
angreifbar macht.<br />
Das Security-Team des Projekts<br />
stuft die Sicherheitslücke<br />
als kritisch ein. Es empfiehlt<br />
allen Anwendern ihre Installationen<br />
zu überprüfen und<br />
bei Zweifeln neu aus einer<br />
vertrauenswürdigen Quelle<br />
zu installieren.<br />
n<br />
Mod_pagespeed ist einsatzbereit<br />
egino s-Series 13041s-C204<br />
X 1 HE Rackmount Chassis, 4x 2,5“ Hot-Plug Einschub<br />
X 330 Watt High Efficiency (80 Plus Gold) Power Supply<br />
X 1x Intel ® Xeon ® E3-1220V2 Prozessor mit 3.1 GHz<br />
X 8 GB DDR3 1333 MHz ECC unbuffered RAM (max. 32 GB)<br />
X 4x Intel ® 8254L Gbit Ethernet, IPMI 2.0 dedicated LAN<br />
X 1x PCIe 2.0 (x16) über Riser, z.B. für zusätzliche I/O Karte<br />
X 2x 120 GB Intel ® MLC SSD, 500 MB/s read, 480 MB/s write<br />
X RAID Controller optional, Teleskopschienen inklusive<br />
X 3 Jahre Garantie inkl. Komponenten Vorabaustausch<br />
Best-Nr.: 206175<br />
790, 00 €<br />
zzgl. MwSt. und Versand<br />
940, 10 €<br />
inkl. MwSt. zzgl. Versand<br />
Mod_pagespeed, ein Optimierungsmodul<br />
für Apache-Webserver,<br />
steht in stabiler Version<br />
auf [https://developers.google.<br />
com/speed/pagespeed/] zum<br />
Download bereit. Google und<br />
verschiedene US-Hoster haben<br />
das Modul zum Verschlanken<br />
von HTML, CSS,<br />
Javascript und Bildern inzwischen<br />
auf rund 120 000 Websites<br />
getestet. Die Software<br />
liegt als Deb- oder RPM-Paket<br />
sowie im Quellcode vor. n<br />
Intel, das Intel Logo, Xeon, und Xeon Inside sind Marken der Intel Corporation in den USA und anderen Ländern.<br />
Ihr zuverlässiger Server Lieferant für Datacenter,<br />
öffentliche Einrichtungen, Systemhäuser & Reseller.<br />
primeLine Solutions GmbH<br />
Dornenbreite 18a · 32549 Bad Oeynhausen<br />
Tel.: +49 5731 8694-0 · Fax: +49 5731 8694-413<br />
E-Mail: vertrieb@primeline.org<br />
Web: www.primeline-solutions.de<br />
E<br />
EGINO SERVER
Aktuell<br />
www.linux-magazin.de News 12/2012<br />
10<br />
Kurznachrichten<br />
Junkie the Sniffer 2.3: Das Open-Source-Programm dient zur Echtzeit-<br />
Analyse von Netzwerkverkehr. Neu: Ein neues Plugin zeigt die Verteilung<br />
der Paketgrößen, ein zweites das zeitliche Auftreten von Duplikaten. Für<br />
einige Protokolle wie HTTP, SIP, MGCP und FTP gibt es nun Autodiscovery.<br />
Lizenz: AGPLv3 [https://github.com/securactive/junkie]<br />
Phorkie 0.3.1: Die Pastebin für Codeschnipsel ist in PHP umgesetzt. Neu:<br />
Forken von Pastes aus externen Systemen wie Gitorious, Git PHP sowie<br />
Gist.github.com. Anmeldung per Open ID. Lizenz: AGPLv3 [http://<br />
sourceforge.net/p/phorkie/wiki/Home/]<br />
Debian 6.0.6: Die freie <strong>Linux</strong>-Distribution ist für ihr enormes Paketarchiv<br />
bekannt. Neu: Wartungsrelease für den stabilen Zweig Squeeze mit zahlreichen<br />
Sicherheitsupdates. Lizenz: GPL und andere [http://www.debian.<br />
org/mirror/list]<br />
Chicken Scheme 6.0.6: Die Scheme-Implementierung für <strong>Linux</strong>, Windows<br />
und Mac OS X setzt einen Großteil der Spezifikation R5RS um und erzeugt<br />
C-Code. Neu: Der Compiler dokumentiert seine Optimierungen nun in<br />
C-Kommentaren, das Modulsystem erweitert sich um Interfaces und Functors.<br />
Lizenz: BSD [http://www.call‐cc.org]<br />
Spek 0.8: Der Software-Spektrumanalysator untersucht zahlreiche Audioformate<br />
wie etwa Wav, MP3 und Flac. Neu: Die Entwickler haben das<br />
bisher verwendete GUI-Toolkit GTK+ durch Wx Widgets ersetzt. Daneben<br />
darf der Anwender nun die spektrale Leistungsdichte einstellen. Lizenz:<br />
GPLv3 [http://spek‐project.org]<br />
Gstreamer 1.0.0: Das Multimedia-Framework kommt in der Desktopumgebung<br />
Gnome und anderswo zum Einsatz. Neu: Bereinigtes API sowie<br />
Unterstützung für Gobject Introspection. Flexiblere Speicherverwaltung,<br />
die unter anderem für bessere Performance auf ARM-Boards wie dem<br />
Raspberry Pi oder dem Pandaboard sorgen soll. Lizenz: LGPLv2 [http://<br />
gstreamer.freedesktop.org]<br />
GNU Libextractor 1.0.0: Die Bibliothek liest die Metadaten von Dateien,<br />
um deren Dateityp zu ermitteln. Neu: Der Plugin-Mechanismus lässt alle<br />
Plugins in einem eigenen Prozess mit vollem Zugriff auf die untersuchte<br />
Datei laufen. Daneben verwenden viele Plugins nun externe Bibliotheken<br />
wie etwa Libtiff und Libmagic. Lizenz: GPLv3 [http://www.gnu.org/<br />
software/libextractor/]<br />
Slkbuild 0.9: Das Skript baut Slackware-Pakete aus Quellcode und lehnt<br />
sich stark an Makepkg von Arch <strong>Linux</strong> an. Neu: Fertige Vorlagen für Softwarepakete,<br />
die Gconf oder Mateconf verwenden. Daneben löscht das<br />
Skript Reste von Dateien, deren Download gescheitert ist. Lizenz: GPLv2<br />
[http://slkbuild.sourceforge.net]<br />
Parted Magic 2012_09_12: Die Live-CD zum Bearbeiten von Partitionen<br />
steht für i486 und x86_64 zur Verfügung. Neu: Version 0.13.1-git des Tools<br />
Gparted, die einige LVM-Features beherrscht. Dazu gehören das Anlegen,<br />
Prüfen, Vergrößern, Verschieben und auch das Löschen physischer Volumes.<br />
Daneben kann das Programm nun Volume Groups aktivieren und<br />
deaktivieren. Lizenz: GPL und andere [http://partedmagic.com]<br />
Monitorix 2.6.0 überwacht Bind<br />
Cinnamon 1.6<br />
Python 3.3.0 veröffentlicht<br />
Python ist in Version 3.3.0 erhältlich,<br />
die ein rundes Dutzend<br />
Python Enhancement<br />
Proposals (PEP) umsetzt.<br />
Dazu gehören Virtual Environments<br />
(PEP 405), Namespace<br />
Packages (PEP 420),<br />
flexible Repräsentation von<br />
Unicode-Zeichenketten (PEP<br />
Monitorix, eine Open-Source-<br />
Lösung zum Überwachen von<br />
Systemdaten und Diensten,<br />
trägt jetzt die Versionsnummer<br />
2.6.0. Erstmals kann die Software<br />
auch Bind-Nameserver<br />
(ab Version 9.5) überwachen.<br />
Die Anzeige dafür enthält sieben<br />
Graphen, etwa für einund<br />
ausgehende Anfragen<br />
und den Speicherbedarf.<br />
Eine Überarbeitung haben die<br />
Kurven für Festplatten und<br />
Dateisysteme erfahren, seither<br />
können sie eine beliebige<br />
Anzahl von überwachten<br />
Elementen aufnehmen. Für<br />
Debian und Ubuntu gibt es ein<br />
neues Init-Skript, zum ersten<br />
Mal eignet sich die Software<br />
auch für das Betriebssystem<br />
Net BSD.<br />
Monitorix ist in Perl geschrieben<br />
und besteht aus einem<br />
Daemon sowie einem CGI-<br />
Skript für die Weboberfläche.<br />
Das Tool überwacht Systemdaten<br />
wie Speicher, Prozesse,<br />
Temperatur und Netzwerk-<br />
Traffic sowie Dienste wie<br />
SSH, Samba, IMAP, POP3,<br />
verschiedene Webserver und<br />
MySQL.<br />
Weitere Informationen gibt<br />
die Homepage [http://www.<br />
monitorix.org]. Dort findet sich<br />
Version 2.6.0 als Quelltext-<br />
Tarball sowie in Paketen für<br />
Red-Hat-basierte Distributionen,<br />
als Gentoo-Ebuild und<br />
als BSD-Port. Die Software ist<br />
unter GPLv2 lizenziert. n<br />
393) sowie ein Python Launcher<br />
für Windows (PEP 397).<br />
Die Python-Syntax erhält den<br />
neuen Ausdruck »yield from«<br />
zur Generator-Delegation.<br />
Daneben ist für String-Objekte<br />
die U-Notation für Unicode<br />
wieder erlaubt. Neue<br />
Bibliotheksmodule ermöglichen<br />
LZMA-Komprimierung<br />
(»lzma«), liefern High-Level-<br />
Objekte für IP-Adressen und<br />
Netzmasken (»ipadress«) oder<br />
Mock-Objekte für Unit-Tests<br />
(»unittest.mock«). Ausführliche<br />
Informationen gibt es auf<br />
der offiziellen Website [http://<br />
www.python.org]. <br />
n<br />
Cinnamon, eine alternative<br />
Desktopumgebung auf Basis<br />
von Gnome, ist in Version 1.6<br />
verfügbar. Die neue Release<br />
enthält erstmals die Eigenentwicklung<br />
Nemo, die den<br />
Gnome-Dateimanager Nautilus<br />
ersetzt.<br />
Der Anwender kann außerdem<br />
seinen selbst definierten<br />
Workspaces Namen geben.<br />
Ein neues Applet namens<br />
Window Quick-List zeigt alle<br />
Fenster aller Workspaces<br />
in einer Übersicht. Daneben<br />
lässt sich nun der Umschalter<br />
zwischen den Fenstern<br />
konfigurieren, der sich mit<br />
[Alt]+[Tab] aufrufen lässt.<br />
Auf Wunsch zeigt er Icons,<br />
Thumbnails, <strong>Vorschau</strong>en oder<br />
eine Kombination.<br />
Cinnamon steht unter GPLv2,<br />
der aktuelle Quelltext ist unter<br />
[https://github.com/linuxmint/<br />
Cinnamon] zu haben. Näheres<br />
zu Nemo zeigt [http://cinnamon.<br />
linuxmint.com/?p=198]. (ake/jcb/<br />
kki/mfe/mhu) <br />
n
Zahlen & Trends<br />
Zahlen & Trends 12/2012<br />
Aktuell<br />
Open Office für Leipzig, Libre Office für München<br />
www.linux-magazin.de<br />
11<br />
Eine feste Größe im Jahr der<br />
Libre-Office-Anwender und<br />
‐Entwickler soll das Libre-Office-Hackfest<br />
werden, das die<br />
Document Foundation und<br />
das Libre-Office-Team Ende<br />
November in München veranstalten.<br />
Auch Mitglieder der<br />
Debian-Community sind mit<br />
von der Partie und machen<br />
Jagd auf Bugs.<br />
Wie bereits im Vorfeld bekannt<br />
wurde, wird der Gastgeber Limux<br />
(Münchens <strong>Linux</strong>-Projekt)<br />
dabei mit gutem Beispiel<br />
vorangehen und offiziell den<br />
nächsten Umstieg verkünden:<br />
Die bayerische Landeshauptstadt<br />
stellt nach Jahren des<br />
Open-Office-Einsatzes auf<br />
Libre Office um.<br />
Außerdem meldet das Limux-<br />
Blog, dass sich die Stadtverwaltung<br />
Leipzig endgültig für<br />
den Umstieg auf Open Office<br />
entschieden und bereits mit<br />
der Migration begonnen habe.<br />
Innerhalb nur weniger Monate<br />
wurden dort mehr als 90 Prozent<br />
der Desktops auf Open<br />
Office migriert. Seit den ersten<br />
Ankündigungen im Frühjahr<br />
2012 hat die Verwaltung der<br />
sächsischen 500 000-Einwohner-Stadt<br />
bereits auf 3900 der<br />
4200 Desktoprechner Open<br />
Office installiert und nutzt es<br />
jetzt als Standard für Bürosoftware.<br />
Bei einem Besuch in der bayerischen<br />
Landeshauptstadt<br />
trafen sich im Oktober die<br />
Verantwortlichen der beiden<br />
Kommunen zum Erfahrungsaustausch.<br />
Kirsten Böge, Leiterin<br />
Kommunikation beim<br />
Projekt Limux, zitiert unter<br />
[http://www.it-muenchen-blog.de]<br />
den IT-Koordinator der Stadt<br />
Leipzig, Hannes Kästner, mit<br />
den Worten: „Das ist das erste<br />
große Open-Source-Projekt in<br />
der Stadtverwaltung Leipzig.“<br />
Ziel sei es, die Abhängigkeit<br />
von proprietärer Software zu<br />
verringern.<br />
n<br />
Vincent Untz leitet Open Suse Board<br />
Pre-Bootloader für Secure Boot<br />
Das Unternehmen Suse hat<br />
den Open-Source-Entwickler<br />
Vincent Untz zum Vorsitzenden<br />
des Open Suse Board ernannt.<br />
Der Suse-Angestellte<br />
ist durch seine Arbeit an der<br />
Desktopumgebung Gnome bekannt<br />
und hat als Vorsitzender<br />
der Gnome Foundation bereits<br />
Leitungserfahrung gesammelt.<br />
Nach seinem Engagement für<br />
den freien Desktop arbeitet er<br />
seit Juni 2012 für Suse an der<br />
Cloud-Computing-Architektur<br />
Open Stack.<br />
Ralf Flaxa, Suses VP Engineering,<br />
begründet die Entscheidung<br />
für Untz: „Wir haben jemanden<br />
gesucht, dem sowohl<br />
[das Unternehmen] Suse wie<br />
auch die Community Respekt<br />
und Vertrauen entgegenbringen.“<br />
Die Aufgabe des Open<br />
Suse Board ist es, als zentrale<br />
Kontaktstelle zum Projekt<br />
zu dienen, die Interessen der<br />
Community an den Sponsor<br />
Suse zu übermitteln, den Entscheidungsprozess<br />
zu unterstützen<br />
und bei Konflikten<br />
zu vermitteln. Informationen<br />
über das Gremium gibt es<br />
unter [http://de.opensuse.org/<br />
openSUSE:Rat].<br />
n<br />
Vincent Untz, der neue Vorsitzende<br />
des Open Suse Board, zeigt sein von<br />
vielen Open-Source-Konferenzen<br />
bekanntes Gesicht.<br />
© Frédéric Crozat<br />
Um das Secure-Boot-Problem<br />
auf für Windows 8 zertifizierten<br />
Rechnern zu lösen, will<br />
die <strong>Linux</strong> Foundation von<br />
Microsoft einen Schlüssel<br />
erwerben, um einen hauseigenen<br />
Pre-Bootloader zu signieren.<br />
Dieser startet dann<br />
<strong>Linux</strong> oder andere freie Betriebssysteme.<br />
James Bottomley, Vorsitzender<br />
des technischen Beirats der<br />
<strong>Linux</strong> Foundation, erklärt das<br />
Vorgehen unter anderem unter<br />
[http://www.linuxfoundation.<br />
org/blog]. Demnach lädt der<br />
von Microsoft signierte Pre-<br />
Bootloader ohne weitere Signaturenchecks<br />
einen Bootloader<br />
für <strong>Linux</strong> oder andere<br />
Systeme. Entwickler von<br />
Distributionen nutzen den<br />
Pre-Bootloader also, um ihre<br />
<strong>Linux</strong>-Installer oder Liveversionen<br />
zu erstellen, die dann<br />
auch auf mit UEFI Secure Boot<br />
gesicherten Rechnern booten<br />
und laufen.<br />
Es werde eine Weile dauern,<br />
schreibt Bottomley, bis<br />
die <strong>Linux</strong> Foundation von<br />
Microsoft den Signaturschlüssel<br />
erhält. Danach will sie den<br />
Loader für jeden zum Download<br />
bereitstellen. Der Quellcode<br />
ist bereits als »efitools.<br />
git« in Bottomleys Repository<br />
auf Kernel.org zu finden.<br />
Auch einige Distributionen<br />
haben sich darüber bereits<br />
den Kopf zerbrochen – etwa<br />
Fedora. Ihre Vorgehensweisen<br />
ähneln dem Weg der <strong>Linux</strong><br />
Foundation, nur dass sie auf<br />
einen anderen Pre-Bootloader<br />
namens Shim setzen. Der ist<br />
nicht nur selbst signiert, sondern<br />
verlangt das auch von<br />
dem Bootloader, den er startet,<br />
also zum Beispiel Grub.n
Aktuell<br />
www.linux-magazin.de Zahlen & Trends 12/2012<br />
12<br />
Webplatform.org dokumentiert Webtechnologien<br />
Große Sponsoren, große Erwartungen: Webplatform.org soll Dokumente über alle<br />
Webtechnologien an einem Ort bündeln.<br />
Zusammen mit Industrie größen<br />
wie Adobe, Facebook,<br />
Google, Mozilla und Microsoft<br />
hat das World Wide Web Consortium<br />
(W3C) die Alphaversion<br />
der Site [http://www.<br />
webplatform.org] veröffentlicht.<br />
Sie soll sich zur zentralen Informationsstelle<br />
für Webtechnologien<br />
entwickeln.<br />
Die Seite ist derzeit mit einem<br />
Grundstock an Informationen<br />
zu HTML 5, CSS, SVG,<br />
Canvas, Video und Audio im<br />
Web, Web GL und Indexed DB<br />
ausgestattet. Begleitet werden<br />
die Informationen von<br />
Blog, Forum, Tutorials und<br />
IRC-Chat. Nach den Vorstellungen<br />
der Initiatoren kann<br />
sich jedermann an der Informationssammlung<br />
beteiligen,<br />
weshalb die Website auch ein<br />
Wiki enthält. Die Inhalte stehen<br />
unter freien Lizenzen wie<br />
etwa Creative Commons (Attribution,<br />
Non Commercial,<br />
Share Alike 2.5). Die Seite<br />
steht derzeit nur in englischer<br />
Sprache bereit, Lokalisierungen<br />
sind geplant.<br />
Das W3C betreut Webplatform.org<br />
im Auftrag der Mitglieder.<br />
Der WWW-Erfinder<br />
und W3C-Direktor Tim Berners-Lee<br />
sieht die Website als<br />
„ehrgeiziges Projekt, in dem<br />
alle, die sich für das Web engagieren,<br />
Wissen miteinander<br />
teilen und einander helfen“.<br />
Dazu hätten alle Beteiligten<br />
etwas beizutragen: Designer,<br />
Entwickler, Browser- und<br />
Tool-Hersteller.<br />
n<br />
Freiburg: Rückkehr zu Microsoft Office?<br />
Die Stadt Freiburg im Breisgau<br />
wird seit Jahren zu den<br />
Kommunen gezählt, die Open<br />
Office anwenden. Ein offener<br />
Brief der Open Source<br />
Business Alliance [http://www.<br />
osb‐alliance.com] vermutete im<br />
September jedoch Pläne, dort<br />
wieder Microsoft Office einzuführen.<br />
Grundlage der neuen Ausrichtung<br />
sei laut OSB Alliance<br />
„ein extern angefertigtes,<br />
unter Verschluss gehaltenes<br />
Gutachten“. Daneben schreibt<br />
die Organisation, die sich für<br />
Open Source in Wirtschaft<br />
und Verwaltung einsetzt: „Die<br />
für die Umstellung benötigten<br />
Budgets sind – soweit uns bekannt<br />
– bereits genehmigt und<br />
Mitarbeiter werden über die<br />
bevorstehende, erneute Umstellung<br />
informiert.“<br />
Das Schreiben kritisiert, dass<br />
die Verwaltung sich offenbar<br />
ohne Diskussion dem Gemeinderatsbeschluss<br />
von 2007 für<br />
das freie Office-Format ODF<br />
widersetzt. Der offene Brief<br />
endet mit zwei Fragen an<br />
die Kommune: Warum das<br />
Gutachten nicht öffentlich<br />
gemacht werde und wie eine<br />
Umstellung auf Microsoft Office<br />
zum Beschluss zugunsten<br />
des Open Document Format<br />
passe.<br />
Neben Peter Ganten und Holger<br />
Dyroff aus dem Vorstand<br />
der Open Source Business Alliance<br />
haben den Brief zudem<br />
Matthias Kirschner von der<br />
Free Software Foundation Europe<br />
und Marco Schulze vom<br />
Bundesverband Informationsund<br />
Kommunikationstechnologie<br />
unterzeichnet.<br />
Auf Anfrage des <strong>Linux</strong>-<strong>Magazin</strong>s<br />
erklärte die Leiterin des<br />
Freiburger Pressereferats, das<br />
Gutachten „empfiehlt eine<br />
Rückkehr zu MS Office, allerdings<br />
nicht generell“. Sie<br />
betont zudem: „Das Gutachten<br />
geht umfassend um die<br />
IT in der Stadtverwaltung, die<br />
Fragen nach Open Office sind<br />
dabei ein Aspekt von sehr<br />
vielen.“<br />
Wer das Gutachten erstellt hat,<br />
verrät die Stadt aber nicht. Es<br />
wurde intern im Mai präsentiert.<br />
Derzeit seien städtische<br />
Ämter und Dienststellen so-<br />
Opus: Freier Audio-Codec von der IETF<br />
Die Internet Engineering Task<br />
Force (IETF) hat einen neuen<br />
Audio-Codec namens Opus<br />
verabschiedet, der sich lizenzfrei<br />
implementieren lässt. Der<br />
in RFC 6716 festgelegte Standard<br />
soll sich für Sprache und<br />
Musik sowie gleichermaßen<br />
für die Archivierung und das<br />
Streaming von Audiodaten<br />
eignen. Web RTC, ein Standard<br />
für Echtzeitkommunikation<br />
per Web, schreibt Opus<br />
wie die Personalvertretung zu<br />
Stellungnahmen aufgefordert.<br />
Im November entscheidet der<br />
Gemeinderat, dann sollen<br />
die Entschlussvorlagen zur<br />
Sache öffentlich im Online-<br />
Ratsinformationssystem unter<br />
[https://freiburg.more‐rubin1.<br />
de] nachzulesen sein. n<br />
als einen der Pflicht-Codecs<br />
vor. Opus führt unter [http://<br />
opus‐codec.org] eine Website<br />
mit weiteren Informationen.<br />
Dort gibt es auch den Quelltext<br />
der Referenzimplementierung<br />
unter revidierter BSD-<br />
Lizenz.<br />
Laut dem involvierten Projekt<br />
Xiph.org findet Opus bereits<br />
Eingang in die Entwicklung<br />
von Gstreamer, Ffmpeg und<br />
weiterer freier Software. n
KDE will Anwender beteiligen<br />
Das KDE-Projekt hat eine User<br />
Working Group ins Leben gerufen,<br />
um die Kommunikation<br />
zwischen Anwendern und<br />
Entwicklern zu verbessern.<br />
Zu diesem Zweck halten die<br />
Organisatoren öffentlich Meetings<br />
per Internet ab, jüngst<br />
per Google Hangout. Die Mitschriften<br />
sind unter [http://uwg.<br />
kde.org] nachzulesen.<br />
Zudem findet sich dort ein<br />
elektronischer Fragebogen,<br />
der sich ohne Registrierung<br />
ausfüllen lässt. Die Macher<br />
fragen auch nach der Akzeptanz<br />
von Mailinglisten, Bugtrackern<br />
und Foren – den bisherigen<br />
Kommunikationswegen<br />
zwischen KDE-Entwicklern<br />
und ‐Anwendern.<br />
Außerdem plant die User Working<br />
Group eine Anwendervertretung<br />
namens User Panel<br />
einzuführen. Interessierte<br />
könne ihre E-Mail-Adresse auf<br />
den Seiten der Arbeitsgruppe<br />
hinterlassen.<br />
n<br />
primeLine<br />
SOLUTIONS<br />
High Performance<br />
Zahlen & Trends 12/2012<br />
Aktuell<br />
File/DB/Application Server<br />
mit LSI MegaRAID FastPath<br />
für ultraschnelles SSD RAID<br />
www.linux-magazin.de<br />
13<br />
Red Hats Umsatz gewachsen<br />
Das Unternehmen Red Hat hat<br />
Zahlen für das zweite Quartal<br />
2013 vorgelegt, das für die USamerikanische<br />
Firma am 31.<br />
August 2012 endete.<br />
Mit einem Umsatz von 323<br />
Millionen US-Dollar verzeichnet<br />
das <strong>Linux</strong>-Unternehmen<br />
ein Wachstum von 15 Prozent<br />
gegenüber dem Vorjahresquartal.<br />
Von dieser Summe<br />
entfallen 279 Millionen auf<br />
die Software-Subskriptionen,<br />
17 Prozent mehr als im Vorjahr.<br />
Stärker noch stieg der<br />
operative Cashflow: Mit 104<br />
Millionen waren es 35 Prozent<br />
mehr als im Vorjahresquartal.<br />
Der Nettogewinn betrug 35<br />
Millionen US-Dollar.<br />
CEO Jim Whitehurst sieht<br />
den Umsatzzuwachs durch<br />
die starke Nachfrage nach<br />
den Open-Source-Produkten<br />
seines Unternehmens bedingt.<br />
Sie böten den Kunden<br />
Flexibilität, Innovation und<br />
Skalierbarkeit. Im September<br />
hatte das Wirtschaftsmagazin<br />
„Forbes“ Red Hat auf Platz<br />
vier der innovativsten Unternehmen<br />
weltweit gesetzt. n<br />
egino s-Series 23082s-C602<br />
X 2 HE Rackmount, 8x 3,5“ Hot-Plug<br />
X 740 Watt redundant 80 Plus Platinum<br />
X 2x Intel ® Xeon ® E5-2620 Prozessor<br />
(insgesammt 12 Cores mit je 2.0 GHz)<br />
X 64 GB DDR3 1333 MHz ECC Reg. RAM (max. 512 GB)<br />
X 2x Intel ® i250 Gbit Ethernet, IPMI 2.0 dedicated LAN<br />
X LSI MegaRAID 9271-8i Controller, 6 Gbit/s, PCIe 3.0,<br />
1 GB DDR3 inkl. Cache Protection, FastPath Software<br />
X 4x 180 GB Intel ® MLC SSD, 4x 1.0 TB Toshiba SAS (24x7)<br />
X 3 Jahre Garantie inkl. Komponenten Vorabaustausch<br />
Best-Nr.: 206174<br />
Zoll-Apps nicht als Open Source<br />
Ist eine Ware zollpflichtig<br />
oder nicht? Diese Frage klärt<br />
eine Smartphone-App, die das<br />
bundesdeutsche Finanzministerium<br />
(BMF) veröffentlicht<br />
hat. Die mit Steuergeldern<br />
entwickelte Anwendung soll<br />
aber nicht als Open-Source<br />
freigegeben werden.<br />
Gegenüber „Joinup“, einem<br />
Portal der Europäischen Kommission,<br />
sagte ein Sprecher<br />
des Ministeriums, man gebe<br />
die Software wie auch die anderen<br />
beiden vom deutschen<br />
Finanzministerium entwickelten<br />
Apps gerne an andere<br />
interessierte Stellen weiter,<br />
werde sie jedoch nicht als<br />
Open Source veröffentlichen<br />
– „weil der Fokus der App nur<br />
auf Deutschland“ liege. n<br />
3690, 00 €<br />
zzgl. MwSt. und Versand<br />
Ihr zuverlässiger Server Lieferant für Datacenter,<br />
öffentliche Einrichtungen, Systemhäuser & Reseller.<br />
primeLine Solutions GmbH<br />
Dornenbreite 18a · 32549 Bad Oeynhausen<br />
Tel.: +49 5731 8694-0 · Fax: +49 5731 8694-413<br />
E-Mail: vertrieb@primeline.org<br />
Web: www.primeline-solutions.de<br />
4391, 10 €<br />
inkl. MwSt. zzgl. Versand<br />
Intel, das Intel Logo, Xeon, und Xeon Inside sind Marken der Intel Corporation in den USA und anderen Ländern.<br />
E<br />
EGINO SERVER
Aktuell<br />
www.linux-magazin.de Zahlen & Trends 12/2012<br />
14<br />
Open Stack Foundation gegründet<br />
Das Open-Stack-Projekt hat<br />
eine Stiftung ins Leben gerufen.<br />
Die Open Stack Foundation<br />
[http://www.openstack.<br />
org] hat nun ihre Arbeit aufgenommen<br />
und ist finanziell<br />
gut gepolstert.<br />
Die neue Stiftung will sich<br />
für die Verbreitung und Förderung<br />
des Cloud-Framework<br />
einsetzen und hat bereits 10<br />
Millionen US-Dollar von ihren<br />
Mitgliedern eingesammelt.<br />
Zu den Mitgliedern mit<br />
Platin-Status gehören – neben<br />
Canonical, das Open Stack im<br />
großen Stil einsetzt – weitere<br />
bekannte Namen wie AT&T,<br />
HP, IBM, Nebula, Rackspace,<br />
Red Hat sowie Suse, das mit<br />
Alan Clark auch den Vorstand<br />
der Stiftung stellt.<br />
Daneben hat die Stiftung 13<br />
Gold-Sponsoren sowie 5000<br />
unabhängige Mitglieder, die<br />
sich an der Stiftung beteiligen.<br />
Die Individuen sowie die<br />
Gold- und Platin-Sponsoren<br />
stellen jeweils zu einem Drittel<br />
die Mitglieder des Verwaltungsrates.<br />
Außerdem gibt es<br />
noch ein technisches Komitee,<br />
zusätzlich soll Tim Bell vom<br />
CERN ein Benutzerkomitee<br />
ins Leben rufen, das unter<br />
anderem aus Nutzern verschiedener<br />
Bereiche (Wissenschaft,<br />
Unternehmen, Diensteanbieter)<br />
bestehen soll. n<br />
Die Open-Stack-Board-Members<br />
Jonathan Bryce und Alan Clark (links)<br />
auf der Susecon in Orlando.<br />
Univention Absolventenpreis 2013<br />
Ceph: Finanzspritze von Shuttleworth<br />
Das Bremer <strong>Linux</strong>-Unternehmen<br />
Univention hat den Bewerbungszeitraum<br />
für seinen<br />
Absolventenpreis 2013 eröffnet,<br />
der Abschlussarbeiten zu<br />
<strong>Linux</strong>- und Open-Source-Themen<br />
prämiert. Teilnehmen<br />
können Autoren solcher Diplom-,<br />
Master- und Bachelor-<br />
Arbeiten an Fachhochschulen<br />
oder Hochschulen, die innerhalb<br />
der Jahre 2011, 2012<br />
oder Anfang 2013 beurteilt<br />
wurden.<br />
Der Preis ist interdisziplinär<br />
konzipiert, neben der Informatik<br />
können die Beiträge<br />
also auch aus anderen Fächern<br />
stammen, wenn sie praxisnah<br />
und innovativ den Einsatz von<br />
Open-Source-Software untersuchen<br />
und ihn verbessern<br />
helfen. Die besten Arbeiten<br />
wählt eine unabhängige Expertenjury<br />
aus, der auch der<br />
<strong>Linux</strong>-<strong>Magazin</strong>-Chefredakteur<br />
Jan Kleinert angehört.<br />
Die drei Bestplatzierten erhalten<br />
2000, 1000 beziehungsweise<br />
500 Euro als Prämie.<br />
Die Verleihung der Preise<br />
findet auf dem <strong>Linux</strong>tag 2013<br />
in Berlin statt. Interessierte<br />
Absolventen können sich auf<br />
der Homepage [http://www.<br />
absolventenpreis.de] informieren.<br />
Die Bewerbungen können<br />
sie ab sofort bis zum 17.<br />
Februar 2013 per E-Mail einreichen.<br />
n<br />
Absolventenpreis: 2012 belegte Dominik Leibenger (rechts) mit seiner Masterarbeit<br />
„Vertrauliche Versionsverwaltung mit Subversion“ den zweiten Platz.<br />
Wie die Firma Inktank bekannt<br />
gibt, beteiligt sich<br />
Ubuntu-Gründer Mark Shuttleworth<br />
mit einer Million US-<br />
Dollar an dem Unternehmen.<br />
Inktank wirkt maßgeblich an<br />
der Entwicklung des verteilten<br />
Dateisystems Ceph mit<br />
und bietet kommerziellen<br />
Landscape soll 40 000 Rechner verwalten<br />
Support dafür an. Gegründet<br />
wurde Inktank von Sage Weil,<br />
der das Dateisystem im Rahmen<br />
seiner Doktorarbeit entwickelt<br />
hat. Ceph bildet auch<br />
das Storage-Subsystem für das<br />
Cloud-Computing-Framework<br />
Open Stack in neueren Ubuntu-Versionen.<br />
n<br />
Eine unabhängige Studie von<br />
Enterprise Management Associates<br />
stellt Canonicals Managementsoftware<br />
Landscape<br />
ein hervorragendes Zeugnis<br />
aus: Sie behauptet, die Software<br />
könne die Kosten einer<br />
IT-Abteilung um zwei Drittel<br />
senken.<br />
Einen Return of Investment<br />
(ROI) von mehr als 1000 Prozent<br />
in fünf Jahren verspricht<br />
die Studie, wenn ein Unternehmen<br />
1000 Ubuntu-Clients<br />
einsetze und diese mit Landscape<br />
verwalte. Das werde<br />
möglich, weil ein Admin mit<br />
Landscape problemlos große<br />
Zahlen von Rechner verwalten<br />
könne, schreibt Canonical<br />
in einer Pressemitteilung –<br />
konkret bis zu 40 000.<br />
Zudem kündigt Canonical<br />
Updates an. Dank der neuen<br />
und verbesserten Funktionen<br />
erfülle man die Sicherheitsstandards<br />
von Kreditkarteninstituten<br />
und Regierungen (PCI<br />
DSS, HIPAA/Hitech, Sox).<br />
Zentralisierte Werkzeuge würden<br />
dabei helfen, Updates für<br />
die Server einzuspielen und<br />
Compliance Reports für alle<br />
Elemente der Infrastruktur<br />
zu erstellen. Per API ließen<br />
sich Puppet, Nagios, Ticket-<br />
Systeme oder Admin-Skripte<br />
anbinden.<br />
n
KDE veröffentlicht Grundsatzpapier<br />
Das KDE-Manifest solle nicht<br />
die Arbeitsweise der KDE-<br />
Entwickler und des KDE e.V.<br />
verändern, schreibt das Projekt<br />
in einer Pressemitteilung.<br />
Vielmehr wollen die Initiatoren<br />
definieren, „wie sich die<br />
KDE-Community selbst sieht“.<br />
Das Manifest werde sich „über<br />
die Zeit, in der KDE reifen und<br />
wachsen wird“ ebenfalls verändern,<br />
es will verständlich<br />
machen, warum sich die Beteiligten<br />
engagieren.<br />
„Was uns zusammenhält, sind<br />
bestimmte Werte und deren<br />
praktische Umsetzung, ohne<br />
Rücksicht auf Personen, deren<br />
Hintergründe oder Fähigkeiten,<br />
die sie mitbringen“, steht<br />
im zugehörigen Blogpost.<br />
Das Manifest selbst ist erstaunlich<br />
kurz. Zunächst heißt es:<br />
„Wir sind eine Gemeinschaft<br />
von Technologen, Designern,<br />
Autoren und Engagierten, die<br />
daran arbeiten, mit unserer<br />
Software Freiheit für alle Menschen<br />
zu sichern.“<br />
Danach fährt es mit einer Beschreibung<br />
der sechs wichtigsten<br />
Werte des KDE-Projekts<br />
fort: Open Governance, freie<br />
Software, Offenheit für jeden,<br />
Innovation, gemeinsames Eigentum<br />
und End-User-Fokus.<br />
Auf den folgenden Seiten nehmen<br />
sich die Autoren mehr<br />
Platz, um die Prinzipien und<br />
den Nutzen darzulegen. „Auf<br />
dem Weg zu unseren Zielen<br />
halten wir es für essenziell,<br />
Das KDE-Manifest schreibt Offenheit und Innovation groß.<br />
diese Punkte zu definieren<br />
und einzuhalten“, schließt<br />
das Manifest, nachzulesen<br />
unter [http:manifesto.kde.org].n<br />
Zahlen & Trends 12/2012<br />
Aktuell<br />
www.linux-magazin.de<br />
15<br />
Blue Spice aus der Deutschen Wolke<br />
<strong>Linux</strong>-Server<br />
Das Administrationshandbuch<br />
Das Komplettpaket<br />
LPIC-1 & LPIC-2<br />
Die Deutsche Wolke wächst:<br />
Das Cloudprojekt, das zum<br />
Ziel hat, eine dem deutschen<br />
Datenschutz entsprechende<br />
Public Cloud aufzubauen, hat<br />
nach Agorum (DMS), dem<br />
CRM Helium V, dem Cloudspeicher<br />
Own Cloud und der<br />
Managementsuite Open QRM<br />
jetzt auch das Enterprise-Wiki<br />
Blue Spice im Angebot.<br />
Bisher gab es die Software nur<br />
als On-Premise-Lösung, doch<br />
der Hersteller Hallowelt bietet<br />
ab sofort die Dienste der Deutschen<br />
Wolke an. Preise und<br />
ein Datenblatt gibt es unter<br />
[http://www.blue‐spice.org/<br />
de/service/cloud/deutsche‐wolke/].<br />
Das <strong>Linux</strong>-<strong>Magazin</strong> hat Blue<br />
Spice in der Ausgabe 09/11<br />
besprochen.<br />
n<br />
948 S., 2. Auflage 2012, 49,90 €<br />
» www.GalileoComputing.de/3051<br />
545 S. und 554 S., 2012, mit 2 DVDs, 59,90 €<br />
» www.GalileoComputing.de/2895<br />
Wissen, wie´s geht.<br />
Spenden für Ubuntu<br />
Ubuntu 12.04 LTS<br />
Das umfassende Handbuch<br />
www.GalileoComputing.de<br />
GIMP 2.8<br />
Wer Ubuntu für den Desktop<br />
herunterlädt, bekommt seit<br />
Oktober ein Spendenformular<br />
zu sehen. Entrichtet der Besucher<br />
freiwillig einen Obolus,<br />
kann er dort auch einen<br />
Verwendungszweck für seine<br />
Spende wählen – von verbesserter<br />
Spiele-Unterstützung<br />
bis zur Zusammenarbeit mit<br />
dem Debian-Projekt.<br />
„Ubuntu bleibt auch in Zukunft<br />
kostenlos“, betont das<br />
Blog des Herstellers Canonical.<br />
Man wolle es den Benutzern<br />
nur leichter machen, Ubuntu<br />
finanziell zu unterstützen.<br />
Wer spenden will, braucht<br />
einen Paypal-Account, andere<br />
Zahlungsarten sind zurzeit<br />
nicht im Angebot. (ake/kki/<br />
mfe/ofr/mhu)<br />
n<br />
1.023 S., 7. Auflage 2012, mit DVD, 39,90 €<br />
» www.GalileoComputing.de/3151<br />
947 S., 2012, komplett in Farbe, mit DVD, 39,90 €<br />
» www.GalileoDesign.de/2548<br />
Wissen, wie’s geht.
Aktuell<br />
www.linux-magazin.de Kernel-News 12/2012<br />
16<br />
Zacks Kernel-News<br />
Überarbeitetes Subsystem für Pulsweiten-Modulation<br />
Thierry Reding hat das Subsystem<br />
für die Pulsweiten-Modulation<br />
(PWM) überarbeitet.<br />
Es moduliert die Länge von<br />
Rechteckpulsen, um beispielsweise<br />
die Stärke des Ausgangssignals<br />
zu steuern. Das<br />
kommt unter anderem bei der<br />
Steuerung von Computerlüftern<br />
und der Hintergrundbeleuchtung<br />
zum Einsatz.<br />
Thierrys Arbeit ersetzt das alte,<br />
unflexible API durch ein<br />
generisches Subsystem, das<br />
Unterstützung für eine Vielzahl<br />
von Treibern bietet. Nach<br />
seiner Aussage befand sich<br />
der Code bereits seit eineinhalb<br />
Jahren in Entwicklung<br />
und es waren auch schon<br />
einige Treiber auf das neue<br />
API portiert. Die Zeit war also<br />
gekommen, das neue PWN in<br />
Kernel 3.6 zu bringen.<br />
Linus Torvalds hatte am<br />
Code nichts auszusetzen,<br />
dafür allerdings an der Art,<br />
wie Thierry ihn eingereicht<br />
hat. Zunächst verlangte Linus<br />
„Signed‐off‐by“-Zeilen<br />
von den Entwicklern, die mit<br />
dem Subsystem in Zukunft<br />
arbeiten werden. Das größere<br />
Problem: Thierry war nie Teil<br />
des Web of Trust von GPG-<br />
Schlüsseln geworden, das die<br />
Kernelentwickler seit dem<br />
Einbruch in die Kernel-Server<br />
Das neue PWM-Subsystem macht es leichter, Treiber für die Controller von ARM-<br />
Systemen wie Nvidias Tegra zu schreiben.<br />
© Nvidia.de<br />
im August 2011 aufgebaut haben.<br />
Seitdem gab es weltweit<br />
Keysigning-Partys, auf denen<br />
sie ihre Identität überprüften<br />
und gegenseitig ihre Schlüssel<br />
signierten. Thierry, bei<br />
einer Firma für Medizin- und<br />
Luftfahrttechnik in Hamburg<br />
beschäftigt, kannte jedoch<br />
keine Kernelentwickler in<br />
seiner Nähe, die seinen GPG-<br />
Schlüssel hätten unterschreiben<br />
können.<br />
Das änderte sich schnell, als<br />
sein Patch auftauchte: Auf<br />
der Mailingliste meldeten sich<br />
viele PWM-Anwender, die ihr<br />
„Signed off by“ anboten. Daneben<br />
signierte Sebastian Andrzej<br />
Siewior von Linutronix<br />
Thierrys Schlüssel.<br />
Am Ende wartete Linus doch<br />
nicht auf die GPG-Signatur.<br />
Schließlich hat eine lange Liste<br />
von Entwicklern den Code<br />
gutgeheißen. Dazu gehört<br />
Arnd Bergmann, der schrieb:<br />
„Ein volles Ack für das neue<br />
Subsystem. Es verwendet die<br />
gleichen Interface-Deklarationen<br />
wie die bisherigen PWM-<br />
Treiber, daher ändert sich hier<br />
erst einmal nichts, lässt uns<br />
diese Option aber für die Zukunft<br />
offen. Daneben ist es<br />
eines der fehlenden Teile, um<br />
ARM-Kernel für mehrere Plattformen<br />
bauen zu können.“ n<br />
Einweg-IDs für Geräte<br />
Der französische Entwickler<br />
Jean Delvare ist einem Problem<br />
mit Device-IDs auf die<br />
Spur gekommen. Diese IDs<br />
benötigt der Kernel, um Hardwarekomponenten<br />
als Blockoder<br />
Zeichen-orientiertes Gerät<br />
einzubinden.<br />
In manchen Fällen ist allerdings<br />
gar keine ID erforderlich,<br />
da nur ein einziges Gerät<br />
seiner Art gleichzeitig existieren<br />
darf. Dabei kann der Computer<br />
mehrere solcher Geräte<br />
besitzen, doch nur eines ist<br />
mit einer Nummer identifizierbar.<br />
Jeans Szenario tritt auf, wenn<br />
mehrere Exemplare eines Gerätetyps<br />
existieren, aber die<br />
ID weder wichtig noch vorhersagbar<br />
ist. Für diesen Fall<br />
möchte der Entwickler Einweg-IDs<br />
für Geräte vergeben.<br />
Dafür wollte Jean ursprünglich<br />
negative Werte verwenden,<br />
um damit zu signalisieren,<br />
dass der Kernel sie nach<br />
der Verwendung wegwerfen<br />
darf. Der Anwender würde<br />
normale IDs mit einem Suffix<br />
sehen.<br />
Greg Kroah-Hartman wies allerdings<br />
auf ein Problem hin:<br />
Jean würde die Device-IDs<br />
überladen, ihnen also über<br />
ihre ursprüngliche Aufgabe<br />
hinaus eine zusätzliche Bedeutung<br />
geben. Greg riet dazu,<br />
lieber einen zusätzlichen<br />
booleschen Wert zu verwenden<br />
als einen Sonderfall für<br />
negative Werte einzuführen.<br />
So ließe sich um den Preis von<br />
ein wenig Speicher größere<br />
Klarheit erreichen. Das fand<br />
Jean vernünftig, und so setzte<br />
er die Device-IDs neu um. n
Neuheiten von O’Reilly<br />
Lösungen vorprogrammiert<br />
Tempo trotz Tracepoints<br />
Ist der Kernel mit der Tracepoint-Option<br />
kompiliert, können<br />
Entwickler sie nutzen,<br />
um die Ausführung ihres<br />
Codes zu verfolgen. Der Red-<br />
Hat-Entwickler Steven Rostedt<br />
hat sich damit beschäftigt,<br />
inwiefern Tracepoints <strong>Linux</strong><br />
langsamer machen.<br />
Gegenwärtig, so schreibt er,<br />
werde ein Tracepoint in Maschinencode<br />
verwandelt, der<br />
im Hot Path liegt, also in jenen<br />
Teilen des Kernels, die häufig<br />
ausgeführt werden. Daher<br />
summiert sich die eigentlich<br />
recht geringe Verlangsamung<br />
des Kernels pro Trace-Punkt<br />
zu einer durchaus wahrnehmbaren<br />
Größe.<br />
Steven legte probeweise Tracepoints<br />
außerhalb des Hot<br />
Path, indem er eine externe<br />
Funktion aufruft. Das macht<br />
den Kernel allerdings in Summe<br />
etwas umfangreicher und<br />
verlangsamt das Tracing. Er<br />
fragte die Mailingliste, ob er<br />
das für den gesamten Kernel<br />
umsetzen solle.<br />
Der Kernel-Consultant Mathieu<br />
Desnoyers zeigte sich skeptisch,<br />
ob so wenig Maschinencode<br />
im Hot Path tatsächlich<br />
die Performance verschlechtere.<br />
Zudem rät er, eher dem<br />
GCC beizubringen, den Code<br />
aus dem viel genutzten Ausführungspfad<br />
zu räumen.<br />
Dazu bemerkte Steven sarkastisch,<br />
man könne leichter<br />
eine olympische Goldmedaille<br />
gewinnen als ein gewünschtes<br />
Feature von den GCC-Entwicklern<br />
bekommen.<br />
Damit spielt er auf frühere<br />
Auseinandersetzungen zwischen<br />
Kernel- und GCC-Entwicklern<br />
an. Das habe sich<br />
aber inzwischen geändert,<br />
schreibt H. Peter Anvin: „In<br />
letzter Zeit haben die GCC-<br />
Entwickler viel besser mitgezogen<br />
und für uns Features<br />
wie »__fentry__« und »asm<br />
goto« entwickelt.“ Daraufhin<br />
beschäftigte sich die Mailingliste<br />
damit, welche Veränderungen<br />
im GCC wünschenswert<br />
wären.<br />
n<br />
Durchstarten mit Raspberry Pi<br />
Erik Bartmann, 336 Seiten, 2012, 24,90 €<br />
ISBN 978-3-86899-410-0<br />
Der Raspberry Pi ist ein preiswerter Mikrocontroller<br />
mit <strong>Linux</strong>-Kernel und zahlreichen<br />
Anschlüssen für die Zusammen arbeit mit<br />
Peripheriegeräten. Der O’Reilly-Erfolgsautor<br />
Erik Bartmann beschreibt den praxisnahen<br />
Einsatz dieses Mikrocontrollers. Zahlreiche<br />
Tipps und Tricks helfen dem Leser, mit diesem<br />
neuen Board schnell eigene Projekte zu<br />
realisieren. Mit <strong>Linux</strong>-Crashkurs.<br />
Sieben Wochen, sieben Datenbanken<br />
Eric Redmond, Jim R. Wilson<br />
368 Seiten, 2012, 34,90 €<br />
ISBN 978-3-86899-791-0<br />
Redis, Neo4J, CouchDB, MongoDB, HBase,<br />
Riak und PostgreSQL: Sieben Wochen, sieben<br />
Datenbanken nimmt Sie mit auf eine Reise<br />
zu einigen der momentan angesagtesten<br />
Open Source-Datenbanken. Dabei geht dieses<br />
Buch über eine einfache Anleitung<br />
hinaus und erläutert die wesentlichen<br />
Kernkonzepte jeder Technologie.<br />
Fitness für Geeks<br />
Bruce W. Perry, 384 Seiten, 2012, 24,90 €<br />
ISBN 978-3-86899-404-9<br />
Geeks neigen dazu, ein äußerst wichtiges<br />
System zu ignorieren: den eigenen Körper.<br />
Was kann sie dazu motivieren, sich um<br />
eine gesündere Lebensweise zu bemühen?<br />
Die Antwort lautet: eine fundierte, wissenschaftliche<br />
und teilweise Technik-gestützte<br />
Herangehensweise. Und genau die bietet<br />
Fitness für Geeks: Das Buch vermittelt<br />
umfassendes Gesundheitswissen und leicht<br />
anzuwendende Fitness-Hacks.<br />
Langzeit-Support für 3.2<br />
Der britische Debian-Entwickler<br />
Ben Hutchings hat<br />
sich bereit erklärt, die Langzeitpflege<br />
für den Kernelzweig<br />
3.2 zu übernehmen. Der Wartungszeitraum<br />
soll der Lebensspanne<br />
der kommenden<br />
Debian-Release 7.0 (Wheezy)<br />
entsprechen, also voraussichtlich<br />
bis ins Jahr 2015 reichen.<br />
Danach würde Ben die Pflege<br />
möglicherweise noch einem<br />
Nachfolger übergeben.<br />
Die Bedeutung des Long-<br />
Term-Stable-Kernels liegt darin,<br />
dass Linus Torvalds selbst<br />
sich um keinerlei stabile Zweige<br />
mehr kümmert. In den Tagen<br />
der stabilen Versionen mit<br />
gradzahliger Minor-Nummer<br />
spielte Stabilisierung in seiner<br />
Arbeit noch eine Rolle. Jetzt<br />
befindet sich der offizielle<br />
Kernel aber ständig in aktiver<br />
Weiterentwicklung.<br />
Andere Entwickler wie beispielsweise<br />
Ben finden sich<br />
aus eigenem Interesse bereit,<br />
eine bestimmte Kernelversion<br />
zu stabilisieren und länger zu<br />
betreuen. Damit dienen sie<br />
meist ihrer eigenen Sache, etwa<br />
der Stabilität von Debian<br />
7.0. (Zack Brown/mhu) n<br />
<strong>Linux</strong> – kurz & gut<br />
ISBN 978-3-86899-412-4<br />
12,90 Euro<br />
Blog:<br />
community.oreilly.de/blog<br />
Google+:<br />
bit.ly/googleplus_oreillyverlag<br />
Steampunk – kurz & geek<br />
ISBN 978-3-86899-367-7<br />
12,90 Euro<br />
O’REILLY ®<br />
www.oreilly.de<br />
O’Reillys<br />
Erfolgsreihen im<br />
Hosentaschenformat.<br />
Jetzt mit neuen<br />
Bänden!<br />
Facebook:<br />
facebook.com/oreilly.de<br />
Twitter:<br />
twitter.com/oreilly_verlag
1&1 CLOUD SERVER<br />
DAS DEDICATED-GEFÜHL – MIT MAXIMALER FLEXIBILITÄT.<br />
Ihre Anforderungen ändern sich immer wieder, manchmal auch unvorhergesehen? Dann sollten<br />
Sie sich für einen Dynamic Cloud Server von 1&1 entscheiden. Denn bei 1&1 sind Sie immer<br />
auf der sicheren Seite: Mit über 11 Mio. Kundenverträgen, 2 Milliarden € Jahresumsatz,<br />
5.000 Mitarbeitern und 5 Hochleistungs-Rechenzentren ist 1&1 einer der größten Webhoster<br />
weltweit. Und mit 20 Jahren Server-Erfahrung und 1.500 Developern sind wir auch in Zukunft<br />
Ihr zuverlässiger Partner. Darum nutzen Sie bei 1&1 viele Vorteile, die Ihnen so kein anderer<br />
Hoster bietet.<br />
VOLLER ROOT-ZUGRIFF<br />
Komfort und Funktionsumfang eines Root Servers, mit dedizierten Ressourcen.<br />
HÖCHSTE FLEXIBILITÄT<br />
■ CPU, RAM und Festplattenspeicher unabhängig voneinander zubuchbar.<br />
Aktion: Dauerhaft 50% günstiger – pro Stunde und Einheit 0,005 € statt 0,01 €.<br />
■ Per Mausklick ausbaufähig bis hin zum eigenen Rechenzentrum mit maximal<br />
99 virtuellen Maschinen – ohne Migration!<br />
■ Absolute Kostentransparenz durch stundengenaue, leistungsbezogene Abrechnung.<br />
UNLIMITED TRAFFIC<br />
100 Mbit/s Bandbreite. Ohne Zusatzkosten, ohne Drosselung.<br />
PARALLELS ® PLESK PANEL 11<br />
■ neueste Version des besten Verwaltungstools für Ihren Server<br />
■ inklusive unlimited Domains<br />
AUSFALLSICHER<br />
Redundant gespiegelte Speicher- und Recheneinheiten schützen<br />
Ihren Cloud-Server automatisch vor Ausfällen.<br />
DOMAINS | E-MAIL | WEBHOSTING | E-SHOPS | SERVER<br />
* 1&1 Dynamic Cloud Server dauerhaft 19,99 €/Monat statt bisher 39,99 €/Monat in der Basiskonfi guration. Performance Features dauerhaft für 0,005 €/Stunde und Einheit statt bisher<br />
0,01€/Stunde und Einheit zubuchbar. Einrichtungsgebühr von 39,– € entfällt. 12 Monate Mindestvertragslaufzeit. Preise inkl. MwSt.
DAUERHAFT<br />
50 % AUF IHRE<br />
GESAMTE KONFIGURATION<br />
1&1 DYNAMIC CLOUD SERVER<br />
Perfekt als Application-, Datenbank-, Hostingoder<br />
Game-Server – oder für alles zusammen.<br />
■ Basiskonfiguration: 1 CPU, 1 GB RAM,<br />
100 GB Festplatte<br />
■ Unlimited Traffic mit 100 Mbit/s Bandbreite<br />
■ Citrix Xen Server basierend auf AMD Multicore-<br />
Architektur (AMD Opteron 6272)<br />
■ Freie Wahl aus CentOS, Debian, Ubuntu,<br />
openSUSE oder Windows (optional)<br />
■ Nur bei 1&1: Optional SUSE<br />
<strong>Linux</strong> Enterprise Server<br />
■ Nur bei 1&1: Server-Management und<br />
-Monitoring per Mobile App<br />
■ NEU! 1&1 Snapshot: Definieren Sie einfach<br />
einen Wiederherstellungszeitpunkt für Ihren Server.<br />
■ 24/7 Service und Support durch<br />
1&1 Server Expertenteam.<br />
■ Keine Einrichtungsgebühr<br />
nur 19,<br />
99 39,<br />
99<br />
€/Monat*<br />
0 26 02 / 96 91<br />
0800 / 100 668<br />
www.1und1.info
Titelthema<br />
www.linux-magazin.de Einführung 12/2012<br />
20<br />
Einführung: Webservices mit Soap und REST<br />
<strong>Schnittstellen</strong>-<strong>Magie</strong><br />
Außer den sichtbaren Websites findet im Web auch unauffällige Kommunikation statt: Über Webservices tauschen<br />
Programme Informationen aus, von Warenkatalogen bis hin zu Klatsch und Tratsch. Mathias Huber<br />
Inhalt<br />
22 Soziale Netzwerke einbinden<br />
Goupware-Systeme zapfen die APIs von<br />
Facebook, Twitter und Xing an.<br />
28 E-Commerce-APIs<br />
Dank Webservices über Ebay und Amazon<br />
verkaufen.<br />
32 Kartendienste nutzen<br />
APIs holen Karten von Google Maps und<br />
Open Streetmap auf die eigene Seite.<br />
36 Entwicklertools automatisieren<br />
Mit eigenen Skripten automatisieren<br />
Entwickler Github und Bugzilla.<br />
70 Hintertürchen<br />
Der Rechtsartikel beschäftigt sich mit<br />
Nutzungsbedingungen von APIs.<br />
102 Perl und Mojolicious automatisieren<br />
Mike Schilli digitalisiert Bücher und<br />
schickt sie mit Perl in die Cloud.<br />
Alltag im WWW: Die Preissuchmaschine<br />
findet das günstigste Angebot,<br />
ein Softwareportal zeigt die Wohnorte<br />
der Entwickler auf einer Weltkarte. Hinter<br />
solchen Features<br />
steckt meist ein<br />
Webservice. Das<br />
heißt schlicht, dass<br />
ein Programm mit<br />
einem anderen per<br />
HTTP Informationen<br />
austauscht. Die<br />
Dienste verwenden<br />
standardisierte Verfahren<br />
und Datenformate,<br />
sodass sie<br />
die Grenzen einzelner<br />
Plattformen,<br />
Technologien und<br />
Programmiersprachen<br />
überwinden.<br />
Soap & Co.<br />
Nach einer engeren<br />
Definition handelt<br />
es sich bei Webservices um Interaktionen,<br />
die das XML-Nachrichtenformat<br />
Soap verwenden, das derzeit in Version<br />
1.2 aus dem Jahr 2003 gültig ist [1]. Das<br />
Akronym stand einst für Simple Object<br />
Access Protocol, hat sich aber mittlerweile<br />
als eigenes Wort etabliert.<br />
Soap hat seine Wurzeln im Remote Procedure<br />
Call (RPC) der als XML-RPC seit<br />
Ende der neunziger Jahre HTTP als Transportmechanismus<br />
und XML als Nachrichtenformat<br />
verwendet [2]. Dabei handelt<br />
es sich um eine recht einfache Abbildung<br />
von Methoden und Datentypen auf ein<br />
XML-Format. Der anfragende Rechner<br />
schickt einen »methodCall«-Knoten per<br />
HTTP-»POST« ab und erhält als Antwort<br />
einen »methodResponse«-Knoten mit den<br />
gewünschten Ergebnisdaten oder einer<br />
Fehlermeldung.<br />
Die Weiterentwicklung Soap reichte<br />
Microsoft mit einigen Verbündeten 2000<br />
beim World Wide Web Consortium<br />
(W3C) ein. Es erweitert die Nachrichten<br />
um Envelope und Header, funktioniert<br />
sowohl per HTTP als auch SMTP und<br />
kennt Datei-Attachments. Daneben besitzt<br />
es ein erheblich umfangreicheres<br />
XML-Vokabular.<br />
Listing 1 stammt aus der W3C-Recommendation<br />
und zeigt die Soap-Anfrage<br />
an einen Reisedienstleister. Der Envelope<br />
umschließt Header (Zeile 3 bis 15) und<br />
Body (Zeile 16 bis 38). Die eigentliche<br />
Buchungsanfrage für den Flug ist in einem<br />
unter »http://travelcompany.example.org/reservation/travel«<br />
definierten<br />
XML-Format kodiert und enthält Startund<br />
Zielort, Terminwunsch und Tageszeit<br />
sowie Sitzplatzwunsch für die Flugreise<br />
(»itinerary«, Zeile 17 bis 33). Der Knoten<br />
»lodging« steht für eine optionale Hotelbuchung<br />
zur Verfügung.<br />
Um Soap herum haben sich weitere Technologien<br />
und Standards ausgebildet, die<br />
man oft als WS-*-Stack zusammenfasst.<br />
Zu den wichtigsten gehört WSDL, die<br />
Webservices Description Language. Ebenfalls<br />
in XML abgefasst, beschreibt sie<br />
einen zur Verfügung stehenden Dienst.<br />
Liefert ein Diensteanbieter WDSL, macht<br />
er den Entwicklern eine Freude: Java und<br />
Microsofts Dotnet-Framework besitzen<br />
Tabelle 1: REST-Verben<br />
HTTP-Methode Funktion<br />
GET<br />
Hole die Ressource.<br />
PUT Lege eine Ressource an<br />
oder ändere diese durch<br />
Senden ihres gesamten<br />
Inhalts.<br />
POST<br />
Lege eine Ressource an<br />
oder ändere diese durch<br />
Aufrufen einer serverseitigen<br />
Prozedur.<br />
DELETE Lösche eine Ressource.
Generatoren, die anhand der WSDL-Beschreibung<br />
automatisch den Großteil des<br />
Codes für einen passenden Client produzieren.<br />
Daneben gibt es Soap-Implementierungen<br />
für Programmiersprachen wie<br />
PHP, Perl, Ruby und andere.<br />
Dicke Dienste<br />
Kritiker von Soap & Co. bezeichnen diese<br />
Technologien als „dicke“ Webservices.<br />
Sie bemängeln den Vokabelreichtum und<br />
Umfang der XML-Botschaften, die der<br />
Programmierer zudem mit Parsern und<br />
einer eigenen Abfragesprache wie Xpath<br />
verarbeiten muss.<br />
Der Gegenvorschlag heißt Representational<br />
State Transfer (REST) und setzt direkt<br />
auf dem WWW-Protokoll HTTP auf. Im<br />
Jahr 2000 beschrieb ihn der Informatiker<br />
Roy Fielding in seiner Doktorarbeit [3].<br />
Fielding ist einer der Gründer des Apache-Projekts,<br />
zudem war er maßgeblich<br />
an der Entwicklung des HTTP-Protokolls<br />
beteiligt.<br />
REST sieht für jede Ressource, beispielsweise<br />
einen Foreneintrag oder ein Produkt<br />
in einem Online-Shop einen Uniform<br />
Resource Identifier (URI) vor. So könnte<br />
ein Produkt beispielsweise unter »http://<br />
example.com/products/Produktnummer«<br />
zu finden sein. Das elegante an diesem<br />
Ansatz: Er stellt keinen Bruch zu dem<br />
dar, was auch ansonsten im WWW üblich<br />
ist, beispielsweise beim schlichten Aufrufen<br />
einer statischen Webseite per HTTP-<br />
»GET«. Um mit diesen Ressourcen zu<br />
arbeiten, verwendet REST weitere HTTP-<br />
Methoden, auch als Verben bezeichnet,<br />
als Vokabular. Mit den wichtigsten lassen<br />
sich Einträge anlegen, lesen, ändern oder<br />
löschen (Tabelle 1). Dabei kommt »PUT«<br />
zum Einsatz, wenn das Anlegen oder<br />
Ändern durch Senden des gesamten Ressourceninhalts<br />
erfolgt, »POST« dagegen<br />
kann auch eine serverseitige Prozedur<br />
aufrufen – und mischt damit ein RPC-<br />
Element in die REST-Welt.<br />
REST und das neu geschaffene Adjektiv<br />
RESTful erfreuen sich unter Softwareentwicklern<br />
in den letzten Jahren großer Beliebtheit.<br />
Anwendungsbeispiele für diese<br />
Architektur sind der Simple Storage Service<br />
(S3) von Amazon, der Request Tracker<br />
RT und auch die NoSQL-Datenbank<br />
Couch DB. REST-Implementierungen<br />
finden sich für so gut wie jede aktuelle<br />
Programmiersprache, von diversen Java-<br />
Frameworks über Cake PHP und Fuel<br />
PHP bis zu Web2py und Ruby on Rails.<br />
Sogar ein Stück Javascript auf einer Webseite<br />
kann als REST-Client arbeiten, wie<br />
das Framework Ext JS zeigt. Der Perl-<br />
Snapshot in der Programmieren-Rubrik<br />
dieses <strong>Linux</strong>-<strong>Magazin</strong>s nutzt Mojolicous,<br />
um den Dienst Google Drive mit Perl<br />
anzusprechen.<br />
Abseits der reinen REST-Lehre stellen<br />
viele <strong>Schnittstellen</strong> zu Webanwendungen<br />
allerdings Mischformen dar. Sie kombinieren<br />
HTTP-»GET« mit serverseitigen<br />
Methodenaufrufen. Das kennt jeder, der<br />
schon einmal URIs der Bauart »http://<br />
localhost/app?entry=15&action=delete«<br />
fabriziert hat.<br />
Datenquellen<br />
Sei es Soap, REST oder eine hybride Methode<br />
– viele Websites lassen sich dank<br />
ihres Web-API als Datenquelle nutzen.<br />
Das Titelthema dieses <strong>Linux</strong>-<strong>Magazin</strong>sbeschreibt<br />
mit <strong>Schnittstellen</strong> zu sozialen<br />
Netzwerken, E-Commerce-Software, Entwicklertools<br />
und geografischen Informationensystemen<br />
die wichtigsten Anwendungsszenarien.<br />
Wer sich nur mit seinem eigenen Bugtracker<br />
verbindet, muss außer der Technik<br />
wenig anderes bedenken. Bezieht er aber<br />
Kartendaten oder Preisinformationen von<br />
einem kommerziellen Anbieter, gilt es,<br />
auch die juristischen Rahmenbedingungen<br />
zu beachten. So gesehen gehört der<br />
auch Rechtsartikel „Hintertüren“ in diesem<br />
<strong>Magazin</strong> noch zum Titelthema. n<br />
Infos<br />
[1] Soap:<br />
[http:// www. w3. org/ 2002/ ws/ Activity]<br />
[2] XML-RPC:<br />
[http:// xmlrpc. scripting. com/ spec. html]<br />
[3] Roy Fielding, „Architectural Styles and<br />
the Design of Network-based Software<br />
Architectures“: [http:// www. ics. uci. edu/<br />
~fielding/ pubs/ dissertation/ rest_arch_<br />
style. htm]<br />
Einführung 12/2012<br />
Titelthema<br />
www.linux-magazin.de<br />
21<br />
Listing 1: Soap-Anfrage<br />
01 <br />
02 <br />
03 <br />
04 <br />
07 uuid:093a2da1‐q345‐739r‐ba5d‐pqff98fe8j7d<br />
08 2001‐11‐29T13:20:00.000‐05:00<br />
09 <br />
10 <br />
13 Åke Jógvan Øyvind<br />
14 <br />
15 <br />
16 <br />
17 <br />
19 <br />
20 New York<br />
21 Los Angeles<br />
22 2001‐12‐14<br />
23 late afternoon<br />
24 aisle<br />
25 <br />
26 <br />
27 Los Angeles<br />
28 New York<br />
29 2001‐12‐20<br />
30 mid‐morning<br />
31 <br />
32 <br />
33 <br />
34 <br />
36 none<br />
37 <br />
38 <br />
39
Titelthema<br />
www.linux-magazin.de Social-Network-APIs 12/2012<br />
22<br />
Wie OX und Zarafa auf die APIs von sozialen Netzwerken zugreifen<br />
Sortengerecht angezapft<br />
Die Groupwaresysteme Open-Xchange und Zarafa zapfen die APIs von Facebook, Twitter und Xing an und<br />
übernehmen deren Informationen in ihren Datenbestand. Damit das klappt, bedarf es einer eigenen Taktik für<br />
jeden Dienst – dennoch ist die Informationsausbeute manchmal ziemlich mager. Tim Schürmann<br />
© Valentyn Volkov Volkov, 123RF.com<br />
Das Backend mit der eigentlichen Anwendungslogik<br />
ist in Java geschrieben<br />
und kommt als so genanntes OSGI-<br />
Bundle [3] ins Haus, das mitgelieferte<br />
Frontend besteht aus einer normalen<br />
Webanwendung, die in jedem Browser<br />
läuft. OX integriert die Social Networks<br />
Facebook, Linked In, Twitter und Xing.<br />
Dabei importiert die Groupware Kontakte<br />
aus Facebook, Linked In und Xing, als<br />
Messaging-Dienst lassen sich Facebook<br />
und Twitter einbinden.<br />
Egal ob Privatperson oder Unternehmen,<br />
fast jeder Internetnutzer führt mittlerweile<br />
Benutzerkonten bei zahlreichen<br />
Social-Web-Diensten. Diese zu jonglieren<br />
und zu koordinieren ist gar nicht so einfach:<br />
Die Freunde chatten auf Facebook,<br />
die Kollegen vernetzen sich auf Xing,<br />
während alle auf Twitter-Nachrichten<br />
warten. Moderne Groupwaresysteme<br />
wie Open-Xchange und Zarafa zapfen auf<br />
Wunsch die Daten des Social Web an und<br />
führen sie mit den vorhandenen zusammen<br />
(Stichwort: Server Side Mashup). So<br />
findet der Groupwarebenutzer beispielsweise<br />
im Adressbuch automatisch auch<br />
die Kontakte aus Facebook – zumindest<br />
ist das die Grundidee.<br />
Offener Austausch<br />
Hinter der Groupware Open-Xchange<br />
(OX) steht die gleichnamige Firma in<br />
Nürnberg, die ihren Ursprung im Suse-<br />
Umfeld hat, und zwar mit dem SLOX<br />
(Suse <strong>Linux</strong> Open Xchange Server).<br />
Neben kommerziellen Varianten gibt es<br />
auch eine kostenlose Community Edition,<br />
die der GPLv2 unterliegt [1]. OX<br />
dürfte darüber hinaus vielen Kunden<br />
von 1&1 bekannt vorkommen: Das Unternehmen<br />
setzt die Groupware in einer<br />
Hosting-Variante unter dem Namen 1&1<br />
Mailxchange als Drehscheibe für seine<br />
E-Mail-Dienste ein.<br />
Einige <strong>Linux</strong>-Distributionen bringen OX<br />
bereits in den Repositories mit. Fehlen<br />
jedoch passende Pakete, gestaltet sich<br />
die Installation ziemlich fummelig, da<br />
zunächst diverse andere Komponenten,<br />
zum Beispiel Datenbank, Webserver und<br />
Postfix, eingerichtet sein wollen. Wer<br />
selbst keine OX-Installation aufsetzen<br />
möchte, findet unter [2] eine Testinstallation.<br />
Nach der notwendigen Registrierung<br />
lässt sich dort auch die Integration<br />
von Facebook & Co. online testen.<br />
Schlüsselmeister<br />
Jeden Dienst zapft im Hintergrund ein<br />
spezielles Plugin an. Mit Ausnahme von<br />
Xing nutzen die Plugins die von den Social<br />
Networks bereitgestellte Programmierschnittstelle<br />
(API). Damit das klappt,<br />
muss der Admin zunächst den Zugriff<br />
bei den Diensten erlauben. Dazu erstellt<br />
er als Erstes über die Entwicklerseiten<br />
von Facebook & Co. eine so genannte<br />
Anwendung (auch als Application bezeichnet).<br />
Der Kasten „Gezwitscher“<br />
zeigt exemplarisch, wie dies bei Twitter<br />
funktioniert.<br />
Am Ende erhält er einen oder mehrere<br />
Schlüssel (Keys), die er in der entsprechenden<br />
OX-Konfigurationsdatei hinterlegt.<br />
Die Twitter-Schlüssel gehören beispielsweise<br />
in die Datei »twitter.properties«.<br />
Der Schlüssel ist für den Betrieb<br />
zwingend erforderlich, die Gründe erläu-<br />
DELUG-DVD<br />
DELUG-DVD<br />
Auf der Delug-DVD finden Sie<br />
in drei Unterverzeichnissen die im Artikel<br />
beschriebene Programme: den HTML-Parser<br />
Htmlunit, das Zarafa-Twitter-Plugin sowie<br />
Scribe-Java fürs Screen-Grabbing.
Abbildung 1: Damit OX auf Twitter zugreifen kann, muss der Entwickler<br />
zunächst eine Applikation erstellen.<br />
tert Karsten Will von der Open-Xchange<br />
GmbH: „Je nach Netz ist dieser spezifisch<br />
für die URL des Servers, auf dem die<br />
(aus der Sicht des Dienstes) Clientapplikation<br />
betrieben wird. Ohne Key kein Zugriff.<br />
Teilweise schränken die Netzwerke<br />
noch die Keys auf bestimmte Funktionen<br />
ein. Bei Linked In ist es beispielsweise<br />
so, dass reguläre Nutzer des API keinen<br />
Zugriff auf die E-Mail-Adressen von<br />
Connections oder Profilen erhalten. Dies<br />
ist privilegierten Partnern wie uns oder<br />
Microsoft vorbehalten.“<br />
Bei Facebook anklopfen mit<br />
Oauth und Scribe<br />
Die Authentifizierung erfolgt bei allen<br />
Diensten über das Oauth-Protokoll [5].<br />
Die dabei ablaufende Kommunikation<br />
wickelt OX jedoch nicht selbst ab: „Wir<br />
benutzen [die Java-Bibliothek (Red.)]<br />
Scribe [6] als Grundlage<br />
für die Oauth-<br />
Authentifizierung gegenüber<br />
den Diensten,<br />
angepasst an unsere<br />
eigenen Bedürfnisse“,<br />
so Karsten Will.<br />
Dank Scribe genügen<br />
die wenigen Zeilen<br />
aus Listing 1, um die<br />
Kontakte aus Facebook<br />
rauszusaugen. Das<br />
Listing zeigt gekürzt<br />
die Funktion »getContacts()«<br />
aus der Klasse<br />
»com.openexchange.<br />
oauth.FacebookServiceImpl«.<br />
Im ersten Schritt teilt OX Scribe mit, dass<br />
es auf Facebook zugreifen möchte. OX<br />
muss dazu in Zeile 4 nur die API-Schlüssel<br />
und eine Provider-Klasse »FacebookApi.class«<br />
übergeben. Diese verrät<br />
Scribe, dass ein Zugriff auf Facebook erwünscht<br />
ist.<br />
In den Zeilen 6 bis 10 erstellt OX ein so<br />
genanntes Access-Token, das es jeder Anfrage<br />
an Facebook beifügen<br />
muss. Mit dem<br />
Token in der Hand generiert<br />
OX in Zeile 11<br />
eine neue Anfrage an<br />
Facebook, mit der es<br />
Zugriff auf das Profil<br />
des Benutzers einfordert.<br />
Anschließend<br />
packt es das zuvor erstellte<br />
Token zur Anfrage<br />
(»service.signRequest()«).<br />
Die Anweisungen ab Zeile 15 lösen aus<br />
der Antwort die User-ID heraus. Mit ihr<br />
baut OX ab Zeile 20 eine neue Anfrage<br />
zusammen, die alle Kontakte dieses Benutzers<br />
aus Facebook abfragt. Das Ergebnis<br />
dieser Anfrage ist ein Json-Objekt, das<br />
»parseIntoContacts()« in eine Liste mit<br />
»Contact«-Objekten umwandelt.<br />
Diese Objekte verarbeitet wiedrum OX<br />
weiter. „Intern werden aus den Daten<br />
der Sozialen Netzwerke erst Java- und<br />
dann Json-Objekte, die die Software zum<br />
Beispiel an den Browser weiterreicht“,<br />
erläutert Karsten Will. Wer in die einzelnen<br />
Abläufe noch tiefer eintauchen<br />
möchte, sollte sich zunächst Scribe und<br />
dort besonders die Beispielprogramme<br />
anschauen [7]. Sie erleichtern Einsteigern<br />
das Verständnis des OX-Codes.<br />
Nicht alles geht einfach<br />
Welche Informationen die Social-Plugins<br />
so aus den Diensten herausziehen können,<br />
hängt maßgeblich von dem bereitgestellten<br />
API des Dienstes ab. So liest<br />
das Facebook-Plugin für jeden Kontakt<br />
Abbildung 2: Das Ergebnis sind zwei Schlüssel, die wiederum in der OX-<br />
Konfiguration landen müssen.<br />
Social-Network-APIs 12/2012<br />
Titelthema<br />
www.linux-magazin.de<br />
23<br />
Gezwitscher<br />
Um OX den Zugriff auf Twitter zu erlauben,<br />
wechselt der Admin zunächst auf die Entwicklerseiten<br />
unter [4]. Dort meldet er sich an,<br />
klickt auf »Create a new application« und füllt<br />
das Formular aus. Der »Name« der Anwendung<br />
erscheint später in OX, wenn dort der Zugriff<br />
auf Twitter erlaubt wird (Abbildung 1). Die beiden<br />
URLs können auf die eigene Homepage<br />
verweisen, wichtig ist nur, dass eine Callback-<br />
URL existiert.<br />
Jetzt am unteren Rand die Lizenzbedingungen<br />
abnicken, das Captcha ausfüllen und auf<br />
»Create your Twitter application« klicken. Im<br />
neuen Fenster wechselt der Admin auf das Register<br />
»Settings«, setzt den Zugriff (»Access«)<br />
auf »Read and Write« und lässt die Einstellungen<br />
via »Update this Twitter application's<br />
settings« aktualisieren.<br />
Schlüssel übertragen<br />
Auf dem Register »Details« finden sich jetzt<br />
unter den »OAuth settings« zwei kryptische<br />
Schlüssel (Abbildung 2): »Consumer key« und<br />
»Consumer secret«. Diese packt der Admin in<br />
die Konfigurationsdatei »/opt/open‐xchange/<br />
etc/groupware/twitter.properties«, den »Consumer<br />
key« trägt er hinter »com.openexchange.<br />
twitter.consumerKey=« ein, das »Consumer secret«<br />
hinter »com.openexchange.twitter.consumerSecret=«.<br />
Die vorhandenen kryptischen<br />
Zeichenketten kann er einfach überschreiben.<br />
Danach lässt sich das Twitter-Konto mit dem<br />
Assistenten einbinden.<br />
Nun ist in OX noch jeder gewünschte Dienst<br />
einzurichten. Das übernimmt normalerweise<br />
der beim ersten Start der OX-Webober fläche<br />
erscheinende Assistent (Abbildung 3). In ihm<br />
klickt man auf das Symbol des entsprechenden<br />
Dienstes, vergibt einen passenden Accountnamen<br />
und lässt den Zugriff per »OK« autorisieren.<br />
Dazu öffnet OX ein neues Fenster mit einer<br />
Seite des Dienstes. Auf dem gibt der Admin die<br />
Groupware noch einmal explizit frei, indem er<br />
Benutzernamen und Passwort eintippt. Fertig<br />
sieht das Ganze aus wie in Abbildung 4.
Titelthema<br />
www.linux-magazin.de Social-Network-APIs 12/2012<br />
24<br />
Abbildung 3: Der Assistent übernimmt die Integration des Social Network in OX.<br />
Abbildung 4: Nach der Anmeldung bei Twitter integriert OX die Tweets.<br />
den Nickname, den Nachnamen, das<br />
Geburtsdatum, das Bild, den Wohnort,<br />
die Stadt und die Postleitzahl. Andere<br />
Plugins schaffen mehr, etwa das Xing-<br />
Plugin. Eine ausführliche Liste, welches<br />
Plugin welche Informationen aus welchen<br />
Diensten anzapft, findet sich unter<br />
[8]. Anfragen oder Aufträge zu Plugins<br />
für weitere Dienste nimmt übrigens die<br />
Open-Xchange GmbH gerne an.<br />
Kreuzweise anzapfen mit<br />
Screen-Scraping bei Xing<br />
Ein kleiner Spezialfall ist Xing. Diesen<br />
Dienst zapft OX nicht über ein API, sondern<br />
per Screen-Scraping-Technik an.<br />
Dabei ruft OX die Xing-Seiten wie ein<br />
normaler Benutzer auf und liest dann aus<br />
den zurückgelieferten HTML-Seiten die<br />
benötigten Informationen aus. Warum<br />
Xing eine solche Extrawurst benötigt, erklärt<br />
Karsten Will: „Bei Xing nutzen wir<br />
noch Screen-Scraping, weil das Xing-API<br />
zwar seit letztem Dezember im Betatest<br />
ist, aber noch nicht über den initialen<br />
Kreis von 1000 Entwicklern hinaus verfügbar<br />
gemacht wurde.“<br />
Wie OX an die Daten auf Xing herankommt,<br />
steuert die Datei »XING.yml« im<br />
Unterverzeichnis »/opt/open‐xchange/<br />
etc/groupware/crawlers«. Durch diese<br />
Auslagerung der Programmlogik können<br />
die Entwickler schneller auf Änderungen<br />
bei Xing reagieren: Modifiziert Xing<br />
den HTML-Quellcode seiner Seiten, so<br />
müssen die OX-Entwickler lediglich die<br />
».yml«-Datei aktualisieren.<br />
Wie Listing 2 zeigt, ist diese noch nicht<br />
einmal besonders lang. Ihre Inhalte folgen<br />
der Auszeichnungssprache Yaml [9].<br />
Interessant sind die Zeilen nach »steps«.<br />
Sie sind von oben nach unten recht einfach<br />
zu lesen und beschreiben den Login-<br />
Vorgang bei Xing sowie anschließend den<br />
Weg zu den Kontakten.<br />
Kaffeezeit<br />
Als Erstes öffnet OX die Homepage<br />
»www.xing.com«. Das Feld für die Eingabe<br />
des Benutzernamens hört auf den<br />
internen Namen »login_user_name«, wie<br />
ein Blick in den Seitenquelltext der Xing-<br />
Homepage beweist. Dort trägt OX den<br />
Benutzernamen ein. Nach dem gleichen<br />
Prinzip verfährt es mit den restlichen Elementen.<br />
Nach dem Login wechselt OX<br />
auf die Seite mit den Kontakten, indem es<br />
an die Basis-URL »www.xing.com« noch<br />
Listing 1: »getContacts()«<br />
01 public List getContacts(Session<br />
session, int user, int contextId, int<br />
accountId) {<br />
02 <br />
03 List contacts = new ArrayList<br />
();<br />
04 OAuthService service = new ServiceBuilder().<br />
provider(FacebookApi.class).apiKey<br />
(facebookMetaData.getAPIKey()).apiSecret<br />
(facebookMetaData.getAPISecret()).build();<br />
05 <br />
06 OAuthAccount account = null;<br />
07 account = oAuthService.getAccount(<br />
accountId, session, user, contextId);<br />
08 <br />
09 // get the users own profile (for his id)<br />
with the given access token<br />
10 Token accessToken = new Token(account.<br />
getToken(), account.getSecret());<br />
11 OAuthRequest ownProfileRequest = new<br />
OAuthRequest(Verb.GET, "https://graph.<br />
facebook.com/me");<br />
12 service.signRequest(accessToken,<br />
ownProfileRequest);<br />
13 Response ownProfileResponse =<br />
ownProfileRequest.send();<br />
14 <br />
15 String myuid = "";<br />
16 JSONObject object = new JSONObject<br />
(ownProfileResponse.getBody());<br />
17 myuid = object.getString("id");<br />
18 <br />
19 // get the users connections<br />
20 OAuthRequest connectionsRequest = new<br />
OauthRequest(<br />
21 Verb.GET,<br />
22 "https://api.facebook.com/method/fql.<br />
query?query=SELECT%20name,first_name,<br />
last_name,email,birthday_date,pic_big,<br />
hometown_location%20from%20user%20where<br />
%20uid%20in%20%28SELECT%20uid2%20from<br />
%20friend%20where%20uid1=" + myuid +<br />
"%29&format=JSON");<br />
23 service.signRequest(accessToken,<br />
connectionsRequest);<br />
24 Response connectionsResponse =<br />
connectionsRequest.send();<br />
25 <br />
26 // parse the returned JSON into neat little<br />
contacts<br />
27 contacts = parseIntoContacts<br />
(connectionsResponse.getBody());<br />
28 }<br />
29 <br />
30 return contacts;<br />
31 }
ein »/app/contact« anhängt und dann<br />
die Kontaktdaten im universellen Vcard-<br />
Format anfordert.<br />
Den eigentlichen Aufruf beziehungsweise<br />
das Auslesen der Seite übernehmen die in<br />
Listing 2 genannten Java-Klassen. Um<br />
die Anmeldung kümmert sich beispielsweise<br />
»com.openexchange.subscribe.<br />
crawler.LoginPageStep«. Diese Klasse<br />
parst einfach die HTML-Seite, setzt die<br />
Login-Informationen in die entsprechenden<br />
Felder ein und schickt die manipulierte<br />
Seite wieder an Xing zurück.<br />
Htmlunit<br />
Listing 3 zeigt einen Ausschnitt aus der<br />
relevanten Methode »execute()«. Nach<br />
dem gleichen Prinzip arbeiten auch die<br />
übrigen Klassen. Wem die Klassen »HtmlForm«,<br />
»HtmlTextInput« & Co. bekannt<br />
vorkommen: OX greift auf die Hilfsbibliothek<br />
Htmlunit [10] zurück, eine Java-<br />
Bibliothek, die nützliche Funktionen zum<br />
Abholen und Manipulieren von HTML-<br />
Seiten anbietet.<br />
Die von den Plugins aus den Social Networks<br />
gezogenen Daten integriert OX<br />
in seinen Datenbestand. So tauchen die<br />
Adressen aus Facebook unter den »Kontakten«<br />
auf. Von dort aus reicht sie OX<br />
auf Wunsch sogar an andere OX-Installationen<br />
weiter oder macht sie Freunden<br />
und Kollegen über eine eigene URL<br />
zugänglich. Alle diese Funktionen und<br />
Konzepte fasst der Hersteller unter dem<br />
Begriff Social OX zusammen.<br />
Soziale Giraffe<br />
Hinter der Groupware Zarafa steht die<br />
gleichnamige niederländische Firma. In<br />
Deutschland hat sie Niederlassungen in<br />
Hannover (in Form der Zarafa Deutschland<br />
GmbH) und in Plochingen bei Stuttgart.<br />
Genau wie OX gibt es Zarafa in<br />
mehreren kommerziellen und einer kostenlosen<br />
Open-Source-Variante, die unter<br />
der Affero GPLv3 steht [11]. Fertige Pakete<br />
stehen für die größeren Distributionen<br />
bereit, in der Distribution Zentyal ist<br />
Zarafa zudem bereits enthalten.<br />
Um die Verwaltung der Daten kümmert<br />
sich im Hintergrund der in C++ geschriebene<br />
Zarafa-Server. Seine Dienste<br />
lassen sich über verschiedene <strong>Schnittstellen</strong><br />
in Anspruch nehmen. In der Regel<br />
verwalten die Nutzer ihre Daten über die<br />
Listing 2: »XING.yml«<br />
01 ‐‐‐ !com.openexchange.subscribe.crawler.<br />
CrawlerDescription<br />
02 displayName: XING<br />
03 id: com.openexchange.subscribe.xing<br />
04 priority: 2<br />
05 workflowString: |<br />
06 ‐‐‐ !com.openexchange.subscribe.crawler.<br />
Workflow<br />
07 steps:<br />
08 ‐ !com.openexchange.subscribe.crawler.<br />
LoginPageStep<br />
09 baseUrl: "https://www.xing.com"<br />
10 description: Login to www.xing.com<br />
11 linkAvailableAfterLogin: /app/contact<br />
12 nameOfLoginForm: loginform<br />
13 nameOfPasswordField: login_password<br />
Listing 3: »execute()«<br />
01 public void execute(final WebClient webClient)<br />
throws SubscriptionException {<br />
02 HtmlPage loginPage = null;;<br />
03 try {<br />
04 // Get the page, fill in the credentials<br />
and submit the login form<br />
05 loginPage = webClient.getPage(url);<br />
06 this.loginPage = loginPage;<br />
07 final HtmlForm loginForm =<br />
loginPage.getFormByName(nameOfLoginForm);<br />
Zarafa-Webapp, eine kleine Webanwendung<br />
(Abbildung 5, [12]).<br />
Um die Anbindung von Twitter kümmert<br />
sich das Twidget-Plugin [13]. Innerhalb<br />
der Webapp erscheint es als Widget, das<br />
man auf die Startseite oder in die Leiste<br />
am rechten Rand legen kann. Dort aktiviert<br />
durchsucht es den Text einer gerade<br />
geöffneten E-Mail nach einem Twitter-Account.<br />
Sofern dieser in der Form »twitter.<br />
com/timschuermann« oder »@timschuermann«<br />
auftaucht, zeigt das Widget<br />
die letzten Nachrichten in einer Liste an<br />
(Abbildung 5). Mehr kann es nicht – was<br />
14 nameOfUserField: login_user_name<br />
15 pageTitleAfterLogin: /app/contact<br />
16 password: ""<br />
17 url: "https://www.xing.com"<br />
18 username: ""<br />
19 ‐ !com.openexchange.subscribe.crawler.<br />
TextPagesByLinkStep<br />
20 description: Get all vcards as text pages<br />
21 linkpart: /app/contact?op=vcard;scr_id<br />
22 offset: 10<br />
23 urlAfterOffset: ""<br />
24 urlBeforeOffset: "https://www.xing.com<br />
/app/contact?notags_filter=0;search_filter=;<br />
tags_filter=;offset="<br />
25 ‐ !com.openexchange.subscribe.crawler.<br />
ContactObjectsByVcardTextPagesStep {}<br />
08 final HtmlTextInput userfield =<br />
loginForm.getInputByName(nameOfUserField);<br />
09 userfield.setValueAttribute(username);<br />
10 final HtmlPasswordInput passwordfield =<br />
loginForm.getInputByName(nameOfPasswordField);<br />
11 passwordfield.setValueAttribute(password);<br />
12 final HtmlPage pageAfterLogin = (HtmlPage)<br />
loginForm.submit(null);<br />
13 output = pageAfterLogin;<br />
14 [...]<br />
Social-Network-APIs 12/2012<br />
Titelthema<br />
www.linux-magazin.de<br />
25<br />
Listing 4: »loadRecord()«<br />
01 loadRecord : function(record)<br />
02 {<br />
03 var body = record.getBody(false);<br />
04 var re = new RegExp("twitter.com/(\\w+)");<br />
05 var twitter = undefined;<br />
06 <br />
07 var match = re.exec(body);<br />
08 if (Ext.isEmpty(match)) {<br />
09 re = new RegExp("^(.*?\\W)?@<br />
(\\w{1,15})\\b");<br />
10 match = re.exec(body);<br />
11 twitter = match[2];<br />
12 } else {<br />
13 twitter = match[1];<br />
14 }<br />
15 <br />
16 if (twitter !== undefined) {<br />
17 var count = this.get('max_count');<br />
18 var rts = this.get('include_rts');<br />
19 <br />
20 Ext.ux.JSONP.request({<br />
21 url : 'https://api.twitter.com/1/<br />
statuses/user_timeline.json',<br />
22 params: {<br />
23 screen_name: twitter,<br />
24 count: String(count),<br />
25 include_rts: String(rts)<br />
26 },<br />
27 success : this.onTwitterUpdate,<br />
28 callbackKey : 'callback',<br />
29 scope : this<br />
30 });<br />
31 }<br />
32 },
Titelthema<br />
www.linux-magazin.de Social-Network-APIs 12/2012<br />
26<br />
01 fbinit: function()<br />
02 {<br />
03 // Init the SDK<br />
04 FB.init({<br />
durchaus gewollt ist: Das Twidget-Plugin<br />
diente beim Entwicklertreffen Zarafa<br />
Summercamp als Beispiel, wie einfach<br />
und schnell sich eigene Widgets entwickeln<br />
lassen [13].<br />
Wie alle Widgets besteht auch das Twidget-Plugin<br />
aus ein bisschen Javascript.<br />
An den Quellcode gelangt, wer sich das<br />
Plugin herunterlädt, es entpackt und das<br />
dabei herausgepurzelte Archiv »twidget‐1.1.zip«<br />
extrahiert. Die eigentliche<br />
Logik steckt in der Datei »Twidget.js« im<br />
Unterverzeichnis »twidget‐1.1/js«. Die<br />
darin enthaltenen Funktionen sind gut<br />
kommentiert, die Hauptarbeit steckt in<br />
der Funktion »loadRecord« (Listing 4).<br />
Twitter und Regex<br />
Zunächst löst sie mit Hilfe von regulären<br />
Ausdrücken die Twitter-Adresse aus dem<br />
Text einer E-Mail. Sofern sie eine solche<br />
Twitter-Adresse gefunden hat (»twitter«<br />
ist in dem Fall nicht »undefined«), baut<br />
sie eine Anfrage an Twitter im Jsonp-<br />
Format [14] zusammen und schickt das<br />
Ganze los. Um die von Twitter zurückgelieferten<br />
Nachrichten kümmert sich<br />
die (Callback-)Funktion »onTwitterUpdate()«,<br />
die wiederum die Nachrichten<br />
anzeigt. »max_count« und »include_rts«<br />
Listing 5: »FB.init()«<br />
05 appId : '223761867729127', // App ID<br />
06 channelUrl : '//'+'zarafa.com.test'+'/channel',<br />
// Path to your Channel File<br />
07 status : true, // check login status<br />
08 cookie : true, // enable cookies to allow the<br />
server to access the session<br />
09 xfbml : true // parse XFBML<br />
10 });<br />
11 },<br />
Listing 6: »doRequest()« aus<br />
»FbEventProxy«<br />
01 doRequest: function(action, rs, params, reader,<br />
callback, scope, options) {<br />
02 if (action == 'read') {<br />
03 FB.api('/me/events', function(data) {<br />
04 callback.call(scope, reader.readRecords(data),<br />
{}, true);<br />
05 });<br />
06 }<br />
07 }<br />
Abbildung 5: Wer unter Zarafa eine E-Mail öffnet, die auf einen Twitter-Account verweist, dem zeigt das<br />
Twidget-Plugin (hier ganz rechts im Bild) die dortigen Tweets an.<br />
Ivo Timmermans von Zarafa erklärt<br />
dazu: „Das Problem mit diesem Plugin<br />
ist, dass Facebook nur eine Seite pro Installation<br />
erlaubt und damit von jedem<br />
Administrator, der dieses Plugin nutzen<br />
möchte, verlangt, eine Anwendung auf<br />
Facebook zu erstellen. Er benötigt somit<br />
jeweils einen Facebook-Account und<br />
muss durch den Registrierungsprozess<br />
einer Facebook-Anwendung gehen. Dass<br />
die Namen dieser Anwendungen zudem<br />
global eindeutig sein müssen, macht die<br />
Installation kompliziert.“<br />
Der Quellcode des Facebook-Plugins liegt<br />
der Webapp allerdings schon bei. Wer<br />
mag, kann es direkt in Betrieb nehmen,<br />
ist dabei aber gänzlich auf sich allein<br />
gestellt: Bis auf eine magere Wiki-Seite<br />
[15] existiert bislang keine Dokumentation.<br />
Das Veranstaltungs-Plugin besteht<br />
wie seine beiden Kollegen aus Javascript-<br />
Code, der wiederum einfach auf das offizielle<br />
Facebook-Javascript-SDK [16]<br />
zurückgreift.<br />
Hat man sich einmal durch dessen Dokumentation<br />
gekämpft, erweisen sich<br />
die Dateien als leicht zu lesen: Zunächst<br />
initialisiert »FacebookEvents Plugin« das<br />
Facebook-SDK über die dafür vorgesehene<br />
Funktion »FB.init()« aus Listing<br />
5. Dabei erhält die Funktion auch die<br />
Anwendungs-ID, die das Anlegen der<br />
Facebook-Anwendung erzeugt.<br />
Die eigentliche Abfrage führt dann »FbEventProxy«<br />
mit seiner Funktion »doRequest()«<br />
aus, die Listing 6 zeigt. Sie aktiviert<br />
lediglich die Funktion »FB.api()«<br />
aus dem Facebook-SDK, die wiederum<br />
alle Veranstaltungen (»events«) des Benutzers<br />
(»me«) abruft [17]. Alle übrigen<br />
Javascript-Objekte und -Funktionen des<br />
Zarafa-Plugins dienen im Wesentlichen<br />
dazu, die zurückgelieferten Daten aussind<br />
Einstellungen des Twidget, die man<br />
in der Webapp mit einem Klick auf das<br />
Zahnradsymbol ändern kann.<br />
Neben dem Plugin für Twitter gibt es<br />
auch noch zwei Kollegen für Facebook.<br />
Das erste zeigt auf der Startseite die Einträge<br />
einer Pinnwand an (Abbildung 6).<br />
Von welcher Seite die Pinnwand-Nachrichten<br />
stammen, gibt der Admin in<br />
den Einstellungen des Plugins vor. Dort<br />
hinterlegt er jedoch nicht etwa den Benutzernamen<br />
eines Facebook-Mitglieds,<br />
sondern die URL einer Internetseite, die<br />
den offiziellen Facebook-Knopf »Gefällt<br />
mir« anbietet.<br />
Unter der Haube funktioniert das Facebook-Plugin<br />
ähnlich wie das Twidget: Es<br />
bindet auf der Zarafa-Seite einen Iframe<br />
ein, in dem es wiederum den Inhalt der<br />
Seite »http://www.facebook.com/plugins/activity.php?site=linux‐magazin.de«<br />
anzeigt. »linux‐magazin.de« ist dabei die<br />
in den Einstellungen hinterlegte Seite.<br />
Dieses Verfahren hat zwar den Vorteil,<br />
dass sich Zarafa nicht bei Facebook anmelden<br />
muss, im Gegenzug bleiben die<br />
Kontakte und alle weiteren persönlichen<br />
Informationen aber ungenutzt.<br />
Versteckspiel<br />
Schließlich existiert noch ein drittes<br />
Plugin, das die Veranstaltungen aus<br />
Facebook in den Kalender von Zarafa<br />
übernimmt. An die Daten gelangt das<br />
Plugin über das offizielle Facebook-API,<br />
es bedarf folglich wie bei OX zunächst<br />
einer Facebook-Anwendung, dann muss<br />
der Admin den Schlüssel wiederum dem<br />
Plugin mitteilen. Genau diese komplizierte<br />
Installation ist auch der Grund,<br />
warum die Zarafa-Entwickler das Plugin<br />
noch nicht offiziell freigegeben haben.
Tel. 0 64 32 / 91 39-749<br />
Fax 0 64 32 / 91 39-711<br />
vertrieb@ico.de<br />
www.ico.de/linux<br />
Innovative Computer • Zuckmayerstr. 15 • 65582 Diez<br />
Neueste Intel<br />
®<br />
Xeon<br />
® Prozes-<br />
soren. Jetzt mit<br />
bis zu 8 Kernen/16<br />
Threads pro CPU<br />
und bis zu 80%<br />
mehr Leistung!<br />
GmbH<br />
SEIT 1982<br />
Social-Network-APIs 12/2012<br />
Titelthema<br />
Abbildung 6: Das Facebook-Widget in Zarafa zeigt lediglich die Einträge der Pinnwand an, hier rechts im Bild<br />
die des <strong>Linux</strong>-<strong>Magazin</strong>-Facebook-Accounts.<br />
zuwerten beziehungsweise anzuzeigen.<br />
Wer weiter in den Quellcode hinabsteigen<br />
möchte, findet die Facebook-Plugins<br />
im Webapp-Quellcode-Archiv [12] in den<br />
Unterverzeichnissen »plugins/facebook«<br />
und »plugins/facebookwidget«.<br />
Fazit<br />
Wie Open-Xchange beweist, kostet es derzeit<br />
einigen Aufwand, um die Daten aus<br />
den Social Networks herauszuholen und<br />
zu verarbeiten. Dies liegt aber weniger an<br />
den Groupware-Entwicklern als an den<br />
Diensten selbst. Sie zwingen dem Administrator<br />
zunächst online das Erstellen<br />
einer Anwendung auf und rücken dann<br />
auch noch nicht einmal alle Informationen<br />
heraus. Wo ein API fehlt, muss OX<br />
sogar umständlich per Screen-Scraping<br />
die HTML-Seiten auseinandernehmen –<br />
eine Methode, bei der die Entwickler den<br />
Änderungen des Dienstes zwangsweise<br />
hinterherlaufen.<br />
Die Entwickler von Zarafa machen es sich<br />
hingegen leicht: Das Facebook-Plug in für<br />
die Veranstaltungen bleibt versteckt, die<br />
anderen zapfen einfach nur die öffentlichen<br />
Streams von Twitter und Facebook<br />
an. Das geht allerdings auch ganz unkompliziert<br />
ohne den Einsatz von Hilfsbibliotheken<br />
wie Scribe. (mfe) n<br />
Infos<br />
[1] OX Community Edition: [http:// knowledgebase.<br />
open‐xchange. com/ download‐install/<br />
community‐edition. html]<br />
[2] OX.io: [https:// www. ox. io]<br />
[3] Wikipedia zu OSGI:<br />
[http:// de. wikipedia. org/ wiki/ OSGI]<br />
[4] Twitter-Entwicklerseiten:<br />
[https:// dev. twitter. com/ apps]<br />
[5] Oauth-Protokoll: [http:// oauth. net]<br />
[6] Scribe: [https:// github. com/<br />
fernandezpablo85/ scribe‐java]<br />
[7] Scribe-Beispiele:<br />
[https:// github. com/ fernandezpablo85/<br />
scribe‐java/ tree/ master/ src/ test/ java/<br />
org/ scribe/ examples]<br />
[8] Von den OX-Plugins lesbare Daten:<br />
[http:// oxpedia. org/ wiki/ index. php?<br />
title=SupportedCrawler]<br />
[9] Wikipedia zu Yaml:<br />
[http:// de. wikipedia. org/ wiki/ YAML]<br />
[10] Htmlunit:<br />
[http:// htmlunit. sourceforge. net]<br />
[11] Zarafa-Community-Version:<br />
[https:// community. zarafa. com]<br />
[12] Zarafa-Webapp: [https:// community.<br />
zarafa. com/ pg/ plugins/ project/ 736/<br />
developer/ zarq/ zarafa‐webapp]<br />
[13] Zarafas Twidget-Plugin:<br />
[https:// community. zarafa. com/ pg/<br />
plugins/ project/ 12909/ developer/ zarq/<br />
webapp‐twitter‐widget]<br />
[14] Wikipedia zu Jsonp:<br />
[http:// en. wikipedia. org/ wiki/ JSONP]<br />
[15] Zarafa-Facebook-Plugin:<br />
[http:// www. zarafa. com/ wiki/ index. php/<br />
Facebook_plugin_installation]<br />
[16] Facebook-Javascript-SDK:<br />
[https:// developers. facebook. com/ docs/<br />
reference/ javascript/]<br />
[17] Facebook-Javascript-SDK-Referenz zur<br />
Funktion »FB.api«:<br />
[http:// developers. facebook. com/ docs/<br />
reference/ javascript/ FB. api/]<br />
BALIOS R16A 1HE SERVER<br />
• Intel ® Xeon ® E3-1220 V2 3,1GHz S1155<br />
• 2x 4GB DDR3-1600 RAM<br />
• 4x 1TB 24x7 SATA-2 HDD<br />
• Adaptec 6405E RC<br />
• Intel ® Remote Management<br />
• 2x Gigabit-LAN<br />
• Systemtest mit Debian <strong>Linux</strong> 6<br />
inkl. MwSt.<br />
exkl. MwSt.<br />
1664, 81 1399,-<br />
Art.Nr. BTO-2986611<br />
XANTHOS R25C 2HE SERVER<br />
• 2x Intel ® Xeon ® E5-2403 1,8GHz 6,4GT 10MB 4C<br />
• 6x 4GB DDR3-1600 RAM<br />
• 4x 1TB 24x7 SATA-2 HDD<br />
• Adaptec 6405 RC + NAND BBU<br />
• 2x Gigabit-LAN<br />
• Systemtest mit Debian <strong>Linux</strong> 6<br />
inkl. MwSt.<br />
exkl. MwSt.<br />
2616, 81 2199,-<br />
Art.Nr. BTO-2986612<br />
BALIOS R45B 4HE STORAGE SERVER<br />
• Intel ® Xeon ® E3-1220 V2 3,1GHz S1155<br />
• 2x 4GB DDR3-1600 RAM<br />
• 16x 1TB 24x7 SATA-2 HDD<br />
• Adaptec 51645 + BBU<br />
• 2x Gigabit-LAN<br />
• Systemtest mit Debian <strong>Linux</strong> 6<br />
inkl. MwSt.<br />
exkl. MwSt.<br />
www.linux-magazin.de<br />
3606, 81 3199,-<br />
Art.Nr. BTO-2986613<br />
27<br />
Intel<br />
® , Intel ® Logo, Intel ® Inside, Intel ® Inside Logo, Atom, Atom Inside,<br />
Xeon und Xeon Inside sind Marken der Intel Corporation in den USA und<br />
anderen Ländern.<br />
Alle Preise in Euro<br />
wir liefern auch<br />
nach Österreich<br />
u. in die Schweiz
Titelthema<br />
www.linux-magazin.de E-Commerce-APIs 12/2012<br />
28<br />
Webservices von Ebay und Amazon nutzen<br />
Weg wie warme Semmeln<br />
Gutgehende Onlineshops sind selten und das Ergebnis langer Arbeit. Wer gerade erst beginnt Waren zu verticken,<br />
tut gut daran, bei einem großen Shoppingportal unterzuschlüpfen. Über APIs lassen sich eigene Warenwirtschafts-<br />
oder Buchhaltungsprogramme anbinden. Bernhard Bablok<br />
abgewickelt. Dazu zählen das Einblenden<br />
von Suchergebnissen auf der eigenen<br />
Website oder die Marktforschung. Der<br />
Bedarf an <strong>Schnittstellen</strong> ist also vorhanden<br />
und sowohl Ebay als auch Amazon<br />
bieten hier umfassende Lösungen an.<br />
Als willkommener Nebeneffekt drängen<br />
beide Internetkonzerne Software zurück,<br />
die ihre Websites maschinell bedienen.<br />
Diese im frühen Web verbreitete Technik<br />
ist einfach zu fehleranfällig, da vom konkreten<br />
Webdesign abhängig.<br />
E Ebay<br />
© kzenon, 123RF.com<br />
Die meisten neuen Webshops kommen,<br />
wenn überhaupt, nur holpernd in Gang.<br />
Selbst eine Suchmaschinenoptimie rung<br />
der eigenen Website garantiert noch<br />
keine hohe Klick- und Kaufrate, ganz<br />
zu schweigen von der fehlenden Reputation<br />
neuer Shops. Hinzu kommen die<br />
Einstandskosten für das Aufsetzen und<br />
Anpassen der Onlineshop-Software, für<br />
Werbung sowie der Aufwand für Kaufund<br />
Zahlungsabwicklung.<br />
Als Lösung sehen viele aufstrebende<br />
Verkäufer große florierende E-Commerce-<br />
Plattformen an. Insbesondere Ebay und<br />
Amazon sind attraktiv, bei denen unzählige<br />
Verbraucher ihre Shoppingtouren<br />
beginnen. Die Firmen haben schon längst<br />
ihre Aktivitäten über Auktionen und<br />
Buchhandel hinaus ausgeweitet, und sie<br />
bieten ihre E-Commerce-Infrastruktur<br />
auch unabhängigen Händlern an.<br />
Die Waren der kooperierenden Händler<br />
erscheinen automatisch in den Trefferlisten<br />
der Verbraucher, und auch die Kaufabwicklung<br />
– Warenkorb füllen, Versandund<br />
Zahlungsmethoden wählen, „Jetzt<br />
kaufen!“ – läuft außerhalb des eigenen<br />
Shops. Services wie Zahlungsabwicklung<br />
oder Versand, hier gibt es Unterschiede in<br />
Umfang und Detail, sind ebenfalls möglich.<br />
Das alles ist nicht kostenlos, sowohl<br />
Ebay als auch Amazon verdienen an jedem<br />
verkauften Artikel mit.<br />
Kleinstanbieter managen ihre Waren und<br />
Geschäftsvorgänge per Webinterface von<br />
Hand. Aber schon bei wenigen Transaktionen<br />
pro Tag ist eine manuelle Pflege der<br />
Vorgänge ebenso mühsam wie fehleranfällig.<br />
Hier kommt Fremdsoftware ins<br />
Spiel, die auf die E-Commerce-Infrastruktur<br />
des Anbieters zugreift, allerdings<br />
nicht über die Webseiten, sondern über<br />
Standardschnittstellen.<br />
Jenseits von Angebot und Verkauf existieren<br />
noch andere Anwendungsfälle, die der<br />
Händler besser über eigene Programme<br />
Den Einstiegspunkt in die maschinellen<br />
<strong>Schnittstellen</strong> bei Ebay eröffnet [1]. Hier<br />
findet der Entwickler Guides, Tutorials,<br />
die APIs, Developer-Kits, eine Knowledgebase<br />
und vieles mehr. Die Ebay-APIs sind<br />
sehr umfangreich, Tabelle 1 gibt einen<br />
Überblick. Alleine die Dokumentation<br />
des Trading-API umfasst 1380 PDF-Seiten.<br />
Die APIs sind auch nicht überschneidungsfrei,<br />
Suchfunktionen zum Beispiel<br />
gibt es in mehr als einer Kategorie. Eine<br />
der Ursachen: Die <strong>Schnittstellen</strong> spiegeln<br />
die historische Entwicklung sowie regionale<br />
Besonderheiten wider.<br />
Ebay stellt neben der Produktionsumgebung<br />
auch eine so genannte Sandbox bereit.<br />
Programme, die nur Suchfunktionen<br />
nutzen, können Entwickler gefahrlos in<br />
ihrer Produktionsumgebung testen, für<br />
alles Invasive ist die Sandbox gedacht.<br />
Ebay beschränkt die Anzahl der API-<br />
Aufrufe pro Benutzer auf 5000 pro Tag.<br />
Wer seine Anwendung dem kostenlosen<br />
Kompatibilitäts-Check unterzieht, kann<br />
dieses Limit auf eineinhalb Millionen<br />
Aufrufe pro Tag erhöhen.<br />
Voraussetzung für die Nutzung von APIs<br />
ist die kostenlose Mitgliedschaft im „eBay
Developers Program“. Sie zu erwerben<br />
dauert nur wenige Minuten: Auf der<br />
Startseite des Ebay Developer Network<br />
[1] sitzt direkt unter dem Login-Button<br />
ein Link zur Registrierung. Obwohl Ebay<br />
international agiert, können sich die<br />
Web entwickler von Ebay aber offenbar<br />
keine Stadt mit Umlauten im Namen vorstellen.<br />
Doch unabhängig von dieser kleinen<br />
Falle klappt die Registrierung ohne<br />
Probleme.<br />
Nachdem der Anwärter User-ID, Passwort<br />
und diverse Adressdaten eingegeben<br />
hat, schickt ihm Ebay eine E-Mail mit<br />
einem Aktivierungslink. Der Klick hierauf<br />
befördert ihn zum Ebay-Developer. Über<br />
die Verwaltungsoberfläche des eigenen<br />
Accounts lässt sich der Entwickler nun<br />
einen Zugriffsschlüssel für die Sandbox<br />
und die Produktionsumgebung erzeugen.<br />
Sinnigerweise hat Ebay entsprechende<br />
Links in die Aktivierungsseite eingebaut,<br />
mit wenigen Klicks ist auch dies erledigt.<br />
Der Entwickler darf loslegen.<br />
Ebay hat eine Web-fähige Beispielanwendung<br />
vorbereitet, die per Javascript<br />
nach Artikeln sucht (siehe Listing 1 und<br />
Abbildung 1). Sie eignet sich weniger als<br />
Vorlage denn als einfache Verifikation,<br />
ob die Registrierung und Schlüsselgenerierung<br />
geklappt haben.<br />
Mit Webservices<br />
programmieren<br />
Ebay setzt bei seinen <strong>Schnittstellen</strong> im<br />
Großen und Ganzen auf klassische Webservices,<br />
also auf Soap (XML Remote<br />
Procedure Calls). Der Vorteil: Aus der<br />
<strong>Schnittstellen</strong>beschreibung WSDL erzeugen<br />
Generatoren Clientcode für fast jede<br />
Programmiersprache. Letztlich schickt<br />
der Client ein XML-Dokument an den<br />
Ebay-Server und erhält von dort ein XML-<br />
Dokument zurück. Der generierte Clientcode<br />
kümmert sich um das Ein- und Auspacken<br />
dieser Dokumente.<br />
Wer schon mit WSDL-Generatoren gearbeitet<br />
hat, kennt die damit einhergehenden<br />
Probleme. Meist muss ein Entwickler<br />
um den generierten Code einen Wrapper<br />
schreiben, der die Objekte und APIs auf<br />
das für die Programmiersprache übliche<br />
Objektmodell abstrahiert. Für Java und<br />
Dotnet hat sich Ebay diese Mühe gemacht<br />
und stellt entsprechende SDKs bereit [2].<br />
Sie decken aber nur ein Subset der APIs<br />
Abbildung 1: Ebay stellt unter [https:// www. x. com/ content/ quick‐start‐guide] eine Javascript-Beispielapplikation<br />
online bereit (siehe Listing 1).<br />
Tabelle 1: Ebay-<strong>Schnittstellen</strong> im Überblick<br />
API<br />
Trading API<br />
Finding API<br />
Shopping API<br />
Large Merchant Services<br />
Return Management API<br />
eBay Business Policies<br />
Management API<br />
Payout Details API<br />
Order Adjustment API<br />
Related Items Management<br />
API<br />
Order Size Discounts API<br />
Open eBay Apps<br />
BestMatchItemDetails API<br />
Client Alerts API<br />
Feedback API<br />
Merchandising API<br />
Platform Notifications<br />
Product Services<br />
Resolution Case Management<br />
API<br />
Research API for eBay<br />
Anwendung<br />
ab, nämlich das wichtige Trading-API sowie<br />
das Finding-API.<br />
Die SDKs zu verwenden erweist sich für<br />
geübte Programmierer nicht als Hürdenlauf.<br />
In Listing 2 ist ein Java-Beispiel<br />
abgedruckt, das fast das Gleiche tut wie<br />
das Ebay-eigene Beispiel aus Listing 1.<br />
Einzige Voraussetzung für das Kompilieren<br />
und Ausführen ist, dass die Jars aus<br />
dem Finding Kit [3] im Classpath sind.<br />
Abbildung 2 zeigt das Ergebnis.<br />
Im Programm konfiguriert der Entwickler<br />
in den Zeilen 21 bis 23 den Client,<br />
er setzt die zugeteilte Application-ID in<br />
Zeile 24 (im Beispielprogramm ist dies<br />
der erste Aufrufparameter) und verweist<br />
Bestandsmanagement, Auftragsverwaltung, Kommunikation<br />
Alles rund um die Suche (neues Suchinterface)<br />
Produkt-, Kategorie-, Objektsuche<br />
Bestands- und Auftragsverwaltung für große Anbieter<br />
Rückgabe-Verwaltung für Verkäufer in den USA<br />
Verfahrensmanagement, zum Beispiel Bezahlvarianten und Umtausch<br />
(noch nicht produktiv)<br />
Zahlungsverwaltung für Verkäufer auf Ebay.de und Ebay.at<br />
Bereinigung von Zahlungsunstimmigkeiten für Verkäufer auf<br />
Ebay.de und Ebay.at<br />
Bündeln von Produkten<br />
Sonderangebote verwalten<br />
In Ebay.com (USA) eingebettete Applikationen (nicht mehr verfügbar)<br />
Suchoptimierung<br />
Leichtgewichtige Event-Benachrichtigung, zum Beispiel zum Ende<br />
einer Auktion<br />
Verkäufer-Bewertungen analysieren<br />
Zusätzliche Angebote, beispielsweise ähnliche Artikel anzeigen<br />
oder meistverkaufte Produkte<br />
Registrierung von Callbacks für Ereignisse (anstatt Polling)<br />
Abfrage von Produktkompatibilität („Passt das Rad an das Auto?“)<br />
Fälle aus dem Käuferschutzprogramm verwalten (für USA, UK und D)<br />
Marktforschung<br />
E-Commerce-APIs 12/2012<br />
Titelthema<br />
www.linux-magazin.de<br />
29
Titelthema<br />
www.linux-magazin.de E-Commerce-APIs 12/2012<br />
30<br />
Abbildung 2: Das Suchergebnis des Java-Programms aus Listing 2.<br />
(in Amazon-Sprache) „Power-Anbieter“<br />
mit einem Verkaufsvolumen von mehr<br />
als 40 Artikeln pro Monat. Die Grundgebühr<br />
beträgt hierfür pro Monat aktuell<br />
39 Euro. Beauftragt ein Verkäufer einen<br />
Entwickler, so wird noch mal der gleiche<br />
Betrag fällig, denn jeder Entwickler benötigt<br />
ein Verkäuferkonto.<br />
Die Einstiegshürden liegen also hoch,<br />
das Angebot richtet sich offensichtlich an<br />
große Shops. Trotz der hohen Preise gibt<br />
sich Amazon knauserig bei den Transaktionen.<br />
Pro API gibt es eine Obergrenze<br />
an gleichzeitigen Requests, typischerweise<br />
zehn. Ist sie erreicht, beträgt die<br />
so genannte Restore Rate ein Re quest<br />
pro Minute. 20 API-Aufrufe dauern also<br />
mindestens 10 Minuten. Amazon schützt<br />
damit seine Infrastruktur und zwingt den<br />
Entwickler zu effizientem Transaktionsmanagement.<br />
Wer aber in der eigenen<br />
Anwendung zum Beispiel seinen Lagerbestand<br />
in Echtzeit überwachen will,<br />
kommt damit nicht weit.<br />
Auch Amazon teilt seine <strong>Schnittstellen</strong> in<br />
Kategorien (siehe Tabelle 2). Technisch<br />
hat der Konzern seine APIs von Webservices<br />
auf proprietäre <strong>Schnittstellen</strong> umgestellt,<br />
je API bietet er passende SDKs<br />
an (PHP, C#, Java). Für Anwendungsentwickler<br />
bedeutet dies eine Vereinfachung,<br />
allerdings schränken die neuen Schnittper<br />
Global-ID auf die Ebay-Site, die er<br />
abfragen möchte. Eine Liste der IDs gibt<br />
es auf den Developer-Seiten oder der Entwickler<br />
fragt sie per API ab.<br />
Die eigentliche Abfrage erfolgt über die<br />
Klasse »FindItemsByKeywords« (Zeilen<br />
30 bis 32). Den Suchbegriff übergibt<br />
der Anwender im Beispiel als zweites<br />
Programm argument. Die Zeilen 34 bis<br />
36 sorgen dafür, dass pro Abfrage nicht<br />
alle Treffer, sondern nur »ENTRIES_PER_<br />
PAGE« zurückkommen. Die Gesamtzahl<br />
der Treffer sowie die notwendigen Abfragen<br />
für alle Treffer liest das Programm<br />
nach der ersten Serverantwort in den<br />
Zeilen 46 bis 50. Um das Beispiel kurz<br />
zu halten, fehlt im Listing 2 letztlich die<br />
Iteration über alle notwendigen Requests.<br />
Dafür wären weitere Requests notwendig,<br />
die im »PaginationInput«-Objekt jeweils<br />
die angeforderte Seite setzen müsste.<br />
E Amazon<br />
Auch Amazon bietet maschinelle <strong>Schnittstellen</strong><br />
für die Verkaufsunterstützung an:<br />
die „Amazon Marketplace Webservices“<br />
(Amazon MWS, [4]). Sie richten sich an<br />
Listing 1: Suche bei Ebay mit Javascript<br />
01 <br />
02 <br />
03 eBay Search Results<br />
04 body { font‐family: arial,sans‐serif;} <br />
05 <br />
06 <br />
07 eBay Search Results<br />
08 <br />
09 <br />
10 <br />
11 function _cb_findItemsByKeywords(root)<br />
12 {<br />
13 var items = root.findItemsByKeywordsResponse[0].searchResult[0].item<br />
|| [];<br />
14 var html = [];<br />
15 html.push('');<br />
16 <br />
17 for (var i = 0; i < items.length; ++i)<br />
18 {<br />
19 var item = items[i];<br />
20 var title = item.title;<br />
21 var pic = item.galleryURL;<br />
22 var viewitem = item.viewItemURL;<br />
23 <br />
24 if (null != title && null != viewitem)<br />
25 {<br />
26 html.push('' + '' +<br />
'' +<br />
27 '' + title +<br />
'');<br />
28 }<br />
29 }<br />
30 html.push('');<br />
31 document.getElementById("results").innerHTML = html.join("");<br />
32 }<br />
33 <br />
34 <br />
35 <br />
38 <br />
39 <br />
40 <br />
41
stellen den Spielraum für die Client-Programmiersprache<br />
ein. Amazon stellt auch<br />
einen Leitfaden für die Migration von den<br />
alten, Soap-basierten APIs bereit.<br />
Fazit<br />
Beide große E-Commerce-Sites unterstützen<br />
den Zugriff Dritter auf ihre Datenbestände<br />
in umfassender Weise. Ebay hat<br />
dabei die Nase vorn, denn die Einstiegshürden<br />
liegen niedrig. Ein Betreiber einer<br />
Tabelle 2: Amazon-APIs<br />
API<br />
Datenübertragung an Amazon<br />
Berichte<br />
Inbound Shipments<br />
Inventory<br />
Outbound Shipments<br />
Bestellungen<br />
Produkte<br />
Verkäufer<br />
Anwendung<br />
Liebhaberseite für Haustiere könnte etwa<br />
ohne Probleme bei einer Suchanfrage<br />
auf seiner Site zusätzlich zu den lokalen<br />
Treffern auch noch aktuell angebotene<br />
Produkte auf Ebay einblenden. Ebay profitiert<br />
von den erhöhten Umsätzen und<br />
beteiligt den Site-Betreiber.<br />
Amazon dagegen beschränkt seine Market-Webservices<br />
auf Profi-Seller. Wer nur<br />
das Angebot auf Amazon abfragen will,<br />
muss sich mit dem Screen-Scraping der<br />
normalen Amazon-Website und seinen<br />
Produkte verwalten<br />
Bestellungen verwalten (Berichte)<br />
Versandmanagement (Shop an Amazon-Logistikzentrum)<br />
Den eigenen Lagerbestand im Amazon-Logistikzentrum<br />
verwalten<br />
Versandmanagement (Logistikzentrum an Kunden)<br />
Bestellungen verwalten<br />
Produktinformationen abfragen (Preise, Attribute)<br />
Umsätze von Händlern verwalten<br />
Nachteilen zufrieden geben. Zum Glück<br />
hat Amazon Bücher im Angebot, die<br />
diese Technik erläutern. (jk) n<br />
Infos<br />
[1] Ebay Developer Network:<br />
[https:// www. x. com/ developers/ ebay]<br />
[2] Java-SDKs für Ebay:<br />
[https:// www. x. com/ developers/ ebay/<br />
documentation‐tools/ sdks]<br />
[3] Finding Kit: [http:// developer. ebay. com/<br />
DevZone/ codebase/ javasdk‐jaxb/<br />
FindingKitJava_1. 0. zip]<br />
[4] Amazon Webservices:<br />
[https:// developer. amazonservices. de]<br />
Der Autor<br />
Bernhard Bablok betreut bei der Allianz<br />
Managed&Operations Services SE ein großes<br />
Datawarehouse mit technischen Performancemessdaten<br />
von Mainframes bis zu Servern. Wenn<br />
er nicht Musik hört, mit dem Radl oder zu Fuß<br />
unterwegs ist, beschäftigt er sich mit Themen<br />
rund um <strong>Linux</strong> und Objektorientierung.<br />
E-Commerce-APIs 12/2012<br />
Titelthema<br />
www.linux-magazin.de<br />
31<br />
Listing 2: Suche bei Ebay mit Java<br />
01 import java.util.List;<br />
02 <br />
03 import com.ebay.services.client.ClientConfig;<br />
04 import com.ebay.services.client.FindingServiceClientFactory;<br />
05 import com.ebay.services.finding.FindItemsByKeywordsRequest;<br />
06 import com.ebay.services.finding.FindItemsByKeywordsResponse;<br />
07 import com.ebay.services.finding.FindingServicePortType;<br />
08 import com.ebay.services.finding.PaginationInput;<br />
09 import com.ebay.services.finding.PaginationOutput;<br />
10 import com.ebay.services.finding.SearchItem;<br />
11 <br />
12 public class SearchEbay {<br />
13 <br />
14 public static final int ENTRIES_PER_PAGE = 10;<br />
15 <br />
16 public static void main(String[] args) {<br />
17 try {<br />
18 <br />
19 // setup environment ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐<br />
20 <br />
21 ClientConfig config = new ClientConfig();<br />
22 config.setApplicationId(args[0]);<br />
23 config.setGlobalId("EBAY‐DE");<br />
24 <br />
25 FindingServicePortType serviceClient =<br />
26 FindingServiceClientFactory.getServiceClient(config);<br />
27 <br />
28 // setup request ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐<br />
29 <br />
30 FindItemsByKeywordsRequest request =<br />
31 new FindItemsByKeywordsRequest();<br />
32 request.setKeywords(args[1]);<br />
33 <br />
34 PaginationInput pi = new PaginationInput();<br />
35 pi.setEntriesPerPage(ENTRIES_PER_PAGE);<br />
36 request.setPaginationInput(pi);<br />
37 <br />
38 // execute request ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐<br />
39 <br />
40 FindItemsByKeywordsResponse result =<br />
41 serviceClient.findItemsByKeywords(request);<br />
42 <br />
43 // handle result ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐<br />
44 <br />
45 System.out.println("\nStatus = "+result.getAck());<br />
46 PaginationOutput po = result.getPaginationOutput();<br />
47 System.out.println("Anzahl Treffer gesamt: " +<br />
48 po.getTotalEntries());<br />
49 System.out.println("Notwendige Requests: " +<br />
50 po.getTotalPages());<br />
51 <br />
52 System.out.println("Anzahl Treffer in diesem Request: " +<br />
53 result.getSearchResult().getCount() + "\n");<br />
54 <br />
55 System.out.println("‐‐‐‐‐‐ Trefferliste ‐‐‐‐‐‐‐‐‐\n");<br />
56 <br />
57 List items = result.getSearchResult().getItem();<br />
58 for(SearchItem item : items) {<br />
59 System.out.println(item.getTitle());<br />
60 }<br />
61 <br />
62 } catch (Exception ex) {<br />
63 // handle exception if any<br />
64 ex.printStackTrace();<br />
65 }<br />
66 }<br />
67 }
Titelthema<br />
www.linux-magazin.de GIS-APIs 12/2012<br />
32<br />
Kartenanwendungen programmieren mit Google Maps und Open Streetmap<br />
Eigene Wege<br />
Online-Kartendienste gehören zu den Standard-Accessoires von Anwendern, die Dienstreisen, Wanderungen<br />
und Ausflüge planen oder abrechnen. Dieser Artikel zeigt, wie Programmierer die Karten-APIs von Google und<br />
Open Streetmap in Javascript-Dateien einbinden, die der Webserver ausliefert. Björn Schilberg<br />
© Franz Pfluegl, Fotolia<br />
Wer die eigene Webseite mit Karten<br />
ausstatten will, greift auf die Javascript-<br />
Client-APIs der Dienste zu. Die kleinen<br />
Skripte laufen im Browser und benötigen<br />
meist keine Serverkomponente, abgesehen<br />
vielleicht von einem sinnvollen<br />
HTTP-Proxy für externe Dienste.<br />
Dieser Artikel vergleicht die beiden Ansätze,<br />
das Google-Maps-API [4] und den<br />
Zugriff auf Open Streetmap durch das<br />
Open-Layers-API [5] anhand einer kleinen<br />
Webanwendung, die Fahrzeit und Distanz<br />
zwischen zwei Orten ermittelt. Mit<br />
dem Kartendienst definiert der Anwender<br />
Anfangs- und Endpunkt der Reise durch<br />
simple Mausklicks auf einer Karte, eingebettet<br />
in die HTML-Datei aus Listing 1.<br />
Reisekosten, Wanderung oder Fahrradtour:<br />
Heute organisiert der IT-kundige Anwender<br />
derlei mit Google Maps oder Open<br />
Streetmap. Die APIs der beiden Marktführer<br />
machen es Entwicklern leicht, das<br />
verfügbare Kartenmaterial in eigene Apps<br />
oder Webseiten zu integrieren. Ein einfaches<br />
HTML-Gerüst mit klickbarer Karte<br />
dient diesem Artikel als Beispiel für eine<br />
Entfernungsberechnung, wie sie mobile<br />
Nomaden etwa für die monatliche Spesenabrechnung<br />
brauchen.<br />
Der augenfälligste Unterschied zwischen<br />
den Kartendiensten liegt zunächst im<br />
rechtlichen Rahmen: Google verwirrt<br />
mit unübersichtlichen Bedingungen. Die<br />
Rechte an den Karten und Luftbildern<br />
sind vielfältig, bestimmte Nutzungen kosten<br />
Geld, und Google behält es sich vor,<br />
die übertragenen Daten zu nutzen [1].<br />
Open Streetmap verspricht eine „freie,<br />
editierbare Karte der gesamten Welt, die<br />
von Menschen wie Dir erstellt wird“ [2].<br />
Freie Software, die die Daten nutzt, gibt<br />
es zuhauf – fürs mobile Gerät bietet sich<br />
als Alternative zu Google Maps etwa<br />
Navfree [3] an, das OSM-Karten auch<br />
offline auf den Androiden bringt.<br />
Google Maps<br />
Die zweite Zeile dieses Template bindet<br />
die benötigte Javascript-Bibliothek<br />
»map.js« ein, die den eigentlichen Zugriff<br />
auf die APIs abwickelt. Listing 2<br />
zeigt den benötigten Verweis auf Googles<br />
Dienst: Dabei reicht eine Zeile, wobei der<br />
Parameter »v=3.10« die Version des API<br />
festlegt und so spätere Überraschungen<br />
vermeiden hilft. »sensor=false« gibt an,<br />
dass der Client keinen Sensor zur eigenen<br />
Ortsbestimmung verwendet.<br />
Im »body« der HTML-Datei folgen Bereiche<br />
für Karte und Text. Der Javascript-Teil<br />
wird später anhand der »id«-Tags erkennen,<br />
wo er seinen Inhalt einfügen soll.<br />
Listing 1: »template-index.html«<br />
01 <br />
02 <br />
03 <br />
04 <br />
05 <br />
06 Startpunkt ‐<br />
07 Endpunkt ‐<br />
08 Distanz ‐<br />
09 Zeit ‐<br />
10
Abbildung 1: Selbst geskriptet: Fahrtdaten per Google-Maps-API im Webbrowser.<br />
Beim ersten Aufruf startet der Browser<br />
die Funktion »initialize()« aus »map.js«<br />
(Listing 3). In Zeile 12 ruft die Funktion<br />
»google.maps.Map()« mit entsprechenden<br />
»mapOptions« auf. Der Benutzer erhält so<br />
im Kartenbereich der Webseite eine auf<br />
Deutschland zentrierte Karte vom Typ<br />
»ROADMAP« – der Standard-Straßenansicht<br />
(Abbildung 1). Neben den Kartentypen<br />
»SATELLITE«, »HYBRID« und<br />
»TERRAIN« lassen sich hier auch diverse<br />
eigene Stile verwenden ([6], [7]).<br />
Die weiteren Zeilen von »initalize()« definieren<br />
die Funktion, die Markierungen<br />
setzt, wenn der Nutzer mit der Maus<br />
klickt: Bei einem Klick in die Karte speichert<br />
die Funktion »placeMarker()« die<br />
Position und zeigt ein rotes Icon an. Beim<br />
zweiten Klick gibt<br />
der Dienst »DistanceMatrixService()«<br />
das Ergebnis zurück,<br />
was ab Zeile<br />
18 den Inhalt der<br />
rechten Spalte der<br />
Webseite füllt.<br />
Durch das Lesen<br />
der API-Dokumentation<br />
oder Herumstöbern<br />
in den<br />
Werten mit einem Javascript-Debugger<br />
wie beispielsweise Firebug lassen sich die<br />
gewünschten Elemente im Rückgabewert<br />
finden. Abbildung 1 zeigt dann das fertige<br />
Ergebnis.<br />
Der nächste Klick löscht die zwei alten<br />
Markierungen und setzt einen neuen<br />
Ausgangspunkt für die geplante Route.<br />
»google.maps.Tra vel Mode.DRIVING« in<br />
Zeile 45 fordert eine Route für Automobile<br />
an. Alternativen zum »DRIVING«-<br />
Modus sind »BICYCLING«, »TRANSIT«<br />
oder »WALKING«.<br />
OSM mit Open Layers<br />
Der Einsatz von Open Layers und Open<br />
Streetmap erfordert etwas mehr Vorarbeit.<br />
Listing 4 zeigt, dass neben Open Layers<br />
noch eine weitere Bibliothek aus dem<br />
HTML-Template aufzurufen ist: Jquery<br />
[8] für die Kommunikation mit dem<br />
Yours-Dienst für die Fahrroutenberechnung<br />
(Yet another Open Streetmap Route<br />
Service, [9]) und dem Dienst für die Adresskodierung<br />
(Nominatim, [10]). Mit<br />
75 zu 50 Zeilen fällt das OSM-Javascript<br />
(Listing 5) auch deutlich länger aus, und<br />
das, obwohl das Beispiel einige Funktionen<br />
nur gekürzt zeigt. Die ausführliche<br />
Versionen findet sich unter [11].<br />
Gleich in der ersten Zeile fällt die Angabe<br />
eines Proxys auf. Er ist erforderlich,<br />
um eine Sicherheitsfunktion moderner<br />
Browser zu umgehen. Die Same-Origin-<br />
Policy soll verhindern, dass Angreifer via<br />
Javascript Rechner anfragen, die nicht<br />
zur gleichen Domäne gehören. Google<br />
schafft es, diese Einschränkung zu umgehen,<br />
aber einige andere Netzdienste sind<br />
nicht so clever.<br />
Als Beispiel für einen solchen Dienst<br />
steuert das Skript Yours an, um dessen<br />
Listing 2: »google.script«<br />
01 <br />
GIS-APIs 12/2012<br />
Titelthema<br />
www.linux-magazin.de<br />
33<br />
Listing 3: »map.js« (Google)<br />
01 var map;<br />
02 var markers;<br />
03 <br />
04 function initialize() {<br />
05 markers = [];<br />
06 <br />
07 var mapOptions = { zoom: 5,<br />
08 center: new google.maps.LatLng(52, 8),<br />
09 mapTypeId: google.maps.MapTypeId.ROADMAP<br />
10 };<br />
11 <br />
12 map = new google.maps.Map(document.getElementById('mapPanel'),<br />
mapOptions);<br />
13 google.maps.event.addListener(map, 'click', function(event) {<br />
14 placeMarker(event.latLng);<br />
15 });<br />
16 }<br />
17 <br />
18 function useResult(response, stat) {<br />
19 markers[1].setTitle(response.rows[0].elements[0].distance.text);<br />
20 <br />
21 document.getElementById('routeStart').innerHTML=response.<br />
originAddresses;<br />
22 document.getElementById('routeEnd').innerHTML=response.<br />
destinationAddresses;<br />
23 document.getElementById('routeLength').innerHTML=<br />
24 response.rows[0].elements[0].distance.text;<br />
25 document.getElementById('routeTime').innerHTML=<br />
26 response.rows[0].elements[0].duration.text;<br />
27 }<br />
28 <br />
29 function placeMarker(location) {<br />
30 if (markers.length >= 2 && markers[0] !== null && markers[1] !==<br />
null) {<br />
31 for (var i = 0; i < markers.length; ++i) {<br />
32 markers[i].setMap(null);<br />
33 }<br />
34 markers = [];<br />
35 }<br />
36 <br />
37 var marker = new google.maps.Marker({ position: location, map: map });<br />
38 markers.push(marker);<br />
39 <br />
40 if (markers.length === 2) {<br />
41 var service = new google.maps.DistanceMatrixService();<br />
42 service.getDistanceMatrix({<br />
43 destinations : [ markers[1].getPosition() ],<br />
44 origins : [ markers[0].getPosition() ],<br />
45 travelMode : google.maps.TravelMode.DRIVING<br />
46 }, useResult);<br />
47 }<br />
48 }
Titelthema<br />
www.linux-magazin.de GIS-APIs 12/2012<br />
34<br />
Routingfunktionen zu nutzen. Geeignete<br />
Proxy-Skripte sind in den Wikis von Open<br />
Layers und Open Streetmap verlinkt. Die<br />
verwenden jedoch unterschiedliche Konventionen,<br />
das dort empfohlene »proxy.<br />
cgi« beispielsweise erwartet in Zeile 31<br />
(Listing 5) ein »&«, kein »?«.<br />
Python-Webserver<br />
Wer das OSM-Beispiel testen will, muss<br />
einen Webserver aufsetzen, der »map.js«,<br />
»index.html« und »proxy.cgi« anbietet.<br />
Ungeduldige probieren den minimalistischen<br />
Python-Webserver aus Listing 6.<br />
Den startet »python simpleserver.py« in<br />
01 <br />
02 <br />
Listing 4: »osm.script«<br />
dem Verzeichnis mit den drei Dateien,<br />
danach findet sich die Anwendung auf<br />
Port 6779 des Localhost.<br />
Die Funktion »initalize()« in Listing 5<br />
leistet Vergleichbares wie ihre Namensschwester<br />
im Google-Skript. Die vom<br />
Mausklick ausgelöste »placeMarker()«-<br />
Funktion ab Zeile 46 enthält zwei Besonderheiten.<br />
Zum einen initialisiert<br />
sie die Markierung ausführlicher, zum<br />
anderen muss das Skript die resultierenden<br />
Punkte erst in Latitude-Longitude-<br />
Koordinaten projizieren. Erst mit den<br />
resultierenden Werten ruft es dann die<br />
anderen Dienste auf. Das geschieht in<br />
den Funktionen »queryLocationInfo()«<br />
(ab Zeile 21) für die Adressenkodierung<br />
und »queryRoutingInfo()« (ab Zeile 29)<br />
für die Routenberechnung.<br />
Jquery übernimmt die Kommunikation<br />
mit den jeweiligen APIs und parst die<br />
Ergebnisse in eine Datenstruktur. Wer<br />
Zeile 37 weglässt, erhält sogar die Geometrie<br />
für die errechnete Route. Und in<br />
Zeile 35 kann er natürlich auch ein anderes<br />
Fortbewegungsmittel als ein Auto<br />
eintragen. Darüber hinaus lassen sich mit<br />
dem Parameter »instructions« auch gleich<br />
die Routinganweisungen ausgeben. Weitere<br />
mögliche Parameter des Yours-Routing-API<br />
finden sich in der entsprechende<br />
Wiki-Seite [9].<br />
Formate, Koordinaten,<br />
Verfügbarkeit<br />
Die Grundfunktionen zur Navigation in<br />
der Karte gleichen sich bei den APIs.<br />
Bei beiden ist eine Zoomfunktion per<br />
Mausrad verfügbar, ein Zoomwerkzeug<br />
zum Heranholen eines per Maus ausgewählten<br />
Bereichs gibt es aber nur bei<br />
Open Layers. Das bietet an vielen Stellen<br />
mehr professionelle GIS-Unterstützung,<br />
beispielsweise bei der Integration verschiedener<br />
Dienste und Daten.<br />
Listing 5: »map.js« (OSM, gekürzt)<br />
01 var PROXY_HOST="http://localhost:6779/<br />
cgi‐bin/proxy.cgi?url="<br />
02 var map;<br />
03 var markers;<br />
04 var markerLayer;<br />
05 <br />
06 function initialize() {<br />
07 markers = [];<br />
08 mapOptions = {};<br />
09 <br />
10 map = new OpenLayers.Map("mapPanel",<br />
mapOptions);<br />
11 markerLayer = new OpenLayers.Layer.Markers(<br />
"Markers" );<br />
12 map.addLayer(new OpenLayers.Layer.OSM());<br />
13 map.addLayer(markerLayer);<br />
14 <br />
15 map.events.register("click", map,<br />
function(e) {<br />
16 placeMarker(map.getLonLatFromPixel<br />
(e.xy)); });<br />
17 <br />
18 //CENTER MAP HERE<br />
19 }<br />
20 <br />
21 function queryLocationInfo(lonlat,<br />
infoCallback) {<br />
22 var addrUrl = "http://nominatim.<br />
openstreetmap.org/reverse/?addressdetails=1&<br />
format=json";<br />
23 addrUrl += "&lon=" + lonlat.lon;<br />
24 addrUrl += "&lat=" + lonlat.lat;<br />
25 <br />
26 $.getJSON(addrUrl, infoCallback);<br />
27 }<br />
28 <br />
29 function queryRoutingInfo(startPoint,<br />
endPoint) {<br />
30 var routeUrl = PROXY_HOST + "http://www.<br />
yournavigation.org/api/1.0/gosmore.php";<br />
31 routeUrl += "?flat=" + startPoint.lat;<br />
// ATTENTION "&" or "?" it depends<br />
32 routeUrl += "&flon=" + startPoint.lon;<br />
33 routeUrl += "&tlat=" + endPoint.lat;<br />
34 routeUrl += "&tlon=" + endPoint.lon;<br />
35 routeUrl += "&v=motorcar";<br />
36 routeUrl += "&fast=1";<br />
37 routeUrl += "&geometry=0";<br />
38 routeUrl += "&format=geojson";<br />
39 <br />
40 $.getJSON(routeUrl, function (result) {<br />
41 document.getElementById('routeLength').<br />
innerHTML=result.properties.distance;<br />
42 document.getElementById('routeTime').<br />
innerHTML=result.properties.traveltime;<br />
43 });<br />
44 }<br />
45 <br />
46 function placeMarker(location) {<br />
47 if (markers.length >= 2 && markers[0] !==<br />
null && markers[1] !== null) {<br />
48 for (var i = 0; i < markers.length; ++i)<br />
{<br />
49 markerLayer.removeMarker(markers[i]);<br />
50 }<br />
51 markers = [];<br />
52 }<br />
53 <br />
54 var size = new OpenLayers.Size(21,25);<br />
55 var offset = new OpenLayers.<br />
Pixel(‐(size.w/2), ‐size.h);<br />
56 var icon = new OpenLayers.Icon('http://<br />
www.openlayers.org/dev/img/marker.png', size,<br />
offset);<br />
57 var marker = new OpenLayers.Marker<br />
(location, icon);<br />
58 markerLayer.addMarker(marker);<br />
59 markers.push(marker);<br />
60 <br />
61 if (markers.length === 2) {<br />
62 var p1 = markers[0].lonlat;<br />
63 p1.transform(map.getProjectionObject(),<br />
64 new OpenLayers.Projection<br />
("EPSG:4326"));<br />
65 var p2 = markers[1].lonlat;<br />
66 p2.transform(map.getProjectionObject(),<br />
67 new OpenLayers.Projection<br />
("EPSG:4326"));<br />
68 <br />
69 queryLocationInfo(markers[0].lonlat,<br />
function(response) {<br />
70 document.getElementById('routeStart').<br />
innerHTML=response.display_name; });<br />
71 queryLocationInfo(markers[1].lonlat,<br />
function(response)<br />
72 document.getElementById('routeEnd').<br />
innerHTML=response.display_name; });<br />
73 queryRoutingInfo(markers[0].lonlat,<br />
markers[1].lonlat);<br />
74 }<br />
75 }
Dazu gehört die Anzeige von OSM-,<br />
Bing-, Yahoo- und Google-Karten genauso<br />
wie die Unterstützung professioneller<br />
und standardisierter Dienste wie Web<br />
Map Service (WMS), Web Feature Service<br />
(WFS), Web Map Tile Service (WMTS)<br />
sowie propietärer professioneller Anbieter<br />
wie ESRIs Arc GIS Mapping Services.<br />
Auch kommt es mit zahlreichen Datenformaten<br />
wie KML, Geo RSS, Geo Json,<br />
Json und GPX. Details nennt die Open-<br />
Layers-API-Dokumentation [12].<br />
Google fokussiert die Unterstützung der<br />
eigenen Dienste und beschränkt sich auf<br />
KML, Geo RSS und einige Google-Angebote<br />
wie Heatmap-, Traffic- und Bicycle-<br />
Layer. Open Layers erlaubt Dienste und<br />
Daten in verschiedenen Koordinatensystemen,<br />
während Google standardmäßig<br />
nur die geografischen Koordinaten mit<br />
Breite und Länge sowie zwei Arten von<br />
Kartenkoordinaten auf Basis der Mercator-Projektion<br />
[13] bietet.<br />
Beide Javascript-APIs unterstützen mit<br />
Firefox, Internet Explorer und Safari die<br />
wichtigsten Webbrowser. Bei Open Layers<br />
sind etwas ältere Versionen noch offiziell<br />
dabei [14], dafür tauchen Chrome<br />
und Browser für Touchdevices nicht auf,<br />
die Google als Hersteller von Android<br />
natürlich auf dem Radar hat [15].<br />
Dass der freie Navigationsdienst Yours<br />
weniger gut verfügbar ist als Google, verwundert<br />
nicht – im Test vor Redaktionsschluss<br />
versagte das Routing leider immer<br />
wieder. Dafür gibt es bei Yours aber<br />
Software, mit der sich eigene Dienste<br />
aufsetzen lassen, auch für Karten und<br />
die Positionierung. Der eigene Server hat<br />
Vorteile, vor allem wenn es darum geht,<br />
die Eigenschaften der Karte wie Projektion,<br />
grafischer Stil und Einbindung der<br />
Schichten anzupassen. Das wird immer<br />
wieder nötig, vor allem wenn beim<br />
Kunden schon Daten vorliegen, die der<br />
Entwickler einbinden soll, oder es tiefer<br />
gehende Anforderungen an Darstellung<br />
oder Datenschutz gibt.<br />
Sowohl Google als auch OSM bemühen<br />
sich um eine gute Dokumentation und<br />
ansprechende Beispiele.<br />
Open Layers<br />
liegt dabei leicht hinten.<br />
So sind Teile des<br />
Google-Maps-API bereits<br />
ins Deutsche<br />
übersetzt, während es<br />
bei Open Layers zwar<br />
nur englischen Text<br />
gibt, aber notfalls auch<br />
voller Zugriff auf den<br />
Quelltext möglich ist.<br />
Fazit<br />
Beim Google-Maps-Javascript-API fällt<br />
der Einstieg deutlich leichter als bei Open<br />
Layers. Skripte sind bis zu einem Drittel<br />
kürzer, der Programmierer bekommt alles<br />
aus einer Hand. Dabei kann er auf gut dokumentierte<br />
und integrierte Dienste und<br />
Bibliotheken zurückgreifen.<br />
Sobald es aber anspruchsvollere, gewerbliche<br />
Anwendungen betrifft, stellt die<br />
Vielfalt der freien Softwareprodukte um<br />
Open Layers und OSM einen erheblichen<br />
Vorteil dar (Abbildung 2). Hier können<br />
Entwickler hinter die Kulissen blicken<br />
und die Eigenschaften der gewählten<br />
Lösung genau inspizieren. Bei Google<br />
hingegen steht dann eine genauere Auseinandersetzung<br />
mit den Nutzungsbedingungen<br />
und Preisen an. (mfe) n<br />
Infos<br />
[1] Googles Regeln: [http:// www. google.<br />
com/ policies/ privacy/]<br />
[2] Open Streetmap:<br />
[http:// www. openstreetmap. org]<br />
[3] Navfree: [http://www.navmii.com]<br />
[4] Google-Maps-API:<br />
[https:// developers. google. com/ maps/]<br />
Listing 6: »simpleserver.py«<br />
01 import SocketServer<br />
02 import SimpleHTTPServer<br />
03 import urllib<br />
04 <br />
05 PORT = 6779<br />
06 PREFIX = "/cgi‐bin/proxy.cgi?url="<br />
Abbildung 2: Open Streetmap bietet mehr Profi-Features als Googles API.<br />
[5] Open Layers: [http:// openlayers. org]<br />
[6] Google-Javascript-Basics:<br />
[https:// developers. google. com/ maps/<br />
documentation/ javascript/ basics? hl=de]<br />
[7] Googles Styling-Definitionen:<br />
[https:// developers. google. com/ maps/<br />
documentation/ javascript/ styling? hl=de]<br />
[8] Jquery: [http:// jquery. com]<br />
[9] OSM-Routenberechnung: [http:// wiki.<br />
openstreetmap. org/ wiki/ YOURS]<br />
[10] Adresskodierung: [http:// wiki.<br />
openstreetmap. org/ wiki/ DE:Nominatim]<br />
[11] OSM-Skript: [ftp:// ftp. intevation. de/<br />
geospatial/ linuxmagazin/ 2012/ 12/]<br />
[12] Open-Layers-API-Dokumentation:<br />
[http:// dev. openlayers. org/ releases/<br />
OpenLayers‐2. 12/ doc/ apidocs/ files/<br />
OpenLayers/ Layer‐js. html], [http:// dev.<br />
openlayers. org/ releases/ OpenLayers‐2.<br />
12/ doc/ apidocs/ files/ OpenLayers/<br />
Format‐js. html]<br />
[13] Koordinaten: [https:// developers. google.<br />
com/ maps/ documentation/ javascript/<br />
maptypes? hl=de# MapCoordinates]<br />
[14] Browser-Support bei OSM: [http:// trac.<br />
osgeo. org/ openlayers/ wiki/ Browsers]<br />
[15] Browser-Support bei Google:<br />
[https:// developers. google. com/ maps/<br />
faq? hl=de# browsersupport]<br />
12 #print "path = ", self.path<br />
13 if self.path[0:len(PREFIX)] == PREFIX:<br />
14 self.copyfile(urllib.urlopen(self.path<br />
[len(PREFIX):]), self.wfile)<br />
15 else:<br />
16 self.copyfile(open("." + self.path),<br />
GIS-APIs 12/2012<br />
Titelthema<br />
www.linux-magazin.de<br />
35<br />
Der Autor<br />
Diplom-Geograph Björn Schilberg begann an der<br />
Uni eine Promotion über 3-D-Geodatenbanken.<br />
Seit 2009 arbeitet er im Geo-Bereich von Intevation<br />
an GDI-Sicherheitskonzepten und Web-GIS.<br />
07 <br />
08 class Proxy(SimpleHTTPServer.<br />
SimpleHTTPRequestHandler):<br />
09 def do_GET(self):<br />
10 self.send_response(200)<br />
11 self.end_headers()<br />
self.wfile)<br />
17 <br />
18 httpd = SocketServer.ForkingTCPServer<br />
(('', PORT), Proxy)<br />
19 print "serving at port", PORT<br />
20 httpd.serve_forever()
Titelthema<br />
www.linux-magazin.de Entwickler-Tools 12/2012<br />
36<br />
APIs für Web-basierte Entwickler-Tools und ‐Dienste<br />
Fernbedienung<br />
Web-basierte Entwicklerwerkzeuge wie Bugzilla oder Github bieten ein Web-API, über das man sie mit eigenen<br />
Skripten abfragen und in bestimmten Grenzen auch fernsteuern kann. Tim Schürmann<br />
(Abbildung 1). Statt per Browser kann<br />
der Anwender die URL auch mit dem<br />
Kommandozeilen-Client Curl aufrufen:<br />
curl ‐i "https://api.github.com/repos/U<br />
mojombo/jekyll/issues/624"<br />
© Robert Kacpura, 123RF.com<br />
01 import urllib2<br />
Entwickler hantieren nicht nur mit Editor<br />
und Compiler, sondern auch mit zahlreichen<br />
Hilfswerkzeugen. Bei diesen handelt<br />
es sich häufig um Webanwendungen<br />
oder Webdienste – von Repositories wie<br />
Github [1] bis zu Bugtracking-Systemen<br />
wie Bugzilla [2].<br />
Die Bedienung erfolgt über den Browser,<br />
was nur vordergründig bequem ist: Wer<br />
nur eine kurze Information benötigt,<br />
muss erst die Seiten des Dienstes ansteuern,<br />
sich einloggen und dann ein<br />
paar mehr oder weniger verschachtelte<br />
Menüpunkte durchklicken. Wiederkehrende<br />
Aufgaben lassen sich zudem nur<br />
selten automatisieren.<br />
Listing 1: Zugriff mit »urllib2«<br />
02 request = urllib2.Request('https://api.github.com/<br />
repos/mojombo/jekyll/issues/624', data='')<br />
03 request.get_method = lambda: 'GET'<br />
04 antwort = urllib2.urlopen(request)<br />
05 inhalt = antwort.read()<br />
06 print inhalt<br />
Glücklicherweise bieten praktisch alle<br />
großen Web-basierten Werkzeuge eine<br />
Programmierschnittstelle an. Sie nutzt im<br />
Regelfall das bewährte HTTP-Protokoll.<br />
Das hat wiederum den Vorteil, dass sich<br />
der Dienst von Skriptsprachen und anderen<br />
Webanwendungen aus ansprechen<br />
und fernsteuern lässt.<br />
Hausnummer<br />
Die meisten Dienste und Webanwendungen<br />
spendieren zunächst jedem Termin,<br />
jedem Projekt, jedem Bugreport, also jedem<br />
einzelnen Objekt eine eigene Webadresse.<br />
So ist beispielsweise auf Github<br />
der Bugreport (»Issue«) Nummer »624«<br />
im Repository »jekyll« des Benutzers<br />
»mojombo« unter der Adresse »https://<br />
api.github.com/repos/mojombo/jekyll/<br />
issues/624« zu erreichen. Wer diese URL<br />
einfach mit einem Browser ansteuert, erhält<br />
von Github das entsprechende Objekt<br />
zurück. Im Beispiel sind das alle<br />
verfügbaren Informationen über Bug 624<br />
Komfortabler geht das aber mit Hilfe einer<br />
Programmiersprache. Listing 1 zeigt<br />
exemplarisch den Zugriff aus Python<br />
2.7. Es verwendet »urllib2« aus der Standardbibliothek<br />
[3] und ist einfach zu<br />
lesen: Zunächst bastelt es eine Anfrage<br />
an Github und schickt diese dann mit<br />
»urllib2.urlopen()« ab. Die vom Server<br />
zurückgelieferte Antwort landet in der<br />
gleichnamigen Variablen. Aus ihr extrahiert<br />
schließlich »antwort.read()« alle<br />
zum Bugreport gehörenden Informationen,<br />
die wiederum die Variable »inhalt«<br />
aufnimmt.<br />
Python 3 splittet das »urllib2«-Modul in<br />
die beiden Nachfolger »urllib.request«<br />
und »urllib.error«. Alternativ zur »urllib2«<br />
kann man auch »httplib« (in Python<br />
3 »http.client«) verwenden [4], den entsprechenden<br />
Code zeigt Listing 2. Dabei<br />
ist aber zu beachten, dass Github nicht<br />
HTTP, sondern die verschlüsselte Variante<br />
HTTPS nutzt. Python muss daher<br />
mit SSL-Unterstützung übersetzt sein,<br />
was bei allen großen Distributionen der<br />
Fall sein sollte.<br />
Allerdings prüfen »urllib2« und »httplib«<br />
nicht das vom Server zurückgesendete<br />
Zertifikat. Der Anwender kann sich folglich<br />
nicht sicher sein, ob er tatsächlich<br />
mit einem Github-Server oder mit einem<br />
Schwindler kommuniziert.<br />
Github liefert alle Daten in der Javascript<br />
Object Notation (Json) aus. Die Informationen<br />
lassen sich somit leicht weiterverarbeiten,<br />
denn für viele Sprachen existieren<br />
passende Bibliotheken. Unter Python<br />
heißt das Modul »json« und gehört seit
Abbildung 1: Informationen über einen bestimmten Bug stellt Github unter<br />
einer eindeutigen Webadresse bereit.<br />
Version 2.6 zur Standardbibliothek [5].<br />
Listing 3 zeigt, wie der Programmierer<br />
damit die Serverantwort in ein Python-<br />
Objekt umwandelt.<br />
Die Anfragen an Github lassen sich über<br />
angehängte Parameter weiter konkretisieren.<br />
Beispielsweise liefert<br />
curl ‐i "https://api.github.com/repos/U<br />
mojombo/jekyll/issues?state=close"<br />
alle geschlossenen Bugreports (»Issues«)<br />
aus dem Repository »jekyll« des Benutzers<br />
»mojombo« zurück. Sollten es mehr<br />
als 30 sein, verteilt sie Github auf mehrere<br />
Seiten. Eine Seite lässt sich mit dem<br />
Parameter »?page=« abrufen:<br />
curl ‐i "https://api.github.com/repos/U<br />
mojombo/jekyll/issues?state=close?page=2"<br />
Ob es weitere Seiten gibt und unter welchen<br />
URLs diese erreichbar sind, schreibt<br />
Github mit in seine Antwort. Diese teilt<br />
sich gemäß HTTP-Standard in einen<br />
Kopfbereich (Header) und einen Rumpf<br />
mit den Nutzdaten (Body). In Python<br />
liefert in Listing 1 die Zeile »inhalt =<br />
antwort.read()« den Rumpf. An die Informationen<br />
im Header gelangt der Programmierer<br />
hiermit:<br />
antwort.headers.getheader('name')<br />
Dabei steht »name« für die gesuchte Zusatzinformation.<br />
Die Angaben zur Seitenzahl<br />
legt Github im Header unter der Bezeichnung<br />
»Link« ab. Wie man damit in<br />
Python die Seitenzahl<br />
ermittelt, zeigt Listing<br />
4. Sollten weitere Seiten<br />
vorhanden sein,<br />
liefert Github wie in<br />
Abbildung 2 entsprechende<br />
URLs zurück.<br />
Die erste verweist<br />
dabei auf die nächste<br />
Seite (»next«), die<br />
folgende URL auf die<br />
letzte (»last«). Zudem<br />
gibt es noch Links zur<br />
ersten Seite (»first«)<br />
und zur vorherigen<br />
(»prev«).<br />
In ihrer Anfrage schicken<br />
der Browser, Curl<br />
oder Python nicht nur<br />
die URL an den Server,<br />
sondern im Header<br />
noch ein paar weitere<br />
Angaben. Darunter befindet sich auch<br />
immer der Name einer Aktion, die Github<br />
ausführen soll. In Listing 1 möchte Python<br />
das Issue mit der Adresse »https://<br />
api.github.com/repos/mojombo/jekyll/<br />
issues/624« abholen. Die entsprechende<br />
Aktion dazu heißt »GET«.<br />
Methodik<br />
Neben »GET« gibt der HTTP-Standard<br />
noch weitere dieser so genannten Methoden<br />
oder Verben vor. Dazu zählt<br />
»DELETE«, das die Ressource »/repos/<br />
mojombo/jekyll/issues/624« und somit<br />
das Issue löschen würde. Diese Methode<br />
gehörte schon zur ersten Version von<br />
HTTP, im Internet ignorieren sie jedoch<br />
die meisten Webserver.<br />
Welche der im HTTP-Standard verzeichneten<br />
Methoden tatsächlich welche<br />
Aktion auslösen, hängt vom jeweiligen<br />
Dienst beziehungsweise der Webanwendung<br />
ab. Um in Github ein neues Issue<br />
dem Repository »test« hinzuzufügen, das<br />
der Benutzer »hans« betreut, müsste ein<br />
Python-Programmierer nur einen entsprechenden<br />
Request zusammenbauen<br />
und die »POST«-Methode wählen:<br />
request = urllib2.Request("https://api.U<br />
github.com/repos/hans/test/issues")<br />
request.get_method = lambda: 'POST'<br />
Hier fehlt noch ein beschreibender Text<br />
für das Issue. Diesen erwartet Github<br />
im Body der empfangenen Nachricht im<br />
Json-Format:<br />
issue = '{"title": "Bug", "body":U<br />
"Bug gefunden." }'<br />
antwort = urllib2.urlopen(req, issue)<br />
Das Issue besitzt einen Titel, der Pflicht<br />
ist, sowie einen optionalen »body«, in<br />
dem der Anwender den Bug näher erläutern<br />
kann. Als Antwort auf die obige<br />
Anfrage liefert Github jedoch einen »404<br />
not found«-Fehler – selbst wenn »hans«<br />
und sein »test«-Repository existieren.<br />
Wer darf das?<br />
Der Grund ist einfach: Damit Witzbolde<br />
nicht massenhaft Issues mit Werbe botschaften<br />
einreichen, verlangt Github bei<br />
bestimmten Aktionen eine Authentifizierung.<br />
Wie viele andere Webanwendungen<br />
verwendet der Dienst dabei das<br />
Oauth2-Verfahren [6]. In der einfachsten<br />
Variante fordert der Benutzer dabei mit<br />
seinem Usernamen und Passwort bei Github<br />
ein Token an, das er dann jeder<br />
weiteren Anfrage beifügt.<br />
Wie das unter Python funktioniert, zeigt<br />
Listing 5. Zunächst kodiert es den Benutzernamen<br />
(»hans«) und das Passwort<br />
(»geheim«) als Base64. Mit dem Ergebnis<br />
stellt es eine Anfrage an Github zusam-<br />
Listing 2: Zugriff mit »httplib«<br />
01 import httplib<br />
02 <br />
03 connection = httplib.HTTPSConnection('api.github.<br />
com')<br />
04 connection.request('GET', 'https://api.github.com/<br />
repos/mojombo/jekyll/issues/624', '')<br />
05 antwort = connection.getresponse()<br />
06 <br />
07 inhalt = antwort.read()<br />
08 print inhalt<br />
Listing 3: Rückgabe als Python-<br />
Objekt<br />
01 import json<br />
02 import urllib2<br />
03 <br />
04 [...]<br />
05 <br />
06 inhalt = antwort.read()<br />
07 <br />
08 #Wandle inhalt in Objekt um:<br />
09 githubissue = json.loads(inhalt)<br />
10 print githubissue<br />
Entwickler-Tools 12/2012<br />
Titelthema<br />
www.linux-magazin.de<br />
37
Titelthema<br />
www.linux-magazin.de Entwickler-Tools 12/2012<br />
38<br />
01 import urllib2<br />
Abbildung 2: Informationen zur Paginierung stehen im Header. In diesem Fall<br />
verteilt Github alle Issues des Projekts auf insgesamt 11 Seiten.<br />
men. In den Header der Anfrage kommen<br />
Benutzername und Passwort (Zeile 8).<br />
Der Body enthält ein Json-Objekt mit einer<br />
kurzen Notiz sowie dem Bereich, für<br />
den Zutritt gewünscht ist – in diesem Fall<br />
das Repository (»repo«).<br />
Das Ergebnis dieser Anfrage ist schließlich<br />
das Token, verpackt im Json-Format.<br />
Die Zeilen 11 und 12 lösen das Token heraus.<br />
Die nächsten Zeilen setzen dann wie<br />
gezeigt die Anfrage zum Anlegen eines<br />
Issue zusammen. Die Methode »add_header()«<br />
in Zeile 18 baut das Token in den<br />
Header der Anfrage ein. Damit landet das<br />
Issue erfolgreich in Github (Abbildungen<br />
3 und 4).<br />
Falls bei der Verarbeitung ein Fehler auftritt,<br />
schickt Github eine Antwort zurück,<br />
die im Body die Fehlermeldung im Json-<br />
Listing 4: Auslesen des »Link« im<br />
Header<br />
02 request = urllib2.Request('https://api.github.com/<br />
repos/mojombo/jekyll/issues', data='')<br />
03 request.get_method = lambda: 'GET'<br />
04 antwort = urllib2.urlopen(request)<br />
05 seiten = antwort.headers.getheader('Link')<br />
06 if seiten != 'None' :<br />
07 print 'Es gibt weiteref Seiten: ' + seiten<br />
08 else :<br />
09 print 'Es gibt keine weiteren Seiten.'<br />
01 import urllib2<br />
02 import json<br />
03 import base64<br />
04 <br />
05 # Token anfordern:<br />
Listing 5: Issue anlegen mit Token<br />
06 base64string = base64.encodestring(<br />
'hans:geheim').replace('\n', '')<br />
07 request = urllib2.Request("https://api.github.<br />
com/authorizations")<br />
08 request.add_header("Authorization", "Basic %s"<br />
Format enthält, beispielsweise:<br />
{"message":"Problems U<br />
parsing JSON"}<br />
Aus diesem Grund<br />
sollte der Programmierer<br />
die Antwort – wie in Listing 5<br />
gezeigt – noch auswerten. Die Methode<br />
»getcode()« ermittelt dabei den Statuscode.<br />
Nach dem gleichen Prinzip lassen<br />
sich auch Repositories, Kommentare und<br />
alle übrigen Github-Objekte anlegen, manipulieren<br />
und löschen. Welche HTTP-<br />
Methode mit welcher URL welche Aktion<br />
auslöst, verraten die Github-Developer-<br />
Seiten [7].<br />
Listing 5 braucht mit der »urllib2« ziemlich<br />
viele Codezeilen. Verkürzen lässt sich<br />
das durch den Einsatz von externen Bibliotheken<br />
wie beispielsweise »requests«<br />
[8]. Eine einfache Anfrage reduziert sich<br />
damit auf folgende zwei Zeilen:<br />
antwort = requests.get(' https://api.githubU<br />
.com/repos/hans/test/issues')<br />
print antwort.text<br />
Eine Programmierschnittstelle, die mit<br />
URLs und HTTP arbeitet, bezeichnet man<br />
als RESTful, die Schnittstelle als REST-<br />
API (siehe auch die Einführung zu diesem<br />
Themenschwerpunkt).<br />
Google Code<br />
12 token = result['token']<br />
13 <br />
14 # Issue einfuegen:<br />
15 issue = '{"title": "Bug", "body": "Ich habe da<br />
einen Bug gefunden." }'<br />
16 <br />
17 request = urllib2.Request("https://api.github.<br />
com/repos/timschuermann/test/issues")<br />
18 request.add_header("Authorization", "token %s"<br />
% token)<br />
Auch das Projekthosting-Angebot Google<br />
Code arbeitet mit einem REST-ähnlichen<br />
API, kommuniziert dabei aber mit XML-<br />
Daten und erlaubt darüber nur den Zugriff<br />
auf die Bugreports eines einzigen<br />
Projekts [9]. Alle Issues des Projekts<br />
»python‐twitter« liefert beispielsweise<br />
diese Anfrage:<br />
curl ‐i "https://code.google.com/feeds/U<br />
issues/p/python‐twitter/issues/full"<br />
Zur Authentifizierung fordert der Benutzer<br />
auch hier mit Benutzername und<br />
Passwort ein Token an, wobei er aber<br />
in diesem Fall den Benutzernamen und<br />
das Passwort als Parameter an die URL<br />
anhängt. Wem der Weg über die URLs zu<br />
kompliziert ist, für den stellt Google ein<br />
eigenes API für Python [10] und Java [11]<br />
bereit. Um mit diesem so genannten „Issue<br />
Tracking API for Python“ alle Issues<br />
des Projekts »python‐twitter« abzurufen,<br />
genügt die erste Zeile aus Listing 6. Die<br />
beiden anderen durchlaufen lediglich die<br />
Issues und geben deren Titel aus.<br />
OTRS<br />
Das Ticketsystem OTRS hingegen geht<br />
einen etwas anderen Weg und nutzt Soap<br />
(siehe auch die Einführung zu diesem<br />
Themenschwerpunkt). Um diese Schnittstelle<br />
zu nutzen, packt der Programmierer<br />
die von OTRS auszuführenden Funktionen<br />
zusammen mit den dazu benötigten<br />
Daten in eine XML-Datei, deren Aufbau<br />
dem Soap-Standard folgt. Diese schickt er<br />
an das Ticketsystem, genauer gesagt an<br />
das Skript hinter »https://OTRS-Server/<br />
otrs/rpc.pl«.<br />
Grundsätzlich lassen sich so alle OTRS-<br />
Klassen aufrufen, die in der API-Dokumentation<br />
aufgeführt sind [12]. Per<br />
Hand eine Soap-gemäße XML-Datei zusammenzusetzen<br />
ist jedoch eine ziemlich<br />
aufwändige Angelegenheit. Da Python<br />
keine Standardbibliothek für Soap enthält,<br />
kann der Bastler hier nur auf Bibliotheken<br />
von Dritten zurückgreifen. Die<br />
Dokumentation der Soap-Schnittstelle ist<br />
zudem äußerst dürftig bis nicht vorhanden.<br />
Kleine Beispiele für PHP, die auf die<br />
Tickets zugreifen, finden sich immerhin<br />
unter [13] sowie unter [14].<br />
% base64string)<br />
09 <br />
10 result = urllib2.urlopen(request, '{"note":<br />
"Access to your repository.", "scopes":<br />
["repo"]}')<br />
11 result = json.loads('\n'.join(<br />
result.readlines()))<br />
19 request.get_method = lambda: 'POST'<br />
20 antwort = urllib2.urlopen(request, issue)<br />
21 <br />
22 #Rueckmeldung ausgeben:<br />
23 print antwort.getcode()<br />
24 print antwort.headers.getheader('content‐type')<br />
25 print antwort.read()<br />
Bugzilla<br />
Der Bugtracker Bugzilla geht ähnlich<br />
wie OTRS vor, nutzt aber den Standard<br />
XML-RPC. Auch dabei verpackt das<br />
Clientprogramm beziehungsweise ein
Abbildung 3: Das von Python abgeschickte Issue …<br />
Abbildung 4: … landet auch in Github.<br />
Skript die gewünschte Aktion in einer<br />
XML-Datei. Diese schickt der Client dann<br />
an das Skript »http://Bugzilla-Server/<br />
xmlrpc.cgi«, das die gewünschte Aktion<br />
ausführt. Die verschickten XML-Dateien<br />
sind jedoch bei XML-RPC wesentlich<br />
einfacher aufgebaut. Zudem bieten viele<br />
Sprachen dafür fertige Bibliotheken an,<br />
so auch Python mit der »xmlrpclib« [15]<br />
(ab Python 3 »xmlrpc.client«). Als kleines<br />
Beispiel zeigt Listing 7, wie man alle<br />
Informationen zum »Product« mit der ID<br />
»1« abholt.<br />
Produktmanagement<br />
Die Funktion »Product.get()« bietet Bugzilla<br />
in seinem API an [16]. Sie verlangt<br />
einen Parameter »ids«, der wiederum in<br />
einer Liste die IDs aller Produkte nennt,<br />
für die Bugzilla die Informationen ausspucken<br />
soll. Den Namen des Parameters<br />
und seinen Wert übergibt der Programmierer<br />
beim Einsatz der »xmlrpclib« als<br />
Dictionary (»id« in Listing 7).<br />
Auf diese Weise lassen sich auch alle<br />
übrigen Funktionen des Bugzilla-API aufrufen<br />
[17]. Ist für einen Funktionsaufruf<br />
auch eine Authentifizierung notwendig,<br />
meldet der Client sich mit der Funktion<br />
»User.login()« an [18]. Bugzilla liefert<br />
dann ein Cookie zurück, das der Benutzer<br />
jedem weiteren Funktionsaufruf beilegen<br />
muss.<br />
Alternativ zu XML-RPC kann der Bugzilla-Nutzer<br />
auch die Json-Variante Json-<br />
RPC heranziehen [19]. Hierfür verpackt<br />
der Client die auszuführenden Funktionen<br />
im Json-Format.<br />
Außerdem gibt es für<br />
Python noch Bibliotheken<br />
von Drittanbietern,<br />
mit denen der<br />
Zugriff auf Bugzilla<br />
mit nur wenigen Zeilen<br />
Code gelingt, beispielsweise<br />
die Bugzillatools<br />
[20].<br />
Fazit<br />
Viele Dienste bieten<br />
wie Github eine<br />
Schnitt stelle nach dem<br />
REST-Prinzip, die Authentifizierung<br />
erfolgt<br />
meist über Oauth. Der<br />
Zugriff über die URL und HTTP-Methoden<br />
ist in der Praxis unkompliziert und<br />
lässt sich mit nahezu jeder Programmiersprache<br />
durchführen. Allerdings sind die<br />
Manipulationsmöglichkeiten damit auch<br />
etwas beschränkt. Ein dickes und mächtiges<br />
API bieten nur die auf XML-RPC<br />
beziehungsweise Soap basierenden Webanwendungen.<br />
Eine solche Schnittstelle zu nutzen ist andererseits<br />
gerade bei Soap mitunter recht<br />
umständlich und kompliziert. Eine Wahl<br />
hat der Anwender dabei nur selten: Die<br />
überwiegende Mehrheit der Dienste und<br />
Webanwendungen bietet nur ein einziges<br />
API. Immerhin darf er sich gelegentlich<br />
zwischen XML und Json als Austauschformat<br />
entscheiden. (mhu) n<br />
Infos<br />
[1] Github: [https:// github. com/]<br />
[2] Bugzilla: [http:// www. bugzilla. org/]<br />
[3] Python-Bibliothek »urllib2«: [http://<br />
docs. python. org/ library/ urllib2. html]<br />
[4] Python-Bibliothek »httplib«: [http://<br />
docs. python. org/ library/ httplib. html]<br />
[5] Python-Bibliothek »json«: [http:// docs.<br />
python. org/ library/ json. html]<br />
Listing 7: Informationen über ein Produkt<br />
01 import xmlrpclib<br />
02 proxy = xmlrpclib.ServerProxy("http://<br />
localhost/bugzilla/xmlrpc.cgi",<br />
use_datetime=True)<br />
03 <br />
04 try:<br />
05 id = {'ids': [1]}<br />
[6] Oauth-Verfahren bei Github:<br />
[http:// developer. github. com/ v3/ oauth/]<br />
[7] Github-API-Dokumentation:<br />
[http:// developer. github. com/]<br />
[8] Requests: [http:// docs. python‐requests.<br />
org/ en/ latest/ index. html]<br />
[9] Google Code Issue Tracker API:<br />
[http:// code. google. com/ p/ support/ wiki/<br />
IssueTrackerAPI]<br />
[10] Google Code Issue Tracker API for<br />
Python: [http:// code. google. com/ p/<br />
support/ wiki/ IssueTrackerAPIPython]<br />
[11] Google Code Issue Tracker API for Java:<br />
[http:// code. google. com/ p/ support/ wiki/<br />
IssueTrackerAPIJava]<br />
[12] OTRS-Entwicklerseiten:<br />
[http:// dev. otrs. org]<br />
[13] PHP-Beispiel für den Zugriff auf OTRS:<br />
[http:// faq. otrs. org/ otrs/ public. pl?<br />
Action=PublicFAQZoom& ItemID=369]<br />
[14] PHP-Beispiel für den Zugriff auf OTRS:<br />
[http:// www. iniy. org/ ? p=20& lang=de]<br />
[15] Xmlrpclib: [http:// docs. python. org/<br />
library/ xmlrpclib. html]<br />
[16] Bugzilla-Schnittstelle für Produkte:<br />
[http:// www. bugzilla. org/ docs/ tip/ en/<br />
html/ api/ Bugzilla/ WebService/ Product.<br />
html]<br />
[17] Bugzilla-API: [http:// www. bugzilla. org/<br />
docs/ tip/ en/ html/ api/]<br />
[18] Informationen zum Anmeldeverfahren in<br />
Bugzilla: [http:// www. bugzilla. org/ docs/<br />
tip/ en/ html/ api/ Bugzilla/ WebService.<br />
html# LOGGING_IN]<br />
[19] Bugzilla-Webservice:<br />
[http:// www. bugzilla. org/ docs/ tip/ en/<br />
html/ api/ Bugzilla/ WebService. html]<br />
[20] Bugzillatools: [http:// pypi. python. org/<br />
pypi/ bugzillatools/ 0. 5. 2]<br />
[21] Listings zu diesem Artikel: [http://<br />
www. linux‐magazin. de/ static/ listings/<br />
magazin/ 2012/ 12/ entwickler‐tools]<br />
Listing 6: Issue Tracking API<br />
01 issues = client.get_issues('python‐twitter')<br />
02 for i in issues.entry:<br />
03 print i.title.text<br />
06 response = proxy.Product.get(id)<br />
07 print response<br />
08 except xmlrpclib.Fault, error:<br />
09 print "Fehlercode: %s" %<br />
error.faultCode<br />
10 print error.faultString<br />
Entwickler-Tools 12/2012<br />
Titelthema<br />
www.linux-magazin.de<br />
39
MEDIALINX<br />
IT-ACADEMY<br />
Mit Experten lernen.<br />
powered by<br />
IT-Trainings<br />
am Standort München.<br />
Von den Machern des <strong>Linux</strong>-<strong>Magazin</strong>s.<br />
Effiziente BASH-Skripte<br />
mit Klaus Knopper,<br />
Gründer der Knoppix-Distribution<br />
Mo, 3.12. - Mi, 5.12.2012<br />
www.medialinx-shop.de/academy<br />
Workshops App-Entwicklung<br />
Android-App-Entwicklung<br />
mit David Wiesner,<br />
App-Entwickler, apphoria<br />
Mi, 28.11. - Fr, 30.11.2012<br />
iOS-App-Entwicklung<br />
mit Jonas Pencke,<br />
App-Entwickler, apphoria<br />
in Vorbereitung<br />
WP8-App-Entwicklung<br />
mit Andreas Thenn,<br />
App-Entwickler, apphoria<br />
in Vorbereitung
In eigener Sache: DELUG-DVD<br />
Caine, Ubuntu, Owncloud, XSS<br />
Einführung 12/2010 12/2012<br />
Software<br />
Auch diesen Monat bekommen DELUG-Käufer wieder die doppelte Menge zum einfachen Preis. Auf zwei Seiten<br />
bringt die Silberscheibe exklusive Inhalte: Von der einen bootet Caine 3.0, von der anderen Ubuntu 12.04.1.<br />
Dazu gibt’s API-Tools, eine virtuelle Maschine mit Owncloud und ein E-Book über Cross-Site-Scripting. Markus Feilner<br />
www.linux-magazin.de<br />
41<br />
Inhalt<br />
42 Bitparade<br />
Drei Webkonferenz-Systeme im Vergleich:<br />
Big Blue Button, Apache Open<br />
Meetings und Vyew.<br />
48 Tooltipps<br />
Diffimg, LPVS, Profanity, Squid-Analyzer,<br />
Taskwarrior und Xc – sechs hilfreiche<br />
Werk zeuge im Kurztest.<br />
52 Projektmanagement mit Rike<br />
Freigegeben: Die Webanwendung bringt<br />
leichtgewichtiges Projektmanagement<br />
nach dem Kanban-Prinzip jetzt auch<br />
unter einer Open-Source-Lizenz.<br />
Neben einem normalen <strong>Linux</strong>-<strong>Magazin</strong><br />
ohne Datenträger gibt es die DELUG-<br />
Ausgabe mit Monats-DVD, bei der die<br />
Redaktion den Datenträger nach einem<br />
speziellen Konzept zusammenstellt: In<br />
einer Art modularem System enthält er<br />
Abbildung 2: Kostenlos als E-Book auf der DVD:<br />
„Cross-Site Scripting“ von Paul Sebastian Ziegler.<br />
Programme und Tools, die in<br />
der jeweiligen <strong>Magazin</strong>-Ausgabe<br />
besprochen werden.<br />
Caine und Ubuntu<br />
12.04.1<br />
Von Seite A der DELUG-DVD<br />
bootet die italienische Live-<br />
Distribution Caine (Computeraided<br />
Investigative Environment).<br />
Sie enthält jede Menge<br />
Forensik-Werkzeuge, mit denen<br />
Admins die Spuren von Einbrüchen<br />
im Firmennetz entdecken<br />
und sichern.<br />
Wer die DVD umdreht und von der zweiten<br />
Seite bootet, findet hier die erste so<br />
genannte Point Release von Ubuntu 12.04<br />
LTS. Dieses Update bereinigt viele Fehler,<br />
die Entwickler seit Erscheinen von<br />
Precise Pangolin im April gefunden und<br />
korrigiert haben.<br />
Exklusiv: Owncloud 4.5 als<br />
virtuelle Maschine<br />
Im HTML-Menü auf Seite A der DELUG-<br />
DVD, finden sich diverse weitere exklusive<br />
Inhalte. So haben die Entwickler<br />
von Owncloud für das <strong>Linux</strong>-<strong>Magazin</strong><br />
eine virtuelle Maschine mit den neuesten<br />
Features der gerade veröffentlichten Version<br />
4.5 des sicheren Dropbox-Replacements<br />
für Unternehmen und Privatleute<br />
gebaut (Abbildung 1, siehe Artikel im<br />
<strong>Linux</strong>-<strong>Magazin</strong> 08/12). Die soll deutlich<br />
schneller synchronisieren, Unteradministratoren<br />
erlauben und externen Storage<br />
besser anbinden.<br />
Wer die VM startet, sollte sofort das ebenfalls<br />
von Owncloud bereitgestellte Online-Update<br />
wahrnehmen – die Entwickler<br />
werden auch nach Redaktionsschluss<br />
Abbildung 1: Dateien und Termine schneller synchronisieren und<br />
externen Storage besser anbinden soll Owncloud 4.5.<br />
dieser Ausgabe weitere Verbesserungen<br />
und Patches einfließen lassen.<br />
Ebenfalls exklusiv auf der DVD finden<br />
DELUG-Leser das komplette E-Book<br />
„Cross- Site Scripting“ des Verlags O’Reilly<br />
(Abbildung 2). Der Autor Paul Sebastian<br />
Ziegler zeigt darin, warum XSS-Angriffe<br />
als die wichtigste Gefährdung von Webanwendungen<br />
schlechthin gelten, und<br />
bringt die Thematik, mit der sich Webserver-Admins<br />
zwangsweise auseinandersetzen<br />
müssen, auch Einsteigern und<br />
Programmierern näher.<br />
Susecon-Videos, Alien Vault<br />
Damit nicht genug: Auf der DVD warten<br />
auch über eine Stunde Videomaterial von<br />
Keynotes der Susecon in Orlando, Florida,<br />
auf Zuschauer sowie die Tools aus dem<br />
Social-Network-API-Artikel dieser Titelstrecke<br />
auf Experimentierfreudige. Dazu<br />
gibt‘s die neuesten Versionen von Rike,<br />
Alien Vault oder Cfenginge, passend zu<br />
den Artikeln in diesem <strong>Linux</strong>-<strong>Magazin</strong>.<br />
Wem das noch nicht reicht, der probiert<br />
Virtual Box 4.2, Novius, Monitorix und<br />
Junkie oder Liferay aus.<br />
n
Software<br />
www.linux-magazin.de Bitparade 12/2012<br />
42<br />
Drei Webkonferenz-Systeme im Test<br />
Sehen, hören, zeigen<br />
Ein Whiteboard für Vortragsfolien, Textchat, Desktopsharing, Sprach- und Video-Übertragung gehören zu einem<br />
guten Konferenzsystem. Es eignet sich damit nicht nur für Firmenmeetings, sondern auch für Hochschulen,<br />
Seminar- und Fortbildungszentren. Diese Bitparade stellt drei Browser-basierte Vertreter vor. Mela Eckenfels<br />
zur Verfügung. Als dritter Kandidat will<br />
die Cloudlösung Vyew [9] zeigen, dass<br />
Konferenzen im Handumdrehen auch<br />
ohne eigenen Server und Administrationskenntnisse<br />
realisierbar sind.<br />
E Big Blue Button<br />
© Marcin Balcerzak, 123RF<br />
Konsequent eingesetzt könnten überfüllte<br />
Hörsäle und Konferenzräume dank<br />
E-Learning-Plattformen [1] und Webkonferenz-Systemen<br />
der Vergangenheit<br />
angehören. Viele Lernwillige bilden sich<br />
heute zu Hause oder im Büro weiter und<br />
verfolgen Vorlesungen oder andere Vorträge<br />
vom eigenen Computer aus. Auch<br />
Firmenmeetings finden inzwischen oft<br />
online statt und bringen Teilnehmer aus<br />
der ganzen Welt zusammen.<br />
Der De-facto-Standard für Telefon- und<br />
Videokonferenzen heißt Skype; auch<br />
Placecam [2] versammelt bis zu 40<br />
Teilnehmer. Wer zusätzliche Inhalte wie<br />
zum Beispiel begleitende Präsentationen<br />
übermitteln möchte, der kombiniert<br />
Werkzeuge wie Flock Draw [3], Prezi<br />
[4] oder Mindmeister [5]. Eine solche<br />
zusammengeschusterte Lösung hinkt<br />
aber spätestens dann, wenn nicht alle<br />
Teilnehmer das gleiche technische Knowhow<br />
mitbringen oder jemand ständig mit<br />
Fragen unterbricht und so konstruktive<br />
Diskussionen verhindert.<br />
Moderne Konferenzsoftware bietet nicht<br />
nur eine integrierte Arbeitsumgebung mit<br />
Whiteboard, Chat- und Telefoniefunktion,<br />
sondern regelt auch die Interaktionsmöglichkeiten<br />
der Teilnehmer. Sie erlaubt bei<br />
Meetings die Zusammenarbeit zwischen<br />
gleichberechtigten Kollegen, die sich alle<br />
per Webcam und Mikrofon einbringen.<br />
Für Webinare und Onlinevorlesungen<br />
stellt die Anwendung einen Moderatorzugang<br />
bereit; alle anderen hören nur zu<br />
beziehungsweise lesen mit und melden<br />
sich nur mit Fragen oder ergänzenden<br />
Hinweisen zu Wort.<br />
Kommerzielle Anbieter wie Elluminate<br />
und Wimba Classroom, beide inzwischen<br />
von Blackboard aufgekauft und in<br />
Blackboard Collaborate vereint [6], beherrschten<br />
lange den Markt. Mit Big Blue<br />
Button [7] und Apache Open Meetings<br />
[8] stehen respektable freie Alternativen<br />
2007 startete der erste Testkandidat als<br />
Projekt der Carleton University im kanadischen<br />
Ottawa. Seit 2009 unterstützt<br />
das Unternehmen Blindside Networks die<br />
Entwicklung. Im Juni 2012 erschien die<br />
stabile Version 0.8, die auch in diesem<br />
Test antritt. Big Blue Button setzt auf<br />
Red5 [10], einen in Java implementierten<br />
freien Real Time Messaging Protocol<br />
Strea ming Server. Das offene Telefoniesystem<br />
Free Switch [11] werkelt im Hintergrund<br />
und stellt die Voice-Chat-Funktionalität<br />
bereit. Big Blue Button steht<br />
unter der GNU Lesser General Public<br />
Licence (LGPL).<br />
Die Macher versprechen, dass die Installation<br />
unter Ubuntu 10.04 weniger als<br />
30 Minuten in Anspruch nimmt [12].<br />
Allerdings dürfte dies nur für eine frisch<br />
aktualisierte Ausgabe der LTS-Distribution<br />
gelten. Andernfalls dauert das während<br />
der Einrichtung notwendige »apt‐get<br />
dist‐upgrade« je nach Bandbreite schon<br />
deutlich länger. Mit neueren Ubuntu-<br />
Versionen, Debian und Fedora spielt die<br />
Konferenzsoftware ebenfalls zusammen;<br />
Anwender sollten aber zusätzliche Zeit<br />
zum Basteln einkalkulieren.<br />
Für Ubuntu und Debian gibt es fertige<br />
Pakete im Downloadbereich, die Abhängigkeiten<br />
zu anderen Komponenten<br />
automatisch auflösen. Benutzer anderer<br />
Distributionen finden die Quellen zu<br />
Big Blue Button und anderen Komponenten<br />
im Github-Repository [13]. Das
Programm benötigt zahlreiche weitere<br />
Open-Source-Tools, darunter MySQL,<br />
Ruby, Open Office, Imagemagick, Sox<br />
und Tomcat, die Anwender im Zweifelsfall<br />
vorher einspielen müssen. Wenn es<br />
schneller gehen soll, dann steht eine fertige<br />
virtuelle Maschine zum Download<br />
bereit [14], die Anwender mit VMware<br />
Player beziehungsweise VMware Fusion<br />
unter Mac OS X starten.<br />
Big Blue Button benötigt Flash 10 im<br />
Webbrowser. Schützt eine Firewall den<br />
Rechner, sollte der Administrator vorher<br />
die Ports 80, 1935 und 9123 freigeben.<br />
Normalerweise integriert sich die Konferenzsoftware<br />
direkt in Lernumgebungen<br />
oder Contentmanagement-Systeme, läuft<br />
aber auch eigenständig. In diesem Fall<br />
nehmen Anwender am besten die Datei<br />
»demo3.jsp« als Vorlage und passen sie<br />
an eigene Vorstellungen an, um neue virtuelle<br />
Klassenräume zu erstellen (siehe<br />
FAQ auf der Webseite). Bei der weiterführenden<br />
Konfiguration des Servers hilft<br />
das Kommandozeilentool »bbb‐conf«.<br />
Aufgeräumtes Auditorium<br />
Ein Administrations-Interface gibt es<br />
nicht, es ist auch nicht geplant für kommende<br />
Versionen. Die Benutzerverwaltung<br />
ist daher extrem einfach gehalten.<br />
Einen Raum legt der Admin über den<br />
API-Zugang an. Der Anwender, der das<br />
Auditorium zuerst betritt, erhält den Moderatorstatus<br />
(Presentator). Damit besitzt<br />
er alle notwendigen Berechtigungen, um<br />
vorzutragen, Präsentationen hochzuladen<br />
und andere Teilnehmer gegebenenfalls<br />
stummzuschalten. Die Entwickler empfehlen,<br />
Onlinekonferenzen auf maximal<br />
25 Personen zu beschränken, berichteten<br />
aber im Juni diesen Jahres von einem<br />
Stresstest, der bis zu 80 Nutzer verkraftete,<br />
20 davon zusätzlich mit Webcam<br />
beteiligt [15].<br />
Die Oberfläche des virtuellen Hörsaals ist<br />
übersichtlich gegliedert (siehe Abbildung<br />
1). Links oben sind die Benutzer gelistet;<br />
das Icon mit dem Stift markiert den<br />
Moderator. Direkt darunter schaltet dieser<br />
einzelne Teilnehmer gezielt oder alle<br />
gleichzeitig stumm. Ganz unten befindet<br />
sich das Videofenster beziehungsweise<br />
eine verkleinerte Ansicht des eigenen<br />
Desktops, wenn das Sharing aktiviert ist.<br />
Der mittlere Teil ist für Präsentationen<br />
vorgesehen und nimmt den größten Teil<br />
ein. Rechts befindet sich der Textchat.<br />
Auf dem ersten Reiter unterhält sich die<br />
Gruppe, für jede private Unterhaltung<br />
öffnet Big Blue Button an dieser Stelle<br />
einen neuen Reiter.<br />
Das zentrale Element ist das Whiteboard<br />
in der Mitte. Über den Button unten links<br />
laden Moderatoren ihre Präsentationen<br />
hoch. Die Konferenzsoftware kann mit<br />
verschiedenen Formaten umgehen und<br />
akzeptiert unter anderem Microsoft-<br />
Office-, Open-Office- und PDF-Dateien.<br />
Letztere empfehlen die Entwickler für<br />
zuverlässige Ergebnisse. Unter dem<br />
Whiteboard befinden sich einfache Navigations-<br />
und Zoom-Schaltflächen.<br />
Über den kleinen Bleistift unten rechts<br />
aktiviert der Moderator weitere Icons, mit<br />
denen er in der Präsentation malt und so<br />
Dinge gezielt hervorhebt. Recht mager<br />
Abbildung 2: Ein Klick auf die kleine Hand winkt in<br />
den virtuellen Hörsaal hinein.<br />
fällt die Ausstattung mit Werkzeugen zur<br />
Benutzerinteraktion aus. Die Teilnehmer<br />
können lediglich per Klick auf das Hand-<br />
Symbol virtuell winken und so ums Wort<br />
bitten (siehe Abbildung 2).<br />
Dass Big Blue Button aus dem Universitätsumfeld<br />
stammt, bestätigt sich spätestens<br />
dann, wenn man sieht, mit wie<br />
vielen externen Programmen es zusammenarbeitet.<br />
Es existieren <strong>Schnittstellen</strong><br />
zu den Lernumgebungen Sakai, Chamilo,<br />
Canvas LMS und Moodle, aber auch<br />
zu Contentmanagement-Systemen wie<br />
Wordpress, Joomla, Redmine, Drupal,<br />
Tiki Wiki und Foswiki.<br />
Seit der aktuellen Version 0.8 ist es<br />
möglich, Sessions mitzuschneiden, um<br />
Screencasts für die Teilnehmer anzulegen<br />
oder die Vorträge zu archivieren. Dazu<br />
betreten Anwender den Raum nicht auf<br />
gewohntem Wege, sondern nutzen das<br />
API über eine externe Anwendung. Ein<br />
Benutzerinterface zum Aufnehmen ist<br />
nicht vorhanden. Der Big-Blue-Button-<br />
Server schneidet die gesamte Konferenz<br />
mit, vom Beitritt des ersten Teilnehmers<br />
bis zum Ausloggen des letzten.<br />
Im Video landen sämtliche Ereignisse<br />
(An-/Abmelden von Anwendern, Gespräche<br />
und Chats) sowie die multimedialen<br />
Komponenten (Audio, Webcam, Präsentationen<br />
und Desktopsharing). Der Server<br />
startet nach dem Ende der Konferenz<br />
ein paar Skripte, um die Aufnahmen zu<br />
konvertieren. Big Blue Button setzt auf<br />
das Mediatoolkit Popcorn [16] zur Wiedergabe<br />
der Aufnahmen.<br />
Bitparade 12/2012<br />
Software<br />
www.linux-magazin.de<br />
43<br />
E Apache Open Meetings<br />
Abbildung 1: Big Blue Button präsentiert seinen Teilnehmern und dem Moderator einen übersichtlichen virtuellen<br />
Hörsaal im Browser.<br />
2006 begann der Programmierer Sebastian<br />
Wagner die Arbeit am zweiten<br />
Testkandidaten. Ursprünglich als Ersatz<br />
für die proprietäre Flash-Video-Konfe-
Software<br />
www.linux-magazin.de Bitparade 12/2012<br />
44<br />
Abbildung 3: Open Meetings blendet hochgeladene Präsentationen in der Mitte ein. Über Klicks auf die kleinen<br />
Icons unter den Benutzernamen oben links verteilt der Moderator gezielt Rechte und entzieht sie.<br />
renzfunktion im Learning Management<br />
System Dokeos [17] geplant, war Open<br />
Meetings recht bald flügge und behauptet<br />
sich seit einiger Zeit als eigenständige<br />
Anwendung am Markt.<br />
Open Meetings baut auf Open Laszlo [18]<br />
und Red5 auf. Von Haus aus verwendet<br />
es die Apache-Derby-Datenbank, für den<br />
produktiven Einsatz empfehlen die Macher<br />
allerdings MySQL, PostgreSQL oder<br />
Oracle. Außerdem benötigt die Konferenzsoftware<br />
Imagemagick, Ghostscript,<br />
Open Office, die SWF Tools, Ffmpeg und<br />
Sox. Der Browser sollte Flash und Java<br />
unterstützen und die Firewall die Ports<br />
5080, 1935 und 8088 freigeben. Im Test<br />
trat Version 2.0 an.<br />
Open Meetings steht unter der Apache-<br />
Lizenz. Pakete stehen derzeit nicht bereit,<br />
aber die Installation aus den Quellen<br />
[19] geht leicht von der Hand. Nach dem<br />
Entpacken des Archivs führt der Anwender<br />
das Skript »red5.sh« aus und erledigt<br />
den Rest über den Webinstaller (»http://<br />
localhost:5080/openmeetings/install«).<br />
Version 2.0 räumt dem Nutzer ebenfalls<br />
die Möglichkeit ein, das Programm über<br />
»./admin.sh« zu installieren. Das Skript<br />
fertigt außerdem Backups an und spielt<br />
diese wieder ein. Sofern alle genannten<br />
Zusatztools installiert sind, ist der Server<br />
im Nu einsatzbereit. Auch dieses Projekt<br />
bietet zum Ausprobieren fertige virtuelle<br />
Maschinen an [20].<br />
Nachdem der Benutzer sich am Open-<br />
Meetings-Server angemeldet hat, wählt er<br />
zunächst den Raum aus, den er betreten<br />
möchte. Sofern das Konferenztool nicht<br />
bereits mit einer Lernumgebung oder einem<br />
CMS verknüpft ist und damit deren<br />
Benutzerverwaltung integriert, muss er<br />
sich zuerst registrieren. Auch bei diesem<br />
Kandidaten dominiert das zentrale<br />
Whiteboard den virtuellen Hörsaal (siehe<br />
Abbildung 3). Am linken Rand befindet<br />
sich die Teilnehmerliste. Über die Icons<br />
unter den Benutzernamen vergibt der<br />
Moderator gezielt Rechte und erlaubt<br />
anderen etwa die Zeichentools oder ihr<br />
Mikrofon zu benutzen.<br />
Fruchtbarer Austausch<br />
Open Meetings bietet drei Raumtypen<br />
an: Konferenz (bis 25 Nutzer, alle dürfen<br />
Audio- und Videofunktion verwenden),<br />
Webinar (bis 150 Teilnehmer, Video und<br />
Abbildung 4: Open Meetings unterstützt Umfragen<br />
zwischen Moderatoren und Teilnehmern.<br />
Audio nur auf Anfrage beim Moderator)<br />
und Interview (nur zwei Anwender dürfen<br />
Audio und Video aktivieren). Über<br />
den kleinen grünen Kreis mit Pluszeichen<br />
erstellen Anwender neue Zeichenbretter;<br />
Open Meetings öffnet für jedes Whiteboard<br />
einen Reiter. Dateien wandern über<br />
den gleichnamigen Menüpunkt oben<br />
links zum Server. Wenn der Betreiber<br />
bei der Installation alles richtig gemacht<br />
hat, dann verträgt die Webkonferenz alle<br />
gängigen Office-, Grafik- und Multimediaformate.<br />
Das Angebot an Zeichentools ist deutlich<br />
besser als bei Big Blue Button. Auch die<br />
Interaktionsmöglichkeiten sind ausgereifter<br />
als beim ersten System. Es ist zwar<br />
nicht möglich, sich per Handzeichen zu<br />
melden, aber über das Menü »Aktionen«<br />
versenden die Moderatoren Einladungen<br />
und legen Umfragen an (siehe Abbildung<br />
4). Einfache Anwender stimmen ab, betrachten<br />
die Ergebnisse, beantragen den<br />
Moderatorenstatus, ein Zeichenbrett und<br />
Freischaltung der eigenen Webcam beziehungsweise<br />
des Mikrofons. Der Chat versteckt<br />
sich am unteren Rand des Browserfensters<br />
und ist in der Voreinstellung<br />
verborgen. Ein Klick auf den kleinen Pfeil<br />
klappt ihn aus.<br />
Das Mitschneiden der Konferenzen starten<br />
Moderatoren im Kamera- und Mikrofon-Einrichtungsdialog<br />
oder per Klick auf<br />
den kleinen Bildschirm unterhalb des Benutzernamens,<br />
über den auch das Desktopsharing<br />
möglich ist. Die Mitschnitte<br />
befinden sich auf der Startseite (außerhalb<br />
der Räume) im Bereich »Aufnahmen«.<br />
Per Klick auf die entsprechende<br />
Schaltfläche laden Anwender diese im<br />
AVI- oder FLV-Format herunter.<br />
Über Plugins kommuniziert Open Meetings<br />
mit Lernumgebungen und Contentmanagement-Systemen<br />
wie Moodle, Sakai,<br />
Joomla, Drupal und Bitrix. Es gibt<br />
auch Erweiterungen für Jira (ein Webbasiertes<br />
Tool zur Fehlerverwaltung,<br />
Problembehandlung und zum operativen<br />
Projektmanagement), für das kommerzielle<br />
Wiki Confluence und das Customer-<br />
Relationship-Management Sugar CRM.<br />
E Vyew<br />
Fehlt die Zeit, eine Webkonferenz-Software<br />
auf dem eigenen Server zu installieren,<br />
dann bietet der dritte Kandidat
einen Ausweg. Der kostenlose Zugang zu<br />
diesem werbefinanzierten Clouddienst ist<br />
in wenigen Minuten eingerichtet, erlaubt<br />
bis zu 20 Räume und zehn gleichzeitige<br />
Nutzer.<br />
Zusätzlich stehen die beiden Tarife Plus<br />
und Professional zur Wahl. Ersterer kostet<br />
rund 10 US-Dollar monatlich, öffnet<br />
bis zu 50 virtuelle Konferenzorte, verwaltet<br />
aber ebenfalls nur zehn Nutzer.<br />
In der Professional-Variante fallen monatlich<br />
rund 20 US-Dollar an, bis zu 150<br />
Räume und 15 Teilnehmer sind drin, und<br />
mehrere Konferenzen dürfen gleichzeitig<br />
stattfinden. In beiden kostenpflichtigen<br />
Varianten erhöhen Anwender die Nutzerzahl<br />
für 1 US-Dollar pro Monat und<br />
Hörer und erhalten Rabatt bei jährlicher<br />
Vorauszahlung.<br />
Vyew läuft in allen modernen Webbrowsern<br />
ohne größere Probleme. Die Webanwendung<br />
benötigt Javascript, Cookies,<br />
Flash 9 und höher, Java 1.6 oder höher<br />
für Desktopsharing und Screenshots sowie<br />
mindestens einen DSL-Anschluss<br />
oder mehr Bandbreite. Chrome-Fans finden<br />
im Webstore eine eigene App für<br />
ihren Lieblingsbrowser [21]. Ein Browsertest<br />
zeigt, ob alle notwendigen Komponenten<br />
funktionieren oder ob eventuell<br />
noch Anpassungen am System oder der<br />
Firewall erforderlich sind [22].<br />
Zimmer mit Aussicht<br />
Wer keinen eigenen Account auf der<br />
Vyew-Webseite erstellen möchte, der kann<br />
sich mit dem Facebook- oder Google-Account<br />
anmelden und diesen mit einem<br />
Vyew-Konto verknüpfen. Nach dem Einloggen<br />
landen Benutzer im Dashboard,<br />
über das sie verschiedene Onlinetutorials<br />
erreichen, einen neuen Konferenzraum<br />
erstellen oder die Einladung zu einem<br />
vorhanden annehmen.<br />
Der Benutzer, der einen Raum eröffnet<br />
hat, ist automatisch der Moderator und<br />
bestimmt, welche Rechte die anderen haben.<br />
Er kann dazu einerseits die allgemeinen<br />
Einstellungen eines Raums anpassen<br />
(»Menu | Room Settings«) und andererseits<br />
auf den Namen eines Teilnehmers<br />
klicken, um ihn zum »Viewer«, »Reviewer«,<br />
»Collaborator« oder »Moderator«<br />
zu machen beziehungsweise über »User<br />
can« gezielt den Zugriff auf Zeichentools,<br />
Kamera und Mikrofon zu erlauben.<br />
Die Anzahl der Zuhörer ist wie erwähnt<br />
zunächst durch die gewählte Vyew-Version<br />
begrenzt, die Anwender können<br />
optional Plätze dazubuchen. Als Obergrenze<br />
nennen die Betreiber 80 Teilnehmer,<br />
100 sind auf Anfrage möglich. Eine<br />
neue Vyew-Version, die sich noch in der<br />
Entwicklung befindet, soll laut Aussagen<br />
der Betreiber die Anzahl deutlich erhöhen;<br />
eine definitive Größe ist aber noch<br />
nicht bekannt.<br />
Vyew präsentiert sich auf den ersten<br />
Blick ähnlich wie Big Blue Button und<br />
Open Meetings. Das Whiteboard in der<br />
Mitte dominiert das Geschehen, zusätzlich<br />
gibt es am Rand Bereiche für Chat,<br />
Webcam-Fenster und Kommentare. Am<br />
linken Rand klappt der Moderator über<br />
das Bleistiftsymbol die Zeichentools aus<br />
(siehe Abbildung 5). Über »Insert« am<br />
oberen Rand fügen Benutzer leere Seiten,<br />
Dateien vom eigenen Computer oder<br />
Links zu anderen Webseiten, Youtube-<br />
Videos oder Treffern der Google-Bildersuche<br />
ein.<br />
Über mitgelieferte Plugins binden sie<br />
außerdem selbst aufgenommene Nachrichten,<br />
Schaltflächen, mathematische<br />
Formeln, Umfragen und anderes ein. Was<br />
die Präsentationsformate angeht, muss<br />
sich der dritte Testkandidat nicht vor der<br />
Open-Source-Konkurrenz verstecken.<br />
Vyew schluckt beim Upload alle gängigen<br />
Officedateien, Grafiken und Flash-<br />
Präsentationen.<br />
Praktisch ist auch der Button »Sync«<br />
beziehungsweise »Unsync« über dem<br />
Whiteboard. Damit kontrollieren Moderatoren,<br />
was Gäste wann im Konferenzraum<br />
sehen. Ist »Sync« aktiviert, betrachten<br />
alle stets das Gleiche, denn Vyew<br />
gleicht dann Start, Stopp und Pause des<br />
Videoplugins und die Ansicht der Präsentationen<br />
ab. So sind alle Teilnehmer stets<br />
auf derselben Seite und können nicht<br />
mehr selbst in den Folien blättern – es sei<br />
denn, sie haben den Status »Moderator«,<br />
»Collaborator« oder »Reviewer«. Dann<br />
dürfen sie über »Unsync« die gemeinsame<br />
Ansicht verlassen.<br />
Der Moderator teilt seinen Desktop mit<br />
anderen Teilnehmern über den Menüpunkt<br />
»Screen Share«. Als zusätzliche<br />
Option aktiviert er per Klick, dass sein<br />
eigener Mauszeiger für die anderen sichtbar<br />
ist. Interaktionsmöglichkeiten erreichen<br />
die Teilnehmer über das Kontext-<br />
E-MAIL<br />
VERLOREN?<br />
Heinlein Mailtrace bringt Licht ins<br />
Dunkel Ihrer Mailserver-Logfiles.<br />
Sie wollen den Kollegen die erfolgreiche<br />
Zustellungen vermeintlich verlorengegangener<br />
E-Mails nachweisen? Oder die<br />
Gründe für Zustellfehler und Mailverzögerungen<br />
analysieren?<br />
Heinlein Mailtrace hält die Logdaten<br />
Ihres Mailservers in Echtzeit bereit.<br />
Eine intuitive GUI übersetzt die Fehlermeldungen<br />
auch für Endanwender.<br />
Ihre Vorteile:<br />
Echtzeit-Recherche für Endanwender<br />
und Helpdesks<br />
Echtzeit-Analysen für Administratoren<br />
Echtzeit-Statistiken für die Administration<br />
Teststellung unter:<br />
www.heinlein-elements.de<br />
<strong>Linux</strong> höchstpersönlich.
Software<br />
www.linux-magazin.de Bitparade 12/2012<br />
46<br />
Abbildung 5: Links neben dem Whiteboard blendet Vyew Bearbeitungswerkzeuge für die Präsentationen ein,<br />
rechts kommunizieren die Teilnehmer.<br />
menü »Change status to«, wenn sie ihren<br />
eigenen Nutzernamen rechts markieren<br />
(siehe Abbildung 6). Hier spenden sie<br />
Applaus oder melden sich per Handzeichen<br />
zu Wort. An hektische Präsentatoren<br />
geben sie über »Slow Down« den<br />
freundlichen Hinweis, es langsamer angehen<br />
zu lassen. Außerdem dürfen sie<br />
sich über »Away« als temporär abwesend<br />
kennzeichen.<br />
Besonders gut gelungen ist bei Vyew,<br />
dass der Content in den Räumen auch<br />
zwischen den Sessions erhalten bleibt.<br />
Somit sind asynchrone Zusammenkünfte<br />
möglich. Eine Autosave-Funktion verhindert<br />
außerdem, dass beim Abbruch einer<br />
Verbindung wertvolle Inhalte abhanden<br />
kommen.<br />
Ebenfalls gut gelöst ist, dass Moderatoren<br />
Whiteboard-Inhalte als PDF-Dateien<br />
exportieren dürfen. Abstriche gibt es hingegen<br />
für die fehlende Aufnahmefunktion.<br />
Zurzeit ist es nicht möglich, eine<br />
Konferenz mitzuschneiden. Ein solches<br />
Feature steht zwar auf der Roadmap für<br />
künftige Versionen, über den Zeitpunkt<br />
schweigen sich die Entwickler allerdings<br />
aus. Das Unternehmen verweist auf die<br />
Möglichkeit, Screencasts mit Programmen<br />
wie Camstudio [23] oder Xvidcap<br />
[24] zu erstellen.<br />
Vyew verfügt über ein API, um die Software<br />
zu Fuß in eigene Applikationen zu<br />
integrieren. Vorgefertigte Plugins und<br />
<strong>Schnittstellen</strong> zu den gängigen Lernumgebungen<br />
und Contentmanagement-Systemen<br />
existieren für den Normalanwender<br />
allerdings nicht. Hierzu verweist das<br />
Unternehmen auf die Enterprise-Version,<br />
deren Bedingungen die Kunden gesondert<br />
aushandeln müssen [25].<br />
Auf gute Zusammenarbeit!<br />
Alle Anwendungen bieten eine integrier te<br />
Arbeitsumgebung mit Textchat, Sprachund<br />
Video-Übertragung, sind benutzerfreundlich,<br />
übersichtlich und robust.<br />
Open Meetings liegt bei den Open-Source-<br />
Tools eine Nasenlänge vor Big Blue Button,<br />
das sich tendenziell an Seminarleiter<br />
richtet und damit eher für den Frontalunterricht<br />
als für Teamarbeit taugt. Open<br />
Meetings stellt angepasste Raumtypen für<br />
Webinare, Konferenzen oder Interviews<br />
bereit und macht daher in beiden Bereichen<br />
eine gute Figur.<br />
Vyew ist ungeschlagen, wenn es darum<br />
geht, schnell und unkompliziert eine Arbeitsgruppe<br />
zusammenzubringen. Die<br />
Möglichkeit, Inhalte über mehrere Sessions<br />
zu bewahren, ist ein echtes Killerfeature.<br />
Anbieter von Webinaren und<br />
Vorlesungen finden in Vyew ebenfalls<br />
eine komfortable Plattform; alle nehmen<br />
allerdings in Kauf, dass der Dienst auf<br />
einem fremden Server läuft. (hej) n<br />
Abbildung 6: Vyew bietet jede Menge Interaktionsmöglichkeiten<br />
für die Teilnehmer.<br />
Infos<br />
[1] Mela Eckenfels, „Virtueller Hörsaal –<br />
E-Learning-Plattformen im Praxistest“:<br />
<strong>Linux</strong>-<strong>Magazin</strong> 11/10, S. 54<br />
[2] Christoph Langner, „Trefflich – Multipoint-Videokonferenzsystem<br />
im Test“:<br />
<strong>Linux</strong>-<strong>Magazin</strong> 12/11, S. 56<br />
[3] Flock Draw: [http:// flockdraw. com]<br />
[4] Mela Eckenfels, „Rote Fäden – Vier<br />
Tools für nicht-lineare Präsentationen“:<br />
<strong>Linux</strong>-<strong>Magazin</strong> 10/12, S. 46<br />
[5] Mindmeister:<br />
[http:// www. mindmeister. com/ de]<br />
[6] Blackboard Collaborate:<br />
[http:// www. blackboard. com/ platforms/<br />
collaborate/ overview. aspx]<br />
[7] Big Blue Button:<br />
[http:// www. bigbluebutton. org]<br />
[8] Apache Open Meetings: [http:// incubator.<br />
apache. org/ openmeetings]<br />
[9] Vyew: [http:// www. vyew. com]<br />
[10] Red5: [http:// www. red5. org]<br />
[11] Free Switch: [http:// www. freeswitch. org]<br />
[12] Big Blue Button unter Ubuntu installieren:<br />
[http:// code. google. com/ p/<br />
bigbluebutton/ wiki/ InstallationUbuntu]<br />
[13] Big-Blue-Button-Download:<br />
[https:// github. com/ bigbluebutton]<br />
[14] VM mit Big Blue Button:<br />
[http:// code. google. com/ p/<br />
bigbluebutton/ wiki/ BigBlueButtonVM]<br />
[15] Stresstest für Big Blue Button:<br />
[https:// groups. google. com/ forum/ ?<br />
fromgroups=#!topic/ bigbluebutton‐dev/<br />
PHzpgVqYAMM]<br />
[16] Renate Hermanns, „Gehaltvolle Zugabe<br />
– Mozilla Popcorn 1.0 im Test“:<br />
<strong>Linux</strong>-<strong>Magazin</strong> 04/12, S. 62<br />
[17] Dokeos:<br />
[http:// www. dokeos‐deutschland. de]<br />
[18] Open Laszlo: [http:// www. openlaszlo. org]<br />
[19] Open Meetings installieren:<br />
[http:// incubator. apache. org/<br />
openmeetings/ installation. html]<br />
[20] Virtuelle Maschinen für Open Meetings:<br />
[http:// nightly. openmeetings. de/<br />
openmeetings/ builds/ vmware/]<br />
[21] Vyew-App für Google Chrome: [https://<br />
chrome. google. com/ webstore/ detail/<br />
vyew/ ogcldakngnllchlnncngiailfhidjjdp]<br />
[22] Vyew-Browsertest:<br />
[http:// vyew. com/ browsertest]<br />
[23] Camstudio: [http:// camstudio. org]<br />
[24] Xvidcap: [http:// xvidcap. sourceforge. net]<br />
[25] Vyew Enterprise Appliance:<br />
[http:// vyew. com/ site/ product/ appliance]
Software<br />
www.linux-magazin.de Tooltipps 12/2012<br />
48<br />
Werkzeuge im Kurztest<br />
Tooltipps<br />
Xc 1.0<br />
Schlanke Sudo-Alternative<br />
Quelle: [http:// sourceforge. net/ projects/<br />
execomm]<br />
Lizenz: GPLv3<br />
Alternativen: Sudo, Rootify<br />
LPVS 0.1<br />
Sicherheitslücken in Paketen finden<br />
Quelle: [http:// lzone. de/ package+<br />
vulnerability+scanner]<br />
Lizenz: Perl<br />
Alternativen: Advisory Check, Debsecan<br />
Profanity 0.19<br />
Jabber-Client für die Konsole<br />
Quelle: [https:// github. com/ boothj5/<br />
profanity/ wiki]<br />
Lizenz: GPLv3<br />
Alternativen: Center ICQ, Mcabber<br />
Sudo ist das Tool der Wahl, um auf <strong>Linux</strong>-<br />
Systemen ein Programm mit den Rechten<br />
eines anderen Benutzers auszuführen.<br />
Die Möglichkeiten sind umfangreich und<br />
die Syntax der Einrichtungsdatei nicht<br />
gerade eingängig. Xc empfiehlt sich als<br />
Alternative mit einer Konfiguration, die<br />
an die »passwd«-Datei erinnert.<br />
Der Aufbau der Datei »/etc/xc.conf« ist<br />
übersichtlich. Jede Zeile enthält die Zuweisung<br />
für genau ein Kommando, die<br />
einzelnen Parameter sind durch Doppelpunkte<br />
voneinander getrennt. Ein Eintrag<br />
beginnt mit einer eindeutigen Befehlsbezeichnung,<br />
ID genannt. Danach folgen<br />
die Accountnamen; lässt der Admin<br />
dieses Feld leer, gelten die Rechte für alle<br />
Benutzer. Als Nächstes kommt die Definition,<br />
unter welcher Kennung das Kommando<br />
laufen soll. Steht hier keine Angabe,<br />
verteilt Xc Rootrechte. Am Schluss<br />
steht der volle Pfad des auszuführenden<br />
Programms.<br />
Anders als Sudo unterstützt Xc keine<br />
Passwortauthentifizierung und erfragt<br />
kein Kennwort, wenn Anwender über<br />
»xc id« ein Programm starten. Ohne Parameter<br />
aufgerufen verrät das Werkzeug,<br />
welche ID-Einträge der Admin konfiguriert<br />
hat.<br />
★★★★★ Xc ist eine interessante Sudo-<br />
Alternative, die leichter zu konfigurieren<br />
ist. Eine Option zur Passwortabfrage<br />
wäre allerdings wünschenswert. n<br />
Sich über kritische Sicherheitslücken<br />
und Patches zu informieren gehört zu<br />
den täglichen Aufgaben eines Admin.<br />
Der <strong>Linux</strong> Package Vulnerability Scanner,<br />
kurz LPVS, geht dabei zur Hand.<br />
Das Perl-Skript durchforstet Onlinequellen<br />
und zeigt, welche Schwachstellen die<br />
installierten Pakete des eigenen Rechners<br />
betreffen. Anwender starten das Skript<br />
über den Aufruf »./lpvs‐scan.pl«; Parameter<br />
erwartet es nicht.<br />
LPVS identifiziert die installierte Distribution<br />
und lädt eine Liste mit aktuell<br />
gepatchten und geänderten Paketen herunter.<br />
Dann vergleicht das Tool die Versionsnummern<br />
der korrigierten Pakete mit<br />
denen der installierten. Falls die eigene<br />
Ausgabe älter und damit betroffen ist,<br />
schreibt LPVS eine Warnung auf die Standardausgabe.<br />
Das Software-Update selbst<br />
stößt der Admin von Hand an.<br />
Die Projektseite listet als unterstützte<br />
Distributionen Ubuntu und Centos; Support<br />
für Debian und Red Hat ist bereits<br />
implementiert, aber im Skript noch auskommentiert.<br />
★★★★★ LPVS ist noch ein sehr junges<br />
Projekt, dessen erste Release vielversprechend<br />
ist. Kombiniert der Admin<br />
das Skript mit einem Cronjob und einem<br />
Mailauftrag, hält es ihn stets auf dem<br />
Laufenden über Sicherheitslücken und<br />
Patches seines Systems.<br />
n<br />
Profanity ist ein Jabber-Client für die<br />
Shell. Wer bereits mit Irssi gechattet hat,<br />
dürfte sich wie zu Hause fühlen, denn<br />
die Entwickler ließen sich von dem IRC-<br />
Client inspirieren. Profanity ist sehr einfach<br />
gehalten: Die obere Titelleiste zeigt<br />
Informationen zum eigenen Account und<br />
den Chatpartnern, die untere Statuszeile<br />
die Anzahl der Verbindungen und Aktivitäten<br />
in den Tabs.<br />
Die Konfigurationsdatei »~/.profanity/<br />
config« enthält drei Bereiche: für das User<br />
Interface (»ui«), die farbliche Gestaltung<br />
der Oberfläche (»colours«) und für die<br />
Verbindungen (»connections«). Es ist<br />
auch möglich, mehrere Konten in der<br />
Einrichtungsdatei zu definieren. Profanity<br />
unterstützt jedoch keine Mehrfachverbindungen<br />
und erlaubt immer nur<br />
den Chat mit einem einzigen Account<br />
auf einem Server.<br />
Viele Einstellungen dürfen Anwender zur<br />
Laufzeit vornehmen. Wie im IRC leiten<br />
sie ihre Kommandos über den Schrägstrich<br />
ein. Für jeden Chat öffnet Profanity<br />
einen eigenen Reiter. Bei der Navigation<br />
durch diese helfen die F-Tasten.<br />
★★★★★ Wer mit Irssi vertraut ist, der<br />
dürfte auch mit Profanity schnell zurechtkommen.<br />
Derzeit lässt die Kontaktverwaltung<br />
noch zu wünschen übrig und<br />
es fehlt die Möglichkeit, mehrere Jabber-<br />
Konten gleichzeitig zu nutzen. n
Squid Analyzer 4.4<br />
Squid-Logdateien auswerten<br />
Quelle: [http:// squidanalyzer. darold. net]<br />
Lizenz: GPLv3<br />
Alternativen: Light Squid, SRG<br />
Taskwarrior 2.1.2<br />
Aufgabenverwaltung für die Konsole<br />
Quelle: [http:// taskwarrior. org/ projects/<br />
show/ taskwarrior]<br />
Lizenz: MIT<br />
Alternativen: Gtdshell, Outliner Lighto<br />
Diffimg 1.4.0<br />
Grafikdateien vergleichen<br />
Quelle: [http:// sourceforge. net/ projects/<br />
diffimg]<br />
Lizenz: GPLv2<br />
Alternativen: Gqview<br />
Tooltipps 12/2012<br />
Software<br />
www.linux-magazin.de<br />
49<br />
Beim Auswerten der Access-Logfiles<br />
des freien Proxyservers Squid geht dieses<br />
Werkzeug zur Hand. Squid Analyzer<br />
ist ein Perl-Skript, das die Einträge in<br />
den Protokolldateien sammelt und daraus<br />
ansprechende HTML-Dateien generiert.<br />
Neben der Gesamtübersicht, die die<br />
übertragenen Bytes und Cache Hits zeigt,<br />
präsentiert das Tool auch eine Ausgabe<br />
der Top-URLs oder Top-Level-Domains.<br />
Zudem ist es möglich, nach lokalen Netzwerken<br />
und Benutzern zu ordnen.<br />
In der Voreinstellung zeigt die Indexseite<br />
eine nach Jahren sortierte Übersicht.<br />
Wählt der Anwender eines aus, erscheint<br />
die Nutzungsstatistik des gesamten Jahres<br />
mit anschaulichen Lastkurven. Der<br />
Kalender rechts oben erlaubt einen Blick<br />
auf die Auslastung der einzelnen Monate<br />
und Tage. Squid Analyzer zeigt lediglich<br />
IP-Adressen an. Anwender dürfen diese<br />
aber über zusätzliche Aliasdateien durch<br />
intuitivere Namen ersetzen.<br />
Alle Konfigurationsdateien liegen im<br />
Verzeichnis »/etc/squidanalyzer«. Um<br />
das Analysetool mit der eigenen Infrastruktur<br />
vertraut zu machen, definieren<br />
Admins hier auch, wo sich die Squid-<br />
Accesslogs befinden und wo die fertigen<br />
Berichte landen sollen. Wer möchte, darf<br />
hier auch gezielt Netze und Benutzer von<br />
der Auswertung ausschließen. Soll Squid<br />
Analyzer zudem bei der Kostenaufstellung<br />
behilflich sein, dann erleichtern die<br />
Parameter »CostPrice« und »Currency«<br />
die Abrechnung.<br />
★★★★★ Squid Analyzer erstellt übersichtliche<br />
und aussagekräftige Statistiken,<br />
die mehr über die Nutzung des<br />
Proxyservers verraten. Die Konfiguration<br />
geht leicht von der Hand.<br />
n<br />
Gelbe Haftzettel und allerlei Notizblöcke<br />
gehören vielleicht dank Taskwarrior<br />
der Vergangenheit an. Die Termin- und<br />
Aufgabenverwaltung läuft auf der Shell<br />
und macht daher auch über SSH und<br />
in eigenen Skripten eine gute Figur. Anwender<br />
steuern es vollständig über Sub-<br />
Commands und Aufrufparameter.<br />
Ohne weitere Optionen über den Befehl<br />
»task« gestartet, listet das Tool alle aktuellen<br />
Aufgaben auf. Es zeigt dann die ID,<br />
gegebenenfalls eine Projektzuordnung,<br />
Start- und Endzeit sowie eine kurze Beschreibung<br />
an. Selbst definierte Filter<br />
beschränken die Ausgabe. Die Manpage<br />
und das Cheatsheet auf der Projekthomepage<br />
zeigen in zahlreichen Beispielen die<br />
vielfältigen Möglichkeiten.<br />
Das Sub-Command »add« gefolgt vom<br />
Projektnamen erstellt eine neue Aufgabe.<br />
Um mit dieser sinnvoll arbeiten zu<br />
können, fehlen ihr noch Metadaten wie<br />
Projekt oder Priorität. Über das Sub-Command<br />
»edit« öffnen Nutzer die Metadaten<br />
im Standardeditor und dürfen diese nun<br />
bearbeiten; »edit« mit einem Projektnamen<br />
aufgerufen zeigt alle Aufgaben zu<br />
diesem Projekt nacheinander an und lädt<br />
sie wiederum in den Editor.<br />
Mit weiteren Sub-Commands markieren<br />
Nutzer Aufgaben als erledigt, erweitern<br />
die Beschreibungen oder löschen sie<br />
ganz. Interessant sind auch die Befehle<br />
»merge«, »push« und »pull«, die Task-<br />
Datenbanken remote via SSH oder Rsync<br />
abgleichen.<br />
★★★★★ Taskwarrior unterstützt Anwender<br />
bei der Aufgabenverwaltung. Ein<br />
Blick in die Dokumentation des mächtigen<br />
Werkzeugs ist vor dem ersten Einsatz<br />
unumgänglich.<br />
n<br />
Unterschiede in Textdateien finden Diff,<br />
Kompare & Co. Für Bilder ist Diffimg<br />
das Tool der Wahl. Es vergleicht zwei<br />
Grafiken im RGB-Farbraum miteinander<br />
und zeigt die Abweichungen sowie statistische<br />
Informationen an. Intern verwendet<br />
Diffimg das Q-Image-Format, berücksichtigt<br />
allerdings keine Unterschiede bei<br />
Texturen oder im Alphakanal. Laut Aussage<br />
der Entwickler eignet sich das plattformunabhängige<br />
Tool besonders zum<br />
Vergleichen von Kompressionsstufen eines<br />
Formats oder zum Optimieren von<br />
Raytracing-Parametern.<br />
Der Anwender wählt zunächst zwei Bilder<br />
im BMP-, PNG- oder JPG-Format aus<br />
und kann diese einzeln betrachten oder<br />
in einer Panelansicht nebeneinander legen<br />
und direkt vergleichen. Auf Wunsch<br />
zeigt Diffimg nur die voneinander abweichenden<br />
Pixel an. Weitere Informationen<br />
entnehmen Anwender dem erwähnten<br />
Statistikbereich. Hier finden sie Angaben<br />
zur Bildgröße und auch zur durchschnittlichen<br />
Fehleranzahl. Eine Farbskala verrät<br />
außerdem, wie das Programm die<br />
Unterschiede farblich einstuft.<br />
Zum Vergleichen von großen Bildermengen<br />
bietet Diffimg eine Slide-Compare-Funktion.<br />
Dabei durchsucht das<br />
Programm die Grafikdateien zweier<br />
Verzeichnisse nach Unterschieden. Die<br />
Reihenfolge der Bilder muss in beiden<br />
Ordnern identisch sein.<br />
★★★★★ Auch wenn auf den ersten Blick<br />
zwei Bilder gleich aussehen, liegen doch<br />
oft Unterschied im Detail. Diffimg schaut<br />
genau hin und findet die Abweichungen.<br />
(U. Vollbracht/hej)<br />
n
Software<br />
www.linux-magazin.de Rike 12/2012<br />
52<br />
Projektmanagement mit Rike<br />
Perfekte Planung<br />
Leichtgewichtige Projektmanagement-Methoden setzen sich offenbar auch in der Software-Entwicklung durch.<br />
Die Firma Arago stellte vor Kurzem die Webanwendung Rike unter eine Open-Source-Lizenz. Das Tool beruht<br />
auf dem Kanban-Prinzip und empfiehlt sich beim Planen von Programmierprojekten. Carsten Zerbst<br />
© Marek Uliasz, 123RF.com<br />
Projektleiter in der IT empfinden klassische<br />
Planungsmodelle oft als zu schwerfällig,<br />
sie stehen einem guten Management<br />
eher im Weg, als es zu fördern.<br />
Interessant, dass mit Kanban (siehe<br />
Kasten „Kanban“) ein Prozess aus der<br />
industriellen Fertigungs- und Materialflussplanung<br />
seinen Weg in die Software-<br />
Entwicklung gefunden hat. Ursprünglich<br />
dient die Methode vor allem der Serienfertigung,<br />
eignet sich aber nach den Anpassungen<br />
des Programmierers David J.<br />
Anderson auch für die software typische<br />
Anfertigung von Einzelstücken.<br />
Rike und Liferay<br />
Auf der Delug-DVD dieses <strong>Magazin</strong>s<br />
befindet sich der bei Drucklegung<br />
DELUG-DVD<br />
aktuelle Zweig des Rike-Git-Repository als<br />
Zip-Datei. Zusätzlich enthält der Datenträger<br />
das Portalframework Liferay in Version 6.1<br />
(Community-Edition).<br />
Kanban richtet sich an Entwickler mit Gestaltungswillen.<br />
Statt die Aufgaben vom<br />
allmächtigen Projektleiter entgegenzunehmen,<br />
entscheiden hier die Programmierer<br />
selbst, welchen Arbeitsschritt sie<br />
als Nächstes angehen. Der Frankfurter IT-<br />
Automatisierungsexperte Arago [1] entwickelt<br />
seit 2010 ein Projektmanagement-<br />
Tool, das auf dem Kanban-Prinzip aufbaut<br />
und gleichzeitig Elemente anderer<br />
agiler Methoden berücksichtigt. Rike [2]<br />
steht seit August 2012 unter einer Open-<br />
Lizenz kostenlos zum<br />
Download bereit.<br />
Alles im Fluss<br />
Die Webanwendung<br />
Rike dient als zentrale<br />
Verteilstation, bei der<br />
die Teammitglieder<br />
selbst Aufgaben kre-<br />
Abhängigkeit<br />
ieren und sich selbst welche aussuchen<br />
können (Pull-Prinzip) und jederzeit einen<br />
Überblick über den Projektzustand<br />
erhalten. Das gesamte Projektgeschehen<br />
bildet Rike mit lediglich vier verschiedenen<br />
Objekten ab. Das sind im Einzelnen<br />
die Artefakte, Meilensteine, Releases und<br />
Aufgaben.<br />
Ein Artefakt bezeichnet den zu produzierenden<br />
Gegenstand wie etwa ein Modul<br />
zur Nutzerverwaltung. Mehrere Meilensteine,<br />
zum Beispiel Spezifikation, Implementation<br />
oder Dokumentation, liegen<br />
auf dem Weg zur Fertigstellung eines<br />
Artefakts. Sie werden erreicht, nachdem<br />
eine entsprechende Aufgabe bearbeitet<br />
wurde. Releases mit Lieferdatum markieren<br />
die Zwischenstände (siehe Abbildung<br />
1).<br />
Das Kernobjekt ist die Aufgabe. Außer<br />
einem Namen enthält sie Angaben über<br />
Artefakt und Meilensteine. Außerdem<br />
hat sie einen bestimmten Lebenszyklus.<br />
Nach dem Anlegen einer Aufgabe bewertet<br />
der Nutzer ihren Schwierigkeitsgrad<br />
und ihre Dringlichkeit. Danach stehen<br />
die Aufgaben zum Bearbeiten bereit, jeder<br />
Mitarbeiter darf sich eine aussuchen<br />
und mit der Arbeit beginnen. Dabei ist er<br />
auf maximal drei Aufgaben gleichzeitig<br />
beschränkt. Außerdem darf er sich mit<br />
selbst erstellten Aufgaben frühestens 24<br />
Stunden nach dem Anlegen befassen.<br />
Artefakte<br />
1<br />
n<br />
Task<br />
Task<br />
erstellen<br />
n<br />
fast<br />
zusammen<br />
1<br />
Version<br />
1<br />
n<br />
Milestone<br />
ergibt<br />
Abbildung 1: Dem Projektmanagement mit Kanban und damit auch Rike<br />
genügen wenige Objekttypen.
Rike hat nicht den Anspruch, das komplette<br />
Projekt abzubilden, also auch<br />
Informationen wie Anforderungs- oder<br />
Architekturdokumente sowie Issues aus<br />
einem Bugtracker anzuzeigen. Stattdessen<br />
bieten Aufgabe, Artefakt und Meilenstein<br />
ein URL-Attribut, das auf Informationen<br />
in bereits bestehenden Systemen<br />
verweist. Beginnt ein Projekt bei null,<br />
stellt das bei der Implementation verwendete<br />
Portalframework Liferay [5] ein<br />
Wiki bereit, das wichtige Informationen<br />
aufnimmt.<br />
Die Webanwendung erlaubt schnellen Zugriff<br />
auf verschiedene Ansichten, um Objekte<br />
zu erzeugen beziehungsweise deren<br />
Projektstatus und Durchsatz anzuzeigen.<br />
Dank des Java-Frameworks Liferay (Abbildung<br />
2) dürfen Nutzer die Elemente<br />
frei anordnen und mit anderen Liferay-<br />
Portlets wie etwa dem Wiki-System<br />
kombinieren. An die Stelle des Kanban-<br />
Boards tritt »All Tasks«, das mit seinen<br />
Filtermöglichkeiten einen Überblick über<br />
die Aufgaben in ihren unterschiedlichen<br />
Zuständen verschafft. »Dependencies«<br />
zeigt die zum Erreichen eines bestimmten<br />
Meilensteins notwendigen Aufgaben<br />
an. Zudem dürfen Anwender hier nach<br />
Abbildung 2: Rike setzt im Hintergrund auf die freie Portalsoftware Liferay.<br />
dem Maximieren über das Icon mit dem<br />
Doppelpfeil Abhängigkeiten zwischen<br />
den Aufgaben definieren. »Task Status«<br />
und »Burndown« geben weitere Informationen<br />
zum Projekt preis (Abbildung 3).<br />
Rike 12/2012<br />
Software<br />
www.linux-magazin.de<br />
53<br />
Die heute führenden Spezialisten stammen oft aus der "Freie Software-Szene" und schulen seit<br />
Jahren im <strong>Linux</strong>hotel. Das erklärt die Breite und Qualität unseres Schulungsangebotes:<br />
AJAX * Amavis * Android * Angriffstechniken * Apache * Asterisk * BaseX * BayesianAnalysis * Bind * C/C++ * Cassandra *<br />
CiviCRM * Cloud * Cluster * ClusterFS * CouchDB * CSS3 * CUPS * Debian * DHCP * DNS * DNSSEC * Echtzeit <strong>Linux</strong> *<br />
Embedded <strong>Linux</strong> * eXist-db * Faces * FAI * Firewall * Forensik * FreeBSD * FreeRADIUS * GeoExt * Git * Grails * GRASS *<br />
Groovy * hadoop * Hochverfügbarkeit * HTML5 * Hudson * iSCSI * IPv6 * ITSM * Java * JavaScript * Jenkins * Kernel * KVM<br />
* LDAP * LibreOffice * <strong>Linux</strong> * LPI * m23 * MacOSX * MapFish * Mapserver * Maven * Mikrocontroller * MVS/380 * MySQL *<br />
Nagios * Node.js * OpenBSD * OpenLayers * OpenOffice * openQRM * OpenVPN * OPSI * OSGi * OTRS * Perl * PHP *<br />
Postfix * PostgreSQL * Puppet * Python * QuantumGIS * R * Rails * RedHat * Routing * Request-Tracker RT * Ruby * Samba<br />
* SAN * Scala * Scribus * Shell * Sicherheit * SNMP * Spacewalk * Spamfilter * SQL * Struts * Subversion * SuSE * TCP/IP *<br />
Tomcat * Treiber * TYPO3 * Ubuntu * UML * Unix * Univention * Virenfilter * Virtualisierung * VoIP * WebGIS * Webservices *<br />
Windows Autoinstall * Windowsintegration * x2go * xen * XML * Xpath * Xquery * z/OS * Zabbix * Zend<br />
Fast 100% der Teilnehmer empfehlen uns weiter. Siehe www.linuxhotel.de<br />
Ja, wir geben es zu und haben überhaupt kein schlechtes Gewissen dabei: Unsere Schulungen machen auch Spaß ;-)
Software<br />
www.linux-magazin.de Rike 12/2012<br />
54<br />
Abbildung 3: Rikes ansprechende Weboberfläche führt Anwender schnell zu den wichtigsten Funktionen. Die<br />
einzelnen Ansichten dürfen Nutzer nach ihren Wünschen anordnen.<br />
Rike liegt noch nicht als fertiges Paket für<br />
die Distributionen vor, Anwender kompilieren<br />
die Software aus den Quellen. Sie<br />
steht unter der MIT-Lizenz, das heißt,<br />
Benutzer dürfen sie für alle Arbeiten kostenlos<br />
verwenden und erweitern, wenn<br />
die Original-Copyright-Hinweise erhalten<br />
bleiben. Im Hintergrund setzt Rike auf<br />
die Standardkomponenten Java, MySQL,<br />
Maven und Graphviz. Zusätzlich benötigt<br />
das Programm Liferay.<br />
In Fahrt<br />
Bei der Installation folgen Anwender am<br />
besten der Anleitung im Github-Repository<br />
und lesen dort vor allem die beiden<br />
Dokumente »Compile and Deploy« und<br />
»Configure Liferay afterwards«. Besonders<br />
wichtig ist der Schritt »Configure the<br />
new Page« aus Letzterem, denn die Layout-Grundeinstellung<br />
von Liferay überlagert<br />
mit dem linken Menü den eigentlichen<br />
Inhalt und macht Rike unbenutzbar.<br />
Im Zweifelsfall hilft es, die Webseite im<br />
Browser etwas zu zoomen, damit das<br />
Auswählen des Layouts klappt.<br />
Wer noch kein Dokumentenverwaltungs-<br />
System nutzt, der sollte gleich das Wiki-<br />
System in Liferay mit installieren. Ähnlich<br />
wie beim Einrichten des Frameworks<br />
für Rike geht das über »Add Page« | »Add<br />
Portlet« | »Wiki«. Nach dem Einloggen<br />
des Test-Users (Benutzername: »test@<br />
liferay.com«, Passwort: »test«) sollten<br />
Anwender über das Control Panel einen<br />
oder mehrere richtige Accounts einrichten<br />
und das Demokonto deaktivieren.<br />
Work in Progress<br />
Rike steht erst am Anfang seiner Entwicklung<br />
und zeigt noch einige Macken. Vor<br />
allem die Dokumentation erscheint verbesserungswürdig<br />
und könnte mit ausführlicheren<br />
Informationen den Einstieg<br />
in die praktische Arbeit erleichtern. Auch<br />
der Workflow ist nicht immer hilfreich.<br />
Wer etwa einen Fehler im Projekt findet<br />
und in Rike einträgt, der muss 24 Stunden<br />
warten, bis er ihn bearbeiten darf.<br />
Wer mit diesen Kinderkrankheiten leben<br />
kann, der bekommt mit Rike und Liferay<br />
ein gutes Team zur Seite und ein praktisches<br />
Projektmanagement-Werkzeug für<br />
den Browser. (hej) <br />
n<br />
Infos<br />
[1] Arago: [http:// www. arago. de]<br />
[2] Rike: [https:// github. com/ arago/ rike]<br />
[3] Kanban:<br />
[http:// limitedwipsociety. ning. com]<br />
[4] Scrum: [http:// www. scrum. org]<br />
[5] Liferay: [http:// www. liferay. com]<br />
Der Autor<br />
Carsten Zerbst arbeitet als Projektleiter und<br />
Software-Architekt im CAD- und PDM-Umfeld für<br />
die Automobil-, Luft- und Raumfahrtindustrie sowie<br />
für den Schiffbau. Er ist vom PMI als Project<br />
Management Professional (PMP) zertifiziert.<br />
Kanban<br />
Als Methode zum Steuern von Produktionsabläufen<br />
liegen die Wurzeln von Kanban (Japanisch<br />
für Karte, Beleg) im industriellen Fertigungsprozess.<br />
Ende der 1940er Jahre stand Taiichi Ohno,<br />
der Erfinder des Toyota-Produktionssystems,<br />
vor der Aufgabe, die Produktivität beim Automobilhersteller<br />
zu verbessern. Eine seiner zentralen<br />
Ideen war die Abkehr von der klassischen<br />
Fertigungssteuerung, die den Materialfluss bis<br />
runter zur letzten Schraube möglichst genau<br />
plant. An ihre Stelle tritt ein bedarfsgesteuerter<br />
Prozess, bei dem jede Fertigungsstufe über einen<br />
eigenen Puffer verfügt und Material nur bei<br />
Bedarf zur Bearbeitung anfordert.<br />
Der Programmierer David J. Anderson entwickelte<br />
auf dieser Basis einen Kanban-Prozess<br />
für die Entwicklung von Software [3]. 2007<br />
stellte er das Konzept der Öffentlichkeit vor.<br />
Der leichtgewichtige Entwicklungsprozess setzt<br />
auf eigenverantwortliche Mitarbeiter und permanente<br />
Prozessverbesserung. Eine Reihe von<br />
Kernpraktiken regelt das Zusammenspiel der<br />
Projektmitarbeiter. Dreh- und Angelpunkt bildet<br />
das Kanban-Board. Auf ihm kann das Team<br />
jederzeit sehen, welche Tasks anstehen und wer<br />
an welcher Baustelle arbeitet.<br />
Das Board besitzt drei Spalten für die Zustände<br />
»Zu Bearbeiten«, »In Bearbeitung« und »Fertiggestellt«.<br />
Jede Aufgabe hat einen Zettel. Sobald<br />
ein Mitarbeiter freie Kapazitäten hat, holt<br />
er sich eine Task aus der ersten Abteilung und<br />
verschiebt den Zettel von »Zu Bearbeiten« nach<br />
»In Bearbeitung«. Nach getaner Arbeit landen<br />
die Zettel im Bereich »Fertiggestellt«. Um die<br />
Durchlaufzeiten und die Menge der angefangenen<br />
Prozesse zu reduzieren, ist die Menge der<br />
gleichzeitig bearbeiteten Aufgaben beschränkt.<br />
Kenngrößen wie Warteschlangenlänge, Durchlaufzeiten<br />
und so weiter messen und steuern<br />
permanent den Arbeitsfluss. Regeln sind für<br />
alle sichtbar, regelmäßige Feedback-Runden<br />
des gesamten Teams sorgen für kontinuierliche<br />
Verbesserung.<br />
Kanban gehört wie Scrum [4] zu den agilen<br />
Projektmanagement-Methoden. Wichtigster<br />
Unterschied zwischen den beiden Vorgehensmodellen<br />
ist der vorgegebene, konstante Produktionstakt<br />
(Sprint-Dauer) bei Scrum, während<br />
Kanban einen kontinuierlichen Durchlauf<br />
anstrebt. Beiden gemeinsam ist das Streben<br />
nach möglichst großer Transparenz und kontinuierlicher<br />
Prozessverbesserung.
Aus dem Alltag eines Sysadmin: Gif-Animationen<br />
World Wide Wechsel<br />
Einführung 12/2012<br />
Sysadmin<br />
Jenseits hysterisch zuckender Web-Emoticons eignen sich animierte Gif-Bildchen super zum Präsentieren von<br />
Tendenzen, die beispielsweise beim Systemmonitoring auffallen. Ebenfalls nicht für die Katz’ ist es, den stürmischen<br />
Stream einer Webcam in Gifs zu verwandeln. Charly Kühnast<br />
www.linux-magazin.de<br />
55<br />
Inhalt<br />
56 OSSIM und Alien Vault<br />
Frei und kommerziell erhältlich, doch<br />
hinterlässt das getestete Werkzeug fürs<br />
Security Information and Event Management<br />
einen gemischen Eindruck.<br />
62 Cfengine lernt Posix-ACLs<br />
Cfengine 3.4.0 erbt ein Feature der kommerziellen<br />
Version: Posix-ACLs unter<br />
Unix, <strong>Linux</strong> und Windows.<br />
gut auf der Webseite der kleinen Hobby-<br />
Wetterstation ([2], Abbildung 1).<br />
Unzählige Tools können animierte Bilder<br />
erstellen, aber die meisten davon sind<br />
grafisch und nicht per Skript steuerbar.<br />
Ich entscheide mich für Convert aus der<br />
Werkzeugsammlung Imagemagick, das<br />
genau das tut, was sein Name vermuten<br />
lässt, und noch einiges mehr. Im einfachsten<br />
Fall konvertiere ich damit die<br />
Bilder meiner Webcam ins Gif-Format:<br />
© The Blowfish Inc, Fotolia<br />
Kürzlich begann ich mich mit dem Bau<br />
animierter Gifs zu befassen. Nicht weil<br />
ich das Web um weiteren Katzen-Content<br />
bereichern möchte – unsere 16-jährige<br />
Hauskatze [1] ist Bewegungsallergikerin,<br />
da tät’s auch ein Stand- oder Liegebild<br />
–, sondern weil ich Wolkenbewegungen<br />
fürs Web sichtbar machen wollte. Die<br />
Idee kam mir bei einer Orkanwarnung.<br />
Mit einer auf die Baumwipfel und Wolken<br />
gerichten Webcam könnte ich von<br />
überall aus beurteilen, ob für Haus und<br />
Hof Ungemach droht.<br />
Gesagt, getan. Leider ist die Internetanbindung<br />
in der niederrheinischen Tiefebene<br />
genauso dynamisch wie unsere<br />
Katze, Streaming kann ich vergessen.<br />
Also lasse ich die Kamera alle paar Sekunden<br />
ein Bild schießen und backe diese<br />
zu einem animierten Gif zusammen. Das<br />
Bandbeiten sparende Ergebnis macht sich<br />
Abbildung 1: Charlys Wetter-Seite ist mit der Wipfelund-Wolken-Animation<br />
um eine Attraktion reicher.<br />
convert bild.jpg bild.gif<br />
Diesen Arbeitsschritt darf ich mir aber<br />
auch sparen, denn Convert erledigt die<br />
Konvertierung gleich mit, wenn ich das<br />
animierte Gif bauen lasse:<br />
convert ‐delay 100 ‐loop 1 ~/cam/*.jpgU<br />
animation.gif<br />
Der Parameter »‐delay« gibt die Länge<br />
der Pause zwischen den einzelnen Animationsschritten<br />
in Hundertstelsekunden<br />
an, in diesem Fall also eine Sekunde. Mit<br />
»‐loop 1« läuft der Animationszyklus nur<br />
einmal durch und stoppt auf dem letzten<br />
Bild. Mit »‐loop 0« klöppele ich eine<br />
Endlos-Animation, die nach dem letzten<br />
Bild wieder mit dem ersten beginnt.<br />
Auswerten und<br />
präsentieren<br />
Warum schreibe ich überhaupt in der<br />
Sysadmin-Kolumne über animierte Gifs?<br />
Mit der Technik animiere ich gelegentlich<br />
die Übersichtsgrafiken, die sich aus<br />
Überwachungs- und Monitoringtools wie<br />
Cacti, Icinga oder Munin speisen. Die<br />
Ergebnisse verwende ich gerne in Meetings<br />
und Präsentationen, gerade wenn<br />
fachfremde Teilnehmer dabei sind. Animationen<br />
eignen sich gut, um wie auf<br />
einem Zeitstrahl bestimmte Lastzustände<br />
in Relation zur Tageszeit oder im Wochenablauf<br />
zu visualisieren.<br />
Der Funktionsumfang der Imagemagick-<br />
Tools ist gigantisch. Einen Eindruck der<br />
verschiedenen Anwendungsfelder vermitteln<br />
[3] und [4]. Da ist nicht nur<br />
für Immobilienbesitzer, sondern auch für<br />
Admins einiges dabei. (jk) n<br />
Infos<br />
[1] Charlys Katze:<br />
[http:// kuehnast. com/ fun/ wachkatze. jpg]<br />
[2] Charlys Wetterwarte:<br />
[http:// kuehnast. com/ ws]<br />
[3] Imagemagick benutzen:<br />
[http:// www. imagemagick. org/ Usage/]<br />
[4] Bernhard Bablok, „Automatische Bildbearbeitung<br />
mit Imagemagick“: <strong>Linux</strong>-<strong>Magazin</strong><br />
08/08, S. 52<br />
Der Autor<br />
Charly Kühnast administriert Unix-Syste me im<br />
Rechenzentrum Niederrhein in Kamp-Lintfort. Zu<br />
seinen Aufgaben gehören die Sicherheit und Verfügbarkeit<br />
der Firewalls und<br />
der DMZ. Im heißen Teil seiner<br />
Freizeit frönt er dem Kochen,<br />
im feuchten Teil der<br />
Süßwasseraquaristik und im<br />
östlichen lernt er Japanisch.
Sysadmin<br />
www.linux-magazin.de OSSIM Alien Vault 12/2012<br />
56<br />
Der Security Infrastructure Monitor Alien Vault schützt lokale Netzwerke<br />
Zugriff verwehrt<br />
2003 als Security Infrastructure Monitor gestartet und jüngst in Version 4.0 freigegeben, ist OSSIM unter Open-<br />
Source-Werkzeugen fürs Security Information and Event Management (SIEM) eine beliebte Wahl. Vergleichsweise<br />
günstig, leisten sich aber sowohl die freie als auch die kommerzielle Version Schwächen. Ralf Spenneberg<br />
© tiero, 123RF.com<br />
Kontrolle der Verfügbarkeit und Funktionsfähigkeit<br />
von OSSIM selbst kann er<br />
hier überwachen (Abbildung 2).<br />
Das GUI integriert ebenfalls eine komfortable<br />
Suche in den Logfiles, sodass<br />
der Zugriff per SSH nur in Notfällen erforderlich<br />
ist. Sämtliche Komponenten<br />
darf der Administrator einzeln konfigurieren<br />
oder durch eigene Komponenten<br />
ersetzen, zum Beispiel den automatisch<br />
eingebauten Scanner Open VAS durch ein<br />
eigenes Nessus.<br />
Speziell bei der Benutzerverwaltung haben<br />
die Programmierer von Alien Vault<br />
große Unternehmen und Netze berücksichtigt:<br />
Neben den üblichen Informationen<br />
wie Name, Login und Kennwort legt<br />
der Admin genau fest, welche Menüs der<br />
Benutzer anschließend sehen, verwenden<br />
oder welche Assets er analysieren<br />
darf. Als Asset bezeichnet OSSIM Hosts<br />
und Netzwerke, die der Admin vorher<br />
dem SIEM bekannt machen muss.<br />
Keineswegs im eigenen Tresor, wie sein<br />
Name mit „Vault“ vermuten lässt, hinterlegte<br />
der Security-Spezialist Alien Vault<br />
[1] die 35 Millionen Risikokapital ([2],<br />
[3], [4]), die ihm zwischen 2010 und<br />
2012 zuflossen. Vielmehr nutzte er das<br />
Geld nach eigener Aussage, um das freie<br />
Intrusion Detection System OSSIM [5]<br />
aggressiv voranzutreiben und parallel<br />
dazu unter dem Namen Alien Vault eine<br />
kommerzielle Variante der Software zu<br />
schaffen. Erfolge hat man dabei durchaus<br />
vorzuweisen: Einen großen Teil der Mittel<br />
erhielt die Firma, nachdem die Software<br />
Schadcode identifizieren konnte, der das<br />
US-amerikanische Verteidigungsministerium<br />
befallen hatte [6].<br />
Vor wenigen Wochen erschien mit OSSIM<br />
4.0 die neueste Version der auf Debian<br />
Squeeze basierenden Software. Dieser<br />
Artikel analysiert zunächst die Open-<br />
Source-Variante von Alien Vaults Software<br />
und vergleicht diese anschließend<br />
mit der kommerziellen Version.<br />
Open Source: OSSIM<br />
Die Installationsroutine beruht auf dem<br />
Debian-Installer und wie üblich sollte der<br />
Admin nach der Installation zunächst die<br />
nötigen Updates einspielen. Dies gelingt<br />
ihm sowohl auf der Kommandozeile mit<br />
»alienvault‐update« als auch im übersichtlichen<br />
Web-Dashboard (Abbildung<br />
1). Überhaupt findet der Admin alle Funktionen<br />
im GUI: Von der Netzwerkkonfiguration<br />
über die Benutzerverwaltung<br />
bis hin zu Backup und Restore, sogar die<br />
Aktive und passive Scans<br />
Für die Assets benutzt OSSIM eine eigene<br />
Datenbank, wo sie der Admin entweder<br />
manuell einträgt oder einfach über<br />
einen Scan aufnehmen lässt, inklusive<br />
Betriebssystem und laufender Dienste<br />
(Abbildung 3). Solche Asset Discoveries<br />
lassen sich auch automatisch durchführen<br />
(Abbildung 4), jedoch ist ein Scan<br />
nicht in jedem Netzwerk möglich und<br />
Vorsicht geboten: Auch ein Nmap-Scan<br />
kann schlecht programmierte TCP/<br />
DELUG-DVD<br />
Auf der Delug-DVD finden Sie<br />
DELUG-DVD<br />
ein ISO-Image, mit dem sich OSSIM, die freie<br />
Alien-Vault-Variante, laut Hersteller in 30 Minuten<br />
installieren lässt.
Abbildung 1: Die OSSIM-Weboberfläche meldet mögliche Updates.<br />
IP-Stacks, zum Beispiel in Embedded-<br />
Systemen wie Klimaanlagen, zum Absturz<br />
bringen. Bei aktiven Scans nutzt<br />
OSSIM auch die WMI-Schnittstelle [7],<br />
um Windows-Systeme auszulesen. Außerdem<br />
ist OCS NG (Open Computers<br />
and Software Inventory Next Generation,<br />
[8]) in OSSIM integriert und lässt sich<br />
wie sein Vorgänger OCS für regelmäßige<br />
Prüfungen nutzen.<br />
Mit PRADS [9] ist ein „Passive Realtime<br />
Asset Detection System“ an Bord, das<br />
selbstständig den Netzwerkverkehr überwacht<br />
und so Hosts, Betriebssysteme und<br />
Dienste erkennt (Abbildung 5). PRADS<br />
aktualisiert die Daten in der Asset-Datenbank<br />
dynamisch, selbst wenn der Admin<br />
keine regelmäßigen Scans eingerichtet<br />
hat. Das garantiert OSSIM stets aktuelle<br />
Daten für die Analyse.<br />
Dienste mit Open VAS und<br />
Nagios überwachen<br />
Die erkannten Systeme scannt der Admin<br />
gleich mit Open VAS nach undichten Stellen<br />
(Abbildung 6). Alle Open-VAS- oder<br />
Nessus-Funktionen stehen parat, Nessus<br />
5 unterstützt OSSIM-Software zurzeit<br />
nicht. Doch die Integration des Verwundbarkeitsscanners<br />
haben die Entwickler<br />
gut gelöst: Sobald er eine Schwachstelle<br />
erkennt, generiert OSSIM automatisch<br />
ein Ticket. Das kann der Admin an einzelne<br />
Benutzer delegieren, mit Anhängen<br />
versehen und darin die Reaktionen dokumentieren.<br />
Geschlossene Tickets zeigt<br />
OSSIM per Default nicht an, sie lassen<br />
sich aber jederzeit über Einstellungen des<br />
Suchfilters wieder aufrufen.<br />
Die erkannten Dienste und Hosts kann<br />
der Admin durch ein ebenfalls in OSSIM<br />
integriertes Nagios überwachen, schlicht<br />
über ein entsprechendes Häkchen in der<br />
Konfiguration der Asset-Datenbank. Einfacher<br />
lässt sich das komplexe Monitoring<br />
mit Nagios schwerlich lösen, leider<br />
ist eine über die einfache Host-Port-Verfügbarkeitsüberwachung<br />
hinausgehende<br />
Konfiguration nicht vorgesehen.<br />
Nicht zu Ende gedacht<br />
Die Asset-Datenbank der OSSIM-Software<br />
hat aber auch einige Lücken. Trotz hohen<br />
Detailgrads landen offenbar weder die<br />
Ergebnisse des Nmap- noch des Open-<br />
VAS-Scans in der Datenbank, sondern<br />
nur PRADS-Daten. Dabei können sowohl<br />
Nmap als auch Open VAS sehr interessante<br />
Informationen liefern, die die passive<br />
Erkennung weit übertreffen, speziell<br />
für die Analyse der späteren Security Incidents<br />
müsste sich das für den Admin<br />
als sehr hilfreich erweisen.<br />
Auch Snort ließe sich besser konfigurieren,<br />
ist es doch eine der Kernfunktionen<br />
von OSSIM. Sinnvoll wäre es beispielsweise,<br />
die Asset-Datenbank direkt für<br />
die Konfiguration von Snort einzusetzen.<br />
Das Schnüffelschwein bietet ja bereits<br />
die Host Attribute Table (siehe Kasten<br />
„Host Attribute Table“), die das von<br />
jedem Host verwendete Betriebssystem<br />
und die angebotenen Dienste enthält.<br />
Leider nutzt OSSIM diese Funktion überhaupt<br />
nicht.<br />
Die wichtigste Funktionalität der OSSIM-<br />
Software bleibt jedoch das Auswerten<br />
und Analysieren der Security Incidents,<br />
wobei sie für den Admin ähnliche Ereignisse<br />
zu einer einzigen, übersichtlichen<br />
Meldung aggregiert. Auch die grafische<br />
Darstellung des Risikofaktors erleichtert<br />
die Auswahl der zu bearbeitenden<br />
Meldungen, die sich direkt in ein Ticket<br />
umwandeln und einem Benutzer für die<br />
Bearbeitung zuweisen lassen.<br />
Als Quelle für die Meldungen dienen die<br />
genutzten IDS-Sensoren und Verwundbarkeitsscanner,<br />
bei OSSIM also OSSEC<br />
und Snort. Letzteres verwendet erfreulicherweise<br />
für die Sammlung der Pakete<br />
die vom Ntop-Projekt betreute Pfring-Bibliothek<br />
[10], die für sehr hohen Durchsatz<br />
optimiert ist.<br />
Unvollständig und unsicher?<br />
Überraschenderweise startet OSSIM Snort<br />
mit Rootrechten, was unter <strong>Linux</strong> – vorsichtig<br />
ausgedrückt – seit Jahren nicht<br />
mehr zeitgemäß ist. Wie alle anderen<br />
Netzwerkdienste bietet auch Snort die<br />
Möglichkeit, nach dem Start die Rootprivilegien<br />
abzugeben. Durch einen Program<br />
mierfehler in Snort könnte ein Angreifer<br />
OSSIM übernehmen.<br />
Auch benutzt die Software für die Analyse<br />
der Security Incidents wieder die<br />
Asset-Datenbank und vernachlässigt die<br />
Abbildung 2: OSSIM überwacht sich selbst, hier die System- und Netzwerkressourcen.<br />
OSSIM Alien Vault 12/2012<br />
Sysadmin<br />
www.linux-magazin.de<br />
57
Sysadmin<br />
www.linux-magazin.de OSSIM Alien Vault 12/2012<br />
58<br />
gefunden Verwundbarkeiten<br />
sträflich. Wünschenswert<br />
wäre es<br />
vielmehr, wenn die<br />
Oberfläche bei einer<br />
Meldung dem Admin<br />
direkt mitteilen würde,<br />
ob der betroffene Host<br />
überhaupt über den<br />
angegriffenen Dienst<br />
verfügt und ob der<br />
angegriffene Host verwundbar<br />
ist.<br />
Hierzu könnte OSSIM das in der Asset-<br />
Datenbank gespeicherte Betriebssystem<br />
auswerten und die hier hinterlegten Ports<br />
mit den Ports des Angriffs vergleichen.<br />
Das aber erfordert entsprechende Informationen,<br />
die leider bisher nicht in<br />
der Open Source Vulnerability Database<br />
(OSVDB, [11]) enthalten sind. OSSIM<br />
verwendet als einziges System diese<br />
Datenbank, während die Wettbewerber<br />
ihren Kunden eigene DBs zur Verfügung<br />
stellen. Erst die kommerzielle Variante<br />
von Alien Vault bringt diese Funktionen<br />
mit, und zwar unter dem Namen Event<br />
Context (Abbildung 7).<br />
Freie Version – absichtlich<br />
verkrüppelt?<br />
Da der freien OSSIM-Variante auch die<br />
entsprechenden Korrelationsregeln fehlen,<br />
entstehen aus den vom IDS gemeldeten<br />
Ereignissen nur in den seltensten Fällen<br />
tatsächliche Incidents. Die Präzision<br />
der Erkennung hängt von den wenigen<br />
im freien Alien-Vault-Feed mitgelieferten<br />
Korrelations-Direktiven ab, auch hier hat<br />
die kommerzielle Variante mehr zu bieten<br />
(Abbildungen 8 und 9).<br />
Abbildung 3: Die Scans für die Asset Discovery lassen sich automatisieren.<br />
Vor allem bei den Korrelationsdirektiven<br />
drängt sich der Eindruck auf, dass<br />
der Hersteller versucht die freie Version<br />
in ihren Funktionen zu beschneiden –<br />
allzu mager sind sie im Vergleich mit der<br />
kommerziellen Version geraten. Natürlich<br />
könnte jeder Anwender seine eigenen<br />
Direktiven erzeugen, jedoch ist dies<br />
ein sehr aufwändiges Unterfangen, das<br />
enormes Wissen verlangt. Ein öffentliches<br />
Repository, in dem freie Direktiven<br />
gespeichert und getauscht werden, wäre<br />
wünschenswert.<br />
Enterprise Alien Vault<br />
Abbildung 4: OSSIM entdeckt Hosts und Dienste.<br />
Besser macht das die kommerzielle Variante,<br />
zu der ein Upgrade über einen<br />
Evaluation-Key in drei simplen Schritten<br />
führt: Dafür ruft der Admin an der Kommandozeile<br />
»alienvault‐setup« auf und<br />
wählt dort im Menü die Option »System‐Upgrade«<br />
und anschließend »Alien<br />
Vault 4«. Nach Eingabe des Schlüssels<br />
verbindet sich das System mit dem geschlossenen<br />
Repository bei Alien Vault<br />
und bezieht hier zusätzliche Pakete und<br />
Signaturen. Alien Vault selbst bietet neben<br />
der reinen, Software-basierten Version<br />
auch Hardware-Appliances an. Die<br />
„All-In-One Appliances“ vereinen sowohl<br />
den Sensor, den Protokollanalysator und<br />
das SIEM und schlagen mit knapp 20 000<br />
Euro zu Buche. Dafür gibt’s den Alien-<br />
Vault-Feed für die Direktiven und Regeln<br />
im ersten Jahr als Subskription, jedes<br />
weitere Jahr kostet gut 3000 Euro.<br />
Abbildung 5: Über das passive PRADS hat OSSIM<br />
einen Host gefunden, auf dem Samba, HTTP und<br />
SSH-Server laufen.<br />
Host Attribute Table<br />
Vor etwa zehn Jahren fanden Forscher heraus,<br />
dass unterschiedliche Betriebssysteme<br />
TCP/IP-Pakete unterschiedlich defragmentieren<br />
und Verbindungen individuell typisch reassemblieren.<br />
Bei regulären Daten fallen diese<br />
Unterschiede nicht auf, ein Angreifer kann jedoch<br />
zum Beispiel Daten gezielt fragmentiert<br />
übertragen. Dabei dupliziert er ein Fragment<br />
und versieht es mit unkritischen Daten, während<br />
das folgende Fragment seinen Angriffscode<br />
enthält.<br />
Im fertigen defragmentierten Paket kann das<br />
Zielsystem lediglich eines der beiden Fragmente<br />
einbauen. Manche Betriebssysteme nehmen nur<br />
das erste und ignorieren spätere, überlappende<br />
Fragmente, während andere die später eintreffenden<br />
nutzen, um ältere Daten in dem fertigen<br />
Paket zu überschreiben. Kennt ein Angreifer<br />
das Verhalten des Target, dann kann er, wenn<br />
das IDS und das Zielsystem unterschiedliche<br />
Varianten nutzen, durch gezielte Fragmentierung<br />
einen Angriff durchführen, ohne dass das<br />
IDS ihn erkennt.<br />
Um dies zu vermeiden, muss der Admin Snort<br />
für jedes (Betriebs-)System passend konfigurieren.<br />
Genau das ermöglicht die Host Attribute<br />
Table. Mit dieser Tabelle lassen sich aber auch<br />
Dienste auf ungewöhnlichen Ports analysieren:<br />
Die Snort-Regeln überwachen HTTP-Dienste<br />
normalerweise nur auf den klassischen HTTP-<br />
Ports wie 80 oder 8080. Webmin auf Port<br />
10000 bleibt da unbeobachtet, und zwar auch<br />
bei OSSIM.<br />
Weiß jedoch der Admin, dass auf einem bestimmten<br />
Host auf Port 10000 ein HTTP-Service<br />
aktiv ist, kann er die Host Attribute Table<br />
nutzen, um nur für diesen Host und Port die<br />
HTTP-Regeln zu aktivieren. Sämtliche Regeln,<br />
die dann die Information »metadata:service<br />
http;« tragen, überwachen den entsprechenden<br />
Datenverkehr.
OSDC.de<br />
OPEN SOURCE DATA<br />
CENTER CONFERENCE<br />
17. - 18. APRIL 2013 | NUREMBERG<br />
OSSIM Alien Vault 12/2012<br />
Sysadmin<br />
www.linux-magazin.de<br />
59<br />
Abbildung 6: 23 potenzielle Sicherheitslücken hat OSSIMs Open VAS gefunden, zwei davon stuft der Scanner<br />
als kritisch ein. Schade, dass OSSIM nicht alle verfügbaren Daten zur Analyse nutzt.<br />
Für so viel Geld gibt es aber auch einigen<br />
Gegenwert: Die Alien-Vault-Installationen<br />
(Appliance und Softwareversion) verfügen<br />
auch über wesentlich umfangreichere<br />
Signaturen für Snort. Als Partner<br />
von Emerging Threats [12] hält der Hersteller<br />
für seine kommerziellen Kunden<br />
den ET-Pro-Regelsatz [13] bereit. Für die<br />
Sourcefire-VRT-Regeln reicht es dagegen<br />
noch nicht, weil Alien Vault noch kein<br />
Snort-Integrator ist.<br />
Enttäuschend ist, dass die kommerzielle<br />
Variante die oben aufgeführten Kritikpunkte<br />
auch nicht besser bewältigt als<br />
die freie. Snort ist auch hier ein Rootprozess.<br />
Dass das gefährlich ist, haben<br />
Sicherheitslücken in der Vergangenheit<br />
bereits gezeigt [14]. Auch die Host-spezifische<br />
Konfiguration von Snort mit Hilfe<br />
der Host-Attribute-Tables nutzt Alien<br />
Vault nicht. Mit intelligenter manueller<br />
Fragmentierung oder Segmentierung des<br />
Angriffs glückt also ein Angriff so, dass<br />
Alien Vault ihn nicht erkennt, obwohl es<br />
über eine entsprechende Signatur verfügt.<br />
Auch Dienste auf ungewöhnlichen<br />
Ports (ein Webserver auf Port 10000)<br />
kann Alien Vault daher nicht schützen.<br />
Unzureichende Asset-DB<br />
Dafür sollte das System nun die Asset-<br />
Datenbank besser nutzen, um den Analysten<br />
bei der Bearbeitung der Incidents<br />
zu unterstützen. Leider werden diese Daten<br />
aber nur unzureichend aufgearbeitet.<br />
Der Event Context eines Incident, der in<br />
der freien Version nicht verfügbar ist,<br />
wwww.netways.de/osdc<br />
presented by<br />
NETWAYS ®<br />
Abbildung 7: Nur die kostenpflichtige Version kann über den Event Context erkennen, ob ein Angriffsversuch<br />
erfolgversprechend wäre – der freien Version fehlt dieses Feature.<br />
wwww.netways.de/osdc<br />
presented by<br />
NETWAYS ®
Sysadmin<br />
www.linux-magazin.de OSSIM Alien Vault 12/2012<br />
60<br />
Abbildung 8: Das freie OSSIM kann nur<br />
wenige Ereignisse korrelieren und als<br />
Incident aufbereiten.<br />
bietet in der kommerziellen Variante nur<br />
geringe zusätzliche Funktionen (Abbildung<br />
10).<br />
Das überrascht, da die Asset-Datenbank<br />
doch weitreichende Informationen über<br />
das System hat. Sie kennt das Betriebssystem<br />
und den Wert des Zielsystems<br />
eines Angriffs. Bei dem in Abbildung 11<br />
gezeigten Ereignis handelt es sich um<br />
einen gezielten Angriff auf den SSH-Port<br />
des Zielsystems.<br />
Statt im Kontext lediglich zu zeigen, dass<br />
dieser Port auf dem Zielsystem geöffnet<br />
ist, wäre es hilfreich, auch das dort<br />
lauschende Produkt anzuzeigen, wenn<br />
diese Informationen wie hier in der Asset-Datenbank<br />
ohnehin vorliegen. Aus<br />
der OSVDB könnten auch direkt mögliche<br />
bekannte Sicherheitslücken dieser<br />
Software dazustoßen. Außerdem wurde<br />
dem Zielsystem eine Rolle zugewiesen,<br />
die ebenfalls nicht angezeigt wird. Auch<br />
dies könnte dem Admin bei der Analyse<br />
durchaus helfen.<br />
Darüber hinaus fehlen in der Anzeige einige<br />
Schwachstellen auf dem Zielsystem,<br />
die Alien Vault erkannt hat (Abbildung<br />
12). Auch die wären für die Analyse hilfreich,<br />
wenn sie direkt im Event Context<br />
angezeigt würden.<br />
Open Threat Exchange<br />
Abbildung 9: Alien Vault liefert in<br />
seinem Feed über 1400 Regeln für das<br />
automatische Erzeugen von Incidents.<br />
siert auszutauschen.<br />
Ob Senderbase<br />
von<br />
Iron Port und Cisco für die Spam-Bekämpfung<br />
oder der Open Threat Exchange<br />
von Alien Vault, die Idee ist dabei<br />
immer, eine weltweite Korrelation der<br />
Bedrohungen zu schaffen.<br />
Hier versucht Alien Vault sich von den<br />
anderen Mitbewerber abzusetzen, indem<br />
es diese Dienstleistung allen OSSIM- und<br />
Alien-Vault-Anwendern kostenlos zur<br />
Verfügung stellt, wenn sie selbst ihre Installationen<br />
als Sensoren veröffentlichen.<br />
Alien Vault hat OTX im Februar 2012 erstmals<br />
vorgestellt und nutzt die Daten in<br />
erster Linie zur Korrelation der als gefährlich<br />
bekannten IP-Adressen. Im August<br />
hat Alien Vault die ersten gewonnenen<br />
Erkenntnisse veröffentlicht [15]. Diese<br />
Daten lassen sich dann in OSSIM oder<br />
Alien Vault als IP-Reputation angezeigen<br />
(Abbildung 13).<br />
Snort selbst und alle hierauf aufbauenden<br />
Produkte sind für die forensische<br />
Abbildung 10: Zwar kommt die kommerzielle Version mit Event Context,<br />
überzeugen kann der aber nicht.<br />
Analyse von Angriffen ungeeignet. Snort<br />
protokolliert nur das eine Paket, das die<br />
von Snort erkannte Signatur enthält. Alle<br />
Pakete, die vorher oder nachher über die<br />
Verbindung liefen, lassen sich anschließend<br />
nicht mehr analysieren. Für die Protokollierung<br />
der später übertragenen Pakete<br />
besitzt Snort zwar eine Funktion, die<br />
meisten Regeln nutzen sie jedoch nicht.<br />
Aufwändige Forensik<br />
Für seine forensischen Analysen kann<br />
der Admin sowohl in der freien als auch<br />
in der kommerziellen Version die umfangreiche<br />
Deep-See-Software von Solera<br />
Networks [16] anbinden, die den gesamten<br />
Netzwerkverkehr aufzeichnet.<br />
Erkennt nun Alien Vault einen Angriff<br />
über das Netzwerk, so kann der Forensiker<br />
direkt über die Solera-Oberfläche auf<br />
die gesamte Netzwerkverbindung zugreifen<br />
und so den Angriff in seinem Kontext<br />
analysieren. Dies benötigt allerdings erhebliche<br />
Ressourcen für die Speicherung<br />
Eine unter Security-Experten in letzter<br />
Zeit sehr beliebte Idee ist es, statistische<br />
Informationen über Angriffe, deren Herkunft<br />
und Art automatisch und anonymi-<br />
Abbildung 11: Auch Alien Vault nutzt nicht alle verfügbaren Informationen aus seiner Asset-Datenbank.
Abbildung 12: Obwohl Alien Vault weitere Schwachstellen erkannt hat, zeigt es diese dem Admin nicht an.<br />
der Daten, daher bieten die wenigsten<br />
Systeme dies direkt an.<br />
Ein gelungenes GUI, viele<br />
Schwächen – aber günstig<br />
OSSIM bietet eine ansprechende Weboberfläche<br />
für die Analyse und Bearbeitung<br />
von Sicherheitsereignissen. Dem<br />
SIEM-Anspruch wird die freie Software<br />
nicht gerecht, da ihr die für die Korrelation<br />
der Daten wichtigen Direktiven fehlen<br />
und so automatisch kaum Incidents<br />
erzeugt werden. Die Software birgt lediglich<br />
eine gefällige und benutzerfreundliche<br />
grafische Oberfläche für den Zugriff<br />
auf viele verschiedene Informationen<br />
wie Security Events, erkannte Verwundbarkeiten<br />
und die Asset-Datenbank. Die<br />
Korrelation muss jedoch der Anwender<br />
selbst vornehmen, was ihn in vielen Fällen<br />
überfordern dürfte.<br />
Die kommerzielle Variante bringt durch<br />
die bessere Unterstützung mit Korrelationsdirektiven<br />
einen einfacheren Zugang<br />
zu den Daten, nutzt jedoch ebenfalls<br />
nicht sämtliche Quellen, um dem Admin<br />
diese Daten konzentriert zu präsentieren.<br />
Für die Analyse muss der Anwender<br />
sich diese daher selbst zeitraubend<br />
zusammenklicken. Die Konkurrenz beherrscht<br />
dieses Feature sehr wohl, verlangt<br />
jedoch meist auch deutlich mehr<br />
Geld. Das Alien-Vault-SIEM stellt trotz<br />
seiner Einschränkungen eine preiswerte<br />
Variante dar. (mfe) <br />
n<br />
Infos<br />
[1] Alien Vault: [http:// www. alienvault. com]<br />
[2] Erste Förderrunde für Alien Vault: [http://<br />
www. businesswire. com/ portal/ site/ home/<br />
permalink/ ? ndmViewId=news_view&<br />
newsId=20100616005412& newsLang=en]<br />
[3] Weitere 8 Millionen: [http:// techcrunch.<br />
com/ 2012/ 01/ 31/ on‐the‐heels‐of‐nabbing‐<br />
7‐hp‐execs‐cyber‐security‐startup<br />
- alienvault‐raises‐8‐million/]<br />
[4] Dank HP 22 Millionen für Alien Vault:<br />
[http:// in. finance. yahoo. com/ news/<br />
alienvault‐closes‐22‐4‐million<br />
‐100000393. html]<br />
[5] OSSIM: [http:// communities. alienvault.<br />
com/ community/]<br />
[6] Alien Vault spürt chinesische Malware<br />
im US-Verteidigungsministerium auf:<br />
[http:// venturebeat. com/ 2012/ 01/ 31/<br />
alienvault‐funding/]<br />
[7] Windows Management Instrumentation:<br />
[http:// msdn. microsoft. com/ en‐us/<br />
library/ windows/ desktop/ aa394582(v=<br />
vs. 85). aspx]<br />
[8] OCSNG: [http:// www. ocsinventory‐ng. org]<br />
[9] PRADS:<br />
[http:// gamelinux. github. com/ prads/]<br />
[10] Ralf Spenneberg, „Aufgepasst“:<br />
<strong>Linux</strong>-<strong>Magazin</strong> 02/12, S. 70<br />
[11] The Open Source Vulnerability Database:<br />
[http://www.osvdb. org]<br />
[12] Emerging Threats:<br />
[http:// www. emergingthreats. net/]<br />
[13] Emerging Threats PRO:<br />
[http:// www. emergingthreatspro. com]<br />
[14] Snort-Sicherheitslücken: [http:// www. us<br />
‐cert. gov/ cas/ techalerts/ TA05‐291A. html]<br />
[15] 2300 Beiträge aus 77 Ländern: [http://<br />
www. alienvault. com/ 2012/ 08/ the‐2nd<br />
‐united‐nations‐the‐world‐comes‐together<br />
‐to‐open‐source‐security‐infographic/]<br />
[16] Deep See von Solera Networks:<br />
[http:// www. soleranetworks. com/<br />
products/ deepsee/]<br />
OSSIM Alien Vault 12/2012<br />
Sysadmin<br />
www.linux-magazin.de<br />
61<br />
Abbildung 13: Alien Vault nutzt statistische Daten der OSSIM- und Alien-Vault-Installationen, um die Reputationen<br />
von IP-Adressen zu bewerten.<br />
Der Autor<br />
Ralf Spenneberg arbeitet<br />
als freier Unix/<strong>Linux</strong>-Trainer,<br />
Berater und Autor. Mit<br />
seinem Unternehmen Open-<br />
Source Training Ralf Spenneberg<br />
führt er Schulungen<br />
und Beratungen durch. Vor wenigen Wochen<br />
erschien sein neues Buch „KVM für die Server-<br />
Virtualisierung“, das er gemeinsam mit Michael<br />
Kofler verfasst hat.
Sysadmin<br />
www.linux-magazin.de Cfengine 12/2012<br />
62<br />
Die Community-Edition von Cfengine 3.4.0 lernt Posix-ACLs<br />
Stattgegeben<br />
Mancher, der die Verwaltung seiner Unix-, <strong>Linux</strong>- oder Windows-Systeme gerne einem Tool für automatisiertes<br />
Konfigurationsmanagement überlässt, greift zu Cfengine. Auf vielfachen Wunsch erbt die neue Version 3.4.0<br />
auch ein Feature der kommerziellen Version: Posix-ACLs unter Unix, <strong>Linux</strong> und Windows. Valentin Höbel<br />
© filmfoto, 123RF.com<br />
01 body common control {<br />
Bereits zum vierten Mal jährt sich im<br />
kommenden Januar die Release der Version<br />
3 von Cfengine ([1], [2]). Nach derart<br />
langer Wartezeit steht jetzt die Ausgabe<br />
3.4 der Community-Edition an, eine<br />
Beta ist bereits unter [3] erhältlich und<br />
liegt auch auf der DELUG-DVD.<br />
ACL-Request erfüllt<br />
Die kommerzielle Version glänzt zwar<br />
mit erweiterten Reportingfeatures sowie<br />
nativer LDAP-, Datenbank- und Virtualisierungs-Unterstützung,<br />
doch reicht die<br />
02 bundlesequence => { "set_acls" };<br />
03 }<br />
04 <br />
05 bundle agent set_acls {<br />
06 vars:<br />
07 "shared_directories" slist => {<br />
08 <br />
Listing 1: Setfacl-Aufruf<br />
"/home/shared", "/home/archive" };<br />
09 files:<br />
freie Version vielen Systembetreuern in<br />
kleinen und mittleren Unternehmen voll<br />
aus. Verzichten mussten die Community-<br />
Anwender aber bisher auf den Support<br />
für die Windows-Registry und das automatische<br />
Setzen von Posix-ACLs.<br />
Vor allem Letzteres sorgte bei den Anwendern<br />
für Unmut, auf den das Cfengine-Team<br />
jetzt reagiert hat: Ab der kommenden<br />
Version 3.4.0 übernehmen die<br />
Cfengine-Macher in Oslo das ACL-Feature<br />
aus der kostenpflichtigen in die kostenfreie<br />
Variante. Dieser Artikel zeigt, welche<br />
Klimmzüge Admins bisher machen<br />
10 "$(shared_directories)/."<br />
11 create => "true";<br />
12 <br />
13 commands:<br />
14 "/usr/bin/setfacl ‐m u:backup:rwx,g:games:rwx<br />
${shared_directories}"<br />
15 comment => "Setting ACLs on the shared<br />
directories.";<br />
16 }<br />
mussten und wie die neue Version den<br />
Umgang mit ACLs vereinfacht.<br />
Das Setzen von ACLs unter Unix, <strong>Linux</strong><br />
und Windows war in Cfengine 3 bisher<br />
nur mit dem umständlichen Aufrufen von<br />
Tools wie Setfacl möglich. Listing 1 zeigt<br />
eine mögliche Vorgehensweise. Erfahrene<br />
Admins werden die hässlichen Passagen<br />
schnell erkennen. Das ist weder sauber,<br />
noch entspricht es den Empfehlungen der<br />
Cfengine-Macher.<br />
Nutzer der Community-Variante hatten<br />
bisher jedoch keine andere Wahl. Zunächst<br />
definierten sie die Sektion »body<br />
common control«, die Teil jedes Cfengine-<br />
Snippet ist. Dieser Control Body enthält<br />
im Listing lediglich einen Verweis auf das<br />
auszuführende Bundle, kann aber auch<br />
noch eine optionale Versionsnummer des<br />
Skripts beinhalten.<br />
Bundles und Promises<br />
Das anschließende Bundle des Typs<br />
»agent« mit der Bezeichnung »set_acls«<br />
enthält dann die eigentlichen Aktionen<br />
(Promises), die Cfengine für das Setzen<br />
der Zugriffsrechte ausführen muss. Das<br />
erste Promise vom Typ »vars« beinhaltet<br />
eine »slist«-Variable mit dem Namen<br />
»shared_directories«. Die legt, jeweils<br />
in Anführungszeichen und durch ein<br />
Komma getrennt, eine Liste an Verzeichnissen<br />
fest, die der Admin später bearbeitet<br />
wissen will. »slist« gibt den Datentyp<br />
vor – solche Variablen sind besonders<br />
nützlich, wenn später eine Iteration durch<br />
die einzelnen Werte erfolgen soll.<br />
Cfengine 3.4<br />
DELUG-DVD<br />
Auf der DELUG-DVD finden Sie<br />
die aktuelle Beta von Cfengine 3.4.
Das Promise vom Typ »files« enthält im<br />
Normalfall den Namen der zu bearbeitenden<br />
Datei. Da dieses Beispiel jedoch eine<br />
Liste von Verzeichnissen abarbeiten soll,<br />
gibt das Skript einfach den entsprechenden<br />
Variablennamen mit vorangestelltem<br />
Dollarzeichen und umschließenden<br />
Klammern an. Wichtig ist der abschließende<br />
Slash samt Punkt (»/.«): Mit dieser<br />
Zeichenkette teilt der Anwender Cfengine<br />
mit, dass es sich um Verzeichnisse und<br />
nicht um Dateien handelt.<br />
Intelligenter<br />
Cfengine 3 ist an dieser Stelle intelligent<br />
genug, den Inhalt der Slist-Variablen zu<br />
erkennen, und iteriert durch die einzelnen<br />
Werte. Für jedes Verzeichnis in<br />
»shared_directories« führt es also die Aktion<br />
»create« aus. Dieses Promise könnte<br />
der Admin auch weglassen, wenn er<br />
sicher ist, dass die zu bearbeitenden<br />
Verzeichnisse immer existieren. In diesem<br />
Beispiel soll der<br />
Anwender jedoch kein<br />
Risiko eingehen, daher<br />
lässt er Cfengine die<br />
Ordner sicherheitshalber<br />
anlegen.<br />
Im Commands-Promise<br />
steht das Setfacl-<br />
Kommando, das die<br />
ACLs setzt. Das Beispiel<br />
lässt sich noch<br />
verbessern, wenn<br />
auch die anderen Parameter<br />
von Setfacl in<br />
Variablen landen. Als<br />
einfache Demonstration<br />
reicht diese Form<br />
aber aus.<br />
Der Aufruf von Setfacl<br />
kann übrigens nur erfolgreich sein, wenn<br />
das Paket »acl« bereits auf dem System installiert<br />
ist und die Partition unter »/home«<br />
mit ACL-Support hängt, zum Beispiel<br />
über Mount-Optionen in »/etc/fstab«.<br />
Abbildung 1: Die Ausgabe von »/var/cfengine/bin/cf‐agent ‐vf /etc/cfengine3/acl_example_Posix.cf«<br />
zeigt detailreich an der Kommandozeile, wie<br />
Cfengine 3 die Posix-ACLs erfolgreich setzt.<br />
Der folgenden Befehl prüft, ob das frisch<br />
erstellte Cfengine-Snippet Syntaxfehler<br />
enthält:<br />
/var/cfengine/bin/cf‐promises ‐f /etc/U<br />
cfengine3/acl_example_obsolete.cf<br />
Cfengine 12/2012<br />
Sysadmin<br />
www.linux-magazin.de<br />
63<br />
Android User im Abo<br />
Die Monatszeitschrift für Android-Fans, Smartphone- und Tablet-Nutzer<br />
Top-prämie Sichern!<br />
Office-paket für andrOid im Wert<br />
vOn 27,99 eurO gratis zu jedem aBO!<br />
SoftMaker Office Mobile für Android<br />
im Wert von 27,99 Euro gratis zu<br />
jedem print- und Digital-Abo!<br />
*s oftmaker Office mobile für Android inkl. Textverarbeitung, Tabellenkalkulation und<br />
Präsentationsprogramm. Freischaltung erfolgt per Gutscheincode. Angebot gilt solange<br />
der Vorrat reicht, Tablet und Smartphone sind nicht Bestandteil der Prämie!<br />
Jetzt bestellen unter:<br />
www.android–user.de/abo<br />
Telefon 07131 / 2707 274 • Fax 07131 / 2707 78 601 • E-Mail: abo@android-user.de
Sysadmin<br />
www.linux-magazin.de Cfengine 12/2012<br />
64<br />
Bringt er keine Fehlermeldung, dann<br />
kann der Admin das Skript als Root oder<br />
via Sudo ausführen:<br />
/var/cfengine/bin/cf‐agent ‐f U<br />
/etc/cfengine3/acl_example_obsolete.cf<br />
Ein Blick mit »getfacl« auf »/home/archive«<br />
zeigt den Erfolg (Listing 2).<br />
Native ACLs in 3.4<br />
Wer sich bereits an die Beta von Cfengine<br />
3.4.0 traut, muss sich zunächst das<br />
01 getfacl: Removing leading '/' from absolute path<br />
names<br />
02 # file: home/archive/<br />
03 # owner: root<br />
04 # group: root<br />
05 user::rwx<br />
06 user:backup:rwx<br />
07 group::r‐x<br />
08 group:games:rwx<br />
09 mask::rwx<br />
10 other::r‐x<br />
01 body common control {<br />
Listing 2: »getfacl /home/archive«<br />
02 bundlesequence => { "set_Posix_acls" };<br />
03 }<br />
04 <br />
05 bundle agent set_Posix_acls {<br />
06 vars:<br />
07 "shared_directories" slist => {<br />
08 <br />
"/home/shared", "/home/archive" };<br />
09 files:<br />
Abbildung 2: Jede Menge Snippets und Ideen für Cfengine bietet das Design Center.<br />
Listing 3: Cfengine-native Posix-ACLs<br />
Sourcen-Paket ([3] oder DELUG-DVD)<br />
herunterladen und kompilieren. Hilfe dabei<br />
liefert die Datei »INSTALL«. Achtung:<br />
Die Cfengine-Macher weisen leider nicht<br />
darauf hin, dass vor dem Kompilieren<br />
das Paket »libacl1-dev« bereits vorhanden<br />
sein sollte, sonst installiert sich Cfengine<br />
ohne ACL-Support und der Tester sucht<br />
sich einen Wolf. Richtig gebaut unterstützt<br />
Cfengine 3.4.0b2 die Posix-ACLs<br />
nativ, was sich mit Listing 3 sogleich auf<br />
die Probe stellen lässt.<br />
Im überarbeiteten Beispiel ersetzt ein<br />
Verweis auf eine eigene »acl«-Sektion das<br />
»commands«-Promise. In »body acl« definiert<br />
der Admin zunächst den ACL-Typ,<br />
hier hat er die Wahl zwischen Posix, Ntfs<br />
und »generic«. Anschließend kann er die<br />
einzelnen ACL-Einträge (Access Control<br />
Entries, ACE) angeben.<br />
Während das Beispiel aus Listing 2 noch<br />
der Gruppe »games« die vollen Rechte auf<br />
die festgelegten Ordner »/home/shared«<br />
und »/home/archive« gewährt, findet<br />
sich nach Listing 3 (Zeile 16) nur noch<br />
ein Lese- und Ausführungsrecht. Um den<br />
10 "$(shared_directories)/."<br />
11 acl => crazy_acls;<br />
12 }<br />
13 <br />
14 body acl crazy_acls {<br />
15 acl_type => "Posix";<br />
16 aces => {"user:backup:rwx",<br />
"group:games:rx"};<br />
17 }<br />
Code möglichst schlank zu halten, setzt<br />
das Skript jetzt im ACL-Body nur zwei<br />
Promiser, also Definitionen.<br />
Tatsächlich bietet Cfengine 3.4.0 jedoch<br />
eine Fülle weiterer Einstellungsmöglichkeiten<br />
[5]. Im Beispiel nützlich wäre etwa<br />
die Funktion »acl_method«, die festlegt,<br />
ob die neuen ACLs sich anhängen (»append«)<br />
oder alle bisher gesetzten ACLs<br />
vollständig entfernen und überschreiben<br />
sollen (»overwrite«).<br />
XML-Support für Libvirt-<br />
Dateien<br />
Auch eine weitere Neuerung in Cfengine<br />
3 dürfte so manchen Systemadministrator<br />
dafür entschädigen, dass dessen<br />
Entwickler bisher Libvirtd und die automatisierte<br />
Verwaltung von virtuellen<br />
Maschinen nur in der Enterprise-Variante<br />
anboten. Libvirt hinterlegt seine Konfigurationsdateien<br />
in Form von XML-Dateien<br />
– und mit der Cfengine-Version 3.4.0 ist<br />
es erstmals möglich, auch diese Files direkt<br />
zu bearbeiten.<br />
Das erleichtert das Verwalten von VMs<br />
deutlich, zumindest für den Admin, der<br />
die Libxml2-Pakete installiert hat. Dazu<br />
kommen zahlreiche Bugfixes und weitere<br />
Verbesserungen. Außen vor bleiben<br />
jetzt allerdings Anwender einiger älterer<br />
Plattformen. Sun OS 3 und 4 sowie Digital<br />
Unix unterstützt Cfengine ab sofort<br />
nicht mehr.<br />
Wer intensiver einsteigen will, findet<br />
auf den Webseiten des Cfengine Design<br />
Center (Abbildung 2) ein von der<br />
Community gepflegtes Github-Repository<br />
[6] mit fertigen Snippets und umfangreichem<br />
Anschauungsmaterial. (mfe) n<br />
Infos<br />
[1] Cfengine: [http:// www. cfengine. org]<br />
[2] Version 3 freigegeben:<br />
[https:// cfengine. org/ pipermail/ help<br />
‐cfengine/ 2008‐December/ 004502. html]<br />
[3] Cfengine 3.4 Beta: [https:// cfengine. com/<br />
forum/ read. php? 1,27608]<br />
[4] Andreas Putzo, „Aktiver Urahn“: <strong>Linux</strong>-<br />
<strong>Magazin</strong> 10/08, S. 64<br />
[5] Cfengine-Enterprise-Handbuch:<br />
[http:// cfengine. com/ manuals/<br />
novaownersmanual/]<br />
[6] Cfengine-Snippet-Repository: [https://<br />
github. com/ cfengine/ design‐center/]
Bücher über HTML-5-Apps sowie Computer Vision mit Python<br />
Tux liest<br />
Bücher 12/2012<br />
Forum<br />
In den Taschen der Mitmenschen stecken allerhand mobile Geräte und Betriebssysteme. Das erste vorgestellte<br />
Buch möchte mit HTML 5 Apps schreiben, die überall dort laufen. Der zweite Titel bringt mit Python und den<br />
passenden Bibliotheken dem Computer das Sehen bei. Andreas Möller, Rainer Poisel, Marlies Rybnicek<br />
www.linux-magazin.de<br />
65<br />
Wer mit vertretbarem Aufwand Apps<br />
für möglichst viele Mobilgeräte anbieten<br />
möchte, erstellt sie am besten mit Hilfe<br />
von Webtechnologien. Wie das geht, erklären<br />
gekonnt Florian Franke und Johannes<br />
Ippen in ihrem Buch „Apps mit<br />
HTML 5 und CSS 3“<br />
HTML 5 für alle<br />
Der Band behandelt Apps für iPhone,<br />
iPad und Android und richtet sich an<br />
Entwickler mit guten Kenntnissen in CSS<br />
und HTML. Die Autoren zeigen die Programmierung<br />
an Beispielen, die sie mit<br />
HTML 5, CSS 3 sowie den Bibliotheken<br />
und Frameworks Jquery, Jquery Mobile,<br />
und Sencha Touch umsetzen.<br />
Das Buch ist in neun Kapitel gegliedert<br />
und vermittelt neben der Programmierung<br />
von Mobilanwendungen auch deren<br />
Konzeption sowie Gestaltungsprinzipien<br />
für die verschiedenen Displayformate.<br />
Zu Beginn besprechen die Autoren die<br />
Stärken und Schwächen von Webapps im<br />
Vergleich zu nativen Programmen, bevor<br />
sie im zweiten Kapitel Neuerungen von<br />
HTML 5 und CSS 3 für den Einsatz auf<br />
mobilen Geräten aufzeigen.<br />
Im dritten Kapitel demonstrieren sie die<br />
Konzeption einer Webapp auf dem Papier<br />
und geben dem Leser das nötige Handwerkszeug<br />
zur Umsetzung an die Hand:<br />
Info<br />
Florian Franke, Johannes<br />
Ippen:<br />
Apps mit HTML 5 und<br />
CSS 3<br />
Galileo Computing, 2012<br />
440 Seiten<br />
30 Euro<br />
ISBN 978-3-8362-1848-1<br />
Als Basis der Webapp dient ein Rastersystem,<br />
wie es auch bei Printmedien üblich<br />
ist. Mit dem Konzept sowie dem Less-<br />
Framework bauen die Autoren Webseiten<br />
im <strong>Magazin</strong>-Layout unabhängig von der<br />
Bildschirmgröße. Zudem beschreiben sie<br />
die Verwendung von Webfonts, Video,<br />
Audio und CSS-Animationen.<br />
Kapitel 5 führt die Entwicklung einer<br />
„Where To Eat“-App vor, die die nächstgelegenen<br />
Restaurants auf einer Karte im<br />
Smartphone anzeigt. Zur Positionsbestimmung<br />
dient das Geolocation-API aus<br />
HTML 5. Die Darstellung erfolgt auf einer<br />
Karte von Google Maps. Zudem erfährt<br />
der Leser, wie er die Bewegungssensoren<br />
der Geräte sowie Offlinespeicher in<br />
Form von Application Cache oder Local<br />
Storage nutzt.<br />
Zum Abschluss zeigt das Buch, wie sich<br />
Webapps mittels Phone Gap und Laker-<br />
Kompendium in native Anwendungen für<br />
iPhone und Android verpacken lassen.<br />
Digitales Sehen<br />
Unter „Computer Vision“ versteht man<br />
alle notwendigen Methoden und Prozesse,<br />
um digitale Bilddaten zu verarbeiten<br />
und zu interpretieren. Das englischsprachige<br />
Buch „Programming Computer<br />
Vision with Python“ richtet sich an interessierte<br />
Leserinnen und Leser, die mit<br />
der Programmiersprache Python bereits<br />
erste Erfahrungen gesammelt haben. Es<br />
fasst die erforderlichen Grundlagen kurz<br />
zusammen, setzt jedoch Basiswissen im<br />
Bereich der Bildbe- und ‐verarbeitung sowie<br />
der Programmierung voraus.<br />
Der Autor hat das Buch in zehn Kapitel<br />
eingeteilt, die Einblicke in die unterschiedlichen<br />
Disziplinen von Computer<br />
Vision bieten. Ein einführendes Kapitel<br />
stellt zunächst die eingesetzten Programmierbibliotheken<br />
wie Numpy, Scipy, PIL<br />
und Matplotlib anhand vieler kurzer Beispiele<br />
vor.<br />
Die restlichen Abschnitte setzen sich mit<br />
Bildverarbeitung, Kameramodellen, Clustering,<br />
Segmentierung sowie der Klassifizierung<br />
von Bildinhalten auseinander.<br />
Auch die umfangreiche Open-CV-Bibliothek<br />
ist ein Thema. Sie umfasst Hunderte<br />
Algorithmen für das maschinelle Sehen.<br />
Übungsaufgaben am Schluss jedes Kapitels<br />
bieten dann die Gelegenheit, das<br />
erworbene Wissen zu vertiefen, und wecken<br />
zudem den Entdeckergeist.<br />
Die Struktur des vorliegenden Buches ist<br />
sehr gut gelungen, die Leser erhalten einen<br />
umfangreichen Werkzeugkasten.<br />
Alle vorgestellten Beispiele beschreiben<br />
funktionstüchtige Prototypen, die den<br />
Python-Grundsätzen entsprechen: Wenige<br />
Codezeilen genügen, um auf hoher<br />
Ebene komplexe Algorithmen schnell<br />
und unkompliziert in der Praxis einzusetzen.<br />
Alle Codebeispiele stehen unter<br />
[http:// programmingcomputervision.<br />
co m] zum Download bereit.<br />
Es handelt sich bei diesem Titel um eine<br />
hervorragende Lektüre für Praktiker, die<br />
nach den Prinzipien des Rapid Application<br />
Development (RAD) schnell Ergebnisse<br />
bei geringem Entwicklungsaufwand<br />
erzielen möchten. (mhu) <br />
n<br />
Info<br />
Jan Erik Solem:<br />
Programming Computer<br />
Vision with Python<br />
O’Reilly, 2012<br />
260 Seiten<br />
32 Euro<br />
ISBN 978-1-4493-1654-9
Forum<br />
www.linux-magazin.de Susecon 12/2012<br />
66<br />
Bericht von der Susecon in Orlando, Florida<br />
Bellen und beißen<br />
Aggressiver will Suse-CEO Nils Brauckmann die Firma machen: Nicht mehr nur der schweigende Gecko soll sie<br />
sein, sondern auch mal wie ein Hund bellen und beißen. Auch die Enterprise-Konferenz Susecon anlässlich des<br />
20. Geburtstags soll der Attachmate-Tochter auf den amerikanischen Markt helfen. Fotos und Text: Markus Feilner<br />
© Markus Feilner<br />
Abbildung 1: Leguane, Geckos und Chamäleons sind in Florida keine Seltenheit. Dieses gut anderthalb Meter<br />
lange Prachtexemplar räkelt sich auf einem Grab des historischen Friedhofs von Key West.<br />
Orlando, Florida, Ende September. Es<br />
ist Regenzeit – und Hurricane Season.<br />
31 Grad, auch am Abend. Die Schwüle<br />
scheint aus den Sümpfen zu kriechen,<br />
die Orlando umgeben und halb Florida<br />
bedecken. Ohne Klimaanlage geht nichts,<br />
90 Prozent Luftfeuchtigkeit durchnässen<br />
die Kleidung innerhalb von Minuten.<br />
Von Stürmen verschont<br />
Gut, dass während der Susecon ([1], [2])<br />
wenigstens keine Tropenstürme den Südstaatenlandstrich<br />
verwüsten, es regnet<br />
nur regelmäßig, doch ab und zu kommt<br />
immerhin die Sonne ein wenig durch.<br />
Die Highways säumen Schilder, die den<br />
Autofahrer vor Krokodilen, Pantern und<br />
selbst den großen Seeschildkröten warnen.<br />
Die ebenfalls verbreiteten Leguane<br />
(Abbildung 1) scheinen dagegen kein Verkehrszeichen<br />
wert, zu gering ist wohl die<br />
Gefahr, die von ihnen für die Autobahnbenutzer<br />
ausgeht.<br />
Ganz ähnlich präsentiert sich derzeit die<br />
Situation für die Verantwortlichen bei<br />
Suse. Nils Brauckmann, seit der Übernahme<br />
durch Attachmate Suse-CEO, erklärt<br />
in seiner Keynote eindringlich, warum<br />
Anpassbarkeit und Unauffälligkeit<br />
– Attribute, die man gemeinhin Geckos<br />
beziehungsweise Chamäleons zugesteht<br />
– nicht ausreichen, um Suse dauerhaft<br />
auf die Erfolgsspur zu lotsen. „Lieber ein<br />
lila Hund (a purple dog), der auch bellt<br />
und beißt als ein schweigendes Chamäleon!“,<br />
ruft er den Zuhörern auf Suses<br />
Enterprise-Konferenz Susecon in Orlandos<br />
Konferenzzentrum zu. Damit trifft er<br />
einen Nerv unter den SLES-Anwendern<br />
und -Entwicklern, von denen sowohl<br />
Zustimmung als auch die erwartungsgemäße<br />
Ablehnung bei Hardcore-Nerds<br />
widerhallt, für die Krawatten und Vertriebler<br />
ein rotes Tuch sind.<br />
Die Party nicht in Nürnberg<br />
Gerade die Nerds und Fanboys zeigten<br />
sich auf der Konferenz davon enttäuscht,<br />
dass die Firma ihren Geburtstag – den<br />
20. – erstmals nicht in Nürnberg, sondern<br />
in den USA feiert. Den Ausschlag dafür<br />
dürften strategische Entscheidungen des<br />
Marketings gegeben haben. Das Datum<br />
gilt offenbar als guter Anlass, die „langjährige<br />
Erfahrung“ der Company auch<br />
amerikanischen Anwendern deutlicher<br />
vor Augen zu führen.<br />
Marketingchef Michael Miller packt das<br />
ganz unten an: In seiner Keynote versucht<br />
er einigermaßen erfolgreich, den<br />
Anwesenden die korrekte Aussprache des<br />
Firmennamens beizubringen – ganz im<br />
Stil eines Anheizers: „Sprechen Sie mir<br />
nach: Suse, Suse, Suse …“ (Abbildung<br />
2). Dass solche Basics nötig sind, überrascht<br />
den Außenstehenden, fanden sich<br />
unter den 500 Teilnehmer (135 Firmen<br />
aus 35 Ländern) doch auch zahlreiche<br />
US-Kunden.<br />
Diskussionen sind bei Suse derzeit offenbar<br />
an der Tagesordnung, und Brauckmann,<br />
so hört der Konferenzbesucher<br />
von vielen Seiten, glänze dabei mit Of-<br />
DELUG-DVD<br />
Auf der Delug-DVD finden Sie<br />
DELUG-DVD<br />
über eine Stunde Videoaufzeichnungen von<br />
den Keynotes der Susecon 2012 in Orlando,<br />
Florida, mit dem Suse-CEO Nils Brauckmann,<br />
Marketingchef Michael Miller und Dells Executive<br />
Director John Igoe.
Susecon 12/2012<br />
Forum<br />
Abbildung 2: Feucht und heiß ist Florida in der Hurricane Season, auch dank seiner ausgedehnten Sümpfe. In Orlando traf sich die Suse-Enterprise-Community zur<br />
Susecon. Ganz rechts bringt Marketingchef Michael Miller den Anwesenden bei, wie man Suse korrekt ausspricht.<br />
www.linux-magazin.de<br />
67<br />
fenheit und habe erstaunlich flache Hierarchien<br />
bei Suse eingeführt – was gerade<br />
nach der unglücklichen Novell-Historie<br />
[3] unter den Mitarbeitern des ehemals<br />
Nürnberger Unternehmens gut anzukommen<br />
scheint.<br />
Offen präsentiert der CEO in seiner Keynote<br />
auch die aktuellen Zahlen: 215 Millionen<br />
Dollar Umsatz im Fiskaljahr 2012,<br />
für das nächste visiert er 225 an. 750<br />
Mitarbeiter in 43 Ländern betreuen mehr<br />
als 5000 Mitglieder des Partner-Ökosystems<br />
und über 15 000 Kunden weltweit.<br />
Brauckmann (Abbildung 3) ist auf der<br />
ganzen Susecon präsent, man sieht ihn<br />
überall im Gespräch mit Teilnehmern<br />
oder in Workshops oder Diskussionen.<br />
Amerika im Fokus<br />
Suses Strategie sei, so erklärt er im Gespräch<br />
mit dem <strong>Linux</strong>-<strong>Magazin</strong>, auch<br />
auf dem amerikanischen Markt das zu<br />
erreichen, was man in Europa, Südamerika<br />
oder in China bereits geschafft habe.<br />
Sogar im Reich der Mitte sei Suse Marktführer.<br />
Aber geben denn nicht Konkurrenten<br />
wie Red Hat oder andere Konzerne<br />
mit Milliardenumsätzen und Zuwachsraten<br />
im zweistelligen Prozentbereich die<br />
Messlatte vor?<br />
Nein, Suse habe eine eigene Strategie, erklärt<br />
Brauckmann. Man wolle dem Kunden<br />
die „wirklich freie Wahl ohne Vendor-Lock-in“<br />
ermöglichen. Das bestätigt<br />
auch ein Videospot von Referenzkunde<br />
Rackspace, mit der NASA zusammen Initiator<br />
von Open Stack. Der große amerikanische<br />
Hosting-Provider hat sich nach<br />
eigener Aussage für Suse entschieden,<br />
weil „das der einzige Hersteller war, der<br />
auch für andere, freie <strong>Linux</strong>-Varianten<br />
Support anbot. Bei der Konkurrenz hätte<br />
man dagegen Lizenzen für alle Server<br />
kaufen müssen“.<br />
Brauckmann fährt fort: Das Susecon-<br />
Motto „Wir passen an. Sie sind erfolgreich“<br />
(We adapt. You succeed) stünde<br />
für die ganze Produktpalette von Suse.<br />
Offen in alle Richtungen arbeite man aber<br />
auch mit Microsoft oder SAP zusammen.<br />
Suse werde aber sicher nicht in „irgendwelchen<br />
schicken Kram investieren, nur<br />
weil der gerade in ist, sondern sich auf<br />
die Bedürfnisse der Kunden konzentrieren<br />
und dafür weiter Manpower in Support,<br />
Vertrieb und Marketing aufbauen,<br />
aber auch weiterhin freie Community-<br />
Projekte wie Open Suse oder Open Stack<br />
unterstützen“. Aus denen kämen schließlich<br />
immer wieder „wichtige Impulse“ für<br />
die Enterprise-Produkte. Letztere sollen<br />
sich auf die Cloud konzentrieren, die dem<br />
Suse-CEO zufolge für Softwarefirmen bis<br />
2016 mit gut 40 Prozent Umsatzwachstum<br />
aufwarten könne.<br />
Suse setzt dabei auf Cloud-Infrastruktur,<br />
Enterprise-<strong>Linux</strong> und integrierte Systeme,<br />
zum Beispiel für das Gesundheitswesen,<br />
aber auch für integrierte Storage-Geräte.<br />
In fünf Jahren wolle man deutlich lauter,<br />
aggressiver und sichtbarer im Markt<br />
agieren und sich auch im PaaS- und Distributed-Storage-Bereich<br />
einen Namen<br />
gemacht haben, kündigt Brauckmann an,<br />
ohne Details zu nennen.<br />
Die Suse Cloud werde zunehmend vernetzt<br />
mit Suse Studio, Suse Manager,<br />
Open QA (Suses Qualitätsmanagement),<br />
Open Stack und dem Open Suse Build<br />
Service. Auf der Roadmap der Suse Cloud<br />
Abbildung 3: Von links nach rechts: Suses CEO Nils Brauckmann nennt in seiner Keynote Zahlen und Ziele, Intels Dirk Hohndel beteuert die gute Kooperation bei der<br />
Unterstützung der Hardware, Doug Balog von IBM preist die Vorzüge von Suse auf Z-Series.
Forum<br />
www.linux-magazin.de Susecon 12/2012<br />
68<br />
Abbildung 4: Videos mit Commitments, Referenzkunden und viel lauter Musik, dazu der frischgebackene Open-Stack-Chairman Alan Clark (links) und Dells Executive<br />
Director John Igoe (rechts) auf der Susecon. In der Mitte Michael Miller und Mitglieder des Suse-Cloud-Teams, die innerhalb von Minuten eine Cloud-Demo aufsetzten.<br />
finden sich HA-Funktionen für virtuelle<br />
Gäste und Hypervisoren. Eine zentralere<br />
Rolle werde Open Stack spielen, wo Alan<br />
Clark – Suses Director of Industry Initiatives<br />
– gerade in den Aufsichtsrat bestellt<br />
wurde (Abbildung 4, [4]).<br />
Die Techniker und Suse-Kunden unter<br />
den Konferenzbesuchern konnten sich<br />
während der drei Tage in zahlreichen<br />
Tracks mit Workshops, Hands-on-Vorträgen<br />
und Präsentationen einen aktuellen<br />
Überblick der Roadmaps diverser Open-<br />
Source- und Suse-Projekte und der Enterprise-Produkte<br />
verschaffen. Neben Tools<br />
wie dem von Dell entwickelten Crowbar<br />
– einem Cloud-Deployment-Tool, ausdrücklich<br />
auch für echte Hardware, nicht<br />
nur für virtuelle Maschinen – stand dabei<br />
auch die neueste Version des Suse Managers<br />
1.7 [5] auf dem Programm.<br />
Suse Manager 1.7<br />
Eine grün gefärbte Variante von Red Hats<br />
Spacewalk soll Systeme auf Enterprise-<br />
Niveau zentral verwalten und dabei<br />
helfen, Compliance und automatisches<br />
Abbildung 5: Orlandos Konferenzzentrum liegt in den Sümpfen im Süden der<br />
Stadt unweit der Vergnügungsparks von Disney und Universal.<br />
Deployment in einem Web-GUI einzustellen.<br />
Auf der Cebit 2011 hatten die<br />
Nürnberger das kostenpflichtige Produkt<br />
erstmals präsentiert, es basiert auf der<br />
Open-Source-Variante von Red Hats Network<br />
Satellite Server und verwaltet RPMbasierte<br />
Server.<br />
Neu in der in Orlando vorgestellten Version<br />
sind laut Hersteller das komplett<br />
überarbeitete Patchmanagement, diverse<br />
Verbesserungen, aber auch die Integration<br />
von Oracle- und PostgreSQL-Datenbanken.<br />
Anwender können jetzt auch Images<br />
aus Suse Studio direkt aus dem Manager<br />
verteilen, neue Servicepacks aufspielen<br />
und mit Open SCAP ihre Umgebung auf<br />
Compliance überprüfen. Außerdem hat<br />
Suse den IPv6-Support ausgeweitet. Die<br />
ISO-Images zum Testen liegen (noch) auf<br />
Novells Webseiten.<br />
Open Suse Summit in den<br />
USA: „Go Home A Guru!“<br />
Als die Susecon am Freitagmittag ihre<br />
Pforten schloss, begann an gleicher Stelle<br />
(Abbildung 5) der Open Suse Summit<br />
(Motto: „Go Home A<br />
Guru!“), der erste seiner<br />
Art in den USA.<br />
Für ein Wochenende<br />
trafen sich Entwickler<br />
und Projektmitglieder<br />
von Gnome bis zum<br />
Kernel in Workshops,<br />
BOFs und Vorträgen,<br />
um das Open-Suse-<br />
Projekt weiterzubringen<br />
– ganz wie es<br />
die europäische oder<br />
deutsche Community<br />
seit Jahren pflegen.<br />
Open Suse hatte zuletzt ja einigen Sand<br />
im Getriebe [6], die Veröffentlichung von<br />
Open Suse 12.2 (auf der DELUG-DVD<br />
des <strong>Linux</strong>-<strong>Magazin</strong>s 11/2012) hatte sich<br />
wegen diverser Streits und Qualitätsmängel<br />
um mehrere Monate verzögert. Die<br />
Keynote am Samstag hielt der italienische<br />
Vorsitzende der FSFE Stefano Maffulli,<br />
der über die „Lektionen von Open Source<br />
für die Open Cloud“ referierte.<br />
Einen tieferen Eindruck von der Susecon,<br />
insbesondere von der 20-Jahr-Feier, gewähren<br />
ein Blick in die aufschlussreichen<br />
Videos aus Suses Youtube-Kanal [7] oder<br />
ein Rundgang in den sozialen Netzwerken<br />
[8] mit den dort von Teilnehmern<br />
veröffentlichten Fotos.<br />
n<br />
Infos<br />
[1] <strong>Linux</strong> <strong>Magazin</strong> Online zur Susecon: [http://<br />
www. linux‐magazin. de/ NEWS/ 20‐Jahre<br />
‐Suse‐Susecon‐2012‐in‐Orlando‐Florida]<br />
[2] Susecon:<br />
[https:// www. suse. com/ events/ susecon/]<br />
[3] Markus Feilner, „Patente im Körbchen“:<br />
<strong>Linux</strong>-<strong>Magazin</strong> 05/11, S. 26<br />
[4] Suses Alan Clark wird Open-Stack-Chairman:<br />
[https:// www. linux‐magazin. de/<br />
NEWS/ Open‐Stack‐Foundation‐gegruendet]<br />
[5] Suse Manager 1.7: [https:// www. suse. com/<br />
products/ suse‐manager/ features/<br />
suse‐manager‐1‐7. html]<br />
[6] Zoff bei Open Suse verzögert 12.2:<br />
[http:// www. linux‐magazin. de/ NEWS/<br />
Open‐Suse‐12. 2‐verspaetet‐Entwickler<br />
‐wollen‐Release‐Prozess‐ueberdenken]<br />
[7] Suses Youtube-Kanal:<br />
[http:// www. youtube. com/ susevideo]<br />
[8] Susecon Fotos bei Google+:<br />
[https:// plus. google. com/ events/<br />
csm6hfof0311f59cmu2qc4ajbok]
Auf den Punkt gebracht<br />
Leserbriefe<br />
Leserbriefe 12/2012<br />
Forum<br />
Haben Sie Anregungen, Statements oder Kommentare? Dann schreiben Sie an [redaktion@linux-magazin.de].<br />
Die Redaktion behält es sich vor, die Zuschriften und Leserbriefe zu kürzen. Sie veröffentlicht alle Beiträge mit<br />
Namen, sofern der Autor nicht ausdrücklich Anonymität wünscht.<br />
www.linux-magazin.de<br />
69<br />
Prezi-Zubehör<br />
10/12, S. 46: Danke für den Beitrag zu Präsentationen<br />
mit Prezi & Co. Vielleicht interessiert<br />
Sie das von mir entwickelte und<br />
unter GPL verfügbare Tool Prezi Player.<br />
Damit lassen sich Prezi-Präsentationen<br />
unter <strong>Linux</strong> offline nutzen. Es ist unter<br />
[https://github.com/TomFreudenberg/<br />
preziplayer] zu finden und nutzt Bash,<br />
Gettext und Zenity.<br />
Thomas Freudenberg, per E-Mail<br />
Tückischer Kernel-Bug<br />
10/12, S. 34: Ich arbeite seit mehr als<br />
zwölf Jahren als System- und Netzwerk-<br />
Administrator in Umgebungen mit Hunderten<br />
<strong>Linux</strong>-Systemen aller großen Distributionen.<br />
Trotz Mailinglisten, Distributoren-Newsletter<br />
und täglicher Recherche<br />
in allen verfügbaren Quellen, zu denen<br />
auch das <strong>Linux</strong>-<strong>Magazin</strong> gehört, sind<br />
meine Kollegen und ich nicht rechtzeitig<br />
auf einen schwerwiegenden Kernel-<br />
Bug aufmerksam geworden, der unter<br />
anderem unter [http://www.novell.com/<br />
support/kb/doc.php?id=7009834] dokumentiert<br />
ist.<br />
Der Bug schlägt unter bestimmten Bedingungen<br />
bei einer Uptime von ungefähr<br />
209 Tagen zu. Auf unseren Datenbankservern<br />
führte er dazu, dass von den acht<br />
verfügbaren CPUs schlagartig nur noch<br />
eine für MySQL bereitstand. Nach dem<br />
Performance-Einbruch fiel das eine oder<br />
andere System komplett aus.<br />
Dass ein derart gravierender Bug, dessen<br />
Geschichte bis in das Jahr 2009 zurückreicht,<br />
überhaupt in den Kernel gelangen<br />
kann, ist schon schwer zu glauben.<br />
Als wesentlich schlimmer empfinden<br />
allerdings alle Betroffenen, dass weder<br />
die Distributoren noch Medien wie das<br />
<strong>Linux</strong>-<strong>Magazin</strong> proaktiv informiert haben.<br />
Das schadet meines Erachtens sowohl<br />
dem Ruf von <strong>Linux</strong> als auch dem<br />
von Distributoren und Medien, die mit<br />
<strong>Linux</strong> Geld verdienen.<br />
Marcel Bruckner, per E-Mail<br />
Immerhin haben Distributoren wie beispielsweise<br />
Novell bereits vor über einem<br />
Jahr Informationen zu diesem Bug publiziert.<br />
Es bleibt unklar, wie viele Anwender<br />
von diesem Problem betroffen sind, da<br />
es nur beim Zusammentreffen von vier<br />
Bedingungen auftritt. Ihre Warnung publizieren<br />
wir hiermit aber gerne. (mhu)<br />
Frauen in der IT<br />
11/12, S. 3 Ich kann nur hoffen, dass sich<br />
Ihr Chefredakteur – Herr Kleinert – und<br />
alle Beteiligten der Redaktion, welche<br />
sich entschlossen haben, dieses unsägliche<br />
Editorial zu drucken, den offenen<br />
Brief von Silke Meyer unter [http://<br />
silkemeyer.net] gründlich durchlesen<br />
und über das von ihr geschilderte Grundsatzproblem<br />
nachzudenken.<br />
Es ist nicht hauptsächlich die Aufgabe<br />
von strukturell Benachteiligten, egal um<br />
welches Problem es sich handelt, gegen<br />
diese Strukturen anzugehen. Privilegierte<br />
Menschen müssen sich ihrer Rolle bewusst<br />
werden und sich fragen, wie sie<br />
andere einbringen können. Ich finde es<br />
unglaublich, dass Ihnen das tatsächlich<br />
noch jemand erklären muss.<br />
Laura Danzeisen, per E-Mail<br />
Das Editorial im <strong>Linux</strong>-<strong>Magazin</strong> fassen<br />
die Autoren, meistens ich, zu 99 Prozent<br />
in Form von Kommentaren oder Glossen<br />
ab. Es handelt es sich also um Meinungs-<br />
journalismus in seiner Reinform. Insofern<br />
ist es häufig der Fall, dass Leserinnen<br />
und Leser eine davon abweichende oder<br />
gar konträre Meinung vertreten. Die Ablehnung,<br />
die ich aus Ihrem Leserbrief<br />
herauszulesen glaube, stört mich darum<br />
überhaupt nicht – sie ist mir genauso lieb<br />
wie zustimmende Zuschriften.<br />
Ich persönlich sehe an vielen Stellen im<br />
beruflichen Alltag Diskriminierung und<br />
finde es skandalös, dass viele Frauen für<br />
gleiche Tätigkeiten schlechter entlohnt<br />
werden als Männer. Auch der Frauenanteil<br />
und in noch höherem Maße der<br />
Anteil von weiblichen und männlichen<br />
Migranten in den Spitzenpositionen der<br />
Wirtschaft deutet auf strukturell zementierte<br />
Missstände hin.<br />
Solche Formen von massiver und systematischer<br />
Benachteiligung vermag ich aber<br />
im Einstiegsbereich zu IT-Berufen nicht<br />
zu entdecken. Vielmehr suchen Firmen<br />
händeringend Azubis und die Hochschulen<br />
nach Abiturienten in den einschlägigen<br />
Richtungen. Zeigen Sie mir einen<br />
Personalverantwortlichen in einer ausbildenden<br />
Firma oder die Zulassungskommission<br />
einer Uni, die bei gleichem Schulabschluss<br />
einen jungen Mann gegenüber<br />
einer junge Frau bevorzugen würde! Ganz<br />
im Gegenteil: Jede Bildungseinrichtung<br />
würde es als großen Erfolg feiern, wenn<br />
ihr es gelänge, 50 Prozent Frauen in einer<br />
IT-Sparte zu rekrutieren.<br />
Aus dieser Gemengelage ergibt sich meine<br />
Argumentation: Ich vertrete im Editorial<br />
letztlich die liberale Ansicht, dass jeder<br />
und jede den Beruf ergreifen möge, der<br />
ihm oder ihr Freude bereitet. Bleiben Sie<br />
dem <strong>Linux</strong>-<strong>Magazin</strong> als wache Leserin<br />
bitte gewogen, auch wenn gelegentlich ein<br />
Artikel erscheint, den Sie selbst so gewiss<br />
nicht verfasst hätten. (jk) <br />
n
Forum<br />
www.linux-magazin.de Recht 12/2012<br />
70<br />
Nutzungsbedingungen von Web-APIs<br />
Hintertüren<br />
Wer populäre Webdienste anbietet, will deren Benutzung auch Weiterverkäufern einräumen – auch und gerade<br />
dann, wenn die Dienste kostenfrei sind. Die Anbieter halten sich jedoch per AGB weitreichende Hintertürchen<br />
und Kontrolloptionen offen. Fred Andresen<br />
formulierte Vertragsbedingungen, die für<br />
wiederkehrende Nutzungsverträge gelten<br />
sollen – nach deutschem Recht greifen<br />
für sie die Regelungen über allgemeine<br />
Geschäftsbedingungen nach den Bestimmungen<br />
der Paragrafen 305 ff. BGB [1].<br />
Vertragstypen<br />
© iqos, 123RF.com<br />
Nicht nur wegen der ständig steigenden<br />
Bedeutung der sozialen Netze, schon<br />
aufgrund des leichteren und kostengünstigeren<br />
Vertriebs verlagert sich immer<br />
mehr Funktionalität jeder Art ins Web.<br />
Dabei wächst die Akzeptanz der diversen<br />
Webangebote mit ihrer Wahrnehmung in<br />
der Bevölkerung. Mit wachsender Anzahl<br />
registrierter oder angemeldeter Benutzer<br />
einher geht auch die Möglichkeit, mit<br />
den Anwendern Gewinn zu machen –<br />
selbst für eigentlich kostenlose Angebote.<br />
Facebook oder Google sind Paradebeispiele<br />
für solche Webdienste.<br />
Weil die Betreiber auf Marktdurchdringung<br />
setzen, wollen beziehungsweise<br />
müssen sie Dritten die Möglichkeit einräumen,<br />
die eigenen Dienste selbst zu<br />
nutzen und mehr oder weniger weiterzuvertreiben.<br />
Dazu stellen sie <strong>Schnittstellen</strong><br />
bereit, über die Dritte die Webfunktionen<br />
nicht nur selbst nutzen, sondern in eigene<br />
Angebote einbinden können – die<br />
Web-APIs.<br />
Während einzelne Endkunden die originären<br />
Webangebote meist per Browser<br />
nutzen, bieten diese APIs eine Möglichkeit,<br />
die gleichen Informationen automatisiert<br />
leichter und schneller zu erhalten<br />
und auch einfacher weiterzuverarbeiten.<br />
Darüber hinaus sind nur über das<br />
Web-API weitere Funktionalitäten oder<br />
Dienste möglich, die der Browser-Klientel<br />
ebenfalls entgehen.<br />
Weil die Dienstanbieter den Zugang zu<br />
ihren Informationen und Inhalten natürlich<br />
regeln wollen, knüpfen sie diese erleichterte<br />
Form des Zugriffs an bestimmte<br />
Bedingungen, die in Lizenzbedingungen,<br />
Zugriffs-, Nutzungs- oder einfach<br />
nur Geschäftsbedingungen festgehalten<br />
sind. Bei allen handelt es sich um vor-<br />
Die Verträge, die die API-Nutzung regeln,<br />
lassen sich aber nicht zwingend einheitlich<br />
einordnen. Geht man von der Annahme<br />
aus, dass in den einzelnen Fällen<br />
ein Minimum an Softwarefunktionalität<br />
sowohl beim Nutzer des API als auch<br />
auf den Servern des originären Dienstanbieters<br />
liegt, also die Bearbeitung der<br />
API-Anfragen in mehreren Stufen erfolgt,<br />
dürfte es sich um ein gemischtvertragliches<br />
Modell handeln.<br />
Zum einen kommt ein echter Software-<br />
Überlassungvertrag in Frage (jene API-<br />
Programme und ‐Bibliotheken in Quellcode-<br />
oder Binary-Form, die der Nutzer<br />
in seinen Webangeboten einsetzt), zum<br />
anderen bearbeiten aber die Programme<br />
die erhaltenen Anfragen auf den Servern<br />
der Betreiber und liefern die Inhalte und<br />
Informationen zurück.<br />
Dieses Modell ist klassisch für das verbreitete<br />
Application Service Providing,<br />
bei dem in der Regel gegen Gebühr die<br />
gleiche Funktionalität „vermietet“ wird.<br />
Den hier beschriebenen Fällen fehlt es<br />
lediglich an diesem Entgelt und somit nur<br />
an der vereinbarten Gegenleistung: Die<br />
Nutzung der Web-APIs ist in der Regel<br />
kostenlos.<br />
Dass bereits die Einordnung der herkömmlichen<br />
ASP-Verträge als Mietvertrag<br />
umstritten ist, macht die Einordnung der<br />
kostenfrei nutzbaren Web-API-Überlassungsverträge<br />
nicht einfacher. Am plau-
sibelsten scheint eine Klassifikation als<br />
Leihvertrag, zumindest in Bezug auf die<br />
überlassenen Bibliotheken des API selbst.<br />
Die Leihe ist nach deutschem Recht die<br />
unentgeltliche Gebrauchsüberlassung auf<br />
bestimmte Zeit. Der deutsche Bundesgerichtshof<br />
hält die Einordnung entgeltlicher<br />
Software-Überlassung auf Zeit als<br />
Mietverhältnis für zulässig [2], daher<br />
sollte auch die unentgeltliche Überlassung<br />
problemlos als Leihvertrag einzuordnen<br />
sein.<br />
Wie bei verschiedenen Vertragstypen generell,<br />
so ist auch bei der Leihe nach den<br />
Paragrafen 598 ff. BGB [1] eine Ausgestaltung<br />
des Vertrags durch AGBs zulässig.<br />
Die Überlassung des API ist dabei der<br />
einzige Leistungsteil, der auf Dauer angelegt<br />
ist. Die Nutzung der eigentlichen<br />
Dienste ist ein „Sofort-Geschäft“, das mit<br />
Versenden der Abfrage und Lieferung der<br />
Daten per Browser oder über das API<br />
abgeschlossen ist.<br />
Es handelt sich daher um kein Dauerschuldverhältnis<br />
im eigentlichen Sinne,<br />
sondern um rechtlich selbstständige Einzelaktionen.<br />
Das ist bedeutsam, weil deshalb<br />
Anbieter jederzeit Änderungen im<br />
Angebot oder den Bezugsbedingungen<br />
einseitig vornehmen können. Ähnlich<br />
wie beim Bäcker, bei dem der Verbraucher<br />
täglich seine Frühstücksbrötchen<br />
einkauft und der von einem Tag auf den<br />
anderen den Preis erhöhen oder auch<br />
gar keine Brötchen mehr im Angebot haben<br />
kann, hat auch der API-Kunde kein<br />
„Semmel-Abo“.<br />
Wirksame Vereinbarungen<br />
Im Regelfall werden AGBs nur dann Vertragsbestandteil,<br />
wenn der Verwender<br />
ausdrücklich darauf hinweist und dem<br />
Mailen Sie uns Ihre Fragen!<br />
Im monatlichen Wechsel mit aktuellen Fachbeiträgen<br />
lässt das <strong>Linux</strong>-<strong>Magazin</strong> in der Serie<br />
„Rechts-Rat“ Leserfragen durch einen<br />
Rechtsanwalt kompetent beantworten. Was<br />
immer Sie beschäftigt oder ärgert, oder was<br />
Sie einfach nur wissen möchten: Schreiben<br />
Sie eine entsprechende E-Mail an die Adresse<br />
[rechtsrat@linux-magazin. de].<br />
Die Themen dürfen von Software lizenzen bis<br />
zum Hardwarekauf reichen. Die Redaktion<br />
behält es sich vor, abgedruckte Zuschriften<br />
zu kürzen und eventuell enthaltene persönliche<br />
Daten zu ändern.<br />
Abbildung 1: Wie jedem Obst- und Gemüsehändler oder Bäcker steht es auch dem API-Anbieter jederzeit frei,<br />
seine Konditionen oder Preise zu ändern, weil es sich bei API-Aktionen rechtlich um Einzelgeschäfte handelt.<br />
Vertragspartner die Gelegenheit einräumt,<br />
deren Inhalt zur Kenntnis zu nehmen.<br />
Darüber hinaus muss der Vertragspartner<br />
mit ihnen einverstanden sein.<br />
Bereits das Landgericht München I hat in<br />
seiner wegweisenden Entscheidung zur<br />
Wirksamkeit der GPL [3] keine Bedenken<br />
geäußert, deren Bestimmungen als<br />
AGB wirksam in ein Vertragsverhältnis<br />
einzubinden, weil die Internetseite auf<br />
sie hingewiesen hatte und sie auch allgemein<br />
zugänglich seien. Seither besteht<br />
Einigkeit darüber, dass Allgemeine Geschäftsbedingungen<br />
besonders bei der<br />
Software-Überlassung auch problemlos<br />
auf dem heute üblichen Weg per Web<br />
wirksam vereinbart sind.<br />
Hält sich der Nutzer des Web-API nicht<br />
an die vereinbarten Nutzungsbedingungen,<br />
dann verletzt er den Vertrag zwischen<br />
ihm und dem eigentlichen Anbieter,<br />
was zur Folge hat, dass dieser ihn in<br />
Anspruch nehmen kann. Bezüglich der<br />
bereitgestellten Informationen kann er<br />
sich dabei in der Regel auf das Urheberrecht<br />
stützen.<br />
Urheberrechtsschutz<br />
Dabei kommen je nach Art der Informationen<br />
und Inhalte verschiedene Ansprüche<br />
in Betracht: Handelt es sich um persönliche<br />
kreative Schöpfungen wie Texte,<br />
Bilder, Filme, Musik oder Ähnliches, liegt<br />
ein Verstoß gegen das urheberrechtliche<br />
Privileg vor. Der API-Nutzer gibt ja im<br />
Rahmen seines eigenen Angebots regelmäßig<br />
ohne Berechtigung die vom originären<br />
Anbieter bezogenen Inhalte weiter.<br />
In den API-AGBs ist dieses Recht stets<br />
an die Einhaltung der Vertragsbedingungen<br />
geknüpft und soll bei einem Verstoß<br />
verfallen.<br />
Das Prinzip gilt hier wie bei der GPL:<br />
Verletzt ein Nutzer freier Software die<br />
GPL-Bedingungen, geht sein Nutzungsund<br />
Weitergaberecht verloren, die gesetzlichen<br />
Regeln des Urheberrechts greifen<br />
und damit das Verbot der Weiterverbreitung<br />
fremder Werke. Das Urheberrechtsgesetz<br />
[4] kennt aber nicht nur<br />
den Schutz persönlicher kreativer Schöpfung;<br />
hier sind auch Regelungen über den<br />
Schutz von Datenbanken oder ähnlichen<br />
Informationssammlungen enthalten.<br />
Datenverarbeitungsrecht<br />
Gerade auch Webdienste setzen heute<br />
auf automatisierte Datenverarbeitung.<br />
Entstehen beim Auswerten und Präsentieren<br />
erhebliche Datenmengen, spielen<br />
deren Haltung und Präsentation eine entscheidende<br />
Rolle. Das Urheberrecht setzt<br />
auf persönlich kreative Schöpfungsakte<br />
durch den Menschen und schließt daher<br />
maschinengenerierte Datensammlungen<br />
und Visualisierungen grundsätzlich vom<br />
Schutz aus, hier ist keinerlei kreative Gestaltung<br />
möglich.<br />
Das bedeutet nun nicht, dass jeder die<br />
Daten, die ein anderer nicht selten in jah-<br />
© 36clicks, 123RF<br />
Recht 12/2012<br />
Forum<br />
www.linux-magazin.de<br />
71
Forum<br />
www.linux-magazin.de Recht 12/2012<br />
72<br />
© Lane Erickson, 123RF<br />
Abbildung 2: Das Urheberrecht kennt auch eigene Regelungen für den Zugriff auf Daten- und Informationssammlungen<br />
sowie die Verarbeitung der gewonnenen Daten.<br />
relanger, mühevoller Kleinarbeit gesammelt<br />
hat, nach Belieben nutzen dürfte:<br />
Seit einiger Zeit kennt das Urheberrecht<br />
auch den Schutz von Datenbanken in<br />
den Paragrafen 87a ff. [4]. Der gehört<br />
zwar systematisch nicht zum eigentlichen<br />
Urheberrecht, weil hier keinerlei<br />
persönlich-gestalterische Schöpfung nötig<br />
ist, die Bestimmungen wurden aber<br />
in das UrhG inkorporiert.<br />
Datenbankschutz ist<br />
Investitionsschutz<br />
Der Datenbankschutz ist ein Investitionsschutz,<br />
er hängt also davon ab, auf welche<br />
Weise und mit welchem Aufwand die<br />
Daten gesammelt oder aufbereitet werden.<br />
Daneben besteht noch ein echter Urheberrechtsschutz<br />
für Datenbankwerke,<br />
also für nach persönlich-schöpferischen<br />
Kriterien zusammengestellte Datenbank-<br />
Sammlungen. Die Voraussetzung für den<br />
Schutz einer solchen Datenbank ist lediglich<br />
eine wesentliche Investition, die<br />
auch schon in dem Aufwand stecken<br />
kann, ein Programm zu erstellen (oder<br />
zu kaufen), das Daten erfasst, auswertet<br />
oder kategorisiert.<br />
Der Schutz des UrhG erstreckt sich auf<br />
das Recht, die Daten zu vervielfältigen,<br />
zu verbreiten oder öffentlich wiederzugeben.<br />
Dieser Schutzgegenstand umfasst<br />
die Datenbank als Ganzes oder auch nur<br />
einen wesentlichen Teil. Der originäre<br />
Anbieter kann daher alle anderen von der<br />
Benutzung der Datenbank ausschließen,<br />
wenn es sich nicht um die Entnahme nur<br />
unwesentlicher Teile handelt.<br />
Das bedeutet für den Zugriff auf das API,<br />
dass zunächst – weil das Nutzungsrecht<br />
durch das Nichteinhalten der AGB verwirkt<br />
ist – auch das Nutzen der Bibliothek<br />
selbst nicht mehr zulässig ist. Die<br />
Inhalte dürfen ebenfalls nicht mehr weitergegeben<br />
werden, selbst wenn diese auf<br />
andere Weise erreichbar wären – etwa im<br />
Zuge eines Browser-Scripting oder anderer<br />
Zugriffe.<br />
Das Umgehen des API ist<br />
meist nicht erlaubt<br />
Denn die nächste logische Frage wäre die<br />
nach einer etwa zulässigen Umgehung<br />
des API auf diese oder vergleichbare<br />
Weise: Darf man, auch ohne ein bereitgestelltes<br />
API zu nutzen, die Inhalte und<br />
Informationen, die der originäre Anbieter<br />
bereitstellt, über automatisierte Abfragen<br />
der allgemein zugänglichen Seiten abrufen<br />
und weitergeben? Es handelt sich ja<br />
immerhin um ohnehin frei erreichbare<br />
Informationen.<br />
Die Antwort ist leicht: Hier gelten ebenfalls<br />
die im Urheberrecht festgelegten<br />
Urheber- und Leistungsschutzrechte:<br />
Geschützte Werke darf man nicht verbreiten,<br />
wesentliche Teile von Datenbank-<br />
Inhalten ebenfalls nicht. Damit wäre eine<br />
solche Umgehung rechtstreu nur dann<br />
möglich, wenn es sich um einzelne Informationen<br />
handelt, die urheberrechtlich<br />
nicht geschützt sind.<br />
Die originären Anbieter werden jedoch<br />
nach Möglichkeit Maßnahmen ergreifen,<br />
solche Bot-Abfragen einzuschränken oder<br />
zu verhindern [5]. Darüber hinaus sind<br />
vielfach wertvolle Informationen oder<br />
bestimmte Funktionen nur beim Zugriff<br />
über das API möglich und tauchen im<br />
normalen Webzugriff gar nicht auf.<br />
Streit und Willkür: Facebook<br />
und Open Xchange<br />
Auch ohne Verletzung der Vertragsbedingungen<br />
kann es zwischen den API-Nutzern<br />
und den originären Betreibern zum<br />
Streit kommen. Prominentes Beispiel ist<br />
das Aussperren von Open Xchange durch<br />
Facebook [6], zu dem sich das soziale<br />
Netzwerk nach eigener Aussage auch<br />
ohne konkrete Verletzung der Vertragsbedingungen<br />
veranlasst fühlte.<br />
Bei solchen Auseinandersetzungen wird<br />
stets der API-Anwender den Kürzeren ziehen:<br />
Zum einen ist selbst bei unangekündigten<br />
Maßnahmen der Zugriffsunterbindung<br />
nur schwer ein konkreter Schaden<br />
beim API-Anwender nachweisbar, zum<br />
anderen erschwert meist der Standort<br />
Infos<br />
[1] Bürgerliches Gesetzbuch:<br />
[http:// www. gesetze‐im‐internet. de/ bgb/]<br />
[2] BGH, Urteil vom 15.11.06, Az. XII ZR 120/04:<br />
[http:// juris. bundesgerichtshof. de/ cgi‐bin/<br />
rechtsprechung/ document. py? Gericht=<br />
bgh& Art=en& Datum=2006‐11& Seite=4& nr=<br />
38367& pos=126& anz=231]<br />
[3] Zur rechtlichen Wirksamkeit der GPL:<br />
[http:// www. telemedicus. info/ urteile/<br />
Urheberrecht/ Open‐Source/ 496‐LG<br />
‐Muenchen‐I‐Az‐21‐O‐612304‐Zur<br />
‐rechtlichen‐Wirksamkeit‐der‐GPL. html]<br />
[4] Urheberrechtsgesetz:<br />
[http:// www. gesetze‐im‐internet. de/ urhg/]<br />
[5] Web- und Screen-Scraping: [http:// de.<br />
wikipedia. org/ wiki/ Screen_Scraping]<br />
[6] Facebook vs. Open Xchange:<br />
[http:// www. linux‐magazin. de/ NEWS/<br />
Facebook‐ist‐gegen‐Open‐Data‐und<br />
‐sperrt‐Open‐Xchange‐aus? category=0]<br />
[7] BGH-Urteil, 28.05.98, Az. I ZR 81/96: [http://<br />
www. jurpc. de/ rechtspr/ 19990054. htm]<br />
[8] Landgericht München I, Urteil vom<br />
09.11.2005, Az. 21 O 7402/02: [http://<br />
de. wikisource. org/ wiki/ Landgericht_<br />
M%C3%BCnchen_I_‐_Datenbankschutz_<br />
f%C3%BCr_topografische_Landkarten]<br />
[9] Google-Maps-API-Lizenzierungsmodelle:<br />
[https:// developers. google. com/ maps/<br />
licensing]
der originären Anbieter in den USA oder<br />
anderen Ländern die gerichtliche Durchsetzung.<br />
Darüber hinaus könnten im<br />
Ausland Haftungsausschlüsse wirksam<br />
sein (Disclaimer), die nach deutschem<br />
Recht nicht möglich wären – hier haftet<br />
auch etwa für Vorsatz, wer eine Haftung<br />
für entgeltliche Überlassung generell ausschließen<br />
will.<br />
Die entscheidende Option, die der Betreiber<br />
hat, ist aber die Möglichkeit, jederzeit<br />
Anpassungen der Vertragsbedingungen<br />
vorzunehmen. In die braucht er nur<br />
explizit hineinzuschreiben oder zu verklausulieren,<br />
was beim Einsatz des API<br />
nicht gestattet sein soll. Verbunden mit<br />
dem Hinweis, dass jede weitere Nutzung<br />
des API nur unter diesen Bedingungen<br />
gestattet sein soll, schließt der Anbieter<br />
erfolgreich jede Nutzung aus, die ihm<br />
missfällt. Weil die API-Nutzung regelmäßig<br />
nur „bis auf Weiteres“, aber nicht für<br />
einen vorher fest vereinbarten Zeitraum<br />
eingeräumt bleibt, ist dies im Rahmen<br />
freier Vertragsgestaltung rechtlich wohl<br />
in der Regel unbedenklich.<br />
Google Maps im<br />
Unternehmen nutzen<br />
Ein praktisches Beispiel für einen Webdienst,<br />
der bei nicht privater Nutzung<br />
den Einsatz eines dedizierten API vorschreibt,<br />
ist Google Maps. Nach den<br />
Nutzungsbedingungen von Google [6]<br />
setzt die gewerbliche Verbreitung, also<br />
die Aufnahme des Kartenmaterials in die<br />
eigene kommerzielle Internetseite das<br />
API voraus. Landkarten und vergleichbare<br />
Geo-Informationen sind zum einen<br />
echte urheberrechtlich geschützte Werke<br />
[7] (die schöpferische Leistung besteht<br />
hier in der maßstabsgerechten Reduzierung<br />
auf ein Kartenbild), zum anderen<br />
gelten sie auch als Datenbanken [8].<br />
Wer in seine private und nicht kommerzielle<br />
Website Google-Maps-Karten einbinden<br />
will, darf dies demnach entweder per<br />
selbst geschneidertem HTML-Konstrukt<br />
oder per API tun, kommerzielle Anbieter<br />
verpflichtet Google aber entweder zum<br />
einfachen „Google Maps API“, sofern die<br />
betreffende Seite gebührenfrei aufzurufen<br />
ist, oder zum „Google Maps API for<br />
Business“, wenn die Seite kostenpflichtig<br />
ist, kostenpflichtige Mobile Apps erfordert<br />
oder unternehmensintern erscheinen<br />
soll [9]. Wer Google Maps also nicht<br />
lediglich für die persönliche Routenplanung<br />
heranzieht, sondern Karten auf der<br />
eigenen Homepage veröffentlichen will,<br />
muss sich an die Nutzungsbedingungen<br />
halten. (mfe)<br />
n<br />
Der Autor<br />
RA Fred Andresen ist Mitglied<br />
der Rechtsanwaltskammer<br />
München und der Arbeitsgemeinschaft<br />
Informationstechnologie<br />
im Deutschen<br />
Anwaltverein (DAVIT).<br />
Recht 12/2012<br />
Forum<br />
www.linux-magazin.de<br />
73<br />
das magazin für 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 mit ubuntu<br />
● zusatzwissen rund um ubuntu<br />
und seine derivate<br />
● 2x testen ohne risiko, das digisub-mini<br />
ist jederzeit kündbar!<br />
● nutzbar auf notebook und PC,<br />
tablet oder 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!
Forum<br />
www.linux-magazin.de Reusing 12/2012<br />
74<br />
Code aus dem Internet in der kommerziellen Softwareentwicklung<br />
Recycling in der Firma<br />
Eine wissenschaftlich fundierte Umfrage unter hauptberuflichen Softwareentwicklern hat recht unterschiedliche<br />
Einstellungen zum Basar-artigen Wiederverwenden von frei verfügbarem Quellcode ergeben. Erfahrungen,<br />
Rollen in der Firma und Programmiersprachen bestimmen die Akzeptanz. Manuel Sojer<br />
© Mongkol Chakritthakool, 123RF.com<br />
Das Internet ist voll von Quellcode. Laut<br />
der Datenbank von Black Duck Software<br />
[1] gibt es heute mehr als 600 000<br />
veröffent lichte Open-Source-Projekte, die<br />
zusammen 100 Milliarden Zeilen Quellcode<br />
und damit das Äquivalent von 100<br />
Millionen Mannjahren Entwicklungsarbeit<br />
geschaffen haben. Hinzu kommen<br />
verfügbare Komponenten und Snippets,<br />
die nicht unter freien Lizenzen stehen,<br />
aber unentgeltlich nutzbar sind.<br />
Seit den 60er Jahren gilt Wiederverwendung<br />
(Reusing) als zentral, um Software<br />
von hoher Qualität schnell und<br />
wirtschaftlich zu schaffen [2]. Solcher<br />
Code kam entweder aus dem eigenen<br />
Unternehmen oder von Dritten [3]. Beide<br />
Ansätze führen zu direkten Kosten, entweder<br />
für die Entwicklung In-House, die<br />
sich durch hoffentlich mehrfaches Verwenden<br />
amortisiert, oder für den Kauf<br />
von Komponenten.<br />
Allein wegen der Kosten bildet unentgeltlich<br />
wiederverwendbarer Code aus<br />
dem Internet eine echte Alternative. Zudem<br />
entfallen bei Code aus gut geführten<br />
Open-Source-Projekten die Kosten für die<br />
zukünftige Codepflege.<br />
Attraktiver Fundus<br />
Darum überrascht es wenig, dass Code<br />
aus dem Internet für professionelle Software-Entwickler<br />
in Firmen – wie auch für<br />
Hobbyprogrammierer und Open-Source-<br />
Entwickler [4] – einen attraktiven Fundus<br />
bildet. Wie bei externem Code jedes<br />
Ursprungs stellt sich auch bei heruntergeladenem<br />
Code die Frage nach Qualität<br />
und Sicherheit. Obwohl es noch keine finalen<br />
Erkenntnisse gibt, legen neuere Untersuchungen<br />
[5],[6] nahe, dass es bei<br />
wohlüberlegter Wahl der Quellen keine<br />
grundsätzlichen Unterschiede zwischen<br />
kommerziell erworbenem und unentgeltlichem<br />
Code gibt.<br />
Ein im Herbst 2009 unter professionellen<br />
Softwareentwicklern durchgeführte<br />
Umfrage sollte die praktische Seite des<br />
Reusing sowie die Handhabung möglicher<br />
rechtlicher Risiken untersuchen. Um<br />
eine möglichst heterogene Grundgesamtheit<br />
bestehend aus Softwareentwicklern<br />
verschiedener Länder, Unternehmen<br />
und Entwicklungsrollen zu erreichen,<br />
wurden Teilnehmer aus Newsgroups<br />
wie [comp.lang.c++], [comp.lang.java.<br />
programmer] und [comp.lang.ruby] zufällig<br />
ausgewählt. Die Implementierung<br />
der Online-Umfrage passierte mit Hilfe<br />
von Lime Survey und mit hauptsächlich<br />
geschlossenen, über Likert-Skalen zu beantwortenden<br />
Fragen.<br />
Insgesamt nahmen an der Umfrage 869<br />
professionelle Softwareentwickler teil.<br />
84 Prozent waren zu der Zeit in diesem<br />
Beruf aktiv, der Rest hatte ihn früher<br />
ausgeübt. Mit der Hälfte und einem<br />
Viertel stellten Europa und Nordamerika<br />
die Hauptherkunftsregionen der zu 98<br />
Prozent männlichen Teilnehmer dar, die<br />
im Durchschnitt 36 Jahre alt waren. Die<br />
Softwareentwickler blickten im Schnitt<br />
auf zehn Jahre Berufserfahrung zurück.<br />
56 Prozent waren nebenher als Softwareentwickler<br />
in einem oder mehreren<br />
öffentlichen Open-Source-Projekten involviert.<br />
Für 20 Prozent der Teilnehmer<br />
stellte C++ die primäre Programmiersprache<br />
dar, für 14 Prozent Java und für 12<br />
Prozent Python. Weitere Informationen<br />
zur Umfragetechnik und Demographie<br />
sind in [7] veröffentlicht.<br />
Wachsende Bedeutung<br />
Auf einer fünfstufigen Skala von „Überhaupt<br />
nicht wichtig“ bis „Sehr wichtig“<br />
schätzten die befragten aktiven Entwickler<br />
das Thema Wiederverwendung durchschnittlich<br />
als „ein wenig wichtig“ für
Lizenz-Quiz<br />
Um die Kenntnisse der Umfrageteilnehmer zum Thema Softwarelizenzen<br />
nicht allein ihrer Selbsteinschätzung zu überlassen, haben die Forscher<br />
mit den Probanden ein Multiple-Choice-Quiz veranstaltet. Hier nun die<br />
.1. Welche Open-Source-Lizenz verlangt, dass so regulierter Code auf<br />
private oder akademische Software-Projekten beschränkt bleibt?<br />
GPL (5 %)<br />
BSD License (10 %)<br />
Keine der genannten (68 %)<br />
Weiß nicht (17 %)<br />
2. Angenommen jemand schreibt ein proprietäres Programm und bettet<br />
darin Open-Source-Code ein. Welche Lizenz erfordert es unter Umständen,<br />
dass der Entwickler das ganze Programm unter die betreffende<br />
Open-Source-Lizenz stellen muss?<br />
GPL (56 %)<br />
BSD License (1 %)<br />
Mozilla Public License (MPL) (1 %)<br />
Sowohl GPL als auch MPL (27 %)<br />
Keine der genannten (1 %)<br />
Weiß nicht (14 %)<br />
3. Falls Open-Source-Code ein Patent verletzt, gegen wen kann der<br />
Patenteigentümer Ansprüche geltend machen?<br />
Nur den gegen den Entwickler des Codes (6 %)<br />
Gegen den Entwickler und Dritte, die den Code integrieren (52 %)<br />
Niemanden, weil Open-Source-Lizenzen Patente ausschließen (3 %)<br />
Weiß nicht (39 %)<br />
fünf Fragen, die Prozentzahlen spiegeln die Antworten der Befragten<br />
wider. Per Kreuzchen im Kästchen kann jeder <strong>Linux</strong>-<strong>Magazin</strong>-Leser selbst<br />
sein Wissen testen.<br />
4. Welche der Open-Source-Lizenzen verlangt, dass solchen Code enthaltenden<br />
Produkte den Lizenztext mit ausliefern?<br />
GPL (16 %)<br />
BSD License (3 %)<br />
MPL( 1 %)<br />
GPL, BSD und MPL (60 %)<br />
Keine der genannten (1 %)<br />
Weiß nicht (19 %)<br />
5. Jemand veröffentlich ein Code-Snippet in einer Newsgroup oder auf<br />
einer Tutorial-Webseite. Unter welchen Umständen kann ein Dritter das<br />
Snippet rechtlich gefahrlos integrieren?<br />
Wenn der Veröffentlicher keine Verpflichtungen nennt, die mit der<br />
Verwendung des Snippets einhergehen (10 %)<br />
Wenn der Veröffentlicher explizit darauf hinweist, dass er keine<br />
Verpflichtungen an die Verwendung des Snippets knüpft (39 %)<br />
Wenn das Snippet nicht Teil eines kompletten Programms ist (1 %)<br />
Wenn alle drei genannten Bedingungen erfüllt sind (16 %)<br />
Keine der genannten Bedingungen reicht aus (19 %)<br />
Weiß nicht (15 %)<br />
Wer die Auflösung des Rätsels wissen will, knickt diese Seite unten rechts<br />
diagonal nach innen und kriegt einen Kasten mit den richtigen Antworten<br />
zu Gesicht.<br />
Reusing 12/2012<br />
Forum<br />
www.linux-magazin.de<br />
75<br />
ihre Arbeit ein (siehe Abbildung 1), nur<br />
12 Prozent bezeichneten es als „überhaupt<br />
nicht wichtig“ während für 19 Prozent<br />
Reusing sehr „sehr wichtig“ war.<br />
Fügt man der Betrachtung durch Berücksichtigen<br />
der ehemaligen Entwickler eine<br />
zeitliche Dimension hinzu, ist erkennbar,<br />
dass das Thema über die Jahre bedeutender<br />
wurde (siehe Abbildung 2).<br />
Umfrageteilnehmer, die bereits vor 2004<br />
aufgehört hatten Software zu entwickeln,<br />
bewerteten Open Source meist zwischen<br />
„überhaupt nicht wichtig“ und „kaum<br />
wichtig“. Erst nach 2003 begann die<br />
Wichtigkeit, bis sie schließlich 2008 und<br />
2009 eine durchschnittliche Relevanz von<br />
„Ein wenig wichtig“ erreichte. Dies fällt<br />
zeitlich mit der Verbreitung von Open-<br />
Source-Software zusammen.<br />
Neben dem Zeitverlauf scheinen Erfahrungen<br />
und berufliche Stellung die Einstellung<br />
zum Thema zu beeinflussen. So<br />
lässt sich feststellen, dass professionelle<br />
Softwareentwickler, die über eigene Erfahrungen<br />
in Open-Source-Projekten verfügen,<br />
solchen Code auch professionell<br />
bedeutsamer einschätzen. Möglichweise<br />
tun sich solche Entwickler leichter damit,<br />
passenden Code für ihre Projekte zu finden<br />
und zu evaluieren.<br />
Interessanterweise beeinflusst auch die<br />
eigene Tätigkeit im Unternehmen die<br />
Haltung zu Open Source. Softwarearchitekten<br />
und Projektmanager zeigen sich<br />
gegenüber der Wiederverwendung von<br />
Code aus dem Internet aufgeschlossener<br />
als Programmierer. Deren Einschätzung<br />
wiederum liegt höher als die von Testern,<br />
Datenbankentwicklern und Systemanalysten.<br />
Dass sich die drei zuletzt genannten<br />
Rollen wenig mit dem konkreten<br />
Implementieren beschäftigen, macht die<br />
geringere Bedeutung plausibel.<br />
Der Unterschied zwischen Softwarearchitekten<br />
und Projektmanagern auf der einen<br />
Seite und Programmierern auf der<br />
anderen mag daran liegen, dass die erste<br />
Gruppe über die Beeinflussung der Architektur<br />
der zu entwickelnden Software<br />
über höhere Freiheitsgrade beim Einbinden<br />
von existierendem Code verfügt als<br />
Programmierer, für die die grundlegende<br />
Architektur der Software, an der sie arbeiten,<br />
bereits von außen vorgegeben ist.<br />
Als Drittes zeitigt die primär verwendete<br />
Programmiersprache einen Einfluss. Befragte,<br />
die hauptsächlich mit Ruby oder<br />
Python arbeiten, erachten wiederverwendeten<br />
Code als besonders bedeutsam. Dies<br />
mag daran liegen, dass es beide Sprachen<br />
besonders einfach machen, fremden Code<br />
einzubinden, sogar solchen aus anderen<br />
Sprachen. Perl, Javascript, Java und PHP<br />
bilden eine zweite Gruppe, erst dann folgen<br />
mit C und C++ die traditionellen<br />
Sprachen. Entwickler, die mit Fortran, Visual<br />
Basic, C# oder Pascal arbeiten, legen<br />
den wenigsten Wert auf Code aus dem Internet.<br />
Kulturelle Unterschiede scheint es<br />
hingegen nicht zu geben, die Entwickler<br />
aus Europa, Nord- und Südamerika oder<br />
Asien messen quelloffenem Code etwa<br />
die gleiche Bedeutung zu.<br />
Kaum offiziell unterstützt<br />
Angesichts der insgesamt hohen Bedeutung<br />
der Wiederverwendung von Open-<br />
Source-Code in kommerziellen Entwicklungsprojekten<br />
ist es erstaunlich, dass<br />
der Großteil der befragten 2009 aktiven<br />
Softwareentwickler zu diesem Thema<br />
nie offiziell geschult worden ist. Auf die<br />
Frage, aus welchen Quellen sie sich zu<br />
Hier knicken!
Forum<br />
www.linux-magazin.de Reusing 12/2012<br />
76<br />
30 %<br />
20 %<br />
10 %<br />
0 %<br />
Prozent<br />
12 %<br />
Überhaupt<br />
nicht<br />
wichtig<br />
29 %<br />
Nicht<br />
sehr<br />
wichtig<br />
24 %<br />
Ein wenig<br />
wichtig<br />
16 %<br />
Wichtig<br />
19 %<br />
N=732<br />
Sehr<br />
wichtig<br />
Ein wenig<br />
wichtig<br />
Nicht sehr<br />
wichtig<br />
Überhaupt<br />
nicht<br />
wichtig<br />
Befragte<br />
Software-Entwickler<br />
1,8<br />
vor 2002<br />
32<br />
1,8<br />
2002/03<br />
13<br />
2,2<br />
2004/05<br />
17<br />
2,5<br />
2006/07<br />
28<br />
3,0<br />
2008/09<br />
779<br />
Abbildung 1: Welche Bedeutung messen professionelle Software-Entwickler der<br />
Wiederverwendung von Code aus dem Internet bei?<br />
Abbildung 2: Die Einstellung von Entwicklern zum Open-Source-Reusing hat sich<br />
über die Zeit gewandelt.<br />
den Vorteilen und Risiken bei dem Thema<br />
informieren, nennen zwei Drittel das<br />
Internet und knapp die Hälfte Freunde<br />
und Kollegen (siehe Abbildung 3). Ein<br />
Viertel der Befragten gab an, überhaupt<br />
keine Informationen erhalten zu haben.<br />
Aus offiziellen Quellen wie dem eigenen<br />
Unternehmen oder einer Ausbildungseinrichtung<br />
hatten nur 21 beziehungsweise<br />
16 Prozent Informationen erhalten.<br />
Rechtliche Risiken<br />
Dass jedermann Code aus dem Internet<br />
unentgeltlich laden kann, besagt nicht,<br />
dass keine Bedingungen daran geknüpft<br />
sind. Geschriebener Code unterliegt automatisch<br />
dem Urheberrecht, und dieses<br />
geht von einer exklusiven Nutzung durch<br />
den Urheber aus. Der kann Dritten jedoch<br />
die Nutzung und die Vervielfältigung des<br />
Codes durch Lizenzen gewähren [8], indem<br />
er Rechte abtritt [9].<br />
Dieses Umstandes bedienen sich auch die<br />
Open-Source-Lizenzen, die über ihre Lizenztexte<br />
definieren, unter welchen Bedingungen<br />
der so beauflagte Code verwendbar<br />
ist. Die Open Source Initiative<br />
[10] zählt alleine 69 Lizenzen, die der<br />
De finition Open<br />
Source folgen.<br />
Daneben gibt es<br />
eine Menge von<br />
Lizenzen, die<br />
zwar nicht den<br />
Kriterien der<br />
Open-Source-<br />
Definition genügen,<br />
jedoch eine<br />
Auflösung Lizenz-Quiz<br />
1. Keine der genannten<br />
2. Sowohl GPL als auch MPL<br />
3. Gegen den Entwickler und Dritte, die den<br />
Code integriert haben<br />
4. GPL, BSD und MPL<br />
5. Keine der genannten Bedingungen reicht<br />
kostenlose Nutzung<br />
des Codes<br />
erlauben.<br />
Die unterschiedlichen Lizenzen erteilen<br />
spezielle Rechte und stellen unterschiedliche<br />
Bedingungen [9]. Eine gängige Bedingung<br />
ist beispielsweise das Erwähnen<br />
des Autors im Code und in der Dokumentation<br />
zur Software oder das Hinzufügen<br />
des originalen Lizenztexts. Problematisch<br />
für manche Unternehmen scheint<br />
insbesondere die Reziprozität zu sein,<br />
die manche Lizenzen, unter ihnen die<br />
GPLv2, als Bedingung enthalten. Diese<br />
sieht vor, dass Software, die eng mit dem<br />
freien Code interagiert, ebenfalls dieser<br />
Lizenz unterstellt gehört [9].<br />
Bei der klassischen Wiederverwendung<br />
von Code lassen sich rechtliche Themen<br />
in der Regel einfach handhaben: Sofern<br />
es sich um innerhalb der eigenen Firma<br />
entwickelten Code handelt, liegen die<br />
Rechte schon beim Unternehmen. Wird<br />
der Code käuflich erworben, regelt meist<br />
der Kaufvertrag die Lizenzfragen. Bei<br />
Code aus dem Internet scheint die Gefahr<br />
größer zu sein, dass, vor allem bei knappen<br />
Terminen, die rechtlichen Aspekte<br />
nicht die nötige Beachtung finden.<br />
Knackpunkt Reziprozität<br />
Für Unternehmen stellen Verletzungen<br />
der Lizenzen von wiederverwendetem<br />
Code ein signifikantes Risiko dar, insbesondere,<br />
wenn es sich um Reziprozität<br />
fordernde Lizenzen handelt. VMware<br />
beispielweise weist im Risiko-Teil eines<br />
Quartalsberichts [11] explizit darauf hin:<br />
„… use of ’open source’ software in our<br />
products could negatively affect our ability<br />
to sell our products and subject us to<br />
possible litigation“.<br />
Da Entwickler Code aus dem Internet<br />
unbürokratisch herunterladen können,<br />
spielen die betreffenden rechtlichen Rahmenbedingungen<br />
für sie eine bedeutendere<br />
Rolle als zu Zeiten der klassischen<br />
Zweitnutzung von firmenintern erstelltem<br />
oder zugekauftem Code. Das macht<br />
den juristischen Wissensstand professioneller<br />
Softwareentwickler interessant.<br />
Gemäß ihrer Selbsteinschätzung sind sich<br />
die 2009 aktiven befragten Softwareentwickler<br />
der rechtlichen Rahmenbedingungen,<br />
die mit der Wiederverwendung<br />
von Code aus dem Internet einhergehen,<br />
bewusst. 50 Prozent sehen sich selbst als<br />
mit dem Thema „vertraut“ und behaupteten,<br />
dass sie nahezu alle möglichen<br />
Fallstricke kennen und mit ihnen umzugehen<br />
wissen. 16 Prozent gaben sogar<br />
an, Experten auf diesem Feld zu sein, die<br />
von anderen dazu gefragt werden. Die<br />
Gegenüberstellung dieser Selbsteinschätzung<br />
mit den Ergebnissen eines Quiz mit<br />
fünf Fragen zu möglichen rechtlichen<br />
Problemen bei der Wiederverwendung<br />
von Code aus dem Internet zeichnet<br />
jedoch ein anderes Bild (siehe Kasten<br />
„Lizenz-Quiz“).<br />
Selbsteinschätzung und<br />
Wirklichkeit<br />
Mehr als ein Drittel der 2009 aktiven<br />
Entwickler kam im Quiz auf weniger als<br />
die Hälfte der Punkte, und nur 3 Prozent<br />
beantworteten alle fünf Fragen korrekt.<br />
Im Durchschnitt kamen die Softwareentwickler,<br />
die sich selbst als „Sehr vertraut“<br />
mit den rechtlichen Themen bezeichnen,<br />
nur auf 3,1 von 5 Punkten (siehe Abbildung<br />
4). Für Unternehmen erscheint es<br />
darum geboten, angestellte Softwareentwickler<br />
anzuhalten, sich ihres eigenen<br />
juristischen Kenntnisstands bewusst zu
70 %<br />
60 %<br />
50 %<br />
40 %<br />
30 %<br />
20 %<br />
10 %<br />
0 %<br />
65 %<br />
Internet<br />
46 %<br />
Freunde<br />
und<br />
Kollegen<br />
33 %<br />
<strong>Magazin</strong>e<br />
Abbildung 3: Benutzte Informationsquellen zu verwendbarem Code aus dem Internet.<br />
21 %<br />
Firmen<br />
16 %<br />
Ausbildungseinrichtungen<br />
5 %<br />
Sonstige<br />
23 %<br />
N=732<br />
Kein Training<br />
oder<br />
Informationen<br />
50 %<br />
40 %<br />
30 %<br />
20 %<br />
10 %<br />
0 %<br />
Score im<br />
Quiz<br />
2 %<br />
Überhaupt<br />
nicht<br />
vertraut<br />
0,9<br />
3 %<br />
Nicht<br />
sehr<br />
vertraut<br />
1,5<br />
29 %<br />
Ein wenig<br />
vertraut<br />
50 %<br />
16 %<br />
Abbildung 4: Selbsteinschätzung der Entwicklern zu Erfahrungen<br />
bezüglich rechtlicher Nachnutzungsrisiken. Die Zeile unten gibt dagegen<br />
die erzielten Ergebnisse im Lizenz-Quiz wieder.<br />
2,1<br />
Vertraut<br />
2,7<br />
Sehr<br />
vertraut<br />
3,1<br />
N=732<br />
Reusing 12/2012<br />
Forum<br />
www.linux-magazin.de<br />
77<br />
werden und sich mit rechtlichen Themen<br />
an tatsächliche Experten zu wenden. Wie<br />
zu erwarten, haben Softwareentwickler<br />
mit Erfahrungen in öffentlichen Open-<br />
Source-Projekten einen höheren tatsächlichen<br />
Wissenstand als Kollegen ohne<br />
solche Erfahrungen.<br />
Es erscheint für Unternehmen zudem<br />
sinnvoll, klare Regeln zu definieren, wie<br />
sich ihre Entwickler bei der Wiederverwendung<br />
von Code zu verhalten haben.<br />
Von den 2009 aktiven Softwareentwicklern<br />
arbeiteten jedoch nur knapp über ein<br />
Drittel für ein Unternehmen mit solchen<br />
festen Regeln. Wie zu erwarten verfügten<br />
größere Unternehmen und Unternehmen,<br />
deren Hauptgeschäftstätigkeit die<br />
Entwicklung von Software ist, mit einer<br />
höheren Wahrscheinlichkeit über derartige<br />
Regeln als Firmen, die Software beispielsweise<br />
nur als Teil ihrer eigentlichen<br />
Hauptprodukte entwickeln.<br />
Direkt darauf angesprochen, ob sie in<br />
der Vergangenheit möglicherweise Code<br />
aus dem Internet in einer Art und Weise<br />
wiederverwendet haben, die rechtliche<br />
Risiken mit sich brachte, gaben circa 15<br />
Prozent der Befragten an, sich bereits<br />
mindestens einmal nicht ausführlich<br />
über Bedingungen des recycleten Codes<br />
informiert oder gar bekannte Ansprüche<br />
wissentlich ignoriert zu haben.<br />
Zusammenfassung<br />
Code aus dem Internet in der kommerziellen<br />
Entwicklung zu benutzen, ist ein<br />
Phänomen, das spätesten 2003 Fahrt<br />
aufgenommen hat und heute in vielen<br />
Projekten eine übliche Praxis ist. Die in<br />
diesem Artikel beleuchtete Umfrage hat<br />
ergeben, dass mehr als 50 Prozent der<br />
beruflichen Entwickler Code aus dem<br />
Internet für ihre Arbeit als „ein wenig<br />
wichtig“ für ihre Arbeit ansahen. Nur 12<br />
Prozent reagieren komplett immun gegen<br />
derartigen Code.<br />
Interessanterweise hatte nur eine kleiner<br />
Teil der Befragten während der Ausbildung<br />
oder von seinem Arbeitgeber<br />
Nutzungsinformationen zu Wiederverwendung<br />
fremden Codes erhalten. Der<br />
Großteil bezog sein Wissen aus dem Internet<br />
oder von Freunden und Kollegen.<br />
Dennoch schätzten die meisten Entwickler<br />
ihr Wissen zu Lizenzen als hoch ein<br />
– viel zu hoch, wie die Auswertung des<br />
hier vorgestellten Quiz nahe legt. Auch<br />
in den Firmen scheinen die rechtlichen<br />
Risiken, die sich beim Praktizieren des<br />
Open-Source-Basars ergeben, nicht angekommen<br />
zu sein. 2009 verfügten nur<br />
knapp ein Drittel der Unternehmen über<br />
entsprechende Regeln.<br />
Viele Unternehmen, die Software entwickeln,<br />
müssen davon ausgehen, dass<br />
ihr Code Fragmente von Code aus dem<br />
Internet enthält. Quelloffenen Code nachzunutzen<br />
hilft dabei, Software schneller<br />
und wirtschaftlicher entwickeln. Auf<br />
lange Sicht profitieren Unternehmen<br />
jedoch nur, wenn sie dabei Lizenzverletzungen<br />
unterbinden – durch Sensibilisieren<br />
und Schulen der Entwickler und<br />
indem sie eindeutige Regeln und klare<br />
Prozesse definieren. (jk)<br />
n<br />
Der Autor<br />
Dr. Manuel Sojer hat 2010 am Dr. Theo Schöller-<br />
Stiftungslehrstuhl für Technologie- und Innovationsmanagement<br />
der Technischen Universität<br />
München bei Prof. Dr. Joachim Henkel zur Wiederverwendung<br />
von Open-Source-Code promoviert.<br />
Infos<br />
[1] Black Duck Software:<br />
[http:// www. blackducksoftware. com]<br />
[2] Y. E. Kim, E. A. Stohr, „Software Reuse –<br />
Survey and Research Directions“ (1998):<br />
Journal of Management Information Systems<br />
14(4), S. 113-147<br />
[3] A. Lynex, P. J. Layzell, „Organisational<br />
Con siderations for Software Reuse“ (1998):<br />
Annals of Software Engineering 5(1), S.<br />
105-124<br />
[4] M. Sojer, „Code wiederverwenden in<br />
öffentlichen Open-Source-Projekten“:<br />
<strong>Linux</strong>-<strong>Magazin</strong> 04/12, S. 84<br />
[5] G. Schryen, „Is Open Source Security a<br />
Myth?“ (2011): Communications of the ACM<br />
54(5), S. 130-140<br />
[6] I. Stamelos, L. Angelis, A. Oikonomou,<br />
G. L. Bleris, „Code Quality Analysis in Open<br />
Source Software Development“ (2002):<br />
Information Systems Journal 12(1), S.<br />
43-60<br />
[7] M. Sojer, „Reusing Open Source Code“<br />
(2010): Gabler Verlag, Wiesbaden<br />
[8] L. Rosen, „Open Source Licensing: Software<br />
Freedom and Intellectual Property<br />
Law“ (2004): Prentice-Hall, Englewood<br />
Cliffs, NJ.<br />
[9] B. Fitzgerald, G. Bassett, „Legal Issues Relating<br />
to Free and Open Source Software“,<br />
In: B. Fitzgerald, G. Bassett (Ed.), „Legal<br />
Issues Relating to Free and Open Source<br />
Software“ (2005), Queensland University<br />
of Technology, Bisbane, QLD, S. 11-36<br />
[10] Open Source Initiative:<br />
[http:// opensource. org]<br />
[11] VMware, Inc., „Form 10-Q, Filed 08/02/12<br />
for the Period Ending 06/30/12“:<br />
[http:// ir. vmware. com/ common/ download/<br />
sec. cfm? companyid=VMW& fid=1124610‐12‐21<br />
& CIK=1124610]
Hardware<br />
www.linux-magazin.de Smart Watches 12/2012<br />
80<br />
Smart Watches: Hightech-Uhren unter <strong>Linux</strong> ansprechen<br />
Arm-Leuchter<br />
Die James Bonds der 70iger Jahre hätte es elektrisiert: Die Miniaturisierung und Computerisierung am Handgelenk<br />
feiert einen neuen Höhepunkt – mit der Klasse der Smart Watches. Acht prominente Vertreter im <strong>Linux</strong>-<br />
<strong>Magazin</strong>-Test. Nils Faerber<br />
© Nils Faerber<br />
wenige Tastendrücke von der Uhr zu<br />
empfangen. Einfache Applikationen wie<br />
SMS-Anzeige oder die Steuerung eines<br />
Musikplayers lassen sich damit durchaus<br />
realisieren, doch ist der Benutzer auf<br />
das beschränkt, was der Hersteller in der<br />
Firmware der Uhr vorgesehen hat – und<br />
das ist nicht sehr viel.<br />
Weder von Fossil noch von Sony-Ericsson<br />
gibt es eine Dokumentation zum Protokoll<br />
oder zu den AT-Befehlen, die die<br />
Uhr versteht, aber unter [1] findet sich<br />
der Ansatz einer freien Implementation<br />
einer Java-Software, um die Uhren anzusteuern<br />
– vielleicht tut sich hier doch<br />
noch etwas, um den Hackerzugriff zu<br />
ermöglichen.<br />
Neu ist er nicht, der Wunsch nach ein<br />
wenig Geheimagenten-Feeling am Handgelenk.<br />
Doch wer erinnert sich noch an<br />
die revolutionären Eigenschaften der<br />
Digitaluhren in den frühen Siebzigern?<br />
Zu den digitalen Displays gesellten sich<br />
nervtötende Piezo-Melodie-Alarme oder<br />
Stundenpiepser. Später kamen fummelige<br />
Taschenrechner oder gar ein Telefonbuch<br />
in die Armbanduhr.<br />
Mit dem Aufkommen der PDAs wie Palms<br />
Pilot oder Windows-CE-Geräten schien<br />
diese Ära jedoch bereits zu Ende zu gehen.<br />
Ein PDA konnte viel mehr, war aber<br />
auch eine Uhr, und man hatte ihn immer<br />
bei sich. Heute ist das Smartphone der<br />
immer präsente digitale Begleiter – doch<br />
es gibt sie immer noch: Smart Watches,<br />
mobile Endgeräte fürs Handgelenk, die<br />
mit Handy oder Tablet zusammenarbeiten<br />
und sich manchmal auch von <strong>Linux</strong><br />
aus hacken lassen.<br />
Dieser Artikel stellt einige Vertreter ihrem<br />
Alter nach vor (den ältesten zuerst),<br />
die Tabelle 1 vergleicht die wichtigsten<br />
Features und bewertet den Hack-Value,<br />
also ihre Eignung für den ambitionierten<br />
<strong>Linux</strong>-Bastler.<br />
E Fossil MBW<br />
Versuche, das Handgelenk für digitale<br />
Mehrzweckgeräte (zurück) zu erobern,<br />
gab es einige, die meisten scheiterten<br />
jedoch an der technischen Umsetzung.<br />
Erst die Miniaturisierung der IT machte<br />
es möglich, die digitale Funktionsfülle in<br />
eine akzeptable Form zu bekommen. Die<br />
ersten Smart Watches, die sich auch in<br />
Serienfertigung einiger Beliebtheit erfreuten,<br />
waren wohl die von Fossil für Sony-<br />
Ericsson entwickelten Blue tooth-Uhren<br />
der MBW-Serie.<br />
Die Zeitmesser kommunizieren über ein<br />
relativ einfaches Bluetooth-Rfcomm-basiertes<br />
Protokoll und AT-Kommandos mit<br />
ihrem Blauzahn-Host. Die Funktionen<br />
beschränken sich darauf, Benachrichtigungstexte<br />
zur Anzeige auf dem OLED-<br />
Display der Uhr zu bringen und einige<br />
E TI EZ430 Chronos<br />
Nach den MBW-Uhren tat sich erst mal<br />
wenig auf dem Markt der intelligenteren<br />
Armbanduhren. Gerüchte kursierten über<br />
zahlreiche, oft abstruse Ideen aus den<br />
Designabteilungen, doch keine davon<br />
erreichte den Endkunden. Fruchtbaren<br />
Boden bereitete erst ein Microcontroller-<br />
Entwicklungskit von Texas Instuments<br />
für die Low-Power-Microcontroller-Serie<br />
MSP430, die der Hersteller in der TI<br />
EZ430 Chronos (Abbildung 1, [2]) verbaut,<br />
einer klassischen digitalen Sportuhr,<br />
vollgepackt mit Sensorik.<br />
Zu dem zweizeiligen, inversen, hintergrundbeleuchtbaren<br />
7-Segment-LCD mit<br />
einigen Zusatzsymbolen kommen fünf<br />
Tasten, ein Digitaluhr-typischer Piezo-<br />
Beeper sowie Temperatur-, Luftdruckund<br />
3-Achsen-Beschleunigungs-Sensoren.<br />
Außerdem hat sie noch ein Funkmodul<br />
für die bidirektionale Kommunikation<br />
an Bord, das je nach Modell auf 433, 868<br />
oder 915 MHz sendet.
Abbildung 1: Eine Armbanduhr mit USB- und Funk-<br />
Anschluss für den PC: TI EZ430 Chronos.<br />
© Texas Instruments, CCASA 3.0<br />
Im Kit für 50 Euro ist ein passender USB-<br />
Funk-Dongle enthalten, über den der<br />
Anwender die Uhr abfragt, Daten an sie<br />
sendet und sogar Firmware-Updates einspielt.<br />
Wer dabei Pech hat, probiert ein<br />
Low-Level-Debugging mit dem ebenfalls<br />
im Kit enthaltenen USB-Dongle.<br />
Die Firmware ist bis auf einen kleinen<br />
Blob für ein spezielles Funkprotokoll<br />
komplett frei. Für <strong>Linux</strong> gibt es direkt<br />
von TI ein fertiges Paket für die Abfrage<br />
und grafische Darstellung der Sensordaten<br />
sowie das Firmware-Update. Der<br />
Firmware-Sourcecode ist für das TI Code<br />
Composer Studio (CCS) vorgesehen, das<br />
es inzwischen auch in Version 5 für <strong>Linux</strong><br />
gibt – doch kostenfrei nur als 30-Tage-<br />
Testversion. Für <strong>Linux</strong> gibt es aber auch<br />
eine freie GCC-Variante für die MSP430-<br />
Familie [3]. Damit haben Entwickler diverse<br />
Forks der Firmware [4] erstellt,<br />
auch im <strong>Linux</strong>-<strong>Magazin</strong>-Test ließ sich der<br />
Code unter <strong>Linux</strong> einwandfrei übersetzen<br />
und auf die Chronos spielen.<br />
Die Chronos ist ein spaßiges Hacker-<br />
Gadget, ein nahezu perfektes Spielzeug<br />
für Programmierer mit Interesse an Low-<br />
Power-Anwendungen, Microcontroller-<br />
Entwicklung und Funkprotokollen. Der<br />
reguläre Verkaufpreis von nur 50 Euro<br />
erleichtert den Einstieg. Einziger kleiner<br />
Nachteil ist das Display, da es sich nur<br />
um eine 7-Segment-Anzeige handelt. Die<br />
Darstellung von Text-Informationen ist<br />
damit nur sehr eingeschränkt möglich<br />
– aber nicht völlig verbaut. Hier ist die<br />
Phantasie des Entwicklers gefragt.<br />
E Sony Live View<br />
© <strong>Linux</strong>undich.de, Christoph Langner<br />
Nicht sehr lange nach der TI-Chronos<br />
kündigte Sony Ericsson etwas an, was<br />
nicht wirklich als<br />
Armbanduhr gedacht<br />
war, aber durchaus als<br />
solche dienen kann:<br />
das Live View (Abbildung<br />
2). Ein kleines,<br />
kompaktes Gerät<br />
als sekundäres und<br />
schnell verfügbares<br />
Display zum Android-<br />
Mobiltelefon, das war<br />
Sonys Idee. Das Live<br />
View verfügt dazu<br />
über ein 3,5 Zentimeter<br />
kleines, vollfarbiges OLED mit 128<br />
mal 128 Pixeln Auflösung sowie einen<br />
STM32-ARM-Cortex-M3-Controller, einen<br />
Vibrationsmotor und ein Bluetooth-<br />
Modul. Bedienen lässt es sich über zwei<br />
Hardwaretasten sowie neun kapazitive<br />
Touchfelder auf dem Display.<br />
Sonys Firmware bringt Funktionen für<br />
die Darstellung von Uhrzeit und Datum,<br />
den Aufbau von Menüs oder die Darstellung<br />
von Bitmaps auf dem gesamten Bildschirm<br />
und die Abfrage der Tasten. Über<br />
ein einfach gehaltenes Rfcomm-basiertes<br />
Bluetooth-Protokoll lassen sich allerlei<br />
Applikationen realisieren, zum Beispiel<br />
Benachrichtigungen, Anzeige von Bildern,<br />
Steuerung eines Mediaplayers und<br />
mehr. Weil der Bastler die Anzeige komplett<br />
selbst steuern sowie alle Tasten abfragen<br />
kann, eignet sich das Live View in<br />
fast beliebigen Szenarien als sekundäres<br />
Display mit Bedienmöglichkeit.<br />
Abbildung 2: Keine Uhr, eher ein Mini-Display für Androiden: Live View.<br />
Smart Watches 12/2012<br />
Hardware<br />
www.linux-magazin.de<br />
81<br />
Tabelle 1: Armbanduhren-Gadgets und ihr Hack-Value<br />
Fossil<br />
MBW<br />
TI EZ430<br />
Chronos<br />
Sony Live<br />
View<br />
Sony Smart<br />
Watch<br />
Allerta In<br />
Pulse<br />
Meta Watch<br />
Allerta<br />
Pebble<br />
I’m Watch<br />
Straßenpreis ab 50 Euro 50 Euro 30 Euro 80 Euro 150 Euro 200 Euro 150 Euro 350 Euro<br />
Anbindung<br />
Bluetooth<br />
(Rfcomm)<br />
Funk<br />
Prozessor, Speicher k.A. 20 MHz TI<br />
MSP430F6137,<br />
32 KByte Flash,<br />
4 KByte RAM<br />
Batterie<br />
Lithium-<br />
Polymer<br />
Laufzeit 5 bis 30<br />
Tage<br />
Bewertung<br />
CR2032<br />
mehrere<br />
Monate<br />
Bluetooth<br />
(Rfcomm)<br />
STM32 ARM<br />
Cortex M3,<br />
k.A. zu RAM<br />
Lithium-<br />
Polymer<br />
Bluetooth<br />
(Rfcomm)<br />
k.A.<br />
Lithium-<br />
Polymer<br />
Bluetooth<br />
(Rfcomm)<br />
Bluetooth<br />
(Rfcomm)<br />
52 MHz ARM7, 25 MHz TI<br />
32 KByte Flash, MSP430F5438,<br />
8 KByte RAM 256 KByte Flash,<br />
16 KByte RAM<br />
Lithium-<br />
Polymer<br />
2 bis 7 Tage 2 bis 7 Tage 6 bis 72 Stunden<br />
Lithium-<br />
Polymer<br />
Bluetooth<br />
k.A.<br />
Lithium-<br />
Polymer<br />
4 bis 20 Tage bis zu 7<br />
Tage<br />
Bluetooth<br />
(Rfcomm), DUN,<br />
SCO, A2DP<br />
Freescale i.MX233,<br />
128 MByte RAM,<br />
4 GByte Flash<br />
Lithium-Polymer<br />
3 bis 48 Stunden<br />
<strong>Linux</strong>-Software - +++ + – +++ ++ n. mögl. -<br />
Firmware-/Proto koll- + +++ + — ++ +++ n. mögl. -<br />
Dokumentation<br />
Hack-Value + +++ ++ + +++ +++ n. mögl. +
Hardware<br />
www.linux-magazin.de Smart Watches 12/2012<br />
82<br />
Das Kommunkationsprotokoll hat allerdings<br />
(wieder mal) nicht Sony selbst<br />
offengelegt, sondern findige Hacker haben<br />
es „reverse-engineert“ ([5], [6]).<br />
Die Methode dazu ist einfach: Live View<br />
nutzt Android-Software, um die Kommunikation<br />
abzuwickeln und vom Sony-SDK<br />
beispielsweise eigene Mini-Applikationen<br />
zu erhalten. Wer jetzt auf seinem Androiden<br />
das <strong>Linux</strong>-Tool Hcidump aus dem<br />
Bluetooth-Stack Bluez nutzt, schneidet<br />
live den Datenverkehr zwischen Telefon<br />
und Live View mit.<br />
Die Python-Implementation, die so entstanden<br />
ist, bietet laut Angaben ihres<br />
Entwicklers alle Funktionen des Protokolls,<br />
aber keine höheren. Wer also Benachrichtigungen<br />
oder Bitmaps auf das<br />
Live View übertragen möchte, muss dazu<br />
eigenen Code schreiben.<br />
Das Live View war der erste Versuch und<br />
hat nach wie vor noch ein paar Kinderkrankheiten,<br />
es läuft schlicht nicht stabil.<br />
Von Zeit zu Zeit bricht die Bluetooth-Verbindung<br />
einfach ab, manche Funktionen<br />
arbeiten nur mit Unterbrechungen.<br />
E Sony Smart Watch<br />
Kein Wunder, dass Sony bald eine neue<br />
Gerätegeneration brachte, die Smart<br />
Watch (Abbildung 3). Das Prinzip blieb<br />
etwa gleich, auch der Formfaktor, aber<br />
Soft- und Hardware hat der Hersteller<br />
deutlich verbessert. Der kapazitive<br />
Touchscreen ist jetzt vollflächig und nicht<br />
mehr in Tasten aufgeteilt. Auch erscheint<br />
das Display qualitativ etwas besser. Im<br />
Lieferumfang befindet sich auch ein<br />
Gummi-Armband, an das der Besitzer<br />
die Smart Watch mit einem Clip steckt,<br />
was jedoch etwas gewöhnungsbedürftig<br />
sperrig wirkt.<br />
Die neue Standard-Android-Software ist<br />
deutlich stabiler und umfangreicher, die<br />
Kommunikation mit der Smart Watch<br />
deutlich schneller als mit dem Live View,<br />
wodurch sogar komplexere Applikationen,<br />
etwa ein Kamerasucher, der das<br />
Live-Bild der Handykamera auf der Uhr<br />
anzeigt, halbwegs fließend laufen.<br />
Hacker werden dagegen weniger Spaß<br />
mit der Smart Watch haben. Es gibt zurzeit<br />
noch keinerlei offene Informationen<br />
zum Protokoll. Ein Test mit Hcidump<br />
zeigt nur, dass zumindest wieder ein<br />
Rfcomm-basiertes Protokoll zum Einsatz<br />
Abbildung 3: Sonys Nachfolger für das Live View, die<br />
Smart Watch, behebt viele Kinderkrankheiten.<br />
kommt. Hier ist entweder selbst Hand<br />
anzulegen oder darauf zu warten, dass<br />
andere Entwickler das Reverse Engineering<br />
erfolgreich bewerkstelligen.<br />
E Allerta In Pulse<br />
Aus Kanada stammt das Startup Allerta,<br />
das Anfang 2010 seine smarte Uhr auf<br />
den Markt brachte. Die In Pulse hat,<br />
ähnlich wie die Live View oder Smart<br />
Watch, ein vollfarbiges OLED-Display mit<br />
einer Auflösung von 96 mal 128 Pixeln,<br />
das ein 52-MHz-ARM7-SoC ansteuert. Es<br />
lässt sich ebenfalls per Bluetooth an Mobiltelefon<br />
oder PC anbinden (Abbildung<br />
4 sowie [7], [8]).<br />
Die In Pulse richtet sich aber von vornherein<br />
an interessierte Geeks und Hacker<br />
mit einem Hang zu Kreativität und<br />
Experimentierfreude. Ein SDK für die<br />
Anwendungsentwicklung gibt es sowohl<br />
für Windows und Mac als auch <strong>Linux</strong>.<br />
Eigene Applikationen greifen über das<br />
In-Pulse-API auf die Funktionen der Uhr<br />
zu – Grafiken anzeigen, den einzigen<br />
Bedienknopf abfragen, Bluetooth-Nachrichten<br />
senden oder empfangen, alles<br />
kein Problem. Mit einem kleinen GTK+basierten<br />
Simulator testet der Anwender<br />
gar die eigene Applikation, bevor er sie<br />
für die ARM-CPU cross-kompiliert. Auf<br />
der Webseite zur In Pulse findet sich<br />
bereits eine ganze Reihe verrückter Applikationsbeispiele<br />
[9] – bis hin zu einer<br />
Art Doom-Spiel.<br />
Die meisten Applikationen drehen sich<br />
aber eher um die Zusammenarbeit mit<br />
den von Allerta bereitgestellten Smartphone-Applikationen<br />
für Android, I-OS<br />
und Blackberry, etwa das Anzeigen von<br />
Nachrichten, Anrufen, Wetter- und Börsendaten.<br />
Weil der Hersteller die Applikationsentwicklung<br />
sehr einfach macht,<br />
ist das kleine Gerät ein nahezu perfektes<br />
Spielzeug für Programmierer.<br />
Aber ein paar Schönheitsfehler bleiben:<br />
Leider ist der verfügbare Sourcecode<br />
wirklich nur der der Applikationen. Die<br />
Firmware selbst, obwohl sie den freien<br />
Embedded-Bluetooth-Stack [10] verwendet,<br />
ist nur als binär vorkompilierte Bibliothek<br />
in dem SDK-Paket vorhanden.<br />
Auch gibt es zu dem Protokoll zwischen<br />
Uhr und Host-Werkzeugen leider nur eingeschränkte<br />
Dokumentationen.<br />
E Meta Watch<br />
Ursprünglich ein gemeinsames Projekt<br />
von Fossil und Texas Instruments, lässt<br />
Abbildung 4: Zielgruppe sind Hacker und Geeks: Die Allerta In Pulse und ihr Nachfolger Pebble.<br />
© Sony
sich die Meta Watch (Abbildung 5, [11])<br />
durchaus als Kind der TI EZ430 ansehen.<br />
Die Idee einer offenen Smart Watch hatte<br />
Fossil schon länger, doch zum Produkt<br />
gedieh sie erst, als die Chronos alle Verkaufserwartungen<br />
übertraf.<br />
Die Meta Watch nutzt ein Referenzdesign<br />
für Low-Power-Bluetooth-Anwendungen<br />
von Texas Instruments mit einem MSP-<br />
430F5438-Microcontroller und dem TI CC-<br />
2560-Low-Power-Blue tooth-Modul. Die<br />
Uhr kombiniert sechs Tasten, einen Vibrationsmotor<br />
und einen Drei-Achsen-Beschleunigungssensor<br />
mit einem bemerkenswerten<br />
Display – ein monochromes<br />
Sharp Polymer Networked Liquid Crystal<br />
(PNLC, [12]) mit 96 mal 96 Pixeln.<br />
Diese Anzeigen verwenden im Gegensatz<br />
zu normalen LCDs keine Polarisationsfilter:<br />
Die Pixel sind entweder voll<br />
transparent oder diffus. Auf der Rückseite<br />
des Displays befindet sich ein Vollspiegel<br />
als Reflektor. Das Resultat ist ein zwar<br />
nicht immer optimal ablesbares, aber<br />
einzigartiges Display mit sehr geringem<br />
Stromverbrauch.<br />
Neben der digitalen Version gab es die<br />
Meta Watch auch als analoge Variante<br />
mit elektromechanischem Uhrwerk und<br />
zwei OLED-Displays mit je 96 mal 16 Pixeln<br />
Auflösung. Diese Uhren hat der Hersteller<br />
jedoch bald wieder aufgegeben, da<br />
die Nachfrage zu gering war.<br />
Auch die Meta Watch ist eher für interessierte<br />
Hacker und weniger für Endkunden<br />
gedacht. Zwar<br />
bringt sie eine fertige<br />
Firmware mit Android-<br />
Smartphone-Applikationen,<br />
etwa zur Anzeige<br />
von Wetterdaten,<br />
Anrufen und Nachrichten<br />
mit, doch erweist<br />
sich die Software<br />
insgesamt als eher rudimentär.<br />
Kommunikationsprotokoll,<br />
Android-Applikation<br />
und Firmware<br />
sind sogar unter einer<br />
modifizierten Apache-<br />
Lizenz via Github [13]<br />
erhältlich. Leider ist<br />
der Bluetooth-Stack<br />
nicht frei, sondern nur als proprietäre<br />
Bibliothek zusammen mit dem Firmware-<br />
Sourcecode erhältlich. Daher lässt sich<br />
die Firmware nicht ohne Weiteres mit<br />
freien Werkzeugen übersetzen, was die<br />
Arbeit mit <strong>Linux</strong> erschwert.<br />
Die ersten Versionen der Meta-Watch-<br />
Firmware waren ausschließlich mit der<br />
IAR-Compilersuite unter Windows übersetzbar.<br />
Seit gut einem halben Jahr jedoch<br />
ist der Firmwarecode auch für das TI<br />
Code Composer Studio 5 [14] verfügbar,<br />
das es seit fast dem gleichem Zeitpunkt<br />
auch für <strong>Linux</strong> gibt. Der Hersteller gibt<br />
interessierten Meta-Watch-Entwicklern<br />
sogar kostenlose CCS5-Lizenzen.<br />
Abbildung 5: Die Meta Watch gibt es als digitale und als – inzwischen eingestellte<br />
– analoge Variante.<br />
Mit im Paket der Meta Watch enthalten ist<br />
ein Micro-USB-Ladeclip. Er enthält auch<br />
ein vollständiges Hardware-Debugging-<br />
Interface, mit dem Hacker den Controller<br />
mit neuer Firmware bespielen oder debuggen.<br />
Mit freien Werkzeugen war das<br />
bisher schwierig, weil der MSP430-GCC<br />
den erweiterten 20-Bit-Adressierungsmodus<br />
für den Zugriff oberhalb von 64<br />
KByte nicht unterstützte. Mit einem Bluetooth-Stack<br />
sind 64 KByte allerdings sehr<br />
wenig, vor allem wenn der Entwickler ein<br />
LCD ansteuern will. Doch auch dieses<br />
Problem ist gelöst und so steht einem<br />
freien Firmwareprojekt auf Basis von BT-<br />
Stack nichts im Wege.<br />
© Texas Instruments, CCASA 3.0<br />
Smart Watches 12/2012<br />
Hardware<br />
www.linux-magazin.de<br />
83<br />
Alles zum ThemA Android<br />
Die Monatszeitschrift für Android-Fans, Smartphone- und Tablet-Nutzer<br />
DigisuB: nur 39,90 €<br />
im Jahr (12 PDFs)<br />
Neu!<br />
Jetzt bestellen unter:<br />
www.android–user.de/digisub<br />
Telefon 07131 / 2707 274 • Fax 07131 / 2707 78 601 • E-Mail: abo@android-user.de<br />
+ Lesen Sie News<br />
und Artikel schon<br />
1 Woche vor dem<br />
Kiosk-Termin!
Hardware<br />
www.linux-magazin.de Smart Watches 12/2012<br />
84<br />
Die Chancen für aktive Beteiligung stehen<br />
nicht schlecht: Inzwischen hat sich<br />
Fossil von dem Projekt getrennt und es<br />
in eine separate Firma mit Sitz in Espoo<br />
(Finnland) und Dallas (Texas, USA) ausgelagert,<br />
die sich auch über Kickstarter<br />
finanzieren will. Vor gut drei Monaten<br />
haben die Hersteller die nächste Generation<br />
der Meta Watch namens Strata<br />
angekündigt. Dem Vernehmen nach wird<br />
die Hardware praktisch identisch bleiben,<br />
nur das Bluetooth-Modul wird gegen das<br />
CC2564 mit Bluetooth Low Energy 4.0<br />
(BLE) ausgetauscht.<br />
E Allerta Pebble<br />
Die Pebble [15]) ist, ohne Übertreibung,<br />
die zurzeit wohl bekannteste Smart<br />
Watch, obwohl sie noch gar nicht verfügbar<br />
ist. Pebble ist Allertas Nachfolgeprojekt<br />
für die In Pulse und sollte über<br />
Kickstarter mit 100 000 Dollar finanziert<br />
werden. Das Ergebnis war überwältigend<br />
(Abbildung 6): Mehr als 10 Millionen<br />
Dollar machten Pebble zum mit Abstand<br />
erfolgreichsten Kickstarter-Projekt aller<br />
Zeiten, obwohl kaum Details zur Hardware<br />
bisher bekannt sind [16].<br />
Die wenigen verfügbaren Spezifikationen<br />
machen neugierig: ein 144 mal 168 Pixel<br />
großes Schwarz-Weiß-Display, angeblich<br />
ein E-Paper-Display. Die Kommunikation<br />
mit der Außenwelt erfolgt über Bluetooth<br />
2.1+ mit EDR sowie 4.0 mit BLE, die<br />
Bedienung über vier Knöpfe, Vibrationsmotor,<br />
ein Drei-Achsen-Beschleunigungssensor<br />
für die Gestenerkennung.<br />
Allein über die verwendete CPU und den<br />
ihr zur Seite gestellten Speicher ist noch<br />
nichts bekannt. Die Batterielaufzeit wird<br />
laut Hersteller eine Woche erreichen. Bei<br />
Verkaufsstart soll Software für die üblichen<br />
Mobiltelefone (Android, I-OS und<br />
Blackberry) verfügbar sein. Wie für die<br />
In Pulse soll es wieder ein SDK zur Applikationsentwicklung<br />
geben [17]. Die<br />
Open-Source-Strategie ist noch unklar.<br />
Abbildung 6: 10 Millionen Dollar via Crowdfunfing: Pebble ist das bisher erfolgreichste Kickstarter-Projekt.<br />
dann im August ein Paket, doch mit dem<br />
falschen Modell. Wieder endlose Ticket-<br />
Mails, eine Rücksendung zum Hersteller<br />
und lange Wartezeiten – bis zum Redaktionsschluss<br />
ohne Erfolg.<br />
Die Firma hinter I’m Watch macht jedoch<br />
einen sehr geschäftstüchtigen Eindruck.<br />
Applikationen, Mitgliedschaft als Entwickler<br />
(rund 100 Euro pro Jahr, um an<br />
das SDK zu kommen), Musikdienste und<br />
mehr. Ein Schelm, wer da auf den Gedanken<br />
kommt, nicht nur das „I“ im Produktnamen<br />
erinnere an Apple. Von freier<br />
Software, dem <strong>Linux</strong>-Kernel oder Android<br />
spricht der Hersteller nirgendwo. Und die<br />
Preisspanne der Uhren erweist sich als<br />
erstaunlich: 350 bis 15 000 Euro dürfen<br />
Käufer hinlegen. Einziger Unterschied<br />
zwischen den Modellen ist das Design<br />
von Gehäuse und Armband.<br />
Ähnlich zu beeindrucken wissen die<br />
Funktionen der Uhr (Abbildung 8), deeiner<br />
stilvollen italienischen Armbanduhr<br />
bringt. Als Motor dient ein Freescale<br />
i.MX233 ARM9 SoC mit 128 MByte RAM<br />
und 4 GByte Flash-Speicher [19]. Das<br />
macht die I’m Watch zur ersten in Serie<br />
gefertigten <strong>Linux</strong>-Armbanduhr, die entsprechende<br />
Ankündigung dazu gab’s im<br />
Herbst 2011, erste Prototypen auf der CES<br />
in Las Vegas im Januar 2012.<br />
Und die tragische Seite: Für Endkunden,<br />
die wie der Autor dieses Artikels bereits<br />
im Dezember 2011 bestellt (und bezahlt)<br />
hatten, dauerte es bis Ende August 2012,<br />
bis eine Lieferung kommen sollte. Rückfragen<br />
übers eigens eingerichtete Ticketsystem<br />
blieben unbeantwortet, dafür<br />
gestaltete der Hersteller seine Webseite<br />
samt Shopsystem mehrfach neu und änderte<br />
die Produktpalette.<br />
Nur zähe Verhandlungen ermöglichten<br />
eine Änderung der Bestellung in die für<br />
eines der neuen Modelle. Endlich kam<br />
E I’m Watch<br />
Zum Schluss das wohl tragisch-spannendste<br />
Projekt: die I’m Watch (Abbildung<br />
7, [18]) aus Italien. Spannend ist<br />
es, weil es ein komplettes Android-System<br />
mit kapazitivem Touchscreen und TFT-<br />
Display (240 mal 240 Pixel) in die Form<br />
Abbildung 7: Dank Android ist die schicke I’m Watch die erste in Serie gefertige <strong>Linux</strong>-Armbanduhr.
© Nils Faerber<br />
www.linux-magazin.de<br />
Smart Watches 12/2012<br />
Hardware<br />
85<br />
Abbildung 8: Ein vollständiges Android mit vielen Funktionen, Audio-Ein- und Ausgang, Bluetooth-Tethering via Smartphone und vieles mehr bietet die I’m Watch für<br />
viel Geld. Überhaupt scheint man zahlungskräftige Käufer zu adressieren: Fast alles hat seinen Preis, selbst Onlinedienste oder das Entwicklerdasein.<br />
ren Design erfahrenen Android-Anwendern<br />
sehr bekannt vorkommen wird.<br />
Über den eingebauten Lautsprecher oder<br />
einen 3,5-Millimeter-Klinkenstecker gibt<br />
die Uhr direkt Musik wieder, aus ihrem<br />
4 GByte großen Speicher und mit sehr<br />
guter Qualität. Via Bluetooth-Tethering<br />
kann sie selbstständig Daten aus dem<br />
Internet ziehen. Die eingebauten Applikationen<br />
verwenden dazu jedoch die I’m-<br />
Cloud, einen Dienst von I’m Watch, zu<br />
dem sich der Besitzer der Uhr anmelden<br />
muss, denn ohne ihn geht nicht viel mit<br />
dem schicken Accessoire.<br />
Zusammen mit dem Mobiltelefon wird<br />
die I’m Watch auch zum Bluetooth-<br />
Headset – mit eingebautem Mikrofon und<br />
Lautsprecher, ganz wie die berühmte Uhr<br />
des Comic-Helden Dick Tracy. Über das<br />
Touchdisplay des Chronometers lassen<br />
sich Kontakte anwählen oder Rufnummern<br />
direkt eingeben. Der Telefonbuch-<br />
Abgleich findet via Google und I’m-Cloud<br />
statt, nicht etwa über Bluetooth PBAP<br />
(Phone Book Access Profile), was Datenschützern<br />
sicher lieber wäre.<br />
Eine neuere Firmware landet einfach per<br />
USB-Dateitransfer auf der Uhr. Diese Aktualisierung<br />
ist auch immer wieder bitter<br />
nötig, denn die Software ist noch alles<br />
andere als stabil und ausgereift. Informationen<br />
über den Inhalt der Firmware oder<br />
wie sich diese anpassen ließe, gibt es von<br />
I’m Watch nicht.<br />
Für den Programmierer bleibt also nur<br />
der Zugang zur Uhr über das Android-<br />
SDK und selbst entwickelte Android-<br />
Applikationen, die er dann über den I’m-<br />
Market, dem eigenen Applikations-Shop<br />
von I’m Watch, installiert. Ob und wie<br />
der stolze Besitzer auch Applikationen<br />
außerhalb des I’m-Market installieren<br />
kann, ist bisher nicht bekannt.<br />
Der Hack-Value ist daher ambivalent.<br />
Mit viel Enthusiasmus lässt sich die I’m<br />
Watch aber sicherlich aus dem Kommerz-<br />
Universum des Herstellers befreien. Die<br />
Hardware um den i.MX233 SoC ist kein<br />
Mysterium, den <strong>Linux</strong>-Kernel-Sourcecode<br />
sollte I’m Watch spätestens dann, wenn<br />
genügend Anwälte vor der Tür stehen,<br />
herausgeben müssen. So befreit hätte die<br />
I’m Watch das Zeug dazu, eines der faszinierendsten<br />
Gadgets zu werden, wenn<br />
auch ein sehr teueres.<br />
Unaufdringlich, aber<br />
leistungsstark<br />
Smart Watches können in <strong>Linux</strong>-Kreisen<br />
durchaus eine Renaissance der digitalen<br />
Armbanduhren einläuten. Nachdem die<br />
Mobiltelefone zuerst immer kleiner wurden<br />
und mit dem Aufkommen von Smartphones<br />
wieder wachsen, ist sicherlich<br />
Platz für Hilfsmittel, die Informationen<br />
des Telefons einfach, unaufdringlich,<br />
schnell und immer verfügbar anzeigen.<br />
Immer leistungsfähigere, aber dennoch<br />
stromsparende Microcontroller sowie die<br />
Miniaturisierung selbst komplexer Funktechnologie<br />
wie Bluetooth machen Smart<br />
Watches erst möglich. Diese Entwicklung<br />
hat gerade erst begonnen. (mfe) n<br />
Infos<br />
[1] Java-Implementierung des MBW-Protokolls:<br />
[http:// sourceforge. net/ projects/<br />
jbtwatch/]<br />
[2] Texas Instruments EZ430 Chronos:<br />
[http:// www. ti. com/ tool/ ez430‐chronos]<br />
[3] MSP430-GCC:<br />
[http:// mspgcc. sourceforge. net]<br />
[4] Chronos Firmware-Quellen für MSP-GCC:<br />
[https:// github. com/ psehorne/<br />
eZChronos],<br />
[https:// github. com/ poelzi/ OpenChronos]<br />
[5] Live View Protocoll: [http:// code. google.<br />
com/ p/ adqmisc/ source/ browse/ # svn%2<br />
Ftrunk%2Fliveview]<br />
[6] Open Live View – freie Re-Implementierung<br />
für Android: [https:// github. com/<br />
pedronveloso/ OpenLiveView]<br />
[7] Offizielle In-Pulse-Webseite:<br />
[http:// www. getinpulse. com]<br />
[8] Inoffizielle In-Pulse-Webseite:<br />
[http:// www. inpulsewatch. com]<br />
[9] In-Pulse-Applikationen:<br />
[http:// www. getinpulse. com/ apps/]<br />
[10] Freier Embedded-BT-Stack:<br />
[http:// code. google. com/ p/ btstack/]<br />
[11] Meta Watch: [http:// www. metwatch. org]<br />
[12] Sharp-Polymer-Display:<br />
[http:// www. sharpmemorylcd. com/<br />
aboutmemorylcd. html]<br />
[13] Firmware-Sourcecode:<br />
[https:// github. com/ MetaWatchOpen<br />
Projects/ MetaWatch‐WDS11x]<br />
[14] Get Pebble: [http://processors.wiki.<br />
ti.com/index.php/Category:Code_<br />
Composer_Studio_v5]<br />
[15] Get Pebble: [http:// www. getpebble. com]<br />
[16] Rekordhalter Pebble auf Kickstarter:<br />
[http:// www. kickstarter. com/ projects/<br />
597507018/ pebble‐e‐paper‐watch‐for<br />
‐iphone‐and‐android]<br />
[17] Pebble-SDK-Blog:<br />
[http:// www. getpebble. com/ blog]<br />
[18] I’m Watch: [http:// www. imwatch. it]<br />
[19] Technische Daten der I’m Watch:<br />
[http:// www. imwatch. it/ de‐de/<br />
smartwatch/ color_alu/ tech_spec]
Know-how<br />
www.linux-magazin.de Kern-Technik 12/2012<br />
88<br />
Kernel- und Treiberprogrammierung mit dem <strong>Linux</strong>-Kernel – Folge 65<br />
Kern-Technik<br />
Wer mit <strong>Linux</strong> zu tun hat, sieht sich realen, virtuellen oder Boot-Konsolen gegenüber, begegnet klassischen,<br />
Pseudo- oder auch Controlling-Terminals. Die Kern-Technik bringt Ordnung in die babylonische Sprachverwirrung<br />
und zeigt, wie man einen eigenen Terminaltreiber schreibt. Jürgen Quade, Eva-Katharina Kunst<br />
© psdesign1, Fotolia<br />
65<br />
Als Unix-Rechner noch Schrankgröße<br />
hatten, liefen die Ein- und Ausgaben über<br />
Terminals. Ein Terminal, etwa das VT100<br />
von Digital Equipment (DEC), bestand<br />
aus einer Tastatur und einem Monitor,<br />
der nur Text in grüner Schrift auf dunklem<br />
Hintergrund darstellte. Es war per serieller<br />
Schnittstelle mit dem eigentlichen<br />
Rechner verbunden. Als Multiuser-Systeme<br />
konnten Unix-Rechner meist mehrere<br />
Terminals bedienen, wobei jenes, das<br />
direkt beim Rechner stand und Boot- und<br />
sonstige Systemnachrichten anzeigte, als<br />
Konsole bezeichnet wurde [1].<br />
Moderne <strong>Linux</strong>-Systeme passen längst in<br />
unsere Hosentaschen und eine serielle<br />
Schnittstelle zum Anschluss eines VT100<br />
sucht man am Gehäuse vergebens. Auch<br />
wenn das klassische Terminal also ausgedient<br />
hat, starten Profis direkt nach<br />
dem Hochfahren von X-Window und<br />
dem Login etwas, das<br />
sie ebenfalls Terminal<br />
nennen, um textbasiert<br />
schnell mit dem<br />
System zu kommunizieren.<br />
Allerdings handelt es<br />
sich bei diesem Terminal<br />
nicht mehr um<br />
Hardware, sondern<br />
um Software. Unabhängig<br />
von der Realisierungsform<br />
ist das<br />
Konzept des Terminals<br />
aber auch heute<br />
noch zentraler und<br />
zeitgemäßer Bestandteil<br />
eines Unix- beziehungsweise<br />
<strong>Linux</strong>-<br />
Systems. Dabei findet<br />
sich <strong>Linux</strong> auch in<br />
vielen Embedded-Geräten,<br />
die weder einen Tastaturanschluss<br />
noch eine Grafikkarte aufweisen.<br />
Terminal per VGA<br />
Jedes <strong>Linux</strong>-System besitzt eine Gerätedatei<br />
namens »/dev/console«, und jede<br />
Applikation hat die Möglichkeit und das<br />
Recht, »/dev/tty« zu öffnen. Das Gerät<br />
»/dev/console« repräsentiert die klassische<br />
Konsole, manchmal auch als Systemkonsole<br />
bezeichnet. Sie dient dazu,<br />
Textmeldungen des Betriebssystems<br />
entgegenzunehmen, beispielsweise die<br />
Bootmessages.<br />
Ubuntu <strong>Linux</strong> etwa leitet die Meldungen<br />
standardmäßig auf das erste virtuelle<br />
Terminal um. „Virtuell“ deutet<br />
schon an: Das Terminal wird emuliert.<br />
Insbesondere die (textbasierten) Ausgaben<br />
werden per Treibersoftware über die<br />
eingebaute Grafikkarte (VGA) auf den<br />
Monitor gezaubert. Auf diese Art stellt<br />
<strong>Linux</strong> sogar mehrere virtuelle Terminals<br />
zur Verfügung, repräsentiert als Gerätedateien<br />
»/dev/ttyn«. Die Zahl n steht für<br />
die Nummer des Terminals, typischerweise<br />
zwischen 1 und 6.<br />
Die virtuellen Terminals lassen sich über<br />
das gleichzeitige Drücken der Tasten<br />
[Strg]+[Alt]+[Fn] aktivieren. Daraufhin<br />
erscheinen die zugehörigen Ausgaben auf<br />
dem Bildschirm und die Tastatureingaben<br />
bekommen jene Applikationen weitergereicht,<br />
die lesend auf das Terminal<br />
zugreifen. In den meisten Fällen ist dies<br />
der Prozess »getty«, der den Benutzer<br />
auch nach seinem Login-Namen und<br />
dem Passwort fragt und in dessen Folge<br />
die Login-Shell startet.<br />
Eine noch weiter gehende Entkopplung<br />
zwischen Applikation und Hardware<br />
realisieren die Pseudoterminals (»pty«).<br />
Sie ermöglichen es einer Applikation wie<br />
etwa Telnet oder SSH, Texte gewohnt einfach<br />
sogar über Rechnergrenzen hinweg<br />
auszugeben. Aber auch die gängigen Terminalprogramme<br />
für X11 wie Gnome-Terminal<br />
oder das gute alte Xterm basieren<br />
auf den aus Master und Slave bestehenden<br />
Pseudoterminals.<br />
Ein Programm wie Xterm öffnet dabei<br />
zunächst die Gerätedatei »/dev/pts/<br />
ptmx«. Der Kernel erstellt daraufhin ein<br />
neues Slave-Device »/dev/pts/n«, wobei<br />
n eine laufende Nummerierung darstellt.<br />
Nach entsprechender Initialisierung repräsentiert<br />
das neue Slave-Device eine<br />
Terminalschnittstelle, die die nun gestartete<br />
Shell mitgegeben bekommt (siehe<br />
Abbildung 1).<br />
Eingaben von der Tastatur reicht der X-<br />
Server bei dieser Architektur per X11-Protokoll<br />
an Xterm weiter, das die Daten auf
das Master-Interface schreibt. Der Kernel<br />
übergibt die Daten dann inklusive der<br />
Zwischenverarbeitung dem Slave-Device<br />
und damit der Shell. Der Rückweg, also<br />
die Ausgabe, vollzieht sich analog.<br />
»/dev/pts/n«<br />
Shell Xterm X11<br />
X-Server<br />
»dev/pts/ptmx«<br />
Keyboard<br />
Grafik<br />
Framebuffer<br />
Kern-Technik 12/2012<br />
Know-how<br />
Zeilen-Disziplin<br />
Slave<br />
Bisher blieb unerwähnt, dass die Zwischenverarbeitung<br />
ein wesentliches<br />
Feature der Terminalschnittstelle bereitstellt.<br />
Das Besondere an einem Terminal<br />
ist nämlich, dass es die Eingaben nicht<br />
einfach so an den lesend zugreifenden<br />
Prozess weiterleitet. Vielmehr findet eine<br />
Interpretation der Daten statt. Tauchen<br />
im Datenstrom etwa die Zeichen für<br />
[Strg]+[C] auf, bekommt der lesende<br />
Prozess das Signal »SIGINT« übermittelt,<br />
woraufhin die meisten Tasks abbrechen.<br />
Einen Linefeed (»\n«, »0x0a«) ersetzt<br />
das Terminal durch Carriage Return plus<br />
Linefeed (»\r\n«, »0x0d 0x0a«).<br />
Bei einem Terminal – gleichgültig ob<br />
real, virtuell oder pseudo – greift eine<br />
Applikation also immer über diese Zwischenschicht<br />
zu, die sich Line Discipline<br />
nennt. Durch Austauschen kann sie sogar<br />
je nach Anwendungsfall neben der normalen<br />
Terminalfunktionalität auch noch<br />
Übertragungsprotokolle wie SLIP oder<br />
PPP realisieren.<br />
Diese Zwischenschicht ist darüber hinaus<br />
über die so genannten Terminalsettings<br />
(Termios) noch in weiten Bereichen<br />
konfigurierbar. Gibt der Anwender auf<br />
der Kommandozeile etwa »stty« ein, bekommt<br />
er die gerade aktuellen Terminalsettings<br />
angezeigt (siehe Abbildung<br />
4). Mit dem gleichen Kommando lassen<br />
sich diese auch verändern, um damit<br />
beispielsweise das Echo der Eingaben<br />
ein- oder auszuschalten oder die Übertragungsgeschwindigkeit<br />
einer seriellen<br />
Schnittstelle zu ändern.<br />
Die immer wieder hilfreiche und oft blind<br />
eingetippte Variante »stty sane« überführt<br />
übrigens ein „verwirrtes“ Terminal, bei<br />
dem alle Zeichen durcheinandergeraten<br />
sind, wieder in seinen normalen „gesunden“<br />
Zustand.<br />
Damit ergibt sich im Kernel der in Abbildung<br />
2 dargestellte dreischichtige Aufbau.<br />
Oben sitzt das TTY-Core-System,<br />
über das der Anwender beziehungsweise<br />
die Anwendung auf die Daten des Keyboards<br />
zugreift und Daten auf den Bildschirm<br />
ausgibt. Das TTY-Core schleift die<br />
Daten durch die Line-Discipline-Schicht<br />
(»ldisc«) und diese wiederum holt die Daten<br />
beziehungsweise gibt die Daten weiter<br />
über den TTY-Treiber. Dieser Treiber<br />
ist für die Ein- und Ausgabe, beispielsweise<br />
über eine Hardware, zuständig. Mit<br />
Hilfe des Kommandos<br />
cat /proc/tty/drivers<br />
Master<br />
lässt sich anzeigen, welche TTY-Treiber<br />
zurzeit aktiv und über welche Gerätenummern<br />
sie zu erreichen sind.<br />
Gerade bei der Portierung von <strong>Linux</strong><br />
auf eine neue Hardwareplattform kann<br />
es notwendig sein, einen eigenen TTY-<br />
Treiber zu schreiben. Solange man nicht<br />
außergewöhnliche Anforderungen oder<br />
eine komplexe Hardware bedienen muss,<br />
ist das auch vergleichsweise leicht zu<br />
bewerkstelligen.<br />
Aufgabe des TTY-Treibers ist es, Daten<br />
zwischen der realen oder virtuellen Terminalhardware<br />
(Ein-/Ausgabeport) und<br />
der Line Discipline auszutauschen. Daten<br />
von der Terminalhardware – einer Tastatur<br />
beispielsweise – erhält die Line-Discipline-Schicht<br />
durch den TTY-Treiber mit<br />
Hilfe eines Speicherbuffers. Zur Ausgabe<br />
ruft die Zwischenschicht eine Schreibfunktion<br />
des Treibers auf. Zusätzlich<br />
Hardware<br />
Abbildung 1: Pseudoterminals ermöglichen es, Applikation und Terminalhardware zu entkoppeln.<br />
klassisches Terminal,<br />
z.B. VT 100 (1978)<br />
textbasierte Daten<br />
Shell<br />
Konsolentreiber<br />
sind die Funktionen »tty_open()« und<br />
»tty_close()« erforderlich.<br />
Schließen auf Befehl<br />
»dev/ttyn«<br />
TTY-Core<br />
Line Discipline<br />
TTY-Treiber<br />
Hardware<br />
Applikation<br />
Im Rahmen der »tty_open()«-Funktion<br />
erhält der TTY-Treiber den eigentlichen<br />
Ein-/Ausgabeport, repräsentiert durch<br />
die Adresse der zugehörigen Datenstruktur<br />
»struct tty_struct«. Innerhalb dieser<br />
Funktion kann der Code unter anderem<br />
eine Hardware-Initialisierung ausführen.<br />
Je nach Erfolg gibt die Funktion 0 oder<br />
einen Fehlercode zurück. Anders als bei<br />
normalen Treibern wird aber die Funktion<br />
»tty_close()« in jedem Fall aufgerufen,<br />
also auch dann, wenn »tty_open()«<br />
negativ quittiert wurde.<br />
Die Funktion »tty_write()« kommt zum<br />
Aufruf, sobald die Line-Discipline-<br />
Schicht Daten zur Ausgabe parat hat.<br />
Parameter der Funktion ist mit der »struct<br />
tty_struct« ebenfalls wieder das ausgewählte<br />
Ausgabe-Interface. Die Funktion<br />
»tty_write()« gibt die Daten an die Hardware<br />
weiter. Da manche Terminalhardware<br />
langsam ist, kann das durchaus<br />
asynchron realisiert sein.<br />
Um sicherzugehen, dass sich sämtliche<br />
Daten auch schreiben lassen, erwartet<br />
das TTY-Core zusätzlich noch die Me-<br />
UART-<br />
Treiber<br />
einheitliche Schnittstelle<br />
Interpretation von Steuerzeichen<br />
Low-Level-Treiber<br />
Treiber für serielle <strong>Schnittstellen</strong><br />
Abbildung 2: Aufgaben des TTY-Subsystems sind die Interpretation und Modifikation ausgetauschter Daten.<br />
www.linux-magazin.de<br />
89
Know-how<br />
www.linux-magazin.de Kern-Technik 12/2012<br />
90<br />
thode »tty_write_room()«. Diese gibt jene<br />
Anzahl Bytes zurück, die beim nächsten<br />
Aufruf von »tty_write()« geschrieben<br />
werden können.<br />
Nimmt die Terminalhardware Daten<br />
entgegen, bekommt das TTY-Core diese<br />
asynchron übergeben. Eine »tty_read()«-<br />
Methode, die das TTY-Core aufruft,<br />
ist nicht erforderlich. Vielmehr ist der<br />
Datentransport von der Terminalhardware<br />
hin zum Core über gemeinsame<br />
Speicherbereiche, die TTY-Buffer, früher<br />
auch Flip-Buffer genannt, realisiert<br />
(Abbildung 3). Die Empfangsfunktion<br />
nimmt die Daten entgegen und legt sie<br />
mit den entsprechenden Funktionen in<br />
die TTY-Buffer. Danach informiert sie<br />
das TTY-Core durch Aufruf der Funktion<br />
»tty_flip_buffer_push()«. Nach Analyse<br />
durch die Line Discipline reicht <strong>Linux</strong><br />
die eventuell modifizierten Daten an eine<br />
Applikation weiter.<br />
Als Letztes bleibt noch die Integration des<br />
TTY-Treibers in den Kernel übrig. Hierzu<br />
muss der Programmierer die Datenstruktur<br />
»struct tty_driver« geeignet initialisieren<br />
und dem Terminal-Subsystem übergeben.<br />
Dabei muss er den Namen des<br />
Treibers, die zugehörigen Gerätedateien,<br />
den Treibertyp, Terminalsettings und natürlich<br />
die Adressen der Treiberfunktionen<br />
spezifizieren.<br />
Die Angabe einer Gerätenummer (Major-<br />
und Minor-Nummer) ist nicht unbedingt<br />
notwendig; fehlt sie, lässt sich<br />
das Terminal-Subsystem eine vom Kernel<br />
aushändigen. Ist die Datenstruktur initialisiert,<br />
übergibt die Funktion »tty_register_driver()«<br />
sie dem Kernel.<br />
Platz im Puffer<br />
Listing 1 zeigt einen einfachen TTY-Treiber.<br />
In Ermangelung realer Terminalhardware<br />
gibt der Treiber die zu schreibenden<br />
Daten im Syslog als Hexwerte aus. Daher<br />
braucht er auch keine Daten zwischenzuspeichern,<br />
sodass die Funktion<br />
»tty_write_room()« einen festen Wert für<br />
den verbleibenden Speicherplatz zurückgeben<br />
kann. Ein High-Resolution-Timer<br />
[2] emuliert die Tastatur, indem er alle<br />
2 Sekunden so tut, als hätte jemand den<br />
Text »Hi« eingetippt. Um bei parallelen<br />
Listing 1: Basisfunktionen eines TTY-Treibers (»tty_sample.c«)<br />
001 #include <br />
002 #include <br />
003 #include <br />
004 #include <br />
005 #include <br />
006 <br />
007 static struct tty_driver *tty_sample_driver;<br />
008 static struct tty_struct *tty_sample;<br />
009 static ktime_t fireup_time;<br />
010 static struct hrtimer emu_kbd_desc;<br />
011 static atomic_t access_count =<br />
ATOMIC_INIT(‐1);<br />
012 <br />
013 static enum hrtimer_restart emu_keyboard(<br />
struct hrtimer *hrt )<br />
014 {<br />
015 hrtimer_forward_now( &emu_kbd_desc,<br />
ktime_set(1,0) );<br />
016 tty_insert_flip_string( tty_sample,<br />
"Hi\n", 3 );<br />
017 tty_flip_buffer_push( tty_sample );<br />
018 return HRTIMER_RESTART;<br />
019 }<br />
020 <br />
021 static int tty_sample_open(<br />
struct tty_struct *tty,<br />
022 struct file *filp)<br />
023 {<br />
024 if (!atomic_inc_and_test(&access_count))<br />
025 return ‐EIO;<br />
026 printk("tty_sample_open\n");<br />
027 tty_sample = tty;<br />
028 fireup_time = ktime_set( 2, 0 );<br />
029 hrtimer_start(&emu_kbd_desc,<br />
fireup_time, HRTIMER_MODE_REL);<br />
030 return 0;<br />
031 }<br />
032 <br />
033 static void tty_sample_close(<br />
struct tty_struct *tty,<br />
034 struct file *filp)<br />
035 {<br />
036 printk("tty_sample_close\n");<br />
037 atomic_dec( &access_count );<br />
038 if (atomic_read(&access_count)==(‐1) )<br />
039 hrtimer_cancel( &emu_kbd_desc );<br />
040 }<br />
041 <br />
042 static int tty_sample_write(<br />
struct tty_struct *tty,<br />
043 const unsigned char *buf, int count)<br />
044 {<br />
045 int i;<br />
046 <br />
047 for(i=0; iowner =<br />
THIS_MODULE;<br />
073 tty_sample_driver‐>driver_name =<br />
"tty‐sample";<br />
074 tty_sample_driver‐>name =<br />
"ttySample";<br />
075 tty_sample_driver‐>type =<br />
TTY_DRIVER_TYPE_SERIAL;<br />
076 tty_sample_driver‐>subtype =<br />
SERIAL_TYPE_NORMAL;<br />
077 tty_sample_driver‐>init_termios =<br />
tty_std_termios;<br />
078 tty_set_operations(tty_sample_driver,<br />
&tty_sample_ops);<br />
079 <br />
080 ret = tty_register_driver(<br />
tty_sample_driver);<br />
081 if (ret) {<br />
082 put_tty_driver(tty_sample_driver);<br />
083 return ret;<br />
084 }<br />
085 hrtimer_init(&emu_kbd_desc,<br />
CLOCK_MONOTONIC,HRTIMER_MODE_REL);<br />
086 emu_kbd_desc.function = emu_keyboard;<br />
087 printk("tty_sample: initialized\n");<br />
088 return 0;<br />
089 }<br />
090 <br />
091 static void __exit mod_exit(void)<br />
092 {<br />
093 hrtimer_cancel( &emu_kbd_desc );<br />
094 tty_unregister_driver(<br />
tty_sample_driver);<br />
095 put_tty_driver(tty_sample_driver);<br />
096 }<br />
097 <br />
098 module_init( mod_init );<br />
099 module_exit( mod_exit );<br />
100 MODULE_LICENSE("GPL");
»Hi«. Das Terminal-<br />
»struct tty_buffer«<br />
next<br />
Subsystem echot diesen<br />
Text auf die Ausgabe,<br />
was sich durch<br />
char_but_ptr<br />
die im Syslog auftauchenden<br />
flag_but_ptr<br />
Hexziffern<br />
nachvollziehen lässt.<br />
used<br />
size<br />
Schaltet der Benutzer<br />
mit dem Kommando<br />
»stty ‐F /dev/ttySample0<br />
commit<br />
read<br />
‐echo« das Echo<br />
ab, landet beim nächsten<br />
Lesen keine Ausgabe<br />
der Hexziffern<br />
Buffer für die Zeichen<br />
mehr im Syslog.<br />
Bei realer Hardware<br />
Statusflags pro Zeichen<br />
»TTY_NORMAL«<br />
»TTY_BREAK«<br />
gestaltet sich der TTY-<br />
Treiber deutlich komplexer<br />
als der Beispielcode<br />
in diesem Artikel,<br />
»TTY_FRAME«<br />
»TTY_PARITY«<br />
»TTY_OVERRUN«<br />
besonders dann, wenn<br />
der Programmierer mit<br />
Abbildung 3: In TTY-Puffern liegen die Daten samt Statusflags.<br />
Bitraten, Parity und limitierten<br />
Sende- und<br />
Zugriffen auf den Treiber Inkonsistenzen<br />
zu vermeiden, erlaubt er über die Atomic-Variable<br />
»access_count« nur jeweils<br />
einer Instanz den Zugriff.<br />
Bei der Programmierung ist noch zu beachten,<br />
dass die Treiberfunktionen sowohl<br />
im Prozess- als auch im Interrupt-<br />
Kontext aufrufbar sind. Das hat zur Folge,<br />
dass der Programmierer nicht alle Funktionen,<br />
beispielsweise die zum Schlafenlegen,<br />
verwenden darf.<br />
Die Wirkungsweise des Treibers und auch<br />
des Terminal-Subsystems lässt sich leicht<br />
testen. Dazu kompiliert man den Treiber<br />
mit Hilfe eines einfachen Makefiles und<br />
lädt ihn anschließend in den Kernel, wie<br />
Abbildung 4 zeigt. Beim lesenden Zugriff<br />
auf die vom Treiber erzeugte Gerätedatei<br />
»/dev/ttySample0« erscheint der Text<br />
Empfangspuffern einer klassischen seriellen<br />
Schnittstelle hantieren muss. Doch<br />
auch bei solchen Anwendungsfällen hilft<br />
der Kernel: Mit dem UART-Subsystem haben<br />
die Entwickler einen TTY-Treiber zur<br />
Verfügung gestellt, der nur noch um die<br />
spezifischen Hardwarezugriffe zu ergänzen<br />
ist [3].<br />
Eine zweite Spezialform des TTY-Treibers<br />
ist die als Treiber für die Konsole, die es<br />
als Boot- und als Systemkonsole gibt.<br />
Erstere macht es möglich, bereits relativ<br />
früh im Bootprozess Ausgaben zu tätigen<br />
(»early_printk«). Nach der Grundinitialisierung<br />
lässt sie sich durch eine oder<br />
mehrere Systemkonsolen ersetzten. Die<br />
damit erreichte Entkopplung der Konsole<br />
von einer dedizierten Hardware bringt<br />
Vorteile: Startet man beispielsweise un-<br />
Verwaltungsinformationen<br />
ter X-Window ein Xterm mit der Option<br />
»‐C«, landen alle Systemmeldungen in<br />
dem grafischen Terminal.<br />
Sparversion<br />
Wer kein grafisches Terminal benötigt,<br />
kann übrigens ausgesprochen kompakte<br />
<strong>Linux</strong>-Systeme bauen: 28 MByte Hauptspeicher<br />
und 12 MByte Festplatte reichen<br />
im Grunde bereits aus, das versprechen<br />
die Macher einer Mini-Distribution. Dabei<br />
wird die Bedeutung des Terminal-<br />
Subsystems deutlich. Zugunsten der<br />
kompakten Größe entfällt die Grafik –<br />
und damit tritt das Terminal mit dem<br />
antiquierten Namen in den Vordergrund.<br />
Wen wundert’s, dass die Entwickler ihre<br />
Distribution ausgerechnet TTYlinux [4]<br />
genannt haben? (mhu) <br />
n<br />
Infos<br />
[1] Linus Akesson, „The TTY demystified“:<br />
[http:// www. linusakesson. net/<br />
programming/ tty/ index. php]<br />
[2] Quade, Kunst, „<strong>Linux</strong>-Treiber entwickeln“:<br />
Dpunkt-Verlag 2011<br />
[3] <strong>Linux</strong>-Mips, „Serial Driver and Console“:<br />
[http:// www. linux‐mips. org/ wiki/ Serial_<br />
Driver_and_Console]<br />
[4] TTYlinux, Projektseite:<br />
[http:// ttylinux. net/ index. html].<br />
[5] Listings zu diesem Artikel:<br />
[http:// www. linux‐magazin. de/ static/<br />
listings/ magazin/ 2012/ 10/ 12/ kern‐technik]<br />
Die Autoren<br />
Eva-Katharina Kunst, Journalistin, und Jürgen<br />
Quade, Professor an der Hochschule Niederrhein,<br />
sind seit den Anfängen von <strong>Linux</strong> Fans von Open<br />
Source. Ihr Buch „<strong>Linux</strong> Treiber entwickeln“ liegt<br />
in dritter Auflage vor.<br />
Kern-Technik 12/2012<br />
Know-how<br />
www.linux-magazin.de<br />
91<br />
Abbildung 4 (links und rechts): Mit dem Beispieltreiber lässt sich die Modifikation durch die Line-Discipline-Schicht demonstrieren.
Programmieren<br />
www.linux-magazin.de Bash Bashing 12/2012<br />
92<br />
Shellskripte aus der Stümper-Liga – Folge 23: Dash statt Bash<br />
Bash Bashing<br />
Mit Debian Squeeze und Ubuntu 6.10 flog die Bash aus diesen Distributionen als Default-Shell raus. Die Begründung:<br />
nicht Posix-konform, zu langsam, zu hoher Speicherbedarf. Neue Perle am Muschelstrand ist die Dash,<br />
die Debian Almquist Shell. Bernhard Bablok<br />
© Fotograf, 123RF.com<br />
01 #!/bin/sh<br />
Wie das ganze Unix-Universum hat auch<br />
die Shell eine komplizierte Genealogie.<br />
Da sich Software-Entwickler selten damit<br />
abfinden, dass ihre Software fertig<br />
ist, wächst der Funktionsumfang von<br />
Version zu Version. Die Bash ist dafür<br />
ein gutes Beispiel, so hat die recht neue<br />
Version 4 eine ganze Reihe von nützlichen<br />
Erweiterungen gebracht [1]. Mit<br />
jeder Erweiterung entfernt sich die Bash<br />
02 LIST=$(awk ' \<br />
03 BEGIN { \<br />
04 split( ENVIRON["PATH"], array, ":"); \<br />
05 for (i=1;i
Abbildung 1: Die Dash kennt keine Arrays. Die Bash dagegen akzeptiert sie<br />
auch als »/bin/sh«.<br />
ternativen dazu vermittelt [4]. Manche<br />
Änderungen sind trivial, zum Beispiel<br />
wird das schlichte Bash-Konstrukt<br />
function foo() {<br />
[...]<br />
}<br />
nur zu dem genauso simplen Dreizeiler:<br />
foo() {<br />
[...]<br />
}<br />
Das Schlüsselwort »function« ist auch in<br />
der Bash ein überflüssiges Syntaxelement.<br />
Andere Beschränkungen schmerzen<br />
wirklich. Posix kennt zum Beispiel keine<br />
Arrays. Zwar erscheint die Bash im Vergleich<br />
mit Perl und Python arm an Datenstrukturen,<br />
mit dem Array aber verlieren<br />
Umsteiger auf die Dash die letzte Möglichkeit,<br />
Daten einfach zu strukturieren<br />
(Abbildung 1). Ein weiteres Beispiel: Für<br />
den Bash-Einzeiler »LIST=${PATH//:/ }«<br />
schlägt der Ubuntu-Wiki-Eintrag [3] den<br />
länglichen (allerdings nicht ganz äquivalenten)<br />
Dash-Code aus<br />
Listing 1 vor.<br />
Shells satt<br />
Teil der Gemengelage<br />
um die Shellsyntax ist,<br />
dass das Unix-Universum<br />
viele Shells kennt.<br />
Wer Software von AIX-<br />
Systemen nach <strong>Linux</strong><br />
portiert, stellt seine<br />
Skripte entweder von<br />
der Korn Shell auf die<br />
Bash um oder vertraut<br />
der installierten entsprechenden <strong>Linux</strong>-<br />
Variante. Bei vielen Distributionen gehört<br />
deshalb eine Korn Shell zum Standardumfang<br />
der Installation. Einen guten<br />
Überblick über die Unterschiede zwischen<br />
verschiedenen Shells samt einer<br />
kurzen Geschichte gibt [5].<br />
Bei allen Unterschieden im Ressourcenverbrauch<br />
– für wirklich kleine Systeme<br />
kommen diese Shells alle nicht in Frage.<br />
Hier beherrscht Busybox [6] das Feld, die<br />
Software bündelt in einem einzigen Binary<br />
alle wesentlichen Unix-Tools inklusive<br />
der Shell Ash. Busybox ist Meister in<br />
der Bescheidenheit, denn Speicher ist auf<br />
Embedded-Systemen sehr knapp.<br />
Fazit<br />
Der Wegfall moderner Syntaxelemente in<br />
der Dash schmerzt. Zwar existieren Workarounds,<br />
aber der Skriptcode bläht sich<br />
auf, wird komplexer, schwerer zu warten<br />
und damit anfälliger für Fehler, Race Conditions<br />
und Sicherheitslücken. Es erscheint<br />
sehr fraglich, ob hier die Vor- die<br />
Nachteile aufwiegen.<br />
Die Argumentation mit der Bootzeit jedenfalls<br />
greift zu kurz: Server werden<br />
sehr selten gebootet, da spielen ein paar<br />
Sekunden mehr in der gesamten Downtime<br />
keine Rolle. Auf dem Desktop wäre<br />
die Energie der Entwickler in ein stabiles<br />
Suspend und Resume wohl besser investiert,<br />
denn dies löst das Problem der<br />
Bootzeiten ohne funktionale Degradierung<br />
der Standardshell. (jk) n<br />
Infos<br />
[1] Bernhard Bablok, Nils Magnus, „Neue<br />
Funktionen in der Bash-Version 4“:<br />
<strong>Linux</strong>-<strong>Magazin</strong> 06/09, S. 46, [http:// www.<br />
linux‐magazin. de/ Heft‐Abo/ Ausgaben/<br />
2009/ 06/ Aufpoliert]<br />
[2] Dash: [http:// gondor. apana. org. au/<br />
~herbert/ dash/]<br />
[3] Ubuntu-Wiki, „Dash as /bin/sh“:<br />
[https:// wiki. ubuntu. com/ DashAsBinSh]<br />
[4] „How to make bash scripts work in dash“:<br />
[http:// mywiki. wooledge. org/ Bashism]<br />
[5] „UNIX shell differences and how to change<br />
your shell“: [http:// www. faqs. org/ faqs/<br />
unix‐faq/ shell/ shell‐differences/]<br />
[6] Multifunktions-Binary Busybox:<br />
[http:// www. busybox. net]<br />
Der Autor<br />
Bernhard Bablok betreut bei der Allianz<br />
Managed & Operations Services SE ein großes<br />
Datawarehouse mit technischen Performancemessdaten<br />
von Mainframes bis zu Servern. Wenn<br />
er nicht Musik hört, mit dem Radl oder zu Fuß<br />
unterwegs ist, beschäftigt er sich mit Themen<br />
rund um <strong>Linux</strong> und Objektorientierung.<br />
Bash Bashing 12/2012<br />
Programmieren<br />
www.linux-magazin.de<br />
93<br />
MAGAZIN<br />
ONLINE<br />
<strong>Linux</strong>-<strong>Magazin</strong> newsLetter<br />
Newsletter<br />
informativ<br />
Nachrichten rund um die Themen <strong>Linux</strong> und<br />
Open Source lesen Sie täglich im Newsletter<br />
des <strong>Linux</strong>-<strong>Magazin</strong>s.<br />
kompakt<br />
tagesaktuell<br />
www.linux-magazin.de/newsletter
Programmieren<br />
www.linux-magazin.de C++11 12/2012<br />
Modernes C++ in der Praxis – Folge 7<br />
Rasch verschoben<br />
96<br />
Diese Folge geht ans Eingemachte von C++11: Sie zeigt, wozu Move-Semantik nützlich ist, erklärt Rvalues und<br />
Lvalues und deckt auf, was es mit dem doppelten &-Zeichen auf sich hat. Rainer Grimm<br />
C++11<br />
asynchrone Aktionen<br />
override<br />
decltype kommt. Hier stellt in Zeile 42 die Klausel<br />
»if (this != &other)« sicher, dass Quelle<br />
Move-Semantik<br />
Neue Container<br />
auto<br />
und Ziel der Zuweisung verschieden sind.<br />
Variadic Templates<br />
Das ist notwendig, denn Zeile 23 löscht<br />
bind das Ziel der Zuweisung mit »delete[]<br />
Type Traits<br />
data_«. Das Ergebnis des Zuweisungsoperators<br />
ist das modifizierte Objekt, in<br />
C++11<br />
Alias Templates<br />
Tuple<br />
Zeile 29 durch »return *this« zurückgege-<br />
default<br />
function<br />
ben. Der Destruktor komplementiert den<br />
Range-basierte<br />
C++11<br />
C-Array-Wrapper »BigArrayCopy«.<br />
nullptr<br />
For-Schleife<br />
Zufallszahlen<br />
Zeitbibliothek<br />
delete<br />
final<br />
STL-tauglich<br />
Benutzerdefinierte Literale<br />
Smart Pointer Mit diesem einfachen Interface erfüllt<br />
Hashtabellen<br />
static_assert<br />
reguläre Ausdrücke<br />
»BigArrayCopy« alle Anforderungen, da-<br />
Threads mit es sich in einem Container der Stan-<br />
Lambda-Funktionen<br />
Array<br />
dard Template Library (STL) verwenden<br />
lässt. Ein kleines C++11-Feature hat sich<br />
noch im Destruktor versteckt: »nullptr«<br />
Wenn das Kopieren von Daten zu aufwändig<br />
oder unmöglich ist, kann sich<br />
der Programmierer damit behelfen, sie<br />
stattdessen zu verschieben. Diese einfache<br />
Idee liegt der Move-Semantik in<br />
C++11 zugrunde. Wer sie geschickt anwendet,<br />
bewegt auf diese Weise große<br />
Datenmengen schneller und kann sogar<br />
pierkonstruktor (Zeile 15), einem Zuweisungsoperator<br />
(Zeile 20) und einem Destruktor<br />
(Zeile 32). Im Kopierkonstruktor,<br />
der sich durch den Aufruf »BigArrayCopy<br />
bArray2(bArray)« anstoßen lässt, setzt<br />
der Code die Länge und den Verweis auf<br />
das C-Array. Im Anschluss findet durch<br />
ersetzt die bekannte Nullzeigerkonstante<br />
»NULL«. Damit gehört das implizite Konvertieren<br />
von »NULL« in eine natürliche<br />
Zahl der Vergangenheit an.<br />
Wer das Programm ausführt und die<br />
Ausgabe betrachtet (Abbildung 1), der<br />
erkennt, dass sowohl der Kopierkonstruktor<br />
als auch der Zuweisungsoperator<br />
std::copy(other.data_, other.data_ + len_,U<br />
Smart Pointer mit der STL versöhnen.<br />
data_)<br />
Dieser Artikel zeigt, wie das geht.<br />
zum Einsatz kommen. Darüber hinaus<br />
lässt sich »BigArrayCopy« in einem Vektor<br />
verwenden. »BigArrayCopy« erfüllt<br />
offenbar alle Erwartungen.<br />
Großer Kopierer<br />
Listing 1 enthält eine einfache Klasse namens<br />
»BigArrayCopy«, die einen Wrapper<br />
um ein einfaches C-Array darstellt. Diese<br />
Programmzeilen sollen als Grundlage für<br />
weitere Optimierungen dienen. Um das<br />
C-Array richtig zu verwalten, merkt sich<br />
»BigArrayCopy« in den Zeilen 37 und 38<br />
den Verweis auf das C-Array »data_« und<br />
dessen Länge »len_«.<br />
Das Interface von »BigArrayCopy« ist<br />
minimal. Es besteht aus einem Standardkonstruktor<br />
(Zeile 13), einem Ko-<br />
das Kopieren der Daten von »bArray«<br />
nach »bArray2« statt. Einer ähnlichen<br />
Struktur folgt der Zuweisungsoperator,<br />
der in dem Ausdruck »bArray= BigArrayCopy(22222222)«<br />
zur Anwendung<br />
Abbildung 1: Das herkömmliche Kopieren von<br />
»BigArrayCopy« ist aufwändig.<br />
Eine Zeile zu viel<br />
Ein scharfer Blick auf Ausgabe und Programmcode<br />
(Listing 1) zeigt jedoch, dass<br />
»BigArrayCopy« trotzdem weiteres Optimierungspotenzial<br />
birgt. Zuerst stellt<br />
sich die Frage, woher der letzte Aufruf<br />
»copy construction of 11111111 elements«<br />
des Kopierkonstruktors in Abbildung 1<br />
kommt. Die ersten vier Ausgaben dagegen<br />
entsprechen genau den Ausdrücken<br />
in den Zeilen 48 bis 52.
Die Erklärung ist schnell gefunden und<br />
schon das klassische C++ bietet Gegenmaßnahmen<br />
an. Dem Vektor geht einfach<br />
der Speicher aus, sodass er durch<br />
den erneuten Aufruf mit »myVec.push_<br />
back(BigArrayCopy(33333333))« reallokiert<br />
werden muss. Dies bedingt natürlich<br />
auch, dass das Programm seine<br />
Elemente kopiert.<br />
Für diesen Anwendungsfall stellt der<br />
C++-Vektor die Methode »reserve()« zur<br />
Verfügung. Damit lässt sich Speicher reservieren,<br />
was ein erneutes Allokieren<br />
überflüssig macht. Der schlichte Aufruf<br />
»myVec.reserve(2)« unterbindet das überflüssige<br />
Kopieren der Vektorelemente.<br />
Tuning-Werkzeuge<br />
Greift der Programmierer zu C++11, stehen<br />
für ihn weitere Tuning-Werkzeuge<br />
parat. Die entscheidende Beobachtung:<br />
Sowohl die Zuweisung »bArray= Big-<br />
ArrayCopy(22222222)« als auch der<br />
Aufruf des Kopierkonstruktors »myVec.<br />
push_back(BigArrayCopy(33333333))« in<br />
den Zeilen 51 und 52 nutzen die temporären<br />
Objekte »BigArrayCopy(22222222)«<br />
und »BigArrayCopy(33333333)«. Warum<br />
sollte man in diesem Fall die Elemente<br />
von »BigArrayCopy(22222222)« teuer<br />
von der Quelle zum Ziel kopieren, wenn<br />
es doch genügen würde, dass »bArray«<br />
die Daten einfach entwendet? Dies ist<br />
zulässig, da die Quelle der Zuweisung<br />
automatisch verfällt.<br />
In Listing 2 ist die<br />
Optimierungsstrategie<br />
mit Rvalue-Referenzen<br />
implementiert, einem<br />
neuen Feature von<br />
C++11. Neben dem<br />
Vor der Move-Zuweisung<br />
»bArray«<br />
Speicheradressen<br />
[...]<br />
9028<br />
9024<br />
Nach der Move-Zuweisung<br />
»bArray«<br />
klassischen Kopierkonstruktor<br />
in Zeile<br />
15 und dem Zuweisungsoperator<br />
in Zeile<br />
20 bietet »BigArray« einen<br />
9020<br />
[...]<br />
1008<br />
Move-Konstruktor<br />
(Zeile 32) und einen<br />
1004<br />
»BigArray«<br />
Move-Zuweisungsoperator<br />
[...]<br />
»BigArray«<br />
(Zeile 38) an. Die<br />
Signatur dieser Move-<br />
Methoden unterscheidet<br />
0000<br />
»nullptr«<br />
sich von ihren<br />
klassischen C++-Pendants<br />
Abbildung 2: Die Move-Semantik lässt sich mit Hilfe von Speicheradressen<br />
veranschaulichen.<br />
dadurch, dass<br />
sie ihr Argument als Rvalue-Referenz<br />
»BigArray&& other« annehmen.<br />
Interessant ist vor allem die Implementierung<br />
dieser Move-Methoden. Während<br />
der klassische Kopierkonstruktor (Zeile<br />
15) seine Daten mit<br />
Abbildung 2 ist dies für die Zuweisung<br />
»bArray= BigArray(22222222)« exemplarisch<br />
dargestellt. Eine ähnliche Strategie<br />
wendet der Move-Zuweisungsoperator<br />
an. Der entscheidende Punkt ist, dass<br />
C++11 zur Laufzeit Rvalue auf Rvalue-<br />
Referenzen und Lvalues auf Lvalue-Referenzen<br />
std::copy(other.data_, other.data_ + len_,U<br />
abbildet.<br />
data_)<br />
kopiert, setzt der Move-Konstruktor in<br />
Zeile 32 »BigArray(BigArray&& other):<br />
len_(other.len_),data_(other.data_)« lediglich<br />
die Länge des C-Array und einen<br />
Verweis auf die Daten. Dazu weist er<br />
in seinem Funktionskörper den Daten<br />
der Datenquelle ihren Defaultwert zu. In<br />
Kopieren überflüssig<br />
Das Ausführen des Programms bringt<br />
es an den Tag (Abbildung 3): Wenn<br />
möglich, wie im Falle von »bArray=<br />
BigArray(22222222)« und »myVec.push_<br />
back(BigArray(33333333))«, werden die<br />
C++11 12/2012<br />
Programmieren<br />
www.linux-magazin.de<br />
97<br />
Listing 1: Großes Array kopieren<br />
01 #include <br />
02 #include <br />
03 #include <br />
04 <br />
05 using std::cout;<br />
06 using std::endl;<br />
07 <br />
08 using std::vector;<br />
09 <br />
10 class BigArrayCopy{<br />
11 <br />
12 public:<br />
13 BigArrayCopy(size_t len): len_(len), data_<br />
(new int[len]){}<br />
14 <br />
15 BigArrayCopy(const BigArrayCopy& other):<br />
len_(other.len_),data_(new int[other.len_]){<br />
16 cout
Programmieren<br />
www.linux-magazin.de C++11 12/2012<br />
98<br />
Daten nicht kopiert, sondern verschoben.<br />
Zudem verhindert »myVec.reserve(2)«<br />
das überflüssige Kopieren des Vektors.<br />
Rvalue- und Lvalue-<br />
Referenzen<br />
Rvalue-Referenzen sind im Unterschied<br />
zu Lvalue-Referenzen in C++11 durch<br />
zwei Et-Zeichen (&&) gekennzeichnet.<br />
So bezeichnet »bigArrayRvalue« in »My-<br />
BigArray&& bigArrayRvalue« eine Rvalue-Referenz,<br />
»bigArrayLvalue« in »MyBigArray&<br />
bigArrayLvalue« hingegen eine<br />
klassische Lvalue-Referenz.<br />
Rvalue-Referenzen sind spezielle Verweise.<br />
Der Programmierer muss sie bereits<br />
als solche initialisieren, nachträglich<br />
lassen sie sich nicht auf ein anderes Objekt<br />
umbiegen. Im Gegensatz zu Lvalue-<br />
Referenzen kann man an sie nur einen<br />
Rvalue binden. Rvalues sind:<br />
n Temporäre Objekte<br />
n Objekte ohne Namen<br />
n Objekte, deren Adresse sich nicht bestimmen<br />
lässt<br />
Trifft auf Objekte eines dieser Charakteristika<br />
zu, liegt ein Rvalue vor. Im Um-<br />
kehrschluss bedeutet dies, dass Lvalues<br />
einen Namen und eine Adresse besitzen.<br />
Ein paar Beispiele für Rvalues:<br />
int five= 5;<br />
std::string a= std::string("Rvalue");<br />
std::string b= std::string("R") + U<br />
std::string("value");<br />
std::string c= a + b;<br />
std::string d= std::move(b);<br />
Rvalues stehen auf der rechten Seite einer<br />
Zuweisung. So sind in den Beispielen<br />
der Wert 5 und der Konstruktoraufruf<br />
»std::string("Rvalue")« Rvalues, denn weder<br />
lässt sich für den Wert 5 die Adresse<br />
bestimmen, noch besitzt der Konstruktoraufruf<br />
einen Namen. Gleiches gilt für die<br />
Addition der Rvalues in »std::string("R")<br />
+ std::string("value")«.<br />
Interessanter ist die String-Addition<br />
zweier Lvalues in »a + b«. Dieser Ausdruck<br />
wird zum Rvalue, da die Addition<br />
zweier Lvalues ein temporäres Objekt<br />
erzeugt. Als besonderer Anwendungsfall<br />
gilt »std::move(b)«. Diese neue C++11-<br />
Funktion konvertiert den Lvalue »b« in<br />
eine Rvalue-Referenz.<br />
Der letzte Baustein für das Zusammenspiel<br />
von Lvalues und Rvalues sowie Lvalue-<br />
und Rvalue-Referenzen fehlt noch:<br />
Listing 3 zeigt die Values zusammen<br />
mit den entsprechenden Referenzen. An<br />
»LvalueReference« lässt sich ein Lvalue,<br />
an »RvalueReference« ein Rvalue binden.<br />
Umgekehrt gilt: An »LvalueReference2«<br />
kann kein Rvalue, an »RvalueReference2«<br />
kein Lvalue gebunden sein.<br />
In C++11 gilt weiterhin die klassische<br />
C++-Regel, dass sich eine konstante Lvalue-Referenz<br />
durch einen Rvalue initialisieren<br />
lässt. Ist für eine Klasse »BigArray«<br />
(Listing 2) sowohl der Copy- (Zeile 20)<br />
als auch der Move-Zuweisungsoperator<br />
(Zeile 38) definiert, verfügt der Move-<br />
Zuweisungsoperator, der sein Argument<br />
per Rvalue-Referenz annimmt, über die<br />
höhere Priorität. Die Regel dahinter ist<br />
recht einfach: Ein Rvalue wird im Zweifelsfall<br />
an eine Rvalue-Referenz und nicht<br />
an eine konstante Lvalue-Referenz gebunden.<br />
Zeitgewinn<br />
Mit der neuen Zeitbibliothek lässt sich der<br />
Performanceboost durch Verwendung der<br />
Move-Semantik einfach messen (Listing<br />
Listing 2: Optimiertes Kopieren<br />
01 #include <br />
02 #include <br />
03 #include <br />
04 <br />
05 using std::cout;<br />
06 using std::endl;<br />
07 <br />
08 using std::vector;<br />
09 <br />
10 class BigArray{<br />
11 <br />
12 public:<br />
13 BigArray(size_t len): len_(len), data_(new<br />
int[len]){}<br />
14 <br />
15 BigArray(const BigArray& other): len_<br />
(other.len_),data_(new int[other.len_]){<br />
16 cout
C++11 12/2012<br />
Programmieren<br />
Abbildung 3: Eigentlich verschiebt das optimierte<br />
Kopierprogramm »BigArray«.<br />
4). Innerhalb der »main()«-Funktion bestimmt<br />
die Zeile 12 den Anfangs- und die<br />
Zeile 17 den Endzeitpunkt. Die folgende<br />
Zeile<br />
auto timeInSeconds= durationU<br />
(end).count()<br />
gibt die Zeit in Sekunden als Double zurück.<br />
Das Ergebnis ist beeindruckend.<br />
Das Verschieben der Vektoren (Abbildung<br />
4) ist etwa um den Faktor 1000 schneller<br />
als das Kopieren (Abbildung 5).<br />
In C++11 unterstützen die Container der<br />
Standard Template Library [1] oder auch<br />
»std::string« von Haus aus die Move-<br />
Semantik. Sogar für maßgeschneiderte<br />
Datentypen erzeugt die C++-Laufzeit<br />
automatisch den Move-Konstruktor und<br />
Move-Zuweisungsoperator, sofern dies<br />
möglich ist. Den Performanceschub gibt<br />
es inklusive.<br />
Statt Kopieren »std::move«<br />
Die Move-Semantik lässt sich aber nicht<br />
nur als optimiertes Kopieren verstehen.<br />
Sie eröffnet auch neue Anwendungsfälle<br />
in C++11. Daten, die nicht kopiert werden<br />
können, lassen sich zumeist wenigstens<br />
verschieben. Dazu gehören Threads,<br />
Mutexe, Locks, aber auch Future und<br />
Promise [2] als Endpunkte eines Datenkanals.<br />
Die neue Funktion »std::move()«<br />
erledigt das Verschieben explizit.<br />
Abbildung 4: Das Verschieben von »BigArray« ist<br />
wesentlich schneller …<br />
Als Beispiel verschiebt Listing 5 einen<br />
Lvalue. Was unter der Oberfläche<br />
geschieht, ist recht naheliegend:<br />
»std::move()« konvertiert »myVec« in<br />
»myNewVec(std::move(myVec))« zu einer<br />
Rvalue-Referenz. Das hat zur Folge,<br />
dass der Move-Konstruktor des Vektors<br />
zur Verwendung kommt. Dieser verschiebt<br />
die Ressource von »myVec« nach<br />
»myNewVec«, sodass »myVec« am Ende<br />
ein leerer Vektor ist. Ein weiteres, prominentes<br />
Beispiel für einen nicht kopierbaren<br />
Datentyp ist der neue Smart Pointer<br />
»std::unique_ptr«, denn er überwacht<br />
exklusiv die Lebenszeit der ihm anvertrauten<br />
Ressource.<br />
Smart Pointer<br />
Die Eigenschaft des »std::unique_ptr«,<br />
dass er sich nicht kopieren lässt, verhindert<br />
eigentlich seinen Einsatz in der<br />
Standard Template Library. Der Grund:<br />
Die STL-Container setzen Copy-Semantik<br />
Listing 3: Lvalues- versus Rvalue-Referenzen<br />
01 std::string Lvalue("Lvalue");<br />
02 std::string& LvalueReference= Lvalue;<br />
um, denn sie kopieren jedes Element zuerst<br />
in den Container. Diese Einschränkung<br />
kann der Programmierer mittels<br />
Move-Semantik umgehen.<br />
Das initiale Kopieren kann er mit<br />
»std::move« in den Zeilen 4 und 5 von<br />
Listing 6 elegant abwandeln. Der Code<br />
schiebt die Elemente explizit auf den Container.<br />
Damit lassen sich die Algorithmen<br />
der STL-Library auf »std::unique_ptr« anwenden.<br />
Als Sortierkriterium dient die<br />
Lambda-Funktion in Zeile 6, die den Zeiger<br />
auf die natürliche Zahl »*fir < *sec«<br />
dereferenziert.<br />
In Konstruktoren oder Fabrikfunktionen<br />
ist es oft nötig, die Argumente als Referenz<br />
anzunehmen und unter Wahrung<br />
ihrer Lvalue- oder Rvalue-Eigenschaften<br />
identisch weiterzureichen. Dies ist in<br />
klassischem C++ aber generisch unmöglich.<br />
„Ein bislang ungelöstes Problem in<br />
C++“ nannten dies Howard E. Hinnant,<br />
Bjarne Stroustrup und Bronek Kozicki<br />
bereits 2008 in einem Aufsatz [3].<br />
03 std::string& LvalueReference2= std::string("Rvalue"); // Syntax error<br />
04 std::string&& RvalueReference = std::string("Rvalue");<br />
05 std::string&& RvalueReference2 = Lvalue; // Syntax error<br />
06 const std::string& LvalueReference3= std::string("Rvalue");<br />
Listing 4: Performancemessung<br />
Abbildung 5: … als das Kopieren von »BigArray-<br />
Copy«, das den Kopierkonstruktor zu oft aufruft.<br />
www.linux-magazin.de<br />
99<br />
Der Autor<br />
Rainer Grimm arbeitet seit<br />
1999 als Software-Entwickler<br />
bei der Science + Computing<br />
AG in Tübingen. Insbesondere<br />
hält er Schulungen für<br />
das hauseigene Produkt SC<br />
Venus. Im Dezember 2011 ist sein Buch „C++11: Der<br />
Leitfaden für Programmierer zum neuen Standard“<br />
im Verlag Addison-Wesley erschienen.<br />
01 int main(){<br />
02 <br />
03 cout
Programmieren<br />
www.linux-magazin.de C++11 12/2012<br />
100<br />
Die C++98-Lösung<br />
besteht darin, zwei<br />
Funktionen zu schreiben.<br />
Eine Funktion<br />
nimmt ihr Argument<br />
als Lvalue-Referenz,<br />
die andere als konstante<br />
Lvalue-Referenz<br />
an, denn Rvalues<br />
lassen sich auch an Abbildung 6: C++11 bringt mit Perfect Forwarding<br />
konstante Lvalue-Referenzen<br />
binden. Die-<br />
ein lang ersehntes Feature.<br />
ser Ansatz skaliert jedoch nicht, denn<br />
bei drei Funktionsargumenten sind schon<br />
2 3 =8 verschiedene Funktionen zu implementieren.<br />
Listing 7 zeigt zwei generische Fabrikfunktionen,<br />
die einen Typ »T« und ein<br />
Argument »t1« erhalten, ihn im<br />
Return-Ausdruck »T(t1)« erzeugen und<br />
wieder zurückzugeben. Während »createClassic«<br />
in den Zeilen 8 und 14 ihre<br />
Argumente per konstantem Lvalue und<br />
nicht konstanter Lvalue-Referenz bindet,<br />
Listing 5: Lvalue verschieben<br />
01 std::vector myVec{1,2,3,4,5,6,7,8,9};<br />
02 std::vector myNewVec(std::move(myVec));<br />
Listing 6: »std::unique_ptr«<br />
verschieben<br />
01 std::unique_ptr unique1(new(int(2)));<br />
02 std::unique_ptr unique2(new(int(1)));<br />
03 std::vector myInt;<br />
04 myInt.push_back(std::move(unique1));<br />
05 myInt.push_back(std::move(unique2));<br />
06 std::sort(myInt.begin(),myInt.end(),[](std::unique_<br />
ptr& fir, std::unique_ptr& sec) { return<br />
*fir < *sec; });<br />
bindet in Zeile 21 das<br />
Funktionstemplate sowohl<br />
Lvalues als auch<br />
Rvalues. In der Abbildung 6 ist dies<br />
schön zu sehen.<br />
Eine Besonderheit hält die C++11-Implementierung<br />
vor. Der Rückgabe-Ausdruck<br />
»(forward(t1))« (Zeile 24) verwendet<br />
die neue Funktion »std::forward«.<br />
Deren Aufruf ist hier notwendig, denn<br />
sonst würde »t1« in jedem Aufruf als Lvalue<br />
an den Konstruktor von »T« weitergereicht,<br />
denn dieser wird mit einem Argument<br />
mit Namen aufgerufen – und alles,<br />
was einen Namen besitzt, ist ein Lvalue.<br />
»std::forward« sorgt dafür, dass der Konstruktor<br />
den wahren Wert von »t1« erhält,<br />
so wie ihn auch die Funktion »create-<br />
New« erhalten hat. Dies kann ein Lvalue<br />
oder ein Rvalue sein. Diese Vorgehensweise<br />
nennt man Perfect Forwarding.<br />
Wie geht’s weiter?<br />
Wegen der Fülle an Informationen rund<br />
um Rvalue-Referenzen, Move-Semantik<br />
und Perfect Forwarding hat dieser Artikel<br />
ein neues Feature der Standardbibliothek<br />
Abbildung 7: Die nächste Folge widmet sich den Smart Pointern in C++11.<br />
in Listing 6 nur kurz erläutert, obwohl<br />
es deutlich mehr Aufmerksamkeit verdient:<br />
die Smart Pointer (Abbildung 7).<br />
Viele Entwickler halten die neuen Smart<br />
Pointer »std::shared_ptr«, »std::weak_ptr«<br />
und »std::unique_ptr« für das wichtigste<br />
Feature der neuen Standardbibliothek,<br />
denn sie führen automatisches Speichermanagement<br />
in C++11 ein. Der nächste<br />
Artikel wird sich daher intensiv mit ihnen<br />
beschäftigen. (mhu)<br />
n<br />
Infos<br />
[1] STL-Container: [http:// en. cppreference.<br />
com/ w/ cpp/ container]<br />
[2] Rainer Grimm, „Alle im Einklang“:<br />
<strong>Linux</strong>-<strong>Magazin</strong> 08/12, S. 88<br />
[3] Howard E. Hinnant, Bjarne Stroustrup and<br />
Bronek Kozicki, „A Brief Introduction to<br />
Rvalue References“: [http:// www. artima.<br />
com/ cppsource/ rvalue. html]<br />
[4] Listings zu diesem Artikel: [http:// www.<br />
linux‐magazin. de/ Heft‐Abo/ Ausgaben/<br />
Listings/ 2012/ 12/ cpp]<br />
Listing 7: Generische Fabrikfunktion mit C++98 und C++11<br />
01 #include <br />
02 <br />
03 using std::forward;<br />
04 <br />
05 using std::cout;<br />
06 using std::endl;<br />
07 <br />
08 template <br />
09 T createClassic(const T1& t1){<br />
10 cout
Admin-MAGAZIN<br />
im Jahres-Abo<br />
Praktisch anwendbares Wissen und ausführliche<br />
Hintergrundberichte für alle IT-Administratoren<br />
von <strong>Linux</strong>, Unix und Windows.<br />
JETZT Zugreifen<br />
und über 15% Sparen!<br />
IHRE vorteile<br />
• 6 Ausgaben im Jahr Frei Haus<br />
• inklusive 6 ADMIN-Specials<br />
(unter anderem zu IPv6 und SSD)<br />
als PDF-Download im Wert von<br />
über 35 Euro<br />
sichern Sie Sich Ihr<br />
gratis Multitool!<br />
Jetzt abonnieren:<br />
www.admin-magazin.de/abo<br />
(Printabo 49,90 Euro, digitales Abo nur 44,90 Euro)<br />
• Telefon 07131 / 2707 274 • Fax 07131 / 2707 78 601 • E-Mail: abo@admin-magazin.de •
Programmieren<br />
www.linux-magazin.de Perl-Snapshot 12/2012<br />
102<br />
Bücher scannen und in Google Drive speichern<br />
Papierbuch am Ende<br />
Mit einer chinesischen Guillotine und einem Einzugsscanner bewaffnet geht Perlmeister Michael Schilli diesmal<br />
seinen Büchern an den Leim. Die Grundlage seiner bibliophoben Tat liefert Google Drive, das mit 5 GByte<br />
genug Speicherplatz für ein Online-PDF-Lager mit eingescannten Büchern bietet. Michael Schilli<br />
Fallbeil schneidet dann den geklebten<br />
oder gebundenen Buchrücken ab und<br />
die entstandene Loseblattsammlung zieht<br />
anschließend der Fujitsu S1500 ein (Abbildung<br />
3), fährt eine OCR-Zeichenerkennung<br />
auf das Digitalformat und speichert<br />
das Buch als PDF ab.<br />
Google Drive vs. Dropbox<br />
© cybernautin, photocase.com<br />
Online PLUS<br />
In einem Screencast demonstriert<br />
Michael Schilli das Beispiel: [http://<br />
www.linux-magazin.de/plus/2012/12]<br />
Noch zieren sich die deutschen Verlage<br />
etwas mit der Umstellung auf digitale<br />
Bücher, doch die Weichen sind längst<br />
gestellt. Wer hat schon Lust, ein paar Kilo<br />
Bücher mit in den Urlaub zu schleppen,<br />
wenn Übergepäck Unsummen kostet?<br />
Warum zu Hause Regale mit staubfangenden<br />
Büchern zustellen, die kein Digital<br />
Native mehr rauszieht?!<br />
Der Blick zurück ist aber nötig: Ich hatte<br />
in meinem früheren, Papier-basierten<br />
Lese leben jahrelang Regale mit ungelesenen<br />
Papierbüchern gefüllt – und die<br />
möchte ich nun nicht alle neu im Digitalformat<br />
kaufen. Es geht mir dabei nicht<br />
nur ums Geld, sondern auch um die Tatsache,<br />
dass die meisten älteren Werke<br />
wohl nie digital erscheinen werden.<br />
Zur Vergangenheitsbewältigung habe<br />
ich mir deshalb einen 400 Dollar teuren<br />
Wunderscanner von Fujitsu angeschafft.<br />
Die zweite Digitalisier-Gerätschaft arbeitet<br />
rein mechanisch und trägt den jakobinischen<br />
Namen „Guillotine“: Ein etwa 20<br />
Kilo schweres Papiermesser (Abbildung<br />
1), erworben für 150 Dollar in einem großen<br />
Internet-Auktionshaus), mit dem ich<br />
Wälzer bis zu etwa 600 Seiten von Umschlag<br />
und Bindung befreie.<br />
Mit einem Teppichmesser trenne ich<br />
zunächst Hardcover vom Buchrumpf<br />
(Abbildung 2) und halbiere 1000-Seiten-<br />
Wälzer, damit sie in die Guillotine aus<br />
chinesischer Produktion passen. Das<br />
Ein dicker Wälzer wie „Algorithmen in<br />
C++“ schlägt bei mir als PDF mit 200<br />
bis 300 MByte (im Doppelsinn) zu Buche.<br />
Damit der User das Nachschlagewerk auf<br />
allen Geräten, vom Heim-PC bis zum iPad<br />
im Urlaub, parat hat, bieten Firmen wie<br />
Dropbox Applikationen an, die einmal<br />
gespeicherte Dateien magisch über das<br />
Netz verteilen, ohne dass der Anwender<br />
dies groß anordnen muss.<br />
Google ist mit „Drive“ [2] relativ neu<br />
in diesem Onlinestorage-Geschäft. Die<br />
für PC, Mac, iPad, Android-Geräte und<br />
Webbrowser verfügbaren Applikationen<br />
sind noch nicht so ausgereift wie die<br />
von Platzhirsch Dropbox, funktionieren<br />
aber. Eine native Drive-Applikation für<br />
<strong>Linux</strong> fehlt, Google liefert sie hoffentlich<br />
irgendwann nach. Beide Konkurrenten<br />
stellen interessierten Bastlern hervorragend<br />
dokumentierte APIs zur Verfügung,<br />
um nach Herzenslust selbst Applikationen<br />
zu zaubern.<br />
PDFs online speichern<br />
Abbildung 4 zeigt die auf Google Drive<br />
hochgeladenen PDF-Dateien in einem<br />
Chrome-Browser, Google unterstützt aber<br />
auch Firefox. Ein Mausklick auf eine Datei<br />
löst einen Download aus, einige Zeit<br />
später springt der PDF-Reader an und<br />
zeigt das gescannte Buch an. Im iPad
Perl-Snapshot 12/2012<br />
Programmieren<br />
www.linux-magazin.de<br />
103<br />
Abbildung 1: Eine so genannte Guillotine schneidet<br />
ritsch-ratsch den geklebten Buchrücken ab.<br />
Abbildung 2: Mit einem Teppichmesser geht es dem<br />
Umschlagdeckel an den Kragen.<br />
Abbildung 3: Der Scanner Fujitsu S1500 zieht die<br />
losen Buchseiten ein und führt einen OCR-Lauf aus.<br />
speichert die Applikation Google Drive<br />
(Abbildung 5) die PDF-Daten zwischen,<br />
bis zu einer einstellbaren Grenze. Beim<br />
Downloaden der App ist darauf zu achten,<br />
dass man das Original von Google<br />
erwischt, es sind einige minderwertige<br />
Klone von Drittfirmen im Umlauf.<br />
Automatisch per API<br />
Als Reader empfiehlt sich bei großen PDF-<br />
Dateien nicht das Original von Adobe, da<br />
es nicht für schwachbrüstige Mobilgeräte<br />
ausgelegt ist. Kostenpflichtige iPad-Apps<br />
wie Goodreader [3] oder Ez PDF [4]<br />
auf einem Android-Telefon bieten mehr<br />
Komfort und Performance. Das Hochladen<br />
der gescannten Bücher gestaltet sich<br />
im Browser zwar recht einfach, allerdings<br />
kann es je nach Netzwerkverbindung<br />
eine Weile dauern.<br />
Statt dies jedes Mal manuell durchzuführen,<br />
empfiehlt sich unter <strong>Linux</strong> der Einsatz<br />
einer handgeschriebenen Applikation.<br />
Es existieren zwar<br />
einige Programme, die<br />
mittels Fuse ein Dropbox-ähnliches<br />
Verhalten<br />
vorgaukeln, doch<br />
eigene Skripte bieten<br />
die kreativeren Möglichkeiten.<br />
Dank des umfangreichen<br />
API mit hervorragender<br />
Dokumentation<br />
[5] ist dies leicht<br />
möglich. Leider liefert<br />
Google nur SDKs für<br />
Java, Ruby, PHP und<br />
Python, doch das<br />
REST-Web-API lässt sich auch leicht von<br />
einem Perl-Skript nutzen.<br />
Zugriffe regeln<br />
Nur berechtigte User mit registrierten Applikationen<br />
sollen auf die unter Umständen<br />
sensiblen Daten auf dem Google Drive<br />
zugreifen dürfen. Google regelt die Berechtigung<br />
mit dem Oauth-Protokoll, mit dem<br />
Webapplikationen von Drittanbietern<br />
Userdaten lesen und manipulieren, ohne<br />
dass der User dem Drittanbieter sein<br />
Passwort mitzuteilen braucht.<br />
Hierzu holt sich eine registrierte Applikation<br />
zunächst von Google einen Request-Token<br />
ab und leitet den User im<br />
Webbrowser auf die Google-Login-Seite<br />
weiter. Dort trägt er seinen Usernamen<br />
und sein Passwort ein, falls er noch nicht<br />
eingeloggt ist, und bekommt daraufhin<br />
einen Dialog vorgesetzt, der nachfragt,<br />
ob er wirklich gewillt ist, dem Drittanbieter<br />
Zugriff auf seine Daten zu gewähren.<br />
Abbildung 4: Im Webbrowser bringt Google Drive die<br />
gespeicherten PDF-Dateien zur Ansicht.<br />
Nach der Bestätigung leitet Google den<br />
Browser des Benutzers wieder zurück<br />
zur Applikation des Drittanbieters und<br />
schickt einen Access-Token und einen<br />
Refresh-Token mit.<br />
Der Access-Token gilt für eine bestimmte<br />
Zeitspanne, zum Beispiel eine Stunde,<br />
und erlaubt dem Drittanbieter, dem vom<br />
User gewählten Berechtigungs-Scope<br />
entsprechend auf dessen Daten herumzuorgeln.<br />
Manche Scopes gestatten nur<br />
das Lesen der E-Mail-Adresse, andere das<br />
Lesen aller Dateien auf Google Drive und<br />
einer sogar das Lesen und Schreiben aller<br />
Daten. Erlischt die Gültigkeit des Access-<br />
Token nach der eingestellten Zeitspanne,<br />
schickt die Applikation den Refresh-Token<br />
zurück an Google und erhält postwendend<br />
einen neuen Access-Token, falls<br />
der User der Applikation noch nicht den<br />
Google-Zugriff entzogen hat.<br />
Auf der API-Console [6] meldet der Programmierer<br />
Applikationen an, die nach<br />
Zugriff auf die zahlreichen Google-APIs<br />
Abbildung 5: Die Drive-App auf dem iPad, die ebenfalls die gescannten<br />
Papierbücher als PDFs anzeigt.
Programmieren<br />
www.linux-magazin.de Perl-Snapshot 12/2012<br />
104<br />
trachten. Für Google Drive ist der Schalter<br />
»Google Drive API« umzulegen, der<br />
für das darunter stehende Google-Drive-<br />
SDK bleibt auf »off« (Abbildung 6). Nach<br />
dem Akzeptieren der Nutzungsbedingungen<br />
erscheinen zwei Schlüssel als Hex-<br />
Strings: die Client-ID und das Client-Secret.<br />
Da beide fest im Client verdrahtet<br />
sind, handelt es sich bei Letzterem wohl<br />
kaum um ein Geheimnis. Skripte mit beiden<br />
Werten dürfen von den Google-API-<br />
Servern nun Request-Tokens verlangen,<br />
um User einzubinden.<br />
Das Skript »google‐drive‐init« in Listing 1<br />
startet einen Mojolicious-Server auf Port<br />
8082 des lokalen Rechners, mit dem sich<br />
der Browser in Abbildung 7 verbindet.<br />
Mit diesem Verfahren hatte sich schon<br />
der Perl-Snapshot [7] anhand des Drop-<br />
box-API befasst. Es dient dazu, Google<br />
den Request-Token zu entlocken, denn<br />
beim später beschriebenen Datenabfrage-<br />
Skript handelt es sich nicht um eine Webapp.<br />
Darum muss es mit eingeweckten<br />
Web-Tokens vorlieb nehmen.<br />
Klickt der User auf den dargestellten Link<br />
»Login on Google Drive«, springt der<br />
Browser zwecks User-Authentifizierung<br />
zu Google und fragt, ob er der Applikation<br />
»splitsync«, so der frei gewählte<br />
Name der Applikation, Zugriff auf sein<br />
Drive gewährt (Abbildung 8). Nach der<br />
Bestätigung schickt Google den Browser<br />
wieder zurück auf die Redirect-URL, in<br />
diesem Fall den Mojolicious-Server auf<br />
»http://localhost:8082«. Der speichert<br />
die ebenfalls übermittelten Accessund<br />
Refresh-Tokens in der Yaml-Datei<br />
»~/.google‐drive.yml« und meldet den<br />
Erfolg mit »Token saved«.<br />
Skript als Webapp<br />
Die bei der Projekt-Registrierung erhaltene<br />
Client-ID und das Client-Secret verdrahtet<br />
Listing 1 in den Zeilen 10 und<br />
11. Als Scope gibt es »www.googleapis.<br />
com/auth/drive« an und verlangt demnach<br />
Schreib-Lese-Zugang zum Drive<br />
des Users. Entsprechende Rechte lässt<br />
sich Google in Abbildung 8 vom User<br />
einräumen.<br />
Im Mojolicious-Testserver eingehende<br />
Browseranfragen unter dem Pfad »/« landen<br />
im Handler ab Zeile 34, der den Parameter<br />
»login_url« für das Template am<br />
unteren Rand des Skripts angibt. Später<br />
Listing 1: »google‐drive‐init«<br />
001 #!/usr/local/bin/perl ‐w<br />
002 use strict;<br />
003 use Mojolicious::Lite;<br />
004 use YAML qw( DumpFile );<br />
005 use Log::Log4perl qw(:easy);<br />
006 use HTTP::Request::Common;<br />
007 use JSON qw( from_json );<br />
008 use URI;<br />
009<br />
010 my $client_id = "XXX";<br />
011 my $client_secret = "YYY";<br />
012 my $scope =<br />
013 "https://www.googleapis.com/auth/drive";<br />
014 my $listen = "http://localhost:8082";<br />
015 my($home) = glob '~';<br />
016 my $CFG_FILE =<br />
017 "$home/.google‐drive.yml";<br />
018 my $redir_uri = "$listen/callback";<br />
019<br />
020 my $login_uri = URI‐>new(<br />
021 "https://accounts.google.com" .<br />
022 "/o/oauth2/auth" );<br />
023<br />
024 $login_uri‐>query_form (<br />
025 response_type => "code",<br />
026 client_id => $client_id,<br />
027 redirect_uri => $redir_uri,<br />
028 scope => $scope,<br />
029 );<br />
030<br />
031 @ARGV = (qw(daemon ‐‐listen), $listen);<br />
032<br />
033 ###########################################<br />
034 get '/' => sub {<br />
035 ###########################################<br />
036 my ( $self ) = @_;<br />
037<br />
038 $self‐>stash‐>{login_url} =<br />
039 $login_uri‐>as_string();<br />
040<br />
041 } => 'index';<br />
042<br />
043 ###########################################<br />
044 get '/callback' => sub {<br />
045 ###########################################<br />
046 my ( $self ) = @_;<br />
047<br />
048 my $code = $self‐>param( "code" );<br />
049<br />
050 my( $access_token, $refresh_token,<br />
051 $expires_in ) =<br />
052 tokens_get( $self‐>param( "code" ) );<br />
053<br />
054 DumpFile $CFG_FILE, {<br />
055 access_token => $access_token,<br />
056 refresh_token => $refresh_token,<br />
057 client_id => $client_id,<br />
058 client_secret => $client_secret,<br />
059 expires => time() + $expires_in,<br />
060 code => $code<br />
061 };<br />
062<br />
063 $self‐>render_text( "Tokens saved.",<br />
064 layout => 'default' );<br />
065 };<br />
066<br />
067 ###########################################<br />
068 sub tokens_get {<br />
069 ###########################################<br />
070 my( $code ) = @_;<br />
071<br />
072 my $req = &HTTP::Request::Common::POST(<br />
073 'https://accounts.google.com/o/' .<br />
074 'oauth2/token',<br />
075 [<br />
076 code => $code,<br />
077 client_id => $client_id,<br />
078 client_secret => $client_secret,<br />
079 redirect_uri => $redir_uri,<br />
080 grant_type => 'authorization_code',<br />
081 ]<br />
082 );<br />
083<br />
084 my $ua = LWP::UserAgent‐>new();<br />
085 my $resp = $ua‐>request($req);<br />
086<br />
087 if( $resp‐>is_success() ) {<br />
088 my $data =<br />
089 from_json( $resp‐>content() );<br />
090<br />
091 return ( $data‐>{ access_token },<br />
092 $data‐>{ refresh_token },<br />
093 $data‐>{ expires_in } );<br />
094 }<br />
095<br />
096 warn $resp‐>status_line();<br />
097 return undef;<br />
098 }<br />
099<br />
100 app‐>start;<br />
101<br />
102 __DATA__<br />
103 ###########################################<br />
104 @@ index.html.ep<br />
105 % layout 'default';<br />
106 Login on Google Drive<br />
108<br />
109 @@ layouts/default.html.ep<br />
110 <br />
111 Token Fetcher<br />
112 <br />
113 <br />
114 <br />
115 <br />
116 <br />
117
Abbildung 6: In diesem »All services«-Einstelldialog gilt es, für das Perl-<br />
Projekt das Google-Drive-API – nicht das SDK – anzuschalten.<br />
stellt der Browser einen Link darauf dar<br />
(Abbildung 7). Die Rücksprungadresse<br />
für Google nach getaner Arbeit auf dem<br />
Mojolicious-Server liegt wegen Zeile 18<br />
unter dem Pfad »/callback«.<br />
Der zugehörige, ab Zeile 44 definierte<br />
Handler schnappt sich den von Google<br />
gesendeten Parameter »code« und gibt<br />
ihn der Funktion »tokens_get()« ab Zeile<br />
68. Sie schickt einen »POST()«-Request<br />
und das Accounts-API,<br />
packt die Client-ID<br />
und das Client-Secret<br />
bei und bekommt von<br />
Google einen Requestund<br />
einen Refresh-<br />
Token im Json-Format<br />
zurück. Vorsicht: Der<br />
Access-Token darf<br />
nicht in fremde Hände<br />
gelangen – zusammen<br />
mit dem Refresh-Token<br />
böte er Übeltätern<br />
zeitlich unbeschränkten<br />
Zugriff auf die persönliche<br />
Drive-Daten<br />
des Users!<br />
Beide legt die Funktion zusammen mit deren<br />
Verfallsdatum und den Client-ID-Daten<br />
in der Yaml-Datei »~/.google‐drive.<br />
yml« im Homeverzeichnis des Users ab,<br />
damit später Skripte wie das in Listing<br />
2 mit den Drive-Daten des Users spielen<br />
dürfen. Da das Verfallsdatum des<br />
Request-Token als relativ zur aktuellen<br />
Uhrzeit verstrichene Sekunden eintrifft,<br />
addiert Zeile 59 die aktuelle Zeit in Sekunden<br />
seit 1970 und speichert den Zeitstempel<br />
unter dem Schlüssel »expires«.<br />
Später muss ein Skript nur prüfen, ob die<br />
aktuelle Sekundenzeit den Zeitstempel<br />
überschritten hat.<br />
Auf Daten orgeln<br />
Listing 2 implementiert eine Applikation,<br />
die schaut, ob alle in einem lokalen<br />
Verzeichnis gespeicherten Dateien bereits<br />
auf Google Drive hochgespielt sind. Mit<br />
Hilfe des API schickt sie eine Anfrage an<br />
den Drive-API-Server unter dem URL-<br />
Pfad »/files«, der ein Listing aller unter<br />
dem Account des authentisierten Users<br />
liegenden Dateien anfordert. Das voreingestellte<br />
Maximum an Treffern liegt bei<br />
100, der Parameter »MaxResults« in Zeile<br />
27 setzt es auf 3000.<br />
Abbildung 7: Zum Einloggen wendet sich der User an<br />
den Mojolicious-Server.<br />
Perl-Snapshot 12/2012<br />
Programmieren<br />
www.linux-magazin.de<br />
105<br />
Listing 2: »google‐drive‐check«<br />
01 #!/usr/local/bin/perl ‐w<br />
02 use strict;<br />
03 use LWP::UserAgent;<br />
04 use HTTP::Request;<br />
05 use HTTP::Headers;<br />
06 use HTTP::Request::Common;<br />
07 use File::Basename;<br />
08 use YAML qw( LoadFile DumpFile );<br />
09 use JSON qw( from_json );<br />
10<br />
11 my( $home ) = glob "~";<br />
12 my $cfg_file = "$home/.google‐drive.yml";<br />
13 my $syncdir = "$home/books";<br />
14 my @books_local =<br />
15 map { basename $_ } ;<br />
16<br />
17 my $cfg = LoadFile $cfg_file;<br />
18<br />
19 if( $cfg‐>{ expires } ‐ 60 < time() ) {<br />
20 warn "Token needs to be refreshed.";<br />
21 token_refresh( $cfg );<br />
22 DumpFile( $cfg_file, $cfg );<br />
23 }<br />
24<br />
25 my $req = HTTP::Request‐>new(<br />
26 GET => 'https://www.googleapis.com/' .<br />
27 'drive/v2/files?maxResults=3000',<br />
28 HTTP::Headers‐>new( Authorization =><br />
29 "Bearer " . $cfg‐>{ access_token })<br />
30 )<br />
31<br />
32 my $ua = LWP::UserAgent‐>new();<br />
33 my $resp = $ua‐>request( $req );<br />
34<br />
35 if( ! $resp‐>is_success() ) {<br />
36 die $resp‐>message();<br />
37 }<br />
38<br />
39 my $data = from_json( $resp‐>content() );<br />
40<br />
41 my %books_remote = ();<br />
42<br />
43 for my $item ( @{ $data‐>{ items } } ) {<br />
44 if( $item‐>{ kind } eq "drive#file" ) {<br />
45 my $file = $item‐>{ originalFilename };<br />
46 next if !defined $file;<br />
47 $books_remote{ $file } = 1;<br />
48 }<br />
49 }<br />
50<br />
51 for my $book ( @books_local ) {<br />
52 if( !exists $books_remote{ $book } ) {<br />
53 print "Book not saved yet: [$book]\n";<br />
54 }<br />
55 }<br />
56<br />
57 ###########################################<br />
58 sub token_refresh {<br />
59 ###########################################<br />
60 my( $cfg ) = @_;<br />
61<br />
62 my $req = &HTTP::Request::Common::POST(<br />
63 'https://accounts.google.com/o' .<br />
64 '/oauth2/token',<br />
65 [<br />
66 refresh_token =><br />
67 $cfg‐>{ refresh_token },<br />
68 client_id =><br />
69 $cfg‐>{ client_id },<br />
70 client_secret =><br />
71 $cfg‐>{ client_secret },<br />
72 grant_type => 'refresh_token',<br />
73 ]<br />
74 );<br />
75<br />
76 my $ua = LWP::UserAgent‐>new();<br />
77 my $resp = $ua‐>request($req);<br />
78<br />
79 if ( $resp‐>is_success() ) {<br />
80 my $data =<br />
81 from_json( $resp‐>content() );<br />
82 $cfg‐>{ access_token } =<br />
83 $data‐>{ access_token };<br />
84 $cfg‐>{ expires } =<br />
85 time() + $data‐>{ expires_in };<br />
86 return 1;<br />
87 }<br />
88<br />
89 warn $resp‐>status_line();<br />
90 return undef;<br />
91 }
Programmieren<br />
www.linux-magazin.de Perl-Snapshot 12/2012<br />
106<br />
Abbildung 8: Google fragt seinen Benutzer, ob er<br />
der Perl-Applikation »splitsync« Zugriff auf seine<br />
Drive-Dateien einräumen will.<br />
Liegt ein gültiger Request-Token vor,<br />
kommt von Google auf den »GET«-Request<br />
in Zeile 26 ein Json-String nach<br />
Art der Abbildung 9 zurück. Er zeigt<br />
alle auf dem Drive liegenden Dateien an,<br />
und zwar unabhängig davon, in welchem<br />
Verzeichnis sie gespeichert sind.<br />
Zeile 44 prüft, ob der Parameter »kind«<br />
auf »drive#file« gesetzt ist, und Zeile 45<br />
extrahiert den Wert von »originalFilename«,<br />
den Namen der hochgeladenen<br />
Datei. Jeden Treffer speichert der Hash<br />
»%books_remote«, damit die For-Schleife<br />
ab Zeile 51, die über alle lokal im vorgegebenen<br />
Verzeichnis »~/books« gefundenen<br />
Bücher läuft, blitzschnell feststellen<br />
kann, welche Bücher noch nicht<br />
gesichert sind.<br />
Ist der in der Yaml-Datei<br />
gesicherte Access-<br />
Token abgelaufen,<br />
weil seit dem Lauf<br />
von »google‐drive‐init«<br />
mehr als eine Stunde<br />
vergangen ist, holt die<br />
Funktion »token_refresh()«<br />
ab Zeile 58<br />
einen frischen Access-<br />
Token vom Server. Sie<br />
benötigt außer dem Refresh-Token nur<br />
noch die Clientdaten, verlangt also dem<br />
Benutzer keine weiteren Eingaben ab.<br />
Dieser könnte weitere Token-Auffrischer<br />
eigentlich nur verhindern, indem er auf<br />
Google der Applikation »splitsync« die<br />
Rechte hierzu entzieht.<br />
Eine Extrawurst für<br />
dicke Dateien<br />
Ein schöner Nebeneffekt der Datenspeicherung<br />
auf Google Drive ist, dass<br />
Google den Inhalt der Dateien indiziert<br />
und eine Volltextsuche darauf erlaubt.<br />
Mit 200-MByte-Monsterdateien geht dies<br />
allerdings schief. Als weiteres Testprojekt<br />
habe ich deshalb ein Skript geschrieben,<br />
das die PDF-Dateien an Seitengrenzen in<br />
Einzelstücke von etwa 10 MByte Größe<br />
aufteilt. Das unter [1] ebenso wie die<br />
Listings 1 und 2 zum Download bereitstehende<br />
Skript beschleunigt nicht nur<br />
Abbildung 10: Volltextsuche auf den PDF-Dateien im Google-Drive.<br />
das Herunterladen bestimmter Buchteile,<br />
sondern wirft auch Googles Indizierungsmechanismus<br />
an, sodass nun, wie in Abbildung<br />
10 ersichtlich, eine Suche nach<br />
„Heuschnupfen“ tatsächlich Treffer im<br />
ebenfalls eingescannten „Medizinischen<br />
Hausbuch“ liefert.<br />
Das Drive-API erlaubt es Experimentierfreudigen,<br />
sehr funktionale Applikationen<br />
zu entwickeln, denn auch Uploads<br />
und Downloads von Dateien oder das<br />
Verschieben in Ordner sind möglich. Vielleicht<br />
legt ja eine <strong>Linux</strong>-Programmiererin<br />
oder ein ‐Programmierer einen richtigen<br />
Google-Drive-Client vor – noch bevor der<br />
Konzern in die Hufe kommt? (jk) n<br />
Infos<br />
[1] Listings zu diesem Artikel:<br />
[ftp:// www. linux‐magazin. de/ pub/ listings/<br />
magazin/ 2012/ 12/ Perl]<br />
[2] Google Drive: [http:// drive. google. com]<br />
[3] Goodreader: [http:// www. goodiware. com/<br />
goodreader. html]<br />
[4] Ez PDF: [https:// play. google. com/ store/<br />
apps/ details? id=udk. android. reader& hl=de]<br />
[5] „Integrate your app with Google Drive“:<br />
[https:// developers. google. com/ drive/]<br />
[6] API-Console: [https:// code. google. com/<br />
apis/ console# access]<br />
[7] Michael Schilli, „Ab in die Kiste“:<br />
<strong>Linux</strong>-<strong>Magazin</strong> 07/11, S. 102, [http:// www.<br />
linux‐magazin. de/ Heft‐Abo/ Ausgaben/ 2011/<br />
07/ Perl‐Snapshot]<br />
Abbildung 9: Die Json-Daten mit auf Google Drive gespeicherten Dokumenten, die das Google-API auf eine<br />
Datei-Listing-Anfrage zurückschickt.<br />
Der Autor<br />
Michael Schilli arbeitet<br />
als Software-Engineer bei<br />
Yahoo in Sunnyvale, Kalifornien.<br />
In seinen seit 1997<br />
erscheinenden Snapshots<br />
forscht er jeden Monat<br />
nach praktischen Anwendungen der Skriptsprache<br />
Perl. Unter [mschilli@perlmeister. com] beantwortet<br />
er gerne Fragen.
LINUX & DATENBANKADMINISTRATOR (M/W)<br />
XYRALITY gehˆ rt seit Verˆ ffentlichung seiner MMOGs Ñ Lords & Knightsì und Ñ Crazy Tribesì zu den erfolgreichsten und am<br />
schnellsten wachsenden Mobile Games Studios in Europa. Bereits heute arbeiten mehr als 50 engagierte Mitarbeiter an<br />
der nachhaltigen Weiterentwicklung unseres Gameportfolios.<br />
Zum n‰ chstmˆ glichen Zeitpunkt suchen wir einen <strong>Linux</strong> & Datenbankadministrator (m/w) in Vollzeit.<br />
Zu Ihren Aufgaben z‰ hlen<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Anforderungen<br />
<br />
<br />
<br />
<br />
<br />
Wir bieten<br />
<br />
<br />
<br />
<br />
Dann nutzen Sie die Chance und bewerben Sie sich jetzt unter jobs@xyrality.com<br />
<br />
www.xyrality.com/jobs
Service<br />
www.linux-magazin.de IT-Profimarkt 12/2012<br />
108<br />
PROFI<br />
MARKT<br />
Sie fragen sich, wo Sie maßgeschneiderte<br />
<strong>Linux</strong>-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 />
Die exakten Angebote jeder Firma entnehmen<br />
Sie deren Homepage. Der ersten<br />
Orientierung dienen die Kategorien<br />
Hardware, Software, Seminaranbieter,<br />
Systemhaus, Netzwerk/TK und Schulung/Beratung.<br />
Der IT-Profimarkt-Eintrag<br />
ist ein Service von <strong>Linux</strong>-<strong>Magazin</strong><br />
und <strong>Linux</strong>User.<br />
Online-Suche<br />
Besonders bequem finden Sie einen<br />
<strong>Linux</strong>-Anbieter in Ihrer Nähe über die<br />
neue Online-Umkreis-Suche unter:<br />
[http://www.it-profimarkt.de]<br />
Informationen<br />
fordern Sie bitte an bei:<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-magazin.de<br />
1 = Hardware 2 = Netzwerk/TK 3 = Systemhaus<br />
IT-Profimarkt – Liste sortiert nach Postleitzahl<br />
4= Fachliteratur 4= Seminaranbieter 5 = Software 5 = Software 6 = Schulung/Beratung 6 = 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 <strong>Linux</strong> 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 37 20 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 />
<strong>Linux</strong>-Systeme GmbH 45277 Essen, Langenbergerstr. 179 0201-298830 www.linux-systeme.de √ √ √ √ √<br />
<strong>Linux</strong>hotel 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 />
ORDIX AG 65205 Wiesbaden, Kreuzberger Ring 13 0611-77840-00 www.ordix.de √ √ √ √ √<br />
<strong>Linux</strong>Haus 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 />
IT-Profimarkt listet ausschließlich Unternehmen, die Leistungen rund um <strong>Linux</strong> bieten. Alle Angaben ohne Gewähr. <br />
(S.110)
Markt<br />
… alles nur eine Frage der Lastverteilung !<br />
BalanceNG ®<br />
●<br />
Der Software Load-Balancer für <strong>Linux</strong> und Solaris<br />
●<br />
Voll virtualisierbar<br />
●<br />
Keine zusätzliche Hardware erforderlich<br />
●<br />
Security made in Germany:<br />
Garantiert frei von versteckten “Backdoors”<br />
Alle Informationen unter: www.BalanceNG.net<br />
Inlab Software GmbH<br />
Josef-Würth-Str. 3<br />
82031 Grünwald<br />
Tel: 089 / 64911420<br />
http://www.inlab.de<br />
vertrieb@jeltimer.de<br />
Wareneingang<br />
Inventuren<br />
<br />
Erfassung mit<br />
Barcodes<br />
100.000 fach<br />
bewährte Qualität<br />
Ausweiserstellung<br />
Zutrittssysteme<br />
Zeiterfassung<br />
Joberfassung<br />
12345678<br />
HT-630<br />
Inventuren<br />
Wareneingang<br />
JEL-MR370<br />
Terminal<br />
als WEBSERVER
Service<br />
www.linux-magazin.de Markt 12/2012<br />
110<br />
IT-Profimarkt / Stellen<br />
IT-Profimarkt – Liste sortiert nach Postleitzahl (Fortsetzung von S. 108)<br />
1 = Hardware 2 = Netzwerk/TK 3 = Systemhaus<br />
4= Seminaranbieter 5 = Software 6 = Beratung<br />
Firma Anschrift Telefon Web 1 2 3 4 5 6<br />
Waldmann EDV Systeme + Service<br />
74321 Bietigheim-Bissingen,<br />
07142-21516 www.waldmann-edv.de √ √ √ √ √<br />
Pleidelsheimer Str. 25<br />
in-put Das <strong>Linux</strong>-Systemhaus 76133 Karlsruhe, Moltkestr. 49 0721-6803288-0 www.in-put.de √ √ √ √ √ √<br />
Bodenseo 78224 Singen, Pomeziastr. 9 07731-1476120 www.bodenseo.de √ √ √<br />
<strong>Linux</strong> Information Systems AG 81739 München, Putzbrunnerstr. 71 089-993412-0 www.linux-ag.com √ √ √ √ √<br />
<strong>Linux</strong>Land 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 (0) 921 / 16 49 87 87 - 0 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 />
IT-Profimarkt listet ausschließlich Unternehmen, die Leistungen rund um <strong>Linux</strong> bieten. Alle Angaben ohne Gewähr. <br />
n<br />
pascom sucht neue Mitspieler!<br />
MAGAZIN<br />
SondErAkTion<br />
Testen Sie jetzt<br />
3 Ausgaben<br />
für 3 Euro!<br />
IT-Techniker (m/w) im Bereich Support<br />
Ihr Profil:<br />
Fundierte <strong>Linux</strong>- und Netzwerkkenntnisse<br />
Hochschulabschluss, einschlägige Berufsausbildung<br />
oder Quereinsteiger<br />
Idealerweise vmware- und Asteriskerfahrung<br />
Wir bieten:<br />
Abwechslungsreiche Aufgaben<br />
Klasse Betriebsklima in jungem Team<br />
Entwicklungschancen in einem florierenden<br />
Unternehmen<br />
Bewerbungen bitte nur per E-Mail an job@pascom.net<br />
pascom Netwerktechnik | Berger Str. 42 | 94469 Deggendorf<br />
nUr<br />
MiT dVd!<br />
Jetzt schnell bestellen:<br />
• Telefon: 07131 / 2707 274<br />
• Fax 07131 / 2707 78 601<br />
• Mail abo@linux-magazin.de<br />
• http://linux-magazin.de/probeabo<br />
Mit großem Gewinnspiel (Infos unter: www.linux-magazin.de/probeabo)<br />
*Preis gilt für Deutschland<br />
LM_1-4DIN_Sonderaktion_3Euro_2109-2012.indd 1<br />
21.09.2012 16:20:21 Uhr
u<br />
Fon (0441) 4 85 15 19<br />
Fax (0441) 9 49 05 82<br />
eMail: post@werbewelten.de<br />
Seminare / Markt<br />
<strong>Linux</strong>-<strong>Magazin</strong><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 <strong>Linux</strong>-<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 />
JETZT MIT NEUEN<br />
LErNZIELEN! *<br />
*ANpAssUNg dEr LErNZIELE 2012<br />
Teststudium<br />
ohne Risiko!<br />
20%<br />
Treue-Rabatt für<br />
Abonnenten<br />
academy.linux-magazin.de/lpic<br />
Fernstudium<br />
IT-Sicherheit<br />
Aus- und Weiterbildung zur Fachkraft für<br />
IT-Sicherheit. Ein Beruf mit Zukunft. Kostengünstiges<br />
und praxisgerechtes Studium<br />
ohne Vorkenntnisse. Beginn jederzeit.<br />
NEU:PC-Techniker, Netzwerk-Techniker,<br />
<strong>Linux</strong>-Administrator LPI, Webmaster<br />
Teststudium ohne Risiko.<br />
GRATIS-Infomappe<br />
gleich anfordern!<br />
FERNSCHULE WEBER<br />
-seit 1959-<br />
Postfach 21 61<br />
Abt. C25<br />
26192 Großenkneten<br />
Tel. 0 44 87 / 263<br />
Fax 0 44 87 / 264<br />
www.fernschule-weber.de<br />
tl<br />
a<br />
ta<br />
s<br />
•<br />
n<br />
c<br />
i<br />
e<br />
h<br />
g<br />
e<br />
p<br />
rü<br />
Fernstudium<br />
s<br />
s<br />
a<br />
el<br />
g<br />
f<br />
t<br />
n<br />
d<br />
z<br />
u<br />
OpenSource Training Ralf Spenneberg<br />
Schulungen direkt vom Autor<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 />
Hacking Webapplications<br />
4 Tage 12.02. 15.02.2013<br />
<strong>Linux</strong> System Administration / LPIC1<br />
5 Tage 18.02. 22.02.2013<br />
<strong>Linux</strong> Storage Lösungen<br />
2 Tage 12.03. 13.03.2013<br />
High Availability und Loadbalancing<br />
2 Tage 14.03. 15.03.2013<br />
Apache 2.x Webserver Administration<br />
4 Tage 25.03. 28.03.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 35<br />
48565 Steinfurt<br />
Tel.: 02552 638755<br />
Fax: 02552 638757<br />
Weitere Informationen unter www.ost.de<br />
Seminare/Markt 12/2012<br />
Service<br />
www.linux-magazin.de<br />
111<br />
<strong>Linux</strong>-<strong>Magazin</strong><br />
M-Academy_1-9h_Anzeige_LPIC-Mike_v3.indd 1<br />
ür<br />
ACADEMY<br />
Online-Training<br />
Erfolgreicher Einstieg in<br />
WordPress 3<br />
mit Hans-Georg Esser, Chefredakteur Easy<strong>Linux</strong><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 />
Informationen und Anmeldung unter:<br />
academy.linux-magazin.de/wordpress<br />
12.10.2012 14:41:16 Uhr<br />
DiD you<br />
know?<br />
UNIX-C-C++ Java<br />
Seminare<br />
in Nürnberg<br />
(oder inhouse)<br />
UNIX/<strong>Linux</strong><br />
UNIX/<strong>Linux</strong>-Aufbau<br />
C, C-Aufbau<br />
C++<br />
OOA/OOD (mit UML)<br />
Java<br />
Perl, XML<br />
weitere Kurse auf Anfrage, Telephonhotline<br />
Dipl.-Ing.<br />
Christoph Stockmayer GmbH<br />
90571 Schwaig/Nbg • Dreihöhenstraße 1<br />
Tel.: 0911/505241 • Fax 0911/5009584<br />
EMail: sto@stockmayer.de<br />
http://www.stockmayer.de<br />
<strong>Linux</strong>-<strong>Magazin</strong><br />
-9h_Anzeige_wordpress_v02.indd 1<br />
ACADEMY<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 />
18.04.2011 11:18:15 Uhr<br />
Online-Training<br />
mit Hans-Georg Esser, Chefredakteur Easy<strong>Linux</strong><br />
OpenOffice -<br />
Arbeiten mit Vorlagen<br />
Mit vielen<br />
Praxisbeispielen<br />
WusstEn siE’s?<br />
<strong>Linux</strong>-<strong>Magazin</strong> und <strong>Linux</strong>User haben<br />
ein englisches Schwester magazin!<br />
Am besten, Sie informieren gleich<br />
Ihre <strong>Linux</strong>-Freunde in aller Welt...<br />
©mipan, fotolia<br />
<strong>Linux</strong>-<strong>Magazin</strong><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/openoffice<br />
www.linux-magazine.com<br />
Informationen und Anmeldung unter:<br />
academy.linux-magazin.de/sicherheit<br />
M_Academy_1-9h_Anzeige_openoffice-Mike.indd 1<br />
12.04.2011 LMI_german_2-9h_black_1906-2012.indd 15:08:54 Uhr<br />
1<br />
20.06.2012 14:54:43 Uhr<br />
LM-Academy_1-9h_Security-Mike.indd 1<br />
12.04.2011 14:00:35 Uhr
Service<br />
www.linux-magazin.de Inserenten 12/2012<br />
112<br />
Inserentenverzeichnis<br />
1&1 Internet AG http://www.einsundeins.de 18<br />
ADMIN-<strong>Magazin</strong> http://www.admin-magazin.de 101<br />
Android User GY http://www.android-user.de 63, 83<br />
Deutsche Messe AG http://www.cebit.de 47<br />
embedded projects GmbH http://www.embedded-projects.net 109<br />
Fernschule Weber GmbH http://www.fernschule-weber.de 111<br />
Galileo Press http://www.galileo-press.de 15<br />
Heinlein Professional <strong>Linux</strong> Support GmbH http://www.heinlein-support.de 45<br />
Hetzner Online AG http://www.hetzner.de 116<br />
Hostserver GmbH http://www.hostserver.de 2<br />
Ico Innovative Computer GmbH http://www.ico.de 27<br />
Inlab Software GmbH http://www.inlab.de 109<br />
JEL GmbH, Jannsen Electronic http://www.jelgmbh.de 109<br />
<strong>Linux</strong> <strong>Magazin</strong>e http://www.linux-magazine.com 111<br />
<strong>Linux</strong>-Hotel http://www.linuxhotel.de 53<br />
<strong>Linux</strong>-<strong>Magazin</strong> http://www.linux-magazin.de 110, 115<br />
<strong>Linux</strong>-<strong>Magazin</strong> Academy www.academy.linux-magazin.de 40, 111<br />
<strong>Linux</strong>-<strong>Magazin</strong> Online http://www.linux-magazin.de 93<br />
Netways GmbH http://www.netways.de 59<br />
O’Reilly Verlag GmbH & Co KG http://www.oreilly.de 17<br />
pascom - Netzwerktechnik GmbH & Co.KG http://www.pascom.net 110<br />
PlusServer AG http://www.plusserver.de 50, 78, 86, 94<br />
PrimeLine Solutions http://www.primeline-solutions.de 9, 13<br />
Schlittermann internet & unix support http://schlittermann.de 109<br />
Spenneberg Training & Consulting http://www.spenneberg.com 111<br />
Stockmayer GmbH http://www.stockmayer.de 111<br />
Strato AG http://www.strato.de 1<br />
Ubuntu User http://www.ubuntu-user.de 73<br />
XYRALITY GmbH http://www.xyrality.com 107<br />
Einem Teil dieser Ausgabe liegen Beilagen der Firmen European IT Storage Ltd.<br />
(http://www.eurostor.com) und Strato AG (http://www.strato.de) bei. Wir bitten<br />
unsere Leser um freundliche Beachtung.<br />
Veranstaltungen<br />
29.10.-03.11.2012<br />
PyCon DE 2012<br />
Leipziger KUBUS<br />
Leipzig, Deutschland<br />
https://2012.de.pycon.org<br />
02.-04.11.2012<br />
Encuentro Centroamericano de Software Libre 2012<br />
Guatemala, Guatemala<br />
http://softwarelibre.ucr.ac.cr/node/506<br />
03.11.2012<br />
9. Brandenburger <strong>Linux</strong>-Infotag 2012<br />
Universität Potsdam<br />
Potsdam, Deutschland<br />
http://blit.org<br />
05.-08.11.2012<br />
ApacheCon Europe 2012<br />
Sinsheim, Deutschland<br />
http://www.apachecon.eu<br />
07.-09.11.2012<br />
<strong>Linux</strong>con Europe<br />
Barcelona, Spain<br />
https://events.linuxfoundation.org/events/linuxconeurope<br />
12.-15.11.2012<br />
SC12<br />
Salt Lake City, UT, USA<br />
http://sc12.supercomputing.org<br />
15.-16.11.2012<br />
Summit of Newthinking<br />
newthinking communications GmbH<br />
Berlin<br />
http://open-strategies.de<br />
23.-25.11.2012<br />
Libre Office Hackfest<br />
Project Limux<br />
München<br />
http://wiki.documentfoundation.org<br />
24.11.2012<br />
14. <strong>Linux</strong>Day 2012 Dornbirn<br />
Dornbirn, Österreich<br />
http://www.linuxday.at<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 />
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<br />
Frankfurt am Main, Deutschland<br />
http://www.guug.de/veranstaltungen/ffg2013/<br />
05.-09.03.2013<br />
CeBIT 2013<br />
Messegelände<br />
30521 Hannover, Deutschland<br />
http://www.cebit.org<br />
22.-25.05.2013<br />
<strong>Linux</strong>Tag 2013<br />
Messegelände Berlin, Halle 7<br />
Messedamm 22<br />
14055 Berlin, Deutschland<br />
http://www.linuxtag.org
Impressum<br />
<strong>Linux</strong>-<strong>Magazin</strong> eine Publikation der <strong>Linux</strong> New Media, einem<br />
Geschäftsbereich der Medialinx AG<br />
Redaktionsanschrift Putzbrunner Str. 71<br />
81739 München<br />
Tel.: 089/993411-0<br />
Fax: 089/993411-99 oder -96<br />
Internet<br />
www.linux-magazin.de<br />
E-Mail<br />
redaktion@linux-magazin.de<br />
Geschäftsleitung<br />
Chefredakteur<br />
stv. Chefredakteure<br />
Redaktionsltg. Online<br />
Brian Osborn (Vorstand), bosborn@linux-magazin.de<br />
Hermann Plank (Vorstand), hplank@linux-magazin.de<br />
Jan Kleinert (V.i.S.d.P.), jkleinert@linux-magazin.de (jk)<br />
Markus Feilner, mfeilner@linux-magazin.de (mfe)<br />
Mathias Huber, mhuber@linux-magazin.de (mhu)<br />
Mathias Huber, mhuber@linux-magazin.de (mhu)<br />
Print- und Onlineredaktion<br />
Aktuell, Forum, Software,<br />
Programmierung Mathias Huber, mhuber@linux-magazin.de (mhu)<br />
Sysadmin, Know-how Markus Feilner, mfeilner@linux-magazin.de (mfe)<br />
Ständige Mitarbeiter Fred Andresen, Zack Brown, Mela Eckenfels, Heike Jurzik (hej),<br />
Anika Kehrer (ake), Peter Kreußel, Charly Kühnast,<br />
Martin Loschwitz, Michael Schilli, Tim Schürmann,<br />
Mark Vogelsberger, Uwe Vollbracht, Arnold Zimprich (azi)<br />
Schlussredaktion<br />
Grafik<br />
Bildnachweis<br />
DELUG-DVD<br />
Chefredaktionen<br />
International<br />
Produktion<br />
Onlineshop<br />
Abo-Infoseite<br />
Abonnenten-Service<br />
ISSN 1432 – 640 X<br />
Jürgen Manthey<br />
Klaus Manuel Rehfeld, Mike Gajer, Judith Erb (Art Director)<br />
xhoch4, München (Titel-Illustration)<br />
123RF.com, Fotolia.de, Photocase.com, Pixelio.de und andere<br />
Thomas Leichtenstern, tleichtenstern@linux-magazin.de (tle)<br />
<strong>Linux</strong> <strong>Magazin</strong>e International<br />
Joe Casad (jcasad@linux-magazine.com)<br />
<strong>Linux</strong> <strong>Magazin</strong>e Poland<br />
Artur Skura (askura@linux-magazine.pl)<br />
<strong>Linux</strong> <strong>Magazin</strong>e Spain<br />
Paul C. Brown (pbrown@linux-magazine.es)<br />
<strong>Linux</strong> <strong>Magazin</strong>e Brasil<br />
Rafael Peregrino (rperegrino@linuxmagazine.com.br)<br />
Christian Ullrich, cullrich@linux-magazin.de<br />
www.medialinx-shop.de<br />
www.linux-magazin.de/Produkte<br />
Veronika Kramer<br />
abo@linux-magazin.de<br />
Tel.: 07131/27 07 274<br />
Fax: 07131/27 07 78 601<br />
CH-Tel: +41 43 816 16 27<br />
Preise Print Deutschland Österreich Schweiz Ausland EU<br />
No-Media-Ausgabe 4 5,95 4 6,70 Sfr 11,90 (siehe Titel)<br />
DELUG-DVD-Ausgabe 4 8,50 4 9,35 Sfr 17,— (siehe Titel)<br />
Jahres-DVD (Einzelpreis) 4 14,95 4 14,95 Sfr 18,90 4 14,95<br />
Jahres-DVD (zum Abo 1 ) 4 6,70 4 6,70 Sfr 8,50 4 6,70<br />
Mini-Abo (3 Ausgaben) 4 3,— 4 3,— Sfr 4,50 4 3,—<br />
Jahresabo No Media 4 63,20 4 71,50 Sfr 99,96 4 75,40<br />
Jahresabo DELUG-DVD 4 87,90 4 96,90 Sfr 142,80 4 99,90<br />
Preise Digital Deutschland Österreich Schweiz Ausland EU<br />
Heft-PDF Einzelausgabe 4 5,95 4 5,95 Sfr 7,70 4 5,95<br />
DigiSub (12 Ausgaben) 4 63,20 4 63,20 Sfr 78,50 4 63,20<br />
DigiSub (zum Printabo) 4 12,— 4 12,— Sfr 12,— 4 12,—<br />
HTML-Archiv (zum Abo 1 ) 4 12,— 4 12,— Sfr 12,— 4 12,—<br />
Preise Kombiabos Deutschland Österreich Schweiz Ausland EU<br />
Mega-Kombi-Abo 2 4 143,40 4 163,90 Sfr 199,90 4 173,90<br />
Profi-Abo 3 4 136,60 4 151,70 Sfr 168,90 4 165,70<br />
1<br />
nur erhältlich in Verbindung mit einem Jahresabo Print oder Digital<br />
2<br />
mit <strong>Linux</strong>User-Abo (DVD) und beiden Jahres-DVDs, inkl. DELUG-Mitgliedschaft (monatl.<br />
DELUG-DVD)<br />
3<br />
mit ADMIN-Abo und beiden Jahres-DVDs<br />
Schüler- und Studentenermäßigung: 20 Prozent gegen Vorlage eines Schülerausweises<br />
oder einer aktuellen Immatrikulationsbescheinigung. Der aktuelle Nachweis ist bei<br />
Verlän gerung neu zu erbringen. Andere Abo-Formen, Ermäßigungen im Ausland etc.<br />
auf Anfrage.<br />
Adressänderungen bitte umgehend mitteilen, da Nachsendeaufträge bei der Post nicht<br />
für Zeitschriften gelten.<br />
Pressemitteilungen<br />
Marketing und Vertrieb<br />
Mediaberatung D, A, CH<br />
presse-info@linux-magazin.de<br />
Petra Jaser, anzeigen@linux-magazin.de<br />
Tel.: +49 (0)89 / 99 34 11 – 24<br />
Fax: +49 (0)89 / 99 34 11 – 99<br />
Mediaberatung USA Ann Jesse, ajesse@linux-magazine.com<br />
und weitere Länder Tel.: +1 785 841 8834<br />
Eric Henry, ehenry@linux-magazine.com<br />
Tel.:+1 785 917 0990<br />
Pressevertrieb<br />
Druck<br />
MZV Moderner Zeitschriften Vertrieb GmbH & Co. KG<br />
Ohmstraße 1, 85716 Unterschleißheim<br />
Tel.: 089/31906-0, Fax: 089/31906-113<br />
Vogel Druck und Medienservice GmbH, 97204 Höchberg<br />
Der Begriff Unix wird in dieser Schreibweise als generelle Bezeichnung für die Unixähnlichen<br />
Betriebssysteme verschiedener Hersteller benutzt. <strong>Linux</strong> ist eingetragenes<br />
Marken zeichen von Linus Torvalds und wird in unserem Markennamen mit seiner<br />
Erlaubnis verwendet.<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 />
Manus kripten gibt der Verfasser seine Zustimmung zum Abdruck. Für unverlangt<br />
eingesandte Manuskripte kann keine Haftung übernommen werden.<br />
Das Exklusiv- und Verfügungsrecht für angenommene Manuskripte liegt beim Verlag. Es<br />
darf kein Teil des Inhalts ohne ausdrückliche schriftliche Genehmigung des Verlags in<br />
irgendeiner Form vervielfältigt oder verbreitet werden.<br />
Copyright © 1994 – 2012 Medialinx AG<br />
Impressum 12/2012<br />
Service<br />
www.linux-magazin.de<br />
113<br />
Krypto-Info<br />
GnuPG-Schlüssel der <strong>Linux</strong>-<strong>Magazin</strong>-Redaktion:<br />
pub 1024D/44F0F2B3 2000-05-08 Redaktion <strong>Linux</strong>-<strong>Magazin</strong><br />
<br />
Key fingerprint = C60B 1C94 316B 7F38 E8CC E1C1 8EA6 1F22 44F0 F2B3<br />
Public-Key der DFN-PCA:<br />
pub 2048R/7282B245 2007-12-12,<br />
DFN-PGP-PCA, CERTIFICATION ONLY KEY (DFN-PGP-Policy: 2008-2009)<br />
<br />
Key fingerprint = 39 D9 D7 7F 98 A8 F1 1B 26 6B D8 F2 EE 8F BB 5A<br />
PGP-Zertifikat der DFN-User-CA:<br />
pub 2048R/6362BE8B (2007-12-12),<br />
DFN-PGP-User-CA, CERTIFICATION ONLY KEY (DFN-PGP-Policy: 2008-2009)<br />
<br />
Key fingerprint = 30 96 47 77 58 48 22 C5 89 2A 85 19 9A D1 D4 06<br />
Root-Zertifikat der CAcert:<br />
Subject: O=Root CA, OU=http://www.cacert.org, CN=CA Cert Signing Authority/<br />
Email=support@cacert.org<br />
SHA1 Fingerprint=13:5C:EC:36:F4:9C:B8:E9:3B:1A:B2:70:CD:80:88:46:76:CE:8F:33<br />
MD5 Fingerprint=A6:1B:37:5E:39:0D:9C:36:54:EE:BD:20:31:46:1F:6B<br />
GPG-Schlüssel der CAcert:<br />
pub 1024D/65D0FD58 2003-07-11 [expires: 2033-07-03]<br />
Key fingerprint = A31D 4F81 EF4E BD07 B456 FA04 D2BB 0D01 65D0 FD58<br />
uid CA Cert Signing Authority (Root CA) <br />
Autoren dieser Ausgabe<br />
Fred Andresen Hintertüren 70<br />
Bernhard Bablok Bash Bashing 92<br />
Bernhard Bablok Weg wie warme Semmeln 28<br />
Mela Eckenfels Sehen, hören, zeigen 42<br />
Nils Faerber Arm-Leuchter 80<br />
Rainer Grimm Rasch verschoben 96<br />
Eva-Katharina Kunst Kern-Technik 88<br />
Charly Kühnast World Wide Wechsel 55<br />
Andreas Möller Tux liest 65<br />
Rainer Poisel Tux liest 65<br />
Jürgen Quade Kern-Technik 88<br />
Björn Schilberg Eigene Wege 32<br />
Marlies Rybnicek Tux liest 65<br />
Michael Schilli Papierbuch am Ende 102<br />
Tim Schürmann Fernbedienung 36<br />
Tim Schürmann Sortengerecht angezapft 22<br />
Dr. Manuel Sojer Recycling in der Firma 74<br />
Carsten Zerbst Perfekte Planung 52<br />
Valentin Höbel Stattgegeben 62<br />
Zack Brown Zacks Kernel-News 16<br />
Ralf Spenneberg Zugriff verwehrt 56<br />
Uwe Vollbracht Tooltipps 48
Service<br />
www.linux-magazin.de <strong>Vorschau</strong> 01/2013 11/2012 12/2010 12/2012<br />
114<br />
<strong>Vorschau</strong><br />
01/2013 Dachzeile<br />
E-Mail-Archive im Überblick<br />
© Sony Sivanandan, 123RF<br />
Die Welt von Plug & Play<br />
Anwender, die ein USB-Gerät, einen Router, ein Telefon, ein<br />
Multimediagerät und so weiter irgendwo anstöpseln, erwarten<br />
heute zu Recht, dass sich danach die erwartete Funktionalität<br />
im Wesentlichen von allein einstellt. Gleiches gilt für das Ankoppeln<br />
per WLAN oder Bluetooth.<br />
Das <strong>Linux</strong>-<strong>Magazin</strong> wählt anspruchsvolle Sparten des Reinraus-Universums<br />
aus und erklärt die Abläufe im Hintergrund.<br />
Es geht um Streaming per DLNA und UPNP oder um die Frage,<br />
ob der Sonderweg Avahi zu einem sinnvollen Ziel führt. Und da<br />
Usability- und Security-Niveau sich meist gegenläufig verhalten,<br />
scheint es bei so viel anwenderfreundlichem Automatismus<br />
geboten, auch die dunkle Seite der PnP-Welt zu erkunden.<br />
MAGAZIN<br />
Überschrift<br />
Mails revisionssicher und gesetzeskonform speichern, suchen<br />
und ablegen – das ist nicht leicht und gehört doch zu den geschäftskritischen<br />
IT-Aufgaben jedes Betriebs. Das nächste Heft<br />
hält nach geeigneter Software Ausschau.<br />
Ubuntu 12.10<br />
Neben einigen drastischen Änderungen am Desktop bringt das<br />
neue Ubuntu „Quantal Quetzal“ auch einige weniger auffällige<br />
Neuerungen im Serverbereich mit: Kernel 3.5, Open Stack der<br />
Folsom-Release, das aktualisierte verteilte Speichersystem Ceph<br />
und Apache Tomcat in Version 7.<br />
Begegnung zweier Welten<br />
Die Sprache Scala wählt einen ungewöhnlichen Ansatz und<br />
verbindet funktionale Programmierung mit Objektorientierung.<br />
Diese Mischung ist offenbar für große Anwender, die Firma<br />
Twitter beispielsweise, attraktiv. Scala-Programme laufen auf<br />
der Java Virtual Machine, kein Wunder: Der Sprachenerfinder<br />
Martin Odersky hat einst den Java-Compiler mitentwickelt.<br />
Die Ausgabe 01/2013<br />
erscheint am 6. Dezember 2012<br />
Ausgabe 12/2012<br />
erscheint am 15.11.2012<br />
© Duchessa, sxc.hu<br />
<strong>Linux</strong> und Windows 8<br />
<strong>Linux</strong>-Anwender leben nicht auf einer Insel<br />
der Glückseligkeit: Oft arbeiten die Rechner in<br />
einem Netzwerk mit Windows-Clients, in manchen<br />
Fällen liegt das Betriebssystem aus Redmond<br />
sogar auf derselben Festplatte. Grund<br />
genug also, sich mit Aspekten des Nebeneinanders<br />
zu beschäftigen, etwa dem Austausch von<br />
Daten, Problemen bei der Installation oder dem<br />
einvernehmlichen Miteinander im Netz. In der<br />
kommenden Ausgabe beleuchten wir Lösungsmöglichkeiten, die sich<br />
schnell und praxisnah umsetzen lassen.<br />
Handbrake<br />
Videos zu konvertieren gehört zu den rechenintensivsten und damit<br />
zeitraubendsten Aufgaben am heimischen Rechner. Umso ärgerlicher<br />
ist es, wenn dann falsche Einstellungen für schlechte Ergebnisse sorgen.<br />
Der Konverter Handbrake sorgt mit einer Reihe vordefinierter<br />
Templates für qualitativ verlässlichen Output.<br />
Preiswert navigieren<br />
Ein Navi von Aldi und die freie Software QLandkarte GT helfen beim<br />
Navigieren in der freien Wildbahn. So planen Sie komfortabel am<br />
heimischen PC eine Route, übertragen die Daten auf die Hardware<br />
und laufen anschließend entspannt auf dem ausgetüftelten Weg die<br />
Highlights ab.<br />
Prescribe II<br />
Kyocera stattet seine Drucker mit der<br />
Kommandosprache Prescribe aus,<br />
die es erlaubt, von der Shell<br />
aus komplexe Druckaufträge<br />
und Stapelverarbeitungsläufe<br />
zu steuern und viele<br />
Handgriffe zu automatisieren.<br />
Ein Workshop in der<br />
kommenden Ausgabe demonstriert<br />
die Fähigkeiten<br />
der Sprache im Praxistest.
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
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.