en
Feedback
Волны ИИ

Волны ИИ

Open in Telegram

Творчество искусственного интеллекта.

Show more
6 696
Subscribers
No data24 hours
-137 days
-4330 days
Posts Archive
⚙️⚙️ System.Threading.Channels ❓ Каналы в C# — это мощный инструмент для организации обмена данными между производителями (pr
⚙️⚙️ System.Threading.Channels ❓ Каналы в C# — это мощный инструмент для организации обмена данными между производителями (producers) и потребителями (consumers). Канал можно представить как асинхронную очередь, которая связывает две стороны: одна записывает данные, а другая — их читает. Такой подход полезен, если данные генерируются в одном потоке, а обрабатываются в другом. Основные компоненты каналов: ⚙️ ChannelWriter — отвечает за добавление данных в канал. Это «производитель». ⚙️ ChannelReader — отвечает за чтение данных из канала. Это «потребитель». ⚙️ Channel — объединяет Writer и Reader, предоставляя общий интерфейс для их взаимодействия. Преимущества использования: ✅ Работа с каналами основана на async/await, что упрощает интеграцию с другими асинхронными компонентами. ✅ Низкоуровневое управление потоками и памятью делает их быстрее, чем использование классических очередей. ✅ Поддерживает настройку поведения, например, фиксированный или неограниченный размер буфера.

🚀 Как ускорить распределенные системы: 8 стратегий снижения времени ожидания Высокая latency — это скрытый враг, превращающи
🚀 Как ускорить распределенные системы: 8 стратегий снижения времени ожидания Высокая latency — это скрытый враг, превращающий приложение в тормозящую телегу. Особенно в распределённых системах, где данные путешествуют между серверами и каждая задержка становится катастрофой. Знаете ли вы, какие 8 стратегий помогут превратить "задумчивое" приложение в настоящего чемпиона? Что эффективнее: кэшировать, сжимать или оптимизировать запросы к базе? А что, если правильный ответ — балансировка нагрузки или вообще CDN? 💡 Найдите недостающий элемент в вашем стеке и максимально ускорьте свои приложения. 🔗 Читать статью 🔗 Зеркало

❓ ref и out: в чём разница? Вы когда-нибудь задумывались, в чём различие между ключевыми словами ref и out в C#? Оба позволяю
ref и out: в чём разница? Вы когда-нибудь задумывались, в чём различие между ключевыми словами ref и out в C#? Оба позволяют передавать параметры по ссылке, но используют их по-разному: ✅ ref: требует, чтобы переменная была инициализирована до передачи в метод. Метод может изменить её значение, но не обязан. ✅ out: позволяет передавать неинициализированные переменные. Метод должен обязательно присвоить значение перед возвратом. Если вы хотите углубиться в тему и понять, как правильно использовать эти ключевые слова, загляните в подробное объяснение с примерами кода: 👉 Читать источник

❓ Как управлять функциональностью приложения без повторного развертывания? Feature flags открывают новые горизонты: они позво
❓ Как управлять функциональностью приложения без повторного развертывания? Feature flags открывают новые горизонты: они позволяют включать или отключать функции в реальном времени, проводить A/B-тестирование и снижать риски при выпуске новых возможностей. Статья погружает вас в мир feature flags на платформе .NET и C#, объясняет их преимущества и предлагает практическое руководство по внедрению. Хотите узнать, как сделать свои приложения более гибкими и надежными? 📎 Читать статью

Value Object — это объект, который описывает значение или набор связанных значений. Он не имеет уникального идентификатора, и
Value Object — это объект, который описывает значение или набор связанных значений. Он не имеет уникального идентификатора, и если два таких объекта содержат одинаковые данные, они считаются одинаковыми. Например, адрес, сумма денег или цвет — это Value Objects. Они нужны, чтобы сделать код понятнее и безопаснее: вместо использования обычных строк или чисел, вы создаёте объект, который отражает смысл данных. ❓ Зачем использовать Value Object? ✅ Читаемость и выразительность кода. Вместо использования примитивных типов (string, decimal) создаются объекты, которые лучше отражают смысл данных. ✅ Инкапсуляция бизнес-логики. Value Object может содержать валидацию данных, упрощая проверку их корректности на этапе создания. ✅ Неизменяемость для безопасности. Объект остаётся неизменным после создания, что упрощает отладку и повышает предсказуемость.

