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

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

Ir al canal en Telegram

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

Mostrar más
2025 año en númerossnowflakes fon
card fon
22 356
Suscriptores
-624 horas
-327 días
-14630 días
Archivo de publicaciones
🔍 Устаревший синтаксис в F# 10 Раньше F# позволял опускать ключевое слово seq при создании последовательностей, что выглядело так:
{ 1..10 } |> List.ofSeq  // неявная последовательность
Это была особенность синтаксиса, но она расходилась с остальными вычислительными выражениями в языке и могла сбивать с толку. Теперь компилятор рекомендует явно писать seq, чтобы сделать код однозначным и понятным:
seq { 1..10 } |> List.ofSeq
Сейчас это предупреждение, а не ошибка, чтобы дать время адаптироваться и исправить код. Но в будущих версиях F# это может превратиться в ошибку. 🔸 AI-агенты для DS-специалистов 🔸 Получить консультацию менеджера 🔸 Сайт Академии 🔸 Сайт Proglib 🐸 Библиотека шарписта #sharp_view
Mostrar todo...
Photo unavailableShow in Telegram
Mostrar todo...
😁 47💯 6 1
Photo unavailableShow in 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
Mostrar todo...
7🥰 2🤔 1
Photo unavailableShow in Telegram
📘 4 декабря стартует набор на курс «Математика для разработки AI-моделей» Если вы работаете с моделями или хотите перейти в DS/ML, декабрь — идеальный момент закрыть фундаментальные пробелы. На курсе вы разберёте ключевые разделы, которые лежат в основе современных AI-моделей: линейная алгебра, анализ, оптимизация, математический анализ, вероятности, статистика. Всё через практику в Python. В программе живые занятия с экспертами AI-индустрии (SberAI, ВШЭ, WB&Russ), разбор реальных задач, квизы и финальный проект. 🌐 Формат: онлайн + доступ к записям 🎁 Бонусы: курс «Школьная математика» в подарок, бесплатный тест по математике После лекций будет разбор ваших решений и возможность задать вопросы преподавателям. 👉 Записаться на курс
Mostrar todo...
🥰 2
✏️ Запрет псевдо-вложенных модулей внутри типов в F# 10 В F# 10 добавили важное правило: теперь нельзя объявлять модуль внутри определения типа с тем же уровнем отступа, как сам тип. Это выглядело как вложенный модуль, но на самом деле модуль создавался на одном уровне с типом — то есть был соседом, а не дочерним элементом. Пример из старого кода:
type U =
    | A
    | B
    module M =  // на самом деле не вложенный модуль
        let f () = ()
Правильный код:
type U =
    | A
    | B

module M =
    let f () = ()
