Últimas Postagens de .NET Разработчик (@netdeveloperdiary) no Telegram

Postagens do Canal .NET Разработчик

.NET Разработчик
Дневник сертифицированного .NET разработчика.

Для связи: @SBenzenko

Поддержать канал:
- https://boosty.to/netdeveloperdiary
- https://patreon.com/user?u=52551826
- https://pay.cloudtips.ru/p/70df3b3b
6,233 Inscritos
395 Fotos
2 Vídeos
Última Atualização 11.03.2025 03:38

O conteúdo mais recente compartilhado por .NET Разработчик no Telegram

.NET Разработчик

18 Feb, 06:59

2,294

День 2211. #ЧтоНовенького
Обновления HTTP-файлов в Visual Studio. Начало
Несколько новых функций были добавлены в Visual Studio 2022 17.12+ для работы с HTTP-файлами.

Переменные запроса
При работе с API часто требуется получить значение из конечной точки, а затем использовать его в последующем запросе. Это можно сделать с помощью переменных запроса. Один из наиболее распространённых сценариев: вызвать конечную точку для аутентификации в API и получить обратно токен, который можно использовать для будущих запросов. Запрос ниже относится к примеру приложения TodoApi Дэвида Фаулера. API имеет конечную точку, где вы можете создать нового пользователя, указав имя пользователя и пароль. Это конечная точка, к которой мы делаем запрос:
@username = bloguser
# войти и сохранить ответ как "login"
# @name login
POST {{TodoApi_HostAddress}}/users/token
Content-Type: application/json
{
"username": "{{username}}",
"password": "{{password}}"
}
###

В этом случае имя пользователя определено в HTTP-файле, а пароль хранится безопасно с использованием переменных среды (о них в следующем посте). В запрос к конечной точке /users/token мы передаём имя пользователя и пароль как часть тела HTTP-запроса. Переменная запроса обозначена сразу над запросом в виде комментария:
# @name login

После отправки этого запроса в Visual Studio вы можете получить значение из ответа или запроса. В коде ниже мы используем переменную запроса login для извлечения полученного токена и создания элемента TODO, используя авторизацию. Также мы сохраняем ответ в переменную запроса todo1:
# Создать элемент TODO
# @name todo1
POST {{TodoApi_HostAddress}}/todos
Authorization: Bearer {{login.response.body.$.token}}
Content-Type: application/json
{
"title": "Write blog post"
}
###


Рассмотрим синтаксис подробнее:
{{login.response.body.$.token}}

<имяПеременной> – имя переменной запроса (в нашем примере - login);
response|request – извлекаем значение из ответа или из запроса;
body|headers – извлекаем значение из тела или заголовков ответа/запроса;
*|JSONPath|XPath|Header – выражение для извлечения результата:
- * - всё тело (кроме случаев извлечения из Header),
- JSONPath – путь к переменной в JSON (.$.…),
- XPath – путь к переменной в XML (./.…).
В примере выше мы извлекаем переменную token из корня JSON ответа (body.$.token).

Окончание следует…

Источник:
https://devblogs.microsoft.com/visualstudio/http-file-updates-for-request-variables-and-more/
.NET Разработчик

17 Feb, 07:01

519

ХОЧЕШЬ ПОВЫСИТЬ ГРЕЙД В 2025 ГОДУ? 🚀

Чтобы стать Senior C# разработчиком сегодня, нужно не только знать язык программирования и фреймворки. Нужно уметь строить гибкую архитектуру приложения, которую легко тестировать и менять под задачи бизнеса. Стань экспертом в построении гибкой архитектуры приложения!

👉 Стартуем 24 февраля.

Курс ведет действующий архитектор и Principal Engineer Кирилл Ветчинкин.

Ты научишься:
Разбивать приложение на слои в соответствии с Clean Architecture
Формировать Domain Model и применять тактические паттерны DDD
Реализовывать Use Case как Command/Query
Делать синхронные и асинхронные интеграции, не загрязняя ядро приложения
Писать 3 вида тестов для разных слоев приложения

