- Beispiel
- Vorbemerkung
- Idee hinter dem Projekt
- Voraussetzungen und Installation
- [Mandalas] (#mandalas))
- Website
- Impressum
- Programmaufbau und Ablauf
- Aufruf ohne Homepage
- Probleme
- Kaffee
- Danksagung
Wer diese Seite ohne vorherige Installation testen möchte, findet hier den Arbeitsblattgenerator Online.
Ich habe mit diesem Projekt Python gelernt. Dadurch sind viele Funktionen in diesem Projekt je nach Kenntnisstand unterschiedlich aufgebaut. Außerdem hatte ich anfangs ich noch keine Ahnung, wie Module in Python funktionieren und wie man diese erstellt. Dadurch wird dies Skript unter Verwendung von exec(open("").read()) ausgeführt und nicht mit import. Ich hatte mal versucht, dieses Skript auf Module umzustellen, hatte es aus Zeitgründen nicht geschafft. Gleiche Probleme stellen sich an verschiedenen Stellen des Projektes. Z. B. gilt für die Webseite, dass ich vor diesem Projekt noch keine Webseite erstellt hatte, weshalb auch hier verschiedene Kenntnisstände aufeinander treffen.
Als ich als Lehrer anfing, wurde mir sehr schnell klar, dass meine Schülerinnen und Schüler Probleme haben, Inhalte zu bearbeiten, wenn zwischen der Einführung und erneuten Behandlung ein halbes Jahr oder mehr vergangen ist. Es fehlt die regelmäßige Übung, um die Lerninhalte zu festigen. Weiter fehlte es mir aber auch an Material, um den Schülerinnen regelmäßige Übungsaufgaben zur Verfügung zu stellen. Und bei den Aufgaben, die ich hatte, fehlten entweder die Lösungen oder diese waren nur sehr kurz und knapp gehalten. Ich wollte aber meinen Schülerinnen regelmäßige Übungsaufgaben zur Verfügung stellen, welche sehr ausführlichen Lösungen haben, damit sie sich selber Schritt für Schritt kontrollieren können. Als das Projekt entsprechend gewachsen war, wollte ich es meinen Kollegen zur Verfügung stellen. Es ist daher nun so ausgelegt, dass eine Webseite erstellt wird, mit der man verschiedene Aufgaben auswählen kann. Python erzeugt entsprechend dieser Auswahl eine PDF Datei mit Aufgaben und ausführlichen Lösungen. Das Skript soll auf einem Raspberry Pi oder anderem Linux-Webserver laufen, damit ein im Umgang mit Computer erfahrener Kollege seinem Kollegium den Generator zur Verfügung stellen kann.
- Raspberry Pi
- Python 3.8 oder höher
- xelatex
- Python Module: numpy matplotlib datetime sympy flask flask_wtf wtforms
sudo apt install texlive texlive-lang-german texlive-latex-extra texlive-xetex texlive-pstricks python3-pip libatlas-base-dev
pip3 install -r requirements.txt
bzw.
pip3 install numpy matplotlib datetime sympy flask flask_wtf wtforms psutil openai
Bei mir hat die Installation unter Ubuntu und python3.10 fehlgeschlagen. Ich musst noch zwei zusätzliche Befehle ausführen:
sudo apt-get install python3.10-distutils
Und eine angepasste pip3 Version:
curl https://bootstrap.pypa.io/get-pip.py | sudo python3
Danach musste ich noch die "apt_pkg.so" wiederherstellen.
cd /usr/lib/python3/dist-packages
sudo cp apt_pkg.cpython-38-x86_64-linux-gnu.so apt_pkg.so
Und 2 fehlende oder fehlerhafte Module nachinstallieren:
pip3 install -U --ignore-installed psutil
pip3 install -U Pillow
Kopiere die gesamte Ordnerstruktur unter /home/pi/abgen.
Damit Mandalas genutzt werden können muss man RandomMandala und tikzplotlib installieren. Das Problem ist, dass tikzplotlib eine Version von webcolors nutzt, die wohl nicht mehr akutell ist. tikzplotlib ruft eine Funktion auf, die es nicht mehr gibt. Da wir eh nur Schwarz-Weiße Mandalas nutze, muss folgendes angepasst werden:
vi .local/lib/python3.10/site-packages/tikzplotlib/_color.py
Und füge folgendes ein:
def _get_closest_colour_name(rgb):
match = None
mindiff = 1.0e15
return 'black',0
Starte das Skript mit dem Befehl
python3 starteSkriptDurchWebseite.py
In einem Webbrowser findet sich dann der Generator bei:
Im Ordner serverDateien befinden sich das Skript abgen.service mit dem man den Generator als Service starten kann, welcher im Hintergrund läuft. Kopiere die Datei nach /lib/systemd/system und aktivere den Service mit
sudo systemctl enable abgen
sudo systemctl daemon-reload
sudo systemctl start abgen
Die Datei abgenerator.ddns.net.conf enthält eine Beispielkonfiguration, wie man mit einem als Reverse Proxy konfigurierten Apache-Server den Generator über eine Adresse aufrufen kann.
##Impressum Um ein Impressum einzubinden, erzeuge die Datei "impressum.html" im Homeverzeichnis. Ist diese Datei vorhanden, bindet erzeugt der Arbeitsblattgenerator ein Link auf der Webseite zum Impressum.
Das Programm besteht aus folgenden Ordner: Aufrufe, Ausgabe, Erklaerungen, Funktionen. In Aufrufe befinden sich die Skripte, mit denen man unter Verwendung der Skripte im Ordner Funktionen Arbeitsblätter erstellen kann. Dies wird aber nur noch benötigt, wenn man die Webseite nicht nutzen möchte. In der Ausgabe wird das fertige Arbeitsblatt gespeichert. Im Ordner Erklaerungen sollen besondere Schwierigkeiten näher beleuchtet werden. Im Ordner Funktionen befinden sich die Skripte zum Erzeugen der verschiedenen Aufgaben.
Jeder ausgewählten Aufgabe wird ein Bezeichner zugewiesen. Dieser Bezeichner und andere gewählte Optionen von der Webseite werden dem Skript erzeugeTaeglicheRechnungenArgs als Parameter übergeben. Dies Skript findet sich unter "Aufrufe/taeglicheUebungen".
Das Skript erzeugeTaeglicheRechnungenArgs ruft die Funktion erzeugeArbeitsblattTaeglicheUebungen() auf. Diese Funktion ruft die einzelnen Funktionen auf, die zusammen ein LaTeX Dokument erzeugen. Dabei ruft es auch die Funktion erzeuge10minRechnung() aus der Datei "funktionenRechenBezeichnungen.py" auf. Diese Funktion besteht im Grunde nur aus einem Dictionary, welchem jedem Bezeichner von der Webseite einen Funktionsaufruf zuordnet. Je nach ausgewählten Bezeichner wird dann eine andere Funktion aufgerufen, welche die gewählte Aufgabe im LaTeX-Format erzeugt.
- Erzeuge eine neue Funktion in einer vorhandenen oder in einer neuen Skriptdatei mit dem Namensformat funktionenNeuerName.py.
- Wichtig: Die Funktion muss eine Rückgabe der Form [aufgabe,loesung,[werte]] haben.
- Gib der Funktionen einen eindeutigen Bezeichner und füge diesem dem Dictionary in der Funktion erzeuge10minRechnung() hinzu.
- Füge in der Funktion MoeglicheRechnungen() einem neuen Eintrag in dem Dictionary listeRechnungen hinzu, indem ein neues Tuple im Format ('Bezeichner','Beschreibung der Funktion') in einer vorhanden Liste eingetragen wird.
- Oder erzeuge einen neuen Listeneintrag im Format 'NameErstesDropdownMenueAufWebseite':[('Bezeichner','Beschreibung der Funktion')]
Das Beispiel "einfachesArbeitsblatt.py" gibt einen einfachen Einstieg wie die Skripte funktionieren. In einer Main-Funktion werden allgemeine Informationen wie Datum, Titel, Anzahl an Rechnungen und sonstiges gesetzt. Diese Main-Funktion ruft eine Funktion auf, die zuerst die Aufgaben erzeugt und dann mit diesen Aufgaben und den in Main gesetzten Parametern ein LaTeX Dokument generiert. Mit den Befehlen os.system(), os.rename() wird dann mit XeLaTeX ein Dokument newFile.pdf erzeugt, welches in den gewünschten Dokumentenname umbenannt wird. os.remove() entfernt zum Schluss die LaTeX Dateien.
Aufgaben werden in Funktionen erzeugt, die folgende Rückgabe enthalten müssen: [afg,lsg,zahlen]. afg enthält die gesamte Aufgabe, mit Beschreibung, Anweisungen und Bildern. Diese kann in Form einer Liste oder einem String vorliegen. lsg enthält passend zu afg eine ausführliche Lösung der Aufgabe. Möchte man von dem vorgegebenen Format der Aufgabe abweichen, kann man mit den Zahlen in zahlen einen eigenen Aufgabetext erzeugen.
Das Skript "erzeugeTaeglicheRechnungenKlasse8.py" benutzt die Klasse rechnungsFunktionen die in der Funktion "erzeuge10minRechnung(art)" gespeichert ist. Diese Klasse enthält Beispielaufrufe von den verschiedenen Funktionen um kurze Aufgaben zu erzeugen.
Ich würde gerne das Paket in Form eines Python Moduls aufbauen, aber ich habe die Dateien und Funktionen so ineinander verschachtelt, dass ich einen Großteil umschreiben muss. Ich hoffe, irgendwann dafür Zeit zu finden.
Ich habe viele Stunden an dem Generator gesessen. Sollte er dir gefallen und du ihn gerne Nutzen würde ich mich über einen kleinen Kaffee freuen, damit ich mehr Energie zum Erweitern habe.
Ich danke meiner Schule der Haupt- und Realschule Loxstedt, dass sie mir die Möglichkeit geschaffen hat, die Webseite zu erstellen und somit anderen Lehrern den Zugriff auf den Generator ermöglichte.