ru
Feedback
Библиотека шарписта | C#, F#, .NET, ASP.NET

Библиотека шарписта | C#, F#, .NET, ASP.NET

Открыть в Telegram

Все самое полезное для C#-разработчика в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/b60af5a4 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

Больше
22 394
Подписчики
-724 часа
-357 дней
-12830 день
Архив постов
👨‍💻 Поддержка and! в task-вычислениях F# 10 В F# 10 библиотека FSharp.Core получила улучшение — поддержку оператора and! в вычислительном выражении task. Раньше, чтобы ждать несколько задач параллельно, нужно было либо ждать их последовательно:
task {
    let! a = fetchA()
    let! b = fetchB()
    return combineAB a b
}
Либо использовать Task.WhenAll для ожидания сразу всех:
task {
    let ta = fetchA()
    let tb = fetchB()
    let! results = Task.WhenAll([| ta; tb |])
    return combineAB ta.Result tb.Result
}
Первый вариант простой, но последовательный, второй — параллельный, но сложнее по синтаксису. Теперь с оператором and! можно одновременно ждать несколько задач легко и понятно:
task {
    let! a = fetchA()
    and! b = fetchB()
    return combineAB a b
}
Это сочетает простоту первого примера с параллельным исполнением из второго. Код становится компактным и выразительным. 🔹 Практический интенсив «Архитектуры и шаблоны проектирования» 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸Библиотека шарписта #sharp_view
Показать все...
🥰 2
⚙️ Используйте AsNoTracking() для запросов только на чтение Если нужно получить данные из базы без их изменения, лучше использовать AsNoTracking():
var posts = await db.Posts.AsNoTracking()
    .Where(p => p.Published)
    .ToListAsync(ct);
Метод AsNoTracking() говорит Entity Framework не отслеживать изменения для полученных объектов. 🔹 Практический интенсив «Архитектуры и шаблоны проектирования» 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸Библиотека шарписта #sharp_view
Показать все...
👍 13🥱 6
Фото недоступноПоказать в Telegram
Math for .NET Developers Использовать ML.NET или Accord.net — это полдела. Чтобы кастомизировать модели и понимать, почему сеть не сходится, нужно лезть под капот. Там живут матрицы, производные и векторы. Завтра стартуем курс «Математика для разработки AI-моделей». 🛠 Темы: Линал, матан, теорвер. 💸 Цена: 28 200 ₽ (новогодний прайс). ⏱ Дедлайн: Старт завтра. Интегрируйте знания в свой стек: 🔗 Ссылка на курс Debug your math: @proglib_academy_webinar_bot
Показать все...
😁 5 2🤔 1
Фото недоступноПоказать в Telegram
🛠 .NET MAUI и работа с возрастом С началом 2026 года в США вступают в силу новые требования по верификации возраста пользователей для мобильных и десктопных приложений. Да, это затрагивает несколько штатов в США, но стоит держать руку на пульсе. .NET MAUI предоставляет удобный способ решения этой задачи с помощью единого интерфейса IAgeSignalService и трёх платформо-специфичных реализаций: • Для Android используется Google Play Age Signals API, который возвращает пять статусов в зависимости от ситуации: от подтверждённого возраста до ожидания одобрения опекуна. • На iOS применяется Apple Declared Age Range API, работающий на устройствах с iOS 26 и выше, отображающий возрастной диапазон и информацию о том, кто его подтвердил — сам пользователь или опекун. • Windows предлагает Windows Age Consent API с упрощённой классификацией пользователей на три категории: ребёнок, несовершеннолетний и взрослый. Главное преимущество — единая точка интеграции и адаптация под каждый API за счёт условной компиляции и инъекции зависимостей. Достаточно подключить сервис в MauiProgram, чтобы обеспечить проверку возраста на нужной платформе. ➡️ Блог Microsoft 🔹 AI-агенты для DS-специалистов 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸Библиотека шарписта #sharp_view
Показать все...
5👍 3
🛠 Строгая проверка назначения атрибутов в F# 10 В F# 10 компилятор стал жёстко проверять, что атрибуты применяются только к тем конструкциям, для которых они предназначены. Это касается функций, значений, объединений, конструкторов, структур, классов и других элементов. Раньше F# позволял неявно применять атрибуты к неподходящим целям без предупреждений. Из-за этого возникали баги, например: • Тестовые атрибуты не работали, если функция не имела (), и тесты не запускались • Атрибуты-анализаторы иногда игнорировались, приводя к сбоям в CI без очевидной причины. Пример такого кода, который никак не работал:
[<Fact>]
let ``this is not a function`` =  // никак не запускался тест
    Assert.True(false)
