Как стать автором
Обновить
78.6

.NET *

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

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

Как рефакторинг помогает не потратить кучу денег на продукт

Уровень сложности Простой
Время на прочтение 7 мин
Количество просмотров 93
Управление разработкой *Проектирование и рефакторинг *.NET *Управление проектами *Анализ и проектирование систем *
Мнение

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

Читать далее
Рейтинг 0
Комментарии 0

Новости

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

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 3.1K
.NET *C# *
Из песочницы

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

Читать далее
Всего голосов 7: ↑2 и ↓5 -3
Комментарии 15

ThreadPool.Chain

Уровень сложности Простой
Время на прочтение 8 мин
Количество просмотров 2.1K
Блог компании Контур Программирование *.NET *C# *


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

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

Читать далее
Всего голосов 12: ↑10 и ↓2 +8
Комментарии 8

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

Уровень сложности Простой
Время на прочтение 16 мин
Количество просмотров 1.5K
.NET *C# *Микросервисы *
Туториал

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

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

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

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

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

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

Читать далее
Всего голосов 6: ↑6 и ↓0 +6
Комментарии 2

Истории

Как я писал оркестратор для… оркестратора UiPath

Уровень сложности Простой
Время на прочтение 6 мин
Количество просмотров 1K
.NET *C# *
Из песочницы

Здравствуйте, сегодня я хотел бы рассказать про свой путь написания оркестратора для оркестратора UiPath. Поведать, какая была первопричина и во что это вылилось.

Как вводную, расскажу про компанию UiPath и ее основной продукт: среда разработки и выполнения программых роботов(далее АРМ). Изначально, продукт разрабатывался как инструмент UI-тестирования, как для web, так и для desktop приложений. Продукт был неплох, но как инструмент для тестирования нужен небольшому кругу лиц, тогда у менеджеров компании появилась идея продавать как платформу для роботизации бизнес процессов. Суть и там и там сводится к имитации действий пользователя, только в первом случае мы это делаем в тестовом окружении, а во втором - в реальной системе. Для управления кучей программных роботов за отдельные деньги, покупается лицензия на оркестратор.

Стоит рассказать про лицензирование. Среда выполнения программных роботов делилась на такие типы как: Attended (выполняется на машине пользователя, запуск производится через трей, запуск через поставляемый компанией оркестратор невозможен) и UnAttended (чаще всего выполняется на виртуальной машине, есть возможность запуска через поставляемый оркестратор). Есть ещё типы лицензий: Named User (выполнение только под одной уникальной доменной записью на одном АРМ) и Concurrent (одна доменная учётная запись может одновременно использоваться на нескольких АРМ). Некоторые вышеуказанные типы комбинируются между собой, соответственно и разная цена на них. Так UnAttended Concurrent - самая дорогая из них, а Named User(Attended) - самая дешевая. Разница в цене между ними вполне достигала 5-7 раз и это все цена на одно рабочее место. Необходимо учитывать, что лицензия покупается на год, но в течении года потребность в лицензиях разная. Более того, потребность разная и в течении недели. Так как автоматизируем действия пользователя, то чаще всего и запускаем роботов в это время (с 9 до 18) Соответственно, если считать только рабочее время, то робот работает 50% времени, а в остальное простаивает, но счётчик, как в такси, тикает.

Читать далее
Всего голосов 2: ↑1 и ↓1 0
Комментарии 0

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

Уровень сложности Простой
Время на прочтение 6 мин
Количество просмотров 3.3K
Блог компании Timeweb Cloud .NET *C# *
Туториал

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

Читать дальше →
Всего голосов 27: ↑26 и ↓1 +25
Комментарии 3

Пишем надстройку Excel на Excel-DNA. Часть 2

Уровень сложности Простой
Время на прочтение 6 мин
Количество просмотров 1.4K
.NET *
Туториал

Это продолжение статьи о создании надстройки для Excel с помощью библиотеки Excel-DNA о сборке простой надстройки с пользовательской формулой. Здесь рассмотрим как сделать свою панель с кнопками, взаимодействовать с рабочей книгой, выводить уведомления, а также получить доступ к элементам интерфейса Excel.

Читать далее
Всего голосов 2: ↑2 и ↓0 +2
Комментарии 1

Писать моды для RTS: это вам не конфиги дергать

Уровень сложности Простой
Время на прочтение 14 мин
Количество просмотров 4K
.NET *Разработка игр *
Кейс

Сложности моддинга, обзор движка игры и приемы геймдизайна. Какие проблемы были решены для RTS игры и её сообщества.

Читать далее
Всего голосов 18: ↑18 и ↓0 +18
Комментарии 6

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

Уровень сложности Простой
Время на прочтение 11 мин
Количество просмотров 1.7K
.NET *Разработка игр *C# *
Из песочницы

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

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

