А вы используете
У меня сложилось впечатление, будто после релиза C# 8 про эту штуку все забыли, поэтому решил сегодня про неё вспомнить)
Этот тип данных решал задачу потребления и создания асинхронных потоков данных.
То есть, таких потоков, в которых данные получают или генерируют асинхронно.
Напомню, что если у нас есть некоторый метод:
То в таком случае, можно перебрать возвращаемое значение следующим образом:
Но что в таком случае будет наполнять тело метода
Обычно, асинхронные потоки удобны в том случае, когда данные представлены в виде набора батчей, но нам необходимо эмулировать целостность потока.
То есть, всё сразу предъявить мы не можем, но способны заявить об этой возможности.
Например, есть многостраничный список с фиксированным количеством элементов на одной странице.
Тогда, внутри метода
В вашей практике встречается потребность в
IAsyncEnumerable?У меня сложилось впечатление, будто после релиза C# 8 про эту штуку все забыли, поэтому решил сегодня про неё вспомнить)
Этот тип данных решал задачу потребления и создания асинхронных потоков данных.
То есть, таких потоков, в которых данные получают или генерируют асинхронно.
Напомню, что если у нас есть некоторый метод:
static async IAsyncEnumerable<Data> GetData()
{
// ...
}
То в таком случае, можно перебрать возвращаемое значение следующим образом:
await foreach (var item in GetData())
{
// ...
}
Но что в таком случае будет наполнять тело метода
GetData?Обычно, асинхронные потоки удобны в том случае, когда данные представлены в виде набора батчей, но нам необходимо эмулировать целостность потока.
То есть, всё сразу предъявить мы не можем, но способны заявить об этой возможности.
Например, есть многостраничный список с фиксированным количеством элементов на одной странице.
Тогда, внутри метода
GetData будет скачиваться одна страница и разворачиваться в плоский поток до тех пор, пока есть следующая страница:static async IAsyncEnumerable<Data> GetData()
{
var page = 1;
while (page <= 10)
{
var items = await Fetch(page);
foreach (var item in items)
yield return item;
page++;
}
}
В вашей практике встречается потребность в
IAsyncEnumerable?👍25🔥6🤯5💯1
Dictionary vs LookupВ коммерческой практике часто встречается задача преобразовать некий список в словарь по определённому ключу, чтобы получать элементы коллекции за константное время O(1).
Допустим, у нас есть некоторые сообщения, и требуется возможность выбирать нужное сообщение по отправителю:
record Message(string Sender, string Content);
List<Message> messages = [
new Message(Sender: "Alex", Content: "abc"),
new Message(Sender: "Bob", Content: "123"),
new Message(Sender: "Jim", Content: "=-+")
];
С этим конечно справится метод LINQ
ToDictionary:var messagesBySender = messages
.ToDictionary(x => x.Sender, x => x);
Однако, если в коллекции появится несколько сообщений с одним отправителем:
List<Message> messages = [
new Message(Sender: "Alex", Content: "abc"),
// ...
new Message(Sender: "Alex", Content: "xyz")
];
То мы получим необработанное исключение при выполнении программы:
System.ArgumentException: An item with the same key has already been added. Key: Alex
Как этого избежать? Использовать метод
ToLookup, который даже не потребует селектора значения:var messagesBySender = messages
.ToLookup(x => x.Sender);
В чём вообще разница между этими структурами данных?
Lookup
IEnumerable<T>, поскольку одному ключу соответствует несколько значенийDictionary
KeyNotFoundExceptionPlease open Telegram to view this post
VIEW IN TELEGRAM
👍42🔥13❤🔥2❤2
Под шум последних событий случился .NET 9 Preview 1 🤷♀️
Мелкомягкие уже начали разрабатывать новый STS релиз.
Обещали в нём сконцентрироваться на развитии AI и облачных инструментов.
В их числе, например, тот самый Aspire.
Кстати, кто-нибудь разобрался в том, что это за фрукт?
Из интересного для меня завезли пару классных LINQ методов:
✅
✅
Ну и ещё в очередь с приоритетами добавили удаление.
Остальное можно прочитать по ссылке в MSDN
Мелкомягкие уже начали разрабатывать новый STS релиз.
Обещали в нём сконцентрироваться на развитии AI и облачных инструментов.
В их числе, например, тот самый Aspire.
Кстати, кто-нибудь разобрался в том, что это за фрукт?
Из интересного для меня завезли пару классных LINQ методов:
CountBy - наконец в .NET завезли что-то похожее на Counter из PythonAggregateBy - с выборками из коллекций можно будет работать как с агрегатами SQL таблицНу и ещё в очередь с приоритетами добавили удаление.
Остальное можно прочитать по ссылке в MSDN
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14😁4🐳3❤1
Пару недель назад закончил писать новую статью на Хабр 📝
Иногда руки доходят и до пожеланий подписчиков😇
Во-первых, хочу поблагодарить свою аудиторию за инициативу и предложение тем!
Благодаря вам в том числе, у меня отсутствует творческий застой)
Во-вторых, увлёкся так сильно, что получилась моя самая длинная статья - по метрикам Хабра аж 18 минут чтения😱
Публикация запланирована на середину марта, даже не спрашивайте почему.
Интересно, сколько бы денег я заработал, опубликовав этот гайд на бусти и прогревая вас? 🧐
Иногда руки доходят и до пожеланий подписчиков
Во-первых, хочу поблагодарить свою аудиторию за инициативу и предложение тем!
Благодаря вам в том числе, у меня отсутствует творческий застой)
Во-вторых, увлёкся так сильно, что получилась моя самая длинная статья - по метрикам Хабра аж 18 минут чтения
Публикация запланирована на середину марта, даже не спрашивайте почему.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25👍10❤4🥱4🤩2
Статические анонимные функции
Оказывается, в C# 9 лямбды получили серьёзное обновление!
Штука настолько малоизвестная, что меня даже ни разу не спрашивали про неё на собесах!
Допустим, у вас есть следующий код с замыканием:
Захват переменной
С помощью ключевого слова
Тогда, обновлённый код не скомпилируется:
Однако, если очень нужно иметь возможность использовать
Оказывается, в C# 9 лямбды получили серьёзное обновление!
Штука настолько малоизвестная, что меня даже ни разу не спрашивали про неё на собесах!
Допустим, у вас есть следующий код с замыканием:
int y = 1;
Func<int, int> lambda = x => x + y;
Захват переменной
y и всего внешнего окружения вызовет ненужные аллокации.С помощью ключевого слова
static можно запретить подобные ситуации.Тогда, обновлённый код не скомпилируется:
int y = 1;
Func<int, int> lambda = static x => x + y;
Однако, если очень нужно иметь возможность использовать
y, но при этом сохранять эффективность кода, то переменную просто надо сделать константой:const int y = 1;
Func<int, int> lambda = static x => x + y;
👍19🤔9🔥4🐳2❤1
StepOne | Степан Минин
Статические анонимные функции Оказывается, в C# 9 лямбды получили серьёзное обновление! Штука настолько малоизвестная, что меня даже ни разу не спрашивали про неё на собесах! Допустим, у вас есть следующий код с замыканием: int y = 1; Func<int, int> lambda…
Кирилл сделал хорошее дополнение к последнему посту на своём канале @csharp_gepard
Бенчмарк показал, что производительность не меняется при добавлении
В целом ожидаемо и вполне логично, так как это compile guard
Бенчмарк показал, что производительность не меняется при добавлении
static к делегату.В целом ожидаемо и вполне логично, так как это compile guard
Telegram
C# Heppard
Static в анонимных функциях #отдых #бенч
Представляется, что ключевое слово static в анонимных функциях - декларация о намерениях, не более. То есть мы как бы говорим, что по нашему мнению в данном месте точно не надо захватывать контекст и создавать объект…
Представляется, что ключевое слово static в анонимных функциях - декларация о намерениях, не более. То есть мы как бы говорим, что по нашему мнению в данном месте точно не надо захватывать контекст и создавать объект…
👍11❤2💯1
StepOne | Степан Минин
Как же летит время, январь почти всё 🤯 Надеюсь вы хорошо провели праздники, да и для канала месяц в целом прошёл неплохо ⚡️ Начал год со статьи про полиморфизм в DI на Хабре ⚡️ Сравниваем производительность разных способов приведения типов в ковариантном…
Уже завтра закончится зима, потому что сегодня последний день февраля 🥳
Вот какие материалы больше всего согревали этот холодный месяц:
✅ Обзор новых выражений коллекций
✅ Готовые шаблоны для общения с HR после оффера
✅ Вспомнили про асинхронные потоки
Вот какие материалы больше всего согревали этот холодный месяц:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7❤🔥1👍1🔥1
Как программисту законно не пойти на срочную службу в армию? 🧐
С 1 января 2024 года призывной возраст составляет 18 - 30 лет согласно Федеральному закону от 4 августа 2023 г. № 439-ФЗ "О внесении изменений в отдельные законодательные акты Российской Федерации".
Поэтому, ответ на вопрос в заголовке поста актуален как никогда для тех, кто проживает на территории РФ.
Прямо сейчас могу предложить три легальных варианта:
1️⃣ Учиться до победного конца и защитить кандидатскую диссертацию. Согласно пункту 2 статьи 23 ФЗ "О воинской обязанности и военной службе" граждане, имеющие предусмотренную государственной системой научной аттестации ученую степень, получают бессрочное право на освобождение от призыва на военную службу.
2️⃣ Работать до 30 лет в аккредитованных IT компаниях. С условиями получения отсрочки и списком компаний можно ознакомиться по ссылке - https://www.gosuslugi.ru/armydelay
3️⃣ Оказаться признанным не годным к военной службе по состоянию здоровья. Для того, чтобы узнать какие проблемы организма этому способствуют, можно ознакомиться с расписанием болезней (смотреть I графу), например, в системе Консультант Плюс - https://www.consultant.ru/document/cons_doc_LAW_149096/7cd8dde08fc9aff1bf6d22025061d18f55e576e5/
С 1 января 2024 года призывной возраст составляет 18 - 30 лет согласно Федеральному закону от 4 августа 2023 г. № 439-ФЗ "О внесении изменений в отдельные законодательные акты Российской Федерации".
Поэтому, ответ на вопрос в заголовке поста актуален как никогда для тех, кто проживает на территории РФ.
Прямо сейчас могу предложить три легальных варианта:
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤6🤣5👍3🤯3🤬1🥱1🍌1
SSRS - зло?
Дорогие разработчики, рекомендую вам не соглашаться на любую разработку, связанную с отчётами.
Особенно, отчётами SSRS.
Разбираться, тестировать, отлаживать, ловить ошибки интерпретатора Basic и многое другое - это просто кошмар...
Если вы мне не верите, то ещё в 2015 году собрали 100 причин ненависти:
https://timwise.blogspot.com/2015/08/100-reasons-i-hate-ssrs.html
Напишите в комментариях своё отношение к SSRS
Дорогие разработчики, рекомендую вам не соглашаться на любую разработку, связанную с отчётами.
Особенно, отчётами SSRS.
Разбираться, тестировать, отлаживать, ловить ошибки интерпретатора Basic и многое другое - это просто кошмар...
Если вы мне не верите, то ещё в 2015 году собрали 100 причин ненависти:
https://timwise.blogspot.com/2015/08/100-reasons-i-hate-ssrs.html
Напишите в комментариях своё отношение к SSRS
Blogspot
100 reasons I hate ssrs
A slightly tongue-in cheek hit-list of nasty things and vague hand-waving opinions on what makes microsoft's sql server reporting services (...
😁16👍7🐳4💯1
Польза IT за его пределами
У каждого специалиста в своей области есть позитивная профдеформация.
Некоторые ритуалы, которые возникли "на работе" и перешли в обычную жизнь, улучшив её.
Например, спортсмены в среднем более волевые, целеустремлённые и толерантные к неудачам люди.
Коммерческая разработка и процессы в продуктовых компаниях подарили мне системность подхода.
Все эти доски, статусы, беклоги и прочие штуки очень хорошо перекладываются на создание контента.
Каждый пост описывается как задача и декомпозируется до источников с референсами.
Благодаря такому отношению, мои телега и хабр расписаны минимум на полгода вперёд.
Скорее всего, этот пост вы прочитаете спустя месяц после его написания.
Так что программирование полезно не только своей зарплатой!
У каждого специалиста в своей области есть позитивная профдеформация.
Некоторые ритуалы, которые возникли "на работе" и перешли в обычную жизнь, улучшив её.
Например, спортсмены в среднем более волевые, целеустремлённые и толерантные к неудачам люди.
Коммерческая разработка и процессы в продуктовых компаниях подарили мне системность подхода.
Все эти доски, статусы, беклоги и прочие штуки очень хорошо перекладываются на создание контента.
Каждый пост описывается как задача и декомпозируется до источников с референсами.
Благодаря такому отношению, мои телега и хабр расписаны минимум на полгода вперёд.
Скорее всего, этот пост вы прочитаете спустя месяц после его написания.
Так что программирование полезно не только своей зарплатой!
🔥22👍8❤7🤯4💯3
Последние три дня вот этот персонаж бомбит хабы C# и .NET низкокачественными открытиями Америки про FluentValidation.
Кто-нибудь, расскажите ему о существовании сайта - https://docs.fluentvalidation.net/en/latest/🙏
Кто-нибудь, расскажите ему о существовании сайта - https://docs.fluentvalidation.net/en/latest/
Please open Telegram to view this post
VIEW IN TELEGRAM
🙏10😁7🥴4👍2🍌2🤯1
StepOne | Степан Минин
Пару недель назад закончил писать новую статью на Хабр 📝 Иногда руки доходят и до пожеланий подписчиков 😇 Во-первых, хочу поблагодарить свою аудиторию за инициативу и предложение тем! Благодаря вам в том числе, у меня отсутствует творческий застой) Во-вторых…
Встречайте
Настал день публикации моей самой длинной статьи на Хабре...
Количество сил, потраченных на подготовку материала однозначно заслуживает вашего плюса➕
System.Collections.Concurrent !Настал день публикации моей самой длинной статьи на Хабре...
Количество сил, потраченных на подготовку материала однозначно заслуживает вашего плюса
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Самый простой и подробный гайд по конкурентным коллекциям в C#
Когда несколько потоков обращаются к общим ресурсам, должна быть обеспечена потокобезопасность, чтобы избежать повреждения данных и неожиданного поведения. Конкурентные коллекции в C# предлагают...
❤35🔥22⚡5👍4😢1🌭1
Работодатель неправильно повышает зарплату
Или что не так с той схемой, которую нам навязывает корпоративный мир?
А именно: "делай больше, получишь больше".
Особо активные могут уже начать набирать в комментариях притчу про лошадь в колхозе, и в чём-то будут правы.
Давайте представим, что вы каждый день ходите в пекарню покупать хлеб.
Он стоит 10 рублей, которые вы каждый день отдаёте за свежий ароматный хрустящий батон.
Вдруг, вам что-то взбрело в голову, и вы решаете сообщить пекарю, что за эти же 10 рублей помимо батона возьмёте дополнительно улитку с корицей.
Как вы думаете, какова будет реакция пекаря?
Конечно же вас пошлют далеко и надолго, а батон теперь будет стоить 15 рублей!
В этой вымышленной ситуации на месте пекаря - программист, который продаёт своё время, а на месте покупателя хлеба - работодатель, которому нужно время разработчика для решения своих задач.
Однако, инфляция не дремлет и вынуждает тратить больше на привычные вещи.
Программирование - область, в которой постоянно нужно учиться.
Новые знания можно впитывать на протяжении всей жизни, у этого развития нет предела.
То есть, рост стоимости труда отдельного специалиста не ограничен, в отличие от его физических возможностей выполнять определённую работу и тратить на неё время.
Именно поэтому, рост нагрузки и ответственности не работает
Или что не так с той схемой, которую нам навязывает корпоративный мир?
А именно: "делай больше, получишь больше".
Особо активные могут уже начать набирать в комментариях притчу про лошадь в колхозе, и в чём-то будут правы.
Давайте представим, что вы каждый день ходите в пекарню покупать хлеб.
Он стоит 10 рублей, которые вы каждый день отдаёте за свежий ароматный хрустящий батон.
Вдруг, вам что-то взбрело в голову, и вы решаете сообщить пекарю, что за эти же 10 рублей помимо батона возьмёте дополнительно улитку с корицей.
Как вы думаете, какова будет реакция пекаря?
В этой вымышленной ситуации на месте пекаря - программист, который продаёт своё время, а на месте покупателя хлеба - работодатель, которому нужно время разработчика для решения своих задач.
Однако, инфляция не дремлет и вынуждает тратить больше на привычные вещи.
Программирование - область, в которой постоянно нужно учиться.
Новые знания можно впитывать на протяжении всей жизни, у этого развития нет предела.
То есть, рост стоимости труда отдельного специалиста не ограничен, в отличие от его физических возможностей выполнять определённую работу и тратить на неё время.
Именно поэтому, рост нагрузки и ответственности не работает
👍19🔥9🥱8💯6🤯1
Убийца Redis???
Microsoft выпустил новый инструмент для хранения кеша - Garnet.
Написан на C#, а разработкой занимался аж Microsoft Research.
Основная претензия на конкуренцию заявлена на поприще производительности.
Бенчмарки практически по всем показателям показывают превосходство Garnet над Redis, KeyDb, DragonFly.
Ждём, когда начнут спрашивать на собесах?
Microsoft выпустил новый инструмент для хранения кеша - Garnet.
Написан на C#, а разработкой занимался аж Microsoft Research.
Основная претензия на конкуренцию заявлена на поприще производительности.
Бенчмарки практически по всем показателям показывают превосходство Garnet над Redis, KeyDb, DragonFly.
Ждём, когда начнут спрашивать на собесах?
🤯24🔥22🤔10👍4🐳2
Как рассчитать процент индексации?
✅СОВЕТ ОТ ПРОФЕССИОНАЛА✅
Берёте резюме, выкладываете его в публичный доступ.
Пару собесов, туда-сюда - в руках офферы на новое место.
Затем по формуле считаете процент индексации:
Вдохновлено https://habr.com/ru/articles/802159/
Ставь ❤️ если тоже не знаешь, когда Степан прекратит демонизировать работодателей(никогда)
✅СОВЕТ ОТ ПРОФЕССИОНАЛА✅
Берёте резюме, выкладываете его в публичный доступ.
Пару собесов, туда-сюда - в руках офферы на новое место.
Затем по формуле считаете процент индексации:
decimal percent = (offers.Max(offer => offer.Value) / Me.Salary - 1) * 100
Вдохновлено https://habr.com/ru/articles/802159/
Ставь ❤️ если тоже не знаешь, когда Степан прекратит демонизировать работодателей
❤27😁9🔥4❤🔥1👍1🥱1🐳1
Что не так с увольнениями?
Одна из самых непродуманных вещей в ТК РФ - те самые две недели отработки.
На что обычно они уходят?
Правильно, в сотрудника пытаются запихнуть как можно больше задач, чтобы дожать последние соки.
Эту идею, которая мне очень понравилась, подарил один из моих бывших коллег, за что я ему благодарен.
Последние две недели уходящих людей нельзя тратить на выполнение рабочих задач.
Лучше тратить это время так: посадить человека писать обратную связь на коллег, потому что лучшего момента для этой рефлексии не придумаешь.
До работы о них ничего не известно, во время работы есть основные задачи, а после работы уже будет всё равно и проблематично вспомнить.
Одна из самых непродуманных вещей в ТК РФ - те самые две недели отработки.
На что обычно они уходят?
Правильно, в сотрудника пытаются запихнуть как можно больше задач, чтобы дожать последние соки.
Будет ли он усердно и старательно выполнять последние задачи, особенно после того, как принял решение об уходе?
Эту идею, которая мне очень понравилась, подарил один из моих бывших коллег, за что я ему благодарен.
Последние две недели уходящих людей нельзя тратить на выполнение рабочих задач.
Лучше тратить это время так: посадить человека писать обратную связь на коллег, потому что лучшего момента для этой рефлексии не придумаешь.
До работы о них ничего не известно, во время работы есть основные задачи, а после работы уже будет всё равно и проблематично вспомнить.
👍25💯8👏4😁3🤔2❤1
У вас всегда будут правки на ревью
Некоторые специалисты воспринимают наличие замечаний после ревью, как признак своей низкой компетенции.
Честно, никогда не понимал таких людей, поскольку страдал от другой крайности🤷♂️
Меня переполняло чувство собственной важности, и поэтому я натурально злился, когда другие разрабы её не ощущали или оспаривали😡
После сильно затянувшегося спора насчётакадемичности абстрактной фабрики адаптеров для декораторов я понял, что для того, чтобы стать настоящим профессионалом, которого будут уважать и хотеть видеть в команде, нужно задвинуть эго на второй план.
Конечно, эта мысль немного пугает😳
Сейчас этот вопрос не беспокоит - есть пет проект, где мой код самый чистый красивый и понятный, а другие лица принимающие решения отсутствуют🧠
Ревью - это естественная часть процесса разработки, поэтому нет ни "плохого", ни "хорошего" кода.
Есть общий язык с коллегами, который нужно найти - конкретный стиль общения, выражаемый в практиках кодирования отдельно взятой команды.
Потому что языки программирования в первую очередь человеческие, и только во вторую машинные.
Компьютеры их может и понимают, но говорят на них люди.
А как вы относитесь к ревью?
P.S. Даже сеньоры получают правки - говорю и как один из них, и как человек, оставляющий замечания другим сеньорам.
Некоторые специалисты воспринимают наличие замечаний после ревью, как признак своей низкой компетенции.
Если в PR или MR понаписали комментариев, то код недостаточно хорош.
Честно, никогда не понимал таких людей, поскольку страдал от другой крайности
Меня переполняло чувство собственной важности, и поэтому я натурально злился, когда другие разрабы её не ощущали или оспаривали
Да что они вообще понимают в программировании? Понаберут всяких, а мне потом расхлёбывать...
После сильно затянувшегося спора насчёт
Конечно, эта мысль немного пугает
Где та грань, за которой полностью теряется идентичность в попытках вписаться в коллектив?
Сейчас этот вопрос не беспокоит - есть пет проект, где мой код самый чистый красивый и понятный, а другие лица принимающие решения отсутствуют
Ревью - это естественная часть процесса разработки, поэтому нет ни "плохого", ни "хорошего" кода.
Есть общий язык с коллегами, который нужно найти - конкретный стиль общения, выражаемый в практиках кодирования отдельно взятой команды.
Потому что языки программирования в первую очередь человеческие, и только во вторую машинные.
Компьютеры их может и понимают, но говорят на них люди.
А как вы относитесь к ревью?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27💯8❤4👍3🏆2
StepOne | Степан Минин
Уже завтра закончится зима, потому что сегодня последний день февраля 🥳 Вот какие материалы больше всего согревали этот холодный месяц: ✅ Обзор новых выражений коллекций ✅ Готовые шаблоны для общения с HR после оффера ✅ Вспомнили про асинхронные потоки
Заканчивается март, а значит бигтехи начинают рассчитывать годовые премии 🌸
Ну я подсчитал лучшие материалы за первый весенний месяц:
🌹 Самый лучший гайд призывника
🌹 Как внедрять IT системность в свою жизнь
🌹 Убийца Redis и других от Microsoft Research
Ну я подсчитал лучшие материалы за первый весенний месяц:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🌭2🤯1🥴1