Библиотека шарписта | C#, F#, .NET, ASP.NET
23.3K subscribers
2.09K photos
32 videos
85 files
4.27K links
Все самое полезное для C#-разработчика в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/b60af5a4

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
🔍 Что такое source.dot.net?

Source.dot.net — это официальный сайт от Microsoft, предоставляющий доступ к исходному коду стандартных библиотек .NET. Здесь вы можете исследовать, как реализованы классы, структуры и методы, которые вы используете ежедневно в своих проектах на C#. Этот инструмент позволяет заглянуть «под капот» .NET и увидеть внутреннюю работу фреймворка.

⚙️ Сайт предлагает удобную навигацию по исходному коду с возможностью переключаться между версиями .NET (например, .NET 6, .NET 7, .NET 8). Помимо исходного кода, ресурс интегрирован с официальной документацией, что делает его полезным для изучения, отладки и глубокого понимания работы фреймворка.

Незаменимый инструмент для разработчиков, стремящихся понять, как работают стандартные библиотеки и применять лучшие практики в своих проектах!

Попробуйте прочитать url сайта по-английски!
🎮 CODE-DMG - эмулятор Game Boy на С#!

CODE-DMG — это эмулятор классической консоли Nintendo Game Boy, написанный на C#. Он позволяет запускать любимые ретро-игры на вашем компьютере, включая такие хиты, как Pokémon и Tetris.
🎮Эмулятор полностью открыт для сообщества, что делает его идеальным для разработчиков и энтузиастов. Вы можете скачать проект, внести изменения или просто насладиться его функционалом, погружаясь в атмосферу 90-х.

🕹 Управление в игре
Перемещение (D-Pad): W, A, S, D
Кнопки A и B: J, K
Старт: Enter
Select: Shift

🤩 Установите CODE-DMG и погрузитесь в ностальгические приключения Game Boy!
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое ValueTask в C#?

ValueTask — это структура в .NET, которая используется для представления асинхронной операции. Она является альтернативой Task, но предназначена для более эффективного управления ресурсами в случаях, когда асинхронная операция может завершаться очень быстро, возможно даже синхронно.

Особенности использования ValueTask:

1️⃣Повторное ожидание запрещено: вызывать await несколько раз для одного и того же ValueTask нельзя, так как это может привести к неожиданным результатам.
Так делать нельзя:

ValueTask<int> task = GetValueAsync();
int value1 = await task;
int value2 = await task; // Ошибка


2️⃣Конвертация в Task: если требуется передать ValueTask в API, которое ожидает Task, можно вызвать метод .AsTask():
Task<int> task = GetValueAsync().AsTask();


3️⃣Когда использовать ValueTask:
Операция часто завершается синхронно.
Создание объекта Task может быть слишком накладным.
Вы пишете библиотеку с высокой производительностью.

4️⃣Когда НЕ использовать ValueTask:
Операция всегда асинхронна.
Производительность не является критически важной.
Приложение не оптимизировано под работу с ValueTask.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤨🛠Простое руководство по работе с Base64 в C#

❗️Base64 – это удобный метод преобразования данных в текстовый формат, который часто используется для передачи двоичных данных, таких как изображения, через текстовые протоколы

✏️В статье объясняется, как использовать встроенные методы C# для кодирования и декодирования данных в формате Base64. С помощью Convert.ToBase64String можно легко преобразовать строку или массив байтов в Base64, а методом Convert.FromBase64String – вернуть их обратно.

🤩 Статья также демонстрирует, как вставлять Base64-строки в другие строки с использованием интерполяции или string.Format. Она рассматривает плюсы и минусы Base64: формат удобен и поддерживается в большинстве языков программирования, но увеличивает размер данных на 33%. Рекомендуется использовать Base64 только там, где это оправдано, например, для передачи данных через API или сериализации.
Please open Telegram to view this post
VIEW IN TELEGRAM
👨‍💻🛠 UUID (GUID) vs ULID: Примеры и различия

UUID (GUID) — это уникальный идентификатор, состоящий из 128 бит и представленный в виде строки из 36 символов. Пример UUID:
f47ac10b-58cc-4372-a567-0e02b2c3d479


ULID — уникальный идентификатор длиной 26 символов, который сортируется по времени. Пример ULID:
01F8G4E0D8HR7X0G9WG9M3FWVZ


Основные различия:
Сортируемость: ULID сортируется по времени, UUID — нет.
Длина: UUID длиннее (36 символов), ULID — 26 символов.
Использование: UUID подходит для генерации уникальных идентификаторов, ULID — для систем с необходимостью упорядочивания по времени.

Когда что использовать:
UUID: Если важна глобальная уникальность, а порядок не имеет значения.
ULID: Когда необходимо сортировать идентификаторы по времени и иметь компактный формат.
Please open Telegram to view this post
VIEW IN TELEGRAM
Регулярные шахматы

Как думаете, сколько нужно регулярных выражений для игры в шахматы?
1? 2? А вот и нет! Для этого понадобилось 84 688 регулярных выражений.

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

