Code bei Öffnen des Browsers ausführen

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

Ich nochmal:
Am Anfang des Schulhalbjahres also am 1.Februar und 1.August werden einige Einstellungen in meinem Rechentrainer geändert und schon im Januar bzw. Juli können Schülerinnen und Schüler neue Aufgaben für das nächste Halbjahr rechnen. Der Code dazu wird ausgeführt wenn die Seite "Übersicht" aufgerufen wird. Das funktioniert meistens aber anscheinend nicht immer. Es gibt immer wieder Schülerinnen und Schüler bei denen das neue Halbjahr nicht gestartet wurde. Ich habe nicht rausbekommen warum. Wenn ich den Rechentrainer im Browser aufrufe sehe ich die Startseite und muss die Übersichtseite aufrufen. Irgendwie schaffen Schülerinnen und Schüler es anscheinend dass sie gleich auf die Übersichtseite kommen. Möglicherweise bleibt der Browser auf ihrem Smartphone im Hintergrund geöffnet. Ich suche jetzt eine Möglichkeit, dass mein Code immer ausgeführt wird wenn der Rechentrainer geöffnet wird. Wie geht sowas?
Benutzeravatar
noisefloor
User
Beiträge: 4149
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

dein Rechentrainer arbeitet doch nach dem klassischen Request-Response Prinzip. Heißt: der Schüler ruft eine URL auf und deine Applikation liefert eine HTML-Seite zurück. Keine JavaScript Request im Hintergrund, keine Websockets o.ä.?

Gruß, noisefloor
Benutzeravatar
noisefloor
User
Beiträge: 4149
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Ok. Dann bekommt der Server = der Rechentrainer nicht mit, was im Browser passiert. Das HTTP Protokoll ist "stateles", d.h. der Browser öffnet eine Verbindung, der Server bestätigt die, der Browser schickt einen Response, der Server eine Request, die Verbindung wird abgebaut und das war's dann. Bis eine neue Seite angefordert wird. Wenn man als jetzt die Seite $FOO aufruft, den Browser + Seite offen lässt und in einem halben Jahr oder so diesen wieder in den Vordergrund holt siehst du halt die Seite von vor einem halben Jahr. Egal, wie oft diese sich inzwischen geändert hat. Wenn man die Seite neu lädt, bekommt man natürlich den neuen Inhalt.
Ich suche jetzt eine Möglichkeit, dass mein Code immer ausgeführt wird wenn der Rechentrainer geöffnet wird.
Denkfehler deinerseits: wird er. Sonst käme im Browser ja keine HTML Seite an. Bei dem von dir beschriebenen Szenario _ist_ der Rechentrainer geöffnet. Du könntest mit Sessions arbeiten, das unterstützt Django über das Session-Framework OOTB. Damit kannst du feststellen, wie alt eine Session ist. Habe ich selber aber noch nie genutzt.

Gruß, noisefloor
Benutzeravatar
sparrow
User
Beiträge: 4501
Registriert: Freitag 17. April 2009, 10:28

Anderer Denkfehler: Dieses "es fängt ein neues Schuljahr an" Konstrukt sollte es gar nicht geben.
Pitwheazle
User
Beiträge: 1050
Registriert: Sonntag 19. September 2021, 09:40

Das heißt ich speichere irgendwann das Datum in der Session und überprüfe das irgendwann - und muss noch über das "irgendwann" nachdenken. OK, Danke!
Benutzeravatar
noisefloor
User
Beiträge: 4149
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Plan B: wenn es eine spezielle Seite betrifft, kannst du mittels JavaScript erzwingen, dass die Seite neu geladen wird, wenn sie wieder in den Vordergrund kommt. Mittels Page Visibility API und location.reload sollte das gehen.

Gruß, noisefloor
Zuletzt geändert von noisefloor am Samstag 25. Januar 2025, 17:25, insgesamt 1-mal geändert.
Pitwheazle
User
Beiträge: 1050
Registriert: Sonntag 19. September 2021, 09:40

