Telegram Web
🛠 Чек-лист по настройке и ведению репозитория .NET-проекта

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

Проверьте URL репозитория

• Убедитесь, что имя аккаунта, название репозитория и основная ветка (main или master) соответствуют соглашениям команды.

• Проверьте, нет ли опечаток или лишних символов в пути.

Добавьте файл LICENSE

• Поместите в корень проекта файл с лицензией (MIT, Apache, GPL и т. д.).

• Проверьте, что текст лицензии актуален и соответствует требованиям компании.

Настройте .gitignore

• Используйте готовые шаблоны для .NET (VisualStudio, Rider): исключите bin/, obj/, настройки IDE, файлы сборки.

• При необходимости добавьте игнорацию пользовательских секретов и сертификатов.
bin/
obj/
*.user
*.suo


Создайте файл .gitattributes

Задайте нормализацию переводов строк:
* text=auto
*.ps1 text eol=crlf


• Укажите специальные правила для бинарных файлов, чтобы избежать проблем с кодировкой.

Подробный README.md

• Опишите назначение проекта, его архитектуру и ключевые зависимости.

• Дайте инструкции по установке, настройке и запуску (команды CLI, порты, переменные окружения).

• Приведите пример запуска основных сценариев.

Проект тестов

• Создайте отдельный тестовый проект (.Tests) и убедитесь, что все тесты проходят при команде dotnet test.

• Добавьте в README badge с процентом покрытия (например, через Coveralls или Azure Pipelines).

CI/CD через GitHub Actions

• Разместите workflow в .github/workflows/ci.yml: сборка, тесты, анализ кода.

• Опционально — настройте деплой на тестовый или продакшен-стенд.
name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-dotnet@v1
with: { dotnet-version: '7.0.x' }
- run: dotnet build --no-restore
- run: dotnet test --no-build --verbosity normal


Файлы CODE_OF_CONDUCT.md и CONTRIBUTING.md

• CODE_OF_CONDUCT.md определяет правила поведения участников.

CONTRIBUTING.md описывает, как создавать issue, форкать проект и оформлять PR.

Метки и темы

• Настройте лейблы для Issue/PR: bug, enhancement, help wanted, good first issue.

• Добавьте в репозиторий релевантные темы (например, csharp, dotnet-core, webapi).

Badge-значки в README

• Статус сборки (Build Passing/Failing).

• Процент покрытия тестами.

• Поддерживаемые версии .NET.

Сколько «галочек» из списка содержит ваш проект?

🐸Библиотека шарписта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
😁98👍4🔥1
💬 Техдолга много не бывает

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

Один из наших подписчиков недавно спросил:
Как определить, когда стоит принимать новый функционал, а когда — гасить технический долг


На практике подход к техдолгу зависит от контекста проекта, команды и бизнес-целей. Вот основные моменты, которые помогут выбрать стратегию:

— Регулярно формируйте список всех известных проблем: устаревшие библиотеки, неочищенный код, отсутствие тестов.

— Делите техдолг на «осознанный» (trade-off ради скорости) и «неосознанный» (ошибки, хаотичный рост).

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

— Включайте небольшие задачи по техдолгу в каждый спринт (например, 10–20 % времени).

— Установите критерии «не допуска к продакшену» для новых заимствований (например, доля покрытия тестами).

💬 Как вы балансируете новые фичи и погашение техдолга? Поделитесь своим опытом в комментариях 👇

P.S. Если хотите задать вопрос сообществу или поделиться историей, заполните нашу гугл-форму.

🐸Библиотека шарписта #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
1
👀 Эффективный доступ к данным в .NET

В рамках трансляции On .NET Live ведущие разобрали, как через чёткие интерфейсы Repository и паттерн Specification вынести всю логику запросов из бизнес-слоя, чтобы не забирать в память лишние данные и легко мокировать код для тестов.

Также обсудили компромиссы generic-репозиториев и показали, как Unit of Work возвращает настоящую транзакционность, вызывая SaveChanges() один раз в конце.

➡️ Смотреть запись трансляции

🐸Библиотека шарписта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3🥱3😁1
😤 Пока вы думаете — остальные уже учатся строить системы, которые работают за них

24 часа до старта курса по AI-агентам. Самое время задуматься о прокачке скиллов, потому что места ограничены!

Если вы до сих пор думаете, что LLM — это просто «вызов через API», то вы рискуете очень скоро оказаться за бортом индустрии.

Модели больше не в центре. Решают те, кто умеет собирать интеллектуальные системы, а не просто «дообучать модельку».

