Обновить
128K+

C# *

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

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

Ограничения размера cookie в ASP.NET Core в продакшене: причины и способы решения

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

В dev-среде аутентификация может годами выглядеть безобидно: логин прошёл, cookie выпущена, [Authorize] работает. А потом приложение переезжает в продакшен — и часть пользователей начинает вылетать из системы без понятной ошибки. Иногда всплывает 431 Request Header Fields Too Large, иногда сервер просто перестаёт принимать сессию, которая ещё минуту назад выглядела корректной.

В статье разбираем, почему cookie аутентификации в ASP.NET Core разрастаются до опасных размеров, как это проявляется в реальных системах и какие решения помогают не лечить симптомы, а привести схему аутентификации в нормальное production-ready состояние.

Разобрать проблему

MonoGame — игровой движок для тех, кто любит изобретать велосипеды

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

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

Основные кандидаты у всех на слуху: Unity, Unreal Engine и Godot.

Но кроме них существует ещё немало движков второго эшелона, про которые мало кто знает.

Собственно, про один из них - под названием MonoGame - я и хочу рассказать.

Читать далее

Как я сделал утилиту для автоматизации ручных тестов

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

Привет, меня зовут Алексей и я C# разработчик. Однажды передо мной стояла задача написать утилиту для взаимодействия с различными UI-элементами в Windows и во всех популярных браузерах. Сама утилита не была связана с тестированием, но вполне годилась для автоматизации некоторых действий на машине, так как была простой в управлении и интуитивно понятной. Мне понравилось работать в этом направлении и возникла идея создания инструмента, который не будет перегружен широким функционалом RPA решений, но возьмёт от них всё что нужно для тестирования интерфейсов, чтобы получился действительно полезный инструмент-помощник для QA с низким порогом входа.

Читать далее

Как автоматизировать повторную обработку сообщений из архива в DATAREON Platform

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

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

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

В статье покажу, как реализовать механизм повторной отправки сообщений из архива в обработку с использованием DATAREON Platform.

Читать далее

Arguments to Config — простая и мощная библиотека для парсинга аргументов в CLI-приложении на C#

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

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

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

Читать далее

Книга: «Head First. Изучаем C# и .NET. 5-е изд.»

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

Привет, Хаброжители! Революционный гид по программированию на C# поможет превратить занудную учебу в захватывающее приключение.

Вы научитесь использовать классы и объектно-ориентированное программирование, создавать 3D-игры в Unity, работать с данными через LINQ-запросы. И все это — решая головоломки, выполняя практические упражнения, создавая реальные приложения.

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

Читать далее

Фреймворк GameFramework.Pro (.Net)

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

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

Читать далее

Свой P2P-файлообменник с блэкджеком и NAT punching: как пет-проект Z-Folder стал заменой облакам

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

В современных реалиях, когда интернет всё чаще напоминает минное поле с

блокировками и замедлениями, надежда на зарубежные (да и на некоторые

локальные) сервисы тает с каждым днем. В какой-то момент я пришел к выводу:

если хочешь, чтобы инструмент работал стабильно и не зависел от настроения

провайдеров или геополитики — напиши его сам.

 

Так появился, например, Fury Messenger (о котором я уже писал здесь) — мессенджер для

Android, заточенный под нестабильное соединение. Но решив проблему текстового

общения, я столкнулся со следующей «болью»: обмен файлами и документооборот. Именно на большом обьеме, а не кидая файлики или фоточки через мессенджер.

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

компьютерами, почему облака — это иногда лишнее звено, и как мой «велосипед»

в итоге уехал в B2B-сегмент.

 

Проблема: Танцы с бубном вокруг VPN

 Типичный сценарий обмена файлами сегодня выглядит так:

 1.  Залить в Telegram (ограничение по размеру, скорость иногда «режут»).

2.  Закинуть на Google Drive/Dropbox (нужен VPN, который нужно то включать, то

    выключать, чтобы не отвалились другие сервисы).

3.  Передать через локальную сеть (сложно настроить права доступа, если люди

    сидят в разных сегментах или городах).

 

Мне хотелось простоты: как в старой доброй Windows Shared Folder, но через

интернет и без необходимости быть системным администратором 80-го уровня.

Чтобы можно было просто «расшарить» папку конкретному человеку и передать файл

на максимально возможной скорости канала.

Читать далее

Async/Await в C# это синтаксический сахар для конечного автомата

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

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

Читать далее

Как я автоматизировал UI в Windows: UIAutomation и Win32

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

Привет, меня зовут Алексей, я C# разработчик. Я разрабатывал библиотеку для автоматизации взаимодействия с различными UI‑элементами и их захвата. Одной из поддерживаемых сред в такой библиотеке обязательно должна быть Windows и в ней так же требуется: находить кнопки, поля, окна, списки, нажимать на них, читать значения, вводить текст и в целом обращаться с интерфейсом не как пользователь с мышкой, а как программа.