sparrow hat geschrieben: Samstag 25. Januar 2025, 17:20 Anderer Denkfehler: Dieses "es fängt ein neues Schuljahr an" Konstrukt sollte es gar nicht geben.
Im Profil des Users ist das Schulhalbjahr gespeichert und wird von da in das im Protokoll jeder Aufgabe übernommen. So weiß ich zu welchem Halbjahr die Aufgabe gehört. Und ab dem 1.2. oder 1.8. Wird der Eintrag im Profil des Users geändert wenn es nicht dem aktuellen entspricht ... und auf Wunsch auch schon im Januar bzw. Juli.
Was ist der Denkfehler?
Benutzeravatar
noisefloor
User
Beiträge: 4149
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Im Profil des Users ist das Schulhalbjahr gespeichert
Das kann man jederzeit berechnen, wenn man weiß, wann der Schüler mit der 5. Klasse begonnen hat. Es muss dann nur einen Korrekturmechanismus geben, wenn jemand sitzen bleibt. Aber den müsste es so oder so ja bei dir geben.

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

Na das macht die Sache aber nicht einfacher. Vor allem wenn die Kids schon vor dem Halbjahreswechsel mit den Aufgaben für das nächste Schuljahr anfangen wollen. Die Arbeit im Halbjahr wird auf Wunsch der Lehrperson benotet. Und wenn die Zeugnisnote schon feststeht kann man schon für das nächste Halbjahr vorarbeiten. Außerdem ist es bisher noch selten gelungen, dass Schülerinnen und Schüler im nächsten Schuljahr weitermachen. Wenn die Lehrperson wechselt ist im Normalfall Schluß. Außerdem gibt es Schülerinnen und Schüler die schon in der Grundschule anfangen und das mit dem Sitzenbleiben muss die Lehrperson im Profil des/der Betroffenen ändern. Das ist aber bisher eher noch nicht vorgekommen.
Pitwheazle
User
Beiträge: 1050
Registriert: Sonntag 19. September 2021, 09:40

Pitwheazle hat geschrieben: Samstag 25. Januar 2025, 17:34 Na das macht die Sache aber nicht einfacher. Vor allem wenn die Kids schon vor dem Halbjahreswechsel mit den Aufgaben für das nächste Schulhalbjahr anfangen wollen. Die Arbeit im Halbjahr wird auf Wunsch der Lehrperson benotet. Und wenn die Zeugnisnote schon feststeht kann man schon für das nächste Halbjahr vorarbeiten. Außerdem ist es bisher noch selten gelungen, dass Schülerinnen und Schüler im nächsten Schuljahr weitermachen. Wenn die Lehrperson wechselt ist im Normalfall Schluß. Außerdem gibt es Schülerinnen und Schüler die schon in der Grundschule anfangen und das mit dem Sitzenbleiben muss die Lehrperson im Profil des/der Betroffenen ändern. Das ist aber bisher eher noch nicht vorgekommen.
Benutzeravatar
sparrow
User
Beiträge: 4501
Registriert: Freitag 17. April 2009, 10:28

@Pitwheazle: Das "auf Wunsch auch schon" ist in meinen Augen schon ein sehr deutlicher Hinweis darauf, dass da was nicht stimmen kann.
Was passiert denn, wenn ein Benutzery am 5.2.2000 in der zweiten Klasse ist, das ausprobiert und es dann erst wieder am 5.2.2001 verwendet? Ist er dann im 2. Halbjahr der zweiten Klasse? Ist er dann in der dritten Klasse? Wenn letzteres der Fall ist, wird das doch eh errechnet. Dann braucht es auch das Konstrukt nicht.

Das sind alles Werte, die man errechnen kann. Deshalb ist in meinen Augen das Konstrukt überflüssig und macht es unnötig kompliziert.

Edit: noisefloors Beitrag erst später gesehen: So ist es.

Der Thread klingt halt nach einer Krücke für ein humpelndes Konstrukt.
Pitwheazle
User
Beiträge: 1050
Registriert: Sonntag 19. September 2021, 09:40

Und was machst du mit dem Wunsch das nächste Halbjahr vorzeitig zu beginnen?
... ansonsten muss ich zugeben, dass eure Idee sicher Vorteile hat.
Benutzeravatar
sparrow
User
Beiträge: 4501
Registriert: Freitag 17. April 2009, 10:28

Warum gibst du vor, dass das nur einen Monat vorher möglich sein soll? Warum darf das Lehrery das nicht selbst festlegen? Egal wann?
Dann kann man dem Schülery neben dem aktuellen Umfang ebena auch andere Kategorien zuweisen.