Полная программа ТУТ 👉 https://microarch.ru/courses/ddd?utm_source=posev&utm_medium=erid:2VtzqvxyrMB&utm_campaign=1

А главное — ты с нуля разработаешь и запустишь микросервис, который максимально приближен к реальности "Диспетчеризация заказов на курьеров". Это будет крутым проектом в портфолио или основой для рабочих задач.

А еще:
Проверим все домашки
Поддержим в чате
Проведем живые разборы
Ответим на все вопросы

📕 Сертификат об участии по итогам прохождения курса.

🔥 Не откладывай свой рост на потом: https://microarch.ru/courses/ddd?utm_source=posev&utm_medium=erid:2VtzqvxyrMB&utm_campaign=1

Реклама. ИП Ветчинкин К.Е. ИНН: 773376451099 Erid: 2VtzqvxyrMB
#реклама
.NET Разработчик

17 Feb, 04:59

2,224

День 2210. #ЗаметкиНаПолях
Conventional Commits

Conventional Commits — это соглашение о сообщениях коммитов, которое предоставляет простой набор правил для создания явной истории коммитов.

Зачем?
- Автоматическое создание CHANGELOG.
- Автоматическое определение обновления версии на основе типов полученных коммитов.
- Сообщение сути изменений членам команды, общественности и другим заинтересованным лицам.
- Запуск процессов сборки и публикации.
- Упрощение участия людей в ваших проектах за счёт предоставления им возможности изучать более структурированную историю коммитов.

Согласно стандарту, сообщение о коммите должно быть структурировано следующим образом:
<тип>[необязательно, область]: <описание>

[необязательно, тело]

[необязательно, нижний колонтитул]

Сообщение содержит следующие структурные элементы, чтобы сообщать о намерении:
- тип fix – исправление ошибки в кодовой базе;
- тип feat - новая функция;
- другие типы: build, chore, ci, docs, style, refactor, perf, test и т.п.
- BREAKING CHANGE в нижнем колонтитуле, либо ! после типа коммита – ломающее изменение (может быть частью коммитов любого типа).
- Область действия может быть добавлена к типу коммита для предоставления дополнительной контекстной информации и заключена в скобки.

Примеры
Коммит без описания
docs: исправлены орфографические ошибки

Коммит с областью действия
feat(lang): добавлен перевод на английский

Коммит с ! (ломающее изменение) и областью действия:
feat(api)!: отправка email клиенту о доставке продукта

Коммит с телом и несколькими нижними колонтитулами:
fix: предотвратили гонку запросов

Добавлен идентификатор запроса и ссылка на последний запрос. Система отклоняет входящие ответы, отличные от последнего запроса.

Reviewed-by: ABC
Refs: #123


Спецификация
1) Коммиты должны иметь префикс типа (существительное), за которым следуют необязательные область действия и ! и обязательные двоеточие, пробел и описание.
2) Область действия может быть указана после типа. Она должна состоять из существительного в скобках, описывающего раздел кодовой базы.
3) Описание должно следовать сразу за двоеточием и пробелом после типа(области). Это краткое изложение изменений.
4) Более длинное тело коммита (дополнительная контекстная информация об изменениях кода) может быть указано ниже. Тело должно быть отделено пустой строкой.
5) Тело коммита имеет свободную форму и может состоять из любого количества абзацев, разделённых пустой строкой.
6) Один или несколько нижних колонтитулов могут быть добавлены после тела и пустой строки. Каждый должен состоять из токена слова, за которым следуют разделитель ": " или " #" и строковое значение.
- токен должен использовать дефис вместо пробелов (помогает отличить нижний колонтитула от тела). Исключение - BREAKING CHANGE;
- значение может содержать пробелы и символы новой строки.
7) Критические изменения должны быть указаны:
- в префиксе типа с помощью ! непосредственно перед двоеточием;
- в виде записи в нижнем колонтитуле с помощью текста "BREAKING CHANGE: " и описания.

