Все потоки
Поиск
Написать публикацию
Обновить
279.34

C# *

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

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

Обзор библиотеки FluentValidation. Часть 3. Сообщения об ошибках

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

В этом обзоре про:

1. Переопределение сообщения об ошибке WithMessage

2. Заполнители для сообщения об ошибке {PropertyName}, {PropertyValue}, {PropertyPath}

3. Переопределение названия свойства в сообщении об ошибке WithName, OverridePropertyName

Пройти валидацию

Обзор библиотеки FluentValidation. Часть 2. Коллекции

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

Способы описания правил валидаций для элементов коллекций.

Метод RuleForEach

Комбинация методов RuleForEach + ChildRules

Комбинация методов RuleFor + ForEach

Пройти валидацию

Обзор библиотеки FluentValidation. Часть 1. Первые шаги

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

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

Пройти валидацию

Работа со временем и датой в C# с применением библиотеки Humanizer

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

Цель этой статьи — показать вам, как использовать Humanizer, чтобы вывести работу со временем и датой в ваших C#-проектах на новый уровень. Я расскажу о том, как преобразовать объекты DateTime и TimeSpan в удобный для восприятия человеком вид, как настраивать параметры гуманизации и как объединять гуманизацию строк со временеме/датой. Мы также рассмотрим некоторые реальные сценарии использования и примеры того, как Humanizer может улучшить пользовательский опыт в отношении времени и даты.

Читать далее

Десктопное приложение с нуля на .Net и C# с помощью ChatGPT

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

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

Мне стало интересно, каково всё-таки писать приложение с помощью нейросети с нуля (и возможно ли это вообще, при условии, что ты не программист), поэтому для чистоты эксперимента я выбрал область, в которой я совершенно не шарю - попробую написать десктопное приложение на .Net и C#.

Читать далее

Правило 16 байт: развенчиваем миф о производительности структур в C#

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

По умолчанию, при передаче в метод или при возврате из метода, экземпляры значимых типов копируются, когда как экземпляры ссылочных типов передаются по ссылке. В 2008 году была выпущена книга «Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries»‎. В этой книге рекомендовалось не использовать структуры размером больше 16 байт, поскольку, очевидно, структуры большего размера копируются медленнее. Несмотря на то, что прошло уже 16 лет, в сообществе C# разработчиков до сих пор популярно мнение, что производительность структур размером больше 16 байт хуже. Даже Google на запрос «recommended structure size c#» говорит, что это не более 16 байт. В этой статье мы попробуем докопаться до правды.

Читать далее

Хватит маппить все руками, используй Mapster

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

Привет, Хабр! Меня зовут Георгий, я С#-разработчик в SimbirSoft. Хочу рассказать об опыте использования библиотеки Mapster: как он может упростить разработку, сэкономить силы и частично избавиться от рутины маппинга.

Данная статья подойдет и тем, кто только собирается открыть для себя мир автомаппинга, и тем, кто хочет найти для себя альтернативу используемой библиотеки. Для полного понимания, что тут будет происходить желательно обладать базовым пониманием C#, знать о существовании DI и подозревать, что рефлексия не так проста, как кажется.  Ну и LINQ с EF.Core, куда же без них (хотя про них достаточно просто когда-то слышать и примерно представлять, зачем они нужны).

Читать далее

Pure.DI v2.1

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

С момента выхода генератора исходного кода Pure.DI версии 2.0 летом 2023 прошло уже больше чем пол года. За это время удалось собрать отзывы по его использованию, добавить несколько полезных фич, улучшить производительность анализа и качество генерируемого кода, а также исправить ошибки и мелкие недочеты. В этой статье разберем несколько новых возможностей версии 2.1, которые могут быть полезны.

Читать далее

Миграция API с Framework на .NET6 — скандалы, интриги, расследования и немного выводов

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

Давным-давно, во времена, когда по Земле бродили цифровые динозавры, а разработчики .NET ещё помнили, зачем нужна технология WebForms (и какие у неё были проблемы с производительностью), в Контуре появился продукт под названием Фокус, предназначенный для проверки контрагентов. И у этого продукта довольно быстро появился API, ориентированный на крупных клиентов.

ASP.NET MVC был ещё в новинку, до появления WebAPI оставались годы, и отцы-основатели проекта приняли вполне актуальное, с учётом реалий того времени, решение: делать API на базе ashx-хендлеров, чтобы максимально повысить скорость работы.

