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

.NET *

Хаб со знаниями про .NET

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

Большой код. Учимся генерировать F#-исходники с помощью Fantomas. Часть 3. Модули и типы

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

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

Мы возьмём сугубо игровую задачу с понятным результатом и на её примере узнаем:

• на какие ноды AST стоит обратить внимание в первую очередь;
• где Fantomas-у нельзя доверять;
• где можно хакать;
• где лучше придерживаться пуризма;
• и как на F# можно строить Fluent API.

В этой части мы сосредоточимся на общей организации генератора, входных данных и основных элементах AST. В следующей сделаем то же самое, но на более сложном уровне, сместив повествование в сторону устройства Fluent API.

Читать далее
Всего голосов 4: ↑4 и ↓0 +4
Комментарии 0

Новости

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

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

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

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

Читать далее
Всего голосов 38: ↑36 и ↓2 +34
Комментарии 23

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

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

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

Читать далее
Всего голосов 50: ↑49 и ↓1 +48
Комментарии 29

Переезд на линукс .NET разработчика. Как изменился линукс за 15 лет

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

Привет, Хабр! После написания двух статей про недостатки Windows и непонимание развития системы, я решил устроить бунт на своем компьютере, пересев на Линукс. Не то, чтобы я прям планировал всерьёз менять операционную систему, но чётко осознавал, что мои «знания» о линуксе сильно устарели, так как помимо хостинга и деплоя, я им пользовался дома очень давно, практически 15 лет назад. Тогда было много проблем со стабильностью как различных приложений, так и графический окружений в частности. Ну и как-то не очень объективно сравнивать современные версии от майкрософт со своими старыми воспоминаниями о линуксе, ведь прогресс не стоит на месте, дистрибутивы развиваются, а интерфейс приложений становится все более дружелюбным и приятным для использования. Так ведь?

Читать далее
Всего голосов 28: ↑25 и ↓3 +22
Комментарии 112

Истории

Когда ни туда, ни сюда, или в поисках оптимальной границы Domain слоя

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

Слой Application - это не только про оркестрацию, но еще немного про бизнес-логику. Следует это простить и принять внутри себя. А иначе попытки продвинуться дальше в написании кода съедят программиста-перфекциониста живьем.

Можно долго искать решения, читать различные комментарии и книги про разделение бизнес-логики от приложения. И все равно ваша конкретная ситуация будет казаться вам уникальной, как будто ничего нельзя сделать либо надо снова переписывать Domain слой, дабы ни одно зернышко бизнес-логики не выпало за его пределы. А можно просто закрыть глаза на некоторые моменты, забыть об идеале и спать спокойно, рассчитывая, что все чудесным образом само разрулится.

Читать далее
Всего голосов 12: ↑11 и ↓1 +10
Комментарии 52

Pure.DI v2.1

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

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

Читать далее
Всего голосов 16: ↑16 и ↓0 +16
Комментарии 11

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

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

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

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

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

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

Читать далее
Всего голосов 25: ↑24 и ↓1 +23
Комментарии 14

CVE-2024-1709 и массовая атака на медицинские учреждения США

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

В данной статье рассказывается о 0-day уязвимости CVE-2024-1709, позволяющей обойти аутентификацию и получить неограниченный доступ к серверам и машинам, которые управляются с помощью ПО удаленного рабочего стола ConnectWise ScreenConnect. Данное ПО повсеместно используется в медицинских и фармацевтических учреждениях США.

Судя по всему, именно эта уязвимость была ответственна за продолжающуюся в данный момент массовую атаку на медицинские и фармацевтические учреждения США, включая взлом систем самой крупной страховой компании в стране United Healthcare, который затронул медицинские записи 85 миллионов пациентов.

Читать далее
Всего голосов 5: ↑5 и ↓0 +5
Комментарии 10

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

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

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

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

Хочу разобраться
Всего голосов 14: ↑14 и ↓0 +14
Комментарии 9

Modbus терминал и не только

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

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

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

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

Читать далее
Всего голосов 38: ↑38 и ↓0 +38
Комментарии 29

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

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

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

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

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

Читать далее
Всего голосов 30: ↑30 и ↓0 +30
Комментарии 13

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

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

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

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

Узнать
Всего голосов 16: ↑8 и ↓8 0
Комментарии 6

Bad Apple на значках рабочего стола — работаем с WinAPI

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

Будем пробовать запустить Bad Apple на значках рабочего стола с помощью пары трюков, нескольких ухищрений и вызовов функций WinAPI

Поехали
Всего голосов 47: ↑46 и ↓1 +45
Комментарии 17

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

Moscow QA #3 — митап по тестированию ПО
Дата 14 марта
Время 18:30 – 21:30
Место
Москва Онлайн
Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн

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

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

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

