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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
Разработка веб-API CRUD с помощью Data API Builder и EF Core Power Tools

Data API Builder позволяет создавать веб-API CRUD на основе файла конфигурации json, с подержкой REST и GraphQL. Этот кроссплатформенный инструмент также включает CLI для создания довольно сложного файла конфигурации.

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

Благодаря возможностям EF Core Power Tools по реверсу баз данных вы можете за считанные секунды создать эти операторы командной строки и запустить API с помощью команды dab start.

Что вам необходимо?

1️⃣ Существующая база данных Azure SQL, SQL Server, Postgres или MySQL, которую вы хотите использовать в качестве CRUD-API.
2️⃣ Проект Visual Studio 2022 для хранения файлов конфигурации в системе контроля версий.
3️⃣ Установленная последняя версия EF Core Power Tools.

👉 Читать гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Класс BinaryFormatter удален из .NET 9

У вас есть два варианта решения данной проблемы:

✔️ Мигрируйте с BinaryFormatter на другие решения. В руководстве по миграции перечислены несколько кейсов.
✔️ Продолжайте использовать BinaryFormatter в .NET 9, но в данном случае вам придется полагаться на неподдерживаемый NuGet-пакет System.Runtime.Serialization.Formatters.

👉 Подробнее
Please open Telegram to view this post
VIEW IN TELEGRAM
🛤👾 Приключения с F# и Godot

Godot — игровой движок, который имеет нативную поддержку .NET. К сожалению, эта поддержка до такой степени заточена под C#, что F# она выходит боком. Автор делится опытом решения возникших проблем при работе с F# + Godot:

🟠An incursion under C#. Протаскиваем F# в Godot
🟠Шестидесятилетний заключённый и лабораторная крыса. F# на Godot. Часть 1. Встреча с фреймворком
Please open Telegram to view this post
VIEW IN TELEGRAM
🛠️ TUnit — современный, гибкий и быстрый фреймворк для тестирования проектов .NET 8+ с поддержкой приложений Native AOT и Trimmed Single File.

Фреймворк построен на базе Microsoft.Testing.Platform, в отличие от старой платформы VSTest. Поскольку инфраструктура за кулисами новая и другая, вам может потребоваться включить некоторые настройки.

👉 GitHub
💻🔍💼 Кризис IT-рынка: как джуны и кадровый голод меняют правила игры

В условиях нехватки опытных специалистов и наплыва джунов, IT-компании вынуждены искать нестандартные подходы к найму. Рассмотрим основные тренды и стратегии адаптации рынка.

Читать статью

#почитать
🥳 Новый формат .NET-решения .slnx теперь доступен в последней превью-версии Rider

Этот формат находится в режиме превью в Visual Studio, а теперь еще и в Rider. Кажется, с новым форматом улучшена читаемость и возможность слияния (mergeability). Выше — пример различий по сравнению с существующим форматом для простого решения.

#dotnet #csharp #tip by Dave Callan
👩‍💻 Работа с tar-файлами в .NET 8

Еще в 2022 году .NET 7 получил поддержку для работы с tar файлами в базовой библиотеке классов.

Эндрю Лок как обычно во всем разобрался и описал, как выполнять некоторые базовые операции с tar-файлами, как он обычно использую CLI-утилиту tar и как вместо этого использовать встроенную в .NET поддержку.

using System.Formats.Tar;
using System.IO.Compression;

string sourceDir = "./my-files";
string outputFile = "./myarchive.tar.gz";

using FileStream fs = new(outputFile, FileMode.CreateNew, FileAccess.Write);
using GZipStream gz = new(fs, CompressionMode.Compress, leaveOpen: true);

TarFile.CreateFromDirectory(sourceDir, gz, includeBaseDirectory: false);


👉 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
😮 SQL: от Тетриса до ИИ — неожиданные возможности языка баз данных

Долгое время SQL использовали лишь для запросов и изменения записей в базах данных — для полноценного программирования в привычном смысле слова он не подходил. Однако добавление рекурсивных общих табличных выражений (CTE) сделало SQL полным по Тьюрингу. Рекурсивные CTE состоят из двух частей:

• Нерекурсивная часть (базовый случай) — создает начальные данные.
• Рекурсивная часть — может выполняться много раз, каждый раз используя результат предыдущего шага.

Благодаря CTE на SQL можно при желании реализовать любой алгоритм. Энтузиасты уже сделали:

Визуализацию множества Мандельброта с помощью ASCII-графики.
3D-движок для рисования объемных фигур.
GPT на 500 строках SQL-кода. Подробная статья о реализации этого проекта опубликована здесь.
Трассировку лучей (это метод создания реалистичных изображений).

На прошлой неделе коллекция крутых SQL-проектов пополнилась еще одной интересной разработкой — версией «Тетриса».

Эта реализация демонстрирует несколько нестандартных SQL-техник, о которых стоит знать, даже если вы используете SQL только по прямому назначению:

• игровой цикл;
• вывод игры;
• пользовательский ввод;
• решение проблемы изоляции данных;
• предотвращение кэширования.

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

🔗 Подробнее читайте в статье
🔗 Зеркало
⚙️ Подпишись на нашу еженедельную email-рассылку, чтобы быть в курсе последних открытий и тенденций в мире бэкенда.

В еженедельных письмах ты найдешь:
● Языки программирования и фреймворки для бэкенда
● Архитектура и проектирование серверных приложений
● Базы данных и управление данными
● Безопасность и защита данных
● Облачные технологии и DevOps
● API и интеграции
● Тестирование и отладка
● Инструменты и утилиты для бэкенд-разработчиков
● Лучшие практики и паттерны проектирования

👉Подписаться👈
📖 Обзор книги «Грокаем алгоритмы», Адитья Бхаргава

Направление: #proglib_algorithms
Уровень: #proglib_junior

Автор применяет уникальный визуальный подход, с помощью которого объясняет базовые концепции, такие как сортировка, рекурсия, алгоритм Дейкстры, и многие другие. Благодаря большому количеству иллюстраций и практическим примерам, книга превращается в практическое руководство, особенно полезное для тех, кто только начинает своё знакомство с алгоритмами. Все примеры адаптированы под Python 3, что делает их актуальными для современных разработчиков.

💬 Что говорят люди:

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

Плюсы:

- Иллюстрации всё решают — если вам сложно понять текстовое объяснение, то более 400 наглядных схем точно помогут понять сложные алгоритмы.
- Понятно даже без математики — никакой сложной терминологии и математических уравнений. Бхаргава берёт сложные темы и объясняет их простым языком, делая алгоритмы доступными даже тем, кто не любит математику​.
- Практичность на первом месте — каждый алгоритм сопровождается кодом на Python 3, что помогает сразу применять изученное в реальных задачах​.

Минусы:

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

🖊 Об авторе:

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

Скидка 25% по промокоду: proglib

Купить книгу
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔FluentValidation: прекратите проверять правила при первой ошибке

По умолчанию он проверяет все правила и объединяет сообщения об ошибках. Более эффективно устанавливать CascadeMode либо на уровне класса, либо на уровне цепочки правил, особенно при использовании MustAsync и асинхронных операций.

#dotnet #csharp #tip by Saeed Esmaeelinejad
Please open Telegram to view this post
VIEW IN TELEGRAM
Испытываете ли вы тревогу из-за распространения ИИ-ассистентов для написания кода/решения рабочих задач?
Anonymous Poll
19%
Да 😔
79%
Нет 😎
2%
Свой вариант (напишу в комментарии)
🤖 В июне команда .NET запустила первую бета-версию библиотеки OpenAI, что позволило разработчикам интегрировать продвинутые ИИ-модели в свои приложения. Несколько дней назад представлен релиз официальной библиотеки OpenAI для .NET. Этот выпуск гарантирует плавную и надежную интеграцию для разработчиков, работающих с OpenAI и Azure OpenAI в своих .NET- приложениях.

Основные фичи:

✔️ Упрощение интеграции новых моделей OpenAI в .NET-приложения (GPT-4o, GPT-4o mini, o1-preview и o1-mini).
✔️ Полная поддержка REST API OpenAI: включает Assistants v2 и Chat Completions для гибкого взаимодействия.
✔️ Расширяемость: библиотека спроектирована с учетом возможностей расширения, что позволяет сообществу создавать дополнительные библиотеки.
✔️ Синхронные и асинхронные API: предоставляют разработчикам гибкость в использовании синхронных или асинхронных моделей.
✔️ Доступ к streaming completions через IAsyncEnumerable<T>, что открывает новые динамичные модели взаимодействия.
✔️ Совместимость с .NET Standard 2.0: библиотека написана на C# и поддерживает все версии .NET, реализующие .NET Standard 2.0.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Как можно аннотировать основной конструктор атрибутом?

Ранее, если у записи/класса/структуры было несколько конструкторов, возникала проблема с десериализацией, так как необходимо было указать атрибут JsonConstructor в основном конструкторе.

Начиная с C# 12, можно использовать method attribute target для указания конструктора☝️

#dotnet #csharp #tip by Oleg Kyrylchuk