Обновить
137.35

C# *

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

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

Разделение контейнера зависимостей в ASP.NET Core

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

Разработчики AspNet Core (здесь и далее речь идёт об AspNet актуальных версий: 6 и 7, но может быть применимо и к более ранним версиям) хорошо знают, что механизм Dependency Injection встроен в этот фреймворк изначально и пронизывает его насквозь. И это здорово упрощает работу с зависимостями и сразу вводит разработку в идеологически правильное русло. Более того, в состав самого AspNet входит вполне приличный дефолтный DI-контейнер разработки Microsoft, что позволяет отказаться от использования сторонних решений. Во всяком случае, при отсутствии совсем уж специфичных требований.

Но иногда такие требования существуют...

Паттерн декоратор на примере .NET

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

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

Для самого изучения паттернов я постараюсь не погружаться в определения, а показать примеры, задать проблему, и решение проблемы с использованием паттерна. Мы возьмем компанию «Сесла Моторс» и будем решать поставленные ею задачи. Пускай название не вызывает у вас чувства, что якобы вы где‑то уже слышали про нее. Это не так. Ведь компания занимается только производством электрокаров. А такое редко в реальном мире. Должно быть интересно. Погнали!.

Читать далее

Опыт интеграции .NET Core+ приложений с HashiCorp Vault

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

Привет, Хабр! В этой статье я хотел бы поделиться опытом нашей команды в части интеграции .NET Core и выше приложений с корпоративным хранилищем секретов HashiCorp Vault.

Наши приложения, как и большинство приложений в компании, используют в процессе работы различные секреты (пароли, токены и т.д.). Их, с точки зрения информационной безопасности, нельзя хранить в коде или на компьютере, на котором запущено приложение. Поэтому в компании используется специальное ПО – хранилище секретов HashiCorp Vault.

В чем суть проблемы, с которой мы столкнулись: решение, используемое ранее для получения секретов из HashiCorp Vault в приложение, было не очень удобным и очевидным

Читать далее

Как записать данные в Excel, используя C#

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

Excel - широко используемое электронное таблицы программное обеспечение, которое можно использовать для анализа данных, создания отчетов и многих других целей. Мы часто должны записывать данные в Excel для дальнейшей обработки и анализа. В программировании мы можем использовать различные способы записи данных в Excel, например, использование встроенных в Excel COM-компонентов, использование сторонних библиотек и т.д. Free Spire.XLS for .NET - это мощная сторонняя библиотека, которая может помочь нам легко записывать данные в Excel. В этой статье будет описано, как с помощью Free Spire.XLS for .NET записывать различные типы данных в Excel.

Читать далее

Дружим Flutter с С# и С++

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

