Пока мы думали как бы вам рассказать про наш Х, обнаружили любопытную вещь: если пользователь не залогинен в Х, то лента нашего паблика пустая — ни одного поста.
Теперь разбираемся, это недоработка или новая фича, мотивирующая авторизацию 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁49❤3
⌛️ Таймаут в одну строку
Когда нужно ограничить время ожидания ответа от HTTP-запроса можно использовать метод WaitAsync для установки таймаута без необходимости создавать отдельные токены отмены.
Пример:
Если время ожидания превышает заданный лимит, метод выбросит исключение. Поэтому важно правильно обрабатывать эту ситуацию, решая, нужно ли повторить запрос или применить стратегию отката.
🐸 Библиотека шарписта
#sharp_view
Когда нужно ограничить время ожидания ответа от HTTP-запроса можно использовать метод WaitAsync для установки таймаута без необходимости создавать отдельные токены отмены.
Пример:
var response = await http.GetAsync(url).WaitAsync(TimeSpan.FromSeconds(5));
Если время ожидания превышает заданный лимит, метод выбросит исключение. Поэтому важно правильно обрабатывать эту ситуацию, решая, нужно ли повторить запрос или применить стратегию отката.
#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤3🤔3🙏1
Вы когда-нибудь пытались использовать метод
Console.ReadLine()
в онлайн-компиляторе C#? Да, звучит как извращение, но давайте углубимся в проблему.Метод
Console.ReadLine()
позволяет вашему приложению ожидать ввода пользователя в консоли — это основной инструмент для взаимодействия с пользователем в командной строке. Но когда вы пытаетесь использовать этот метод в браузерной среде, появляется проблема: браузеры просто не поддерживают работу с консолью напрямую. Атрибут
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
прямо в документации говорит: «Не поддерживайте это в браузере!»Браузер — это отличное место для быстрых экспериментов, но когда речь идет о полноценной разработке, лучше использовать локальные инструменты: Visual Studio или Visual Studio Code.
#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
😢18❤6🥱2😁1
🚀 JetBrains .NET Days 2025
JetBrains снова собрала лучших инженеров и евангелистов .NET на своей онлайн-конференции .NET Days. Два дня плотных докладов — от чистой архитектуры и распределённых систем до GenAI и F#.
1️⃣ Самое интересное за первый день:
• Чистая архитектура с ASP.NET Core
Как выстроить проект так, чтобы код был читаемым, тестируемым и легко рефакторился. Разделение слоёв и зависимостей без боли.
• Nullability в C#: включаем защиту от NullReferenceException
Аннотации и статический анализ помогают избавиться от NullReferenceException и внедрить null safety даже в старый код.
• Как выбрать систему обмена сообщениями
Сравнение AWS SQS, RabbitMQ и Azure Service Bus — плюсы, минусы и типичные ошибки при выборе очередей сообщений.
• TDD на фронтенде с Blazor
Как применять TDD на фронтенде с Blazor и bUnit. Быстрая обратная связь и уверенность в каждом изменении.
2️⃣ Темы за второй день:
• Версионирование событийных систем
Безопасные приёмы эволюции событий: версионирование, апкастинг и совместимость без поломок у потребителей.
• Генеративный ИИ и .NET Aspire в действии
Интеграция LLM, управление контекстом и масштабируемая оркестрация с помощью Semantic Kernel и Aspire.
• Функциональное программирование в F#: мода или польза
Реальные преимущества функционального подхода — лаконичные пайплайны, паттерн-матчинг и безопасные абстракции.
• Как нашли утечку 2 ГБ в день за 5 минут
История о том, как обнаружить гигабайтные утечки памяти с помощью dotMemory в продакшене за считанные минуты.
Два дня — и десятки инсайтов о будущем .NET: от облаков и AI до функционального подхода и устойчивой архитектуры. Записи доступны на YouTube.
➡️ Первый день
➡️ Второй день
🐸 Библиотека шарписта
#il_люминатор
JetBrains снова собрала лучших инженеров и евангелистов .NET на своей онлайн-конференции .NET Days. Два дня плотных докладов — от чистой архитектуры и распределённых систем до GenAI и F#.
• Чистая архитектура с ASP.NET Core
Как выстроить проект так, чтобы код был читаемым, тестируемым и легко рефакторился. Разделение слоёв и зависимостей без боли.
• Nullability в C#: включаем защиту от NullReferenceException
Аннотации и статический анализ помогают избавиться от NullReferenceException и внедрить null safety даже в старый код.
• Как выбрать систему обмена сообщениями
Сравнение AWS SQS, RabbitMQ и Azure Service Bus — плюсы, минусы и типичные ошибки при выборе очередей сообщений.
• TDD на фронтенде с Blazor
Как применять TDD на фронтенде с Blazor и bUnit. Быстрая обратная связь и уверенность в каждом изменении.
• Версионирование событийных систем
Безопасные приёмы эволюции событий: версионирование, апкастинг и совместимость без поломок у потребителей.
• Генеративный ИИ и .NET Aspire в действии
Интеграция LLM, управление контекстом и масштабируемая оркестрация с помощью Semantic Kernel и Aspire.
• Функциональное программирование в F#: мода или польза
Реальные преимущества функционального подхода — лаконичные пайплайны, паттерн-матчинг и безопасные абстракции.
• Как нашли утечку 2 ГБ в день за 5 минут
История о том, как обнаружить гигабайтные утечки памяти с помощью dotMemory в продакшене за считанные минуты.
Два дня — и десятки инсайтов о будущем .NET: от облаков и AI до функционального подхода и устойчивой архитектуры. Записи доступны на YouTube.
#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥4👍3
Вам дан отсортированный по возрастанию массив целых чисел. Нужно создать новый массив, в котором содержатся квадраты этих чисел — и он тоже должен быть отсортирован по возрастанию.
Поскольку исходный массив отсортирован, отрицательные числа после возведения в квадрат могут стать больше положительных, поэтому нужно рассматривать оба края массива.
1. Обрабатываем два края массива (left и right), сравниваем их квадраты.
2. Наибольший квадрат записываем в конец результирующего массива.
3. Сдвигаем соответствующий указатель — либо left, либо right.
4. В конце получаем отсортированный массив квадратов.
Решение с двумя указателями:
public int[] SortedSquares(int[] nums) {
int n = nums.Length;
int[] result = new int[n];
int left = 0, right = n - 1, pos = n - 1;
while (left <= right) {
int leftSq = nums[left] * nums[left];
int rightSq = nums[right] * nums[right];
if (leftSq > rightSq) {
result[pos] = leftSq;
left++;
} else {
result[pos] = rightSq;
right--;
}
pos--;
}
return result;
}
#dotnet_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7❤🔥6🥱2
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰15😁8👍2
🧠 Должен ли разработчик запоминать код
На Reddit вспыхнула классическая тема — запоминают ли профессиональные разработчики свой код.
Комментаторы разбились на два лагеря:
и
💬 Нужно ли запоминать код, или важно просто понимать, как он работает?
🐸 Библиотека шарписта
#entry_point
На Reddit вспыхнула классическая тема — запоминают ли профессиональные разработчики свой код.
Комментаторы разбились на два лагеря:
Если ты не помнишь, как работает твоя функция, ты просто копипастер!
и
Профессионал не держит в голове код, он держит в голове логику и подход. Код — деталь реализации
#entry_point
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍1🔥1
📰 Дайджест недели
Что произошло в мире за последние семь дней.
— Разработчик как AI-код-ревьюер
Введение AI в .NET разработку повышает темпы, но успешная интеграция зависит от тщательной проверки: ревьюеру важно контролировать архитектуру, тесты и качество, иначе риски для поддержки и надёжности возрастают.
— .NET 10 готовит революцию в управлении памятью
Разработчики включат по умолчанию функцию DATAS, которая адаптирует размер кучи к текущим потребностям приложения.
— C# потерял две позиции в рейтинге PYPL
— Как вайб-кодинг меняет рынок IT-образования
— JetBrains .NET Days 2025
🐸 Библиотека шарписта
#async_news
Что произошло в мире за последние семь дней.
— Разработчик как AI-код-ревьюер
Введение AI в .NET разработку повышает темпы, но успешная интеграция зависит от тщательной проверки: ревьюеру важно контролировать архитектуру, тесты и качество, иначе риски для поддержки и надёжности возрастают.
— .NET 10 готовит революцию в управлении памятью
Разработчики включат по умолчанию функцию DATAS, которая адаптирует размер кучи к текущим потребностям приложения.
— C# потерял две позиции в рейтинге PYPL
— Как вайб-кодинг меняет рынок IT-образования
— JetBrains .NET Days 2025
#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Anonymous Poll
31%
Мемы
41%
Задачи с собесов
41%
Небольшие посты с кодом
23%
Новости
31%
Объемные посты с погружением
Please open Telegram to view this post
VIEW IN TELEGRAM
😁76❤1
This media is not supported in your browser
VIEW IN TELEGRAM
В proglib.academy — Глобальная распродажа знаний ‼️
💥 Весь октябрь –40% на те курсы, которые выбирают чаще всего.
👉 Успей забрать свой курс на proglib.academy
💥 Весь октябрь –40% на те курсы, которые выбирают чаще всего.
Курсы с практикой, без воды и пафоса.
Просто берёшь и делаешь апгрейд.
👉 Успей забрать свой курс на proglib.academy
🤔3❤1🔥1🌚1
Задача: дана строка
s
и строка p
. Необходимо найти все начальные индексы подстрок в s
, которые являются анаграммами строки p
.Анаграмма — это слово или фраза, образованная перестановкой букв другого слова, используя все исходные буквы ровно один раз.
Пример:
Input: s = "cbaebabacd", p = "abc"
Output: [0, 6]
Объяснение:
Подстрока с индекса 0 - "cba", анаграмма "abc".
Подстрока с индекса 6 - "bac", анаграмма "abc".
Оптимальное решение использует технику скользящего окна с подсчетом частот символов.
1. Подсчитываем количество и частоту всех символов в строке p
2. Создаем скользящее окно размером со строку
p
в строке s
3. Для каждой позиции окна сравниваем частоты символов с эталоном
4. При совпадении добавляем индекс в результат
Код:
public class Solution
{
public IList<int> FindAnagrams(string s, string p)
{
List<int> result = new List<int>();
if (s.Length < p.Length)
return result;
// Массивы для подсчета частот символов (26 букв английского алфавита)
int[] pCount = new int[26];
int[] windowCount = new int[26];
// Подсчитываем частоты в строке p и первом окне
for (int i = 0; i < p.Length; i++)
{
pCount[p[i] - 'a']++;
windowCount[s[i] - 'a']++;
}
// Проверяем первое окно
if (AreEqual(pCount, windowCount))
result.Add(0);
// Скользим окном по строке s
for (int i = p.Length; i < s.Length; i++)
{
// Добавляем новый символ справа
windowCount[s[i] - 'a']++;
// Удаляем старый символ слева
windowCount[s[i - p.Length] - 'a']--;
// Проверяем текущее окно
if (AreEqual(pCount, windowCount))
result.Add(i - p.Length + 1);
}
return result;
}
// Вспомогательный метод для сравнения массивов частот
private bool AreEqual(int[] arr1, int[] arr2)
{
for (int i = 0; i < 26; i++)
{
if (arr1[i] != arr2[i])
return false;
}
return true;
}
}
#dotnet_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩3🔥2💯2👾2❤1
Практикум, который снимет боль про микросервисы, о которой все молчат.
Sync vs Async: что убьёт ваш проект, а что спасёт?
15 октября, 19:00 — практический вебинар для разработчиков, архитекторов и девопсеров от OTUS. Работаем вместе с Олегом Голенищевым, Senior .NET-разработчиком Directum, преподавателем Microsoft.
Приходи, если хочешь:
✍️Понимать, где Sync — мастхэв, а где Async — единственный шанс выжить
✍️Получить FANG-уровня чек-лист по интеграции (и бонус — шаблоны конфигов Spring Boot для Kafka и RabbitMQ)
✍️Забрать 7% скидку на любой курс OTUS (именно так, просто за регистрацию)
✍️Не попасть в “клуб тех, кто строил микросервисы по учебнику, а теперь переписывает всё с нуля”
Запишись, чтобы не чинить то, что можно не ломать.
Запись, подарки и скидка — только для своих. Лови шанс — кликай на регистрацию: https://tglink.io/a0d055ccd13e
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: 2W5zFJ4TwVr
Sync vs Async: что убьёт ваш проект, а что спасёт?
15 октября, 19:00 — практический вебинар для разработчиков, архитекторов и девопсеров от OTUS. Работаем вместе с Олегом Голенищевым, Senior .NET-разработчиком Directum, преподавателем Microsoft.
Приходи, если хочешь:
✍️Понимать, где Sync — мастхэв, а где Async — единственный шанс выжить
✍️Получить FANG-уровня чек-лист по интеграции (и бонус — шаблоны конфигов Spring Boot для Kafka и RabbitMQ)
✍️Забрать 7% скидку на любой курс OTUS (именно так, просто за регистрацию)
✍️Не попасть в “клуб тех, кто строил микросервисы по учебнику, а теперь переписывает всё с нуля”
Запишись, чтобы не чинить то, что можно не ломать.
Запись, подарки и скидка — только для своих. Лови шанс — кликай на регистрацию: https://tglink.io/a0d055ccd13e
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: 2W5zFJ4TwVr
В C# каждое обращение к элементу массива проверяется на выход за границы. Это безопасно, но медленно. Разработчики часто решают проблему через unsafe-код с указателями — быстро, но опасно: один неверный индекс, и приложение крашится или получает дыру в безопасности.
Есть третий путь —
Span<T>
Span — это структура, которая хранит указатель на данные и их длину. Фишка в том, что это ref struct — она живёт только в стеке и не может попасть в кучу. Благодаря этому компилятор гарантирует: данные переживут span, а значит проверки границ можно убрать.
Например, в быстрой сортровке вместо передачи массива с индексами low/high передаёте span. Код короче, переполнение невозможно, а рекурсивные вызовы работают через срезы:
// Было: опасно, (low + high) может переполниться
void Quicksort(int[] array, int low, int high) {
int mid = (low + high) / 2; // 💥 overflow!
// ...
Quicksort(array, low, pivot - 1);
Quicksort(array, pivot + 1, high);
}
// Стало: безопасно и выразительно
void Quicksort(Span<int> span) {
if (span.Length <= 1) return;
int pivot = Partition(span);
Quicksort(span[..pivot]); // левая часть
Quicksort(span[(pivot + 1)..]); // правая часть
}
Раньше для передачи части массива в функцию приходилось либо копировать данные, либо таскать массив + offset + length. Span решает это элегантно: создаёте срез array[10..20], передаёте дальше — никакого копирования, полная безопасность типов.
#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15⚡1❤1😁1
🪚 Швейцарский нож для коллекций коллекций
Коллекция коллекций — частая головная боль. Пришли батчи из очереди, загрузили страницы из API, получили результаты от нескольких потоков.
Одна строка вместо циклов и временных списков:
Когда использовать
• Батчи сообщений из Kafka/RabbitMQ → один список для обработки
• Постраничные данные из API → единая коллекция
• Результаты параллельных задач → склеить всё вместе
SelectMany сохраняет порядок. Если у вас [1,2], [3,4], [5,6] — получите [1,2,3,4,5,6]. Критично для событий, логов, приоритетных очередей.
🐸 Библиотека шарписта
#sharp_view
Коллекция коллекций — частая головная боль. Пришли батчи из очереди, загрузили страницы из API, получили результаты от нескольких потоков.
Одна строка вместо циклов и временных списков:
var all = batches.SelectMany(b => b).ToList();
Когда использовать
• Батчи сообщений из Kafka/RabbitMQ → один список для обработки
• Постраничные данные из API → единая коллекция
• Результаты параллельных задач → склеить всё вместе
SelectMany сохраняет порядок. Если у вас [1,2], [3,4], [5,6] — получите [1,2,3,4,5,6]. Критично для событий, логов, приоритетных очередей.
#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤2🥱2
Сегодня Microsoft выпустила последнее обновление для Windows 10. Дальше — тишина: новых патчей безопасности не будет. Через пару недель система станет мишенью для вирусов и хакерских атак.
Есть несколько способов продлить жизнь десятке — от года до нескольких лет.
• Официальная программа ESU — до октября 2026
Microsoft запустила программу расширенных обновлений. Бесплатно, но только на год. Чтобы подключиться:
1. Войдите в учётную запись Microsoft
2. Смените регион на США (для пользователей из России и Беларуси)
3. Проверьте статус через команду в PowerShell
4. Зарегистрируйтесь через Центр обновлений
После активации система получит доступ к патчам безопасности ещё на год.
• LTSC-версия — до января 2027
Корпоративная сборка Windows 10 LTSC (21H2) не получает новых функций, но апдейты безопасности идут до начала 2027 года. Подходит тем, кому нужна стабильность без лишних обновлений.
• TSforge — до 2028 года
Скрипт через PowerShell, который продлевает поддержку ещё на три года. Нужно сменить регион на страну ЕС, запустить команду и активировать ESU через меню. Проверить результат можно через команду в системе.
• 0patch Agent — постоянная защита
Программа, которая ставит микропатчи прямо в код системы. Работает даже после окончания всех официальных обновлений и закрывает уязвимости в реальном времени.
#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3
🤓 Пока Python стал π-thon, ты можешь стать Data Scientist'ом
В Proglib.academy стартует экспресс-курс «Математика для Data Science»: 10 живых вебинаров, практика на Python и спикеры из ВШЭ, Яндекс Практикума и Wildberries, которые всё разложат по полочкам.
В программе:
🔹 матан, линал, теория вероятностей;
🔹 3 практических проекта + викторина с розыгрышем TG Premium;
🔹 поддержка преподавателей и чат с единомышленниками;
🎁 Оплати курс до 19 октября — получи курс по базовой математике в подарок.
🗓️ Старт — 6 ноября
👉 Записаться на курс
В Proglib.academy стартует экспресс-курс «Математика для Data Science»: 10 живых вебинаров, практика на Python и спикеры из ВШЭ, Яндекс Практикума и Wildberries, которые всё разложат по полочкам.
В программе:
🔹 матан, линал, теория вероятностей;
🔹 3 практических проекта + викторина с розыгрышем TG Premium;
🔹 поддержка преподавателей и чат с единомышленниками;
🎁 Оплати курс до 19 октября — получи курс по базовой математике в подарок.
🗓️ Старт — 6 ноября
👉 Записаться на курс
😁2❤1
🔍 50 фраз, из-за которых ваше резюме C#-разработчика летит в корзину
На первый взгляд может показаться, что фраза «пишу чистый код на C#» звучит убедительно и профессионально — но на практике рекрутеры и ATS-системы давно привыкли к таким штампам и игнорируют их как пустые слова.
Помните: каждая строчка в резюме должна отвечать на вопрос «и что?». Если после вашей фразы можно задать этот вопрос — значит, она недостаточно конкретна.
➡️ В статье про все клише, которые стоит убрать из резюме
🐸 Библиотека шарписта
На первый взгляд может показаться, что фраза «пишу чистый код на C#» звучит убедительно и профессионально — но на практике рекрутеры и ATS-системы давно привыкли к таким штампам и игнорируют их как пустые слова.
Помните: каждая строчка в резюме должна отвечать на вопрос «и что?». Если после вашей фразы можно задать этот вопрос — значит, она недостаточно конкретна.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱3👍2