Шли годы, .NET Framework сперва меняла версии как ветреная красавица перчатки, а потом и вовсе перешла в разряд «для поддержки жизнедеятельности требуется опытный некромант», .NET Core сперва появился, а потом благополучно переименовался в просто .NET, дорос до 6-й, а потом и 7-й версии… а API Фокуса всё ещё жил по старому, доброму принципу «работает — не трогай». И вот, наконец небосвод провернулся, и звёзды сошлись в нужной позиции. Мы поехали на .NET 6.

Оговорюсь сразу, что сам переезд произошёл примерно полгода назад, когда .NET 8 ещё находилась в стадии альфы. Именно поэтому в качестве целевой версии .NET была выбрана именно стабильная 6-я. Тем не менее большинство проблем будут актуальны и при миграции на 8-ю версию.

Читать далее

Записки хирурга. Распиливание слонов PostgreSQL наживую и без анестезии

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

Привет, Хабр! С вами снова AliExpress Order Management System. Сегодня поговорим о том, как мы увеличивали количество шардов без длительного даунтайма. Спойлер: в конце - самое интересное ;)

Дальше

Тонкости работы short-circuit routing в ASP.NET Core 8.0

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

В статье детально и с примерами рассказываю про short-circuit routing — новую фичу Minimal API в ASP.NET Core 8.0. Она позволяет игнорировать добавленные middleware при вызове отдельных endpoint-ов. Рассмотрим, как это работает, сравним методы и немного поговорим про то, как добавляются middleware в приложение на ASP.NET Core.

Не читайте эту статью, если вам нужно просто прикрутить short-circuit routing и не париться, как оно работает, — для этого достаточно документации и обзора от Andrew Lock. У меня же после них осталось больше вопросов, чем ответов, потому я залез по самые локти в код и разобрался. Если вам тоже интересно — добро пожаловать под кат.

Хочу разобраться

Терминал Modbus TCP / RTU / ASCII с открытым исходным кодом: Часть 1

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

Когда-то я активно работал с промышленным оборудованием. Часто мне приходило какое-то устройство, и оно общалось с внешним миром по волшебному протоколу Modbus.

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

Поэтому представляю вам мою версию Modbus терминала!

Читать далее

Пароли в открытом доступе: ищем с помощью машинного обучения

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

Я больше 10 лет работаю в IT и знаю, что сложнее всего предотвратить риски, связанные с человеческим фактором. 

Мы разрабатываем самые надежные способы защиты. Но всего один оставленный в открытом доступе пароль сведет все усилия к нулю. А чего только не отыщешь в тикетах Jira, правда?

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

Читать далее

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

В чём сила, брат?

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

Статья про поиск правды с помощью LLM, в полярных идеологически СМИ.

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

Узнать

Разработка Tower Defense на Unity — часть 2, проектирование

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

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

Читать далее

Разработка синхронизированных многопоточных приложений на C# и .NET

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

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

Читать далее

Создание основной механики игры Angry Birds на Unity

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

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

Читать далее

Как на самом деле Async/Await работают в C#. Часть 6. Анализ результатов компиляции асинхронных вызовов

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

В этой статье мы продолжим разбирать содержание работы Stephen Toub-а: «How Async/Await Really Works in C#». В этот раз, в след за автором исходного Поста мы рассмотрим код, который генерирует C# компилятор для реализации асинхронных вызовов и множество связанных с этим сущностей-понятий-приемов, таких как: контекст исполнения, боксинг, стейт машина, стек, потоки, … Эта 6-я часть, пожалуй, основная часть всей работы, которая непосредственно отвечает на вопрос: «Как на самом деле Async/Await работают (и компилируются) в C#»

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

Возможно вам будет интересно сравнить эту мою работу с первоначальным переводом.

Читать далее

Об одном способе веб-скрапинга сайтов, защищенных Cloudflare

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

Сразу оговорюсь, что описанное ниже носит исключительно информационно-образовательный характер, и не имеет целью нанесение какого-либо ущерба компаниям, использующим защиту из заголовка статьи. По этим же причинам фокусировка статьи именно на том, как получить заветный html «как из браузера» в автоматизированном режиме, и здесь не будет идти речь о каких-то массовых распараллеливаниях через proxy и VPN, подкладываниях отпечатков (finger prints) браузеров и т. д.

Узнать о способе обхода защиты Cloudflare

Road Run, или как я свою первую игру делал. Часть 7

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

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

Читать далее

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