На Flutter`е очень удобно и хорошо пишутся интерфейсы для пользователей. Но использовать Dart для решения алгоритмических задач тяжко и неэффективно. Семейство Си справляется гораздо лучше и позволяет легко распараллеливать вычисления. Кроме того, за многолетнюю историю С++ и С# обзавелись множеством полезных библиотек, не все из которых имеют аналоги во Flutter.

Зная про существование библиотеки FFI для Flutter, что позволяет даже синхронно запускать Си-шный код, я решил закопаться в эту тему и попробовать объединить наследие Си и их эффективность с удобным фреймворком. Учитывая то, что в интернете маловато информации про использование FFI, особенно с C#, я решил поделиться своим опытом "построения мостов" на примере двух приложений в этой статье.

Читать далее

ThreadPool.Chain

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


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

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

Читать далее

Система сохранения на Unity для начинающих

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

Привет, Хабр! Меня зовут Игорь, и я Unity Developer. В этой статье попытаюсь максимально просто рассказать и показать, как написать систему сохранения в игре в Unity. Скажу сразу, статья ориентирована для тех, кто только начинает свой путь в освоении разработки игр. Поэтому некоторые архитектурные принципы будут нарушены с целью упрощения кода. Ближе к концу статьи покажу как сохранять миссии, про которые писал ранее. Ну что ж, поехали...

Читать далее

Трейсим .NET микросервисы через OpenTelemetry

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

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

У Uber - тысячи микросервисов. А у Netflix - несколько тысяч

В каком сервисе возникла ошибка? Сервис упал или просто ошибка сети? Что за ошибка возникла?

Стоп!
Рим не за один день был построен

Поэтому начнем с малого и подключим трейсинг к обычной микросервисной системе на ASP.NET Core.

Поможет нам в этом OpenTelemetry

Читать далее

Telegram API и библиотека TDLib для .NET платформ

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

image
Доброго времени суток! В Telegram существует два вида API: Telegram Bot API (обыкновенный бот с пометкой "бот") и Telegram API (клиент и юзербот, который обладает больше функционалом, чем просто бот). В этой статье пойдет речь о втором виде, а именно: что требуется для взаимодействия с Telegram API, какие средства нужны для написания кода своего юзербота на языке C#, как их правильно установить, а также каким образом использовать их.

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

Пройди свой путь в ширину: библиотеки для графов из инди-игры TESTAMENT

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

Графы — это не только математический объект, но и важный инструмент программистов. Они используются в играх, визуализации данных, социальных сетях и других серьезных проектах. Если вы не знаете, как работать с графами, то вы не программист. Конкретно раскладка графа в плоскости — задача не тривиальная. Но что делать, если вы хотите решить эту задачу легковесно и быстро?

Когда я начал работать над своим пет-проектом TESTAMENT, мне нужно было генерировать и отображать произвольные графы. Я хотел, чтобы локации были в виде простых шагов-событий, соединенных между собой. Примерами могут послужить проекты Slay The Spire, Cult of the Lamb, Darkest Dungeon и другие. Исследовав вопрос, я увидел, что существующие библиотеки слишком тяжелые и сложные для моих нужд.

Читать далее

Сказка про Branch prediction

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

Конвейер трудится изо всех сил, чтобы повысить производительность твоей программы. А злобные «if»'ы нагло врываются посреди его работы и всё портят!

На сколько полезен конвейер в современных ЭВМ? Как сильно мешаются ветвления в коде, которые ты написал? И как архитекторы процессоров сглаживают ущерб, который «if»'ы наносят по производительности программ?

Читать далее

Создание сервера онлайн ММО игр на PHP и Unity ч. 11 — FPS, Ping, паузы между командами, интерполяция и экстраполяция

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

В этой серии статей речь пойдет о том что такое PING и какими приемами можно сгладить задержку пересылки пакетов при его низком значении в realtime онлайн играх с примерами кода на C# в игровом движке Unity для игр на ПК, мобильных устройствах и браузерных игр WebGL.

Статья включает в себя видео примеры, демонстрации кода и алгоритм подсчета PING без использований командной строки устройств

Читать далее

Создание фоновых задач в .NET с запросом состояния запущенного таска

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

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

Читать далее

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

Бенчмаркая Capacity 18 коллекций: как быстрей?

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

Уважаемые читатели, в этой статье я хочу рассказать о тесте 18 коллекций с и без capacity и поставить точку в данном вопросе. Тесты сделаны на .net 7 с использованием BenchmarkDotNet и представлен полный код для повторения. Базовые значения 1000 и 10_000.

В данной статье не буду сильно углубляться в коллекции, но немного напишу, что да как.

Основная цель понять, насколько важно задавать начальную емкость, даже примерно и насколько все страдает, если так не делать. Сразу отмечу, что на подавляющем большинстве увиденного мною кода практически всегда не задается capacity.

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

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

Кратко о коллекциях, где емкость не задается:

Читать далее

Реализация миссий в игре на Unity (Ч1)

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

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

Меня зовут Игорь, и я Unity Developer. В этой статье хотел бы рассказать, как можно сделать миссии в игры на Unity. Статья будет состоять из трех частей. В первой части напишем систему для миссий, во второй — интерфейс, а в третьей — сохранение. Ну что ж, поехали!

Читать далее

Бенчмаркая Array Reverse: как быстро перевернуть массив?

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

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

Тестировал с использованием BenchmarkDotNet, так что каждый может проверить результаты и сделать свои выводы.

Сразу отмечу, что для тестов используется атрибут [GlobalSetup], что позволяет не переживать о стартовых данных, так как они будут «Executed once per each N value» и это нам и надо.

Для полной картины происходящего основные тесты идут на массивах с количеством элементов 1000, 10_000, 100_000, 1_000_000, 100_000_000, а самый последний с добавлением до 1_000_000_000 чисел.

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

Для старта используется обычный While, представленный в более удобной записи, чем аналоги на просторах сети:

Читать далее

Как написать генератор кода который сможет поддерживать даже твоя бабушка?

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

Недавно мне понадобилось написать генератор кода для одного из своих проектов. Так как надо было обеспечить поддержку Unity 2021, от более современного API — incremental generators пришлось отказаться сразу. Но пост не об этом, а о том, как повысить читаемость и поддерживаемость синтаксического дерева для генерации исходного кода.

Читать далее

Уязвимость XSS в приложении ASP.NET: разбираем CVE-2023-24322 в CMS mojoPortal

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

1054_XSS_mojoPortal_ru/image1.png
В этой статье изучим с разных сторон уязвимость XSS в CMS, написанной на C#. Вспомним теорию, разберёмся, как дефект безопасности выглядит со стороны пользователя и кода, а также поупражняемся в составлении эксплойтов.

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

Динамические методы в .NET (часть 2)

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

В предыдущей статье я начал свой рассказ динамические методы.

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

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

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

Читать далее

Reciprocal throughput

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

Современные процессоры очень круты. Они таят в себе великое множество секретов и невероятных возможностей. И просто восхитительно, что некоторые из способностей процессоров легко продемонстрировать даже из такого высокоуровневого языка, как C#, буквально за десять строчек кода!

Читать далее

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