Der Specht, der Specht

Wenn er sitzt, schaut er gleich nicht mehr so souverän aus.

2013-08-buntspecht-1

Versucht einen Halt am wirbelnden Meisenknödelrest zu finden.

2013-08-buntspecht-2

Dann geht es halbwegs und er kann sich die Reste herauspicken.

2013-08-buntspecht-3

Die Amsel freut sich über das, was abfällt.

2013-08-buntspecht-4

Cory Doctorow, Little Brother (incl. epub)

Ich bin ein Schüler an der Cesar Chavez High in San Franciscos sonnigem Mission-Viertel, und damit bin ich einer der meistüberwachten Menschen der Welt.

doctorow_little_brother

Little Brother ist ein Roman für Jugendliche, 2008 erschienen. Der Autor Cory Doctorow (Wikipedia) ist in Internetkreisen bekannt als Aktivist, Autor, Blogger und Journalist und für ein rotes Cape.

Das Buch spielt in einer so nahen Zukunft, dass sie fast schon Gegenwart ist. Schüler in San Francisco haben Laptops statt Schulbüchern, mit einem Betriebssystem, das auf den Schulgebrauch ausgerichtet ist und den Benutzern wenig Kontrolle über den Rechner gibt und gleichzeitig ihre Benutzung kontrolliert. Videokameras mit Gesichtserkennung auf den Schulfluren sind kürzlich verboten worden, als Ersatz experimentiert die Schule mit Schritterkennungs-Software, um den Aufenthalt der Schüler zu überwachen. Computerversierte Schüler wissen allerdings, wie man diese Systeme austrickst.
Dann verüben Terroristen einen Angriff auf San Francisco, in der Größenordnung vergleichbar dem Angriff auf New York 2001. Die staatliche Heimatschutzbehörde ergreift Maßnahmen, die nach und nach zu einem immer größeren Überwachungsstaat in Kalifornien führen, bis hin zu Guantanamo-artigen Geheimgefängnissen. Eine Reihe von Jugendlichen, allen voran der 17-jährige Marcus, wehren sich gegen die Beschneidung ihrer Bürgerrechte – sie wehren sich vor allem mit kleinen digitalen Sabotagemaßnahmen und Happenings.

Der Titel des Buches – eine Anspielung auf George Orwells 1984, in der der Große Bruder die personifizierte Überwachung darstellt – bezieht sich auf eine Stelle, an der nach Namen für die lose Verbindung aufmüpfiger Jugendlicher gesucht wird. Dabei fällt auch “Little Brothers”, sozusagen als die kleinen Brüder des großen Überwachers, die sich gegen dessen Methoden wehren.

Ich halte das Buch für Science Fiction im besten Sinn, nämlich mit der Betonung auf dem ersten Wort. Denn die Geschichte selber ist eher dünn. Der Überwachungsstaat entsteht eben nicht nach und nach, auch wenn ich das oben geschrieben habe – sondern er ist sofort da. Gleich am Anfang werden Marcus und seine Freunde von der Heimatschutzbehörde festgehalten und misshandelt, einfach weil sie zufällig zu einer ungünstigen Zeit an einem ungünstigen Ort waren. Das ging ein bisschen arg schnell. Und die Charaktere sind schon sehr zweidimensional. Von Erwachsenen ist man das in Jugendbüchern gewöhnt, aber auch die Jugendlichen sind holzschnittartig. Viel telling, wenig showing.

Dafür werden Konzepte und Erkenntnisse vorgestellt, wenn auch nicht immer besonders elegant. “Erlaubt mir an dieser Stelle eine kleine Abschweifung, um das zu erklären” schreibt der Ich-Erzähler, und das macht der dann auch. Alan Turing wird vorgestellt, die Entschlüsselung des Enigma-Codes, RFID-Chips und wie man sie unbrauchbar macht, Bayessche Filter und Histogramme, das Falsche-Positivergebnisse-Paradoxon, Internet-Protokolle und asymmetrische Verschlüsselung nach öffentlichen Algorithmen. Außerdem schadet es gar nicht, dass Schüler mal von Linux hören, von LARP (einschließlich Vampirrollenspiel im Hotel, wie ich es aus Erzählungen kenne), von Alternate Reality Games.

Hier werden Technik und Populärkultur ernst genommen; übliche Lektüre im Deutschunterricht ist dagegen Level 4 – Die Stadt der Kinder von Andreas Schlüter für die zugegeben etwas jüngeren Schüler: Dort werden die Kinder auf magische Weise in die Welt des Computerspiels befördert und müssen sich dort ohne Erwachsene zurechtfinden.

Ist Little Brother als Schullektüre geeignet oder nicht? Man kann auf jeden Fall tolle Sachen damit machen:

  • Das englische Original hat Doctorow unter der Creative-Commons-Lizenz BY-NC-SA freigegeben. Das heißt, solange man den a) Autor nennt und b) das ganze nicht kommerziell ist, darf man mit dem Buch machen, was man will (eine Verfilmung, ein Comic, eine gekürzte oder erweiterte Ausgabe), solange man c) das entstandene Produkt unter den gleichen Bedingungen auch anderen zur Verfügung stellt. Man braucht weder die Erlaubnis des Autors noch eines Verlages dazu. Über CC-Lizenzen sollten Schüler Bescheid wissen.
  • Das Buch gibt es als rororo-Taschenbuch in einer Übersetzung von Uwe-Michael Gutzschhahn. Rowohlt hat für die Rechte am Buch sicher bezahlt, es handelt sich ja um eine kommerzielle Verwendung. Ich habe das Buch allerdings in der Übersetzung von Christian Wöhrl gelesen. Der hat das Buch auch übersetzt und stellt seine Version als pdf öffentlich zur Verfügung, natürlich ebenfalls unter der CC-BY-NC-SA, wie es die Lizenz ja vorsieht. Man kann Schüler die Übersetzungen vergleichen lassen; mir selber gefallen an der Wöhrl-Übersetzung etliche Sachen nicht. Deshalb habe ich mir an über hundert Stellen kurze Notizen in mein pdf-Dokument gemacht (am Tablet gelesen, dort geht das mit einfachem Daumendruck). Nur zwei davon betreffen Schreibfehler, der Rest sind Stellen, die ich erst mit dem Original vergleichen möchte, bevor ich sie beurteile. Wenn ich das Buch mit Schüler lese, würde ich auf jeden Fall eventuell vorher und sicher nachher eine verbesserte Übersetzung davon erstellen, die ich dann der nächsten Klasse zur Lektüre anbieten könnte.
  • Weil man das ja darf, hat jemand die Wöhrl-Übersetzung auch in das eBuch-Format .epub umgewandelt, aber wohl automatisiert aus der pdf-Datei, jedenfalls sind die Dateien, die ich gefunden habe, unbrauchbar. Deshalb habe ich die pdf-Datei überarbeitet und mache das Buch hiermit als sauber formatierte .epub-Datei zugänglich.
    Ich würde natürlich die Schüler überreden, ihr Tablet oder Smartphone mal als Lesegerät auszuprobieren. Von selber kommt sicher kaum einer auf die Idee, Romane dort zu lesen, da ist die Schullektüre doch ein guter Anlass.
  • Mit der Übersetzung von Wöhrl darf man ja alles machen, was man mit dem Original auch darf, also hat Fabian Neidhardt das Buch als Hörbuch aufgenommen und stellt es zum öffentlichen Gebrauch zu Verfügung.
  • Tvtropes.org ist ein riesiges Wiki, auf dem man Stunden verbringen kann. Dort wird etwas gesammelt, das eigentlich nicht Trope, sondern Topos heißt. Topoi sind feste – vielleicht sogar vorformulierte – Bilder und Motive der Literatur (später auch: in Film, Fernsehen, Comics, Computerspielen und anderen Medien). Die gibt es schon sehr lange. Tvtropes kennt die Kategorien “Older Than Dirt” (vor dem griechischen Alphabet), “Older Than Feudalism” (von dort bis zum Fall Roms), “Older Than Print” (von dort bis zum Buchdruck) und so weiter. Die Bezeichner der Topoi sind meist etwas alberner als “locus amoenus” oder andere traditionelle Toposnamen.
    Auf der Tvtropes-Seite von Little Brother sind über 50 Topoi aufgezählt, die sich im Buch finden lassen: Von “Adults Are Useless” und “Anti-Hero” und “Blonde Republican Sex Kitten” bis “Would Hurt a Child”, “Your Terrorists Are Our Freedom Fighters” und “Your Radio Hates You”. Die kann man Schüler suchen lassen, oder man kann sie diskutieren, anzweifeln, erklären, Beispiele aus anderen Büchern finden. Eine deutschsprachige Sammlung von Schullektüren-Topoi ist übrigens auch ein Projekt, das ich im Hinterkopf habe.
  • Referat oder Diskussionsrunde zu der Fortsetzung des Buchs, Homeland.
  • Vergleich mit anderen Dystopien.
  • Als Basis für Diskussion und – je nach Altersstufe – Erörterungen. In einer Unterrichtsstunde im Buch wird selbst diskutiert:

    “Unter welchen Umständen sollte die Regierung bereit sein, die Bill of Rights außer Kraft zu setzen?”, fragte sie und drehte sich dabei an die Tafel, um die Zahlen von eins bis zehn untereinanderzuschreiben.