Читать далее
Всего голосов 16: ↑10 и ↓6 +4
Комментарии 7

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

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

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

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

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

Читать далее
Всего голосов 7: ↑4 и ↓3 +1
Комментарии 17

Большой API для экспериментов и front проектов или памятка о том, как я создавал проект

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

Это моя первая статься, а потому, как мне кажется, будет хорошим шагом начать с того, кто я такой. Меня зовут Юрий, я учусь на программиста и попутно сам стараюсь изучать всё возможное про мою специальность, а моя специальность - это .Net. Влюбился в него и вцепился с первого взгляда, прям как к php слова "скоро умрёт".Несколько месяцев назад, а именно в сентябре, я решил, что необходимо начать делать какой-нибудь большой учебный проект для закрепления моих знаний да и для изучения новых. Я вообще отношу себя к практикам, обожаю сначала что-то делать, а только потом читать. А вдруг я и сразу всё хорошо сделаю, и потом даже читать дополнительные источники не придется :). Но это почти никогда не бывает, так что не пишите в комментариях, что я упускаю важный момент в изучении. Если возвращаясь к проекту, то сделать его я хотел, но я считал себя истинным бэкендером: притрагиваться к фронденту я вообще не слишком хотел. А потому я решил обратиться к своим друзьям программистам, чтоб хоть кто-то занялся фрондент частью. К счастью такой человек у меня был: React разработчик. И также ещё один бэкендер на C#. Идея командой разработки им понравилось, я взял проект из своего списка проектов (да, у меня такой есть) и начали разработку.

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

Теперь о самом проекте, мы дали ему названия Author Verse. Его фишка в том, что пользователи могли бы создавать свои книги, вставляю в него любой контент, то есть, что из него обычной книги можно было бы сделать легко обычную книгу из текста, комикс из картинок, мангу, аудиокнигу, манга-аудиокнига-комикс сразу??? или придумать вовсе свой жанр. И главная фишка: писатели могли бы делать разветвление сюжета на любую часть главы, на любую другую часть из других глав своей книги и, наверное самое прикольно, но которое пришло мне в голову уже на последних этапах разработки, это ответвлению в другие книги. Конечно, раз мы говорим о том, что могут быть ссылки на другие книги, то все книги на сайте должны быть бесплатны.

Стать умнее
Всего голосов 10: ↑8 и ↓2 +6
Комментарии 7

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

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

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

Узнать о способе обхода защиты Cloudflare
Всего голосов 28: ↑27 и ↓1 +26
Комментарии 27

Как легко получить deadlock на Task.WhenAll

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

Напоминание! Task.WhenAll не отдает ваши задачи планировщику и если вы забыли Task.Run или Task.Factory.StartNew, то добро пожаловать на синхронное выполнение и\или выполнение в main и\или ловите deadlock.

А ниже пара примеров, при которых вы можете этого избежать, но так делать не надо.

Читать далее
Всего голосов 15: ↑10 и ↓5 +5
Комментарии 12

Разработка и применение систем разграничения доступа на базе атрибутов

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

Привет! Меня зовут Михаил, в Positive Technologies я руковожу бэкенд-разработкой метапродукта MaxPatrol O2. В этой статье я расскажу, зачем нам в компании понадобилось разграничение доступа на основе атрибутов. Его еще называют ABAC (attribute-based access control). Рассмотрим, чем ABAC отличается от других способов разграничения доступа, как это реализуется и что мы в итоге сделали у себя.

Читать
Всего голосов 9: ↑9 и ↓0 +9
Комментарии 6

Где изучать C# в 2024. Бесплатные курсы и полезные ресурсы

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

Существует несколько причин, почему стоит учить C# в 2024 году через бесплатные курсы:

1. Популярность: C# является одним из самых популярных языков программирования, особенно в сфере разработки приложений для платформы Microsoft. Изучение C# открывает двери для работы над широким спектром проектов и предоставляет множество возможностей для развития карьеры.

2. Разнообразие применения: C# используется для разработки различных типов приложений, включая десктопные приложения, веб-приложения, игры, мобильные приложения и многое другое. Изучение C# позволяет вам выбрать свою область интересов и создавать программное обеспечение для разных платформ.

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

4. Растущий рынок труда: Спрос на разработчиков, владеющих C#, по-прежнему высок. Множество компаний и организаций используют C# для разработки своих продуктов и услуг. Изучение C# открывает двери для множества вакансий и возможностей для трудоустройства.

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

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

Читать далее
Всего голосов 20: ↑16 и ↓4 +12
Комментарии 15

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

Работа

.NET разработчик
74 вакансии