- Python Environment in Browser laufen lassen -> brauchen wir das wirklich?
- sieht für mich schon so aus, ansonsten kann man unsere Seite super leicht hacken
- PyScript! -> Nächster Schritt: hole py-click inhalt über API und execute das in "py-click" -> PyScript verträgt sich nicht gut mit React -> ist es möglich die Website einfach ohne React zu machen?=
- können wir pyodide direkt verwenden? vllt sogar direkt mit react: https://blog.pyodide.org/posts/react-in-python-with-pyodide/
- Geht das auch einfach ohne React, sondern nur mit HTML, JS und pyscript?
- Wäre dies eine Möglichkeit, dass immer auf dem Server gerechnet wird: https://github.com/openedx/codejail? Im Endeffekt brauchen wir sowieso die Möglichkeit Code sicher auszuführen
- Um Python Abschnitte zu Text zu machen können wir
compile
benutzen: We can pass a multi-line input program to the exec() method with the help of \n. But we need to use the compile() method to compile the program first.
- welche Datenbank
[x] Mongo db checken -> Nope, das machen wir nicht- Postgres mit Json Spalte -> Testen und Dockerisieren
- Hypothesis um dynamische Einträge zu generieren/testen
- wie bekommen wir hypothesis in pyscript/pyodide? -> Benutzen wir überhaupt PyScript? Einfach über micropip probieren
- 100 Questions/Answers
- 1 Datetime Bsp. -> Datetimes sind schwierig darzustellen (.to_json konvertiert diese immer integers, etc.)
- 1 einfaches additives Beispiel
- 1 groupBy Bsp.
- erstelle Standard zum Anlegen von Tests
- vllt. brauchen wir das hier gar nicht: erstelle Skript um anschließend Tests ins Datenbankformat zu bekommen (escape " -> '', alles muss in eine Zeile)! Wir könnten evtl. direkt den code compilen und per json verschicken! Aber eine DB ist vllt doch besser, dann hat man Sachen auch historisiert!
- lade Daten in die Datenbank (hierzu: autoincrement id)
Nützliches:
next step:
- 1 additives Beispiel -> checke ob Flask damit funktioniert -> Frontend bauen!
- lasse expected anzeigen
- css header/css trenne
- Konzept für Challenges
- example 2 ist falsch. Für generisches Template von Python Functions müssen wir auf jeden fall checken ob pd.DataFrame(json.loads(df.to_json())) funktioniert
- Flask Backend dockerisieren und in docker-compose aufnehmen
- evtl hypothesis teil in pyscript/frontend auslagern
- Save bei F5
Nice to Haves:
-
CI/CD
-
https -> so wie bei pegsolitairetrainer.com
- https für Flask?
- Frontend
- Userdata Backend
-
"Stay logged in"-Feature
-
Responsive Design
-
Komplett dockerisiert bzw. Kubernetes
-
Whitepaper über Prediction!
-
Backend
- Postgres Docker Container: bisher sind die Informationen nur im Container gespeichert und dort von Hand eingetragen. Sinnvoll wäre ein Format in dem man die Aufgaben ablegt und ein Skript, das dann automatisch in diesen Container reinschreibt.
- Womit serven wir die Ergebnisse aus dem Docker Container? -> Flask, da wir auch noch Beispiele generieren müssen + das Ergebnis generieren können müssen.
-
Anderes
- Datetimes sind schwierig zu erzeugen und schwierig zu testen, da df.to_json() diese in unix timestamps konvertiert.
-
Text aus editor auslesen
-
Editor ist neues Eingabefeld
-
Code-Highlighting
-
Breite anpassen
-
Editor hat Standardchallenge
-
im Editor definierte ausgaben werden angezeigt, wie ein Jupyter Notebook
-
Ausgabe von python returns irgendwohin
-
Ausgabe von prints irgendwohin (später dann wie jupyter notebook) (schaue hierzu auf write_stdout von py-script stdio.ts und pyterminal.ts)
Basic verständnis von svelte:
- wo lege ich js files ab mit utils
- Komponente kreieren und reusen
- Kombiniere mehrere Komponenten miteinander!
ELO:
-
wir brauchen vermutlich einen regelmäßigen job, der das elo einzelner Challenges updated, ich denke, das geht nicht live, da wir sonst in errors laufen. Dokumentation:
-
dokumentiere wie tabellen erstellt werden
-
dokumentiere wie das elo system funktioniert
-
Steps um die frontend-svelte Anwendung zu bauen:
-
.env-file erstellen (s. frontend-svelte/.env)
-
npm und node muss installiert sein (node: v20.6.0, npm: 9.8.1)
-
Beim Build der Svelte App hat es aus irgendeinem Grund die Proxy Sachen nicht korrekt ersetzt. Checke das. -> ersetzt
-
Bringe die App auf dem Server ohne Docker zum Laufen, anschließend baue einen Container (wahrscheinlich muss in diesem node + nginx laufen aber das müssen wir nochmals checken), in dem man nur das Frontend laufen lassen kann und dann schließe alles zusammen.