Alternativ sagt man "das Schülery darf jetzt auch das nächste" und anhand von dem Zeitpunkt könnte man nun wieder berechnen, was es darf.
Pitwheazle
User
Beiträge: 1050
Registriert: Sonntag 19. September 2021, 09:40

Es geht hier nicht um das Zuweisen von neuen Aufgabenkategorien. Die Schülerinnen und Schüler müssen sowieso immer alle Aufgabenkategorien die sie bisher kennengelernt haben, üben und zwar möglichst gleichmäßig. Die Lehrperson legt nur fest, ob die Arbeit benotet wird oder nicht und kann eventuell die Anzahl der erwarteten Aufgaben ändern. Vorgabe ist hier 10 Aufgaben pro Woche und Jahrgang. Unter Berücksichtigung der Ferien und eines langsameren Beginns, wären das jetzt kurz vor dem Halbjahreswechsel 1600 Aufgaben (mehr werden es nicht) in 29 zu bearbeitenden Kategorien. Macht mindestens 57 Aufgaben pro Kategorie. Es wird für jede Kategorie ein Prozentwert für erledigte Aufgaben und Fehler berechnet und aus dem Durchschnittswert eine Note.
Noch ein Nachtrag: Nicht die Lehrperson legt fest, ob und wann ein neues Halbjahr begonnen werden kann, das entscheidet die Schülerin/ der Schüler. Die einen müssen noch was für ihre Zeugnisnote machen, die anderen nicht. Das könnte zwar auch schon früher passieren, das macht aber meines Erachtens nicht viel Sinn.
Und noch ein Nachtrag: Ich werde also darüber nachdenken, ob ich für die, Schülerinnen und Schüler, die sich dafür entscheiden, früher mit dem Halbjahr anzufangen, ein Datum speichern und mit diesem zu filtern. Mal sehen, ob ich das hinbekomme.
Benutzeravatar
noisefloor
User
Beiträge: 4149
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

ganz ehrlich: entweder ist das viel zu kompliziert gedacht oder ich verstehe es einfach nicht. Wenn Schüler im Rechentrainer "nur" Aufgaben rechnen sollen, die ihrem Schulstand entsprechen, dann kann die Software das steuern. Dazu ist lediglich das Datum nötig, wenn der Schüler mit der 5. Klasse angefangen hat und zwei Felder, die man ausfüllt, wenn man sitzen geblieben ist (oder kann man öfter als 2x sitzen bleiben?).

Oder man lässt es halt völlig frei und gibt jedem Schüler die Möglichkeit, alle Aufgaben (freiwillig) zu rechnen. Dann kann man wieder nur mit dem Eintrittsdatum in die 5. Klasse sehen, ob jemand Aufgaben rechnet, die die Person noch gar nicht können kann / muss, weil Zukunftsstoff.

Und wenn Aufgaben für höhere Halbjahre gesperrt sind: dann legt der Schüler sich halt einen 2. Fake-Account an, gibt es Eintrittsdatum ein, das weiter in der Vergangenheit liegt und ist damit für den Rechentrainer in einer höhere Klasse. So what. Ich gehe mal davon aus, dass das mit dem Rechentrainer kein Problem ist, 2., 3., 4. Accounts anzulegen.

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

noisefloor hat geschrieben: Sonntag 26. Januar 2025, 09:27 ganz ehrlich: entweder ist das viel zu kompliziert gedacht oder ich verstehe es einfach nicht.
...scheint so. Du hast jetzt soviel Zeit reingesteckt, mir beim Denken zu helfen, was hälst du davon, dass du dich einfach mal beim Rechentrainer anmeldest, es dir anschaust und vielleicht sogar ausprobierst. ich schalte dich auch gerne als Lehrer frei, dann kanst du die Möglichkeiten auch mal von dieser Seite sehen.