Und dann ist natürlich die Aktualität des Romans. 2010 gab es einen Skandal um eine Schule in Philadelphia (Zeitungsartikel): die Schule spionierte die Schüler mit den in die Schülerlaptops eingebauten Kameras zu Hause aus, ohne deren Wissen natürlich. Und gestern lese ich, dass eine Schülerin aus Texas vom Unterricht suspendiert wurde, weil sie sich weigerte, den Schülerausweis mit eingebautem RFID-Chip zu tragen. (Tatsächlich war das schon im Januar, aber sie kehrt dieser Tage zur Schule zurück; das Gericht gab der Schule Recht, trotzdem benutzt die Schule das Überwachungsprogramm inzwischen nicht mehr.) Dazu noch die aktuellen gesellschaftlichen Themen Vorratsdatenspeicherung, NSA-Bespitzelung, Handy-Rasterfahndung. Lesenswert auch das Interview zu Trusted Computing: Windows 8 macht sich auf den Weg, Hardware zu propagieren, die das Installieren von Linux erschwert macht und die Kontrolle der installierten Programme ermöglicht.

Was gegen das Buch als Schullektüre spricht:

  • Es ist nicht wirklich gut geschrieben. Vielleicht lag’s an der Übersetzung, vermutlich eher an den zweidimensionalen Figuren. Andererseits weiß ich nicht, ob das Schüler stören würde. In dem Alter habe ich auch recht platte Sachen gelesen und genossen.
    Was mir übrigens fehlt: eine Demonstration echter Zusammenarbeit. Schön wäre eine Erzählung vom Wachsen eines Wikis oder anderer Zusammenarbeit; hier wird das nur behauptet und nicht gezeigt. Und ich hätte gerne einen glaubwürdigen Vertreter des Themas Sicherheit und Überwachung, als ernst zu nehmenden Gegenspieler der Jugendlichen.
  • In welcher Jahrgangsstufe soll man das lesen? Auf Englisch frühestens in der 10. Klasse, denke ich, vorher ist nicht genug Sprache da. Oder doch schon in 9? Besteht dann die Gefahr, dass die ganze Technik überlesen wird? Im Deutschunterricht… am liebsten in der 8., so was das Niveau des Buchs betrifft. In dem Alter muss man sie auch das Interesse an Technik und Informatik etwas fördern, und der Inhalt dürfte die Schüler in diesem Alter sehr interessieren. Andererseits ist ein bisschen Sex drin, einmal Geschlechtsverkehr offstage, einmal heftiges Fummeln. (Ist das Rummachen unmittelbar vor der Pressekonferenz, die sie dadurch fast verpassen, unrealistisch oder sind rebellische Teenager wirklich so planlos? Die Frauenfiguren sind in Ordnung, aber jede einzelne der Jüngeren steht auf den Helden. Na ja.)
  • Einige Male wird positiv die Piratenpartei genannt – in Schweden. Dass die deutsche Piratenpartei damit nicht gemeint ist, muss man den Schülern sagen, trotzdem ist das manchen Eltern vielleicht schon zu politisch. Wir erinnern uns: wenn man irgendwas mit Hexen und Zauberern liest, gibt es häufiger aus religiösen Gründen Protest, als man denkt.
  • Irgendein Elternteil arbeitet immer bei Microsoft. Wenn der Internet Explorer als “Microsofts Crashware-Dreck, den kein Mensch unter 40 freiwillig benutzte” bezeichnet wird, und wenn Firmen, die die Lizenz erworben haben, für Microsoft-Spielekonsolen zu schreiben, “Blutgeld an Microsoft gezahlt” haben, dann muss man sich auf etwas Ärger vorbereiten.
  • Jugendsprache zu lesen ist meistens etwas peinlich; bei der Beschreibung von Stadtvierteln in San Francisco ist von “Nutten” und “Transen” und “pissen” die Rede, aber das dürfte kein Problem sein.
  • Das Buch zitiert mehrfach die amerikanische Unabhängigkeitserklärung: wenn ein Volk nicht mehr will, was die Regierung tut, darf das Volk sich wehren. Hm.
    Erstmal ist die Bevölkerung von San Francisco mit dem Vorgehen der Heimatschutzbehörde ja voll einverstanden. (Die Presse erfüllt ihre Rolle der Aufklärung aber auch nicht.) Trotzdem reklamiert Marcus das Recht für sich, aktiven Widerstand zu leisten. Das hätte ich gerne etwas differenzierter. Andererseits, vielleicht ist das ein guter Anlass zur Diskussion.

Das Buch ist aber so schön aktuell und würde den Schülern gut gefallen. Nächstes Jahr habe ich wohl eine 8. und eine 10. Klasse in Deutsch. In 10 ist keine Zeit dafür, da muss man sich mit dem 18. Jahrhundert beschäftigen. Ist 8 zu früh? Ein Referat ist natürlich immer drin. (Rowohlt empfiehlt ab 14 Jahren – im Lauf der 8. werden die meisten Schüler 14, einige sind es schon vorher, sehr selten erst später.)

Links:

Fußnote:

