40
freies Magazin März 2012 Topthemen dieser Ausgabe Objektorientierte Programmierung: Teil 1 – OOP in der Praxis Seite 6 Der Begriff der objektorientierten Programmierung (kurz OOP) existiert schon eine ganze Weile. Wer zuvor prozedural programmiert hat, erwischt sich beim Übergang zu OOP öfters dabei, wie er die früheren Funktionen einfach mit einer Klasse umgibt und dies als objektorientierte Programmierung verkauft. Die Artikelreihe soll an einem einfachen Beispiel zeigen, was man in so einem Fall besser machen könnte. (weiterlesen) MyPaint – Zeichenprogramm für kreative Künstler Seite 23 Wer im zeichnerischen Umfeld kreativ begabt ist, wird sich vielleicht einmal fragen, wie er seine bisherigen Zeichnungen auf Papier in eine digitale Variante transformiert. Die hardwareseitigen Werkzeuge, wie Grafiktablets, stehen bereits seit längerem zur Verfügung. Nun fehlt lediglich eine geeignete Software, die den Künstler möglichst umfassend in seinem Schaffensprozess unterstützt. Die meisten werden bei Grafikerstellung zunächst an GIMP, Krita oder das kom- merzielle Photoshop denken. Eine eher unbekannte, aber dennoch durchaus leistungsfähige Software für diesen Zweck, stellt in diesem Zusammenhang MyPaint dar. (weiterlesen) OpenStreetMap – Eine virtuelle Welt gedeiht Seite 26 Mit „OpenStreetMap – GoogleMaps-Klon oder doch mehr?“ wurde bereits in freiesMagazin 11/2008 das OpenStreetMap-Projekt vorgestellt, das nach dem Wiki-Prinzip eine ganze Welt- karte erstellt, die jedermann nutzen und verbessern darf. Doch drei Jahre sind eine lange Zeit, gerade für freie Projekte. Hier folgt nun das Update, wie sich die Welt seither verändert hat. (weiterlesen) © freiesMagazin CC-BY-SA 3.0 Ausgabe 03/2012 ISSN 1867-7991

