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

C# *

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

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

Nuke, AppVeyor, GitVerse

Время на прочтение11 мин
Количество просмотров138

Недавно я работал над небольшим собственным проектом, представляющим собой Roslyn-генератор интерфейсов только для чтения для существующих классов. Когда я посчитал, что пришло время выкладывать результаты в виде NuGet-пакета, я решил, что нужно создать автоматизированный конвейер сборки. В прошлом я уже решал такую задачу с помощью AppVeyor. Но на этот раз имелись некоторые отличия. Во-первых, в прошлом я использовал Cake для описания задач сборки. На этот раз я решил попробовать Nuke. Последний обещает лучшую интеграцию с Visual Studio. Кроме того, я решил попробовать русский аналог GitHub - GitVerse. Что из этого получилось, читайте ниже.

Читать далее

Новости

Я стала злодейкой и теперь мои контроллеры лежат в библиотеках. Архитектурный паттерн SUFA в .net приложении

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

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

Читать далее

Горе от ума, или как я писал виртуальную машину на C#

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

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

Читать далее

Микросервисы на C#. Часть 2

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

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

Первая часть.

Читать далее

Истории

Микросервисы на C#. Часть 1

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

В любой сфере деятельности есть знаковые фигуры. Признанные эксперты. Лидеры мнений. Программирование не является исключением. Всем нам знакомы имена Кернигана, Кнута, Торвальдса, Скита. Не последним в этом ряду будет и имя Мартина Фаулера. Он написал книгу «Рефакторинг», которую обязан прочитать любой профессиональный программист. Он предложил термин Dependency Injection. Он участвовал в подготовке каталога действительно полезных паттернов проектирования. Он был одним из авторов Манифеста Гибкой Разработки Программ.

В 2014-м вместе с Джеймсом Льюисом Фаулер написал статью о микросервисах, которая начинается словами: «Термин „микросервисная архитектура‟ уже несколько лет применяется, чтобы описать способ проектирования программ»… Очевидно, теме микросервисов без малого десять лет. Можно ли добавить что-нибудь к тому, что уже было сказано и написано за это время?

Оказывается, можно.

Читать далее

Kakikata Shogun AI: Telegram-бот для изучения американского английского — и отличный pet-проект для стажёра

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

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

Сегодня я хочу рассказать о создании простого, но полезного пет-проекта — Telegram-бота, который помогает пользователям улучшать их английский с помощью GPT-4. Проект отлично подойдет для начинающих разработчиков, так как использует современный стек технологий и имеет понятную архитектуру.

Читать далее

Как управлять памятью в C#: StructLayout

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

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

Сегодня рассмотрим тему, которая обычно ассоциируется с C или Rust, но никак не с C#. А именно — ручное управление памятью, байтовые смещения, бинарная сериализация и прочая низкоуровневые вещи. Зачем? Допустим, в одном из проектов потребовалось прочитать старый бинарный лог от С-подобной прошивки. Формат документации был: offset 0 — 1 byte: Type; offset 1 — 2 bytes: ID; offset 3 — 4 bytes: Timestamp; и т.д.

Разбирать всё это вручную с BinaryReader? Нет, спасибо. Можно воспользоваться StructLayout, FieldOffset, MemoryMappedFile, Unsafe.As<T>() и Span<byte>.

Читать далее

Сравнение 2х нишевых библиотек для написания миграций в монго

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

В работе веб-разработчика (в частности бекенд-разработчика) встречается много разных интересных и уникальных задач. В этой статье речь пойдёт о такой теме как написание миграций документно-ориентированной БД mongo. Как и в любой задаче у нас имеется несколько вариантов решения проблемы. Мы подробно разберём примеры использования 2х разных c#-библиотек, не углубляясь в детали реализации. Посмотрим их плюсы и минусы и выберем 1 из них для выполнения поставленной задачи. В конце нас ждёт небольшое сравнение производительности, так что пристегнитесь, ведь будет интересно.

Пристегнуться!

Инновационные технические решения и баги в исходном коде PowerShell

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

PowerShell — известный инструмент от Microsoft. Но какие секреты сможет найти статический анализатор в его исходном коде? Посмотрим в этой статье.

Читать далее

Локальный AI-ассистент в почте: инструкция по применению

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

Привет, Хабр! Это Eppie – p2p децентрализованная почта. У нас новости: мы добавили в Eppie ИИ. Сейчас расскажем, зачем, и как им пользоваться.

Локальный ИИ == приватный ИИ

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

Читать далее

Многопоточность. Снизу вверх. Потоки в языке C#

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

Привет, Хабр! Это Дмитрий Бахтенков. Добро пожаловать в третью часть цикла статей «Многопоточность. Снизу вверх»! Мы уже разобрали процессор и операционную систему, а сегодня поговорим про использование потоков в .NET с помощью языка программирования C#.

Эта статья — обзор основных возможностей взаимодействия с потоками в .NET.

Читать далее

Тест от айти-джинна: справишься с рабочими задачами аналитика, тимлида, тестировщика?

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

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

Знакомая ситуация? Тогда, айтишник, тебе повезло — под катом ты встретишь IT-джинна, который предлагает всем, кто ждёт перемен или просто хочет развлечься, отправиться в увлекательное путешествие: испытать силы и знания в трёх направлениях работы с продуктами компании Контур. 

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