Von Wired gibt es die 12-teilige Videoserie Codefellas (Youtube). Darin spionieren Special Agent Henry Topple, der noch sehr an den Verkleidungen und Geheimoperationen des kalten Kriegs hängt, und die junge Hackerin – bald seine Vorgesetzte – Nicole Winters im Auftrag der Regierung den Menschen hinterher.

Der Inhalt ist nicht verfügbar.
Bitte erlaube Cookies, indem du auf Übernehmen im Banner klickst.

Paranoid

Ich sitze dieser Tage vor meinem neuen Rechner und konfiguriere Betriebssystem und Festplatte und dergleichen. Und ich mache mir Gedanken darüber, wer ab wann Zugriff darauf haben wird. Hat Windows schon eine Backdoor für die amerikanische Regierung? Oder bin ich erst dran, wenn ich Dropbox benutze – darauf haben sie sicher Zugriff, und möglicherweise nicht nur lesend, sondern auch gleich schreibend. Ubuntu kommt ohnehin parallel drauf, oder doch gleich irgendein anderes Linux? Tinfoil Hat Linux ist nicht mehr aktuell, Paranoid Linux gibt es nicht wirklich…

Viel wird aus diesen Gedanken nicht, aber ich habe sie, zum ersten Mal. Das liegt zum einen an Little Brother von Cory Doctorow, über das ich noch schreiben werde. Zum anderen liegt das an den aktuellen Nachrichten. In Neuseeland steht ein Gesetz vor der Verabschiedung, das jeden (neuseeländischen) Internet- und Diensteanbieter dazu verpflichtet, eine Hitnertüt für die Regierung einzubauen. In Deutschland wird immer noch noch von der De-Mail geträumt, mit der oh so praktischen Entschlüsselung in der Mitte, damit man eine Schnittstelle zum Zugriff hat. Und die Engländer… ging ja heute durch die Presse: David Miranda, brasilianischer Staatsbürger und Ehemann des Guardian-Journalisten Glenn Greenwald, wurde gestern knapp 9 Stunden im Flughafen Heathrow festgehalten und verhört, als er dort umsteigen wollte.

Aufgrund eines Antiterror-Gesetzes darf die englische Polizei das, einfach so, für genau 9 Stunden, aber nur an Grenzen und Flughäfen, und nur, wenn die Person im Verdacht steht, Terrorakte zu planen oder durchzuführen. Der so Verhörte hat nicht das Recht zu schweigen, er muss antworten, sonst drohen Geldstrafe oder drei Monate Gefängnis; auch muss man in England seine Passwörter herausgeben, wenn das verlangt wird. (Ich weiß aber nicht, ob durch Polizei oder Richter.)
Das allein deckt sich schon nicht mit meinem Rechtsempfinden. Das deutsche Recht ist mir da näher: Da muss niemand mit der Polizei reden, nie nicht; nur als Zeuge vor Gericht ist man verpflichtet auszusagen – und selbstverständlich nicht, wenn man sich selbst dabei belasten würde.
Noch schlimmer finde ich es, wenn dieses Antiterror-Gesetz jetzt benutzt wird, um letztlich beliebige Personen aufzuhalten, zu durchsuchen und ihnen alle elektronischen Geräte abzunehmen und zu behalten. (Auf die Frage, ob die Daten von den Datenträgern inzwischen an die USA weitergegeben wurden, gab die amerikanische Regierung keine Antwort.) Denn nach allen bekannten Informationen war der Anlass für die Festsetzung der Kontakt von Miranda zu Greenwald und die Informationen von Edward Snowden, die Greenwald veröffentlicht, und nicht um einen Terrorverdacht.
– Miranda war im Auftrag des Guardian unterwegs, also nicht einfach als Ehemann Greendwalds, aber das spielt hier keine Rolle. Die britische Regierung sagt zur Zeit noch, dass das eine einfache Polizeientscheidung war und dass sie nichts damit zu tun hat; die amerikanichsche Regierung war vor der Festsetzung darüber informiert worden und sagt, dass das eine rein britische Angelegenheit ist.

In vielen Ländern der Welt macht man sich als Mensch und Bürger keine Illusionen über die Rechte, die man gegenüber dem Staat hat. Bei uns in Europa genießt man diese Rechte, und zwar allen Unkenrufen zum Trotz in wirklich großem Umfang, wofür ich sehr dankbar bin. Ich halte es aber für schädlich, wenn irgenwie der Eindruck erweckt wird, dass diese Rechte ein Geschenk, eine Gnade, eine jederzeit zurücknehmbare Gabe des Staates sind.

Kinder können keine Computer bedienen

Bei M3o B4a gefunden: Kinder können keine Computer bedienen. Eine ausführliche Tirade eines Informatiklehrers/Systembetreuers an einer englischen Schule.

Kids can’t use computers… and this is why it should worry you – Coding 2 Learn.

Es ist ein Irrglaube, dass Kinder, die mit Smartphones aufwachsen, automatisch Computer bedienen können. Marc Scott zeigt an Beispielen (nicht nur von Kindern), was es heißt, einen Computer nicht bedienen zu können, und – leider nicht ganz so ausführlich – warum das schlecht ist. (Beste Fehlermeldung, die auch ich in der Schule ab und zu höre: “Das Internet ist kaputt.”) Wie Eltern, Schule, Betriebssysteme dazu beitragen, dass dieser Zustand entsteht, und einige wenige Anregungen, was man dagegen tun kann. (Dem Kind nicht einfach das Passwort für das heimische WLAN geben, sondern es in einer Liste von 10000 anderen Passwörtern verstecken. Das Kind kommt dann schon an ein Skript, mit dem es alle ausprobieren kann.)

Datenbanken und Java in der Schule

In der 11. Jahrgangsstufe sollen die Schüler am bayerischen G8 ein Programmierprojekt in einer objektorientierten Sprache (in der Regel: Java) umsetzen, das mit einer SQL-Datenbank zusammenarbeitet. Die ISB-Handreichung stellt als Beispiel eine Börsensimulation und einen Fahrradroutenplaner zur Verfügung; ich habe schon mal mit Schülern zwei schöne Projekte gemacht und bin mit zwei anderen gescheitert. Dabei spielt die Datenbank für mich keine große Rolle; sie hat absolut nichts mit dem Lehrplan von Q11 oder Q12 zu tun, die Schüler interessieren sich nicht dafür, und für die meisten Projekte braucht man eigentlich keine. Das bisschen, das man meist speichern will, geht auch anders. Aber gut, es soll nun mal so sein.

Java und SQL-Datenbanken in der Schule haben einige Tücken, wie ich nach und nach herausgefunden habe. Mit etwas Basteln funktionierte das Projekt – zumindest in der Schule, aber nicht unbedingt bei den Schülern zu Hause, und nicht unter einem anderen Betriebssysteme, oder auch nur innerhalb der Entwicklungsumgebung und nicht als eigenstäniges Java-Produkt. Ich schreibe hier mal zusammen, was ich herausgefunden habe.

  1. Wahl des Datenbanksystems: Access, MySQL, SQLite, Base?
  2. Integrieren des passenden Treibers
  3. Grundsätzliche Aufbau einer Anfrage: Unterschiede bei der Syntax
  4. Die Verbindung zur Datenbank: Hauptproblem Speicherort bei lokalen Dateien