📖 Подробнее о безумной идее

#новость
🔄 Поверхностное vs. Глубокое копирование в C#

В C# существуют два типа копирования объектов: поверхностное и глубокое.

Поверхностное копирование создаёт новый объект, но не копирует вложенные объекты. Вместо этого, вложенные объекты остаются ссылками на те же экземпляры, что и у исходного объекта. Это может привести к тому, что изменения в одном объекте отразятся на другом.

Глубокое копирование создаёт полную независимую копию объекта, включая все вложенные данные. Изменения в копии не затронут оригинал, так как каждый вложенный объект также будет скопирован.

⚡️ Важно понимать разницу: поверхностное копирование быстрее, но подходит только для объектов без вложенных данных или когда изменения вложенных объектов не критичны. Глубокое копирование гарантирует полную независимость копий, но может быть более затратным по производительности.
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Как снизить время загрузки .NET Core приложения?

Если ваше .NET Core приложение загружается медленно, не спешите отчаиваться! В статье автор делится реальными оптимизациями, которые помогли ему сократить время загрузки на 80%.

💡Вот несколько ключевых оптимизаций, которые можно легко применить:🤩
1️⃣ Удаление лишнего промежуточного ПО
Автор рекомендует тщательно проанализировать файл Startup.cs и оставить только те слои, которые действительно необходимы для работы приложения. Чем меньше промежуточного ПО — тем быстрее будет загрузка.

2️⃣ Отложенная загрузка ненужных сервисов
Сервисы, которые не критичны для первого запроса, можно отложить до момента их фактического использования. Такой подход помогает сократить время запуска приложения и ускорить отклик.

3️⃣ Оптимизация запросов к базе данных
Важно использовать асинхронные запросы, избегать дублирования запросов и оптимизировать индексы. Это значительно уменьшит задержки при извлечении данных и ускорит работу приложения.

⚡️Хотите полной оптимизации? Скорее в статью!
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ 10 ошибок в EF Core, которые легко исправить

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

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

Ещё одно упущение — использование отслеживания изменений в сценариях только для чтения. Это легко исправить с помощью метода AsNoTracking(). Также важно переходить на асинхронные методы (ToListAsync, SaveChangesAsync) для повышения отзывчивости приложения. А грамотная настройка миграций и отношений между сущностями помогает избежать проблем с совместимостью схемы базы данных.

🚀 Хотите узнать больше? Все детали и примеры вы найдёте в статье!
👨‍💻⭐️ Roadmap для ваших начинаний и продолжений!

🤩 На GitHub доступна полезная дорожная карта для тех, кто стремится стать разработчиком .NET. Эта карта охватывает ключевые навыки, инструменты и технологии, необходимые для освоения профессии в 2025 году. Она помогает систематизировать обучение и выбрать правильные направления для профессионального развития.

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

#новость
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое StyleCop и почему он нужен каждому разработчику C#?

Что такое StyleCop?
StyleCop — это набор правил, которые проверяют ваш код на соответствие лучшим практикам и стандартам кодирования. Например, локальные переменные должны быть в camelCase, а классы — в PascalCase. Также фигурные скобки должны располагаться на своих местах, а код должен быть аккуратно выровнен. Он анализирует такие аспекты, как:
Документация (XML-комментарии).
Именование переменных, классов и методов.
Расположение и форматирование кода.
Читаемость и структура кода.
Порядок объявления элементов в классе.
Эти правила помогают автоматизировать проверку кода, снижая количество ошибок и улучшая читаемость.

Почему стоит использовать StyleCop?
Единообразие кода — код, написанный по стандартам, проще читать и поддерживать.
Снижение числа ошибок — некоторые правила помогают выявить потенциальные баги.
Автоматизация — styleCop упрощает код-ревью и снижает нагрузку на разработчиков.
Улучшение команды — следование единым стандартам помогает новым участникам быстрее влиться в команду.
Please open Telegram to view this post
VIEW IN TELEGRAM
Сохраняйте себе #tip, чтобы не забыть!
🔐 Базовая аутентификация в ASP.NET Core Web API

Защита вашего API — задача №1 в современном мире. Один из самых простых способов это сделать — реализовать базовую аутентификацию. Давайте разберёмся, как это сделать в ASP.NET Core, не перегружая код сложными механизмами.

💡 Что такое аутентификация?
Представьте, что клиент (например, Postman, браузер или ваше мобильное приложение) отправляет запрос к вашему API. Вместе с этим запросом он передаёт свои логин и пароль в заголовке Authorization, закодированные в Base64. Сервер проверяет их и решает, пускать клиента дальше или нет.

Пример заголовка:
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=

(Это просто логин username и пароль password, закодированные в Base64).

🛠 Как это работает?
1️⃣Сервер видит запрос без заголовка авторизации и отвечает: 401 Unauthorized.
2️⃣Клиент отправляет повторный запрос с закодированными учётными данными.
3️⃣Сервер проверяет их и либо даёт доступ, либо отказывает.