➡️ Что вы потеряете, если не впишетесь:
— навык, который уже востребован на рынке
— понимание, как из GPT сделать полноценного помощника, агента или продукт
— шанс догнать тех, кто уже перешёл на следующий уровень

📌 Курс стартует уже завтра
— 5 вебинаров, живая практика, код, разборы, продовые кейсы
— без «посмотрите статью», только то, что реально нужно

Спикеры: Никита Зелинский (МТС), Диана Павликова, Макс Пташник, Дима Фомин — те, кто реально собирает агентные системы, а не просто про них пишет.

Старт уже завтра — забронируйте место на курсе сейчас
🥱91😁1
⚡️ Быстро и без облака

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

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

Для этого достаточно запустить простой скрипт на C#, который анализирует изображение и генерирует для него текстовое описание.

➡️ Узнать как это сделать

🐸Библиотека шарписта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2😁2
var в C# — удобство или маска

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

Вместо явного написания громоздких типов можно писать лаконичный код:
// Вместо List<Dictionary<string, List<Tuple<int, DateTime>>>> data = ...
var data = GetComplexData();


Также var не делает переменную динамической, это всё тот же строго типизируемый код.

Но есть и сильный аргумент против использования var. На примере кода выше:
// Вместо List<Dictionary<string, List<Tuple<int, DateTime>>>> data = ...
var data = GetComplexData(); // каков тип data? int, string, CustomType?


Тип, получаемый из функции неочевиден и это в разы ухудшает читаемость кода.

var — полезный инструмент, но требует дисциплины. При очевидном типе он упрощает код, при неочевидном — мешает пониманию.

💬 Вы используете var в коде или сторонник явного? Делитесь мыслями в комментариях 👇

🐸Библиотека шарписта #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚10💯73😢2🤩2
📰 Дайджест недели

Несколько интересных материалов, которые вы могли пропустить.

Фильтрация, сортировка и пагинация в .NET

От инициализации проекта и установки пакета Sieve до настройки DI и написания контроллера с автоматическим применением фильтров и сортировок.

Каналы не подходят для In-Memory шины сообщений

Использование каналов в качестве шины сообщений может завести в тупик: отсутствие персистентности приводит к необходимости самому реализовывать dead-letter очереди, экспоненциальные откладывания для повторов, механизмы отложенной доставки и «claim-check» для тяжёлых полезных нагрузок.

Запуск коммерческих изданий AutoMapper и MediatR

В обновлённых релизах AutoMapper v15.0 и MediatR v13.0 на NuGet реализован запрос лицензии при установке.

Помимо тарификации по размеру команды и скидок за годовую подписку, подписчики получают приоритетную поддержку, ранний доступ к выпускам и частные каналы в Discord.

🐸Библиотека шарписта #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51🔥1
Что выведет код?

👾 — 0
👍 — No value
🥰 — null
⚡️ — Error

Библиотека задач по C#
👍154😁16🥱1132
🥳 Подборка вакансий для шарпистов

С# Senior Backend Developer — от 250 000 ₽, удалёнка.

C# программист — до 160 000 ₽, гибрид (Москва).

Fullstack Middle C# Developer— до 500 000₽, офис (Москва).

Руководитель группы C# — от 450 000 ₽, удалёнка.

Бустер — Удалённо (в любом городе мира).

➡️ Еще больше топовых вакансий — в нашем канале С# Jobs
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🚀 Анализ изменений с git log

Команда git log позволяет понять, как эволюционировал код — просмотреть последовательность коммитов и метаданные.

Просмотр истории:
git log


История коммитов построчно:
git log --oneline


Граф веток + метки (ветки, теги) для всех веток:
git log --graph --decorate --all


Показать diff последних двух коммитов:
git log -p -2


Коммиты за последние 2 недели от указанного автора:
git log --since="2 weeks ago" --author="ProgLib"


Настраиваемый формат: короткий хеш, дата, сообщение, автор:
git log --pretty=format:"%h %ad | %s%d [%an]" --date=short


💬 Вы смотрите историю log'ом или используете сторонние инструменты?

🐸Библиотека шарписта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰72
👍 Как поднять резюме в топ

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

➡️ Поднять себя в топ

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
3👾3
⚡️ Асинхронная обработка в C#

Асинхронные потоки IAsyncEnumerable позволяют эффективно обрабатывать последовательности данных, поступающих с задержками. В целом это положительно влияет на пользовательский опыт и скорость работы приложения

1. Базовый синтаксис:
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

static async IAsyncEnumerable<int> GenerateSequenceAsync(int count, [EnumeratorCancellation] CancellationToken token = default)
{
for (int i = 0; i < count; i++)
{
// Симулируем асинхронную задержку
await Task.Delay(100, token);
yield return i;
}
}