1. Wahl des Datenbanksystems

Es gibt viele Möglichkeiten, mit SQL-Syntax zu arbeiten.

MS Access

Vorteile: Treiber ist bereits vorhanden. Man kann die Datenbank leicht außerhalb von Java bearbeiten.
Nachteile: Läuft nur unter Windows und nur, wenn Access installiert ist.

MySQL-Server

Vorteile: Läuft bei allen Betriebssystemen. Man hat keine Probleme mit dem Speicherort der DB (siehe später).
Nachteile: Man muss den richtigen Treiber finden; man braucht schülerferne Werkzeuge wie phpMyAdmin, um die DB zu bearbeiten; und vor allem: man braucht einen laufenden MySQL-Server. Das geht in der Schule noch, aber zu Hause bei den Schülern schon weniger, und weitergeben an Eltern und Freunde kann man das Programm dann auch nur, wenn man denen die Serverinfrastruktur mitgibt.

Open Office Base

Vorteile: Läuft bei allen Betriebssystemen. Man kann die DB leicht in Base erstellen.
Nachteile: Man muss den richtigen Treiber finden. Vor allem: Java kann nicht unmittelbar mit der .odb-Datei arbeiten. Die ist eigentlich ein gezipptes Paket, das einen Ordner database enthält. Dieser Ordner enthält die 4 Dateien backup, data, properties und script. Die muss man auspacken und umbenennen in zum Beispiel xxx.backup, xxx.data, xxx.properties und xxx.script – und dann erst kann Java mit der Datenbank unter dem Namen xxx im HSQLDB-Format arbeiten.

SQLite

Vorteile: Läuft bei allen Betriebssystemen.
Nachteile: Man muss den richtigen Treiber finden. Es bietet nur eine – für die Schule aber voll ausreichende – Teilmenge von SQL; es gibt keine Fremdschlüssel und keine Kontrolle der Typen – um die Datenintegrität muss man sich selber kümmern. Zum Erstellen und Warten der DB braucht man ein eigenes Programm, davon gibt es aber genug, etwa den SQLite Database Browser.

– Inzwischen neige ich zu SQLite.

2. Integrieren des Treibers

Wenn man sich für ein DBS entschieden hat, braucht Java den Treiber dazu. Den findet man im Web in Form einer .jar-Datei, die man in sein Projekt integrieren muss. (Dafür gibt es verschiedene Möglichkeiten. In BlueJ bindet man die Datei als Bibliothek ein, oder man kopiert sie in einen Ordner namens +libs im BlueJ-Projektverzeichnis.)

DB-Typ Treiberbezeichner Präfix Treiber zu finden z.B. in
MS Access “sun.jdbc.odbc.JdbcOdbcDriver” “jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=” -integriert-
MySQL “com.mysql.jdbc.Driver” “jdbc:mysql://” mysql-connector-java‑5.1.25-bin.jar
Base “org.hsqldb.jdbcDriver” “jdbc:hsqldb:” hsqldb.jar
SQLite “org.sqlite.JDBC “jdbc:sqlite:” sqlite-jdbc‑3.7.2.jar

Neben dem Treiber selber brauchte man in früheren Java-Versionen dessen Bezeichner, und man braucht immer noch einen Präfix dazu, der beim Einbauen dem Namen der DB vorangestellt wird.

3. Grundsätzliche Aufbau einer Anfrage

Ich habe den Aufbau einer SQL-Anfrag ein Java in 10 Schritte aufgeteilt. Hier sind sie in einer Klasse dazu. Damit das funktioniert, braucht man noch die Datenbankdatei quiz.sqlite, aber dazu später mehr.

import java.sql.*;
 
class DBVerbindung {
    //Attribute
    String treiberbezeichner = "org.sqlite.JDBC";
    String praefix = "jdbc:sqlite:";
    String urlstring = "quiz.sqlite";
    String user = "";
    String kennwort = "";
 
    //Anfragestring zu Demo-Zwecken hier ausgelagert
    String anfragestring = "SELECT * FROM fragen WHERE antwort1='H2O';";
    String spaltenbezeichner = "frage";
 
    void test() {
        try {
            //1. Treiber laden
            Class.forName(treiberbezeichner);
 
            //2. Verbindung herstellen
            Connection conn = DriverManager.getConnection(praefix+urlstring, user, kennwort);
 
            //3. Statement erzeugen
            Statement stmt = conn.createStatement();
 
            //4. Abfrage durchfuehren und Ergebnismenge erhalten
            ResultSet rset = stmt.executeQuery(anfragestring);
            //bzw. stmt.executeUpdat(auftragInSQL)
 
            //5. Ergebnismenge verarbeiten (in Schleife, mit getInt/getString)
            while (rset.next()) { System.out.println (rset.getString(spaltenbezeichner)); }
 
            //6. Ergebnismenge schliessen
            rset.close();
 
            //7. Statement schliessen
            stmt.close();
 
            //8. Verbindung schliessen
            conn.close();
        }
        catch (Exception e) {
            System.out.println(e);
        }
    }
}

Den Schritt 1 kann man in neueren Java-Versionen weglassen, da Java den Treiber automatisch lädt, wenn er den Präfix korrekt zuordnen kann. Schritt 2, der Aufbau der Verbindung zur Datenbank, macht am meisten Schwierigkeiten, dazu später. Schritt 4 und 5 sind das Stellen und Verarbeiten der SQL-Abfrage. Hier kann man natürlich optimieren, wenn man sich für geschickte SQL-Abfragen interessiert. Für ein Schulprojekt: Nicht wirklich nötig.

Schwierigkeiten kann die SQL-Syntax im Abfragestring machen. Die unterscheidet sich in Details nämlich, je nachdem, welches System man benutzt:

1. "SELECT * FROM fragen     WHERE aw1    = 'H2O';"
2. "SELECT * FROM \"fragen\" WHERE \"aw1\"= 'H2O';"
3. "SELECT * FROM `fragen`   WHERE `aw1`  = 'H2O';"
4. "SELECT * FROM 'fragen'   WHERE 'aw1'  = 'H2O';"

Bei MS Access funktionieren die Varianten 1, 2 und 3, bei MySQL 1 und 3, bei Base 2, und Variante 4 funktioniert nie (die mit einfachen Apostrophen um Tabellen- und Spaltenbezeichner).
Auch bei der Auswahl von Spalten aus mehreren Tabellen, wie man sie bei Joins braucht, gibt es kleine Syntaxunterschiede.

4. Die Verbindung zur Datenbank

Die Hauptschwierigkeit, habe ich gesagt, ist die Verbindung zur Datenbank. Handelt es sich um eine DB von einem DB-Server, ist das kein Problem. Man schreibt:

//2. Verbindung herstellen
Connection conn = DriverManager.getConnection (
	praefix+"127.0.0.1/MeineDB",
	user,
	kennwort
	);

Und das war’s. Statt IP-Adresse kann man auch gleich Domain/TLD angeben.

Wenn die DB in einer Datei gespeichert ist, ist es schwieriger. Es funktioniert perfekt, den Pfad zur Datei absolut anzugeben:

//2. Verbindung herstellen
Connection conn = DriverManager.getConnection (
	praefix+"C:\Eigene Dateien\MeinProjekt\BlueJ-Projektordner\datenbank.db",
	user,
	kennwort
	);

Nur ist das ja sinnlos, weil ich das Projekt ja anderen Leuten geben möchte, und die haben eine ganz andere Ordnerstruktur. Also brauche ich einen relativen Pfad und keinen absoluten. Es funktioniert zum Beispiel, wenn ich die DB-Datei in mein BlueJ-Projekt platziere:

//2. Verbindung herstellen
Connection conn = DriverManager.getConnection (
	praefix+"datenbank.db",
	user,
	kennwort
	);

Das heißt, es funktioniert zumindest, solange ich mit BlueJ oder Eclipse arbeite. Ich will aber aus dem Projekt irgendwann mal ein .jar-Archiv machen, damit ich es weitergeben kann, und dann kommt plötzlich keine Datenbankverbindung mehr zustande. Der Grund: der relative Pfad in meinem Code ist immer relativ zu dem Verzeichnis, in dem Java gerade ausgeführt wird. Und das ist nicht unbedingt dasjenige, das man erwartet.

Wenn ich durch Doppelklick oder auf der Kommandozeile mein Java-Archiv starte:

C:\Eigene Dateien\MeinProjekt> java -jar projekt.jar

dann ist das aktuelle Verzeichnis C:\Eigene Dateien\MeinProjekt, und da sucht Java nach der Datenbankdatei. Schlimmer noch, ich kann auf der Kommandozeile mein Programm ja auch so starten:

C:\Eigene Dateien> java -jar MeinProjekt\projekt.jar

dann ist das aktuelle Verzeichnis wieder ein anderes, nämlich C:\Eigene Dateien\.

Kurz gesagt: man kann nicht wissen, was das aktuelle Verzeichnis ist. (Außerdem will ich meine Datenbankdatei ohnehin nicht in einem .jar-Archiv haben, sondern außerhalb davon. Auf Material in dem Archiv kann, während es ausgeführt wird, nämlich nur lesend zugegriffen werden, geschrieben werden kann dann nichts in die Datei.)

Das gilt alles genauso für Hintergrundgrafiken. Wenn ich schreibe:

ImageIcon icon = new ImageIcon("bild.jpg");

dann sucht Java im aktuellen Verzeichnis nach der Datei “bild.jpg” – aber das aktuelle Verzeichnis muss nicht das sein, das man erwartet. Also lässt man sich zuerst die URL der Grafikdatei geben und übergibt die dann dem ImageIcon-Konstruktor:

java.net.URL imageURL = getClass().getResource("bild.jpg");
try{
   ImageIcon icon = new ImageIcon(imageURL);
}

Das geht.
Und so ähnlich muss man es auch mit Datenbankdateien machen, also den absoluten Pfad zur Laufzeit ermitteln. Nur ist das eigentlich nicht vorgesehen. Bei stackoverflow.com bin ich aber auf eine Lösung gestoßen. Mit diesem Code ermittelt man zur Laufzeit den Pfad zu dem Verzeichnis über dem Verzeichnis, in dem Java gerade ausgeführt wird:

private String pfadZumOberverzeichnis() {
    java.security.ProtectionDomain pd = getClass().getProtectionDomain();
    if ( pd == null ) return null;
    java.security.CodeSource cs = pd.getCodeSource();
    if ( cs == null ) return null;
    java.net.URL url = cs.getLocation();
    if ( url == null ) return null;
    java.io.File f = new java.io.File( url.getFile() );
    if (f == null) return null;
 
    String pfad = "";
    try {
        pfad = f.getParentFile().getAbsolutePath();
        pfad = java.net.URLDecoder.decode(pfad, "utf-8");
    } catch (Exception e) { }
    return pfad + "/";
}

Und in dieses Verzeichnis außerhalb von und parallel zum BlueJ-Ordner bzw. außerhalb von und parallel zum .jar-Archiv steckt man die Datenbankdatei. Dann stellt man die Verbindung so her:

//2. Verbindung herstellen
Connection conn = DriverManager.getConnection(
		protokoll+pfadZumOberverzeichnis()+"datenbank.db",
		user,
		kennwort
		);

Inzwischen klappt das mit meinen Datenbanken auf Linux und Windows, als Archiv oder Projekt in der Entwicklungsphase.

(Zum Download: Ein winziges Demoprojekt mit einer Musik-Datenbank aus den ISB-Handreichungen, und eine Präsentation zum Thema von einer Fortbildung, die ich mal gehalten habe.)

James Branch Cabell, Jurgen

cabell_jurgen

Vermutlich habe ich zum ersten Mal von Cabell gehört durch das Buch Von Atlantis bis Utopia: ein Führer zu den imaginären Schauplätzen der Weltliteratur von Alberto Manguel und Gianni Guadalupi. Von A‑Z gelesen; kaum Fantasyreiche drin, viele Utopien der frühen Neuzeit, viel Weltliteratur. Keine Science Fiction, keine Märchen.

Gelesen habe ich ihn einige Jahre später, zuerst ein oder zwei deutsche Bastei-Lübbe-Ausgaben, und dann, 1991 in England, Jurgen. Das ist Cabells bekanntestes Werk, letztlich wohl nur deshalb, weil es 1920–1922 einen vielbeachteten Prozess darum gab. (“Represents and is descriptive of scenes of lewdness and obscenity, and particularly upon pages 56, 57, 58, 59, 61, 63, 64, 67, 80, 84, 86, 89, 92, 93, 98, 99, 100, 103, 104, 105, 106, 107, 108, 114, 120, 124, 125, 127, 128, 134, 135, 142, 144, 148, 149, 150, 152, 153, 154, 155, 156, 157, 158, 161, 162, 163, 164, 165, 166, 167, 168, 170, 171, 174, 175, 176, 177, 186, 196, 197, 198, 199, 200, 203, 206, 207, 211, 228, 229, 236, 237, 238, 239, 241, 242, 271, 272, 275, 286, 321, 340, 342, 343 thereof, and is so obscene, lewd, lascivious and indecent that a minute description of the same would be offensive.”)

1. Inhalt

Eine kurze Herausgeberfiktion erinnert zu Beginn an die Legende von Jürgen, die einen Teil der Geschichten um Dom Manuel bildet. Der hat das spätmittelalterliche Reich Poictesme gerettet (in Cabells Figures of Earth), bevor er verschwand oder entrückt wurde. Jürgen ist der Sohn eines Weggefährten von Manuel, über vierzig, Pfandleiher von Beruf und verheiratet. Nach ein paar eher beiläufigen freundlichen Wörtern über den Teufel ist Jürgens Frau verschwunden, und Jürgen macht sich widerstrebend auf die Suche nach ihr. Der Weg führt in eine Höhle; auf der anderen Seite trifft er in einem magischen Garten seine Jugendliebe wieder, so wie er sie damals idealisiert gesehen hat. Sie erkennt den alten Jürgen nicht und erzählt ihm von ihren und des jungen Jürgen großen Plänen. Danach überredet Jürgen eine Göttin des Mittwochs (lange Geschichte), ihn einen vergangenen Mittwoch wiederholen zu lassen. An diesem Mittwoch gibt es einen Ball am Hof; der inzwischen verjüngte Jürgen sieht seine Jugendliebe, seinen Rivalen, Höflinge, und kennt ihr und sein zukünftiges Schicksal. Der Versuch, dem Geschehen eine andere Wendung zu geben, misslingt. Jürgen macht sich ein zweites Mal auf in die Höhle. Es folgt eine lange, lange Phase, in der sich Jürgen bei verschiedenen Frauen herumtreibt, menschlichen und nichtmenschlichen; die Aneinanderreihung zweideutigen Abenteuer ermüdet etwas beim Lesen. Jürgen steigt dabei vom Herzog zum König auf, dann zum Kaiser und landet (nach einem Zwischenspiel in der Hölle) sogar auf dem Thron Gottes. Aber er findet – trotz wiedergewonnener Jugend – keine Zufriedenheit. Am Schluss wählt er wieder sein Leben als Mittvierziger, mit seiner wiedergefundenen Frau.

