Как стать автором
Обновить
47.7
Рейтинг

C# *

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

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

Мониторинг сообщений в RabbitMQ

Visual Studio *ERP-системы *C# *Microsoft Azure *
Рассмотрим классическую схему построения конвейера сообщений в RabbitMQ состоящую из элементов Producer, Exchange, Queue и Consumer.



Задача состоит в том, что бы организовать мониторинг происходящего в очереди и не затронуть основное программное обеспечение (ПО), добавить гибкую возможность построения отчетов и при этом избежать дополнительных затрат. Итоговая конструкция должна позволять быстро строить отчеты для анализа потока данных на конвейере без использования основных мощностей серверов (что позволит избежать дополнительной нагрузки) и основного ПО. Подход должен быть легко переносимым на более сложную архитектуру.
Всего голосов 22: ↑19 и ↓3 +16
Просмотры 30K
Комментарии 10

Disposable ref structs в C# 8.0

Блог компании Семинары Станислава Сидристого .NET *C# *
Перевод

Давайте посмотрим, что об этом сказано в блоге о предстоящих изменениях в С# 8.0 (версия Visual Studio 2019 Preview 2):


«stack-only структуры появились в С# 7.2. Они чрезвычайно полезны, но при этом их использование тесно связано с ограничениями, например невозможностью реализовывать интерфейсы. Теперь ссылочные структуры можно очищать с помощью метода Dispose внутри них без использования интерфейса IDisposable».


Так и есть: stack-only ref структуры не реализуют интерфейсы, иначе возникала бы вероятность их упаковки. Следовательно, они не могут реализовывать IDisposable, и мы не можем использовать эти структуры в операторе using:


class Program
{
   static void Main(string[] args)
   {
      using (var book = new Book())
      {
         Console.WriteLine("Hello World!");
      }
   }
}

ref struct Book : IDisposable
{
   public void Dispose()
   {
   }
}

Попытка запустить этот код приведёт к ошибке компиляции

Читать дальше →
Всего голосов 29: ↑28 и ↓1 +27
Просмотры 15K
Комментарии 42

Релиз кросс-платформенного .NET UI-тулкита AvaloniaUI 0.8

Open source *Программирование *.NET *C# *

Состоялся очередной бета-релиз AvaloniaUI.



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

Читать дальше →
Всего голосов 84: ↑84 и ↓0 +84
Просмотры 17K
Комментарии 23

Интеграция с SAP ERP. Реализация мобильного прайс-чекера в магазине

.NET *ERP-системы *C# *
Tutorial

В рассматриваемом нами примере интеграции SAP ERP со сторонним ПО, мы будем использовать SAP Connector for Microsoft .NET для получения данных из SAP. Программное обеспечение для терминала сбора данных (ТСД) будет взаимодействовать с Microsoft Internet Information Server (IIS) на сервере и с любым клиентским ПО типа Internet Explorer, технология используемая для разработки компоненты — asp.net на языке программирования C#.

Читать дальше →
Всего голосов 7: ↑7 и ↓0 +7
Просмотры 3.6K
Комментарии 0

Локализация любых текстов

.NET *C# *Unity *
Recovery mode
Из песочницы
Большинство игр, используют локализацию по принципу ключа, то есть для описания конкретного текста нужен ключ, я же предлагаю вариант получше, хоть и этот вариант не подходит тем у кого есть озвучка в играх, тут уж проще через ключ.

Что такое ключ и зачем он нужен


Ключ, а точнее ключевое слово — это слово по которому будет определено какой именно текст нужно, а потом уже идет поиск по выбранному языку. Пример ключевого слова: scene_Escape_from_jail_Ethan_dialog_with_Mary_3, да, примерно такого вида будет ключ, если ваша игра будет иметь много сцен, большой сюжет. Я же предлагаю прямо сразу писать фразу на одном из языков, чаще всего английский или тот которым свободно владеет программист. Кстати, поскольку все фразы текущего языка и основного языка будут лежать в оперативке, это будет более производительная чем доставать каждый раз из файла, для больших же игр, можно немного модифицировать файл под каждую сцену.
Читать дальше →
Всего голосов 11: ↑2 и ↓9 -7
Просмотры 3K
Комментарии 19

Проверяем исходный код Roslyn

Блог компании PVS-Studio .NET *Visual Studio *Компиляторы *C# *
PVS-Studio vs Roslyn

