SlideShare a Scribd company logo
Провайдеры типов
без боли и магии
Роман Неволин, EPAM
2
Задача: я хочу получить JSON с
вопросами по URL, взять первый вопрос
и напечать ссылку на него
3
Задача : «детское» решение
1.Скачать текст по ссылке
2.Разбить текст на «блоки»
3.Выделить блоки с вопросом
4.Выбрать первый из этих блоков.
5.Найти в нем ссылку и напечатать
4
Задача : традиционное C# решение
5
Задача : традиционное C# решение
6
Задача : традиционное C# решение
7
Задача : традиционное C# решение
8
Задача : традиционное C# решение
9
Задача : традиционное C# решение
10
Задача : традиционное C# решение
11
Задача : традиционное C# решение
12
Задача : «динамическое» решение
13
Что здесь не так?
 Мы легко можем ошибиться, и об
ошибке станет известно только в
рантайме
14
Что здесь не так?
 Мы легко можем ошибиться, и об
ошибке станет известно только в
рантайме
 Автодополнение не помогает нам писать
код
15
Что здесь не так?
 Мы легко можем ошибиться, и об
ошибке станет известно только в
рантайме
 Автодополнение не помогает нам писать
код
 Мы никак не застрахованы от изменений
в API
16
Ах, как было бы прекрасно, если..
 Если бы типы генерировались по JSON
17
Ах, как было бы прекрасно, если..
 Если бы типы генерировались по JSON
 Если бы это происходило автоматически,
как только мы ввели в IDE ссылку на
JSON
18
Ах, как было бы прекрасно, если..
 Если бы типы генерировались по JSON
 Если бы это происходило автоматически,
как только мы ввели в IDE ссылку на
JSON
 Если бы сгенерированные типы
автоматически обновлялись при
изменении JSON
19
В общем, провайдеры – это
отлично
20
В общем, провайдеры – это
отлично,
но...
21
Но...
 Но провайдеры – сложный механизм с
кучей подводных камней.
22
Но...
 Но провайдеры – сложный механизм с
кучей подводных камней.
 Но бывает сложно понять, когда
выполняется та или иная логика внутри
провайдера
23
Но...
 Но провайдеры – сложный механизм с
кучей подводных камней.
 Но бывает сложно понять, когда
выполняется та или иная логика внутри
провайдера
 Но провайдеры недостаточно хорошо
специфицированы.
24
Но...
 Но провайдеры – сложный механизм с
кучей подводных камней.
 Но бывает сложно понять, когда
выполняется та или иная логика внутри
провайдера
 Но провайдеры недостаточно хорошо
специфицированы.
Но вообще-то. Программисты мы или
погулять вышли? 25
Высокоуровневая схема R Provider
26
Высокоуровневая схема R Provider
27
Высокоуровневая схема R Provider
28
Высокоуровневая схема R Provider
29
Высокоуровневая схема R Provider
30
Высокоуровневая схема R Provider
31
Высокоуровневая схема R Provider
32
33
https://www.pluralsight.com/courses/building-f-sharp-type-providers
ID3 Provider : обзор задачи
 Информация об MP3 файлах
хранится в ID3 тегах
 Разные теги хранят в себе
разные данные
 MP3 файл может содержать или
не содержать любые ID3 теги
Это задача для провайдеров!
34
35
36
37
38
39
40
41
Демо: смотрим на код
ID3 Tag Provider
42
Так все-таки.
Существуют на самом деле
сгенерированные типы или
нет?
43
Generative провайдеры
 Создает реальные типы на
основании схемы
 Созданные типы хранятся в файле
сборки
 Совместим с рефлексией и другими
.NET языками
 Увеличивают размер сборки
44
Erased провайдеры
 Создает типы, о которых знает
только F# компилятор
 Невозможно использовать
рефлексию
 Несовместимы с другими .NET
языками
 Умеют работать с бесконечными
структурами данных
45
Code Quotations
46
Code Quotations
 Механизм
метапрограммирования в F#,
схожий с деревьями выражений
 Полностью валидируется
компилятором
 Используется для создания
«шаблонов» выражений
47
Code Quotations
48
Демо: декомпилируем
провайдеры
49
Но как это все
сгенерировалось?
50
51
TypeProviderForNamespaces
52
TypeProviderForNamespaces
53
TypeProviderForNamespaces
54
TypeProviderForNamespaces
55
TypeProviderForNamespaces
56
Интерфейс ITypeProvider
«Type providers implement this
interface in order to be
recognized by the compiler as an
F# type provider. The
implementation of this interface
determines the public interface
and behavior of the type
provider»
57
TypeProviderForNamespaces
58
TypeProviderForNamespaces
59
Определение базового типа
60
Определение базового типа
61
Определение базового типа
62
Статические параметры
63
Статические параметры
64
Статические параметры
65
Статические параметры
66
Статические параметры
67
Статические параметры
68
Статические параметры
69
Статические параметры
70
Статические параметры
71
Подклассы и параметры
72
Подклассы и параметры
73
Подклассы и параметры
74
Подклассы и параметры
75
Подклассы и параметры
76
Подклассы и параметры
77
Добавление всего сгенеренного
78
Добавление всего сгенеренного
79
Добавление всего сгенеренного
80
Добавление всего сгенеренного
81
Добавление всего сгенеренного
82
Добавление всего сгенеренного
83
Добавление всего сгенеренного
84
85
Слой провайдера
86
Слой провайдера
Слой Type Provider SDK
87
Слой провайдера
Слой Type Provider SDK
Слой компилятора
Спасибо!
nevoroman@gmail.com
nevoroman

More Related Content

Similar to Роман Неволин «Провайдеры типов без боли и магии»

Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
HappyDev
 
Дов Німрац “Що таке проблемний продукт і як з цим боротись?” Kharkiv Project ...
Дов Німрац “Що таке проблемний продукт і як з цим боротись?” Kharkiv Project ...Дов Німрац “Що таке проблемний продукт і як з цим боротись?” Kharkiv Project ...
Дов Німрац “Що таке проблемний продукт і як з цим боротись?” Kharkiv Project ...
Lviv Startup Club
 
Refactoring Legacy Code - Breaking Dependencies Techniques
Refactoring Legacy Code - Breaking Dependencies TechniquesRefactoring Legacy Code - Breaking Dependencies Techniques
Refactoring Legacy Code - Breaking Dependencies Techniques
Dmitry Pavlov
 
Google Penguin. Борьба со Зверем - SEMCamp.ua 2012
Google Penguin. Борьба со Зверем - SEMCamp.ua 2012Google Penguin. Борьба со Зверем - SEMCamp.ua 2012
Google Penguin. Борьба со Зверем - SEMCamp.ua 2012Promodo
 
Дов Німрац "“Що таке проблемний продукт і як з цим боротись?" Lviv Project Ma...
Дов Німрац "“Що таке проблемний продукт і як з цим боротись?" Lviv Project Ma...Дов Німрац "“Що таке проблемний продукт і як з цим боротись?" Lviv Project Ma...
Дов Німрац "“Що таке проблемний продукт і як з цим боротись?" Lviv Project Ma...
Lviv Startup Club
 
"Рекомендации по проектированию API". Марина Степанова, Яндекс
"Рекомендации по проектированию API". Марина Степанова, Яндекс"Рекомендации по проектированию API". Марина Степанова, Яндекс
"Рекомендации по проектированию API". Марина Степанова, Яндекс
Yandex
 
"Dealing with legacy code"
"Dealing with legacy code""Dealing with legacy code"
"Dealing with legacy code"
HYS Enterprise
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
AlexeyParhomenko
 
Jbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterJbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot Starter
Aleksandr Tarasov
 
Приложения в плагинах
Приложения в плагинахПриложения в плагинах
Приложения в плагинах
Александр Ежов
 
Pandoras white box
Pandoras white boxPandoras white box
Pandoras white box
Nikita Makarov
 
TechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, ErlyvideoTechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, Erlyvideo
Badoo Development
 
Что делать, когда у вас 100 партнеров / Иван Потапов (Lamoda)
Что делать, когда у вас 100 партнеров / Иван Потапов (Lamoda)Что делать, когда у вас 100 партнеров / Иван Потапов (Lamoda)
Что делать, когда у вас 100 партнеров / Иван Потапов (Lamoda)
Ontico
 
Как не подавиться большим старым проектом. Юрий Минаев ➠ CoreHard Autumn 2019
Как не подавиться большим старым проектом. Юрий Минаев ➠  CoreHard Autumn 2019Как не подавиться большим старым проектом. Юрий Минаев ➠  CoreHard Autumn 2019
Как не подавиться большим старым проектом. Юрий Минаев ➠ CoreHard Autumn 2019
corehard_by
 
Как не подавиться большим старым проектом
Как не подавиться большим старым проектомКак не подавиться большим старым проектом
Как не подавиться большим старым проектом
Andrey Karpov
 