На первый взгляд задача звучит просто: нашли элемент, кликнули, пошли дальше. Но в реальных приложениях у элемента может не быть (считай не будет) нормального AutomationId, у нескольких окон может быть один и тот же заголовок, дерево интерфейса может прогружаться не сразу, а старое desktop‑приложение вообще не предназначено для взаимодействия с современными API для автоматизации.

В итоге в моей библиотеке появилось два основных Windows‑подхода:

Читать далее

Голос в текст, текст в перевод: строим десктопное приложение для распознавания речи с Azure Speech SDK и NAudio

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

Голос в текст, текст в перевод: строим десктопное приложение для распознавания речи с Azure Speech SDK и NAudio

Читать далее

Подводные камни gRPC в .NET

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

gRPC кажется простым только до первого реального проекта. В этой статье - практические решения для типичных подводных камней: nullable, decimal, DateTime, наследование, дженерики и enum. Всё на основе реального опыта переноса сотни моделей с REST и WCF на gRPC. Обновлено под protoc v34.1 и dotnet 10.

Читать далее

Архитектура MassTransit: как устроена библиотека под капотом

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

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

Если вам тоже интересно, что скрывается за consumers, publishers и sagas - приглашаю к чтению.

Читать далее

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

Генерация типов в Runtime

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

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

В этой статье расмотрим как создавать типы используя Reflection.Emit и реализовывать методы через Expression Trees

Читать далее

Почему if/else убивает ИИ врагов в Unity и как от этого уйти

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

ИИ врагов в Unity часто начинается с пары аккуратных if/else, а заканчивается кодом, где новое поведение ломает старое, приоритеты конфликтуют, а отладка превращается в раскопки.

В статье разберём, почему такая логика быстро перестаёт масштабироваться, где FSM тоже начинает буксовать, и как Behaviour Tree помогает собрать поведение врага из понятных, переиспользуемых узлов — на C#-примерах с Selector, Sequence, Decorator, Blackboard и типичными ошибками, которые всплывают уже в реальном проекте на Unity.

Разобрать подход

Свой маленький GIS: приложение для мультиспектральных и гиперспектральных снимков

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

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

Идея была в том, чтобы собрать небольшое настольное приложение, которое умеет работать с реальными спутниковыми данными: Landsat 8, Sentinel-2 и AVIRIS. То есть открывать не готовую RGB-картинку, а набор спектральных каналов, собирать из них естественные и псевдоцветные изображения, считать растровые индексы, выделять эталоны прямо на снимке, классифицировать пиксели, сегментировать изображение и пробовать более исследовательские вещи вроде EMD-разложения.

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

Читать далее

Вы неправильно используете IDisposable: почему using не спасает, когда объект утекает в другой поток

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

using в C# выглядит как универсальная страховка от утечек ресурсов, пока объект живёт строго внутри одного метода. Но стоит вернуть его наружу, передать в фоновую задачу, положить в коллекцию или доверить DI‑контейнеру — и привычное правило начинает работать против вас.

В статье разберём типичные сценарии, где IDisposable превращается в источник нестабильных багов: закрытые раньше времени соединения, гонки с Task.Run, утечки обработчиков и тот самый HttpClient, который лучше не создавать на каждый запрос.

Читать далее

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

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

У архетипов в ECS есть неотъемлимое преимущество перед обычными sparse set'ами - локальность данных. Но есть и существенная проблема - хаотическое копирование данных при миграции из одного архетипа в другой. Что если попробовать избавиться от этого недостатка, оставив локальность данных? Предлагаю рассмотреть статический архетип, который требует явного вызова метода для миграции данных.

Читать далее

Как я в 17 лет кратно увеличил производительность компании крупного застройщика Чебоксар

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

Мой знакомый работал в компании, которая занимается проектированием (эта организация принадлежит крупнейшему застройщику Чебоксар, но я не называю её по правилам Хабра). Он рассказал, что расчёты удельных мощностей занимают очень много времени и неудобны. А таких расчётов в компании — десятки в день.

Проблема была в следующем: сотрудник вводит одну величину, а по ней ищет другие в таблицах. Пока человек найдёт нужное значение в таблице, внесёт его в ячейку Excel — и так ещё 4 раза на один расчёт — проходит реально много времени. А если он ошибётся (что вполне вероятно при рутине)? Расчёты придётся переделывать.

Читать далее

CraftHub для VS Code: редактируй JSON как таблицу прямо в редакторе

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

Если вы хоть раз ловили себя на том, что ищете нужную строку в 300-строчном JSON — эта статья для вас. CraftHub теперь живёт прямо в VS Code: открыл файл, переключился в таблицу, поправил, переключился обратно

Читать далее