Обновить
96.27

.NET *

Хаб со знаниями про .NET

Сначала показывать
Порог рейтинга
Уровень сложности

Умершие языки программирования (Fortran, Ada, Cobol) И почему на западе они до сих пор живы

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели6K

Существуют языки, которые все считают мертвыми, но есть ньюанс. В СНГ на Бейсике вакансий больше чем на Руби, а вакансий у Паскальщиков не сильно меньше чем у шарпистов.

Все не так просто, поэтому давайте разбираться.

Читать далее

Новости

I'm on the stairs to hell

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели4.4K

Очень важно правильно подбирать умолчания. Да и вообще всегда максимально конкретно и полно указывать, а что именно тебе нужно. И не только в программировании, кстати. Иначе, случайно можно проделать много лишней работы.

Читать далее

Логирование с Serilog: как повысить отказоустойчивость и скорость

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели6.2K

Когда логов становится слишком много, а сеть или облачный приёмник начинает тормозить, даже самый надёжный логгер может превратиться в источник проблем. Наша команда столкнулась с тем, что память забивалась логами, и это приводило к OutOfMemoryException и аварийному закрытию приложений.

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

Читать далее

Подводные камни миграции с SharePoint 2013 на SharePoint 2019

Время на прочтение10 мин
Охват и читатели4.7K

С каждым годом пользователей SharePoint 2013 становится все меньше в связи с появлением новых версий. Но многие компании не торопятся переходить на новые версии SharePoint из-за сложности перехода и больших накладных расходов.

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

Для прода инфраструктура должна быть более сложная. Каждая организация сама определяет ее в зависимости от планируемого объема данных и дальнейшего развития. Если организация достаточно большая, как в нашем случае, тогда явно напрашивается архитектура из сервера переднего плана, нескольких WFE-серверов, серверов баз данных (контентных и кастомных), серверов для служб поиска, распределенного кэша и других. Сервера должны быть современные с большим объемом памяти, процессорами последних поколений и т.д.

Сразу в прод ставить неправильно, поэтому нужны тестовые стенды. Для них такая мощная инфраструктура не нужна, хотя по возможности можно и такую организовать.

Итак, были созданы тестовые стенды с усеченными контентными базами (без их усечения пришлось бы выделять гораздо большие ресурсы, с чем сейчас сложности). Скрипт усечения заключался в подмене больших файлов на шаблоны меньшего размера. Так как прямой переход с SharePoint 2013 на SharePoint 2019 невозможен, нужен был стенд и для SharePoint 2016. В качестве стендов для SharePoint 2013 прекрасно подошли машины разработчиков, которые уже работали до этого.

Инфраструктура была создана, доменные имена присвоены, можно приступать к самому интересному.

Читать далее

Эффективное применение NuGet

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели6.1K

В этой статье мы рассмотрим централизованное управление версиями пакетов, а также разберем настройку приватного NuGet-сервера BaGet для эффективной работы в изолированных средах. Мы уверены, что статья будет полезна многим российским разработчикам, поскольку NET разработка в изолированных средах в нашей стране действительно широко распространена.

Читать далее

.NET C# и RabbitMQ Streams: превратить кролика в Kafka легко, нужно всего лишь…

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели11K

Работа с очередями сообщений — важная часть современных систем обработки данных. В нашей команде мы используем брокер сообщений RabbitMQ, но нам пришлось столкнуться с проблемами при обработке большого объема данных. В поисках решений я начал изучать различные способы оптимизации, и таким образом познакомился с RabbitMQ Streams – плагином, добавляющим log-based потоки, работающие по аналогии с Kafka

Я потратил некоторые время, вникая в принципы работы RabbitMQ Streams с .NET и хочу представить вам краткий обзор, который призван упростить погружение в эту систему

Читать далее

Запуск WPF-приложений в Docker: Экспериментальный подход с Wine

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели5.4K

Запуск WPF на Linux долгое время казался невозможным. Но благодаря связке Docker и Wine теперь это реальность. Рассказываю о своем практическом опыте, как заставить эксклюзивную технологию Microsoft работать вне Windows.

Читать далее

Requestum 1.2.5: теги, политики устойчивости и встроенное логирование

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели7.5K

Привет, Хабр! Около месяца назад я рассказывал о Requestum — CQRS-библиотеке для .NET, созданной как бесплатная альтернатива MediatR.

После той публикации в комментариях многие справедливо спрашивали: «Зачем нужна ещё одна CQRS-библиотека? Есть же Mediator, Wolverine, Brighter и другие проверенные решения. Чем твоя альтернатива лучше?»

Честный ответ на тот момент был: «Пока, наверное, ничем особенным — разве что MIT лицензией и чуть лучшей производительностью».

Но за этот месяц я постарался это исправить. Этот пост — мой ответ на те вопросы и рассказ о фичах, которые делают Requestum достойным внимания, а не просто «ещё одной библиотекой в списке».

Читать далее

Создание браузерного расширения с native messaging на C#

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели7.5K

Привет, Хабр. Меня зовут Алексей, я бэкенд-разработчик C#. Хочу рассказать о том как я узнал что такое native messaging в браузерах и какие задачи можно с его помощью решать. В одном проекте я разрабатывал десктопную утилиту, которая должна была уметь обмениваться сообщениями с веб-страницами в браузере, чтобы в том числе управлять их содержимым и как угодно взаимодействовать с ними. Расскажу о том, как удалось решить такую задачу и покажу результат работы небольшого приложения с таким взаимодействием.

Читать далее

ИИ чат для API или «Co-Pilot» своими руками

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели5K

Мой опыт «Как с минимальными трудозатратами за "пару часов" создать рабочий прототип умного агента для существующего классического Web-приложения на стеке Microsoft с инфраструктурой на Azure». Основой служит Semantic Kernel, добавленный как отдельный сервис к существующему ASP.NET API.

