Kommunikation zwischen Clients

Django, Flask, Bottle, WSGI, CGI…
Pitwheazle
User
Beiträge: 1050
Registriert: Sonntag 19. September 2021, 09:40

Wieder mal was Besonderes:
In meinem "alten" Rechentrainer (Der als Makro unter Calc läuft) ist mein "Rechenduell" sehr beliebt. Dabei wird eine Matheaufgabe angezeigt (mittels Beamer) und nach einer kurzen Denkpause die Namen von zwei zufällig ausgewählten Schüler/innen aus einer Liste. Wer zuerst die richtige Antwort nennt, bekommt einen Punkt und rückt im Ranking höher.
Das möchte ich mit meiner servergestützten Rechentrainerversion jetzt auch übernehmen. Genial wäre es, wenn die Aufgabe allen Schüler/innen innerhalb einer Lerngruppe, gleichzeitig auf ihren Tabletts angezeigt würden und nur bei zweien dann ein Aufgabenfeld erscheint und ich diese Eingabe in meinem Programm auswerten könnte.
Ich vermute, das geht gar nicht - ich wollte aber zumindest mal gefragt haben.
Frohe Weihnachten!
Benutzeravatar
sparrow
User
Beiträge: 4501
Registriert: Freitag 17. April 2009, 10:28

Die Clients müssen nicht miteinander sprechen. Es reicht wenn sie beide mit dem Server sprechen. Der muss das dann managen.
Pitwheazle
User
Beiträge: 1050
Registriert: Sonntag 19. September 2021, 09:40

OK, prima - heißt das, dass das prinzipiell möglich wäre? Das das nicht von Client zu Client, sondern über den Server gemanaged werden muss, ist sogar mir klar. Kannst du mir da bitte mal einen Anfang skizzieren?
Benutzeravatar
sparrow
User
Beiträge: 4501
Registriert: Freitag 17. April 2009, 10:28

Du möchtest, dass die Clients Nachrichten miteinander austauschen. Grob ist das also ein Chat. Das sollte als Recherchestart ganz gut passen.
nezzcarth
User
Beiträge: 1733
Registriert: Samstag 16. April 2011, 12:47