Источник: https://www.conventionalcommits.org/en/v1.0.0/
.NET Разработчик

16 Feb, 05:04

2,048

День 2209.
Сегодня порекомендую вам интервью, которое Руслан Шишмарев взял у какого-то левого мутного чувака, застрявшего на одном месте работы в жутком легаси. Но почему-то Руслан решил поспрашивать его про смену работы, собесы, карьерные пути и новые технологии)))

В общем, не буду пересказывать свои путаные мысли. Кому некуда деть полтора часа, гляньте. И не судите строго, это моё первое живое интервью (из увидевших свет, по крайней мере).

https://youtu.be/XMr6KP8U3pY
.NET Разработчик

15 Feb, 05:01

2,333

День 2208. #Книги
В подарок на шестилетие канала от издательства «Питер» пришла книга «Kubernetes для разработчиков» Уильяма Денниса.

Книга только что вышла в печать. Издательству «Питер» большое спасибо. Почитаю и оценю.
.NET Разработчик

14 Feb, 05:02

2,127

День 2207. #ЗаметкиНаПолях #Testing
Нагрузочное Тестирование с Помощью K6 в Windows. Окончание

Начало
Продолжение

Отчёт
Вернёмся к отчёту, показанному на картинке в предыдущем посте. Либо, установив 2 переменные окружения, вы можете получить более визуально приятный отчёт в виде HTML документа, показанного на рисунке выше.
set K6_WEB_DASHBOARD=true
set K6_WEB_DASHBOARD_EXPORT=html-report.html
k6 run script.js

В отчёте множество значений, названия которых в основном говорят сами за себя:
- data_received и data_sent - размер отправленных и полученных данных;
- продолжительность и ответы HTTP-запросов (http_req_duration, http_req_sending, http_reqs);
- информация о фазах HTTP-соединения, например http_req_tls_handshaking;
- конфигурации K6 (iterations, vus и vus_max).
Вы можете увидеть среднее значение, минимальное и максимальное значение, а также некоторые процентили для большинства значений.

Прочие настройки нагрузочного тестирования
В официальной документации K6 есть много информации, поэтому рассмотрим лишь некоторые основные настройки.

HTTP-методы
Мы использовали только метод GET, но можно использовать все доступные HTTP-методы с помощью соответствующей функции Javascript:
- get() – метод GET,
- post() - метод POST,
- put() - метод PUT,
- del() - метод DELETE.

Стадии
Вы можете определить несколько стадий тестирования, например:
export const options = {
stages: [
{ duration: "30s", target: 20 },
{ duration: "1m30s", target: 10 },
{ duration: "20s", target: 0 },
],
}

Здесь определены 3 стадии:
1. 30 сек – нагрузка в 20 виртуальных пользователей,
2. 1м 30 сек – 10,
3. 20 сек – время на завершение оставшихся запросов.

Сценарии
Сценарии позволяют определять детали итерации запросов. Мы можем определять пользовательские сценарии, чтобы настраивать различные параметры, используемые для определения того, как должен действовать тест.

Сценарий — это элемент JSON, в котором вы определяете аргументы, такие как продолжительность, количество пользователей (как мы рассмотрели выше), а также переменные среды, время старта и т.д. Определив сценарий, вы можете запустить тесты на той же конечной точке, но с использованием разных поведений. Например, создать один сценарий для постепенного роста пользователей, a другой - для резкого взлёта их количества.

Источник: https://www.code4it.dev/blog/k6-load-testing/
.NET Разработчик

13 Feb, 05:00

2,011

День 2206. #ЗаметкиНаПолях #Testing
Нагрузочное Тестирование с Помощью K6 в Windows. Продолжение

Начало

