Стачка 2025!
Спустя два года снова на этой конференции! Спикерствую завтра, а пока собираю мерч и поглощаю знания из докладов...
а ещё бесплатные обед и тонну кофе 🙃
Flexible Coding
Спустя два года снова на этой конференции! Спикерствую завтра, а пока собираю мерч и поглощаю знания из докладов...
Flexible Coding
🔥10👍4❤3🍾2
Полиморизм в рефакторинге
Рассказал на стачке про json и в целом остался доволен. Всегда есть что улучшить :)
Огромное спасибо Стачке за возможность выступить, огромное спасибо слушателям за интересные вопросы.
Ещё я пару докладов посетил как слушатель, о них расскажу попозже)
Flexible Coding
Рассказал на стачке про json и в целом остался доволен. Всегда есть что улучшить :)
Огромное спасибо Стачке за возможность выступить, огромное спасибо слушателям за интересные вопросы.
Ещё я пару докладов посетил как слушатель, о них расскажу попозже)
Flexible Coding
🔥15❤3
А вот и доклады со Стачки! Посетил не так много, зато почти все были интересные. Особенно понравились темы, связанные с ИБ - ну, то есть, как обычно)
Flexible Coding
Flexible Coding
👍5❤3😍1
⚠️ Порядок решает всё (и создаёт нам баги)
Снова неочевидности в .NET! На этот раз - библиотека System Text Json.
Когда Microsoft сказал 'всё, хватит Newtonsoft.Json', я не особо расстроился — STJ лёгкий, быстрый и нативный. Но есть нюанс...
Полиморфная сериализация. Когда мы сериализуем иерархии классов, нам нужно указать специальный дискриминатор типа, чтобы STJ понял, с каким классом в сборке связывать json:
Как оно работает, можете погуглить, а мы пока наступим на свежую граблю 💀
В один прекрасный день, я добавил новое поле в класс, и оно начало сериализоваться вот так:
А при десериализации появилась ошибка
Странно... JsonConstructor корректный, всё ок. Убрал поле - всё работает, вернул - опять проблема. Пошёл гуглить и наткнулся на Issue, которое точь в точь описывало мою проблему.
Вот это поле
В .NET9 это пофиксили - теперь надо в настройках сериализации указать свойство
А кто не может мигрировать библиотеку на .NET9 - страдайте 🙂 Или используйте кастомное поле-дискрииминатор с помощью атрибута
Flexible Coding
Снова неочевидности в .NET! На этот раз - библиотека System Text Json.
Когда Microsoft сказал 'всё, хватит Newtonsoft.Json', я не особо расстроился — STJ лёгкий, быстрый и нативный. Но есть нюанс...
Полиморфная сериализация. Когда мы сериализуем иерархии классов, нам нужно указать специальный дискриминатор типа, чтобы STJ понял, с каким классом в сборке связывать json:
{
"$type": "SomeClassWithText",
"Text": "Some value"
}
Как оно работает, можете погуглить, а мы пока наступим на свежую граблю 💀
В один прекрасный день, я добавил новое поле в класс, и оно начало сериализоваться вот так:
{
"NewField": "some value 2.0",
"$type": "SomeClassWithText",
"Text": "Some value"
}
А при десериализации появилась ошибка
System.NotSupportedException: 'Deserialization of types without a parameterless constructor, a singular parameterized constructor, or a parameterized constructor annotated with 'JsonConstructorAttribute' is not supported. Странно... JsonConstructor корректный, всё ок. Убрал поле - всё работает, вернул - опять проблема. Пошёл гуглить и наткнулся на Issue, которое точь в точь описывало мою проблему.
Вот это поле
$type называется "metadata property", и в .NET8 оно должно быть обязательно на первом месте. Однако GetProperties, который используется для получения полей, не позволяет контролировать их порядок, и в любой момент новое поле может выскочить вперёд и всё сломать.В .NET9 это пофиксили - теперь надо в настройках сериализации указать свойство
AllowOutOfOrderMetadataProperties = true и всё заработает.
private static readonly JsonSerializerOptions Options = new (JsonSerializerOptions.Default)
{
AllowOutOfOrderMetadataProperties = true,
};
А кто не может мигрировать библиотеку на .NET9 - страдайте 🙂 Или используйте кастомное поле-дискрииминатор с помощью атрибута
[JsonPolymorphic(TypeDiscriminatorPropertyName = "type")] Flexible Coding
GitHub
JsonSerializer: Allow out-of-order reading of metadata properties. · Issue #72604 · dotnet/runtime
EDIT See #72604 (comment) for an API proposal. Description Attempting to deserialize a polymorphic structure with System.Text.Json that doesn't feature $type at start of the object results in a...
✍5🔥3❤1
В новой статье разобрал пулы объектов в .NET
вАЙТИ
Пулинг объектов в .NET
DIY-медиа для ИТ-специалистов. Практические истории про решение самых разных задач из ИТ и смежных областей.
👍4🔥2❤1
😤 Ненавижу Postman
Когда нужно протестировать API, первое, что всплывает в голове, Postman. И он буквально делает всё, чтобы его ненавидели.
Медленный до боли
Postman работает на electron. Electron запускает chromium. Chromium открывает веб-приложение, которое маскируется под десктоп. Иногда кажется, что дождаться GTA VI проще, чем запуска Postman. Знаю примеры шустрых приложений на electron, тут явно есть проблемы.
Пж, зарегайся
Постоянные просьбы залогиниться. Убирать это неудобно. В офлайн режиме работать нельзя. Даже если нужно сделать один запрос в тестовый сервис, приложение начинает вести себя как продавец на рынке.
Безопасность
Postman постоянно отправляет телеметрию и логи вместе с секретами! Для РФ, особенно при работе с критичной инфраструктурой или над госпроектами, совсем не подходит.
Альтернативы
В первую очередь open source: можно провести аудит безопасности и работать оффлайн.
- Hoppscotch
- httpie
- insomnia
А ещё есть apidog, но он проприетарный. Неясно, что там с безопасностью, но попробовать можно.
Flexible Coding
Когда нужно протестировать API, первое, что всплывает в голове, Postman. И он буквально делает всё, чтобы его ненавидели.
Медленный до боли
Postman работает на electron. Electron запускает chromium. Chromium открывает веб-приложение, которое маскируется под десктоп. Иногда кажется, что дождаться GTA VI проще, чем запуска Postman. Знаю примеры шустрых приложений на electron, тут явно есть проблемы.
Пж, зарегайся
Постоянные просьбы залогиниться. Убирать это неудобно. В офлайн режиме работать нельзя. Даже если нужно сделать один запрос в тестовый сервис, приложение начинает вести себя как продавец на рынке.
Безопасность
Postman постоянно отправляет телеметрию и логи вместе с секретами! Для РФ, особенно при работе с критичной инфраструктурой или над госпроектами, совсем не подходит.
Альтернативы
В первую очередь open source: можно провести аудит безопасности и работать оффлайн.
- Hoppscotch
- httpie
- insomnia
А ещё есть apidog, но он проприетарный. Неясно, что там с безопасностью, но попробовать можно.
Flexible Coding
🔥6
Вот и закончилась осень, а значит настало время подводить итоги сезона!
Этой осенью мы:
- Немного вайбкодили
- Выступали на Стачке
- Закончили цикл статей про многопоточность
- Обсуждали System.Version
- Ловили баги с STJ
- Ныряли в пулы объектов
- Дружно хейтлили Postman
Flexible Coding
Этой осенью мы:
- Немного вайбкодили
- Выступали на Стачке
- Закончили цикл статей про многопоточность
- Обсуждали System.Version
- Ловили баги с STJ
- Ныряли в пулы объектов
- Дружно хейтлили Postman
Flexible Coding
🔥15
This media is not supported in your browser
VIEW IN TELEGRAM
Митап в Бауманке
2-го декабря в МГТУ им. Баумана мой коллега StepOne организовал небольшой .NET митап. Было всего два доклада, зато какие!
Шифрование персональных данных в kafka
Кастомный сериализатор json, который на базе атрибутов шифрует отдельные поля нужным алгоритмом. Интересно, что-то подобное мы делали для шифрования в MongoDB. Ротацию ключей и прочие задачи key management делегировали в hashicorp vault - это прикольно, аж захотелось подробнее изучить функционал Vault.
linq2db в связке с EF Core
Доклад про ORM linq2db и её адаптер к Entity Framework Core. Меня удивило, что такое вообще есть) Автор доклада использует linq2db там, где функционал EF не справляется или просто неудобен и рассказывает о своих кейсах. Тоже прикольно, мне понравилось - теперь знаю, что в случае задач с нетривиальным SQL можно просто подрубить linq2db.EntityFrameworkCore.
Главное: были нетворкинг, инсайты и пицца, а ради чего ещё ходить на митапы?
Flexible Coding
2-го декабря в МГТУ им. Баумана мой коллега StepOne организовал небольшой .NET митап. Было всего два доклада, зато какие!
Шифрование персональных данных в kafka
Кастомный сериализатор json, который на базе атрибутов шифрует отдельные поля нужным алгоритмом. Интересно, что-то подобное мы делали для шифрования в MongoDB. Ротацию ключей и прочие задачи key management делегировали в hashicorp vault - это прикольно, аж захотелось подробнее изучить функционал Vault.
linq2db в связке с EF Core
Доклад про ORM linq2db и её адаптер к Entity Framework Core. Меня удивило, что такое вообще есть) Автор доклада использует linq2db там, где функционал EF не справляется или просто неудобен и рассказывает о своих кейсах. Тоже прикольно, мне понравилось - теперь знаю, что в случае задач с нетривиальным SQL можно просто подрубить linq2db.EntityFrameworkCore.
Главное: были нетворкинг, инсайты и пицца, а ради чего ещё ходить на митапы?
Flexible Coding
🔥10❤2👏2
Учимся ломать сайты
Я давно хотел организовать воркшоп по информационной безопасноси для студентов своего колледжа - показать типовые уязвимости веба и отдать им на растерзание пару сайтов. Долго планировал, долго вынашивал идею...
И, наконец, сделал это! Встретились с ребятами, изучили:
- enumeration и brute force - от перебора логинов по словарю до брута хэшей через hashcat
- Разобрали OWASP Top Ten
- Проэксплуатировали SQL Injection и Code Injection, имитируя недопустимые события для компании
- Собрали свой баг-репорт и подробно описали вектора атак
Авторы лучших репортов выиграли книги по ИБ - надеюсь, они применят знания оттуда с пользой)
Спасибо колледжу за организацию, спасибо студентам за вовлечение, а так же всем, кто помогал в составлении материалов. До новых встреч!
Flexible Coding
Я давно хотел организовать воркшоп по информационной безопасноси для студентов своего колледжа - показать типовые уязвимости веба и отдать им на растерзание пару сайтов. Долго планировал, долго вынашивал идею...
И, наконец, сделал это! Встретились с ребятами, изучили:
- enumeration и brute force - от перебора логинов по словарю до брута хэшей через hashcat
- Разобрали OWASP Top Ten
- Проэксплуатировали SQL Injection и Code Injection, имитируя недопустимые события для компании
- Собрали свой баг-репорт и подробно описали вектора атак
Авторы лучших репортов выиграли книги по ИБ - надеюсь, они применят знания оттуда с пользой)
Спасибо колледжу за организацию, спасибо студентам за вовлечение, а так же всем, кто помогал в составлении материалов. До новых встреч!
Flexible Coding
🔥11❤7👍2