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 kommenden 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 geschafft, es genau so zu machen, wie wir es geplant hatten - vielfältig. Das Backend, Big Data und Sprachfunktionen kombinieren wir harmonisch mit Berichten zu Tests, künstlicher Intelligenz, Sicherheit und DevOps. Ich möchte das Ergebnis im Voraus mit Ihnen teilen, daher biete ich eine Überprüfung der Berichte zu den Abschnitten an - das, was in keiner Weise auf Sie zutrifft, kann übersprungen werden.



Warten Sie jedoch nicht, um zum nächsten Thema zu gelangen. Das Bild oben sagt: "Professional Conference" - das heißt, es ist für professionelle Entwickler gedacht. Die Gäste, die wir sehen, sind jedoch nicht nur Python-Entwickler selbst, sondern auch Programmierer, die hauptsächlich einen anderen Stack verwenden, aber an den Funktionen von Python für Hilfsaufgaben interessiert sind. Die letzten sind Berichte über Apache Kafka, Bachstelze, SQLAlchemy oder Linter.

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


Bei unserer Konferenz geht es hauptsächlich um Kommunikation. Es versteht sich, dass der Redner ein interessantes Thema festlegt, seine Vision erzählt, seine Erfahrungen teilt und vorschlägt, mögliche Ansätze mit Kollegen zu diskutieren. Dies alles bedeutet, dass Sie nach der Konferenz voller neuer Ideen und Möglichkeiten sind, alte Probleme zu lösen, wenn Sie es schaffen, Ihre eigene Introversion zu dämpfen und alle Möglichkeiten maximal zu nutzen. Welche Probleme besprochen werden, lesen Sie weiter.

Netzwerk-, Backend- und Webentwicklung


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

Hochleistungsdatenverarbeitung in Python


Python ist derzeit das Hauptwerkzeug zum Konvertieren großer unstrukturierter Daten. numpy und numba sind beliebte Bibliotheken, aber wenn ein Entwickler mit ihnen arbeitet, kann er leicht in die Falle tappen und jegliche Produktivität verlieren. Donald Whyte (Engineers Gate) erklärt, wie Numpy / Numba unter der Haube funktionieren und wie sie mithilfe der Vektorisierung große Datenmengen schnell verarbeiten. Mit diesen Tools konnte Donald die wissenschaftlichen Berechnungen um das Zehnfache oder mehr beschleunigen. Es wird sehr nützlich sein, seine Erfahrungen zu übernehmen.

Erfahrung mit Apache Kafka in World of Tanks


Levon Avakyan wird in seinem Bericht erläutern, wie Apache Kafka in Wargaming-Projekten eingesetzt wird, welche Schwierigkeiten in diesem Zusammenhang auftreten und wie diese ü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 als nur Django wollen


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

Django unter dem Mikroskop


Aus dem Bericht des Kernentwicklers Django Channels Artyom Malyshev (der uns beispielsweise bereits aus diesem Vortrag bekannt ist ) erfahren Sie alle Details aus der Lebensdauer interner Django-Mechanismen vom ersten Byte der HTTP-Anforderung bis zum letzten Byte der Antwort .

Es erwartet Sie eine echte Extravaganz darüber, wie die Parser-Formulare 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. Datenverarbeitungs-Pipeline-Konstruktionssysteme


Andrey 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. Ein Bericht konzentriert sich darauf, wie diese Daten ordnungsgemäß erfasst und in einer Form gespeichert werden, die für verschiedene Teams im Unternehmen geeignet ist. Abgesehen davon werden wir jedoch auf solche Fragen eingehen:

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

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

Aktualisierungsverlauf der Projektarchitektur


Alexander Borgardt wird eine eher nicht triviale Geschichte der Entwicklung eines Projekts teilen . Es begann mit einem Tornado, dann wurde ein Teil davon 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 asyncio + uvloop + aiohttp-Bundle führt meistens zu keiner schlechteren Leistung. Es geht um einen solchen Fall anhand eines konkreten Beispiels mit klaren Empfehlungen, über die wir in Alexanders Bericht sprechen werden.



50 Sellerietöne


Oleg Churkin ist seit 8 Jahren an der Python-Entwicklung beteiligt und spielt nun die Rolle des Techlide im TechOps-Fintech-Startup. Wenn wir Fintech sagen, meinen wir - Big Data . Aus Olegs Bericht erfahren wir, wie kompliziert die Verwendung des Sellerie-Schedulers zur Verarbeitung von Big Data ist:

  • für welche Arten von Aufgaben Sellerie verwendet werden kann und sollte;
  • wie man 500.000 Aufgaben startet und die Datenbank und externe Dienste am Leben lässt;
  • wie man die Aufgabenleistung überwacht;
  • wie man beim Bereitstellen keine Aufgaben verliert;
  • wie man unterstützten Aufgabencode schreibt.

