18377
По всем вопросам- @haarrp C# - обучающий канал Senior C# разработчика. @ai_machinelearning_big_data - Machine learning @itchannels_telegram - 🔥лучшие ит-каналы @csharp_ci - C# академия @pythonlbooks- книги📚 Реестр РКН: https://clck.ru/3Fk3kb
🖥 Интересный вопрос
Что выведет данная программа? А скомпилируется ли она вообще?
var str = new TheBestStructEver(5);
Console.WriteLine(str.A);
public struct TheBestStructEver
{
public int A;
public TheBestStructEver(int a)
{
A = a;
this = new TheBestStructEver();
}
}
IL_0013: ldarg.0
IL_0014: initobj TheBestStructEver
this. initobj инициализирует каждое поле структуры нулями или null по адресу, которое лежит у нас первым в стеке (а у нас там лежит указатель на this). Дополнительно мы еще передаем токен, который указывает тип структуры. Таким образом получается, что у нас вся структура "перезатёрлась нулями" и значение поля A равно нулю.
5️⃣простых правил, которые не стоит забывать, чтобы код C# был чище и производительнее
➖Возврат null из неасинхронного метода Task/Task<T> приведет к возникновению NullReferenceException. Этой проблемы можно избежать, вернув вместо этого Task.FromResult<T>(null)
// неправильно
public Task<object> GetFooAsync()
{
return null; // Noncompliant
}
// правильно так
public Task<object> GetFooAsync()
{
return Task.FromResult<object>(null);
}
+. Лучше использовать StringBuilder как более эффективный вариант. // можно быстрее
string str = "";
for (int i = 0; i < arrayOfStrings.Length ; ++i)
{
str = str + arrayOfStrings[i];
}
// это быстрее
StringBuilder bld = new StringBuilder();
for (int i = 0; i < arrayOfStrings.Length; ++i)
{
bld.Append(arrayOfStrings[i]);
}
string str = bld.ToString();
str.Substring(startIndex).IndexOf(char1) лучше использовать один из методов: IndexOfIndexOfAnyLastIndexOfLastIndexOfAny// так не стоит
str.Substring(StartIndex).IndexOf(char1); // Noncompliant; a new string is going to be created by "Substring"
// более эффективный вариант
str.IndexOf(char1, startIndex);
null во многих случаях лучше возвращать пустые массивы/коллекции, это делает код понятнее// плохая идея
public Result[] GetResults()
{
return null; // Noncompliant
}
public IEnumerable<Result> GetResults()
{
return null; // Noncompliant
}
// так намного лучше
public Result[] GetResults()
{
return new Result[0];
}
public IEnumerable<Result> GetResults()
{
return Enumerable.Empty<Result>();
}
int, то результатом всегда будет int; можно конечно привести этот результат к типу вещественного числа, но из-за проблем с плавающей запятой результат может быть не тем. В общем, лучше привести делимое к (decimal): decimal dec = 3/2; // 1
decimal dec = (decimal)3/2; // 1.5
💻 AWS Lambda Handler Cookbook (.NET)
Открытая книга .NET Lambda Handler Cookbook полностью обновлена до .NET 8, включая примеры того, как сделать нативный AOT в ASP NET.
Этот проект предоставляет рабочий скелет для работы с AWS Lambda на .NET, включая развертывание с помощью AWS CDK и конвейер GitHub Actions.
▪Github
@csharp_ci
💫 Туннели Dev для мобильной разработки
Создавайте уникальные URL-адреса, которые можно использовать для отладки эндпоинтов API, веб-хуков или просто для обмена информацией о вашем проекте.
Dev-туннели для Visual Studio 2022 создают уникальный URL, который можно использовать в мобильных проектах для отладки API. Теперь Visual Studio 2022 позволяет создавать туннели разработчиков одним нажатием кнопки.
▪Читать дальше
@csharp_ci
🖥 Как использовать шаблон параметров в ASP.NET Core.
Шаблон параметров использует классы для обеспечения строго типизированного доступа к группам связанных параметров.
В ASP.NET Core шаблон параметров можно настроить несколькими различными способами. В этой статье показаны некоторые из них и их потенциальные преимущества.
▪Читать
▪Шаблон параметров в ASP.NET Core
@csharp_ci
🖥 Рассмотрим ситуацию, когда вы ожидаете несколько асинхронных вызовов от нескольких сервисов.
Эти вызовы не зависят друг от друга.
Вы можете использовать Task_WhenAll, чтобы добиться значительного повышения производительности.
Это может сделать ваш API в 15 раз быстрее:
▪Читать дальше
▪Последовательное и параллельное выполнение. Task.WhenAll и Task.WhenAny
@csharp_ci
Считаешь себя экспертом в IT? Участвуй в «Цифровом марафоне» от Сбера и «Школы 21» и будь на код впереди! Миллион рублей уже ждёт тебя.
В этом масштабном конкурсе ты будешь соревноваться со специалистами по всей России. Тройка лучших поделит в финале в Москве призовой фонд в 1,8 миллионов рублей.
Но сначала нужно пройти онлайн- игру, тестирование и цифровой диктант. Начнёшь с «разминки» и покажешь свои аналитические и мягкие навыки. Далее — ответь на вопросы теста согласно своему уровню подготовки. Прослушай на диктанте техническое задание и напиши код решения.
Переходи на сайт, читай подробнее об условиях и жми «Хочу участвовать»!
🖥 Что вы предпочитайте string.Equals или ToLower/Upper ⬇
В C# для сравнения строк без учета регистра лучше использовать string.Equals с OrdinalIgnoreCase, а не ToLower() / ToUpper().
▪Почему?
Корректность
Иногда использование ToLower/Upper может привести к неправильным результатам в некоторых языках (например на Турецком).
Удобство чтения
Использование string.Equals дает понять, что вы выполняете сравнение.
Производительность
string.Equals более эффективен, поскольку ему не нужно создавать новый экземпляр строки, как это делает ToLower/Upper.
#dotnet #csharp
@csharp_ci
Как CAP-теорема помогает решить проблемы согласованности данных в микросервисной архитектуре современных приложений
Расскажет опытный эксперт на бесплатном практическом уроке «CAP-теорема и управление ожиданиями пользователей» от OTUS.
Разберём:
1. Введение в CAP-теорему
2. Технические ограничения и ожидания пользователей
3. Реальные кейсы и способы решения
Для кого:
Урок будет полезен для разработчиков, сисадминов, аналитиков, DevOps и архитекторов.
Результаты вебинара:
Поймете основные принципы теоремы и ее влияние на разработку приложений в распределенной среде, а также научитесь учитывать компромиссы между согласованностью, доступностью и устойчивостью данных в микросервисной архитектуре.
Для участия зарегистрируйтесь: https://otus.pw/6zJi/?erid=LjN8JuP6d
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
Современные технологии на .NET: в Ozon идет набор на бесплатный курс для C#-разработчиков
Погрузись в микросервисную архитектуру за 2 месяца: будут лекции, воркшопы, код-ревью домашних заданий и профессиональное комьюнити разработчиков Ozon.
После курса ты сможешь:
🔹Создавать и настраивать микросервисы на ASP.NET Core
🔹Эффективно работать с асинхронным кодом
🔹Проектировать сложные распределенные системы
🔹Создавать REST и gRPC API
🔹Оптимизировать SQL-запросы
🔹Работать с Kafka
Чтобы попасть на курс — нужно иметь опыт в разработке от 3 лет и пройти отборочный контест 11 февраля
Узнать подробности и подать заявку
🖥 6 бесплатных курсов по SQL
1- SQL для анализа данных от Udacity
Продолжительность: Примерно 4 недели
Уровень навыков: Начинающий
Ссылка - https://shiksha.com/online-courses/sql-for-data-analysis-course-udacl3
2- Введение в SQL от Kaggle
Продолжительность: Приблизительно 3 часа
Уровень мастерства: Начинающий
Ссылка - https://kaggle.com/learn/intro-to-sql
3- Продвинутый SQL от Kaggle
Продолжительность: Приблизительно 4 часа
Уровень мастерства: Промежуточный
Ссылка - https://kaggle.com/learn/advanced-sql
4- Введение в базы данных и SQL-запросы от Udemy
Продолжительность: Приблизительно 2 часа 17 минут
Уровень мастерства: Начинающий
Ссылка - https://udemy.com/course/introduction-to-databases-and-sql-querying/
5- Intro to Relational Databases byUdacity
Продолжительность : 4 недели
Уровень квалификации: Средний ученик
Ссылка - https://udacity.com/course/intro-to-relational-databases-ud197
6- Введение в SQL (DataCamp)
Продолжительность: 4,5 часа
Уровень квалификации: Начинающий
Ссылка -
https://datacamp.com/courses/introduction-to-sql
@csharp_ci
🖥 LLamaSharp
Проект предоставляет API высокого уровня для вывода моделей LLaMA и развертывания их на локальном устройстве с помощью C#/.NET.
Проект работает под Windows, Linux и Mac без необходимости компилировать llama.cpp самостоятельно.
Отличный инструмент, чтобы развернуть ваш собственный ИИ на C#, подобный ChatGpt.
Даже если у вас нет мало памяти GPU, вы все равно можете использовать модели LLaMA! 🤗
▪Github
@csharp_ci
#ПятничныйКвиз
В скобках операторы приведения. опретаоры +- унарные.
т.е. получается,
берем -2 кастуем к long
к -2 применяем унарный оператор + и кастуем к int получаем -2
к -2 применяем унарный оператор - получаем 2 и кастуем к char
к 2 применяем унарный оператор + получаем 2 и кастуем к byte
@csharp_ci
Не стоит начинать новый проект с микросервисов, даже если вы уверены, что ваше приложение будет достаточно большим, чтобы это было целесообразно.
Основная причина этого - сложность систем на основе микросервисов.
За микросервисы приходится платить:
- Сложность координации работы команды
- Потосянная борьба с отказами
- Автоматизация развертывания
- Управление множеством сервисов
Но я хочу обратить ваше внимание на кое-что еще.
Есть способ объединить:
- физическую архитектуру монолитов
- логическую архитектуру микросервисов.
И получить преимущества обоих.
Это называется модульный монолит.
Модульный монолит — это подход к проектированию приложений, который позволяет, с одной стороны, отложить во времени операционную сложность использования микросервисов, а с другой — избежать превращения монолитной системы в большой комок грязи.
📌 Почитать про модульные монолиты
📌Дорожная карта разработчиков .NET/C# в 2024 году для начинающих
У вас когда-нибудь была возможность построить такую арзитектуур ?
@csharp_1001_notes
🖥 Документация по .NET Aspire: Что нового.
В этой статье перечислены некоторые из основных актуальных изменений в документации.
📌 Читать
@csharp_ci
🖥 Прямо-таки сеньорская версия FizzBuzz — функциональный код с массивом делегатов преобразований числа в Fizz & Buzz.
public class FizzBuzz
{
public static void Main(string[] args)
{
Console.WriteLine(FizzBuzzProgram(350));
}
public static string FizzBuzzProgram(int n) =>
String.Join("\r\n",
Enumerable.Range(1, n).Select(FizzBuzzPipeline));
static readonly Func<int, string?>[] handlers = [(n) => n % 3 == 0 ? "Три" : null, (n) => n % 5 == 0 ? "Пять" : null];
public static string FizzBuzzPipeline(int i) => Counter(i, String.Join("", handlers.Select(f => f(i))));
public static string FizzBuzzPipelinePar(int i)
{
var results = handlers.AsParallel().Select(handler => handler(i)).Where(r => r != null);
return results.Any() ? string.Concat(results) : i.ToString();
}
}
static string FizzBuzzPipelineWOHandlers(int n)
{
string result = $"{(n % 3 == 0 ? "Fizz" : "")}{(n % 5 == 0 ? "Buzz" : "")}{(n % 7 == 0 ? "Qux" : "")}";
return String.IsNullOrEmpty(result) ? n.ToString() : result;
}
👩💻 TDD в разработке на С# — что, для чего, полезно ли?
Расскажет Антон Герасименко — .net developer + lead. Встречаемся на бесплатном практическом уроке от OTUS, где вы вместе с опытным экспертом разберете:
✅ как короткие циклы разработки, опирающиеся на TDD (разработка через тестирование) влияют на качество продукта;
✅ как его внедрить, когда это нужно и что делать потом.
Занятие пройдёт 29 февраля в 20:00 мск и будет приурочено к старту курса «C# Developer. Professional». Доступна рассрочка на обучение!
👉 Пройдите короткий тест прямо сейчас, чтобы занять место на открытом уроке и получить запись: пройти тест
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
⚡️ Marten - мощная база данных документов и хранилище событий .NET на PostgreSQL
Вы практически можете построить свою базу данных документов на его основе 🐘.
▪Пример работы с Marten
▪Github
@csharp_ci
😎Сишарпист, погрузись в мир встраиваемых систем — программируй микроконтроллеры!
👉Начните на бесплатном вебинаре продвинутого олайн-курса «Программист С» — «Встраиваемые системы и программирование микроконтроллеров»: регистрация
На вебинаре мы:
— проведем обзор различных микроконтроллеров и их характеристик
— рассмотрим проектирование встраиваемых систем от идеи до реализации
— разберем на конкретном примере программирование микроконтроллеров
— сделаем отладку и тестирование встраиваемых систем.
Вебинар будет полезен:
— разработчикам и инженерам, которые интересуются встраиваемыми системами и программированием микроконтроллеров.
🤝Понравится вебинар — продолжите обучение на курсе по специальной цене и даже в рассрочку!
ХОЧЕШЬ ПОВЫШЕНИЕ В 2024 ГОДУ? 😎🔥
Согласно опросу, проведенному компанией Solo.io в 2022 году, на текущий момент 85% организаций переводят свои IT-системы на микросервисную архитектуру.
Но специалистов, которые глубоко понимают все тонкости и нюансы микросервисной архитектуры не так-то много.
Самое время разобраться в микросервисной архитектуре и стать более востребованным специалистом.
🚀 Стартуем 26 февраля.
Курс ведет действующий архитектор Кирилл Ветчинкин. Он успешно реализовал проекты с применением микросервисов для Мегафона, Теле2, ВСS Brокer, СберМаркет. Постоянный спикер крупных IT-конференций.
На курсе вы:
📌 Изучите и отработаете более 20 паттернов микросервисной архитектуры
📌 Познакомитесь c Domain Driven Design
📌 Научитесь декомпозировать систему на микросервисы с помощью Event Storming и DDD
Полная программа ТУТ https://microarch.ru/?utm_source=posev&utm_medium=erid%2VtzqwsLbJh&utm_campaign=3
А самое главное — будет поддержка от эксперта, чат с одногруппниками и интересное практическое задание. Сертификат об участии по итогам прохождения курса.
Курс ориентирован на системных аналитиков и разработчиков, которые хотят больше погрузиться в архитектуру современных IT систем.
Узнай больше о курсе 👉 https://microarch.ru/?utm_source=posev&utm_medium=erid%2VtzqwsLbJh&utm_campaign=3
Реклама. ИП Ветчинкин К.Е. ИНН: 773376451099 Erid: 2VtzqwsLbJh
⚡️ DevToys — швейцарский нож для ежедневных задач разработчика.
— Конвертеры: JSON в YAML, парсер Cron’а и тд;
— Кодеры/декодеры;
— Генераторы получения хеша: MD5, SHA1, SHA256, SHA512;
— Работа с текстом: сравнение текстов, разметка, проверка регулярок и тд;
— Работа с графикой: сжатие, конвертирование и тд.
▪Github
@csharp_ci
🖥Первая предварительная версия dotnet 9 уже здесь, наряду с обновлениями для #aspnetcore, #dotnetmaui, #efcore и других!
Почитать больше о предварительной версии 1 и присоединяйтесь к обсуждению на GitHub Discussions: https://github.com/dotnet/core/discussions/9167
#dotnet #csharp
@csharp_ci
🖥 Получите сертификат по C# в 2024 году.
Присоединяйтесь к #Csharp #CloudSkillsChallenge, чтобы пройти обучение по курируемому контенту #MicrosoftLearn, получить практический опыт и развить новые навыки.
Практикйтеь в C# и приблизьтесь к получению сертификата.
https://learn.microsoft.com/ru-ru/training/challenges?id=76615901-392c-413e-b7a2-0a015f52f44e&WT.mc_id=cloudskillschallenge_76615901-392c-413e-b7a2-0a015f52f44e
@csharp_ci
✅ Преодолевая барьеры: Путь Discord к масштабированию Midjourney до 15 миллионов участников
Когда популярность сервера Midjourney от Discord резко возросла, он натолкнулся на : ограничение в 1 миллион участников. Это история о том, как небольшая команда инженеров Discord превратила эту проблему в выдающееся достижение.
Задача: Представьте себе виртуальное пространство, настолько популярное, что оно трещит по швам. Будучи одним из самых быстрорастущих серверов Discord за всю историю, Midjourney столкнулся именно с таким сценарием, поскольку количество участников росло геометрически.
Discord платформавремени, работающая на Erlang/Elixir, затрещала по швам под огромным давлением. С каждым новым участником сложность и нагрузка росли в геометрической прогрессии.
Решения:
Чтобы свести к минимуму перегрузку, инженеры внедрили "пассивные" соединения, гарантирующие, что неактивные пользователи не будут создавать лишней нагрузки.
Переработка системы реле позволила более эффективно распределять работу за счет более избирательной обработки пользовательских данных.
Параллельная обработка: Используя ETS Erlang, команда разработчиков обеспечила параллельную обработку для таких тяжелых операций, как оповещение всех пользователей что значительно снизило нагрузку на систему.
ETS - инструмент для хранения объектов Elixir и Erlang в памяти. Он способен хранить огромные объемы данных и предоставляет доступ за фиксированное время.
Не все было гладко. Некоторые многообещающие идеи, такие как разгрузка Manifold, дали обратный эффект, увеличив нагрузку на сервера.
↪️ Читать подробнее
@csharp_ci
Твои игры не замечают?
Хотел создать игру мечты, а остался с выгоранием и забагованным билдом?
Не все потеряно!
На бесплатном онлайн интенсиве, ты узнаешь:
🔹 Как продвигать свою игру без бюджета.
🔹 Где найти команду крутых разработчиков.
🔹 Что делать, чтобы в новом году открыть свою собственную игровую студию.
🎁 Каждый участник интенсива получит до 23 подарков, включая разбор твоей игры от топового геймдизайнера и много ассетов для игр.
Запишись бесплатно тут — @intensive_gamedev_bot
🔥 Дайджест полезных материалов из мира C# за неделю
Почитать:
— Изучаем C# в 2024 году
— Университет MIT: бесплатные онлайн-курсы для программистов и студентов.
— Включаем Nullable reference type в Unity за несколько минут
— Как Uber вычисляет расчетное время прибытия при полумиллионе запросов в секунду
— Метод быстрого марша (Fast Marching Method)
— Как на самом деле Async/Await работают в C#. Часть 2 Артефакты от EAP шаблона, SynchronizationContext
— Сто паттернов для разработки корпоративных программ. Часть первая
— GigaChat API для .NET Core
— Собираем автономную игру на C# в 2 килобайтах
— Чистая архитектура на примере
— Chain Of Responsibility Pattern In C# – Simplified How-To Guide
— Concurrent Collections in C#
— Game Dev Digest — Issue #218 - Patterns, Abstractions, Complete Tutorials and more
— How I Built a NuGet Package
— How to Edit and Convert PDF, PNG, JPEG, and TIFF Files in Blazor Apps
— Understanding the Fundamentals of Database Programming Languages
— Exploring Function Behavior in C#
— Demystifying OOP in C#: Your Guide to Building Robust and Flexible Applications
— Beginner's guide to Unit Testing with NUnit.
— Solid Principle : Liskov Substitution Principle
Посмотреть:
🌐 Introduction to Machine Learning in C#. Classification using ML.NET (⏱ 31:03)
🌐 Await Async Might Change Completely in .NET 9 (⏱ 09:55)
🌐 "Stop Using Singletons in .NET!" | Code Cop #009 (⏱ 13:52)
Хорошего дня!
@csharp_ci
🖥 One Billion Row Challenge (1BRC) - это забавное исследование того, насколько далеко можно зайти на C# для агрегирования миллиарда строк из текстового файла.
Задействуйте все свои навыки создайте самую быструю реализацию для решения этой задачи!
📌 Реализация известного Java челенджа на .NET
🔎 Github
🔎Пример решения
@csharp_ci
🖥 Как быстрее всего реализовать паттерн Декоратор?
Декоратор (англ. Decorator) — структурный шаблон проектирования, предназначенный для динамического подключения дополнительного поведения к объекту.
Паттерн декоратор предоставляет гибкую альтернативу практике создания подклассов с целью расширения функциональности.
Для его реализации вы можете использовать инъекции зависимостей ASP .NET Core.
📌 Вот полная реализация
@csharp_ci
⚡️ В модульном монолите можно построить взаимодействие модулей двумя способами:
1) Вызовы методов (синхронные)
2) Обмен сообщениями (асинхронный)
Но какой из них выбрать?
📌 Читать статью
@csharp_ci