Вот хороший пример использования перехватчиков EF:
— Отслеживание времени создания и изменения сущностей.
Через ChangeTracker можно проверить состояние сущности и заполнить соответствующие поля.
Если этот DbContext всегда используется в рамках HTTP-запроса, можно также передавать UserId.
👉 @KodBlog
— Отслеживание времени создания и изменения сущностей.
Через ChangeTracker можно проверить состояние сущности и заполнить соответствующие поля.
Если этот DbContext всегда используется в рамках HTTP-запроса, можно также передавать UserId.
Please open Telegram to view this post
VIEW IN TELEGRAM
🍾1
Как сохранять объекты-значения в EF?
Допустим, у сущности
EF позволяет настроить его как owned type, принадлежащий этой сущности. В результате
👉 @KodBlog
Допустим, у сущности
Apartment есть Address, который вы реализовали как объект-значение.EF позволяет настроить его как owned type, принадлежащий этой сущности. В результате
Apartment и Address будут храниться в одной таблице базы данных, что может повысить производительность.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5🍾1
Проводник — это место, где проходит огромная часть повседневной работы в Windows.
Открытие папок. Переименование файлов. Переключение между локальными и облачными данными. Правый клик, чтобы перейти к следующему действию. Когда всё это работает медленно, зависает или перегружено лишними элементами — это сразу заметно.
В сегодняшней сборке Windows Insider Microsoft ускорила запуск Проводника, сократила количество зависаний и задержек, улучшила мелкие повседневные детали и переработала контекстное меню по правому клику — теперь оно проще, быстрее и лучше настраивается.
Подробнее:
https://blogs.windows.com/windows-insider/2026/08/17/improving-file-explorer-context-menu-faster-simpler-and-more-customizable/
👉 @KodBlog
Открытие папок. Переименование файлов. Переключение между локальными и облачными данными. Правый клик, чтобы перейти к следующему действию. Когда всё это работает медленно, зависает или перегружено лишними элементами — это сразу заметно.
В сегодняшней сборке Windows Insider Microsoft ускорила запуск Проводника, сократила количество зависаний и задержек, улучшила мелкие повседневные детали и переработала контекстное меню по правому клику — теперь оно проще, быстрее и лучше настраивается.
Подробнее:
https://blogs.windows.com/windows-insider/2026/08/17/improving-file-explorer-context-menu-faster-simpler-and-more-customizable/
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🤣1🍾1
Импортируете CSV в Postgres? Используйте
Это быстро, потому что данные передаются одной массовой командой с минимальным количеством обменов по протоколу, одним разбором и планированием, прямым преобразованием строк и без накладных расходов на отдельный запрос для каждой строки.
Что важно знать:
Включает стандартный разбор CSV: запятые, поля в кавычках и экранированные кавычки.
Список целевых столбцов
Порядок столбцов в CSV редко совпадает с таблицей. Всегда указывайте целевые столбцы в том порядке, в котором они идут в файле. Postgres сопоставляет их по позиции, а не по имени из заголовка CSV.
Пропускает строки заголовка. Обычный
Позволяет сопоставить специальную строку в CSV, например
Неуказанные столбцы
Столбцы таблицы, которые не указаны в списке целевых столбцов, автоматически получают
Лишние столбцы в CSV
Postgres выдаст ошибку, если в CSV больше полей, чем указано целевых столбцов. Обрежьте файл или сначала загрузите данные в более широкую промежуточную таблицу.
NULL-значения
В формате
Обработка ошибок через
Исторически
•
•
•
👉 @KodBlog
COPY или \copy.Это быстро, потому что данные передаются одной массовой командой с минимальным количеством обменов по протоколу, одним разбором и планированием, прямым преобразованием строк и без накладных расходов на отдельный запрос для каждой строки.
Что важно знать:
FORMAT csvВключает стандартный разбор CSV: запятые, поля в кавычках и экранированные кавычки.
Список целевых столбцов
Порядок столбцов в CSV редко совпадает с таблицей. Всегда указывайте целевые столбцы в том порядке, в котором они идут в файле. Postgres сопоставляет их по позиции, а не по имени из заголовка CSV.
HEADER / HEADER nПропускает строки заголовка. Обычный
HEADER пропускает первую строку. Ожидается, что Postgres 19 позволит передавать число, например HEADER 2, чтобы пропускать несколько начальных строк.DEFAULT 'string'Позволяет сопоставить специальную строку в CSV, например
'__DEFAULT__', с выражением DEFAULT соответствующего столбца.Неуказанные столбцы
Столбцы таблицы, которые не указаны в списке целевых столбцов, автоматически получают
DEFAULT или NULL.Лишние столбцы в CSV
Postgres выдаст ошибку, если в CSV больше полей, чем указано целевых столбцов. Обрежьте файл или сначала загрузите данные в более широкую промежуточную таблицу.
NULL-значения
В формате
csv стандартным представлением NULL является пустая строка без кавычек. Это можно изменить через NULL 'string'.Обработка ошибок через
ON_ERROR и REJECT_LIMITИсторически
COPY останавливался на первой ошибке преобразования. В новых версиях появились:•
ON_ERROR ignore в Postgres 17 — пропускает некорректные строки и сообщает их количество•
REJECT_LIMIT n в Postgres 18 — задаёт максимальное число плохих строк при ON_ERROR ignore, после которого импорт будет остановлен•
ON_ERROR set_null в Postgres 19 — заменяет некорректное поле на NULL вместо того, чтобы отбрасывать всю строкуPlease open Telegram to view this post
VIEW IN TELEGRAM
🔥1🍾1
Разработчик предложил официальную формальную семантику C# на Lean 4 — то есть основу, которая позволит строить машинно проверяемые доказательства для C#.
ИИ-агенты становятся очень хороши в написании кода — и очень хороши в том, чтобы его ломать.
В эпоху агентов для критически важного ПО фразы «тесты прошли» будет уже недостаточно. Нам нужно уметь доказывать свойства кода, который мы выпускаем.
И это уже становится практичным.
У Rust уже есть Aeneas → Lean. Microsoft Research использует его для формальной верификации SymCrypt. У Java и C тоже уже есть основа в формальной верификации.
C# не должен остаться позади.
ИИ может написать код.
ИИ может построить доказательство.
А детерминированное ядро проверки доказательств проверит, действительно ли это доказательство корректно.
Это совсем другая модель доверия по сравнению с
ИИ пишет код → ИИ проверяет код → надеемся, что оба оказались правы.
Предложение: https://github.com/dotnet/csharplang/discussions/10314
👉 @KodBlog
ИИ-агенты становятся очень хороши в написании кода — и очень хороши в том, чтобы его ломать.
В эпоху агентов для критически важного ПО фразы «тесты прошли» будет уже недостаточно. Нам нужно уметь доказывать свойства кода, который мы выпускаем.
И это уже становится практичным.
У Rust уже есть Aeneas → Lean. Microsoft Research использует его для формальной верификации SymCrypt. У Java и C тоже уже есть основа в формальной верификации.
C# не должен остаться позади.
ИИ может написать код.
ИИ может построить доказательство.
А детерминированное ядро проверки доказательств проверит, действительно ли это доказательство корректно.
Это совсем другая модель доверия по сравнению с
ИИ пишет код → ИИ проверяет код → надеемся, что оба оказались правы.
Предложение: https://github.com/dotnet/csharplang/discussions/10314
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
Proposal: An official Lean formal semantics for C# · dotnet csharplang · Discussion #10314
This is not a proposal for new C# syntax or language constructs. It is a proposal for language infrastructure: an officially maintained Lean 4 formal semantics for C#, developed incrementally along...
👍2🍾1
Андерс Хейлсберг — создатель TypeScript и C#. На подкасте его спросили о том, как переписывание компилятора на Go позволило ускорить TypeScript примерно в 10 раз, и о том, как ИИ уже влияет на разработку ПО.
В выпуске
• Как переписывание компилятора дало ускорение в 10 раз
• Почему выбрали Go, а не Rust
• Почему для миграции не использовали LLM
• Как ИИ повлияет на разработку ПО в будущем
https://www.youtube.com/watch?v=cywK3XYYJ2o
👉 @KodBlog
В выпуске
• Как переписывание компилятора дало ускорение в 10 раз
• Почему выбрали Go, а не Rust
• Почему для миграции не использовали LLM
• Как ИИ повлияет на разработку ПО в будущем
https://www.youtube.com/watch?v=cywK3XYYJ2o
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Creator of TypeScript: 10x Faster Typescript, Why AI Won't Replace SWEs | Anders Hejlsberg
Anders Hejlsberg is the creator of TypeScript and C#, and I asked him about how the TypeScript compiler got 10x faster through a rewrite in Go and his thoughts on how AI has impacted software engineering.
• My ergonomic keyboard project I mentioned, you…
• My ergonomic keyboard project I mentioned, you…
🍾3
C# 14 позволяет объединить проверку на
Раньше нужно было писать так:
Теперь оператор
Поведение то же самое. Если
Ещё несколько нюансов:
— работает и с
— не работает с
— поддерживаются и
👉 @KodBlog
null и присваивание в одну строку.Раньше нужно было писать так:
if (customer is not null)
{
customer.Order = GetCurrentOrder();
}
Теперь оператор
?. можно использовать слева от присваивания:customer?.Order = GetCurrentOrder();
Поведение то же самое. Если
customer равен null, GetCurrentOrder() даже не вызовется.Ещё несколько нюансов:
— работает и с
+=, -= и другими составными присваиваниями— не работает с
++ и --— поддерживаются и
?., и ?[] слева от присваиванияPlease open Telegram to view this post
VIEW IN TELEGRAM
👍16🍾2
C# 14 позволяет массивам,
Массив
✔️ Преобразования работают между
✔️ Типы
✔️ Компилятору стало проще выводить обобщённые типы, когда массивы и
👉 @KodBlog
Span<T> и ReadOnlySpan<T> автоматически преобразовываться друг в друга.Span<T> и ReadOnlySpan<T> уже повсеместно используются в среде выполнения ради производительности без ущерба для безопасности. В C# 14 компилятор получил полноценную поддержку преобразований между ними и T[]:void PrintFirst(ReadOnlySpan<int> values)
{
Console.WriteLine(values[0]);
}
int[] numbers = [10, 20, 30];
PrintFirst(numbers);
Массив
int напрямую передаётся в параметр ReadOnlySpan<int> — никаких явных вызовов преобразования.✔️ Преобразования работают между
ReadOnlySpan<T>, Span<T> и T[]✔️ Типы
Span теперь могут выступать получателями методов расширения✔️ Компилятору стало проще выводить обобщённые типы, когда массивы и
Span используются вместеPlease open Telegram to view this post
VIEW IN TELEGRAM
👍6🍾1
Эти заметки — структурированное руководство по собеседованиям по проектированию систем.
Внутри разбираются как базовые подходы к System Design, так и конкретные архитектуры: веб-краулеры, системы уведомлений, платёжные платформы и другие типичные задачи с собеседований.
https://github.com/liquidslr/system-design-notes
👉 @KodBlog
Внутри разбираются как базовые подходы к System Design, так и конкретные архитектуры: веб-краулеры, системы уведомлений, платёжные платформы и другие типичные задачи с собеседований.
https://github.com/liquidslr/system-design-notes
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - liquidslr/system-design-notes: Notes of the book System Desgin Interview - An Insider's Guide
Notes of the book System Desgin Interview - An Insider's Guide - liquidslr/system-design-notes
🥰3🍾1
C# 14 позволяет хранить сигнатуру конструктора и его реализацию в двух разных файлах.
Частичные члены уже позволяли разделять методы между сгенерированным и написанным вручную кодом. В C# 14 такой же подход с объявлением и реализацией теперь распространяется на конструкторы и события.
Объявляющая часть, которая, скорее всего, находится в сгенерированном коде, содержит только сигнатуру:
А реализующая часть в вашем собственном файле содержит тело конструктора:
✔️ Должно быть ровно одно объявление и ровно одна реализация — ни больше ни меньше
✔️ Только реализующая часть может содержать инициализатор
✔️ Тот же принцип теперь работает и для событий — в реализующей части должны быть оба метода доступа
👉 @KodBlog
Частичные члены уже позволяли разделять методы между сгенерированным и написанным вручную кодом. В C# 14 такой же подход с объявлением и реализацией теперь распространяется на конструкторы и события.
Объявляющая часть, которая, скорее всего, находится в сгенерированном коде, содержит только сигнатуру:
public partial class Order
{
public partial Order(string id);
}
А реализующая часть в вашем собственном файле содержит тело конструктора:
public partial class Order
{
public partial Order(string id)
{
Id = id;
}
public string Id { get; }
}
✔️ Должно быть ровно одно объявление и ровно одна реализация — ни больше ни меньше
✔️ Только реализующая часть может содержать инициализатор
: this() или : base()✔️ Тот же принцип теперь работает и для событий — в реализующей части должны быть оба метода доступа
add и removePlease open Telegram to view this post
VIEW IN TELEGRAM
🍾2
Как добавить проверки работоспособности в .NET?
Следующий шаг — подключить сами проверки.
Существует множество библиотек с готовыми проверками для популярных баз данных, брокеров сообщений и других сервисов.
Если нужен полный разбор, вот хорошая статья:
https://milanjovanovic.tech/blog/health-checks-in-asp-net-core
👉 @KodBlog
AddHealthChecks — добавляет необходимые сервисы.MapHealthChecks — создаёт конечную точку для проверки состояния приложения.Следующий шаг — подключить сами проверки.
Существует множество библиотек с готовыми проверками для популярных баз данных, брокеров сообщений и других сервисов.
Если нужен полный разбор, вот хорошая статья:
https://milanjovanovic.tech/blog/health-checks-in-asp-net-core
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1🍾1
Какие практики обработки ошибок в API на .NET считаются лучшими?
Я бы начал с главного — ошибки API должны возвращаться в едином формате.
Нужна понятная и стабильная структура ответа, логирование и мониторинг, нормальные сообщения об ошибках, документация по типовым ошибкам и никакой утечки чувствительных данных.
Было бы удобно, если бы для всего этого существовал стандарт.
Он есть.
Называется Problem Details.
👉 @KodBlog
Я бы начал с главного — ошибки API должны возвращаться в едином формате.
Нужна понятная и стабильная структура ответа, логирование и мониторинг, нормальные сообщения об ошибках, документация по типовым ошибкам и никакой утечки чувствительных данных.
Было бы удобно, если бы для всего этого существовал стандарт.
Он есть.
Называется Problem Details.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🍾1