Сдать экзамен CCIE: миссия выполнима
Сдать экзамен CCIE: миссия выполнимаСдать экзамен CCIE: миссия выполнима
Сдать экзамен CCIE: миссия выполнима
SkillFactory
 
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт... Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Ontico
 
Yandex.Frontend: complex services, complex solutions
Yandex.Frontend: complex services, complex solutionsYandex.Frontend: complex services, complex solutions
Yandex.Frontend: complex services, complex solutions
Yelena Jetpyspayeva
 
"Фронтенд в Яндексе: сложные сервисы, непростые решения". Елена Джетпыспаева,...
"Фронтенд в Яндексе: сложные сервисы, непростые решения". Елена Джетпыспаева,..."Фронтенд в Яндексе: сложные сервисы, непростые решения". Елена Джетпыспаева,...
"Фронтенд в Яндексе: сложные сервисы, непростые решения". Елена Джетпыспаева,...
Yandex
 

Similar to Роман Неволин «Провайдеры типов без боли и магии» (20)

Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
 
Дов Німрац “Що таке проблемний продукт і як з цим боротись?” Kharkiv Project ...
Дов Німрац “Що таке проблемний продукт і як з цим боротись?” Kharkiv Project ...Дов Німрац “Що таке проблемний продукт і як з цим боротись?” Kharkiv Project ...
Дов Німрац “Що таке проблемний продукт і як з цим боротись?” Kharkiv Project ...
 
Refactoring Legacy Code - Breaking Dependencies Techniques
Refactoring Legacy Code - Breaking Dependencies TechniquesRefactoring Legacy Code - Breaking Dependencies Techniques
Refactoring Legacy Code - Breaking Dependencies Techniques
 
Roman dobronovsky
Roman dobronovskyRoman dobronovsky
Roman dobronovsky
 
Google Penguin. Борьба со Зверем - SEMCamp.ua 2012
Google Penguin. Борьба со Зверем - SEMCamp.ua 2012Google Penguin. Борьба со Зверем - SEMCamp.ua 2012
Google Penguin. Борьба со Зверем - SEMCamp.ua 2012
 
Дов Німрац "“Що таке проблемний продукт і як з цим боротись?" Lviv Project Ma...
Дов Німрац "“Що таке проблемний продукт і як з цим боротись?" Lviv Project Ma...Дов Німрац "“Що таке проблемний продукт і як з цим боротись?" Lviv Project Ma...
Дов Німрац "“Що таке проблемний продукт і як з цим боротись?" Lviv Project Ma...
 
"Рекомендации по проектированию API". Марина Степанова, Яндекс
"Рекомендации по проектированию API". Марина Степанова, Яндекс"Рекомендации по проектированию API". Марина Степанова, Яндекс
"Рекомендации по проектированию API". Марина Степанова, Яндекс
 
"Dealing with legacy code"
"Dealing with legacy code""Dealing with legacy code"
"Dealing with legacy code"
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
 
Jbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterJbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot Starter
 
Приложения в плагинах
Приложения в плагинахПриложения в плагинах
Приложения в плагинах
 
Pandoras white box
Pandoras white boxPandoras white box
Pandoras white box
 
TechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, ErlyvideoTechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, Erlyvideo
 
Что делать, когда у вас 100 партнеров / Иван Потапов (Lamoda)
Что делать, когда у вас 100 партнеров / Иван Потапов (Lamoda)Что делать, когда у вас 100 партнеров / Иван Потапов (Lamoda)
Что делать, когда у вас 100 партнеров / Иван Потапов (Lamoda)
 
Как не подавиться большим старым проектом. Юрий Минаев ➠ CoreHard Autumn 2019
Как не подавиться большим старым проектом. Юрий Минаев ➠  CoreHard Autumn 2019Как не подавиться большим старым проектом. Юрий Минаев ➠  CoreHard Autumn 2019
Как не подавиться большим старым проектом. Юрий Минаев ➠ CoreHard Autumn 2019
 
Как не подавиться большим старым проектом
Как не подавиться большим старым проектомКак не подавиться большим старым проектом
Как не подавиться большим старым проектом
 
Сдать экзамен CCIE: миссия выполнима
Сдать экзамен CCIE: миссия выполнимаСдать экзамен CCIE: миссия выполнима
Сдать экзамен CCIE: миссия выполнима
 
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт... Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 
Yandex.Frontend: complex services, complex solutions
Yandex.Frontend: complex services, complex solutionsYandex.Frontend: complex services, complex solutions
Yandex.Frontend: complex services, complex solutions
 
"Фронтенд в Яндексе: сложные сервисы, непростые решения". Елена Джетпыспаева,...
"Фронтенд в Яндексе: сложные сервисы, непростые решения". Елена Джетпыспаева,..."Фронтенд в Яндексе: сложные сервисы, непростые решения". Елена Джетпыспаева,...
"Фронтенд в Яндексе: сложные сервисы, непростые решения". Елена Джетпыспаева,...
 

More from SpbDotNet Community

Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»
Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»
Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»
SpbDotNet Community
 
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
SpbDotNet Community
 
Константин Васильев «Fody против рутины»
Константин Васильев «Fody против рутины»Константин Васильев «Fody против рутины»
Константин Васильев «Fody против рутины»
SpbDotNet Community
 
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...
SpbDotNet Community
 
Слава Бобик «NancyFx для самых маленьких»
Слава Бобик «NancyFx для самых маленьких»Слава Бобик «NancyFx для самых маленьких»
Слава Бобик «NancyFx для самых маленьких»
SpbDotNet Community
 
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
SpbDotNet Community
 
Игорь Лабутин «Коллекционируем данные в .NET»
Игорь Лабутин «Коллекционируем данные в .NET»Игорь Лабутин «Коллекционируем данные в .NET»
Игорь Лабутин «Коллекционируем данные в .NET»
SpbDotNet Community
 
Станислав Сидристый «Шаблон Lifetime: для сложного Disposing»
Станислав Сидристый «Шаблон Lifetime: для сложного Disposing»Станислав Сидристый «Шаблон Lifetime: для сложного Disposing»
Станислав Сидристый «Шаблон Lifetime: для сложного Disposing»
SpbDotNet Community
 
Артём Акуляков - F# for Data Analysis
Артём Акуляков - F# for Data AnalysisАртём Акуляков - F# for Data Analysis
Артём Акуляков - F# for Data Analysis
SpbDotNet Community
 
Анатолий Кулаков «The Metrix has you…»
Анатолий Кулаков «The Metrix has you…»Анатолий Кулаков «The Metrix has you…»
Анатолий Кулаков «The Metrix has you…»
SpbDotNet Community
 
Дмитрий Верескун «Синтаксический сахар C#»
Дмитрий Верескун «Синтаксический сахар C#»Дмитрий Верескун «Синтаксический сахар C#»
Дмитрий Верескун «Синтаксический сахар C#»
SpbDotNet Community
 
Александр Саитов «Основы профилирования и оптимизации приложений в .NET»
Александр Саитов «Основы профилирования и оптимизации приложений в .NET»Александр Саитов «Основы профилирования и оптимизации приложений в .NET»
Александр Саитов «Основы профилирования и оптимизации приложений в .NET»
SpbDotNet Community
 
Сергей Лёвкин «Технологии Microsoft для актуальных трендов»
Сергей Лёвкин «Технологии Microsoft для актуальных трендов»Сергей Лёвкин «Технологии Microsoft для актуальных трендов»
Сергей Лёвкин «Технологии Microsoft для актуальных трендов»
SpbDotNet Community
 
Алексей Мерсон «Domain Driven Design: профит малой кровью»
Алексей Мерсон «Domain Driven Design: профит малой кровью»Алексей Мерсон «Domain Driven Design: профит малой кровью»
Алексей Мерсон «Domain Driven Design: профит малой кровью»
SpbDotNet Community
 
Егор Гришечко «Async/Await и всё, что вы боялись спросить»
Егор Гришечко «Async/Await и всё, что вы боялись спросить»Егор Гришечко «Async/Await и всё, что вы боялись спросить»
Егор Гришечко «Async/Await и всё, что вы боялись спросить»
SpbDotNet Community
 
Михаил Щербаков «Что может быть проще: делегаты и события»
Михаил Щербаков «Что может быть проще: делегаты и события»Михаил Щербаков «Что может быть проще: делегаты и события»
Михаил Щербаков «Что может быть проще: делегаты и события»
SpbDotNet Community
 
Никита Каменский «Есть ли жизнь с UWP?»
Никита Каменский «Есть ли жизнь с UWP?»Никита Каменский «Есть ли жизнь с UWP?»
Никита Каменский «Есть ли жизнь с UWP?»
SpbDotNet Community
 
Александр Кугушев «Roslyn: очевидные неочевидности»
Александр Кугушев «Roslyn: очевидные неочевидности»Александр Кугушев «Roslyn: очевидные неочевидности»
Александр Кугушев «Roslyn: очевидные неочевидности»
SpbDotNet Community
 
ДотаНетоЛогия: СПб 2017
ДотаНетоЛогия: СПб 2017ДотаНетоЛогия: СПб 2017
ДотаНетоЛогия: СПб 2017
SpbDotNet Community
 
Юрий Волков «VM via F#»
Юрий Волков «VM via F#»Юрий Волков «VM via F#»
Юрий Волков «VM via F#»
SpbDotNet Community
 

More from SpbDotNet Community (20)

Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»
Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»
Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»
 
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
 
Константин Васильев «Fody против рутины»
Константин Васильев «Fody против рутины»Константин Васильев «Fody против рутины»
Константин Васильев «Fody против рутины»
 
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...
 
Слава Бобик «NancyFx для самых маленьких»
Слава Бобик «NancyFx для самых маленьких»Слава Бобик «NancyFx для самых маленьких»
Слава Бобик «NancyFx для самых маленьких»
 
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
 
Игорь Лабутин «Коллекционируем данные в .NET»
Игорь Лабутин «Коллекционируем данные в .NET»Игорь Лабутин «Коллекционируем данные в .NET»
Игорь Лабутин «Коллекционируем данные в .NET»
 
Станислав Сидристый «Шаблон Lifetime: для сложного Disposing»
Станислав Сидристый «Шаблон Lifetime: для сложного Disposing»Станислав Сидристый «Шаблон Lifetime: для сложного Disposing»
Станислав Сидристый «Шаблон Lifetime: для сложного Disposing»
 
Артём Акуляков - F# for Data Analysis
Артём Акуляков - F# for Data AnalysisАртём Акуляков - F# for Data Analysis
Артём Акуляков - F# for Data Analysis
 
Анатолий Кулаков «The Metrix has you…»
Анатолий Кулаков «The Metrix has you…»Анатолий Кулаков «The Metrix has you…»
Анатолий Кулаков «The Metrix has you…»
 
Дмитрий Верескун «Синтаксический сахар C#»
Дмитрий Верескун «Синтаксический сахар C#»Дмитрий Верескун «Синтаксический сахар C#»
Дмитрий Верескун «Синтаксический сахар C#»
 
Александр Саитов «Основы профилирования и оптимизации приложений в .NET»
Александр Саитов «Основы профилирования и оптимизации приложений в .NET»Александр Саитов «Основы профилирования и оптимизации приложений в .NET»
Александр Саитов «Основы профилирования и оптимизации приложений в .NET»
 
Сергей Лёвкин «Технологии Microsoft для актуальных трендов»
Сергей Лёвкин «Технологии Microsoft для актуальных трендов»Сергей Лёвкин «Технологии Microsoft для актуальных трендов»
Сергей Лёвкин «Технологии Microsoft для актуальных трендов»
 
Алексей Мерсон «Domain Driven Design: профит малой кровью»
Алексей Мерсон «Domain Driven Design: профит малой кровью»Алексей Мерсон «Domain Driven Design: профит малой кровью»
Алексей Мерсон «Domain Driven Design: профит малой кровью»
 
Егор Гришечко «Async/Await и всё, что вы боялись спросить»
Егор Гришечко «Async/Await и всё, что вы боялись спросить»Егор Гришечко «Async/Await и всё, что вы боялись спросить»
Егор Гришечко «Async/Await и всё, что вы боялись спросить»
 
Михаил Щербаков «Что может быть проще: делегаты и события»
Михаил Щербаков «Что может быть проще: делегаты и события»Михаил Щербаков «Что может быть проще: делегаты и события»
Михаил Щербаков «Что может быть проще: делегаты и события»
 
Никита Каменский «Есть ли жизнь с UWP?»
Никита Каменский «Есть ли жизнь с UWP?»Никита Каменский «Есть ли жизнь с UWP?»
Никита Каменский «Есть ли жизнь с UWP?»
 
Александр Кугушев «Roslyn: очевидные неочевидности»
Александр Кугушев «Roslyn: очевидные неочевидности»Александр Кугушев «Roslyn: очевидные неочевидности»
Александр Кугушев «Roslyn: очевидные неочевидности»
 
ДотаНетоЛогия: СПб 2017
ДотаНетоЛогия: СПб 2017ДотаНетоЛогия: СПб 2017
ДотаНетоЛогия: СПб 2017
 
Юрий Волков «VM via F#»
Юрий Волков «VM via F#»Юрий Волков «VM via F#»
Юрий Волков «VM via F#»
 

Роман Неволин «Провайдеры типов без боли и магии»