Как стать автором
Поиск
Написать публикацию
Обновить
54.67

.NET *

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

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

Я у мамы программист, а не маркетолог: как я пытался продвинуть своего бота

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

Вы когда-нибудь пытались собрать друзей на вечер настолок, но в итоге кто-то забыл, кто-то перепутал время, а кто-то вообще не пришёл? Я - да. И, как программист, я сделал то, что умею лучше всего - написал бота, который решает эту проблему. А потом понял, что писать код было проще, чем заставить людей им пользоваться.

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

И вот сегодня число пользователей дошло до 300, а количество групп выросло до 100 (на самом деле 98) и я хотел бы подвести некоторый итог по проекту. Плюс я пару дней назад выпустил обновление, в котором закончил все фичи, которые задумывал и бот переходит в режим поддержки. Если что я его не отключаю, будет работать, но об этом в конце.

Читать далее

Реализация собственного биллинг-сервиса на .NET: необходимость, особенности и архитектура

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров1.9K

Привет, меня зовут Павел, я являюсь разработчиком в DD Planet. Сегодня хочу поговорить об одной частой ситуации. Если ваш web сервис работает по подпискам или с регулярными платежами — рано или поздно встаёт вопрос: брать готовое решение или сделать своё.

Читать далее

Throw — это новый goto

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

Помните ли вы о существовании goto?

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

Но почему-то я не встречал никакого негатива насчёт throw. А ведь это точно такая же фигня, если даже не хуже.

Читать далее

Stonks или not stonks. Проверка исходного кода трейдерского движка Lean

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

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

Читать далее

Три ошибки в C#, которые лучше не допускать

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

Привет, Хабр!

Сегодня мы рассмотрим три самые коварные ошибки, которые регулярно просачиваются даже в продовые C#-проекты. Разберёмся, как они рождаются, почему остаются незамеченными и что нужно сделать, чтобы больше никогда не ловить эти проблемы.

Читать далее

(Не)случайные числа в VBA Excel Ч. 1

Уровень сложностиСредний
Время на прочтение14 мин
Количество просмотров1.4K

Первая часть из моего цикла исследований, посвященного генерации псевдослучайных чисел в скриптовом языке VBA, используемого в офисных приложениях от Microsoft.

Погрузиться в мир псевдослучайных чисел!

Как я добавлял таймзоны в своего бота (и выжил)

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров824

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

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

Читать далее

C#, Кодогенерация и DDD Часть 3.2 — Добавляем шины, обработчики сообщений и реализацию обработчиков сообщений

Уровень сложностиСложный
Время на прочтение8 мин
Количество просмотров2.6K

В прошлой статье мы сгенерировали Enpoint-ы WebApi по описанию на основе классов, свойств и атрибутов.

(первая часть, вторая часть, третья часть, четвертая часть)

В этой статье мы добавим генерацию абстракций EventHandler-ов, работающих с шиной, саму шину, реализацию EventHandler-ов для MassTransit, узнаем во сколько раз больше мы генерируем, чем пишем (на этот раз без ошибки).

Читать далее

Expression: всё что нужно для старта

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров2.3K

Если поискать по Хабру статьи, связанные с Expression, то можно найти несколько десятков страниц статей. Однако, я решил написать еще одну. Цель с которой я решил это сделать‑ разобрать деревья выражений для разработчиков которые еще не имели с ними дела. Для тех кому это кажется магией. И самое главное, показать для чего они могут пригодиться.

Что же далее...

Валидация Delegate-регистраций в DI-контейнере

Уровень сложностиСредний
Время на прочтение18 мин
Количество просмотров1K

Использование DI-контейнеров часто приводит к появлению неприятных ошибок в рантайме. В таких случаях хочется, чтобы контейнер умел находить проблемы и уведомлять о них в момент сборки. 

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

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

Читать далее

DAX-style подход в C# для SUMMARIZECOLUMNS из Power BI

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

Привет, Хабр! Одной из важных функций в аналитическом языке DAX является SUMMARIZECOLUMNS, т.к. она готовит данные для дашбордов за счет декартова произведения полей группировки, если поля группировки из разных таблиц. Понятно, что на любом языке программирования можно реализовать логику, в чем-то аналогичную SUMMARIZECOLUMNS из DAX. Интересующимся DAX-style логикой для C# из NuGet пакета DaxSharp для функцииSUMMARIZECOLUMNS — добро пожаловать под кат :)

Читать далее

У нас был план: внедрить автоматизацию тестирования мобильного приложения

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров707

Хабр, привет! Меня зовут Мельников Станислав, руковожу группой автоматизированного тестирования. В статье расскажу, как мы организовали автоматизацию тестирования мобильного приложения и ушли от бесконечного ручного регресса к ферме устройств и авто-тестам, которые теперь живут в CI. Делюсь цифрами, граблями и планами. 