Запуск K6 в Windows
С помощью K6 вы можете запустить нагрузочные тесты, определив конечную точку для вызова, количество запросов в минуту и некоторые другие настройки.

Этот бесплатный инструмент можно установить с помощью Winget:
winget install k6 --source winget

Проверить правильность установки можно через командную строку (не Powershell):
k6 --version

Теперь можно инициализировать инструмент:
k6 new

Команда сгенерирует файл script.js, в котором надо будет настроить конфигурацию тестов. Например:
import http from "k6/http"
import { sleep } from "k6"

export const options = {
vus: 10,
duration: "30s",
}

export default function () {
http.get("https://localhost:7123/randombook")
sleep(1)
}

Здесь:
- vus: 10 - виртуальные пользователи, симулирующие параллельные входящие запросы;
- duration: "30s" – общее время теста;
- http.get("https://…") - основная функция, вызывающая конечную точку и считающая ответы, метрики, тайминг и т.п.;
- sleep(1) – время паузы между итерациями.

То есть, в течение 30 секунд k6 будет посылать до 10 параллельных запросов, потом ждать 1 секунду, и повторять. После он истечения времени теста, он даст ещё 30 секунд приложению, чтобы завершить текущие запросы.

Для запуска убедитесь, что API запущен, и выполните следующую команду:
k6 run script.js


В консоли API мы увидим логи запросов:
[15:19:51 INF] Request 1. Concurrent Executions 1. Delay: 7124ms
[15:20:02 INF] Request 2. Concurrent Executions 1. Delay: 4981ms

[15:20:27 INF] Request 57. Concurrent Executions 10. Delay: 7655ms

А в консоли k6 отчёт вроде представленного на рисунке выше.

Окончание следует…

Источник:
https://www.code4it.dev/blog/k6-load-testing/
.NET Разработчик

12 Feb, 05:00

1,992

День 2205. #Testing
Нагрузочное Тестирование с Помощью K6 в Windows. Начало

Понимание того, как ваша система реагирует на входящий сетевой трафик, имеет решающее значение для определения ее стабильности, способности соответствовать ожидаемому SLO и исправности базовой инфраструктуры и архитектуры. Рассмотрим, как использовать K6 для запуска нагрузочных тестов и локального отображения конечного результата.

Что это?
Нагрузочное тестирование имитирует реальные условия использования, чтобы убедиться, что ПО может обрабатывать большой трафик без ущерба для производительности или пользовательского опыта. Его важность заключается в способности выявлять узкие места в системе, которые могут привести к медленному времени отклика, ошибкам или сбоям в условиях нагрузки.

Проводя нагрузочное тестирование, разработчики могут вносить необходимые оптимизации и улучшения, гарантируя, что ПО будет надёжным, стабильным и масштабируемым. Система, неспособная обрабатывать большой входящий трафик, может полностью или частично выйти из строя, что приведёт к недовольству пользователей, потере дохода и ущербу репутации компании.

В идеале вы должны запланировать наличие автоматических нагрузочных тестов в конвейерах непрерывной доставки или, по крайней мере, убедиться, что вы время от времени запускаете нагрузочные тесты в своей производственной среде, а затем сравниваете результаты тестирования с предыдущими, чтобы убедиться, что вы не создали узкие места в последних выпусках.

Демо проект
Создадим простой проект .NET API. Одна конечная точка, /randombook, которая возвращает информацию о случайной книге, хранящейся в БД в памяти:
int requests = 0;
int concurrency = 0;
object _lock = new();
app.MapGet("/randombook", async (CancellationToken ct) =>
{
Book? book = default;
var delayMs = Random.Shared.Next(10, 10000);
try
{
lock (_lock)
{
requests++;
concurrency++;
app.Logger.LogInformation(
@"Request {Count}.
Concurrent Executions {Executions}.
Delay: {DelayMs}ms",
requests, concurrency, delayMs);
}

using var ctx = new ApiContext();
await Task.Delay(delayMs, ct);
if (ct.IsCancellationRequested)
{
app.Logger.LogWarning("Cancelled");
throw new OperationCanceledException();
}
var books = await ctx.Books.ToArrayAsync();
book = Random.Shared
.GetItems(books, 1).First();
}
catch (Exception ex)
{
app.Logger.LogError(ex, "Error ");
return Results.Problem(ex.Message);
}
finally
{
lock (_lock)
{
concurrency--;
}
}

return TypedResults.Ok(book);
});