Wir werden uns auch die Bibliotheken des Autors ansehen, mit denen Sellerie erfolgreich skaliert und Warteschlangen / Aufgaben in Grafana und Prometheus überwacht werden können. Vielleicht haben Sie hier schon einige Spoiler gesehen.

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 all jenen Personen kommunizieren kann, die zu demselben Bericht gekommen sind.

Sozialer Betrug. Je wichtiger das Thema des Berichts ist, desto näher ist es sinnvoll, sich zu setzen. Erstens ist es bequemer, dem Sprecher Fragen zu stellen. Zweitens werden andere interessierte Spezialisten dasselbe 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 vernachlässigt werden.

Aktualisieren Sie Python 2.7 auf Python 3.6 und sterben Sie nicht


Evolution ist ein natürliches Phänomen. Sie hat Python auch nicht bestanden, aber einige Projekte verwenden Python 2.7 immer noch 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 Linter Bericht


Nikita Sobolev, der Gründer von wemake.services Studio, hat bei mehr als einem unserer Treffen mitgewirkt und ist bereits mit Ihnen vertraut. Wir haben es geschafft, Nikita zur Aufnahme des Python Junior- Podcasts zu locken, in dessen Verlauf die Anwendung für den Bericht erstellt wurde.

Wie der Name schon sagt , konzentrieren wir uns diesmal auf die automatische Codeüberprüfung in Python. Dieser Linter wurde direkt in Nikitas Studio entwickelt, dh wir haben die Möglichkeit, den Tool-Entwickler direkt zu fragen. Darüber hinaus wird Interaktiv versprochen, was bedeutet, dass es nicht nur informativ, sondern auch unterhaltsam ist.

Wie man Menschen das Programmieren beibringt und das Leben genießt


Der Dozent murmelt kläglich und erklärt den an die Tafel geschriebenen Begriff. Dein Nachbar zeichnet etwas auf den Schreibtisch. Aus dem Schlaf sparen Sie nur die Notwendigkeit, jedes Wort des Dozenten aufzuschreiben. Ist das bekannt? Leider hat sich am Lernprozess nicht viel geändert. Aus langweiligen Vorträgen wurden langweilige Webinare, aus langweiligen Tests langweilige Online-Tests, aus langweiligen Aufgaben langweilige und nutzlose Aufgaben.

Ilya Lebedev ist eine erfahrene Python-Entwicklerin und Entwicklerin 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 wenig ist. Darüber hinaus im Allgemeinen. Eine einfache Möglichkeit, Junioren von Absolventen einer bestimmten Universität, Fakultät oder Fachrichtung einzustellen, funktioniert nicht. Basierend auf seiner Erfahrung wird Ilya versuchen zu erklären, welche Schwierigkeiten beim Lernen der Entwicklung auftreten, 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 Erfahrungen bei der Organisation einer großen Menge extrem komplexen Python- Codes teilen . Wie man die Ordnung wiederherstellt, wie man Code aktualisiert, verhindert, dass sich ein neues Chaos entwickelt, und im Allgemeinen hohe Standards in der Codebasis einhält . All dies lieben wir an realen Beispielen und persönlichen Erfahrungen.

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


Maxim Mazaev entwickelt sich in Python bei CIAN und interessiert sich für Sprachinternale, Asynchronität und funktionale Programmierung. Sein Bericht greift den Bericht von Nikita Sobolev über Linters auf , konzentriert sich jedoch auf ein Hauptwerkzeug, 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 entstand diese Aufgabe beispielsweise im Zusammenhang mit der Beschleunigung der Entwicklung spezialisierter Prozessorkerne auf FPGA . Peter wird über die Phasen und beeindruckenden Ergebnisse seiner Arbeit in Moscow Python Conf ++ berichten.

Häufige Fehler in der Architektur von Django-Anwendungen


Alexey Polovinkin von Agima setzt sich das ehrgeizige Ziel des Berichts - den Backend-Entwicklungsteams zu zeigen, wie man die Architektur von Django-Anwendungen erstellt, wie man nicht über hundert Fallstricke auslöst und nicht alle Fristen abläuft. 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 wir auf viele wichtige Themen ein und machen Sie sich mit den Erfahrungen der Agima-Entwickler vertraut.

Maschinelles Lernen, künstliche Intelligenz und Datenvisualisierung


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

