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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
🛠 Инструмент недели: MoreLINQ

MoreLINQ — это расширение LINQ для .NET, которое добавляет десятки полезных методов, отсутствующих в стандартной библиотеке.

Что внутри:

• DistinctBy, MaxBy, MinBy — упрощают выборку уникальных и экстремальных значений

• Batch, Buffer — удобно работать с кусками коллекций

• Scan — похоже на Aggregate, но возвращает все промежуточные состояния

• Lag, Lead — доступ к предыдущим и последующим элементам последовательности

• Shuffle, Permutations, Subsets — алгоритмы для сложных операций с наборами

➡️ Репозиторий инструмента

💬 Делитесь в комментариях каких методов не хватает в LINQ👇

🐸Библиотека шарписта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82
Forwarded from Библиотека программиста | программирование, кодинг, разработка
💻🧩 Когда HR требует LeetCode Hard: почему компании стреляют себе в ногу

Когда твоя компания не Google, но хочет отбирать кандидатов как Google — получается дорогой фейл и текучка талантов. Разбираемся в трендах IT-рекрутинга, которые выглядят как выстрел в ногу.

➡️ Читать статью

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤖 Промпт дня: техническое интервью по C#

Представьте, что у вас есть безлимитное время опытного C# разработчика. Проявите себя в условиях «реального» собеседования и получите ценную обратную связь, чтобы понять, какие аспекты вашего опыта стоит прокачать.

Для этого используем вот такой промпт:
"You are a seasoned C# developer and interviewer with 15+ years of experience. Your task is to conduct a mock technical interview for a candidate applying for a mid-level C# developer position. The interview will focus on core C# concepts, object-oriented programming principles, and common .NET framework features.

Your approach will be to ask one question at a time, wait for the candidate's response, provide constructive feedback on their answer (highlighting strengths and areas for improvement), and then proceed to the next question. The goal is to simulate a real-world interview experience and help the candidate identify areas where they need to improve their knowledge.

Here's the format you will follow for each question:

---

Question:
$interview_question

[Pause for Candidate's Response]

Feedback:
* Strengths: $positive_feedback_on_answer
* Areas for Improvement: $constructive_criticism_and_suggestions

Next Question:
$next_interview_question

---

Begin the mock interview"


🐸Библиотека шарписта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👏7😁3
🔥 Программисты, нужен ваш совет!

Пилим крутую подборку ноутов для кодеров в 2025-м и хотим собрать реальный фидбек от тех, кто в теме!

Какой ноут спасает вас в кодинге и почему?

Расскажите все:

• Что за зверь (модель, начинка)
• Где жмет и где радует в ежедневной работе
• На какие фишки смотреть при выборе
• Как вам с ним живется

Топовые советы попадут в нашу статью!

💬 Делитесь в комментах 👇 Сделаем годный гайд, который реально поможет коллегам!

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8😁3🥱3💯1
⚙️ Как использовать 2FA в .NET приложении

Сейчас покажем, как настроить двухфакторную аутентификацию (2FA) в вашем .NET приложении с использованием библиотеки .NET Identity.

1️⃣ Установка и настройка .NET Identity

• Добавьте необходимые пакеты NuGet:
Install-Package Microsoft.AspNetCore.Identity.EntityFrameworkCore
Install-Package Microsoft.EntityFrameworkCore.SqlServer
Install-Package Microsoft.EntityFrameworkCore.Tools


• Настройте контекст данных и Identity:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();

services.AddControllersWithViews();
}


2️⃣ Включение 2FA для пользователя

Теперь, когда Identity настроен, мы можем включить двухфакторную аутентификацию:
var user = await _userManager.GetUserAsync(User);
var tokenProvider = _userManager.GetTwoFactorAuthenticationTokenProvider(user);
var token = await _userManager.GenerateTwoFactorTokenAsync(user, tokenProvider);

// Отправить токен пользователю через email или SMS


3️⃣ Проверка введённого токена

После того как пользователь получит код на своем устройстве (например, через Google Authenticator), он должен ввести его на сайте. Проверка кода выглядит следующим образом:
var result = await _signInManager.TwoFactorSignInAsync("Authenticator", tokenInput, rememberMe, false);
if (result.Succeeded)
{
// Успешный вход
}
else
{
// Ошибка
}


