День 1223. #МоиИнструменты
VoidTools "Everything"
Сегодня расскажу об очень полезной утилите, которую мне посоветовал коллега.
VoidTools "Everything"
"Everything" — это поисковая система для Windows, которая мгновенно находит файлы и папки по имени. В отличие от поиска Windows, "Everything" при открытии отображает все файлы и папки на вашем компьютере (отсюда и название). Вы вводите фильтр поиска, чтобы отфильтровать отображаемые файлы и папки.
"Everything" легковесный, индексирует только имена файлов и папок, и обычно для создания базы данных требуется несколько секунд. Более того, у утилиты есть панель превью, где вы можете посмотреть содержимое файлов.
Поиск практически мгновенный и невероятно удобный. Например, на картинке ниже я объединил в фильтрах через пробел значения
И ещё парочка «хаков» для улучшения работы.
Смотрим содержимое нестандартных файлов
Хотя "Everything" позволяет посмотреть содержимое множества разных типов файлов, в том числе текстовых, Microsoft Office, картинок, .cs файлов и т.п., некоторые могут не поддерживаться. Например, файлы
Горячая клавиша с использованием клавиши Windows
Можно назначить для нового поиска в "Everything" (да и для чего угодно ещё) горячую клавишу с кнопкой Windows, например,
Зайдите в
Перезагрузите Windows. После этого сочетание Win+S перестанет работать (если что, это глобальный поиск, его также можно открыть по
VoidTools "Everything"
Сегодня расскажу об очень полезной утилите, которую мне посоветовал коллега.
VoidTools "Everything"
"Everything" — это поисковая система для Windows, которая мгновенно находит файлы и папки по имени. В отличие от поиска Windows, "Everything" при открытии отображает все файлы и папки на вашем компьютере (отсюда и название). Вы вводите фильтр поиска, чтобы отфильтровать отображаемые файлы и папки.
"Everything" легковесный, индексирует только имена файлов и папок, и обычно для создания базы данных требуется несколько секунд. Более того, у утилиты есть панель превью, где вы можете посмотреть содержимое файлов.
Поиск практически мгновенный и невероятно удобный. Например, на картинке ниже я объединил в фильтрах через пробел значения
.csproj и имена папок (начиная с \), в которых это имя надо искать. Заметьте, что имена папок могут идти в любом порядке. Жирным в результатах подсвечены совпадения. Поиск можно настроить, отфильтровав по типу файла, добавив регулярные выражения и т.п. Отображение результатов также можно изменить.И ещё парочка «хаков» для улучшения работы.
Смотрим содержимое нестандартных файлов
Хотя "Everything" позволяет посмотреть содержимое множества разных типов файлов, в том числе текстовых, Microsoft Office, картинок, .cs файлов и т.п., некоторые могут не поддерживаться. Например, файлы
.csproj, как показано на картинке ниже. Чтобы это исправить, нужно внести небольшое изменение в реестр. Создайте файл <имя>.reg и добавьте в него следующее содержимое:REGEDIT4Сохраните файл. Затем двойным щелчком на файле внесите изменения в реестр. После этого этот тип файлов можно будет посмотреть в виде текста. Понятно, что это глобальная настройка отображения для Windows. "Everything" просто использует эти значения.
[HKEY_CLASSES_ROOT\.CSPROJ]
"Content Type"="text/plain"
"PerceivedType"="text"
Горячая клавиша с использованием клавиши Windows
Можно назначить для нового поиска в "Everything" (да и для чего угодно ещё) горячую клавишу с кнопкой Windows, например,
Win+S. Поэтому его можно отключить, добавив значение в реестр. Аналогично предыдущей, это глобальная настройка.Зайдите в
Computer\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced и добавьте новое значение Expandable String Value с именем DisabledHotKeys и значением S.Перезагрузите Windows. После этого сочетание Win+S перестанет работать (если что, это глобальный поиск, его также можно открыть по
Win+Q). После этого в "Everything" зайдите в Tools > Options > General > Keyboard и задайте для File | New Search Window значение Win+S. Некоторые сочетания с клавишей Windows сработают и без изменений в реестре (например, Win+Y или Win+J). Однако, возможно, в будущем им в Windows будет назначено какое-нибудь действие, тогда они работать перестанут.👍6
День 1232. #МоиИнструменты
DataGrip
Мы в нашем чате частенько шутим на тему Visual Studio или Rider. В принципе, здесь предпочтения делятся почти поровну, и каждый пользуется тем, что ему больше нравится. Но вот относительно этого инструмента от JetBrains я должен сказать, что не видел ничего, даже близко похожего по функционалу!
Речь идёт об IDE DataGrip, предназначенной для работы с базами данных.
Вот в этом видео краткое (на 40 минут) описание того, что может эта IDE, и, я вам должен сказать, что 80% моих повседневных задач она намного упростит. Автозаполнение кода, поиск ошибок в запросах (например, отсутствующих объектов, неоднозначно указанных колонок или условий, которые всегда истины), рефакторинг запросов, автоматическое форматирование кода (которое можно экспортировать для создания стиля кодирования в команде). Помимо этого, есть какие-то уж совсем сумасшедшие вещи, типа, визуального сравнения (diff) результатов двух запросов, экспорта выделенных результатов в другую БД или локальной история изменений файлов и папок. Осталось запомнить, что она всё это умеет и применять)))
Есть один минус. 30-дневный триал доступен. А вот дальше, если вы в РФ, могут возникнуть проблемы с покупкой.
DataGrip
Мы в нашем чате частенько шутим на тему Visual Studio или Rider. В принципе, здесь предпочтения делятся почти поровну, и каждый пользуется тем, что ему больше нравится. Но вот относительно этого инструмента от JetBrains я должен сказать, что не видел ничего, даже близко похожего по функционалу!
Речь идёт об IDE DataGrip, предназначенной для работы с базами данных.
Вот в этом видео краткое (на 40 минут) описание того, что может эта IDE, и, я вам должен сказать, что 80% моих повседневных задач она намного упростит. Автозаполнение кода, поиск ошибок в запросах (например, отсутствующих объектов, неоднозначно указанных колонок или условий, которые всегда истины), рефакторинг запросов, автоматическое форматирование кода (которое можно экспортировать для создания стиля кодирования в команде). Помимо этого, есть какие-то уж совсем сумасшедшие вещи, типа, визуального сравнения (diff) результатов двух запросов, экспорта выделенных результатов в другую БД или локальной история изменений файлов и папок. Осталось запомнить, что она всё это умеет и применять)))
Есть один минус. 30-дневный триал доступен. А вот дальше, если вы в РФ, могут возникнуть проблемы с покупкой.
👍8
День 1293. #Оффтоп #МоиИнструменты
Notebook Editor для Visual Studio
Сегодня посоветую вам видео Скотта Хенсельмана https://youtu.be/WfozTizHMlM, в котором он рассказывает про расширение Jupiter Notebooks для Visual Studio.
Jupiter Notebooks – это смесь документа Word со средой исполнения. Если вам нужно научить кого-то языку, новому функционалу, попросить кандидата на интервью выполнить задание, либо просто описать, какие действия нужно сделать в программе. Вместо того, чтобы писать всё это в текстовом документе, откуда куски кода придётся копировать и вставлять в среду исполнения, используйте Jupiter Notebooks, где можно исполнять код прямо в документе.
Скотт рассказывает про инструмент на примере обучающих курсов от Microsoft по C# и Machine Learning.
На GitHub есть репозиторий с примерами использования https://github.com/dotnet/csharp-notebooks/
Источник: https://techcommunity.microsoft.com/t5/educator-developer-blog/using-visual-studio-notebooks-for-learning-c/ba-p/3580015
Notebook Editor для Visual Studio
Сегодня посоветую вам видео Скотта Хенсельмана https://youtu.be/WfozTizHMlM, в котором он рассказывает про расширение Jupiter Notebooks для Visual Studio.
Jupiter Notebooks – это смесь документа Word со средой исполнения. Если вам нужно научить кого-то языку, новому функционалу, попросить кандидата на интервью выполнить задание, либо просто описать, какие действия нужно сделать в программе. Вместо того, чтобы писать всё это в текстовом документе, откуда куски кода придётся копировать и вставлять в среду исполнения, используйте Jupiter Notebooks, где можно исполнять код прямо в документе.
Скотт рассказывает про инструмент на примере обучающих курсов от Microsoft по C# и Machine Learning.
На GitHub есть репозиторий с примерами использования https://github.com/dotnet/csharp-notebooks/
Источник: https://techcommunity.microsoft.com/t5/educator-developer-blog/using-visual-studio-notebooks-for-learning-c/ba-p/3580015
YouTube
Visual Studio Notebook Editor brings C# and .NET to Jupyter Notebooks - Learn To Code Interactively
Visual Studio Notebook Editor brings C# and .NET to Jupyter Notebooks - Learn To Code Interactively. Also Machine Learning and AI!
Install Notebook Editor Extension:
https://marketplace.visualstudio.com/items?itemName=MLNET.notebook
C# Notebooks Repo:…
Install Notebook Editor Extension:
https://marketplace.visualstudio.com/items?itemName=MLNET.notebook
C# Notebooks Repo:…
👍2
День 1405. #МоиИнструменты
Интеграционные Тесты ASP.NET Core с Помощью Alba
Alba — это небольшая библиотека, которая обеспечивает простое интеграционное тестирование маршрутов ASP.NET Core, полностью совместимая с NUnit/xUnit.Net/MSTest. Недавно вышедшая версия 7.1 поддерживает .NET 7, улучшила обработку JSON для конечных точек Minimal API и поддерживает составной тип содержимого форм.
Допустим, есть проект Minimal API:
Помимо GetAsText() есть другие полезные методы, вроде PostJson(), который использует конфигурацию сериализации JSON вашего приложения, если вдруг она у вас кастомизирована. Аналогично Receive<T>() использует сериализацию JSON вашего приложения.
Когда тест выполняется, он проходит через весь конвейер ASP.NET Core вашего приложения, включая любое зарегистрированное промежуточное ПО.
Альтернативным вариантом для теста может быть использование класса Scenario и его удобочитаемых методов:
Имейте в виду, чтобы ваши тесты «видели» ваш класс Program, вам нужно разрешить вашему тестовому проекту «видеть» ваш основной проект. Для этого в файл .csproj основного проекта добавьте:
Интеграционные Тесты ASP.NET Core с Помощью Alba
Alba — это небольшая библиотека, которая обеспечивает простое интеграционное тестирование маршрутов ASP.NET Core, полностью совместимая с NUnit/xUnit.Net/MSTest. Недавно вышедшая версия 7.1 поддерживает .NET 7, улучшила обработку JSON для конечных точек Minimal API и поддерживает составной тип содержимого форм.
Допустим, есть проект Minimal API:
var builder = WebApplication.CreateBuilder(args);Мы можем написать тест маршрута, вроде такого:
var app = builder.Build();
app.MapGet("/", () => "Hello, World!");
app.Run();
[Fact]Тест загружает ваше фактическое приложение, используя его конфигурацию, но используя TestServer вместо Kestrel в качестве веб-сервера.
public async Task sample_test()
{
// Здесь для примера хост создаётся внутри теста.
// В реальности это дорого,
// его лучше создать один на все тесты.
await using var host =
await AlbaHost.For<global::Program>();
var result = await host.GetAsText("/");
Assert.Equal(result, "Hello, World!");
}
Помимо GetAsText() есть другие полезные методы, вроде PostJson(), который использует конфигурацию сериализации JSON вашего приложения, если вдруг она у вас кастомизирована. Аналогично Receive<T>() использует сериализацию JSON вашего приложения.
Когда тест выполняется, он проходит через весь конвейер ASP.NET Core вашего приложения, включая любое зарегистрированное промежуточное ПО.
Альтернативным вариантом для теста может быть использование класса Scenario и его удобочитаемых методов:
await host.Scenario(_ =>Библиотека предлагает множество настроек и вариантов использования, которые можно посмотреть в документации.
{
_.Get.Url("/");
_.ContentShouldBe("Hello, World!");
_.StatusCodeShouldBeOk();
});
Имейте в виду, чтобы ваши тесты «видели» ваш класс Program, вам нужно разрешить вашему тестовому проекту «видеть» ваш основной проект. Для этого в файл .csproj основного проекта добавьте:
<ItemGroup>Источник: https://jeremydmiller.com/2022/11/28/alba-for-effective-asp-net-core-integration-testing/
<InternalsVisibleTo Include="[ИмяПроектаТестов]" />
</ItemGroup>
👍21
День 1442. #МоиИнструменты
Процессор JSON, Который Вам Пригодится
Обработка JSON — обычная задача в повседневной работе разработчиков. Мы привыкли работать с JSON, но иногда нам нужно что-то более динамичное и эффективное, чем System.Text.Json и Newtonsoft.Json. JMESPath — это мощный язык запросов, который позволяет вам выполнять задачи Map/Reduce декларативным и интуитивно понятным способом. Его можно использовать в .NET, см. JmesPath.Net.
JMESPath прост в использовании. Сам запрос представляет собой простую строку. Преимущество этого подхода заключается в том, что вы можете следовать принципу инверсии управления и предоставить своим пользователям контроль над написанием запросов JMESPath.
Например, Azure CLI использует параметр
Допустим, у нас есть какие-то данные в JSON в строковой переменной
Как видите, JMESPath неплохо решает проблемы динамической обработки JSON на основе пользовательского ввода. Он также имеет модель расширяемости (возможность писать свои функции), которая открывает массу возможностей.
Источник: https://dev.to/nikiforovall/introduction-to-jmespath-json-processor-you-should-definitely-know-2dpb
Процессор JSON, Который Вам Пригодится
Обработка JSON — обычная задача в повседневной работе разработчиков. Мы привыкли работать с JSON, но иногда нам нужно что-то более динамичное и эффективное, чем System.Text.Json и Newtonsoft.Json. JMESPath — это мощный язык запросов, который позволяет вам выполнять задачи Map/Reduce декларативным и интуитивно понятным способом. Его можно использовать в .NET, см. JmesPath.Net.
JMESPath прост в использовании. Сам запрос представляет собой простую строку. Преимущество этого подхода заключается в том, что вы можете следовать принципу инверсии управления и предоставить своим пользователям контроль над написанием запросов JMESPath.
Например, Azure CLI использует параметр
–query для выполнения запроса JMESPath к результатам выполнения команд.Допустим, у нас есть какие-то данные в JSON в строковой переменной
source:{
"balance": "$2,285.51",
"name": "Eva Sharpe",
"email": "evasharpe@zaggles.com",
"latitude": 46.325291,
"friends": [
{
"id": 0,
"name": "Nielsen Casey",
"age": 19
},
{
"id": 1,
"name": "Carlene Long",
"age": 38
}
]
}
Следующий код содержит запрос для его обработки. Он демонстрирует различные концепции, такие как проекция, фильтрация, агрегация, преобразование типов и т.д. Думаю, что синтаксис достаточно интуитивно понятен и не нуждается в объяснении:var expressions = new (string, string)[]Вывод
{
("scalar", "balance"),
("projection", "{email: email, name: name}"),
("functions", "to_string(latitude)"),
("arrays", "friends[*].name"),
("filtering", "friends[?age > `20`].name"),
("aggregation", "{sum: sum(friends[*].age)}"),
};
var parser = new JmesPath();
foreach (var (name, expression) in expressions)
{
var result = parser.Transform(source, expression);
Console.WriteLine($"{name}: {result}");
}
scalar: "$2,285.51"Итого
projection: {"email":"evasharpe@zaggles.com","name":"Eva Sharpe"}
functions: "46.325291"
arrays: ["Nielsen Casey","Carlene Long"]
filtering: ["Carlene Long"]
aggregation: {"sum":57}
Как видите, JMESPath неплохо решает проблемы динамической обработки JSON на основе пользовательского ввода. Он также имеет модель расширяемости (возможность писать свои функции), которая открывает массу возможностей.
Источник: https://dev.to/nikiforovall/introduction-to-jmespath-json-processor-you-should-definitely-know-2dpb
👍20