 Guten Morgen, liebe Chaoswesen. Ich hoffe, ihr seid schon alle wach und alle auch schon aufnahmefähig. Wir haben nämlich Tag 4 und wir lassen... Oh, ja, Tag 3. Entschuldige, bitte. Das ist ein Index, keine absolute Zahl. Also wir haben zwar schon Tag 3, aber wir lassen kein bisschen nach. Wir haben auch heute einen Haufen an superinteressanten Programmen für euch. Erreichbar sind wir für euch im Hackint-ISC, im Channel RC3-R3S. Auf Twitter und Mastodon unter dem Hashtag RC3-R3S und auf Mastodon zusätzlich unter unserem Händel at r3s.caus.social. Stellt bitte Fragen, weil der nächste Talk wird interessant. Und zwar haben wir den Friedrich Schöne und den Nico Duldhardt. Die beiden waren schon mehrfach auf dem C3, aber das ist ihr erster Talk. Die beiden haben zusammen Informatik studiert, haben sich selbstständig gemacht in der IT-Beratung und haben das Jahr jetzt relativ effektiv genutzt. Die haben relativ viele Projekte angefangen und von einem ihrer Freizeitprojekte erzählen die beiden uns. Sie haben ein Crawler gebaut für eine Seite und sie haben ein Netz gebaut, was auch automatisiert Captures löst, was irgendwie den Begriff Capture ironisch macht. Also jetzt hoffentlich voll aufnahmefähig. Bundesanzeiger Crawling von Friedrich Schöne und Nico Duldhardt, viel Spaß. So, guten Morgen zu Hause. Wir werden uns heute mit dem Bundesanzeiger auseinandersetzen, insbesondere auch mit dem Bundesanzeiger Verlag. Falls ihr den Bundesanzeiger noch nicht kennt, ist das kein Problem. Dann solltet ihr gleich einen guten Überblick bekommen. Im Laufe des Vortrags werdet ihr auch einen Einblick da rein bekommen, wieso Finanzdaten von Firmen in Deutschland zwar öffentlich zugänglich sind, aber praktisch kaum nutzbar. Zusätzlich beleuchten wir den rechtlichen Hintergrund und die Hürden, um an diese Daten heranzukommen, bzw. diese zu befreien. Wir versuchen das Ganze eine kleine Geschichte aufzuziehen und geben euch zwischendrin immer einen kleinen Einblick in die Erkenntnisse, die wir auf dem Weg bis zu unserem Crawler gesammelt haben. Genau. Wir sind hier eigentlich nochmal kurz zu uns, die bereits gerade in der Einleitung angekündigt. Wir sind Friedrich und Nico. Wir sind beide Software-Developer, haben unseren Bachelor zusammengemacht, dann unseren Master studiert und arbeiten jetzt seit einem Jahr zusammen. Im Moment bauen wir in erster Linie individuelle Software-Lösung mit Fokus auf Cloud-Native-Anwendung. Wir möchten euch heute aber ein Freizeit-Projekt vorstellen, das wir für gesellschaftlich relevant halten. Bevor wir jetzt allerdings in die coolen technischen Details eintauchen, möchten wir euch nochmal einen Einblick geben und das doch ziemlich relevantes, gesellschaftlich relevante Thema. Zum Hintergrund fangen wir mal an mit dieser Bilanz, die ich heute mitgebracht habe. Das ist die Bilanz von einem Unternehmen. Die ist Teil eines Jahresabschlusses. Das ist ein Unternehmen, der von jeder Kapitalgesellschaft einmal im Jahr veröffentlicht werden muss. Und der gibt einen Einblick in die finanzielle Lage und den wirtschaftlichen Erfolg des Unternehmens. Hier sehen wir zum Beispiel die Bilanz der Chaos Computer Club Veranstaltungsgesellschaft, GmbH. Ein interessanter Fakt, den man hier sehen könnte, ist, dass im Jahr 2019, Ende 2019, hat diese Gesellschaft ein Gesamtkapital von 2 Millionen Euro. Sie hat auch den Kongress organisiert. 2 Millionen sind jetzt kein Bargeld auf dem Konto, sondern Kapital. Aber mal weiter. Wieso haben wir überhaupt Zugriff auf so eine Bilanz? Das liegt daran, dass jede Kapitalgesellschaft, also UGS, GmbHs und auch viele Personengesellschaften, laut dem Handelsgesetzbuch ihren Jahresabschluss einmal mehr veröffentlichen müssen. Das liegt daran, dass da keine Privatperson haftet und diese Offenlegungspflicht schafft da mehr Transparenz. Hier sehen wir nochmal den Auszug aus dem Handelsgesetzbuch zum Thema Offenlegung. Die Unterlagen, also dieser Jahresabschluss, ist elektronisch beim Betreiber des Bundesanzeigers einzureichen. Das fragen wir uns, was ist der Bundesanzeiger? Der Bundesanzeiger ist ein sogenanntes Amtsblatt. Das heißt, er dient dem Bund dazu, seine Verpflichtungen nachzukommen, um bestimmte Informationen öffentlich zu verkunden. Er gliedert sich in mehrere Teile. Einer dieser Teile ist der Teil Rechnungslegung und Finanzberichte. Und das ist der Teil, der uns interessiert. Es gibt noch viele andere Teile. Für die trifft alles, was wir sagen, auch zu. Aber schauen wir uns jetzt erst mal nicht an. Jetzt, dass diese Offenlegungspflicht in Deutschland gibt, besitzt der Bundesanzeiger dann natürlich alle Jahresabschlüsse von jeder deutschen Kapitalgesellschaft zumindest und auch von vielen anderen Gesellschaften. Es ist also die öffentliche Informationsquelle, wenn es darum geht, die wirtschaftliche Lage von deutschen Unternehmen zu beurteilen. Jetzt vor allem interessant, wer der Corona-Krise, wenn wir einen näheren Einblick in die Auswirkung haben wollten, dann wäre das eine sehr gute Informationsquelle, zumindest nachdem alle Unternehmen ihren Jahresabschluss abgegeben haben. Wir würden jetzt erst mal erwarten, dass der Bundesanzeiger dem Namen nachzuurteilen auch verbunden bereitgestellt wird. Aber falsch gedacht, der Bundesanzeiger, der Bundesanzeiger gehört zur Dumore Mediengruppe mit Sitz in Köln und wurde im Jahr 2006 komplett privatisiert. Die Dumore Mediengruppe ist eine der größten und ältesten deutschen Medienunternehmen und viele bekannte Medienunternehmen gehören zu den Konzern. Er lässt sich das Ganze auch ganz gut bezahlen, also einen Jahresabschluss abzugeben und Meldung zu müssen kosteten Unternehmen nämlich mindestens 25 Euro und das ist nur für die kleinsten Unternehmen. Das sind schon mal bei 736.000 Kapitalgesellschaften in Deutschland laut Statista mindestens 18 Millionen Euro an Einnahmen im Jahr. Eigentlich eine beträchtliche Summe, wenn man sich vor Augen führt, dass dafür eigentlich nicht viel getan werden muss, außer Text zu veröffentlichen. Vor allem, wenn wir uns nochmal anschauen, dass es in dieser Art und Weise dieser Text dann überhaupt zur Verfügung gestellt wird, das hier ist die Suchmaske von Bundesanzeiger, von der Webseite. Wir sehen hier, suchen Sie nach einem Begriff, einem Teil oder einem Veröffentlichungsdatum. Eine Volltextrecherche ist nicht möglich. Was heißt das effektiv für unsere Suchmöglichkeiten? Das heißt, wir können nach einem Firmennamen suchen und den Zeitraum einschränken. Also effektiv können wir uns nur den Jahresabschluss von einem einzelnen Unternehmen anschauen, was natürlich jegliche Meta-Analysen unmöglich macht. Zum Beispiel, wenn wir an einem mittelständischen Unternehmen anschauen wollten im stimmten Gesamtkapital, dann sind diese Informationen zwar da, aber wir können nicht danach suchen. Jetzt könnte man sagen, hey, wir machen das einfach selber, wir werden die Daten aus, es sind schließlich explizit per Gesetz öffentlich zugängliche Daten. Aber das ist nicht ganz so einfach, dass der Bundesanzeiger, also der Bundesanzeiger Verlag, beruft sich auf sein Datenbankschutzrecht. Das heißt, er hat diese Sammlung an Dokumenten zur Verfügung gestellt, in dem Fall Jahresabschlüsse und auch viele andere anbliche Dokumente. Und dann beruft er sich darauf, dass er über die Verfilfältigung bestimmen kann, also über die Verfilfältigung von vermeintlich öffentlichen Dokumenten. Eine zusätzliche Hürde, die dort aufgetreten ist, ist, dass wir um auf den Jahresabschluss, um einen Jahresabschluss abzurufen müssen, und gehen. Das ist eine sogenannte technische Spälle und unserem aktuellen Leidhafen Rechtsverständnis nach, ist das nicht in Ordnung. Zum Glück kommt uns da der Bundesanzeiger selber zur Hilfe, unter dem Namen Validatis, nämlich verkaufte uns die Daten. Ich habe Ihnen mal einen Slogan von der Webseite abgebildet. Nutzen Sie valide Unternehmensdaten aus erster Hand, hast genau für Ihr Business. Das ist natürlich sehr praktisch, wenn wir bedenken, dass Unternehmen dafür bezahlen und gesetzlich verpflichtet sind, ihre Daten dort zu veröffentlichen. Diese Problematik ist allerdings nicht ganz neu. Vor zwei Jahren war sich schon mal ziemlich präsent. Da galt das gleiche nämlich für die Bundesgesetzblätter. Was sind die Bundesgesetzblätter? Im Endeffekt sind das einfach nur Gesetze, die vom Bund herausgegeben werden. Wer die Durchsuchung kopieren oder ausdrucken wollte, deutsche Bundesgesetze, wurde dafür zur Kasse gebeten. Die freie Variante war sehr eingeschränkt. Die Open Knowledge Foundation hat dann das Risiko eines Rechtsstreits auf sich genommen und die Bundesgesetzblätter auf eigene Faust veröffentlicht, die sonst der Bundesanzeigerverlag veröffentlicht hatte. Und hat diese durchsuchbar gemacht und auf die Webseite offene Gesetze die Ehe gestellt. Und die Webseite bietet quasi alles, was man im 1. und 100. Jahrhundert erwarten würde. Nämlich eine durchsuchbare Möglichkeit für Gesetze. Eigentlich halt auch nicht so schwer. Ich denke, ich hatte nicht so ein großes Budget für dieses Projekt. Das Justizministerium hat innerhalb von 14 Tagen, ich betone doch mal 14 Tage, was eine ziemlich schnelle Zeit ist für ein Ministerium, ein Statement herausgegeben, dass Gesetze zukünftig, also das dauert jetzt noch ein paar Jahre, aber dann werden Gesetze öffentlich verkündet. Wahrscheinlich auf einer Seite vom Justizministerium oder vom Bund, da die Entscheidung jetzt wieder in der Hand des Justizministeriums liegt, die ist nämlich für dieses Amtsplatz zuständig, hoffen wir auf eine ähnliche Entscheidung, da der Fall auch ziemlich analog ist. Zu den Erkenntnissen, die wir bis jetzt schon mal gesammelt haben, der Bundesanzeigerverlag ist ein privater Verlag, private Firma, die den Informationsfluss von öffentlichen Bekanntmachungen kontrolliert und das nutzt er aus, um den Zugang künstlich zu limitieren und dann noch einmal am Bundesanzeiger zu bereichern. Was das aber auch heißt, ist, dass unser Justizministerium und damit der Bund selbst nicht in der Lage ist, grundlegende moderne IT-Infrastruktur aufzubauen, um seine Pflichten nachzukommen. Und bei den Budget sollte man erwarten können, dass man das schafft, eine IT-Infrastruktur aufzubauen, um 740.000 Texte in strukturierter, durch suchbare Art und Weise abzuspeichern und öffentlich zu machen. Jetzt kommen wir zum technischeren Teil dieses Vortrages, nämlich den Crawling. Erstmal ein kleiner Disclaimer. Wir haben den Bundesanzeiger nicht gecrawlt, denn nach unserem Rechtsverständnis ist momentan nicht legal, den Bundesanzeiger zu crawlen. Wir diskutiert daher also nur, wie man einen Crawler bauen würde, wenn man es denn wollte. Wir haben also eine Webseite gebaut, die dem Bundesanzeiger sehr ähnlich ist, ausschließlich auf dieser lokalen Kopie der Webseite gearbeitet und sichergestellt, dass unser Crawler funktioniert. Wir gehen deshalb auch stark davon aus, dass der Crawler auch auf der richtigen Bundesanzeiger Webseite funktionieren würde. Die Datenbasis sieht folgendermaßen aus. Das handelt sich um 10 Millionen Jahresabschlüsse, circa 10 Millionen. Die sind auf 500.000 Suchseiten und auf jeder Suchseite sind dann in etwa 20 Ergebnisse. Wir können hier sehen, wie wir jetzt auf einen einzelnen Jahresabschluss klicken, z.B. von der Handbrinke Development Gear. Wir können uns den Jahresabschluss anschauen. Vorher müssen wir natürlich noch ein Capture lösen. Und ich gehe mal durch, wie man denn so als menschlicher Crawler oder als Mensch einen einzelnen Jahresabschluss abrufen würde. Man würde erstmal die Startzeit aufrufen, dann würde der Browser ein Implicit ohne unser Zutun, eine Session ID zuweisen als Cookie, dann schicken wir eine Suche ab auf der Suchseite. Als Ergebnis bekommen wir eine Ergebnisseite, die wir gerade gesehen haben. Auf dieser Ergebnisseite können wir einen einzelnen Jahresabschluss abrufen. Um das zu tun, müssen wir dann noch ein Capture lösen. Und wenn wir das Capture gelöst haben, dann sehen wir den Jahresabschluss, können den Runternaten speichern und so weiter. Und um dann den nächsten Jahresabschluss abzurufen, würden wir dann einfach auf das nächste Ergebnis klicken. So. Jetzt würde man sagen, okay, let's go. Lass uns versuchen, diese Datenzuruf auf diese Daten zu bekommen. Es gibt allerdings auch einige Hindernisse, die uns da an den Weg stehen. Eines ist diese URL, das ich hier mal kopiert habe. Das ist die URL, wenn ich auf der Webseite von einem Jahresabschluss bin. Es liegt sehr nahe, dass die neuen keine ID ist von einem einzelnen Jahresabschluss. Es ist nicht nur das Identifier, der unique ist für diesen Jahresabschluss, sondern in der Datenbank des Bundesanzeigers wird gespeichert, wo wir zuvor draufgeklickt haben, welche Suche geht, was wir abgeschickt haben. Abhängig davon wird der jeweilige Jahresabschluss abgerufen. Das heißt, wir können jetzt, wir können keinen direkten Link bekommen, der auf einen einzelnen Jahresabschluss führt, was uns das Ganze natürlich deutlich schwieriger macht. Normalerweise könnten wir für normale Webseiten, könnten wir einfach alle URLs holen von allen Jahresabschlüssen und die nacheinander abfrühstücken. Ein weiteres Problem, wahrscheinlich das noch viel größere Problem ist, dass wir auf dem Weg zum Jahresabschluss ein Capture lösen müssen. Das Capture sieht folgendermaßen aus, aber dazu später mehr. Zusätzlich müssen wir damit rechnen, da wir die Webseite des Bundesanzeigers nicht kontrollieren, dass wir während des Crawlings Antworten bekommen, die wir so eventuell gar nicht erwarten, dass wir teilweise vielleicht sogar gar keine Antwort bekommen, dass wir ein Capture falsch lösen. Es kann also viel passieren, dass wir so nicht unbedingt antizipieren können. Damit müssen wir dann umgehen. Last but not least IP Rate Limit. Wir müssen einfach damit rechnen, dass der Bundesanzeiger künstlich limitiert, die Bequests pro Sekunde wir abschicken können, an die Webseite um Jahresabschlüsse abzurufen. Da gibt es mehrere Möglichkeiten, um das Problem zu lösen. Die einfachste Möglichkeit ist wahrscheinlich, einfach Proxies zu benutzen. Das heißt, wir crawlen von einem zentralen Server aus, die Webseite, damit der Bundesanzeiger aber denkt, wir werden viele verschiedene Personen, können wir zwischendurch immer wieder den Proxy austauschen. Es gibt Anbieter, die das verkaufen als Service, das nennt sich dann Rotating Proxy. Das heißt, jedes Mal, wenn wir an das Request limit gestoßen sind, tauschen wir den Proxy aus. Diese Möglichkeit ist aber ziemlich teuer, aber wir haben 10 Millionen Bilanzen und mehrere Terabyte on Traffic. Und für so ein Freizeitprojekt möchten wir natürlich einfach nicht so viel Geld ausgeben. Und bei dementsprechend haben wir nach einer günstiger Lösung gesucht. Die günstige Lösungen sind ABS Spot Instanzen, das sind Restinstanzen von Amazon. Die vermietet Amazon quasi um seine Server Restkapazitäten komplett auszuschöpfen. Wir haben einen sehr günstigen Preis, können dafür aber jederzeit von Amazon wieder runtergefahren werden. Das heißt, Amazon beansprucht die Server wieder für sich, um sie an besser zahlenden Kunden weiterzuvermieten. Die kosten interessanterweise ziemlich wenig und haben den Vorteil, dass sie eine eigene öffentliche IP haben, die wir so crawlen benutzen können. Also jedes Mal, wenn wir eine Instanz starten, gehen wir in eine neue IP. Und so eine Instanz kostet bei einer sehr kleinen Instanz, also einer der kleinsten nur ein Viertel Cent pro Stunde. Das heißt, die kommen da sehr günstig an neue IPs und auch an Rechenpower, um verteilt zu crawlen. Da passen sich dich heute gerade verteiltes Crawling. Wir brauchen Hilfe dabei, um verteilt ein Crawler zu bauen. Wir wollen das nicht from scratch machen. Dementsprechend haben wir das Agenten Framework ACCA benutzt. ACCA nimmt uns einen großen Teil der schweren Arbeit ab, verteilt ein Crawler zu bauen oder generell ein verteiltes System. Das ist nämlich ein Agenten Framework. Das ist ein Agenten Framework. Das ist ein Agenten Framework. Das Agenten Framework funktioniert folgendermaßen. Wir programmieren einzelne Agenten, die handeln autonom und tauschen Nachrichten mit anderen Agenten aus. Das heißt, solange die Nachrichten untereinander ankommen, ist es egal, auf welchem Server der einzelne Agent liegt. Und die Nachrichten auszutauschen, z.B. die Ankunft sicherzustellen, dass übernimmt ACCA kommt für uns. Das heißt, jeder einzelne Agent, den wir programmieren, kann die eben genannten Crawling-Schritte parallel ausführen. Sie können auch Hieraschinen haben. Das heißt, ein Agent ist dafür zuständig, die ganze Suche Seite zu crawlen und weitere Agenten ein einzelnes Jahresabschluss abzurufen. Jetzt haben wir natürlich noch ein größeres Problem, wie wir bereits eben angesprochen haben, gibt es in der Webseite, die wir nicht kontrollieren, viele Dinge, die schiefgehen können. Gefühlt und endlich viele Dinge, die schiefgehen können. Das heißt, wir brauchen eine gute Strategie, um damit umzugehen. ACCA bietet uns solche Mechanismus. Dort wird das Ganze Latted Crash Philosophie genannt. Das heißt, nehmen wir an, wir wollen Jahresabschluss crawlen und der einen Jahresabschluss steht gerade durch Zufall nicht zur Verfügung, aus Gründen, die wir uns nicht erklären können. Dann lassen wir den Agenten einfach abstürzen, Latted Crash und jeder Agent hat aber zum Glück einen Supervisor. Dieser Supervisor kriegt dann eine Nachricht automatisch und dann können wir definieren, was passiert, wenn ein Agent abstürzt. Das heißt, wir können dann sagen, hey, probier es doch nochmal. Wir starten einen neuen Agent, der die gleiche Aufgabe nochmal versucht und wenn das dann klappt, dann super. Wenn das nicht klappt, dann können wir das ein paar Mal wiederholen. Wenn es dann oft genug nicht geklappt hat, dann könnten wir einfach sagen, hey, lock doch, welchen Jahresabschluss du nicht runterladen konntest, in der Datei und dann können wir es später nochmal versuchen oder haben zumindest das Wissen, was nicht geklappt hat und können dann später nochmal nachschauen, vielleicht sogar manuell nachschauen, was nicht funktioniert hat. Zu den Erkenntnissen, die wir bis jetzt gesammelt haben beim Crawling, ich würde sagen Crawling ist eigentlich von einer Basic-Website, das ist eigentlich eine ziemlich einfache Aufgabe und es gibt auch gute Frameworks, die einen das abnehmen. Was den Fall jetzt besonders kompliziert gemacht hat, ist die Tatsache, dass wir es mit einer Legacy-Website zu tun hatten, die unsere aktuelle Situation, unser aktuellen Zustand als Besucher der Webseite in der Datenbank gespeichert haben. Dann kam die Captures dazu und jede Menge unerwartete Errors. Zusätzlich können wir davon ausgehen, dass man die Datenmengen groß genug ist und die Zimmelde und Bilanzen ist schon eine große Datenlänge, tritt jeder mögliche Fehler, der so eintreten kann, auch irgendwann mal auf. Das heißt entweder wir antizipieren alle die Fehler oder wir nutzen Mechanismus, wie Acker es Ihnen uns bietet, mit seiner Adaptive-Crash-Dilisophie. Zusätzlich, ein Erkenntnis von uns ist das Agentenmodel. Es ist ziemlich angenehm, um verteilte Anwendungen zu programmieren und es vereinfacht das Errorhandling deutlich. Das war es soweit zum technischen Fahrt. Ich habe jetzt noch eine sehr wichtige Information ausgelassen, nämlich wie umgehen wir überhaupt diese Captures, denn das ist auf jeden Fall eine Aufgabe, die wir lösen müssen, um die Möglichkeit zu bekommen, um Jahresabschluss abzurufen. Dazu jetzt mehr von Friedrich, der wird euch jetzt mal erklären, wie wir es ganz angegangen sind. Dank, Nico. Noch einmal zur Erinnerung hier ist die Seite, die wir sehr oft gesehen haben während unseres Projektes und die uns auch ein bisschen Kopfzerbrechen bereitet hat. Ich werde jetzt erzählen, wie wir diese Seite tatsächlich gelöst haben und werde euch auf den Weg dahin aber ein paar Mal enttäuschen. Hoffe ich, denn damit werdet ihr sehr genau die Gefühlssituation auch mitbekommen, die ich hatte, die wir hatten, wenn wir diese Captures gelöst haben. Wir dachten uns nämlich ganz am Anfang, es gibt ja Services, die das einfach machen, kaufen wir uns einfach und dann passt das. Diese Services kosten ungefähr 1 Euro pro 1000 Captures, um sie zu lösen, aber sie haben zwei sehr große Nachteile. Nämlich der erste Nachteil ist, sie kosten 1 Euro pro 1000 Captures, um sie zu lösen und da wir ungefähr 10 Millionen Jahresbilanzen crawlen wollen, müssen wir 10 Millionen Captures lösen, was uns 10.000 Euro kosten würde. Und wir wollen ja ein Fall konstruieren, dass jeder zu Hause das nachbauen könnte, wenn er wollte, aber nicht sollte. Aber wenn er wollte, sollte jeder diese Möglichkeit haben. Und ein weiterer Nachteil dieses Services ist, dass sie sehr langsam sind. Und mit langsam meine ich, sie haben eine Response-Zeit von ein paar Sekunden, was für uns viel zu lange ist. Wenn wir in eine Minute ein paar Tausend Anfragen raus schicken, dann können wir uns diese paar Sekunden einfach nicht leisten. Dann dachten wir uns, okay, dann müssen wir das irgendwie selber programmieren, selber ein Software-Modul schreiben, was das Ganze erledigt für uns. Dafür haben wir erstmal ein paar Anforderungen aufgestellt. Wir wollten natürlich eine hohe Genauigkeit, um möglichst wenig oder möglichst die minimale Anzahl der Captures zu lösen und nicht sehr oft ein Retry zu haben. Außerdem wollten wir einen einfachen Ansatz, das war einfach unser persönlicher Anspruch. Wir wollten das schnell implementieren, denn wir wollten für so ein Teil dieses Projektes jetzt nicht unendlich Zeit auflernen. Und wir wollten natürlich, dass es billig ist. Und mit billig meine ich weit aus weniger als 10.000 Euro, die ich ja bereits angesprochen hatte. Wir sind auch ziemlich schnell fündig geworden. Und zwar mit diesem Paper von 2018, das ist ein State-of-the-art Paper, das verspricht sehr hohe Erfolgsquoten zum Lösen von Captures und nutzt einen Garn, das ist ein fancy Norrinales Netz, eine fancy Art Norrinales Netz zu bauen. Und in dem Paper wurde zudem gesagt, dass sehr wenig händische Arbeit getan werden muss. Mit sehr wenig meine ich, dass hauptet wurde es nur 500 Captures händisch gelöst werden müssen und da an deren Lösung das ganze Ding komplett übernimmt. Außerdem hatte dieses Paper den großen Vorteil, dass es bereits auf der ACM veröffentlicht wurde. Und damit dachten wir sehr, okay, perfekt, das nehmen wir, das bauen wir auf und dann sind wir schon fertig. Dann kam aber die große Enttäuschung. Das Paper hat nämlich nicht so wirklich viele Details enthalten. Es hat nur eine grobe Auflistung der Schritte gehabt, die da getan werden müssen, für das Crawling. Außerdem behaupten die Autoren z.B., dass sie ein Tool haben, mit dem sie beliebige Captures generieren können, unter bestimmten Kriterien, also mit bestimmten Merkmalen, das haben sie bestimmt auch, aber das Tool ist nirgends zu finden gewesen und das heißt, sie konnten das auch einfach nur aufschreiben, dass sie es einfach haben. Und die Netze waren überhaupt nicht dokumentiert. Es wurde nur der grobe Aufbau beschrieben, wie die Netze verbunden sind, aber die Netze selber wurden nicht dokumentiert. Was für eine Nachimplementierung und generell eine Reproduzierbarkeit sehr schlecht ist, also es ist einfach nicht reproduzierbar. Dann haben wir nach dem letzten Strohhalm gegriffen, den wir hatten. Es gibt nämlich ein Repository auf GitHub, welches Capture Solver heißt und was von den Autoren dieses Papers veröffentlicht wurde. Man sieht sogar auf dieser GitHub-Seite, dass sie da wollen, dass man das Paper referenziert, wenn man dieses Repository nutzt. Das GitHub-Report hat mehr als 100 Stars und wir dachten uns, für eine Paper-Implementierung ist das ja ganz schön viel, perfekt, können wir nehmen. Dann kam aber die zweite Enttäuschung. Das GitHub-Repository enthält gar nicht den Code zu dem Paper, sondern es enthält einfach nur einen kleinen Teil vom Pre-Processing Code. Also haben wir drei Tage investiert, indem wir nämlich das gesamte Paper gelesen und verstanden haben und dieses Repository untersucht haben und wir hatten immer noch gar keine Lösung. Wir waren genau bei der gleichen Situation wie drei Tage vorher. Wir dachten wir uns, na gut, dann muss es jetzt so sein, dann implementieren wir es eben selber. Wir müssen es deshalb machen. Und hier sind nochmal unsere Ziele, die wir uns selber gesetzt haben. Hohe Genommigkeit, einfache Ansatz, so schnell zu implementieren sein, jetzt erst wirklich, weil wir schon drei Tage verloren haben und es soll preiswert sein. Wir dachten uns, wir schaffen jetzt erstmal eine Baseline, bauen irgendein neuronales Netz, was diese Captures löst und dann können wir einfach interattiv das Netz so lange verbessern, bis es alle Anforderungen erfüllt, nämlich vor allem die hohe Genommigkeit. Um die Schritte nochmal zu beschreiben, hier sind die Captures, die wir lösen wollen und wenn man die sich ein bisschen genauer anguckt, sieht man, es gibt zwei Gruppen. Es gibt Gruppe 1 und Gruppe 2. Gruppe 1 besteht aus schwarzen Buchstaben und Zahlen auf grauen Hintergrund und es gibt Gruppe 2, das sind hohe Buchstaben auf weißen Hintergrund und es gibt auch wirklich nur diese zwei Gruppen. Wir haben sehr viele von diesen Captures bei uns liegen. Und wenn wir uns die ganzen Captures nochmal ein bisschen genauer angucken, dann sehen wir nicht nur, dass es nur zwei Arten gibt, auch haben alle Captures nur sechs Buchstaben, also beziehungsweise sechs Zeichen, denn sie sind einfach numerisch und es sind nur Großbuchstaben. Das heißt, effektiv haben wir 36 Zeichen. Und das macht uns die Sache wesentlich einfacher, statt dass wir jetzt Freitex Captures lösen müssen, wird das auf einmal ein Klassifizierungsproblem von nämlich einfach sechs Buchstaben. Und das haben wir dann auch gemacht. Wir haben ein Lehnett genommen und leicht modifiziert. Lehnett ist eines der ältesten neuronalen Netze. Das kommt aus dem Jahr 1989, was generell für Informatik-Sachen schon sehr alt ist. Wie man sieht, haben wir einfach statt dem zweiten Fully Connected Layer, haben wir drei Konvolutionenlayer noch reingebaut und was ein Klassifizierungsnetz normalerweise macht, es bekommt irgendein Bild-Input, propagiert diesen Bild-Input durch die einzelnen Layers und gibt am Ende eine Klasse aus von einer bestimmten Anzahlklassen. Und das Gleiche machen wir jetzt auch. Wir nehmen unser Capture-Bild, propagieren das durch das Netz und jetzt kommt der große Trick. Wir haben statt einer Klassifizierungsschicht, haben wir einfach sechs parallele Klassifizierung, nämlich für sechs Buchstaben und das funktioniert so ausgezeichnet, weil wir genau wissen, es gibt nur 36 Klassen, nämlich die 36 Zeichen, die kommen und es gibt immer sechs parallele Klassen in jedem Capture. Was wir uns dadurch wesentlich vereinfacht haben, dass wir die Captures gar nicht segmentieren mussten oder einzelne Netze trainieren für die einzelnen Buchstaben oder vielleicht eine andere Netzarchitektur, die beliebig lange Captures lösen kann, implementiert, sondern wir haben einfach möglichst einfach das in einem Netz alles gemacht. Und das war der große Witz. Wir haben das dann trainiert online auf Google Colab. Colab ist ein Tool von Google, mit dem man Jupyter Notebox laufen lassen kann auf Grafikkarten und bekommt dann einen Slot zugewiesen und hat den dann für ein paar Stunden. Und wie man hier sieht, haben wir für jeden Trainingsstep ungefähr eine Minute gebraucht und nach 15 Minuten hatten wir unseren Netz schon fertig trainiert. Das ging wirklich überraschend schnell. Wenn man im Hinterkopf hat, dass neuronale Netze trainieren ja oft Tage dauern kann. Und was besonders schön war, wir hatten dann auf einmal auch ein accuracy von mehr als 98%. Das heißt weniger als jeder 50. Capture wurde falsch gelöst von diesem Netz. Und damit ist das Netz schon mal besser als ich es auf jeden Fall bin bei diesen Captures. Und es war lustigerweise auch ein bisschen besser als unsere Trainingsdaten die vorgelabelt wurden. Und jetzt fragt man sich natürlich, okay, diese Trainingsdaten haben wir auch noch nicht drüber geredet. Wo kamen die denn eigentlich her? Eingangs habe ich ja schon mal erwähnt, es gibt ja diese Services, die es für einen einfach erledigen. Wir haben dann 70 Euro in die Hand genommen, das war mehr oder weniger aus der Hüfte geschossen und haben die Captures dann einfach über eine API weggeschickt an so ein Service. Der Service hat die für uns gelöst und dann hatten wir auf einmal 70.000 Captures und das hat sehr ausgereicht. Wir haben gemerkt, okay, das war auf jeden Fall wesentlich einfacher als erwartet und wir waren selber ein bisschen überrascht, zumal das eigentlich die kleinere Arbeit war von diesem Capture-Projekt im Vergleich zu diesem Paper, was wir noch vorher gelesen haben. Ein paar Erkenntnisse können wir daraus ableiten, nämlich Papers ohne SoScout sollte man nicht einfach so trauen. Es gibt auch mittlerweile Petitionen, die fordern, dass KI-Papers immer mit SoScout geliefert werden müssen und der SoScout auch funktionieren sollte, denn dieses Problem tritt öfter auf. Ich habe das auch schon öfter erlebt und mir wurde das auch schon sehr oft erzählt, wie enttäuschend das ist, wenn einfach der Code des Papers nicht reproduziert werden kann. Was wir für uns gelernt haben ist, neuronale Netze sind ein Glücksspiel. Ich habe ja schon gesagt, dass wir da nicht wirklich viel Wissen reingesteckt haben, sondern wir haben das einfach nach Bauchgefühl verändert und dann hat es einfach wunderbar funktioniert auf mysteriöse Art und Weise. Der letzte, das habt ihr wahrscheinlich schon unzählige Male in eurem Leben gehört, wenn ihr schon mal Software geschrieben habt, nämlich Simplicity ist der Schlüssel zum Erfolg. Erst mal versuchen das einfach zu lösen und dann iterativ verbessern und nur das hat dazu geführt, nur dass wir das erstmal einfach machen wollten, hat dazu geführt, dass wir auch so schnell fertig waren. Das war jetzt erstmal der Abschluss zu den technischen Details. Ich habe jetzt noch eine Nachricht an euch, die uns persönlich sehr wichtig ist und die wir wollen, dass ihr die mitnimmt. Nämlich wir wiederholen im Wesentlichen die Forderung der Open Knowledge Foundation, dass private Unternehmen nicht an dem Zugang zu staatlichen Dokumenten profitieren sollten und das Urheberrecht sollte geändert werden, damit zentrale Dokumente der Demokratie offen bereitstehen. Das ist natürlich jetzt ein bisschen schwerer Abschluss und damit wollen wir euch natürlich nicht entlassen. Deswegen haben wir hier nochmal was Kleines mitgebracht. Das sind die Tipps, die auf der Webseite des Bundesanzeigers sind, die vor Gefahren im Internet heutzutage waren. Das sind zum Beispiel Viren und Würmer oder auch Hackerangriffe, die vor denen ihr euch auf jeden Fall in Acht nehmen soll und ihr findet da sicherlich noch allerlei hilfreiche Tipps auf der Webseite des Bundesanzeigers. An der Stelle danke ich euch erstmal und wenn noch irgendwelche Fragen bestehen, könnt ihr uns auf jeden Fall erreichen unter unseren E-Mail-Adressen und wir stehen jetzt erstmal für Fragen zur Verfügung. Danke sehr. Ja, das war ein super spannender Talk. Ich habe zwischendurch immer wieder in den IAC geguckt und da ist eine ganze Menge los gewesen. Das Feedback war absolut positiv. Also ich denke mal, wir können jetzt schon sagen, dass wir alle hoffen, dass ihr auch bei den nächsten Veranstaltungen noch fleißig Talks macht. Und wir haben auch ein paar Fragen bekommen. Das sind also die erste Frage. Wie seht ihr die Chancen, dass Bundesanzeigerveröffentlichungen in Zukunft ähnlich befreit werden können wie die Gesetzestexte? Das können wir natürlich überhaupt nicht einschätzen. Ich denke, da muss sich dann jemand wirklich mal vielleicht auch mal eine Organisation hinterstellen, wie zum Beispiel Europe Knowledge Foundation und einfach das Risiko von einem Rechtsstreit auf sich nehmen. Denn letztes Mal ist ja auch erst wirklich was passiert, als genau das getan wurde. Die Gesetze wurden einfach veröffentlicht. Und daraufhin hat sich das Justizministerium im Zug zwangesehen und beschlossen, dass die Zukunft vom Justizministerium selber auf der Webseite veröffentlicht werden. Das heißt, wir denken, es müsste jetzt noch jemand dieses Risiko auf sich nehmen und das will wahrscheinlich keine Privatperson, die wir das jetzt werden und diese Daten einfach mal bereitstellen. Und wir sind dann natürlich sehr gerne bereit zu kooperieren, wenn es da irgendeine Möglichkeit gibt. Wir haben es auch schon an die Organisation gewendet, aber vor allem jetzt zu Corona-Zeiten ist telefonisch niemand reingegangen und die Mail habe ich noch keine Antwort bekommen. Da müssen wir vielleicht auch nochmal nachhaken. Ja, dann habe ich eine nächste Frage. Da gab es auch ein bisschen Diskussionen im ARSI zu. Also, man kann sich Captchas auch anhören. Hätte man das über eine Voice-to-Text-Bibliothek schicken können? Als Kontext dazu gab es noch die Anmerkung, dass wohl auch schon Google-Audio Captchas über die Google-Audio-Zu-Text-Library gelöst worden wären. Wir haben versucht, möglichst schnell das Ziel zu kommen. Deswegen haben wir erstmal den Weg gesucht und kein anderer Weg explodiert. Ich bin nicht sicher. Wir müssten das nochmal nachschauen. Vielleicht können wir gleich nochmal auf unsere eigene Folie gehen zu den Captchas. Ob man das überhaupt vorlesen lassen konnte, also ob die Möglichkeit überhaupt gegeben ist. Das ist ja die Voraussetzung dazu, dass wir Speech-to-Text benutzen können. Das war ja auch damals das Anklug-Szenario bei Google, dass man sich das Captcha vorlesen konnte. Okay, das ist eine Doppelfrage. Ich würde jetzt aufteilen. Habt ihr euch für eine Crawler-Lösung entschieden, weil ihr keine Möglichkeit einer rechtlichen Auseinandersetzung seht? Also ich möchte nochmal wiederholen. Wir haben natürlich den Bundesansager nicht crawled. Weil das wäre ja illegal? Das wäre ja illegal. Deswegen haben wir die Daten auch gar nicht. Wir hatten nur der Bundesansager. Wahrscheinlich hat die nicht einmal den Bund. Aber ja, also wir haben diesen Crawler gebaut. Irgendjemand müsste sich dann mal dazu entschließen, diese Daten zu veröffentlichen. Sicherheitsweise zu crawlen und dann zu veröffentlichen. Kennt ihr Unternehmen, die die Leistung des Bundesanzeigerverlags nutzen, aber ihre Rechnung nicht bezahlen? Weil diese laut einem Urteil des Veramtsgerichts Köln, Aktenzeichen lasse ich jetzt mal aus, nicht rechtsmäßig sind. Kurze Antwort, nein. Ja. Wir sind Informatiker und keine Rechtsanwälte. Alles, was wir gesagt haben, entspricht nur unserem leidhaften Rechtsverständnis. Deshalb können wir leider nicht weiterhelfen. Gut. Ich denke, wir werden jetzt mal bezahlen. Zum Paper ohne Source Code. In dem Gipfel-Habrik-Report liegt ein komplettes Modell von vor zwei Jahren. Was meint ihr genau? Ja, okay. Also wir konnten, dass nicht reproduzieren, was sie da gemacht haben. Also ein einzelnes Modell hilft ja auf wenig. Wenn man das Paper liest, dann sieht man, dass das mehrere verschiedene Modelle sind, die genutzt werden. Und es war uns nicht möglich, das laufen zu lassen. Ich glaube, wenn ich mich richtig erinnere, dann lag ein sehr einfaches Modell für ein Teilnetz, aber soweit ich das hält, weil ich das richtig verstanden hatte, aber ... Ja, also so war das auch. Ich erinnere mich, es gab da auf jeden Fall ein Modell, aber man kann das nicht matchen zu dem Paper. Das ist irgendwas, aber das ist nicht das, was ein Paper beschrieben wurde. Okay, dann haben wir noch eine Frage. Welche Unternehmen sind veröffentlich flüchtig und somit im Bundesanzeiger? Alle Kapitalgesellschaften und alle Personengesellschaften, bei denen es keine natürliche Person gibt, die vollständig haftet. Das heißt immer dann, bei einer Kapitalgesellschaft ist es immer dann, wenn keine Privatperson haftet, muss man sowas abgeben, unter anderem um ein bisschen Transparenz zu schaffen und damit andere Personen die Möglichkeit zu bekommen, zum Beispiel den Geschäftspartner, sich anzuschauen, wie das Unternehmen dann überhaupt wirtschaftlich dasteht. Ja. Also danke für euren spannenden Talk. Ich glaube, wir sollten noch mal ganz klar machen, bitte crawlt den Bundesanzeiger nicht. Das wäre illegal. Euch noch viel Spaß beim RC3. Ich hoffe, wir hören noch eine ganze Menge von euch. Ich glaube, da schließt sich dann der ARC nur an. Ihr müsst euch den lauten Tosen und Applaus leider denken. Wie gesagt, das holen wir frühstmöglich nach und ja, also danke für euren Talk. Danke für eure Zeit. Viel Spaß euch noch mit dem restlichen RC3.