Pitwheazle hat geschrieben: Mittwoch 20. Dezember 2023, 18:25 Ich vermute, das geht gar nicht - ich wollte aber zumindest mal gefragt haben.
Gehen tut das schon; üblicherweise setzt man so etwas zur Zeit mit WebSockets um (und in Django z.B. hiermit: https://channels.readthedocs.io/). Allerdings ist das halt schon noch mal ein eigenes großes, relativ separates Thema, in das man sich einarbeiten muss. Daher würde ich persönlich vorschlagen, das erst einmal nach hinten zu schieben, bis der Rest gut läuft und man die restliche Technik völlig im Griff hat.

Die jetzige Implementierung als Webanwendung ermöglicht aber ersatzweise auch ähnlich Features, die vorher wahrscheinlich so kaum umsetzbar waren: Statt dieser Live-Duelle kannst du ja zum Beispiel Ranglisten für gelöste Aufgaben einführen. Oder man kann Erfahrungspunkte und Level und so etwas einführen. Je nachdem, was einem so einfällt und pädagogisch sinnvoll ist (davon habe ich keine Ahnung).
Pitwheazle
User
Beiträge: 1050
Registriert: Sonntag 19. September 2021, 09:40

Kebap hat geschrieben: Mittwoch 3. Juli 2024, 07:00
Pitwheazle hat geschrieben: Dienstag 2. Juli 2024, 12:40 Und hier [url]viewtopic.php?t=57645[/url ]habe ich meine Idee vorgestellt, das "Rechenduell", das auf meinem OpenOffice Rechentrainer läuft auch in die App zu einzubauen. Das scheint mir nicht so einfach zu sein. Ich habe mich mal eingelesen und muss wohl zunächst mal eine Chat-App erstellen und das alles mal ausprobieren.
Über die technischen Notwendigkeiten hinaus, wird das auch organisatorischen und ggf. weiteren Aufwand produzieren.
Wenn du den Nutzern die Möglichkeit gibst, miteinander zu interagieren, und ggf. sogar freie Texte auszutauschen, birgt das Möglichkeiten es zu misbrauchen.
Ich hatte mich da an den Vorschlag von @sparrow gehalten:
sparrow hat geschrieben: Mittwoch 20. Dezember 2023, 22:50 Du möchtest, dass die Clients Nachrichten miteinander austauschen. Grob ist das also ein Chat. Das sollte als Recherchestart ganz gut passen.
Ich hatte daraufhin mal gesucht und ein Beispiel für ein Chat Programm gefunden und wollte das mal nachvollziehen und hatte gedacht, vielleicht erschließt sich mir dann irgendwann, wie ich das für mein geplantes Rechenduell nutzen kann. Chat brauche ich nicht. Ich denke, ich stelle euch mein Rechenduell hier mal vor. Vielleicht könnt ihr mir da einen Weg aufzeigen, wie ich da dran gehe (oder ihr sagt "das geht nicht" oder auch "das bekommst du nicht hin").
Also das Rechenduell existiert schon als Makro in einer Tabellenkalkulationsdatei. Die Aufgaben entsprechen denen in meiner rechentrainer.app. Die Lehrkräfte haben auch schon eine Liste mit den Schülerinnen und Schüler ihrer Lerngruppe. Diese können sie noch in bis zu drei Ligen einteilen und die Fehlenden eintragen. Beim Start sieht das dann so aus:
Bild
Diese müssten jetzt alle Mitglieder der Lerngruppe auf ihrem Gerät sehen. Bei meinem existierenden Rechenduell benötigt man dazu einen Beamer. Die Lehrkraft sucht eine Aufgabenkategorie aus und klickt sie an, eine Aufgabe wird angezeigt:
Bild
Alle Schülerinnen und Schüler überlegen die Lösung und nach einer voreingestellten Zeit ("Wartezeit") werden zwei Schülerinnen und Schüler zufällig ausgesucht (dabei wird berücksichtigt, wie oft sie schon dran waren und in welchger Liga sie eingeteilt sind), es erscheinen zwei Namen:
Bild
... und wer von diesen die Aufgabe am schnellsten weiss bekommt einen Punkt. Zur Überprüfung tippt die Lehrkraft die zugerufene Antwort ein. Ist die reingerufene Lösung falsch, gibt es einen halben Punkt Abzug. Daraus wird nach jeder Aufgabe die Rangliste angepasst. Die Kids finden das toll. Das mit dem Beamer und dem Reinrufen ist blöd und ich fände es prima, wenn ich dies in meine Rechentrainer.app integrieren könnte. Alle Schülerinnen und Schüler der Lerngruppe sehen die gleiche Aufgabe, aber nach einer kurzen Zeit können nur zwei von ihnen die Lösung eingeben.
Besteht hier irgeneine Chance, sowas (mit meinen bescheidenen Fähigkeiten) zu realisieren? Und wenn ja, wie fange ich an?
Pitwheazle
User
Beiträge: 1050
Registriert: Sonntag 19. September 2021, 09:40

nezzcarth hat geschrieben: Donnerstag 21. Dezember 2023, 11:11 Die jetzige Implementierung als Webanwendung ermöglicht aber ersatzweise auch ähnlich Features, die vorher wahrscheinlich so kaum umsetzbar waren: Statt dieser Live-Duelle kannst du ja zum Beispiel Ranglisten für gelöste Aufgaben einführen. Oder man kann Erfahrungspunkte und Level und so etwas einführen. Je nachdem, was einem so einfällt und pädagogisch sinnvoll ist (davon habe ich keine Ahnung).
Ja, das mit den Ranglisten ist schon angedacht, das motiviert aber meines Erachtens nur die Streber, die schwachen Schülerinnen und Schüler demotiviert das nur. Mein Rechenduell ist ja schon getestet und kommt sehr gut an. Der Vorteil ist, dass hier zunächst mal eine Live Wettkampfstimmung entsteht und die schwachen Schülerinnen und Schüler eingebunden sind. Wie gesagt, die Lehrkraft kann bis zu drei Ligen festlegen und die "kämpfen" primär erstmal gegeneinander, zufällig treten dann aber auch die bessergewerteten der unteren Liga gegen die schlechteren der oberen Liga an, gewinnt der/die aus der unteren Liga, steigt er/sie auf, muss aber noch ein weiteres Duell in der neuen Liga gewinnen, sonst steigt er wieder ab, der Verlierer steigt ab. (Ich habe (auch) von Fußball keine Ahnung, habe mich aber inspierrieren lassen.) das ganze ist zurzeit ein Makro in Staroffice.
Pitwheazle
User
Beiträge: 1050
Registriert: Sonntag 19. September 2021, 09:40

Kebap hat geschrieben: Mittwoch 3. Juli 2024, 07:00 Mein Tipp, lerne am besten mal in einem kleinen, eigenständigen, lokalen Projekt, wie man virtuelle Umgebungen erstellt und handhabt.
Kein Django, kein Uberspace, keine Datenbanken, kein HTML, einfach 2-3 kleine verschiedene Pythonprogramme, die unterschiedliche Paketen importieren müssen.
Mein Rechentrainer liegt ja schon auf meinem Rechner und wenn ich jetzt ein zweites "Übungsprogramm" installieren will, dachte ich, müsste ich erstmal meinen Rechentrainer in eine virtuelle Umgebung einbetten und für ein weiteres Projekt eine zweite erstellen.
Benutzeravatar
noisefloor
User
Beiträge: 4149
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

das Problem hierbei ist die Latenz, wenn du das online machst. Sagen wir mal, es gehen wirklich an beide Clients die Aufgabe gleichzeitig raus - dann heißt das nicht, dass die gleichzeitig ankommen. Du hast ja eine Netzwerklatenz, auf die du null Einfluss hast. Die kann halt gering sein oder erheblich. Also das beide gleichzeitig die Aufgabe gleichzeitig sehen und gleichzeitig antworten (können) ist extrem unwahrscheinlich.

Sinnvoller wäre IMHO nicht der Echtzeit Ansatz, sondern eher sowas wie bei der App "Quizduell", d.h. man sieht eine Aufgabe, hat X Sekunden Zeit, zu antworten (bei Quizduell ist es multiple choice) und je schneller man ist, desto mehr Punkt bekommt man.

Interessant ist das schon, aber bevor du da dran geht solltest du IMHO den verhandenen Code des Rechentrainers erstmal "production ready" machen - basierend auf deinen diversen Threads sind da genug offene Baustelle plus die neue Baustelle namens "performance".

Gruß, noisefloor
Pitwheazle
User
Beiträge: 1050
Registriert: Sonntag 19. September 2021, 09:40

OK, das ist eine interessante Info. Vielleicht lasse ich das dann halt bei meiner funktionierenden OpenOffice Version. Nach Studium der von @nezzcarth Infos zu den "channels" fühle ich mich auch echt überfordert.
... aber mache meinen Rechentrainer nicht schlechter als er ist. Er ist, glaube ich, seit einem Jahr online und funktioniert, meines Erachtens gut. Ich bekomme nur positive Rückmeldungen - die einzigen Beschwerden kommen von Lehrkräften, die bemängeln, dass die Schülerinnen und Schüler nicht genug arbeiten.
Ich habe versucht, eure Anregungen alle einzubauen ... auch bei den neuen Variablennamen.
Bleibt, außer des Performaceproblems noch die fehlende Anzeige meiner Gruppen auf dem iPad.
Benutzeravatar
noisefloor
User
Beiträge: 4149
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

also deinen Rechentrainer macht auch keiner schlecht. Soweit ist das mitbekommen habe richten sich alle Verbesserungsvorschläge und Kritik an den Code, nicht die Applikation und deren Aufgaben an sich.

Gruß, noisefloor
Benutzeravatar
Kebap
User
Beiträge: 760
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Die Kids finden das toll. Das mit dem Beamer und dem Reinrufen ist blöd und ich fände es prima, wenn ich dies in meine Rechentrainer.app integrieren könnte. Alle Schülerinnen und Schüler der Lerngruppe sehen die gleiche Aufgabe, aber nach einer kurzen Zeit können nur zwei von ihnen die Lösung eingeben.
vs.
Pitwheazle hat geschrieben: Mittwoch 3. Juli 2024, 15:50 Mein Rechenduell ist ja schon getestet und kommt sehr gut an. Der Vorteil ist, dass hier zunächst mal eine Live Wettkampfstimmung entsteht und (...)
Mir ist noch nicht ganz klar, wie das Ergebnis aussehen soll.
Gibt es einen Beamer oder nicht mehr nötig?
Wird noch gerufen oder nicht?
Wenn jeder nur bei sich in der App rumklicken muss, wird ggf. Stimmung verloren gehen.
Andererseits könnten Duelle dann auch außerhalb der Unterrichtszeiten eben online stattfinden.

Den Vorschlag von noisefloor finde ich sinnvoll: Jede App misst für sich, wie lange der Schulende gebraucht hatte, um die Antwort zu geben. Der Server kann darüber entscheiden, welche Antwort schneller kam. Somit hast du das Problem mit der abweichenden Latenz schon abgewehrt.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Pitwheazle
User
Beiträge: 1050
Registriert: Sonntag 19. September 2021, 09:40

Bei meiner Idee wäre der Beamer und die Installation von OpenOffice überflüssig. Auch das Reinrufen und das Eintippen des reingerufenen Ergebnisses empfand ich als nicht optimal. Es stimmt aber, dass das Klicken auf Handys den Wettkampfcharakter einschränkt. Aber jetzt wo ich das schreibe, habe ich eine andere Idee: Es wäre ja eine Möglichkeit, den Rechentrainer so in meine App zu integrieren, dass die Lehrkraft die entsprechende Grafik vom Tablett oder PC mit dem Beamer projeziert und dadurch die OpenOffice Installation (die für viele ein Problem ist) wegfällt.
Pitwheazle
User
Beiträge: 1050
Registriert: Sonntag 19. September 2021, 09:40

noisefloor hat geschrieben: Mittwoch 3. Juli 2024, 18:41 also deinen Rechentrainer macht auch keiner schlecht. Soweit ist das mitbekommen habe richten sich alle Verbesserungsvorschläge und Kritik an den Code, nicht die Applikation und deren Aufgaben an sich.
Ich habe versucht alle (na ja, fast alle) Verbesserungsvorschläge zu berücksichtigen. Wo (und wie) siehst du jetzt noch Änderungsbedarf? Perfekt ist mein Code sicher nicht und vieles könnte man auch anders machen - aber bei welchem Code ist das nicht so.
Pitwheazle
User
Beiträge: 1050
Registriert: Sonntag 19. September 2021, 09:40

noisefloor hat geschrieben: Mittwoch 3. Juli 2024, 17:54 Sinnvoller wäre IMHO nicht der Echtzeit Ansatz, sondern eher sowas wie bei der App "Quizduell", d.h. man sieht eine Aufgabe, hat X Sekunden Zeit, zu antworten (bei Quizduell ist es multiple choice) und je schneller man ist, desto mehr Punkt bekommt man.
Ich spinne hier die Idee mal weiter:
Also mein Rechenduell funktioniert und ich habe es auf Wunsch eines Kollegen auch erweitert. Man kann jetzt nicht nur ein Duell mit angemeldeten Schülerinnen und Schülern machen, sondern z.B. für Vertretungsstunden on the fly eine Liste mit Namen eingeben und mit diesen ein Duell durchführen.
Jetzt aber zurück zu dem Vorschlag von @noisefloor, das so ähnlich aufzubauen wie beim Quizduell. Ich könnte mir vorstellen meinen vorhandenen Code für einen weiteren Ansatz zu nutzen:
Ein Spielleiter meldet sich am Server an und erstellt eine Gruppe. Weitere Nutzer melden sich bei dieser Gruppe an. Der Spielleiter erkennt, wer online ist und startet ein Duell. Die erste Aufgabe wird erstellt, diese ist als Protokoll-Instanz gespeichert. Diese enthält den Aufgabentext, die Lösung(en) und eventuelle Grafiken (das gibt es so schon). Alle Teilnehmer bekommen diese Aufgabe "geschickt" und geben eine Antwort ein, diese wird überprüft, die Zeit dafür wird gestoppt (das ist auch schon vorhanden) und gespeichert. Nach einer bestimmten Zeit wird allen die nächste Aufgabe angezeigt ... Nach 10 Aufgaben werden die einzelnen Zeiten addiert und in eine Rangfoge gebracht.
So, jetzt zu meiner Frage: Geht das? Mir ist nicht klar, wie ich dafür sorgen kann, dass alle Teilnehmer zur gleichen Zeit die gleiche Aufgabe "geschickt" bekommen. Ich könnte mir das so vorstellen wie bei Nachrichtenseiten im Internet, wo der Client eine Nachricht erhält, dass eine neue Nachricht abgerufen werden kann.
Oder, eine andere Idee: Wenn ich das richtig sehe, greifen ja viele auf Smartphones installierte Apps auf Server im Internet zu. Sollte ich darüber nachdenken?
Benutzeravatar
grubenfox
User
Beiträge: 593
Registriert: Freitag 2. Dezember 2022, 15:49

Pitwheazle hat geschrieben: Freitag 25. Oktober 2024, 16:17 Jetzt aber zurück zu dem Vorschlag von @noisefloor, das so ähnlich aufzubauen wie beim Quizduell. Ich könnte mir vorstellen meinen vorhandenen Code für einen weiteren Ansatz zu nutzen:
Ein Spielleiter meldet sich am Server an und erstellt eine Gruppe. Weitere Nutzer melden sich bei dieser Gruppe an. Der Spielleiter erkennt, wer online ist und startet ein Duell. Die erste Aufgabe wird erstellt, diese
Pitwheazle hat geschrieben: Freitag 25. Oktober 2024, 16:17 Oder, eine andere Idee: Wenn ich das richtig sehe, greifen ja viele auf Smartphones installierte Apps auf Server im Internet zu. Sollte ich darüber nachdenken?
Das ist ja beides die gleiche Idee. Ein Server mit dem Clients sprechen. Oder welche Idee ist hier als zweites gemeint? Ich dachte die Anwendung läuft schon irgendwo auf einem Server (der im Internet steht... war da nicht mal was mit Uberspace?)
Pitwheazle hat geschrieben: Freitag 25. Oktober 2024, 16:17 So, jetzt zu meiner Frage: Geht das? Mir ist nicht klar, wie ich dafür sorgen kann, dass alle Teilnehmer zur gleichen Zeit die gleiche Aufgabe "geschickt" bekommen. Ich könnte mir das so vorstellen wie bei Nachrichtenseiten im Internet, wo der Client eine Nachricht erhält, dass eine neue Nachricht abgerufen werden kann.
Jepp, "Websockets" wäre wohl ein gutes Stichwort... (wie bei einem Chat) siehe
https://www.python-forum.de/viewtopic.php?p=425644#p425644
https://www.python-forum.de/viewtopic.php?p=425639#p425639
nezzcarth
User
Beiträge: 1733
Registriert: Samstag 16. April 2011, 12:47

Pitwheazle hat geschrieben: Freitag 25. Oktober 2024, 16:17 Ich könnte mir das so vorstellen wie bei Nachrichtenseiten im Internet, wo der Client eine Nachricht erhält, dass eine neue Nachricht abgerufen werden kann.
Nachrichtenticker kann man unidirektional umsetzen. Im simpelsten Fall läuft bei den Usern im Browser ein kleines Stück JavaScript, das einmal die Minute (oder so) auf dem Server nach Neuigkeiten fragt und die dann ggf. im Browser anzeigt. Und wenn das mal 10 Sekunden länger dauert, stört das auch keinen groß. Also eher so, als würdest du regelmäßig zum Briefkasten gehen und aktiv gucken, ob was da ist. Für dein Anwendungsszenario, so, wie du es formuliert hast, brauchst du aber bidirektionale Kommunikation in Echtgeit. Daher der Vorschlag mit den Websockets.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1205
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

noisefloor hat geschrieben: Mittwoch 3. Juli 2024, 17:54 das Problem hierbei ist die Latenz, wenn du das online machst. Sagen wir mal, es gehen wirklich an beide Clients die Aufgabe gleichzeitig raus - dann heißt das nicht, dass die gleichzeitig ankommen. Du hast ja eine Netzwerklatenz, auf die du null Einfluss hast. Die kann halt gering sein oder erheblich. Also das beide gleichzeitig die Aufgabe gleichzeitig sehen und gleichzeitig antworten (können) ist extrem unwahrscheinlich
Wenn es ein Multiplayer-Spiel wäre, könnte ich die Bedenken noch nachvollziehen, denn da merkt man das sofort. Bei einer Rechentrainer-App kommt es sicherlich nicht auf 100 ms an.

Wenn es um einen Wettbewerb mit Preisgeldern ginge, könnte man sowas online nur mit viel Aufwand veranstalten. Lokal, in einer Halle oder in einer Schule hätte man die Latenz-Probleme nicht. Auch Betrug ließe sich dann leichter unterbinden bzw. erkennen.


Bei einer Online-App würde ich versuchen, den Wettbewerb da raus zu halten. Gibt nur Stress.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
noisefloor
User
Beiträge: 4149
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Bei einer Online-App würde ich versuchen, den Wettbewerb da raus zu halten. Gibt nur Stress.
Der TE hat das ganze aber nun mal als Duell ausgelegt = Wettbewerb. 100ms Latenz vermutlich wirklich egal... ab wie viel es nicht mehr egal ist, ist halt schwer zu sagen.

Den Absatz via Websockets halte ich auch für gangbar, zumal das ja eine etablierte Technik ist und Django es über Django Channels direkt unterstützt.

Gruß, noisefloor
Benutzeravatar
DeaD_EyE
User
Beiträge: 1205
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

noisefloor hat geschrieben: Samstag 26. Oktober 2024, 15:16 Den Absatz via Websockets halte ich auch für gangbar, zumal das ja eine etablierte Technik ist und Django es über Django Channels direkt unterstützt.
Da man beim Browser sehr eingeschenkt ist (Sandbox) kann man nicht direkt Sockets nutzen, also kam mal irgendwann jemand auf die Idee Websockets einzuführen.
Websockets haben wir damals für unsere Radar-App verwendet. Die Daten des Radar-Transceivers sind via Websockets übertragen worden und die Signalverarbeitung fand im Webbrowser mittels JS statt.

Ich habe damals für Python Websockets verwendet. Integration: https://websockets.readthedocs.io/en/st ... jango.html
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten