ݺߣ

ݺߣShare a Scribd company logo
Как создавалось
приложение DotNetRu
Федотовский Павел, 31.01.2018
О чем доклад
Опыт использования Xamarin.Forms при создании DotNetRu App
DotNetRu App
Энциклопедия всех встреч юзер-групп
Просмотр докладов
Новости
DotNetRu App
Нужна кроссплатформенность
Варианты
Нативные приложения
React Native
Xamarin.Forms
…
Использование фич платформ Все делать дважды
Разные языки, фреймворки
Нативные приложения
Нативные контролы Javascript
React Native
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Forms»
Плюсы Xamarin.Forms
Создание приложения под “все” платформы с использованием
C# + XAML
Почему Xamarin.Forms
1. Нормальный язык (С#)
2. XAML
3. Нативные контролы
4. Хорошая документация
5. Бесплатно
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Forms»
Поддерживаемые платформы
Platform Backend Status Supported By
Android Stable Xamarin
iOS Stable Xamarin
Tizen Stable Third Party - Samsung
UWP Stable Xamarin
macOS Preview Xamarin
GTK# Early Preview Community
WPF Early Preview
Community
https://github.com/mohachouch/forms-
wpf-progress
Web? PoC
Community
https://montemagno.com/building-a-
xaml-xamarin-forms-asp-net-website/
Поддерживаемые платформы
Platform Backend Status Supported By
Android Stable Xamarin
iOS Stable Xamarin
Tizen Stable Third Party - Samsung
UWP Stable Xamarin
macOS Preview Xamarin
GTK# Early Preview Community
WPF Early Preview
Community
https://github.com/mohachouch/forms-
wpf-progress
Web? PoC
Community
https://montemagno.com/building-a-
xaml-xamarin-forms-asp-net-website/
iOS 11
65%
iOS 10
28%
Other
7%
iOS: 93%
iOS 11 iOS 10 Other
Other
19%
5
6%
5.1
19%
6
29%
7
21%
7.1
5%
8.x
1%
Android: 80.7%
Other 5 5.1 6 7 7.1 8.x
Настройка окружения
Xamarin.Forms идет из коробки со студией
Windows: Visual Studio 2017
macOS: Visual Studio for Mac
Крайне желательно мощное железо
 SSD is a must
Настройка Android
Реальное устройство
• Все просто, включаем Developer Options
Эмуляторы (несовместимы между собой!)
• Visual Studio Android Emulator
• требует Hyper-V
• Нет поддержки Google Maps
• Google Android Emulator
• Несовместим с Hyper-V
Настройка iOS
Для сборки требуется macOS
=> нужен iMac, Mac, MacBook, etc. 
Решение: macOS в облаке, e.g. https://macincloud.com
Как запустить на реальном устройстве?
USB over Network
Слишком дорого, проще купить MacBook
Настройка iOS
iOS Remote Simulator
Работает c ~3 раза 
Реальное устройство
Можно бесплатно запускать на iPhone/iPad
Нет поддержки пуш-уведомлений
Резюме
Android
Google Android Emulator, если не нужен Hyper-V
Очень просто запустить на реальном устройстве
iOS
Нужна macOS, e.g. https://macincloud.com
iOS Remote Simulator
DEMO
“Hello, World” in 5 minutes
Подходы
Shared Projects
Portable Class Libraries
.NET Standard
https://developer.xamarin.com/guides/cross-
platform/application_fundamentals/code-sharing/
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Forms»
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Forms»
Можно использовать нативные
API в общем коде
#if директивы (ANROID, iOS)
Shared Project
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Forms»
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Forms»
Отдельная сборка, можно
расшарить
Не нужны #if директивы
Не хватает API
• ToTitleCase
• ToShortDateString
• Reflection: GetMember
Portable Class Library
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Forms»
.NET Standard
“Следующий уровень” PCL
Спецификация API
DotNetRu все еще использует PCL
help wanted
Баги
Удаление папок bin/obj
https://montemagno.com/easily-clean-bin-obj-folders/
Get-Children . -Include bin,obj -Recurse
| For-Each {
Remove-Item $_.FullName -Force -Recurse
}
Но Open Source!
https://github.com/xamarin/Xamarin.Forms
http://open.Xamarin.com
Локализация приложения
Хочется переключать язык прямо в рантайме
Используется
Файлы ресурсов (resx)
Индексатор
Settings Plugin
Messaging Center
Dependency Service
Высота ListView
var adjust = Device.Android ? 1 : -
itemsCount + 1;
HeightRequest = (itemsCount *
RowHeight) - adjust;
Good looking UI?
Good looking UI?
BottomNavigationBar
Наш пакет, доступен в NuGet
https://www.thewissen.io/xamarin-forms-ui-twitter/
https://github.com/sthewissen/KickassUI.Runkeeper
Время сборки
https://github.com/brminnick/ImproveXamarinBuildTimes
Android: отключить Verify apps over USB
Производительность приложения
Из коробки довольно медленно под Android
Но прогресс есть
 Android Fast Renderers
 Startup time improvements
https://blog.xamarin.com/5-ways-boost-xamarin-forms-app-
startup-time/
Размер приложения
iOS – 55 Mb
Android – 22.1 Mb
Help
wanted!
Отладка
Live Player
Xamarin.Forms Previewer
Live Run Current View
Нормально не работает ничего 
Forms Previewer
Работает очень криво
Фокус на Live Player
Live Player
Не нужна macOS
Позволяет менять код/XAML и тут же видеть результат
Много ограничений
https://developer.xamarin.com/guides/cross-platform/live/limitations/
 Нет поддержки аттрибутов
Ни разу не удалось запустить с DotNetRu, куча багов
Help
wanted!
Live Run Current View
Не работает с DotNetRu App
Из коробки не работает, нужно вставлять костыли
Help
wanted!
Third-Party решения
https://grialkit.com/gorilla-player/
http://www.livexaml.com/
Подготовка к публикации под iOS
Под Windows ничего не работает, куча багов
Нужно использовать VS for Mac/Xcode для редактирования
Иконки: http://appiconmaker.co/
 LaunchScreen
Публикация
Нужны аккаунты разработчика
Android: 25$ единоразово
iOS: 99$ каждый год
Visual Studio App Center
 Continuos Integration
 UI тесты
 https://appcenter.ms/apps
Visual Studio App Center
После выкладывания жизненный цикл не заканчивается!
https://appcenter.ms/apps
Нужно установить
 Microsoft.AppCenter.Analytics
 Microsoft.AppCenter.Crashes
Выводы
На Xamarin.Forms разрабатывать можно
Все еще куча багов, но стало лучше
Open Source – если что, можно допилить
С Live Player все будет совсем хорошо 
DotNetRu App
GitHub: https://github.com/DotNetRu/App
Git Flow – Pull Requests в ветку develop
https://github.com/DotNetRu/App/issues
Tags
help wanted
good first issue
Контакты
Email: pavel.fedotovsky@outlook.com
Telegram: @pfedotovsky

More Related Content

Similar to Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Forms» (20)

DevCon 2016 - Xamarin
DevCon 2016 - XamarinDevCon 2016 - Xamarin
DevCon 2016 - Xamarin
Anton Shunkov
Владислав Акулич - Monkey Talk - кроссплатформенное средство автоматизации те...
Владислав Акулич - Monkey Talk - кроссплатформенное средство автоматизации те...Владислав Акулич - Monkey Talk - кроссплатформенное средство автоматизации те...
Владислав Акулич - Monkey Talk - кроссплатформенное средство автоматизации те...
COMAQA.BY
Средства кросплатформенной разработки. Xamarin и ApperCode
Средства кросплатформенной разработки. Xamarin и ApperCodeСредства кросплатформенной разработки. Xamarin и ApperCode
Средства кросплатформенной разработки. Xamarin и ApperCode
GoSharp
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Anthony Marchenko
Средства кросплатформенной разработки. Xamarin и ApperCode
Средства кросплатформенной разработки. Xamarin и ApperCodeСредства кросплатформенной разработки. Xamarin и ApperCode
Средства кросплатформенной разработки. Xamarin и ApperCode
geekfamilyrussia
Monkey Talk - кросс-платформенное средство автоматизации тестирования мобильн...
Monkey Talk - кросс-платформенное средство автоматизации тестирования мобильн...Monkey Talk - кросс-платформенное средство автоматизации тестирования мобильн...
Monkey Talk - кросс-платформенное средство автоматизации тестирования мобильн...
SQALab
.NET Core в современных проектах
.NET Core в современных проектах.NET Core в современных проектах
.NET Core в современных проектах
Andrew Gubskiy
.NET core в современных проектах, Андрей Губский
.NET core в современных проектах, Андрей Губский.NET core в современных проектах, Андрей Губский
.NET core в современных проектах, Андрей Губский
Sigma Software
Использование Symfony
Использование SymfonyИспользование Symfony
Использование Symfony
Media Gorod
Sergey Khlopenov tools for_development_cross_platform_mobile_ap
Sergey Khlopenov tools for_development_cross_platform_mobile_apSergey Khlopenov tools for_development_cross_platform_mobile_ap
Sergey Khlopenov tools for_development_cross_platform_mobile_ap
DneprCiklumEvents
Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”
GlobalLogic Ukraine
Web programming modern tendencies
Web programming modern tendenciesWeb programming modern tendencies
Web programming modern tendencies
DarkestMaster
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)
Alexey Kachayev
От пояса с инструментами к полноценной лаборатории
От пояса с инструментами к полноценной лабораторииОт пояса с инструментами к полноценной лаборатории
От пояса с инструментами к полноценной лаборатории
Yandex
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработки
-Доминанта
Console application with ZF 2.0
Console application with ZF 2.0Console application with ZF 2.0
Console application with ZF 2.0
Alexey Kachayev
4 особенности платформы microsoft .net для разработки корпоративных систем
4 особенности платформы microsoft .net для разработки корпоративных систем4 особенности платформы microsoft .net для разработки корпоративных систем
4 особенности платформы microsoft .net для разработки корпоративных систем
KewpaN
Микросервисы в .NET Core
Микросервисы в .NET CoreМикросервисы в .NET Core
Микросервисы в .NET Core
Andrew Gubskiy
Эффективная архитектура мобильной автоматизации
Эффективная архитектура мобильной автоматизации Эффективная архитектура мобильной автоматизации
Эффективная архитектура мобильной автоматизации
ISsoft
Разработка кросплатформенных приложений
Разработка кросплатформенных приложенийРазработка кросплатформенных приложений
Разработка кросплатформенных приложений
barbariska89
Владислав Акулич - Monkey Talk - кроссплатформенное средство автоматизации те...
Владислав Акулич - Monkey Talk - кроссплатформенное средство автоматизации те...Владислав Акулич - Monkey Talk - кроссплатформенное средство автоматизации те...
Владислав Акулич - Monkey Talk - кроссплатформенное средство автоматизации те...
COMAQA.BY
Средства кросплатформенной разработки. Xamarin и ApperCode
Средства кросплатформенной разработки. Xamarin и ApperCodeСредства кросплатформенной разработки. Xamarin и ApperCode
Средства кросплатформенной разработки. Xamarin и ApperCode
GoSharp
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Anthony Marchenko
Средства кросплатформенной разработки. Xamarin и ApperCode
Средства кросплатформенной разработки. Xamarin и ApperCodeСредства кросплатформенной разработки. Xamarin и ApperCode
Средства кросплатформенной разработки. Xamarin и ApperCode
geekfamilyrussia
Monkey Talk - кросс-платформенное средство автоматизации тестирования мобильн...
Monkey Talk - кросс-платформенное средство автоматизации тестирования мобильн...Monkey Talk - кросс-платформенное средство автоматизации тестирования мобильн...
Monkey Talk - кросс-платформенное средство автоматизации тестирования мобильн...
SQALab
.NET Core в современных проектах
.NET Core в современных проектах.NET Core в современных проектах
.NET Core в современных проектах
Andrew Gubskiy
.NET core в современных проектах, Андрей Губский
.NET core в современных проектах, Андрей Губский.NET core в современных проектах, Андрей Губский
.NET core в современных проектах, Андрей Губский
Sigma Software
Использование Symfony
Использование SymfonyИспользование Symfony
Использование Symfony
Media Gorod
Sergey Khlopenov tools for_development_cross_platform_mobile_ap
Sergey Khlopenov tools for_development_cross_platform_mobile_apSergey Khlopenov tools for_development_cross_platform_mobile_ap
Sergey Khlopenov tools for_development_cross_platform_mobile_ap
DneprCiklumEvents
Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”
GlobalLogic Ukraine
Web programming modern tendencies
Web programming modern tendenciesWeb programming modern tendencies
Web programming modern tendencies
DarkestMaster
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)
Alexey Kachayev
От пояса с инструментами к полноценной лаборатории
От пояса с инструментами к полноценной лабораторииОт пояса с инструментами к полноценной лаборатории
От пояса с инструментами к полноценной лаборатории
Yandex
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработки
-Доминанта
Console application with ZF 2.0
Console application with ZF 2.0Console application with ZF 2.0
Console application with ZF 2.0
Alexey Kachayev
4 особенности платформы microsoft .net для разработки корпоративных систем
4 особенности платформы microsoft .net для разработки корпоративных систем4 особенности платформы microsoft .net для разработки корпоративных систем
4 особенности платформы microsoft .net для разработки корпоративных систем
KewpaN
Микросервисы в .NET Core
Микросервисы в .NET CoreМикросервисы в .NET Core
Микросервисы в .NET Core
Andrew Gubskiy
Эффективная архитектура мобильной автоматизации
Эффективная архитектура мобильной автоматизации Эффективная архитектура мобильной автоматизации
Эффективная архитектура мобильной автоматизации
ISsoft
Разработка кросплатформенных приложений
Разработка кросплатформенных приложенийРазработка кросплатформенных приложений
Разработка кросплатформенных приложений
barbariska89

More from SpbDotNet Community (20)

Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»
Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»
Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»
SpbDotNet Community
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
SpbDotNet Community
Константин Васильев «Fody против рутины»
Константин Васильев «Fody против рутины»Константин Васильев «Fody против рутины»
Константин Васильев «Fody против рутины»
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
Роман Неволин «Провайдеры типов без боли и магии»
Роман Неволин «Провайдеры типов без боли и магии»Роман Неволин «Провайдеры типов без боли и магии»
Роман Неволин «Провайдеры типов без боли и магии»
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
Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»
Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»
Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»
SpbDotNet Community
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
SpbDotNet Community
Константин Васильев «Fody против рутины»
Константин Васильев «Fody против рутины»Константин Васильев «Fody против рутины»
Константин Васильев «Fody против рутины»
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
Роман Неволин «Провайдеры типов без боли и магии»
Роман Неволин «Провайдеры типов без боли и магии»Роман Неволин «Провайдеры типов без боли и магии»
Роман Неволин «Провайдеры типов без боли и магии»
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

Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Forms»