Flexible Coding
181 subscribers
190 photos
2 videos
2 files
120 links
Download Telegram
Стачка 2025!

Спустя два года снова на этой конференции! Спикерствую завтра, а пока собираю мерч и поглощаю знания из докладов...

а ещё бесплатные обед и тонну кофе 🙃

Flexible Coding
🔥10👍43🍾2
Полиморизм в рефакторинге

Рассказал на стачке про json и в целом остался доволен. Всегда есть что улучшить :)

Огромное спасибо Стачке за возможность выступить, огромное спасибо слушателям за интересные вопросы.

Ещё я пару докладов посетил как слушатель, о них расскажу попозже)

Flexible Coding
🔥153
А вот и доклады со Стачки! Посетил не так много, зато почти все были интересные. Особенно понравились темы, связанные с ИБ - ну, то есть, как обычно)

Flexible Coding
👍53😍1
⚠️ Порядок решает всё (и создаёт нам баги)

Снова неочевидности в .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
5🔥31
😤 Ненавижу Postman

Когда нужно протестировать API, первое, что всплывает в голове, Postman. И он буквально делает всё, чтобы его ненавидели.

Медленный до боли

Postman работает на electron. Electron запускает chromium. Chromium открывает веб-приложение, которое маскируется под десктоп. Иногда кажется, что дождаться GTA VI проще, чем запуска Postman. Знаю примеры шустрых приложений на electron, тут явно есть проблемы.

Пж, зарегайся

Постоянные просьбы залогиниться. Убирать это неудобно. В офлайн режиме работать нельзя. Даже если нужно сделать один запрос в тестовый сервис, приложение начинает вести себя как продавец на рынке.

Безопасность

Postman постоянно отправляет телеметрию и логи вместе с секретами! Для РФ, особенно при работе с критичной инфраструктурой или над госпроектами, совсем не подходит.

Альтернативы

В первую очередь open source: можно провести аудит безопасности и работать оффлайн.

- Hoppscotch
- httpie
- insomnia

А ещё есть apidog, но он проприетарный. Неясно, что там с безопасностью, но попробовать можно.

Flexible Coding
🔥6
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
🔥102👏2
Учимся ломать сайты

Я давно хотел организовать воркшоп по информационной безопасноси для студентов своего колледжа - показать типовые уязвимости веба и отдать им на растерзание пару сайтов. Долго планировал, долго вынашивал идею...

И, наконец, сделал это! Встретились с ребятами, изучили:
- enumeration и brute force - от перебора логинов по словарю до брута хэшей через hashcat
- Разобрали OWASP Top Ten
- Проэксплуатировали SQL Injection и Code Injection, имитируя недопустимые события для компании
- Собрали свой баг-репорт и подробно описали вектора атак

Авторы лучших репортов выиграли книги по ИБ - надеюсь, они применят знания оттуда с пользой)

Спасибо колледжу за организацию, спасибо студентам за вовлечение, а так же всем, кто помогал в составлении материалов. До новых встреч!

Flexible Coding
🔥117👍2