Jeffrey Richter, Pavel Yosifovich, Greg Young und alles in allem. Hardcore und Architektur bei DotNext 2018 Moskau

Sehr bald, vom 22. bis 23. November, findet der nächste Moskauer DotNext statt. Das Programm ist spezifischer geworden, daher möchte ich einige Beobachtungen zu Hardcore- und Architekturberichten teilen.

Erstens gibt es einige Lautsprecher ohne Kategorie. Dies sind Personen, die selbst eine separate Konferenz ausfüllen könnten. Sie kennen ihre Namen: Jeffrey Richter , Pavel Yosifovich und Greg Young .

Normalerweise geben wir in Artikeln über Habré neben dem Sprecher sofort sein Foto. Im Fall von Jeffrey und Paul, einem Sonderfall - erinnern Sie sich besser an diese Personen auf den Umschlägen von Büchern:




Rechts die Bücher von Pavel Yosifovich . Er ist bekannt als Autor von Windows Internals, WPF Cookbook, Mastering Windows C ++ App Development und fünf Kursen bei Pluralsight. Wenn Sie plötzlich auch an C ++ interessiert sind, hat Pavel kürzlich auf YouTube ein Video über das C ++ - Speichermodell gepostet. Außerdem ist er ein bekannter Entwickler, Trainer und Redner, aber in dieser Rolle haben wir ihn kaum gesehen - er kommt in Russland fast nie vor. Und so, Pavel - wir haben es auf DotNext. Dies ist ein großer Erfolg und Sieg, dass alles geklappt hat und er wirklich kommen wird. In seinem neuen Bericht „Windows 10-Interna für .NET-Entwickler“ wird er über interessante interne Funktionen von Windows 10 sprechen, wie sich diese Funktionen auf .NET-Entwickler auswirken und wie Sie sie sinnvoll in Ihren Dienst stellen können.



Links ist Jeffrey Richters Buch. Wir haben bereits ein ausführliches Interview mit ihm für Habr geführt. Wenn Sie wirklich wissen möchten, was eine Person, die die Richtung für die Entwicklung von Azure festlegt, denkt, sollten Sie dorthin gehen. Jeffrey ist der Serienschöpfer klassischer Bücher. Nachdem er Anfang der 90er Jahre dank des Buches über die Programmierung von Windows 3.1 an Popularität gewonnen hatte, hörte er nicht auf. Das nächste große Buch, "Programmieren von Anwendungen für Microsoft Windows", wurde zu einem Klassiker, der später als "Windows via C / C ++" veröffentlicht wurde und mehreren Ausgaben standgehalten hat. Das gleiche passierte mit "CLR via C #". Die Leute fragen immer noch, wann die nächste Neuveröffentlichung von "CLR via C #" sein wird (wenn Sie auch interessiert sind, kommen Sie zur Konferenz und fragen Sie sich!). Er ist jetzt Partner Software Architect bei Microsoft und arbeitet in Distributed Cloud Apps & Storage. Er schleppt die gesamte Plattform in eine bessere Zukunft. Wir empfehlen Ihnen dringend, zu seinem Bericht „Erstellen reaktionsschneller und skalierbarer Anwendungen“ zu gehen , einem Bericht über den effektiven Einsatz von Cloud-Eisen - von einer Person, die alles darüber weiß.



Greg Young hat keine besonders bekannten Bücher. Er ist „nur“ der Erfinder des Begriffs CQRS, einer der bekanntesten und bekanntesten Figuren in dieser Richtung. Wie Sie wahrscheinlich bereits vermutet haben, ist in CQRS nicht alles so einfach und verständlich, wie es auf den ersten Blick scheint, und Greg ist genau die Person, mit der Sie all dies besprechen können. Wenn Sie sehen möchten, was Greg sagt, wird er sofort auf YouTube gesucht , er hat einmal auf CodeBetter geschrieben , und wenn Sie sich Bücher über CQRS bei Amazon ansehen, wurde er mit der Erstellung einer Einführung in das vom Regisseur verfasste Buch Exploring CQRS and Event Sourcing beauftragt Splunk



Video von Greg Youngs Vortrag "Wie man in 24 Stunden in einem Projekt produktiv wird"



Hardcore


DotNext hat sich als Konferenz etabliert, auf der immer wieder führende Redner auftreten und die komplexesten Spezialthemen aufdecken. Es gibt mehrere Themen, die fast jeden Bericht in Hardcore verwandeln, um beispielsweise die maximale Leistung und Implementierungsdetails komplexer Technologien sicherzustellen.

Low Level Details


Wir haben bereits über Jeffrey Richter und Pavel Yosifovich gesprochen. Aber das ist noch nicht alles! Mal sehen, was Raffaele Rialdi, Chris Bacon und Yegor Grishechko für uns vorbereitet haben.

Lassen Sie uns mit Trumpfkarten anfangen. Wollten Sie schon immer Ihre .NET-Laufzeit schreiben? Hat es geklappt? Chris Bacon hat es geschafft, ein Pilotprojekt, DotNetAnywhere , zu erstellen , eine wirklich kompatible Laufzeit mit Unterstützung für Dinge wie Multithreading, PInvoke, Garbage Collection und so weiter. Mit diesem Projekt wurde das Blazor- Framework erstellt, mit dem Sie .NET mithilfe der WebAssembly-Technologie direkt im Browser ausführen können. (Der Bericht über Blazor wurde übrigens von Nikita Tsukanov gemacht, das Video ist auf YouTube ). Im Allgemeinen sagt dieser DotNext: "Sie möchten also Ihre eigene .NET-Laufzeit erstellen?" - Ein sehr geekiger und ungewöhnlicher Bericht über das Schreiben von Laufzeit.



Kommen wir zu praktischeren Themen. Wenn Sie schon einmal bei DotNext waren, müssen Sie Rafael Rialdi und die Themen, auf die er sich spezialisiert hat, bereits kennen. Wenn nicht, ist es jetzt an der Zeit, sich vertraut zu machen!

Raphaels Videoaufnahmen von DotNext 2018 Piter und DotNext 2017 Moskau





Dieses Mal wird Rafael einen neuen Bericht mit dem Titel "Verbesserung der Speicherverwaltung in Interoperabilitätsszenarien" vorlegen. Möglicherweise haben Sie bemerkt, dass die neuen Span<T> und Memory<T> -APIs angezeigt wurden. Jetzt können Sie auf nicht verwalteten Speicher zugreifen, ohne sinnlos in verwaltete Objekte kopieren zu müssen. Rafael wird im Verlauf des Berichts einen Drilldown in diese APIs durchführen, Details zu praktisch interessanten Beispielen wie dem Internet der Dinge zeigen und zeigen, dass ein Sterblicher in alltäglichen Aktivitäten all dies tun kann.

In jüngster Zeit wurden ValueTask, aufgabenähnliche Typen und IValueTaskSource in neueren Versionen der Sprache angezeigt. Viele wissen nicht einmal, dass diese Typen existieren, und die meisten, die über ihre Existenz Bescheid wissen, verstehen nicht, warum sie existieren. Egor Grishechko wird Ihnen in seinem Bericht „ValueTask: Was, Warum und Warum“ erklären, was diese neuen Tools sind, warum sie verwendet werden und wann sie gerechtfertigt sind und wann nicht.



Maximale Leistung


Fast alle Berichte beziehen sich auf die eine oder andere Weise auf die Leistung, auch wenn sie nur beiläufig sind. Dies ist eine Funktion des Entwicklers. Einige möchte ich jedoch besonders hervorheben. Dies sind die Berichte von vier Rednern:

  • Konrad Kokosa
  • Egor Bogatov
  • Evgeny Peshkov
  • Alexandre Mutel


Wir haben bereits einen Vortrag über unsere eigene .NET-Laufzeit gesehen. Was ist mit deinem eigenen GC? Müssen wir eine schreckliche Datei mit einer Größe von zwei Megabyte generierten C ++ - Codes patchen? Zum Glück nicht. In .NET Core 2.1 wurde eine neue Funktion namens Local GC hinzugefügt, mit der Sie den Standard-Garbage-Collector vollständig durch einen generischen ersetzen können oder umgekehrt - verwenden Sie den Standard-Collector außerhalb der üblichen .NET-Umgebung. In dem Bericht „Machen Sie Ihren benutzerdefinierten .NET GC -„ Warum “und„ Wie “- wird Konrad Kokosa uns vorstellen, wie dies gemacht wird. Es wird vor allem für diejenigen interessant und nützlich sein, die das Speichermanagement und das GC-Verhalten besser verstehen möchten. Das Wesentliche des Berichts ist nicht so sehr, dass Sie von der Konferenz nach Hause gekommen sind und das Produkt sofort auf etwas Selbstgeschriebenes übertragen haben. Es ist vielmehr ein cooler inspirierender Bericht, der die Grenzen des Möglichen erweitert. Sie müssen dies nicht tun, aber jetzt besteht die Möglichkeit zu experimentieren. GC scheint an sich immer weniger eine unverständliche Sache zu sein und fällt Ihnen immer mehr als bequemes und gehorsames Werkzeug in die Hand.