Ich versuche es aber nochmal. Ich war 40 Jahre lang Mathelehrer und habe die Erfahrung gemacht, dass einerseits die Schülerinnen und Schüler nicht Kopfrechnen können und wollen. Viele würden 2 mal 10 mit dem Taschenrechner ausrechnen und bei 3,5 mal 100 würde ich das gut der Hälfte, zumindest unserer Klientel, zutrauen.
Andererseits muss für jede neue Unterrichteinheit die Grundlagen teilweise wie neu vermittelt werden. Runden kann auch im 9ten Schulhar nicht mal die Hälte. Ebenso Bruchrechnen. Wenn Bruch und Kommazahl zusammenkommen wird wohl kaum jemand eine Aufgabe lösen können. Ebenso kann nur eine Minderheit Quadratmeter in Quadrtzentimeter umrechnen. Daher habe ich seit 2006 an meinem Programm gefeilt und es wird zwischenzeitlich zumindest von der Konzeption als gut bewertet.
Von mir aus, können auch Fünftklaässer sich an linearen Funktionen oder irrationalen Zahlen probieren. Sie können alles ausprobieren. das Programm hindert sie nicht daran,. Sie machen die Aufgabe auf und wieder zu. Dazu brauchen sie keinen zweiten Account.es wird ihnen aber farblich angezeigt, was sie üben müssen - und nur das wird gewertet. wenn sie die Aufgaben zum Runden und zur Bruchrechnung nicht angehen, bekommen sie auch keine Eins.

Und ansonsten habe ich ja schon geschrieben, dass ich versuchen werde das mit dem Schulhalbjahr anders zu organisieren - danke für die Idee.

Es würde mich freuen dich oder auch andere Unterstützer bei meiner rechentrainer.app begrüßen zu dürfen :)
Benutzeravatar
noisefloor
User
Beiträge: 4149
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

ich glaube, dein letzter Post fast das "Problem" ganz gut zusammen: Didaktik vs. Administration. Ich glaube ungesehen, dass die Aufgaben didaktisch (sehr) gut sind und das Verbesserungen aus vielen Jahren rein geflossen sind. Aber: das ist bei sei einer Applikation nun mal besten falls die halbe Miete. Die andere Hälfte (oder mehr) ist Administration = Nutzerverwaltung, Nutzerrechte, Usability usw. Und im Internet ist das nun mal komplett anders als wenn man das "analog" und dann auch noch für eine in sich abgeschlossene Gruppe (=Klasse macht).

Ich habe das ja schon mal gesagt: dein Anliegen ist top und absolut ehrbar - aber ich glaube, dass die lange den Fokus der Programmierung auf Didaktik gelegt hast und die Administration unterschätzt hast. Das poppt halt irgendwann hoch. Zumal IMHO den administrative Teil sauber und langfristig stabil zu programmieren (viel) mehr Aufwand ist als den didaktischen Teil.

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

Ich muss ja jetzt rausfinden, ob und wenn ja wann, welche User schon mit dem neuen Halbjahr angefangen haben und dabei festgestellt, dass ich immer noch Problem mit dem Nutzen der "timezone" habe. Also das ist mein erster Versuch:

Code: Alles auswählen

def datum_suchen(req):
    liste = Profil.objects.all()
    protokoll = Protokoll.objects.all()
    for profil in liste:
        protokoll = Protokoll.objects.filter(profil = profil, start__gt = datetime(2025,1,1) , schuljahr = "2425", halbjahr = "2" )
        print(profil, ": ", protokoll.count())
        if protokoll.count() > 0:
            erstes = protokoll.first()
            print(profil, ": ", erstes.start)
    return HttpResponse("fertig")
In "protokoll" sind die jeweiligen Aufgaben gespeichert und in "start" wann die Aufgabe erstellt wurde. Die Routine soll mir also das Datum der Erstellung der ersten Aufgabe ausgeben bei der im Januar die Einstellung "halbjahr" = "2" war. Das funktioniert auch soweit, ich bekomme aber den Hinweis:

Code: Alles auswählen

RuntimeWarning: DateTimeField Protokoll.start received a naive datetime (2025-01-01 00:00:00) while time zone support is active.
und der Printbefehl "erstes.start" gibt

Code: Alles auswählen

Username: franz: Franz Musterschüler, 8a :  2025-01-27 15:15:30.560478+00:00
zurück, obwohl auf der Adminseite die richtige Uhrzeit mit "16:15" angezeigt wird. Im model speichere ich das Datum und Uhrzeit mit.

Code: Alles auswählen

start = models.DateTimeField('Start', auto_now_add=True)
Kann mir das mit der "timezone" jemand bitte so erklären dass ich es verstehe? Wird das Datum immer als UMT (GMT) gespeichert und wird das unter Umständen bei der Ausgabe umgewandelt oder muss ich das jetzt umrechnen wenn ich einen Filter erstelle?
Antworten