en
Feedback

Don't get caught by a cheater! Telemetrio finds and tags such channels πŸ‘‰ If you want to see the tag, subscribe

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡˆΠ°Ρ€ΠΏΠΈΡΡ‚Π° | C#, F#, .NET, ASP.NET

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡˆΠ°Ρ€ΠΏΠΈΡΡ‚Π° | C#, F#, .NET, ASP.NET

Open in Telegram

ВсС самоС ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ для C#-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ°Π½Π°Π»Π΅. Наши курсы: https://clc.to/y3LDtw По Ρ€Π΅ΠΊΠ»Π°ΠΌΠ΅: @tproger_sales_bot Для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

Show more

πŸ“ˆ Analytical overview of Telegram channel Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡˆΠ°Ρ€ΠΏΠΈΡΡ‚Π° | C#, F#, .NET, ASP.NET

Channel Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡˆΠ°Ρ€ΠΏΠΈΡΡ‚Π° | C#, F#, .NET, ASP.NET (@csharpproglib) in the Russian language segment is an active participant. Currently, the community unites 21 562 subscribers, ranking 6 153 in the Technologies & Applications category and 30 464 in the Russia region.

πŸ“Š Audience metrics and dynamics

Since its creation on Π½Π΅Π²Ρ–Π΄ΠΎΠΌΠΎ, the project has demonstrated rapid growth, gathering an audience of 21 562 subscribers.

According to the latest data from 26 October, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -105 over the last 30 days and by -8 over the last 24 hours, overall reach remains high.

  • Verification status: Not verified
  • Engagement rate (ER): The average audience engagement rate is 14.32%. Within the first 24 hours after publication, content typically collects 7.43% reactions from the total number of subscribers.
  • Post reach: On average, each post receives 3 087 views. Within the first day, a publication typically gains 1 603 views.
  • Reactions and interaction: The audience actively supports content: the average number of reactions per post is 4.
  • Thematic interests: Content is focused on key topics such as .net, ΡˆΠ°Ρ€ΠΏΠΈΡΡ‚Π°, навигация, await, string.

πŸ“ Description and content policy

The author describes the resource as a platform for expressing subjective opinions:
β€œΠ’ΡΠ΅ самоС ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ для C#-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ°Π½Π°Π»Π΅. Наши курсы: https://clc.to/y3LDtw По Ρ€Π΅ΠΊΠ»Π°ΠΌΠ΅: @tproger_sales_bot Для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead”