В этом тесте ты сам выбираешь, каким будет твоё приключение. А джинн подстрахует в случае ошибки. Стартуем?

Начать квест

Событийный диспетчер отложенных задач на C#: консолидация и дедупликация данных в текущей инстанции

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

Всем привет, меня зовут Артур Богданов. Я занимаюсь проектированием, разработкой и оптимизацией высоконагруженных веб-приложений на ASP.NET Core.

Хочу поделиться с сообществом своей разработкой, которая позволяет использовать несколько фоновых задач (или «раннеров») для отложенной обработки консолидированных данных. Раннеры построены на шаблоне PubSub для асинхронного ожидания новых задач, что делает этот подход более реактивным, но менее ресурсоемким.

Читать далее

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

19 марта – 28 апреля
Экспедиция «Рэйдикс»
Нижний НовгородЕкатеринбургНовосибирскВладивостокИжевскКазаньТюменьУфаИркутскЧелябинскСамараХабаровскКрасноярскОмск
22 апреля
VK Видео Meetup 2025
МоскваОнлайн
23 апреля
Meetup DevOps 43Tech
Санкт-ПетербургОнлайн
24 апреля
VK Go Meetup 2025
Санкт-ПетербургОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань
14 мая
LinkMeetup
Москва
20 – 22 июня
Летняя айти-тусовка Summer Merge
Ульяновская область

Шахматный советник для тех, кто зевает и не любит читеров

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

Это новый вариант статьи, уже выложенной на Хабре. Та статья писалась на эмоциях, сразу после первых декабрьских версий. Нынешняя — это результат трехмесячных воскресных посиделок в Visual Studio. Тут и параллельные процессы и манипуляции в js и даже примитивный шахматный движок на C#.

Погнали

Кроссплатформенный терминал Modbus TCP / RTU / ASCII с открытым исходным кодом: Часть 4

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

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

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

Подробнее читайте в этой статье!

Читать далее

C#: использование Unit test с Apache Ignite

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

Привет всем! Меня зовут Артём, я работаю в t2 разработчиком .Net и по собственному опыту знаю, что одним из ключевых показателей качества кода является покрытие кода тестами. В этой статье поговорим конкретно о Unit-тестах и разберёмся, как покрыть юнит тестами код, имеющий зависимости от внешнего ресурса со статическими методами.

Интересно? Пойдём под кат!

История одной автоматизации в BIM-проекте: от скриптов в Dynamo до собственного плагина и SQL Server

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

Всем привет! Меня зовут Кирилл Якименко, я – BIM-эксперт компании КРОК, работаю с BIM-технологиями уже около 6 лет, входил даже в клуб Autodesk Expert Elite. В КРОК я занимаюсь тем, что внедряю BIM технологии, развиваю и поддерживаю их применение.

Сегодня я вам расскажу о том, какой путь прошел КРОК в эволюции автоматизации процессов в Revit, как большой и тяжелый проект нам помогал в этом, а не мешал.

Читать далее

OpenCV на С# (OpenCVSharp)

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

Вероятно после прочтения заголовка у многих возникнет вопрос как OpenCV связан с C#, почему не python? На самом деле ответ простой, потому что нет такого опыта программирования на python, а потребность в OpenCV возникла. OpenCV - прекрасная библиотека для обработки изображений. А OpenCVSharp - это оболочка .NET для библиотеки компьютерного зрения OpenCV, которая позволяет нам с комфортом использовать её из приложения .NET на Windows, Linux или других OS.

Для начала вспомним о том, что изображение в коде выглядит как набор двухмерных матриц яркостей палитры RGB. Всегда возникает вопрос, как с этим работать? Библиотека OpenCV предоставляет прекрасные возможности для обработки изображений, а также покадровой обработки видео. 

Читать далее

Представление иерархии и выполнение иерархических запросов в ClickHouse с использованием хешей

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

Привет, Хабр! Достаточно часто используются иерархические фильтры или отчеты с иерархией, и представление иерархии может быть актуально как для UI (например, иерархических фильтров), так и для отчетов или дашбордов. Если рассматривать только структуру запроса с иерархией, без расчета промежуточных итогов и т.д., то сохранение структуры иерархического UI элемента при большом уровне вложенности, а также передача этой иерархии с UI на бэкенд и дальше, например, в виде SQL запроса в СУБД может быть относительно нетривиальной задачей. При относительно большом уровне вложенности (например, иерархия в 10 уровней), при решении «в лоб» и сохранении всех 10 выбранных значений на последнем уровне иерархии, станет неудобно хранить и передавать в качестве параметров с UI на бэкенд (для 1000 строк и 10 уровней вложенности может быть уже условно 10000 параметров), также растет и количество параметров в SQL, и проблемы усугубляются в случае микросервисной архитектуры, когда запрос SQL не сразу отправляется, например, в ClickHouse, а ещё эти 10000 параметров «путешествуют» из UI в один или несколько микросервисов, пока не попадут в ClickHouse. В связи с этим хочу рассмотреть одно из возможных решений проблемы с помощью хеширования на примере C# и ClickHouse, но это «не идеи, проверенные на продакшене», больше тема к обсуждению. Тем, кому интересно решение проблем иерархических запросов на примере C# и ClickHouse — добро пожаловать под кат :)

Читать далее

Мои правила

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

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

Читать далее
1
23 ...