💬 Пишите, где сталкивались с 2FA👇 Админ, к примеру, каждый раз тянется к телефону, когда логинится в GitHub

🐸Библиотека шарписта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥7🥰2❤‍🔥1🤩1
👨‍💻 LINQ — магия C# или чёрная дыра производительности

Когда впервые видишь LINQ — это как будто дали волшебную палочку:
var result = users.Where(u => u.IsActive).OrderBy(u => u.Name).ToList();

Но через месяц в проде: «А почему этот запрос делает 9 подзапросов, 3 джойна, и тянет всю таблицу в память, чтобы потом отфильтровать в приложении?..»

💬 А как вы считаете? LINQ это спасение от рутины или проблема? Пишите в комментарии 👇

🐸Библиотека шарписта #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱26👍61
🛠 LINQPad — инструмент для быстрых экспериментов

LINQPad — это интерактивная среда для запуска C#-кода без создания проектов, солюшенов и прочей бюрократии.

Почему это мастхэв:

Быстрая проверка идей — пиши и запускай на лету

Dump() — метод, которого не хватало

Даёт мгновенный вывод структуры объекта, с деревьями, списками, полями и цветами. Идеален для отладки.

Поддержка EF Core, SQL и даже NoSQL

Поддержка NuGet прямо в редакторе

Пример:
var numbers = Enumerable.Range(1, 20);
var evens = numbers.Where(x => x % 2 == 0);

evens.Dump("Чётные числа");


Набросали код и проверили с помощью Dump() что получилось.

➡️ Попробовать LINQPad

🐸Библиотека шарписта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥71
Forwarded from Библиотека программиста | программирование, кодинг, разработка
😺🐙🧼 Сам себе GitHub: как работать с чистым Git-репозиторием

Git — мощная система контроля версий, которую обычно используют через платформы вроде GitHub и GitLab. Однако Git сам по себе не требует веб-интерфейсов и облачных сервисов. Многие разработчики предпочитают работать с чистым Git-репозиторием, размещенным на собственном сервере.

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

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10💯42
💬 Сколько у вас решено задач на литкоде

🐸Библиотека шарписта #развлекалово
Please open Telegram to view this post
VIEW IN TELEGRAM
😁264
🎲 Разминка для мозгов

Шесть слов, связанных с ключевыми понятиями платформы. Справитесь без подсказок?

1 — Тип, предназначенный для создания неизменяемых объектов с авто-генерацией Equals и ToString.

2 — Современный компилятор C# с открытым API для анализа и генерации кода.

3 — Язык запросов, встроенный в C# для работы с коллекциями и источниками данных.

4 — Класс, который представляет таблицу в базе данных

5 — Структура, объединяющая фиксированное количество элементов разных типов.

6 — Базовая единица параллельного исполнения в многопоточном программировании .NET.

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

🐸Библиотека шарписта #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍112🔥1
📰 Самое важное за неделю

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

​AutoMapper и MediatR переходят на коммерческую модель.

MediatR v12.5.0
Вышла новая версия MediatR, в которой добавили поддержку тайм-аутов для обработчиков запросов, улучшили регистрацию открытых поведений, реализовали полную передачу CancellationToken по цепочке вызовов и обновили инфраструктуру проекта.

Windows Community Toolkit v8.2
Microsoft выпустила новую версию Windows Community Toolkit , предлагая разработчикам WinUI улучшенную поддержку Native AOT, совместимость с UWP для .NET 9 и новый SwitchConverter.

Поучаствуйте в нашей подборке ноутов

🐸Библиотека шарписта #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
1😢1
✍🏻 Чем отличаются интерфейсы от абстрактных классов в C#?

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

1. Отношение к классам-наследникам: Абстрактный класс может иметь как абстрактные, так и конкретные (реализованные) методы. Интерфейс же предоставляет только определения методов. Класс может наследоваться только от одного абстрактного класса, но может реализовывать несколько интерфейсов.

2. Реализация: Абстрактным классам разрешено иметь переменные экземпляра и иметь реализацию методов. Интерфейсы могут иметь только методы (и свойства) без реализации, только сигнатуры. Класс, реализующий интерфейс, должен предоставить реализацию всех методов и свойств интерфейса.

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

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


Библиотека собеса по С#
🥱31👍7😢4
Что выведет код?

👾 — Мусорное значение
👍 — Compile time error
🥰 — Программа распечатает значение по адресу 65535
⚡️ — 65535

Библиотека задач по C#
Please open Telegram to view this post
VIEW IN TELEGRAM
98🥰16😢5🌚5👾5
💵💻🌍 Как не налететь на грабли: оформление и выплаты при валютной удалёнке из России

Если вы следили за нашим мини-сериалом о валютной удаленке, то уже знаете:

🔜 Как найти зарубежную удалёнку и зарабатывать больше

🔜 Как пройти путь от резюме до оффера

И вот финальная часть — потому что оффер это только начало.

Что в статье:

📍 Все легальные способы получения валютных выплат, от ИП в Грузии до пейролл-сервисов.

📍 Реальные риски: блокировки, штрафы, политическая турбулентность.

📍 Юридические тонкости и что писать в контракте, чтобы не остаться без денег.

📍 Как не влететь на налоги и почему «авось» — плохой бизнес-план.

Читать гайд по выживанию айтишника в валютных джунглях 🔗
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3👍2🥱1
💡 Заставляем C# говорить

OpenAI запустили универсальную аудио-модель, и теперь можно делать магию. Semantic Kernel уже умеет с ней работать, осталось только подключить и собрать что-то своё.

Что для этого нужно:
• SemanticKernel
• HttpClient
• OpenAIAudioChatCompletionService (входит в SemanticKernel)

Пример на C#:
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.OpenAI;
using Microsoft.SemanticKernel.Audio;

// Конфиг
string apiKey = "sk-...";
string model = "gpt-4o";

// Создаем Kernel
var builder = Kernel.CreateBuilder();
builder.AddOpenAIChatCompletion(model, apiKey);

// Подключаем аудио-модель
builder.Services.AddOpenAIAudioChatCompletion(model, apiKey);
var kernel = builder.Build();

// Аудиофайл на вход (WAV или MP3)
var audioPath = "audio_input.wav";
var audioFile = new FileInfo(audioPath);

// Запускаем аудио-комплит
var audioChatService = kernel.GetRequiredService<IAudioChatCompletionService>();

var response = await audioChatService.GetAudioChatMessageContentAsync(
new OpenAIAudioChatRequestSettings { ResponseFormat = AudioResponseFormat.MP3 },
new AudioChatMessageContent(AuthorRole.User, audioFile)
);

// Сохраняем ответ в файл
await File.WriteAllBytesAsync("response.mp3", response.Audio);


Что происходит под капотом?
1. Модель GPT-4o получает аудиофайл

2. Распознаёт текст (ASR)

3. Генерирует ответ

4. Конвертирует его в речь

5. Возвращает MP3-ответ

💬 Уже придумали где применить? Админ бы заставил приложение ругаться на пользователя🧑‍💻 Делитесь своими идеями в комментариях 👇

➡️ Подробнее в блоге Microsoft

🐸Библиотека шарписта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥204👍3
Шарписты!

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

➡️Поддержать канал: https://t.iss.one/boost/csharpproglib
Please open Telegram to view this post
VIEW IN TELEGRAM
1🥱11👍31
🕸 Как работает протокол HTTP/2: основные принципы и преимущества в сравнении с HTTP/1.1

​HTTP/2 — это как переход с однополосной дороги HTTP/1.1 на скоростное шоссе: быстрее, эффективнее и без пробок.

Узнайте, как новые технологии ускоряют загрузку веб-страниц и улучшают работу приложений.

➡️ Читать статью

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🛠 Команда дня: git range-diff

Вы сделали git rebase, всё вроде ок, но остаётся неприятное чувство неопределённости — а всё ли пошло так, как надо? Вот тут и приходит на помощь git range-diff.

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

Полезно после rebase или перед force-push, когда важно убедиться, что вы ничего случайно не потерли.

Пример:
git range-diff origin/main...HEAD


Сравнивает текущую ветку с origin/main, показывая, какие коммиты изменились, удалились или переехали.

🐸Библиотека шарписта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19