Попалась на Stack Overflow интересная задачка: написать программу как можно короче и в одну строку. Что подразумевается под одной строкой? Это значит использовать только один оператор (statement) верхнего уровня с точкой с запятой в конце и не использовать блоки кода. Вложенные операторы допускаются.
![](http://webcf.waybackmachine.org/web/20240903004038im_/https://habrastorage.org/getpro/habr/hub/b99/b7d/3e7/b99b7d3e7a997b20d86689f51105623d.png)
C# *
Объектно-ориентированный язык программирования
Новости
Современное хранение игрового прогресса в контексте Unity
![](https://webcf.waybackmachine.org/web/20240903004038im_/https://habrastorage.org/r/w780/getpro/habr/upload_files/ed2/335/db4/ed2335db4c36f4fc31b8282f7d945bc7.jpg)
Для чего нужна система сохранений?
Какие задачи решает система сохранений?
Какие процессы происходят внутри?
Как реализовать систему программно?
Какие варианты реализаций существуют?
Как обеспечить гибкость и масштабируемость?
Зачем и когда нужны гибкость и масштабируемость?
Заметки по сериализации + System.Text.Json
![](https://webcf.waybackmachine.org/web/20240903004038im_/https://habrastorage.org/r/w1560/getpro/habr/upload_files/091/ee7/0a3/091ee70a393e5b1cacd0b8eb78fdac58.png)
Сериализация - важнейший механизм любого приложения, от поиска по фильтрам в онлайн магазинах, до сохранения прогресса в играх. Давайте коротко пройдемся по основным форматам сериализации и рассмотрим использование System.Text.Json
.
Близкий родственник эльфа – программер
![](https://webcf.waybackmachine.org/web/20240903004038im_/https://habrastorage.org/r/w1560/getpro/habr/upload_files/99d/986/683/99d98668353a6ce602e367f02cda2c2f.png)
Многие знакомы с ELF-файлами и их структурой. Поговорим о программерах. Программер – это файл в формате ELF (расширение может быть BIN, MBN или ELF), который предназначен для работы с памятью смартфонов на Android с процессорами от Qualcomm в режиме аварийной загрузки (EDL mode – emergency download, 9008). Также его некоторые называют «пожарный шланг» (от английского firehose) или просто «шланг». Файл представляет из себя контейнер с набором команд для базовой работы с памятью, которые подписаны цепочкой сертификатов. Иногда возникает необходимость подобрать для своего устройства подходящий программер. Вот и попробуем разобраться в этом.
Истории
Практическая реализация современной аутентификации на платформе .NET: OpenID Connect, шаблон BFF и SPA
![](https://webcf.waybackmachine.org/web/20240903004038im_/https://habrastorage.org/r/w780/getpro/habr/upload_files/e90/5be/c78/e905bec78aa0acd2929e9ea0257f5f21.jpg)
Построение современной и надежной системы аутентификации — задача, которая требует тщательного подхода. В огромном количестве информации легко запутаться: многие материалы представлены в неструктурированном виде, а часть из них и вовсе описывает устаревшие или даже небезопасные в настоящее время методы и подходы. К тому же каноническое описание шаблона Backend-For-Frontend (BFF) довольно абстрактно и вызывает сложности в практической реализации у многих разработчиков.
Это подтолкнуло меня создать подробное и максимально доступное руководство, посвященное реализации современного подхода к аутентификации на платформе .NET с использованием OpenID Connect, архитектурного шаблона Backend-For-Frontend (BFF) и распределению ответственности между одностраничным приложением (SPA) на React и серверным API.
В статье рассматриваются ключевые аспекты настройки аутентификации, такие как использование потока Authorization Code с Proof Key for Code Exchange (PKCE) и интеграция его с одностраничными приложениями (SPA) на React. Приведены примеры на базе .NET и React, включающие пошаговые инструкции по настройке клиента OpenID Connect и BFF, а также демонстрируется использование библиотеки YARP для проксирования запросов к внешним API. В результате выполнения инструкций вы самостоятельно создадите полнофункциональное приложение с безопасной аутентификацией и надежным взаимодействием с внешними сервисами и разберетесь в его внутреннем устройстве и взаимодействии с другими сервисами.
Гладкое бритье: Razor Pages для разработчиков веб-форм
![](https://webcf.waybackmachine.org/web/20240903004038im_/https://habrastorage.org/r/w1560/getpro/habr/upload_files/987/b85/66a/987b8566af94950895f696cb84cdd858.png)
Если вы, будучи разработчиком ASP.NET Web Forms, сомневаетесь в переносимости своих навыков на более современную платформу .NET (например, .NET Core или .NET 6), то спешу вас успокоить — все не так уж и плохо. Хоть Microsoft и не планирует переносить Web Forms, приобретенные вами навыки вполне применимы в аналогичном фреймворке под названием Razor Pages. Да, вам все равно придется адаптировать свое мышление к этой новой платформе, но если вы не пожалеете на это время, ты вы откроете для себя такой же мощный и простой в использовании инструмент для создания веб-приложений.
Что на DotNext 2024 расскажут о практиках .NET-разработки, архитектуре, «кишочках» .NET и не только
![](https://webcf.waybackmachine.org/web/20240903004038im_/https://habrastorage.org/r/w780/getpro/habr/upload_files/897/257/b79/897257b79e2ba53cb49afcc0c5026bae.jpg)
До конференции DotNext 2024 осталась всего пара недель, и уже хорошо известно обо всех докладах, которые там будут. Все они делятся на четыре основных категории:
— Best practices: скажем, «Как собирать проекты просто» или «Как использовать АОП в .NET»
— Архитектура: например, про DDD или Serverless
— Internals: как в .NET всё устроено «под капотом»
— «Расширяем горизонты»: всё, что не подходит предыдущим категориям, но тоже полезно дотнетчикам. Например, знали ли вы, что «монады есть у нас дома», то есть в .NET есть аналог этой концепции?
Темы бывают и фундаментальными, вроде «Асинхронность за пределами async/await», и экзотическими, вроде «.NET для чайников» (ну то есть физических чайников с кухни). И вишенкой на всём этом — выступление о саморазвитии от Максима Дорофеева, который хорошо известен многим разработчикам своими материалами о продуктивности.
В этом посте — описания сразу всех докладов, разделённые на эти четыре блока:
Головоломка со светом
![](https://webcf.waybackmachine.org/web/20240903004038im_/https://habrastorage.org/r/w1560/getpro/habr/upload_files/071/577/c17/071577c17496f59ee4eff409edc1de87.png)
Я создал и выпустил свою мобильную игру - головоломку со светом. В этой статье я расскажу о трудностях, которые мне пришлось преодолеть во время создания.
Телеграм бот на C# с использованием Yandex Cloud Functions
![](https://webcf.waybackmachine.org/web/20240903004038im_/https://habrastorage.org/r/w1560/getpro/habr/upload_files/591/1e7/aec/5911e7aecd18149abf3ffa68a6d07acc.png)
Всем привет!
Данная статья содержит информация о том, как написать телеграм бота на C# с использованием Yandex Cloud Functions и Телеграм Webhook. Также в данной статье будет рассмотрено CI/CD с помощью GitHub Actions.
P.S. полезная литература находится в ссылках!
Заглядываем под капот FrozenDictionary: насколько он быстрее Dictionary и почему
![](https://webcf.waybackmachine.org/web/20240903004038im_/https://habrastorage.org/r/w1560/getpro/habr/upload_files/f3e/df7/e2d/f3edf7e2d71b7c95071346ff17b8cabb.png)
С релизом .NET 8 в арсенале C# разработчиков появилась новая коллекция – FrozenDictionary. Особенность этого словаря в том, что он неизменяемый, но при этом обеспечивает более быстрое чтение по сравнению с обычным Dictionary
. Я неспроста разбил результаты на обложке по типам – используемые во FrozenDictionary
алгоритмы сильно зависят от типа ключа, размера словаря или даже, например, количества строковых ключей одинаковой длины. В этой статье подробно разберем, насколько FrozenDictionary
быстрее и почему.
Вот скажи мне, микросервис, в чем сила (часть 2)
![](https://webcf.waybackmachine.org/web/20240903004038im_/https://habrastorage.org/r/w1560/getpro/habr/upload_files/842/2f0/d2e/8422f0d2ead5a4d15992cc1d47cb75a0.png)
Если вы не читали начало - то оно здесь.
Вкратце же, там я описал как начал строить свой “интернет магазин электроники”. Да, именно в кавычках 🙂. Потому что это не магазин совсем, а эксперименты по реализации части механик. Конкретно, подбора товаров по параметрам. Запустил первый блин комом и сейчас буду наш первый блин улучшать.
В любом случае, первую часть будет полезно почитать хотя бы из-за дельных комментариев (как всегда на Хабре). Там любезно объяснили, что этому всему есть научный термин - фасетный поиск. И что данная реализация соответствует паттерну EAV. Да и вообще этот велосипед уже изобрели. Но меня это, конечно же, не остановит 🙂. Что может быть прекрасней собственного велосипеда!
Есть еще надежда, что написанные статьи привлекут внимание тех, кто реализует подобное не как я - ради развлечения, а ради работы. Может они в комментариях поделятся своими замерами производительности, или какими-то подводными камнями. Было бы интересно.
Event Sourcing и Saga с помощью Marten и Wolverine на C# и немного модульного монолита
![](https://webcf.waybackmachine.org/web/20240903004038im_/https://habrastorage.org/r/w780/getpro/habr/upload_files/119/e42/d93/119e42d93a7875ab48847fc53ecca45f.jpg)
В этой статье мы откажемся от контроллеров, MediatR-а и MassTransit-а, всё вышеперечисленное нам заменит Wolverine. Отольём в граните модульный монолит, имплементируем регистрацию событий, используя Marten. Пример всего этого безобразия находится тут.
На фото: Marten (Куница) слева, Wolverine (Росомаха) справа. Хью Джекман просился на обложку, но не прошёл кастинг.
Вычисление логического выражения из строки в C# (.NET)
![](https://webcf.waybackmachine.org/web/20240903004038im_/https://habrastorage.org/r/w780/getpro/habr/upload_files/161/8a4/a4e/1618a4a4ecfe94a70fbb5066947c5dc4.jpg)
В этой статье я продемонстрирую, как динамически вычислять логические математические выражения из строк в C#, с высокой производительностью. Решение, реализованное с использованием библиотеки .NET MathEvaluator, поддерживает логические операции в различных математических контекстах, включая программирование, научные вычисления и C#. Кроме того, библиотека позволяет расширять эти контексты, а также добавлять пользовательские переменные и функции.
Ближайшие события
![](https://webcf.waybackmachine.org/web/20240903004038/https://habrastorage.org/getpro/habr/upload_files/024/1bb/2c5/0241bb2c5d9a5d00243fc2f35fd8225f.png)
![](https://webcf.waybackmachine.org/web/20240903004038/https://habrastorage.org/getpro/habr/upload_files/ce8/1f8/4fe/ce81f84fe4c22e2e3ef85388797db6ac.jpg)
![](https://webcf.waybackmachine.org/web/20240903004038/https://habrastorage.org/getpro/habr/upload_files/037/c72/284/037c722846d16a68b94f4735e3bb8560.png)
![](https://webcf.waybackmachine.org/web/20240903004038/https://habrastorage.org/getpro/habr/upload_files/fd0/255/4d3/fd02554d346912bf8fc4bc81f9406174.png)
![](https://webcf.waybackmachine.org/web/20240903004038/https://habrastorage.org/getpro/habr/upload_files/2d4/6b0/a40/2d46b0a4097c9ccaba40c1ea81e13fab.png)
![](https://webcf.waybackmachine.org/web/20240903004038/https://habrastorage.org/getpro/habr/upload_files/8ca/d72/5e6/8cad725e62dafcc18e20f6e3dd3f2ccd.png)
Обзор библиотеки FluentValidation. Часть 7.2. Встроенные валидаторы
![](https://webcf.waybackmachine.org/web/20240903004038im_/https://habrastorage.org/r/w1560/getpro/habr/upload_files/241/4a5/30b/2414a530b81ae41132f50d9301db2f9e.png)
В этой части рассмотрим следующие валидаторы:
Length
— длина строки в указанном диапазоне либо точная.
MaximumLength
— максимальная длина строки.
MinimumLength
— минимальная длина строки.
LessThan
— меньше чем значение, тип которого реализует интерфейс IComparable
.
LessThanOrEqualTo
— меньше или равно чем значение, тип которого реализует интерфейс IComparable
.
«Быстрое свидание» с LINQ
![](https://webcf.waybackmachine.org/web/20240903004038im_/https://habrastorage.org/r/w780/getpro/habr/upload_files/430/d69/aa0/430d69aa025e182b5a83db90b1df42fc.jpg)
Краткое описание методов LINQ простым языком, без терминов "проекция", "предикат", "делегат" и проч.
Сравнение технологий для написания оконных приложений
![](https://webcf.waybackmachine.org/web/20240903004038im_/https://habrastorage.org/r/w1560/getpro/habr/upload_files/135/94b/23e/13594b23efa651917814d659ae55996b.png)
Как-то раз в одном чате прозвучала идея сравнить разные технологии для написания оконных приложений. В частности, под Windows. Используя средства языка C#. То есть, конечно, можно это сделать и с помощью C++, Python, Rust, JS и других языков, но мы же шарписты, нам интереснее именно то, что мы можем сами использовать, не меняя язык программирования.
Итак, оконные приложения на C#.
Как я оптимизировал свою первую игру на Unity, и написал ее заново
![](https://webcf.waybackmachine.org/web/20240903004038im_/https://habrastorage.org/r/w1560/getpro/habr/upload_files/c6f/802/048/c6f80204850d0932277abddf9fdce2bd.png)
Доброго времени суток, дорогие читатели, большое спасибо за слова поддержки и полезные советы, который вы оставили в первой части Истории создания моей первой игры.
Asp.Net приложение и многое другое вместе с ним (1 часть)
![](https://webcf.waybackmachine.org/web/20240903004038im_/https://habrastorage.org/r/w1560/getpro/habr/upload_files/417/575/404/417575404777f6e27b75e08f3e5287bd.png)
Asp.Net + nginx + kafka + docker + docker-compose + postgersql. Или как из обычного шаблона прийти к такому гибриду.
Flax Engine. Знакомство с игровым движком и анализ его исходного кода
![](https://webcf.waybackmachine.org/web/20240903004038im_/https://habrastorage.org/r/w1560/getpro/habr/upload_files/f69/ec4/a67/f69ec4a67c0463b358c661eed41dfd06.png)
"Как будто у Unreal и Unity родился ребёнок" — такое трогательное описание дали этому движку в GameDev-сообществе. Эта фраза не только мило звучит, но и точно передаёт его суть, ведь движок действительно задумывался как нечто среднее между Unity Engine и Unreal Engine.
Нам надоела нестабильность Microsoft Exchange, и мы перевели компанию на новый бэк календарей
![](https://webcf.waybackmachine.org/web/20240903004038im_/https://habrastorage.org/r/w1560/getpro/habr/upload_files/36c/336/94c/36c33694c60617bed71373e4dd5b6531.png)
Всем привет. Это лонгрид о том, какие сложности у нас были с переводом календарей внутренней соцсети на новый бэк, как мы выруливали, как бета-тестили с помощью фича-флагов и как это всё в итоге того стоило. Подробный разбор большого проекта не для слабонервных))
![](https://webcf.waybackmachine.org/web/20240903004038im_/https://assets.habr.com/habr-web/img/vk.f57448a1.webp)
Вклад авторов
sidristij 1681.2SergVasiliev 1163.0olegchir 1001.8n0mo 667.0sahsAGU 656.0marshinov 654.6tguev 652.6kekekeks 623.4DreamWalker 566.0PsyHaSTe 547.4