Читать далее
Всего голосов 6: ↑6 и ↓0 +6
Комментарии 0

Сказка про Branch prediction

Время на прочтение 9 мин
Количество просмотров 6.3K
Блог компании Контур Высокая производительность *Программирование *.NET *C# *

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

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

Читать далее
Всего голосов 37: ↑37 и ↓0 +37
Комментарии 23

Пишем надстройку для Excel на .NET с помощью библиотеки Excel-DNA

Уровень сложности Простой
Время на прочтение 6 мин
Количество просмотров 3.4K
.NET *
Из песочницы

Excel-DNA - библиотека для .NET, с помощью которой можно написать и собрать полностью самодостаточный файл надстройки для Excel с расширением .xll
Этот файл достаточно положить в пользовательскую папку, без прав администратора, и просто включить в настройках Excel.

Такая надстройка будет иметь доступ к COM-модели Excel, C API Excel - позволяет взаимодействовать с интерфейсом программы и рабочими книгами. Сможет реализовать пользовательские формулы и добавить свое меню на интерфейсную ленту Ribbon UI.

В статье я расскажу как написать свою формулу для Excel на C#. Собрать и установить свою первую надстройку.

Читать далее
Всего голосов 12: ↑12 и ↓0 +12
Комментарии 13

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

Уровень сложности Средний
Время на прочтение 12 мин
Количество просмотров 5.7K
Программирование *.NET *C# *
Recovery mode
Из песочницы

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

Читать далее
Всего голосов 11: ↑10 и ↓1 +9
Комментарии 10

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

Уровень сложности Простой
Время на прочтение 5 мин
Количество просмотров 1.4K
Программирование *.NET *C# *
Аналитика

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

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

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

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

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

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

Читать далее
Всего голосов 4: ↑3 и ↓1 +2
Комментарии 5

Работа с файлами в приложениях: как уйти от зарубежных .NET-библиотек

Время на прочтение 11 мин
Количество просмотров 6.1K
.NET *ASP *PDF API *C# *

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

Я Максим Саутин из компании SautinSoft. Хочу порассуждать, почему в России не было собственных разработок в этом направлении, и рассказать, как работают наши .NET-библиотеки, которые используются на российском рынке. 

Читать далее
Всего голосов 39: ↑8 и ↓31 -23
Комментарии 77

Создание CLI-приложений при помощи System.CommandLine в .NET

Уровень сложности Простой
Время на прочтение 5 мин
Количество просмотров 4.1K
.NET *C# *
Обзор

В .NET уже несколько лет существует библиотека System.CommandLine, позволяющая быстро создавать CLI-приложения. Несмотря на то, что библиотека ещё в стадии beta, её активно используют и сами разработчики Microsoft, например, в утилите dotnet из пакета .NET SDK. 

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

Читать далее
Всего голосов 16: ↑16 и ↓0 +16
Комментарии 3

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

Уровень сложности Простой
Время на прочтение 12 мин
Количество просмотров 3.4K
Программирование *.NET *C# *
Аналитика

Уважаемые читатели, в этой статье я хочу рассказать о небольших тестах получения обратного массива и представить свои выводы. Тесты сделаны на .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, представленный в более удобной записи, чем аналоги на просторах сети:

Читать далее
Всего голосов 5: ↑3 и ↓2 +1
Комментарии 7

Создание сервера для онлайн ММО игр на PHP ч. 9 — Игровые серверные механики

Уровень сложности Простой
Время на прочтение 3 мин
Количество просмотров 3.9K
PHP *.NET *Разработка игр *Lua *Unity *
Роадмэп

После успешной оптимизации клиентской части и серверной архитектуры пришла пора писать механики самой игры для взаимодействия по API — я называю их событиями (они вешаются на какой либо игровой объект на сервере, помещаются в очередь и срабатывают когда придет их время).

Суть работы взаимодействия сервера и клиентской части следующая:

Читать далее
Всего голосов 10: ↑7 и ↓3 +4
Комментарии 31

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

Время на прочтение 9 мин
Количество просмотров 1.5K
Блог компании PVS-Studio Информационная безопасность *Программирование *.NET *C# *

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

Читать дальше →
Всего голосов 8: ↑8 и ↓0 +8
Комментарии 2

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

Уровень сложности Средний
Время на прочтение 6 мин
Количество просмотров 4.2K
.NET *C# *
Туториал

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

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

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

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

Читать далее
Всего голосов 9: ↑8 и ↓1 +7
Комментарии 6

Reciprocal throughput

Уровень сложности Простой
Время на прочтение 10 мин
Количество просмотров 7.1K
Блог компании Контур Высокая производительность *Программирование *.NET *C# *

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

Читать далее
Всего голосов 75: ↑74 и ↓1 +73
Комментарии 39

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

Работа

.NET разработчик
77 вакансий