Wie man moderne ML in hartes Erbe einbettet


Wenn es um die Automatisierung von ML-Modellen geht, meine ich meistens erstens neue Projekte und zweitens Jupyter und eine Umgebung. Dieser Ansatz eignet sich nicht für ein Analysesystem in einer Bank, in der normalerweise viel Vermächtnis vorhanden ist.

Oleg Mangutov gelang es jedoch, mit einer Umgebung, in der Oracle und SOAP mithilfe von Universalleim - Python - verwendet werden, moderne Freunde des maschinellen Lernens zu finden. Die wichtigste Schlussfolgerung dieses Berichts ist meiner Meinung nach, dass ein regelmäßiger Entwickler mit gebührender Sorgfalt Algorithmen für maschinelles Lernen in bestehenden Projekten implementieren kann, ohne alles von Grund auf neu zu schreiben und ohne die Funktionsweise von Oracle gründlich zu untersuchen. Und der Nutzen davon kann enorm sein, Live-Business-Benutzer können die entwickelte Oberflä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 unterteilt (Mittagessen in der Mitte, um Wissen zu verdauen). Im ersten Teil des Berichts werden wir die Grundkonzepte ansprechen: Bildung mit und ohne Lehrer; neuronale Netze zur Vorhersage; Gefälle Abstieg. Wir werden diskutieren, wie sich Deep-Learning-Methoden von herkömmlichen Methoden des maschinellen Lernens unterscheiden, und wir werden uns mit ihnen befassen, ohne auf die Frameworks beschränkt zu sein.

Im zweiten Teil der Präsentation warten wir auf die Live-Codierung im Jupyter Notebook. Bo direkt in reinem Python von Grund auf wird ein neuronales Netzwerk erstellen, 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


Wenn wir öffentliche Daten für maschinelles Lernen verwenden, müssen wir uns darauf verlassen, dass sie vollständig und sauber sind. Wie am Beispiel des Google-Übersetzers leicht zu erkennen ist, sehen die Daten möglicherweise korrekt aus, aber tatsächlich lehren sie das System unerwartete Interpretationen, anstatt sie korrekt zu übersetzen. Dies ist eine Variation des gegnerischen Beispiels.

Der Spezialist für die Analyse digitaler Sicherheitsdaten, Sergey Dudorov, wird uns dieses Problem detailliert vorstellen und über Methoden zum Angreifen, Verteidigen und Testen von Algorithmen für maschinelles Lernen sprechen, um solchen Manipulationen mithilfe der CleverHans- und Adversarial-Robustness-Toolbox-Bibliotheken entgegenzuwirken .

Virtueller Python-Assistent


Oleg Plichko verspricht zu demonstrieren, dass es möglich ist, einen Chatbot mit künstlicher Intelligenz mit gängigen Tools zu erstellen: TensorFlow, Celery, Django. Wir werden aus dem Bericht lernen , wie wir unseren virtuellen Assistenten wirklich nützlich machen können, und wir werden ein Beispiel für einen sehr interessanten Chat-Bot sehen, den viele von uns in Zukunft möglicherweise nützlich finden. Wir können Oleg alle unsere Fragen zu Bots und kognitiven Diensten stellen.

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


Maschinelles Lernen ist ein neues, schnell wachsendes Feld, es gibt noch nicht viele etablierte Praktiken. Daher experimentiert jeder Datenwissenschaftler viel und möchte dies schnell tun. Nun, wenn dies einfache Hypothesen sind, z. B. ob genügend Daten vorhanden sind und ob sie korrekt sind. Was aber, 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, an dem weitere 50 Personen arbeiten.

Pavel Tarasov zeigt Ihnen, wie Sie komplexe Hypothesen mit der minimalen Anzahl von Tools und Code schnell testen können. In diesem Fall können Sie mit Jupyter und PySpark einen Stand aufbauen und nicht eine Woche damit verbringen, die Umgebung vorzubereiten, 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 zugewiesen. Das heißt, Mitaps, die jeder sammeln kann, sind die Hauptsache, die Gleichgesinnte finden. Es ist möglich, vor Ort zu organisieren, aber wenn Sie sich im Voraus anmelden , werden Sie geplant.

Sonstiges: Testen, Sicherheit, DevOps


Weitere Einzelberichte gehen nicht in große Abschnitte über, sondern lösen das Problem der Vielfalt. Themen sind übrigens sehr wichtig und interessant, ein Social Engineering ist was wert, oder hier ist ein "Hacking Guide".

Ein Hacker-Handbuch zum Sichern von Python-Webanwendungen


