When we started doing DotNext, we took the path of technical hardcore and brainiac complexity, just as we did in the Java world with Joker and JPoint.As the years went by, the conference grew, we got feedback and made the conference better, we changed the program, the presentations, the speakers… And recently, talking to people at DotNext and JPoint, I came to an interesting conclusion – .NET developers don’t want hardcore :
- There’s no crazy zoo of frameworks whose work you have to mandatorily know at source level;
- no 5 GCs, each with their own features;
- the quality of documentation of the standard library and developed frameworks is higher on average;
- most of the tools work clearly and the performance counters usually don’t lie (I’m talking mostly about .NET Framework, with Core not so bright yet);
- the language itself, in the end, is nice and understandable (although you can use the same Kotlin under the JVM).
But there are a lot of other interesting things :
- If you are working at a low level, the memory models don’t go anywhere;
- Working to improve performance and optimize over memory is still with us;
- The platform itself is evolving at a tremendous pace – we need to stay informed;
- With cross-platforming comes new tools and new problems.
So we decided to structure the new conference program a little differently. It turns out that DotNext 2017 Piter – Not just hardcore anymore. And if not hardcore, then who? Check out the details below.
In the beginning there was…keynote!
Jon Skeet — Back to basics: the mess we’ve made of our fundamental data types
A keynote on the relationship between the complex outside world and data represented only by zeros and ones. Admit it, don’t you also take numbers, text, and date/time for granted? Virtually any data model relies on these pillars. The question is, why is it that Stack Overflow gets overwhelmed with questions about "broken" arithmetic? In his talk, John ( who has already answered nearly 40, 000 questions on SO ) will try to tell what’s wrong with our world, find the culprits and suggest a few ways to "not get burned" by all this.
If you think Jon Skeet is just another developer, read Interview with Jon on the current state of .NET, C# and the IT community. The depth and completeness of his answers to seemingly simple questions is surprising.
Sasha goldshtn Goldshtein — The Performance Investigator’s Field Guide
After you’ve done a hundred performance studies, you’ll start to build up your patterns of working with productivity, which will save you time and effort in finding the problem. In this talk, Sasha will talk about his performance experience gained over the years working on totally different projects and the tools he’s used.
First, we’ll look at anti-methods of performance investigations and a checklist designed to find bottlenecks in Windows and .NET applications. After that he will go over the ideal performance analysis tool and will show how close to the ideal the currently available applications are: the Event Tracing for Windows, but first of all he will show some of his own open source developments, which he hasn’t presented in his reports before.
The talk will conclude with a discussion of dashboards and visualization, as well as the non-obvious mistakes you can make when working with statistical data. Along the way, you’ll see some of the toughest problems the speaker has solved in his lifetime.
I’d like to add that Sasha is an outstanding performance engineer, consistently top-ranked at every conference he speaks at. We’ve interviewed him several times, I suggest you check him out : A couple of videos from 2015 , 2016 videos , An interview about working with peromance and An overview of the .NET performance engineer tools
Alexei Savvateev – The Challenge of Collective Responsibility
The cool keynote that blew up the scene at JPoint 2017 is coming to St. Petersburg for DotNext!
Imagine that you are a policeman on duty in a turnstile hall. Stowaways try to jump the turnstiles, you catch them. You are alone, they are many. Is it possible to set them such "rules of the game" that they dare not try to jump, even if you know in advance that you will catch only one of them anyway? It turns out it is possible.
A report on the mathematics and game-theoretic foundations behind the invention of various tricky control algorithms. You won’t get an academic education in this talk; you won’t learn how to write more efficient algorithms. You will, however, get an idea of how rich the mathematical apparatus is.
If you are interested in the topic of game theory, if you are interested in learning about the research for which the Nobel Committee on Economics has already been awarded several times, then you are welcome to the talk.
The .NET Platform: Present and Future
As Microsoft continues to actively work on the platform, reports on the topic of recent changes will steadily take its rightful place in our programs. This time, there are 5 reports on .NET Core, ASP.NET Core, .NET Standard, etc.
Adam Ralph — What is .NET Standard?
NET Standard is one of the new technologies that has come out in the dawn of the .NET opsonsor initiative. It is essentially a more efficient and more convenient framework for cross-platform work with NuGet packages, which in the future can solve many problems associated with the development of universal cross-platform projects. Let’s figure out how it all works and how it ties in with .NET Core with the help of Adam Ralph, maintainer of FakeItEasy and xBehave.net and author of the first accepted .NET Core Framework pull-request.
Alex Thissen — Shifting gears for .NET: a changed application landscape for .NET developers
Distributed systems have been actively moving from a server-side structure to container clusters and serverless computing lately. All of this can be done on .NET in Docker, although the first steps are not so easy. In this talk, Alex Thissen will show you how you can build .NET development around Docker and containers. You’ll learn how to create, package, deploy, and execute .NET applications using Visual Studio 2017, .NET Core, and Docker.
Denis Ivanov – ASP.NET Core applications on Linux in production
With the release of .NET Core, the Unix world has opened up to us. Our applications can run perfectly on Linux – which means we can use Docker and Kubernetes to deploy our services. The talk will show how to make a REST service on ASP.NET Core and run it in production on the Kubernetes platform.
We’ll discuss details of the ASP.NET Core infrastructure and several popular libraries, talk about multithreading, optimization and caching to reduce service response time. We’ll discuss how to solve application build and Docker build tasks. And, of course, we’ll elaborate on what Kubernetes is, how this technology can be useful to us and how to use it.
Roland Guijt — Authentication and Authorization in ASP.NET Core
You probably already know how ASP.NET Core applications work, except that authentication and authorization is a different story because Microsoft has rewired a lot of ASP.NET Core security. ASP.NET Identity allows you to do single application authentication and includes a lot of "out of the box" features, but wouldn’t centralized authentication with OpenId Connect-based tokens be better?
In the talk, Roland will give a detailed answer to this question and show how ASP.NET Core identity and IdentityServer frameworks help to write your token service. As a result, you’ll know what methods you can implement authentication on ASP.NET Core, how to prepare them properly, and how to enforce authorization rules in ASP.NET Core applications.
Mikhail yu5k3 Shcherbakov — Under the hood of ASP .NET Core Security
Few articles have been written on ASP .NET Core’s built-in security mechanisms. Even the official documentation has gaps. Mikhail’s report will go over the main security-related components and break down how it works internally. If you’re using good old ASP.NET, you’ll benefit from information on the inner workings of security components and best practices for using them.
The presentation will give answers to the questions: How modern anti-XSS mechanisms are implemented and how to use them correctly in ASP .NET Core? How to correctly work with cookies and what pitfalls can be encountered there? How has the CSRF protection mechanism been rewritten? How to correctly work with cryptographic algorithms? I will also tell about my experience in bug bounty on searching vulnerabilities in ASP .NET Core. Before the talk, I recommend refreshing your memory about the attacks from the OWASP Top 10 list.
Performance and memory optimizations
Working with performance is a tasty piece of pie called "software development, " not easy to prepare and maintain. Although performance is not one of the three essential requirements for an application/service, it can be the feature that makes your project special. The second aspect I included in this section is the memory handling, leaks can not only lead to slowdowns, they can even overclock your application and cause a lot of headaches in general.
In addition to the overview keynote from Sasha Goldstein that we talked about above, we have 4 other reports that will make your code faster and more efficient.
Andrey DreamWalker Akinshin – Let’s talk about memory
In many of today’s applications, performance is limited by memory.Measuring speed and writing correct benchmarks is not that easy in this case: there are too many factors affecting the final runtime. In this talk we will talk about what makes up memory performance.
Discuss both low-level hardwar stuff (CPU cache and its associativity, alignment, store forwarding, 4K aliasing, prefetching, cache/page splits, cache bank conflicts, etc.) and more .NET-specific issues (pinned objects, large object heap, heap peculiarities in full .NET Framework and Mono).
Alexei Vereshchagin – Remote application profiling on CoreCLR for Linux ARM
CoreCLR now gives support for different architectures and systems, including Linux. The problem is that full profiling support for .NET Core is only available for Windows, and for other systems CoreCLR profiling capabilities are very limited.
This talk is about a tool which allows getting information about C# code execution in CoreCLR environment running on Linux ARM architecture. In particular, we can get hot methods in terms of running time and allocated memory, hot path, CPU load, JIT and GC information. All this can be done directly from Visual Studio 2015.
Alexei will talk about the features their tool provides and the profiling approaches he has used.
Dina Goldshtein — Automate Your Dumps
When an application crashes, you have several ways to understand what happened: reproduce the problem, read the logs or analyze the crash dump. In the dump you will find the exception with which the application crashed, the state of threads, interesting objects, synchronization mechanisms and much more… Only if you do it manually, it will take you dozens of hours – I don’t think the developer has nothing better to do than to dig through dumps.
It is a good idea to automate all these, or at least to group them: by component, by crash type, or whatever. In this talk Dina will show how to automate .NET crash dumps analysis on Windows and Linux, and how to do more in-depth analysis with WinDbg, lldb, and SOS.
Sergei Shchegrikovich – The 5 Commandments of PDB
PDB files are an important part of the debugging infrastructure. I will show you how to use PDB files efficiently, demonstrate their structure and why we need them, and show you the new format of debugging symbols in .NET Core. The talk will help you save time on creating a debugging infrastructure internally.
Tools and frameworks
Dmitry Ivanov – JetBrains Rider IDE: personal efficiency skills for the .NET programmer
If you are a lazy (in a good way) programmer who wants to save work time and not do routine activities over and over again, then this report is for you. You will learn new features of the IDE and look at the familiar ones from a different angle. We will talk about how to use Rider on different operating systems and how it is superior to the usual IDEs. All the features will be shown in terms of work tasks.
Assuming that the main purpose of a programmer is not to pound the keys, but to think. From this it follows logically that the main task of the IDE is to help you to materialize the idea you came up with as quickly as possible. Let’s try to optimize the number of actions per unit of meaning. Let’s solve the problems, how to achieve the desired result with minimal number of clicks.
Mete Atamel — Containerised ASP.NET Core apps with Docker and Kubernetes
Kubernetes is an open source container orchestration platform that has been available on Linux for a long time. ASP.NET Core allows you to use it under .NET. This talk will show how to wrap ASP.NET Core applications in Docker containers and deploy them to Kubernetes. In addition, talk about automating application deployment, scaling, container clustering, and other handy features open with Kubernetes.
Maarten Balliauw — NuGet beyond Hello World
Everyone uses NuGet packages, right? It’s not hard to do. But do you know how to create and share your own packages? How will the advent of .NET Standard affect all of this? How to properly version, create, publish, and share a package?
In the talk, Maartin will answer these questions, and dive even deeper : how to use the NuGet client API to retrieve data from NuGet? Is it possible to build your own plugin system for an application based on NuGet? What are the gems hiding in the NuGet server API? Is it possible to create a full copy of NuGet.org?
Tomas Herceg — Entity Framework Core: Is It Ready Yet?
This talk is designed for those who haven’t worked with Entity Framework Core yet, but would like to give it a try. We will talk about the differences between Entity Framework and Entity Framework Core, and which framework to choose for your project. We’ll discuss Entity Framework Core features that Thomas will show in demos on different DBMSs on Linux.
In addition, let’s take a look at the project roadmap, discuss what to expect in the future, and whether it’s all ready to go in production.
Nikita kekekeks Tsukanov – AvaloniaUI: the first cross-platform XAML UI framework with .NET Core support
We live in a time when support for a whole zoo of platforms and devices has become relevant, and .NET Core and .NET Standard make portability of C# code between them much easier. However, each of the platforms offers some sort of proprietary development tools, with most of them mentally stuck somewhere in the days of MFC and Windows Forms, and lacking proper integration with C#. There are a number of solutions trying to bring these platforms to a common denominator and somehow add adequate support for MVVM and XAML-writing, but it’s just… not the same.
NET developers are used to being able to style controls anywhere and anyhow, to normal list bindings to collections, to a rich bindings system. This is exactly what the AvaloniaUI project is trying to achieve, continuing the ideas of WPF in the open source. The path of the project is not an easy and thorny one – in addition to the binding system it requires handling all the user input, thinking about how to efficiently draw the interface, dealing with all sorts of nonsense from the target platforms, dealing with different rendering systems (for example, due to inadequate support ArcTo had to adapt the code originally designed for rendering the comet orbits correctly).
About what has already been achieved, what of it you can already use, as well as the difficulties and interesting things in developing such a project – a report from one of its participants.
Dmitry Soshnikov – Accessible artificial intelligence on the .NET platform: from chatbots and cognitive services to deep neural networks
Recent breakthroughs in artificial intelligence and machine learning make it relatively easy to solve cognitive tasks that once seemed miraculous: recognizing a person’s age by face, understanding natural language, or machine translation. We will look at how these tasks can be solved differently on .NET: from using off-the-shelf cognitive services, to big data learning, to deep neural network learning with Microsoft Cognitive Toolkit. WARNING : some demonstrations will be shown in F# and may break your brain.
Filip W — Building code analysis tools with the .NET Compiler Platform (Roslyn)
We love Resharper and its great code analysis capabilities. This talk will talk about how to use the new .NET compiler Roslyn to create your own code inspections and parsers. You can use your inspections to control codestyle, find logical errors in code, reassign files in the project. Philip will tell you what you need to make your own code analyzer and tell you if it all can work anywhere else but in Visual Studio.
You can read more about Philip and what he does in our Habrainterview with him
Mikhail Filippov – Learning to cook MSBuild
MSBuild is a tool that .NET developers use every day, but not everyone understands how it works or what it can do. This goes on until developers run into obscure problems or limitations of what Visual Studio allows them to configure, at which point they start trying to customize their build scripts. And then their build starts to slow down or not work properly.
This talk will cover how to solve various problems that arise when writing your own build task. Shows how to debug problems in a build – and how you can build a project with MSBuild not only on Windows.
Approaches and patterns
The section on approaches never turns out to be empty either. In the end, choosing the right pattern/architecture can save you dozens of hours of suffering: whether it’s easy to maintain, extend or debug your project.
The problem is that while you can learn everything at the top, you often can’t apply this or that approach with understanding on the first try. The papers in this section are intended to show you the most current approaches and to give you enough knowledge so that you don’t step on the most popular and painful rake (the worst rake, as you know, is a child’s rake).
Igor Yakovlev — AOP in .NET
Have you ever heard of aspect-oriented programming? Have you ever tried to apply it in practice? We’ll start at the beginning – with theoretical definitions and examples of tasks where AOS can help; we’ll try to figure out how to "get" AOS under .NET. We’ll also solve several problems using the main AOS frameworks: learn how to generate wrappers at runtime via dynamic proxies, inject code into our classes at compile time using PostSharp and Fody. We’ll take Nemerle as a snack, and, after we’ve dealt with some scary-looking words like "quasi-quoting" and "metaprogramming", we’ll solve our AOP problems without frameworks!
Dylan Beattie — Real World REST and Hands-On Hypermedia
So, you wrote your HTTP API, and it seems to work. Then you have a whole bunch of problems: you need to replace Customer completely to replace email address, rendering shopping cart requires 25 API calls, rendering a web page makes 50 HTTP requests, so how do you find bottlenecks?
The REST architecture is an understandable thing, but not every developer can translate REST principles into actual working code. In this talk, Dylan will show you the elements of REST related in one way or another to hypermedia and the HATEOAS principle ("hypermedia as the engine of application state") – and tell you why this is all important and why you should implement it all in your system. Let’s take a look at tools to help you design, deploy and debug your HTTP APIs, and give you a little rest.
Vagif Abilov – Typed or dynamic API? Give me two!
For several years now, developers have been able to use dynamic language elements in C#, so by defining an API, you can make it available for data of type dynamic. It’s tempting for individual scripts, but I’d really hate to give up the benefits of statically defined types. Is it possible to combine the two approaches? If so, how time consuming is it? And how to avoid code duplication? This is what the report is devoted to. The presentation is based on the principles of implementation of a multiplatform Open Source library written and maintained by Vagif himself. In the course of the presentation he shows how to write a similar library for SQL commands processing from scratch.
Jon Skeet — The changing state of immutability C#
A talk about what immutability is, what its benefits are, and how it evolved in C#. It will also talk about different implementations of immutability of objects/states, their pros and cons (especially when the language or platform doesn’t encourage it), and what will happen to this concept in the future.
Igor Labutin – Interprocess conversations : causes and ways
More and more modern applications are moving beyond the simple "one process" model. Developers find many reasons why one process is not enough. And if there are several of them, the problem of information transfer between them arises. .NET provides several ways to organize this interaction. We will consider where the task of process communication can come from, discuss the ways to solve it, and make sure that not all methods are equally convenient and useful.
And something else…
Mikhail Samarin – Xbox One and HoloLens, platforms for .NET Developers
Did you know that if you have the latest version of Visual Studio installed, you can develop for both HoloLens and Xbox One without installing special SDKs or toolkits? These are regular Windows 10 devices for the Universal Windows Platform. Come to the talk and learn the basics of developing for Xbox One and HoloLens, including a live demonstration on real hardware. Learn what you can do with Unity 3D and Windows Mixed Reality, including the innovations of the Windows 10 Creators Update.
Adam Sitnik — My awesome journey with Open Source
Until recently, the .NET community was closed, but things have changed. Now our compiler, our runtime, GC, and more are open. Have you tried counterbrewing yet? Would like to, but don’t know where to start? What do you get out of OSS and why would you want to do it? What shouldn’t you do and what should you pay attention to first? What projects will make you a good developer? Adam will answer these questions based on his own experience developing in Core CLR, BenchmarkDotNet, and corefxlab.
Damir Beilkhanov – Xamarin.Forms: features of cross-platform mobile app development
Let’s take a short tour on how to develop native mobile applications for popular platforms using your .NET + C# skills, experience with XAML, Visual Studio, and Xamarin.Forms. On the example of a simple cross-platform application we’ll get acquainted with its structure, see how things go with the UI, talk about various problems encountered during cross-platform development in Xamarin.Forms. We’ll remember the great pair of DIMVVM, then we’ll divert our attention to the tools that make developer’s work and development process in general easier. At the end of the report, we’ll choose a handy IDE for the Xamarin developer.
Grigory Koshelev – Integration of .NET and Java virtual machines
Suppose you need to convert XML to PDF in a .NET service, but you already have a time-tested Java solution – Apache FOP. You can rewrite everything in C#, use cross compilation or use the Java library directly from Java. You can raise a Java service and interact with it from a .NET application, or you can try to raise the same Java service inside a .NET process. The first option is not always the best: the infrastructure, monitoring and other things may be geared towards .NET, and this raises operational issues. Let’s run the Java virtual machine inside a .NET process, and at the same time we will deal with Marshal, pitfalls and other nuances of this kind of integration.
That seems to be it. If you’re wondering how the reports are arranged in 3 tracks, see the program at the conference website