Статья может быть интересна труженикам .NET бекэнда, кто был хотел бы сделать своего умного агента, но не знает с чего начать.

Читать далее

Создаёте списки в C#? Ну тогда у вас могут быть проблемы

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели9.2K

Мы все привыкли писать new List<int> { 1, 2, 3, 4 } или new int[] { 1, 2, 3, 4}, чтобы инициализировать коллекции какими-то значениями. Синтаксически это выглядит похоже, но поведение отличается, и вам следует быть осторожными, если вы заботитесь о производительности.

Читать далее

FlashcardsLoop — или как я делал свой Quizlet

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели7.4K

По традиции статей Хабра начну с описания проблемы.

Я изучаю C#, .NET, ASP.NET и ищу работу Backend-разработчика. Сейчас дело дошло до собеседований и фундаментальных вещей (синтаксис, паттерны проектирования, принципы SOLID), я понял, что информации море и она вываливается из головы.

Вспомнил про метод карточек (Flashcards), который обычно используют для иностранных языков. Пошел на популярные ресурсы: Quizlet, RemNote и прочие. Зарегистрировался, начал создавать колоды, мне понравилось, вошел во вкус и каково было мое разочарование когда я везде натыкался на платные подписки. Где-то ограниченное количество карточек, где-то постоянная реклама, где-то очень замудренный интерфейс сделанный вообще не понятно для кого (привет Anki).
Хочешь больше функций? Плати. — Хочешь учить без рекламы? Плати. — Хочешь добавить картинку? Ну, ты понял...

Я смотрел на эти интерфейсы и во мне кипела злость: «Ну это же обычное CRUD-приложение! Две таблицы в базе, простейший API. Что тут сложного? Я сам могу такое сделать!»

Так родилась идея: написать свой сервис. Бесплатный. Без ограничений. Для себя. Это и проблема решится, и пет-проект для резюме будет.

Читать далее

Применение локальных LLM для OCR

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели13K

Вдруг кому-то будет полезно. Возникла задача быстрого распознавания данных с фотографий и получения из них структурированной информации. Так же важно было отсутствие требовательного к ресурсам ПО и легкость разворачивания системы. Поэтому было решено попробовать использовать в качестве подключаемого модуля мультимодальные LLM запускаемые под Ollama, т.к. у неё есть REST API по которому удобно обращаться к модели.

Читать далее

Ближайшие события

«База данных как API»: Почему я написал свою ORM на Source Generators и обогнал Dapper в 800 раз

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели11K

Привет, Хабр! Меня зовут Сергей Сорокин, я .NET-разработчик с 12-летним стажем. Занимаюсь бэкендом, архитектурой и высокими нагрузками.

Знаю, о чем вы подумали, прочитав заголовок: "О боже, еще одна ORM? В 2025 году? Зачем, если есть Dapper и EF Core?".

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

Сегодня я хочу рассказать о Visor — ORM, которую мы создали, чтобы превратить работу с базой данных в вызов типизированного API, убрать оверхед рефлексии и решить извечную боль с передачей списков (TVP) в SQL Server. А заодно показать, как Source Generators позволяют писать код, который работает быстрее, чем то, что вы пишете руками.

Читать далее

UNITY: Реализация движений для динамичного шутера

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели7.8K

Уже какое то время я разрабатываю свой first-person shooter на Unity, чья система передвижения сильно вдохновлена ULTRAKILL’ом. Изначально я начал этот проект в качестве практики и вызова самому себе, так как шутеры – это жанр максимально далёкий от моих предпочтений. В связи с этим мне пришлось изучить много нового и я хочу поделиться этими знаниями.

Читать далее

Удаляем пробелы из строки

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели8.8K

Недавно мы разбирали популярную задачу — проверяли строку на наличие цифр. Еще одна популярная задача при работе со строками — удалить из них пробельные символы. Можно представить, что нам нужно очистить пользовательский ввод: удалить пробелы вначале и конце строк в имени или удалить пробелы из телефонного номера. .NET предоставляет нам несколько возможностей для решения этой задачи, давайте рассмотрим самые популярные и попробуем найти наиболее эффективные. Заодно проверим, какие изменения произошли в новой версии .NET 10.

Читать далее

Вкалывают роботы, а не человек, или как убрать рутину из работы при помощи ИИ

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели6.8K

Мы живём во времена AI-бума. ИИ упрощает ресёрч информации, визуализирует первые идеи дизайнеров, которые попадают в референсы, и пишет код. Некоторые даже говорят: «скоро разработчики станут не нужны», а «ИИ-агенты будут идеально писать код по промпту «хочу красиво» и т.д.

До этого «скоро» ещё далеко, но это не повод не использовать ИИ-агентов в автоматизации различной рутины. Например, в написании платёжных интеграций для POS-терминалов в разных странах. Передать ИИ-агентам такую задачку — не очень просто, но у нас получилось! Сегодня расскажем, как мы это сделали.

Читать далее

Шестидесятилетний заключённый и лабораторная крыса. F# на Godot. Часть 12. Описываем поведение

Уровень сложностиСредний
Время на прочтение17 мин
Охват и читатели5.5K

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

Читать далее

Object Pool коротко: экономим память в C# без лишнего мусора

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели8.2K

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

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

Читать далее

Оптимизация через партицирование

Уровень сложностиСложный
Время на прочтение30 мин
Охват и читатели8.6K

Привет, Хабр! Меня зовут Виталий Сушков, я .NET-разработчик и техлид в Т-Банке. 

На конференции DotNext в 2024 году я выступал с докладом о применении механизма декларативного партицирования таблиц в PostgreSQL. 

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

Читать далее
1
23 ...

Вклад авторов