Thanks to the high frequency of updates (latest data received on 27 October, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.

21 562
Subscribers
-824 hours
-277 days
-10530 days
Posts Archive
😎 Π—Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с экспСртом Proglib.academy: Senior Software Engineer ΠΈ Team Lead Π² Yandex Cloud Π ΠΎΠΌΠ°Π½ Барлос Π ΠΎΠΌΠ°Π½ β€” ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚
😎 Π—Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с экспСртом Proglib.academy: Senior Software Engineer ΠΈ Team Lead Π² Yandex Cloud Π ΠΎΠΌΠ°Π½ Барлос Π ΠΎΠΌΠ°Π½ β€” ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Π½Ρ‚ нашСго курса Β«Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ИИ-Π°Π³Π΅Π½Ρ‚ΠΎΠ²Β». Он Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° стыкС cloud-native Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΈ AI, Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ внСдряя соврСмСнныС ИИ-ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ процСссы Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π—Π° Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ Ρ†Π΅Π½ΠΈΡ‚ IT-ΠΊΠΎΠΌΡŒΡŽΠ½ΠΈΡ‚ΠΈ? 🟣 Team Lead ΠΈ AI-СвангСлист Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ UX Yandex Cloud
14-Π»Π΅Ρ‚ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅. ЗанимаСтся AI-адопшСном Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Yandex Cloud, ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ мастСр-классы ΠΈ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ³Π°Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ эффСктивности Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².
🟣 Π’Π΅Ρ…Π»ΠΈΠ΄ Sourcecraft Code Assistant
Π‘ ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΌ практичСским бэкграундом ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π» участиС ΠΊΠ°ΠΊ тСхничСский Π»ΠΈΠ΄ Π² создании ΠΌΠΎΡ‰Π½ΠΎΠ³ΠΎ AI-Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ для VS Code.
🟣 Π‘ΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ Open Source
Π Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ быстро Π½Π°Ρ‡Π°Ρ‚ΡŒ экспСримСнты с инфСрСнсом ΠΈ Π°Π³Π΅Π½Ρ‚Π°ΠΌΠΈ Π² локальном ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π°Π±ΠΎΡ€ скриптов vllm-setup для быстрого запуска окруТСния ΠΈ mini-proxy β€” минималистичный прокси для OpenAI API ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ².
🟣 Автор ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ML-Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ
ΠžΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ слоТныС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ наглядно. Π‘ΠΎΠ·Π΄Π°Π» ΡΠ΅Ρ€ΠΈΡŽ Π·Π°Π»ΠΈΠΏΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΡ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ², Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΆΠΈΠ²ΡƒΡŽ ΠΏΠΎΡ‰ΡƒΠΏΠ°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ сСтСй Π₯ΠΎΠΏΡ„ΠΈΠ»Π΄Π°, машин Π‘ΠΎΠ»ΡŒΡ†ΠΌΠ°Π½Π° ΠΈ VC-размСрности.
Π ΠΎΠΌΠ°Π½ рСгулярно дСлится ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½Ρ‹ΠΌΠΈ Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°ΠΌΠΈ, инсайтами ΠΈ экспСртизой Π² своСм авторском Telegram-ΠΊΠ°Π½Π°Π»Π΅ На курсС Π ΠΎΠΌΠ°Π½ выступаСт ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Π½Ρ‚ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: ΠΎΠ½ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ содСрТаниС ΡƒΡ€ΠΎΠΊΠΎΠ² с ΠΎΠΏΠΎΡ€ΠΎΠΉ Π½Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½Ρ‹Π΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΈ ТСсткиС трСбования индустрии. Π£Π·Π½Π°Ρ‚ΡŒ большС ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Ρ… систСм: πŸ‘‰ ΠšΡƒΡ€Ρ Β«Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ИИ-Π°Π³Π΅Π½Ρ‚ΠΎΠ²Β» Π’Π°ΠΊ, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Π·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒ вас с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ? πŸ‘ β€” Π”Π°, ΠΆΠ΄Π΅ΠΌ Π½ΠΎΠ²Ρ‹Ρ… Π»ΠΈΡ† πŸ”₯ β€” Π–Π΄Ρƒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΎΡ‚ Π ΠΎΠΌΠ°Π½Π°

🧩 Π Π°Π·Π±ΠΎΡ€ Π·Π°Π΄Π°Ρ‡ΠΈ ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚: Π‘ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€ΠΎΡˆΠ΅Π½ InvalidOperationException МногиС ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт просто добавится Π² список ΠΈ Ρ†ΠΈΠΊΠ» ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Но Π²Π½ΡƒΡ‚Ρ€ΠΈ foreach ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Enumerator, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Π²Π΅Ρ€ΡΠΈΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π°Ρ‡Π°Π»Π° ΠΎΠ±Ρ…ΠΎΠ΄Π°. ПослС выполнСния:
users.Add(4);
вСрсия списка измСняСтся. ➑️ ΠŸΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ MoveNext() Enumerator ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ коллСкция Π±Ρ‹Π»Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° послС Π½Π°Ρ‡Π°Π»Π° ΠΎΠ±Ρ…ΠΎΠ΄Π°, ΠΈ выбрасываСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅:
System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
❕ Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ Add(), Π° ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ элСмСнту ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. НапримСр, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄:

{
    Console.WriteLine(user);

    if (user == 2)
        users.Add(4);
}
успССт вывСсти:
1
2 
ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС этого Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ с ошибкой. πŸ’‘ Π­Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для List<T>, Π½ΠΎ ΠΈ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ .NET, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Dictionary<TKey, TValue>, HashSet<T> ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅. Если Π²ΠΎ врСмя ΠΎΠ±Ρ…ΠΎΠ΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†ΠΈΠΊΠ» for, Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ с ΠΊΠΎΠΏΠΈΠ΅ΠΉ Ρ‡Π΅Ρ€Π΅Π· ToList() ΠΈΠ»ΠΈ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°ΠΉΡ‚Π΅ измСнСния ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. πŸ“ Навигация: Вакансии β€’ Π—Π°Π΄Π°Ρ‡ΠΈ β€’ БобСсы 🐸 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡˆΠ°Ρ€ΠΏΠΈΡΡ‚Π° #dotnet_challenge

πŸ’‘ Π§Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ C#-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠžΡ‚ async/await ΠΈ LINQ Π΄ΠΎ GC, многопоточности, рСфлСксии ΠΈ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ β€” экосистСма .NET становится всё ΡˆΠΈΡ€Π΅ с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Ρ€Π΅Π»ΠΈΠ·ΠΎΠΌ. ➑️ Нашли Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΡƒ, которая собираСт ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ Ρ‚Π΅ΠΌΡ‹ C# ΠΈ .NET Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС. Π£Π΄ΠΎΠ±Π½ΠΎ для ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΊ собСсСдованию, систСматизации Π·Π½Π°Π½ΠΈΠΉ ΠΈΠ»ΠΈ поиска Ρ‚Π΅ΠΌ для изучСния ⚑️ πŸ”— Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ πŸ“ Навигация: Вакансии β€’ Π—Π°Π΄Π°Ρ‡ΠΈ β€’ БобСсы 🐸 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡˆΠ°Ρ€ΠΏΠΈΡΡ‚Π° #схСма

πŸ€” Middleware, Endpoint Filter ΠΈΠ»ΠΈ Policy Pipeline ΠŸΠΎΡ‡Ρ‚ΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ASP.NET Core-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ вопрос: ΠΊΡƒΠ΄Π° Π²Ρ‹Π½ΠΎΡΠΈΡ‚ΡŒ Π½
+4
πŸ€” Middleware, Endpoint Filter ΠΈΠ»ΠΈ Policy Pipeline ΠŸΠΎΡ‡Ρ‚ΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ASP.NET Core-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ вопрос: ΠΊΡƒΠ΄Π° Π²Ρ‹Π½ΠΎΡΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ ❓ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ доступа, feature flags, комплаСнс, Ρ‚ΠΎΡ€Π³ΠΎΠ²Ρ‹Π΅ часы ΠΈ Ρ€Π΅Π³ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ограничСния со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ…Π΅Π½Π΄Π»Π΅Ρ€Ρ‹ Π² Π½Π°Π±ΠΎΡ€ бСсконСчных if. ➑️ Π’ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ, Ρ‡Π΅ΠΌ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Middleware, Endpoint Filters ΠΈ Policy Pipeline, ΠΈ Π² ΠΊΠ°ΠΊΠΈΡ… случаях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ…. πŸ”— Бсылка πŸ“ Навигация: Вакансии β€’ Π—Π°Π΄Π°Ρ‡ΠΈ β€’ БобСсы 🐸 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡˆΠ°Ρ€ΠΏΠΈΡΡ‚Π° #il_Π»ΡŽΠΌΠΈΠ½Π°Ρ‚ΠΎΡ€

⚑️ ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Π·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒ вас с экспСртами курса AgentOps! β€” Π‘Π΅Ρ€Π³Π΅ΠΉ НотСвский расскаТСт, ΠΊΠ°ΠΊ Π²Ρ‹ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ FinOps для AI-ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ²:
⚑️ ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Π·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒ вас с экспСртами курса AgentOps! β€” Π‘Π΅Ρ€Π³Π΅ΠΉ НотСвский расскаТСт, ΠΊΠ°ΠΊ Π²Ρ‹ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ FinOps для AI-ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ²: ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈ ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½, Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ model routing, semantic cache ΠΈ систСму Π°Π»Π΅Ρ€Ρ‚ΠΎΠ² для контроля расходов β€” Эмиль Π‘Π°Ρ‚Π°Π΅Π² Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚ Context Engineering: ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ контСкстом, Π·Π°Ρ‰ΠΈΡ‚Ρƒ ΠΎΡ‚ prompt injection, Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌΠΈ контСкстами ΠΈ построСниС бСзопасного ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° Π²Ρ…ΠΎΠ΄Π° для AI-систСм β€” ΠœΠΈΡ…Π°ΠΈΠ» БондарСвский ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ инфраструктуру для AI-Π°Π³Π΅Π½Ρ‚ΠΎΠ²: Docker, sandboxing, streaming, docker-compose ΠΈ воспроизводимоС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π° β€” ΠœΡƒΡ€Π°Ρ‚ Π₯Π°ΠΆΠ³Π΅Ρ€ΠΈΠ΅Π² расскаТСт ΠΏΡ€ΠΎ Enterprise Integrations & MCP: ΠΊΠΎΠ³Π΄Π° MCP Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ΅Π½, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ внСшниС сСрвисы ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с OAuth2 delegation β€” Π“Π΅Ρ€ΠΌΠ°Π½ Π‘Π°Π±ΠΈΡ€ΠΎΠ² Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚ Governance & Compliance для AI-систСм: data flow, audit logs, трСбования 152-Π€Π—, Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ построСниС compliance-ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠšΡƒΡ€Ρ для backend-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Ρ‚ΠΈΠΌΠ»ΠΈΠ΄ΠΎΠ² ΠΈ LLM ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ² ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ AI-Π»ΠΎΠ³ΠΈΠΊΡƒ Π² бэкСнд IT-ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ сСрвиса. πŸ‘‰ Π˜Π·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ AgentOps ΠΈ Π·Π°Π½ΡΡ‚ΡŒ мСсто.

πŸ“Œ ДайдТСст .NET Π·Π° нСдСлю πŸ”€ Material 3 для .NET MAUI Π½Π° Android Android-прилоТСния Π½Π° .NET MAUI 10 Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ пСрСвСсти Π½
πŸ“Œ ДайдТСст .NET Π·Π° нСдСлю πŸ”€ Material 3 для .NET MAUI Π½Π° Android Android-прилоТСния Π½Π° .NET MAUI 10 Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ пСрСвСсти Π½Π° Material 3 (Material You) ΠΎΠ΄Π½ΠΎΠΉ настройкой Π² .csproj:

<PropertyGroup>   <UseMaterial3>true</UseMaterial3> </PropertyGroup>
πŸ”΅ ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° появилась Π² SR6 (Microsoft.Maui.Controls 10.0.60+) ΠΈ ΡƒΠΆΠ΅ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Entry, SearchBar, DatePicker, Slider, Switch, Shell ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ стандартныС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Ρ‹. Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Android. πŸ”€ Π“Π°ΠΉΠ΄ ΠΏΠΎ GitHub Copilot для .NET Microsoft выпустила практичСский Π³Π°ΠΉΠ΄ ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с GitHub Copilot Π² .NET-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…. ПолСзно Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ ΡƒΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Copilot ΠΈ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΎΡ‚ Π½Π΅Π³ΠΎ большС ΠΏΠΎΠ»ΡŒΠ·Ρ‹. πŸ“ Навигация: Вакансии β€’ Π—Π°Π΄Π°Ρ‡ΠΈ β€’ БобСсы 🐸 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡˆΠ°Ρ€ΠΏΠΈΡΡ‚Π° #async_news

πŸ“’ Навигация ΠΏΠΎ ΠΊΠ°Π½Π°Π»Ρƒ Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Ρ‚Π΅Ρ€ΡΡ‚ΡŒΡΡ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅ постов, собрали ΡƒΠ΄ΠΎΠ±Π½ΡƒΡŽ Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΡŽ ΠΏΠΎ Ρ€ΡƒΠ±Ρ€ΠΈΠΊΠ°ΠΌ: #sharp_view β€” ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ посты с ΠΊΠΎΠ΄ΠΎΠΌ, best practices, Ρ„ΠΈΡˆΠΊΠΈ C#, сравнСниС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ², code snippets ΠΈ Ρ€Π°Π·Π±ΠΎΡ€ Π±Π°Π³ΠΎΠ² #il_Π»ΡŽΠΌΠΈΠ½Π°Ρ‚ΠΎΡ€ β€” Π³Π»ΡƒΠ±ΠΎΠΊΠΈΠ΅ тСхничСскиС Ρ€Π°Π·Π±ΠΎΡ€Ρ‹: Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, устройство .NET, CLR, GC, JIT ΠΈ слоТныС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ #async_news β€” Ρ€Π΅Π»ΠΈΠ·Ρ‹ .NET, обновлСния IDE, анонсы ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΉ, дайдТСсты ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π°ΠΆΠ½Ρ‹Π΅ новости экосистСмы #entry_point β€” опросы, Ρ…ΠΎΠ»ΠΈΠ²Π°Ρ€Ρ‹, вопросы подписчикам, истории ΠΈΠ· ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΈ обсуТдСния с сообщСством #dotnet_challenge β€” Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ C# ΠΈ .NET, вопросы с собСсСдований, поиск ошибок Π² ΠΊΠΎΠ΄Π΅ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ Π²ΠΈΠΊΡ‚ΠΎΡ€ΠΈΠ½Ρ‹ #схСма β€” ΠΈΠ½Ρ„ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΊΠ°, Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹, ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠΈ, Π΄ΠΎΡ€ΠΎΠΆΠ½Ρ‹Π΅ ΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ объяснСниС слоТных Ρ‚Π΅ΠΌ #garbage_collector β€” ΠΌΠ΅ΠΌΡ‹, ΡŽΠΌΠΎΡ€ ΠΈ Π·Π°Π±Π°Π²Π½Ρ‹Π΅ истории ΠΈΠ· ΠΆΠΈΠ·Π½ΠΈ .NET-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² πŸ”ˆ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ€ΡƒΠ±Ρ€ΠΈΠΊΠΈ для быстрого поиска ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² ΠΈ Π½Π΅ пропускайтС Π½ΠΎΠ²Ρ‹Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ. 🐸 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡˆΠ°Ρ€ΠΏΠΈΡΡ‚Π°

🚨 Как ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ ΠΎΡ‚ΠΎΠ·Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½ Π² .NET ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ JWT нСльзя ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ ΠΎΡ‚ΠΎΠ·Π²Π°Ρ‚ΡŒ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ инфраструктуры. Если Ρ‚ΠΎΠΊΠ΅Π½ ΡƒΠΊΡ€Π°Π΄Π΅Π½, ΠΎΠ½ остаётся Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΌ Π΄ΠΎ окончания срока дСйствия. Для сцСнариСв, Π³Π΄Π΅ доступ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ сразу, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Reference Tokens Π² Duende IdentityServer:
csharp new Client { ClientId = Β«banking_appΒ», AccessTokenType = AccessTokenType.Reference };
Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚ΠΎΠΊΠ΅Π½ хранится Π½Π° сСрвСрС ΠΈ провСряСтся Ρ‡Π΅Ρ€Π΅Π· ΠΈΠ½Ρ‚Ρ€ΠΎΡΠΏΠ΅ΠΊΡ†ΠΈΡŽ. ΠŸΡ€ΠΈ нСобходимости Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΎΠ·Π²Π°Ρ‚ΡŒ:
csharp await client.RevokeTokenAsync(new TokenRevocationRequest { Address = Β«https://identity.example.com/connect/revocationΒ», Token = accessToken });
ПослС ΠΎΡ‚Π·Ρ‹Π²Π° API ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚:
json { Β«activeΒ»: false }
πŸ“Œ Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ: β€” банковскиС прилоТСния; β€” мСдицинскиС систСмы; β€” Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ сСрвисы с ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Ρ‹ΠΌΠΈ трСбованиями ΠΊ бСзопасности; β€” ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π³Π΄Π΅ нСльзя ΠΆΠ΄Π°Ρ‚ΡŒ истСчСния JWT. ΠŸΠ»Π°Ρ‚ΠΎΠΉ Π·Π° ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΉ ΠΎΡ‚Π·Ρ‹Π² становится интроспСкция Ρ‚ΠΎΠΊΠ΅Π½Π° Π½Π° сторонС сСрвСра. πŸ”— Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ πŸ“ Навигация: Вакансии β€’ Π—Π°Π΄Π°Ρ‡ΠΈ β€’ БобСсы 🐸 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡˆΠ°Ρ€ΠΏΠΈΡΡ‚Π° #sharp_view

⚑️ ПослСдний шанс Π·Π°Π±Ρ€Π°Ρ‚ΡŒ курсы со Π‘ΠšΠ˜Π”ΠšΠžΠ™ 40%! ΠŸΡ€ΠΎΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ свой ΠΌΠΎΠ·Π³ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π”ΠΎ ΠΊΠΎΠ½Ρ†Π° Π°ΠΊΡ†ΠΈΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ спСци
⚑️ ПослСдний шанс Π·Π°Π±Ρ€Π°Ρ‚ΡŒ курсы со Π‘ΠšΠ˜Π”ΠšΠžΠ™ 40%! ΠŸΡ€ΠΎΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ свой ΠΌΠΎΠ·Π³ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π”ΠΎ ΠΊΠΎΠ½Ρ†Π° Π°ΠΊΡ†ΠΈΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ†Π΅Π½Π°ΠΌΠΈ Π½Π° самыС вострСбованныС IT-направлСния. ΠšΡ€ΡƒΡ‚ΠΎ ΠΈ Π²Ρ‹Π³ΠΎΠ΄Π½ΠΎ ΠΏΡ€ΠΎΠΊΠ°Ρ‡Π°Ρ‚ΡŒ свои скиллы, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ„Ρ„Π΅Ρ€, ΡƒΠ΅Ρ…Π°Ρ‚ΡŒ Π½Π° Π‘Π°Π»ΠΈ ΠΈ большС Π½Π΅ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ 😎 ➑️ Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° AI-Π°Π³Π΅Π½Ρ‚ΠΎΠ² β€” ΠΎΡ‚ 49 000 β‚½ (вмСсто 69 000 β‚½) ΠšΡƒΡ€Ρ ΠΏΡ€ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡƒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ИИ-Π°Π³Π΅Π½Ρ‚ΠΎΠ²: качСство, ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ, Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ тСстированиС. Π‘ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ занятия β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ практичСская Ρ€Π°Π±ΠΎΡ‚Π°. ➑️ ΠšΡƒΡ€Ρ AgentOps β€” 129 000 β‚½ (вмСсто 149 000 β‚½) ΠŸΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚Ρ€Π΅ΠΊ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈ LLM ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ² ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ AI-Π»ΠΎΠ³ΠΈΠΊΡƒ Π² бэкСнд ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΆΠ΅Π»Π΅Π·Π½ΡƒΡŽ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ сСрвиса. ➑️ ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° для Data Science β€” ΠΎΡ‚ 29 990 β‚½ (вмСсто 39 990 β‚½) Π’Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ слоТныС матСматичСскиС Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°ΡŽΡ‚ Π½Π° собСсСдованиях Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π΄Π°Ρ‚Π°-сайСнтиста Π² Π±ΠΈΠ³Ρ‚Π΅Ρ…Π΅. ΠžΡ‚Π»ΠΈΡ‡Π½Π°Ρ Π±Π°Π·Π° для ΠΌΠΎΡ‰Π½ΠΎΠ³ΠΎ старта Π² DS. ➑️ ΠšΡƒΡ€Ρ БпСциалист ΠΏΠΎ ИИ β€” 89 000 β‚½ (вмСсто 113 900 β‚½) КомплСксная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для получСния профСссии Π² сфСрС ИИ с нуля. Π—Π° 8 мСсяцСв Π²Ρ‹ собСрСтС сильноС ΠΏΠΎΡ€Ρ‚Ρ„ΠΎΠ»ΠΈΠΎ ΠΈΠ· 5 Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Π΄ΠΈΠΏΠ»ΠΎΠΌΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹. ➑️ АрхитСктуры ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования β€” 27 990 β‚½ (вмСсто 37 900 β‚½) Π˜Π½Ρ‚Π΅Π½ΡΠΈΠ² для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ основныС ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ проСктирования ΠΈ ΠΏΡ€ΠΎΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π½Π°Π²Ρ‹ΠΊΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. 🌸 Π’Ρ‹Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, оставляйтС заявку Π½Π° сайтС распродаТи, ΠΈ наш ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ вас ΠΏΡ€ΠΎΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚

πŸ¦ΎπŸ§ πŸ‹οΈ ΠšΠ°Ρ‡Π°Π΅ΠΌ ΠΌΠΎΠ·Π³ΠΈ ΠΊ Π»Π΅Ρ‚Ρƒ! ВсС готовятся ΠΊ пляТному сСзону, Π° ΠΌΡ‹ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌ ΠΏΡ€ΠΎΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Ρ…Π°Ρ€Π΄-скилы, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π±Ρ€Π°Ρ‚ΡŒ ΠΊΡ€ΡƒΡ‚ΠΎΠΉ ΠΎΡ„Ρ„Π΅
πŸ¦ΎπŸ§ πŸ‹οΈ ΠšΠ°Ρ‡Π°Π΅ΠΌ ΠΌΠΎΠ·Π³ΠΈ ΠΊ Π»Π΅Ρ‚Ρƒ! ВсС готовятся ΠΊ пляТному сСзону, Π° ΠΌΡ‹ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌ ΠΏΡ€ΠΎΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Ρ…Π°Ρ€Π΄-скилы, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π±Ρ€Π°Ρ‚ΡŒ ΠΊΡ€ΡƒΡ‚ΠΎΠΉ ΠΎΡ„Ρ„Π΅Ρ€, ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΠ· любой Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΌΠΈΡ€Π° 😎 ⚑️ РаспродаТа @proglib_academy: Π·Π°Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ самыС Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Ρ€Π΅ΠΊΠΈ ΠΏΠΎ сниТСнным Ρ†Π΅Π½Π°ΠΌ! ➑️ Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° AI-Π°Π³Π΅Π½Ρ‚ΠΎΠ² β€” ΠΎΡ‚ 49 000 β‚½ (вмСсто 69 000 β‚½). ➑️ ΠšΡƒΡ€Ρ AgentOps β€” 129 000 β‚½ (вмСсто 149 000 β‚½). ➑️ ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ AI-ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ β€” 23 990 β‚½ (вмСсто 31 990 β‚½). ➑️ ML для старта Π² Data Science β€” 28 990 β‚½ (вмСсто 38 990 β‚½). ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹? ⭐️Учим для ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π°. Наши ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π·Π°Ρ‚ΠΎΡ‡Π΅Π½Ρ‹ ΠΏΠΎΠ΄ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ бизнСса: ΠΊΠ°ΠΊ Π½Π΅ ΡΠ»ΠΈΡ‚ΡŒ Π±ΡŽΠ΄ΠΆΠ΅Ρ‚ Π½Π° Ρ‚ΠΎΠΊΠ΅Π½Ρ‹, ΠΊΠ°ΠΊ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ LLM Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ Π² бэкСндС ΠΈ ΠΊΠ°ΠΊ Π²Ρ‹ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ. ⭐️БпикСры β€” суровыС ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ. Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΠΏΡ‹Ρ‚ Ρƒ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… AI-Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ², Ρ‚ΠΈΠΌΠ»ΠΈΠ΄ΠΎΠ² ΠΈ ML-ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ² ΠΈΠ· Ρ‚ΠΎΠΏΠΎΠ²Ρ‹Ρ… IT-ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ. β­οΈΠšΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄. ΠœΡ‹ Π΄Π°Π΅ΠΌ ΠΊΠ°ΠΊ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ матСматичСский Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚ для понимания ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Β«ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌΒ», Ρ‚Π°ΠΊ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ΠΎΠ²Ρ‹Π΅ инструмСнты оркСстрации Π°Π³Π΅Π½Ρ‚ΠΎΠ². ⭐️Много ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΈ Ρ„ΠΈΠ΄Π±Π΅ΠΊΠ°. Π’Π΅Π±ΠΈΠ½Π°Ρ€Ρ‹, дСсятки практичСских Π·Π°Π΄Π°Π½ΠΈΠΉ ΠΈ ΠΆΠΈΠ²ΠΎΠ΅ ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ с экспСртами Π² Ρ‡Π°Ρ‚Π΅ Telegram Π½Π° протяТСнии всСго обучСния. ⏳ ΠžΡΡ‚Π°Π²Π»ΡΠΉΡ‚Π΅ заявку ΠΈ Π±Ρ€ΠΎΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ мСсто со Π‘ΠšΠ˜Π”ΠšΠžΠ™ 40%

πŸ‘€ ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ курс Β«Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° AI-Π°Π³Π΅Π½Ρ‚ΠΎΠ² для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Π΄Π°Ρ‡, Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ собствСнных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²Β» со скидкой 40% Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° ΠΌ
πŸ‘€ ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ курс Β«Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° AI-Π°Π³Π΅Π½Ρ‚ΠΎΠ² для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Π΄Π°Ρ‡, Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ собствСнных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²Β» со скидкой 40% Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° мая! ΠœΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ с дСсятками Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΡƒΡ‡Π»ΠΈ Π³Π»Π°Π²Π½Ρ‹Π΅ Π±ΠΎΠ»ΠΈ индустрии ΠΈ запускаСм ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ курс «ИИ-Π°Π³Π΅Π½Ρ‚Ρ‹ 5.0Β». πŸŽ‰ Π§Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅? - Как Ρ€Π°Π΄ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° Ρ‚ΠΎΠΊΠ΅Π½Ρ‹. - Как Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ качСство ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π³Π΅Π½Ρ‚Π°. - Как Β«Π΄ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Ρ‚ΡŒΒ» RAG-систСмы Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ качСства. - Как ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ Π°Π³Π΅Π½Ρ‚Π° ΠΊ сбоям Π²Π½Π΅ΡˆΠ½ΠΈΡ… сСрвисов Π±Π΅Π· падСния всСй систСмы, ΠΈ ΠΏΡ€ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠ΅-ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. Π‘ΠΏΠΈΠΊΠ΅Ρ€Ρ‹ β€” ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ с ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ Π² AI ΠΈ Data Science Π² ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… IT-компаниях, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ЯндСкс, Π‘Π±Π΅Ρ€, Raft ΠΈ Π“Π°Π·ΠΏΡ€ΠΎΠΌΠ±Π°Π½ΠΊ Π΄Ρ€. Π”Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: 6–12 нСдСль Π² зависимости ΠΎΡ‚ Ρ‚Π°Ρ€ΠΈΡ„Π°. πŸ‘‰ Π—Π°Π½ΠΈΠΌΠ°ΠΉΡ‚Π΅ мСсто Π½Π° Π³Π»Π°Π²Π½ΠΎΠΌ агСнтском интСнсивС ΠΏΠΎ Π»ΡƒΡ‡ΡˆΠ΅ΠΉ Ρ†Π΅Π½Π΅

⚑️ Π—Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с экспСртом Proglib Academy: AI-Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΠΎΡ€ Антон Будняк Антон β€” мастСр прСвращСния сырых AI-ΠΈΠ΄Π΅ΠΉ Π² отказоустой
⚑️ Π—Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с экспСртом Proglib Academy: AI-Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΠΎΡ€ Антон Будняк Антон β€” мастСр прСвращСния сырых AI-ΠΈΠ΄Π΅ΠΉ Π² отказоустойчивыС систСмы. Он Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ MVP Π·Π° нСдСлю ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π½Π΅ Ρ€Π°ΡΡΡ‹ΠΏΠ°Π»Π°ΡΡŒ ΠΏΠΎΠ΄ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ Π² сотни тысяч ΡŽΠ·Π΅Ρ€ΠΎΠ². Π—Π° Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ Ρ†Π΅Π½ΠΈΡ‚ IT-ΠΊΠΎΠΌΡŒΡŽΠ½ΠΈΡ‚ΠΈ: 🟣 ΠžΠΏΡ‹Ρ‚ Π² Ρ„ΠΈΠ½Ρ‚Π΅Ρ…Π΅ ΠΈ ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΌ бизнСсС
Π ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΠ» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ML-ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π² Ρ„ΠΈΠ½Ρ‚Π΅Ρ…Π΅ с экономичСским эффСктом Π±ΠΎΠ»Π΅Π΅ 100 ΠΌΠ»Π½ β‚½
🟣 Запуск ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² Π½Π° 6.000+ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ
Антон строит сСрвисы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ тысячи людСй Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ΄Π΅.
🟣 УскоряСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ
ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π» ML-ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Ρ‹ ΠΈ ΠΊΡ€Π°Ρ‚Π½ΠΎ сократил врСмя ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄ΠΎ Ρ€Π΅Π»ΠΈΠ·Π°
πŸ“š Π“Π΄Π΅ Антон Ρ‡Π΅Ρ€ΠΏΠ°Π΅Ρ‚ знания (Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ экспСрта): - X* β€” Π³Π»Π°Π²Π½Ρ‹ΠΉ источник новостСй. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π±Π»ΠΎΠ³ Бориса Π§Π΅Ρ€Π½ΠΈ (создатСля Claude Code) β€” Ρ‚Π°ΠΌ Π±Π°Π·Π° ΠΏΡ€ΠΎ использованиС ИИ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅. - НСтворкинг Π² Π’Π“: Ρ‡Π°Ρ‚Ρ‹ LLM ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ ΠΈ AI-Ρ‡Π°Ρ‚ β€” здСсь ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π° любой тСхничСский вопрос. - Новости AI: ΠΊΠ°Π½Π°Π»Ρ‹ Биолошная ΠΈ Denis Sexy IT. На курсС Agentops Антон ΡƒΡ‡ΠΈΡ‚ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Β«Π½Π΅ΡƒΠ±ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉΒ» бэкСнд: Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с очСрСдями, Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Π°ΠΌΠΈ ΠΈ балансировкой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваши Π°Π³Π΅Π½Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ 24/7. 🎁 МайскиС Π‘ΠšΠ˜Π”ΠšΠ˜ Π² Proglib Academy! Π”ΠΎ ΠΊΠΎΠ½Ρ†Π° мая Π½Π° всС курсы Π°ΠΊΠ°Π΄Π΅ΠΌΠΈΠΈ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ AgentOps ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ИИ-Π°Π³Π΅Π½Ρ‚ΠΎΠ²) дСйствуСт скидка -40%. Π­Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΠΉΡ‚ΠΈ Π² AI-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΠΎΠ΄ присмотром ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠ². Π£Π·Π½Π°Ρ‚ΡŒ большС ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠΈ Ρƒ Антона: πŸ‘‰ ΠšΡƒΡ€Ρ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ AI-Π»ΠΎΠ³ΠΈΠΊΡƒ Π² бэкСнд ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ сСрвиса ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Π·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒ вас с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ? πŸ‘ β€” Π”Π°, ΠΆΠ΄Π΅ΠΌ Π½ΠΎΠ²Ρ‹Ρ… Π»ΠΈΡ† πŸ”₯ β€” ΠŸΠΎΠΉΠ΄Ρƒ ΠΏΠΎΠ΄ΠΏΠΈΡˆΡƒΡΡŒ Π½Π° ΠΊΠ°Π½Π°Π»Ρ‹ ΠΈΠ· списка Антона πŸƒβ€β™€οΈ Proglib Academy * - Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ Π² Ρ€Ρ„

🧠 Microsoft выпустила governance-Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ для MCP-сСрвСров Π½Π° .NET Model Context Protocol (MCP) упростил ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ инструмСнтов ΠΊ AI-Π°Π³Π΅Π½Ρ‚Π°ΠΌ. Но Ρ‡Π΅ΠΌ большС инструмСнтов доступно Π°Π³Π΅Π½Ρ‚Ρƒ, Ρ‚Π΅ΠΌ острСС вопрос контроля. КакиС tools ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ? Π§Ρ‚ΠΎ Ссли Π² описании инструмСнта спрятана prompt-ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΡ? Как Π½Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ опасный ΠΎΡ‚Π²Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² модСль? Microsoft ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ»Π° ΠΎΡ‚Π²Π΅Ρ‚ Π² Π²ΠΈΠ΄Π΅ NuGet-ΠΏΠ°ΠΊΠ΅Ρ‚Π° Microsoft.AgentGovernance.Extensions.ModelContextProtocol. Π­Ρ‚ΠΎ Public Preview Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ для ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ MCP C# SDK, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ добавляСт слой governance ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ MCP-сСрвСру ΠΎΠ΄Π½ΠΈΠΌ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ. Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠŸΠ°ΠΊΠ΅Ρ‚ встраиваСтся Π² стандартный IMcpServerBuilder ΠΈ добавляСт Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π²Π΅Ρ‰ΠΈ. Π‘ΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ инструмСнтов ΠΏΡ€ΠΈ стартС, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅, ΡΠ°Π½ΠΈΡ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠΌ Π² модСль ΠΈ Π°ΡƒΠ΄ΠΈΡ‚ с ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ°ΠΌΠΈ. Установка стандартная:
dotnet add package Microsoft.AgentGovernance.Extensions.ModelContextProtocol
ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ΄ΠΈΠ½ extension-ΠΌΠ΅Ρ‚ΠΎΠ΄:
using AgentGovernance.Extensions.ModelContextProtocol;

builder.Services
    .AddMcpServer()
    .WithGovernance(options =>
    {
        options.PolicyPaths.Add("policies/mcp.yaml");
        options.DefaultAgentId = "did:mcp:server";
        options.ServerName = "contoso-support";
    });
Π‘ΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ запускС Π”ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ инструмСнты станут доступны ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ, ΠΏΠ°ΠΊΠ΅Ρ‚ провСряСт ΠΈΡ… опрСдСлСния Π½Π° ΡƒΠ³Ρ€ΠΎΠ·Ρ‹. Π‘Ρ€Π΅Π΄ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ: tool poisoning, тайпсквоттинг, скрытыС инструкции Π² описаниях, schema abuse (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, поля Π²Ρ€ΠΎΠ΄Π΅ password ΠΈΠ»ΠΈ system_prompt), cross-server Π°Ρ‚Π°ΠΊΠΈ. Если инструмСнт Π½Π΅ ΠΏΡ€ΠΎΡˆΡ‘Π» ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ, сСрвСр ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅ запустится. Π­Ρ‚ΠΎ fail closed Π½Π° этапС старта, Π° Π½Π΅ Ρ€Π°Π½Ρ‚Π°ΠΉΠΌ-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€. ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ доступа ΠΊ инструмСнтам описываСтся Π² YAML-Ρ„Π°ΠΉΠ»Π°Ρ…. ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈ allow/deny с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°ΠΌΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
apiVersion: governance.toolkit/v1
version: "1.0"
name: mcp-governance-policy
default_action: deny
rules:
  - name: allow-echo
    condition: "tool_name == 'echo'"
    action: allow
    priority: 10
Если Π²Ρ‹Π·ΠΎΠ² Π·Π°ΠΏΡ€Π΅Ρ‰Ρ‘Π½, ΠΏΠ°ΠΊΠ΅Ρ‚ Π²Π΅Ρ€Π½Ρ‘Ρ‚ governed error result вмСсто выполнСния инструмСнта. ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ identity: Ссли Π΅ΡΡ‚ΡŒ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ участвуСт Π² ΠΎΡ†Π΅Π½ΠΊΠ΅. Если Π½Π΅Ρ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ fallback DID, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ did:mcp:anonymous. Банитизация ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² ΠžΡ‚Π²Π΅Ρ‚Ρ‹ инструмСнтов проходят Ρ‡Π΅Ρ€Π΅Π· санитайзСр Π΄ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ. Он ΠΈΡ‰Π΅Ρ‚ prompt-injection Ρ‚Π΅Π³ΠΈ (<system>...</system>), Ρ„Ρ€Π°Π·Ρ‹ пСрСопрСдСлСния Π²Ρ€ΠΎΠ΄Π΅ Β«ignore previous instructionsΒ», ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ credentials ΠΈ URL для ΡΠΊΡΡ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΠΏΠ°ΡΠ½Ρ‹Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ‹Ρ€Π΅Π·Π°ΡŽΡ‚ΡΡ, ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ сохраняСтся. Π”Π΅Ρ„ΠΎΠ»Ρ‚Ρ‹ ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ ΠŸΠ°ΠΊΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π·Π°Ρ‰ΠΈΡ‚Ρƒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ настройки. ScanToolsOnStartup, FailOnUnsafeTools, SanitizeResponses, GovernFallbackHandlers, EnableAudit, EnableMetrics β€” всё это true сразу послС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Π˜Ρ‚ΠΎΠ³ΠΎ ΠŸΠ°ΠΊΠ΅Ρ‚ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ„ΠΎΡ€ΠΊΠ° SDK ΠΈ Π½Π΅ Π²Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ прокси-процСсс. Он ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ„ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ToolCollection Π² стандартном builder-ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π΅ ΠΈ примСняСтся ΠΊΠΎ всСм инструмСнтам, зарСгистрированным Π΄ΠΎ ΠΈΠ»ΠΈ послС Π²Ρ‹Π·ΠΎΠ²Π° .WithGovernance(). Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с .NET 8+. Если Π²Ρ‹ строитС MCP-сСрвСры для Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΊΠΎΠΏΠ°ΠΉΠ»ΠΎΡ‚ΠΎΠ² ΠΈΠ»ΠΈ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Π°Π³Π΅Π½Ρ‚ΠΎΠ², это Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ способ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ доступа, Π°ΡƒΠ΄ΠΈΡ‚ ΠΈ Π·Π°Ρ‰ΠΈΡ‚Ρƒ ΠΎΡ‚ ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΠΉ Π±Π΅Π· Ρ€ΡƒΡ‡Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ сСрвисС. ➑️ Π‘Π»ΠΎΠ³ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² πŸ“ Навигация: Вакансии β€’ Π—Π°Π΄Π°Ρ‡ΠΈ β€’ БобСсы 🐸 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡˆΠ°Ρ€ΠΏΠΈΡΡ‚Π° #sharp_view

πŸ“Ž NuGet Package Pruning Π² .NET 10: мСньшС ΡˆΡƒΠΌΠ° Π² зависимостях Если Π²Ρ‹ запускали NuGet Audit Π½Π° .NET-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, Ρ‚ΠΎ навСрняка Π²ΠΈ
πŸ“Ž NuGet Package Pruning Π² .NET 10: мСньшС ΡˆΡƒΠΌΠ° Π² зависимостях Если Π²Ρ‹ запускали NuGet Audit Π½Π° .NET-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, Ρ‚ΠΎ навСрняка Π²ΠΈΠ΄Π΅Π»ΠΈ прСдупрСТдСния ΠΎ Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ устанавливали. Часто это System.Text.Json, System.Memory ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅ Π² Π±ΠΎΠ»Π΅Π΅ свСТСй вСрсии. ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π΅ΡΡ‚ΡŒ, Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π΅Ρ‚. Π’ .NET 10 эту ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ исправили. Π’ Ρ‡Ρ‘ΠΌ Π±Ρ‹Π»Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° МногиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π° nuget.org таргСтят netstandard2.0 ΠΈ тянут Π·Π° собой ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ System.Text.Json 8.0.0. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° .NET 10 ΡƒΠΆΠ΅ содСрТит ΠΈΡ… Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅ Π² Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΠΎΠΉ вСрсии, Π½ΠΎ NuGet всё Ρ€Π°Π²Π½ΠΎ Ρ€Π΅Π·ΠΎΠ»Π²ΠΈΡ‚ старый ΠΏΠ°ΠΊΠ΅Ρ‚ Π² Π³Ρ€Π°Ρ„. Когда Π½Π° Π½Π΅Π³ΠΎ публикуСтся CVE, сканСр ΠΏΠΎΠΌΠ΅Ρ‡Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΊΠ°ΠΊ уязвимый. По Ρ„Π°ΠΊΡ‚Ρƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π²Π΅Ρ€ΡΠΈΡŽ ΠΈΠ· Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ°. Π­Ρ‚ΠΎ Π»ΠΎΠΆΠ½ΠΎΠ΅ срабатываниС, Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΎΡ‚ настоящСго Π±Π΅Π· Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π±ΠΎΡ€Π° слоТно. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ package pruning Package pruning ΡƒΠ±ΠΈΡ€Π°Π΅Ρ‚ ΠΈΠ· Π³Ρ€Π°Ρ„Π° зависимостСй ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ ΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ .NET Runtime Libraries. NuGet ΠΏΡ€ΠΈ restore свСряСтся со списком ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², входящих Π² Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ. Если транзитивная Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, ΠΎΠ½Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ. ΠŸΠ°ΠΊΠ΅Ρ‚ Π½Π΅ скачиваСтся ΠΈ Π½Π΅ Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π² Π°ΡƒΠ΄ΠΈΡ‚Π΅. Для прямых PackageReference Π»ΠΎΠ³ΠΈΠΊΠ° другая: NuGet ставит PrivateAssets='all' ΠΈ IncludeAssets='none'. Бсылка остаётся Π² csproj, ΠΏΠΎΠΊΠ° Π²Ρ‹ сами Π΅Ρ‘ Π½Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅. Если ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ, NuGet Π²Ρ‹Π΄Π°Ρ‘Ρ‚ NU1510. Pruning Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… вСрсии Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° net8.0 с Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½ΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒΡŽ System.Text.Json 9.0.0 Π½Π΅ ΡƒΠ±Π΅Ρ€Ρ‘Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° поставляСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 8.0.x. Π§Ρ‚ΠΎ измСнилось Π² .NET 10 Package pruning Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ появился ΠΊΠ°ΠΊ opt-in Π² SDK 9.0.200. Π’ .NET 10 ΠΎΠ½ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для net10.0 ΠΈ Π²Ρ‹ΡˆΠ΅. ΠžΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ NuGetAuditMode ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ стал all, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ NuGet провСряСт ΠΈ Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ зависимости. По Ρ‚Π΅Π»Π΅ΠΌΠ΅Ρ‚Ρ€ΠΈΠΈ Microsoft, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ с Π½ΠΎΠ²Ρ‹ΠΌΠΈ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π°ΠΌΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π½Π° 70% мСньшС Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΎΠ± уязвимостях. Restore ускоряСтся Π΄ΠΎ 50% Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π·Π° счёт мСньшСго Π³Ρ€Π°Ρ„Π°. Π”Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹Π΅ настройки .NET 10:
<PropertyGroup>
  <NuGetAuditMode>all</NuGetAuditMode>
  <RestoreEnablePackagePruning>true</RestoreEnablePackagePruning>
</PropertyGroup>
Π“Ρ€Π°Ρ„ зависимостСй Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚ΠΎΡ‡Π½Π΅Π΅ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚. МСньшС Π»ΠΎΠΆΠ½Ρ‹Ρ… срабатываний, быстрСС restore, понятнСС Π°ΡƒΠ΄ΠΈΡ‚. Для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° .NET 10 всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ. ➑️ Π‘Π»ΠΎΠ³ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² πŸ“ Навигация: Вакансии β€’ Π—Π°Π΄Π°Ρ‡ΠΈ β€’ БобСсы 🐸 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡˆΠ°Ρ€ΠΏΠΈΡΡ‚Π° #sharp_view

πŸ§‘β€πŸ’» Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π² .NET Π·Π°ΠΌΠ΅Π΄Π»ΡΡŽΡ‚ Π±ΠΈΠ»Π΄ Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΊΠΎΠ΄Π° Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ компилятора. Они Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ сборкС ΠΈ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ клавиши Π² IDE. Если Π½Π΅ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Π½ΠΈΠΌΠΈ, Π±ΠΈΠ»Π΄ Π½Π° 10 сСкунд ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ Π² ΠΏΠΎΠ»Ρ‚ΠΎΡ€Ρ‹ ΠΌΠΈΠ½ΡƒΡ‚Ρ‹ Π±Π΅Π· Π²ΠΈΠ΄ΠΈΠΌΡ‹Ρ… ΠΏΡ€ΠΈΡ‡ΠΈΠ½. Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ этого Π½Π΅ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ. Π‘Π΄Π΅Π»Π°ΠΉΡ‚Π΅ сгСнСрированный ΠΊΠΎΠ΄ Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ сгСнСрированныС .g.cs Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° диск. Они ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² памяти компилятора. Когда Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ломаСтся, Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² Ρ„Π°ΠΉΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² Directory.Build.props Π² ΠΊΠΎΡ€Π½Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ:
<Project>
  <PropertyGroup>
    <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
    <CompilerGeneratedFilesOutputPath>
      $(BaseIntermediateOutputPath)generated
    </CompilerGeneratedFilesOutputPath>
  </PropertyGroup>
</Project>
Π’Π΅ΠΏΠ΅Ρ€ΡŒ всС сгСнСрированныС Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² ΠΏΠ°ΠΏΠΊΡƒ obj/generated. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎ Π½ΠΈΠΌ ΠΈ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΠΈ останова Π² ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ΅. Π­Ρ‚ΠΎ настройка Π½Π° ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΈ ΠΎΠ½Π° стоит Ρ‚ΠΎΠ³ΠΎ. ЗамСряйтС врСмя Ρ‡Π΅Ρ€Π΅Π· binary log ΠžΡ‰ΡƒΡ‰Π΅Π½ΠΈΠ΅ Β«Π±ΠΈΠ»Π΄ стал ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅Β» Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π°Ρ‘Ρ‚. НуТны ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ числа ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ. Π‘ΠΎΠ±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с Ρ„Π»Π°Π³ΠΎΠΌ:
dotnet build -bl
ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ msbuild.binlog Π² MSBuild Structured Log Viewer. НайдитС Π·Π°Π΄Π°Ρ‡Ρƒ CSC. Π’Π½ΡƒΡ‚Ρ€ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ список всСх Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² с Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ выполнСния Π² миллисСкундах. Π‘ΠΎΠ±ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π° Π½Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Π‘Ρ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° умноТаСтся Π½Π° количСство ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Π³ΠΎ ΠΏΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°ΡŽΡ‚. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ зависимости Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈΠ΅Π·ΠΆΠ°ΡŽΡ‚ вмСстС с NuGet-ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ. Π’Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ логирования ΠΈΠ»ΠΈ ΠΌΠ°ΠΏΠΏΠ΅Ρ€, Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π»Π΅ΠΆΠΈΡ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ запускаСтся Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅. Π’Ρ‹ Π΅Π³ΠΎ Π½Π΅ Π²Ρ‹Π±ΠΈΡ€Π°Π»ΠΈ, Π½ΠΎ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π’ Ρ‚ΠΎΠΌ ΠΆΠ΅ binary log Π·Π°Π΄Π°Ρ‡Π° CSC ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ всС Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ сборки Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². ΠŸΡ€ΠΎΠΉΠ΄ΠΈΡ‚Π΅ΡΡŒ ΠΏΠΎ списку. Если Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π΅Π·Π½Π°ΠΊΠΎΠΌΠΎΠ΅ имя, выяснитС, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΎΠ½ΠΎ ΠΏΡ€ΠΈΡˆΠ»ΠΎ. Команда dotnet nuget why ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ зависимостСй. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Если Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ свои Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ IIncrementalGenerator, Π° Π½Π΅ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ ISourceGenerator. Π˜Π½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠ΅ΡˆΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹. Если Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ измСнились, ΠΎΠ½ пропускаСт ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ. Но сам ΠΏΠΎ сСбС интСрфСйс Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚. Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ IIncrementalGenerator ΠΈ ΠΏΡ€ΠΈ этом пСрСсобираСт всё Π·Π°Π½ΠΎΠ²ΠΎ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ², Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, ΠΊΠ°ΠΊ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ. ΠšΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ. Пайплайн Π½ΡƒΠΆΠ½ΠΎ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹Π΅ Π²Ρ…ΠΎΠ΄Ρ‹ Π΄Π°Π²Π°Π»ΠΈ ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹Ρ…ΠΎΠ΄. ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°ΠΉΡ‚Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎ числам Если Π΄ΠΎΡ€ΠΎΠ³ΠΎΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΈΡˆΡ‘Π» ΠΈΠ· стороннСго ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΅Π³ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. Но ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, стоит Π»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ своСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ сборки. Иногда стоит. Иногда дСшСвлС ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΈΠ½Π°Ρ‡Π΅. Π“Π»Π°Π²Π½ΠΎΠ΅ Ρ‚ΡƒΡ‚ Π½Π΅ Π³Π°Π΄Π°Ρ‚ΡŒ, Π° ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² binary log. Π’Π°ΠΌ Π΅ΡΡ‚ΡŒ имя Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈ Π΅Π³ΠΎ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ Π² миллисСкундах. Π­Ρ‚ΠΎΠ³ΠΎ достаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ осознанноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. πŸ“ Навигация: Вакансии β€’ Π—Π°Π΄Π°Ρ‡ΠΈ β€’ БобСсы 🐸 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡˆΠ°Ρ€ΠΏΠΈΡΡ‚Π° #sharp_view

πŸ’‘ C# 16 пСрСосмысляСт unsafe: ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρ‹ вмСсто контСкста Π’ C# ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Ρ‹Π²Π°ΡŽΡ‚ модСль Ρ€Π°Π±ΠΎΡ‚Ρ‹ с unsafe. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово большС Π½Π΅
πŸ’‘ C# 16 пСрСосмысляСт unsafe: ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρ‹ вмСсто контСкста Π’ C# ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Ρ‹Π²Π°ΡŽΡ‚ модСль Ρ€Π°Π±ΠΎΡ‚Ρ‹ с unsafe. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово большС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ просто Β«Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈΒ». Оно станСт ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ. ΠŸΡ€Π΅Π²ΡŒΡŽ появится Π² .NET 11, ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½-Ρ€Π΅Π»ΠΈΠ· Π² .NET 12. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° БСйчас unsafe Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «здСсь ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈΒ». Он Π½Π΅ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π² Π½Π° Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ сторону. ΠœΠ΅Ρ‚ΠΎΠ΄ Π²Ρ€ΠΎΠ΄Π΅ Marshal.ReadByte ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ IntPtr, Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ, Π½ΠΎ вызываСтся ΠΈΠ· бСзопасного ΠΊΠΎΠ΄Π° Π±Π΅Π· ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. ΠšΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΈ Π½Π΅ провСряСт компилятор ΠΈ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ Ρ€Π΅Π²ΡŒΡŽΠ΅Ρ€ с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ взгляда. Π§Ρ‚ΠΎ мСняСтся unsafe Π² сигнатурС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚: Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ сторона обязана Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π·Π°Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ условия. КаТдая нСбСзопасная опСрация Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ‘Ρ€Π½ΡƒΡ‚Π° Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Π±Π»ΠΎΠΊ unsafe { }. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ unsafe-ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π±Π»ΠΎΠΊ /// <safety> с описаниСм ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π². Π’ΠΎΡ‚ Marshal.ReadByte Π² Π½ΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ:
/// <safety>
/// Π‘ΡƒΠΌΠΌΠ° ptr ΠΈ ofs Π΄ΠΎΠ»ΠΆΠ½Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π±Π°ΠΉΡ‚,
/// доступный Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ сторонС для чтСния.
/// </safety>
public static unsafe byte ReadByte(IntPtr ptr, int ofs)
{
    byte* addr = (byte*)ptr;
    unsafe
    {
        // SAFETY: полагаСмся Π½Π° ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ стороны.
        return addr[ofs];
    }
}
ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (byte*)ptr бСзопасно, это ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ числа. А Π²ΠΎΡ‚ addr[ofs] опасно, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. ИмСнно эта строка ΠΎΠ±Ρ‘Ρ€Π½ΡƒΡ‚Π° Π² unsafe { }. Π”Ρ€ΡƒΠ³ΠΈΠ΅ измСнСния unsafe Π½Π° Ρ‚ΠΈΠΏΠ΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ компиляции. ΠžΠ±Π»Π°ΡΡ‚ΡŒ дСйствия опускаСтся Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ свойств. unsafe Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ большС Π½Π΅ создаёт unsafe-контСкст автоматичСски. Π’ΠΈΠΏΡ‹ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π² сигнатурС большС Π½Π΅ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ unsafe, опасна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ опСрация разымСнования. НовоС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово safe ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ для extern-Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΉ, ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° нСльзя. Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ МодСль Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· Π½ΠΎΠ²ΠΎΠ΅ свойство ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ нСзависимо ΠΎΡ‚ <AllowUnsafeBlocks>. Для ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ планируСтся dotnet format fixer, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ мСханичСски ΠΎΠ±Π΅Ρ€Π½Ρ‘Ρ‚ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π² unsafe { } ΠΈ пСрСнСсёт ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ с Ρ‚ΠΈΠΏΠΎΠ² Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. ΠŸΠΈΡΠ°Ρ‚ΡŒ <safety>-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ придётся Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. ΠΠ°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ становятся ошибками компиляции, Π½Π΅ прСдупрСТдСниями. МодСль повторяСт ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Rust ΠΈ Swift, Π½ΠΎ с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ экосистСмы .NET. Для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ unsafe, ΠΊΠΎΠ΄ станСт ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Π΅Π΅ для Ρ€Π΅Π²ΡŒΡŽ. ➑️ Π‘Π»ΠΎΠ³ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² πŸ“ Навигация: Вакансии β€’ Π—Π°Π΄Π°Ρ‡ΠΈ β€’ БобСсы 🐸 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡˆΠ°Ρ€ΠΏΠΈΡΡ‚Π° #sharp_view

Π”ΠΎ 31 мая ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π±Ρ€Π°Ρ‚ΡŒ любой курс Proglib Academy со скидкой 40% Если Π΄Π°Π²Π½ΠΎ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΏΡ€ΠΎΠΊΠ°Ρ‡Π°Ρ‚ΡŒΡΡ Π² Python, ML, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Ρ… ΠΈΠ»ΠΈ
Π”ΠΎ 31 мая ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π±Ρ€Π°Ρ‚ΡŒ любой курс Proglib Academy со скидкой 40% Если Π΄Π°Π²Π½ΠΎ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΏΡ€ΠΎΠΊΠ°Ρ‡Π°Ρ‚ΡŒΡΡ Π² Python, ML, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Ρ… ΠΈΠ»ΠΈ AI-Π°Π³Π΅Π½Ρ‚Π°Ρ…, сСйчас самоС врСмя Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ сниТСнной Ρ†Π΅Π½Π΅. 🎁 Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° AI-Π°Π³Π΅Π½Ρ‚ΠΎΠ² β€” ΠΎΡ‚ 49.000 β‚½ (вмСсто 69.000 β‚½) ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ курс ΠΏΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ AI-Π°Π³Π΅Π½Ρ‚ΠΎΠ² для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Π΄Π°Ρ‡, Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ собствСнных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² 🎁 ΠšΡƒΡ€Ρ AgentOps β€” 129.000 β‚½ (вмСсто 149.000 β‚½) Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈ LLM-ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хотят Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ AI-Π»ΠΎΠ³ΠΈΠΊΡƒ Π² бэкСнд ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ сСрвиса. 🎁 ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ AI-ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ β€” 23.990 β‚½ (вмСсто 31.990 β‚½) ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Π±Π°Π·Π° ΠΏΠΎ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ для Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°Π½Π½Ρ‹Ρ…, ML ΠΈ дальнСйшСго развития Π² AI. 🎁 ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° для Data Science β€” ΠΎΡ‚ 29.990 β‚½ (вмСсто 39.990 β‚½) ΠšΡƒΡ€Ρ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°ΡŽΡ‚ Π½Π° собСсСдованиях Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π΄Π°Ρ‚Π°-сайСнтиста Π² Π±ΠΈΠ³Ρ‚Π΅Ρ…Π΅. 🎁 ML для старта Π² Data Science β€” 28.990 β‚½ (вмСсто 38.990 β‚½) Π Π°Π·Π±Π΅Ρ€Ρ‘Ρ‚Π΅ΡΡŒ Π² машинном ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠΈ: ΠΎΡ‚ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… понятий ΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π΄ΠΎ ансамблСй, бустинга ΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… систСм. 🎁 ΠžΡΠ½ΠΎΠ²Ρ‹ IT для нСпрограммистов β€” 16.990 β‚½ (вмСсто 28.990 β‚½) ΠšΡƒΡ€Ρ для IT-Ρ€Π΅ΠΊΡ€ΡƒΡ‚Π΅Ρ€ΠΎΠ², ΠΌΠ°Ρ€ΠΊΠ΅Ρ‚ΠΎΠ»ΠΎΠ³ΠΎΠ², ΠΏΡ€ΠΎΠ΄ΠΆΠ΅ΠΊΡ‚ΠΎΠ², ΠΏΡ€ΠΎΠ΄Π°ΠΊΡ‚ΠΎΠ² ΠΈ всСх, ΠΊΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с IT, Π½ΠΎ Π½Π΅ ΠΏΠΈΡˆΠ΅Ρ‚ ΠΊΠΎΠ΄. 🎁 АрхитСктуры ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования β€” 27.990 β‚½ (вмСсто 37.900 β‚½) ΠžΡΠ²ΠΎΠΈΡ‚Π΅ основныС ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ проСктирования ΠΈ ΠΏΡ€ΠΎΠΊΠ°Ρ‡Π°Π΅Ρ‚Π΅ Π½Π°Π²Ρ‹ΠΊΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. 🎁 БпСциалист ΠΏΠΎ ИИ β€” 89.000 β‚½ (вмСсто 113.900 β‚½) ΠšΡƒΡ€Ρ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΡŽ Π² сфСрС ИИ, ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΠΎΡ€Ρ‚Ρ„ΠΎΠ»ΠΈΠΎ ΠΈΠ· 5 ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ слоТных AI-Π°Π³Π΅Π½Ρ‚ΠΎΠ². 🎁 Алгоритмы ΠΈ структуры Π΄Π°Π½Π½Ρ‹Ρ… β€” 33.990 β‚½ (вмСсто 57.990 β‚½) ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅ΡΡŒ ΠΊ алгоритмичСским собСсСдованиям, Ρ€Π°Π·Π±Π΅Ρ€Ρ‘Ρ‚Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ эффСктивный ΠΊΠΎΠ΄. 🎁 ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° языкС Python β€” 27.990 β‚½ (вмСсто 47.390 β‚½) ΠžΡΠ²ΠΎΠΈΡ‚Π΅ Python Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅: Π±Π΅Π· сухой Ρ‚Π΅ΠΎΡ€ΠΈΠΈ, с пошаговой ΠΏΡ€ΠΎΠΊΠ°Ρ‡ΠΊΠΎΠΉ Π½Π°Π²Ρ‹ΠΊΠΎΠ² ΠΈ ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ Π² ΠΏΠΎΡ€Ρ‚Ρ„ΠΎΠ»ΠΈΠΎ. πŸ™Œ Π’Ρ‹Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ курс ΠΏΠΎ ссылкС, оставляйтС заявку, ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠΎΠ΄ ваши Ρ†Π΅Π»ΠΈ β€” https://clc.to/Jeob-A

✏️ Service Locator. ΠŸΠΎΡ‡Π΅ΠΌΡƒ это Π°Π½Ρ‚ΠΈΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½, Π° Π½Π΅ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° DI Service Locator β€” это Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ рССстр сСрвисов. Π›ΡŽΠ±ΠΎΠΉ класс Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½ΡƒΡŽ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ ServiceLocator.Get<IEmailService>(). Выглядит ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈ Π³ΠΈΠ±ΠΊΠΎ. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ β€” это Π»ΠΎΠ²ΡƒΡˆΠΊΠ°, которая услоТняСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΊΠΎΠ΄Π° с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ мСсяцСм. ΠœΠ°Ρ€ΠΊ Π‘ΠΈΠΌΠ°Π½Π½ Π½Π°Π·Π²Π°Π» этот ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Π°Π½Ρ‚ΠΈΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠΌ Π΅Ρ‰Ρ‘ Π² 2010 Π³ΠΎΠ΄Ρƒ. Π‘ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ стали Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сильнСС. Π’ Ρ‡Ρ‘ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Когда класс ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ зависимости Ρ‡Π΅Ρ€Π΅Π· конструктор, Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ всё, Ρ‡Ρ‚ΠΎ Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ, прямо Π² сигнатурС.
public class OrderService
{
    private readonly IEmailService _email;
    private readonly IOrderRepository _repo;

    public OrderService(IEmailService email, IOrderRepository repo)
    {
        _email = email;
        _repo = repo;
    }
}
Π”Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° β€” Π΄Π²Π΅ зависимости. Всё Π½Π° Π²ΠΈΠ΄Ρƒ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ класс Ρ‡Π΅Ρ€Π΅Π· Service Locator.
public class OrderService
{
    public void PlaceOrder(Order order)
    {
        var repo = ServiceLocator.Get<IOrderRepository>();
        repo.Save(order);

        var email = ServiceLocator.Get<IEmailService>();
        email.SendConfirmation(order);
    }
}
Π‘Π½Π°Ρ€ΡƒΠΆΠΈ OrderService выглядит Ρ‚Π°ΠΊ, Π±ΡƒΠ΄Ρ‚ΠΎ Π΅ΠΌΡƒ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ. Зависимости спрятаны Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ класс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚, Π½ΡƒΠΆΠ½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ вСсь Π΅Π³ΠΎ ΠΊΠΎΠ΄. На дСсяти классах это Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ. На сотнС β€” это архСология. ВСсты ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π² боль Для ΡŽΠ½ΠΈΡ‚-тСста с constructor injection Π²Ρ‹ просто ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚Π΅ ΠΌΠΎΠΊΠΈ Π² конструктор.
var service = new OrderService(mockEmail, mockRepo);
Π‘ Service Locator Π½ΡƒΠΆΠ½ΠΎ сначала Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ рССстр, Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½Ρ‘ΠΌ всС Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΌΠΎΠΊΠΈ, ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ тСстами состояниС очищаСтся. ВСсты становятся Ρ…Ρ€ΡƒΠΏΠΊΠΈΠΌΠΈ ΠΈ зависимыми Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°. IServiceProvider Π² бизнСс-Π»ΠΎΠ³ΠΈΠΊΠ΅ β€” Ρ‚ΠΎΡ‚ ΠΆΠ΅ Service Locator Π’ .NET Π΅ΡΡ‚ΡŒ встроСнный DI-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΈ соблазн ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ IServiceProvider Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π²Π΅Π»ΠΈΠΊ. Но Ссли Π²Ρ‹ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΈΡ‚Π΅ IServiceProvider Π² бизнСс-класс ΠΈ достаётС ΠΈΠ· Π½Π΅Π³ΠΎ сСрвисы Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, это Ρ€ΠΎΠ²Π½ΠΎ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Service Locator, просто Π² ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ΅ ΠΎΡ‚ Microsoft.
// Π’Π°ΠΊ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ стоит
public class ReportGenerator
{
    private readonly IServiceProvider _provider;

    public ReportGenerator(IServiceProvider provider)
    {
        _provider = provider;
    }

    public void Generate()
    {
        var formatter = _provider.GetRequiredService<IReportFormatter>();
        // ...
    }
}
Π—Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ IReportFormatter снова спрятана. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Β«ΠΌΠ½Π΅ Π½ΡƒΠΆΠ΅Π½ вСсь ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Β», Ρ‡Ρ‚ΠΎ бСсполСзно. ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.
public class ReportGenerator
{
    private readonly IReportFormatter _formatter;

    public ReportGenerator(IReportFormatter formatter)
    {
        _formatter = formatter;
    }

    public void Generate()
    {
        // _formatter ΡƒΠΆΠ΅ здСсь
    }
}
Когда IServiceProvider допустим Π•ΡΡ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ список ситуаций, Π³Π΄Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ IServiceProvider ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΎ. Π€Π°Π±Ρ€ΠΈΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с Ρ€Π°Π·Π½Ρ‹ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΆΠΈΠ·Π½ΠΈ. ΠŸΠ»Π°Π³ΠΈΠ½Π½Ρ‹Π΅ систСмы, Π³Π΄Π΅ Π½Π°Π±ΠΎΡ€ сСрвисов нСизвСстСн Π½Π° этапС компиляции. Π˜Π½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°, middleware, Π°ΠΊΡ‚ΠΈΠ²Π°Ρ‚ΠΎΡ€Ρ‹. Π’ΠΎ всСх этих случаях Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ ΠΎΠ± инфраструктурС, Π° Π½Π΅ ΠΎ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠ΅. Если ваш класс Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π΄ΠΎΠΌΠ΅Π½Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΈ ΠΏΡ€ΠΈ этом тянСт IServiceProvider, стоит вынСсти ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π² конструктор. Код станСт ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Π΅Π΅, тСсты ΠΏΡ€ΠΎΡ‰Π΅, Π° Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ пСрСстанСт Π±Ρ‹Ρ‚ΡŒ раскопками. πŸ“ Навигация: Вакансии β€’ Π—Π°Π΄Π°Ρ‡ΠΈ β€’ БобСсы 🐸 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡˆΠ°Ρ€ΠΏΠΈΡΡ‚Π° #il_Π»ΡŽΠΌΠΈΠ½Π°Ρ‚ΠΎΡ€

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡˆΠ°Ρ€ΠΏΠΈΡΡ‚Π° | C#, F#, .NET, ASP.NET - Statistics & analytics of Telegram channel @csharpproglib