Обновить
86.84

C# *

Объектно-ориентированный язык программирования

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

Анатомия асинхронных фреймворков в С++ и других языках

Время на прочтение20 мин
Охват и читатели50K
Привет! В этой статье я расскажу об устройстве асинхронных движков с корутинами и без них. Для начала сосредоточимся не на конкретном движке, а на том, почему во всех популярных языках программирования появились корутины и чем они так хороши. Это может быть интересно не только C++-разработчикам, но и всем, кто занимается разработкой сетевых приложений или интересуется архитектурой современных фреймворков.

Пройдёмся по разным архитектурам построения серверов — от самой простой синхронной к более интересным, посмотрим на типичную архитектуру корутинового движка, а после окунёмся в дебри C++ и взглянем на самое страшное на примере нашего фреймворка userver.

Пишем синхронный сервер


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

void naive_accept() {
  for (;;) {
    auto new_socket = accept(listener);

    std::thread thrd([socket = std::move(new_socket)] {
      auto data = socket.receive();
      process(data);
      socket.send(data);
    });

    thrd.detach();
  }
}
Читать дальше →

Как создавать уникальные лабиринты

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

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

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

Инструменты тестирования для .NET и кроссплатформенных приложений

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

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

Читать далее

PascalABC.NET, повторная проверка

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

Приветствуем всех любителей чистого кода. Сегодня у нас на разборе проект PascalABC.NET. Ранее мы уже искали ошибки в этом проекте при помощи сразу двух инструментов статического анализа, а именно плагинов для SonarQube: SonarC# и PVS-Studio. Этому была посвящена статья в далёком 2017 году. В этот раз мы решили ограничиться только C# анализатором PVS-Studio последней актуальной версии и посмотреть, какие новые ошибки можно найти в PascalABC.NET сегодня. Тем более что за это время наш анализатор стал гораздо более продвинутым и обзавелся новыми возможностями поиска ошибок и потенциальных уязвимостей в коде.


0912_PascalABCNET_2_ru/image1.png

Читать дальше →

Представляем Q# Formatter

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

За последние несколько лет, по мере развития Q#, его синтаксис развивался вместе с ним. Было внесено несколько изменений в синтаксис, которые привели к устареванию способов выполнения стандартных действий в Q#, таких как удаление круглых скобок вокруг условий цикла for. Чтобы помочь нашим пользователям обновлять свой код с помощью новейшего синтаксиса, мы добавили в QDK несколько новых функций.

Когда вы используете расширения Q# для Visual Studio или Visual Studio Code для редактирования кода Q# с устаревшим синтаксисом, рассматриваемый код будет подчеркнут зелеными волнистыми линиями, и будут доступны предложения для обновления синтаксиса. В прошлом у нас уже были предложения по обновлению каждого устаревшего фрагмента кода. В выпуске 0.21 мы добавили действие кода для обновления всего устаревшего синтаксиса в файле:

Читать далее

Исследуем .NET 6. Часть 6. Поддержка интеграционных тестов в WebApplicationFactory

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

В предыдущей статье я описал обходной путь, который был добавлен в .NET 6, чтобы инструменты EF Core, которые ранее полагались на существование определённых методов, таких как CreateHostBuilder, продолжали работать с новыми минимальными API хостинга.

В этой статье я рассмотрю связанное изменение, обеспечивающее работу интеграционного тестирования с WebApplicationFactory в .NET 6. WebApplicationFactory использовала тот же класс HostFactoryResolver, что и инструменты EF Core, но потребовалось ещё несколько изменений, которые я рассмотрю в этой статье.

Читать далее

Джентльменский набор для создания WPF-приложений

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

Данная статья представляет собой набор рецептов по созданию WPF приложений. Поэтому скорее всего она будет интересна начинающим разработчикам. В материале описаны основные моменты использования таких пакетов как ReactiveUI, Material Design in XAML Toolkit, LiveChart2. Примеры кода приведены из реального приложения.

Далее

Создание шутера с LeoECS. Часть 4

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

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

Обязательно прочитайте прошлую часть, если еще не сделали этого.

Читать далее

Реализация алгоритма Краскала на С#

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

В данной статье для реализации алгоритма будут рассмотрены:

1. Система хранения графа на основе List<>

2. Сортировка рёбер графа по весу

3. Система непересекающихся множеств

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

План действий

1. Сортируем имеющиеся рёбра по весу.

2. Создаём новое множество и добавляем в него первое ребро.

3. Затем пытаемся добавить каждое новое ребро в имеющееся множество, если возникает цикл - пропускаем.

4. Итоговое множество рёбер и есть искомое минимальное остовное дерево.

По сути, это и есть формулировка алгоритма Краскала. Звучит совсем просто.

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

Но для начала давайте рассмотрим систему хранения графа в программе.

Читать полностью

5 советов для C#-программистов, которые вы, наверняка, уже знаете

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

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

Читать далее

Представляем .NET MAUI Preview 12

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

