Vorweg: Dieser Artikel ist bewusst etwas länger.
Er richtet sich an Caller, die nicht nur wissen möchten, dass die Choreo-Suche funktioniert, sondern auch genau verstehen wollen, was Callers Caddy intern mit einer Sequenz macht.
Wenn du nur eine schnelle Bedienungsanleitung suchst, darfst du diesen Artikel guten Gewissens überspringen. Wenn du dagegen wissen möchtest, wie aus einigen Textzeilen eine nach Figuren, Tanzprogramm, Sequenztyp und Schwierigkeit durchsuchbare Choreo wird, bist du hier genau richtig.
Nehmen wir zunächst eine ganz normale Sequenz:
Heads Square Thru 4,
Swing Thru,
Boys Run,
Ferris Wheel,
Centers Pass Thru,
Touch 1/4,
Scoot Back,
Swing
Für einen Caller ist bei beiden Sequenzen sofort klar, was gemeint ist.
Eine Software sieht zunächst jedoch nur einzelne Texte. Sie weiß nicht automatisch, dass Heads lediglich festlegt, wer beginnt. Sie muss erkennen, dass die 4 zu Square Thru gehört, aber nicht Teil des offiziellen Namens der Figur ist. Und sie muss verstehen, welche Teile echte Calls und welche lediglich Rollenangaben, Zusätze oder Anweisungen sind.
Callers Caddy muss deshalb zunächst einige Fragen beantworten:
- Welche Zeilen sind tatsächlich Calls?
- Welche offizielle Figur ist mit einer Schreibweise gemeint?
- Gehört
Headszur Figur oder beschreibt es nur die aktiven Tänzer? - Ist die Sequenz vollständig Mainstream?
- Oder versteckt sich darin eine einzige Plus-Figur?
- Und was passiert, wenn Callers Caddy eine Schreibweise noch nicht kennt?
Hinter jeder Sequenz steckt deshalb eine kleine Verarbeitungskette. Sie beginnt mit dem eingegebenen Text und endet mit einem vorberechneten Tanz-Level, über das später selbst Tausende Sequenzen blitzschnell durchsucht werden können.
Schauen wir uns diesen Weg einmal genau an.
Schritt 1: Die Originalsequenz wird als JSON gespeichert
Unsere technische Beispielsequenz lautet vollständig:
[
"Heads Square Thru 4",
"Swing Thru",
"Boys Run",
"Ferris Wheel",
"Centers Pass Thru",
"Touch 1/4",
"Scoot Back",
"Swing"
]
Wenn du eine Sequenz eingibst oder importierst, speichert Callers Caddy sie als geordnete Liste ihrer Calls. Technisch handelt es sich dabei um ein JSON-Array direkt in der Datenbank.
JSON klingt komplizierter, als es ist. Im Grunde ist es einfach eine Liste, bei der jeder Eintrag seinen festen Platz hat. Dadurch bleiben sowohl die Calls als auch ihre Reihenfolge erhalten.
Callers Caddy darf die Schreibweise später intern vereinfachen, um die Figuren zu erkennen. Die gespeicherte Originalsequenz wird dadurch aber nicht verändert.
Wenn du später wieder auf die Choreo zugreifst, siehst du weiterhin:
Heads Square Thru 4
und nicht nur:
Square Thru
Auch die Länge der Sequenz ist nicht künstlich begrenzt. Sie kann drei Calls enthalten, dreißig Calls oder noch mehr. Callers Caddy speichert, was choreografisch benötigt wird.
Typ und Schwierigkeit sind eigene Informationen
Neben der eigentlichen Callliste speichert Callers Caddy zu jeder Sequenz zwei weitere Angaben:
- den Sequenztyp
- die Schwierigkeit
Der Sequenztyp beschreibt den choreografischen Weg: Aus welcher Formation startet die Sequenz und wo führt sie hin?
Typische Beispiele sind:
Static Set ➔ ResolveZero Box ➔ ResolveZero Line ➔ Zero LineSinger (Corner progression)
Zero Line ➔ Zero Line bedeutet beispielsweise: Die Tänzer beginnen in einer Zero Line und befinden sich am Ende wieder in einer Zero Line.
Bei Singer (Corner progression) handelt es sich dagegen um eine Figur aus einem Singing Call, nach der alle Tänzer um eine Position weitergerückt sind.
Die Schwierigkeit beantwortet eine andere Frage: Wie anspruchsvoll ist diese konkrete Sequenz zu tanzen?
Dafür gibt es bewusst nur drei einfache Werte:
EasyMediumHard
Tanz-Level und Schwierigkeit sind dabei nicht dasselbe.
Eine Sequenz kann ausschließlich Mainstream-Figuren enthalten und trotzdem choreografisch anspruchsvoll sein. Umgekehrt kann eine Plus-Sequenz sehr übersichtlich und einfach zu tanzen sein.
Deshalb speichert Callers Caddy diese Informationen getrennt.
Später kannst du dadurch beispielsweise sagen:
Zeige mir alle einfachen Sequenzen vom Typ „Zero Box ➔ Resolve“, die für Mainstream geeignet sind.
Aus einer großen Choreo-Sammlung wird so eine sehr konkrete Auswahl für den nächsten Tanzabend.
[Screenshot: Sequenz mit Typ und Schwierigkeit]
Schritt 2: Die Schreibweise wird intern aufgeräumt
Menschen sind erstaunlich kreativ darin, dieselbe Figur unterschiedlich aufzuschreiben.
Ein Caller schreibt:
Heads Square Thru 4
Ein anderer vielleicht:
Heads Sq Thru
Oder:
Square Thru 4 (again)
Für einen Menschen ist klar, dass sich alle drei Schreibweisen auf dieselbe Grundfigur beziehen. Für eine Software sind es zunächst drei unterschiedliche Texte.
Deshalb erstellt Callers Caddy für den Abgleich eine intern bereinigte Fassung.
Dabei entfernt es unter anderem:
- führende Rollenangaben wie
Heads,Sides,Centers,BoysoderGirls - abschließende Zahlen
- Brüche wie
3/4 - Klammerzusätze
- Wörter wie
again
Aus:
Heads Square Thru 4
wird für den internen Vergleich:
square thru
Aus:
Boys Run
wird:
run
Und aus:
Touch 1/4
wird eine bereinigte Schreibweise, die anschließend der offiziellen Figur Touch a Quarter zugeordnet werden kann.
Wichtig ist: Diese Bereinigung findet nur intern für den Abgleich statt.
In der gespeicherten Sequenz bleibt die Originalschreibweise vollständig erhalten.
Man könnte sagen:
Die Originalzeile ist das, was der Caller geschrieben hat. Die bereinigte Fassung ist das, was Callers Caddy daraus zu verstehen versucht.
Schritt 3: Das Call-Mapping übersetzt Caller-Sprache
Nach dem Aufräumen besitzt Callers Caddy eine vereinfachte Schreibweise. Es weiß aber noch nicht automatisch, welche offizielle Figur damit gemeint ist.
Jetzt kommt das Call-Mapping ins Spiel.
Das Call-Mapping ist eine Übersetzungstabelle zwischen den vielen möglichen Schreibweisen der Caller und den eindeutig definierten Figuren in Callers Caddy.
Zum Beispiel:
| Gefundene Schreibweise | Offizielle Figur |
|---|---|
Sq Thru | Square Thru |
Square Thru 4 | Square Thru |
square thru | Square Thru |
Alle drei Schreibweisen zeigen am Ende auf dieselbe offizielle Figur.
Das ist ein entscheidender Schritt. Erst durch diese Zuordnung kann Callers Caddy erkennen, dass Sequenzen aus unterschiedlichen Quellen dieselben Calls enthalten.
Ohne Call-Mapping wären:
Sq Thru
und:
Square Thru 4
für die Datenbank zwei unterschiedliche Dinge.
Mit Call-Mapping werden sie zu zwei Schreibweisen derselben offiziellen Figur.
Das Gleiche passiert in unserer Beispielsequenz mit:
Centers Pass Thru
Die Rollenangabe Centers wird für die Zuordnung entfernt. Übrig bleibt Pass Thru, das mit der offiziellen Figur Pass Thru verbunden wird.
Oder mit:
Swing
Diese Schreibweise wird der offiziellen Figur Swing (your Partner) zugeordnet. (Außer du callst A2 oder höher, dann kann Swing auch was anderes bedeuten)
Nicht jede Zeile ist ein Call
In Choreo-Sammlungen stehen häufig auch Hinweise wie:
(Zero Box)
You're Home
Repeat
Opener
Solche Zeilen können für den Caller hilfreich sein, sind aber keine Square-Dance-Figuren.
Dafür gibt es im Call-Mapping den besonderen Eintrag:
Filler Words
Damit sagst du Callers Caddy:
Diese Zeile gehört zum Text der Sequenz, soll aber nicht als Figur ausgewertet werden.
Das ist wichtig, denn Callers Caddy darf eine unbekannte Zeile nicht einfach ignorieren. Sie könnte schließlich ein noch nicht erkanntes Kommando aus einem höheren Tanzprogramm sein.
[Screenshot: Call-Mapping mit verschiedenen Schreibweisen und „Filler Words“]
Schritt 4: Jede Figur bekommt ihren Platz im Lehrplan
Nachdem alle Schreibweisen den offiziellen Figuren zugeordnet wurden, kennt Callers Caddy die Calls der Sequenz.
Nun muss es herausfinden, zu welchem Tanz-Level die gesamte Choreo gehört.
Dafür besitzt jede offizielle Figur eine feste Ordnungszahl.
Der ganzzahlige Teil dieser Zahl steht für das Tanzprogramm:
10für Basic30für Mainstream40für Plus50für A1- entsprechend höhere Werte für die weiteren Programme
Die Nachkommastellen beschreiben die genaue Position der Figur innerhalb des jeweiligen Programms beziehungsweise Lehrplans.
Dadurch entsteht eine durchgängige Reihenfolge. Eine später gelehrte oder einem höheren Programm zugeordnete Figur besitzt eine höhere Ordnungszahl als eine frühere Figur.
Das hat einen großen Vorteil: Callers Caddy muss nicht mit vielen voneinander getrennten Listen arbeiten. Es kann Figuren über die Grenzen der verschiedenen Programme hinweg über eine einzige Zahl vergleichen.
Unsere Mainstream-Sequenz in Zahlen
Nachdem Callers Caddy die Schreibweisen bereinigt und den offiziellen Figuren zugeordnet hat, sieht unsere Beispielsequenz intern vereinfacht so aus:
| Call in der Sequenz | Zugeordnete Figur | Ordnungszahl | Programm |
|---|---|---|---|
Heads Square Thru 4 | Square Thru | 30.0021 | Mainstream |
Swing Thru | Swing Thru | 30.0033 | Mainstream |
Boys Run | Run | 30.0034 | Mainstream |
Ferris Wheel | Ferris Wheel | 30.0040 | Mainstream |
Centers Pass Thru | Pass Thru | 30.0007 | Mainstream |
Touch 1/4 | Touch a Quarter | 30.0042 | Mainstream |
Scoot Back | Scoot Back | 30.0047 | Mainstream |
Swing | Swing (your Partner) | 30.0011 | Mainstream |
Hier sieht man sehr schön, dass die Reihenfolge der Calls in der Sequenz nichts mit der Höhe ihrer Ordnungszahlen zu tun hat.
Centers Pass Thru steht beispielsweise erst an fünfter Stelle in der Choreo, besitzt mit 30.0007 aber eine niedrigere Ordnungszahl als das vorher getanzte Ferris Wheel mit 30.0040.
Die Ordnungszahl beschreibt also nicht den Platz innerhalb dieser Sequenz.
Sie beschreibt den Platz der offiziellen Figur innerhalb des gesamten Lehrplans.
[Screenshot: Figuren mit ihren Ordnungszahlen]
Schritt 5: Die höchste Figur entscheidet
Jetzt kennt Callers Caddy die Ordnungszahlen aller Figuren in der Sequenz.
Um das Level der gesamten Sequenz zu bestimmen, braucht es nur noch eine mathematische Funktion:
Maximum
Callers Caddy sucht also nach der höchsten enthaltenen Ordnungszahl.
In unserer Beispielsequenz ist das:
30.0047
Dieser Wert gehört zu:
Scoot Back
Damit wird 30.0047 als Maximum der gesamten Sequenz gespeichert.
Da dieser Wert im Mainstream-Bereich liegt, kann die Sequenz bei einer Suche bis Mainstream angezeigt werden.
Callers Caddy berechnet dieses Maximum nicht bei jeder späteren Suche erneut. Es wird einmal ermittelt und direkt bei der Sequenz hinterlegt.
Genau diese kleine Vorarbeit macht die spätere Suche so schnell.
Wie aus der Sequenz plötzlich eine Plus-Sequenz wird
Jetzt verändern wir nur einen kleinen Teil unserer Choreo. (Timing lass ich mal aussen vor)
Aus:
Touch 1/4
Scoot Back
Swing
wird:
Touch 1/4
Follow Your Neighbor
& Spread
Swing
Die veränderte Sequenz lautet damit vollständig:
[
"Heads Square Thru 4",
"Swing Thru",
"Boys Run",
"Ferris Wheel",
"Centers Pass Thru",
"Touch 1/4",
"Follow Your Neighbor",
"& Spread",
"Swing"
]
Auf den ersten Blick hat sich nicht viel verändert. Die ersten sechs Calls sind identisch und auch am Ende wird weiterhin geschwungen.
Intern sieht die Auswertung jetzt jedoch so aus:
| Call in der Sequenz | Zugeordnete Figur | Ordnungszahl | Programm |
|---|---|---|---|
Heads Square Thru 4 | Square Thru | 30.0021 | Mainstream |
Swing Thru | Swing Thru | 30.0033 | Mainstream |
Boys Run | Run | 30.0034 | Mainstream |
Ferris Wheel | Ferris Wheel | 30.0040 | Mainstream |
Centers Pass Thru | Pass Thru | 30.0007 | Mainstream |
Touch 1/4 | Touch a Quarter | 30.0042 | Mainstream |
Follow Your Neighbor | Follow Your Neighbor | 40.0024 | Plus |
& Spread | (Anything) & Spread | 40.0032 | Plus |
Swing | Swing (your Partner) | 30.0011 | Mainstream |
Callers Caddy sucht erneut lediglich den höchsten Wert.
Diesmal lautet das Maximum:
40.0032
Es gehört zu (Anything) & Spread und liegt im Plus-Bereich.
Damit gilt nun die gesamte Sequenz als Plus-Sequenz.
Sie besteht zwar überwiegend aus Mainstream-Figuren. Das spielt für die Einstufung jedoch keine Rolle. Eine Mainstream-Gruppe müsste auch Follow Your Neighbor und (Anything) & Spread sicher tanzen können, um die vollständige Choreo zu bewältigen.
Eine Sequenz wird deshalb nicht nach dem Durchschnitt und auch nicht nach der Mehrheit ihrer Calls eingestuft.
Die höchste enthaltene Figur bestimmt das Level der gesamten Sequenz.
Genau deshalb erscheint unsere erste Variante bei einer Suche bis Mainstream, während die zweite Variante dort verborgen bleibt. Wird das Suchlimit auf Plus erhöht, können beide Sequenzen angezeigt werden.
Der Unterschied zwischen Mainstream und Plus liegt in diesem Beispiel am Ende in einem einzigen Zahlenvergleich:
Mainstream-Sequenz: Maximum 30.0047
Plus-Sequenz: Maximum 40.0032
Das vorberechnete Maximum macht die spätere Suche gleichzeitig zuverlässig und schnell.
Schritt 6: Jetzt kann blitzschnell gesucht werden
Nach der Verarbeitung kennt Callers Caddy zu unserer Sequenz:
- die Calls in ihrer ursprünglichen Reihenfolge
- die zugeordneten offiziellen Figuren
- den Sequenztyp
- die Schwierigkeit
- die höchste enthaltene Figur
- damit auch das maximale Tanz-Level
Auf dieser Grundlage sind unterschiedliche Sucharten möglich.
Suche nach einer bestimmten Figur
Die erste Frage könnte lauten:
Zeige mir alle Sequenzen, die
Ferris Wheelenthalten.
Callers Caddy kann dafür direkt über den vorbereiteten Index nachsehen, in welchen Sequenzen diese Figur vorkommt.
Dabei spielt es keine Rolle, ob sie ursprünglich als Ferris Wheel, mit einem Rollen-Zusatz oder in einer anderen bekannten Schreibweise importiert wurde.
Das Call-Mapping hat diese Varianten bereits auf dieselbe offizielle Figur zurückgeführt.
Suche bis zu einem bestimmten Level
Die zweite Frage könnte lauten:
Zeige mir alle Sequenzen bis Mainstream (inklusive).
Jetzt zeigt sich der Vorteil des vorberechneten Maximums.
Callers Caddy muss nicht bei jeder Suche erneut sämtliche Calls sämtlicher Sequenzen untersuchen. Es vergleicht nur zwei Werte:
Maximum der Sequenz ≤ gewähltes Level?
Wenn ja, wird die Sequenz angezeigt.
Wenn nein, bleibt sie verborgen.
Bei unserer ersten Beispielsequenz lautet die Antwort:
30.0047 ≤ Mainstream
Die Sequenz wird angezeigt.
Bei der veränderten Variante lautet die Antwort:
40.0032 > Mainstream
Diese Sequenz bleibt verborgen.
Selbst bei Tausenden gespeicherten Sequenzen ist dieser Vergleich sehr schnell.
Weitere Filter können die Auswahl anschließend zusätzlich verkleinern:
- Sequenztyp
- Schwierigkeit
- enthaltene Figur
- gewähltes Tanzprogramm
So wird aus einer großen Datenmenge innerhalb kürzester Zeit genau die Choreo, die du gerade brauchst.
[Screenshot: Suche mit Level-, Typ- und Schwierigkeitsfilter]
Frage 1: Warum erscheint eine importierte Sequenz manchmal nicht?
Du importierst eine neue Choreo. Der Import scheint funktioniert zu haben, aber bei der Level-Suche taucht die Sequenz nicht auf.
Der häufigste Grund ist eine unbekannte Schreibweise.
Nehmen wir an, in der Sequenz steht:
Hds SqThr 4
Wenn Callers Caddy diese Abkürzung noch nicht kennt, kann es sie keiner offiziellen Figur zuordnen.
Nun könnte das Programm die unbekannte Zeile einfach übergehen. Das wäre bequem, aber riskant.
Denn Callers Caddy weiß nicht, was sich hinter der unbekannten Schreibweise verbirgt. Vielleicht ist es nur eine ungewöhnliche Abkürzung für eine Basic-Figur. Vielleicht handelt es sich aber auch um eine A2-Figur.
Würde das Programm die Zeile einfach ignorieren, könnte es eine A2-Sequenz versehentlich als Mainstream anzeigen.
Deshalb verhält sich Callers Caddy bewusst vorsichtig:
Solange auch nur ein Call nicht zugeordnet ist, kann das tatsächliche Maximum der Sequenz nicht zuverlässig berechnet werden.
Die Sequenz wird daher aus der Level-Suche herausgehalten.
Das Call-Mapping zeigt dir die noch offenen Schreibweisen. Außerdem sucht Callers Caddy nach ähnlich geschriebenen offiziellen Figuren und schlägt passende Zuordnungen vor.
Du entscheidest dann:
- Ist dies eine bekannte Figur in einer neuen Schreibweise?
- Oder handelt es sich lediglich um einen Kommentar oder eine Ansage?
Im ersten Fall ordnest du die passende offizielle Figur zu.
Im zweiten Fall wählst du:
Filler Words
Sobald alle Zeilen geklärt sind, kann Callers Caddy das Maximum zuverlässig berechnen. Danach erscheint die Sequenz wieder in den passenden Suchen.
[Screenshot: Unbekannte Schreibweise und Ähnlichkeitsvorschläge im Call-Mapping]
Frage 2: Wie kommen neue Sequenzen in den Callers Caddy?
Der einfachste Weg ist der Freitext-Import.
Du lädst eine Choreo beispielsweise aus einer Textdatei.
Das Programm erkennt die einzelnen Calls Zeile für Zeile.
Für strukturierte Sammlungen können außerdem Dateien im JSON- oder CSV-Format eingelesen werden. Diese dürfen neben den Calls bereits weitere Angaben enthalten, beispielsweise:
- das Level
- den Sequenztyp
- die Schwierigkeit
Unabhängig vom Importweg läuft danach dieselbe Verarbeitungskette:
- Originalsequenz speichern
- Schreibweisen intern bereinigen
- Calls über das Mapping zuordnen
- Ordnungszahlen ermitteln
- höchsten Call bestimmen
- Sequenz für die Suche vorbereiten
Bei größeren Importen ist es ganz normal, dass Callers Caddy auf neue Abkürzungen oder persönliche Schreibweisen stößt.
Genau dafür ist das Call-Mapping da.
Du musst die Choreografien nicht umschreiben. Du bringst Callers Caddy lediglich einmal bei, was die neue Schreibweise bedeutet. Danach kennt das System sie auch für weitere Sequenzen.
Fazit: Eine kleine Übersetzungsmaschine für Choreo
Von außen betrachtet speichert Callers Caddy Choreo-Sequenzen.
Technisch passiert jedoch deutlich mehr.
Das Programm bewahrt zunächst die Originalschreibweise auf. Anschließend reduziert es unterschiedliche Notationen auf ihren wesentlichen Kern. Das Call-Mapping übersetzt diesen Kern in eindeutig definierte Figuren. Die Ordnungszahlen machen die Figuren über verschiedene Tanzprogramme hinweg vergleichbar. Und die höchste enthaltene Figur bestimmt schließlich das Level der gesamten Sequenz.
Aus einigen einfachen Textzeilen entsteht dadurch ein strukturierter und blitzschnell durchsuchbarer Datensatz.
Oder kurz:
Text
➔ Bereinigung
➔ Call-Mapping
➔ Ordnungszahlen
➔ Maximum
➔ Suche
Das erklärt auch, warum Callers Caddy bei unbekannten Schreibweisen lieber einmal nachfragt, statt eine Sequenz möglicherweise falsch einzuordnen.
Denn eine gute Choreo-Suche muss nicht nur schnell sein.
Sie muss vor allem zuverlässig wissen, was in einer Sequenz tatsächlich getanzt wird.
Very good description of how
CC handles choreography. You have done a great job David. I really appreciate your help and how quickly you implement changes and updates.
Thank you, and I thought, it´s better for me to document it once, that to explain it to everyone one on one. I love laverages.
This is impressive!
Can you include the timing for each call in order to develop new singing call sequences?
Thanks,
Can you please put it on the ideas page ,so that others can also vote about that?