Topthemen dieser Ausgabe - freiesmagazin.defreiesmagazin.de/ftp/2012/freiesMagazin-2012-03.pdf · halten an und verschlugen nun die 8250-Treiber für die entsprechenden Chips zur

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

  • freiesMagazin März 2012

    Topthemen dieser Ausgabe

    Objektorientierte Programmierung: Teil 1 – OOP in der Praxis Seite 6Der Begriff der objektorientierten Programmierung (kurz OOP) existiert schon eine ganze Weile.Wer zuvor prozedural programmiert hat, erwischt sich beim Übergang zu OOP öfters dabei,wie er die früheren Funktionen einfach mit einer Klasse umgibt und dies als objektorientierteProgrammierung verkauft. Die Artikelreihe soll an einem einfachen Beispiel zeigen, was manin so einem Fall besser machen könnte. (weiterlesen)

    MyPaint – Zeichenprogramm für kreative Künstler Seite 23Wer im zeichnerischen Umfeld kreativ begabt ist, wird sich vielleicht einmal fragen, wie er seinebisherigen Zeichnungen auf Papier in eine digitale Variante transformiert. Die hardwareseitigenWerkzeuge, wie Grafiktablets, stehen bereits seit längerem zur Verfügung. Nun fehlt lediglicheine geeignete Software, die den Künstler möglichst umfassend in seinem Schaffensprozessunterstützt. Die meisten werden bei Grafikerstellung zunächst an GIMP, Krita oder das kom-merzielle Photoshop denken. Eine eher unbekannte, aber dennoch durchaus leistungsfähigeSoftware für diesen Zweck, stellt in diesem Zusammenhang MyPaint dar. (weiterlesen)

    OpenStreetMap – Eine virtuelle Welt gedeiht Seite 26Mit „OpenStreetMap – GoogleMaps-Klon oder doch mehr?“ wurde bereits in freiesMagazin11/2008 das OpenStreetMap-Projekt vorgestellt, das nach dem Wiki-Prinzip eine ganze Welt-karte erstellt, die jedermann nutzen und verbessern darf. Doch drei Jahre sind eine langeZeit, gerade für freie Projekte. Hier folgt nun das Update, wie sich die Welt seither veränderthat. (weiterlesen)

    © freiesMagazin CC-BY-SA 3.0 Ausgabe 03/2012 ISSN 1867-7991

    http://creativecommons.org/licenses/by-sa/3.0/deed.de

  • MAGAZIN

    Editorial

    Fünfter freiesMagazin-Programmier-wettbewerbDamit sich niemand in der Ferienzeit imApril langweilen muss und weil wir die Zeitbis zum nächsten größeren freiesMagazin-Programmierwettbewerb, der meistens im Okto-ber stattfindet, sinnvoll überbrücken wollen, ha-ben wir Anfang März den fünften freiesMagazin-Programmierwettbewerb gestartet.

    Dieses Mal geht es nicht um ein theoretischesSpiel, sondern um eine reale Anwendung. Ge-sucht wird ein Wortwolken-Generator, der Tex-te einliest, die Worthäufigkeit zählt und alles alsWortwolke ausgibt. Vor allem die Darstellung derWortwolke soll den Reiz der Programmieraufga-be ausmachen. Alle weiteren Informationen fin-den Sie im zugehörigen Artikel auf Seite 37.

    Ergebnisse der Autorenrichtlinien-UmfrageLetzten Monat [1] warben wir im Editorial unteranderem um neue Autoren. Es haben sich einpaar Helfer gemeldet, sodass Sie die nächstenMonate wieder regelmäßig mit Lesestoff versorgtwerden sollten.

    Ein ehemaliger potentieller Autor [2] stellte dieThese in den Raum, dass unsere Autorenricht-linien [3] zu einschränkend sind und sich dahernur wenige finden, die für freiesMagazin schrei-ben wollen. Um das zu überprüfen, hatten wir An-fang des Monats eine Umfrage auf unserer Web-

    seite gestartet [4]. Diese lief Ende Februar aus,sodass die Ergebnisse nun vorliegen.

    Insgesamt haben sich 159 Menschen an der Um-frage beteiligt. Diese Gruppe unterteilt sich in 69Autoren (43,4 %) und 90 reine Leser (57,6 %).Von der gesamten Gruppe finden 135 Personen(85 %) unsere Autorenrichtlinien genau richtig,18 (12,5 %) zu streng und immerhin noch 4 Per-sonen (2,5 %) nicht streng genug.

    Die Gruppe, die die Autorenrichtlinien genau rich-tig findet, teilt sich in 78 reine Leser (86,7 % von90) und 57 Autoren (82,6 % von 69). Diese Zahlist uns wichtig, da sie zeigt, dass die Autorenricht-linien für einen Großteil der Leser und der Auto-ren akzeptabel und sinnvoll sind. Wir denken diesauch (sonst gäbe es die Richtlinien nicht) und ver-suchen so, eine durchgängig gute Qualität im Ma-gazin zu halten.

    Dennoch haben wir auch etwas Feedback mitge-nommen, sodass die Autorenrichtlinien ein we-nig überarbeitet wurden. Größte Neuerung isteine Kurzübersicht am Anfang der Richtlinien,die grob erläutern soll, worauf es uns ankommt,wenn jemand für freiesMagazin schreiben will.

    -in oder nicht -in?Bei der Diskussion zu den Autorenrichtlinien kamauch wieder die betagte Frage nach der Anre-de von Lesern, Nutzern und Autoren auf [5] [6].Konkret ging es darum, ob man die weiblichen

    Inhalt

    Linux allgemeinDer Februar im Kernelrückblick S. 4

    AnleitungenObjektorientierte Programmierung: Teil 1 –OOP in der Praxis

    S. 6

    Der Apache-Webserver S. 1132-Bit-Chroot-Umgebung unter Debian S. 16Selbstgebacken 2: Flickwerk S. 20

    SoftwareMyPaint – Zeichenprogramm für kreativeKünstler

    S. 23

    CommunityOpenStreetMap – Eine virtuelle Welt S. 26Rezension: Einstieg in Eclipse 3.7 S. 33Rezension: Head First Design Patterns S. 35

    MagazinEditorial S. 2Fünfter Programmierwettbewerb S. 37Veranstaltungen S. 39Konventionen S. 39Impressum S. 40

    Leser/Nutzer/Autoren explizit durch ein ange-hängtes „-innen“ erwähnen sollte. Auch neutraleFormen wie Lesende, Nutzende und Autorende(nicht ernst gemeint!) wurden vorgeschlagen.

    © freiesMagazin CC-BY-SA 3.0 Ausgabe 03/2012 2

    http://www.freiesmagazin.de/freiesMagazin-2012-02http://www.freiesmagazin.de/20120205-februarausgabe-erschienen#comment-2448http://www.freiesmagazin.de/mitmachen#autorenhttp://www.freiesmagazin.de/20120208-was-halten-sie-von-den-autorenrichtlinienhttp://www.freiesmagazin.de/node/263/results#comment-2480http://www.freiesmagazin.de/node/263/results#comment-2465http://creativecommons.org/licenses/by-sa/3.0/deed.de

  • MAGAZIN

    Das Thema ist nicht neu und wurde von unsvor zweieinhalb Jahren bereits im Editorial infreiesMagazin 09/2009 angesprochen [7]. DieResonanz auf die Diskussion kann man sicheinen Monat später in den Leserbriefen anschau-en [8]. Die meisten Leser (und explizit auch Le-serinnen) sprachen sich gegen eine Unterschei-dung aus. Wir halten dies natürlich auch wei-terhin so, aber vielleicht haben sich die Mei-nungen dazu inzwischen ja geändert. SchreibenSie uns in den Kommentaren über den Linkam Ende des Artikels oder direkt per E-Mail an

    .

    Ihre freiesMagazin-Redaktion

    LINKS

    [1] http://www.freiesmagazin.de/freiesMagazin-2012-02

    [2] http://www.freiesmagazin.de/20120205-februarausgabe-erschienen#comment-2448

    [3] http://www.freiesmagazin.de/mitmachen#autoren[4] http://www.freiesmagazin.de/20120208-was-

    halten-sie-von-den-autorenrichtlinien[5] http://www.freiesmagazin.de/node/263/results#

    comment-2480[6] http://www.freiesmagazin.de/node/263/results#

    comment-2465[7] http://www.freiesmagazin.de/freiesMagazin-2009-

    09[8] http://www.freiesmagazin.de/freiesMagazin-2009-

    10

    Das Editorial kommentieren„Spirit“ © by Randall Munroe (CC-BY-NC-2.5),

    http://xkcd.com/695/

    © freiesMagazin CC-BY-SA 3.0 Ausgabe 03/2012 3

    http://www.freiesmagazin.de/freiesMagazin-2009-09http://www.freiesmagazin.de/freiesMagazin-2009-10http://www.freiesmagazin.de/freiesMagazin-2012-02http://www.freiesmagazin.de/freiesMagazin-2012-02http://www.freiesmagazin.de/20120205-februarausgabe-erschienen#comment-2448http://www.freiesmagazin.de/20120205-februarausgabe-erschienen#comment-2448http://www.freiesmagazin.de/mitmachen#autorenhttp://www.freiesmagazin.de/20120208-was-halten-sie-von-den-autorenrichtlinienhttp://www.freiesmagazin.de/20120208-was-halten-sie-von-den-autorenrichtlinienhttp://www.freiesmagazin.de/node/263/results#comment-2480http://www.freiesmagazin.de/node/263/results#comment-2480http://www.freiesmagazin.de/node/263/results#comment-2465http://www.freiesmagazin.de/node/263/results#comment-2465http://www.freiesmagazin.de/freiesMagazin-2009-09http://www.freiesmagazin.de/freiesMagazin-2009-09http://www.freiesmagazin.de/freiesMagazin-2009-10http://www.freiesmagazin.de/freiesMagazin-2009-10http://www.freiesmagazin.de/comment/reply/267?edit[subject]=Editorial#comment-formhttp://xkcd.com/695/#On January 26th, 2274 Mars days into the mission, NASA declared Spirit a 'stationary research station', expected to stay operational for several more months until the dust buildup on its solar panels forces a final shutdown.http://creativecommons.org/licenses/by-nc/2.5/http://xkcd.com/695/http://creativecommons.org/licenses/by-sa/3.0/deed.de

  • KERNEL

    Der Februar im Kernelrückblick von Mathias Menzer

    B asis aller Distributionen ist der Linux-Kernel, der fortwährend weiterent-wickelt wird. Welche Geräte in einemhalben Jahr unterstützt werden und welcheFunktionen neu hinzukommen, erfährt man,wenn man den aktuellen Entwickler-Kernel imAuge behält.

    Linux 3.3Mit der zweiten Vorabversion [1] für Linux 3.3 ließTorvalds sich etwas mehr Zeit. Einen Grund gabes dafür nicht, außer dass er nicht daran gedachthabe. Das Ergebnis war dann ein etwas größeresPäckchen, das mehr an einen -rc3 erinnert. DieÄnderungen verteilen sich breitflächig über dengesamten Kernel, nur wenig sticht hervor. DieAufräumarbeiten in Kroah-Hartmans tty-Bereichhalten an und verschlugen nun die 8250-Treiberfür die entsprechenden Chips zur Ansteuerungvon seriellen Schnittstellen in ein eigenes Un-terverzeichnis. Der Bereich mach-mx5 innerhalbder ARM-Architektur verschwand und wurde inden imx-Bereich migriert, es handelt sich dabeium Prozessoren aus dem Portfolio von Freescale.Torvalds wies auch darauf hin, dass er einigeMerge Requests abgelehnt habe, die ihm außer-halb des Merge Window nicht angemessen er-schienen.

    Die Änderungen des -rc3 [2] hielten sich in Gren-zen. Einiges konnte sich ja schon im -rc2 finden,lediglich eine etwas größere Aktion, bei der un-genutzter DMA-Code aus dem ARM-Bereich ent-

    fernt wurde, stach auf der Änderungsstatistik insAuge. Die Zahl der Commits war dennoch für ei-ne dritte Vorabversion sehr gering.

    Dass das allerdings noch keinen Trend darstellt,zeigte Linux 3.3-rc4 [3], der wieder etwas überdas eigentlich von Torvalds favorisierte 7-Tage-Schema hinausragte und doppelt so viele Com-mits wie sein Vorgänger aufwies. Für diese Ver-zögerung gab es jedoch eine Ausrede. Die Ker-nelentwickler hatten mit einem der fiesen Feh-ler zu tun, die nur unter speziellen Umständenauftreten und schon dadurch schwer zu findensind. In diesem Fall kam es zu einer Fehlbehand-lung von Fließkommawerten, wenn auf einemProzessor mit AES-Befehlssatzerweiterung [4]ein 32-Bit-Kernel genutzt wird und gleichzeitigein WLAN-Treiber die AES-Unterstützung nutzenmöchte. Die Korrektur für diesen Fehler wurde inden Entwicklerkernel eingepflegt, soll jedoch inKürze auch auf die betroffenen stabilen Kernel-Versionen zurückportiert werden. Ansonsten sah-rc4 recht eindrucksvoll aus: 44.000 gelöschteZeilen Quelltext sind so weit im Entwicklungs-zyklus ungewöhnlich. Doch es handelt sich hiernicht um einen Fehler bei der Handhabung derStatistik-Werkzeuge von GIT, sondern um denVerlust zweier Treiber aus dem staging-Zweig.Während Intels GMA500-Treiber allerdings be-reits seit längerem auch im DRM-Bereich vor-liegt, lässt sich dessen Wegfall verschmerzen.pohmelfs [5] jedoch musste tatsächlich weichen,allerdings nicht für immer. Es wird bereits an

    einer überarbeiteten Version des Netzwerkdatei-systems gebastelt, sodass man hier lediglich dessowieso nicht mehr gepflegten Codes verlustigwurde.

    Mit Linux 3.3-rc5 [6] scheint sich die Ent-wicklung etwas beruhigt zu haben, er kamauch innerhalb der 7-Tage-Frist. Hauptsäch-lich Fehlerkorrekturen und kleine Verbesserun-gen verteilen sich Querbeet über den gan-zen Kernel, etwas mehr Aufmerksamkeit ließman QLogics FibreChannel-Treiber qla2xxx undder Grafikkomponente von Samsungs System-on-Chip-Architektur EXYNOS angedeihen. Diein -rc4 begonnene Putzsaison ging aber wei-ter, Entwickler des Telekommunikationsgeräte-herstellers ZTE [7] räumten am USB-option-Treiber ihre Geräte-IDs auf. Eigentlich nur eineRandbemerkung im Wust der Patches, wurdeder ti3410-Treiber für die entsprechenden USB-Seriell-Chips um eine Geräte-ID erweitert, mittelsderer die Geräte von Abbott Diabetes Care [8], ei-nem Hersteller für Blutzuckermessgeräte, am PCangebunden werden können. Es wird vermutlichnicht viele Menschen geben, die auf diese Ge-räte angewiesen sind und zugleich Linux nutzen,doch das bemerkenswerte an Linux ist, dass un-abhängig davon diese Möglichkeit trotzdem be-steht.

    ASPMDer Begriff ASPM (Active State Power Ma-nagement), eine Energiespartechnik der PCIe-

    © freiesMagazin CC-BY-SA 3.0 Ausgabe 03/2012 4

    https://lkml.org/lkml/2012/1/31/400https://lkml.org/lkml/2012/2/8/517https://lkml.org/lkml/2012/2/18/105https://de.wikipedia.org/wiki/AES_%28Befehlssatzerweiterung%29https://en.wikipedia.org/wiki/POHMELFShttps://lkml.org/lkml/2012/2/25/71https://de.wikipedia.org/wiki/ZTEhttps://en.wikipedia.org/wiki/Abbott_Laboratories#Diabetes_Carehttp://creativecommons.org/licenses/by-sa/3.0/deed.de

  • KERNEL

    Schnittstelle, ist mittlerweile vielen geläufig. DerGrund liegt in den Problemen, die viele Note-bookbesitzer mit der Laufzeit ihrer Akkus hatten,nachdem unter Linux 2.6.38 der ASPM-Code „op-timiert“ wurde. Im November hatte man auchschon eine Möglichkeit gefunden, den Fehler zubeheben (siehe „Der November im Kernelrück-blick“, freiesMagazin 12/2011 [9]), doch schafftees der Patch leider nicht mehr in den Kernel 3.2.Dies wurde nun nachgeholt, die aktuell stabilenKernelversionen 3.2.5 [10] und 3.0.20 [11] soll-ten nun Notebook-Nutzern wieder die bis 2.6.37gewohnte kabellose Freiheit zurückgeben.

    Kroah-Hartman → Linux FoundationWer aufmerksam die Patches studiert, dem fieles schon vor der offiziellen Ankündigung [12] auf:Mit dem Kommentar „Greg’s suse email addressis dead“ [13] tauschte Greg Kroah-Hartman, eineder Hauptfiguren der Kernel-Entwicklung, seinebisherige E-Mail-Adresse im MAINTAINERS-Filegegen eine neue aus, die der Linux Foundati-on [14] zugeordnet werden kann – er wurde in dieGruppe der „Linux Foundation fellows“ [15] aufge-nommen [16]. Damit wird er nun, wie auch Haupt-entwickler Linus Torvalds, von der Linux Foun-dation bezahlt und widmet sich nun ausschließ-lich der Kernel-Entwicklung. Wenn dies auch beiseinem bisherigen Arbeitgeber Novell bereits zu-treffend war, ist er nun von den Zielen eines Un-ternehmens unabhängig.

    Im Kielwasser dieses Wechsels gab Kroah-Hartman dann auch einen kleinen Überblick überseine Tätigkeiten [17]. Die Hauptaufgabe sind

    hier die stabilen Kernel-Versionen, deren Versor-gung mit Sicherheitsaktualisierungen und Feh-lerkorrekturen sichergestellt sein will. Ein weite-rer wichtiger Part sind einige Subsysteme desKernels, darunter der USB-Bereich, der Haupt-bereich der Treiber, die tty-Umgebung [18] undder staging-Zweig. Deren Weiterentwicklung undPflege fällt ebenfalls Kroah-Hartman zu, sodasser hier als Maintainer (Betreuer) Patches vonanderen Entwicklern begutachtet, einpflegt undin den Entwickler-Kernel überführt. Er entwickeltdiese Bereich auch selbst weiter, bastelt neueTreiber oder verbessert bestehende Funktionenund sucht und behebt Fehler. Als Kopf des LinuxDriver Project koordiniert er die Arbeiten dieserGruppe, die Hardwareproduzenten bei der Pro-grammierung von Linux-Treibern für ihre Produk-te unter die Arme greift. Ein recht junges Projektnamens „Long Term Support Initiative“ soll einenKernel bereitstellen und pflegen, der von Her-stellern von Unterhaltungselektronik genutzt wer-den kann, und setzt dabei ebenfalls auf Kroah-Hartmans Unterstützung. Auch wenn er nun nichtmehr für Novell arbeitet, wird er trotzdem anSUSE Tumbleweed [19] weiterarbeiten.

    LINKS[1] https://lkml.org/lkml/2012/1/31/400[2] https://lkml.org/lkml/2012/2/8/517[3] https://lkml.org/lkml/2012/2/18/105[4] https://de.wikipedia.org/wiki/AES_(Befehlssatzer

    weiterung)[5] https://en.wikipedia.org/wiki/POHMELFS[6] https://lkml.org/lkml/2012/2/25/71

    [7] https://de.wikipedia.org/wiki/ZTE[8] https://en.wikipedia.org/wiki/Abbott_Laboratories#

    Diabetes_Care[9] http://www.freiesmagazin.de/freiesMagazin-2011-

    12[10] https://lkml.org/lkml/2012/2/6/284[11] https://lkml.org/lkml/2012/2/6/283[12] http://www.linuxfoundation.org/news-media/

    announcements/2012/01/leading-kernel-maintainer-greg-kroah-hartman-joins-linux-foundation

    [13] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commit;h=879a5a001b62a020e074d460b3a7c0fd993f9832

    [14] https://de.wikipedia.org/wiki/Linux_Foundation[15] http://www.linuxfoundation.org/programs/

    developer/fellowship[16] http://www.pro-linux.de/news/1/17987/greg-

    kroah-hartman-wechselt-zur-linux-foundation.html

    [17] http://www.kroah.com/log/linux/what_greg_does.html

    [18] https://de.wikipedia.org/wiki/TTY-Schnittstelle[19] http://de.opensuse.org/Portal:Tumbleweed

    Autoreninformation

    Mathias Menzer (Webseite) hälteinen Blick auf die Entwicklung desLinux-Kernels und erfährt frühzeitigDetails über interessante Funktionen.

    Diesen Artikel kommentieren

    © freiesMagazin CC-BY-SA 3.0 Ausgabe 03/2012 5

    http://www.freiesmagazin.de/freiesMagazin-2011-12https://lkml.org/lkml/2012/2/6/284https://lkml.org/lkml/2012/2/6/283http://www.linuxfoundation.org/news-media/announcements/2012/01/leading-kernel-maintainer-greg-kroah-hartman-joins-linux-foundationhttp://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commit;h=879a5a001b62a020e074d460b3a7c0fd993f9832https://de.wikipedia.org/wiki/Linux_Foundationhttp://www.linuxfoundation.org/programs/developer/fellowshiphttp://www.pro-linux.de/news/1/17987/greg-kroah-hartman-wechselt-zur-linux-foundation.htmlhttp://www.kroah.com/log/linux/what_greg_does.htmlhttps://de.wikipedia.org/wiki/TTY-Schnittstellehttp://de.opensuse.org/Portal:Tumbleweedhttps://lkml.org/lkml/2012/1/31/400https://lkml.org/lkml/2012/2/8/517https://lkml.org/lkml/2012/2/18/105https://de.wikipedia.org/wiki/AES_%28Befehlssatzerweiterung%29https://de.wikipedia.org/wiki/AES_%28Befehlssatzerweiterung%29https://en.wikipedia.org/wiki/POHMELFShttps://lkml.org/lkml/2012/2/25/71https://de.wikipedia.org/wiki/ZTEhttps://en.wikipedia.org/wiki/Abbott_Laboratories#Diabetes_Carehttps://en.wikipedia.org/wiki/Abbott_Laboratories#Diabetes_Carehttp://www.freiesmagazin.de/freiesMagazin-2011-12http://www.freiesmagazin.de/freiesMagazin-2011-12https://lkml.org/lkml/2012/2/6/284https://lkml.org/lkml/2012/2/6/283http://www.linuxfoundation.org/news-media/announcements/2012/01/leading-kernel-maintainer-greg-kroah-hartman-joins-linux-foundationhttp://www.linuxfoundation.org/news-media/announcements/2012/01/leading-kernel-maintainer-greg-kroah-hartman-joins-linux-foundationhttp://www.linuxfoundation.org/news-media/announcements/2012/01/leading-kernel-maintainer-greg-kroah-hartman-joins-linux-foundationhttp://www.linuxfoundation.org/news-media/announcements/2012/01/leading-kernel-maintainer-greg-kroah-hartman-joins-linux-foundationhttp://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commit;h=879a5a001b62a020e074d460b3a7c0fd993f9832http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commit;h=879a5a001b62a020e074d460b3a7c0fd993f9832http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commit;h=879a5a001b62a020e074d460b3a7c0fd993f9832https://de.wikipedia.org/wiki/Linux_Foundationhttp://www.linuxfoundation.org/programs/developer/fellowshiphttp://www.linuxfoundation.org/programs/developer/fellowshiphttp://www.pro-linux.de/news/1/17987/greg-kroah-hartman-wechselt-zur-linux-foundation.htmlhttp://www.pro-linux.de/news/1/17987/greg-kroah-hartman-wechselt-zur-linux-foundation.htmlhttp://www.pro-linux.de/news/1/17987/greg-kroah-hartman-wechselt-zur-linux-foundation.htmlhttp://www.kroah.com/log/linux/what_greg_does.htmlhttp://www.kroah.com/log/linux/what_greg_does.htmlhttps://de.wikipedia.org/wiki/TTY-Schnittstellehttp://de.opensuse.org/Portal:Tumbleweedhttp://www.menzer.net/http://www.freiesmagazin.de/comment/reply/267?edit[subject]=Der Februar im Kernelr%C3%BCckblick#comment-formhttp://creativecommons.org/licenses/by-sa/3.0/deed.de

  • PROGRAMMIERUNG

    Objektorientierte Programmierung: Teil 1 – OOP in der Praxis von Dominik Wagenführ

    D er Begriff der objektorientierten Pro-grammierung (kurz OOP [1]) existiertschon eine ganze Weile. Wer zuvorprozedural programmiert hat, erwischt sichbeim Übergang zu OOP öfters dabei, wie erdie früheren Funktionen einfach mit einerKlasse umgibt und dies als objektorientier-te Programmierung verkauft. Die Artikelreihesoll an einem einfachen Beispiel zeigen, wasman in so einem Fall besser machen könnte.

    Hinweis: Für den Artikel wird erwartet, dass manweiß, was Klassen, Interfaces, Attribute und Ope-rationen sind. Es schadet auch nicht, ein paarDinge über Unified Modeling Language (UML [2])zu wissen, wobei die UML-Diagramme auch oh-ne großes Vorwissen verstanden werden kön-nen.

    EinleitungBevor auch nur ein Satz zur „richtigen“ Anwen-dung von objektorientierter Programmierung fällt,soll vorausgeschickt werden, dass es keine abso-lut richtige Programmierung gibt. Ähnlich wie beiBuchautoren sind Programmierer und deren Pro-grammierstile sehr verschieden. Stellt man zehnEntwicklern eine (komplexe) Aufgabe, kann mansicher sein, dass man zehn verschiedene Lösun-gen erhalten wird und von jeder wird der Entwick-ler in der Regel auch sagen, dass sie gut sei.

    Dennoch haben sich im Laufe der Zeit verschie-dene Programmierparadigmen und -muster her-

    ausgebildet, die allgemein als sinnvoll anerkanntwerden. Zu dem Thema gibt es entsprechend vie-le Bücher, am bekanntesten ist wahrscheinlichdas Buch der „Gang of Four“ [3] Erich Gamma,Richard Helm, Ralph Johnson und John Vlissi-des namens „Design Patterns. Elements of Re-usable Object-Oriented Software“ [4]. Das Buchgibt es auch auf Deutsch unter dem Titel „Ent-wurfsmuster: Elemente wiederverwendbarer ob-jektorientierter Software“ [5] und beschreibt zahl-reiche Entwurfsmuster, die beim Design objekt-orientierter Software benutzt werden können.

    Neben diesem Buch wurde für die Artikelreiheauch noch auf das sehr gute „Head First DesignPatterns“ von Eric Freeman, Elisabeth Freeman,Bert Bates und Kathy Sierra [6] zurückgegriffen,welches ebenfalls auf Deutsch unter dem Titel„Entwurfsmuster von Kopf bis Fuß“ [7] erhältlichist (siehe Rezension des Buches auf Seite 35).

    Der Artikel soll entsprechend der Bücher nichtzwingend erklären, was gut und schlecht ist.Wenn eine Implementierung ein Problem löst, istsie prinzipiell gut. Dennoch kann sie Nachteilehaben, die es bei einem anderen Lösungsansatznicht gegeben hätte. Dies hängt aber auch immervon den eigenen Präferenzen ab. Bei einem Pro-gramm, was man einmalig schreibt und welchesdanach ganz sicher nie wieder angepasst odererweitert werden muss („Wegwerfsoftware“), istes eher nicht sinnvoll, zu viel Zeit in ein gutesSoftware-Design zu stecken – außer man hat ex-

    trem viel Spaß daran. Bei langlebiger und war-tungsintensiver Software, wie sie in der Regelbei Firmen zum Einsatz kommt, kann ein gutesSoftware-Design aber von Vorteil sein.

    Das Design wird mithilfe des UML-ProgrammsVisual Paradigm [8] erstellt und dargestellt (sie-he „UML-Programme im Test“, freiesMagazin02/2012 [9]). Für die beispielhafte Umsetzungwird C++ benutzt. Jeder Leser kann die Aufga-ben aber auch in anderen OOP-fähigen Spra-chen wie Java, Python, Perl oder Ruby [10] nach-programmieren.

    Im Laufe der Reihe wird das anfängliche Beispieldann verbessert und soll immer unter folgendenGesichtspunkten betrachtet werden:

    � Anzahl der Abhängigkeiten� Verantwortlichkeit einer Klasse� Bedeutung für Wartbarkeit und Erweiterbarkeit

    Hinweis: Da ich C++-Entwickler bin, sind ggf.einige Lösungsaspekte allein der Sprache ge-schuldet. Bei anderen Programmiersprachen er-gibt sich ein Problem gar nicht oder man würdees anders lösen. Es wird aber versucht, sprach-unabhängige Lösungen aufzuzeigen.

    Ein erstes BeispielAnforderungenAls (anfangs schlechtes) Beispiel soll der vier-te Programmierwettwerb von freiesMagazin her-halten [11]. Für diesen wurde ein Beispiel-Bot

    © freiesMagazin CC-BY-SA 3.0 Ausgabe 03/2012 6

    https://secure.wikimedia.org/wikipedia/de/wiki/Objektorientierte_Programmierunghttp://www.uml.org/https://de.wikipedia.org/wiki/Entwurfsmuster_%28Buch%29http://www.amazon.de/Patterns-Elements-Reusable-Object-Oriented-Software/dp/0201633612/http://www.amazon.de/Entwurfsmuster-Elemente-wiederverwendbarer-objektorientierter-Software/dp/3827321999/http://www.amazon.de/Head-First-Design-Patterns-Freeman/dp/0596007124/http://www.amazon.de/Entwurfsmuster-von-Kopf-bis-Fu%C3%9F/dp/3897214210/http://www.visual-paradigm.com/product/vpuml/http://www.freiesmagazin.de/freiesMagazin-2012-02https://secure.wikimedia.org/wikipedia/de/wiki/Liste_objektorientierter_Programmiersprachenhttp://www.freiesmagazin.de/20111001-vierter-freiesmagazin-programmierwettbewerb-gestartethttp://creativecommons.org/licenses/by-sa/3.0/deed.de

  • PROGRAMMIERUNG

    geschrieben, der den Teilnehmern als Sparring-partner diente. Dieser soll hier etwas vereinfachtnachprogrammiert werden, sodass er folgendeAnforderungen erfüllt:

    � Spielverwaltung und Bot getrennt� Einlesen von Benutzereingaben (Zahlen zwi-

    schen 0 und 1000)� Antwort des Bots nach einer bestimmten Stra-

    tegie, die im Programm per Kommandozeileausgelesen wird

    � Drei vordefinierte Strategien:1. immer annehmen2. immer ablehnen3. Annahme, wenn größer gleich 200. Wenn

    dreimal nacheinander kleiner 200, dann im-mer Ablehnung; wenn dreimal nacheinan-der größer als 700, dann immer Annahme.

    � Bot soll angenommene Punkte zählen und amEnde ausgeben

    Da bei der Entwicklung eher das Software-Design im Vordergrund steht und damit die Bei-spielprogramme nicht zu lang werden, wird we-niger Gewicht auf ausführliche Dokumentationoder Fehlerbehandlung gelegt.

    Naive DesignumsetzungWenn man sich keine großen Gedanken über ei-ne Umsetzung macht bzw. einfach sehr faul ist,erstellt man zwei Klassen. Eine Klasse Game, wel-che die Spielverwaltung und Erstellung des Botsübernimmt, und eine Klasse Bot, welche die Stra-tegie bestimmt und die Punkte zählt. Dies warauch der erste Ansatz für den Beispielbot des

    Programmierwettbewerbs, woraus dann auch dieIdee für die Artikelreihe entstanden ist.

    Das Software-Design der naiven Umsetzung.

    Klassenaufteilung

    Um sich klar zu machen, welche Aufga-be eine Klasse hat, kann man sogenann-te CRC-Karten einsetzen (Class-Responsibility-Collaboration-Karten [12]). Diese enthalten denKlassennamen, die Verantwortlichkeit und alle

    anderen Objekte, die die Klasse benötigt. Fürdas erste Beispiel sähen diese so aus:

    Klasse: BotBenötigt: –Verantwort.: nimmt Angebote an oder lehnt sie

    je nach Strategie ab; zählt die an-genommenen Punkte

    Klasse: GameBenötigt: BotVerantwort.: erstellt Bot und setzt die Stra-

    tegie (aus Konsolenparameter);liest Benutzereingabe und fragtBot nach Annahme oder Ableh-nung

    AbhängigkeitsanalyseVorwortWieso sind Abhängigkeiten überhaupt wichtig?Stark vernetzte Software (das heißt eine mit vie-len Verbindungen zwischen den Klassen) führtfrüher oder später zu einem nicht mehr über-schaubaren Wust an Code. So kann man irgend-wann nicht mehr sagen, welche Teile einer Soft-ware unabhängig voneinander arbeiten können– zum Beispiel in Form von Bibliotheken. Daherbemüht man sich in der Regel, die Abhängigkei-ten zwischen einzelnen Softwareteilen (Kompo-nenten) gering zu halten.

    Nicht in allen Sprachen wirken sich die Abhängig-keiten der Software unbedingt negativ aus. C++ist aber ein sehr schönes Beispiel, da hier dieAbhängigkeiten direkten Einfluss auf die Generie-rung nehmen. Hat man eine Software, die aus 50

    © freiesMagazin CC-BY-SA 3.0 Ausgabe 03/2012 7

    http://www.freiesmagazin.de/mobil/2012-03-bilder/oop1-design.pnghttp://www.freiesmagazin.de/mobil/2012-03-bilder/oop1-design.pnghttps://secure.wikimedia.org/wikipedia/de/wiki/Class-Responsibility-Collaboration-Kartenhttp://creativecommons.org/licenses/by-sa/3.0/deed.de

  • PROGRAMMIERUNG

    Bibliotheken und Hunderten von Klassen besteht,die alle kreuz und quer miteinander vernetzt sind,führt die Änderung einer einzigen Header-Dateioft dazu, dass alle Klassen und alle Bibliothe-ken neu übersetzt werden müssen. Dies versuchtman normalerweise zu vermeiden, da es unnöti-gen Zeitaufwand bedeutet (was mit hinausgewor-fenem Geld gleichzusetzen ist).

    Zusätzlich ist eine Software mit vielen Abhän-gigkeiten nur noch schwer zu verstehen, da esbei kleinen Änderungen bereits unerwünschteSeiteneffekte geben kann. Auch unerwünschtezyklische Abhängigkeiten [13] können so leich-ter auftreten. Ebenso werden Unit-Tests (oderModul-Tests [14]) durch zu viele Abhängigkeitenerschwert.

    Hinweis: Mit Abhängigkeit ist jede Verbin-dung einer Klasse zu einer anderen gemeintund nicht eine Abhängigkeit im strengen UML-Sprachgebrauch [15].

    AnalyseWelche Abhängigkeiten ergeben sich also ausden zwei Klassen?

    Die Klasse Bot hat nur Abhängigkeiten zuStandard-Datentypen wie string und int, dienicht ins Gewicht fallen.

    Die Klasse Game ist direkt von Bot abhängig,da der Bot von ihr erstellt und danach be-nutzt wird. Im UML-Modell wird dies dann mit-tels einer Abhängigkeitsbeziehung vom Stereo-typ instantiate dargestellt.

    Vor- und NachteileWie man an den CRC-Karten sieht, haben diezwei Klassen Bot und Game nicht nur eine Aufga-be, sondern mehrere. Dies ist nicht immer, aberoft ein Hinweis darauf, dass man seine Klassenfalsch „geschnitten“ hat.

    Man hätte es aber sogar noch schlimmer ma-chen und die Benutzereingabe auch direkt inBot auslesen können, ebenso wie die kompletteSpielverwaltung. Dann wäre die Klasse aber einechter Gemischtwarenladen an Aufgaben und esgäbe gar keine klare Verantwortlichkeit der Klas-se Bot mehr. (So ein Objekt nennt man gemein-hin Gott-Objekt [16].)

    Der Nachteil des obigen Designs ist also, dassdie Klassen zu viele Aufgaben übernehmen. Soist es eher seltsam, dass die Klasse Game denBot erstellt. Ebenso kann man überlegen, obes sinnvoll ist, dass Game die Interpretation derBenutzereingaben übernimmt. In der Artikelreihesoll sich aber mehr auf den Bot und dessen Stra-tegien konzentriert werden. Aber auch dieser hatmehrere Verantwortlichkeiten, wie man sieht.

    Ein weiterer Nachteil ist, dass die Übersicht inder Klasse Bot leidet, wenn es sehr viele Stra-tegien gibt. Diese werden durch zig if-Abfragenanhand der Zeichenkette mStrategy in der Ope-ration acceptOffer unterschieden. Wenn manalso 30 Strategien hat, die mitunter um einigeskomplexer sind als die Beispielstrategien, wirddas extrem unübersichtlich. Daneben muss manz. B. für die Strategie, dass man ein Angebotimmer annimmt, das Attribut mNumAcceptInRow

    speichern, auch wenn man es in dem Fall garnicht benötigt.

    Der dritte Nachteil ist, dass die Bibliotheklibgame neu übersetzt werden muss, wenn sichin der Deklaration von Bot etwas ändert. Dies er-gibt sich aus der direkten Abhängigkeit der Klas-sen. (Dies spielt aber in manchen Sprachen, wieoben geschrieben, keine große Rolle.) Als Fol-ge davon wäre auch ein Unit-Test der KlasseGame nur schwer machbar, d. h. wenn man dieKlasse Game testet (z. B. die Operation start),testet man automatisch auch immer die Klas-se Bot mit. (In C++ hätte man nur die Möglich-keit, den Include- und Library-Pfad anzupassen,um eine neue Implementierung unterzuschieben.Bei anderen Sprachen kann man die Klasse Botund dessen Methoden zur Laufzeit überschrei-ben [17].)

    Der Vorteil der Implementierung ist natürlich ihreEinfachheit. Es gibt nur zwei Klassen und alles istschön übersichtlich. Leicht erweiterbar oder wart-bar ist es auf Dauer aber nicht.

    Die C++-Implementierung der zwei Klassenkann als Archiv heruntergeladen werden: oop1-beispiel.tar.gz.

    Ableitungen noch und nöcherEin sehr mächtiges Mittel der objektorientiertenProgrammierung ist die Ableitung bzw. Genera-lisierung [18]. Mit ihrer Hilfe kann man bereitsbestehende Klassen um weitere Eigenschaften

    © freiesMagazin CC-BY-SA 3.0 Ausgabe 03/2012 8

    https://de.wikipedia.org/wiki/Zirkul%C3%A4re_Abh%C3%A4ngigkeithttps://de.wikipedia.org/wiki/Modultesthttps://de.wikipedia.org/wiki/Abh%C3%A4ngigkeitsbeziehung_%28UML%29https://secure.wikimedia.org/wikipedia/de/wiki/God_objecthttps://secure.wikimedia.org/wikipedia/de/wiki/Mock-Objekthttp://www.freiesmagazin.de/mobil/2012-03-listings/oop1-beispiel.tar.gzhttp://www.freiesmagazin.de/mobil/2012-03-listings/oop1-beispiel.tar.gzhttps://de.wikipedia.org/wiki/Generalisierung_%28UML%29http://creativecommons.org/licenses/by-sa/3.0/deed.de

  • PROGRAMMIERUNG

    (Attribute und Operation) erweitern. Dieses Mit-tel soll benutzt werden, um den Nachteil zu behe-ben, dass die Methode acceptOffer der KlasseBot bei sehr vielen Strategien zu unübersichtlichwird.

    DesignDas heißt, dass man eine Basisklasse BaseBoterstellt und die konkreten Ableitungen davon diejeweilige Strategie umsetzen. Damit nicht jederkonkrete Bot die Punkte zählen muss, übernimmtdie Basisklasse diese Aufgabe.

    KlassenaufteilungDie CRC-Karten schauen nun wie folgt aus:

    Klasse: BaseBotBenötigt: –Verantwort.: Basisklasse, welches die ange-

    nommenen Punkte zählt

    Klasse: AcceptBotBasisklasse: BaseBotBenötigt: –Verantwort.: nimmt ein Angebot immer an

    Klasse: DeclineBotBasisklasse: BaseBotBenötigt: –Verantwort.: lehnt ein Angebot immer ab

    Klasse: VariableBotBasisklasse: BaseBotBenötigt: –Verantwort.: entscheidet variabel, ob ein Ange-

    bot abgelehnt oder angenommenwird

    Die drei Generalisierungen des BaseBot.

    Klasse: GameBenötigt: BaseBot, AcceptBot, DeclineBot,

    VariableBot

    Verantwort.: erstellt den richtigen Bot; liest Be-nutzereingabe und fragt Bot nachAnnahme oder Ablehnung

    © freiesMagazin CC-BY-SA 3.0 Ausgabe 03/2012 9

    http://www.freiesmagazin.de/mobil/2012-03-bilder/oop2-design.pnghttp://www.freiesmagazin.de/mobil/2012-03-bilder/oop2-design.pnghttp://creativecommons.org/licenses/by-sa/3.0/deed.de

  • PROGRAMMIERUNG

    AbhängigkeitenMan hat zwar nun die vorherige Klasse Bot in ver-schiedene konkrete Klassen aufgeteilt, dadurcherhält die Klasse Game aber auch mehr Abhän-gigkeiten, da sie die drei konkreten Bots alle er-zeugen muss.

    Daneben hat man auch eine Abhängigkeit zurBasisklasse BaseBot, da man die Punkte am En-de ausgeben will und getPoints aufrufen muss.

    Die konkreten Bots hängen natürlich von der Ba-sisklasse BaseBot ab.

    Vor- und NachteileDie oben stehenden Bot-Klassen haben nun allenur noch eine Verantwortlichkeit, was sehr gut ist.Daneben ist es schön, dass man, um eine neueStrategie einzubringen, nur die Klasse BaseBotein weiteres Mal ableiten muss.

    Ein Nachteil jetzt ist aber die Erweiterbarkeit. Willman einen neuen Bot hinzufügen, muss mandie Klasse Game entsprechend anpassen, da sieden richtigen Bot erstellen muss. Wenn mandas oft genug macht, fragt man sich, ob es ei-ne gute Idee war, Game und die jeweiligen Bot-Implementierungen so eng miteinander zu ver-knüpfen.

    Ebenso leidet aber auch die Wartbarkeit. Ändertsich eine der konkreten Bot-Deklarationen (weilz. B. ein Bot für seine Strategie weitere Attributebenötigt), muss auch die Bibliothek libgame neuübersetzt werden.

    Die Übersichtlichkeit ist zwar noch gewährleistet,man stelle sich aber vor, der Bot hätte noch zweiandere Eigenschaften in jeweils drei Ausprägun-gen, die in verschiedenen Kombinationen auftre-ten können. Dann müsste man im Extremfall 27(3 hoch 3) Klassen erstellen, die alle diese Mög-lichkeiten abbilden.

    ImplementierungDie C++-Implementierung der obigen Klassenkann als Archiv heruntergeladen werden: oop2-beispiel.tar.gz.

    AusblickIm nächsten Teil soll das erste Entwurfsmustervorgestellt werden, welches im Design dieses Tei-les bereits ein bisschen benutzt wurde.

    LINKS[1] https://secure.wikimedia.org/wikipedia/de/wiki/

    Objektorientierte_Programmierung[2] http://www.uml.org/[3] https://de.wikipedia.org/wiki/Entwurfsmuster_(Buch)[4] http://www.amazon.de/Patterns-Elements-

    Reusable-Object-Oriented-Software/dp/0201633612/

    [5] http://www.amazon.de/Entwurfsmuster-Elemente-wiederverwendbarer-objektorientierter-Software/dp/3827321999/

    [6] http://www.amazon.de/Head-First-Design-Patterns-Freeman/dp/0596007124/

    [7] http://www.amazon.de/Entwurfsmuster-von-Kopf-bis-Fuß/dp/3897214210/

    [8] http://www.visual-paradigm.com/product/vpuml/

    [9] http://www.freiesmagazin.de/freiesMagazin-2012-02

    [10] https://secure.wikimedia.org/wikipedia/de/wiki/Liste_objektorientierter_Programmiersprachen

    [11] http://www.freiesmagazin.de/20111001-vierter-freiesmagazin-programmierwettbewerb-gestartet

    [12] https://secure.wikimedia.org/wikipedia/de/wiki/Class-Responsibility-Collaboration-Karten

    [13] https://de.wikipedia.org/wiki/Zirkuläre_Abhängigkeit

    [14] https://de.wikipedia.org/wiki/Modultest[15] https://de.wikipedia.org/wiki/Abhängigkeitsbezie

    hung_(UML)[16] https://secure.wikimedia.org/wikipedia/de/wiki/

    God_object[17] https://secure.wikimedia.org/wikipedia/de/wiki/

    Mock-Objekt[18] https://de.wikipedia.org/wiki/Generalisierung_

    (UML)

    Autoreninformation

    Dominik Wagenführ (Webseite) istC++-Software-Entwickler und hattäglich mit Software-Design zu tun.Dabei muss er sich immer Gedankenmachen, dass seine Software auchin Zukunft einfach wartbar und leichterweiterbar bleibt.

    Diesen Artikel kommentieren

    © freiesMagazin CC-BY-SA 3.0 Ausgabe 03/2012 10

    http://www.freiesmagazin.de/mobil/2012-03-listings/oop2-beispiel.tar.gzhttp://www.freiesmagazin.de/mobil/2012-03-listings/oop2-beispiel.tar.gzhttps://secure.wikimedia.org/wikipedia/de/wiki/Objektorientierte_Programmierunghttps://secure.wikimedia.org/wikipedia/de/wiki/Objektorientierte_Programmierunghttp://www.uml.org/https://de.wikipedia.org/wiki/Entwurfsmuster_%28Buch%29http://www.amazon.de/Patterns-Elements-Reusable-Object-Oriented-Software/dp/0201633612/http://www.amazon.de/Patterns-Elements-Reusable-Object-Oriented-Software/dp/0201633612/http://www.amazon.de/Patterns-Elements-Reusable-Object-Oriented-Software/dp/0201633612/http://www.amazon.de/Entwurfsmuster-Elemente-wiederverwendbarer-objektorientierter-Software/dp/3827321999/http://www.amazon.de/Entwurfsmuster-Elemente-wiederverwendbarer-objektorientierter-Software/dp/3827321999/http://www.amazon.de/Entwurfsmuster-Elemente-wiederverwendbarer-objektorientierter-Software/dp/3827321999/http://www.amazon.de/Head-First-Design-Patterns-Freeman/dp/0596007124/http://www.amazon.de/Head-First-Design-Patterns-Freeman/dp/0596007124/http://www.amazon.de/Entwurfsmuster-von-Kopf-bis-Fu%C3%9F/dp/3897214210/http://www.amazon.de/Entwurfsmuster-von-Kopf-bis-Fu%C3%9F/dp/3897214210/http://www.visual-paradigm.com/product/vpuml/http://www.visual-paradigm.com/product/vpuml/http://www.freiesmagazin.de/freiesMagazin-2012-02http://www.freiesmagazin.de/freiesMagazin-2012-02https://secure.wikimedia.org/wikipedia/de/wiki/Liste_objektorientierter_Programmiersprachenhttps://secure.wikimedia.org/wikipedia/de/wiki/Liste_objektorientierter_Programmiersprachenhttp://www.freiesmagazin.de/20111001-vierter-freiesmagazin-programmierwettbewerb-gestartethttp://www.freiesmagazin.de/20111001-vierter-freiesmagazin-programmierwettbewerb-gestartethttps://secure.wikimedia.org/wikipedia/de/wiki/Class-Responsibility-Collaboration-Kartenhttps://secure.wikimedia.org/wikipedia/de/wiki/Class-Responsibility-Collaboration-Kartenhttps://de.wikipedia.org/wiki/Zirkul%C3%A4re_Abh%C3%A4ngigkeithttps://de.wikipedia.org/wiki/Zirkul%C3%A4re_Abh%C3%A4ngigkeithttps://de.wikipedia.org/wiki/Modultesthttps://de.wikipedia.org/wiki/Abh%C3%A4ngigkeitsbeziehung_%28UML%29https://de.wikipedia.org/wiki/Abh%C3%A4ngigkeitsbeziehung_%28UML%29https://secure.wikimedia.org/wikipedia/de/wiki/God_objecthttps://secure.wikimedia.org/wikipedia/de/wiki/God_objecthttps://secure.wikimedia.org/wikipedia/de/wiki/Mock-Objekthttps://secure.wikimedia.org/wikipedia/de/wiki/Mock-Objekthttps://de.wikipedia.org/wiki/Generalisierung_%28UML%29https://de.wikipedia.org/wiki/Generalisierung_%28UML%29http://www.deesaster.org/blog/http://www.freiesmagazin.de/comment/reply/267?edit[subject]=Objektorientierte Programmierung#comment-formhttp://creativecommons.org/licenses/by-sa/3.0/deed.de

  • SERVER

    Der Apache-Webserver von Werner Ziegelwanger

    D er Apache-Webserver ist ein freier undlaut Wikipedia [1] der am häufigstenverwendete Webserver. Der folgendeArtikel soll zeigen, wie Apache funktioniertund wie man mit ihm dynamische Seiten inPHP, Perl, Python und JSP anzeigen lassenkann.

    Ein Webserver funktioniert folgendermaßen: DerBenutzer gibt in der Adresszeile seines Browserseine Adresse ein. Diese wird als URL (UniformResource Locator) bezeichnet. Über diese URLwerden zwei Dinge ermittelt:

    1. die Adresse eines Computers im Internet,auch FQDN (Fully Qualified Domain Name)genannt,

    2. eine Ressource, die von diesem Rechner an-gezeigt werden soll.

    Als Beispiel soll folgende Adresse dienen:

    http://www.freiesmagazin.de/magazin

    Hierbei entspricht www.freiesmagazin.de demFQDN und /magazin der Ressource.

    Zur Erklärung soll hier erwähnt werden, dass derFQDN von rechts nach links gelesen wird. Dasheißt, in der Domain de (Deutschland) gibt eseinen Rechner, der die Seite von freiesMagazinhostet, und mit www gibt man an, dass man dieRessource in dieser Subdomain sucht.

    Wird keine Ressource angegeben, so wird stan-dardmäßig die index-Datei angezeigt. Der Ord-ner, in dem die Ressource gesucht wird, wird üb-licherweise bei der Installation eines Webserversangelegt und beherbergt die Webseiten, die die-ser Rechner nach außen anzeigt.

    Die Ressource, die hier angefordert wird, heißtmagazin. Dies kann nun eine Datei mit dem Na-men magazin.html sein, ein Ordner namensmagazin, der eine Datei namens index.htmlenthält oder ähnliches. All das braucht der An-wender nicht zu wissen. Der Webserver liefertdie gesuchte Ressource. Sollte er sie nicht fin-den, gibt er eine Fehlerseite zurück.

    http://www.freiesmagazin.de/void liefertso zum Beispiel die Seite, welche als Fehlerseitebeim Webserver eingestellt worden ist. Üblicher-weise liefert eine nicht gefundene Ressourceeine 404-Fehlerseite.

    Das Kernstück des Apache-Webservers ist derhttpd (Hypertext Transfer Protocol Daemon). ImPrinzip macht dieser Daemon (laufender Pro-zess am Webserver) nichts anderes als aufHTTP-Anfragen HTTP-Antworten zu liefern. Die-se Funktionalität kann durch Module ergänzt wer-den. Dieses Modulkonzept ist mit ein Grund fürdie Popularität des Apache-Webservers.

    Es gibt zahlreiche Zusatzmodule; ein Beispiel wä-re das PHP-Modul, welches dem Server ermög-licht, PHP-Skripte auszuführen, wenn diese über

    eine HTTP-Anfrage aufgerufen werden. Aber da-zu später mehr.

    Die InstallationDie Installation gestaltet sich sehr einfach. Manmuss nur das Paket apache2 mit einem Pa-ketmanager installieren. Um zu überprüfen, obder Webserver läuft, gibt man einfach Fol-gendes in die Adressleiste des Browsers ein:http://localhost/.

    Wenn der Webserver läuft, erscheint nun eine Er-folgsmeldung. Diese Seite ist die Standardseite,die der Webserver nun anzeigt. Der Domainna-me localhost bzw. die Adresse 127.0.0.1 zei-gen im Browser den eigenen Rechner.

    Der Server kann nach erfolgreicher Installationmit dem Befehl /etc/init.d/apache2 gestar-tet, gestoppt oder neu gestartet werden:

    # /etc/init.d/apache2 start# /etc/init.d/apache2 stop# /etc/init.d/apache2 restart

    Die KonfigurationKomplizierter wird es bei der Konfiguration. Esgibt dafür mehrere Konfigurationsdateien. Zu fin-den sind diese im Apache2-Ordner. Wo sich die-ser Ordner befindet, ist von Distribution zu Distri-bution unterschiedlich. Alle hier angegebenen In-formationen bezüglich der Ordnerstruktur bezie-hen sich auf Ubuntu.

    © freiesMagazin CC-BY-SA 3.0 Ausgabe 03/2012 11

    http://de.wikipedia.org/wiki/Apache_HTTP_Serverhttp://localhost/http://creativecommons.org/licenses/by-sa/3.0/deed.de

  • SERVER

    Die neue Übersichtsseite.

    httpd.conf Dies ist die Konfigurationsdateides HTTP-Daemons. Diese Datei kannglobale Konfigurationen beinhalten, istaber meistens leer, da für die aktuel-len Versionen des Apache-Webservers dieapache2.conf-Datei zur globalen Konfigu-ration verwendet wird.

    apache2.conf Hier kann man globale Einstel-lungen für den Webserver vornehmen. Die-se Datei ist sehr gut dokumentiert.

    envwars Diese Datei beinhaltet alle Umge-bungsvariablen, die der Server benötigt.

    ports.conf Hier kann man einstellen, auf wel-chen Ports der Webserver lauschen soll.Standardmäßig wird nur auf Port 80 ge-lauscht. Dieser TCP-Port wird üblicherwei-se für das Hypertext Transfer Protokoll ver-wendet (HTTP).

    mods-available Dieser Ordner enthält Konfigu-rationsdateien für alle Module, die für denWebserver zur Verfügung stehen. Modulekönnen so individuell konfiguriert werden.

    mods-enabled Dieser Ordnerenthält Links auf Konfigu-rationsdateien des mods-available-Ordners. AlleModule, von denen hierLinks existieren, werdenbei einem Start des Ser-vers geladen.

    Nähere Informationen zur Kon-figuration sind den Kommenta-ren in den Konfigurationsdatei-

    en zu entnehmen oder in der Dokumentationnachzulesen.

    Die erste SeiteDer Apache-Webserver verwendet sogenanntevirtuelle Hosts. Das heißt, man kann auf einemRechner beliebig viele Seiten hosten. Somit kannman mehrere virtuelle Hosts mit unterschiedli-chen Servernamen anlegen; der Webserver ver-gleicht diese dann mit der vom Benutzer ange-gebenen URL und liefert die gewünschte Seitedes zugehörigen Servernamens. Sollte der Ser-vername nicht existieren, kann ein Standardseiteangezeigt werden.

    Die virtuellen Hosts sind im sites-available-Ordner zu finden. Definiert wird ein Host in ei-ner Textdatei. Bei einer neuen Installation desWebservers wurde bereits ein Standardhost an-gelegt, welcher durch eine Textdatei mit dem Na-men default in diesem Ordner zu finden ist. In-teressant sind hier die Elemente DocumentRootund ErrorLog. DocumentRoot definiert einen

    Ordner, den dieser virtuelle Host nach außenzeigt. Das heißt, wenn man diesen Host im Brow-ser anfragt, dann wird standardmäßig die Seiteindex.html aus diesem Verzeichnis an den An-wender geschickt und bei ihm im Browser ange-zeigt. Mit ErrorLog definiert man eine Logda-tei, die alle Fehler für diesen Host protokolliert.So kann nun zum Beispiel dem virtuellen Ser-ver ein Name gegeben werden, indem die Zei-le ServerName localhost nach der ersten Zei-le eingefügt wird.

    Da der Ordner des Standardhosts /var/www ist(wie der Konfiguration entnommen werden kann),wird dort eine neue Seite erstellt. Dazu ändertman die bereits existierende HTML-Datei um, so-dass sie folgenden Inhalt hat:

    Hallo Welt!

    Willkommen auf der neuen yHomepage.


    PHP yTestseite

    yPerl Testeite

    yPython Testseite

    Listing 1: index.html

    Nach dem Speichern der Datei zeigt der Browsernun die neue Seite.

    © freiesMagazin CC-BY-SA 3.0 Ausgabe 03/2012 12

    http://www.freiesmagazin.de/mobil/2012-03-bilder/apache-hallo-welt.pnghttp://www.freiesmagazin.de/mobil/2012-03-bilder/apache-hallo-welt.pnghttp://www.freiesmagazin.de/mobil/2012-03-listings/index.htmlhttp://creativecommons.org/licenses/by-sa/3.0/deed.de

  • SERVER

    ModuleWie bereits erwähnt sind Module ein wichtigesKonzept beim Apache-Webserver. Bis jetzt kannder Server nur statische Seiten anzeigen. In Zei-ten von Web 2.0 reicht das aber schon lan-ge nicht mehr aus. Der Server soll nun auchauf Benutzerangaben reagieren und im bestenFall für den Benutzer individuelle Daten anzei-gen. Erreicht wird dies üblicherweise durch Skrip-te. JavaScript ermöglicht zwar teilweise eine dy-namische Webseite, jedoch wird dieses nur aufdem Rechner des Benutzers ausgeführt. Wasbenötigt wird, sind Skripte, die auf dem Serverausgeführt werden. Dazu gehören unter anderenPHP, Perl und Python.

    Der Server soll nun so angepasst werden, dasser diese Skriptsprachen unterstützt.

    Die typische PHP-Informationsseite.

    PHPUm die Funktionalität zu testen, wird zuersteine neue Seite erstellt, die ein PHP-Skriptenthält. Dazu wird eine neue Datei namensphpTest.php im Ordner /var/www/ mit folgen-dem Inhalt erstellt:

    Damit der Server in der Lage ist, PHP auszufüh-ren, müssen folgende Pakete installiert werden:

    � libapache2-mod-php5� php5-cli� php5-common� php5-cgi

    Nach einem Neustart des Webser-vers kann die PHP-Seite im Brow-ser korrekt angezeigt werden.

    PerlÄhnlich wie beim Testen der PHP-Funktionalität legt man wieder zu-erst eine neue Skriptdatei an, dies-mal für ein Perl-Skript. Für Perlund Python benötigt man noch einVerzeichnis, in dem diese Skript-dateien abgelegt werden können.Dazu legt man im Verzeichnis wwwein Verzeichnis namens cgi-binan. In diesem Verzeichnis erstelltman eine Datei mit dem Namen

    perlTest.pl. Die Dateiendung .pl ist für Perl-Skripte üblich. Der Inhalt der Datei lautet wiefolgt:

    #!/usr/bin/perlprint "Content-type: text/html\r\n\yr\n";print "Perl Testseite ";print "Perl funktioniert mit diesemyWebserver!";

    Listing 2: perlTest.pl

    Die neue Datei und auch das Verzeichnis benöti-gen Ausführungsrechte.

    Danach installiert man das Perl-Modullibapache2-mod-perl2.

    Nun ist Perl installiert, jedoch muss man denvirtuellen Host noch konfigurieren. Der virtuelleHost ist im Verzeichnis sites-available zu fin-den. Der virtuelle Host default hat bereits ei-ne Konfiguration für den cgi-bin Ordner. Diesemuss folgendermaßen geändert werden:

    ScriptAlias /cgi-bin/ /var/www/cgi-ybin/

    Options ExecCGIAddHandler cgi-script cgi pl

    Die erste Zeile definiert einen Alias, der auf dasVerzeichnis mit den Skripten zeigt. Die Zeile mitdem AddHandler definiert die Dateiendungen,welche als Skript ausgeführt werden sollen (indiesem Fall *.cgi und *.pl).

    © freiesMagazin CC-BY-SA 3.0 Ausgabe 03/2012 13

    http://www.freiesmagazin.de/mobil/2012-03-bilder/apache-php.pnghttp://www.freiesmagazin.de/mobil/2012-03-bilder/apache-php.pnghttp://www.freiesmagazin.de/mobil/2012-03-listings/perlTest.plhttp://creativecommons.org/licenses/by-sa/3.0/deed.de

  • SERVER

    Nach einem Neustart zeigt der Browser das Er-gebnis des Perl-Skripts.

    PythonWieder erstellt man zuerst eine neue Skript-datei im Ordner cgi-bin, mit dem NamenpythonTest.py und dem folgenden Inhalt:

    #!/usr/bin/pythondef index():return "Python yTestseite

  • SERVER

    Der Tomcat Manager zeigt alle laufenden Applikationen.

    erstellt und als .war-Datei kompiliert hat,kann man hier hinzufügen. Eine Beispiel-Webapplikation wird unter folgendem Link bereit-gestellt: JavaTest.war. Nach dem erfolgreichenDeployen kann man die Seite über folgendenLink oder auf einen Klick auf „JavaTest“ in derManager GUI aufrufen: http://localhost/JavaTest

    Nun sollte eine Erfolgsseite im Browser zusehen sein. Sie zeigt unter anderem die

    verwendete Browserversion und Betriebssystem.Außerdem noch die IP-Adresse. Die Seite, die an-gezeigt wird, besteht aus folgendem Code und istin einer JSP Datei im .war-Archiv zu finden:

    JSP Testseite

    JSP Testseite!Your browser is:
    Your IP address is:

    Listing 4: index.jsp

    LINKS[1] http://de.wikipedia.org/wiki/Apache_HTTP_

    Server[2] http://tomcat.apache.org/[3] https://help.ubuntu.com/10.04/serverguide/C/

    httpd.html[4] http://radekb.blogspot.com/2010/02/how-to-

    install-tomcat-in-kubuntu.html[5] http://www.ubuntugeek.com/how-to-install-

    apache2-webserver-with-phpcgi-and-perl-support-in-ubuntu-server.html

    Autoreninformation

    Werner Ziegelwanger (Webseite) hatGame Engineering und Simulationstudiert und arbeitet derzeit als JavaWeb-Entwickler.

    Diesen Artikel kommentieren

    © freiesMagazin CC-BY-SA 3.0 Ausgabe 03/2012 15

    http://www.freiesmagazin.de/mobil/2012-03-bilder/apache-tomcat.pnghttp://www.freiesmagazin.de/mobil/2012-03-bilder/apache-tomcat.pnghttp://www.freiesmagazin.de/mobil/2012-03-listings/JavaTest.warhttp://localhost/JavaTesthttp://www.freiesmagazin.de/mobil/2012-03-listings/index.jsphttp://de.wikipedia.org/wiki/Apache_HTTP_Serverhttp://de.wikipedia.org/wiki/Apache_HTTP_Serverhttp://tomcat.apache.org/https://help.ubuntu.com/10.04/serverguide/C/httpd.htmlhttps://help.ubuntu.com/10.04/serverguide/C/httpd.htmlhttp://radekb.blogspot.com/2010/02/how-to-install-tomcat-in-kubuntu.htmlhttp://radekb.blogspot.com/2010/02/how-to-install-tomcat-in-kubuntu.htmlhttp://www.ubuntugeek.com/how-to-install-apache2-webserver-with-phpcgi-and-perl-support-in-ubuntu-server.htmlhttp://www.ubuntugeek.com/how-to-install-apache2-webserver-with-phpcgi-and-perl-support-in-ubuntu-server.htmlhttp://www.ubuntugeek.com/how-to-install-apache2-webserver-with-phpcgi-and-perl-support-in-ubuntu-server.htmlhttp://www.ziaglw.at/http://www.freiesmagazin.de/comment/reply/267?edit[subject]=Der Apache-Webserver#comment-formhttp://creativecommons.org/licenses/by-sa/3.0/deed.de

  • DISTRIBUTION

    32-Bit-Chroot-Umgebung unter Debian einrichten von Hans-Joachim Baader

    AAuf einem 64-Bit-Debian-System kannes manchmal nützlich sein, eine 32-Bit-Umgebung zur Hand zu haben.Das lässt sich mit debootstrap und schrootschnell und einfach erreichen. Das Verfahrenist aber auch für 32-Bit-Systeme und teilweiseauch für andere Distributionen geeignet.

    Redaktioneller Hinweis: Der Artikel „32-Bit-Chroot-Umgebung unter Debian einrichten“ er-schien erstmals bei Pro-Linux [1].

    VorwortDie meisten 32-Bit-Programme lassen sich untereinem 64-Bit-Linux problemlos ausführen. Auchunter Debian, das derzeit noch nicht multiarch-fähig ist, ist es meist möglich. Gegebenenfallsmuss man ein paar 32-Bit-Bibliotheken nachin-stallieren, die als Pakete vorliegen. Liegt die32-Bit-Software jedoch als DEB-Paket vor undbesitzt noch Abhängigkeiten zu anderen 32-Bit-Paketen, dann kann es unmöglich werden, die-ses Paket sauber zu installieren.

    Eine mögliche Abhilfe sind die mittlerweile all-gegenwärtigen virtuellen Maschinen. Durch ihreweitgehende Isolation vom Host-System sind siezwar sehr sicher, machen aber auch einige Um-stände. Eine schlankere Alternative sind Chroot-Umgebungen. Es ist aber nicht leicht, eine sol-che Umgebung von Hand einzurichten. Alle aufDebian oder Ubuntu beruhenden Distributionenbringen jedoch Werkzeuge mit, die den Vorgangauf wenige Handgriffe reduzieren.

    Chroot-Umgebung installierenDas grundlegende Werkzeug heißt debootstrap.Es installiert eine beliebige Version der Distribu-tion von einem beliebigen Server in ein beliebi-ges Verzeichnis. Die einzige nötige Vorbereitungist, ein Verzeichnis zu wählen, in dem genugPlatz ist (für eine ernsthafte Nutzung wird man si-cherlich 500 MB plus die Größe der zusätzlichenProgramme und Daten benötigen). Man kann bei-spielsweise ein Verzeichnis /var/chroots anle-gen und in dieses wechseln:

    # mkdir /var/chroots# chown /var/chroots$ cd /var/chroots

    Nun genügt der folgende Befehl, vorausgesetzt,das Paket debootstrap ist installiert:

    # debootstrap --arch i386 wheezy ywheezy-i386 http://ftp.de.debian.yorg/debian

    Hier ist --arch i386 die Architektur (32-Bit).Wer es braucht, kann natürlich auch eine 64-Bit-Umgebung installieren. wheezy ist der Name derDistribution, für Debian sind hier jeweils die sta-bilen und Testversionen möglich (zur Zeit lenny,squeeze, wheezy, sid), für Ubuntu z. B. natty,oneiric und precise.

    wheezy-i386 ist das Verzeichnis, das von de-bootstrap unterhalb des aktuellen Verzeichnissesangelegt wird. Optional kann man dahinter noch

    einen Distributionsspiegelserver angeben. Werein eigenes Repository oder einen Proxy (z. B.apt-proxy-ng) betreibt, kann die Zeile auch abän-dern zu

    # debootstrap --arch i386 wheezy ywheezy-i386 http://proxy:3142/ydebian

    oder

    # debootstrap --arch i386 hardy yhardy-i386 http://proxy:3142/ubuntu

    oder ähnlich. Die gesamte Chroot-Installationläuft vollautomatisch und dauert etwa eine halbebis eine Stunde.

    Das auf den Bildschirm ausgegebene Log sollteabschließend mit der letzten Zeile Erfolg melden:

    I: Base system installed ysuccessfully.

    Manuelle KonfigurationMit dem folgenden Befehl kann man die Umge-bung bereits nutzen, jedoch vorerst nur als Root:

    # chroot /var/chroots/wheezy-i386

    Man kann sich zunächst etwas mehr Komfortverschaffen, indem man die Konfigurationsdatei-en wie /etc/profile anpasst (ggf. einfach vomHost kopieren). Insbesondere sollte die Zeit rich-tig eingestellt werden mittels

    © freiesMagazin CC-BY-SA 3.0 Ausgabe 03/2012 16

    http://www.pro-linux.de/artikel/2/1547/32-bit-chroot-umgebung-unter-debian-einrichten.htmlhttp://creativecommons.org/licenses/by-sa/3.0/deed.de

  • DISTRIBUTION

    # cp /usr/share/zoneinfo/Europe/Berlin /etc/localtime

    Empfehlenswert ist auch, gleich ein

    export DISPLAY=:0

    in /etc/profile einzutragen, wenn man X-Programme in der Umgebung starten will. Undes dürfte sinnvoll sein, den Shell-Prompt so zusetzen, dass man gleich weiß, in welcher Um-gebung man sich befindet. Man sollte aber nie-mals den Hostnamen der Chroot-Umgebung set-zen. Das würde sich auf den Host-Rechner aus-wirken und Chaos auslösen.

    Nun kann man der Minimalumgebung bereitsPakete hinzufügen. Am wichtigsten dürfte essein, das Paket locales zu installieren, um dieSpracheinstellung vornehmen zu können undnervende Meldungen zu vermeiden:

    # apt-get install locales# echo "de_DE.UTF-8 UTF-8" >> /etc/locale.gen# locale-gen

    Wer es nicht bemerkt hat: Bei der Installation desPaketes kam folgende Fehlermeldung:

    Can not write log, openpty() failedy(/dev/pts not mounted?)

    Diese ist allerdings nicht fatal. Schwerer wiegen-de Meldungen liefern Versuche, die Programmedf oder ps aufzurufen. Der Grund ist klar: Es feh-len die Datei /etc/mtab, das Verzeichnis /devund die Dateisysteme /proc und /sys.

    Diese lassen sich dankBind-Mounts leicht ein-

    richten. Auf diese Weise kann man aucheinen einfachen Datenaustausch mit dem Host-Rechner realisieren. In vorliegenden Fall, wo Si-cherheit keine Rolle spielt, bindet man einfachdas gesamte /home-Verzeichnis ein.

    Wer höhere Sicherheit bevorzugt, kann ein spe-zifisches Unterverzeichnis des Hosts einbinden– im fortgeschrittenen Fall gar eines pro Benut-zer. Damit das funktioniert, kann man auch nochdie Dateien /etc/passwd und /etc/group ein-binden. Sehr elegant wäre hier die Verwendungvon LDAP, was mit Inkonsistenzen in den Benut-zerdatenbanken Schluss macht, aber das mussauch erst einmal eingerichtet werden. Fürs erstekann man die beiden Dateien einfach kopieren.

    Es gibt prinzipiell zwei Möglichkeiten, dieDateisysteme einzubinden: Permanent über

    die Datei /etc/fstab des Host-Rechners oder bei der Verwen-dung des Kommandos schroot,welches später noch erklärt wird,

    bedarfsgesteuert durch Skripte.

    Die erste Methode ist einfach, ihr Nach-teil ist lediglich, dass sie für ein recht vol-les /proc/mounts sorgt. Dazu fügt man an/etc/fstab die folgenden Zeilen an:

    /home /var/chroots/wheezy-i386/home auto defaults,rbind 0 3/tmp /var/chroots/wheezy-i386/tmp auto defaults,rbind 0 3/dev /var/chroots/wheezy-i386/dev auto defaults,rbind 0 3/proc var/chroots/wheezy-i386/proc proc defaults,rbind 0 3/sys /var/chroots/wheezy-i386/sys sysfs defaults,rbind 0 3

    Danach führt man

    # mount -a

    aus. In Zukunft ist dieser Schritt nicht mehr nötig;er wird beim Booten automatisch ausgeführt.

    Die Datei /etc/mtab sollte man ebenfalls über

    # cat /proc/mounts > /etc/mtab

    erstellen. Danach bereinigt man die Datei so weit,dass nur Dateisysteme in der Ausgabe von dfauftauchen, die in der Umgebung von Interessesind.

    Damit ist die Umgebung einsatzbereit.

    Die Funktionsfähigkeit wurde unter anderem ge-testet, indem Google Earth in die Umgebung hin-einkopiert wurde. Nach der Installation zweier zu-sätzlicher Pakete aus dem Archiv konnte das Pro-gramm fehlerfrei starten und lief mit der gleichenGeschwindigkeit wie auf dem Host. Das ist einVorteil gegenüber virtuellen Maschinen, die der-zeit oftmals noch keine 3-D-Beschleunigung oderOpenGL unterstützen.

    schrootDer offensichtlichste Nachteil einer Chroot-Umgebung ist, dass man sie nur als Root

    © freiesMagazin CC-BY-SA 3.0 Ausgabe 03/2012 17

    http://creativecommons.org/licenses/by-sa/3.0/deed.de

  • DISTRIBUTION

    betreten kann. Man kann sich natürlich danachmit su - zu einem normalen Benutzermachen. Das sind aber zwei Kommandos. Esstellt sich heraus, dass es unter Debian einfachergeht, und zwar mit dem Programm schroot. DasWerkzeug kann einem dazu noch einen gutenTeil der Handarbeit bei der Konfiguration abneh-men.

    schroot installiert man mit dem Befehl

    # apt-get install schroot

    Die Konfiguration von schroot kann man über/etc/schroot/schroot.conf vornehmen. Mankann recht komplexe Konfigurationen definieren,mit beliebig vielen Chroot-Umgebungen und da-für auch zusätzliche Dateien nutzen. Als Refe-renz dient die Man-Page:

    $ man schroot.conf

    Im einfachsten Fall kann man die obenangelegte Umgebung folgendermaßen in/etc/schroot/schroot.conf definieren:

    [wheezy-i386]type=plaindirectory=/var/chroots/wheezy-i386message-verbosity=normalusers=hans

    Hier werden keine weiteren Dateien benötigt.schroot geht davon aus, dass die Umgebungmanuell konfiguriert wurde, und schroot -cwheezy-i386 bringt einen unverzüglich als nor-malen Benutzer in die Umgebung. Das ist ei-

    ne Verbesserung gegenüber chroot, aber schrootbietet noch viel mehr. Zunächst gibt es zahlrei-che Optionen, die hier nicht aufgeführt werdensollen. Die Man-Page von schroot gibt umfas-send Auskunft. Stattdessen soll eine erweiter-te Konfiguration definiert werden. Dazu ändertman in /etc/schroot/schroot.conf die Zeiletype=plain zu type=directory.

    Diese simple Änderung hat zur Folge, dassSetup-Skripte ausgeführt werden, wenn mandie Umgebung betritt. schroot bringt bereits ei-ne komplexe Sammlung von Setup-Skriptenmit, die man anpassen oder erweitern kann.Standardmäßig sind schon vier Konfigura-tionen vorgegeben. Diese heißen default,minimal, desktop und sbuild. Welche verwen-det wird, wird mit der Option script-configin /etc/schroot/schroot.conf festge-legt. Diese Option hat den Standardwertdefault/config, was bedeutet, dass dieDatei /etc/schroot/default/config gele-sen wird. Diese Datei ist ein sehr simplesShell-Skript und man kann naheliegenderwei-se beliebige eigene Konfigurationen definie-ren. Die Default-Konfiguration kopiert Datei-en in die Umgebung, aufgelistet in der Da-tei /etc/schroot/default/copyfiles, ko-piert die Daten der in /etc/schroot/default/nssdatabases aufgeführten Dateien in dieUmgebung und bindet die in /etc/schroot/default/fstab angegebenen Dateisysteme ein(beim Verlassen der Umgebung werden sie wie-der ausgehängt).

    # schroot -c wheezy-i386

    Falls nun eine Warnung erscheint, dass nicht inein bestimmtes Verzeichnis gewechselt werdenkonnte und stattdessen das Home-Verzeichnisverwendet wird, liegt das an einem „Feature“ vonschroot. Denn das Programm versucht grund-sätzlich, innerhalb der Umgebung in das gleicheVerzeichnis zu wechseln, in dem man außerhalbwar. Wenn dieses nicht existiert, kommt es zuder Meldung. Abhilfe schafft die Option -d vonschroot. Der komplette Aufruf könnte somit lau-ten:

    # schroot -c wheezy-i386 -d $HOME

    Das ist schon fast wieder zu lang zum Schrei-ben, so dass man evtl. einen Alias, eine Shell-Funktion oder Ähnliches anlegen will. Aber dasist jedem selbst überlassen.

    Falls keine der vorgegebenen Konfigura-tionen ideal ist, ist es am besten, manlegt eine neue an. Dazu ändert man in/etc/schroot/schroot.conf die Zeile

    script-config=...

    zu

    script-config=myconfig/config

    (oder fügt sie hinzu) und legt dann das Ver-zeichnis /etc/schroot/myconfig an (die Da-teinamen sind relativ zu /etc/schroot, wennsie nicht mit absolutem Pfad angegeben werden).

    © freiesMagazin CC-BY-SA 3.0 Ausgabe 03/2012 18

    http://creativecommons.org/licenses/by-sa/3.0/deed.de

  • DISTRIBUTION

    Die Erstellung der Konfigurationsdateien bereitetnun nicht viel Mühe, da man sich an den vorhan-denen orientieren kann.

    Ausblickschroot bietet noch viel mehr Möglichkeiten, diehier nur kurz erwähnt werden sollen:

    � die Möglichkeit, nur einzelne Kommandos inder Umgebung auszuführen und sie danngleich wieder zu verlassen, was auch die Ein-bindung in Skripte und Programme ermöglicht

    � die Nutzung von LVM-Snapshots, Btrfs-Snapshots oder Union-Dateisystemen

    � das Definieren von Sitzungen� das Ausführen von Aktionen oder Kommandos

    für alle definierten Umgebungen oder Sitzun-gen gleichzeitig

    � die Möglichkeit, auch andere Distributionen alsChroot-Umgebung zu nutzen (in der Regel mittype=plain)

    � die Nutzung von schroot auf anderen Distribu-tionen

    Im Web existieren zahlreiche Blogs und Artikel,die sich mit dem einen oder anderen dieser The-men befassen.

    FazitDie gesamte Debian-Distribution ist darauf vor-bereitet, in einer Chroot-Umgebung zu laufenund bietet leistungsfähige Werkzeuge an, dieszu nutzen. In diesem Artikel wurden debootstrapund schroot vorgestellt, wobei nicht alle Featuresdieser Programme angesprochen werden konn-ten. Mit relativ wenig Aufwand erhält man mit ih-nen als Ergebnis eine vielfältig nutzbare Chroot-Umgebung. Der Fantasie und dem Experimentie-ren sind dabei keine Grenzen gesetzt.

    Die Umgebung kann auch zum Bauen von Pake-ten genutzt werden, allerdings ist für veröffentlich-

    te Pakete die pbuilder-Methode zu bevorzugen,die jedes Mal eine saubere Umgebung herstellt.

    LINKS

    [1] http://www.pro-linux.de/artikel/2/1547/32-bit-chroot-umgebung-unter-debian-einrichten.html

    Autoreninformation

    Hans-Joachim Baader (Webseite)befasst sich seit 1993 mit Linux. 1994schloss er sein Informatikstudiumerfolgreich ab, machte die Software-entwicklung zum Beruf und ist einerder Betreiber von Pro-Linux.de.

    Diesen Artikel kommentieren

    „Good Cop, Dadaist Cop“ © by Randall Munroe (CC-BY-NC-2.5), http://xkcd.com/1018/

    © freiesMagazin CC-BY-SA 3.0 Ausgabe 03/2012 19

    http://www.pro-linux.de/artikel/2/1547/32-bit-chroot-umgebung-unter-debian-einrichten.htmlhttp://www.pro-linux.de/artikel/2/1547/32-bit-chroot-umgebung-unter-debian-einrichten.htmlhttp://www.pro-linux.de/http://www.freiesmagazin.de/comment/reply/267?edit[subject]=32-Bit-Chroot-Umgebung unter Debian#comment-formhttp://xkcd.com/1018/#NOW INVENT AN IMPOSSIBLE-TO-TRANSLATE LANGUAGE AND USE IT TO TELL US WHERE THE MONEY IS.http://creativecommons.org/licenses/by-nc/2.5/http://xkcd.com/1018/http://creativecommons.org/licenses/by-sa/3.0/deed.de

  • KERNEL

    Selbstgebacken 2: Flickwerk von Mathias Menzer

    K ernel-Kompilierung ist im Grunde keinHexenwerk. Konfigurieren, Kompilie-ren und Installieren sind schnell erle-digt, sofern wenn man eine Stunde beim Kom-pilieren als „schnell“ betrachtet. Dagegen er-scheint der Download eines 60MB-Archivsja schon trivial, ist das ja selbst mit einem1MBit-DSL-Anschluss in nicht einmal zehnMinuten erledigt.

    Doch sollte man nicht vergessen, dass man nichtnur die eigene Leitung, sondern auch die vonkernel.org entlasten kann, wenn man sich an die

    Kernelpatches anwenden

    3.0

    3.1 3.0.1 3.0.2

    3.2 3.1.1 3.1.2 3.1.3 3.2-rc1 3.2-rc2

    3.3

    Minor-Versionen bauen immer auf dem ursprünglichen Kernel auf,bei den Vorabversionen (-rc) auf der des vorangegangenen

    Kernels.

    bereitgestellten Patches hält. So liegt der Patchfür 3.1.2 zum Beispiel bei unter 100 kB gegen-über den 61 MB der fertig herunterzuladenden„Konserve“.

    Ein paar Dinge vorwegDer Begriff „Patch“ (engl. für flicken oder aus-bessern) leitet sich von dem verwendeten Pro-gramm ab, das ebenfalls patch [1] heißt und zurAnwendung von Änderungen auf eine Datei odereine Ansammlung von Dateien genutzt wird. ImFalle des Linux-Kernels werden Patches immerzur Basisversion geliefert. Das bedeutet, dass

    der Patch 3.1.2 auf einen Kernel3.1 angewendet werden muss,ebenso wie auch Patch 3.1.1.Auch der Patch 3.2 wird auf denQuelltext des Kernel 3.1 ange-wandt, der Patch für 3.3 dannauf Kernel 3.2.

    Im ersten Teil (siehe „Selbst-gebacken: Kernel kompilierennach Rezept”, freiesMagazin01/2010 [2]) wurden die Quel-len für den Linux-Kernel 3.1.5geholt und daraus ein lauffähi-ger Kernel gebaut. Möchte mannun auf Version 3.1.6 aktualisie-ren, steht man scheinbar in ei-ner Sackgasse, da der Patch3.1.6 nur auf das Archiv vonLinux 3.1 angewendet werden

    kann. Die Abhilfe ist hier einfach: Patches funk-tionieren in beide Richtungen – man kann einenPatch auf einen Kernel anwenden und, steht ei-nem das Patch-Archiv noch zur Verfügung, auchwieder entfernen. Also besorgt man sich als Ers-tes die Patch-Dateien für 3.1.5 und 3.1.6 und lädtsie direkt in das Kernel-Verzeichnis:

    $ cd ~/Kernel$ wget http://www.kernel.org/pub/ylinux/kernel/v3.0/patch -3.1.5.xz$ wget http://www.kernel.org/pub/ylinux/kernel/v3.0/patch -3.1.6.xz

    Die xz-Tools sollten noch vorhanden sein, darinist auch xzcat enthalten, das als Nächstes benö-tigt wird. patch muss eventuell aus den Paket-quellen nachinstalliert werden.

    AufräumenAls ersten Schritt braucht man einen sauberenKernel-Quellcode, also ohne die bei einer Kompi-lierung erzeugten Dateien. Da sich kein Menschmerken kann, was vorher da war und was da-zu kam, gibt es hier wieder Hilfe in Gestalt vonden Kernelentwicklern gepflegten Makefiles. Dortsteht nicht nur drin, was wie verlinkt und kompi-liert werden muss, sondern auch wie man es wie-der los wird. Angewendet werden diese Informa-tion mit

    $ cd linux -3.1.5$ make clean$ cd ..

    © freiesMagazin CC-BY-SA 3.0 Ausgabe 03/2012 20

    http://www.freiesmagazin.de/mobil/2012-03-bilder/kernelbau-diagramm-2-1.pnghttp://www.freiesmagazin.de/mobil/2012-03-bilder/kernelbau-diagramm-2-1.pnghttps://de.wikipedia.org/wiki/Patch_%28Unix%29http://www.freiesmagazin.de/freiesMagazin-2012-01http://creativecommons.org/licenses/by-sa/3.0/deed.de

  • KERNEL

    In diesem Beispiel

    3.1

    3.1.6

    (2)

    3.1.5

    (1)

    Ein Patch muss entfernt (1) werden, bevor derneue angewendet werden kann (2).

    make clean muss in dem Verzeichnis aufge-rufen werden, in dem die Kernel-Quellen lie-gen. Im Januar wurde linux-3.1.5.tar.xz ent-packt, daher liegen diese in diesem Beispiel un-ter linux-3.1.5. Das Anwenden der Patchesgeht am besten von dem Verzeichnis aus, in demdie entsprechenden Archive liegen.

    Patches anwendenZuerst müssen die Voraussetzungen geschaffenwerden. Wie bereits erwähnt, sind die Quellenauf dem Stand von Kernel 3.1.5, es wird jedoch3.1 benötigt. Also entpackt man das Archiv mitdem Patch für 3.1.5 und übergibt es dem patch-Werkzeug, um im Verzeichnis linux-3.1.5 auf-zuräumen.

    $ xzcat patch -3.1.5.xz | patch -p1 -R -d linux -3.1.5$ mv linux -3.1.5 linux -3.x

    xzcat entpackt hier das komprimierte Patch-Fileund liefert es auf der Standardausgabe [3] ab.Dort werden die Anweisungen von patch ent-gegengenommen und die Quellen entsprechendangepasst. Dabei muss mit -p angegeben wer-den, um wie viel tiefer das Startverzeichnis desQuellcodes liegt. In diesem Beispiel ist es ei-ne Ebene (-p1). Befände man sich direkt imUrsprungsverzeichnis des Kernel-Quellcodes (al-so linux-3.1), so müsste -p0 angegeben werden.Weiterhin wird natürlich noch der Pfad hinter derOption -d mitgegeben. Die Optionen lassen sichin diesem Fall nicht zusammenfassen. Ein -p1dlinux-3.x würde zum Fehler führen, auch wenndies bei vielen anderen Programmen sonst mög-lich ist.

    Das Umbenennen des Verzeichnisses ist nichtnotwendig, hilft aber um in Erinnerung zu behal-ten, dass die Quellen nun nicht mehr auf demStand von 3.1.5 sind. Im weiteren Verlauf desÜbersetzens wird das Verzeichnis jedoch nichtmehr umbenannt werden, denn ein Blick in dasMakefile offenbart den jeweiligen Versionsstandder Quellen.

    $ head -5 linux -3.x/MakefileVERSION = 3PATCHLEVEL = 1SUBLEVEL = 0EXTRAVERSION =NAME = "Divemaster Edition"

    Das head-Kommando lie-fert in diesem Falle dieersten fünf Zeilen des Ma-

    kefiles zurück, in diesen sind die wichtigen Infor-mationen zur Version enthalten. In diesem Fal-le liegt Version 3.1 in der Ursprungsversion, al-so ohne Patch, vor. Entwicklerversionen würdeman an der EXTRAVERSION erkennen, hier würdedann z. B. -rc1 stehen.

    Nun liegen die Kernelquellen wieder in einem Zu-stand vor, auf dem man aufbauen kann. In die-sem Falle sollen sie auf 3.1.6 aktualisiert werden.Das lässt sich wie folgt erledigen:

    $ xzcat patch -3.1.6.xz | patch -p1 y-d linux -3.x

    Der Erfolg kann mit einem Blick in das Makefi-le kontrolliert werden, die ersten drei Zeilen sindausreichend:

    $ head -3 linux -3.x/MakefileVERSION = 3PATCHLEVEL = 1SUBLEVEL = 6

    Konfigurieren und KompilierenAuch nach dem Einspielen des Patches ist einÜberarbeiten der Konfiguration notwendig. Diesübernimmt wieder make oldconfig, das aufeventuelle Optionen reagieren kann:

    $ cd linux -3.x$ make oldconfig

    © freiesMagazin CC-BY-SA 3.0 Ausgabe 03/2012 21

    http://www.freiesmagazin.de/mobil/2012-03-bilder/kernelbau-diagramm-2-2.pnghttp://www.freiesmagazin.de/mobil/2012-03-bilder/kernelbau-diagramm-2-2.pnghttps://de.wikipedia.org/wiki/Standard-Datenstr%C3%B6me#Standardausgabe_.28stdout.29http://creativecommons.org/licenses/by-sa/3.0/deed.de

  • KERNEL

    Ab diesem Punkt gleicht der Prozess dem bereitsbekannten. Deshalb sei auf die Ausführungen injenem Artikel verwiesen. Die beiden Befehle wer-den hier als Gedächtnisstütze aufgeführt.

    $ make -j8 bzImage modules# make modules_install install

    Und weiter?Bewährt sich das neue Kompilat, so kann derVorgängerkernel aus Gründen der Platzersparnisweichen. Möchte man ganz sicher gehen, kannman die letzte Version behalten. Was zu tun ist,um einen Kernel wieder loszuwerden, wurde be-reits erläutert.

    Nun ist Linux 3.1 nicht mehr der allerletzte Schrei.Zwischenzeitlich wurde Version 3.2 veröffentlichtund auch dort ist man bereits zu einem höherenSublevel (um die Bezeichnung aus dem Makefi-le zu verwenden) gelangt. Diese Aktualisierungverläuft prinzipiell gleich, mit dem einzigen Unter-schied, dass der Patch für 3.2 nicht wieder ent-fernt wird. patch-3.2.6 baut nämlich auf patch-3.2auf. Da alles schon einmal aufgeführt wurde, folgtdaher ein Schnelldurchlauf.

    Die neuen Patches für 3.2 und 3.2.6 werden her-untergeladen:

    $ wget http://www.kernel.org/pub/linux/kernel/v3.0/patch -3.2.xz$ wget http://www.kernel.org/pub/linux/kernel/v3.0/patch -3.2.6.xz

    Die Quellen müssen wieder auf den Stand von3.1 gebracht werden. Ist man sich unsicher, wel-ches der aktuelle eigene Patch-Stand ist, so hilft

    auch hier wieder ein Blick in die ersten drei Zei-len des Makefiles weiter. Die Anweisung hier istexemplarisch für Linux 3.1.10:

    $ xzcat patch -3.1.10.xz | patch -p1 -R -d linux -3.x

    Die Aktualisierung von 3.1 auf 3.2 auf 3.2.6:

    $ xzcat patch -3.2.xz | patch -p1 -d linux -3.x$ xzcat patch -3.2.6.xz | patch -p1 -d linux -3.x

    Aktualisierung auf neue Version und Sublevel

    3.1

    3.2

    (2)

    3.1.10

    (1)

    3.2.6

    (3)

    Patch 3.1.10 muss weichen (1), erst dann kannder Patch für 3.2 angewendet werden (2).

    Man hat es an dieser Stelle auch mit einem wei-terentwickelten Kernel zu tun, meist mit neuenFunktionen, Treibern und Optionen, weshalb ein

    make oldconfig hier wieder häufig Optionenzur Auswahl anbietet. Man kann dies mit demschon im vorangegangenen Artikel genutzten

    yes-Kommando vereinfa-chen. Es folgen wieder Kom-pilieren und Installieren.

    Wer bereits erfolgreich einenLinux-Kernel gebacken hat,wird auch mit dem Anwen-

    den von Patches zurechtkommen. Manchemscheinen die Wege, wie von einer Version aufeine neuere zu aktualisieren ist, am Anfang et-was undurchsichtig. Dieser Beitrag konnte hof-fentlich Abhilfe schaffen, sodass der Installationdes neuesten Kernels nichts im Wege steht.

    LINKS[1] https://de.wikipedia.org/wiki/Patch_(Unix)[2] http://www.freiesmagazin.de/freiesMagazin-2012-

    01[3] https://de.wikipedia.org/wiki/Standard-Datenströ

    me#Standardausgabe_.28stdout.29

    Autoreninformation

    Mathias Menzer (Webseite) mal-trätiert sein Notebook gerne mitdem aktuellsten Linux-Kernel. Dabeiwerden aber fast nur Patches geladenund angewendet.

    Diesen Artikel kommentieren

    © freiesMagazin CC-BY-SA 3.0 Ausgabe 03/2012 22

    http://www.freiesmagazin.de/mobil/2012-03-bilder/kernelbau-diagramm-2-3.pnghttp://www.freiesmagazin.de/mobil/2012-03-bilder/kernelbau-diagramm-2-3.pnghttps://de.wikipedia.org/wiki/Patch_%28Unix%29http://www.freiesmagazin.de/freiesMagazin-2012-01http://www.freiesmagazin.de/freiesMagazin-2012-01https://de.wikipedia.org/wiki/Standard-Datenstr%C3%B6me#Standardausgabe_.28stdout.29https://de.wikipedia.org/wiki/Standard-Datenstr%C3%B6me#Standardausgabe_.28stdout.29http://www.menzer.net/http://www.freiesmagazin.de/comment/reply/267?edit[subject]=Flickwerk#comment-formhttp://creativecommons.org/licenses/by-sa/3.0/deed.de

  • BILDBEARBEITUNG

    MyPaint – Zeichenprogramm für kreative Künstler von Patrick Meyhöfer

    W er im zeichnerischen Umfeld krea-tiv begabt ist, wird sich vielleichteinmal fragen, wie er seine bisheri-gen Zeichnungen auf Papier in eine digitaleVariante transformiert. Die hardwareseitigenWerkzeuge, wie Grafiktablets, stehen bereitsseit längerem zur Verfügung. Nun fehlt ledig-lich eine geeignete Software, die den Künst-ler möglichst umfassend in seinem Schaf-fensprozess unterstützt. Die meisten werdenbei Grafikerstellung zunächst an GIMP, Kritaoder das kommerzielle Photoshop denken. Ei-ne eher unbekannte, aber dennoch durchausleistungsfähige Software für diesen Zweck,stellt in diesem Zusammenhang MyPaint [1]dar.

    Allgemeine VorstellungMyPaint steht unter der GPLv2 und ist eine platt-formunabhängige Grafiksoftware. Aktuell liegtMyPaint in der Version 1.0.0 vor, welche seit No-vember 2011 verfügbar ist. Es wird stetig an derWeiterentwicklung gearbeitet, der Quellcode wirdauf Gitorious gehostet und ist dort für jeden ein-sehbar [2].

    Wie es sich für Künstler mit Anspruch gehört, un-terstützt MyPaint Grafiktablets von Wacom & Co.,um die Druckempfindlichkeit auf den Bildschirmund das Bild zu übertragen, was bei einem ledig-lichen Einsatz der Maustasten bekanntermaßenschwierig ist.

    Die Oberfläche von MyPaint.

    Vorab sei natürlich gesagt, dass man MyPaintnicht mit GIMP vergleichen kann, da beide Soft-warelösungen auch weitestgehend andere Zie-le verfolgen. Während GIMP vorwiegend zurManipulation von Bildern eingesetzt wird, wähltMyPaint hier den Weg der möglichst maximalenVereinfachung der Benutzeroberfläche, um diemaximale Kreativität für den Benutzer zu ermög-lichen.

    Das Ziel von MyPaint besteht darin, dem Künst-ler möglichst wenig Ablenkungen zu bieten,

    wodurch natürlich keine Funk-tionen der klassischen Bildbear-beitung wie Zuschneiden, Farb-kurven etc. angeboten werden.Hierfür müsste man dann dasfertige Bild in GIMP oder einemanderen Programm laden.

    Genau diese einfache Ober-fläche setzt MyPaint wirklichgut um. Der Kernfokus liegtdabei auf dem zu bearbei-tenden Bild. Alle eingeblende-ten Dialoge können perfekt miteinzelnen Tastenkombinationenschnell ein- und ausgeblendetwerden. Wenn man mit MyPaintarbeitet, wird man sich vorwie-gend mit den wirklich zahlrei-chen Pinseln bewegen. Dieseblendet man mittels B flexibel

    ein und aus. Möchte man den Pinsel vergrößern( F ) oder verkleinern ( D ), geht dies ebenso ein-fach über Tastenkürzel wie Rückgängig ( Z bzw.auch Strg + Z ), Wiederholen ( Y ) und die Farb-auswahl ( G ).

    Leider sind die Übersetzungen von MyPaint nochetwas durchwachsen. Ein paar Menüpunkte sindDeutsch, ein paar Englisch und bei den Pinselnsind die Kategorien der Pinsel (Deevad, Ramón)sicher auch nicht sofort selbsterklärend, wennman sie nicht selbst ausprobiert. Die etwas kryp-

    © freiesMagazin CC-BY-SA 3.0 Ausgabe 03/2012 23

    http://mypaint.intilinux.com/http://gitorious.org/mypaint/http://www.freiesmagazin.de/mobil/2012-03-bilder/mypaint-Oberflaeche.jpghttp://www.freiesmagazin.de/mobil/2012-03-bilder/mypaint-Oberflaeche.jpghttp://creativecommons.org/licenses/by-sa/3.0/deed.de

  • BILDBEARBEITUNG

    tischen Namen der Pinsel resultieren aus den Na-men der Entwickler, die diese Pinsel entworfenhaben.

    Zusätzlich bietet MyPaint noch die Möglichkeitder bekannten Ebenen. Standardmäßig wirdman beim Erstellen eines neuen Bildes immermit einem weißen Hintergrund begrüßt. Über dasMenü „Ebenen und Hintergrund“ hat man je-doch die Möglichkeit, zahlreiche verschiedeneHintergründe für sein Bild auszuwählen. MittelsStrg + Bild auf kann man schnell neue Ebenenanlegen und mit Bild auf bzw. Bild ab zwischenden Ebenen hin- und herschalten.

    Ist man mit seinem Bild fertig, hat man die Mög-lichkeit sein Bild in drei verschiedenen Formatenabzuspeichern:

    � PNG� JPEG� ORA (OpenRaster [3], welches als Einziges

    die Ebenen erhält)

    Schade ist in diesem Zusammenhang, dass dasGIMP-Format XCF nicht direkt unterstützt wird,um das Bild in GIMP direkt weiter zu bearbeiten.Hierfür gibt es jedoch ein GIMP-Plug-in [4], wel-ches den Import ermöglicht. In der Planung dernächsten stabilen GIMP-Version 2.8 ist jedochvorgesehen, einen ORA-Import und -Export zuintegrieren, der sich bereits in der Entwicklungs-version von 2.7 befindet [5].

    Eine weitere Stärke von MyPaint ist die Pinsel-vielfalt und die Möglichkeit, über den integrier-

    ten Pinseleditor seine ganz eigenen Pinsel mit al-len Einstellungsmöglichkeiten zu entwerfen. Wei-tere Pinsel und wie diese installiert werden, fin-det man im gut gepflegten Wiki von MyPaint [6].

    Pinseleditor mit vielfältigen Einstellungsmöglichkeiten.

    Die historisch gewachsenen, weiteren Funktiona-litäten kann man in der Feature-Übersicht für dieeinzelnen Veröffentlichungen noch einmal näherbetrachten [7].

    © freiesMagazin CC-BY-SA 3.0 Ausgabe 03/2012 24

    http://en.wikipedia.org/wiki/OpenRasterhttp://registry.gimp.org/node/18435http://www.gimp.org/release-notes/gimp-2.7.htmlhttp://wiki.mypaint.info/Brush_Packageshttp://www.freiesmagazin.de/mobil/2012-03-bilder/mypaint-Pinsel.pnghttp://www.freiesmagazin.de/mobil/2012-03-bilder/mypaint-Pinsel.pnghttp://mypaint.intilinux.com/?page_id=9http://creativecommons.org/licenses/by-sa/3.0/deed.de

  • BILDBEARBEITUNG

    Mit MyPaint erstelltes Portrait.© Ramón Miranda (Public Domain)

    InstallationDie Installation gestaltet sich unter den großenDistributionen (Ubuntu, Debian, Arch Linux,Mandriva, Fedora) im Linux-Bereich recht ein-fach, da diese MyPaint in den Paketquellen ha-ben und es von dort über die jeweiligen Paketma-nager installiert werden kann.

    In der Regel liegen dort allerdings ältereVersionen vor (meist Version 0.9; Version1.0.0 hat den schon lange ersehnten Single-Window-Modus gebracht), weshalb man sichbei Bedarf auf der offiziellen Downloadseite [8]den aktuellen Quellcode herunterladen kann,

    den man dann jedoch selbst kompilierenmuss.

    Möchte man fertige Pakete haben, exis-tieren auf der Wiki-Seite [9] zusätzli-che Pakete und inoffizielle Repositorys(z. B. PPAs für Ubuntu), aus denen manMyPaint installieren kann.

    BeispielbilderUm einen Eindruck zu bekommen, wasKünstler bereits mit MyPaint umgesetzthaben, findet man eine Gallerie auf derMyPaint-Seite [10], die recht eindrucksvol-le Werke zeigt. Besonderen Anklang fin-det MyPaint in den Genres der japani-schen Mangas, aber auch in den realisti-schen Zeichnungen findet man gut umge-setzte Werke.

    FazitInsgesamt ist MyPaint eine sehr gut umgesetzteLösung, welches den Künstler in seinem Kreativ-prozess gut unterstützt und ihm die Werkzeugegibt, die er hauptsächlich braucht. Die Zeichen-performance ist besser umgesetzt als bei GIMP.Die Pinselvielfalt und die Einfachheit der Benut-zeroberfläche mit den schnell eingängigen Tas-tenkombinationen ermöglichen die Konzentrati-on auf das Wesentliche und sorgen für erstaun-lich gute Bilder. Lediglich die Übersetzung könn-te noch konsistenter sein, jedoch ist hier natürlichauch die Community gefragt.

    Zusätzlich lohnt ein Blick in das Wiki vonMyPaint [11], in dem man weitere Informationenzur Mitwirkung, sowie Tutorials und Dokumenta-tionen findet.

    LINKS

    [1] http://mypaint.intilinux.com/[2] http://gitorious.org/mypaint/[3] http://en.wikipedia.org/wiki/OpenRaster[4] http://registry.gimp.org/node/18435[5] http://www.gimp.org/release-notes/gimp-2.7.

    html[6] http://wiki.mypaint.info/Brush_Packages[7] http://mypaint.intilinux.com/?page_id=9[8] http://mypaint.intilinux.com/?page_id=6[9] http://wiki.mypaint.info/index.php?title=

    Packaging[10] http://mypaint.intilinux.com/?page_id=519[11] http://wiki.mypaint.info/File:Kristen_portrait.jpg[12] http://wiki.mypaint.info/[13] http://pmeyhoefer.de/blog/mypaint-zeichenpro

    gramm-fur-kreative-kunstler/

    Autoreninformation

    Patrick Meyhöfer (Webseite) er-kundet gerne neue und relativunbekannte Software.

    Diesen Artikel kommentieren

    © freiesMagazin CC-BY-SA 3.0 Ausgabe 03/2012 25

    http://www.freiesmagazin.de/mobil/2012-03-bilder/mypaint-beispiel.jpghttp://wiki.mypaint.info/File:Kristen_portrait.jpghttp://creativecommons.org/licenses/publicdomain/deed.dehttp://www.freiesmagazin.de/mobil/2012-03-bilder/mypaint-beispiel.jpghttp://mypaint.intilinux.com/?page_id=6http://wiki.mypaint.info/index.php?title=Packaginghttp://mypaint.intilinux.com/?page_id=519http://wiki.mypaint.info/http://mypaint.intilinux.com/http://gitorious.org/mypaint/http://en.wikipedia.org/wiki/OpenRasterhttp://registry.gimp.org/node/18435http://www.gimp.org/release-notes/gimp-2.7.htmlhttp://www.gimp.org/release-notes/gimp-2.7.htmlhttp://wiki.mypaint.info/Brush_Packageshttp://mypaint.intilinux.com/?page_id=9http://mypaint.intilinux.com/?page_id=6http://wiki.mypaint.info/index.php?title=Packaginghttp://wiki.mypaint.info/index.php?title=Packaginghttp://mypaint.intilinux.com/?page_id=519http://wiki.mypaint.info/File:Kristen_portrait.jpghttp://wiki.mypaint.info/http://pmeyhoefer.de/blog/mypaint-zeichenprogramm-fur-kreative-kunstler/http://pmeyhoefer.de/blog/mypaint-zeichenprogramm-fur-kreative-kunstler/http://pmeyhoefer.de/blog/http://www.freiesmagazin.de/comment/reply/267?edit[subject]=MyPaint#comment-formhttp://creativecommons.org/licenses/by-sa/3.0/deed.de

  • COMMUNITY

    OpenStreetMap – Eine virtuelle Welt gedeiht von Matthias Meißer

    M it „OpenStreetMap – GoogleMaps-Klon oder doch mehr?“ wurde be-reits in der Ausgabe 11/2008 vonfreiesMagazin [1] das OpenStreetMap-Projekt(OSM [2]) vorgestellt, das nach dem Wiki-Prinzip eine ganze Weltkarte erstellt, die jeder-mann nutzen und verbessern darf. Doch dreiJahre sind eine lange Zeit, gerade für freieProjekte. Hier folgt nun das Update, wie sichdie Welt seither verändert hat.

    QualitätWenn man heute die Qualität von OSM beur-teilen will, lohnt sich meist eine differenzierteBetrachtung. In Städten steht die Karte den kom-merziellen Angeboten in Bezug auf Anzahl der

    Mit einfachem Equipment für eine freie Weltkarte.© Sebastian Haag (CC-BY-2.0)

    Objekte, deren Eigenschaften und der Vielfalt anObjektkategorien (von der Stadtautobahn biszum Hydranten kann mittlerweile fast alles er-fasst werden) in nichts nach und übertrifft dieseteilweise sogar. Beispiele wie der damals ge-nannte, detailliert erfasste Berliner Zoo sind mitt-lerweile nicht mehr die Ausnahme, sondern inden meisten Städten ebenso schön umgesetzt.Nicht selten sind es solche kleinen Details, dieauch der Stolz der Community sind. Ähnlich ver-hält es sich mit den Hausnummern, bei denen ei-nige Großstädte schon sehr weit gekommen sindund Googles einfache Adressen-Interpolationvergleichsweise bescheiden aussehen lassen.Als Beispiel kann man gerne einmal die StädteHamburg [3] oder aber München vergleichen.

    Wissenschaftliche Untersuchungen zeig-ten, dass der ländliche Raum aber im-mer noch erheblichen Nachholbedarf