2. Jürgen und ich

Ich habe Jurgen damals bestimmt zwei oder drei mal gelesen, und die anderen 18 Bände der Biographie von Manuel auch mindestens einmal, und andere Bücher von Cabell und seine Briefe, Aufsätze über ihn und Biographisches. Man kann sagen, ich bin ein Fan. Aber an Cabell muss man sich gewöhnen, und ich kann ihn beileibe nicht jedem empfehlen. Manche Dinge sind gut gealtert, andere weniger. Und das bringt mich zu Jurgen.

Nach einem starken Anfang – die Begegnung des alten Jürgen mit seiner Jugendliebe, die auf magische Weise wiederholte Ballnacht, Jürgens ratlose Unzufriedenheit mit beidem – interessierte mich der Mittelteil des Buches beim Wiederlesen weniger. Ich glaube, das war schon beim ersten Lesen so. Jürgens Abenteuer wiederholen sich – das ist Absicht; ähnlich wie Faust ist er auf der Suche nach Zufriedenheit, ist sich dessen aber nicht völlig bewusst, und kennt nur einen Weg dorthin: Liebesabenteuer mit Frauen. Sein Kodex gebietet es, mit jeder – ausnahmslos liebreizenden – Frau, die seinen Weg kreuzt, nach Recht und Anstand zu verkehren. Am Schluss wird Jürgen allerdings attestiert, sich stets tadellos verhalten zu haben, keine Ferkeleien, “to deal fairly” war stets einfach nur das; jedes Schwert, jede Lanze, jeder Stab, jedes Zepter, mit denen er die Frauen erfreut hat, war einfach nur das, Mehrdeutigkeiten liegen im Auge des Betrachters, und was da eventuell im Dunkeln geschehen ist, ist weder dem Leser explizit geschildert worden noch hat Jürgens Schatten (der ihn beobachtet, lange Geschichte) das mitgekriegt. Der ist im Dunkeln ja nicht da.

13 mal taucht “to deal fairly” im Buch auf. 17 mal bezeichnet sich Jürgen als “monstrous clever fellow”. Das ist sein Credo, auch wenn gelegentlich durchscheint, dass Jürgen vermutet, dass das so nicht notwendigerweise der Wahrheit entspricht. Aber das ist es, an das er glaubt – sonst gibt es nämlich nichts, an das er glauben kann. Für die Illusionen seiner Umwelt hat Jürgen nur höflichen Zweifel übrig. 13 mal sagt er: “certainly I cannot go so far as to say you are wrong; but still, at the same time –”

Schon früh auf seiner Reise trifft Jürgen auf eine bocksfüßige Gestalt im Wald, wie das in Büchern vom Anfang des 20. Jahrhundert gelegentlich geschah (siehe Blogeintrag und Kommentar dazu). Diese Gestalt klärt Jürgen darüber auf, wie die Welt wirklich funktioniert – und nur weil Jürgen ein Dichter ist und deshalb die Realität leugnen kann, wird er durch die gesehene Wahrheit nicht wahnsinnig. (Auch wenn das Dichtersein eher behauptet als gezeigt wird.)

“Were there a bit of truth in your silly puppetry this world of time and space and consciousness would be a bubble, a bubble which contained the sun and moon and the high stars, and still was but a bubble in fermenting swill! I must go cleanse my mind of all this foulness. You would have me believe that men, that all men who have ever lived or shall ever live hereafter, that even I am of no importance! Why, there would be no justice in any such arrangement, no justice anywhere!”

(Poetry/Art ist einer der drei Modi, die Cabell anbietet, um mit einer bedeutungslosen Existenz in einem bedeutungslosen Universum – Shakespeares “tale told by an idiot, full of sound and fury signifying nothing”. – fertig zu werden. Die anderen sind Chivalry und Gallantry.)

Diese Gedanken waren es, die das Buch lesenswert gemacht haben für mich, damals und auch noch heute. Nach dem für mich weniger interessanten Mittelteil sind die Gespräche zwischen Jürgen und einer Schöpfergestalt am Schluss dann wieder gut zu lesen. Aber vielleicht muss man dazu erst durch das vorhergehende durch. Die Kurzfassung: Das Leben ist kurz und sinnlos, Zyniker muss man trotzdem nicht sein (die Begegnungen mit Helena und Gott nehmen Jürgen auf unterschiedliche Weise sehr mit), und Illusionen sind wichtig.

Hier eine zusammenhängendere Besprechung als meine.

3. Jürgen als Heldenreise