Читать далее

Книга: «.NET 8: приложения и сервисы. Практика создания проектов с использованием Blazor, .NET MAUI, gRPC, GraphQL.»

Время на прочтение9 мин
Количество просмотров4K

Привет, Хаброжители! У нас есть для вас новое издание книги «.NET 8: приложения и сервисы» вы сможете поднять свои навыки владения C# и .NET на новый уровень.

В книге описаны практические приемы использования различных технологий, включая Web API, gRPC, GraphQL и SignalR, что выделяет ее среди других источников. Она познакомит вас с новой унифицированной моделью Blazor Full Stack и расскажет, как использовать .NET MAUI для разработки мобильных и десктопных приложений.

В новом издании представлены последние достижения, включая бесшовную реализацию веб-сервисов со встроенной поддержкой Ahead-of-Time (AOT) ADO. NET SqlClient. Помимо других популярных библиотек, в книге рассматриваются Humanizer и Noda Time. Совершенно новая глава расскажет об архитектуре, кэшировании, организации очередей и приемах построения надежных фоновых сервисов.

Читать далее

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

Электронная налоговая Черногории: пока 404. Ну хорошо, 50/50 — значит 202

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

Я всё‑таки решил на практике проверить работу электронной подачи документов на регистрацию или изменение данных черногорской компании. Я конечно, читал несколько отзывов о работе личного кабинета СRPS (ссылка), точнее о том, что он не работает — но надо же убедиться самому. На самом деле, всё оказалось достаточно легко и понятно — заполнение сведений, прикрепление документов, их подписание цифровой подписью — всё работает...

Читать далее

Публикация Xamarin.Forms iOS приложений в условиях прекращения поддержки фреймворка

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров665

1 мая 2024 компания Microsoft официально прекратила поддержку Xamarin.Forms. Альтернативой они называют MAUI, который всё ещё очень и очень сырой. Нельзя так просто взять и перенести свое приложение на новые рельсы - у платформ разные подходы к написанию кода. Так как выкручиваться в таком случае тем, у кого есть legacy проекты на Xamarin.Forms, но при этом нет возможности перевести их на MAUI?

Читать далее

Балансирование нагрузки при разделяемых ресурсах при помощи очередей в Hangfire

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

Привет, Хабр! При создании фоновых работ, например, через Hangfire, может быть актуально учитывать разделяемые ресурсы (например, базы данных, внешнюю API или файловую систему). Поскольку такие ресурсы являются ограниченными, возникает потребность управления количеством параллельно исполняемых задач без написания сложной логики. Интересующимся особенностями распределения ресурсов в Hangfire при помощи очередей — пожаловать под кат :)

Читать далее

Nullable-аннотации: MaybeNull и NotNullWhen в C#

Время на прочтение8 мин
Количество просмотров4.1K

Привет, Хабр!

Сегодня мы рассмотрим nullable-аннотации в C#: как с помощью [MaybeNull] и [NotNullWhen] (плюс родственных атрибутов вроде [MaybeNullWhen], [NotNullIfNotNull], [DoesNotReturn]) формально описывать те самые «ну тут иногда null, а тут точно нет».

Читать далее

Пример реализации слоя приложения persistence layer без использования ORM фреймворка

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

Слой приложения persistence layer является в определённом смысле уникальным в смысле узкой направленности его функционала по сравнению с другими слоями приложения. Если рассматривать его только для работы с реляционными базами данных, то реализацию функционала слоя можно разбить на два основных варианта - с использованием ORM фреймворка и без использования ORM фреймворка. Каждый из этих вариантов можно реализовать достаточно универсальным образом.

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

Читать далее

async2: эксперимент с поддержкой асинхронности в рантайме

Уровень сложностиСложный
Время на прочтение25 мин
Количество просмотров5.1K

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

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

Представим какой‑то абстрактный web‑api, который ходит за данными в БД. При однопоточном синхронном выполнении следующий запрос может быть обработан только тогда, когда полностью был выполнен предыдущий, что неэффективно, т.к. вся нагрузка ложится только на 1 ядро процессора, а остальные простаивают.

Читать далее

.NET Digest #8

Время на прочтение4 мин
Количество просмотров3.2K

Добро пожаловать на восьмой выпуск нашего дайджеста, посвящённого новостям и событиям в мире .NET! В этот раз мы расскажем про уже ожидаемые .NET 10 preview 4 и 5, новую команду dotnet run app.cs и множество интересных статей. Команда PVS-Studio рада представить вам подборку самых интересных и полезных материалов. Поехали!

Читать далее

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