Здесь добавлены:
- случайная задержка delayMs, эмулирующая запрос из БД;
- потокобезопасный счётчик параллельных операций concurrency;
- логирование сообщений внутри lock для избежания проблем параллелизма.
Это, конечно, не идеальное решение, но оно подойдёт для демонстрации.

Далее посмотрим, как провести нагрузочное тестирование этого API.

Продолжение следует…

Источник:
https://www.code4it.dev/blog/k6-load-testing/
.NET Разработчик

11 Feb, 05:01

2,173

День 2204. #ЧтоНовенького
Новинки в Visual Studio 2022
Несколько новинок было представлено в VS 2022 с начала года.

1. Настройка сообщений коммита, сгенерированных ИИ
VS уже какое-то время назад представила автоматическую генерацию сообщений коммита с помощью ИИ, описывая сделанные вами изменения. У меня нет большого опыта её использования, но несколько раз пробовал, и получается довольно неплохо (по крайней мере, по-английски). Нынешняя новинка позволяет вам легко адаптировать сообщения о коммитах в соответствии с вашим рабочим процессом и стандартами команды: указать количество и длину строк, стиль сообщения и т.п. Copilot понимает такие термины, как «тема», «тело» и «нижний колонтитул». Например (буду использовать примеры по-английски, т.к. на русском не пробовал):
Use all lowercase
Limit subject to 50 characters
Limit body to 2 sentences
Add a footer with three hash marks
Follow Conventional Commits standard


Чтобы это настроить, перейдите в Tools > Options > GitHub > Copilot (Инструменты > Параметры > GitHub > Copilot) и введите нужные параметры.

2. Настройка индикаторов свёрнутого текста
Теперь вы можете персонализировать цвет и фон индикатора свёрнутого текста в редакторе, установив пользовательские цвета для индикаторов свёрнутого и развёрнутого текста в отдельности. Эта функция доступна через меню Tools > Options > Environment > Fonts and Colors (Инструменты > Параметры > Среда > Шрифты и цвета).

Две новые записи в списке настроек редактора тестов, которые управляют цветом индикатора свернутого текста:
- Collapsed Text Indicator (Collapsed)
- Collapsed Text Indicator (Expanded)

(Индикатор свёрнутого текста (свёрнутый)
Индикатор свёрнутого текста (развёрнутый)
)
Цвета индикаторов и фона индикаторов можно устанавливать независимо друг от друга.

3. Сохранение шрифта при смене темы
Последнее обновление в VS 2022 позволяет переключать темы, не влияя на настройки шрифтов. Эта функция сохраняет выбранный шрифт и размер независимо от выбранной темы, в то время как цвета шрифтов продолжают адаптироваться к теме. Перейдите в Tools > Options > Environment > Manage Preview Features и найдите настройку Separate font settings from color theme selection (Отделить настройки шрифтов от выбора цветовой темы). Снятие этого флажка привяжет ваш шрифт напрямую к теме.

Источники:
-
https://devblogs.microsoft.com/visualstudio/customize-your-ai-generated-git-commit-messages/
-
https://devblogs.microsoft.com/visualstudio/customizing-collapsed-text-indicators/
-
https://devblogs.microsoft.com/visualstudio/your-fonts-are-now-preserved-when-changing-theme/
.NET Разработчик

10 Feb, 05:01

2,009