Сегодня мы выпускаем 12 превью-версию .NET Multi-platform App UI со многими улучшениями качества и некоторыми новыми возможностями. По мере того, как мы приближаемся к выпуску нашей первой стабильной версии, баланс работы начинает смещаться в сторону улучшения качества и стабильности, хотя есть еще и несколько интересных нововведений, на которые стоит обратить внимание, в том числе:

Новая документация по значкам приложений, жизненному циклу приложений, кистям, элементам управления и Single Project; Обработчик FlyoutView реализован на Android; Добавлены обработчики совместимости для RelativeLayout и AbsoluteLayout; Добавлено свойство Z Index; Унификация .NET 6 — типы iOS; Расширенная панель инструментов Windows — без оболочки.

В этом выпуске также представлено крутое усовершенствование Shell. Давайте более подробно рассмотрим Shell в Preview 12.

Читать далее

Проверка контрагентов. Парсинг fedresurs

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

В этой статье хочу познакомить читателя с таким ресурсом, как «Единый федеральный реестр сведений о фактах деятельности юридических лиц» (fedresurs.ru), рассказать о его применимости и показать возможность прошерстить ресурс не руками по большому количеству клиентов, а с использованием C# (в вашем случае можете использовать любой другой язык, который вам нравится, подходы, думаю, не изменятся) и море проксей, ну разумеется будем парсить. Возможно, тем кто этим займется, пригодятся статья, идеи или, чем черт не шутит, куски кода, а тем, кто просто проводит проверку контрагентов сможет либо понять, что можно взять с сайта либо придумает, что можно еще проверить.

Периодически возникает потребность в получении данных для анализа клиентов/заемщиков/контрагентов и эти данные мы можем получить из этого сайта. Что же нам предлагается?!

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

Различные сообщения по клиенту, например, сообщения о банкротстве и уже с ними – проверка, все ли сообщает клиент и может пора пошевелиться в сторону него и предпринять какие-либо меры.

Торги и т.д.

Читать далее

Подводные камни бенчмаркинга в .NET: фрагмент книги Андрея Акиньшина

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

Андрей Акиньшин @DreamWalker хорошо известен в .NET-сообществе: он мейнтейнер BenchmarkDotNet и perfolizer, член программного комитета нашей конференции DotNext, автор книги Pro .NET Benchmarking о том, как правильно бенчмаркать.

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

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

Читать далее

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

C#: разбираем бинари

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

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

Читать далее

Мой опыт собеседования в Amazon

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

О чём эта статья

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

Это история о моем опыте собеседования в Амазоне, почему мне в целом не понравилось по сравнению с другими FAANG. Так же тут будут ответы на “а что конкретно спрашивали на интервью, какие были задачки, что на систем дизайне было”, потому что мне не дали подписать NDA, все с пруфами, скринами и прочее.

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

Начало, предложение от Amazon

В один прекрасный день 6 сентября, мне пришел такой сообщение в Линкедин.

Читать далее

Новые книги: «Основы Microsoft Azure. Подготовка к экзамену AZ-900» и «Параллельное программирование на C# и .NET Core»

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

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

Одним из ключевых базовых экзаменов Microsoft в настоящее время является AZ-900, который открывает дверь в мир Azure. Сам экзамен доступен на русском языке, однако долгое время основные материалы были доступны только на английском. Поэтому мы рады анонсировать выход перевода нашего официального руководства по сдачи экзамена AZ-900 на русском языке. И как маленький бонус мы также немного расскажем о книге «Параллельное программирование на C# и .NET Core».

Над переводами данных книг работали наши партнеры из молодой компании Devs Universe, а редактором выступил уже известный нашим читателям Вячеслав Черников, в прошлом эксперт по Xamarin, а в настоящее время архитектор решений Azure.

Читать далее

Использование NavMesh для навигации ИИ в Unity

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

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

Читать далее

Как я делал user-control на WPF (VS2019, c#)

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

Всех приветствую, решил выложить свой первый пост на Хабре, не судите строго - вдруг кому-нибудь да пригодится =)

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

Задача: сделать контрол кнопки (WPF): круглая, с возможностью использования в качестве иконки объекта Path, с возможностью использовать свойство IsChecked, и сменой цветовых схем при наведении/нажатии.

Читать далее

Просто в теории, тяжело на деле

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

На 2 курсе обучения в СПО преподаватель по программированию дал следующую задачку: "Дана некоторая точка на плоскости. Проверить, находится ли она внутри многоугольника, описанного так же точками на плоскости". Задача некоторых поставила в тупик, поэтому я решил подробно описать свой подход к ее решению.

Посмотреть разбор

Интегрированный чат в Live Share для Visual Studio 2022

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

В нашей популярной фиче Live Share, доступной уже несколько лет в Visual Studio, не было чата... до сегодняшнего дня! Теперь, если есть такая необходимость, вы можете в live-режиме обсуждать с коллегами в чате работу над кодом. И для этого больше не обязательно созваниваться.

Читать далее

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