Ich hoffe, dass Ihre Webprojekte nie angegriffen oder gehackt wurden, aber höchstwahrscheinlich hat jemand von Ihren Freunden ihre traurigen Konsequenzen gehabt. Unser Kollege Eyitemi Egbejule , einer der Organisatoren von PyCon Nigeria, behauptet, dass Sie mit sicheren Codierungspraktiken und einigen nützlichen Bibliotheken Schwachstellen in Python-Webanwendungen für immer vergessen können. Basierend auf seiner umfassenden Erfahrung in der Sicherheitsüberprüfung von Webprojekten zeigt Ihnen Eyitemi , welche Fehler Entwickler von Netzwerkdiensten am häufigsten machen, wo sie zuerst nach Schwachstellen suchen müssen und welche am schnellsten zu schließen sind. Es muss nicht unbedingt Software sein, Probleme können in der Logik oder in der Verwendung allgemeiner, aber falscher Standardeinstellungen liegen.

Wir hoffen, dass dieser Bericht es Entwicklern ermöglicht, einen neuen Blick auf ihren Code zu werfen und vielleicht sogar direkt auf der Konferenz Tipps anzuwenden.

Effiziente Seleninfrastruktur


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

In der Meisterklasse verspricht Ivan zu zeigen, wie der Selenium-Cluster in wenigen einfachen Schritten von Grund auf bereitgestellt werden kann , basierend auf den Open- Source-Projekten Selenoid und Ggr , mit denen das veraltete Selenium-Gitter ersetzt und die Qualen nicht mehr mit Selenium gequält werden können . Sie werden sehen, wie einfach es ist, Videos von laufenden Tests aufzuzeichnen, neue Browserversionen hinzuzufügen und Protokolle in Echtzeit anzusehen.

Es gab so viel Material, dass diese Meisterklasse am 23. Oktober zwei Stunden dauern würde - vor und nach dem Mittagessen, um Zeit zu haben, alles sorgfältig zu überdenken.

Dark Python: Social Engineering und Hacking mit einer Erfolgsquote von 70%


Wenn Sie der Meinung sind, dass die zuverlässigste Informationsquelle der Film ist, verwenden Hacker jetzt Social-Engineering-Methoden anstelle der Konsole. Lukas Hurych von Twisto.cz probiert als Hobby verschiedene Angriffsmethoden gegen seine Kollegen aus. Die Ergebnisse sind atemberaubend - 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 zeigt am Beispiel einer Netzwerkkonfiguration mit Verkehrsfilterung mit einer großen Anzahl (Hunderttausende) von Datensätzen, wie eine hohe Leistung erzielt werden kann. Dazu müssen wir von der naivsten Verwendung von SQLAlchemy ORM zu Massenoperationen und der Verwendung von SQLAlchemy Core übergehen und Details am 23. Oktober um 16:00 Uhr.

Gute und schlechte Praktiken zum Schreiben von testbarem Code


In seinem Bericht wird Dmitry Dygalo von kiwi.com Ansätze diskutieren , die dazu beitragen , den Code verständlicher , zuverlässiger und testbarer zu machen. Lassen Sie uns über eine Vielzahl von Problemen sprechen und spezifische Ratschläge erhalten, zum Beispiel, dass globale Variablen ein praktisches Konzept sind, das häufig nicht verwendet wird, wo es benötigt wird. So finden Sie einen Kompromiss zwischen Isolation und Geschwindigkeit in einer Testdatenbank. Informationen zur Abhängigkeitsinjektion und zur Trennung der Ausführung von der Implementierung anhand von Beispielen aus gängigen Bibliotheken. Und das ist sicherlich noch nicht alles.

Es scheint, dass dies mehr als genug ist, um eine Vorstellung davon zu bekommen, was auf der Konferenz passieren wird. Für die Arbeit an dem Programm möchte ich allen Mitgliedern des Programmkomitees danken: Vladimir Filonov, Zlata Obukhovskaya, Alexander Khayorov a, Ivan Tsyganov a, Leonid Kalneus.

Durch komplexe logische Operationen haben wir bereits alle Berichte in einen harmonischen Zeitplan gestellt ( hier pdf mit Visualisierung nach Themen). Es stellte sich heraus, was wir vor sechs Monaten bei den Vorbereitungen für die Konferenz im Sinn hatten: Die Themen sind auf die verschiedenen Verwendungsmöglichkeiten von Python verteilt, eine angemessene Anzahl englischsprachiger Sprecher, bei einer Tasse Kaffee und einem Glas Bier auf der After-Party gibt es etwas zu besprechen.

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

Source: https://habr.com/ru/post/de425473/


All Articles