Beim Lesen fiel mir auf, dass Jürgens Abenteuer Merkmale einer typischen Heldenreise aufweisen, wie sie bei Wikipedia beschrieben werden:

  1. Ruf: Erfahrung eines Mangels oder plötzliches Erscheinen einer Aufgabe.
    Jürgens Frau ist plötzlich nicht mehr da, möglicherweise als Folge eines Gesprächs von Jürgen mit einem Wunder wirkenden Fremden.
  2. Weigerung: Der Held zögert, dem Ruf zu folgen, beispielsweise, weil es gilt, Sicherheiten aufzugeben.
    Jürgen macht erst mal keine Anstalten, nach seiner Frau zu suchen, sondern lebt anscheinend ganz zufrieden als Junggeselle.
  3. Aufbruch: Er überwindet sein Zögern und macht sich auf die Reise.
    Jürgens angeheiratete Verwandtschaft drängt ihn, der wandelnden Erscheinung seiner Frau zu folgen. (“[T]his was the manly thing to do.”)
  4. Auftreten von Problemen, die als Prüfungen interpretiert werden können.
    Das Treffen auf seine Jugendliebe. Der Streit mit den Philistern. Viele weitere.
  5. Übernatürliche Hilfe: Der Held trifft unerwartet auf einen oder mehrere Mentoren.
    Der Zentaur Nessus zeigt ihm den Weg und gibt ihm ein magisches Hemd zu tragen. Die Göttin Sereda lässt ihn einen Mittwoch wiederholen, verjüngt ihn und gibt ihm einen magischen Schatten.
  6. Die erste Schwelle: Schwere Prüfungen, Kampf mit dem Drachen etc., der sich als Kampf gegen die eigenen inneren Widerstände und Illusionen erweisen kann.
    Frauengeschichten, Rittergeschichten, the lot. Vor allem nach dem zweiten Eintritt in die Höhle.
  7. Fortschreitende Probleme und Prüfungen, übernatürliche Hilfe.
    Die Liebesgeschichte um Guinevere, abgelöst durch die Beziehung mit der übernatürlichen Anaïtis.
  8. Initiation und Transformation des Helden: Empfang oder Raub eines Elixiers oder Schatzes, der die Welt des Alltags, aus der der Held aufgebrochen ist, retten könnte. Dieser Schatz kann in einer inneren Erfahrung bestehen, die durch einen äußerlichen Gegenstand symbolisiert wird.
    Initiation: Vielleicht der mehrdeutige Ritus in Kapitel 22, eine Parodie auf die Gnostische Messe von Crowley.’
    Elixir oder Schatz zur Rettung der Alltagswelt: Nichts dergleichen. Anders als der klassische Heros, der aus der magischen Welt mit einer Rettung für sein Land zurückkehrt, kehrt Jürgen mit völlig leeren Händen zurück. Das magische Hemd gibt er vorher ab.
  9. Verweigerung der Rückkehr: Der Held zögert in die Welt des Alltags zurückzukehren.
    Hm. Jürgen denkt gar nicht an Rückkehr, bis zum Schluss. Dann gelingt es ihm nur mit einigen Tricks, seinen Wunsch – den der Rückkehr in seinen vorherigen Zustand – auch erfüllt zu bekommen.
  10. Verlassen der Unterwelt: Der Held wird durch innere Beweggründe oder äußeren Zwang zur Rückkehr bewegt, die sich in einem magischen Flug oder durch Flucht vor negativen Kräften vollzieht.
    Jürgen kehrt aus der Welt jenseits der Höhle, aus seiner künstlichen Jugend zurück. Auf magische Weise, ja.
  11. Rückkehr: Der Held überschreitet die Schwelle zur Alltagswelt, aus der er ursprünglich aufgebrochen war. Er trifft auf Unglauben oder Unverständnis, und muss das auf der Heldenreise Gefundene oder Errungene in das Alltagsleben integrieren. (Im Märchen: Das Gold, das plötzlich zur Asche wird.)
    Jürgen kommt in Ort und Zeit genau an die Stelle zurück, von der er aufgebrochen ist. Seine Frau glaubt ihm kein Wort, aber letztlich ist die Geschichte dann ja auch nie passiert. Es gibt nichts auf der Heldenreise Gefundenes oder Errungenes, nicht für Jürgen und schon gar nicht für die Gesellschaft.
  12. Herr der zwei Welten: Der Heros vereint Alltagsleben mit seinem neugefundenen Wissen, und lässt somit die Gesellschaft an seiner Entdeckung teilhaben.
    Die Gesellschaft hat gar nichts von Jürgen – außer dass sie den alten Jürgen zurück hat, der seiner gealterten Jugendliebe dann noch einen Gefallen tun kann.

Fazit: Als Einstieg in Cabells Werk empfehle ich Jurgen nicht. Dann eher Figures of Earth, das Buch, das Cabell gleich nach Jurgen schrieb und mit dem die Legende von Manuel beginnt. Hier ein Blogeintrag dazu.

Pink Floyd, The Wall – als Schulprojekt

Mein Referendariat habe ich an einem Gymnasium mit musischem Zweig gemacht; dort gab es die Tradition, alle zwei Jahre ein Musical aufzuführen. (Kleiner Ort mit großer Veranstaltungshalle.) Das war schön, irgendwas mit Arche Noah, glaube ich; ist schon lange her.

An meiner jetzigen Schule gab es wohl nur einmal eine solche Veranstaltung, zur Fünfzigjahrfeier, vor meiner Zeit. Danach nicht mehr.

Das Carl-Humann-Gymnasiums in Essen hat dieses Jahr The Wall von Pink Floyd aufgeführt. Und zwar in ganz, ganz groß. Schüler und Schülerinnen, Gastmusiker, Eltern, Ehemalige, die Stadt, alle haben mitgearbeitet.

Christian Drossmann stellt es in seinem Blog vor als Das teuerste Schulprojekt aller Zeiten: The Wall – Live in Essen, Wir kamen – Wir sahen – Wir rockten! (Eine DVD wird’s auch geben.)

Dort gibt’s auch tolle Fotos und Links zu Videos.

Wie funktioniert so was? Vermutlich muss es jemand geben, der das auf die Beine stellen will, und der viel Energie hat. Die Schulleitung muss dahinter stehen. Kreatives Potential bei Lehrern und Schülern gibt es sicher genug. (Selber bin ich da gar nicht gut. Kreativ bin ich, Energie habe ich wenig, beim Organisieren bin ich ganz schwach.)

Vichyssoise

In der Gemüsekiste war Lauch, es ist Sommer, ich hatte noch nie eine Vichyssoise gemacht.

vichyssoise
Foto: Frau Rau

Das Wort “Vichyssoise” kannte ich seit früher Jugend. Begegnet war es mir vielleicht bei Es muss nicht immer Kaviar sein, oder in der Anekdotensammlung im Bücherschrank meiner Eltern, die voll war von Orten, Begriffen und Personen, die mir nichts sagten. (Ganz erstaunlich, wie viel Weltwissen man aus leicht verstaubten Anekdotensammlungen gewinnen kann.) Richtig auseinandergesetzt habe ich mich mit Vichyssoise aber erst – wie viele meiner Generation – bei The Secret of Monkey Island, als es darum ging, einen Aushilfskoch um seine Stelle zu bringen, indem man eine – erst mühsam zu fangende – Ratte in der Vichyssoise platzierte, um dann selber die frei gewordene Stelle als Koch antreten zu können.

Die Vichyssoise gestern war richtig gut. Mein Rezept ist ein Gemisch aus verschiedenen im Web gefundenen Rezepte. Für vier Portionen:

  • 2 Esslöffel Olivenöl
  • 2 Knoblauchzehen, kleingemacht
  • 400 g Lauch, möglichst viel vom weißen Anteil
  • 350 g Kartoffeln, grob gewürfelt
  • 1.4 Liter Hühnerbrühe (Nachtrag: eher dünn, also halb Wasser, halb Brühe)
  • 1/2 Becher Sahne (oder mehr), Salz, Pfeffer

Den Lauch waschen, gut abtrocknen, in Stücke schneiden, in dem Olivenöl mit dem Knoblauch ein paar Minuten möglichst andünsten. Dann die Kartoffeln dazu und mit der Brühe auffüllen. Eine Dreiviertelstunde kochen, danach mit dem Pürierstab durchmixen. Nachsalzen, Sahne dazu geben. Ein anderes Rezept schlug Joghurt statt Sahne vor, probiere ich beim nächsten Mal.

Kalt werden lassen, danach in den Kühlschrank. Traditionell mit Schnittlauch dekorieren, Petersilie sehe ich auch gelegentlich, ich hatte noch Basilikum übrig. Geht alles. Traditionell kommt übrigens kein Knoblauch hinein.

Erstaunt war ich darüber, wie wunderbar glatt die Suppe ist, auch ohne dass ich sie durch ein Sieb gestrichen habe. Kein bisschen von der leicht krümeligen Konsistenz, die ich sonst von Pürierstabsuppen kenne.