Aber GC ist nur der Anfang. In letzter Zeit ist es in vielen Laufzeiten populär geworden, dem Benutzer Zugriff zum Generieren von SIMD-Prozessoranweisungen wie SSE und AVX zu gewähren. In JS wurde beispielsweise SIMD.js hinzugefügt (und entfernt), in Java führt das Panama-Projekt dies aus und so weiter. Dieser Mod hat auch .NET nicht umgangen. Sie haben uns Superkräfte gegeben, aber sie sind so, dass es nicht ausreicht, sie zu haben - Sie müssen sie immer noch verwenden können, und das ist schwierig. Einerseits erfordert die Kontrolle auf einem solchen Niveau eine enorme Motivation und Qualifikation: Um einen Vektorcode zu schreiben, dessen Leistung dem Skalar überlegen ist, müssen Sie nicht nur Dinge wie die Ausrichtung belasten, sondern auch bestimmte Anweisungen befolgen, über das Ergebnis der Generierung nachdenken und Dinge, die treten auf, wenn Sie von der Überholspur abkommen. Wenn Sie jedoch wirklich die Anwendung mit maximaler Leistung schreiben und jede Kennzahl speichern, können Sie selbst bei den fortschrittlichsten Compilern auf die Langeweile stoßen. Selbst ein solches relativ untersuchtes Problem wie die Registerzuweisung ist NP-vollständig ( eins , zwei ) und erfordert menschliches Eingreifen, und die SIMD-Situation scheint nicht besser zu sein.

In diesem Jahr erscheint Yegor Bogatov mit dem neuen Bericht "Optimierung in .NET Core", in dem er Ihnen erklärt, wie Sie SIMD aus High-Level-Code generieren. Mit Yegor werden wir bald ein ausführliches Interview über Habré veröffentlichen. Jetzt möchte ich sagen, dass Egor bei Microsoft arbeitet, sich auf Mono und .NET Core spezialisiert hat und dies nicht das erste Mal ist, dass er eine Präsentation auf DotNext hält. Behalten Sie einige vorherige Einträge bei:

Videoaufnahmen von Egors Berichten mit DotNext 2017 Moskau und DotNext 2016 Moskau





Egor ist sehr an der Entwicklung von Computer- und Handyspielen interessiert, in denen all diese Optimierungen angewendet werden können. Die jüngste Geschichte mit dem kürzlich veröffentlichten Assassin's Creed Odyssey bestätigt dies: Die Entwickler mussten Prozessoren mit Unterstützung für AVX / SSE 4.1 in den Mindestsystemanforderungen angeben, trotz des Rückgangs der Client-Basis (dies sind Intel-Prozessoren der 2. Generation: Intel Core i5-2400 und höher, die früher waren genannt Sandy Bridge und die nicht jeder hat).

