\documentclass[a4paper,11pt]{article} \usepackage[german]{babel} \usepackage{epsfig} \usepackage{graphicx} \usepackage{verbatim} \newcommand{\tilda}{\def\~{}} \newcommand{\grad}{\ensuremath{^\circ}} \usepackage[titleformat={italic,commasep},% authorformat={citationreversed,reducedifibidem},% ibidem={strictdoublepage,name&title}, % lookforgender,% commabeforerest,% endnote,% crossref={long},% bibformat={ibidem,compress,raggedright}]{jurabib} %\usepackage{german} %\selectlanguage{\austrian} \usepackage[breaklinks=true]{hyperref} \hypersetup{ pdfauthor = {Alexander \"Olzant}, pdftitle = {Fachpraktikum aus Informatik}, pdfsubject = {Unterrichtssequenz}, pdfkeywords = {Jaegersberger J\"agersberger FAP Unterrichtssequenz}, pdfcreator = {LaTeX with hyperref package}, pdfproducer = {pdflatex} } \sloppy \begin{document} \titlepage \title{ Fachpraktikum aus Informatik \\ bei Mag. Werner J\"agersberger } \author{Alexander \"Olzant\\ 9301547\\ E 190 884 423} \maketitle \thispagestyle{empty} \newpage \tableofcontents \newpage \section{Charakteristik des schulischen Umfeldes: BG/BRG/WKG Wenzgasse 7} Die Schule ist eine der gr\"osseren in Wien, im Schuljahr 2005/2006 % 28 + 27 + 26 + 28 + 29 + 28 + 28 + 28 + 28 + 28 + 31 + 30 + 28 + 19 + 16 + 32 + 32 + 26 + 25 + 24 + 30 + 31 + 24 + 20 + 24 + 24 + 21 + 23 + 29 + 27 + 17 + 26 + 31 + 28 + 23 + 24 + 27 waren laut Jahresbericht 970 Sch\"ulerInnen in 36 Klassen, in diesem Schuljahr ergibt eine Z\"ahlung auf der Homepage um 5 mehr, die Anzahl der Klassen ist um 2 gestiegen. Seit der Gr\"undung als Lyzeum mit 7 Klassenr\"aumen nach dem Bau des urspr\"unglichen Geb\"audes in den Jahren 1904--1906 erfolgte stufenweise der Ausbau, heute beginnt alleine die Erste mit f\"unf Parallelklassen, die sich meist bis in die Oberstufe halten. Den Leitideen ist zu entnehmen, dass neben der Vermittlung einer profunden Allgemeinbildung und Heranf\"uhren an die Hochschulreife auch die F\"orderung individueller Anlagen und Begabungen als wichtig eingesch\"atzt wird. In Anlehnung an Paragraph 2 des Schulorganisationsgesetzes\footnote{\cite[\S{} 2]{SchOG}} wird auch auf die Wichtigkeit von Selbstverantwortung und M\"undigkeit hingewiesen sowie Kommunikation, Respekt und Toleranz hervorgehoben. Einer der Gr\"unde f\"ur die relativ geringe Verschm\"alerung der Sch\"ulerInnenzahlen in den h\"oheren Klassen k\"onnte darin zu finden sein, dass drei Schultypen angeboten werden: neben einem neusprachlichen Gymnasium mit Latein oder Franz\"osisch ab der dritten Klasse werden ein Realgymnasium mit naturwissenschaftlich-technischem Schwerpunkt (Mathematik, Geometrisch Zeichnen und Physik, sp\"ater wahlweise Biologie) und ein wirtschaftskundlicher Zweig angeboten, in dem auch Werkerziehung, Chemie, Fremdsprachenunterricht mit Vertiefung in Wirtschaftssprache, aber auch haushaltspraktische und -\"okonomische Gegenst\"ande vermittelt werden. Einige der Praktika finden sich wie zu erwarten in den Jahresberichten wieder, welche f\"ur die letzten Schuljahre auch auf der Homepage\footnote{\href{http://www.wenzgasse.at/}{http://www.wenzgasse.at/}} einsehbar sind, dort ist auch eine detaillierte Liste der erweiternden und vertiefenden Angebote (Wahlpflichtf\"acher, Projekte, ...) ersichtlich, darunter etwa die Praktika des wirtschaftskundlichen Zweiges zu Firmen und Organisation wie ORF, Siemens, Mediaprint, ArchitektInnen usw. Die Schule bietet Tagesbetreuung an, welche mit Sch\"ulerInnenstatements beworben wird, der Andrang scheint aber trotzdem hoch zu sein, zumal neben frei einteilbarer Zeit und gegenstandsbezogener Lernzeit auch "`aktive"' Betreuung mit Exkursionen in Museen, Freizeiteinrichtungen und st\"adtischen Saisonveranstaltungen geboten wird. \clearpage \section{Hospitationen/Unterrichtsbeobachtung} Insgesamt wurde bei zehn Unterrichtsstunden (f\"unf Doppelstunden) hospitiert, davon drei in der sechsten Klasse, wo auch die Unterrichtssequenzen stattfanden, zwei in einer achten Klasse. Da in dieser Schule, wie in den meisten allgemeinbildenden Typen, Informatik nur in der f\"unften Klasse (13. Schulstufe) ein Pflichtfach darstellt, fanden die Hospitationen in Wahlpflichtfachstunden statt, was ein Grund f\"ur die als eher hoch empfundene Motivation (Mitarbeit, Aufmerksamkeit) sein k\"onnte. Die gestellten Beobachtungsaufgaben waren ebenfalls f\"ur beide Schulstufen/Klassen die gleichen: bei einer Programmieraufgabe waren bei einem der "`Teams"' von zwei oder drei Sch\"ulerInnen folgende Kriterien zu evaluieren: \begin{itemize} \item Fortschritt (Bew\"altigung der Aufgabe) \item Techniken (Recherche, Nachschlagen, mnemonische Wiedergabe der Instruktionen, ...) \item "`Lead"' (F\"uhrungsrolle/Aufgabenverteilung im Team) \end{itemize} \subsection{\label{h17}6b/c Wahlpflichtfach Informatik, Di 17. 10. 2006 14:40--16:20} In dieser Unterrichtseinheit wurden zuerst die Arbeitsaufgaben der letzten Stunde \"uberpr\"uft und pr\"asentiert, es handelte sich dabei um Zapfenrechnungen. Bei der Codepr\"asentation zeigten sich einige Verst\"andnisprobleme: \begin{itemize} \item Schleifenbedingungen wurden falsch gesetzt (off by one error, $<$ statt $<=$) \item Angabenverst\"andnis (Multiplikation der urspr\"unglichen Zahl statt des Ergebnisses der vorhergehenden Multiplikation) \item Variablendeklarationen vor und in der Funktion (Scoping: \"au\ss{}ere Variable unsichtbar) \item Javascriptspezifische Semantikprobleme, Script au\ss{}erhalb des Header \end{itemize} Die Besprechung der Elaborate inklusive der Korrekturen dauerte etwa 20 Minuten. Im weiteren wurden dann neue Beispiele ausgegeben, welche wiederum in Javascript zu implementieren waren, um die Sprachelemente und Ausgabemodalit\"aten weiter einzu\"uben. Die erste Arbeitsaufgabe stellte ein zu programmierendes Formular mit zwei Eingabefeldern und vier vier {\em Buttons} f\"ur die Grundrechnungsarten dar, sodass bei Auswahl eines der Kn\"opfe einerseits das entsprechende Operationszeichen zwischen den Eingabezahlen und andererseits das Rechenergebnis nach einem Gleichheitszeichen erschien. Weiters war eine Funktion zu finden, welche, ausgehend von einem weiteren Eingabewert, die der n\"achsten zwanzig ungeraden Zahlen ausgeben sollte, wobei die Teilbarkeit der Ausgangszahl durch Zwei zu ber\"ucksichtigen war. Das dritte Beispiel, die mathematisch interessanteste Funktion, verlangte, ausgehend von zwei Startwerten, die n\"achsten 20 Werte einer Fibonacci-Reihe\footnote{\cite[79]{aop1},\\ \cite[253]{HRL}} (Summe der vorhergenden beiden Zahlen) auszugeben. Nach 20 Minuten gab es bereits Implementierungen, vier vielversprechende Ans\"atze samt Papierdokumentation und ein fertiges Programm, der Rest war als Haus\"ubung zu erledigen. \clearpage \subsection{8. Wahlpflichtfach Informatik, Di 17. 10. 2006 16:20--18:00} Auch hier wurden Zapfenrechnungen besprochen, welche mittels in Java Netbeans implementiert worden waren. Anschliessend erfolgte eine Einf\"uhrung in die objektorientierte Programmierung in dieser Programmiersprache, was den Gro\ss{}teil der Doppelstunde in Anspruch nahm: konkret wurde das an Hand der Modulprogrammierung des "`R2"', also einer {\em Klasse}\footnote{\cite[122]{JEP}} zur Koordinatendarstellung im zweidimensionalen Raum erl\"autert. Diesem wurden {\em Eigenschaften}\footnote{\cite[159]{JEP}} {\tt xK int, yK int} und {\em Methoden}\footnote{\cite[128]{JEP}} {\tt R2 plus (R2 partner), string ausgabe()} sowie {\em Konstruktoren} mit und ohne Initialwerte hinzugef\"ugt, um die entsprechenden Konzepte zu demonstieren. Beim zugeh\"origen Beispielprogramm wurde von einer Sch\"ulerin die Frage aufgeworfen, ob bei zweimaligem Aufruf bei der Ausgabe ein Wert wiederholt berechnet w\"urde, was bejaht werden musste, ansonsten w\"are eine Zwischenspeicherung des Wertes notwendig. Zuletzt wurde die Aufgabe zur Bearbeitung gestellt, das innere Produkt zu dem Modul als {\em Methode} zu programmieren ($x1*x2+y1*y2$), es blieben wieder 20 Minuten Arbeit bis zum Ende der Doppelstunde. \clearpage \subsection{\label{h24}6a/c Wahlpflichtfach Informatik, Di 24. 10. 2006 14:40--16:20} Nachdem Mag J\"agersberger die Stunde eingeleitet hat und die Aufgabenstellung der vorhergehenden Unterrichtseinheit noch einmal kurz erl\"autert hat, arbeiten die Teams weiter, Bei sp\"ateren Aufgaben sollen die Gruppen aber durchmischt werden. Aufgabenstellungen (jeweils in einer HTML-Seite per Javascript zu implementieren): \begin{itemize} \item Rechner mit vier {\em Buttons} f\"ur die Grundrechnungsarten \item Ausgabe der n\"achsten zwanzig ungeraden Zahlen ab einem Startwert \item Eingabe von zwei Startwerten, Ausgabe der n\"achsten 20 Werte einer Fibonacci-Reihe (Summe der vorhergenden beiden Zahlen, $$n_i = n_{i-1} + n_{i-2}$$ \item als Zusatzaufgabe kann noch ein Algorithmus zur Teilerbestimmung implementiert werden, der nicht optimal sein muss \end{itemize} Das Team {\bf Gegor P, Samuel B}\footnote{Namen siehe Anhang \ref{Liste}, S. \pageref{Liste}} verfolgte eine dreiphasige Strategie (wobei die optische Pr\"asentation in Form von Stylesheets als vierte aufgefasst werden k\"onnte): nach Ausarbeitung der Probleme in Form von Diagrammen und Pseudocode programmierten die beiden an getrennten Bildschirmen gleichzeitig die Programme, wobei allf\"allige {\em Bugs} (Fehler) dann teils gemeinsam, teils in t\"uftlerischem Alleingang korrigiert wurden, hier tat sich dann eher G. hervor, w\"ahrend S. Stylesheets f\"ur die Ergebnisseiten entwarf. Das gew\"ahrleistete z\"ugigen Fortschritt, der allerdings durch einige Fl\"uchtigkeitsfehler wieder gehemmt wurde, sodass die \"Ubertragung auf den Bildschirm dann letztlich l\"anger dauerte als bei anderen Teams. Dennoch konnte noch rechtzeitig eine Variante der Zusatzaufgabe (alle Teiler bis Teiler bis $n/2$) implementiert werden. Lead: die Aufgabenverteilung ist weitgehend symmetrisch, beide \"ubernehmen ihren Part. G. tendiert eher zu T\"ufteleien, eine Lead-Funktion kann aber nicht festgestellt werden. In der Nachbesprechung ergeben sich keine groben Differenzen zu den angef\"uhrten Beobachtungen. \clearpage \subsection{8. Wahlpflichtfach Informatik, Di 24. 10. 2006 16:20--18:00} Nach einer einf\"uhrung in objektorientierte Programmierung mit {\em Java} ist in dieser Stunde eine einfache Klasse mit Methoden, Eigenschaften und Konstruktoren zu erstellen, Vererbung wird f\"ur eine sp\"atere Unterrichtsstunde avisiert. Das aufgabengem\"a\ss{} zur Beobachtung gew\"ahlte Team besteht aus den Mitgliedern Oliver, Maria und Tobias, welche zu dritt an zwei Bildschirmen arbeiten und die Aufgaben dabei teilweise unabh\"angig voneinander bearbeiten. Maria und Tobias sitzen dabei direkt nebeneinander, wobei Maria die Eingabe \"ubernimmt und die memorierten Schl\"usselw\"orter und Syntaxkonstrukte im wesentlichen auch korrekt eingibt, sie ist also ziemlich eindeutig antreibende Kraft und \"ubernimmt eine deutliche Lead-Funktion. Oliver h\"alt sich abseits und schreibt im wesentlichen seine eigene Implementation, vergleicht aber immer wieder Ergebnis und Fortschritt. Tobias sucht inzwischen Formeln und Sprachelemente (throw/catch), die zwar nicht zur Aufgabenstellung geh\"oren, aber eine verbesserte Fehlertoleranz gew\"ahrleisten k\"onnten (Anlass ist eine Division durch Null). Das Team macht z\"ugigen Fortschritt, die wenigen Fehler im Programmcode werden rasch behoben, allerdings fallen kleine Unsicherheiten bei allgemeinen Prinzipien von Programmierpsrachen auf (Sichtbarkeit von Variablen/Scoping). Verst\"andnis f\"ur die Grundlagen der objektorientierten Programmierung ist offensichtlich vorhanden, es ist anzunehmen, dass auch Erinnerungen an vergangene Klassen (z. B. OOP in Javascript) dazu beitragen. \label{n27}Bei der Nachbesprechung sind auch hier keine besonderen Unterschiede zu erkennen. \clearpage \section{Unterrichtssequenzen} F\"ur die f\"unf eigenst\"andig vorzubereitenden Unterrichtsstunden erfolgt jeweils eine Vor- und Nachbesprechung; wie bei den Hospitationen werden die Sequenzen in Doppelstunden abgehalten, von denen also zwei ganze und eine halbe f\"ur das Praktikum zur Verf\"ugung stehen. \subsection{\label{s07}6a/c Sequenz Di 7. 11. 2006 16:20--18:00} \subsubsection{\label{v27}Allgemeines/Vorbesprechung} In der Vorbesprechung am 27. 10. 2006 wird der ungef\"ahre Stundenablauf wie angef\"uhrt vereinbart, besonderer Hinweis erfolgt auf die Herleitung des Euklidischen Algorithmus\footnote{\cite[80]{aop1},\\ \cite[290]{HRL}}, die simple Variante mittels Subtraktion und die Umwandlung zur Verwendung des Divisionsrestes, da diese Modifikation \"uber die Restklassen kongruent ist. \subsubsection{Programm} \begin{itemize} \item Analyse der Beispielprogramme aus den letzten Stunden mittels Pr\"asentation an der Projektionswand \item Vortrag \"uber das n\"achste Stoffgebiet Bestimmung des gr\"ossten gemeinsamen Teilers mittels des Euklid'schen Algorithmus. Pr\"asentation des mathematischen Konzepts, der urpsr\"unglichen subtraktiven Variante, des \"Ubergangs zur Modulodivision (Restbestimmung), Praktische Implementation. \item Gruppenarbeit - Implementation eines Programms zur Findung des gr\"ossten gemeinsamen Teilers durch den soeben besprochenen Euklid'schen Algorithmus, dabei waren Teams zu je zwei Personen zu bilden, welche sich m\"oglichst von der Zusammensetzung der vergangenen Stunden unterscheiden sollten \end{itemize} Das Handout ist in Anhang \ref{Euklid1} (S. \pageref{Euklid1}) und online \footnote{ \href{http://tigerente.htu.tuwien.ac.at/~aoe/studium/la_aoe/fachpraktikum.dir/euclid_handout.pdf}{http://tigerente.htu.tuwien.ac.at/~aoe/studium/la\_aoe/fachpraktikum.dir/euclid\_handout.pdf}} zu finden, ebenso eine Pr\"asentation in PDF (\LaTeX{}-Source am gleichen Ort)\footnote{ \href{http://tigerente.htu.tuwien.ac.at/~aoe/studium/la_aoe/fachpraktikum.dir/euclid_praes.pdf}{http://tigerente.htu.tuwien.ac.at/~aoe/studium/la\_aoe/fachpraktikum.dir/euclid\_praes.pdf}}. \subsubsection{Abhaltung} Die Stundendurchf\"uhrung verlief abgesehen von ein paar kleinen Pannen ruhig (einige Ordner wurden am Pr\"asentationscomputer im Dateisystem verschoben), nach einigen Minuten konnte aber wieder Ordnung hergestellt werden. Der anschliessende Vortrag wurde ohne Zwischenf\"alle aufgenommen, im nachhinein zeigten sich allerdings einige Verst\"andnisprobleme, die in der Nachbesprechung auch behandelt wurden. Erst nach einigen weiteren Erl\"auterungen und an der Tafel vorgerechneten Beispielen konnte mit der Durchf\"uhrung der vorgesehenen Aufgabenstellung begonnen werden. Diese zeigte die zu erwartenden Schwierigkeiten unabh\"angig von Unterricht und Aufgabenstellung, einige der Probleme (zyklische Vertauschung, Schleifenformen) sollten dann in der n\"achsten Unterrichtseinheit angesprochen werden. Ein interessanter Ansatz war der Versuch von G. und H., eine rekursive Variante (verschachtelte Funktionen) zu programmieren. Auf Grund von semantischen Verwicklungen funktionierte das zwar nicht, ich entwarf dann aber als Proof of Concept eine Variante f\"ur die n\"achste Unterrichtseinheit, diese ist in Anhang \ref{euclid-rec} oder online\footnote{ \href{http://tigerente.htu.tuwien.ac.at/~aoe/studium/la_aoe/fachpraktikum.dir/euclid_rec.html}{http://tigerente.htu.tuwien.ac.at/~aoe/studium/la\_aoe/fachpraktikum.dir/euclid\_rec.html}} zu finden, das ist allerdings mangels Tail Recursion\footnote{\cite{BH},\\ \cite{Schani},\\ \cite[23]{HRL} dabei wird jeweils der Stack der aufrufenden Funktion weiterverwendet, sodass bei beliebiger Rekursionstiefe keine zus\"atzlichen Ressourcen verbraucht werden} nicht die optimale L\"osung. % (Java kennt im Gegensatz zu %funktionalen Sprachen keine lazy evaluation\footnote{\cite[23]{HRL}}) \subsubsection{\label{n08}Nachbesprechung} Die Pr\"asentation wurde als qualifiziert wahrgenommen, ein Fehler in einem der Beispiele wurde angekreidet; als gro\ss{}es Problem wurde hier aber der rasante Vortrag (Pr\"asentation) mit wenigen Wiederholungen, Zwischenfragen und Beispielen angef\"uhrt. Abgesehen von Verst\"andnisproblemen durch den etwas abgehobenen Vortrag fielen einige Probleme in der syntaktischen Beherrschung der verwendeten Programmierprache (Javascript) auf: zyklische Vertauschung und Schleifenbildung bereiteten teilweise Schwierigkeiten, wobei letztere in der n\"achsten Stunde durch Introduktion eines neuen Schleifenkonstrukts behoben werden sollten. \clearpage \subsection{\label{s14}6a/c Sequenz Di 14. 11. 2006 16:20--18:00} \subsubsection{\label{v08}Allgemeines} Die Vorbesprechung erfolgte gemeinsam mit der Nachbesprechung der vorhergehenden Unterrichtssequenz am 8. 11. 2006, inhaltlich war neben der Fortsetzung des bisherigen Stoffes ein neues Sprachkonstrukt vorgesehen. \subsubsection{Programm} \begin{itemize} \item Pr\"asentation/Analyse einer Implementierung der Arbeitsaufgabe aus der letzten Stunde Pr\"asentation an der Projektionswand \item optimale L\"osung (Subtraktion, {\em for}-Schleife) \item Pr\"asentation der {\em while}-Schleife (bedingung: umbau init aussen, incr innen ...) \item Einzelarbeit: Umbau des Programm auf Verwendung der {\em while}-Schleife \item Pr\"asentation (mitgebrachteOptimall\"osung oder Demo eines Sch\"ulerInnenprogramms): Besprechung \item Optimierung: Umbau Subtraktion $\rightarrow$ Modulo (Divisionsrest), Pr\"asentation/tafel \item Gruppenarbeit: Programmieren der {\em modulo}-Version aus der optimalen L\"osung, \item Haus\"ubung: Fertigstellung, falls die Zeit in der Stunde nicht ausreicht \end{itemize} Die Pr\"asentation ist in Anhang \ref{Euklid2} (S. \pageref{Euklid2}) und online\footnote{ \href{http://tigerente.htu.tuwien.ac.at/~aoe/studium/la_aoe/fachpraktikum.dir/while_praes.pdf}{http://tigerente.htu.tuwien.ac.at/~aoe/studium/la\_aoe/fachpraktikum.dir/while\_praes.pdf}} zu finden. Die Beispielprogramme als Musterl\"osungen sind online (siehe Fussnoten) oder in den Anh\"angen \ref{euclid-sub} (Subtraktionsversion\footnote{\href{http://tigerente.htu.tuwien.ac.at/~aoe/studium/la_aoe/fachpraktikum.dir/euclid_sub.html}{http://tigerente.htu.tuwien.ac.at/~aoe/studium/la\_aoe/fachpraktikum.dir/euclid\_sub.html}}), \ref{euclid-while} (While-Variante\footnote{\href{http://tigerente.htu.tuwien.ac.at/~aoe/studium/la_aoe/fachpraktikum.dir/euclid_while.html}{http://tigerente.htu.tuwien.ac.at/~aoe/studium/la\_aoe/fachpraktikum.dir/euclid\_while.html}}) und \ref{euclid-mod} (Modulo-Umformung\footnote{\href{http://tigerente.htu.tuwien.ac.at/~aoe/studium/la_aoe/fachpraktikum.dir/euclid_mod.html}{http://tigerente.htu.tuwien.ac.at/~aoe/studium/la\_aoe/fachpraktikum.dir/euclid\_mod.html}}) zu finden, au\ss{}erdem ist in Anhang \ref{euclid-rec} noch die rekursive Version zu der \"Uberlegung in der vorherigen Stunde einzusehen\footnote{\href{http://tigerente.htu.tuwien.ac.at/~aoe/studium/la_aoe/fachpraktikum.dir/euclid_rec.html}{http://tigerente.htu.tuwien.ac.at/~aoe/studium/la\_aoe/fachpraktikum.dir/euclid\_rec.html}}. \subsubsection{Abhaltung} Auf Grund der Empfehlungen und Kritik auf Grund der vorhergehenden Stunde wurde der Vortrag in dieser Unterrichtseinheit langsamer, fl\"ussiger und mit mehr Beispielen versehen, es passierten keine gr\"osseren Pannen. Fragen ins Publikum wurden prompt beantwortet, Gegenfragen gestellt. Die sehr einfachen Arbeitsaufgaben (Umformungen von Programmcode) konnten gr\"osstenteils innerhalb der Stunde bew\"altigt werden und wurden pr\"asentiert, ebenso die Musterl\"osungen, dabei blieb noch Zeit f\"ur die pers\"onliche Besprechung der rekursiven Variante mit den Sch\"ulerInnen G. und H., die sich in der vorhergehen Stunde daran versucht hatten. \subsubsection{\label{n16}Nachbesprechung} Es war eine deutliche Verbesserung der Unterrichtssituation gegen\"uber dem 7. 11. zu sp\"uren, was auch in der Nachbesprechung so dargestellt wurde, immer noch g\"ultig ist die Empfehlung, auf Aufmerksamkeit zu achten, (noch mehr) Zwischenfragen zu stellen, die Klasse anzuschauen und sich einer klaren, deutlichen, langsamen Sprechweise zu befleissigen. Am Schluss der Unterrichtseinheit blieben noch \"uber 20 Minuten nicht verplanter Zeit, die aber durch die Programmieraufgabe problemlos \"uberbr\"uckt werden konnten. \clearpage \subsection{\label{s12}6a/c Sequenz Di 12. 12. 2006 16:20--18:00} \subsubsection{Allgemeines} Auch hier gab es keinen separaten Vorbesprechungstermin, die Sequenz wurde bei der Nachbesprechung am 16. 11. vereinbart. Da nur noch eine Schulstunde zu halten war, stellte es kein Problem dar, dass die erste von Mag J\"agersberger auf die Nachbesprechung des Testergebnisses aus der vorhergehenden (nicht hospitierten) Einheit verwandt wurde. \subsubsection{\label{v16}Vorbesprechung} Den Hauptteil sollte die Einf\"uhrung in die Objektorientierung an Hand von Javascript einnehmen, dabei waren die Unterschiede zwischen Eigenschaft und Methode herauszuarbeiten und kursorisch die einzelnen Objektklassen der Sprache zu erl\"autern, von denen es ja nur abz\"ahlbar viele (bzw wenige) gibt. Als Zukunftsaussicht werden Vererbung, statische/nichtstatische Methoden und Instanzierung angef\"uhrt. \subsubsection{Programm} \begin{itemize} \item Vortrag: Objektorientierung, Javascript \item Objektreferenz \item Objekthierarchien \item Ansprechen von Objekten durch dir Hierarchie, DOM (Document Object Model), CSS, HTML \item Programmierbeispiel: Nachschlagen, Ausgabe und Ver\"anderung einiger Eigenschaften an Hand von \href{http://selfhtml.org/}{http://selfhtml.org/} \end{itemize} Die Pr\"asentation ist in Anhang \ref{OO} (S. \pageref{OO}) und online\footnote{ \href{http://tigerente.htu.tuwien.ac.at/~aoe/studium/la_aoe/fachpraktikum.dir/oo_praes.pdf}{http://tigerente.htu.tuwien.ac.at/~aoe/studium/la\_aoe/fachpraktikum.dir/oo\_praes.pdf}} zu finden. \subsubsection{Abhaltung/Nachbesprechung} Der durchkomponierte Vortrag (Pr\"asentation) wurde als verst\"andlich empfunden. Durch gezielte Fragen konnte der Unterschied zwischen Methoden und Eigenschaften herausgearbeitet werden. Die Bearbeitung der Arbeitsaufgabe nahm relativ viel Zeit in Anspruch, weil Inkompatibilit\"aten zwischen den verwendeten Browsern teilweise den Erfolg verhinderten; ein Hinweis auf die (in der Online-HTML-Referenz auch angef\"uhrten) Unterschiede konnte diesem Problem abhelfen. In der Nachbesprechung wurde noch darauf hingewiesen, dass zus\"atzliche Aufgaben oder \"Ubungen die Zeit bis zum Stundenende sinnvoll \"uberbr\"ucken k\"onnten. \clearpage \section{Schlusswort} Als erste Lehrveranstaltung, in der mehrere Stunden im Kontext der Schule gehalten werden konnten, setzte ich grosse Erwartungen in das Fachpraktikum. Nat\"urlich ist die tats\"achliche Abhaltung einer Schulstunde nie ganz vorhersehbar, aber mit dem Lauf der Unterrichtseinheiten kam durchaus auch mehr Selbstbewusstsein hinzu: der Lehrberuf ist nun einmal ein Profession und kein Handwerk, nichts ist g\"anzlich vorhersehbar und spontane Entscheidungen sind das Um und Auf des Lehrberufs. Teilweise wurden mir alte Schw\"achen wieder gewahr, so etwas die etwas leise, schnelle Sprechweise, welche den aufw\"andigen Sprachstil nicht leichter verst\"andlich machte; durch die Gelegenheit der \"Ubung konnten hier beim Vortrag deutliche Verbesserungen erzielt werden, und die rhetorische Praxis wird diesbez\"uglich sicher weitere Verbesserungen bringen. Ebenso n\"otigt das Praktikum dem/der KandidatIn eine klare Darstellung der Unterrichtsinhalte ab, allf\"allige Unsauberkeiten und verk\"urzte Darstellungen r\"achten sich alsbald, nur eine konsistente Pr\"asentation mit R\"uckfragen, kleinen Denksportaufgaben und anschaulichen Diagrammen und Zeichnungen ist wie zu erwarten rezipierbar. Wie in den Nachbesprechungen wiederholt angef\"uhrt wurde sp\"ater versucht, auch bei den Vortr\"agen die Aufmerksamkeit und das Verst\"andnis zu \"uberpr\"ufen, indem die Sch\"ulerInnen beobachtet wurden --- das funktionierte aber nur teilweise, muss also ebenfalls f\"ur den weiteren Berufsweg im Ged\"achtnis behalten werden. Als interessant stellte sich auch die Unterhaltung mit Sch\"ulerInnen und KollegInnen heraus, welche jeweils eine andere Sicht auf Schule und Unterricht offenbarten: der Unterricht wurde hier als durchaus interessant, aber teilweise redundant empfunden (wer hatte dieses Gef\"uhl als Sch\"ulerIn nicht bisweilen, und Wiederholungen in Folgejahren sind nun einmal unumg\"anglich). Eine Kollegin sah die Schule als besonders repressiv und \"uberwacht, auch der Umgangston sei teilweise etwas autorit\"ar und nicht immer gendergerecht. Insgesamt kann ich das Praktikum also als sehr interessant und wertvoll ansehen, ein Wermuthstropfen ist die immer noch vergleichsweise geringe Zahl von Unterrichtseinheiten und der geringe Spielraum f\"ur die eigenst\"andige Gestaltung, was andererseits Intensit\"at und Qualit\"at des Materials positiv beeinflussen k\"onnte. \clearpage \appendix \section{\label{Euklid1}Unterrichtsmaterialien 7. 11.} \subsection{Euklidischer Teileralgorithmus} Ziel ist es, den gr\"ossten gemeinsamen Teiler (ggt, gcd (greatest common divisor)) zweier Zahlen zu finden, die nicht relativ prim sind. Dazu zieht Euklid (\~{} 300 vC) folgende beiden Beobachtungen heran: \begin{enumerate} \item {f\"ur zwei ganze Zahlen gilt:} $$ b | a \Rightarrow ggt(a,b) = b $$ Begr\"undung: keine Zahl kann durch eine Zahl geteilt werden, die gr\"osser ist als die Zahl selbst. \item {Rekursionsschritt:} $$ a = b t + r \Rightarrow ggt(a,b) = ggt(b,r) $$ (f\"ur $ t, r \in \!N $ ) \\ Jede Zahl, die a und b teilt, ist auch ein Divisor von r. Daher teilt ggt(a,b) auch r ($ggt(a,b) | r$), nicht nur b, sodass $ggt(a,b) \le ggt(b,r)$, ebenso $ggt(a,b) \le ggt(a,r)$. Wenn nun f\"ur den n\"achsten Schritt $a = b$ und $b = r$ gesetzt wird, kann das Verfahren so lange fortgesetzt werden, bis gilt $b|a$, also der Divisionsrest {\tt a \% b == 0}. \end{enumerate} In der urpsr\"unglichen Version subtrahierte Euklid jeweils a von b, der Algorithmus w\"are also dann: \begin{enumerate} \item wenn {\tt b > a}, dann vertausche {\tt a} und {\tt b} \item wenn {\tt a} durch {\tt b} dividierbar ist, dann Ergebnis {\tt ggt(a,b) == b} {\bf ENDE} \item subtrahiere {\tt b} von {\tt a} \item gehe zu {\bf 1.} \end{enumerate} \subsubsection{Beispiel} \begin{enumerate} \item $a = 9690, b = 3825 \Rightarrow r = 2040$ \item $a = 3825, b = 2040 \Rightarrow r = 1785$ \item $a = 2040, b = 1785 \Rightarrow r = 255$ \item $a = 1785, {\bf b = 255} \Rightarrow r = 0$ \end{enumerate} {\tt ggt(9690,2040) == 255} \subsection{graphische \"Uberlegung} %\includegraphics[width=\textwidth]{fachpraktikum.dir/ggts.eps} \includegraphics[width=\textwidth]{fachpraktikum.dir/ggts1.jpg} \subsubsection{Schreibweise} \begin{tabular}[l]{l@{\hspace{1cm}}l} $b|a$ & b teilt a ({\tt a \% b == 0}) \\ $ggt(a,b)$ & gr\"osster gemeinsamer Teiler \end{tabular} \begin{flushright} {\small copyleft 2006 Alexander Oelzant} \end{flushright} \clearpage \section{\label{Euklid2}Pr\"asentation 14. 11.} Vom {\tt for} zum {\tt while} - \href{http://30hd.org/euclid/}{http://30hd.org/euclid/} \subsubsection{Schleifen in Javascript: Vorsicht vor Bedingungen} \subsubsection{Anatomie einer {\tt for}-Schleife} {\tt for ({\bf $<$Initialisation$>$}; {\bf $<$Bedingung$>$}; {\bf $<$Iterationsschritt$>$})\\ \{ \hspace{1cm}{\bf $<$Schleifenk\"orper (Body)$>$} \} } %%%%%%%%%%%% %%%%%%%%%%%%%%% \vspace*{.5in} % adjust this to makes things fit nicely %\includegraphics[height=1.5in]{dia0231_med.jpg} %\hfill %\includegraphics[height=1in]{dia0231_med.jpg} %\\{\it \normalsize %Supported by the National Science Foundation DMS %} \subsubsection{Vereinfachungen: Initialisierung vor der Schleife} {\tt for ({\bf $<$Initialisation$>$}; {\bf $<$Bedingung$>$}; {\bf $<$Iteration$>$}) \{ \}} Initialisation vorziehen {\bf $<$Initialisation$>$} {\tt for (; {\bf $<$Bedingung$>$}; {\bf $<$Iteration$>$}) \{ \}} \subsubsection{Vereinfachungen: Inkrement in der Schleife} {\tt for ({\bf $<$Initialisation$>$}; {\bf $<$Bedingung$>$}; {\bf $<$Iterationsschritt$>$}) \{ \}} Initialisation und Iterationsschritt (Inkrement/Variablenupdate) verschieben {\bf $<$Initialisation$>$} {\tt for (; {\bf $<$Bedingung$>$}; )} \{ \hspace{1cm}{\bf $<$Iterationsschritt$>$} \} \subsubsection{Statt dessen: while} {\tt for ({\bf $<$Initialisation$>$}; {\bf $<$Bedingung$>$}; {\bf $<$Iterationsschritt$>$})} Initialisation und Iterationsschritt (Inkrement/Variablenupdate) verschieben: {\bf $<$Initialisation$>$} {\tt while ({\bf $<$Bedingung$>$})} \{ \hspace{1cm}{\bf $<$Iterationsschritt$>$} \} \subsubsection{Statt dessen: while} {\tt for ({\bf $<$Initialisation$>$}; {\bf $<$Bedingung$>$}; {\bf $<$Iterationsschritt$>$})} Initialisation und Iterationsschritt (Inkrement/Variablenupdate) verschieben Initialisation und Inkrement sind optional \dots {\tt while ({\bf $<$Bedingung$>$})} \{ \dots \} \subsubsection{Beispiel} \begin{verbatim} for (i = 0; i < 10; i ++) { quadrat = i * i; } \end{verbatim} \subsubsection{Beispiel} \begin{verbatim} var i = 0; for (; i < 10; i++) { quadrat = i * i; } \end{verbatim} \subsubsection{Beispiel} \begin{verbatim} var i = 0; for (; i < 10;) { quadrat = i * i; i += 1; } \end{verbatim} \subsubsection{Beispiel} \begin{verbatim} var i = 0; while (i < 10) { quadrat = i * i; i += 1; } \end{verbatim} %\subsubsection{Beispiel 2: Quadratwurzel} {\large - Beispiel 2: Quadratwurzel} \begin{verbatim} var i = 0; var zahl = 10; var quadratwurzel = i/2; var differenz; differenz = (quadratwurzel * quadratwurzel) - zahl; \end{verbatim} {\bf while (Math.abs(differenz) $>$ 1) \{} \begin{verbatim} if (differenz != 0) { quadratwurzel -= (quadratwurzel - zahl/quadratwurzel)/2; } quadratwurzel = zahl/quadratwurzel; differenz = ((quadratwurzel * quadratwurzel) - zahl); } \end{verbatim} \href{http://30hd.org/euclid/quadratwurzel.html}{http://30hd.org/euclid/quadratwurzel.html} \subsubsection{Beispiel: ggt/Subtraktion} \begin{enumerate} \item $a = 9690, b = 3825 \Rightarrow a - b = 5865$ \item $a = 5865, b = 3825 \Rightarrow a - b = 2040$ \item $a = 2040, b = 3825$ ... tauschen \item $a = 3825, b = 2040 \Rightarrow a - b = 1785$ \item $a = 1785, b = 2048$ ... tauschen \item $a = 2040, b = 1785 \Rightarrow a - b = 255$ \item $a = 255, b = 1785$ ... tauschen \item $a = 1785, {\bf b = 255}$ teilbar, $r = 0$ \end{enumerate} {\tt ggt(9690,3825) == 255} \subsubsection{\"Uberlegung zur mehrmaligen Subtraktion} %\includegraphics[width=\textwidth]{ggts.eps} \includegraphics[width=\textwidth]{fachpraktikum.dir/ggts.jpg} \% (Modulo): Divisions{\bf rest} \subsubsection{Beispiel: ggt/Modulo} \begin{enumerate} \item $a = 9690, b = 3825 \Rightarrow a \% b = r = 2040$ \item $a = 2040, b = 3825$ ... tauschen \item $a = 3825, b = 2040 \Rightarrow = r = 1785$ \item $a = 1785, b = 2048$ ... tauschen \item $a = 2040, b = 1785 \Rightarrow r = 255$ \item $a = 255, b = 1785$ ... tauschen \item $a = 1785, {\bf b = 255}$ teilbar, $r = 0$ \end{enumerate} {\tt ggt(9690,3825) == 255} \subsubsection{graphische \"Uberlegung} %\includegraphics[width=\textwidth]{ggts.eps} \includegraphics[width=\textwidth]{fachpraktikum.dir/ggts1.jpg} \subsubsection{graphische \"Uberlegung} %\includegraphics[width=\textwidth]{ggts.eps} \includegraphics[width=\textwidth]{fachpraktikum.dir/ggts2.jpg} %\subsubsection{graphische \"Uberlegung} %\includegraphics[width=\textwidth]{ggts.eps} \includegraphics[width=\textwidth]{fachpraktikum.dir/ggts3.jpg} \subsubsection{Schreibweise} \begin{tabular}[l]{l@{\hspace{1cm}}l} $b|a$ & b teilt a ({\tt a \% b == 0}) \\ $ggt(a,b)$ & gr\"osster gemeinsamer Teiler \end{tabular} \clearpage \section{\label{euclid-sub}Beispielprogramm 14. 11. 2006: Euklidischer Algorithmus, Subtraktionsversion} Listing: \href{http://tigerente.htu.tuwien.ac.at/~aoe/studium/la_aoe/fachpraktikum.dir/euclid_sub.html}{\tt euclid\_sub.html} \verbatiminput{fachpraktikum.dir/euclid_sub.html} \clearpage \section{\label{euclid-rec}Beispielprogramm 14. 11. 2006: Euklidischer Algorithmus, rekursive Variante} Listing: \href{http://tigerente.htu.tuwien.ac.at/~aoe/studium/la_aoe/fachpraktikum.dir/euclid_rec.html} {\tt euclid\_rec.html} \verbatiminput{fachpraktikum.dir/euclid_rec.html} \clearpage \section{\label{euclid-while}Beispielprogramm 14. 11. 2006: Euklidischer Algorithmus, While-Variante} Listing: \href{http://tigerente.htu.tuwien.ac.at/~aoe/studium/la_aoe/fachpraktikum.dir/euclid_while.html}{\tt euclid\_while.html} \verbatiminput{fachpraktikum.dir/euclid_while.html} \clearpage \section{\label{euclid-mod}Beispielprogramm 14. 11. 2006: Euklidischer Algorithmus, Modulo-Variante} Listing: \href{http://tigerente.htu.tuwien.ac.at/~aoe/studium/la_aoe/fachpraktikum.dir/euclid_mod.html}{\tt euclid\_mod.html} \verbatiminput{fachpraktikum.dir/euclid_mod.html} \clearpage \section{\label{OO}Pr\"asentation 12. 12. 2006: Objektorientierung in Javascript} Objektorientierung in Javascript \subsubsection{1. Objektorientierung} Objekt: Methoden, Eigenschaften, {%\color{Gray} Vererbung} Kapselung (black box) Objektklassen $\rightarrow$ Objekte \fbox{Buch} \subsubsection{Objektorientierung: Beispiel} Objektklasse \fbox{Buch} Eigenschaften: Variablen/Konstanten \begin{itemize} \item Titel (nur lesbar) \item Seitenzahl (nur lesbar) \item AutorIn (nur lesbar) \item Verlag (nur lesbar) \item Inhalt (nur lesbar) \item Einbandfarbe (nur lesbar) \end{itemize} \subsubsection{Objektorientierung: Objektklasse Buch} Objektklasse \fbox{Buch} Eigenschaften: Variablen/Konstanten \begin{itemize} \item BesitzerIn (lesbar/schreibbar) \item entlehnbar (lesbar/schreibbar) \end{itemize} \subsubsection{Objektorientierung: Buch} Objektklasse \fbox{Buch} Methoden: objektspezifische Funktionen \begin{itemize} \item Seite herausreissen (Gibt Seite zur\"uck; Einfluss auf Seitenzahl ...) \item {\bf neue Seite einkleben (Einfluss auf Seitenzahl ...)} \item ausleihen \item neu binden (Einfluss auf Einband ...) \item kopieren \end{itemize} \subsubsection{Objektorientierung: Buch} Objektinstanz \fbox{\em Notizbuch} von Klasse \fbox{Buch} \begin{itemize} \item 30 Seiten \item Titel ist leer \end{itemize} Zus\"atzliche Funktionen \begin{itemize} \item Notiz eintragen \item Notiz lesen \end{itemize} \subsubsection{Objektorientierung: Buch} Objektinstanz \fbox{\em W\"orterbuch} von Klasse \fbox{Buch} zus\"atzliche Eigenschaften \begin{itemize} \item Sprache 1 (Suchsprache) \item Sprache 2 (Ergebnissprache) \end{itemize} zus\"atzliche Methoden \begin{itemize} \item Wort nachsehen \end{itemize} \subsubsection{2. Javascript} JavaScript (Netscape 2.0) vs JScript (MS IE 3.0) ECMAscript (ECMA-262) 1999, ISO/IEC 16262, in April 1998. \href{http://www.ecma-international.org/}{http://www.ecma-international.org/ \\ European Computer Manufacturers Association} \href{http://de.selfhtml.org/javascript/}{http://de.selfhtml.org/javascript/} \subsubsection{2. Javascript} Javascript Objekthierarchie: Zugriff auf HTML-Objekte Document Object Model (DOM) \href{http://www.w3.org/DOM/}{http://www.w3.org/DOM/} $\rightarrow$ Javascript + DOM + CSS = DHTML (dynamic HTML) \subsubsection{Javascript Objekte} Eigenschaften: Einfaches Objektmodell window frames document node all style anchors applets forms elements options images embeds layers links event history location Array Boolean Date Function Math navigator mimeTypes plugins Number RegExp screen String HTML-Elementobjekte (a, p, img, ...) Objektunabhängige Funktionen (parseInt(), decodeURI(), ...) \subsubsection{Javascript Objekte} Objekthierarchien: window window.document window.document.images window.document.images.length \subsubsection{Javascript Objekte} \begin{enumerate} \setlength\itemindent{0.5in} \item[1 ] window (Anzeigefenster) innerHeight, innerWidth, outerHeight, ... \item[1.1 ] frames (Frame-Fenster) \item[1.2 ] document (Dokument im Anzeigefenster) \item[1.2.1 ] HTML-Elementobjekte (Alle HTML-Elemente des Dokuments) \item[1.2.2 ] node (Alle Knoten des Elementenbaums) \item[1.2.3 ] all (Alle HTML-Elemente des Dokuments - Microsoft) \item[1.2.3.1 ] style (CSS-Attribute von HTML-Elementen) \\ \item[1.2.4 ] anchors (Verweisanker im Dokument) \item[1.2.5 ] applets (Java-Applets im Dokument) \item[1.2.6 ] forms (Formulare im Dokument) \item[1.2.6.1 ] elements (Formularelemente eines Formulars) \item[1.2.6.1.1 ] options (Optionen einer Auswahlliste eines Formulars) \item[1.2.7 ] images (Grafikreferenzen im Dokument) \item[1.2.8 ] embeds (Multimedia-Referenzen im Dokument) \item[1.2.9 ] layers (Layer im Dokument - Netscape) \item[1.2.10 ] links (Verweise im Dokument) \item[1.3 ] event (Anwenderereignisse) \item[1.4] history (besuchte Seiten) \item[1.5 ] location (URIs) \item[2 ] Array (Ketten von Variablen) \item[3 ] Boolean (Ja/Nein-Variablen) \item[4 ] Date (Datum und Uhrzeit) \item[5 ] Function (JavaScript-Funktionen) \item[6 ] Math (Berechnungen) \item[7 ] navigator (Browser-Informationen) \item[7.1 ] mimeTypes (MIME-Typ-Informationen) \item[7.2 ] plugins (installierte Plugins) \item[8 ] Number (numerische Werte) \item[9 ] RegExp (reguläre Ausdrücke) \item[10 ] screen (Bildschirm-Informationen) \item[11 ] String (Zeichenketten) \end{enumerate} \subsubsection{Javascript Objekte} Arbeitsaufgabe: schreibe ein Script, das den Browsernamen und die Gr\"osse des Browserfensters ausgibt. Verwende dazu bei Bedarf die SELFHTML-Objektreferenz unter \href{http://de.selfhtml.org/javascript/objekte/}{http://de.selfhtml.org/javascript/objekte/}. \"Andere \"uber das {\em document}-Objekt die Hintergrundfarbe und rufe anschliessend die {\em alert}-Methode des {\em window}-Objekts auf, um die Fertigstellung mitzuteilen. Stelle (z. B. durch Ausprobieren, \"uber die Objektreferenz ) fest, ob die benutzten Eigenschaften auch schreibbar sind \begin{itemize} \item {\em navigator}-Eigenschaften \item {\em window}-Methoden \item {\em document}-Eigenschaften \end{itemize} \clearpage \section{\label{Liste}Liste der Sch\"ulerInnen} Es handelte sich um eine gemischte Gruppe aus Sch\"ulerInnen der Klassen 6b und 6c. \begin{itemize} \input{fachpraktikum_jaegersberger_schuelerInnen} \end{itemize} \clearpage \section{Zeittafel} Das Praktikum fand im Wintersemester 2006/2007 statt, alle Termine sind also aus 2006. \begin{enumerate} \item Fr, 13. 10. 11:10--12:00 Vorbesprechung \item Di, 17. 10. 14:40--18:00 2 Doppelstunden Hospitation (Kapitel \ref{h17}, S. \pageref{h17}) \item Di, 24. 10. 14:40--18:00 2 Doppelstunden Hospitation mit Beobachtungsaufgaben (Kapitel \ref{h24}, S. \pageref{h24}) \item Fr, 27. 11. Nachbesprechung 24. 10. (Kapitel \ref{n27}, S. \pageref{n27}), Vorbesprechung 7. 11. (Kapitel \ref{v27}, S. \pageref{v27}) \item Di, 7. 11. 14:40--16:20 1 Doppelstunde Sequenzunterricht (Kapitel \ref{s07}, S. \pageref{s07}) \item Mi, 8. 11. Nachbesprechung 7. 11. (Kapitel \ref{n08}, \pageref{n08}), Vorbesprechung 14. 11. (Kapitel \ref{v08}, S. \pageref{v08}) \item Di, 14. 11. 14:40--16:20 1 Doppelstunde Sequenzunterricht (Kapitel \ref{s14}, S. \pageref{s14}) \item Di, 14. 11. 16:20--18:00 1 Doppelstunde Hospitation \item Do, 16. 11. Nachbesprechung 14. 11. (Kapitel \ref{n16}, S. \pageref{n16}), Vorbesprechung 12. 12. (Kapitel \ref{v16}, S. \pageref{v16}) \item Di, 12. 12. 14:40--16:20 1 Doppelstunde Sequenzunterricht, (Kapitel \ref{s12}, S. \pageref{s12})\\ Nachbesprechung im Anschluss \end{enumerate} \clearpage \section{Bibliographie} \nocite{*} \def\btxeditionlong{} \def\btxeditionshort{Aufl.} \def\Btxinlong{in} \def\Btxinshort{i.} \def\btxandlong{und} \def\btxandshort{u.} \def\btxeditorshort{Hrsg.} \def\btxeditorlong{Hrsg.} \def\btxeditorslong{Hrsg.} \def\btxeditorsshort{Hrsg.} \bibliographystyle{jurabib} % (uses file "plain.bst") % \bibliographystyle{plainnat} % (uses file "plain.bst") \bibliography{fap} % expects file "fap.bib" \end{document} % vim: textwidth=75