Время от времени мы возвращаемся к проектам, которые уже проверяли ранее с помощью PVS-Studio и писали про это статьи. Делать это интересно по двум причинам. Во-первых, чтобы понять, насколько лучше стал наш анализатор. Во-вторых, чтобы отследить, обратили ли авторы проекта внимание на нашу статью, а также на отчет об ошибках, который мы им обычно предоставляем. Конечно, ошибки могут быть исправлены и без нашего участия. Но всегда приятно, когда именно наши усилия помогают сделать какой-то проект лучше. Не стал исключением и Roslyn. Предыдущая статья о проверке этого проекта датируется 23 декабря 2015 года. Это довольно давно, учитывая путь, который за это время проделал в своём развитии наш анализатор. Дополнительный интерес лично для нас Roslyn представляет ещё и тем, что на нём базируется ядро C# анализатора PVS-Studio. Таким образом, мы очень заинтересованы в качестве кода этого проекта. Устроим ему повторную проверку и выясним, что же нового и интересного (но будем надеяться, что ничего существенного) там сможет найти PVS-Studio.
Читать дальше →
Всего голосов 49: ↑48 и ↓1 +47
Просмотры 7.7K
Комментарии 6

CLRium #5: Garbage Collector. Крупнейший семинар по .NET

Блог компании Семинары Станислава Сидристого Программирование *.NET *Алгоритмы *C# *

Наш семинар уверенно набирает слушателей и постепенно перерастает офис компании EPAM в Петербурге: мы планируем набрать до 250 разработчиков под одной крышей как в Петербурге, так и в Москве. А всё почему?


Когда-то я выступал с докладом по работе Garbage Collector и доклад этот хоть и был длиной в 45 минут, он покрывал все известные на тот момент темы. Вы наверняка его видели: ведь он был и на CLRium #2 и на конференции .NEXT, где являлся кей-ноутом. Докладом, открывающим конференцию (огромное спасибо 23derevo и real_ales за возможность). Кроме моего и многих других докладов в свет вышла книга Under the Hood of .NET Memory Management, проливающая свет на алгоритмы работы подкапотного пространства платформы .NET. И примерно в тот период времени, когда к движку CLR так вырос интерес, на собеседованиях начали появляться вопросы про этот самый GC. Не поверхностные вопросы, а с некоторым уклоном в "расскажите поподробнее". И хоть такие вопросы и вызывали бурю возмущения у специалистов, те люди, которые рассказывали о ядре подробно, были без проблем устроены на работу. Зачастую, с хорошим повышением оклада.


Сегодня у вас есть по сути два пути, чтобы стать приоритетом #1 для работодателя:


  1. Найти месяц-два времени и прочитать книгу Pro .NET Memory Management
  2. Сходить на наш семинар и за один день понять вообще всё. Плюс получить видеозаписи для того чтобы потом освежить память


CLRium #5: Garbage Collector пройдет 13 апреля в Санкт-Петербурге и 20 апреля — в Москве, а все подробности — под катом

Читать дальше →
Всего голосов 29: ↑29 и ↓0 +29
Просмотры 3.9K
Комментарии 3

Агрегатор событий для Unity3d (Event Aggregator)

C# *Unity *
Из песочницы
Идея написать свой расширенный агрегатор событий для Unity3d назрела давно. Прочитав несколько статей на эту тему, я понял что нет достаточно «правильного» (в рамках Unity3d) и нужного для меня агрегатора, все решения урезаны и не обладают нужным функционалом. 

Необходимый функционал:


  1. Любой класс может подписаться на любое событие (часто агрегаторы в юнити делают подписчиками конкретные Gameobject)
  2. Должна быть исключена возможность двойной подписки конкретного экземпляра, на конкретное событие (в стандартных средствах за этим нужно следить самому)
  3. Должен быть функционал как ручной отписки, так и автоматической, в случае удаления экземпляра/отключения монобеха (хочется подписаться и не париться что подписчик вдруг откинет копытца)
  4. события должны уметь перекидывать данные/ссылки любой сложности (хочется в одну строку подписаться и получить весь комплект данных без заморочек)
Читать далее
Всего голосов 18: ↑13 и ↓5 +8
Просмотры 7.4K
Комментарии 6

Реверс-инжиниринг приложений после обфускации (Часть 2)

Assembler *C# *Реверс-инжиниринг *
Tutorial

Введение


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

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

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


Продолжаем изучать код плагина к Visual Studio Atomineer Pro Documentation (далее APD). Давайте познакомимся поближе с инструментом и с его возможностями.
Читать дальше →
Всего голосов 19: ↑17 и ↓2 +15
Просмотры 5.5K
Комментарии 0

Триллион маленьких шинглов

Блог компании «Антиплагиат» Программирование *.NET *Алгоритмы *C# *


Источник изображения:www.nikonsmallworld.com