static async Task ConsumeAsync()
{
await foreach (var item in GenerateSequenceAsync(5))
{
Console.WriteLine($"Получено значение: {item}");
}
}


• Ключевое слово async перед IAsyncEnumerable<T>.

yield return внутри асинхронного метода.

await foreach для потребления.

2. Обработка отмены и ошибок:
using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(1));
try
{
await foreach (var item in GenerateSequenceAsync(10, cts.Token).WithCancellation(cts.Token))
{
Console.WriteLine(item);
}
}
catch (OperationCanceledException)
{
Console.WriteLine("Операция была отменена.");
}


• Передаём CancellationToken через атрибут [EnumeratorCancellation].

• Используем метод расширения .WithCancellation(token) для явной поддержки отмены в await foreach.

3. Советы по применению

• Всегда учитывайте семантику отмены: пробрасывайте CancellationToken до источника потока.

• Избегайте долгих синхронных операций внутри цикла генерации — это сведёт на нет преимущества асинхронности.

• При больших объёмах данных комбинируйте с буферизацией через Channel<T> для сглаживания пиковой нагрузки.

💬 Нужны более продвинутые сценарии по использованию асинхронности? Пишите свои хотелки в комментариях, а мы их обязательно исполним 👇

🐸Библиотека шарписта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍104🔥1😁1
✏️ Промпт для пет-проектов

Мы составили для вас промпт, который поможет выбрать идею для вашего следующего пет-проекта. Никаких долгих раздумий, используете промпт и к разработке.

Промпт:
You are a fun-loving and creative C# developer, brimming with enthusiasm for coding and always eager to explore new and exciting projects. Your goal is to brainstorm a list of engaging and manageable pet-project ideas that leverage your C# skills. These projects should be fun to build, relatively self-contained, and offer opportunities for learning and experimentation. Finally, you will choose the most appealing project and outline the initial steps for getting started.


Это отличный способ не только генерировать идеи, но и подойти к созданию чего-то нового нестандартным способом.

Занимаетесь пет проектами? Поставьте 👍, если да и 👾, если нет.

🐸Библиотека шарписта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20👾93😁2🌚1
👨‍💻 Бесполезные знания для работы

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

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


💬 Есть ли у вас знания, которые так и не пригодились в работе? Делитесь в комментариях 👇

P.S. Если хотите задать вопрос сообществу или поделиться историей, заполните нашу гугл-форму.

🐸Библиотека шарписта #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🌚4🤔3🥱3😢1
⚙️ Быстро потестить строку кода

Иногда нам нужно на примере узнать как отработает LINQ запрос, к примеру.

Можно пойти старым путём и создать отдельный файл в проекте с названием «Test123», но Rider предлагает иной вариант.

Если Rider у вас настроен под хоткеи от Intellij, то достаточно одновременно нажать:
Ctrl + Alt + Shift + Insert


И IDE создаст вам временный файл, который не будет добавлен в контекст проекта.

Просто, быстро и без боли.

🐸Библиотека шарписта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🤔52🔥2
📁 Файл с инструкциями вместо тысячи запросов

Представьте: один файлик — и все последующие автодополнения подстраиваются под ваш корпоративный стандарт.

В блоге .NET показали, как создать такой файл и навсегда забыть о рутине при работе с GitHub Copilot.

Создаёте в корне репозитория папку .github/ и внутри неё — copilot-instructions.md.
В шапке указываете, к каким файлам применить правила, а дальше описываете свои стандарты

➡️ Dev блог Microsoft

🐸Библиотека шарписта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🌚3
✏️ Кроссворд на выходных

Отвлечёмся от работы, но не совсем. Сегодня будем отгадывать термины из разработки.

1. Специальный оператор, возвращающий имя переменной, метода или типа как строку.

2. Модификатор метода, обозначающий его асинхронное выполнение в сочетании с await.

3. Специальный член класса, позволяющий обращаться к экземпляру как к массиву: obj[i].

4. Модификатор, позволяющий объявить один класс/метод/структуру в нескольких файлах.

5. Ключевое слово, позволяющее из метода-итератора возвращать значения по одному.

6. Модификатор поля, гарантирующий свежесть данных при многопоточном доступе.

7. Контекст или модификатор, разрешающий небезопасный (низкоуровневый) код с указателями.

Пишите под спойлер свои варианты в комментариях 👇

🐸Библиотека шарписта #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
3👾2🌚1
2025/07/13 00:40:41
Back to Top
HTML Embed Code: