В конце мая Microsoft выпустила в релиз Xamarin.Forms Shell — оболочку нацеленную на упрощение создания кроссплатформенных мобильных приложений и включающий в себя следующий функционал: боковое меню, вкладки, навигация, поиск.
Читать полностью »
Рубрика «.net» - 29
Эффективное управление подключениями SignalR
2019-10-06 в 13:20, admin, рубрики: .net, signalr core, Разработка веб-сайтов, распределенные системыЗдравствуй, Хабрахабр. В настоящий момент я работаю над созданием движка чата в основе которого лежит библиотека SignalR. Помимо увлекательного процесса погружения в мир real-time приложений пришлось столкнуться и с рядом вызовов технического характера. Об одном из них я и хочу с вами поделиться в этой статье.
Введение
Что такое SignalR — это свое рода фасад над технологиями WebSockets, Long polling, Server-send events. Благодаря этому фасаду можно единообразно работать с любой из этих технологий и не беспокоиться о деталях. Кроме того, благодаря технологии Long polling можно поддерживать клиентов, которые по каким-то причинам не могут работать по веб-сокетам, например IE-8. Фасад представлен высокоуровневым API, работающим по принципу RPC. Кроме того, SignalR предлагает выстраивать коммуникации по принципу «publisher-subscriber» что в терминологии API называется группами. Об этом и пойдет речь далее.
Вызовы
Пожалуй самое интересное в программировании это возможность решать нестандартные задачи. И одну из таких задач мы сегодня обозначим и рассмотрим ее решение.
Читать полностью »
Итак, мы продолжаем наше путешествие к большему количеству типов F#. На этот раз мы рассмотрим типы Записей.
Читать полностью »
Итак, наше путешествие в F # продолжается. Следующая статья будет посвящена типам F #, которые могут иметь или не иметь стандартные эквиваленты .NET. Этот пост о кортежах.
Читать полностью »
Я намеревался написать 1/2 достойного поста в блоге об операторах F #, но потом я подумал, и, честно говоря, я не мог видеть слишком много достоинств в простом повторении того, что уже свободно доступно на MSDN, где перечисляются ВСЕ операторы F#.
Читать полностью »
В этом посте мы рассмотрим привязки в F#, в частности мы рассмотрим Let / Use / Do. Теперь вы, возможно, спрашиваете себя, что такое привязки, и, поскольку мы еще не рассмотрели их, сейчас самое время поговорить об этом.
Проще говоря, привязка связывает идентификатор со значением или функцией.
Читать полностью »
Грокаем DLR
2019-10-04 в 15:30, admin, рубрики: .net, .net core, C#, DLR, dynamic programming, IPC, visual basic, ПрограммированиеПредисловие переводчика
Это скорее вольный пересказ, а не перевод. Я включил в эту статью только те части оригинала, которые имеют непосредственное отношение к внутренним механизмам работы DLR или объясняют важные идеи. Примечания будут заключены в квадратные скобки
Многие .NET разработчики слышали про Dynamic Language Runtime (DLR), но почти ничего о нем не знают. Разработчики, пишущие на языках типа C# или Visual Basic, избегают языков с динамической типизацией из-за боязни исторически связанных с ними проблем с масштабируемостью. Также их беспокоит тот факт, что языки типа Python или Ruby не выполняют проверку типов во время компиляции, что может привести к сложным для поиска и исправления ошибкам в рантайме. Это обоснованные опасения, которые могут объяснить, почему DLR не пользуется популярностью среди основной массы .NET разработчиков даже спустя два года после официального релиза [статья довольно старая, но с тех пор ничего не изменилось]. В конце концов, любой .NET Runtime, содержащий в себе слова Dynamic и Language в своем названии, должен предназначаться строго для поддержки таких языков, как Python, правильно?
Притормозите. В то время как DLR действительно была задумана для поддержки «Iron» реализации Python и Ruby в .NET Framework, её архитектура предоставляет гораздо более глубокие абстракции.
Regular Avalonia
2019-10-04 в 9:53, admin, рубрики: .net, avalonia, avaloniaui, C#, Программирование, Разработка под Linux, разработка под windowsSometimes we don’t understand how the regular expression that we have composed works and want to check. There are many applications like regex101.com or vs code. I wanted to add one more to this list.
In this article we will see how you can wrap Regex in cross-platform graphics and create a simple application for testing regular expressions.
«Освоить F# не сложнее, чем Entity Framework или WPF»: интервью со Скоттом Влашиным
2019-10-03 в 11:27, admin, рубрики: .net, C#, F#, functional programming, scott wlaschinКого расспрашивать про F#, как не человека, посвятившего этому языку подробный сайт? Скотт Влашин создал ресурс «F# for Fun and Profit», знакомый многим хабравчанам: на Хабре переводили оттуда и серию статей «Функциональное мышление», и статью «Железнодорожно-ориентированное программирование».
А в ноябре он выступит в Москве на нашей конференции DotNext с докладом «The power of composition». И в преддверии этого выступления мы расспросили его про F# и вообще функциональное программирование.
Читать полностью »
Монада «Maybe» через async-await в C# (без Task-oв!)
2019-10-02 в 11:50, admin, рубрики: .net, C#, c#. functional style, monads, функциональное программированиеОбобщенные асинхронные типы возвращаемых значений — это новая возможность появившаяся в C# 7, которая позволяет использовать не только Task в качестве возвращаемого типа асинхронных (async/await) методов, но также и любые другие типы (классы или структуры), удовлетворяющие определенным требованиям.
В то же время async/await — это способ последовательно вызвать некий набор функций внутри некоторого контекста, что является сущностью шаблона проектирования Монада. Возникает вопрос, можем ли мы использовать async/await для написания кода, который будет вести себя так же, как если бы мы использовали монады? Оказывается, что да (с некоторыми оговорками). Например, приведенный ниже код компилируется и работает:
async Task Main()
{
foreach (var s in new[] { "1,2", "3,7,1", null, "1" })
{
var res = await Sum(s).GetMaybeResult();
Console.WriteLine(res.IsNothing ? "Nothing" : res.GetValue().ToString());
}
// 3, 11, Nothing, Nothing
}
async Maybe<int> Sum(string input)
{
var args = await Split(input);//Нет проверки результата
var result = 0;
foreach (var arg in args)
result += await Parse(arg);//Нет проверки результата
return result;
}
Maybe<string[]> Split(string str)
{
var parts = str?.Split(',').Where(s=>!string.IsNullOrWhiteSpace(s)).ToArray();
return parts == null || parts.Length < 2 ? Maybe<string[]>.Nothing() : parts;
}
Maybe<int> Parse(string str)
=> int.TryParse(str, out var result) ? result : Maybe<int>.Nothing();
Далее я объясняю, как работает этот код ...