Антиплагиат – это специализированный поисковик, о чем уже писали ранее. А любому поисковику, как ни крути, чтобы работать быстро, нужен свой индекс, который учитывает все особенности области поиска. В своей первой статье на Хабре я расскажу о текущей реализации нашего поискового индекса, истории его развития и причинах выбора того или иного решения. Эффективные алгоритмы на .NET — это не миф, а жесткая и продуктивная реальность. Мы погрузимся в мир хеширования, побитового сжатия и многоуровневых кешей с приоритетами. Что делать, если нужен поиск быстрее, чем за O(1)?


Если кто-то еще не знает, где на этой картинке шинглы, добро пожаловать…


Читать полностью
Всего голосов 36: ↑34 и ↓2 +32
Просмотры 16K
Комментарии 41

Инкапсуляция для настоящих самураев, или нюансы, связанные с ключевым словом internal в C#

C# *ООП *
Из песочницы

Пролог: internal is new public


Каждый из нас мечтал о проекте, где всё будет сделано правильно. Это кажется вполне естественным. Как только ты узнаёшь о самой возможности писать хороший код, как только слышишь легенды о том самом коде, который можно легко читать и изменять, сразу загораешься тем самым «ну вот теперь я точно всё сделаю правильно, я ведь теперь умный и Макконнела читал».


image

Случился такой проект и в моей жизни. Очередной. Причём делаю я его под добровольным надзором, где за каждой моей строчкой следят. Соответственно, уже не только хотелось, но и надо было делать всё правильно. Одним из «правильно» было «чти инкапсуляцию и закрывайся по максимуму, потому что открыться всегда успеешь, а закрыться обратно потом будет поздно». И поэтому я везде, где только мог, стал использовать для классов модификатор доступа internal вместо public. И, естественно, когда ты начинаешь активно использовать новую для тебя фичу языка, возникают некоторые нюансы. О них по порядку и хочу рассказать.

Читать дальше →
Всего голосов 23: ↑21 и ↓2 +19
Просмотры 25K
Комментарии 26

Как мы перевели конфигурирование наших сервисов с XML на YAML

Блог компании United Traders .NET *C# *Разработка под Linux *Разработка под Windows *

Предыстория вопроса


Нашей компанией, среди прочего, разработаны несколько сервисов (точнее — 12), работающих бэкендом наших систем. Каждый из сервисов представляет собой Windows-службу и выполняет свои специфические задачи.

Хочется все эти сервисы перенести под *nix-ОС. Для этого надо отказываться от обёртки в виде Windows-служб и переходить с .NET Framework на .NET Standard.

Последнее требование приводит к необходимости избавиться от некоторого Legacy-кода, который не поддерживается в .NET Standard, в т.ч. от поддержки конфигурирования наших серверов через XML, реализованного с использованием классов из System.Configuration. Заодно таким образом решается и давняя проблема, связанная с тем, что в XML-конфигах мы время от времени ошибались при изменении настроек (например, иногда не туда ставили закрывающий тэг или забывали его вовсе), а замечательная читалка XML-конфигов System.Xml.XmlDocument молча проглатывает такие конфиги, выдавая совсем непредсказуемый результат.

Было решено перейти на конфигурирование через модный YAML. Какие проблемы при этом перед нами встали, и как мы их решили — в этой статье.
Читать дальше →
Всего голосов 10: ↑9 и ↓1 +8
Просмотры 5.5K
Комментарии 23

Как глубока кроличья нора? CLRium #5: Garbage Collector

Блог компании Семинары Станислава Сидристого Программирование *.NET *C# *F# *

Мир несется вперед, движимый прогрессом и конкуренцией. Нам с вами нереально повезло: ведь для нас работают величайшие умы, создавая поистине серъезные механизмы: компиляторы, IDE, базы данных. Делают их так, что мы получаем истинное удовольствие, используя их.


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


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



CLRium #5: Garbage Collector пройдет 13 и 14 апреля в Санкт-Петербурге и 20 апреля — в Москве, а все подробности — под катом

Читать дальше →
Всего голосов 25: ↑24 и ↓1 +23
Просмотры 5K
Комментарии 4

Исчерпывающий список различий между VB.NET и C#. Часть 2

Блог компании JUG Ru Group .NET *C# *
Перевод
В первой части статьи тема превосходства VB.NET над C# по рейтингу TIOBE нашла живой отклик в комментариях. Поэтому по совету AngReload посмотрим на тренды StackOverflow.