Это предотвращает частую ошибку, когда модуль кажется «вложенным» в тип, но на самом деле не является таковым. 🔸 Получить консультацию менеджера 🔸 Сайт Академии 🔸 Сайт Proglib 🐸Библиотека шарписта #sharp_view
Mostrar todo...
👍 4👾 2🌚 1
Photo unavailableShow in Telegram
Хватит плохих новостей Такое ощущение, что плохих новостей вокруг уже больше, чем уведомлений от коллег. Наткнулись на канал с позитивными новостями и это как антидот к новостному шуму и думскроллингу, где можно сознательно переключиться в режим у мира ещё есть шансы. 🤌 Бонусы для подписчиков:Скидка 40% на все курсы АкадемииРозыгрыш Apple MacBookБесплатный тест на знание математики 🐸Библиотека шарписта
Mostrar todo...
🤩 5🥱 1
Photo unavailableShow in 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
Mostrar todo...
3🤩 1
00:11
Video unavailableShow in Telegram
🔥 Хочешь строить свои AI-модели, а не просто запускать чужие? Proglib.academy открывает курс «Математика для разработки AI-моделей» — программу, которая превращает понимание ML из «черного ящика» в осознанную инженерную работу. 📌 Почему без математики в AI никуда: → Чтобы пройти собеседование. Это первый фильтр: линал, матстат, оптимизация — спрашивают везде. → Чтобы понимать процесс изнутри. Инженер AI должен понимать, почему и как работает модель, а не просто жать fit(). 🎓 Что будет на курсе: → 3 практических задания на Python + финальный проект с разбором от специалистов; → программа обновлена в ноябре 2025; → за 2 месяца пройдёшь весь фундамент, нужный для работы с моделями; → преподаватели — гуру математики, методисты и исследователи из ВШЭ и индустрии. 🎁 Бонусы ноября: — 40% скидка; — получаешь курс «Школьная математика» в подарок; — короткий тест и узнать свой уровень. 🔗 Подробнее о курсе
Mostrar todo...
Шаблоны_для_рилсов_и_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
Mostrar todo...
👍 6 4👾 1
Photo unavailableShow in Telegram
😂 Я ставлю X. Ваш ход 🐸Библиотека шарписта #garbage_collector
Mostrar todo...
7😁 4
💻 Поддержка паттерна discard в use! в F# 10 Раньше в use! вычислительных выражениях нельзя было указать _ для игнорирования результата, что заставляло создавать ненужные имена переменных, например, __ или _ignored. Теперь можно прямо написать:
use! _ = acquireResourceAsync()
Это обозначает, что ресурс используется только для управления временем жизни, и его значение не будет задействовано в коде. 🤌 Бонусы для подписчиков:Скидка 40% на все курсы АкадемииРозыгрыш Apple MacBookБесплатный тест на знание математики 🐸Библиотека шарписта #sharp_view
Mostrar todo...
3
💳 Как выбить зарплату побольше Собрали для вас в карточках 5 стратегий для торгов на собеседовании. Есть ещё несколько, которые подробно описаны в статье. 🤌 Бонусы для подписчиков:Скидка 40% на все курсы АкадемииРозыгрыш Apple MacBookБесплатный тест на знание математики 🐸Библиотека шарписта
Mostrar todo...
2🥰 1👾 1
⚡️ Batch-обработка с помощью Chunk Если нужно обработать коллекцию по частям — например, выгрузить данные пакетами, есть решение: метод Chunk. Он создаёт из исходного списка последовательность подсписков одинакового размера. Пример:
foreach (var batch in items.Chunk(100))
{
    await SaveBatch(batch);
}
} Chunk тут удобен тем, что не требует писать циклы с индексами и сложную логику по разбиению. Просто задайте размер пакета, и метод сделает всё за вас. 🔹 Практический интенсив «Архитектуры и шаблоны проектирования» 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸Библиотека шарписта #sharp_view
Mostrar todo...
👍 20 2🥰 2❤‍🔥 1
💡 Tail-call оптимизация в вычислительных выражениях F# 10 В F# 10 появилась важная возможность оптимизировать использование вычислительных выражений с помощью поддержки tail-call оптимизации для ключевых вызовов return!, yield! и do!. Теперь компилятор распознаёт, когда эти вызовы находятся в хвостовой позиции, и, если реализация билдера поддерживает специальные методы ReturnFromFinal, YieldFromFinal и им подобные, он применяет оптимизацию tail call. Это позволяет выполнять вызовы без дополнительного роста стека. 🔹 Основы IT для непрограммистов 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸 Библиотека шарписта #sharp_view
Mostrar todo...
👾 2
Photo unavailableShow in Telegram
Коллекции .NET: взгляд изнутри Как устроены стандартные коллекции в .NET и почему понимание их внутренней логики помогает писать более производительный код? На открытом вебинаре курса OTUS «C# Developer. Advanced» Антон Герасименко покажет, что происходит «под капотом» List, Dictionary и других структур данных. 🗓 4 декабря, 20:00 Коллекции .NET: взгляд изнутри: — разберём устройство стандартных коллекций — заглянем в исходный код и объясним, почему они работают именно так — обсудим, когда стоит реализовать собственную структуру данных Вебинар будет полезен разработчикам уровня Junior и выше, которые хотят глубже понимать, как устроены базовые механизмы .NET и как использовать их эффективнее. 👉 Зарегистрируйтесь: https://clc.to/8-oWYg Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Mostrar todo...
👍 2🥱 2 1
Photo unavailableShow in Telegram
💼 Карьерная «страховка» для IT‑шника Рынок IT сильно изменился за последние годы. После бурного роста начались крупные сокращения и оптимизация команд. Сегодня никто не может быть уверен в стабильности работы — даже опытные разработчики сталкиваются с риском внезапного увольнения. Поэтому важно задуматься о своей карьерной страховке — простых шагах и инструментах, которые помогут защитить себя и сохранить финансовую устойчивость в любой ситуации. ➡️ Собрать свою страховку 🔸 ML для старта в Data Science 🔸 Получить консультацию менеджера 🔸 Сайт Академии 🔸 Сайт Proglib 🐸Библиотека шарписта
Mostrar todo...
😁 4👍 1
👨‍💻 Обработка ошибок в .NET minimal API При разработке API важно правильно и понятно передавать клиентам информацию о возникших ошибках. Одним из удобных способов сделать это в .NET minimal API является использование встроенного метода Results.Problem. Он возвращает объект с подробностями ошибки в стандарте ProblemDetails, что упрощает клиентам обработку ответа. Пример:
app.MapGet("/users/{id}", async (string id, IUserRepo repo) =>
{
    if (!Guid.TryParse(id, out var guid))
        return Results.Problem("Invalid id", statusCode: 400);

    var user = await repo.Find(guid);
    return user is null ? Results.NotFound() : Results.Ok(user);
});
В этом коде при неверном формате id возвращается ProblemDetails с кодом 400, если пользователь не найден — 404, иначе 200 с данными. 🐸Библиотека шарписта #sharp_view
Mostrar todo...
3
🤩 Типизированные вычислительные выражения в F# 10 без скобок В F# 10 упростили синтаксис для аннотирования типов в вычислительных выражениях. Теперь можно добавлять типы в let!, use! и and! без необходимости использовать дополнительные скобки вокруг идентификаторов. ньше для указания типа в вычислительном выражении приходилось писать так:
let! (x: int) = fetchValue()
Сейчас можно написать короче:
let! x: int = fetchValue()
Если вы часто работаете с async, task или другими вычислениями, это изменение вы оцените. 🔹 Алгоритмы и структуры данных 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸Библиотека шарписта #sharp_view
Mostrar todo...
3🤔 1🥱 1
Photo unavailableShow in Telegram
🔥 На рынке сейчас математика — снова король: AI растёт быстрее, чем вузы успевают обновлять программы. Мы же перестраиваем курс под индустрию мгновенно. Хочешь наконец разобраться в математике для DS, а не гуглить «что такое градиент» перед собесом? Новый курс «Математика для разработки AI-моделей» — это 8 недель плотной подготовки, свежая программа и только актуальные темы, которые реально нужны в ML. Что в курсе: → линал, производные, градиенты, вероятности, статистика; → практика на Python и 3 большие ДЗ; → живые вебинары + разбор ваших вопросов; → финальный мини-проект, который можно положить в портфолио; → доступ к материалам и чат с экспертами. Для старта нужны только школьная математика и базовый Python. 🎁 Бонусы ноября: — скидка 40% до 30 ноября; — «Базовая математика» в подарок при оплате; → бесплатный тест уровня математики. 👉 Записывайся на курс
Mostrar todo...
Photo unavailableShow in Telegram
🤝 Перестаньте ждать, пока вас найдут Обычный сценарий поиска работы в ИТ до сих пор у многих сводится к загрузке резюме на несколько площадок и ожиданию, пока система кого то заинтересует. При этом автоматические правила, внутренние фильтры и массовая обработка откликов оставляют кандидата без ответа. Альтернатива в том, чтобы не ограничиваться джоббордами и целенаправленно выходить на людей, которые управляют инженерными командами. Общение с CTO, тимлидами и фаундерами превращает поиск работы в прямой профессиональный разговор, а не попытку пройти через набор формальных стадий. ➡️ Действуйте, ищите, откликайтесь 🔸 Практический интенсив «Архитектуры и шаблоны проектирования» 🔸 Получить консультацию менеджера 🔸 Сайт Академии 🔸 Сайт Proglib 🐸 Библиотека шарписта
Mostrar todo...