Muito em breve, de 22 a 23 de novembro, será realizado o próximo Moscow DotNext.
O programa tornou-se mais específico, então eu gostaria de compartilhar algumas observações sobre relatórios de hardcore e arquitetura.
Em primeiro lugar, existem alguns falantes "sem categoria". São pessoas que poderiam preencher uma conferência em separado. Você conhece os nomes deles:
Jeffrey Richter ,
Pavel Yosifovich e
Greg Young .
Normalmente, em artigos sobre Habré ao lado do palestrante, imediatamente damos a foto dele. No caso de Jeffrey e Paul, um caso especial - é melhor você se lembrar dessas pessoas nas capas dos livros:

À direita estão os livros de Pavel Yosifovich . Ele é conhecido como autor de Windows Internals, WPF Cookbook, Mastering Windows C ++ App Development e cinco cursos na Pluralsight. De repente, se você também estiver interessado em C ++, Pavel postou recentemente um vídeo no YouTube sobre o modelo de memória C ++. Além disso, ele é um desenvolvedor, instrutor e palestrante conhecido, mas nesse papel mal o vimos - ele quase nunca acontece na Rússia. E assim, Pavel - temos no DotNext. Este é um grande sucesso e vitória, que tudo deu certo e ele realmente virá. Em seu novo relatório, “Internos do Windows 10 para desenvolvedores .NET”, ele falará sobre recursos internos interessantes do Windows 10, como esses recursos afetam os desenvolvedores .NET e como você pode utilizá-los ao seu serviço.
À esquerda está o livro de Jeffrey Richter . Já fizemos uma entrevista detalhada com ele para Habr, se você realmente quer saber o que uma pessoa que define a direção para o desenvolvimento do Azure está pensando, você deve ir lá. Jeffrey é o criador em série de livros clássicos. Tendo conquistado popularidade no início dos anos 90, graças ao livro sobre programação do Windows 3.1, ele não parou. O próximo grande livro, "Programming Applications for Microsoft Windows", tornou-se um clássico, posteriormente publicado como "Windows via C / C ++", e resistiu a várias edições. O mesmo aconteceu com "CLR via C #". As pessoas ainda perguntam quando será o próximo relançamento de “CLR via C #” (se você também estiver interessado, vá à conferência e pergunte a si mesmo!). Ele agora é arquiteto de software parceiro da Microsoft, trabalhando em aplicativos e armazenamento em nuvem distribuída e está arrastando toda a plataforma para um futuro melhor. É altamente recomendável que você vá ao "Construindo aplicativos responsivos e escalonáveis" , um relatório sobre o uso efetivo do cloud iron - de uma pessoa que sabe tudo sobre ele.
Quanto a Greg Young , ele não possui nenhum livro de destaque. Ele é "apenas" o inventor do termo CQRS, uma das figuras mais famosas e icônicas nessa direção. Como você provavelmente já adivinhou, no CQRS tudo não é tão simples e compreensível quanto parece à primeira vista, e Greg é a mesma pessoa com quem você pode discutir tudo isso. Se você quiser ver o que Greg conta, ele é pesquisado instantaneamente no YouTube , escreveu uma vez no CodeBetter e, se você ler livros sobre CQRS na Amazon, foi encarregado de escrever uma introdução ao livro Explorando CQRS e Event Sourcing, de autoria do diretor. Splunk
Vídeo da palestra de Greg Young "Como se tornar produtivo em um projeto em 24h"
Hardcore
O DotNext se estabeleceu como uma conferência na qual os principais oradores aparecem repetidamente, revelando as questões especiais mais complexas. Existem vários tópicos que transformam quase todo relatório em incondicional, por exemplo, garantindo o máximo desempenho e detalhes de implementação de tecnologias complexas.
Detalhes de baixo nível
Já falamos sobre Jeffrey Richter e Pavel Yosifovich. Mas isso não é tudo! Vamos ver o que Raffaele Rialdi, Chris Bacon e Yegor Grishechko prepararam para nós.
Bem, vamos entrar com trunfos, você já quis escrever seu tempo de execução .NET? Isso deu certo? Chris Bacon conseguiu criar um projeto piloto, o DotNetAnywhere , um tempo de execução realmente compatível com suporte para multithreading, PInvoke, coleta de lixo e assim por diante. Foi esse projeto que foi usado para criar a estrutura Blazor , que permite executar o .NET diretamente no navegador usando a tecnologia WebAssembly. (A propósito, a reportagem sobre Blazor foi feita por Nikita Tsukanov, o vídeo está no YouTube ). Em geral, este DotNext diz "Então você deseja criar seu próprio tempo de execução .NET?" - Um relatório muito nerd e incomum sobre o tempo de execução da gravação.
Vamos para tópicos mais práticos. Se você já esteve no DotNext, já deve estar familiarizado com Rafael Rialdi e os tópicos nos quais ele se especializa. Caso contrário, agora é a hora de se familiarizar!
Gravações em vídeo de Rafael de DotNext 2018 Piter e DotNext 2017 Moscow
Desta vez, Rafael virá com um novo relatório,
“Melhorando o gerenciamento de memória em cenários de interoperabilidade” . Você deve ter notado que as novas APIs
Span<T>
e
Memory<T>
apareceram, e agora você pode acessar a memória não gerenciada sem precisar fazer cópias sem sentido para objetos gerenciados. Rafael, no decorrer do relatório, vai detalhar essas APIs, mostrar detalhes de exemplos praticamente interessantes, como a IoT, e que um mero mortal nas atividades cotidianas pode fazer tudo isso.
Recentemente, ValueTask, tipos de tarefas e IValueTaskSource apareceram em versões recentes do idioma. Muitos nem sabem que esses tipos existem, e a maioria dos que sabem sobre sua existência não entende por que são. Egor Grishechko em seu relatório “ValueTask: o que, por que e por que” lhe dirá quais são essas novas ferramentas, por que são usadas e quando são justificadas e quando não.
Máximo desempenho
Quase todos os relatórios, de uma maneira ou de outra, estão relacionados ao desempenho, mesmo que sejam de passagem. Esse é um recurso do trabalho do desenvolvedor. Mas alguns que quero destacar especificamente, são os relatórios de quatro oradores:
- Konrad Kokosa
- Egor Bogatov
- Evgeny Peshkov
- Alexandre Mutel
Já vimos uma palestra sobre nosso próprio tempo de execução .NET. E o seu próprio GC? Será necessário corrigir um arquivo terrível com um tamanho de dois megabytes de código C ++ gerado? Felizmente não. No .NET Core 2.1, eles adicionaram um novo recurso chamado GC local, que permite substituir completamente o coletor de lixo padrão por algo genérico ou vice-versa - use o coletor padrão fora do ambiente .NET usual. No relatório "Faça seu .NET GC personalizado -" por que "e" como ", Konrad Kokosa nos apresentará como isso é feito. Será interessante e útil principalmente para quem deseja entender melhor o gerenciamento de memória e o comportamento do GC. A essência principal do relatório não é tanto que você chegou em casa da conferência e imediatamente transferiu o produto para algo auto-escrito. Pelo contrário, é um relatório inspirador que expande os limites do que é possível. Você não precisa fazer isso, mas agora há a oportunidade de experimentar. A GC parece cada vez menos uma coisa incompreensível e cada vez mais cai em sua mão como uma ferramenta conveniente e obediente.
Mas a GC é apenas o começo. Recentemente, em muitos tempos de execução, tornou-se popular dar acesso ao usuário para gerar instruções do processador SIMD, como SSE e AVX. Por exemplo, em JS, o SIMD.js foi adicionado (e removido), em Java, o projeto do Panamá faz isso e assim por diante. Este mod também não contornou o .NET. Eles nos deram superpoderes, mas são tais que não é suficiente tê-los - você ainda precisa usá-los, e isso é difícil. Por um lado, o controle em tal nível requer uma tremenda motivação e qualificação: para escrever um código vetorial com desempenho superior ao escalar, você precisa forçar não apenas coisas como alinhamento, mas também seguir conjuntos de instruções específicos, pensar no resultado da geração e coisas que ocorrer se você sair da via rápida. Por outro lado, se você realmente escrever o aplicativo de desempenho
máximo e salvar todas as medidas, poderá encontrar o embotamento até dos compiladores mais avançados. Mesmo um problema relativamente estudado, como a alocação de registros, é NP-completo (
um ,
dois ), exigindo intervenção humana, e a situação do SIMD não parece ser melhor.
Este ano, Yegor Bogatov chega com um novo relatório,
"Otimização dentro do .NET Core", no qual ele mostrará como gerar o SIMD a partir de código de alto nível. Com Yegor, lançaremos em breve uma entrevista detalhada sobre Habré. Agora, quero dizer que Egor trabalha na Microsoft, é especialista em Mono e .NET Core, e não é a primeira vez que ele faz uma apresentação no DotNext. Mantenha algumas entradas anteriores:
Gravações em vídeo dos relatórios da Egor com DotNext 2017 Moscow e DotNext 2016 Moscow
A Egor está muito interessada na criação de jogos para computador e dispositivos móveis, nos quais todas essas otimizações podem ser aplicadas.
A história recente do Assassin's Creed Odyssey, lançada recentemente, confirma isso: os desenvolvedores
precisaram especificar processadores com suporte para AVX / SSE 4.1 nos requisitos mínimos de sistema, apesar da diminuição na base de clientes (esses são processadores Intel de segunda geração: Intel Core i5-2400 e superior, que eram anteriores chamada Sandy Bridge e que nem todo mundo tem).
Se o exemplo do jogo mais vendido não o convenceu, Alexandre Mutel definitivamente o convencerá. Este é o segundo orador com quem teremos uma entrevista detalhada para Habr. Ele trabalha para a Unity Technologies, a empresa que cria um dos mais populares mecanismos de jogos, o Unity . (A propósito, eles recentemente abriram o código C # para leitura). Alexandre sabe com certeza que existe um código tão crítico que o C # regular ainda não consegue lidar. Portanto, eles inventaram um compilador especial "burst": transforma um subconjunto limitado de C # em código nativo otimizado usando LLVM, que permite obter desempenho comparável ao C ++ e, às vezes, mais rápido. Como gerar código melhor que o RyuJIT? Qual subconjunto de C # faz sentido para escrever código ultra-rápido? Essas e outras perguntas serão abordadas no relatório "Por trás do compilador de burst, convertendo o .NET IL para código nativo altamente otimizado usando LLVM" - você definitivamente não vai querer perder isso!
Gostaria de terminar a descrição desta categoria com algo que possa ser imediatamente beneficiado diretamente. Aparentemente, “Métricas do sistema: coletando armadilhas” é perfeitamente adequado para essa função. Evgeny Peshkov, da Kontur, mostrará como superar as métricas: como elas diferem entre si, o que fazer com os problemas de desempenho no Process
and PerformanceCounter
, como os contadores de desempenho são organizados no interior e o que se segue e assim por diante.
O relatório anterior da Evgeny, “Exceções especiais no .NET”, ficou em segundo lugar na conferência DotNext Piter 2018. Ele discute os recursos de cada tipo de exceção, por exemplo, StackOverflowException
, ThreadAbortException
, AccessViolationException
e OutOfMemoryException
que ocorrem quando ocorrem erros no sistema operacional ou no nível do tempo de execução.
Exceções especiais de vídeo no .NET
Melhores práticas e arquitetura
Após nossos anúncios, às vezes pode parecer que o DotNext é um tipo de hardcore sólido para desenvolvedores de baixo nível. De fato, o programa tem outras categorias suficientes. Dê uma olhada no programa - há tags ao lado da maioria dos relatórios. Ao escolher o relatório a seguir, preste atenção a eles. Hardcore são tags sobre desempenho e detalhes do compilador, ao lado deles está um ícone falante com uma "cabra". Mas dê uma olhada em quantos temas universais você pode aplicar agora!

Enquanto isso, encontrar ótimos relatórios sobre "boas práticas" e "arquitetura" é uma coisa muito difícil. O fato de alguém parecer uma idéia brilhante, para outros, parece um completo absurdo e vice-versa. O palestrante da empresa tinha uma certa arquitetura para o sistema, mas para nós de uma maneira diferente? E o que isso significa? Felizmente, há um conjunto de tópicos que podem ser discutidos não apenas por razões de gosto.
Melhores práticas
Em primeiro lugar, essas são áreas em que os problemas estão obviamente acontecendo. Toda vez que você voa em um avião, deseja ouvir uma coleção de músicas, e um conhecido serviço em nuvem russo diz que é bom que você baixou sua coleção para o disco interno e ficou offline, mas você pode verificar a licença? Antes da verificação da licença, dez quilômetros na vertical. Na próxima vez que você baixar tudo em alta resolução para o disco interno e ouvir o aplicativo player. E em algum lugar no meio do voo, um jogador honestamente comprado pergunta - está tudo bem, mas eu esqueci de verificar a licença e baixar algo. Você salta dez quilômetros verticalmente. Do ponto de vista do desenvolvedor, isso parece ainda mais infernal, porque muitas estruturas familiares não implicam absolutamente a ausência de uma conexão de rede. Em alguns casos, você precisa escrever muitas coisas feias, como código duplicado para leitura direta e em cache. Agora multiplicamos tudo isso na plataforma cruzada e permanecemos no vale. Ou parece isso no começo? Escreva nos comentários. No DotNext, haverá um relatório maravilhoso sobre esse tópico,
“Criando aplicativos Xamarin à prova de modo de avião”, de Gerald Versluis, que você pode conhecer em vários
discursos, posts em blogs e alguns livros. Apesar do nome, este relatório será interessante mesmo para as pessoas que não estão familiarizadas com o Xamarin.

Existem tópicos eternos, cuja resposta exata ainda não foi encontrada, mas a cada ano o entendimento cresce rapidamente. Uma das batalhas intermináveis é TDD vs TestLast. Para começar, muitas pessoas têm problemas com os testes em geral, no nível do processo - no mundo do desenvolvimento orientado por prazos, você não será especialmente desenvolvido. Até fizemos uma conferência especial de testes,
Heisenbug . Os programadores ainda são mais complicados - o TDD foi inventado por volta do ano 99 como parte da Extreme Programming. Apesar de toda a sua genialidade, nunca capturou o mundo, o que é facilitado por vários fatores. Na vida cotidiana, verifica-se nem mesmo o Primeiro Teste, mas o verdadeiro Último Teste. Essa abordagem também possui vantagens (se encaixa em prazos muito mais fáceis) e várias desvantagens óbvias. Você se lembra do artigo impiedosamente
"TDD is Dead" do criador do Ruby on Rails? Foi escrito em 2014. 4 anos se passaram e o pêndulo não permaneceu no lugar. Como você se sente sobre esse problema? No DotNext, haverá
"Teste Último, Primeiro Teste, TDD: Quando Usar uma ou Outra Abordagem" - um relatório com um título falado de Alexander Kugushev. Alexander abordará detalhadamente todas essas abordagens e considerará sua aplicabilidade a exemplos específicos e bastante complexos.
Outro relatório ecoa esse relatório - “Teste de unidade pragmático” de Vladimir Khorikov, especialista de um tipo diferente, especialista em salvar grandes projetos herdados de empresas. Sim, não gostamos de falar sobre isso, mas às vezes as coisas mais estúpidas levam ao colapso até dos projetos mais duráveis construídos eternamente . Um dos fatores técnicos para o sucesso a longo prazo das empresas de tecnologia é o teste de unidade correto. Todos conhecemos várias práticas, mas, a longo prazo, nem todas as práticas são igualmente úteis. Este relatório não é para iniciantes - é para aqueles que podem escrever testes e querem levar seu entendimento a um novo nível. Aliás, Vladimir tem um excelente blog no qual analisa os problemas arquitetônicos mais interessantes. A ficção é altamente recomendada para iniciantes em iluminação, e experiente em sistematização.
Na seção sobre boas práticas, gostaria de mencionar outro relatório - “Como sobreviver sob carga: um servidor tolerante a falhas, cliente inteligente”, de Igor Lukanin. Igor é uma pessoa que, como representante da Kontur, participou de quase todas as nossas últimas conferências. Phillennium e eu o entrevistamos várias vezes e rapidamente percebemos que ele era capaz de dar uma resposta profunda e precisa a um grande número de perguntas práticas. Não foi necessário se preparar especialmente para uma entrevista com Igor - fizemos algumas perguntas e ele respondeu quase tudo. Além da pergunta mais importante: quando você virá à nossa conferência como palestrante? E assim aconteceu. A descrição do relatório diz simplesmente: "Você aprenderá com o relatório como criar esses microsserviços e realizar testes de estresse para garantir que eles suportem a carga". Não há dúvida de que será assim e vale muito. No final, a infraestrutura Contour é provavelmente a maior produção .NET da Rússia. De qualquer forma, você sempre pode fazer perguntas adicionais a Igor na área de discussão.
Arquitetura
E, finalmente, nossa última categoria para hoje é arquitetura. Muitos de nós se lembram do artigo de Joel Spolsky
, “Não deixe que os astronautas da arquitetura o assuste” . Se você não leu, veja, nada mudou muito desde então. “Lembre-se de que os lustres da arquitetura geralmente resolvem problemas que eles acham que podem ser resolvidos. Nem todos aqueles que são
úteis para resolver ”, lembra Spolsky. Nossos relatórios "arquitetônicos" são selecionados em uma base comum: eles devem ter utilidade prática concreta, um público-alvo específico, comunicar claramente pensamentos em apenas quarenta minutos alocados para o relatório. Apesar da simplicidade externa desses requisitos, nem todos os aplicativos os passam.
Então, quem nós temos desta vez? Já discutimos Greg Young no início do artigo. Este é um orador "fora de categorias", que vale a pena apenas porque é Greg.
Vagif Abilov ( VagifAbilov ) virá com um relatório "A vida dos atores do cluster: por que, quando e como" . Wagif é um renomado palestrante e membro do comitê do programa DotNext. A propósito, demandas especialmente altas são colocadas no relatório do participante do PC - este deve ser um exemplo de como informar bons relatórios de arquitetura. Desta vez, haverá um relatório poderoso sobre o modelo de ator, Akka e os limites de sua aplicabilidade. Discutiremos sobre dimensionamento e modelos básicos de decisão de cluster. É claro que mais pode ser dito, mas é difícil prescindir de spoilers. Basta vir ao relatório e descobrir tudo isso sozinho. Todas as decisões não são uma fuga de pensamento do astronauta, mas são testadas com base na experiência da Norwegian Broadcasting Corporation (NRK).
Vagif não era imediatamente um membro do PC, mas começou como palestrante no DotNext anterior.
Três vídeos de relatórios anteriores
As pessoas aprendem arquitetura a partir de livros antigos que foram escritos para Java. Os livros são bons, mas fornecem uma solução para os problemas da época com instrumentos da época. O tempo mudou, o C # é mais parecido com o Scala leve do que com o Java, e existem poucos bons livros novos.
No relatório "Instant Design", Maxim Arshinov falará sobre os critérios para um bom código e um código incorreto, como e como medi-lo. Ele fará uma visão geral das tarefas e abordagens típicas e analisará os prós e os contras. No final, ele dará recomendações e práticas recomendadas para o design de aplicativos da web. Maxim - como você deve ter adivinhado, o famoso habro- autor @marshinov . Ele é co-fundador da empresa de terceirização de alta tecnologia High Tech Group e, além de fazer negócios, ensina na Escola Superior de Tecnologia da Informação. Ou seja, este é um relato de uma pessoa que esteve no problema “nos dois lados da barricada”: tanto do lado de aprender novas tecnologias quanto do lado de uso nos negócios reais.
Você pode conhecer Maxim da performance anterior no DotNext em São Petersburgo
E, finalmente, o último relatório na revisão de hoje. Alexey Merson com o relatório “Design orientado a domínio: uma receita para um pragmático” nos revelará a essência do DDD. Mais precisamente, quem não conhece descobrirá. Quem sabe - sabe melhor. A rica experiência pessoal permite contar a Alexei coisas complexas em uma linguagem simples e compreensível.
Você já podia ver um de seus discursos na reunião da comunidade SpbDotNet.
Lembramos que o DotNext 2018 Moscou será realizado muito em breve - de 22 a 23 de novembro no Radisson Royal Moscow Congress Park. Os ingressos ainda podem ser adquiridos no site da conferência .
E também, nossos amigos DevZen Podcast lançaram recentemente um lançamento para PC DotNext, você pode ouvir quando quiser.