День девятьсот шестьдесят второй. #NuGet
Генерация Фейковых Данных с Помощью Faker.Net
При разработке, тестировании или демонстрации продукта часто важно использовать данные, которые не являются настоящими. Либо потому, что у вас ещё нет фактических данных, либо потому, что вы не хотите показывать или выбирать данные реальных пользователей, которые могут содержать конфиденциальную информацию. Faker.Net поможет в этом, упростив получение множества случайных имен, адресов, email адресов, и прочей личной информации.
Пакет .NET изначально был портом библиотеки Ruby от 2009 года, но во многом разошлась с ней. Библиотека Ruby сама по себе была портом библиотеки Perl Data::Faker от 2007 года. .NET библиотека продолжает использоваться и постоянно обновляется. Причина её популярности, вероятно, связана со множеством вариантов использования и очень простой структурой.
Сначала нужно установить пакет Faker.Net. Мы можем сделать это через диспетчер пакетов в Visual Studio или через интерфейс CLI:
Мы можем сгенерировать имя из комбинации предопределённых имени, фамилии и отчества, либо сразу полное имя с обращением:
Последний шаг – текст для биографии. Можно просто взять несколько предложений из «рыбы» "Lorem Ipsum…":
- доменные имена:
Источник: https://blog.elmah.io/easy-generation-of-fake-dummy-data-in-c-with-faker-net/
Генерация Фейковых Данных с Помощью Faker.Net
При разработке, тестировании или демонстрации продукта часто важно использовать данные, которые не являются настоящими. Либо потому, что у вас ещё нет фактических данных, либо потому, что вы не хотите показывать или выбирать данные реальных пользователей, которые могут содержать конфиденциальную информацию. Faker.Net поможет в этом, упростив получение множества случайных имен, адресов, email адресов, и прочей личной информации.
Пакет .NET изначально был портом библиотеки Ruby от 2009 года, но во многом разошлась с ней. Библиотека Ruby сама по себе была портом библиотеки Perl Data::Faker от 2007 года. .NET библиотека продолжает использоваться и постоянно обновляется. Причина её популярности, вероятно, связана со множеством вариантов использования и очень простой структурой.
Сначала нужно установить пакет Faker.Net. Мы можем сделать это через диспетчер пакетов в Visual Studio или через интерфейс CLI:
dotnet add package Faker.NetТеперь сгенерируем данные. Допустим, нам нужно создать несколько экземпляров этой модели:
class UserProfileЗдесь нам нужно сгенерировать имя, какое-то случайное число из нужного диапазона, адрес и некоторый случайный текст для биографии.
{
string Name { get; set; }
int Followers { get; set; }
string Address { get; set; }
string Bio { get; set; }
}
Мы можем сгенерировать имя из комбинации предопределённых имени, фамилии и отчества, либо сразу полное имя с обращением:
var user = new UserProfile();Для генерации случайных чисел Faker.Net использует класс
user.Name = Faker.Name.FullName(NameFormats.WithPrefix);
// "Mrs. Jerod Nader"
RandomNumberGenerator из System.Security.Cryptography:user.Followers = Faker.RandomNumber.Next(0, 10000);Далее создадим адрес:
// 3452
user.Address = $"{Faker.Address.Country()}, {Faker.Address.City()}";
// "Fiji, Wavaland"
Заметьте, что страна и город создаются независимо, поэтому они не пройдут валидацию, если она у вас есть. Также можно создавать индексы, названия улиц и т.п.Последний шаг – текст для биографии. Можно просто взять несколько предложений из «рыбы» "Lorem Ipsum…":
user.Bio = String.Join(" ", Faker.Lorem.Sentences(3));
// "Ea voluptas maiores nihil quia et eum. Vel et eos est architecto rerum est. Eum esse voluptatem ab necessitatibus."
Кроме того, можно создавать:- доменные имена:
user.CompanyDomain = Faker.Internet.DomainName();- email адреса (заметьте, что использовано имя пользователя):
// "torp.com"
user.Email = Faker.Internet.Email(user.Name);- URL адреса:
// "mrs_jerod.nader@hermanborer.name"
user.resources = Enumerable.Range(0,2).Select(_ => Faker.Internet.SecureUrl());- и многое другое.
// "https://www.quigleyrobel.us/films/page.aspx"
// "https://www.braunborer.uk/guide/page.jsp"
Источник: https://blog.elmah.io/easy-generation-of-fake-dummy-data-in-c-with-faker-net/
День девятьсот семидесятый. #NuGet
Генерация QR Кодов в .NET
QR коды сегодня повсюду, поэтому часто требуется возможность их генерировать. Сегодня расскажу вам про полезный пакет Net.Codecrete.QrCodeGenerator, позволяющий генерировать QR коды из текста или массива байт буквально в 2 строчки. Библиотека создана для .NET Standard 2.0 и поэтому работает на большинстве современных платформ .NET (.NET Core, .NET Framework, Mono и т.д.).
Основные особенности
- Поддерживает кодирование всех 40 версий (размеров) и всех 4 уровней коррекции ошибок в соответствии со стандартом QR Code Model 2.
- Форматы вывода: чистые пиксели QR символа, строка SVG XML, растровое изображение.
Параметры
- Вы можете указать минимальный и максимальный разрешённый номер версии, и библиотека автоматически выберет наименьшую версию в диапазоне, который соответствует данным.
- Вы можете указать шаблон маски вручную, либо библиотека автоматически оценит все 8 масок и выберет оптимальную.
- Вы можете указать уровень исправления ошибок или, при желании, разрешить библиотеке повышать его, если это не увеличивает номер версии.
- Вы можете создать список сегментов данных вручную и добавить сегменты ECI.
В GitHub проекта есть пример генерации файлов в консольном приложении, но я решил, что пример на сайте более нагляден.
Добавим в проект NuGet пакет:
Генерация QR Кодов в .NET
QR коды сегодня повсюду, поэтому часто требуется возможность их генерировать. Сегодня расскажу вам про полезный пакет Net.Codecrete.QrCodeGenerator, позволяющий генерировать QR коды из текста или массива байт буквально в 2 строчки. Библиотека создана для .NET Standard 2.0 и поэтому работает на большинстве современных платформ .NET (.NET Core, .NET Framework, Mono и т.д.).
Основные особенности
- Поддерживает кодирование всех 40 версий (размеров) и всех 4 уровней коррекции ошибок в соответствии со стандартом QR Code Model 2.
- Форматы вывода: чистые пиксели QR символа, строка SVG XML, растровое изображение.
Параметры
- Вы можете указать минимальный и максимальный разрешённый номер версии, и библиотека автоматически выберет наименьшую версию в диапазоне, который соответствует данным.
- Вы можете указать шаблон маски вручную, либо библиотека автоматически оценит все 8 масок и выберет оптимальную.
- Вы можете указать уровень исправления ошибок или, при желании, разрешить библиотеке повышать его, если это не увеличивает номер версии.
- Вы можете создать список сегментов данных вручную и добавить сегменты ECI.
В GitHub проекта есть пример генерации файлов в консольном приложении, но я решил, что пример на сайте более нагляден.
Добавим в проект NuGet пакет:
dotnet add package Net.Codecrete.QrCodeGenerator --version 1.6.1Создадим простую страничку с формой, принимающей текст, который мы хотим видеть в QR коде, и отображающей сам код после отправки формы:
@model Byte[]QR код передаётся в представление в виде массива байтов и отображается как изображение base64. А вот код метода действия контроллера, обрабатывающего форму:
@using (Html.BeginForm(FormMethod.Post))
{
<label>Текст для QR кода:</label><br />
<input type="text" name="qrText" size="40" />
<button>Сгенерировать</button>
}
@if (Model != null)
{
<label>QR Код Успешно Сгенерирован:</label><br />
<img src="@string.Format("data:image/png;base64,{0}",
Convert.ToBase64String(Model))" />
}
using System.Drawing.Imaging;В методе используем статический метод
using System.IO;
using Net.Codecrete.QrCodeGenerator;
[HttpPost]
public IActionResult Index(string qrText)
{
if (string.IsNullOrEmpty(qrText))
return View();
var qr = QrCode.EncodeText(qrText, QrCode.Ecc.Medium);
var img = qr.ToBitmap(6, 1);
using var stream = new MemoryStream();
img.Save(stream, ImageFormat.Bmp);
return View(stream.ToArray());
}
EncodeText для преобразования текста в QR код. Затем преобразуем изображение в поток байт и отправляем в представление. Получаем результат, как на картинке ниже.День 1076. #NuGet
10 Лучших NuGet Пакетов для Повышения Продуктивности в 2022. Начало
Сегодня мы рассмотрим лучшие NuGet пакеты для повышения продуктивности разработчиков на C#.
1. RestSharp
RestSharp — самая популярная клиентская библиотека HTTP для .NET. Используя эту библиотеку, разработчики C# могут легко вызывать удалённые ресурсы по HTTP. Кроме того она заботится о сериализации тела запроса в JSON или XML и десериализации ответа.
Пакет RestSharp поддерживает:
- синхронные и асинхронные запросы,
- сериализацию и десериализацию,
- различные методы HTTP-запросов (GET, POST, PUT и DELETE),
- разнообразные способы аутентификации.
Всего загрузок: 111,1 млн.
2. Json.NET
Json.NET — это бесплатная библиотека с открытым исходным кодом для .NET, которую скачали более миллиарда раз. Её ключевые особенности включают в себя:
- Сериализацию и десериализацию любого объекта .NET в JSON и текста JSON в объект .NET.
- Преобразование между XML и JSON.
- Создание, анализ, запросы и изменение JSON, используя объекты JObject, JArray и JValue.
- Запросы к JSON с синтаксисом, подобным XPath.
- Высокую производительность.
Всего загрузок: 1,6 млрд.
3. Serilog
Логи — это записи действий, исключений, информации и предупреждений. Ведение журнала — важный фактор в разработке приложений, который помогает разработчикам легко обнаруживать и устранять проблемы. Serilog — это платформа логирования, используемая в .NET. Он записывает пользовательские свойства и данные в формате JSON.
В отличие от других инструментов ведения журналов, Serilog предоставляет структурированные журналы, которые позволяют производить поиск по записанным данным. Он также позволяет разработчикам легко записывать данные о событиях в консоль, в файлы и во все типы систем хранения.
Всего загрузок: 365,1 млн.
4. NUnit
Тестирование играет важную роль в разработке программного обеспечения для обеспечения корректности кода. NUnit — это платформа модульного тестирования с открытым исходным кодом для всех языков .NET, включая C#. С помощью NUnit вы можете легко тестировать большие приложения, разбивая их на небольшие модули. Это помогает нам находить проблемы прямо во время разработки.
Всего загрузок: 153,1 млн.
5. Insight.Database
Insight.Database — это микро-ORM для .NET, который преобразует объекты C# в записи базы данных и наоборот. Это набор методов расширения, упрощающих работу с базами данных в приложении C#.
Основные функции Insight.Database включают в себя:
- Автоматическое открытие/закрытие соединений с базой данных.
- Простое выполнение хранимых процедур.
- Поддержку нескольких наборов результатов.
Всего загрузок: 691,0 тыс.
Окончание следует…
Источник: https://www.syncfusion.com/blogs/post/10-best-c-nuget-packages-to-improve-your-productivity-in-2022.aspx/amp
10 Лучших NuGet Пакетов для Повышения Продуктивности в 2022. Начало
Сегодня мы рассмотрим лучшие NuGet пакеты для повышения продуктивности разработчиков на C#.
1. RestSharp
RestSharp — самая популярная клиентская библиотека HTTP для .NET. Используя эту библиотеку, разработчики C# могут легко вызывать удалённые ресурсы по HTTP. Кроме того она заботится о сериализации тела запроса в JSON или XML и десериализации ответа.
Пакет RestSharp поддерживает:
- синхронные и асинхронные запросы,
- сериализацию и десериализацию,
- различные методы HTTP-запросов (GET, POST, PUT и DELETE),
- разнообразные способы аутентификации.
Всего загрузок: 111,1 млн.
2. Json.NET
Json.NET — это бесплатная библиотека с открытым исходным кодом для .NET, которую скачали более миллиарда раз. Её ключевые особенности включают в себя:
- Сериализацию и десериализацию любого объекта .NET в JSON и текста JSON в объект .NET.
- Преобразование между XML и JSON.
- Создание, анализ, запросы и изменение JSON, используя объекты JObject, JArray и JValue.
- Запросы к JSON с синтаксисом, подобным XPath.
- Высокую производительность.
Всего загрузок: 1,6 млрд.
3. Serilog
Логи — это записи действий, исключений, информации и предупреждений. Ведение журнала — важный фактор в разработке приложений, который помогает разработчикам легко обнаруживать и устранять проблемы. Serilog — это платформа логирования, используемая в .NET. Он записывает пользовательские свойства и данные в формате JSON.
В отличие от других инструментов ведения журналов, Serilog предоставляет структурированные журналы, которые позволяют производить поиск по записанным данным. Он также позволяет разработчикам легко записывать данные о событиях в консоль, в файлы и во все типы систем хранения.
Всего загрузок: 365,1 млн.
4. NUnit
Тестирование играет важную роль в разработке программного обеспечения для обеспечения корректности кода. NUnit — это платформа модульного тестирования с открытым исходным кодом для всех языков .NET, включая C#. С помощью NUnit вы можете легко тестировать большие приложения, разбивая их на небольшие модули. Это помогает нам находить проблемы прямо во время разработки.
Всего загрузок: 153,1 млн.
5. Insight.Database
Insight.Database — это микро-ORM для .NET, который преобразует объекты C# в записи базы данных и наоборот. Это набор методов расширения, упрощающих работу с базами данных в приложении C#.
Основные функции Insight.Database включают в себя:
- Автоматическое открытие/закрытие соединений с базой данных.
- Простое выполнение хранимых процедур.
- Поддержку нескольких наборов результатов.
Всего загрузок: 691,0 тыс.
Окончание следует…
Источник: https://www.syncfusion.com/blogs/post/10-best-c-nuget-packages-to-improve-your-productivity-in-2022.aspx/amp
👍5
День 1077. #NuGet
10 Лучших NuGet Пакетов для Повышения Продуктивности в 2022. Продолжение
Начало
6. FluentValidation
FluentValidation — это библиотека .NET для построения строго типизированных правил валидации. Она использует Fluent-интерфейс и лямбда-выражения для создания правил. Правила валидации помогают поддерживать чистоту кода домена, выделяя код проверки в отдельный блок.
FluentValidation имеет множество встроенных правил, таких как проверка на null, на пустую строку, максимальную и минимальную длину и т.п. Библиотека также поддерживает пользовательские валидаторы, настраиваемые сообщения валидации на основе имён свойств, предоставляет локализованные сообщения, асинхронные проверки и т.д.
Всего загрузок: 118,7 млн.
7. Noda Time
Работа с датой, временем и часовыми поясами в .NET очень болезненна. Noda Time заполняет пробел в операциях с датой и временем в .NET и тем самым упрощает жизнь. Пакет предоставляет различные API для обработки UTC, местного времени и часовых поясов. Также предоставляется функционал для простого преобразования местного времени в UTC и обратно, что позволяет избежать серьёзных ошибок, которые могут допустить разработчики, реализуя эту логику самостоятельно.
Всего загрузок: 46,2 млн.
8. FluentEmail
FluentEmail — это библиотека .NET с открытым исходным кодом, которая позволяет внедрить функции отправки электронной почты в ваше приложение .NET за 10 минут. Помимо основных параметров электронного письма, пакет позволяет вложить файл, отправлять почту асинхронно, а также использовать Razor для разработки шаблонов писем и отправлять письма с помощью SendGrid, MailGun, SMTP и т. д.
Всего загрузок: 1,8 млн.
9. Hangfire
Hangfire — это платформа с открытым исходным кодом, которая позволяет создавать, обрабатывать и управлять фоновыми заданиями. Вы можете запускать фоновые задания из основного процесса вашего приложения без необходимости создания отдельного сервиса.
Hangfire поддерживает широкий спектр фоновых задач: краткосрочные и долгосрочные, загружающие процессор или ввод-вывод, одноразовые и повторяющиеся.
Всего загрузок: 18,8 млн.
10. LazyCache
Кэширование — отличный способ повысить производительность приложения. LazyCache использует формат
LazyCache отлично подходит для кэширования вызовов базы данных, процедур построения сложных графов объектов и вызовов веб-сервисов, которые нужно временно сохранить для повышения производительности. Пакет позволяет кэшировать элементы в течение большего или меньшего времени, но по умолчанию он сохраняет кэшированные элементы до 20 минут.
Ключевые особенности LazyCache:
- Потокобезопасен и готов для использования в параллельном коде.
- Совместим с асинхронным кодом: доступна ленивая однократная оценка асинхронных делегатов с использованием метода
Всего загрузок: 7,3 млн.
Источник: https://www.syncfusion.com/blogs/post/10-best-c-nuget-packages-to-improve-your-productivity-in-2022.aspx/amp
10 Лучших NuGet Пакетов для Повышения Продуктивности в 2022. Продолжение
Начало
6. FluentValidation
FluentValidation — это библиотека .NET для построения строго типизированных правил валидации. Она использует Fluent-интерфейс и лямбда-выражения для создания правил. Правила валидации помогают поддерживать чистоту кода домена, выделяя код проверки в отдельный блок.
FluentValidation имеет множество встроенных правил, таких как проверка на null, на пустую строку, максимальную и минимальную длину и т.п. Библиотека также поддерживает пользовательские валидаторы, настраиваемые сообщения валидации на основе имён свойств, предоставляет локализованные сообщения, асинхронные проверки и т.д.
Всего загрузок: 118,7 млн.
7. Noda Time
Работа с датой, временем и часовыми поясами в .NET очень болезненна. Noda Time заполняет пробел в операциях с датой и временем в .NET и тем самым упрощает жизнь. Пакет предоставляет различные API для обработки UTC, местного времени и часовых поясов. Также предоставляется функционал для простого преобразования местного времени в UTC и обратно, что позволяет избежать серьёзных ошибок, которые могут допустить разработчики, реализуя эту логику самостоятельно.
Всего загрузок: 46,2 млн.
8. FluentEmail
FluentEmail — это библиотека .NET с открытым исходным кодом, которая позволяет внедрить функции отправки электронной почты в ваше приложение .NET за 10 минут. Помимо основных параметров электронного письма, пакет позволяет вложить файл, отправлять почту асинхронно, а также использовать Razor для разработки шаблонов писем и отправлять письма с помощью SendGrid, MailGun, SMTP и т. д.
Всего загрузок: 1,8 млн.
9. Hangfire
Hangfire — это платформа с открытым исходным кодом, которая позволяет создавать, обрабатывать и управлять фоновыми заданиями. Вы можете запускать фоновые задания из основного процесса вашего приложения без необходимости создания отдельного сервиса.
Hangfire поддерживает широкий спектр фоновых задач: краткосрочные и долгосрочные, загружающие процессор или ввод-вывод, одноразовые и повторяющиеся.
Всего загрузок: 18,8 млн.
10. LazyCache
Кэширование — отличный способ повысить производительность приложения. LazyCache использует формат
GetOrAdd для кэширования, когда вы запрашиваете элемент из кэша, предоставляя при этом функциональность для его добавления, если элемент отсутствует.LazyCache отлично подходит для кэширования вызовов базы данных, процедур построения сложных графов объектов и вызовов веб-сервисов, которые нужно временно сохранить для повышения производительности. Пакет позволяет кэшировать элементы в течение большего или меньшего времени, но по умолчанию он сохраняет кэшированные элементы до 20 минут.
Ключевые особенности LazyCache:
- Потокобезопасен и готов для использования в параллельном коде.
- Совместим с асинхронным кодом: доступна ленивая однократная оценка асинхронных делегатов с использованием метода
GetOrAddAsync().Всего загрузок: 7,3 млн.
Источник: https://www.syncfusion.com/blogs/post/10-best-c-nuget-packages-to-improve-your-productivity-in-2022.aspx/amp
👍16
День 1285. #NuGet
Генерация Сортируемых Guid с Помощью NewId. Окончание
Начало
NewId вместо полностью случайных Guid предоставляет UUID, который можно легко отсортировать. Рассмотрим простое приложение:
-
-
-
NewId использует 3 разных источника для создания идентификатора:
1. ID машины/процесса – константа для данной машины (может быть настроена для включения идентификатора процесса).
2. Временную метку - обеспечивает базовый порядок идентификатора.
3. Последовательность - увеличивающийся идентификатор.
Объединив все 3 вместе, вы можете получить идентификатор, который (с натяжкой) упорядочен благодаря компоненту метки времени. Включив идентификатор рабочего процесса, вы можете заставить процессы генерировать независимые ID, избегая при этом коллизий. Это можно сделать, например, вызвав в начале программы:
Очевидно, что такие ID приводят к гораздо менее фрагментированному индексу базы данных. Конечно, с идеально последовательными целыми числами они не сравнятся. Но сравнение индексов в оригинальной статье показало, что полностью случайные Guid приводят к почти 99% фрагментации индекса, тогда как фрагментация индекса NewId составляет лишь 5%.
Сгенерированные идентификаторы предсказуемы по своей сути. Их не следует использовать в сценариях, где желательна непредсказуемость. Эти идентификаторы НЕ должны использоваться для:
- генерации паролей,
- токенов безопасности
- ничего другого, когда нежелательно угадывание значения.
Идентификаторы, сгенерированные NewId, раскрывают личность машины, сгенерировавшей идентификатор (фактически, это её MAC-адрес), и время, когда она это сделала. Это может быть проблемой для некоторых чувствительных к безопасности приложений.
Источник: https://andrewlock.net/generating-sortable-guids-using-newid/
Генерация Сортируемых Guid с Помощью NewId. Окончание
Начало
NewId вместо полностью случайных Guid предоставляет UUID, который можно легко отсортировать. Рассмотрим простое приложение:
using MassTransit;Эта программа генерирует 5 идентификаторов. В результате получается что-то вроде этого:
foreach (var i in Enumerable.Range(0, 5))
{
NewId id = NewId.Next();
Console.WriteLine(id);
}
be170000-f32d-18db-de59-08da26f2ad5aНа первый взгляд может показаться, что все они одинаковы, но давайте разобьём первый экземпляр на 3 части:
be170000-f32d-18db-1816-08da26f2ad5b
be170000-f32d-18db-8694-08da26f2ad5b
be170000-f32d-18db-4dbd-08da26f2ad5b
be170000-f32d-18db-65b3-08da26f2ad5c
-
be170000-f32d-18db — очевидно, это постоянное значение для всех идентификаторов.-
de59 — меняется с каждым ID.-
08da26f2ad5a — иногда меняется, и меняется постепенно.NewId использует 3 разных источника для создания идентификатора:
1. ID машины/процесса – константа для данной машины (может быть настроена для включения идентификатора процесса).
2. Временную метку - обеспечивает базовый порядок идентификатора.
3. Последовательность - увеличивающийся идентификатор.
Объединив все 3 вместе, вы можете получить идентификатор, который (с натяжкой) упорядочен благодаря компоненту метки времени. Включив идентификатор рабочего процесса, вы можете заставить процессы генерировать независимые ID, избегая при этом коллизий. Это можно сделать, например, вызвав в начале программы:
NewId.SetProcessIdProvider(new CurrentProcessIdProvider());А использование «последовательности» означает, что вы можете генерировать 2^16-1 идентификаторов в миллисекунду для каждого процесса/машины.
Очевидно, что такие ID приводят к гораздо менее фрагментированному индексу базы данных. Конечно, с идеально последовательными целыми числами они не сравнятся. Но сравнение индексов в оригинальной статье показало, что полностью случайные Guid приводят к почти 99% фрагментации индекса, тогда как фрагментация индекса NewId составляет лишь 5%.
Сгенерированные идентификаторы предсказуемы по своей сути. Их не следует использовать в сценариях, где желательна непредсказуемость. Эти идентификаторы НЕ должны использоваться для:
- генерации паролей,
- токенов безопасности
- ничего другого, когда нежелательно угадывание значения.
Идентификаторы, сгенерированные NewId, раскрывают личность машины, сгенерировавшей идентификатор (фактически, это её MAC-адрес), и время, когда она это сделала. Это может быть проблемой для некоторых чувствительных к безопасности приложений.
Источник: https://andrewlock.net/generating-sortable-guids-using-newid/
👍16