⚙️🚦 Лучшие практики для тестирования асинхронного кода Часто в погоне за производительностью мы забываем про важный аспект — тестирование. Асинхронный код может скрывать множество подводных камней: от скрытых исключений до проблем с многопоточностью. Даже если ваш код компилируется и работает, это не значит, что он свободен от ошибок, особенно в сценариях высокой нагрузки или работы с внешними сервисами. 1. Тестовые методы тоже должны быть асинхронными Асинхронные методы нельзя правильно протестировать синхронно. Чтобы избежать неожиданных ошибок, всегда пишите тесты с async и возвращайте Task. Это позволяет тестовому фреймворку дождаться завершения всех операций и корректно обработать результат. 2. Не игнорируйте исключения Асинхронный код может выбрасывать исключения, которые на первый взгляд не будут видны. Например, вызов метода может завершиться через await, но исключение «упаковано» и не проявится в вашем тесте. Используйте методы вроде Assert.ThrowsExceptionAsync, чтобы убедиться, что ваши тесты обрабатывают такие ситуации. 3. Следите за состоянием Асинхронный код часто запускается в многопоточной среде. Это значит, что тестируемый код может обращаться к разделяемым ресурсам, например, коллекциям, файлам или базам данных. Убедитесь, что такие ресурсы правильно изолированы или настроены для работы с несколькими потоками. 4. Не забывайте про тайм-ауты В реальных приложениях асинхронные операции могут зависнуть из-за внешних факторов: сеть стала недоступна, база данных не отвечает. Добавление тайм-аутов в тесты гарантирует, что тест не будет висеть вечно, если что-то пойдет не так. Например, устанавливайте предел времени на выполнение асинхронного метода и заверяйте, что он укладывается в него. 5. Используйте моки для зависимостей Асинхронный код часто зависит от внешних сервисов, например, API или базы данных. Вместо того, чтобы тестировать реальную интеграцию, создавайте «заглушки» (моки), которые имитируют поведение этих сервисов. Это делает тесты быстрее и надежнее.

🔥 Traversals: как из IEnumerable> сделать Task> Представьте, что у вас есть коллекция идентификаторов и метод, возвращ
🔥 Traversals: как из IEnumerable<Task<Foo>> сделать Task<IEnumerable<Foo>> Представьте, что у вас есть коллекция идентификаторов и метод, возвращающий асинхронный результат:
public static Task<Foo> Read(int id);
Если вы вызовете этот метод для всех элементов коллекции, вы получите IEnumerable<Task<Foo>>. Однако работать с таким типом неудобно. Желаемый результат — это Task<IEnumerable<Foo>>. В качестве решения можно использовать Traversals. Они полезны, когда нужно менять порядок вложенных структур данных, что облегчает работу с асинхронными вычислениями и сложными вложенными типами. В .NET это особенно актуально при работе с Task. 👉 Подробнее

🛠️ «Использование АОП в .NET» — доклад Дмитрия Егорова из Artsofte на DotNext 2024 Аспектно-ориентированное программирование
+1
🛠️ «Использование АОП в .NET» — доклад Дмитрия Егорова из Artsofte на DotNext 2024 Аспектно-ориентированное программирование (АОП) — широко распространенная практика во многих популярных фреймворках вроде Angular или Spring. В ASP.NET мы привычно используем этот архитектурный подход при работе с контроллерами, что натолкнуло автора на мысль масштабировать АОП на другие слои приложений. Благодаря подходу АОП мы получаем возможность декларативно управлять поведением кода и инкапсулировать сквозную функциональность, не засоряя основную логику бизнес-кейсов. В .NET существует как минимум четыре механизма для реализации АОП: классические объектно-ориентированные декораторы, посткомпиляция, динамические прокси, а также новая технология Interseptor в C# 12. Дмитрий рассказывает об опыте использования каждого из них, их преимуществах, ограничениях и особенностях + затрагивает вопрос перехвата зависимостей из DI для реализации внутренних механизмов АОП. 👀 Смотреть доклад & Презентация

🔥 Cамые интересные улучшения в библиотеках, Runtime и SDK, представленные в .NET 9: статья Артёма Ровенского из PVS-Studio ◾
🔥 Cамые интересные улучшения в библиотеках, Runtime и SDK, представленные в .NET 9: статья Артёма Ровенского из PVS-Studio ◾️C# 13 ◾️Производительность ◾️LINQ ▪️Новый тип OrderedDictionary ▪️Новый тип ReadOnlySet ▪️Новый тип Tensor allows ref struct в библиотеках ▪️[GeneratedRegex] для свойств ◾️SDK ▪️Terminal Logger включён по умолчанию ▪️Параллельный запуск тестов ▪️NuGet Audit ▪️BuildCheck ▪️Workload history ◾️Runtime ▪️Feature switch ▪️Динамическая адаптация к размерам приложений (DATAS) ▪️Улучшение JIT ▪️Улучшения Register Allocator 👉 Читать

⚖️🛠️ EfCore.SchemaCompare — библиотека для сравнения модели базы данных EF Core со схемой базы данных Если вы меняете схему
⚖️🛠️ EfCore.SchemaCompare — библиотека для сравнения модели базы данных EF Core со схемой базы данных Если вы меняете схему базы данных вне системы миграций EF Core, например, с помощью SQL-скриптов, то эта библиотека может быстро сообщить, синхронизированы ли текущая схема базы данных и модель базы данных в EF Core. 👉 GitHub

🎊 Ну что ж, .NET 9 уже здесь! Конференцию .NET Conf 2024 можно посмотреть в прямом эфире. 💬 Присоединитесь или уже смотрите
+1
🎊 Ну что ж, .NET 9 уже здесь! Конференцию .NET Conf 2024 можно посмотреть в прямом эфире. 💬 Присоединитесь или уже смотрите?

