Forwarded from Деплой (Ваня Ботанов)
Забавная история, показывающая, почему в России сильное IT.
Потому что любят работать и достигать результат, очевидно :)
Потому что любят работать и достигать результат, очевидно :)
👍22😁10
Главное ограничение Source Generators в .NET
Source Generators позволяют делать много крутых вещей
Вообще, на мой взгляд, это крайне недооценённая разработчиками фича
Поверьте, чуть ли не каждый реальный проект имеет место, которое SG может сильно улучшить
Однако, они не всемогущи, есть узкое место, которого лично мне недавно не хватило
Ранее на канале было замечено, что нельзя строить цепочки или пайплайны из генераторов
Этому посвящён целый issue в репозитории Roslyn - https://github.com/dotnet/roslyn/issues/57239
Проблема в том, что пока не удаётся найти компромисс между тем, чтобы построить удачный пользовательский опыт для программиста и сохранить высокий перформанс инструмента
При этом скорость работы генераторов, которая действительно на уровне, является высоким приоритетом, от того задача ещё более не решаемая
С ограничением столкнулся в пет-проекте, как обычно)
Пилю, значит, интерпретатор hydranoscript, и захотелось оптимизировать лексический анализ с помощью скомпилированных регулярных выражений
Но вот незадача - регулярка очень большая получается, около 600 символов в длину - очень легко в ручном режиме опечататься и налажать
Получается, что её надо генерировать на основе исходного кода конфигурации
Но вот незадача - результат генерации надо подставлять в другой генератор, уже платформенный, через атрибут
А генератор1 не видит результат работы генератора2, потому что оба пользуются AST из кода, написанного руками
Здесь получилось обхитрить систему, потому что настоящего доступа к AST и семантической модели мне не требуется
Я хочу просто прочитать конфиг и выплюнуть строчку, поэтому достаточно руками забрать этот конфиг, а строку с паттерном подложить сборке через
Такие сорцы генераторы видят, потому что обычно метод используется для создания маркерных атрибутов или других вспомогательных служебных объектов
Получился такой PR, пользуйтесь)
https://github.com/Stepami/hydranoscript/pull/115
Source Generators позволяют делать много крутых вещей
Вообще, на мой взгляд, это крайне недооценённая разработчиками фича
Возможно, в силу недостатка квалификации
Поверьте, чуть ли не каждый реальный проект имеет место, которое SG может сильно улучшить
Однако, они не всемогущи, есть узкое место, которого лично мне недавно не хватило
Ранее на канале было замечено, что нельзя строить цепочки или пайплайны из генераторов
Этому посвящён целый issue в репозитории Roslyn - https://github.com/dotnet/roslyn/issues/57239
Проблема в том, что пока не удаётся найти компромисс между тем, чтобы построить удачный пользовательский опыт для программиста и сохранить высокий перформанс инструмента
При этом скорость работы генераторов, которая действительно на уровне, является высоким приоритетом, от того задача ещё более не решаемая
С ограничением столкнулся в пет-проекте, как обычно)
Пилю, значит, интерпретатор hydranoscript, и захотелось оптимизировать лексический анализ с помощью скомпилированных регулярных выражений
Но вот незадача - регулярка очень большая получается, около 600 символов в длину - очень легко в ручном режиме опечататься и налажать
Получается, что её надо генерировать на основе исходного кода конфигурации
Но вот незадача - результат генерации надо подставлять в другой генератор, уже платформенный, через атрибут
[GeneratedRegex]
А генератор1 не видит результат работы генератора2, потому что оба пользуются AST из кода, написанного руками
Здесь получилось обхитрить систему, потому что настоящего доступа к AST и семантической модели мне не требуется
Я хочу просто прочитать конфиг и выплюнуть строчку, поэтому достаточно руками забрать этот конфиг, а строку с паттерном подложить сборке через
context.RegisterPostInitializationOutput
Такие сорцы генераторы видят, потому что обычно метод используется для создания маркерных атрибутов или других вспомогательных служебных объектов
Получился такой PR, пользуйтесь)
https://github.com/Stepami/hydranoscript/pull/115
👍8🔥5❤1
Короче, степванчики, я вам видео снял и в благородство играть не буду.
Посмотрите его до конца - и мы в расчёте!
Заодно посмотрим, как вам контент после перерыва зайдёт)
А по вашей теме постараюсь разузнать: хрен его знает, на кой ляд вам эта ссылка на видео сдалась…
Но! Я в чужие дела не лезу! Не хотите вбивать поисковой запрос - значит есть причина
https://youtu.be/FS-1ch2gZ9M
Посмотрите его до конца - и мы в расчёте!
Заодно посмотрим, как вам контент после перерыва зайдёт)
А по вашей теме постараюсь разузнать: хрен его знает, на кой ляд вам эта ссылка на видео сдалась…
Но! Я в чужие дела не лезу! Не хотите вбивать поисковой запрос - значит есть причина
https://youtu.be/FS-1ch2gZ9M
YouTube
Почему тебе не даётся программирование
https://news.1rj.ru/str/steponeit
00:00 Вступление
00:50 Ловушка мышления
03:44 Как перестать быть вечным студентом
04:50 Специализация программиста
06:54 Сила сообщества
00:00 Вступление
00:50 Ловушка мышления
03:44 Как перестать быть вечным студентом
04:50 Специализация программиста
06:54 Сила сообщества
2🔥19👍5❤🔥2❤2
StepOne | Степан Минин
Программисту нет смысла ходить в офис Ведь у него даже не будет своего кабинета 🤯 В самом начале своей карьеры мне казалось: вот стану важным сеньором - дадут свой кабинет Но потом, по мере смены работ всё сильнее разочаровывался в концепции её посещения…
Наткнулся на статью, где приложенным исследованием подтверждается тезис о вреде опен спейса для коммуникации
А также там развеяно много других мифов о зарплатах и эффективности
https://www.researchgate.net/publication/326130488_The_impact_of_the_'open'_workspace_on_human_collaboration
А также там развеяно много других мифов о зарплатах и эффективности
Хабр
Гуманизм против «эффективного менеджмента». Почему заботиться о людях выгодно
Бизнес полон "эффективных менеджеров" и их "лучших практик". Переработки, стресс, политика кнута без пряника, урезания зарплат и премий, обманы и подлоги. Эти практики распространены очень широко,...
👍11❤2🔥2
Программирование не даёт мне спиться 🥃
Странная мысль, согласен)🥃
Но быть пьяным классно: не думаешь о проблемах, потому что не в состоянии их осознать🥂
Правда, жизнь вносит свои коррективы🥂
Я неоднократно слышал фразу:
В разработке, к сожалению, не прокатит - разум затуманивается, теряется способность к фокусировке, сужается контекст с оперативкой и так далее
В общем, мыслительный процесс серьёзно ослабевает
А ещё нужно в канал запостить, видос придумать, доклад подготовить, пет-проект покодить
Про несовместимость с качалкой вообще молчу…
И вот так получается, что везде нужна трезвая голова
Получается, от алкоголизма меня защищает не сила воли, а профессия…
P.S. Знали бы вы какой у меня дома бар, и как я люблю коктейли…
Странная мысль, согласен)
Но быть пьяным классно: не думаешь о проблемах, потому что не в состоянии их осознать
Я мог бы выпить море
Я мог бы стать другим
Вечно молодым
Вечно пьяным
Правда, жизнь вносит свои коррективы
Я неоднократно слышал фразу:
«Без пол-литра не разберёшься»
В разработке, к сожалению, не прокатит - разум затуманивается, теряется способность к фокусировке, сужается контекст с оперативкой и так далее
В общем, мыслительный процесс серьёзно ослабевает
А ещё нужно в канал запостить, видос придумать, доклад подготовить, пет-проект покодить
Про несовместимость с качалкой вообще молчу…
И вот так получается, что везде нужна трезвая голова
Получается, от алкоголизма меня защищает не сила воли, а профессия…
Please open Telegram to view this post
VIEW IN TELEGRAM
😁24👍11❤1
МОКИРУЕМ ADO NET РЕБЯТА 😱
Иногда хочется просто написать мужицкий SQL запрос без всяких ORM
Но вот незадача, несмотря на наличие абстракций по типу DbConnection, DbCommand и так далее
Не понятно, как такой код тестировать - как будто только интеграционники, и тут их адепты могут начать плясать с радостной пеной у рта
Но не тут было: на просторах GitHub нашлась библиотека, которая решает проблему
Например, есть сервис, который сравнивает кол-во строк в двух таблицах
Тогда замокировать можно следующим образом:
Товарищу предлагаю накинуть звёзд
Иногда хочется просто написать мужицкий SQL запрос без всяких ORM
Но вот незадача, несмотря на наличие абстракций по типу DbConnection, DbCommand и так далее
Не понятно, как такой код тестировать - как будто только интеграционники, и тут их адепты могут начать плясать с радостной пеной у рта
Но не тут было: на просторах GitHub нашлась библиотека, которая решает проблему
Например, есть сервис, который сравнивает кол-во строк в двух таблицах
Тогда замокировать можно следующим образом:
var mockDbConnection = new MockDbConnection();
mockDbConnection.Mocks
.When(cmd => cmd.CommandText.Contains("count(*) from t1"))
.ReturnsTable(
MockTable.WithColumns("Count")
.AddRow(1));
mockDbConnection.Mocks
.When(cmd => cmd.CommandText.Contains("count(*) from t2"))
.ReturnsTable(
MockTable.WithColumns("Count")
.AddRow(2));
Товарищу предлагаю накинуть звёзд
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - Apps72/DbMocker: Data Mocker for C# DbConnection
Data Mocker for C# DbConnection. Contribute to Apps72/DbMocker development by creating an account on GitHub.
🔥17👍6❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Мы знаем, что делать, если омерика отключит погромирование
😁16👍2❤1🔥1🤩1
StepOne | Степан Минин
Контроль архитектуры компилятором вместо тестов Наконец-то окончательно завершён многолетний рефакторинг моего интерпретатора - архитектура настолько проработана, хороша и не противоречива, насколько это возможно и задумывалось изначально ООП, DDD, Clean…
Directory.Build.props и CPM - это 🟢
После рефакторинга hydranoscript в solution появилось 6 проектов исходников
После выделения интеграционников тестовых проектов стало 2
Когда добавил автоматизацию через Source Generator ещё плюс 2 проекта
Естественно, захотелось обобщить конфигурацию, чтобы написать один раз xml разметку и почивать на лаврах:
В дотнет есть решения из коробки на все случаи жизни, так что платформа позволяет написать один раз шаблон проекта и пользоваться
Почитать про работу пропсов можно тут 👉 https://blog.ndepend.com/directory-build-props/
Помимо этого, оказывается, есть удобный централизованный менеджмент пакетов (CPM), про него писал Евгений @epeshkblog вот тут 👉 https://news.1rj.ru/str/epeshkblog/183
Кстати, что интересно если в Rider ставить новую либу - она автоматом в Directory.Packages.props заезжает!
Все эти прелести разработки заехали в репу hydranoscript благодаря моему подписчику Расиму @Keyros_z
Большое спасибо ❤️
Посмотреть PR можно по ссылке 👉 https://github.com/Stepami/hydranoscript/pull/113
После рефакторинга hydranoscript в solution появилось 6 проектов исходников
После выделения интеграционников тестовых проектов стало 2
Когда добавил автоматизацию через Source Generator ещё плюс 2 проекта
Естественно, захотелось обобщить конфигурацию, чтобы написать один раз xml разметку и почивать на лаврах:
<Project>
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
</Project>
В дотнет есть решения из коробки на все случаи жизни, так что платформа позволяет написать один раз шаблон проекта и пользоваться
Почитать про работу пропсов можно тут 👉 https://blog.ndepend.com/directory-build-props/
Помимо этого, оказывается, есть удобный централизованный менеджмент пакетов (CPM), про него писал Евгений @epeshkblog вот тут 👉 https://news.1rj.ru/str/epeshkblog/183
Все эти прелести разработки заехали в репу hydranoscript благодаря моему подписчику Расиму @Keyros_z
Большое спасибо ❤️
Посмотреть PR можно по ссылке 👉 https://github.com/Stepami/hydranoscript/pull/113
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
Добавлен Directory.Build.props +semver:skip by Keyros · Pull Request #113 · Stepami/hydranoscript
Denoscription
Перешли на CPM.
Начали использовать Directory.Build.props.
Удалили ссылку на System.Text.Json из HydraScript.Infrastructure.LexerRegexGenerator.
Related Issues
#74 #112
Checklist:
I...
Перешли на CPM.
Начали использовать Directory.Build.props.
Удалили ссылку на System.Text.Json из HydraScript.Infrastructure.LexerRegexGenerator.
Related Issues
#74 #112
Checklist:
I...
🔥11👍4😁2❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍34❤🔥9❤4🔥3😁1
StepOne | Степан Минин
Главный итог сентября
На что обратить внимание из октябрьского?
🥇 Обходим ограничения Source Generators
📱 W Youtube ролик
🌎 DbMocker, must install
🔄 Улучшаем .csproj двумя дедовскими методиками и ещё пакет не забываем, ага
Напишите в комментах - зарядить ли на Хабр текстовые версии сентябрьских докладов?
Напишите в комментах - зарядить ли на Хабр текстовые версии сентябрьских докладов?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤🔥1❤1
🔥 Всем привет! Приглашаю вас на Merge в Сколково 15–16 ноября, где я, Степан Минин, расскажу, как получить оффер за ваше резюме на 600к в секунду! Мой доклад «Резюме 600к в секунду. Рецепт прагматика» — это реальный взгляд на прагматичный подход к поиску работы. Поделюсь рецептом, как Dev/SA/QA/PM и другим IT специалистам написать резюме так, чтобы HR их отобрали и предложили зарплату выше рынка!
Merge — это масштабная IT-конфа, где более 150 экспертов и 2000 участников из разных сфер собираются, чтобы делиться свежими идеями и рабочими лайфхаками. 30 секций, море общения и тренды, которые нельзя пропустить.
🎟 А у меня для вас промокод MININ — он даст вам 20% скидку на участие! Присоединяйтесь и приходите за вдохновением и новыми инструментами для работы. Увидимся на Merge в Сколково! Забирайте билет по ссылке: https://skolkovo2024.mergeconf.ru/#tickets
Merge — это масштабная IT-конфа, где более 150 экспертов и 2000 участников из разных сфер собираются, чтобы делиться свежими идеями и рабочими лайфхаками. 30 секций, море общения и тренды, которые нельзя пропустить.
🎟 А у меня для вас промокод MININ — он даст вам 20% скидку на участие! Присоединяйтесь и приходите за вдохновением и новыми инструментами для работы. Увидимся на Merge в Сколково! Забирайте билет по ссылке: https://skolkovo2024.mergeconf.ru/#tickets
skolkovo2024.mergeconf.ru
IT-конференция Merge в Сколково
Профессиональная межрегиональная IT-конференция | 15-16 ноября 2024, Технопарк Сколково
🔥11❤1👍1
StepOne | Степан Минин
МОКИРУЕМ ADO NET РЕБЯТА 😱 Иногда хочется просто написать мужицкий SQL запрос без всяких ORM Но вот незадача, несмотря на наличие абстракций по типу DbConnection, DbCommand и так далее Не понятно, как такой код тестировать - как будто только интеграционники…
Мой первый контрибут в чужой гитхаб
А вот и не всесильна библиотека оказалась
На работе использовал её для написания тестов
Но вот незадача, поскольку я использую
Именно в этом методе автор либы решил не заполнять входной параметр
Хорошо что этот source сейчас open, так что сделал PR для исправления ситуации
Посмотрим, как быстро вопрос решится)
https://github.com/Apps72/DbMocker/pull/35
А вот и не всесильна библиотека оказалась
На работе использовал её для написания тестов
Но вот незадача, поскольку я использую
GetBytes по соображениям производительности и требованиям к функционалу замокировать БД не получаетсяИменно в этом методе автор либы решил не заполнять входной параметр
bufferХорошо что этот source сейчас open, так что сделал PR для исправления ситуации
Посмотрим, как быстро вопрос решится)
https://github.com/Apps72/DbMocker/pull/35
GitHub
1.24.0 - implementation of GetBytes method by Stepami · Pull Request #35 · Apps72/DbMocker
The other day i was working on a tool that performs hashing of the data with the DB engine.
It does so by executing a SQL noscript, i.e. for PostgreSQL:
select sha512(...) from my_schema.my_table
Th...
It does so by executing a SQL noscript, i.e. for PostgreSQL:
select sha512(...) from my_schema.my_table
Th...
🔥12👍8❤3
StepOne | Степан Минин
Напишите в комментах, чем вы занимаетесь в рабочее время вместо задач 😐
Напишите в комментах, чем вы занимаетесь в свободное время 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🤩2🔥1
StepOne | Степан Минин
Photo
This media is not supported in your browser
VIEW IN TELEGRAM
Знаменитый bigtech продолжает пробивать дно своей кринжатиной…
Удивительно, как только я выложил этот мем, то сразу на глаза попалось это видео от сотрудницы Шмандекс Няркета
Удивительно, как только я выложил этот мем, то сразу на глаза попалось это видео от сотрудницы Шмандекс Няркета
😁19🤩4
Обожаю эти рассказы про оптимизации 🤵♂
Тут на Хабре мужик на полном серьёзе выдал:
Ну то есть есть у вас моделька "Сотрудник" с полями "айди", "зарплата", "имя"
И вместо привычного:
Вы такие внезапно:
Спору нет, что оно быстрее, потому что в памяти по-другому уложено, но блин...
Так реально кто-то в продакшене писать будет???
Ставлю на пополнение коллекции безумных задач для собесов
Тут на Хабре мужик на полном серьёзе выдал:
А давайте проектировать составные типы данных не привычным для всех образом в виде структур, а в виде структуры массивов
Ну то есть есть у вас моделька "Сотрудник" с полями "айди", "зарплата", "имя"
И вместо привычного:
record Employee(long Id, decimal Salary, string Name);
Вы такие внезапно:
class Employees
{
public long[] Ids { get; set; }
public decimal[] Salaries { get; set; }
public string[] Names { get; set; }
}
Спору нет, что оно быстрее, потому что в памяти по-другому уложено, но блин...
Так реально кто-то в продакшене писать будет???
Ставлю на пополнение коллекции безумных задач для собесов
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Почему важно оптимизировать формат данных
Если вам нужно повысить скорость вашей программы, то первым делом логично будет вспомнить курс по структурам данных и оптимизировать алгоритмическую сложность. Алгоритмы — важнейшая часть программы:...
👍10😁8🤩3❤1