Как реализовать в ASP.NET Core?
1️⃣ Создайте проект ASP.NET Core Web API.
2️⃣ Посмотрите статью
3️⃣ Реализуйте!
Please open Telegram to view this post
VIEW IN TELEGRAM
👔💼 Как ответить на собеседовании, почему вы уволились с прошлого места работы: 9 вариантов ответа

А также примеры того, как говорить точно не надо 🌚

👉Читать
⚡️🛠Обновления в реальном времени с Server-Sent Events (SSE) в ASP.NET

В современном веб-разработке одной из ключевых задач является обеспечение взаимодействия сервера и клиента в режиме реального времени. Среди технологий, которые позволяют достичь этой цели, выделяется Server-Sent Events (SSE). SSE — это стандартный способ однонаправленной передачи данных от сервера к клиенту через постоянное соединение. В отличие от WebSockets, SSE проще в настройке и использовании, так как работает поверх HTTP и подходит для задач, где требуется обновление данных только от сервера к клиенту.

Что такое Server-Sent Events (SSE)?
SSE — это технология, позволяющая серверу отправлять данные на клиент через постоянное соединение. Клиент, подключаясь к серверу, получает поток событий, которые могут обновляться в реальном времени.

Преимущества SSE:
Работает поверх HTTP/HTTPS.
Простота реализации.
Поддержка автоматического переподключения.
Низкие накладные расходы по сравнению с WebSockets для однонаправленных задач.

Основные сценарии использования:
Обновления в реальном времени (уведомления, ленты событий).
Мониторинг (например, системы или приложений).
Однонаправленные данные, такие как серверные логи или обновления для клиентов.

Как реализовать SSE в ASP.NET?
Чтобы включить SSE в ваше приложение ASP.NET, нужно продумать три основные составляющие:
1️⃣ Установление соединения. Сервер и клиент устанавливают постоянное соединение. Для этого сервер отвечает специальными HTTP-заголовками, указывая, что используется SSE.
2️⃣ Поток данных. Сервер отправляет клиенту поток событий. Это могут быть текстовые сообщения, которые клиент получает в режиме реального времени.
3️⃣ Обработка на клиенте. Клиент использует объект EventSource, чтобы получать и обрабатывать входящие события.

👀 Готовый код можете подглядеть вот здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
Самые полезные каналы для программистов в одной подборке!

Сохраняйте себе, чтобы не потерять 💾

🔥Для всех

Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
Азбука айтишника — здесь мы познаем азы из мира программирования

🤖Про нейросети
Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей
Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка
Библиотека нейротекста | ChatGPT, Gemini, Bing
Библиотека нейровидео | Sora AI, Runway ML, дипфейки
Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion

#️⃣C#

Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel

☁️DevOps

Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования

🐘PHP

Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты

🐍Python

Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты

Java

Книги для джавистов | Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков

👾Data Science

Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту

🦫Go

Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go

🧠C++

Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++

💻Другие каналы

Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
Библиотека разработчика игр | Gamedev, Unity, Unreal Engine

📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈

Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT

Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *

* Организация Meta запрещена на территории РФ
😴🛠 Паттерн «Состояние»

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

Когда использовать паттерн «Состояние»?
Когда у объекта есть несколько состояний, и его поведение зависит от текущего состояния.
Когда в коде слишком много if-else или switch-case, которые проверяют состояние объекта.
Когда требуется обеспечить легкое добавление новых состояний без изменения существующего кода.

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

Недостатки паттерна
Увеличение числа классов, так как каждое состояние требует отдельной реализации.
Может быть избыточным для простых сценариев.
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️Fluent API в C#: Читаемый код и удобство разработки

Fluent API — это стиль проектирования интерфейсов, который позволяет вызывать методы цепочкой, улучшая читаемость и удобство работы с кодом. В C# этот подход особенно популярен в таких библиотеках, как Entity Framework, FluentValidation и других.

Пример Fluent API
Представим, что мы хотим создать систему для построения SQL-запросов. Сначала сравним два подхода:
Без Fluent API
QueryBuilder queryBuilder = new QueryBuilder();
queryBuilder.Select("name", "age");
queryBuilder.Where("age > 18");
queryBuilder.OrderBy("name");
string query = queryBuilder.Build();;


С Fluent API
string query = new QueryBuilder()
.Select("name", "age")
.Where("age > 18")
.OrderBy("name")
.Build();


Код с Fluent API выглядит как цепочка операций, что делает его более читаемым и похожим на естественный язык.

Преимущества Fluent API
Код выглядит как последовательность операций.
Удобно добавлять новые методы и расширять функциональность.
Все операции выполняются на одном объекте.

Недостатки Fluent API
При длинных цепочках вызовов сложнее отлаживать ошибки.
Неправильно спроектированное API может выглядеть громоздко.
Please open Telegram to view this post
VIEW IN TELEGRAM