P-032026auch persönlich

Anny Platzbuchung.

Bucht für mich einen Lernplatz in der KIT-Bibliothek über anny.eu — wartet darauf, dass Plätze frei werden, und reserviert einen, bevor sich die Schlange bildet.

Versuch selbst, die Freigabe zu schlagen

Das ist der echte Raum — Lehrbuchsammlung, Erd- und erstes Obergeschoss, KIT-Bibliothek. Starte die Uhr und versuch, schneller zu klicken als alle anderen, die denselben Platz wollen.

001. OG

Mit Teppich — Schritte und ein zurückgeschobener Stuhl landen leiser als im Erdgeschoss.

01Hinter einem Regal

Außerhalb der Sichtlinie von Vorbeigehenden, das hilft beim Konzentrieren.

02Ecke

Am toten Ende der Reihe — kaum jemand hat einen Grund, an dir vorbeizulaufen.

  • Bestereine Ecke, hinter einem Regal und im 1. OG, alles gleichzeitig
  • Sehr guthat zwei von den dreien
  • Okayhat nur eins davon
  • Einfachhat keins davon

Freigabe

19:59:54

bis Plätze frei werden

Raum 18
Raum 17
Raum 16
·
Raum 14
Raum 13
Raum 12
WC
Aufzug
Treppen
FreiAusgewählt / vergeben

0 Plätze übrig

Drei Stunden Beobachtung, eine Stunde gezeigt

Die Plätze werden gegen 20:00 freigegeben. Gegen — die genaue Minute schwankt, und sie zu verpassen heißt: kein Platz. Also beginnt der Bot um 17:00 und fragt anny alle 30 Sekunden, ob die Slots offen sind. Fünf Minuten vor und nach jeder halben Stunde, wo die Freigabe tatsächlich landet, geht er auf alle 5 Sekunden runter.

17:00:15:30:4518:00
Anfragen in dieser Stunde
321
Innerhalb der Freigabefenster
241
Größte blinde Lücke
5s

Das ist ein Tausch, kein Geschenk. Konstantes Abfragen ist tatsächlich sparsamer — 121 Anfragen gegen 321 in dieser Stunde — und verteilt sie gleichmäßig über fünfzig Minuten, in denen nichts passiert. Was es nicht kann: die Lücke schließen. Dreißig Sekunden blind genau dann, wenn die Plätze erscheinen, gegen fünf. Am Semesterende sind dreißig Sekunden die ganze Schlange.

Zwei Plätze, gleichzeitig gebucht

00Randbedingung

Eine einzelne Buchung darf fünf Stunden nicht überschreiten, ein Arbeitstag ist länger. Ein ganzer Tag sind also zwei getrennte Reservierungen: 09:00–14:00 und 14:00–18:00.

01Die naive Variante

Erst den Vormittag buchen, dann den Nachmittag. Das klappt in jedem Test und versagt genau dann, wenn es zählt: während die erste Reservierung durchläuft, nehmen alle anderen den Nachmittag, und am Ende hält man einen halben Schreibtisch.

02Was er tut

Beide Reservierungen gehen zusammen raus statt nacheinander, die zweite wartet also nicht auf die erste. Entweder man bekommt den Tag, oder man erfährt sofort, dass man ihn nicht bekommt.

Die Plätze werden außerdem nach einer Prioritätenliste gewählt, nicht einfach der Reihe nach — der erste freie Platz, an dem ich wirklich sitzen möchte, nicht der erste freie Platz.

Wofür der Browser noch da ist

Die erste Version war durchgehend ein Scraper: einloggen, navigieren, das Element finden, klicken, warten, wieder klicken — ein Bot, der einen Menschen spielt. Das geht gut, bis zu den letzten Semesterwochen, wenn alle einen Platz wollen und die Seite zu überlastet ist, um zuverlässig zu rendern. Ein gespielter Mensch kann keine Seite anklicken, die nie fertig lädt.

Also wurde der Browser auf das eine reduziert, worin er wirklich gut ist: durch die Tür kommen. Der Login läuft zweistufig — anny, und dahinter das Konto-System der Universität — und diesen Handshake von Hand nachzubauen hieße, einen Haufen Cookies und Weiterleitungen zu pflegen, worauf ich keine Lust habe. Ein echter Browser macht das einmal pro Stunde und reicht die Session weiter.

Alles danach läuft direkt über die API: fragen, ob eine Zeit frei ist, die Plätze lesen, nach Prioritätenliste wählen, reservieren, absenden. Kein Layout, das brechen kann, nichts, worauf man warten muss — und es funktioniert, während die Seite selbst kaum noch steht.

Wenn er ausfällt, und das tut er

Er läuft als Docker-Container auf einem Server, rund um die Uhr, und meldet sich, wenn etwas fatal schiefgeht: ein Telegram-Bot feuert in dem Moment, in dem das Programm stirbt. Das ist kein Monitoring zum Selbstzweck — es ist der Unterschied zwischen 20:01 Bescheid wissen und es am nächsten Morgen ohne Platz zu merken. Kommt die Nachricht, buche ich von Hand und debugge danach.

Er stürzt weiterhin manchmal ab. Das meiste davon kann ich nicht beheben: der Dienst ist überlastet, seine Antworten sind uneinheitlich, und was ausfällt, liegt jenseits einer API, die mir nicht gehört. Der Bot ist darauf gebaut, sich berechenbar zu verhalten gegenüber Dingen, die es nicht sind.

Ehrlich gesagt: das zu schreiben hat eine ganze Menge Zeit gekostet, und es lief nicht auf Anhieb — die frühen Versionen scheiterten genau so, wie oben beschrieben. Inzwischen läuft er aber hervorragend: keine Bugs, keine Aussetzer, stabil genug, dass ich mir darüber gar keine Gedanken mehr mache. Und er spart mehr Zeit, als man denken würde, denn in der Bibliothek zu lernen ist tatsächlich leichter — bessere Konzentration, weniger Ablenkung als zu Hause, wo die Verbindung schlechter ist und ein großer Monitor für YouTube oder Gaming genauso gut geeignet ist wie fürs Programmieren. Kein Platz in der Bibliothek, nur weil ich gegen 20:00 Uhr beschäftigt war, sollte mich den ganzen Tag kosten können.

Das Repository ist privat. Auf Anfrage gehe ich den Code gerne durch.

Stack

PythonPlaywrightDockerTelegram Bot API
Alle Projekte