====== Planung HS 2023 ====== ++++2M| Ganzes Semester: [[talit:projekte|TALIT-Projekt]] === Projekte === sca: * Rico: [[https://github.com/NEDBOY07/Basic_Binary]] * Johannes: [[https://github.com/jostoelz/Talit-Programmier-Projekt-2D|]] * Lorenzo: [[https://github.com/Louenzo/Tetris|Tetris mit PyGame]] * Bernardo: [[https://github.com/Agar-Willson/Too-Perfect-World|Too Perfect World mit PyGame (original Game)]] * Kim: [[https://github.com/kimngo01/tower_defense_game|Tower Defense, PyGame]] hof: * Joris: [[https://github.com/jocre347/best-editor-talit-project|Python-Editor mit Python]] * Dylan: [[https://github.com/dylan366/brainfuck_interpreter|Brainfuck-Editor]] * Andrin: [[https://github.com/Andrinus/HW-WS|Hausaufgaben-Website]] * Maia: [[https://github.com/teluls/voci-memory|Memory-Website, Voci lernen, Flask-Server]] * Alissa: [[https://github.com/Ameisehuhn777/Game|TicTacToe als Webgame]] === 14.08.2023 === * Start Projekte * Ziel: Thema finden, absegnen lassen, Betreuer finden (siehe [[talit:projekte|genaues Vorgehen hier]]) === 28.08.2023 === == sca == * alle anwesend * arbeiten mit "Issues": * sowohl StudentIn als auch Lehrperson erstellen * regelmässige **git Commits**: * mehrere pro Woche * immer auch pushen * muss unaufgefordert funktionieren * Auftrag: * erstelle erste Issues, z.B. "Plan v01" * füge hinzu Liste mit Punkten, die abzuarbeiten sind (in passender Reihenfolge). Füge am Ende in der Liste die optionalen Punkte an, notiere dahinter "(optional)". ++++ ++++3M Übersicht| Zwei Module: * Modul [[talit:python_advanced_problems]] bei A. Schärer: * Gruppe A: 14.08.2023 bis und mit 30.10.2023 (10 Lektionen) * Gruppe B: 06.11.2023 bis und mit 15.1.2023 (9 Lektionen) * Modul [[talit:spatial|Information Retrieval & Spatial Queries]] bei T. Hofmann: * Gruppe B: 14.08.2023 bis und mit 30.10.2023 (10 Lektionen) * Gruppe A: 06.11.2023 bis und mit 15.1.2023 (9 Lektionen) **Gruppe A:** * Kradolfer Hanna 3Mdz * Kreis Jona 3Mc * Tibisch Jonas 3Mdz * Herzig Laurin 3Mez * Scherle Livia 3Mez **Gruppe B:** * Horn Dimitri 3Mc * Küng Dario 3Mdz * Reinhardt Enny 3Mdz * Brun Leonardo 3Mez * Tran Lukas 4Ma ++++ ++++3M Schärer| Link zum Modul: [[talit:python_advanced_problems]] === Gruppe A === == 14.08.2023 (L1) == * in Gruppe zusammensitzen * selbständig arbeiten, da LP beschäftigt * **Auftrag 1** ([[talit:python_advanced_problems]]) * **HA:** Auftrag fertig == 21.08.2023 (L2) == * Auftrag 2 (einfache DGL) * HA: Auftrag fertig == 28.08.2023 (L3) == * Auftrag 3 (Bewegungsgleichungen) * HA: Auftrag fertig == 04.09.2023 (L4) == * [[talit:python_advanced_problems#auftrag_4eigener_dgl-solver]] == 11.09.2023 (L5) == * **GitHub Repo** zu diesem Modul erstellen und mit sca teilen. * **Auftrag 5: Game of Life v01** * **HA:** Auftrag fertig bis Freitag, auf GitHub gepushed und Nachricht an sca == 18.09.2023 (L6) == * Game of Life Version v02 == 25.09.2023 (L7) == * Game of Life Version v03 * Rückmeldung zu v02: * **Teste Code sinnvoll**! * Random Anfangsbedingungen sind keine gute Wahl * Wähle Anfangsbedingungen, von denen du genau weisst, wie sich Welt entwickeln soll. * Beispiel Glider: einfach zum Überprüfen, ob Code richtig funktioniert * (noch besser: Testfunktion schreiben, die mehrere Fälle testet und True / False zurückgibt) * View Klasse nur von jemandem gemacht == 02.10.2023 (L8) == Verwende mein Repo: "flask\_encryption\_tutorial" * Tutorial Flask: Einfache Server-based Website erstellen, z.B Encryption * **HA:** Anfangen mit Game of Life Web (mit Flask) == HERBSTFERIEN == == 23.10.2023 (L9) == * Weiter an Game of Live Web * fertig machen als HA == 30.10.2023 (L10) == Laurin übernimmt als Lehrer === Gruppe B === == 06.11.2023 (L1) == * in Gruppe zusammensitzen * selbständig arbeiten, da LP beschäftigt * **Auftrag 1** ([[talit:python_advanced_problems]]) * **HA:** Auftrag fertig == 13.11.2023 (L2) == Auftrag II (DGL) == 20.11.2023 (L3) == Auftrag III (DGL) == 27.11.2023 (L4) == Game of Live (Version 1) (Auftrag "Eigener DGL-Solver" wird (für Moment?) übersprungen) == 04.12.2023 (L5) == == 11.12.2023 (L6) == Game of Life: Modellierung besprechen, verbesserte Version programmieren == 18.12.2023 (L7) == [[talit:flask_webserver|Flask-Tutorial]] Programmiere eine einfache Website, die mit dem Server kommuniziert Ideen: * Einfache Caesar-Verschlüsselung: Wort eingeben, wird an Server gesendet, dort verschlüsselt, zurückgeschickt und angezeigt * Taschenrechner, bei dem nur auf Server gerechnet wird * ... == WEIHNACHTSFERIEN == == 08.01.2024 (L8) == == 15.01.2024 (L9) == ++++ ++++3M Hofmann| Link zum Modul: [[talit:spatial|Information Retrieval & Spatial Queries]] - Wie rufen wir Daten effizient ab? Wie funktioniert das bei sehr grossen Datenmengen? Wie, wenn die Suchanfrage eine geometrische Grösse ist? === Gruppe B === == 14.08.2023 (L1) == * in Gruppe zusammensitzen * selbständig arbeiten, da LP beschäftigt * **Aufgaben 1/2a/2b** * **HA:** Auftrag fertig == 21.08.2023 (L2) == * Aufgaben 1&2 besprechen * Range queries (Aufgaben 3) besprechen und lösen * ev. preview auf Spatial Queries / Quadtrees == 28.08.2023 (L3) == == 04.09.2023 (L4) == == 11.09.2023 (L5) == == 18.09.2023 (L6) == * Basic Binary Search Tree (BST) zum laufen kriegen [[https://github.com/tkilla77/ksr_talit_indexing/blob/main/bst.ipynb|Notebook]] * Übertragen auf 140k Dataset von http://download.geonames.org/export/dump/ (Cities500) * **HA**: github repo mit BST, das im 140k Dataset in weniger als 0.1s eine Range-Query nach Bevölkerungszahl ausführt. * **Teilen mit hof@ bis Freitag.** == 25.09.2023 (L7) == * KD-Tree: Theorie, Life-Coding Session == 02.10.2023 (L8) == * KD-Tree auf dem mittleren oder grossen Dataset zum laufen bringen * Optimierungen * Metriken: Tiefe des Trees, Laufzeit, Speicherbedarf - Schreibe eine Funktion `tree_height(node)`, die rekursiv die maximale Höhe des Baums berechnet. - Wie viel grösser ist die Höhe im Vergleich zum Optimum? Ist das ein Problem? - Verwende die `%time` und `%timeit` iPython magics, um die Laufzeit zu messen (Baum bauen, Query) * Wie beeinflusst der Median-Algorithmus die Tiefe und Laufzeit? - Entwickle Strategien, um eine geringere Tiefe zu erreichen, und teste sie aus. - Randomisierung? - Sortieren und Median finden auf jeder Ebene? * Speicherbedarf für Build-Tree? == HERBSTFERIEN == == 23.10.2023 (L9) == * Schritt zurück: wie funktioniert Indexing für Text-Dokumente * Query, Retrieval, Ranking * Invertierter Index * 2 Aufgaben in [[https://github.com/tkilla77/ksr_talit_indexing/blob/main/04_text_indexing.ipynb|04_text_indexing.ipynb]] lösen == 30.10.2023 (L10) == * Text Indexing (Wiederholung): * Aufgabe: Indexiere alle {{:talit:movies_1985.csv.zip|Wikipedia-Artikel über Filme von 1985}} (387 Artikel, 0.7MB) * Die Artikel sind im CSV-Format mit zwei Spalten: Wikipedia URL, Artikeltext (Deutsch) * Finde heraus, in welchem epischen Film ein _DeLorean_-Sportwagen eine Rolle spielt (yup, Sie erleben hier fächerübergreifende Bildung!). * Mehr Daten unter https://if.ksr.ch/talit/indexing/ * Ranking * Implementiere eine Suche, bei der die Suchresultate die Vereinigung (`set.union()`) aller Resultate für jeden Term der Query bilden. * Die Suche nach `Michael Fox` gibt eine Vielzahl von Suchresultaten zurück - weshalb? * Wir möchten Dokumente, die `fox` enthalten, höher einstufen, als Dokumente, die `michael` enthalten, weil zweiteres in viel mehr Dokumenten vorkommt. * Enters [[wpde>Tf-idf-Maß#Inverse_Dokumenthäufigkeit|Inverse Document Frequency]] (IDF): ein Mass dafür, wie spezifisch ein Term für einen Dokumentenkorpus ist. Grundidee: bei $n$ Dokumenten beträgt die IDF $idf(t) = \frac{n}{countDocs(t)}$, wobei `countDocs` angibt, wieviele Dokumente den Term $t$ enthalten. Ein Term, der in jedem Dokument vorkommt, hat das Gewicht $1$, ein Term, der maximal spezifisch ist und nur in einem Dokument vorkommt, hat das Gewicht $n$. * Erste Aufgabe: Berechne die Liste der Terme und deren Vorkommenshäufigkeit, sortiert nach letzerer. * Plotte die Vorkommenshäufigkeit mit pyplot. Was fällt auf? * Überlege, welche mathematische Transformation uns helfen könnte, die IDF etwas praktischer zu machen. === Gruppe A === == 06.11.2023 (L1) == * [[talit:spatial]] Intro lesen * Jupyter Notebook in frischem Repository erstellen, Repo mit `hof@`teilen * **Aufgaben 1/2/3a** lösen * 3b Lösung disktutieren == 13.11.2023 (L2) == * [[talit:spatial#separater_index|Aufgabe 3a]] * Zeit messen (im Notebook) für eine Linearsuche im 140k Dataset. * [[talit:spatial#aufgabe_3b|Aufgabe 3b]]: Index-Erstellung * Lösung diskutieren * Implementieren * mit Toydataset testen / Zeit messen * mit dem 140k / 12M Dataset * wie lange dauert die Index-Erstellung? * wie lange dauert der Zugriff * Nach wiewielen Zugriffen ist die Index-Erstellung amortisiert (im Vergleich zur Linearsuche)? == 20.11.2023 (L3) == * [[talit:indexing|Text Indexing]]: Aufgaben 1-3 == 27.11.2023 (L4) == * [[talit:indexing|Text Indexing]]: Aufgabe 4: Multiple Tokens == 04.12.2023 (L5) == * Abschluss [[talit:indexing|Text Indexing]]: Aufgabe 4: Ranking with IDF == 11.12.2023 (L6) == * Zurück zu unserem Geo-Dataset und [[talit:spatial|Spatial Indexing]]. * Wir möchten nicht nur nach Text-Werten suchen, die genau übereinstimmen, sondern nach einem Bereich (Range). * Beispielsweise möchten wir alle Städte finden, die zwischen 10 und 15 Mio Einwohner haben. * Range queries ([[talit:spatial#range_queries|Aufgaben 4a & 4b]]) besprechen und lösen. * ev. Vorschau auf Binary Search Trees. == 18.12.2023 (L7) == * [[talit:spatial#graph_visualization|Graph Visualization]] inkl. Christmas BSTree Challenge == WEIHNACHTSFERIEN == == 08.01.2024 (L8) == * KD-Tree: Theorie, Life-Coding Session * Auf Toy-Dataset implementieren == 15.01.2024 (L9) == * KD-Tree auf dem mittleren oder grossen Dataset zum laufen bringen * Optimierungen * Metriken: Tiefe des Trees, Laufzeit, Speicherbedarf - Schreibe eine Funktion `tree_height(node)`, die rekursiv die maximale Höhe des Baums berechnet. - Wie viel grösser ist die Höhe im Vergleich zum Optimum? Ist das ein Problem? - Verwende die `%time` und `%timeit` iPython magics, um die Laufzeit zu messen (Baum bauen, Query) * Wie beeinflusst der Median-Algorithmus die Tiefe und Laufzeit? - Entwickle Strategien, um eine geringere Tiefe zu erreichen, und teste sie aus. - Randomisierung? - Sortieren und Median finden auf jeder Ebene? * Speicherbedarf für Build-Tree? ++++