FAQ: Khan-Aufgaben
Weitergehende Erläuterungen befinden sich im Vademecum und im Manual.
Was ist eine Khan-Aufgabe?
Eine Khan-Aufgabe ermöglicht, sich interaktiv, individuell und wiederholt mit einem mathematischen Thema auseinander zu setzen. Dies erfolgt numerisch, graphisch oder semantisch.
Wie zeichnet sich eine solche aus?
- Bei jedem Aufruf wird die Aufgabe mit neuen Parametern (z.B. Zahlen oder Abbildungen) gestellt und muss erneut gelöst werden.
- Die Lösung kann durch Eingabe von Zahlen oder anderen mathematischen Ausdrücken erfolgen, daneben kann diese durch Lokalisieren im Browser durch Multiple-Choice oder graphische Elemente erfolgen.
- Es gibt eine direkte Rückmeldung auf die Eingabe.
- Zuvor oder danach können schrittweise Hilfestellungen aufgerufen werden. Die Erläuterungen arbeiten mit den individuellen Parametern. Diese können auch graphisch sein.
- Die Darstellung der mathematischen Ausdrücke basiert auf KaTeX.
- Der Einsatz erfordert keine Einbindung. Eine Aufgabe läuft im Browser, auch mobil.
- Für die Erstellung arbeite ich in einer
html-Datei
. Basis bildet das Khan-Exercise Framework, weiterentwickelt zukekse
, unserer Version von Khan.
Wer nutzt Khan-Aufgaben?
In den Lernpfaden des Brückenkurs spielen mehr als 250 Aufgaben eine zentrale Rolle. Im Zyklus* Mathematik I/II und III sind sie integraler Bestandteil der Übungsserien. *metaphor-Seiten: Mathematik I/II und Mathematik III.
Wie und wo fange ich an?
Wenn ich eine Aufgabe 1:1 für oder in Übungsserien einsetzen möchte, kann ich auf eien veröffentliche Aufgabe verlinken, z.B. mit
href
oder verwandten Befehlen. Elementare Anpassungen (z.B. Notationen) erfolgen in einer html-Datei. Sammlungen an solchen Ressourcen sind- Khan+: Aufgaben für das Basisjahr
- Khan+ (Lineare Algebra)
- Khan+ (Analysis)
- Brückenkurs
- Matrize (sic!) Khan I und Khan II (aktuelle Versionen: mehr Aufgaben, weniger Typos)
Für eigene Versionen arbeite ich lokal in einem git-Repositorium. Dabei konzentriere ich mich auf eine
html-Datei
, in der alle Elemente (Aufgbabe, Lösung und Hinweise) stecken. Sodann kann ich wieder darauf verweisen.- Mit GenAI lassen sich neue Aufgaben erstellen.
Um zum Beispiel eine zufällige Aufgabe aus einem Pool zu erhalten, baue ich folgendes kleines Script ein
und verwende<script>var sitesC=[ '../int2-01-01.htm', '../diff2-01-01.htm', . . . '../diff2-02-01.htm', '../diff2-03-01.htm' ]; function randomSiteC() { var i = parseInt(Math.random() * sitesC.length); location.href = sitesC[i]; } </script>
<a> href="#" onclick="randomSiteC();">Zeige mir eine der Aufgaben</a>
.Test: Zeige mir eine der Aufgaben siehe auch Asteriscus.
- Für eigene Versionen arbeite ich lokal in einem git-Repositorium. Dabei konzentriere
ich mich auf eine
html-Datei
, in der alle Elemente (Aufgbabe, Lösung und Hinweise) stecken. Sodann kann ich wieder darauf verweisen.
Was ist KaTeX?
The fastest math typesetting library for the web.
Es unterstützt eine umfassende Liste von aus (La)Tex gewohnten Funktionen.
Wie hilft mir Khan?
Personalisierung, Transparenz und Kontrolle
In Vergleich zu anderen System zeichnet sich dieses framework durch Personalisierung, Transparenz und Kontrolle aus. Umgekehrt bedeutet dies, dass ich nur eingeschränkt vordefinierte Funktionen oder Generatoren zur Verfügung habe.
Es ist möglich, die mathematischen Operationen und Berechnungen hinter den Kulissen zu verstehen, mit Formeln zu arbeiten und eigene Funktionen und Algorithmen zu definieren, anstatt allein auf vordefinierte Funktionen oder Generatoren zu setzen. Dadurch werden Zahlenwerte erzeugt, die besser zu spezifischen Anforderungen oder didaktischen Konzepten passen.
Optimierendes Vor- und Zurückgehen
Es besteht Kontrolle über input und den entsprechenden output. Mit eigenen Formeln oder Algorithmen lassen sich die Aufgaben genauer auf die Lernziele anpassen, zum Beispiel im Vergleich zum output
einer gegebenen Funktion.
So erzeuge ich für mich geeignete Zahlenwerte, die das didaktische Konzept zielführend überprüfen und sich die Aufgabe nachvollziehbar testen
sowie anpassen lässt: angefangen beim Parameterraum, über die Hilfestellungen in den hints
bis zu den Lösungswerten. Eine Variation ist durch kopieren und verändern schnell parat.
Kreativität und Effizienz
Experimentieren mit Werten oder evaluierende Iterationen erlauben einen weitergehenden Zugang oder ein das Verständnis eines besseren Vorgehens. Habe ich bestimmte Zahlenwerte als Lösungen im Sinn (zum Beispiel ganzzahlig) kann ich mir mathematisch die zughörigen Ausgangswerte in der Aufgabenstellung herleiten. Die mathematisch-didaktische Einsicht wird auf kreative Weise umgesetzt.
Wie effizient ich das Angebot nutzen kann, hängt auch und vor allem von meinen Programmierkenntnissen ab. Oft lassen sich wiederholende Funktionen oder Algorithmen neu definieren und effizientere Lösungen finden. Es scheint ein bekanntes Phänomen zu sein, dass das dann erst später auffällt.
Welchen Antworttyp sollte ich nehmen?
In der Präamble einer Khan-Aufgabe wird unter anderen der (globale) Antworttyp atype
festgelegt.
Nützlich sind vor allem number
, rational
, decimal
und für Eingaben in einer Textbox text
.
Single-choice ist mit radio
möglich. Der Typ multiple
erlaubt mehrere Teilantworten, so ist z.B. multiple-choice mit multiple
und checkbox
möglich. Bei set
sind mehrere Antworteingaben möglich.
Grösste Flexibilität verspricht custom
für massgeschneiderte Aufgaben.
Siehe auch Vademecum und Manual.
Welche Rolle spielen die Parameter (Variablen)?
Zum Beispiel werden mit
<var id="A">10</var>
<var id="B">A / 2</var>
zwei Variablen A
und B
mit Werten 10
und 5
definiert. Diese Werte können auch zufällig erzeugt werden,
siehe unten.
Die Variablen-Werte werden später im html ausgelesen: in der Aufgabenstellung, in der Lösung
oder den Hinweisen. Ihr Inhalt wird jeweils als JavaScript ausgewertet und ausgegeben. So gibt z.B. <var>A</var>
den Wert der Variable A
aus, und <var>A+B</var>
die Summe von A
und B
.
Mit <div data-if=" . . . ">
. . .
</div>
wird eine Weiche in Abhängigkeit des Variablenwertes eingebaut.
Wie kann ich zufällige Parameter erzeugen?
Khans Manual ist in Teilen nicht mehr aktuell.
Mit <var id="A">randRangeExclude(N,M,[-1,0,1])</var>
kann die Variable A
ganzzahlige Werte zwischen N
und M
(inklusive Grenzen) annehmen,
die ungleich -1
, 0
oder 1
sind (für N < -1,0,1< M
).
Mit randRange(N,M)
werden zufällige Zahlen zwischen N
und M
erzeugt.
Statt randRangeExclude(N,M,[0])
geht auch einfach randRangeNonZero(N,M)
.
Mit <var id="L">randFromArray([L1,L2,...])</var>
hat die Variable L
den Wert einer der Variablen L1
, L2
, etc, die zuvor zufällig bestimmt worden sind.
Kann ich die Auswahl der Parameter weiter einschränken?
Ja. Mit <div data-ensure=" ">
wird die Auswahl weiter eingeschränkt, zum Beispiel:
<div data-ensure="A > B">
<var id="A">randRange(1, 10)</div>
<var id="B">randRange(1, 10)</div>
</div>
Logische Operationen erlauben hier weitere Filter
<div data-ensure="Bedingung1 && Bedingung2 && Bedingung3 . . ." >
. . .
</div>
Siehe auch Test-Funktionen auf der Liste mit Khan-Funktionen.
Sind die Variablenwerte immer Zahlen?
Nein, es gibt auch die Möglichkeit, mit Funktionsausdrücken zu arbeiten. Ich definiere zum Beispiel ein Feld:
<var id="functionBank">[
["x^2", "\\sin(x)", "2x", "\\cos(x)", "x^2\\cos(x)", "2x\\sin(x)", "x^2\\sin(x) + 2x\\cos(x) - 2\\sin(x)","\\frac{\\pi^2}{2}-4","-\\frac{\\pi}{2}","\\frac{\\pi}{2}"],
["x^2", "e^x", "2x", "e^x", "x^2e^x", "2xe^x", "x^2e^x - 2xe^x + 2 e^x",B + "\\ln(" + B +")(\\ln(" + B +") - 2 )+" + (2*B-2) ,0,"\\ln("+ B +")"]
]
</var>
Daraus wähle ich dann eine Zeile aus:
<var id="fNum">randRange(0,functionBank.length-1)</var>
<var id="f">functionBank[fNum]</var>
Der Wert <var>f[1]</var>
ist \(\sin(x)\) oder \(e^x\), falls die Variable
fNum
gleich 0
oder 1
ist.
Der Ausdruck B + "\\ln(" + B +")(\\ln(" + B +") - 2 )+" + (2*B-2)
verknüpft den Wert der Variablen
B
mit den formalen LaTeX-Ausdrücken.
Angenommen, es sind die Werte <var>B</var> = 3
und
<var>fNum</var> = 1
gegeben, dann hat
<var>f[7]</var>
den Wert \(3 \ln(3)(\ln(3)-2) + 4)\). Der Wert von B
wird eingesetzt und mit diesem gerechnet, das allfällige Ergebnis dann mit dem LaTeX-Code verknüpft.
Welche Funktionen/Befehle sollte ich im Hinterkopf haben?
Eine Khan-Aufgabe (mit Hints) ist ein Amalgam aus html, Khan-Funktionen und KaTeX. Details dazu stehen unten.
KaTeX verwendet hier
<code>
tags mit umfassenden unterstützten Funktionen der KaTeX-Syntax. Für \(\sin(2\pi \cdot x) \) schreibe<code>\sin(2\pi \cdot x)</code>.
Nützlich für eine saubere Darstellung sind zum Beispiel folgende Khan-Funktionen, aus einer umfassenderen Liste mit Print-Funktionen.
negParens(A)
: FallsA
negativ ist, wird (A) dargestellt:negParens(-2)
zeigt dann (-2) undnegParens(2)
einfach 2.fractionReduce(A,B)
: Stellt einen gekürzten Bruch da, auch ganzzahlig, zum Beispiel wirdfractionReduce(40,8)
zu 5 undfractionReduce(40,80)
zu \( \dfrac 12 \). Taucht der Bruch zum Beispiel als Index auf, bietet sichfractionReduce(A,B,small=true)
an.formattedSquareRootOf(A)
: Schreibt eine reduzierte Wurzel, z.B.formattedSquareRootOf(27)
ist \( 3\sqrt{3} \).
Kann ich wie gewohnt LaTeX nutzen?
Ja. Vergleiche die Liste der (La)Tex gewohnten KaTeX-Funktionen.
Wie kombiniere ich Variablen und KaTeX?
Der Wert einer Variablen wird mit <var>...</var>
in KaTeX eingesetzt, z.B.:
<code>f(x) = \cos(x) \cdot <var>negParens(A)</var> \cdot x</code>
Welcher Teil des codes ist KaTeX, welcher JS, html, etc?
Als html-Datei wird eine Khan-Aufgabe vom Browser in erster Linie als html interpretiert.
Erst wenn die Aufgabe mit kekse, unserer Version von Khan, abschliesst
<script src="blob/dist/kexe.bundle.js"></script>
wird das html der Aufgabe speziell interpretiert
und daraus die einsatzbereite Khan-Aufgabe gebaut. Daher sieht eine Khan-Aufgabe u.U. "kaputt" aus, wenn kekse
nicht richtig (langsam) geladen wird.
Im Gegensatz zu üblichem html haben die Inhalte von bestimmten html-Elementen der Aufgabe dementsprechend spezielle Bedeutungen. So gibt es Elemente, die JavaScript-Code oder LaTeX-Code enthalten können/sollen, auch wenn das in html überlicherweise nicht möglich ist.
html-Escape
Werden umgekehrt in solchen Inhalten die html-Sonderzeichen <
, >
, &
benötigt,
müssen sie mit html-Escape-Sequenzen <
, >
, &
geschrieben werden.
Gib es z.B. in einem JavaScript-Abschnitt einen Grössenvergleich
if (x > y)
, dann muss dort if (x > y)
stehen.
Direktes html
Es gibt Abschnitte, in denen das html der Aufgabe direkt als html interpretiert wird:
<div class="question">...</div>
,<div class="hints">...</div>
: Das hier enthaltene html wird als Aufgabenstellung angezeigt bzw. als Hinweise angezeigt.- Verschiedenste Orte innerhalb von
<div class="solution">
, je nach Antworttyp: html wird hier je nach Antworttyp verwendet, um das/die Eingabefeld/er zu gestalten.
Überall, wo html direkt als solches interpretiert wird, kann mittels
<code>...</code>
LaTeX-Code eingefügt werden, welcher dann dementsprechend als Formel dargestellt wird. Dies geschieht mit KaTeX, also ist der Befehlssatz von KaTeX ausschlaggebend, siehe Beispiele im Vademecum.
JavaScript
JavaScript wird an folgenden Orten erwartet:
<var>...</var>
: Einerseits bei Variabeldefinitionen (z.B.<var id="A">2</var>
oder<var id="B">sqrt(A)</var>
). Anderseits bei Verwendung der Variable in der Aufgabe (z.B.<var>A</var>
oder<var>A*B</var>
); hier wird der Inhalt des Tags ausgewertet, zu Text umgewandelt und anstelle des<var>
-Tags eingefügt. Sobald eine Variable definiert wurde, ist sie als JavaScript-Variable überall verfügbar, wo JavaScript-Code erwartet wird.data-if="..."
unddata-ensure="..."
: Erwartet werden JavaScript-Ausdrücke, die entweder wahr oder falsch ergeben.<div class="graphie">...</div>
: Anweisungen an graphie werden hier als JavaScript-Code gegeben.- Antworttyp
custom
: Mit dem JavaScript-Code in<div class="guess">...</div>
,<div class="validator-function">...</div>
und<div class="show-guess">...</div>
wird dercustom
-Antworttyp konfiguriert, siehe Manual.
Es ist möglich, <var>
innerhalb von <code>
zu verwenden, siehe Beispiele im Vademecum.
Wie kann ich im html Schleifen einbauen?
data-each="n times"
: Erzeugt das Elementn
maldata-each="n times as i"
: Erzeugt das Elementn
mal, wobeii
als Zählvariable verwendet werden kanndata-each="array as value"
: Erzeugt das Element einmal pro Wertvalue
im Arraydata-each="array as pos, value"
: Wiedata-each="array as value"
, aberpos
ist zudem die Zählvariable
Wie kann ich Zahlen in einem Intervall als korrekt werten?
Das ist mit dem Antworttyp custom
möglich.
Die validator-Funktion muss dann Grössenvergleiche implementieren:
<div class="solution">
<div class="instruction">
<form class="needs-validation" autocomplete="off" novalidate="">
<label for="custom_input" class="control-label visually-hidden">B=</label>
<div class="input-group">
<span class="input-group-text bk-input-group-addon">
<code>{\color{red}X=}</code>
</span>
<input id="custom_input" type="text" class="form-control" autocapitalize="off" />
</div>
</form>
</div>
<div class="guess">[document.getElementById("custom_input").value]</div>
<div class="validator-function">
return (X > a) && (X < b);
</div>
</div>
Hier wird X
als korrekt gewertet, falls X > a
und X < b
,
wobei a
und b
Variablen sind. Mit >=
und <=
können Zahlen in abgeschlossenen Intervalle abgefragt werden.
Das html in <div class="instruction">
bestimmt das Aussehen des Eingabefelds.
Dies wird z.B. hier verwendet:
Was noch?
Wie gebe ich schrittweise Hinweise?
Die Hinweise (ver-)stecken (sich) im <div class="hints"> ... </div>
-Block.
Mit einer Serie von <div>
werden schrittweise Hinweise angezeigt, jeweils durch Drücken des Knopfes Hinweis
. Auch hier können KaTeX und Variablen verwendet werden.
Das Beispiel verwendet <data-if>
für eine Weiche in Abhängigkeit der Zufallsparameter:
<div data-if="V == W"> <p>Hier wird <code>\gamma</code> <b>positiv</b> durchlaufen.</p>
</div> <div data-if="V !== W">
<p>Hier wird <code>\gamma</code> <b>negativ</b> durchlaufen.</p>
</div>
Welche graphischen Elemente kann ich einsetzen?
Abhängig von der eigenen Programmier-Affinität sind die graphischen Elemente wenig beschränkt.
Wie verhindere ich,
dass radio
-Antworten aus Versehen identisch sind?
Wenn Single-Choice-Antworten aus mehreren zufälligen Variablen zusammengebaut werden, kann es passieren, dass zwei Antworten gleich ausfallen, obwohl die ursprünglichen Variablen ungleich waren.
Z.B., wenn zwei mögliche Antworten Brüche X1/Y1
und X2/Y2
sind:
<div class="vars">
<var id="X1">randRange(-10,10)</var>
<var id="X2">randRangeExclude(-10,10,X1)</var>
<var id="Y1">randRange(-10,10)</var>
<var id="Y2">randRangeExclude(-10,10,Y1)</var>
</div>
Obwohl X1 != X2
und Y1 != X2
, kann dennoch X1/Y1 == X2/Y2
,
z.B. ist 1/2 = 2/4.
Eine Lösungsmöglichkeit ist eine sorgfältigere Programmierung mit data-ensure
,
z.B.:
<div class="vars" data-ensure="X1/Y1!=X2/Y2">
<var id="X1">randRange(-10,10)</var>
<var id="X2">randRange(-10,10)</var>
<var id="Y1">randRange(-10,10)</var>
<var id="Y2">randRange(-10,10)</var>
</div>
oder wir lassen uns mehr als genug Antworten generieren und bereinigen dann diese Auswahl, wie im folgenden Beispiel:
Kann ich eine Khan-Aufgabe auswerten?
Ja, sämtliche Interaktionen mit einer Aufgabe werden (anonym) erfasst und können ausgewertet werden.