Wenn Sie das Beispiel des meistverkauften Spiels nicht überzeugt hat, wird Sie Alexandre Mutel auf jeden Fall überzeugen. Dies ist der zweite Redner, mit dem wir ein ausführliches Interview für Habr führen werden. Er arbeitet für Unity Technologies, das Unternehmen, das eine der beliebtesten Spiele-Engines, Unity, entwickelt . (Übrigens haben sie kürzlich den C # -Code zum Lesen geöffnet). Alexandre weiß mit Sicherheit, dass es so kritischen Code gibt, den reguläres C # immer noch nicht verarbeiten kann. Aus diesem Grund haben sie einen speziellen „Burst“ -Compiler erfunden: Er wandelt eine begrenzte Teilmenge von C # mithilfe von LLVM in optimierten nativen Code um, wodurch Sie eine Leistung erzielen können, die mit C ++ vergleichbar und manchmal sogar schneller ist. Wie kann man Code besser als RyuJIT generieren? Welche Teilmenge von C # ist für das Schreiben von ultraschnellem Code sinnvoll? Diese und andere Fragen werden im Bericht „Hinter dem Burst-Compiler Konvertieren von .NET IL in hochoptimierten nativen Code mithilfe von LLVM“ behandelt - Sie werden dies auf keinen Fall verpassen wollen!



Ich möchte die Beschreibung dieser Kategorie mit etwas beenden, von dem sofort direkt profitiert werden kann. Anscheinend ist „Systemmetrik: Fallstricke sammeln“ perfekt für diese Rolle geeignet. Evgeny Peshkov von Kontur erklärt Ihnen, wie Sie Metriken überwinden können: wie sie sich voneinander unterscheiden, was mit Leistungsproblemen in Process und PerformanceCounter zu tun ist, wie Leistungsindikatoren im Inneren angeordnet sind und was daraus folgt und so weiter.



Evgenys früherer Bericht „Besondere Ausnahmen in .NET“ belegte auf der DotNext Piter 2018-Konferenz den zweiten Platz. Es werden die Funktionen der einzelnen Ausnahmetypen ThreadAbortException , z. B. ThreadAbortException , ThreadAbortException , AccessViolationException und OutOfMemoryException , die auftreten, wenn Fehler auf Betriebssystem- oder Laufzeitebene auftreten.



Video-Sonderausnahmen in .NET



Best Practices und Architektur



Nach unseren Ankündigungen scheint DotNext manchmal eine Art solider Hardcore für Low-Level-Entwickler zu sein. In der Tat hat das Programm genug andere Kategorien. Schauen Sie sich das Programm genau an - neben den meisten Berichten befinden sich Tags. Achten Sie bei der Auswahl des nächsten Berichts darauf. Hardcore ist ein Tag über die Leistung und Details des Compilers, daneben ein sprechendes Symbol mit einer „Ziege“. Aber schauen Sie sich an, wie viele universelle Themen Sie jetzt anwenden können!



In der Zwischenzeit ist es sehr schwierig, gute Berichte über „gute Praktiken“ und „Architektur“ zu finden. Die Tatsache, dass man eine brillante Idee zu sein scheint, klingt für andere nach völligem Unsinn und umgekehrt. Hatte der Sprecher im Unternehmen eine bestimmte Architektur für das System, aber für uns auf andere Weise? Und was heißt das? Glücklicherweise gibt es eine Reihe von Themen, die nicht nur aus Geschmacksgründen diskutiert werden können.

Best Practices


Erstens sind dies Bereiche, in denen offensichtlich Probleme auftreten. Jedes Mal, wenn Sie in einem Flugzeug fliegen, möchten Sie eine Musiksammlung hören. Ein bekannter russischer Cloud-Dienst sagt, dass es gut ist, dass Sie Ihre Sammlung auf die integrierte Festplatte heruntergeladen und offline geschaltet haben. Können Sie die Lizenz überprüfen? Vor der Lizenzüberprüfung zehn Kilometer vertikal. Wenn Sie das nächste Mal alles in Hi-Res auf die eingebaute Festplatte herunterladen und die Player-Anwendung anhören. Und irgendwo mitten im Flug fragt ein ehrlich gekaufter Spieler - alles ist in Ordnung, aber ich habe vergessen, die Lizenz zu überprüfen und etwas herunterzuladen. Sie springen senkrecht durch zehn Kilometer. Aus Sicht des Entwicklers sieht dies noch höllischer aus, da viele bekannte Frameworks das Fehlen einer Netzwerkverbindung überhaupt nicht implizieren. In einigen Fällen müssen Sie viele hässliche Dinge wie doppelten Code für das direkte Lesen und das Lesen im Cache schreiben. Jetzt multiplizieren wir das alles auf der Plattform und bleiben am Trog. Oder scheint es am Anfang so? Schreiben Sie in die Kommentare. Auf DotNext gibt es einen wunderbaren Bericht zu diesem Thema, "Erstellen von Xamarin-Anwendungen im Flugzeugmodus" von Gerald Versluis, den Sie aus zahlreichen Reden und Blog-Posts sowie einigen Büchern kennen. Trotz des Namens wird dieser Bericht auch für diejenigen interessant sein, die mit Xamarin nicht vertraut sind.



Es gibt ewige Themen, deren genaue Antwort noch nicht gefunden wurde, aber mit jedem Jahr wächst das Verständnis rasant. Eine der unendlichen Schlachten ist TDD gegen TestLast. Zunächst haben viele Leute Probleme mit dem Testen im Allgemeinen auf Prozessebene - in der Welt der termingerechten Entwicklung werden Sie nicht speziell entwickelt. Wir haben sogar eine spezielle Testkonferenz durchgeführt , Heisenbug . Programmierer sind noch komplizierter - TDD wurde um das Jahr 99 als Teil von Extreme Programming erfunden. Trotz all seines Genies hat es nie die Welt erobert, was durch eine Reihe von Faktoren erleichtert wird. Im normalen Leben stellt sich heraus, dass es nicht einmal Test-First ist, sondern der echte Test-Last. Dieser Ansatz hat sowohl Vorteile (er passt viel einfacher in Fristen) als auch eine Reihe offensichtlicher Nachteile. Erinnern Sie sich an den gnadenlos gehypten Artikel "TDD is Dead" vom Schöpfer von Ruby on Rails? Es wurde im Jahr 2014 geschrieben. 4 Jahre vergingen und das Pendel blieb nicht an Ort und Stelle. Wie denkst du über dieses Problem? Auf DotNext wird es "Test Last, Test First, TDD: Wann man den einen oder anderen Ansatz verwendet" geben - einen Bericht mit einem sprechenden Titel von Alexander Kugushev. Alexander wird sich ausführlich mit all diesen Ansätzen befassen und ihre Anwendbarkeit auf bestimmte, recht komplexe Beispiele prüfen.

Ein anderer Bericht greift diesen Bericht auf - „Pragmatische Komponententests “ von Vladimir Khorikov, einem Spezialisten anderer Art, einem Experten für die Rettung großer Unternehmensprojekte. Ja, wir reden nicht gern darüber, aber manchmal führen die dümmsten Dinge zum Zusammenbruch selbst der dauerhaftesten Projekte, die ewig gebaut wurden . Einer der technischen Faktoren für den langfristigen Erfolg von Technologieunternehmen sind die richtigen Unit-Tests. Wir alle kennen eine Reihe von Praktiken, aber auf lange Sicht sind nicht alle Praktiken gleichermaßen nützlich. Dieser Bericht ist nicht für Anfänger gedacht, sondern für diejenigen, die Tests schreiben können und ihr Verständnis auf ein neues Niveau bringen möchten. Vladimir hat übrigens einen ausgezeichneten Blog, in dem er die interessantesten architektonischen Probleme analysiert. Fiktion wird sowohl Anfängern zur Erleuchtung als auch erfahrenen Senioren zur Systematisierung dringend empfohlen.



Im Abschnitt über bewährte Verfahren möchte ich einen weiteren Bericht von Igor Lukanin erwähnen: „Wie man unter Last überlebt: ein fehlertoleranter Server, ein intelligenter Client“ . Igor ist eine Person, die als Vertreter von Kontur an fast allen unseren letzten Konferenzen teilgenommen hat. Phillennium und ich haben ihn wiederholt interviewt und schnell festgestellt, dass er eine tiefe und genaue Antwort auf eine Vielzahl praktischer Fragen geben konnte. Es war nicht notwendig, sich speziell auf ein Interview mit Igor vorzubereiten - wir stellten ihm alle Fragen und er beantwortete fast alles. Neben der wichtigsten Frage: Wann kommen Sie als Redner zu unserer Konferenz? Und so geschah es. In der Berichtsbeschreibung heißt es einfach: „Sie werden aus dem Bericht lernen, wie solche Mikrodienste erstellt und Stresstests durchgeführt werden, um sicherzustellen, dass sie der Belastung standhalten.“ Es besteht kein Zweifel, dass es so sein wird, und es ist viel wert. Am Ende ist die Contour-Infrastruktur wahrscheinlich die größte .NET-Produktion in Russland. In jedem Fall können Sie Igor im Diskussionsbereich jederzeit zusätzliche Fragen stellen.



Architektur


Und schließlich ist unsere letzte Kategorie für heute die Architektur. Viele von uns erinnern sich an Joel Spolskys Artikel "Lassen Sie sich von Architekturastronauten nicht erschrecken " . Wenn Sie es nicht gelesen haben, hat sich seitdem nicht viel geändert. „Denken Sie daran, dass Architekturfans normalerweise Probleme lösen, von denen sie glauben, dass sie gelöst werden können. Überhaupt nicht diejenigen, deren Lösung nützlich ist “, erinnert uns Spolsky. Unsere „architektonischen“ Berichte werden auf einer gemeinsamen Basis ausgewählt: Sie müssen einen konkreten praktischen Nutzen haben, eine bestimmte Zielgruppe haben und die Gedanken in nur vierzig Minuten, die für den Bericht vorgesehen sind, klar kommunizieren. Trotz der äußerlichen Einfachheit solcher Anforderungen bestehen sie nicht alle Anwendungen.

Wen haben wir dieses Mal? Wir haben Greg Young bereits ganz am Anfang des Artikels besprochen. Dies ist ein Redner "außerhalb der Kategorien", der es wert ist, besucht zu werden, nur weil es Greg ist.

Vagif Abilov ( VagifAbilov ) wird mit einem Bericht "Das Leben der Akteure im Cluster: warum, wann und wie" kommen. Wagif ist ein renommierter Redner und Mitglied des DotNext-Programmkomitees. Übrigens werden besonders hohe Anforderungen an den Bericht des PC-Teilnehmers gestellt - dies sollte ein Beispiel dafür sein, wie man gute Architekturberichte erstellt. Dieses Mal wird es einen aussagekräftigen Bericht über das Schauspieler-Modell Akka und die Grenzen ihrer Anwendbarkeit geben. Wir werden die Skalierung und grundlegende Vorlagen für Clusterentscheidungen diskutieren. Es ist klar, dass mehr gesagt werden kann, aber es ist schwierig, auf Spoiler zu verzichten. Kommen Sie einfach zum Bericht und finden Sie das alles selbst heraus. Alle Entscheidungen sind keine Gedankenflucht des Astronauten, sondern basieren auf den Erfahrungen der Norwegian Broadcasting Corporation (NRK).



Vagif war nicht sofort Mitglied des PCs, sondern begann als Redner bei früheren DotNext.

Drei Videos früherer Berichte







Menschen lernen Architektur aus alten Büchern, die für Java geschrieben wurden. Die Bücher sind gut, aber sie bieten eine Lösung für die Probleme dieser Zeit mit Instrumenten dieser Zeit. Die Zeit hat sich geändert, C # ähnelt eher Light Scala als Java, und es gibt nur wenige neue gute Bücher.

In dem Bericht "Instant Design" wird Maxim Arshinov über die Kriterien für guten und schlechten Code sprechen, wie und wie man ihn misst. Er gibt einen Überblick über typische Aufgaben und Ansätze und analysiert die Vor- und Nachteile. Am Ende wird er Empfehlungen und Best Practices für das Entwerfen von Webanwendungen geben. Maxim - wie Sie vielleicht erraten haben, der berühmte Habro- Autor @marshinov . Er ist Mitbegründer des High-Tech-Outsourcing-Unternehmens High Tech Group und unterrichtet neben seiner Geschäftstätigkeit an der Higher School of Information Technology. Das heißt, dies ist ein Bericht einer Person, die das Problem „auf beiden Seiten der Barrikade“ hatte: sowohl von der Seite des Lernens neuer Technologien als auch von der Seite des Einsatzes im realen Geschäft.


Sie können Maxim von der vorherigen Aufführung auf DotNext in St. Petersburg kennen



Und schließlich der letzte Bericht in der heutigen Überprüfung. Alexey Merson mit dem Bericht „Domain-gesteuertes Design: Ein Rezept für einen Pragmatiker“ wird uns die Essenz von DDD offenbaren. Genauer gesagt, wer es nicht weiß, wird es herausfinden. Wer weiß - weiß es besser. Eine reiche persönliche Erfahrung ermöglicht es, Alexei komplexe Dinge in einer einfachen und verständlichen Sprache zu erzählen.



Sie konnten bereits eine seiner Reden auf dem SpbDotNet-Community-Meeting sehen.



Wir erinnern Sie daran, dass die DotNext 2018 in Moskau sehr bald stattfinden wird - vom 22. bis 23. November im Radisson Royal Moscow Congress Park. Tickets können weiterhin auf der Konferenzwebsite gekauft werden .

Außerdem haben unsere Freunde, DevZen Podcast, kürzlich eine PC-Veröffentlichung DotNext veröffentlicht, die Sie nach Belieben anhören können.

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


All Articles