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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
加入频道
🛠 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://yangx.top/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
🌐 Чек-лист: как искать работу

Чтобы не застрять в вечной отладке своей карьеры, держим в голове (и перед глазами) понятный план. Вот чек-лист на период поиска:

Обновите резюме и профиль (да, и GitHub тоже)

Ваш профиль — это витрина. Убедитесь, что в нём отражены:
• актуальные технологии (например, .NET 6/7/8, Blazor, ASP.NET, Azure и т. д.).
• понятные результаты («реализовал систему логирования» , а не «писал код»).
• ссылки на GitHub с чистыми, осмысленными проектами — лишнее желательно скрыть или удалить.

Сформулируйте ключевые навыки и корректные поисковые запросы.

Большинство рекрутеров используют автоматические фильтры. Включите в резюме чёткие названия технологий: Entity Framework Core, LINQ, RabbitMQ, Docker, CI/CD, Kubernetes.

Следите за вакансиями регулярно, но без стресса

• Настройте уведомления на LinkedIn, Habr Career, hh.
• Подпишитесь на каналы с вакансиями, например, наш канал с вакансиями для шарпистов.

Готовьтесь к собеседованиям заранее

• Освежите базовые концепции вроде async/await, Dependency Injection, SOLID, разберитесь в нюансах работы ASP.NET.
• Подумайте заранее, какие проекты вы можете описать как удачные кейсы.
• Поработайте над формулировками, которые показывают ваш вклад — рекрутеры ценят конкретику.

💬 Сколько в среднем ищете работу? Пару дней или пару месяцев? Пишите в комментарии👇

🐸Библиотека шарписта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6👾1
🎮🔌 4 cамых популярных фреймворка для разработки онлайн-игр на Unity

Сетевое взаимодействие — это сердце многопользовательской игры, и правильный выбор фреймворка это решающий фактор для проекта.

Посмотрите обзор самых популярных фреймворков для разработки онлайн-игр на Unity и выберите тот, который подходит для вашего проекта.

➡️ Читать обзор

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
🙈 Что скрывает дисперсия: разгадка секрета точных ML-моделей

Представьте, что вы строите модель, которая прекрасно работает на тренировочных данных, но стоит подать ей новые примеры... и всё рушится. Знакомо? За этим почти всегда скрывается неправильное обращение с дисперсией.

🧐 Но что, если есть простая формула, способная:

• Мгновенно определить, насколько «разбросаны» ваши данные

• Значительно улучшить точность ваших ML-моделей

• Помочь обнаружить аномалии, которые вы раньше не замечали

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

Хотите узнать, как находить идеальный баланс в своих моделях, причем тут Random Forest и много другого о Data Science?

Тогда смотрите бесплатный вебинар от Proglib: https://proglib.io/w/0138fb1c
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2😁1
🤨 Что такое «Middle+» в IT

Рынок IT полон загадок, но одна из самых частых — что вообще значит “Middle+” разработчик? Где та тонкая грань между «ещё джун» и «уже можно доверить продакшн»?

💬 В чате наша подписчица спросила:
В вакансии увидела упоминание «владение языком C# на уровне middle+» — задумалась, а что это вообще значит? Что именно нужно знать и уметь?


💭 Один вариант ответа был такой:
Всякие особенности языка — это уже не совсем про middle+. Это только один из критериев.
Middle+ — это когда ты уже можешь затащить сложные задачи, брать на себя ответственность, делиться знаниями, декомпозировать задачи, быстро погружаться в незнакомый проект.
То есть тебя можно кинуть на новый проект — и ты не "заплюхаешься".


💬 А вы как оцениваете уровень middle+? Что важнее: знание языка или поведение в проекте? 👇

🐸Библиотека шарписта #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍101
👀 Что посмотреть: C# — это Java, сделанная правильно

Java и C# — зрелые, мощные платформы с крупными экосистемами, устойчивыми карьерными возможностями и богатым инструментарием.

Но язык — это не только про возможности. Это ещё и про то, как с ним живётся каждый день.

В видео подробно, но без фанатизма сравниваются разные аспекты языков.

➡️ Смотреть видео

🐸Библиотека шарписта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
😁92👍2
💡 .NET 10 Preview 3

Microsoft выпустила третью превью-версию .NET 10. Без громких анонсов, но с рядом улучшений, которые делают повседневную разработку немного приятнее.

Что нового:

1️⃣ Улучшения System.Text.Json

Добавлены новые атрибуты и возможности кастомной сериализации.

2️⃣ Поддержка инстанцирования generic-атрибутов
Теперь можно использовать обобщённые атрибуты с параметрами типа.

3️⃣ Native AOT для WebAPI
Возможность собирать WebAPI с Native AOT компиляцией.

4️⃣ Новые Roslyn Source Generators
Расширение генераторов кода — в том числе улучшения для CallerArgumentExpression, и лучшее поведение при компиляции.

5️⃣ Уточнения по поддержке Linux и WASI
.NET продолжает фокусироваться на кроссплатформенности: WebAssembly System Interface становится приоритетом.

➡️ Подробности в блоге разработчиков

🐸Библиотека шарписта #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
🔧 Когда ваш C#-проект больше похож на замок, чем на приложение

Вы декомпозируете классы с такой тщательностью, будто строите ферму мобов?
А async/await у вас организованы лучше, чем сундуки с шалкерами?
Ваши interface'ы такие продуманные, что Стив бы поставил лайк.

😅 Признайтесь: вы не просто пишете код — вы его зачаровываете.

➡️ Самое время проверить, где заканчивается C# и начинается Minecraft

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