Привет, друзья! 👋 Мы готовим статью о том, как эффективно изучать программирование, и хотим услышать ваше мнение! 🤓💻 Подел
Привет, друзья! 👋 Мы готовим статью о том, как эффективно изучать программирование, и хотим услышать ваше мнение! 🤓💻 Поделитесь своим опытом, и самые полезные советы войдут в нашу публикацию.

💡 Какой совет вы бы дали начинающим программистам? Поделитесь своими мыслями в комментариях👇

🎙 Сравнения Rust и C#, Minimal API и Controllers, Problem и Details: 103-й выпуск подкаста RadioDotNet ⏳ Таймкоды: [00:01:50
🎙 Сравнения Rust и C#, Minimal API и Controllers, Problem и Details: 103-й выпуск подкаста RadioDotNet ⏳ Таймкоды: [00:01:50] — Provide opt-in to experimental APIs [00:11:50] — Comparison of Rust's borrow checker to C# [00:36:35] — Problem Details for ASP.NET Core APIs [00:54:30] — Comparing performance between Minimal API and classic Controllers [01:05:30] — API Error Messages for a Good Developer Experience [01:19:15] — Книга «ASP.NET Core в действии 3» в правильном переводе [01:22:55] — Кратко о разном ⏯️ YouTube | Другие площадки #подкасты

🛠️ «Native AOT. Возможности и ограничения» — доклад Андрея Порожнякова из SKAI Иногда .NET-приложения запускаются дольше, че
🛠️ «Native AOT. Возможности и ограничения» — доклад Андрея Порожнякова из SKAI Иногда .NET-приложения запускаются дольше, чем нужно. Это связано с особенностями JIT-компиляции — при каждом старте IL-код компилируется в машинные инструкции. Проблема становится заметной, когда приложения запускаются часто, например, при реализации FaaS. Решением может стать ahead-of-time, или AOT-компиляция. Это одна из функций, над которой сейчас работает группа ASP.NET Microsoft. Она генерирует машинные инструкции на этапе сборки приложения, и можно обойтись без IL-кода. Но такой подход предъявляет ряд требований к приложению и разработке. Андрей Порожняков рассказывает, как ускорить запуск приложения за счёт AOT-компиляции. Рассматривает требования и ограничения публикации Native AOT. Отдельно затрагивает поддержку Minimal API и генераторов исходного кода, о плюсах, минусах и практической пользе технологии. 🔗 Смотреть доклад & Презентация

🔐 🔑 OAuth 2: как работает современная авторизация Помнишь кнопку «Войти через Google»? Та самая кнопка, которая избавляет о
🔐 🔑 OAuth 2: как работает современная авторизация Помнишь кнопку «Войти через Google»? Та самая кнопка, которая избавляет от необходимости запоминать очередной пароль. Сегодня разберем, как работает эта магия изнутри, почему гиганты вроде Spotify и Medium используют такой способ входа, и как внедрить его в свое приложение. Спойлер: это проще, чем кажется, и гораздо безопаснее традиционной формы регистрации. Читать статью

📈 Исследование рынка .NET разработки: анализ текущих тенденций и прогнозы .NET остается одной из ведущих платформ для разраб
+7
📈 Исследование рынка .NET разработки: анализ текущих тенденций и прогнозы .NET остается одной из ведущих платформ для разработки корпоративных приложений, особенно в России, где она используется как в крупных корпорациях, так и в малом бизнесе. 🤔 Но как на самом деле чувствует себя сообщество разработчиков? Для того чтобы понять это, команда fuse8 опросила 300 российских .NET разработчиков и руководителей разработки. Читайте подробнее, что из этого получилось👇 🔗 Читать

⚒️ Microsoft.Extensions.VectorData.Abstractions — новая библиотека, которая предоставляет .NET-экосистеме абстракции для инте
⚒️ Microsoft.Extensions.VectorData.Abstractions — новая библиотека, которая предоставляет .NET-экосистеме абстракции для интеграции векторных хранилищ в приложения и библиотеки .NET. 🤔 Почему векторные хранилища? Векторные базы данных важны для поиска и генерации ответов с помощью ИИ. Подобно тому, как реляционные и документоориентированные базы данных оптимизированы для работы со структурированными и частично структурированными данными, векторные базы данных созданы для эффективного хранения, индексирования и управления данными, представленными в виде векторов. В результате алгоритмы индексирования, используемые векторными базами данных, оптимизированы для эффективного извлечения данных, которые могут быть использованы в ваших приложениях. 👉 Анонс предварительной версии библиотеки

🚀 Сравнение производительности конкатенации строк в .NET 9 Есть и другие подходы, когда нам нужна ещё более высокая производ
🚀 Сравнение производительности конкатенации строк в .NET 9 Есть и другие подходы, когда нам нужна ещё более высокая производительность, но из распространённых подходов, показанных ниже, StringJoin выигрывает. #dotnet #csharp #tip by Dave Callan

Привет, друзья! 👋 Мы готовим статью о секретах мастерства в программировании и хотим узнать ваше мнение! 💻