 Über Test Driven Infrastructure erzählen, das ist ein sehr weites Feld. Deshalb konzentriere ich mich ein klein bisschen auf die praktische Applizierung bei uns, speziell in einem System, wo wir alles per Paket deployen. Generell ist der Test Driven Development ein Standard-Stichwort bei der Entwicklung. Alle Entwickler kennen das und schwören drauf. Und ich möchte ein bisschen zeigen, wie man das eigentlich total einfach auch für Sachen im Betrieb anwenden kann. Also praktisches DevOps sozusagen. Generell, was ist Test Driven? Test Driven heißt, wenn es keinen Test gibt, ist es wahrscheinlich kaputt. Und das kann man ziemlich für alles sagen. Also mein Desktop ist kaputt, weil den habe ich nie getestet. Funktioniert das ja nicht meistens, aber eben nicht immer. Und vielleicht lohnt sich an der Test nicht, aber für die Sachen, die wir auf den Zauber machen, lohnt sich das auch erheblich. Und wir haben zum Beispiel jetzt auch Test-Formationen, die jeden Morgen guckt, ob wir überhaupt noch neues Server installieren können. Und ich zeige euch hier mal so ein bisschen, wie wir dahin gekommen sind. Wer kennt so was? Okay, das war ein Debian-Kollege. Also das ist ein Spec-File, ziemlich einfach, ziemlich typisch. Die meisten Spec-Files bei uns, die sehen auch genau so aus, haben gar nicht so viel drin. Und so ein Spec-File ist die erste Stelle, wo man bei Test Driven Infrastructure, wenn man jetzt zum Beispiel irgendwas aus einem Betriebssystem paketiert oder ein Stück Konfig dahintut, mal ansetzen sollte. Und wenn ihr nichts weiter aus dem Talk mitnehmt, nehmt bitte diese Folie mit. Das ist das Allerwichtigste, was mir schon richtig auf den Hintern gerettet hat. Nämlich Sudowregeln testen. Sudow ist so ein ganz tolles Werkzeug, was eine ganz, ganz strenge Meinung über seine Konfig hat. Und wenn man da einen kleinen Tippfehler drin hat, geht Sudow gar nicht mehr. Sagt halt nö kaputt. Und wenn man dann so eine kaputte Konfig auf alle Server ausgerollt hat, dann muss man so ein bisschen seinen Kollegen erklären, warum man das getan hat. Und wer da auf keinen Bock hat, der schreibt in seinen Spec-File, wo der Sudow-Fragment drin ist, halt sowas rein. Z-E heißt Abbruch bei Fehler. Wie Sudow-C-11 sagt, einfach mal gucken, ob das syntaktisch richtig ist und fertig. Und dieser kleine Einwurf, der wird euch schon das nächste Mal vor dem großen Bereinkauf für die Kollegen retten können. Es geht natürlich auch bei Python und anderen Sachen. Da sieht es dann zum Beispiel so aus, wenn ich irgendwo Pakete filmen, die BESch-Skripte ausrollen und die nix syntax checken, dann baue ich halt sowas ein. Einfach BESch-N und schon sehe ich, ob es da ein Fehler drin hat. Heißt nicht, dass das Script funktioniert. Das heißt nur, es wird nicht mit hier, da fehlt die geschlossene doppelte Klammer abbrechen. Und auch ganz praktisch, Python-Programme kann man auch syntax checken. Und gerade so die kleinen Dinger lohnt sich vielleicht einfach pilot-minus-e. Wenn da wirklich Fehler drin sind, die einen Kompilieren verhindern würden, dann bricht das ab. Auch sehr nützlich, Konfig-Dateien haben vielleicht manchmal Formate. Die sollte man also auch validieren. Ganz einfache Python-Einzeiler, um einen Konfig-Jammel zu validieren, tut nicht weh und hilft beim nächsten Vertipper. Wenn es dann falsch ist, wird es halt nicht gebaut. Testdriven hat für uns auch ganz viel Bezug zu Continuous Delivery. Und Continuous Delivery ist eigentlich nur die Idee, dass ich halt im Subversion einen Komet tätige, dann ein bisschen Technik losläuft und in sehr endlicher Zeit das, was ich komettet habe, auch auf meinen Servern ankommt. Ohne dass ich dafür noch irgendwas tun muss. Bei uns ist das Tool der Wahl Tim City günstiger als Jenkins. Sie tun am Ende genau dasselbe und auch die Art und Weise, sie zu konfigurieren, ist ziemlich gleich. Wichtig ist, wir haben erstmal für jedes RPM-Paket natürlich einen eigenen Bildjob. Dieser Bildjob, der checkt das Dissourcen aus, baut das und packt das Ergebnis in ein Dev-Repository. Danach gibt es für jede Funktionsgruppe, hier im Beispiel Foo, ein Integrations-Test. Der macht ein Update auf einen Test-Server, lässt dort lokal oder remote ein paar Tests laufen und wenn das erfolgreich war, dann propagiert dieser Integrations-Test die getesteten Pakete in der installierten Version. Das ist ganz wichtig in das Production-Repository. Und danach können die Foo-Server in Production das installieren und wir sind fertig. Und damit haben wir eine automatisierte, getestete Deployment Chain für Infrastruktur-Sachen, die mich ganz ruhig schlafen lässt und mir gar keine Sorgen macht, wenn auch mal einer, der das nicht kennt, daran was probiert. Vielen Dank. Hi, Christian Heimes. Ich bin im Python Core der Wetter und stelle gerade mal vor, was vielleicht neu im Python 3.4 ist. Die Beta ist zwar bald, aber steht und ich fest, ob alles reinkommt, was geplant ist. Erstmal die traurige Nachricht, kein OS2 Support. Windows XP wird es noch geben für 3.4, für 3.5, vielleicht nicht mehr. Ganz neu, Enums. Einig einfache Sache, aber drei Autoren und tausende Formels-Diskussionen. Ja, wir haben bald Enums, was C schon seit vielen, vielen erzählen kann. Statistik-Modul von Steven, die üblichen Sachen. Man kann sowas selbst implementieren. Er hat es aber gemacht, dass es immer funktioniert, auch wenn man irgendwie in Randbereiche rankommt. Victor hat zwei schöne Sachen gemacht. Einmal, dass man selbst Memory Allocator, wo man die üblichen C Sachen implementieren kann, überschreiben kann. Und dazu Modul, mit dem man den Speicherverbrauch sehr, sehr detailliert von seinem Programm analysieren kann. Wo, was irgendwie ein Speicher verbraucht und wer was macht. Das wird einige freuen, bald gibt es nicht direkt PIP in Python, aber die Zeile reichte, man hat PIP für Python Python 4. Wheel Format, es ist nicht ein Eck, es ist kein importierbares Format, so ein Installationsformat. Mit dem Trick, man kann einen Paket für Windows, für Mac, für diverse Versionen von Python und auch für diverse Arte von Plattformen. 92, 94, mit einem Dateipacken installieren und auch signieren. Da kommt noch das hinzu. Man kann bei V-Formaten genau definieren, für was, was zuständig ist. CP-Schiff für Python 3.3 ist zum Beispiel für alle Python-Versionen 3.3, egal ob es jetzt C-Python, Pypy, Driven oder was anderes ist. Python 0 kommt vielleicht rein. Das ist so, was eigentlich Leute als Path kennen, nochmal etwas anderes und hübscher geschrieben, Borte antworten, vielleicht noch ein. PEP ist eigentlich fertig, aber Diskussionspunkte sind immer noch groffen. Timestone Support, also PyTZ, leider nicht. Länders hat keine Zeit. Für 3.5 wird er vielleicht ein Kickstarter-Modul, Kickstarter-Projekt starten, weil er neben seiner Arbeit kaum mehr zum Entwicklung kommt und wenn ihr unterstützen wollt, gerne. Bisschen komplizierter, eine eigene WSL hat für die meisten Leute den praktischen Aspekt, man kann jetzt schön help in den Bild-Infunktionen, wie OSRI Name machen, bekommt einen ordentlichen Output, dass man von Python Funktionen kennt. Modul-Spec, man kann ein bisschen mehr Informationen rausbekommen, was das Import-System gerade macht. Das Ding in der Mitte kommt neu. Man kann Modul suchen oder Package suchen. Dann bekommt man ein Spec, wo ganz viele Informationen drin stehen und dann muss man es laden oder auch nicht laden, wenn man kennt das. Paar Erweiterungen und Formalisierungen habe ich geschrieben, basierend auf dem PEP von einem Küchling, Paar Sachen für die Hash-Funktionen, die eigentlich de facto Standard sind, aber jetzt auch formalisiert sind. Async.io, Tulip, das Next Big Thing. Er setzt nicht Twisted Earth Tornado, ist so was, was als Unterbau mal geplant ist. Davon ist immerhin schon ein kleiner Vorbereitungsteil drin, Generalisierung für Select-Modul, E-Poll, KQ, Poll Funktionen, High-Performs, Network Computing. Da baue ich gerade dran, den Hash-Algorithmus auf ein Kryptohash umzustellen, SIP-Hash 24 von Dan Bernstein. Das da ist für Low-Level-Leute interessant. PIPI hat es das gewünscht, Lenkfind ist Information. Wenn man zum Beispiel große Liste hat und auch irgendwas machen will, kann man vorher schon fragen, wie groß wirst du vielleicht mal, um in dem was zu optimieren. Auch bisschen Typ-Generierung, Meta-Klasse-Look-Up von irgendwelchen Methoden im Method-Resolution-Order, vier spezielle Anwendungsfälle. Das kommt noch wahrscheinlich alles mit rein außer Schadrei, was ich gebaut habe. Das muss vielleicht wieder raus, weil das noch nicht standardisiert ist. Python wird schneller, zumindest wenn man es startet. Wir haben jetzt etwa 30% Speed-Up-Vergleich zu 3,3 und den letzten 3,4 Beta. Wir haben das dritte ein bisschen rumgebastelt in den letzten Tagen. Ja, das war es. Das Wichtigste zumindest. Zum Unicode-Decode-Error. Nach meinem Fall-AiO-Vortrag hatten wir ein bisschen was an Diskussionen, wo es darum ging, wie kommen wir mit Unicode. Klar, und da war die Aussage, wenn man das Endcode und das Decode ordentlich hinkriegt, das heißt, dass encoding vielleicht korrekt geraten oder sonst viel bestimmt hat, dann hat man innerhalb des Python-Prozesses dann ja Unicode-Code-Points bei normalen Strings. Und damit ist alles super, weil sobald wir Unicode-Code-Points haben, ist alles Bestens, die funktionieren. Leider auch nicht immer. Es gibt ja verschiedene Sorten Unicode-Characters. Man kann die so ganz grob in drei Klassen einteilen. Die kleinste Klasse sind die guten alten ASCII-Zeichen. Das passt in 7-Bit, da haben wir hier zum Beispiel ein A. Die nächste Sorte ist die sogenannte Basic Multilingual Plane. Das sind alle Zeichen, wo die Code-Points noch in 16-Bit repräsentiert werden können. Hier habe ich zum Beispiel so ein A mit so einem komischen Überstrich. Und dann gibt es noch den Rest. Da habe ich hier zum Beispiel mal ein mathematisches A herausgesucht, das liegt außerhalb der BMP, also Basic Multilingual Plane. Die lassen sich alle ganz normal als UTF-8 zum Beispiel codieren. Ich habe hier ein UTF-8-System und ich sehe mal das normale A. Das ist halt im UTF-8 Einbyte codiert, das A Macron ist in 2-byte codiert und das mathematische A ist in 4-byte UTF-8 codiert. Und jetzt gehe ich eigentlich davon aus, dass ich sie in Python alle mit dem korrekten encoding einlesen kann und dann innen drin in Python einen String mit dem Code-Point habe. Stimmt leider nicht ganz, denn Python Kleiner 3.3 gibt es in 2 Sorten. Es gibt den Wide-Build und es gibt den Narrow-Build und fieserweise ist der Default mal so, mal so. Was bedeutet Wide-Build, was bedeutet Narrow-Build? By no Wide-Build wird für jeden Text String intern immer 4-byte pro Charakter reserviert. Also OCS4 heißt das technisch, das heißt ich bekomme garantiert jeden Unicode-Charakter da rein. Bei den meisten Texten ist das allerdings eine massive Platzverschwendung. Deswegen gibt es dann noch den Narrow-Build, der nimmt immer nur 2-byte für jeden Unicode-Charakter, aber das funktioniert für die meisten Sachen. Aber bei sowas stellt sich die Frage, was jetzt, das passt doch gar nicht rein. Das machen wir da. Um die Sache mal herauszufinden, habe ich das mal getestet. Ich benutze hier jetzt mal ein Wide-Build Python. So, da lese ich mal, ne, ich nehme erst mal das andere. Ich kann mal ein bisschen spannender machen. So, das ist jetzt ein Zeichen, was noch im BMP ist. Das kann ich ausgeben. Das ist ein String, der enthält einen Zeichen. Demnach hat er die Länge 1. Und wenn ich davon das erste Zeichen nehme, dann, wo komme ich das? So, wenn ich jetzt stattdessen ein Zeichen außerhalb der BMP nehme, wir haben jetzt ein Wide-Build, klappt das alles ganz genauso. Ich kann es ausgeben. Es hat die Länge 1 und wenn es ein Zeichen lang ist, kann ich auch das erste Zeichen ausgeben. So, nehmen wir jetzt aber mal den Narrow-Build. Dann sieht die Sache etwas anders aus. So, ich nehme jetzt hier mal ein BMP-Zeichen. Da ist, wie zu erwarten gewesen, alles super, Länge und so weiter. Dann habe ich jetzt in einem Narrow-Build das Lese-Vorsichtfalle. Das ist jetzt ein valides Unico-Zeichen. Das hat eine valide UTF-8-Kodierung, die ich ganz normal aus dem Datei-System gelesen habe. Das ist alles völlig erlaubt, was ich hier gemacht habe. Als Ausgebe, dann geht es durch irgendein Wunder. Allerdings, was hat er wirklich gemacht? Er hat zwei Zeichen ausgegeben. Das hat bloß das Terminal hinter meinem Rücken repariert. So, wenn wir nämlich jetzt mal das erste Zeichen, eines dieses einen Zeichens ausgeben, dann knallt mir mein Peißen weg. Super. Das hat uns schon ein paar Mal massives Kopfzerbrechen gebracht. Gegenmaßnahme, White-Build benutzen oder Peißen ab 3.3. Das macht es richtig. Wenn Nikola vorstellen, ah, windig klein, Nikola ist ein Framework für Statische Webseiten. Statische Webseiten braucht man eigentlich in der Regel kaum noch, aber manchmal gibt es Anwendungen, wo man sagt, da jetzt hier so ein ganzes CMS aufsetzen und mich damit beschäftigen, das aktuell zu halten. Dafür ist mein Projekt gar nicht groß genug und eigentlich gibt meine Infrastruktur das gar nicht her. Dann kann Nikola ganz praktisch sein, weil man einfach eben mit... Machst noch mal was größer, besser. Fast. Weil man eben da sein ganz normalen Workflow benutzen kann, den man als Programmierer auch benutzt. Man hat eben im Prinzip seine RST-Dateien, mit denen man die Dokumentation ins Fing schreibt. Man hat im Prinzip seinen CVS, wo man Code eincheckt, wo man Code teilt mit anderen Leuten. Und man hatte im Prinzip Code-Review, wo man eben sich die Sachen reviewen lässt von seinem Team. Wir haben das gebraucht im Prinzip für Triton, also mein Projekt, wo ich arbeite. Da haben wir im Prinzip... Das ist auch wieder alles doof. Na ja, gut. Nichts geht. Gar nichts geht. Einer muss dabei sein, bei dem es nicht geht. Das wird ich sagen. Alle anderen sind mir dankbar. Ich glaube es. Nein, nein. Also eben hat alles funktioniert. Sorry, aber irgendwie mit dem Monitor geht es ärger. Genau. Gerade mal an das Passwort. Genau, ich krieg hier keine IP. Dann geht es nicht anders. Dann muss das hier solo gehen, weil ich habe ja noch eine Minute. Also, Nicola, setzt ihr dann ein, wenn ihr im Prinzip schnell eine Webseite aufsetzen wollt, wenn ihr schnell Sachen publizieren möchtet. Das Ding kann statische Webseiten. Das Ding kann ein Blog speisen. Ihr könnt sehr gut internationalisieren. Das heißt, einfach die REST-RST-Dokumente in andere Sprachen übersetzen. Ihr ladet es dann einfach in euer beliebiges Tool hoch und könnt dann... Es geht. So sieht das dann aus. Also das ist jetzt die Triton-Seite mit Nicola gebaut. Es gibt einmal hier diese ganz normalen, festen Links, die da drin sind. Und es gibt eben so ein News-Bereich. Das ist der Blog-Bereich. Und dort sind dann im Prinzip die einzelnen Artikel drin, die man sich dann anschauen kann. Das Ding kann eben auch übersetzt werden. Es ist in verschiedene Sprachen übersetzt. Das Menü ändert sich dann entsprechend. Und ich zeige es euch... Jetzt weiß ich selber natürlich nicht, wie es geht. Ihr könnt Nicola selber komplett... Alles ist repository. Das heißt, es ist einfach zu forken. Man lädt sich den Kram einfach runter, zieht sich die Sachen dann auf sein eigenes System lokal und fertigt dann im Prinzip die Dinge an, die man braucht. Ich bin mich ein Specht. Ich möchte euch mal ein Sommerferienprojekt vorstellen. Eine kleine Android-App. Wenn euch fragt, wieso Android auf einer Preisenkonferenz. Das ganze Pre-Processing ist in Python geschrieben. Die App ist eine Android-App. Es gibt immer mehr Leute, die mit ihren SSIDs und WLAN-Namen Statements machen oder halt Nachrichten schicken. Wie zum Beispiel hier bei der US-Wahl 2012. Und ich wollte mal gucken, wie weit man das treiben kann. Ich habe eine App gemacht, zumindest um aus, wo das Ganze so funktioniert. Man gibt eine Nachricht ein. Man hat ein Hotspot aufgesetzt und jeder um Kreis von 30 Metern kriegt dann diese Nachricht aufs Telefon. Es hat ein paar Einschränkungen. Die Nachricht ist natürlich relativ kurz und der Umkreis ist relativ klein. Aber es hat ein paar interessante Einschaften. Zum Beispiel kriegt man die Nachricht nicht, weil man in irgendwelchen Facebook-Gruppen ist, hier im Off-Tutor-Fold oder im Google-Bus-Circle ist, sondern weil man einfach da ist. Außerdem, weil es gar nicht übers Internet geht, kann man sie auch nicht aus der Ferne ablernen oder unterdrücken, indem man das Internet abstellt. Es gibt also die Demonstrationen oder Fluthilfe oder generell alle möglichen Situationen, wo viele Leute zusammen auf einem engen Ort sind. So, ich komme gleich zu den technischen Details. In so einer SSID passen ja theoretisch 32 Beid. Das sind in der Praxis oft nur 31 druckbare ASCII-Zeichen und eigentlich auch nur die alphanomerischen Zeichen, weil die Wi-Fi-Chip-Hersteller da sehr unterschiedliche Ansichten haben, was eine gültige SSID ist, um es nicht. Das ist also das Format. Das geht los von zum kleinen A, und dann kommen 30 alphanomerische Zeichen. Da gibt uns fast 6 Bit an Kapazität. Mal 30 kriegen wir insgesamt 178 Bit, die wir zur Verfügung haben. Und die Frage ist also, wie viele Nachrichten können wir mit 178 Bit eigentlich kodieren? Und das sind eigentlich eine Menge. Aber wenn man sich jetzt mal die gängigen Encodings anguckt, sieht man, dass die Nachrichten ziemlich kurz sind. Also mit UTF-8 kriege ich halt für lateinische Schriften, die in englisch und deutsch benutzen, zum Beispiel 21 Zeichen, für den Großteil der Welt nur 11 Zeichen, was wirklich deutlich zu wenig ist. Wenn man sich zum Beispiel mal diese 4 Nachrichten anguckt, die sind alle gleich treuer, aber sehr unterschiedlich sinnvoll. Und eigentlich macht nur die Obersten Nachricht Sinn, darunter wird immer mehr Neues reingefügt, die Kosten aber alle gleich viel. So, und wenn man sich das anguckt, ist das eigentlich sogar tatsächlich so, dass der Anteil der sinnvollen Nachrichten minimal ist. Und die Aufgabe ist jetzt eigentlich, den Informationsraum so zu verzerren, dass das genau andersrum wird, dass halt sinnvolle Nachrichten billig werden und rauschen treuer wird, damit wir mehr sinnvolle Nachrichten reinpacken können. Das ist genau die Stelle, wo David Huffman ins Spiel kommt. David Huffman. Ich mache Ihnen sehr etwas Huffman-Coding entwickelt, wo wir halt, wo man sich anguckt, wie häufig sind bestimmte Symbole und dann halt die häufigen Symbole billiger macht und die seltenen Symbole treuerer macht. Und ich habe das jetzt einfach übertragen auf sinnvolle und nicht sinnvolle Botschaften. Man muss man erstmal unterscheiden, was ist sinnvoll, was ist nicht sinnvoll. Das kann man mithilfe von viel Text machen. Und die Uni Leipzig, die bietet halt zum Download an, in 80 verschiedenen Sprachen, 10.000, 100.000, 1 Million Sätze und die kann man analysieren. Das ist jetzt zum Beispiel mal so ein Histogramm für Englisch, das ist die Häufigkeit der Buchstaben. Und wenn man sich aber zum Beispiel mal den ersten Buchstaben neben Bord anguckt, dann sieht das Histogramm schon sehr anders aus. Das ist was, was wir nutzen können. Und auch nach dem Q kommt eigentlich immer ein U und wenn jemand schon Q-U geschrieben hat, gibt es eigentlich nur noch viele Möglichkeiten, wie es weitergeht. Das Prinzipiell auch möglich, alles andere zu schreiben, aber es ist deutlich treuerer. Das heißt, die Sprache ist sehr kontextsensitiv und man kann das ausnutzen, um die Sprache stark zu komprimieren. So, es gibt es also während 200 bis 500 solcher Bäume gebaut, je nach Kontext und das sind die Ergebnisse. Es gibt es für ein paar Sprachen gibt es das schon und man sieht das im Prinzip, die Sprachpakete sind relativ klein, 30, 40, 50 Kilobytes und man kann halt die Nachrichtenlänge deutlich erhöhen. Also wenn ich zum Beispiel normalerweise kriege mit UTF8 für englisch-deutsch 22 Zeichen hin in so eine SSID die Formierung halt bis zu 58 Zeichen. Besonders spannend, ist es eigentlich für die ganzen anderen Sprachen, die normalerweise mal 2 weit brauchen und UTF8 oder UTF16, weil die kommen jetzt nämlich auch auf 40 bis 50 Zeichen. Das hat also so ein bisschen so eine ausgleichene Wirkung. Ich mache noch kurz ein Demo, ich tippe mal hier. So, ich habe da Nachricht eingegeben, jetzt sieht man, jeder Buchstabe verbraucht unterschiedlich viel Bit. Das große Tee am Anfang braucht 8 Bit, das harte Nachbruch nur 1 Bit. Und wenn ich den Fehler korrigiere braucht die ganze Nachricht nur auf 75 Bit. Das ist kontraintuitiv und ich finde es ziemlich interessant, weil die Nachricht wird länger, das Encoding wird kürzer. Das ist aber eben genau das, was hier halt hier belohnt wird. Rechtschreibung lohnt sich wieder. Ich glaube, das ist ein richtiger Beitrag. Danke, das war's. Um wer entwickelt Software für Python 2? Wer entwickelt Software für Python 3? Wer entwickelt Software, die sowohl unter Python 2 als auch 3 laufen soll? Okay, das ist ja auch schon, sind ja immer ein paar. Okay. Ja, okay, die Frage, also direkt von der Python-Startseite aus ist da ein Link. Should I use Python 2 or 3? Okay, Python 2 is legacy. Python 3 is the present and future of the language. Wir haben ja auch eben gerade die netten Sachen gesehen, was so eventuell in die nächste Python-Version kommt, was Christian vorgestellt hat, ist schon sehr nett, was da so alles läuft, auch in den letzten Python 3-Version. So, jetzt könnte man ja denken, okay, entwickeln wir am besten nur noch für Python 3. Ist natürlich sehr knifflig, weil Python 2 ist viel stärker verbreitet, das geht mehr Bibliotheken. Und das heißt, wenn man jetzt von diesen Bibliotheken abhängt, dann kann man also noch nicht alles umstellen auf Python 3. Okay, Ansatz ist natürlich oder eine Antwort darauf, dass man eigene Bibliotheken für Python 2 und 3 anbietet, damit man anderen, die diese Bibliotheken verwenden, den Umstieg erleichtern kann. Die können dann erst mal zumindest, ja, sie können dann eben in beiden, zwei und drei in die eigenen Projekten das verwenden. Und dann später vielleicht, wenn alle Bibliotheken verfügbar sind, in drei laufen lassen, wenn die dann eben auch angepasst ist. Ja, ist diese Doppelanpassung nicht so aufwendig, kommt darauf an, habe ich heute auch schon x-mal gesehen, ich habe das trotzdem schon gestern geschrieben. Okay, ursprünglich war mal eine Empfehlung, dass man für Python 2 entwickelt und dann mit einem Tool, was, glaube ich, sogar in der Python Standards-Version drin ist, das 2.2.3, daraus eine Python 3-Version macht. Inzwischen aber auch ein und denselben Code für Python 2 und 3 zu verwenden, also ohne, dass man da nochmal eine extra Übersetzungsschritt hat. Ich habe mal die zweite Variante ausprobiert mit einem und denselben Code. Ich habe mal ein eigenes Open Source Projekt von mir umgestellt, sodass es sowohl unter Python 2 als auch 3 läuft. Das ist eine FTP-Klein-Bibliothek, das sind zwar hier sozusagen nur 13 Module, 6.500 Codezahlen, aber es sind schon relativ viele von den Gemeinheiten drin. Also, sprich, FileIo, also encoding für Dateinhalte, encoding für Dateinnahmen, Socket, Transfer, okay, habe da also schon einiges gemacht. Und ja, ich habe Junior-Tests, die sollte man haben für so eine Sache. Die bestehen also also unter Python 2 und 3. Ich habe jetzt vor einer Woche eine Alpha-Version veröffentlicht, weil sich ein paar Sachen auch ändern mussten. Okay, und jetzt mein Angebot so an euch. Ich wollte morgen in dem Barcamp so eine kleine Session machen. Wenn ihr also selber vor habt oder noch so ein bisschen zögert eure, wenn ihr irgendwie eine Bibliothek habt oder so, die ja auf Python 3 oder jetzt euer Code so abändern wollt, dass er unter Python 2 und 3 läuft, dass ihr hier, dass wir uns zusammen im Barcamp zusammensetzen können. Und dann bin ich auch zum Sprünnt da und dann könnte man das auch praktisch umsetzen. Also dann könnte ich, wenn ich so weit ich eben kann, eben auch helfen oder Tipps geben oder so. Das ist so mein Angebot. Ich will euch mal in 5 Minuten näher bringen, was dieses Jatt ist, von dem ihr vielleicht uns Sticker oder T-Shirts gesehen habt. Das entwickeln wir. Was ist Jatt? Jatt ist halt ein Open Source Toolchain, mit dem man Server deployen kann. Und ist eigentlich ein ziemlich einfaches Problem, wenn man ein Server hat. Da geht man halt drauf, macht Englishes Zeug und dann bam, fertig. Leider sind wir inzwischen wohl vermutlich alle erwachsen und wissen halt, dass das verdammt schlecht skaliert. Besonders wenn man halt ein großes Rechenzentrum hat, muss man dann sehr schnell jeden Tag deployen und das wollen wir nicht. Was macht man? Dann nimmt man sich halt so eine Toolchain, da kennt man vielleicht DevOps-Zeugs oder so. Jatt ist halt auch eins davon. Hat aber auch ein paar Alleinstellungsmerkmale. Jatt basiert halt auf Packaging. Was wir machen, ist, wir paketieren einfach alles. Das Betriebssystem sind ja schon Pakete. Unsere Applikationen sind auch Pakete. Unsere Konfigurationen sind auch Pakete. Warum machen wir das? Das ist eigentlich ganz einfach. Da Jatt sich vor allem mit Package-Deployments auskennt, können wir mit Jatt ein Package-Update. Wir können unsere Applikationen upgraden, ist auch ein Package-Update und wir können auch unsere Konfigurationen ausrollen. Das ist auch nur ein Package-Update. Das ist halt was ziemlich angenehmes und wir machen mit Jatt eben auch Continuous-Delivery, Continuous-Deployment. Continuous-Deployment für sich ist halt ein bisschen blöd, wenn man nicht auch Hochverpügbarkeit herstellen kann. Das machen wir mit dem zweiten Teil von Jatt, nämlich die Server instrumentieren und weiß halt, wenn es halt Paket-Updates gibt, kann Jatt sich aussuchen, was gibt es denn dafür Updates und welche Services sind davon betroffen. Services können sowohl lokale Dinger wie Tomcats, Apache, was auch immer sein oder eben auch Services, die woanders laufen, wie Loadbalancer, Nagios und so. Jatt kann halt dann diese Services stoppen, die Updates installieren und dann eben die wieder die Services starten. Wenn man redundant ist, als 2,480 Kisten hat, dann kann man auch die Kisten parallel deployen und dafür sorgen, dass die Applikation oder was auch immer in der Zeit dann noch verfügbar bleibt. So, spannende Frage, die man uns jetzt stellen könnte, ist halt, warum machen wir das? Warum benutzen wir nicht Chef oder Puppet oder so? Einer der Gründe dafür ist, wir wollen dem Unix-Weg folgen und wir glauben daran und das Unix-Weg ist ja eigentlich, es gibt viele kleine Programme, die eine ganz spezifische Sache tun und die kann man miteinander verklüpfen und ziemlich coole Sachen machen. Also wenn man so ein Setz-Pipe, was was ich in Aktion gesehen hat, der weiß, das ist viel stärker als ein einzelnes kleines Programm und Packaging, das ist halt sowas, das löst schon das Files-Rumschieben-Problem. Deployment ist ja vor allem Files auf irgendwelchen Kisten rumschieben. Das bringt uns noch ein paar andere Sachen gratis mit, nämlich die Abhängigkeiten zwischen Services oder die Abhängigkeiten zwischen Paketen. Das heißt, welche Libraries braucht man Applikationen, welche andere Applikationen von mir braucht man Applikationen. Das ist halt alles inklusive, müssen wir nichts für machen. Wir benutzen einfach das, was schon da ist und wir erfinden nicht das Rad neu. Ein anderer Ansatz von Jatt ist, dass man Komplexität reduziert, es gibt ja viele, die inzwischen auch für ihre Chef-Recipes oder so Tests schreiben und da können die Entwickler dann halt Ruby und schreiben dann diese Recipes und testen die und so weiter und so fort. Damit kann man die krängsten Sachen machen und vielleicht auch Kaffee kochen. Das wollen wir nicht machen. Jatt ist halt bewusst an einigen Stellen eingeschränkt. Das wollen wir so und es zwingt einen dann auch sich die Frage zu stellen, müssen wir das jetzt so kompliziert machen oder kriegen wir es halt einfacher hin? Zum technischen Hintergrund ein bisschen von Jatt ist es halt pure Python. Es läuft unter Python 2 im Moment. 3 wäre auch kein großes Problem. Wir setzen aber Twisted ein, weil so Orchestrierung ist ja vor allem I.O. gebunden. Wir benutzen SSH, um die Maschinen miteinander kommunizieren zu lassen und wir setzen auch nicht auf langlaufende Prozesse. Also es gibt irgendwie keinen Jatt-Demon auf der Klein-Seite, der halt die ganze Zeit läuft und irgendwelche Zeug macht. Das wäre es dazu. Vielen Dank für Ihre Aufmerksamkeit. Ich bin auch noch heute und morgen da und ihr könnt uns gerne wenn dazu ein Logo hinten dran ist ansprechen. Danke. Geht es los? Ja, es geht los. Also ich bin mutig. Ich stelle die erste Lösung von einem Problem vor, was jeder zur Besuchung gelöst hat. Es wird halt nicht klar, warum. Das Problem ist Folgendes. Also ein Nadel im Heuhaufen hat jeder gesucht, die Nadel ist Grund. Ich suche ein Pfeil, das hieß ungefähr so. Also ich weiß noch irgendwas über das Pfeil und ich hab... Also das ist eines meiner häufigsten Probleme. Männchen sollen 80% ihrer Zeit zum Suchen verwenden. Bei mir sind vielleicht 70. Ja, was sagen wir? Die Windusleute nehmen doch ein Explorer. Habe ich gestern Abend auch nochmal Spaß deshalb und probiert in der V-Box. Also Windus kriegt bei mir die Winduslänglich. Das ist immer eingesperrt. Der Explorer ist natürlich unwahrscheinlich langsam. Und also dem heißt meine Firma Unix Software. Also schon aus Gründen des Stolzes kommt sich eine Frage. Beim Stammtisch sagt man mir, da nehme ich Feind. Du hast aber viel Zeit. Kriegst du wohl nicht bezahlt. Und Feind ist eigentlich noch langsamer. Beim zweiten Mal ist es zwar schneller, aber inzwischen hab ich einen großen Firefox und der ganze Casio ist leer. Locate ist schnell, das stimmt. Ich kann nicht verstehen, aber das Update, das Erzeugung der Datenbank ist so schlimm, dass ich das und den Beagle als Erstes abschalte. Weil das 10 Minuten kann man nicht arbeiten, weil nur die Platte beschäftigt ist. Dann sagen Sie, wir lassen es nachts laufen, aber nachts ist mein Rechner aus. Weil ich habe früher mal neben dem Rechner geschlafen. Nicht aus Liebesgründen, das ergab sich einfach so. Und das Hauptproblem bei diesem ganzen Fall suchen ist, man hat viel zu viele Hitze. Also ein paar Zehntausend sind so typisch. Und was macht man in so einem Fall? Ich will das Fall finden. Und außerdem will ich mindestens Shell-Muster suchen. Das kann Windows sowieso nicht. Ich habe gestern Abend ein paar Exe mit zwei Stammtrenner versucht, zu finden mit Explorer. Geht alles nicht. Die Lösung ist, ist schon ganz alt. Pfeilfeinder. Habe ich als ASCI-Applikation, inzwischen habe ich es als GOI, in dem Fall wirklich besser als ASCI, muss ich als OuterUnix so sagen. Und mit Features, die ich will. Erst mal probieren. Irgendwo, aber nicht in irgendwelchen Rektorisen, wo ich nicht weiß, wie geheißen. Habe ich irgendwas mit Python 27 gehabt. Das sind ungefähr 20.000 Traffer bei mir. In Ruht, halbe Mühe und Fals. Suche ich erstmal Python 27, viel zu viele Hitze. Aha, ich schmeiße erstmal die KDE-Direktoris raus. In Python X habe ich auch noch. Wusste ich gar nicht und so weiter. Und dann sind plötzlich nur drei Hitze da. Dann bin ich dort, wo ich hin will. Also diese Negativsuche war entscheidend. Das war für mich das wichtigste Features. Dann Shell-Patterns ist einfach. Ich kann die Suche schrittweise immer weiter verfeinern. Das ist das, was ich in der Praxis brauche. Ich fange irgendwie an zu suchen, dann verfeinere ich meine Suche. Das geht nämlich mit Less. Was auch Negativsuche kann. Das brachte mich auch auf den Gedanken nicht. Und es geht unheimlich schnell. Warum sage ich standleich? Man kann Kästsensitiv und Nichtsensitiv suchen. Ist auch OuterUnix manchmal wichtig. Partnern, die ganzen Optionen, okay. Wichtig ist, ich kann während der Laufzeit die Sucheoptionen verändern. Und ich brauche das laufend. Ich bin lederlich genug. Und man wird auch bequem, wenn man so ein Tool hat. Und es ist natürlich Multi-Plattformen. Bestimmt läuft es auch unter MacOS, aber ich hatte noch keinen zu testen. Nachteil lässt sich sicher beseitigen. Für Route Update braucht man noch Route Rechte. Die Implementierung ist in dem Fall vielleicht interessant. Ich habe mir überhaupt keine Arbeit gemacht. Der Cache ist eine Asstiel-Liste von Tupel im Fahrradname Feilnahme. Der wird auf der Platte geschrieben. Das sind für meinen Home-Director etwa 20 Megabyte. Das ist kein Speicher. Außerdem wollen die Hardware-Hersteller auch leben. Das Cache-Datum wird angezeigt. Finde ich ganz wichtig. Ich muss wissen, auf welchem Stand ich bin. Komisch, das habe ich woanders nicht gesehen. Der Cache wird im Rahmen gehalten. Ich habe also wirklich nur die lineare Lesezeit. Das braucht ungefähr 2, 3 Sekunden. Und wenn man den Cache bildet, dann braucht man vielleicht eine halbe oder eine Minute unter Linux. Windows natürlich ist fünffacher, weil wir wissen, falls es System und Windows. Es ist in WX-Python geschrieben. Das muss also dazu geschrieben. Also nützt WX-Python. Der eigene Tool ist kürzer. Ich versuche es dann, da ich habe noch ein bisschen Seiten. Ja, gut, es wird knapp. Es zeigt ein toller Algorithmus, wie bei Update macht noch lange kein tolles Programm. Ich will das benutzen. Ich mache es also ganz einfach. Ich mache nicht mal dick generis, lineare Suche. Es geht wahnsinnig schnell. Und man findet das auf Bitbucket unter Reinhard W. Jetzt habe ich noch ganz kurz Zeit. Und da kann ich noch mal zeigen, dass es wirklich funktioniert. Also wenn ich hier ein Search mache, jetzt suche ich mal schnell eine halbe, eine halbe Million Pfeils. Ja, gut, jetzt war der Sparscher voll mit allen wirklichen anderen Mühlen. Und vor viel Effekt, dann zweitens mal geht es schneller. Doch, also gut, halbe Million Pfeils. So lange kann man warten. Und dann kann man die Suche weiter einschränken. Und wenn ich das mal rausnehme und mache noch ein Search, gleich kommt der Maus, dann haben wir etwas zu viele Hits. Das ist das, was ich liebe. Okay, ich danke. Die Python-Rochüre, so ein Geist, der seit zwei Jahren rumgeistert. Wir haben immer wieder das Problem Python in ganz bestimmten Zielgruppen, sprich, Führungskräften, Kunden, Mitarbeitern vorzustellen, die absolut keinen Plan von Python haben, die in unseren Medien und in unseren Kommunikationschannels nicht zu Hause sind. Man muss denen letztendlich ein Papier in die Hand drücken, die die dann weitergeben können und durchblättern. Dazu gehören ID-Architekten genauso, die aus dem normalen Flow raus sind, Leute in Forschung und Lehre, Multiplikatoren und andere Leute. Und für den Zweck ist diese Python-Rochüre vor zwei Jahren entwickelt worden. Mittlerweile ist die Content-Entwicklung abgeschlossen. Das heißt, wir haben den kompletten Content fertig, einige haben vielleicht das PDF schon runtergeladen oder sich zum Newsletter angemeldet und fragen sich, warum gibt es nur dieses PDF, warum kann ich das Ding nicht in der Hand halten? Ich kann mal gerade den Inhalt zeigen, mal schnell durchblättern, für diejenigen, die es noch nicht gesehen haben. Es geht allgemein um Python, es geht um Anwendungen zu zeigen. Hier, Mozilla setzt die Sachen an, YouTube, Bit.ly, Esri, SurveyMonkey, also alles bekannte Namen, andere Beispielprojekte, dann Sachen, die die Leute auch persönlich berühren, also Wettervorhersage und so weiter, wo man es mit anfangen kann. Hier, damit kann ich Tools programmieren, die Leben retten. Dann Energie sparen im Walzwerkbereich, da werden Tools mit Python programmiert, Luftfahrt, Industrie, also alles Sachen, wo man den Value sofort erkennen kann. Hier geht es um den Finanzbereich. Finanzanalyse hätten die Leute vielleicht mal früher einsetzen sollen. Learning-Python, also im Bildungsbereich, es gibt Top-Patch-Hild und andere Sachen. Unser Webbewerb haben wir jetzt noch nicht drin. Die Contents sind schon ein bisschen länger dabei. Unten drunter in diesem Graubereich laufen immer allgemeine Boxen mit Informationen zu Python, wo also auch Leute ein bisschen tiefer einsteigen können und sich die Qualität holen können. Klar, chasing the explosion bis Python beim Zern. Als Beispiel, wo wurde Python in Verbindung mit dem Mars Robot eingesetzt. Für die Industrie auch mal sehr populär. Blender, Industrial Light & Magic setzt Python intern für die Vernetzung zwischen den Tools ein. Special Effects bei Houdini und Rack Space natürlich. Das ganz große Gerümpel. Das Ganze muss ja irgendwo laufen. Das Ganze wird mit Anzeigen finanziert. Ich zeige jetzt hier mal ganz kurz die Leute, die schon Anzeigen geschaltet haben. Vielen Dank dafür. Die haben die auch bezahlt und haben schon eine Grundlage geliefert für die Sachen. Leider ist es aber so, dass der zweite Teil, wir hatten vor, das Ganze über Kleinanzeigen, also Mikrosponsoring auch zu finanzieren, dass auch kleine Companies die Möglichkeit haben, mit reinzukommen, ein Register-Eintrag zu schalten. Das hat bei den Publikationen, die der Python Softwareverband in den letzten Jahren für Plone & Soap gemacht, das relativ gut funktioniert. Das ist leider international nicht so gut aufgegangen. Ich möchte das euch ganz herzlich ans Herz legen, ob ihr da eventuell noch mit rein wollt. Momentan ist die Strategie, diese kleinen Anzeigen zu reduzieren und noch ein paar große Sponsoren zu finden. Wir hatten ein paar jetzt an der Angel, aber das Problem ist immer wieder Bank of America, amerikanische Situation. Die sind dann auch wieder abgesprungen. Das heißt, wir brauchen einfach ein paar Leute um die Kasse vollzukriegen, um das Ding dann wirklich im Print loszuschieben. Das muss international verteilt werden. Wir müssen das schippen in die letzten Löcher der Welt, weil es geht nicht nur darum, das Ding zu drucken, es muss ja auch unter die Leute kommen. Das heißt, wir brauchen die Sponsoren auch. Der Antrag hat, kriegt natürlich eine Kiste geschickt und kann dann lokal in seiner Situation die Sachen verteilen. Was eine ganz wichtige Sache ist, hat dann auch ein Medium, was er in die Hand nehmen kann. Die Geschichte mit den toten Bäumen möchte ich nicht mehr hören. Schau euch mal die Analysen an, was es kostet, ein File zu streamen weltweit, ist auch nicht so scheiße. Was? Es gibt so ein paar Sachen, für die interessiert sich keiner. Aber es gibt Sachen, also wirklich, wenn die breit verteilt werden, ist das nicht ohne. Die Pappe lässt sich auch da noch verargumentieren. Denk einfach mal drüber nach. Was habt ihr für Channels? Wo können wir noch für die Finanzierung der Broschüre ein bisschen Geld locker machen? Wir freuen uns über jeden Sponsor, wer toll, wenn ihr was tun könnt und dass wir das Ding endlich rauskriegen. Ansonsten, das PDF kann man sich runterladen und auf jeden Fall schon mal einsetzen. Das war's. Noch was, ganz kurz. Die Infos gibt es auf und das findet dem jetzt auch nicht zu helfen. Ich nehme das schon mal als Applaus für ein Peißencamp. Dankeschön. Wir machen das ja schon eine ganze Weile. Wir haben jetzt auch ein feststehendes Orgerteam. Das hat sich bewährt letztes Mal. Der Thomas Koch, ich und der Oliver. Wir sind so die Ansprechpartner, die auch hier sind. Natürlich auch alle von Peicholon. Wir machen das seit jetzt dann das fünfte Mal. Also fünf Jahre hintereinander Peißencamp in Köln bei der G-Fuß-Syrus AG und natürlich mit der großen Unterstützung des breiten Softwareverbandes. Jetzt habe ich das ja natürlich schon fort weggenommen. Wir sind das fünfte und Heißencamp ist auch nur ein schöner Name für ein Barcamp. Und da ist einfach der Hintergrund. Wir haben Sponsoren, hoffentlich. Wir müssen dann noch wieder mit dem Hut rumlaufen. Dass wir halt die geringen Umkosten, die wir für Pizza und Getränke brauchen, dann decken können. Und dann ist das für alle Teilnehmer kostenlos. Weil die G-Fuß-Syrus AG das Schulungsgebäude komplett stellt. Also wir haben dann meistens sehr viele Räume, sehr viele Beamer, Internet. Und ja, die haben auch so eine kleine Küche und so mit Getränken versorgen die uns auch. Und die Anmeldung ist demnächst. Die URL gibt es schon, kann man schon anschauen. Aber ich habe das mal damit es keine Konfusion mit dem Barcamp hier gibt, noch nicht freigeschaltet. Und viele gehen vielleicht am Freitag nicht zum Barcamp, weil die gar nicht wissen, was das ist. Ja, das ist eigentlich eine ganz lockere Veranstaltung. Es ist nicht so, dass man, wenn man da vortragen will, Monate vor, so ein Abstreck einreichen muss. Man kann einfach eine Idee haben und kann die da ankündigen, kann ein paar Sätze dazu erzählen und dann entscheiden alle Leute, die da sind, ob sie das hören wollen. Und so bilden sich dann Krübchen, die dann in Räume verschwinden. Und so erzählen wollen, ist das halt ein abendführendes Programm. Oder ein längerer Tag, oder wie auch immer. Und man kann auch ganz anders wie auf einer Konferenz agieren. Man kann sagen, ich habe eine Frage. Kann mir mal jemand was zu den Features von so und so erzählen, wenn Leute da sind, hat man sein Problem gelöst. Oder man sagt, ich habe hier Fehler in meinem Programm, ich komme da nicht weiter. Also es ist völlig offen, was man macht. Also alles ist da möglich. Das Schöne ist halt, das kann sehr spontan sein. Und auch das Programm kann sich halt jetzt ergeben, einfach dadurch, dass man hier Vorträge gehört hat, möchte dann noch was ergänzen, die Zeit war aber aus, und dann hat man das im Barcamp einfach die Möglichkeit. Die andere Sache ist auch, man traut sich ja nicht so aus zum Konferenzraum raus zu gehen. Beim Barcamp ist das ganz easy. Wenn einem was dann doch nicht zusagt, geht man einfach in die nächste Session, die parallel läuft. Und ja, damit ihr das mal ins Feeling kommt und nicht erst bis März wieder warten müsst, das geht hier schon. Also geht mal auf die URL, gebt da eine Session ein, die erhalten möchte, oder guckt mal an, was da schon geboten wird. Also am Freitag geht das hier. Jetzt aber mal ein bisschen Rückblick. Wir machen das ja schon eine ganze Weile. Ich hoffe, ich kann hier so ein paar Sachen öffnen, vielleicht. Also wir haben im Paisen-Viki, wir hätten ja keine Viki-Paisen-DE, hätten wir gerne, haben wir aber nicht. Wir haben aber Viki-Paisen-Forum-DE. Wenn ihr da einfach mal nach Barcamp sucht, dann findet ihr eine ganze Menge interessante Anregungen, was so alles gewesen ist. Und wir haben klein angefangen, beim ersten Barcamp. Dann haben wir gelernt, es muss zwei Tage sein, weil dann bekommt man so was hin. Also das war jetzt der Zuwachs, das war jetzt der bisher größte Pieck, den wir hatten, wir mussten den Anmeldestopp bei 70 Teilnehmern vollziehen. Wir konnten nicht mehr. Also 70 Leute hatten sich da angemeldet. Also wieder der Aufruf, ja, also ist es viel schwieriger eigentlich so viele Leute nach Köln zu locken, wenn man das irgendwann im Frühjahr macht. Hier sind ja eigentlich schon viel mehr Leute. Geht einfach mal hin, guckt mal rein. Auch wenn ihr nur mal eine Session oder sowas mitmacht, weil vielleicht dann eure Bahn leider fährt. Ja, ja. Schlecht geplant. Macht es beim nächsten Mal anders. Planen diese Sachen ein. Und ja, wir hatten halt jetzt im März waren 70 Sessions und ich hoffe, dass ich jetzt mal hier so ein YouTube Video, wie geht das? Hm. Egal. Es startet. Es startet hoffentlich. Nee, das ist falsch. Nein. Entschuldigung, Mike.