 Gut, würde ich sagen, fangen wir mal an. Also, mein Name ist Secure, schön, dass ihr zu meinem Vortrag gekommen seid. In diesem Vortrag geht es, wie ihr dem Titel natürlich schon entnehmen konntet, um Pizza. Hier ist ein Foto der ersten Rechnung, die wir so erhalten haben. Wir bestellen seit zwei Jahren Pizza, wöchentlich, immer Donnerstagabend. Und dazu muss man wissen, wer ist eigentlich wir. Das ist der Chaos Treff Heidelberg, bei dem ich seit einigen Jahren Mitglied bin. Wir nennen uns auch Non-MEV. Falls ihr übrigens Fragen habt, dürft ihr gerne fragen. Jetzt wäre zum Beispiel eine angebrachte Frage, warum heißt ja Non-MEV. Die Antwort darauf ist, unser Vereinsname lautete zu Beginn, also zur Gründung, Vereinen zur Förderung chaotischer Zustände. Das Amtsgericht wollte das dann aber nicht so ganz zulassen mit der Begründung. Ich zitiere, chaotische Zustände sind nicht förderungswürdig. Wir dachten dann, wenn es der Name nicht sein kann, dann halt gar keiner. Und deswegen heißen wir jetzt Non-EM. Der Non-MEV beziehungsweise der Chaos Treff Heidelberg, der Verein kam erst später, trifft sich seit fast zehn Jahren, jede Woche Donnerstags. Wir haben angefangen, uns in einem Restaurant zu treffen, sind dann in ein Bistro gewechselt, sind dann zu den Heidelberger Amatschörfunkeln gewechselt. Deren Gebäude wurde dann abgerissen. Inzwischen sind wir bei der Uni Heidelberg. Wie ihr vielleicht gemerkt habt, erst Restaurant, dann Bistro, da waren wir gut versorgt. Dann die Amatschörfunke, da konnten wir immer grillen draußen. Aber an der Uni ist uns leider alles das nicht mehr möglich. Deswegen sieht es bei uns meistens Donnerstag so aus. Wir bestellen uns Pizza derzeit von Hallo Pizza. Und ja, verspeisen die dann neben dem ganzen anderen Zeug, was wir sonst doch so machen beim Chaos Treff. Wir haben dazu mehrere Pizzadienste durchprobiert. Hier ist ein Auszug aus der Wikiseite Pizza. Wir hatten so circa fünf Stück aus der Umgebung. Manche davon waren okay. Bei manchen hatten wir schon beim Bestellen über Telefon. Die hatten kein Internetformular. Beim Bestellen über Telefon hatten wir schon Sprachpartiären. Und das wurde nicht besser, die Erfahrung. Wir sind dann bei einem Pizzadienste hängen geblieben und das ist Hallo Pizza. Habt ihr vielleicht auch schon an dem Logo erkannt, dass das so ein bisschen daran angelehnt ist. Das heißt allerdings nicht, dass Hallo Pizza gut ist. Was ihr da oben seht, ist die Telefonnummer von unserem Chaos Treff-Telefon. Die hat die Vorwahl 06201. Woran liegt das? Es liegt daran, dass bei ZipGate, einem Zip-Provider, wenn man sich dort registriert mit der Adresse, dann ist der Wohnort dafür ausschlaggebend, welche Vorwahl man für seine Festnennznummer bekommt. 06201 ist Weinheim, weil der Survivor, der diese Telefonnummer registriert hat, eben in Weinheim wohnt. Im Berg, wohin wir bestellt haben, hat man allerdings die Vorwahl 06221. Jetzt dachte sich Hallo Pizza, ist freundlich, wie sie sind, die haben sich bestimmt vertippt und haben die Telefonnummer geändert bei unserer Bestellung, haben es dann nicht geschafft, unseren Raum an der Uni zu finden und sich gewundert, wieso sie, wenn sie die Nummer gewählt haben, keinen Anschluss unter dieser Nummer erhielten. Das ist nicht nur einmal passiert. Wir haben dann daraus gelernt und geben fortan einfach nur noch Mobilfunknummern an. Erkennen die keine vertipperautomatisch. Gut, wie bestellt man denn jetzt eigentlich Pizza zusammen? Wir haben ganz am Anfang gedacht, okay, wir bestellen, wer macht das? Dann hat sich jemand bereit erklärt und hat einfach die Pizza-Bestellungen gesammelt. Er saß zu am Computer, alle haben so gesagt, ich möchte diese Pizza, ich möchte jene. Wie ihr euch aber vorstellen könnt, ist das ein zeitaufwendiger Prozess und es nervt und es muss halt immer jemand da sein. Sobald es mal einer gemacht hat, ja, also das wollten wir nicht so beibehalten. Wir haben uns dann gedacht, wie kann man das verbessern? Wir haben dann eine Bestellung im Wiki angefangen. Das heißt, wir haben immer so ein Abschnitt gemacht auf dieser Wiki-Seite Pizza für das jeweilige Datum. Dort hat dann jeder reingeschrieben, was er haben möchte, wie viel das kostet und den jeweiligen Nickname. Und da wurde es am Ende von einem bestellt und abgeschickt. Damit gibt es jetzt mehrere Probleme. Wir schon sehen können, ich hoffe, man kann es lesen. In der zweiten Zeile steht Hallo Pizza, Hawaii und in der vorletzten Zeile steht Pizza Olymp normal. Das ist aber dasselbe. Also die Pizza Größen heißen eben Hallo bei Hallo Pizza und das bedeutet eigentlich normal. Das heißt, es gibt mehrere Varianten, wie man so seine Wünsche da ausdrucken kann. Auch ist die Reihenfolge der Zutaten nicht irgendwie deterministisch und die Namen auch nicht, weil bei Hallo Pizza heißen halt die Zutaten oftmals frischer Knoblauch oder frische Paprika. Ich frage mich, wieso es bei Zwiebeln und dem ganzen Rest nicht dabei steht, aber das ist schon okay. Und im Wiki schreibt man dann aber nicht immer so frischer Knoblauch, sondern halt ja, Pizza mit Knoblauch. Und das Problem ist dann, dass der Bestellende immer diese Bestellung sozusagen verarbeiten muss und das Richtige auswählen muss. Und das ist nicht so einfach. Wir hatten dann immer wieder Rückfragen und so weiter. Und bevor wir uns da jetzt irgendwie so ein standardisiertes Pizza Format ausgedacht haben, haben wir gedacht, können wir irgendwie besser machen. Die Bestellung im Wiki war im Übrigen auch die vielfach aufgetretenen Merchkonflikte. Das heißt, wenn zwei Leute oder mehrere Leute gleichzeitig an diesem einen Abschnitt rumdoktern, hat man sehr schnell Merchkonflikte bei Media Wiki, die auch verhältnismäßig schwierig aufzulösen, gerade wenn es irgendwie so zwei oder drei Leute oder noch mehr gleichzeitig sind. Also kurz und gut, das ist auch keine gute Lösung gewesen. Der nächste Versuch war dann eine Bestellung am gemeinsamen Rechner. Das heißt, jemand brachte ein altes Notebook mit. Das haben wir dann vorne aufgestellt und es nach der Reihe jeder hingelaufen, hat seine Bestellung da eingehakt. Am Ende hatten wir einen großen Warenkorb mit ganz vielen Pizzen drin und dann haben wir das bestellt. Funktioniert so weit ganz gut, hat aber natürlich auch wieder Probleme. Problem Nummer eins, wir brauchen einen gemeinsamen Rechner. Es ist also nicht so, dass wir immer alle um dieselbe Uhrzeit zum Chaos Treff kommen. Und wenn derjenige mit dem Pizza Rechner gerade mal eine Stunde später kommt, ist das ganz schlecht für alle anderen, die dann nämlich sehr hungrig werden. Der Rechner muss da hinlaufen und seine Bestellung eingeben. Und wenn irgendwie mehr Leute das gleichzeitig machen wollen, bindet sich eine Schlange und dann vergessen es manche Leute. Man muss man nochmal aufrufen dazu. Ist also auch alles irgendwie nicht so super geeignet. Irgendwann hatte dann Survivor eine Idee. Er sagte, eigentlich wollen wir so einen gemeinsamen Warenkorb. Und ich meine, wie wird der Warenkorb bestimmt über das Session Cookie? Dann fragte er also, was passierte, wenn wir jetzt das Session Cookie übertragen. Er also meldet sich bei Hallo Pizza an. Schaut in seinen Cookie Manager, gibt mir das Session Cookie. Ich trage es bei mir ein, gehe rein, habe einen leeren Warenkorb. So weit, so gut. Dann klickt er sich eine Pizza dazu, ich mache Reload. Und bei mir ist es ja auch cool. Das dachten wir so, cool. Jetzt haben wir das Problem gelöst. Und tatsächlich passierte dann erst mal eine Woche nichts. Aber bei der nächsten Woche haben wir uns dann so eine Apache-Config zusammengebaut als Proxy. Das heißt, wir haben einen Rechner beim Chaos Treff, der immer steht, so ein kleiner Router. Und da haben wir ein Apache Server installiert mit einer bestimmten Konfiguration, der einfach alle Request, die er bekommen hat, an hallopizza.de weitergeleitet hat und dabei eben das Session Cookie untergejubelt hat. Wie sieht das Ganze aus? So eine Apache-Config kennen sicherlich die meisten von euch. Und das Oberrace ist alles Standardkram. Da unten kommen dann diese beiden Proxy-Direktiven. Und man braucht tatsächlich noch ein bisschen mehr. Also es war nicht so einfach. Ich hatte gehofft, na, ich installiere jetzt mal schnell diesen Apache. Und dann bestellen wir die Pizza. Ich habe das auch noch mal manuell bestellt. Und ein paar Stunden später war die Apache-Config fertig. Das liegt daran, dass man das hier alles brauchte. Das in der Mitte ist so eine Substitute, also eine Ersetzungsregel, die einfach hallopizza.de in die IP hat, also unseres Routers umsetzt, damit die Links alle funktionieren. Aber damit funktioniert er es nicht. Und man sah nicht so ganz warum. Und es lag dann letztendlich daran, dass hallopizza eben G-SIP benutzt. Und dafür braucht man dann diese kryptische Set-Output-Filter-Direktive, die zuerst mal das G-SIP aufmacht, dann wieder in G-SIP verpackt. Und die ganz letzte Zeile da unten ist die kritische, die sorgt nämlich dafür, dass einfach das Cookie ersetzt wird. Es liefern also so ab. Der erste, der zum Chaos-Traff kam und den Router angemacht hat, hat sich bei hallopizza.de angemeldet, hat das Session Cookie genommen, hat es in den Apache-Config gehauen und den Apache neu gestartet. Und ab dann konnte man eben, indem man auf unsere Router-IP-Adresse zugegriffen hat, alle mit einem gemeinsamen Warenkorb bestellen. Wir dachten so, cool, das funktioniert ja gut. Es funktionierte auch gut. Die ersten zwei Wochen. Und dann fiel uns so was auf. Wir hatten, ich glaube, das war die zweite oder dritte Woche, als wir das bestellt haben. Und wir kontrollierten so die Bestellung, als alle fertig waren. Und irgendwie waren da Pizzen drin, die hatte keiner bestellt. Und dafür fehlten Pizzen, die eigentlich andere bestellt hatten. Und wir dachten so, hm. Okay, haben das dann in Ordnung gebracht, so alle nochmal Rücksprache gehalten, so stimmt die Bestellung jetzt wirklich, das funktioniert. Dann haben wir das die Woche darauf nochmal gemacht und dachten so, ja, vielleicht so ein Einmalproblem, wer weiß, probieren wir einfach nochmal. Und hatten nicht ganz dasselbe Problem. Also wir hatten die Bestellung rausgeschickt und soweit ist uns nichts aufgefallen. Aber als dann die Pizzen tatsächlich ankamen, war da von so eine komplett ohne Belag und andere waren gar nicht dabei. Und wir dachten so, hm, da stimmt was nicht. Wir haben dann nachgeschaut in der Bestellbestätigung und auf der Rechnung, war das genauso, wie wir es geliefert bekommen haben, dass das Problem bei uns liegt. Wir haben dann gedacht, okay, die Probleme treten irgendwie nur, auch wenn man das gleichzeitig benutzt, haben es dann noch einmal probiert und gesagt so, bitte immer nur einer gleichzeitig, aber wenn man so mit bitte nur immer einer gleichzeitig bei einer Veranstaltung mit irgendwie 20 Nerds sagt und alle sitzen am Computer und keiner kriegt das mit, das funktioniert nicht gut. Und dann haben wir gesagt, okay, erst mal wieder mündliche Abstrahler, wir lassen das erst mal und haben dann wieder weiterhin mündlich bestellt. Also heißt dann, ne, einer klickt die Bestellung zusammen, über das Irk oder mündlich oder im Wiki und wie auch immer wird das dann, ja, aber umständlich. So, irgendwann kamen dann die berühmten letzten Worte von MXF, also eigentlich bräuchte man doch da nur ein bisschen Perl, da müsste man doch einfach nur, weil du willst ja nur eine Connection gleichzeitig haben und machst da halt das immer nur einer zugreifen, auch nicht so, ja, komm, mach mal. Hat er dann nicht gemacht? Wer ihn kennt, weiß auch, dass das normal ist, aber an der Idee war was dran, ne, er hat das dann immer wieder mal wiederholt, so, alle paar Wochen so, komm, mach doch mal ein bisschen Perl, ne, geht ganz einfach. Und am 23.12. war es dann soweit. Mehr Druck sehen und ich, saßen also beim Chaos-Treff, ich weiß gar nicht, was die anderen gemacht hatten, okay, und wir waren irgendwie relativ schnell alleine und saßen dann so zusammen und Xen fragte mich, du, was war eigentlich das Problem mit der Pizza-Bestellung? Und ich erklärte ihm das so, ja, also es funktioniert, ne, aber wenn man gleichzeitig darauf zugreift, gibt's irgendwie Probleme und dann geht der Warenkorb kaputt und wir wollen das deswegen nicht machen und so, aber Mike hat gesagt, man könnte damit ein bisschen Perl was machen und so, aber bin ich noch nicht dazugekommen, hab ich irgendwie auch nicht so viel Lust. Und Xen meinte dann so, Spaß ist halber, ach, ein bisschen Perl ist eine gute Idee, weißt du, dann nehmen wir einfach die Hallo-Pizza-Website, also eins, wie halt mit dem Proxy das so ist und tauschen einfach das Logo von Hallo-Pizza durch Loll-Pizza aus, oder irgend sowas, ja, und ich so, oh, voll eine gute Idee und wir lachen uns dann so 30 Minuten darüber kaputt, was man also alles machen könnte und so, und dann entstand dieses Logo, ja, das war so der Hauptmotivator und wenige Stunden später passierte dann das, loll-pizza.de habe ich mir einfach mal geklickt, weil ich so die Idee gut fand und ja, also die Domain gehörte dann mir und ich richtete das so ein und ich greif mal ein bisschen vorhin weg, als dann nächste Woche nämlich alle zum Chaos-Trip kamen, habe ich gesagt, okay, und zum Pizza bestellen geht der jetzt einfach auf loll-pizza.de und alle so, okay, und dachten sich so, dass es bestimmt im Internet DNS eingetragen oder so und mein, so, ja, muss ich dann eigenen DNS-Waffe einstellen oder so und ich so, nee, die Domain gehört mir, so, schau doch mal nach, ja und dann dachten die alle so, okay, wir haben das Splitview-DNS eingetragen, die ist extern und bei uns ist die auf dem Router oder so und nein, ich habe halt einfach die private IP ins globale DNS ich meine, wen stört denn das? Es ist halt eine Sache, die läuft halt nur donnerstags bei uns beim Chaos-Trip da kann man das mal machen, ja, also manche Leute haben da echt Probleme mit gehabt, aber es funktioniert gut und jetzt haben wir so einen schön klingenden DNS-Namen und immer wenn ich mich auf dem Router anmelde um was zu konfigurieren, sage ich, es ist harut at loll-pizza.de und grins so ein bisschen ehrlich ist cool so, wenige Stunden später am besagten 23.12. hatten wir die erste funktionierende Version funktionierend heißt, in dem Fall es gab keine gleichzeitig Bestellung das war ja das Problem, was wir da lösen wollten dafür gab es allerdings am Ende eine Übersichtsseite wie läuft es also ab? man geht einfach in seinem Browser auf loll-pizza.de und jeder Benutzer kriegt dann direkt den Log, sofern nicht gerade jemand anders bestellt Benutzer werden von der IP-Adresse abhängig gemacht das kann man groß gut machen, weil wir eben so ein Pizzer haben und alle intern funktioniert ganz gut und dann ganz am Ende, wenn man gesagt hat, dass man fertig ist kriegen auch wieder andere Leute den Log und man gibt seinen Namen ein und wenn man dann das Geld auf den Pizzerstapel gelegt hat setzt man seinen bezahlt Fleck auf ja und wenn dann jemand gesehen hat, ok, alle haben bezahlt dann kann man ja jetzt die Bestellung abschicken sieht dann so aus ich hab mal hier so ein Screenshot von dieser Hallo-Pizza-Seite also so sieht es tatsächlich genau aus wir haben da so oben ein bisschen html eingefügt wo wir schon die Möglichkeit hatten jetzt so ein bisschen kleinen Pearl-Programm ist viel besser als mit so einem Proxy und da steht dann halt oben für wie viel Euroman gerade bestellt hat, das ist einfach die Warenkorb Endsumme die Differenz zwischen der vorherigen und der jetzigen Bestellung und oben dieser formschöne rote Button sagt halt, ich bin fertig und dann kann der Nächste bestellen wie ihr schon seht, ist dieser Hallo-Pizza-Seite unglaublich überladen also auf dem Screenshot sieht man halt so genau ein Pizza-Angebot und der Rest Riesenbild in Anspruch genommen was man nicht sieht auf diesem Screenshot ist, dass diese Käse-Stückchen tatsächlich animiert sind und im Winter haben die so Schneeflocken die machen auch Geräusche also da sind Flash-Animationen, Sounds massenhaft Ajax drauf das ist alles ganz schlimm und was es noch schlimmer macht ist dass wir an der Uni trotz der 10 Gigabit Anbindung der Uni irgendwie über dieses Cisco VPN müssen über 10 Jahre alter Hardware läuft und wir deswegen maximal Raten von 150K bekommen und die Latence nicht signifikant besser ist als was man sich so vorstellen könnte das heißt, wir haben eine unglaublich schlechte Leitung also HSDPI ist oftmals schneller und dann kommt so eine Seite und da wartet man halt auf jeden Klick ewig so sah das also aus und dann am Ende, wenn alle fertig waren kommen auf diese Bestellübersicht-Seite das ist übrigens tatsächlich ein Screenshot von dem ersten Mal, wo wir das erfolgreich eingesetzt haben in der linken Spalte einfach der Betrag für die jeweilige Person, in der mittleren Spalte steht der Nickname oder eben, wie man da unten sieht, die IP-Adresse und in der rechten Spalte ist halt so eine bezahlt Abhaark-Möglichkeit wenn man auf diesen Button klickt, dann hat man eben bezahlt so, so weit so gut und dann war es so das hier ist die Meldung, die kommt, wenn gerade jemand anders bestellt und es war also so 20 Uhr 15 beim ersten Mal als wir das bestellen wollten und normalerweise bestellen wir um die Zeit eben die Pizza und ich fragte so in die Runde habt ihr alle bestellt, kann ich es abschicken keine Antwort hat okay, dachte ich, so, haben alle bestellt und dann klick ich eben so auf Bestellungen jetzt absenden und dann kommt diese Meldung und ich dachte so, hey, das hat gerade keine Widerspruch geleistet ja, wer ist denn das jetzt und fragt also noch mal in die Runde, hey, wer bestellt denn gerade ich will jetzt abschicken, keiner meldet sich ich schau in Server-Lock-File und sehe so eine IP-Adresse auf, ist aus China okay was ist da passiert irgendein so ein chinesischer Botnetz-Rechner hat eben unsere IP zufällig gescannt und hat jetzt den Pizza-Lock und wir müssen jetzt warten bis der gesagt hat, er ist fertig damit wir die Bestellung abschicken können das war also so ein bisschen unvorteilhaft was es nicht besser gemacht hat war, dass irgendwie so 15 Hymns wir genirts um mich rumsaßen und gesagt haben hast du schon abgeschickt jetzt, ich so ich hab da so ein kleines Problem vor allem weil wir halt im Server keine Serialisierungsmöglichkeit hatten das heißt, wenn ich das Ding gekillt hätte und neu gestartet hätte, müssten alle noch mal bestellen war also ein bisschen tricky und ich so, was können wir jetzt machen, verdammt ich hab keinen admin-Interface gehabt und irgend sowas, das war halt wirklich so die erste Version und ich war froh bei mir zuhause, als immer funktioniert aber dann kam halt so dazwischen dass wir dann VPN benutzen und die IP ist öffentlich doof wie hab ich's gelöst? als erstes in IP-Table-Simport zugemacht damit so was nicht nochmal passiert als zweites, die chinesische IP-Adresse einfach auf eth0 am Drutter hinzugefügt und dann mit Weget gesagt, simulier doch mal dass du gerade fertig bist hat funktioniert, wir haben dann die Pizza bestellt hat eben nochmal so 10 Minuten gedauert und dann konnten wir tatsächlich nach einer Stunde unsere Pizza in Empfang nehmen und genießen gut, wir haben uns gedacht, das lief jetzt nicht so gut aber wir haben uns heraus, nämlich externer Zutreff Passwort geschützt allerdings das ist übrigens ein sehr cooles Feature das heißt, wenn jetzt Leute in einem anderen Raum sind an der Uni oder wenn sie noch unterwegs sind oder so, können die schon mal mit ihrem Smartphone bestellen und kriegen dann später die Pizza geliefert mit uns zusammen, das ist ziemlich cool gut, wie hab ich das Ganze implementiert wie schon mehrfach angedeutet, ist das in Perl geschrieben und in Perl gibt's dieses nette Web-Framewerk namens Dancer das ist, ich will jetzt nicht sagen so wie Rails, eher so wie Sinatra falls das jemand von euch kennt, also ist nicht so mit 50.000 Scaffold Templates sondern auf das wesentliche besträngt und ist echt ganz nett, also wenn ihr was mit Web-Programmierung macht und euch Perl noch nicht so genau in dem Kontext angeschaut habt tut es, es lohnt sich, ist auch sehr schön dokumentiert und alles, also macht Spaß das zweite Modul, was wir verwenden ist Moose für Objektorientierung, also Moose ist ein modernes Objektsystem für Perl macht auch einige Sachen ziemlich einfach dann kommt das tolle HTML-Tree-Bilder, welches wir benutzen um die HTML-Seite von Hallo-Pizza zu pasen in ein Baum und dann eben bestimmte Elemente einzufügen oder rauszulöschen, zum Beispiel das Google Analytics JavaScript hielten wir für überflüssig andererseits die Meldung mit dem Endbetrag und dem Fertig-Button, die muss natürlich schon drin sein funktioniert sehr schön mit HTML-Tree-Bilder und wer die Idee hatte das mit Dreck-Exen zu machen, tut es nicht, es ist in der Dokumentation zu Tree-Bilder beschrieben, warum das eine ganz schlechte Idee ist und zu guter Letzt LWP User Agent aus dem LWP Perl Paket ein sehr gutes Programm also ein sehr gutes Modul um HTTP-Request rauszuschicken und die Antworten wiederzunehmen und dann machen wir eben dieses ganze Session-Handling mit Cookies und so, funktioniert alles ganz hübsch so jeden Donnerstag beim ChaosStuff habe ich dann immer so ein bisschen weiter implementiert wir haben uns gedacht, okay den Namen vorher einzugeben wäre vielleicht ganz clever dann kann man nämlich auf dieser jemanden anders bestellt werden gerade bestellt weil oftmals ist es irgendwie passiert, dass jemand anders bestellt und wir warten so und warten und es geht einfach nicht weiter und 10 Minuten später bemerken wir, oh der der gerade bestellen müsste ist im Gespräch mit dem anders und es hat gerade gar nicht auf seinen Rechner geschaut d.h. Namen vorher eingeben und dann konnte jeder den jeweiligen Anstupsen sagen so bestellen wir deine Pizza das zweite war, dass wir am Anfang eben diese Log-Seite hatten und die hat sich alle 5 Sekunden aktualisiert und die Verteilung des Logs ging eben nach first come first serve d.h. derjenige der zufällig zuerst die Seite geladen hat, als der andere gerade fertig war kriegt zuerst den nächsten Log das ist natürlich ein bisschen nervig weil wenn ich am Anfang versuche was zu bestellen und jemand anders bestellt gerade und ich eine Stunde später immer noch nicht dran gekommen bin dann stört mich das d.h. derjenige der zu längst wartet am ehesten den Log bekommt weiterhin hatten wir ein ganz komisches Problem mit dem Firefox von genau einem Benutzer bei dem war das immer so, wenn der den aufgemacht hat hat er sich sozusagen automatisch ohne dass es gemerkt hat so eine Lol-Pizza-Session aufgemacht ich weiß bis heute nicht warum, vielleicht aus dem Cache jedenfalls haben wir immer die Request gesehen auf dem Server, aber er hat geschworen er hat die Seite nicht offen, ich hab auf seinem Computer geschaut die war nicht offen, ihr weiß nicht woher das kam jedenfalls haben wir dann eben so ein Token eingebaut das muss man am Anfang mit schicken und sonst kriegt man eben kein Log, keine Session dann haben wir noch so ein paar Detailverbesserungen z.b. die langweilige Meldung diese Seite aktualisiert sich alle 5 Sekunden und dann haben wir durch das professionell klingendere hier so Bestellung ist uns wichtig der nächste freie Platz ist für sie reserviert ersetzt und weiterhin haben wir das langweilige bezahlt durch ein schon gezahlt ersetzt kommt auch immer ganz gut so, zu guter Letzt haben wir dann einen Engine X vorne dran gesetzt weil die Standard-Implementierung also der Standard-Webserver, der bei Dancer mitkommt ist eben so ein ganz Simpler der macht halt ein Request zu einer Zeit in der man sieht, kann das ein bisschen besser wir hatten nämlich das Problem, dass ich auf der Autobahn war, auf der Fahrt zum Chaos Traff habe mit meinem Smartphone bestellen wollen dann kam Funkloch, ich habe eine neue Session bekommen also auch eine neue IP-Adresse aber die alte Connection hing noch so in der Luft und der Lloyd-Pizza-Server war jetzt 2,5 Minuten damit beschäftigt auf das Timeout zu warten wenn ich nicht bestellen konnte, das ist ein bisschen doof deswegen der Engine X, der nimmt erstmal den ganzen Request entgegen schickt es dann ans Backend und dann kommt die Antwort wieder zurück und dadurch können wir eben viel mehr Kleines gleichzeitig händeln also im lokalen Netz war das nie so ein Problem aber durch diese Funktionalität mit den externen Bestellungen ist es schon wichtiger außerdem was der Engine X sehr gut kann ist eben caching, das heißt die ganzen Bilder die ganzen CSS-Dateilen, die Fonts und so weiter haben wir eben alles jetzt gecached dadurch können wir die Ladezeit von über 200 Millisekunden auf kleiner 100 reduzieren und dann wirkt das Ganze auch schon sehr viel schneller und wenn wir gerade dabei sind machen wir auch noch gleich G-Sip an im Engine X das bringt dann auch nochmal was für die ganzen mobilen Endnutzer ok, dann kam der 3. März 2011 und MXF ist so mit seinem Smartphone unterwegs und dachte sich bevor ich jetzt bestelle schaue ich mal was es heute so im Angebot gibt da gab es dann also da geht man dann auf hallo-pizza.de nicht auf leutpizza und er wurde dann weitergeleitet auf hallo-pizza.mobi also eben so eine Seite die ist speziell für mobile Endgeräte ausgelegt und das war echt eine coole Entdeckung denn die ist schlank die ist schnell, die hat kein Ajax eigentlich genau das was wir schon immer vorhaben wollten aber das wichtigste an dieser Entdeckung war dass wir endlich die URLs begreifen weil früher war das halt so man geht auf hallo-pizza oder auf leutpizza und dann klickt man sich so eine Pizza dazu und dann geht so ein Ajax Popup auf und dann passiert da irgendwas so ein ganz wilder Request werden ausgetauscht und wir haben so einmal reingeschaut und dann gleich wieder abgeschreckt also wir wollten halt das Problem debagen das war halt echt zu eklig aber bei hallo-pizza.mobi ist das viel besser weil immer wenn man klickt auf irgendwas dann kommt man auf eine neue Seite und die ist halt schön mit so einer gut lesbaren URL und wir dachten so yeah als wir dann begriffen haben was man damit tatsächlich alles machen kann dachten wir so boah geil ich erkläre es mal kurz der prefix ist überall gleich also es fängt an mit slash bestellen slash pizza slash ist klassisch auch was anderes stehen ich glaube das ist hauptsächlich so search engine optimization was sie da machen weil bei dem ersten Request den ich jetzt hier als Beispiel hab den add to cart mit dem man eben so ein Artikel in seinen Warenkorb hinzufügt ist am Anfang die Artikel ID dann die Größe und dann die Gruppen ID das heißt da ist eigentlich alles enthalten das ist klassisch, ist eigentlich nur zur Dekoration gut Artikel ID ist klar die ist halt eindeutig über die Kategorie also das heißt mit Artikel ID und Gruppen ID kann man eindeutig ein Artikel identifizieren also irgendwie viel vorgebende Größen gibt es da damit kann man also ein Artikel hinzufügen zum Warenkorb so weit so gut der ist einfach dann kommt der decrement cart item mit dem kann ich ein Artikel löschen und der Parameter hinten dran beschreibt die Positionen im Warenkorb so weit so gut und dann gibt es was wo ich gedacht hab boah da hat aber einer der Designer nicht so aufgepasst decrement cart item mit 2 Parametern und dann slash ingredients das löscht eine Zutat daraus aber tricky ist, dass der erste Parameter eine Zutatenposition der zweite ist es dann also es ist genau umgedreht wie man das erwarten würde aber gut, ich meine die haben halt keine api, wir hatten den tatsächlich bevor wir angefangen haben mit diesem Programm auch mal eine freundliche Mail geschrieben hey, wollt ihr uns nicht Zugriff auf die api geben wir machen da immer so Bestellungen im Wert von 100€ es lohnt sich vielleicht wir haben keine api und da haben wir halt gesagt ok, dann halt nicht gut, das sind also die requests und jetzt ist vielleicht manchen schon klar was so das Problem sein könnte gehen wir mal davon aus wir haben 2 Leute also ich gehe auf lollpizza und jemand anders geht auch auf lollpizza und der andere klickt sich eben eine Pizza in seinen Warenkorb ich mache einen Reload und sehe ok, der hat die Pizza da drin so weit so gut jetzt klick ich mir eine Pizza dazu und bin damit beschäftigt die zu konfigurieren der andere löscht derweil seine Pizza und damit verschieben sich natürlich alle Warenkorbpositionen um eins nach oben und dann klickt er sich zum Beispiel in den Salat dazu und jetzt sind die Positionen genau umgedreht was vorher bei ihm die Pizza 1 war ist jetzt meine Pizza und was jetzt der Salat ist ist bei mir eigentlich noch meine Pizza in meinem Browser weil ich halt kein Reload gemacht habe und dadurch kann man eben so eine Kombination wie Pizza mit Balsamico-Dressing machen oder eben komplett leere Pizzen und lauter so Sachen also wir haben es dann so langsam verstanden was das Problem eigentlich ist nämlich sozusagen ein klassisches Back-Button-Problem das einfach bei dem Einbrowser die Request komplett auf den falschen Artikel gelaufen gut, nachdem wir das verstanden haben haben wir ein Perl-Modul implementiert ich zeige hier mal so ein paar Zeilen davon also am Anfang machen wir so eine neue Session mit dem Modul, geben die Store-ID an das ist also die Filial-Nummer die 87 ist die bei uns in Heidelberg und dann gibt es diese Proxy-Methode was die macht ist die nimmt einfach eine URL entgegen und gegebenenfalls noch Parameter wenn es ein Post-Request ist dann geht es an Hallo-Pizza und gibt dann die Antwort wieder zurück das heißt so funktioniert das intern und ganz am Ende geben wir einfach noch aus was im Warenkorb gerade ist das ist schon mal ganz nett hat den lustigen Nebeneffekt dass das das erste Programm war bei dem meine Test-Case ist tatsächlich Network IO gebunden Warn weil sie eben mit Hallo-Pizza kommunizieren und Warenkörbe zusammenklicken so ist es ziemlich fancy wenn ihr das mal machen wollt es fühlt sich lustig an wenn ihr die Test-Suite laufen lasst abzuschicken können wir Folgendes machen wir machen eine neue Session auf und fügen die Warenkörbe aller Benutzer die bisher bestellt haben zusammen in diese neue Session das funktioniert folgendermaßen ich gehe noch mal zurück diese URLs die wir dem entgegenwerfen über die Proxy-Methode merkt er sich und passt die so an dass sie mit dem derzeitigen Warenkorb Füllstand kompatibel sind das heißt er implementiert einfach den jeweiligen Positionsparameter und dadurch kann man eben so was machen das heißt er definiert jetzt so dass jeder der drauf geht kriegt eine eigene Session in dem nur seine Sachen sind und ganz am Ende kann man sagen jetzt zusammenfügen und dann gibt es einen großen Warenkorb in dem einfach alle Bestellungen drin sind und dadurch kann man jetzt auch gleichzeitig bestellen also das war eine sehr coole Sache nachdem wir das dann am laufen hatten das hat uns echt viel Zeit erspart weil damit war der größte Flaschenhals weg wir mussten jetzt nicht mehr hintereinander bestellen und was uns dann noch ausgefallen ist weswegen wir vorhin so gejubelt haben jetzt können wir Bestellungen auch abspeichern über die UALs jetzt sprechen wir die einfach in der Datenbank ab und replayen die einfach nachher wieder wenn man die wieder haben will das ist echt ziemlich cool ich zeig mal kurz wie das funktioniert am Anfang hat man so diese Seite da gibt man oben seinen Nickname ein dann wählt man ob man eine neue Bestellung machen will oder ob man eine alte Bestellung wiederholen will und dann gibt es unterhalb eine Liste mit Nicknames und dem Namen den die vergeben haben für die jeweilige Bestellung und man sagen kann so die will ich jetzt noch mal haben und am Ende sieht es dann so aus da ist man dann fertig oben ist die Meldung, danke für die Bestellung bitte lege die Summe auf den Pizzageldhaufen und nachdem man das dann gemacht hat klickt man auf dieses Bezahltäckchen und dann wissen die anderen ok, man hat bezahlt rechts daneben ist so dieser Merken-Button und der Ändern-Button falls man nochmal zurück will ziemlich cool also damit funktioniert es jetzt so ich komme donnerstags zum KAUS-Streff mach mein Browser auf gehe auf leubpizza.de fertig, sind so kleiner 10 Sekunden wenn es hochkommt und das hat uns also echt so eine Stunde Arbeit auf naja ein paar Minuten verkürzt ok, kommen wir zu einer tollen Live-Demo genau, also ich werde sie nicht bestellen das hier ist so eine lokale Instanz davon, die läuft auch auf leubpizza.de nachher wieder für die GPM ich will jetzt einfach mal hier dieses Salat mit Ei aus und dann mische ich das mit der großen Hawaii und einer scharfen Kentucky sage ich will bestellen und jetzt spricht er mit hallo-pizza.de ok, er sollte es tun ich habe es vorhin getestet ja ja, ich habe schon Internet so live-coding live-coding, nee ok, ich habe Internet, interessant ich mache das einfach noch mal in der Hoffnung, dass es dann funktioniert genau, jetzt schon besser so, top, jetzt läuft das also durch und am Ende kommen wir in unseren Warenkorb und sehen, dass wir hier die zwei gespeicherten Bestellungen wieder haben jetzt kann ich hier sagen, ich will zurück und will mir noch was dazufügen ich hoffe, wir können es alle so einigermaßen erkennen das ist groß genug glaube ich jetzt gehe ich zum Beispiel zu den Pizzabrötchen und sage, ich will jetzt welche mit Kräuterdip noch haben, gehe wieder auf mein Warenkorb, alles klar ihr bemerkt, wie subtil wir hier unsere eigenen Design-Elemente in das bestehende Warenkorb ist gut, ok dann am Ende klick ich auf, ich bin fertig und komme eben auf diese Übersichtseite jetzt müsste ich dann 20,50 Euro unten an der Bar bezahlen und irgendwann könnte ich dann meine Bestellung genießen gut das dazu, das war es erstmal von mir ich bedanke mich für eure Aufmerksamkeit ihr könnt auf der GPN Pizza mit Leu-Pizza bestellen erst später wieder, nachdem ich mich jetzt ein bisschen entspannt habe, werde ich die nächste Session einleiten und dann könnt ihr da draufgehen könnt bestellen ansonsten habt ihr Fragen ja du sagst einfach was dein Nickname ist das wird dann anhand deiner IP identifiziert ok da hinten war noch eine Frage und wie klicke ich denn jetzt meine Margarita mit Balsamico-Tressing ja also die Margarita mit Balsamico-Tressing du kannst das machen indem du einfach die passenden URLs aufrufst du gehst also einfach auf hannopizza.mobi suchst dir raus, wie klicke ich beim Salat das und dann machst du Copy-Paste und funktioniert wir haben es noch nicht ausprobiert, was passiert wenn man das tatsächlich bestellt wir haben uns das aber fest vorgenommen ok, noch eine Frage das könnte sein das müsste dann zwischenzeitlich gelöst sein weil wir die Thumbnails der macht Thumbnails von dem Inhalt der Seite ok das könnte das Problem erklären, vielen Dank wir haben noch ein anderes Firefox-Problem wenn da jemand irgendwie eine Idee hat wäre ich dankbar, das funktioniert folgendermaßen man geht mit dem Firefox auf die Seite und klickt sich irgendeine Pizza und dann hat man die zweimal im Warenkorb und man pflegt irgendeine Zutat hinzu und dann hat man die zweimal und wenn man im Viershark schaut der klickt die Response und dann schickt er nochmal den Request und ich habe ein bisschen ge-googelt und es sieht so aus, als wenn man zum Beispiel ein Image-Tag macht mit Source-Gleich und dann nichts, also einfach ein Lehrer-String dann lädt er die Seite einfach nochmal oder wenn man im Character Set nicht UTF-8, sondern UTF-8-Seme-Colon angibt lädt er die Seite nochmal und das gibt lauter so subtile Sachen im Firefox anscheinend, die triggern, dass er die Seite nochmal läht also wenn jemand Lust hat, das HTML zu debuggen und herausfinden, warum das nochmal geladen wird es sind GetRequest es machen aber nicht ich, sondern das macht HalloPizza.mobi schon so mir ist auch klar, dass GetRequest da eigentlich nicht richtig sind aber gleichzeitig ist Firefox der einzige Browser, der das dann halt zweimal läht warum auch immer könnte sein bei kaputtem HTML der hat eben diesen kompatiblen Cymbal-Modest-Scheid vor dem er akzeptiert dass er dann eben beim GetRequest noch mal neu läht und dann solltest du, dass er bereits verarbeitet wird und er sie läht also die Anmerkung war, dass das an diesem Quirks-Mod liegen könnte und der sie dadurch nochmal laden muss das kann tatsächlich gut sein, ich habe auch gelesen dass es manchmal durch das Firebug-Plug-In nochmal getriggert wird aber das hatte ich extra getestet, das ist bei mir nicht aktiv und das könnte wirklich sein, dass es der Quirks-Mod ist der dann eingeschaltet wird, aufgrund irgendwas ergibt Sinn ok, noch weitere Fragen oder Anmerkungen ja ok, also die erste Pizza ist schon angekommen, ich sehe, es hat gut funktioniert alles klar, ja dann, vielen Dank