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?

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?

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.

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 &lt;, &gt;, &amp; geschrieben werden. Gib es z.B. in einem JavaScript-Abschnitt einen Grössenvergleich if (x > y), dann muss dort if (x &gt; y) stehen.

Direktes html

Es gibt Abschnitte, in denen das html der Aufgabe direkt als html interpretiert wird:

Ü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:

Es ist möglich, <var> innerhalb von <code> zu verwenden, siehe Beispiele im Vademecum.

Wie kann ich im html Schleifen einbauen?

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 &gt; a) && (X &lt; b);
    </div>
</div>

Hier wird X als korrekt gewertet, falls X > a und X < b, wobei a und b Variablen sind. Mit &gt;= und &lt;= 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.

Pendenzen

Wie kann ich mehrere Aufgaben in einer Aufgaben kombinieren?

Wie kann ich Rückmeldung in Abhängigkeit von den Eingaben geben?