В одной из своих статей я уже описывал как можно реализовать рефлексию при помощи source generator-ов. Тогда цель была продемонстрировать что такое эти ваши генераторы, а сама рефлексия была лишь примером. Сейчас же, я предлагаю сконцентрироваться на рефлексии, и узнать что из этого получиться.
![](http://webcf.waybackmachine.org/web/20210916190738im_/https://habrastorage.org/getpro/habr/hub/bc7/f1e/783/bc7f1e78397bca57cf5adcd5bf1725be.png)
C# *
Объектно-ориентированный язык программирования
- Новые
- Лучшие
- Все
- ≥0
- ≥10
- ≥25
- ≥50
- ≥100
Делаем быстрый поиск по неточному совпадению среди 100 миллионов товаров
![](https://webcf.waybackmachine.org/web/20210916190738im_/https://habrastorage.org/getpro/habr/upload_files/770/f98/1c9/770f981c91593eef2c63a9e1e563589e.jpeg)
Это четвертая статья с этой картинкой для привлечения внимания. Она каким-то удивительным образом опять подошла по смыслу.
Мы делаем проект по управлению большими каталогами товаров, и нам потребовалось быстро искать товары по неточному совпадению.
Забегая вперед, скажу, что от идеи до рабочего решения на продакшене прошло пять часов.
Исходная ситуация такова: таблица в MS SQL базе, 50 миллионов записей, записи добавляются постоянно, удаляются или обновляются крайне редко. Средняя длина названия товара составляет 64 символа. Поиск по неточному совпадению работает, для этого используются триграммы и полнотекстовый индекс по столбцу с триграммами. Ранжирование результатов осуществляется при помощи функции CONTAINSTABLE. Результаты получаются релевантные, но поиск работает откровенно медленно, 2-5 секунд на запрос, в зависимости от длины запроса. Мы хотим ускорить его раз в 20, а лучше в 100 подручными средствами.
Создание шутера с LeoECS. Часть 2
![](https://webcf.waybackmachine.org/web/20210916190738im_/https://habrastorage.org/getpro/habr/upload_files/b76/595/263/b76595263c00346640f27d1e52c66323.png)
Друзья, это продолжение серии статей по созданию шутера с использованием фреймворка LeoECS. В этой части мы реализуем несколько новых игровых механик и рассмотрим механизм взаимодействия ECS "мира" с MonoBehaviour-ами. Перед прочтением этой части не забудьте ознакомиться с предыдущей.
Асинхронные потоки от Стивена Клири
Про Стивена Клири можно сказать «он всерьез занялся многопоточным программированием еще до того, как это стало мейнстримом». Клири стал палочкой-выручалочкой для тысяч разработчиков, терпеливо объясняя на StackOverflow, почему программы не работают и как их исправить.
Еще в 2019-м на нашей конференции DotNext Стивен рассказал об асинхронных потоках: чем они могут быть полезны, чем отличаются от существующих библиотек вроде System.Reactive и RxJS, а также как задействовать их в проектах.
Спустя пару лет этот доклад остается полезным — поэтому теперь, в преддверии нового DotNext, мы решили сделать для Хабра текстовый перевод доклада Стивена. Видео тоже есть под катом. Далее повествование будет от лица спикера.
Почему я ненавижу JS или как я в 15 лет переписывал свой интернет-магазин
![](https://webcf.waybackmachine.org/web/20210916190738im_/https://habrastorage.org/getpro/habr/upload_files/042/9f0/8c8/0429f08c80b086931be8be0ebacd8857.png)
Я написал интернет-магазин для магазинов мяса на Blazor Server. Попробовал переписать его на React + Node.
Сейчас расскажу, почему после этого я так возненавидел JS...
Blazor WebAssembly: динамическое создание компонентов по JSON описанию
![](https://webcf.waybackmachine.org/web/20210916190738im_/https://habrastorage.org/getpro/habr/upload_files/3d9/79a/d01/3d979ad01932541ce99c60647981c3d6.gif)
В заметке описан способ динамического добавления на страницу компонентов по JSON-описанию с помощью DynamicComponent из ASP.NET Core 6.0 (в настоящее время в статусе Preview).
Динамическое создание компонентов пригодится например при реализации конструктора форм:
• Форма описывается JSON-ом;
• Элементы (или контролы) формы не ограничены предустановленным набором. Контролы можно добавлять, в том числе подгружать из других dll-библиотек.
Повысьте свою продуктивность с помощью расширений Productivity Power Tools в Visual Studio 2022
![](https://webcf.waybackmachine.org/web/20210916190738im_/https://habrastorage.org/getpro/habr/upload_files/527/18e/c1d/52718ec1dd58f526c323239fdb516d74.png)
Visual Studio 2022 уже здесь, и ее можно настраивать еще удобнее, чем когда-либо. Однако этот опыт может быть неполным без необходимых расширений, которые вы знаете и любите. Поскольку существующие расширения продолжают переноситься, мы рады сообщить, что один из самых популярных и ожидаемых наборов расширений теперь доступен для загрузки: инструменты повышения производительности для Visual Studio 2022!
Пакет Productivity Power Tools (PPT), разработанный командой VS, представляет собой набор расширений, которые повышают вашу общую продуктивность и эффективность в Visual Studio. Этот пакет расширений бустит вашу продуктивность с самого начала, позволяя установить весь пакет сразу, а не по отдельности. Не уверены, подходят ли вам расширения PPT? Давайте посмотрим на некоторые расширения пакета, которые могут сэкономить ваше время и снизить утомление при работе в VS.
Представляем .NET MAUI Community Toolkit (Preview)
![](https://webcf.waybackmachine.org/web/20210916190738im_/https://habrastorage.org/getpro/habr/upload_files/08a/572/1ea/08a5721eab9130a7fa3cfe738df83f18.png)
Команда Community Toolkit рада объявить о первых предварительных выпусках двух новых наборов инструментов .NET Multi-platform App UI (.NET MAUI): CommunityToolkit.Maui и CommunityToolkit.Maui.Markup.
Как было объявлено в прошлом месяце, эти библиотеки являются развитием Xamarin Community Toolkits. Они содержат .NET MAUI Extensions, Advanced UI/UX Controls, Effects и Behaviors, чтобы облегчить вам жизнь в качестве .NET MAUI-разработчика.
Функции, которые вы добавляете в .NET MAUI Toolkit, однажды могут быть включены в официальную библиотеку .NET MAUI. Мы используем наборы инструментов сообщества, чтобы представить новые функции, и тесно сотрудничаем с командой разработчиков .NET MAUI, чтобы выбирать функции для добавления.
Печать при помощи API nanoCAD
![](https://webcf.waybackmachine.org/web/20210916190738im_/https://habrastorage.org/getpro/habr/upload_files/e64/934/85c/e6493485c0b57019311d7ae148b588e1.png)
Печать чертежей – ответственный и трудоемкий процесс. Чертеж, напечатанный в неверном масштабе или с неверной толщиной линий, может стать причиной производственных ошибок, так как будет неправильно прочитан. На настройку параметров печати и саму печать порой уходит немалая часть рабочего времени, поэтому многие проектировщики, знакомые с программированием, обращаются к программному интерфейсу САПР и получают хорошую возможность уменьшить влияние «человеческого фактора», а также сократить время, которое приходится тратить на работу с чертежами.
Этой статьей мы запускаем цикл материалов, посвященный API печати nanoCAD, в котором предложим ответы на традиционные вопросы начинающих САПР-программистов. Начнем с того, что разберемся, как программно отправить чертеж на печать.
Как Visual Studio 2022 съела 100 Гб памяти и при чём здесь XML бомбы?
В апреле 2021 года Microsoft анонсировала новую версию своей IDE – Visual Studio 2022, попутно объявив, что она будет 64-битной. Сколько мы этого ждали — больше никаких ограничений по памяти в 4 Гб! Однако, как оказалось, есть нюансы...
История создания своей первой игры на Unity
![](https://webcf.waybackmachine.org/web/20210916190738im_/https://habrastorage.org/getpro/habr/upload_files/b15/83f/a1b/b1583fa1b3b232d6f4e05b649af0c2f5.jpg)
Прежде всего, хочу сразу отметить, что я не являюсь профессиональным разработчиком. Я обычный бакалаврик технического ВУЗа, так что незнание мною некоторых терминов прошу простить, не дорос ещё. Просто однажды летним вечером делать было нечего, как говорится, и я решил попробовать свои силы в создании игОр на всем известном движке Unity.
Начал я свою "разработку" с непосредственной установки Unity и тамошних туториалов aka курсов от самой Unity. Почерпнув оттуда основы основ в виде понимания, что такое объекты и компоненты в Unity, как-куда и на что вешать скрипты и тому подобное, я приступил к созданию своей первой игры. Попытки создания, по крайней мере.
Как объединить 5 языков программирования в одном Python проекте?
![](https://webcf.waybackmachine.org/web/20210916190738im_/https://habrastorage.org/getpro/habr/upload_files/2b5/247/c9b/2b5247c9b711b3a1e3376c4a85251076.png)
На сегодняшний день существует несколько тысяч языков программирования, каждый из которых создавался с определенной целью, пытаясь изменить и улучшить недостатки своих предшественников. Так, например, появился язык Kotlin, который был нацелен на замену Java в мобильной разработке. В 2010 году увидел свет язык Rust, разработчики которого пытались создать быстрый и безопасный язык, который закрывал бы многие недостатки C/C++.
Сейчас практически никто не ставит цели создать универсальный язык для всех задач и всех платформ, так как в каждой области есть свои потребности и нюансы для языка.
Но как объединить несколько разных языков в одном приложение, чтоб это работало?
Ускоряем цикл foreach до for
![](https://webcf.waybackmachine.org/web/20210916190738im_/https://habrastorage.org/getpro/habr/upload_files/aee/5a0/175/aee5a0175edb2c93e1059e35c6b37bf9.png)
Привет!
В этой небольшой заметке о быстром енумераторе для foreach на C#:
foreach (var i in 1..10)
Можно ли сделать его таким же быстрым, как аналогичный for, и какую магию можно попробовать, добиваясь лучшего решения.
Будет много бенчмарков и шарплаба. Прошу под кат!
Автоматизация типовых процессов, правильный выбор реализации
![](https://webcf.waybackmachine.org/web/20210916190738im_/https://habrastorage.org/getpro/habr/upload_files/630/3f1/051/6303f1051ed1ae49a067ad8e3e2e07e4.jpg)
В процессе написания мелких сервисов и программ для автоматизации однотипных действий операторов или взаимодействия нескольких систем вне их сферы действий я столкнулся с тем, что множество мелкого кода очень трудно поддерживать, а рост репозиториев, описаний становится неконтролируемым. Я решил написать, к каким выводам и на основе чего я пришел в процессе разработки оптимального решения для такой ситуации.
Цена регресса. Как мы организовали инфраструктуру для Е2Е-тестов
![](https://webcf.waybackmachine.org/web/20210916190738im_/https://habrastorage.org/getpro/habr/upload_files/37b/bf8/857/37bbf88571ab73eb24b167f9c2b3ec1b.png)
Мы, команда автоматизации Страхового Дома ВСК, подготовили небольшой рассказ о нашей инфраструктуре. Эта статья может быть входной точкой для специалистов, желающих внедрить автотестирование у себя в компании. Расскажем, какие системы, паттерны и фреймворки можно использовать, а также как интегрировать это в релизный цикл. Материал подойдёт как юным автоматизаторам, так и тем, кто желает поближе познакомиться с темой. Большое внимание уделим не только абстрактным вопросам, но и организации кода проекта. Добро пожаловать под кат.
Оптимизация dotMemory с использованием dotMemory (и не только...)
![](https://webcf.waybackmachine.org/web/20210916190738im_/https://habrastorage.org/getpro/habr/upload_files/117/e29/cfd/117e29cfd13c1557d92800d5090ba973.png)
dotMemory — это профилировщик памяти для .NET от компании JetBrains. А меня зовут Илья, и я из команды разработки этого инструмента.
Хочу поделиться историей классического догфудинга: как мы оптимизировали один из алгоритмов в dotMemory с помощью своих же инструментов — dotMemory и dotTrace (часть 1). Потом еще раз — с помощью dotTrace, а напоследок еще и с использованием BenchmarkDotNet (часть 2).
Поделиться этой историей меня мотивировали статьи 1 и 2, за что их авторам отдельное большое спасибо.
XSS: атака и защита с точки зрения C# программирования
![](https://webcf.waybackmachine.org/web/20210916190738im_/https://habrastorage.org/getpro/habr/upload_files/421/f2a/440/421f2a4406383f25eb30e07e7ddc9da4.png)
XSS, или межсайтовый скриптинг, является одной из самых часто встречающихся уязвимостей в веб-приложениях. Она уже долгое время входит в OWASP Top 10 – список самых критичных угроз безопасности веб-приложений. Давайте вместе разберемся, как в вашем браузере может выполниться скрипт, полученный со стороннего сайта, и к чему это может привести (спойлер: например, к краже cookie). Заодно поговорим о том, что необходимо предпринять, чтобы обезопаситься от XSS.
Новые API в .NET 6
![](https://webcf.waybackmachine.org/web/20210916190738im_/https://habrastorage.org/getpro/habr/upload_files/47e/9c7/cbd/47e9c7cbd32436effa9543bd2fe5c092.png)
.NET 6 в процессе разработки, и я хотел поделиться некоторыми из моих любимых новых API в .NET и ASP.NET Core, которые вам обязательно понравятся. Почему они понравятся? Потому что они разработаны при прямом участии нашего фантастического сообщества разработчиков .NET. Подробнее в статье.
Интеграция сервиса «Проверки по списку недействительных российских паспортов» или как сжать csv-файл в 38 раз
![](https://webcf.waybackmachine.org/web/20210916190738im_/https://habrastorage.org/getpro/habr/upload_files/fef/f4f/ded/feff4fded6876447151536f06c4f174a.jpg)
Имеется ежедневно обновляемый архив со списком недействительных российских паспортов в формате csv. Размер архива list_of_expired_passports.csv.bz2
— 506 MB, размер распакованного csv-файла — 1,6 GB.
Требуется реализовать вспомогательный REST-сервис, для использования внутри компании, со следующими возможностями:
1. Проверка наличия паспорта (Серия + Номер) в списке недействительных паспортов.
2. Возможность обновления данных без прерывания работы сервиса.
Книга «Программируем на C# 8.0. Разработка приложений»
![image](https://webcf.waybackmachine.org/web/20210916190738im_/https://habrastorage.org/webt/fh/3v/cu/fh3vculcbeonjvsf3uqdxmzmi7o.jpeg)
C# — универсальный язык, который может практически всё! Иэн Гриффитс рассказывает о его возможностях с точки зрения разработчика, перед которым стоит задача быстро и эффективно создавать приложения любой сложности.
Множество примеров кода научат работать с шаблонами, LINQ и асинхронными возможностями языка. Вы разберетесь с асинхронными потоками, ссылочными типами, допускающими значение NULL, сопоставлениями с образцом, реализациями по умолчанию для метода интерфейса, диапазонами и синтаксисом индексации и многим другим.
Вклад авторов
-
sidristij 1681.2 -
olegchir 1001.8 -
foto_shooter 831.0 -
n0mo 662.0 -
marshinov 652.6 -
timyrik20 652.6 -
sahsAGU 634.6 -
kekekeks 623.4 -
DreamWalker 566.0 -
PsyHaSTe 547.4