Теперь компилятор выдаёт предупреждение при неверном применении атрибутов:
[<Fact>]
//^^^^ предупреждение FS0842: атрибут нельзя применять к свойству, полю и т.п.
let ``works correctly`` =
    Assert.True(true)
Атрибуты должны применяться только к совместимым элементам, например, к методам. 🔹 Алгоритмы и структуры данных 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸Библиотека шарписта #sharp_view
Показать все...
🥰 2🌚 2👍 1
🧑‍💻 Проекция колонок вместо сущностей в запросах Когда работаете с базой данных, лучше получить только нужные поля, а не всю сущность. Это ускорит запросы и снизит объём передаваемых данных. Пример проекции колонок с использованием LINQ:
var dto = await db.Users
    .Where(u => u.Id == id)
    .Select(u => new UserDto(u.Id, u.Name))
    .SingleOrDefaultAsync(ct);
Здесь из таблицы пользователей выбираются только Id и Name, которые помещаются в объект UserDto. 🔹 ML для старта в Data Science 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸Библиотека шарписта #il_люминатор
Показать все...
🥰 2👍 1
🌲 Подборка вакансий для шарпистов C#/.NET Developer на удалёнку C#/.NET Developer с ЗП от 2 500 до 5 000$ C# / .NET Разработчик, middle, middle+ — от 190 000 до 290 000 ₽ 🔸 AI-агенты для DS-специалистов 🔸 Получить консультацию менеджера 🔸 Сайт Академии 🔸 Сайт Proglib ➡️ Еще больше топовых вакансий — в нашем канале C# Jobs 🐸 Библиотека шарписта
Показать все...
🔍 Устаревший синтаксис в F# 10 Раньше F# позволял опускать ключевое слово seq при создании последовательностей, что выглядело так:
{ 1..10 } |> List.ofSeq  // неявная последовательность
Это была особенность синтаксиса, но она расходилась с остальными вычислительными выражениями в языке и могла сбивать с толку. Теперь компилятор рекомендует явно писать seq, чтобы сделать код однозначным и понятным:
seq { 1..10 } |> List.ofSeq
Сейчас это предупреждение, а не ошибка, чтобы дать время адаптироваться и исправить код. Но в будущих версиях F# это может превратиться в ошибку. 🔸 AI-агенты для DS-специалистов 🔸 Получить консультацию менеджера 🔸 Сайт Академии 🔸 Сайт Proglib 🐸 Библиотека шарписта #sharp_view
Показать все...
Фото недоступноПоказать в Telegram
Показать все...
😁 47💯 6 1
Фото недоступноПоказать в Telegram
📞 Комбинации букв телефонного номера: решение за один проход рекурсии Задача — сгенерировать все возможные буквенные комбинации по цифрам телефона, где каждая цифра соответствует набору букв. Идея решения: для каждой цифры берём соответствующие буквы и рекурсивно добавляем их к уже сформированным комбинациям. Алгоритм: 1. Если входная строка пуста, возвращаем пустой результат 2. Используем массив с отображением цифр на наборы букв. 3. Рекурсивно проходим по цифрам, добавляя буквы к текущей комбинации 4. Когда достигнут конец строки, сохраняем сформированную комбинацию. Решение:
public class Solution {
    private static readonly string[] map = { "", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" };

    public IList<string> LetterCombinations(string digits) {
        var result = new List<string>();
        if(string.IsNullOrEmpty(digits))
            return result;
        Backtrack(digits, 0, new StringBuilder(), result);
        return result;
    }

    private void Backtrack(string digits, int index, StringBuilder current, List<string> result) {
        if(index == digits.Length) {
            result.Add(current.ToString());
            return;
        }

        string letters = map[digits[index] - '0'];
        foreach(char c in letters) {
            current.Append(c);
            Backtrack(digits, index + 1, current, result);
            current.Length--;
        }
    }
}
🔸 ML для старта в Data Science 🔸 Получить консультацию менеджера 🔸 Сайт Академии 🔸 Сайт Proglib 🐸Библиотека шарписта #dotnet_challenge
Показать все...
7🥰 2🤔 1
Фото недоступноПоказать в Telegram
📘 4 декабря стартует набор на курс «Математика для разработки AI-моделей» Если вы работаете с моделями или хотите перейти в DS/ML, декабрь — идеальный момент закрыть фундаментальные пробелы. На курсе вы разберёте ключевые разделы, которые лежат в основе современных AI-моделей: линейная алгебра, анализ, оптимизация, математический анализ, вероятности, статистика. Всё через практику в Python. В программе живые занятия с экспертами AI-индустрии (SberAI, ВШЭ, WB&Russ), разбор реальных задач, квизы и финальный проект. 🌐 Формат: онлайн + доступ к записям 🎁 Бонусы: курс «Школьная математика» в подарок, бесплатный тест по математике После лекций будет разбор ваших решений и возможность задать вопросы преподавателям. 👉 Записаться на курс
Показать все...
🥰 2
✏️ Запрет псевдо-вложенных модулей внутри типов в F# 10 В F# 10 добавили важное правило: теперь нельзя объявлять модуль внутри определения типа с тем же уровнем отступа, как сам тип. Это выглядело как вложенный модуль, но на самом деле модуль создавался на одном уровне с типом — то есть был соседом, а не дочерним элементом. Пример из старого кода:
type U =
    | A
    | B
    module M =  // на самом деле не вложенный модуль
        let f () = ()
Правильный код:
type U =
    | A
    | B

module M =
    let f () = ()
Это предотвращает частую ошибку, когда модуль кажется «вложенным» в тип, но на самом деле не является таковым. 🔸 Получить консультацию менеджера 🔸 Сайт Академии 🔸 Сайт Proglib 🐸Библиотека шарписта #sharp_view
Показать все...
👍 4👾 2🌚 1
Фото недоступноПоказать в Telegram
Хватит плохих новостей Такое ощущение, что плохих новостей вокруг уже больше, чем уведомлений от коллег. Наткнулись на канал с позитивными новостями и это как антидот к новостному шуму и думскроллингу, где можно сознательно переключиться в режим у мира ещё есть шансы. 🤌 Бонусы для подписчиков:Скидка 40% на все курсы АкадемииРозыгрыш Apple MacBookБесплатный тест на знание математики 🐸Библиотека шарписта
Показать все...
🤩 5🥱 1
Фото недоступноПоказать в Telegram
📰 Последняя неделя ноября Ноябрь вот-вот закончится, а мы подводим итоги недели. Куда катится .NET Microsoft выкатили большой лонгрид про то, как .NET в .NET 10 окончательно переезжает на Unified Build — виртуальный монорепозиторий и вертикальные сборки, чтобы быстрее и предсказуемее собирать весь продукт. — Ивент про ИИ .NET‑команда анонсировала бесплатный онлайн‑ивент .NET Day on Agentic Modernization, который пройдёт 9 декабря 2025 — Redis 8.4 Redis выкатили версию, которая одновременно ускоряет кэш, упрощает жизнь кластерам и делает Redis куда более удобным движком для AI и гибридного поиска — GitHub Copilot TestingПерестаньте ждать, пока вас найдутКарьерная «страховка» для IT‑шника 🫶 Бонусы для подписчиков:Скидка 40% на все курсы АкадемииРозыгрыш Apple MacBookБесплатный тест на знание математики 🐸Библиотека шарписта #async_news
Показать все...
3🤩 1
00:11
Видео недоступноПоказать в Telegram
🔥 Хочешь строить свои AI-модели, а не просто запускать чужие? Proglib.academy открывает курс «Математика для разработки AI-моделей» — программу, которая превращает понимание ML из «черного ящика» в осознанную инженерную работу. 📌 Почему без математики в AI никуда: → Чтобы пройти собеседование. Это первый фильтр: линал, матстат, оптимизация — спрашивают везде. → Чтобы понимать процесс изнутри. Инженер AI должен понимать, почему и как работает модель, а не просто жать fit(). 🎓 Что будет на курсе: → 3 практических задания на Python + финальный проект с разбором от специалистов; → программа обновлена в ноябре 2025; → за 2 месяца пройдёшь весь фундамент, нужный для работы с моделями; → преподаватели — гуру математики, методисты и исследователи из ВШЭ и индустрии. 🎁 Бонусы ноября: — 40% скидка; — получаешь курс «Школьная математика» в подарок; — короткий тест и узнать свой уровень. 🔗 Подробнее о курсе
Показать все...
Шаблоны_для_рилсов_и_stories_1080_x_1920_пикс_2025_11_29T09.mp47.25 KB
😁 1
👨‍💻 DbContext в ASP.NET Core лучше оставлять scoped В ASP.NET Core есть негласное правило DbContext живет ровно столько, сколько живет HTTP запрос. Эту модель Microsoft прямо закладывает в документацию, ведь DbContext задуман как короткоживущий объект под одну единицу работы одну бизнес операцию и один вызов SaveChanges. Когда вы регистрируете контекст так:
builder.Services.AddDbContext<AppDb>(opt =>
    opt.UseNpgsql(connString));
контейнер DI по умолчанию регистрирует AppDb с временем жизни Scoped. Это значит новый экземпляр создается на каждый запрос и шарится только между сервисами внутри этого запроса. Если сделать DbContext Singleton вы получите общий экземпляр на все запросы сразу и это прямой путь к гонкам, утечкам и странным багам. 🤌 Бонусы для подписчиков:Скидка 40% на все курсы АкадемииРозыгрыш Apple MacBookБесплатный тест на знание математики 🐸Библиотека шарписта #sharp_view
Показать все...
👍 6 4👾 1
Фото недоступноПоказать в Telegram
😂 Я ставлю X. Ваш ход 🐸Библиотека шарписта #garbage_collector
Показать все...
7😁 4
💻 Поддержка паттерна discard в use! в F# 10 Раньше в use! вычислительных выражениях нельзя было указать _ для игнорирования результата, что заставляло создавать ненужные имена переменных, например, __ или _ignored. Теперь можно прямо написать:
use! _ = acquireResourceAsync()
Это обозначает, что ресурс используется только для управления временем жизни, и его значение не будет задействовано в коде. 🤌 Бонусы для подписчиков:Скидка 40% на все курсы АкадемииРозыгрыш Apple MacBookБесплатный тест на знание математики 🐸Библиотека шарписта #sharp_view
Показать все...
3
💳 Как выбить зарплату побольше Собрали для вас в карточках 5 стратегий для торгов на собеседовании. Есть ещё несколько, которые подробно описаны в статье. 🤌 Бонусы для подписчиков:Скидка 40% на все курсы АкадемииРозыгрыш Apple MacBookБесплатный тест на знание математики 🐸Библиотека шарписта
Показать все...
2🥰 1👾 1