C# все еще силен! Революция, о которой так долго говорили в прошлый раз, отменяется! Ура, товарищи! Или нет? Рейтинг TIOBE строится на основе запросов в поисковиках, а рейтинг SO — на основе тегов задаваемых вопросов. Возможно, разработчики VB.NET, в число которых входит множество людей не айти специальностей, просто не знают о существовании StackOverflow? Или попав туда через гугл, а то и Bing, не понимают, как задать вопрос? А может быть им достаточно документации Miscrosoft, а все немногочисленные вопросы уже отвечены.

Так или иначе, доля VB.NET заметна и стабильна, пусть и не на первом месте по объему. И, конечно, такой результат был бы невозможен без сильной команды проектировщиков и разработчиков языка. Ниже — вторая часть перевода статьи участника этой команды, Энтони Грина.
Читать дальше →
Всего голосов 23: ↑22 и ↓1 +21
Просмотры 7.7K
Комментарии 14

Организация системы эвентов в Unity — глазами геймдизайнера

C# *Unity *
Всем привет!

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

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

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

Буду рад любой критике на тему, почему так делать не надо, и как делать всё-таки надо.
Читать дальше →
Всего голосов 11: ↑8 и ↓3 +5
Просмотры 4K
Комментарии 14

Не надо думать о памяти, говорили они… Семинар CLRium #5: Garbage Collector

Блог компании Семинары Станислава Сидристого Программирование *.NET *Алгоритмы *C# *
13 и 14 апреля в Санкт-Петербурге, а 20 апреля в Москве будет проведен семинар CLRium #5, целиком и полностью посвященный подсистемам ядра CoreCLR и .NET Framework.

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

10 докладов. Исключительно про ядро. 6 из них — только про подсистему управления памятью.


Читать дальше →
Всего голосов 24: ↑23 и ↓1 +22
Просмотры 5K
Комментарии 2

DynamicData: Изменяющиеся коллекции, шаблон проектирования MVVM и реактивные расширения

Программирование *.NET *C# *Разработка под Windows *


В феврале 2019 года состоялся релиз ReactiveUI 9  —  кроссплатформенного фреймворка для построения приложений с GUI на платформе Microsoft .NET. ReactiveUI  — это инструмент для тесной интеграции реактивных расширений с шаблоном проектирования MVVM. Знакомство с фреймворком можно начать с серии статей на Хабре или со вступительной страницы документации. Обновление ReactiveUI 9 включает в себя множество исправлений и улучшений, но, пожалуй, самое интересное и значимое изменение — тесная интеграция с фреймворком DynamicData, позволяющим работать с изменяющимися коллекциями в реактивном стиле. Попробуем разобраться, в каких случаях нам может пригодиться DynamicData и как устроен внутри этот мощный реактивный фреймворк!
Читать дальше →
Всего голосов 36: ↑36 и ↓0 +36
Просмотры 15K
Комментарии 4

Адаптируем AutoMapper под себя

Программирование *.NET *C# *

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


Мне не нравится дублирование в MapFrom при широких проекциях.


CreateMap<Pupil, PupilDto>()
 .ForMember(x => x.Name, s => s.MapFrom(x => x.Identity.Passport.Name))
 .ForMember(x => x.Surname, s => s.MapFrom(x => x.Identity.Passport.Surname))
 .ForMember(x => x.Age, s => s.MapFrom(x => x.Identity.Passport.Age))
 .ForMember(x => x.Number, s => s.MapFrom(x => x.Identity.Passport.Number))

Я бы хотел переписать так:


CreateMap<Pupil, PupilDto>()
 .From(x=>x.IdentityCard.Passport).To()
Читать дальше →
Всего голосов 13: ↑12 и ↓1 +11
Просмотры 25K
Комментарии 2

Реверс-инжиниринг приложений после обфускации

Assembler *C# *Реверс-инжиниринг *
Из песочницы

Введение


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


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


В качестве примера будем изучать код Atomineer Pro Documentation (далее APD). Это плагин для Visual Studio предназначенный для автоматической генерации комментариев в исходных кодах. Для начала установим данный плагин и проверим его работу. Бесплатная версия имеет триальный период и ряд ограничений использования в течении этого времени. Так при добавлении комментариев в файл пользователю выдается сообщение о том, что в течении дня можно обработать только 10 файлов
Читать дальше →
Всего голосов 26: ↑25 и ↓1 +24
Просмотры 9.9K
Комментарии 13

Умный дом / Обновления в Lazurite

.NET *Разработка под Android *C# *Xamarin *Умный дом

Всем добрый день! Продолжаю развивать свой проект Lazurite. За последние несколько месяцев было проведено много работы по оптимизации и улучшению программы. Об основных изменениях хочу рассказать вам. Прошлая публикация.


Читать дальше →
Всего голосов 11: ↑10 и ↓1 +9
Просмотры 8.5K
Комментарии 18

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

Работа