Konferenz über Python und über Kommunikation

    Traditionell wird Python verwendet, um Netzwerkdienste, ein Backend im Web, zu erstellen und natürlich Daten zu sammeln und zu verarbeiten, normalerweise Big. Wir werden versuchen, diese Bereiche zu gleichen Teilen mit Ökosystemberichten auf der bevorstehenden Moscow Python Conf ++ zu diskutieren. Diese Konferenz für Python-Entwickler findet am 22. und 23. Oktober in Moskau statt, und ich leite das Programmkomitee. Man könnte sagen, das Programm hat gelitten, wir haben es genau so gemacht, wie wir es geplant hatten - vielfältig. Das Backend, Big Data und Sprachfunktionen kombinieren wir harmonisch mit Berichten über Tests, künstliche Intelligenz, Sicherheit und DevOps. Ich möchte das Ergebnis vorab mit Ihnen teilen, daher schlage ich eine Überprüfung der Berichte zu Abschnitten vor - das, was in keiner Weise für Sie zutrifft, kann übersprungen werden.



    Warten Sie, bevor Sie mit dem nächsten Thema fortfahren. Das obige Bild sagt: "Professional Conference" - das heißt, es ist für professionelle Entwickler gedacht. Die Gäste, die wir sehen, sind nicht nur Python-Entwickler selbst, sondern auch Programmierer, die in erster Linie einen anderen Stack verwenden, aber an Pythons Fähigkeiten für Hilfsaufgaben interessiert sind. Berichte sollten die letzten sein, die zum Beispiel über Apache Kafka, Wagtail, SQLAlchemy oder linter veröffentlicht werden.

    Alle Berichte werden so erstellt, dass Sie auch verstehen können, ohne das spezifische Thema der Rede zu verstehen, wodurch Sie Ihren Horizont erweitern. Gleichzeitig können Profis die schwierigsten Probleme lösen. Herkömmlicherweise gibt es drei Themenblöcke und "Verschiedenes":


    Bei unserer Konferenz geht es in erster Linie um Kommunikation. Es versteht sich, dass der Sprecher ein interessantes Thema fragt, sagt er seine Vision, Austausch von Erfahrungen, das Angebot Kollegen mögliche Ansätze diskutieren. Das heißt, wenn Sie es schaffen, Ihre eigene Introversion zu dämpfen und alle Möglichkeiten maximal zu nutzen, werden Sie nach der Konferenz voller neuer Ideen und Möglichkeiten sein, um alte Probleme zu lösen. Welche Probleme besprochen werden, lesen Sie weiter.

    Netzwerk- und Back-End-Web-Entwicklung


    Wir beginnen die Überprüfung mit einem seriösen und ziemlich universellen Abschnitt, der fast ein Drittel aller Berichte enthält.

    Leistungsstarke Datenverarbeitung in Python


    Python ist derzeit das Hauptwerkzeug zum Konvertieren großer unstrukturierter Daten. numpy und  Numba beliebten Bibliotheken, aber wenn sie mit ihnen Entwickler arbeiten einfach , in die Falle tappen die gesamte Leistung zu verlieren. Donald Whyte (Engineers Gate) erklärt, wie Numpy / Numba unter der Haube arbeiten und wie sie die Vektorisierung verwenden, um große Datenmengen schnell zu verarbeiten. Diese Tools haben es Donald ermöglicht, wissenschaftliche Berechnungen um das Zehnfache oder mehr zu beschleunigen. Es wird sehr nützlich sein, seine Erfahrungen zu übernehmen.

    Erleben Sie die Verwendung von Apache Kafka in World of Tanks


    Levon Avakyan wird in seinem Bericht erläutern, wie Apache Kafka in Wargaming-Projekten eingesetzt wird, welche Schwierigkeiten sich in diesem Zusammenhang ergeben und wie sie überwunden werden können. Es ist auch kein Geheimnis, dass Wargaming Python häufig für die Entwicklung verwendet. Levon wird seine Erfahrungen mit der Verwendung verschiedener Bibliotheken für Apache Kafka in Python teilen .



    Bachstelze: Wenn Sie etwas Schöneres wollen als nur Django


    In der Welt der PHP-Entwicklung gibt es WordPress, auf dem fast jeder eine einfache Site erstellen und später einen Spezialisten hinzuziehen kann, wenn Sie diese Site erweitern müssen. In der Python-Welt gab es bis vor kurzem nichts Vergleichbares. Jetzt ist das Wagtail- Projekt erschienen - ein vollwertiges CMS auf Django-Basis für moderne Websites. Igor Mosyagin von Lamoda erklärt Ihnen, wie Bachstelze funktioniert, wo es bequem zu bedienen ist und ob es wirklich so einfach ist.

    Django unter dem Mikroskop


    Aus dem  Bericht des Core-Entwicklers Django Channels Artyom Malyshev (der uns beispielsweise aus diesem Vortrag bereits bekannt war ) erfahren Sie alle Details aus dem Leben der internen Django-Mechanismen vom ersten Byte der HTTP-Anfrage bis zum letzten Byte der Antwort .

    Es erwartet Sie eine wahre Extravaganz, wie die Parserformulare funktionieren, wie SQL kompiliert wird, wie die Template-Engine für HTML implementiert wird, wie der Verbindungspool verwaltet wird usw. All dies in chronologischer Reihenfolge der Verarbeitung von WSGI-Objekten.

    Jenseits von Jupyter. Pipeline-Konstruktionssysteme für die Datenverarbeitung


    Andrei Popov wird Ihnen mitteilen, welche Frameworks für Python von Positive Technologies verwendet werden, um eine große Datenmenge zu sammeln und auf Bedrohungen zu analysieren. In einem  Bericht wird darauf eingegangen, wie diese Daten ordnungsgemäß erfasst und in einer für die verschiedenen Teams im Unternehmen geeigneten Form gespeichert werden. Aber ansonsten werden wir auf solche Fragen eingehen:

    • Wann ist es angebracht, Sellerie / Kaninchen zu verwenden, und wann ist es besser, eine Datenpipeline zu erstellen?
    • Vergleich von Airflow und Luigi .
    • Luigi 101 - Grundbegriffe und Anwendungsbeispiele.

    Als Ergebnis können wir herausfinden, welche Technologie in einem bestimmten Fall ausgewählt werden muss und wie sie im Code aussehen wird.

    Verlauf der Aktualisierung der Projektarchitektur


    Alexander Borgardt wird eine eher nicht triviale Geschichte der Entwicklung eines Projekts teilen . Es begann mit dem Tornado und wurde teilweise in C ++ umgeschrieben, um die Fahrleistung zu verbessern. Dann kam 2018 und es stellte sich heraus, dass jetzt viele alte Hacks nicht mehr benötigt werden . Das Paket asyncio + uvloop + aiohttp führt in den meisten Fällen dazu, dass die Leistung nicht schlechter wird. Anhand eines konkreten Beispiels mit klaren Empfehlungen geht es um einen solchen Fall, über den wir in Alexanders Bericht sprechen werden.



    50 Schattierungen Sellerie


    Oleg Churkin ist seit 8 Jahren in der Python-Entwicklung tätig und spielt nun die Rolle des Techlide im TechOps-Fintech-Startup. Wenn wir Fintech sagen, meinen wir - Big Data . Aus  dem Bericht von Oleg lernt über die Feinheiten einen Scheduler verwenden Sellerie große Daten für die Verarbeitung:

    • für welche Arten von Problemen können und sollten Sellerie verwendet werden;
    • wie man 500.000 Aufgaben startet und die Datenbank und externe Dienste am Leben lässt;
    • wie man die Aufgabenleistung überwacht;
    • wie man es nicht die Aufgabe, bei deploe zu verlieren;
    • wie man unterstützten Aufgabencode schreibt.

    Wir werfen auch einen Blick auf die Bibliotheken des Autors, mit denen Sellerie erfolgreich skaliert und Warteschlangen / Aufgaben in Grafana und Prometheus überwacht werden können. Vielleicht haben Sie schon ein paar Spoiler gesehen hier .

    Python-Sprache, ihre Entwicklung und Verwendung


    Bevor ich zu meinem geliebten Python übergehe, stelle ich fest, dass unser Konferenzprogramm so gestaltet ist, dass jeder Gast einen für ihn interessanten Fall auswählen, dem Redner zuhören und vor allem mit allen Personen kommunizieren kann, die zu demselben Bericht gekommen sind.

    Sozialer Betrug. Je wichtiger das Thema des Berichts ist, desto näher an der Bühne ist es sinnvoll, sich hinzusetzen. Zunächst ist es bequemer, dem Sprecher Fragen zu stellen. Zum anderen werden andere interessierte Spezialisten das Gleiche tun, Sie können die Leistung mit ihnen besprechen und die Diskussion über eine Kaffeepause reibungslos fortsetzen.

    Ich möchte Sie daran erinnern, dass es bei der Konferenz meiner Meinung nach um Kommunikation geht, und diese Gelegenheit sollte nicht versäumt werden.

    Aktualisieren Sie Python 2.7 auf Python 3.6 und sterben Sie nicht


    Evolution ist ein natürliches Phänomen. Sie hat auch Python nicht bestanden, aber einige Projekte verwenden Python 2.7 aus einem einfachen Grund - wegen der Komplexität der Migration zwischen Versionen . Alexander Polishchuk (Sicherheitscode) bietet an, seinen dornigen Weg der Erneuerung zu teilen . Aus dem Bericht erfahren wir etwas über den Rechen und die überfüllten Zapfen, und an einem lebenden Beispiel werden wir verstehen, dass sich das Ergebnis natürlich lohnt.

    Hollywood spricht von Linters


    Nikita Sobolev, der Gründer von wemake.services studio, ist bei mehr als einem unserer Treffen aufgetreten und kennt Sie bereits. Wir haben es geschafft, Nikita dazu zu bewegen, den Python Junior- Podcast aufzunehmen , in dem die Anwendung für den Bericht erstellt wurde.

    Wie der  Name schon sagt , konzentrieren wir uns dieses Mal auf die automatisierte Codeüberprüfung in Python. Dieser Linter wurde direkt in Nikitas Studio entwickelt, das heißt, Sie und ich haben die Möglichkeit, den Tool-Entwickler direkt zu fragen. Darüber hinaus ist interaktiv versprochen , was bedeutet, dass es nicht nur informativ, sondern auch unterhaltsam sein wird.

    Wie man Menschen Programmieren beibringt und das Leben genießt


    Der Dozent murmelt und erklärt den Begriff, der an die Tafel geschrieben ist. Ihr Nachbar malt etwas auf den Schreibtisch. Aus dem Schlaf ersparen Sie sich nur das Aufschreiben jedes Wortes des Dozenten. Ist das bekannt Leider hat sich der Lernprozess nicht wesentlich verändert. Aus langweiligen Vorträgen wurden langweilige Webinare, aus langweiligen Tests wurden langweilige Online-Tests, aus langweiligen Aufgaben wurden langweilige und nutzlose Aufgaben.

    Ilya Lebedev ist ein erfahrener Python-Entwickler und Entwickler der Lernplattform devman.org. Als Mitorganisator entwickelt und unterrichtet MoscowPython seit mehreren Jahren auf  learn.python.ru.. In seinem Bericht wird Ilya das Thema der Ausbildung von Programmierern ansprechen, mit denen alles sehr nicht sehr ist. Darüber hinaus im Allgemeinen. Eine einfache Methode, Junioren von Absolventen einer bestimmten Universität, Fakultät oder Fachrichtung einzustellen, funktioniert nicht. Ilya wird auf der Grundlage seiner Erfahrungen versuchen zu erklären, welche Schwierigkeiten beim Lernen auftreten, um sich zu entwickeln, und Ratschläge geben, was zu tun ist, um seine Fähigkeiten zu verbessern und ihn unterzuordnen.

    Refactoring in Python: Entwurfsmuster und -ansätze


    Tin Marković von Kiwi.com (Tschechische Republik) wird seine Erfahrung bei der Organisation einer großen Menge extrem komplexer Python- Codes teilen . Wie das Chaos aufzuräumen, wie Sie den Code zu aktualisieren, nicht neu Chaos entwickeln ermöglicht, und in der Regel zu hohen Standards entsprechen in der Code - Basis. All dies lieben wir mit realen Beispielen und persönlicher Erfahrung.

    Pylint von innen nach außen. Wie macht er das?


    Maxim Mazaev entwickelt in Python am CIAN, interessiert sich für Sprachinternale, Asynchronität und funktionale Programmierung. Sein Bericht greift den Bericht von Nikita Sobolev über Linters auf , aber er wird sich auf ein Hauptinstrument konzentrieren, das wir gründlich verstehen werden . Mit diesem Wissen werden wir es anwenden, um die Qualität des Codes zu verbessern - wir werden unser Plugin für Pylint schreiben .

    Erstellen von DSL-Compilern in Python


    Durch die Verwendung kleiner Programmiersprachen für einzelne Themenbereiche (DSL) können Sie die Komplexität von Softwaresystemen bei Bedarf bewältigen. Infolgedessen tritt das Problem des Rapid Prototyping von DSL-Compilern auf. Vor Peter Sovetov von MIREA war diese Aufgabe beispielsweise im Zusammenhang mit der Beschleunigung der Entwicklung spezialisierter Prozessorkerne auf FPGA entstanden . Peter wird über die Etappen und beeindruckenden Ergebnisse seiner Arbeit in Moskau Python Conf ++ erzählen .

    Häufige Fehler in der Django-Anwendungsarchitektur


    Alex Polovinkin von Agima setzt das ehrgeizige Ziel des Berichts  - Show - Befehle Back-End - Entwicklung, wie die Architektur der Django-Anwendungen zu erstellen, wie nicht hundert Fallen zu stolpern und ist abgelaufen nicht alle Termine. Betrachten Sie Beispiele für die häufigsten Teamfehler in der Anfangsphase der Entwicklung. Lassen Sie uns diskutieren, wie Sie die Architektur von Django-Anwendungen entwerfen, warum Sie eine verteilte Architektur verwenden und die Statik von Django fernhalten sollten. Vergessen wir das Refactoring , gehen auf viele wichtige Themen ein und machen uns mit der Erfahrung der Agima-Entwickler vertraut.

    Maschinelles Lernen, Künstliche Intelligenz und Datenvisualisierung


    Maschinelles Lernen und Python sind ein hartnäckiges assoziatives Paar. Und natürlich kommt Python Conf ++ in Moskau nicht ohne Berichte über alles aus.

    Wie man moderne ML in ein hartes Erbe einbettet


    Wenn es darum geht hat ML-Modelle zur Automatisierung häufig im Sinne erstens neue Projekte, und zweitens, Jupyter und einig Umgebung um ihn herum. Dieser Ansatz eignet sich nicht für ein Analysesystem in einer Bank, in der in der Regel eine große Menge an Daten vorhanden ist.

    Oleg Mangutov gelang es jedoch, moderne Freunde des maschinellen Lernens mit einer Umgebung zu gewinnen, in der Oracle und SOAP verwendet werden, und zwar mithilfe von Universal Glue-Python. Die wichtigste Schlussfolgerung dieses Berichts , meiner Meinung nach ist, dass ein normaler Entwickler mit der gebotenen Sorgfalt kann , ohne alles von Grund auf neu zu schreiben maschinelles Lernen Algorithmen für bestehende Projekte realisieren und ohne die Seile zu lernen , wie Oracle ausgeführt wird . Dies kann enorme Vorteile bringen, und Live-Business-Benutzer können die entwickelte Benutzeroberfläche verwenden.

    Theorie neuronaler Netze


    Beau Carnes verfügt über umfangreiche Erfahrung im Unterrichten von IT-Themen und bereitet derzeit einen neuen Deep-Learning-Kurs vor. Sein Bericht wird in zwei Teile gegliedert (Mittagessen in der Mitte zum Verdauen von Wissen). Im ersten Teil des Berichts werden die grundlegenden Konzepte adressieren: die Lehrerausbildung und ohne; neuronale Netze zur Vorhersage; Gradientenabfallsaktualisierung. Wir werden diskutieren, inwiefern sich Deep-Learning-Methoden von herkömmlichen Methoden des maschinellen Lernens unterscheiden, und wir werden uns mit ihnen befassen, nicht nur mit den Frameworks.

    Im zweiten Teil der Performance warten wir auf die Live-Codierung im Jupyter Notebook. Bo direkt auf dem Sprung in Python von Grund auf neu erstellt ein neuronales Netzwerk, das lernt und erkennt ... aber was es erkennt, werden Sie am 22. Oktober lernen.

    So schützen Sie den Algorithmus für maschinelles Lernen vor widersprüchlichen Beispielen


    Когда мы используем для машинного обучения публичные данные, на приходится рассчитывать, что они будут полными и чистыми. Однако, как легко заметить на примере Google переводчика, данные могут выглядеть как правильные, а на самом деле вместо корректного перевода научить систему неожиданным интерпретациям. Это один из вариантов adversarial примера.

    Специалист по анализу данных из Digital Security Сергей Дудоров подробно познакомит нас с этой проблемой, расскажет о методах нападения, защиты и тестирования алгоритмов машинного обучения на предмет противодействия таким манипуляциям с использованием библиотек CleverHans и Adversarial-robustness-toolbox.

    Python Virtual Assistant


    Oleg Plichko verspricht zu demonstrieren, dass Sie einen Chat-Bot mit künstlicher Intelligenz mithilfe gängiger Tools erstellen können : TensorFlow, Celery, Django. Wir werden aus dem  Bericht lernen , wie unser virtueller Assistent wirklich nützlich sein kann, und wir werden ein Beispiel für einen sehr interessanten Chat-Bot sehen, den viele von uns möglicherweise in Zukunft nützlich finden werden. Wir können Oleg alle unsere Fragen zu Bots und kognitiven Diensten stellen.

    Jupyter und PySpark auf Hadoop für Big Data-Analyse


    Maschinelles Lernen - eine neue, sich rasch entwickelnden Bereich, gibt es nicht so viele gut etablierte Praktiken. Deshalb experimentiert jeder Data Scientist viel und will es schnell tun. Nun, wenn es sich um einfache Hypothesen handelt, z. B. ob es genügend Daten gibt und ob sie korrekt sind. Aber was ist, wenn Sie eine komplexe selbstgeschriebene Funktion auf eine große Anzahl von Objekten anwenden müssen? Darüber hinaus müssen alle Aufgaben im Produktionscluster gelöst werden, in dem weitere 50 Mitarbeiter beschäftigt sind.

    Pavel Tarasov zeigt Ihnen, wie Sie komplexe Hypothesen mit der minimalen Anzahl von Tools und Code wirklich schnell testen können. In diesem Fall können Sie mit Jupyter und PySpark einen Stand aufbauen und müssen nicht eine Woche lang die Umgebung vorbereiten, wie dies bei Big Data häufig der Fall ist, da sie groß sind.

    Die Konferenz findet in Infrasprismst statt, ein kleiner Raum wird für benutzergenerierte Inhalte reserviert. Das heißt, Mitaps, die jeder sammeln kann, sind die Hauptsache, die Gleichgesinnte finden. Es wird möglich sein, vor Ort zu organisieren, aber wenn Sie sich im Voraus anmelden , werden Sie eingeplant.

    Verschiedenes: Testen, Sicherheit, DevOps


    Weitere Einzelberichte gehen sie nicht in große Teile ein, sondern lösen das Problem der Vielfalt. Themen sind übrigens sehr wichtig und interessant, ein Social Engineering ist etwas wert, oder hier ist eine "Hacking-Anleitung".

    Ein Hacker-Handbuch zum Sichern von Python-Webanwendungen


    Ich hoffe, dass Ihre Webprojekte noch nie angegriffen oder gehackt wurden, aber höchstwahrscheinlich sah sich jemand von Ihren Freunden mit ihren traurigen Konsequenzen konfrontiert. Unser Kollege, einer der Organisatoren von PyCon Nigeria, Eyitemi Egbejule, behauptet, dass Sie mit sicheren Codierungsmethoden und einigen nützlichen Bibliotheken die Schwachstellen in Python-Webanwendungen für immer vergessen können. Auf der Grundlage  umfangreicher Erfahrungen bei der Sicherheitsüberprüfung von Eyitemi-WebprojektenHier erfahren Sie, welche Fehler die Entwickler von Netzwerkdiensten am häufigsten machen, wo zuerst nach Schwachstellen gesucht wird und welche am schnellsten geschlossen werden können. Nicht unbedingt wird es Software sein, Probleme können in der Logik oder in der Verwendung gängiger, aber falscher Standardeinstellungen liegen.

    Wir hoffen , dass dieser Bericht Entwickler ermöglichen wird , einen frischen Blick auf Ihrem Code zu nehmen und vielleicht sogar beginnen , den Rat genau dort auf der Konferenz zu übernehmen.

    Effiziente Seleninfrastruktur


    Verwenden Sie Selen für automatische Tests, haben es aber satt, mit Bremsen und Abstürzen umzugehen? Dann ist ein Meisterkurs von Ivan Krutov (Aerokube) über effektive Seleninfrastruktur für Sie.

    In der Meisterklasse verspricht Ivan, anhand der Open- Source-Projekte Selenoid und Ggr zu zeigen, wie der Selen-Cluster in wenigen einfachen Schritten von Grund auf neu implementiert werden kann , um das veraltete Selen-Gitter zu ersetzen und die Qualen durch Selen zu beenden. Sie werden sehen , wie einfach es ist , einen ausführbaren Test, das Hinzufügen neue Versionen von Browsern und beobachten Sie die Protokolle in Echtzeit zu schreiben.

    Material waren so viele , dass der Workshop 2 Stunden 23. Oktober nehmen - vor und nach dem Mittagessen, alles sorgfältig vpereryve obmozgovat zu tun.

    Dark Python: Social Engineering und Hacking mit 70% Erfolgsquote


    Wenn Sie der Meinung sind, dass dies die zuverlässigste Informationsquelle ist - der Film -, dann wenden Hacker jetzt anstelle der Konsole die Methoden des Social Engineering an . Lukas Hurych von Twisto.cz probiert als Hobby verschiedene Angriffsmethoden auf seine Kollegen aus. Die Ergebnisse sind umwerfend - 70% Erfolg. Darüber hinaus spielt unser Python eine wichtige Rolle bei der Automatisierung dieses Prozesses.

    Lucas wird Ihnen helfen herauszufinden, wie der Feind aussieht und welche Methoden am häufigsten und effektivsten sind, damit wir uns in unserem Backend und UX gegen ihn verteidigen können.

    SQLAlchemy-Beschleunigung für Architekturastronauten


    Der große Vorteil von SQLAlchemy ist, dass es sich um ein sehr verbreitetes ORM handelt und eine der besten Lösungen für die Kommunikation mit einer Datenbank in einer Hochsprache ist. Aber manchmal kann diese Bequemlichkeit zu Überraschungen führen. Offensichtlich kann diese Bequemlichkeit manchmal zu Überraschungen führen. Alexei Starkov von Qrator Labs am Beispiel der Konfiguration der Netzwerkverkehrs - Filterung mit einem großen (Hunderttausenden) Anzahl der Datensätze zeigt , wie hohe Leistung zu erzielen . Um dies zu tun, müssen Sie aus dem naiven Gebrauch SQLAlchemy ORM für Bulk-Operationen gehen und verwenden SQLAlchemy Kern und Details 23. Oktober um 16:00 Uhr.

    Gute und schlechte Praktiken zum Schreiben von testbarem Code


    In seinem Bericht Dmitry Dygalo von kiwi.com gehen zu diskutieren Ansätze , die helfen können , den Code verständlicher zu machen und zuverlässigen Test. Sprechen wir über eine Vielzahl von Problemen und holen Sie sich einen konkreten Rat, zum Beispiel, dass globale Variablen ein praktisches Konzept sind, das häufig nicht benötigt wird. So finden Sie einen Kompromiss zwischen Isolation und Geschwindigkeit in einer Testdatenbank. Informationen zur  Abhängigkeitsinjektion und zur Trennung von Ausführung und Implementierung anhand von Beispielen aus gängigen Bibliotheken. Und das ist sicherlich nicht alles.

    Dies scheint mehr als genug zu sein, um eine Vorstellung davon zu bekommen, was auf der Konferenz passieren wird. Für die Arbeit am Programm möchte ich allen Mitgliedern des Programmkomitees danken: Vladimir Filonov, Zlata Obukhovskaya, Alexander Khayorov und Ivan Tsyganov und Leonid Calneus.

    Durch komplexe logische Operationen haben wir bereits alle Berichte in einen harmonischen Zeitplan gebracht ( hier pdf mit thematischer Visualisierung). Es stellte sich heraus, was wir vor sechs Monaten mit unseren Vorbereitungen für die Konferenz vor Augen hatten: Die Themen verteilen sich auf die gesamte Verwendungsvielfalt von Python, eine angemessene Anzahl englischsprachiger Sprecher, auf der After-Party gibt es etwas zu besprechen bei einer Tasse Kaffee und einem Glas Bier.

    Wir sehen uns auf der  Moscow Python Conf ++ 2018 !

    Jetzt auch beliebt: