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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
⚙️ Пайпы в F#: как писать чистый и читаемый код

Если вы работаете с F#, то наверняка слышали о пайпах (pipes). Это инструмент языка, который помогает писать код в стиле "конвейера", делая код читаемым и выразительным. Давайте разберем, как они работают и зачем их использовать.

Что такое пайпы?

Пайпы — это операторы, которые передают результат одной функции в качестве входного аргумента другой. В F# есть два оператора:

1️⃣ Прямой пайп (|>) — этот оператор передает значение слева в функцию справа b используется чаще всего. Он делает код более линейным и похожим на "конвейер".
Пример:
let add x y = x + y
let multiplyBy2 x = x * 2

// Без пайпа
let result1 = multiplyBy2 (add 3 4) // 3 + 4 = 7, затем 7 * 2 = 14

// С пайпом
let result2 = add 3 4 |> multiplyBy2 // То же самое, но более читаемо


2️⃣ Обратный пайп (<|) — этот оператор передает значение справа в функцию слева и менее популярен.
Пример:
let result = multiplyBy2 <| add 3 4 // То же, что и multiplyBy2 (add 3 4)


3. Зачем использовать пайпы?

Код становится линейным и понятным.

Не нужно вкладывать вызовы функций в скобки.

Пайпы подчеркивают функциональную природу F#.

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14😁4🥰3💯1
😊 Привет, шарписты!

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

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱2🌚1👾1
😊 Спасибо за ваши ответы!
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉8🤔5
🆚 Microsoft vs JetBrains: Битва гигантов за сердца разработчиков

В мире разработки ПО разгорается война — на этот раз между Microsoft и JetBrains! Обе компании в один день представили обновления с искусственным интеллектом для своих инструментов:

➡️ Microsoft: GitHub Copilot теперь бесплатен в Visual Studio

Бесплатный доступ к GitHub Copilot для всех пользователей Visual Studio. Никаких подписок или кредитных карт — только аккаунт GitHub.

💡 Особенности:

• Продвинутые AI-модели для генерации кода

• Редактирование нескольких файлов за раз

• Умный чат, авто-коммиты и улучшенная отладка.

➡️ JetBrains: Junie — ваш личный AI-агент в IDE

Что умеет Junie?

• Делегируйте рутину: генерация кода, тесты, проверка стиля — всё на авторежиме.

• 53.6% задач решает с первого запуска (данные SWEBench).

• Адаптируется под ваш стиль: анализирует проект и учится у вас.

• Полный контроль: все изменения можно проверить и поправить вручную.

Пока Junie доступен только через лист ожидания для IntelliJ, PyCharm и других IDE.

📌 Подробности в блоге Microsoft и JetBrains

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍161🤔1👾1
🛑 10 антипаттернов в C#, которые тормозят ваше приложение (и как их исправить)

Производительность — это не только про оптимизацию сложных алгоритмов. Часто проблемы кроются в мелочах: лишние аллокации, блокировки потоков или неэффективные запросы к базе данных. Эти ошибки могут оставаться незамеченными, пока приложение не начнёт «тормозить» под нагрузкой.

1️⃣ Лишние аллокации объектов

Проблема: частое создание временных объектов нагружает сборщик мусора, что приводит к паузам в работе приложения.

Решение:

• Используйте пулы объектов (ArrayPool, MemoryPool) для переиспользования памяти.
• Для небольших данных применяйте struct вместо class.

// Плохо: аллокация на каждый вызов  
var buffer = new byte[1024];

// Лучше: переиспользуем память
var pool = MemoryPool<byte>.Shared;
using (var owner = pool.Rent(1024))
{
var buffer = owner.Memory;
// Работа с буфером
}


2️⃣ Блокировка асинхронного кода

Проблема: Использование .Result или .Wait() блокирует текущий поток, что может привести к дедлокам, особенно в UI-приложениях.

Решение:

• Цепочка async/await должна идти от начала до конца.
• В библиотечных методах используйте .ConfigureAwait(false).

Пример:
// Плохо: блокировка потока  
public string GetData() => FetchDataAsync().Result;

// Лучше: полная асинхронность
public async Task<string> GetDataAsync() => await FetchDataAsync();


3️⃣ Неэффективные запросы к БД

Проблема:

• N+1 запросы в ORM (например, Entity Framework).
• Отсутствие индексов или выборка лишних данных.

Решение:

• Используйте .Include() для жадной загрузки связанных данных.
• Применяйте пагинацию (Skip/Take) и индексы.

// Плохо: N+1 запросов  
var orders = context.Orders.ToList();
foreach (var order in orders)
{
var customer = context.Customers.Find(order.CustomerId);
}

// Лучше: один запрос с JOIN
var orders = context.Orders.Include(o => o.Customer).ToList();


➡️ Эти 3 антипаттерна — частые «узкие места». Проверьте их в своём коде, а остальные 7 примеров смотрите в статье
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🥱103
📔Microsoft открывает исходный код DocumentDB: новый стандарт для NoSQL баз данных на основе PostgreSQL

23 января 2025 года Microsoft объявила о выпуске DocumentDB — открытой платформы для документоориентированных баз данных, которая лежит в основе Azure Cosmos DB для MongoDB на базе vCore.

Этот шаг стал важным моментом в мире open source, предлагая разработчикам новый стандарт для NoSQL баз данных, построенный на мощном движке PostgreSQL.

Основные компоненты DocumentDB

pg_documentdb_core — кастомное расширение PostgreSQL, оптимизированное для работы с BSON (Binary JSON). Оно поддерживает:

• Индексацию полей (включая составные и геопространственные индексы).

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

• Аутентификацию SCRAM.

pg_documentdb_api — слой данных, реализующий CRUD-операции, запросы и управление индексами.

🐳 Как начать использовать DocumentDB

1. Установите Docker.

2. Клонируйте репозиторий DocumentDB:
git clone https://github.com/microsoft/documentdb.git  


3. Создайте Docker-образ и запустите контейнер:
docker build . -f .devcontainer/Dockerfile -t documentdb  
docker run -v $(pwd):/home/documentdb/code -it documentdb /bin/bash


4. Соберите и установите бинарные файлы:
cd code  
make
sudo make install


5. Запустите сервер DocumentDB:
./scripts/start_oss_server.sh -t documentdb  


6. Подключитесь к серверу через psql:
psql -p 9712 -h localhost -d postgres


📎 Официальный анонс

🐸Библиотека шарписта #новость
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍2🤔1
Forwarded from Библиотека программиста | программирование, кодинг, разработка
😂 Dev Memes: утренние дилеммы, правки и зарплаты

Третья неделя года позади, а мы всё ещё смеёмся над мемами. Ловите подборку лучших шуток из нашего канала «Библиотека IT-мемов».

🔗 Подборка самых топовых мемов
😁212
💡 Application Pipeline или Reuse Pipeline

В разработке ПО часто обсуждаются два подхода: Application Pipeline и Reuse Pipeline. Понимание различий между этими подходами помогает оптимизировать процессы разработки и повысить эффективность работы.

➡️ Конвейер приложений (Application Pipeline):

• Цель: предоставление конкретных функций для конечного пользователя.

• Пример: веб-приложение с аутентификацией, маршрутизацией и логированием.

➡️ Конвейер повторного использования (Reuse Pipeline):

• Цель: создание компонентов, которые можно использовать в разных системах.

• Пример: библиотека для аутентификации, применимая в нескольких приложениях.

📎 Подробнее о каждом подходе

Пишите в комментариях под какой конвейер подходит ваш текущий проект и почему 👇

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