День 2203. #ProjectManagement
10 Признаков Того, Что Проект на Пути к Провалу. Окончание

Начало
Продолжение

7. Низкие баллы по метрикам DORA
Метрики DevOps Research and Assessment (DORA) измеряют стабильность и пропускную способность, т.е. качество ПО, которое мы производим, и эффективность, с которой мы можем создавать ПО такого качества. Если у вас низкие баллы по обоим метрикам, то вы поставляете некачественное ПО и делаете это медленно. Это почти гарантированный путь к провалу.

Красные флаги
- низкая частота развертывания,
- большие сроки выполнения,
- высокая частота отказов,
- большое время восстановления после сбоев.

Что делать?
Начать внедрять такие методы, как непрерывная интеграция, автоматизированное тестирование, частые релизы и быстрые откаты или исправления для повышения скорости и качества циклов обратной связи и раннего обнаружения проблем.

8. Достижение прогресса большими шагами
Большие многомесячные планы уменьшают ваши возможности учиться и адаптироваться. Лучшая альтернатива – рассматривать разработку как постоянный цикл экспериментов и открытий, а не пытаться найти и затем воплотить в каком-то плане то, что, по вашему мнению, является лучшими идеями. Гораздо эффективнее предположить, что ваши идеи в начале проекта неправильны, поэтому продумайте, что делать, если ваши идеи потерпят неудачу. Также создавайте системы так, чтобы их было легко изменить, чтобы вы могли исправить ошибки, когда вы их обнаружите.

Красный флаг
Обычно виден как функции, запланированные далеко на будущее и не выпущенные или не протестированные в течение месяцев или лет.

Что делать?
Работать небольшими итерациями. Выпускать чаще и получать быструю обратную связь от реальных пользователей. Если вы обнаружите, что ваша команда работает над подробными планами работы, которая будет выполнена через несколько месяцев, или функциями, которые не будут выпущены в течение недель, месяцев или даже лет, это большой предупреждающий знак. Выясните, как оптимизировать ваш процесс разработки, чтобы вы могли выпускать функциональность в любое время. Быстрая обратная связь и другие методы непрерывной доставки, позволяют работать более размеренно, развивая ПО пошагово. Это даёт больше возможностей для обучения и корректировки курса, когда мы обнаруживаем ошибку.

9. Плохая или отсутствующая обратная связь
Хорошие короткие циклы обратной связи позволяют направлять наши проекты к успеху. Если мы не знаем, работают ли наши новые функции для пользователей, то мы двигаемся вслепую.

Красные флаги
- Редкая или отсутствующая обратная связь от пользователей.
- Отсутствие автоматизированных проверок.

Что делать?
Сократить циклы обратной связи на каждом уровне. Автоматизированная сборка обратной связи от пользователей, непрерывная интеграция и частые выпуски - всё это инструменты, которые помогают нам достичь этого.

10. Разработка неправильной вещи
Это может показаться очевидной ошибкой, которую никто никогда не сделает, но на самом деле это чрезвычайно распространено. В своём исследовании Microsoft обнаружили, что 2/3 их идей дали нулевой или отрицательный выхлоп. Оценки того, как часто функции, которые мы производим как отрасль, вообще никогда не используются, варьируются от 40 до 90%. Поэтому создание неправильных вещей, по крайней мере, так же, а то и более распространено, чем создание вещей, которые люди хотят.

Красные флаги
- Отсутствие пользователей и обратной связи.
- Отсутствие отчётов об ошибках, хотя мы знаем, что наше ПО работает неверно.

Что делать?
Вовлекать реальных пользователей в процесс разработки, либо набирать тестовых пользователей, которые могут давать вам предложения и отзывы по мере создания ПО. Либо более частый выпуск ПО в производство и наблюдение за ним, чтобы определить, как оно используется и какие части игнорируются.

Источник:
https://youtu.be/-6KHhwEMtqs