 Ihr seid alle hier für die wunderbare Lea, damit ich den Namen auch korrekt ausspreche, laut Eigenbeschreibung koffienabhängige IT-Lerin, redundant, an der Beschreibung muss noch arbeiten, mit fragwürdigen Humor, doppelt redundant. Und Sie möchten mit uns sprechen über nach 2038, kommt 19.1 und weitere Software-Kurriösitäten. Bitte begrüßt mit einem ganz, ganz großen Applaus, Lea. Hallöchen, danke, dass ihr hier seid. Freut mich, dass bei euch die Zeitrechnung funktioniert habt. Es ist 22,27. Damit gibt es aktuell noch weniger Probleme. Wir schauen uns jetzt an, warum nach 2038,1901 kommt. Erst mal, hi, ich bin Lea. Ihr kennt mich vielleicht aus sozialen Medien oder einem Coffee-Eentalk oder so was. Ich studiere aktuell Informatik und habe nebenbei immer mal wieder so ein bisschen was mit Software-Entwicklungen und IT-Sicherheit und dem ganzen Fuh gemacht, mit dem man so im Studium in Berührung kommt, mit dem man so ein Studie-Jobs in Berührung kommt. Und wenn ich Software entwickle, dann finde ich natürlich auch Bugs interessante, die daweise auftreten können, die vor mir aufgetreten sind, die ich vielleicht auch versehentlich mal erzeuge. Aus IT-Security-Perspektive ist es auch ganz interessant, weil Programme, die ein Verhalten zeigen, das so nicht beabsichtigt ist, gerne auch mal so die eine oder andere Lücke haben. Wohnhaft bin ich in der Binary Kitchen in Regensburg. Es ist quasi mein zweites Wohnzimmer. An der Stelle vielleicht noch ein bisschen Bewerbung. Kommt nächstes Jahr alle zum Easter-Hack vorbei. Das ist nämlich auch in Regensburg. Heute Abend drehen wir allerdings nicht über den Easter-Hack, sondern über verschiedene Software-Bugs. Also im Großen und Ganzen geht es hauptsächlich um Overflow-Bugs und Kleidkommazahlen. Da schauen wir uns ein bisschen die Theorie dahinter an, sofern man davon Theorie sprechen kann, weil es im Grunde genommen einfach nur ein Mapping der Mathematik ist, also Informatik ist ja quasi angewandte Mathematik. Dann gibt es noch ein paar Dinge, die sonst nicht in eine Kategorie gepasst haben oder für die ich keine extra Kategorie aufmachen wollten. Es ist alles nicht so mega komplex, es ist eher auch für Beginner und natürlich erhebt dieser Talk keinen Angriff auf Bug-Vollständigkeit, weil ich glaube, es ist unmöglich, alle existierenden Bugs in einen Talk zu packen und hauptsächlich sind wir hier, um irgendwie Spaß zu haben. Und deshalb, wenn ihr irgendwie einen weiteren coolen Bugs kennt, postet sie gerne, sozialen Medien kommt gerne nachher auf mich zu, erzählt anderen Leuten davon, damit wir ja alle was zu lachen haben. Deshalb fangen wir jetzt auch schon mal direkt mit Overflows an. Overflows, sagt der Name irgendwie schon, ist, wenn irgendwas überläuft. Die Heilewelt der Mathematik-Probs gehen raus und mein Numerik-Prob ist im Grunde genommen bezahlen können, beliebig groß werden, bezahlen können und endlich groß werden. Das Ding ist, der Realität sind Dinge nicht unendlich groß, vor allem nicht auf Computern, insbesondere nicht auf Speicherplatz. Und dementsprechend kann es passieren, dass da was zu groß wird. Aber schauen wir uns erst mal noch kurz was an. Viele von euch werden wahrscheinlich was mit IT machen oder mit Informatik machen und zumindest auch schon mal von Speicherbereichen gehört haben, dass es im Grunde genommen eine reservierte Anzahl an Speicherzellen für eine Variable. Wir sagen im Grunde genommen, so groß möchten wir etwas haben, wo wir es reinstecken und bekommen. Das in dem Fall habe ich mal als Beispiel mitgebracht, 42 in Vinaire, in einem Uint 8, also in einer nicht vorzeichenden, behafteten Zahl gespeichert. Und im Grunde genommen wählen wir das selbst aus, wenn wir Coden wie groß es sein soll oder die entsprechenden Programmiersprachen, nimmt uns die Arbeit ab, kommt so ein bisschen drauf an. Alle, die schon mal mit C gearbeitet haben, wissen, okay, ich muss selbst sagen, wie groß ich was haben will. Die Menschen, die eher was mit Python und JavaScript machen, die haben diese Wahl meistens nicht und verlassen sich auf ihre Programmiersprache. Neben der Größe können wir auch überlegen, ob wir was mit Vorzeichen oder ohne Vorzeichen speichern wollen. Dann haben wir eben ein bisschen weniger für die eigentliche Zahl. Wir können, wenn wir beispielsweise in C oder ähnlichen Sprachen Coden den Overflow produzieren, hier haben wir halt einen unsigned integer, haben acht Stellen und haben also einen Wertebereich, der von 0 bis 2 hoch 8 minus 1 geht. In dem Fall können wir alles einfach entsprechend rechnen. In der Mathematik kommt natürlich nicht 23 raus in der Informatik, eben schon, weil wir eben einen Überlauf haben. Das heißt, wir haben hier die rote 1 und die rote 1 heißt, okay, das wird ignoriert, das interessiert uns nicht. Das, was wir in unserem Speicherbereich haben, ist einfach nur die 23. Wie man mit dem Überlauf umgeht, ist ein bisschen abhängig von Compiler-Betriebssystem, whatever. Aber hier in dem Beispiel habe ich es einfach mal abgeschnitten, weil das eben auch sehr häufig so passiert. Insbesondere in dem, was wir uns jetzt anschauen werden. Denn das war jetzt mal ein kurzer Einblick in die Theorie, warum das überhaupt so abläuft, wie es abläuft. Und nun stellen wir uns die Frage, warum kommt nach 2038 eigentlich 1901? Im Grunde genommen kommen wir jetzt zu Zeitoverflows. Zeit ist was, was man zählen kann. Und zwar beispielsweise als Unix-Zeit. Die Unix-Zeit sind die Sekunden, die seit dem 1.1.1970 exakt um 0.00 vergangen sind, ohne Schaltsekunden. Und als Datentyp wird häufig Time-Tie verwendet. Das sind 32 Bits mit Vorzeichen. Warum mit Vorzeichen? Weil wir eben auch in der Zeit zurückgehen wollen. Ich glaube, es gibt natürlich auch Menschen, die die Zeit von 1970 mitbekommen haben. Ich als Genset-Hacker nicht. Ich muss mich da outen. Ich bin vielleicht auch ein bisschen jung für den einen oder anderen Backchirr. Aber dafür werden wir ein Laira, der morgen, übermorgen, übermorgen, Entschuldigung, Zeitoverflow, sein Talkhead dazu, der auch ein bisschen bildend ist. Jedenfalls haben wir, wie eben schon gesagt, nur einen endlichen Speicherplatz zur Verfügung für unsere 2 hoch 31 minus 1 Stellen. Das heißt, nach dieser Anzahl an Sekunden haben wir einen Überlauf. Dieser Überlauf sorgt dafür, dass wir, weil wir eben Vorzeichen behaftet sind, in dem Jahr 1901 landen. Und zwar genau genommen am 13. Surfen 1901. Das Problem kann man umgehen, indem man einfach einen größeren Wertbereich wählt. Man kann zum Beispiel statt den 32 Bit auch die 64 Bit nehmen. Aber Computer hatten eine Zeit lang nicht beliebig viel Speicherplatz, wie wir es jetzt haben. Wir haben auch nicht beliebig viel Speicherplatz, aber wir haben mehr Speicherplatz, als wir einst mal hatten und müssen nicht auf jedes Bit genau achten, dass wir da wirklich gar nichts reinschreiben. Deshalb können wir jetzt einfach größere Speicherbereiche wählen und das Problem sehr, sehr weit in die Zukunft schieben. Und zwar bis nach dem Ende des Universums. Jedenfalls gibt es natürlich noch sehr viele Programme draußen, die mit dieser Zeitrechnung funktionieren und genau diesen Speicherplatz haben. Die Konsequenz daraus ist, dass Zeitdifferenzen nicht mehr funktionsfähig sind, Timeouts nicht mehr so funktionieren, wie sie funktionieren sollen und wir einfach in verschiedene Crashs laufen. Die genauen Konsequenzen sind natürlich immer abhängig davon, was die jeweilige Zeitfunktion im jeweiligen Programm macht. Und dafür gibt es ein paar Beispiele. In dem Fall ist es nicht so, dass das 2038 Problem aufgetreten ist, sondern andere Probleme, beispielsweise der AOL Server Crash in 2006, weil man einen Timeout nach 1 Milliarde Sekunden hatten, was im Grunde genommen ein Problem war, weil in einem Config-Fall genau dieser Timeout berechnet wurde. Und wenn die Zeit dann plötzlich in der Vergangenheit liegt, dann funktionieren Dinge nicht mehr so, wie sie sollten und Sie crashen. Dann Windows 95 und Windows 98, ein bisschen vor meiner Zeit, die die Millisekunden seit dem Systemstart gezählt haben. Millisekunden seit Systemstart in einer Variable, in die nur 32 bit passen. Ja, das ist doof. Das crashen wir nach knapp 50 Tagen. Bisschen neuer, bisschen sicherheitskritischer sind Flugzeuge, die regelmäßig gestartet werden müssen. Ich persönlich saß auch mal in der Bahn, die durch einen Neustart gerettet werden musste. Keine Ahnung, ob das ein Timeoverflow war oder sonstige Bahnprobleme. Wenn ein Flugzeug natürlich entsprechend kritisch und Microsoft Exchange hatte das Problem am 1.1. 2022 als die Mayware Engine nicht mehr funktioniert hat, weil eine Datungskonvertierung nicht funktioniert hat. Da war die Lösung dann, die Engine temporär zu disabeln, was jetzt natürlich auch nicht der beste Workaround für ein Sicherheitsproblem ist. Man zählt nicht nur Zeit, sondern alles Mögliche. Jede mögliche ganz verkannte Zelt werden. Wie ich eben schon sagte, man hat eben nur einen begrenzten Speicherplatz in den Speicherzellen, zwei Hochend normalerweise. Und wie ich eben schon sagte, gehen verschiedene Betriebssysteme, Compiler, Programmiersprachen unterschiedlich damit um, ob sie nun ein Flagg setzen, dass das zu einem Überlauf kam und man das nochmal beprüfen soll. Manche Programmiersprachen führen einen maximalen Wert genau für dieses Problem ein. Da gibt es eigentlich verschiedene Arten und Weisen damit umzugehen. Und ich habe gesagt, das passiert nicht nur bei Zeit, sondern auch bei einem möglichen. Und zwar habe ich unter anderem einen netten Bug gefunden in einem Juniper Switch, wurde netterweise von einer Person im Fediverse beschrieben. Link ist hier auf dem Folien drauf. Im Grunde genommen ist folgendes passiert, eine Schule hatte einen Brand und infolgedessen hat das Netzwerk nicht mehr funktioniert und Hardware musste neu beschafft werden. Es war Winter, deshalb waren es minus drei Karts Celsius draußen und besagt das Switch hat die Temperatur ohne Vorzeichen gespeichert in einem 8-Bit Enteger. Was dazu geführt hat, dass statt minus drei Grad dieser Switch dachte, es wären 252 Grad Celsius und es steht gerade in Flammen. Entsprechend musste laut Masodon Erzählung dieser Switch so lange geföhnt werden, bis er, bis er wärmer als 0 Grad Celsius war, damit wieder in der normalen Temperatur zähleweise angekommen ist und normal funktionieren konnte. Ansonsten hat man das bei Phänomenen wie YouTube Videos gehabt, dass plötzlich der Counter negativ wurde wie beim Video vom Gangnam Style oder wie ich eben schon erwähnte, dass sowas auch potenziell Security Bugs haben kann. Bei Android gab es in der Media Library Staterite ein paar größere Lücken, mit der man Remote Code Execution ausführen konnte, wenn man ein entsprechendes MP4-File abgespielt hat, in dem Fall gab es unter anderem ein Integer Overflow neben ein paar Dingen wie Heap Overflow und ähnliches, wo ich aber hier nicht so genauer drauf eingehen möchte, weil es dazu auch einen extra Druck geben wird allerdings von einer anderen Person. Genau. Theoretisch und praktisch passieren jegliche Overflows von allen Datencontainern immer mal wieder und können auch bei allen Datencontainern passieren, wenn man sie nicht dynamisch erweitert. Im Grunde genommen passiert es bei Stakes, ihr kennt wahrscheinlich auch alles Stake Overflow, kann bei Heaps passieren, kann bei allen Speicherstrukturen im Grunde genommen passieren. Wenn ihr selbst coded überprüft euren Code regelmäßig nach solchen Lücken, es gibt da auch nette Debugprogramme wie Wargrind, die helfen können, genau so was zu finden. Und wenn man sich genauer damit beschäftigen mag, kann man auch anfangen Overflows zu provozieren, versuchen Programme zu finden, die vielleicht nicht ganz spezifikationsgemäß laufen und kann dann potenziell das Einfallstor für Security Bugs finden, falls man sich ein bisschen im Pentesting ausleben möchte. Es gibt nicht nur Overflows und bevor wir mit weiteren Lustigen Bugs diesbezüglich weitermachen, würde ich erst mal kurz Flieskommazahlen einführen, weil natürlich gibt es nicht nur Ganzzahlen, sondern auch Dezimalzahlen mit Dezimalstellen und das ist im Grunde genommen einfach eine weitere Variante von Unendlichkeit, die die Mathematik uns bietet. Aber wir wissen ja immer noch, wir haben keinen unendlichen Speicherplatz, irgendwo müssen wir eine Grenze ziehen, irgendwo müssen wir hingehen und dafür haben wir Flieskommazahlen. Flieskommazahlen haben den tollen Vorteil, dass sie sowohl für sehr große als auch für sehr kleine Zahlen sehr genau sein können. Wenn wir zum Beispiel eine Fixkommazahl hätten, dann müssten wir uns genau festlegen, okay, was von Zahlenbereich haben wir und der wäre tenacial auch deutlich kleiner. Da gibt es einen Standard für der IEEE 754 Standard, der im Grunde genommen genau definiert, wie eine in dem Fall 32 Bit Flieskommazahl aussieht. Mit einem Bit fürs Vorzeichen, acht Bit für den Exponenten, der mit dem Bayer gespeichert wird, damit man die Werte einfacher vergleichen kann in ihrer Größe und 23 Bit für die Mantisse, das ist im Grunde genommen die eigentliche Zahl hier. Ich habe ein kleines Beispiel mitgebracht, damit man sich das vielleicht kurz besser vorstellen kann und dem Beispiel wird auch schon das Kleines ersichtlich. Und zwar habe ich 42,23 mitgebracht. Zahl vollkommen zufällig gewählt, natürlich. Wir wandeln erstmal den vorderen Teil in den Binärum, dann den hinteren Teil. Der hintere Teil ist hier schon gerundet beziehungsweise abgeschnitten, weil 42,23 in Dezimalsystem erscheint uns nicht unendlich, erscheint uns völlig unproblematisch, aber guess what? In Binär sind viele in der Unendlichkeit, sodass wir was abschneiden müssen und die Zahl tatsächlich gar nicht exakt auf Rechnern darstellen können, selbst wenn wir es wollten. Daraus basteln wir dann quasi unsere IEEE Zahl, sind glücklich und das ist die Darstellung als 32 Bit Float. Dann kann man was Lustiges machen, man kann es addieren. Mit anderen Zahlen, hier habe ich vollkommen zufällig 42,23 plus 13,37 gerechnet und dafür habe ich beispielsweise in Pfeifen nicht die 55,60, ich bekomme heute Pfeifenrechnet hier mit 64 Bit, funktioniert im Prinzip genauso und die Moral von der Geschichte ist quasi okay. Wir haben eine gewisse Ungenauigkeit mit da drin. Es ist schon später am Abend, wenn ihr noch eine gute Nacht legt, Türe Volts, da gibt es ein nettes Paper von David Goldberg. Dazu gibt es natürlich auch Bucks, wer hätte es gedacht. Ariane 5 ist eine Rakete, die ja mit ein paar Satelliten verloren ging, weil man unter anderem, neben vielen anderen Fehlern, 64 Bit Float zu 16 Bit Signed Integer umrechnen wollte, hat nicht so ganz geklappt, hat zum Überlauf geführt und man hat eine schwere Rakete verloren. Das wird gerne mal als teuerster Software-Buck bisher bezeichnet. Bei PHP gab es ein Denial of Service, also man konnte quasi mit der Eingabe dieser Zahl dazu übergehen, gewisse Server zu crashen, die auf PHP basieren. Man weiß nicht, ob es ein Buck oder ein Feature ist, wenn PHP nicht mehr läuft, also eventuell auch vollkommen beabsichtigt. Bei Wahlen ist es zum Beispiel auch schon mal passiert, dass die Auswertungssoftware spontan gerundet hat, was beispielsweise dazu geführt hat, dass man kurzzeitig dachte, dass eine Partei in den Landtag einzieht, die dann doch nicht eingezogen ist. Es ist halt einfach doof, wenn so was passiert. Und dann gab es auf Intel CPUs noch einen netten Buck, der eine ungenau Kleidkommadivision hatte, in dem also eigentlich ist es kein richtiger Kleidkommabuck, weil er nicht auf Kleidkommarechnungen beruht in dem Sinne, sondern darauf, dass Intel sich dachte, boah, wir bauen hier ein paar Lookup-Tabellen ein, damit wir einfach schneller eine Kleidkommadivision machen können. Das hat allerdings dazu geführt, dass man falsche Werte hatte, falsche Ergebnisse rauskamen und Intel das so ein bisschen runtergespielt hat. Das eigentliche Problem war nicht der Buck an sich, sondern die Reaktion von Intel, die einfach ja versucht haben, das so schlecht wie möglich zu kommunizieren. Genau, natürlich gibt es noch viele weitere andere Bucks, paar kleinere Software-Bucks habe ich auch noch. Generell Software-Bucks sind einfach nur das Resultat aus, wie nehme ich an, dass ein Rechner funktioniert und wie versuchen ich das umzusetzen? Im Grunde genommen sind alle Menschen, die irgendwie Code anfassen, nicht davor gefallt, dass so was passiert, weil Rechner so sind, weil das super komplexe Systeme sind. In dem Fall zum Beispiel Mars Climate Orbiter gegen auch verloren, weil man eine missverständliche Einheit für den Impuls hatte, weil wenn Amerikaner und Europäer zusammen an etwas arbeiten, kann es passieren, dass man auf der einen Seite metrische Einheiten verwenden, auf der anderen Seite eher imperiale Einheiten. Ups, die Mars Rover kaputt. Dann passieren noch so Kleinigkeiten wie beispielsweise, oh, ich heiße True mit Nachnamen, irgendwelche Frameworks wollen so nett sein und das Boolean interpretieren. Oh, scheiße, meine iCloud funktioniert nicht mehr. Doof das. Genau dasselbe passiert übrigens auch gerne mal Menschen, die Null mit Namen heißen. Falls ihr also neben Bobby Little Tables Leute schockieren wollt, einfach Null oder True oder False, gerne mal als Nachnamen angehen. Vielleicht bekommt ihr damit ja was kaputt. Ansonsten führen auch verschiedenste Unicode-Bugs dazu, dass diverse Endgeräte mal abstürzen. Das ist im Grunde genommen einfach ein Magic String, der von Betriebssystemen wie Android oder iOS oder ähnlichen mobilen Betriebssystemen gerne mal interessant interpretiert wird, was man dann dazu bringen kann, dass die entsprechenden Geräte abstürzen. Wie gesagt, die Auflistung hier an Bugs und Kuriositäten ist nicht abschließend und die Idee ist eigentlich, einen Eindruck zu geben, was passieren kann, was Kurioses und Lustiges und manchmal auch ja Unschönes passieren kann. Software-Bugs treten im Grunde genommen allen Bereichen des Codings auf. Es gibt keinen perfekten Code, weil wir mit super komplexen Systemen arbeiten. Die Hardware ist komplex, auf der wir arbeiten, die ist an sich schon schwierig aufgebaut. Im Sinne von, da haben sehr viele Leute, sehr viel Höhenschmeiß reingesteckt, damit Dinge so funktionieren, wie sie überhaupt funktionieren. Es ist alleine schon super komplex, dass ich die Fernbedienung hier in der Halt halte und durch meine Folien klicken kann. Auch bei so was können Bugs passieren, bei allen möglichen Dingen. Und im Grunde genommen kann ich nur dazu raten, ja, den eigenen Code zu Review und Refactoren, vielleicht auch mit anderen Leuten drüberzureden, gegenseitig Review und generell Spaß daran haben, wenn der eigene Code komische Dinge tut, die vielleicht auch manchmal ein bisschen lustig sind. Genau. Das war's auch schon. Danke, dass ich hier war. Ich hoffe, es hat euch ein bisschen, ja, an der einen oder anderen Stelle zum Schmunzeln gebracht. Erzählt gerne von euren eigenen Bugs und Kuriositäten, teilt sie gerne mit mir. Ich finde sowas immer wieder ganz lustig, wie man vielleicht merkt. Folientemplate habe ich angegeben und ja, danke schön. Wir haben noch fünf Minuten für Q&A oder interessante Bugs aus eurer Historie. Oder? Ich komme. Also es ist okay, du kennst jemanden, der jemanden kennt, der ein Problem hatte. Ja. Nein, es ist fast offiziell. Also es gab im letzten Jahr im Programm der GPN einen Vortrag über Unicode und Emojis, wo eben die Bugs mit dem Unicode auftraten. Und dieser Talk hat in der Pipeline des Vox diverse Software vor Herausforderungen gestellt. Sehr schön. Danke mir Klammern für diesen wunderbaren Talk. Genau. Ich glaube, den kenn ich sogar. Wurde der aufgezeichnet? Und ja, kann ich mir sehr empfehlen. Mit Encoding fehlen, glaube ich. Herrlich. Ja, schön. Manchmal gibt es ja auch irgendwelche Fehler, wo man denkt, jetzt kann ich sie nicht lösen, aber vielleicht in Zukunft besser mal zu lösen. Es gab hier diesen schönen Jahr 2000-Bug. Und manche hatten mal gedacht, okay, schieb man denn einfach mal 20 Jahre weiter ins Jahr 2020. Bis dann ist das bestimmt gelöst. Aber wenn dazwischen irgendjemand so einen Softwareteil nimmt, darauf was entwickelt, dass niemals wieder Updates so als Grundlage. Und dann ist da erst das 2020 da und sagt, hallo, da bin ich. Und dann darf man sich mit den Auswirkungen rumschlagen und schnell was fixen. Wie beispielsweise in dem Exchange-Bug, wo denn ja, man schnell einen Quick-Fix her musste. By Exchange ist es sowieso wie ein Wunder, dass der Mail zustellt, also. So, yeah, these things happen a lot. There was a dude in the U.S. who got a Fentany license plate with no on it. He got all the fines for every fine that didn't have a recorded number plate. And he couldn't change it back, because the system wouldn't accept his input. And in the category of time rollovers, I don't know, you might have missed it, but GPS rolls over every 1,024 weeks, so every 20 years. And it did that a couple of years ago. And yeah, I might have fixed the bug in some substation control software that made the controllers reboot every 40 days. So yeah, that's what happens a lot too. Nice. Dankeschön, thank you. Ah, komm' her. Ich hab privat ein bisschen Software entwickelt und hab dann einige Testcases laufen lassen, hat alles wunderbar funktioniert, bis ich dann die echten Daten importieren wollte und feststellen musste, dass ich zwar mit Postleitzahlen aus dem Süd und im Westen Deutschlands probiert habe, aber dann festgestellt hab, dass das keine gute Idee ist, Postleitzahlen als Integer zu speichern, weil wenn ich mit an Null anfange, dann und da wir nicht aus dem Osten kommen, hab ich die Testcases einfach ignoriert, hab dann die echten Daten importiert und hatte dann ungefähr 10 Prozent Fehler von der Datenbank, die plötzlich ihre Integer nicht mehr haben wollte. Okay, das ist cool? Also immer... Kurios und cool? Von daher immer dran denken, Postleitzahlen als Stringspeicher und nicht als Integer. Ja, aufpassen bei Datentypen, wie wir speichern wollen. Gut, das heißt nächstes Jahr machst du einen Talk, what programmers believe to know about Postleitzahlen und da gibt's eine ganz schöne Githubseite. Sonst noch Themen? Ach, natürlich ganz auf der anderen Seite, ihr wollt heute, dass ich mal eine Schritte durchbring. Letzte Frage, bis ich dort bin. Ich kann ein bisschen mit ihr auf der Bühne rumlaufen. Tut ihr nicht weh mit deinen hohen Schuhen? Ach, grad so. Wo war der Hang da? Zum Thema, wie speichert man Zahlen? Wir hatten einen Fall mit einem Kunden, der Daten als Excel-Tabellen CSV-Dateien gespeichert hatte und wir haben sehr lange danach gesucht, warum die produzierten Ergebnisse dann auf dem Teststand, wo diese dann in elektrische Signale umgewandelt werden mussten, irgendwie nicht richtig gepasst haben, bis wir darauf gekommen sind, dass der String mit Punkt oder Komma jeweils durch die Locale ausgegeben wird und der String, wenn dann das Veranderes interpretiert wird, die Nachkommastellen wegfallen lässt, im elektrischen Signal. Also da muss man auch drauf aufpassen auf solche Dinge. Ja, tatsächlich habe ich in den Vorbereitungen hier auch so ein bisschen drauf aufgepasst, dass ich da tatsächlich das Komma setze, wenn ich das Pfeil voraus kopiere und nicht den Punkt, damit ich nicht für Verwirrungen sorge. Also ja, Problem bekannt. Gut, ich sehe noch ein paar Hände, wir sind aber zeitmäßig jetzt am Ende. Hey, das hat sich gereimt. Nein, nein, nein, nein, nein, nein, nein, nein, nein, nein, nein, nein. Aus, wir haben keine Zeit. Findet Lea an der Bar, wo findet man dich? Auf dem Event, aber mal wieder. Sucht Lea, ihr findet sie, ihr seht sie, erzählt dir die Geschichten, dann kann sie nächstes Jahr noch einen Talk machen. Und ich würde sagen, noch einmal einen großen Applaus. Vielen Dank, Lea. Danke schön.