Если вы планируете изменить схему базы данных, то важно тщательно подготовиться к этому процессу. В этом посте мы собрали ключевые шаги, которые помогут вам сделать миграцию безопасной и безболезненной.
1. Определите цель изменения и ожидаемый эффект.
2. Классифицируйте тип изменений
• backward-compatible: добавления, nullable-колонки, индексы
• breaking: переименования, удаления, типовые изменения.
3. Выберите стратегию
• Expand/Contract (двухэтапно: добавляем новое → адаптируем код → удаляем старое)
• Online миграция (pg_repack, gh-ost, pt-online-schema-change)
• Blue-Green или shadow-write/read если критична безостановочность.
4. Спланируйте идемпотентные скрипты миграций и версионирование.
5. Решите, как обрабатывать большие таблицы
• батчи
• lock timeout
• throttling, disable/enable triggers.
6. Найдите все места использования затрагиваемых таблиц/полей: сервисы, джобы, ETL, BI, отчёты, внешние интеграции, функции/триггеры/вьюхи.
7. Проверьте совместимость контрактов API и сериализаций (Protobuf/JSON схемы).
8. Подготовьте репрезентативные объёмы данных в том числе «длинные хвосты», edge-кейсы.
9. Зафиксируйте базовые метрики производительности до изменений: latency, throughput, locks, bloat.
10. Убедитесь в валидном бэкапе: полный + журналы. Сделайте тестовое восстановление.
11. Зафиксируйте точку восстановления: restore point, snapshot, LSN.
12. Для облачных БД — проверьте снапшоты и политику retention.
13. Реализуйте обратную совместимость: код должен работать со старой и новой схемой в переходный период.
14. Обновите ORM-модели/миграции, DTO, валидаторы, GraphQL/REST схемы.
15. Нагрузочное тестирование критичных запросов и миграций: проверка блокировок, регрессий.
16. Обновите диаграммы, спецификации, Confluence/README, схемы событий.
17. Задокументируйте проблемы и фактические времена выполнения, обновите шаблон миграций.
Что бы вы добавили в этот список?
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤2
🧑💻 Почему SOAP — это прошлое
Когда мы говорим о веб-сервисах, старые технологии вроде SOAP уже не так популярны. Но почему?
Такой вопрос, который нам недавно задал подписчик:
Сейчас объясним почему REST стал стандартом.
SOAP использует XML, который довольно тяжёлый и сложный в обработке. В REST для обмена данными чаще используется JSON — лёгкий формат, который легче читается и быстрее обрабатывается.
SOAP требует строгого соблюдения протоколов, что делает его менее гибким. REST, наоборот, позволяет работать с разными форматами данных и требует меньше настроек.
REST проще интегрируется с мобильными приложениями, веб-сервисами и современными технологиями. SOAP лучше подходит для сложных корпоративных систем, но для большинства проектов REST подходит гораздо лучше.
SOAP был хорош, но сегодня REST предоставляет всё, что нужно для современных приложений.
💬 А вы когда-нибудь использовали SOAP? Поделитесь своим опытом в комментариях 👇
🐸 Библиотека шарписта
#междусобойчик
Когда мы говорим о веб-сервисах, старые технологии вроде SOAP уже не так популярны. Но почему?
Такой вопрос, который нам недавно задал подписчик:
Почему SOAP считается устаревшим, а REST стал стандартом?
Сейчас объясним почему REST стал стандартом.
SOAP использует XML, который довольно тяжёлый и сложный в обработке. В REST для обмена данными чаще используется JSON — лёгкий формат, который легче читается и быстрее обрабатывается.
SOAP требует строгого соблюдения протоколов, что делает его менее гибким. REST, наоборот, позволяет работать с разными форматами данных и требует меньше настроек.
REST проще интегрируется с мобильными приложениями, веб-сервисами и современными технологиями. SOAP лучше подходит для сложных корпоративных систем, но для большинства проектов REST подходит гораздо лучше.
SOAP был хорош, но сегодня REST предоставляет всё, что нужно для современных приложений.
💬 А вы когда-нибудь использовали SOAP? Поделитесь своим опытом в комментариях 👇
#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12😁3🤔3🌚2
Facet — библиотека для маппинга объектов в C#. Она позволяет легко маппить объекты и работает с проекциями для EF Core.
Facet не самая быстрая по производительности, но для большинства задач её возможностей хватает.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4👾1
💰 Сколько вы реально стоите как разработчик
Переговоры о зарплате — это всегда искусство не продешевить. Но как точно определить свою стоимость?
Мы подготовили 3 эффективных способа, которые помогут вам без догадок понять, сколько вы действительно стоите, и уверенно озвучить свою цену работодателю.
Листайте карточки и торгуйтесь уже на следующем собесе
➡️ Читать статью
🐸 Библиотека шарписта
Переговоры о зарплате — это всегда искусство не продешевить. Но как точно определить свою стоимость?
Мы подготовили 3 эффективных способа, которые помогут вам без догадок понять, сколько вы действительно стоите, и уверенно озвучить свою цену работодателю.
Листайте карточки и торгуйтесь уже на следующем собесе
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁30🔥6
🤖 C# для машинного обучения
Когда речь идет о машинном обучении, обычно на ум приходит Python. Но C# с его мощной экосистемой и возможностями тоже может быть использован для решения задач машинного обучения.
Давайте разберемся, подходит ли C# для машинного обучения или всё-таки стоит обратить внимание на более традиционные инструменты.
Плюсы использования C# для машинного обучения:
• C# является частью экосистемы .NET, что даёт разработчикам доступ к множеству библиотек для работы с большими данными, многозадачностью и асинхронными операциями.
• Microsoft предлагает ML.NET — библиотеку, которая позволяет работать с алгоритмами машинного обучения в C#.
• C# известен своей высокой производительностью, благодаря чему можно эффективно обрабатывать большие объемы данных.
Минусы использования C# для машинного обучения:
• Хотя ML.NET предоставляет некоторые возможности, C# не имеет такого богатого выбора фреймворков и моделей, как Python.
• В интернете гораздо меньше примеров и документации по машинному обучению на C# по сравнению с Python
💬 Используете ли вы C# для машинного обучения или предпочли бы выбрать Python? Поделитесь своим мнением в комментариях 👇
🐸 Библиотека шарписта
#междусобойчик
Когда речь идет о машинном обучении, обычно на ум приходит Python. Но C# с его мощной экосистемой и возможностями тоже может быть использован для решения задач машинного обучения.
Давайте разберемся, подходит ли C# для машинного обучения или всё-таки стоит обратить внимание на более традиционные инструменты.
Плюсы использования C# для машинного обучения:
• C# является частью экосистемы .NET, что даёт разработчикам доступ к множеству библиотек для работы с большими данными, многозадачностью и асинхронными операциями.
• Microsoft предлагает ML.NET — библиотеку, которая позволяет работать с алгоритмами машинного обучения в C#.
• C# известен своей высокой производительностью, благодаря чему можно эффективно обрабатывать большие объемы данных.
Минусы использования C# для машинного обучения:
• Хотя ML.NET предоставляет некоторые возможности, C# не имеет такого богатого выбора фреймворков и моделей, как Python.
• В интернете гораздо меньше примеров и документации по машинному обучению на C# по сравнению с Python
💬 Используете ли вы C# для машинного обучения или предпочли бы выбрать Python? Поделитесь своим мнением в комментариях 👇
#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍2
😎 Вы просили — мы сделали. Самый долгожданный анонс этого лета!
Мы открываем набор на второй поток курса «AI-агенты для DS-специалистов»!
На курсе мы учим главному навыку 2025 года: не просто «болтать» с LLM, а строить из них рабочие системы с помощью Ollama, RAG, LangChain и crew.ai.
📆 Старт потока — 15 сентября.
💸 Цена 49 000 ₽ действует только в эти выходные — до 17 августа. С понедельника будет дороже.
👉 Занять место
Мы открываем набор на второй поток курса «AI-агенты для DS-специалистов»!
На курсе мы учим главному навыку 2025 года: не просто «болтать» с LLM, а строить из них рабочие системы с помощью Ollama, RAG, LangChain и crew.ai.
📆 Старт потока — 15 сентября.
💸 Цена 49 000 ₽ действует только в эти выходные — до 17 августа. С понедельника будет дороже.
👉 Занять место
🥱9
📰 Дайджест новостей
Выловили из потока новостей только самое важное.
— Copilot теперь понимает код как человек
В обновлении Visual Studio 17.14.11 появился новый механизм поиска — Remote Semantic Search, интегрированный непосредственно в Copilot Chat. Теперь поиск кода выходит за рамки простого сопоставления ключевых слов.
— .NET 10 Preview 7 уже здесь
Microsoft представила .NET 10 Preview 7 — седьмой предварительный релиз, который включает обновления в .NET Runtime, SDK, библиотеках, ASP.NET Core, Blazor, .NET MAUI и других компонентах экосистемы.
— .NET задаёт новый темп в AI-интеграции
NuGet MCP Server — новый сервер в экосистеме .NET, позволяющий AI‑ассистентам (в частности, LLM) получать актуальную информацию о пакетах NuGet в режиме реального времени.
— GPT-5 теперь в Visual Studio
Microsoft объявила, что GPT‑5, последняя и наиболее продвинутая модель OpenAI, теперь доступна в GitHub Copilot внутри Visual Studio.
— Сколько вы реально стоите как разработчик
🐸 Библиотека шарписта
#свежак
Выловили из потока новостей только самое важное.
— Copilot теперь понимает код как человек
В обновлении Visual Studio 17.14.11 появился новый механизм поиска — Remote Semantic Search, интегрированный непосредственно в Copilot Chat. Теперь поиск кода выходит за рамки простого сопоставления ключевых слов.
— .NET 10 Preview 7 уже здесь
Microsoft представила .NET 10 Preview 7 — седьмой предварительный релиз, который включает обновления в .NET Runtime, SDK, библиотеках, ASP.NET Core, Blazor, .NET MAUI и других компонентах экосистемы.
— .NET задаёт новый темп в AI-интеграции
NuGet MCP Server — новый сервер в экосистеме .NET, позволяющий AI‑ассистентам (в частности, LLM) получать актуальную информацию о пакетах NuGet в режиме реального времени.
— GPT-5 теперь в Visual Studio
Microsoft объявила, что GPT‑5, последняя и наиболее продвинутая модель OpenAI, теперь доступна в GitHub Copilot внутри Visual Studio.
— Сколько вы реально стоите как разработчик
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1
Forwarded from Библиотека задач по C# | тесты, код, задания
Что из перечисленного является типом представления в MVC?
👾 — Partial view
👍 — Executable view
🥰 — Data view
⚡️ — Designer view
Библиотека задач по C#
👾 — Partial view
👍 — Executable view
🥰 — Data view
⚡️ — Designer view
Библиотека задач по C#
👾60🌚4😁1
🔆 Подборка вакансий для шарпистов
Developer .NET/C# — от 300 000 ₽, удалёнка.
Разработчик .NET/C# — удалёнка.
.NET Team Lead — удалёнка.
C# разработчик — удалёнка.
Разработчик C# (WPF, EF+SQL) — от 180 000 ₽, удалёнка.
Бустер — Удалённо (в любом городе мира).
➡️ Еще больше топовых вакансий — в нашем канале С# Jobs
Developer .NET/C# — от 300 000 ₽, удалёнка.
Разработчик .NET/C# — удалёнка.
.NET Team Lead — удалёнка.
C# разработчик — удалёнка.
Разработчик C# (WPF, EF+SQL) — от 180 000 ₽, удалёнка.
Бустер — Удалённо (в любом городе мира).
Please open Telegram to view this post
VIEW IN TELEGRAM
🫣 Хотите в Data Science, но боитесь высшей математики?
Хорошая новость: вам не нужно становиться математиком. Вам нужно освоить конкретные разделы, которые реально используются в работе и на собеседованиях.
Именно этому учат преподаватели ВМК МГУ на нашем курсе «Математика для Data Science».
Без лишней воды — только то, что нужно для:
✅ успешного поступления в ШАД Яндекса;
✅ прохождения собеседований уровня FAANG;
✅ глубокого понимания ML-алгоритмов.
Это самый прямой путь к математическому фундаменту, на котором строится вся карьера в Data Science.
👉 Начните строить свою карьеру уже сегодня
Хорошая новость: вам не нужно становиться математиком. Вам нужно освоить конкретные разделы, которые реально используются в работе и на собеседованиях.
Именно этому учат преподаватели ВМК МГУ на нашем курсе «Математика для Data Science».
Без лишней воды — только то, что нужно для:
✅ успешного поступления в ШАД Яндекса;
✅ прохождения собеседований уровня FAANG;
✅ глубокого понимания ML-алгоритмов.
Это самый прямой путь к математическому фундаменту, на котором строится вся карьера в Data Science.
👉 Начните строить свою карьеру уже сегодня
😁1
🔥 Последняя неделя, чтобы забрать курс по AI-агентам по старой цене!
Пока вы тестируете Copilot, другие уже учатся строить AI-агентов, которые реально работают на бизнес. Хватит отставать!
Наш курс — это концентрат практики по LangChain и RAG. Улучшенная версия, доработанная по отзывам первого потока.
📆 Старт — 15 сентября.
💸 Цена 49 000 ₽ — только до 24 августа.
👉 Зафиксировать цену
Пока вы тестируете Copilot, другие уже учатся строить AI-агентов, которые реально работают на бизнес. Хватит отставать!
Наш курс — это концентрат практики по LangChain и RAG. Улучшенная версия, доработанная по отзывам первого потока.
📆 Старт — 15 сентября.
💸 Цена 49 000 ₽ — только до 24 августа.
👉 Зафиксировать цену
😁2
🔍 Шпаргалка по рефлексии в C#
Рефлексия — это когда ты можешь во время выполнения программы подглядеть, что внутри класса, вызвать метод по имени или даже достучаться до приватного поля (немного читерства, но работает).
Получение типа:
Информация о типе:
Список методов:
Список свойств:
Создание экземпляра динамически:
Вызов метода через рефлексию:
Доступ к полю:
Доступ к приватному полю:
Вызов приватного метода:
Полезно для написания ORM, DI-контейнеров, сериализаторов.
🐸 Библиотека шарписта
#буст
Рефлексия — это когда ты можешь во время выполнения программы подглядеть, что внутри класса, вызвать метод по имени или даже достучаться до приватного поля (немного читерства, но работает).
Получение типа:
Type t = typeof(string); // по имени типа
Type t2 = "hello".GetType(); // у объекта
Type t3 = Type.GetType("System.Int32"); // по строке
Информация о типе:
Console.WriteLine(t.FullName); // полное имя типа
Console.WriteLine(t.Namespace); // пространство имён
Console.WriteLine(t.IsClass); // это класс?
Console.WriteLine(t.IsValueType); // это value-type?
Список методов:
foreach (var m in t.GetMethods())
{
Console.WriteLine(m.Name);
}
Список свойств:
foreach (var p in t.GetProperties())
{
Console.WriteLine($"{p.Name} : {p.PropertyType}");
}
Создание экземпляра динамически:
Type t = typeof(DateTime);
object obj = Activator.CreateInstance(t, 2025, 8, 19);
Console.WriteLine(obj);
Вызов метода через рефлексию:
Type t = typeof(string);
MethodInfo m = t.GetMethod("Contains", new[] { typeof(string) });
bool result = (bool)m.Invoke("ChatGPT", new object[] { "GPT" });
Console.WriteLine(result); // true
Доступ к полю:
class Person { public string Name = "Alice"; }
var p = new Person();
FieldInfo f = typeof(Person).GetField("Name");
Console.WriteLine(f.GetValue(p)); // Alice
f.SetValue(p, "Bob");
Console.WriteLine(p.Name); // Bob
Доступ к приватному полю:
class Secret { private int code = 1337; }
var s = new Secret();
FieldInfo f = typeof(Secret).GetField("code",
BindingFlags.NonPublic | BindingFlags.Instance);
Console.WriteLine(f.GetValue(s)); // 1337
Вызов приватного метода:
class Hidden { private void SayHi() => Console.WriteLine("Hi!"); }
var h = new Hidden();
MethodInfo m = typeof(Hidden).GetMethod("SayHi",
BindingFlags.NonPublic | BindingFlags.Instance);
m.Invoke(h, null); // Hi!
Полезно для написания ORM, DI-контейнеров, сериализаторов.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🥱3❤1🤔1👾1
🧑💻 Где большие зарплаты
Отчёты за первое полугодие 2025 года демонстрируют внушительные цифры — средние зарплаты переваливают за 190 тысяч рублей, а в отдельных ролях доходят до 400+.
Но на практике многие разработчики и тестировщики не чувствуют этого роста: требования растут быстрее, чем компенсации.
Почему на рынке возник «фантомный рост» и что ждёт отрасль дальше — читайте в статье.
🐸 Библиотека шарписта
Отчёты за первое полугодие 2025 года демонстрируют внушительные цифры — средние зарплаты переваливают за 190 тысяч рублей, а в отдельных ролях доходят до 400+.
Но на практике многие разработчики и тестировщики не чувствуют этого роста: требования растут быстрее, чем компенсации.
Почему на рынке возник «фантомный рост» и что ждёт отрасль дальше — читайте в статье.
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ Бесплатный вебинар — прогнозируем цены и не сходим с ума
21 августа в 19:00 МСК будет бесплатный вебинар с Марией Жаровой — экспертом в ML и Data Science.
Тема:
Подробности рассказываю в гс выше — включай, чтобы не пропустить.
21 августа в 19:00 МСК будет бесплатный вебинар с Марией Жаровой — экспертом в ML и Data Science.
Тема:
«Введение в машинное обучение: как спрогнозировать стоимость недвижимости».
Подробности рассказываю в гс выше — включай, чтобы не пропустить.
😁1🤔1
🐳 Как уменьшить размер контейнера
Приготовили два практичных профиля для запуска: минимальный размер для утилит и микросервисов без тяжёлой динамики, и быстрый старт для веб-API.
Никаких хаков — только поддерживаемые фичи .NET 8.
Рецепт 1 — Минимальный размер
Шаги:
• Включите тримминг и сборку в один файл.
• Соберите self-contained бинарь.
• Упакуйте в chiseled/runtime-deps образ.
csproj:
Dockerfile:
Важно: триммер удаляет неиспользуемый код. При рефлексии используйте атрибуты
Рецепт 2 — Быстрый старт
Шаги:
• Включите ReadyToRun.
• Соберите framework-dependent (меньше JIT при старте).
• Упакуйте в chiseled ASP.NET образ.
csproj:
Dockerfile:
Холодный старт:
Мини-усиление безопасности в Dockerfile:
Два профиля покрывают 80% кейсов: минимальный образ для утилит/микросервисов без тяжёлой динамики и быстрый старт для веб-API. Дальше — NativeAOT, если нужен экстремальный старт и размер.
🐸 Библиотека шарписта
#буст
Приготовили два практичных профиля для запуска: минимальный размер для утилит и микросервисов без тяжёлой динамики, и быстрый старт для веб-API.
Никаких хаков — только поддерживаемые фичи .NET 8.
Рецепт 1 — Минимальный размер
Шаги:
• Включите тримминг и сборку в один файл.
• Соберите self-contained бинарь.
• Упакуйте в chiseled/runtime-deps образ.
csproj:
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>linux-x64</RuntimeIdentifier>
<SelfContained>true</SelfContained>
<PublishSingleFile>true</PublishSingleFile>
<PublishTrimmed>true</PublishTrimmed>
<TrimMode>link</TrimMode>
<InvariantGlobalization>true</InvariantGlobalization>
<StripSymbols>true</StripSymbols>
</PropertyGroup>
Dockerfile:
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /out
FROM mcr.microsoft.com/dotnet/runtime-deps:8.0-jammy-chiseled AS final
WORKDIR /app
COPY --from=build /out ./
USER 10001
ENTRYPOINT ["./YourApp"] # self-contained бинарь
Важно: триммер удаляет неиспользуемый код. При рефлексии используйте атрибуты
DynamicallyAccessedMembers
, DynamicDependency
или дескриптор ILLink.Descriptors.xml. InvariantGlobalization=true
экономит место, но отключает локали ICU.Рецепт 2 — Быстрый старт
Шаги:
• Включите ReadyToRun.
• Соберите framework-dependent (меньше JIT при старте).
• Упакуйте в chiseled ASP.NET образ.
csproj:
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<PublishReadyToRun>true</PublishReadyToRun>
<RuntimeIdentifier>linux-x64</RuntimeIdentifier>
<SelfContained>false</SelfContained>
<StripSymbols>true</StripSymbols>
</PropertyGroup>
Dockerfile:
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /out
FROM mcr.microsoft.com/dotnet/aspnet:8.0-jammy-chiseled AS final
WORKDIR /app
COPY --from=build /out ./
USER 10001
ENTRYPOINT ["dotnet", "YourApp.dll"]
Холодный старт:
docker run -p 8080:8080 app:test &
curl -w '\nTime: %{time_total}s\n' -s http://localhost:8080/health/ready -o /dev/null
Мини-усиление безопасности в Dockerfile:
# после COPY и USER
VOLUME ["/app/data"]
ENV ASPNETCORE_URLS=http://0.0.0.0:8080
# файловая система только для чтения
READONLY rootfs
Два профиля покрывают 80% кейсов: минимальный образ для утилит/микросервисов без тяжёлой динамики и быстрый старт для веб-API. Дальше — NativeAOT, если нужен экстремальный старт и размер.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12😁2