Programmierprojekte, Ideen gesucht, und zwei tolle Programme für die Schule

Studierende für das Lehramt Informatik müssen laut Lehramtsprüfungsordnung ein Programmierprojekt vorweisen. Mit diesem zeigen sie, dass Sie selbstständig Prinzipien der Softwareentwicklung anwenden können – Entwicklungsmodelle, Testverfahren, Entwurfsmuster. Inhaltlich kann das alles mögliche sein, solange die Studierenden einen Betreuer für das Projekt finden. Ein potentieller solcher Betreuer bin ich. Ab und zu werde ich auch nach möglichen Themen für solche Programmierprojekte gefragt.

Programmieraufträge, die mich interessieren, betreffen hauptsächlich Software, die man irgendwie für die Schule nutzen könnte. Und oft, wenn mir da etwas Schönes einfällt, das es noch nicht gibt und das ein Student in einem Semester programmieren könnte und das für den Unterricht nützlich wäre – oft genug, wenn ich dann mal recherchiere, dann gibt es so eine Software schon. Zefix!

(Falls einer von euch einen Wunsch hat für eine Software, bitte mir sagen. Ich hab da eine Liste, auf die ich Ideen setze, die ich Studierenden anbiete.)

So ging es mir auch mit dieser Software:

1. Orinoco von Christoph Gräßl

(Link zur Seite)

Das ist das beste Programm zur Datenflussmodellierung, das ich für die Schule kenne. In Bayern braucht man das in der 9. Klasse.

Der Inhalt ist nicht verfügbar.
Bitte erlaube Cookies, indem du auf Übernehmen im Banner klickst.

Das Programm läuft – wichtig für die Schule – ohne Installation (wenn auch nur unter Windows). Mit Drag & Drop kann man Funktions-Ellipsen anlegen, Kästen für Ein- und Ausgabewert, und gerichtete Verbindungen dazwischen. Man kann außerdem probeweise Werte eingeben und sich alle Zwischenergebnisse anzeigen lassen, sogar animiert, so dass die Daten wirklich der Reihe nach von oben nach unten fließen. (Das sieht man hier natürlich nicht.)

promilleformel1

Wenn man die Funktion für die Berechnung des Blutalkoholgehalts gespeichert hat, kann man sie wie die anderen, vorgebenenen Standardfunktionen benutzen:

promilleformel2

Und als Term gibt er die Funktion auch aus:

Blutalkoholgehalt = PRODUKT(PRODUKT(Menge ; Alkoholgehalt) ; 0.8) / PRODUKT(WENN(Geschlecht = w ; 0.6 ; 0.7) ; Körpermasse)

Da fehlen mir eigentlich nur ein paar Kleinigkeiten. Datentypen. Die Möglichkeit, im umgekehrten Weg aus einer Termnotation die Grafik erstellen zu lassen. Aber im Prinzip wär’s das gewesen mit meiner Idee für mein Programmierprojekt.

2. AuDeSe – auch von Christoph Gräßl

(Vom gleichen Autor, auf der gleichen Seite.)

Der Inhalt ist nicht verfügbar.
Bitte erlaube Cookies, indem du auf Übernehmen im Banner klickst.

Programme zum Erstellen von endlichen Automaten kenne ich einige. Dieses hier ist einfach zu bedienen, die Grafik nicht ganz so schön wie bei Orinoco, aber okay. Hier ein kleiner Automat, der eine Wache in einem Comotuerspiel steuert. Normalerweise patroulliert die Wache um ihre Wachposition herum. Hört sie ein Geräusch, bleibt sie stehen, sieht sie einen Gegner, verfolgt sie ihn. Wenn Zeit vergeht, nähert sich die Wache wieder nach und der Normalität – solange der einmal gesehene Gegner in Reichweite ist, verfolgt sie ihn aber.

automat_wache_spiel

Das mit den Bedingungen ist noch nicht optimal gelöst, aber für die meisten Schulfälle reicht es.
Das besondere an diesem Programm: Es generiert sehr einfach den Java-Code zu dem entworfenen Automaten, und wenn man will, gleich das ganze BlueJ-Projekt dazu.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
public class AUTOMAT
{
 
    // Attribute
    private String Zustand;
 
    // Bedingungen
    private boolean nicht_in_Reichweite;
    private boolean in_Reichweite;
 
    // Methoden
 
    // Konstruktor
    public AUTOMAT()
    {
        // Startzustand setzen
        Zustand = "auf Patrouille";
        System.out.println("Startzustand: auf Patrouille");    }
 
    // Ausgelöste Aktion "stehen bleiben"
    private void stehen_bleiben( )
    {
        // Hier den Code für die ausgelöste Aktion eingeben!
        System.out.println("Ausgelöste Aktion stehen_bleiben() wurde aufgerufen!");
    }
 
    // Ausgelöste Aktion "Patrouille aufnehmen"
    private void Patrouille_aufnehmen( )
    {
        // Hier den Code für die ausgelöste Aktion eingeben!
        System.out.println("Ausgelöste Aktion Patrouille_aufnehmen() wurde aufgerufen!");
    }
 
    // Ausgelöste Aktion "verfolge Gegner"
    private void verfolge_Gegner( )
    {
        // Hier den Code für die ausgelöste Aktion eingeben!
        System.out.println("Ausgelöste Aktion verfolge_Gegner() wurde aufgerufen!");
    }
 
    // Ausgelöste Aktion "gehen nach Wachposition"
    private void gehen_nach_Wachposition( )
    {
        // Hier den Code für die ausgelöste Aktion eingeben!
        System.out.println("Ausgelöste Aktion gehen_nach_Wachposition() wurde aufgerufen!");
    }
 
    // Auslösende Aktion "hört Geräusch"
    public void hört_Geräusch()
    {
        if ( Zustand.equals("auf Patrouille"))
        {
            stehen_bleiben();
            Zustand = "misstrauisch";
            System.out.println("Neuer Zustand: misstrauisch");
            return;
        }
    }
 
    // Auslösende Aktion "Zeit vergeht"
    public void Zeit_vergeht()
    {
        if ( Zustand.equals("misstrauisch"))
        {
            Patrouille_aufnehmen();
            Zustand = "auf Patrouille";
            System.out.println("Neuer Zustand: auf Patrouille");
            return;
        }
        if ( Zustand.equals("verfolgend") && nicht_in_Reichweite==true)
        {
            gehen_nach_Wachposition();
            Zustand = "misstrauisch";
            System.out.println("Neuer Zustand: misstrauisch");
            return;
        }
        if ( Zustand.equals("verfolgend") && in_Reichweite==true)
        {
            verfolge_Gegner();
            Zustand = "verfolgend";
            System.out.println("Neuer Zustand: verfolgend");
            return;
        }
    }
 
    // Auslösende Aktion "sieht Gegner"
    public void sieht_Gegner()
    {
        if ( Zustand.equals("misstrauisch"))
        {
            verfolge_Gegner();
            Zustand = "verfolgend";
            System.out.println("Neuer Zustand: verfolgend");
            return;
        }
        if ( Zustand.equals("auf Patrouille"))
        {
            verfolge_Gegner();
            Zustand = "verfolgend";
            System.out.println("Neuer Zustand: verfolgend");
            return;
        }
    }
 
}