Серия «101 игра на python. Шпаргалки»

8

Shadow DOM - DOM внутри DOM

Дисклеймер. На пикабу до сих пор не завезли редактор кода, поэтому картинки. Кому на нравятся картинки - при желании может почитать статью на GitHub


DOM — это программный интерфейс (API) для кода страницы, который представляет страницу как древовидную структуру объектов.

Каждый HTML-элемент (например, <p>, <div>, <img>), каждый атрибут и каждый фрагмент текста является отдельным «узлом» (node) в этом дереве. С JavaScript, мы можем обращаться к этим узлам, чтобы динамически изменять страницу: менять текст, добавлять стили, создавать новые элементы или удалять существующие. По сути, DOM — это «живая» модель документа, с которой взаимодействует код.

Но у этой открытости есть и обратная сторона. Когда мы создаем сложный, многократно используемый компонент (например, кастомный видеоплеер или виджет календаря), его внутренняя структура и стили становятся уязвимыми. Стили CSS с основной страницы могут случайно «протечь» внутрь компонента и сломать его внешний вид. Аналогично, JavaScript-код страницы может непреднамеренно изменить внутренние элементы компонента, нарушив его логику.

Для решения этой проблемы и существует Shadow DOM (теневой DOM).

По своей сути, Shadow DOM — это «DOM внутри DOM». Это скрытое дерево элементов, которое прикрепляется к обычному элементу на странице (называемому «хостом»), но при этом оно изолировано от основного DOM. Оно позволяет разработчику создать герметичную границу вокруг внутренней структуры компонента, защищая его от внешнего мира.

Теневой DOM позволяет прикреплять скрытые DOM-деревья к элементам в обычном DOM-дереве. Это теневое дерево начинается с теневого корня (shadow root), под который можно прикреплять любые элементы так же, как и в обычном DOM.

Shadow DOM - DOM внутри DOM Гайд, Программирование, IT, Frontend, Javascript, HTML, Веб-разработка, Длиннопост, Dom

https://developer.mozilla.org/

Существует несколько терминов, связанных с теневым DOM, которые следует знать:

  • Теневой хост (Shadow host): Обычный узел DOM, к которому прикреплен теневой DOM.

  • Теневое дерево (Shadow tree): DOM-дерево внутри теневого DOM.

  • Теневая граница (Shadow boundary): Место, где заканчивается теневой DOM и начинается обычный DOM.

  • Теневой корень (Shadow root): Корневой узел теневого дерева.

Вы можете воздействовать на узлы в теневом DOM точно так же, как и на обычные узлы. Разница в том, что никакой код внутри теневого DOM не может повлиять на что-либо за его пределами, что обеспечивает надёжную инкапсуляцию.

До того, как теневой DOM стал доступен веб-разработчикам, браузеры уже использовали его для инкапсуляции внутренней структуры стандартных элементов. Например, элемент <video> с элементами управления. Всё, что вы видите в DOM, — это тег <video>, но он содержит ряд кнопок и других элементов управления внутри своего теневого DOM.

Создание теневого DOM

Создавать теневой DOM можно двумя способами: императивно с помощью JavaScript или декларативно прямо в HTML.

Императивно с помощью JavaScript

Этот способ отлично подходит для приложений, рендерящихся на стороне клиента. Мы выбираем элемент-хост и вызываем на нём метод attachShadow().

Shadow DOM - DOM внутри DOM Гайд, Программирование, IT, Frontend, Javascript, HTML, Веб-разработка, Длиннопост, Dom
Shadow DOM - DOM внутри DOM Гайд, Программирование, IT, Frontend, Javascript, HTML, Веб-разработка, Длиннопост, Dom

Результат на странице будет выглядеть так:

Я нахожусь в теневом DOM Я не в теневом DOM

Декларативно с помощью HTML

Для приложений, где важен рендеринг на стороне сервера, можно определить теневой DOM декларативно, используя элемент <template> с атрибутом shadowrootmode.

Shadow DOM - DOM внутри DOM Гайд, Программирование, IT, Frontend, Javascript, HTML, Веб-разработка, Длиннопост, Dom

Когда браузер обработает этот код, он автоматически создаст теневой корень для <div> и поместит в него содержимое тега <template>. Сам тег <template> при этом исчезнет из основного DOM-дерева.

Инкапсуляция: защита от JavaScript и CSS

Главное преимущество Shadow DOM — это изоляция. Давайте посмотрим, как она работает.

Инкапсуляция от JavaScript

Добавим кнопку, которая будет пытаться изменить все элементы <span> на странице.

Shadow DOM - DOM внутри DOM Гайд, Программирование, IT, Frontend, Javascript, HTML, Веб-разработка, Длиннопост, Dom

При нажатии на кнопку текст изменится только у <span>, который находится в основном документе. Элемент внутри теневого DOM останется нетронутым, потому что document.querySelectorAll() не может "заглянуть" за теневую границу.

Доступ к теневому DOM: свойство shadowRoot и работа с вложенностью

Когда мы вызываем host.attachShadow({ mode: "open" }), мы создаём теневой DOM в "открытом" режиме. Это означает, что мы можем получить доступ к его содержимому извне через свойство host.shadowRoot.

Shadow DOM - DOM внутри DOM Гайд, Программирование, IT, Frontend, Javascript, HTML, Веб-разработка, Длиннопост, Dom

Если же указать mode: "closed", свойство host.shadowRoot вернёт null, и доступ к теневому дереву извне будет закрыт. Это не строгий механизм безопасности, а скорее соглашение для разработчиков о том, что внутренности компонента трогать не следует.

Работа с вложенными теневыми деревьями

В сложных компонентных архитектурах один пользовательский элемент может содержать внутри себя другие пользовательские элементы, каждый из которых имеет свой собственный Shadow DOM. Чтобы добраться до элемента в глубоко вложенном теневом дереве, придётся последовательно "проходить" через каждый shadowRoot.

Представим себе такую структуру:

  • Компонент <nmbrs-form> (основная форма).

  • Внутри него находится <div>, а в нём — компонент <nmbrs-button> (кастомная кнопка).

  • Внутри <nmbrs-button> находится настоящая HTML-кнопка <button>.

Чтобы получить доступ к этой кнопке из глобального контекста, путь будет выглядеть так:

Shadow DOM - DOM внутри DOM Гайд, Программирование, IT, Frontend, Javascript, HTML, Веб-разработка, Длиннопост, Dom

SВ виде одной цепочки вызовов это выглядит так:

Shadow DOM - DOM внутри DOM Гайд, Программирование, IT, Frontend, Javascript, HTML, Веб-разработка, Длиннопост, Dom

Такая длинная цепочка наглядно демонстрирует мощь инкапсуляции: чтобы добраться до внутренних деталей, нужно явно пройти через каждую "границу". Это делает код более предсказуемым и защищает компоненты от случайных изменений.

Инкапсуляция от CSS

Стили, определённые на основной странице, не влияют на элементы внутри теневого DOM.

Shadow DOM - DOM внутри DOM Гайд, Программирование, IT, Frontend, Javascript, HTML, Веб-разработка, Длиннопост, Dom

Элемент <span> внутри теневого дерева не получит эти стили. Это решает огромную проблему случайных пересечений и конфликтов CSS.

Применение стилей внутри теневого DOM

Стили, определённые внутри теневого дерева, в свою очередь, не влияют на основную страницу. Есть два основных способа их добавления.

1. Конструируемые таблицы стилей (Constructable Stylesheets)

Этот метод позволяет создавать объект CSSStyleSheet в JavaScript и применять его к одному или нескольким теневым деревьям. Это эффективно, если у вас есть общие стили для множества компонентов.

Shadow DOM - DOM внутри DOM Гайд, Программирование, IT, Frontend, Javascript, HTML, Веб-разработка, Длиннопост, Dom

2. Добавление элемента <style>

Простой и декларативный способ — поместить тег <style> прямо внутрь теневого дерева (часто внутри <template>).

Shadow DOM - DOM внутри DOM Гайд, Программирование, IT, Frontend, Javascript, HTML, Веб-разработка, Длиннопост, Dom

Теневой DOM и пользовательские элементы: идеальное сочетание

Вся мощь теневого DOM раскрывается при создании пользовательских элементов (Custom Elements). Без инкапсуляции они были бы невероятно хрупкими.

Пользовательский элемент — это класс, наследующий HTMLElement. Как правило, сам элемент выступает в роли теневого хоста, а вся его внутренняя структура создаётся внутри теневого дерева.

Вот пример простого компонента <filled-circle>:

Shadow DOM - DOM внутри DOM Гайд, Программирование, IT, Frontend, Javascript, HTML, Веб-разработка, Длиннопост, Dom

Теперь мы можем использовать его в HTML как обычный тег, не беспокоясь о его внутреннем устройстве:

Shadow DOM - DOM внутри DOM Гайд, Программирование, IT, Frontend, Javascript, HTML, Веб-разработка, Длиннопост, Dom

Каждый из этих компонентов будет полностью инкапсулирован и защищён от влияния внешней страницы.

Полезно? Подпишись.
Удачи 🚀

Показать полностью 13
33

Диагностика и восстановление дисков с помощью PowerShell

продолжение статьи Как проверить и исправить ошибки на жестком диске в Windows: шпаргалка по CHKDSK и PowerShell

Дисклеймер. На пикабу все еще не завезли редактор кода, поэтому такое убогое форматирование. Впрочем, вы можете читать статью на github


PowerShell позволяет автоматизировать проверки, выполнять удалённую диагностику и создавать гибкие скрипты для мониторинга. Это руководство проведёт вас от базовых проверок до глубокой диагностики и восстановления дисков.

Версия: Руководство актуально для Windows 10/11 и Windows Server 2016+.

Ключевые командлеты для работы с дисками

Основные командлеты

Диагностика и восстановление дисков с помощью PowerShell Powershell, Инструкция, Администрирование, Диагностика, IT, Длиннопост

Шаг 1: Базовая проверка состояния системы

Начните с общей оценки состояния дисковой подсистемы.

Просмотр всех подключенных дисков

Команда Get-Disk предоставляет сводную информацию о всех дисках, которые видит операционная система.

Get-Disk

Вы увидите таблицу с номерами дисков, их размерами, статусом (Online или Offline) и стилем разделов (MBR или GPT).

Пример: Найти все диски, которые находятся в офлайне.

Get-Disk | Where-Object IsOffline -eq $true

Проверка физического «здоровья» дисков

Командлет Get-PhysicalDisk обращается к состоянию самого оборудования.

Get-PhysicalDisk | Select-Object FriendlyName, MediaType, HealthStatus, OperationalStatus

Обратите особое внимание на поле HealthStatus. Оно может принимать значения:

  • Healthy: Диск в порядке.

  • Warning: Есть проблемы, требуется внимание (например, превышение порогов S.M.A.R.T.).

  • Unhealthy: Диск в критическом состоянии и может отказать.


Шаг 2: Анализ и восстановление логических томов

После проверки физического состояния переходим к логической структуре — томам и файловой системе.

Информация о логических томах

Команда Get-Volume показывает все смонтированные тома в системе.

Get-Volume | Format-Table DriveLetter, FileSystem, HealthStatus, SizeRemaining, Size

Ключевые поля:

  • DriveLetter — Буква тома (C, D и т.д.).

  • FileSystem — Тип файловой системы (NTFS, ReFS, FAT32).

  • HealthStatus — Состояние тома.

  • SizeRemaining и Size — Свободное и общее пространство.

Проверка и восстановление тома (аналог chkdsk)

Командлет Repair-Volume — это современная замена утилиты chkdsk.

1. Проверка тома без исправлений (только сканирование)

Этот режим безопасен для выполнения на работающей системе, он только ищет ошибки.

Repair-Volume -DriveLetter C -Scan

2. Полное сканирование и исправление ошибок

Этот режим является аналогом chkdsk C: /f. Он блокирует том на время работы, поэтому для системного диска потребуется перезагрузка.

Repair-Volume -DriveLetter C -OfflineScanAndFix

❗️ Важно: Если вы запускаете эту команду для системного диска (C:), PowerShell запланирует проверку при следующей загрузке системы. Чтобы запустить её немедленно, перезагрузите компьютер.

Пример: Автоматически проверить и исправить все тома, состояние которых отлично от Healthy.

Get-Volume | Where-Object {$_.HealthStatus -ne 'Healthy'} | ForEach-Object { Write-Host "Repairing volume $($_.DriveLetter)..." Repair-Volume -DriveLetter $_.DriveLetter -OfflineScanAndFix }


Шаг 3: Глубокая диагностика и S.M.A.R.T.

Если базовые проверки не выявили проблем, но подозрения остались, можно копнуть глубже.

Анализ системных журналов

Ошибки дисковой подсистемы часто фиксируются в системном журнале Windows.

Get-WinEvent -LogName System | Where-Object {$_.Message -like "*disk*"} | Select-Object -First 20

Для более точного поиска можно фильтровать по источнику события:

Get-WinEvent -ProviderName 'Microsoft-Windows-DiskDiagnostic' -MaxEvents 10

Проверка статуса S.M.A.R.T.

S.M.A.R.T. (Self-Monitoring, Analysis and Reporting Technology) — технология самодиагностики дисков. PowerShell позволяет получить эти данные.

Способ 1: Использование WMI (для совместимости)

Get-WmiObject -Namespace "root\wmi" -Class MSStorageDriver_FailurePredictStatus

Если PredictFailure = True, диск предсказывает скорый сбой. Это сигнал к немедленной замене.

Способ 2: Современный подход через CIM и Storage-модули

Более современный и подробный способ — использовать командлет Get-StorageReliabilityCounter.

Get-PhysicalDisk | Get-StorageReliabilityCounter | Select-Object PhysicalDisk, Wear, Temperature, ReadErrorsTotal, WriteErrorsTotal

Этот командлет предоставляет ценную информацию, такую как износ (актуально для SSD), температуру и количество ошибок чтения/записи.


Практические сценарии для системного администратора

Вот несколько готовых примеров для повседневных задач.

1. Получить краткий отчет о здоровье всех физических дисков.

Get-PhysicalDisk | Format-Table DeviceID, FriendlyName, MediaType, HealthStatus, OperationalStatus

2. Создать CSV-отчет о свободном месте на всех томах.

Диагностика и восстановление дисков с помощью PowerShell Powershell, Инструкция, Администрирование, Диагностика, IT, Длиннопост

3. Найти все разделы на конкретном диске (например, диске 0).

Get-Partition -DiskNumber 0

4. Запустить диагностику системного диска с последующей перезагрузкой.

Repair-Volume -DriveLetter C -OfflineScanAndFix Restart-Computer -Force

Полезно? Подпишись.

Удачи!

UPD:

Встречайте серию:

Философия PowerShell.

Показать полностью 1
10

Как проверить и исправить ошибки на жестком диске в Windows: шпаргалка по CHKDSK и PowerShell

Со временем на жестком диске или SSD могут накапливаться логические ошибки, появляться поврежденные сектора, что приводит к замедлению работы системы, сбоям программ и даже потере данных. К счастью, в Windows есть встроенные инструменты для диагностики и исправления таких проблем.

В этой шпаргалке я покажу два способа контроля состояний дисков: утилиту chkdsk и команды PowerShell.

Часть 1: Утилита CHKDSK

CHKDSK (Check Disk) — это стандартная утилита командной строки, которая проверяет файловую систему тома на наличие логических и физических ошибок.

Как запустить CHKDSK

Для выполнения команд, которые вносят изменения в систему, вам понадобятся права администратора.

  1. Нажмите Win + S или кнопку «Пуск».

  2. Введите cmd или «Командная строка».

  3. В результатах поиска щелкните правой кнопкой мыши по «Командная строка» и выберите «Запустить от имени администратора».

Основные параметры (ключи) CHKDSK

Команда имеет следующий синтаксис: chkdsk [диск:] [параметры]

Часто используемые параметры:

  • chkdsk C: Запускает проверку диска C: в режиме «только для чтения». Утилита сообщит о найденных ошибках, но не будет их исправлять.

  • /f Исправляет ошибки на диске. Если на диске есть открытые файлы (что почти всегда так для системного диска), утилита предложит выполнить проверку при следующей перезагрузке системы. Пример: chkdsk D: /f

  • /r Ищет поврежденные сектора (bad sectors) и пытается восстановить информацию, которую можно прочитать. Этот ключ включает в себя функциональность ключа /f, поэтому использовать их вместе необязательно, хотя и не является ошибкой. Проверка с /r занимает значительно больше времени. Пример: chkdsk D: /r

  • /x Принудительно отключает том перед проверкой, если это необходимо. Все открытые дескрипторы для этого диска станут недействительными. Этот ключ также включает в себя функциональность /f. Пример: chkdsk D: /x

  • /b (только для файловой системы NTFS) Выполняет повторную оценку поврежденных кластеров на диске. Этот ключ является самым полным, так как включает в себя функциональность /r. Пример: chkdsk C: /b

  • /scan (только для NTFS) Запускает онлайн-проверку тома. Это означает, что диск не нужно отключать, и вы можете продолжать работать в системе во время сканирования. Однако для исправления найденных проблем потребуется следующий ключ или перезагрузка. Пример: chkdsk C: /scan

  • /spotfix (только для NTFS) Выполняет точечное, очень быстрое исправление ошибок на томе. Требует отключения диска, как и ключ /f. Пример: chkdsk D: /spotfix

Примеры запуска CHKDSK

  • Быстрая проверка диска D: без исправления:

    chkdsk D:

  • Проверка и исправление ошибок на диске D:

    chkdsk D: /f

  • Полная проверка системного диска C: с поиском поврежденных секторов и их восстановлением:

    chkdsk C: /f /r

    или просто:

    chkdsk C: /r

Что делать, если диск используется?

При попытке запустить проверку с исправлением (/f или /r) для системного диска (обычно C:), вы увидите сообщение:

Невозможно выполнить команду CHKDSK, так как указанный том используется другим процессом. Следует ли выполнить проверку этого тома при следующей перезагрузке системы? (Y/N)

Нажмите клавишу Y, а затем Enter. Проверка будет запланирована и автоматически начнется при следующей перезагрузке компьютера.


Часть 2: Команды PowerShell

PowerShell — это оболочка автоматизации, которая предлагает современные и гибкие команды для управления системой.

Как запустить PowerShell

Как и в случае с командной строкой, вам понадобятся права администратора.

  1. Нажмите Win + S или кнопку «Пуск».

  2. Введите powershell.

  3. В результатах поиска щелкните правой кнопкой мыши по «Windows PowerShell» и выберите «Запустить от имени администратора».

Основная команда: Repair-Volume

В PowerShell для проверки и исправления дисков используется командлет Repair-Volume.

Сначала может быть полезно посмотреть список всех томов в системе с помощью команды:

Get-Volume

Основные параметры Repair-Volume

  • -DriveLetter Указывает букву диска, который нужно проверить.

  • -Scan Сканирует том на наличие ошибок и сообщает о них. Это аналог chkdsk без ключей. Пример: Repair-Volume -DriveLetter D -Scan

  • -SpotFix Выполняет быстрое онлайн-исправление без необходимости отключать том надолго. Аналог chkdsk /spotfix. Пример: Repair-Volume -DriveLetter D -SpotFix

  • -OfflineScanAndFix Выполняет полноценную проверку и исправление диска в автономном режиме. Это самый полный аналог команды chkdsk /f /r. Система попросит перезагрузку, если том используется. Пример: Repair-Volume -DriveLetter C -OfflineScanAndFix

Примеры PowerShell

  • Просканировать диск C: на наличие ошибок (без исправления):

    Repair-Volume -DriveLetter C -Scan

    Вы увидите результат в поле HealthStatus (например, Healthy или Needs-Repair).

  • Выполнить быстрое исправление для диска D:

    Repair-Volume -DriveLetter D -SpotFix

  • Запланировать полную проверку и исправление системного диска C: при следующей перезагрузке:

    Repair-Volume -DriveLetter C -OfflineScanAndFix

    PowerShell, как и chkdsk, уведомит вас о необходимости перезагрузки и запланирует задачу.

Для большинства пользователей результат работы chkdsk C: /r и Repair-Volume -DriveLetter C -OfflineScanAndFix будет одинаковым. Выбор зависит от ваших предпочтений и задач.

Важное замечание: Перед любыми серьезными операциями с диском, особенно если вы подозреваете наличие физических проблем, всегда создавайте резервную копию важных данных! Инструменты могут исправить ошибки, но не могут гарантировать 100% сохранность информации на поврежденном носителе.


У меня также есть шпаргалка по diskpart

подпишись, если интересно

Удачи!

UPD:

Продолжение поста с подробным описанием использования командлетов PowerShell

Показать полностью
17

Шпаргалка по использованию diskpart в Windows

diskpart — это встроенная в Windows утилита командной строки, которая позволяет управлять физическими и виртуальными дисками, разделами и томами. В отличие от графического интерфейса "Управление дисками", diskpart предоставляет больше гибкости и подходит для продвинутых операций, особенно при автоматизации, установке системы, работе в среде восстановления или с виртуальными дисками.

⚠️ Внимание: можно потерять данные

diskpart не спрашивает подтверждение. Одна неверная команда — и данные будут потеряны. Прежде чем выполнять какие-либо действия:

  • Сделайте резервную копию.

  • Убедитесь, что работаете с правильным диском.

  • Прочитайте команду до конца.

🏁 Как запустить diskpart

  1. Нажмите Win + S, введите cmd или powershell.

  2. Кликните правой кнопкой по найденной программе и выберите "Запуск от имени администратора".

  3. В командной строке введите:diskpart

Вы увидите приглашение:

DISKPART>

📋 Базовые команды и сценарии использования

🔍 1. Просмотр доступных дисков

list disk

Выводит список всех подключённых физических дисков.

Пример:

Диск 0 476 ГБ
Диск 1 32 ГБ

📌 2. Выбор нужного диска

select disk 1
Все последующие команды будут относиться к выбранному диску.

💣 3. Очистка содержимого диска

clean

Удаляет таблицы разделов. Быстро, но восстановление теоретически возможно.

clean all

Полная очистка с записью нулей во все сектора. Без возможности восстановления.

🧱 4. Создание нового раздела

create partition primary size=10240

Создаёт основной раздел на 10 ГБ.

Для GPT-дисков также можно создать:

create partition efi size=100
create partition msr size=128

🧼 5. Форматирование раздела

После создания раздела выберите его:

select partition 1

И выполните форматирование:

format fs=ntfs quick label="DATA"

Аргументы:

  • fs=: файловая система (ntfs, fat32, exfat)

  • quick: быстрое форматирование

  • label=: имя (метка) тома

🔤 6. Присвоение или удаление буквы диска

assign letter=E

Присваивает букву E: выбранному тому.

remove letter=E

Удаляет букву — том останется, но без точки монтирования.

🟢 7. Установка активного раздела (MBR-диски)

active

Нужно для загрузки Windows с раздела на BIOS/MBR-дисках.

❌ 8. Удаление раздела

delete partition

Удаляет выбранный раздел.

Если это системный/защищённый раздел:

delete partition override

🔁 9. Преобразование таблицы разделов (MBR ↔ GPT)

Работает только на пустом (clean) диске.

convert gpt
convert mbr

📦 10. Работа с виртуальными дисками (VHD/VHDX)

create vdisk file="C:\vhd\test.vhd" maximum=10240 type=expandable
select vdisk file="C:\vhd\test.vhd"
attach vdisk
create partition primary
format fs=ntfs quick
assign letter=V
detach vdisk

Это удобно для тестирования, резервного копирования или шифрования.

🧪 Пример полного сценария: подготовка нового диска

list disk
select disk 1
clean
convert gpt
create partition primary
format fs=ntfs quick label="Storage"
assign letter=E

🧠 Советы

  • 💾 Сначала всегда используйте list disk, чтобы точно знать, с каким диском вы работаете.

  • 🔒 Никогда не запускайте clean без полной уверенности.

  • 📁 Используйте assign и remove для временного монтирования/отключения разделов.

  • 🛠️ Для ручной настройки загрузочной флешки — create partition primary, active, format, assign.

Показать полностью
7

Обновляем форк GitHub через PowerShell — от нуля до автоматизации

Как поддерживать свой форк в актуальном состоянии не тратя на это кучу времени?

В этой статье я покажу, как легко обновить ваш форк на GitHub с помощью PowerShell. В результате вы получите инструмент, который:

  • Работает с любой активной веткой вашего форка.

  • Автоматически подтягивает свежие изменения из upstream репозитория.

  • Выполняет rebase для чистоты истории коммитов.

  • Принудительно отправляет (push --force) обновленную ветку в ваш форк (origin).

  • И даже показывает наглядные уведомления о ходе процесса в Windows!

✅ Подготовка

Перед началом:

  • Убедитесь, что в вашем репозитории добавлен upstream на ОРИГИНАЛЬНЫЙ репозиторий:

Обновляем форк GitHub через PowerShell — от нуля до автоматизации Гайд, Программирование, Git, Powershell, Длиннопост

(Замените URL на актуальный для вашего проекта)

  • Установите модуль уведомлений [BurntToast], чтобы получать уведомления о процессе (полезно при автоматизации):

Обновляем форк GitHub через PowerShell — от нуля до автоматизации Гайд, Программирование, Git, Powershell, Длиннопост

Часть 1: Обновление форка командами в PowerShell (ручной способ)

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

  • Перейти в директорию репозитория (если вы еще не там):

Обновляем форк GitHub через PowerShell — от нуля до автоматизации Гайд, Программирование, Git, Powershell, Длиннопост
  • Определить текущую ветку:

Обновляем форк GitHub через PowerShell — от нуля до автоматизации Гайд, Программирование, Git, Powershell, Длиннопост
  • Получить изменения из upstream:

Обновляем форк GitHub через PowerShell — от нуля до автоматизации Гайд, Программирование, Git, Powershell, Длиннопост
  • Сделать rebase текущей ветки на основе аналогичной ветки из upstream:

Обновляем форк GitHub через PowerShell — от нуля до автоматизации Гайд, Программирование, Git, Powershell, Длиннопост
  • Обработка конфликтов (если возникли): Если git rebase сообщает о конфликтах:Откройте файлы с конфликтами в редакторе и разрешите их.
    Добавьте исправленные файлы: git add .
    Продолжите rebase: git rebase --continue
    (Или пропустить: git rebase --skip, или отменить: git rebase --abort)

  • Принудительно запушить изменения в origin (ваш форк на GitHub):

Обновляем форк GitHub через PowerShell — от нуля до автоматизации Гайд, Программирование, Git, Powershell, Длиннопост

Внимание: git push --force перезаписывает историю в удаленной ветке. Используйте с осторожностью, особенно если над веткой работают другие люди.

  • (Опционально) Показать уведомление:

Обновляем форк GitHub через PowerShell — от нуля до автоматизации Гайд, Программирование, Git, Powershell, Длиннопост

Теперь, когда мы понимаем основные шаги, автоматизируем их с помощью функции.

Часть 2: Создание PowerShell-функции Update-Fork

Соберем все команды в удобную функцию.

🧩 Шаг 1. Функция переходит в нужную директорию и определяет текущую ветку:

Обновляем форк GitHub через PowerShell — от нуля до автоматизации Гайд, Программирование, Git, Powershell, Длиннопост
  • param(...): Позволяет передавать путь к репозиторию или использовать текущий.

  • Import-Module BurntToast: Загружает модуль для уведомлений.

  • Set-Location: Переходит в нужную директорию.

  • git rev-parse --abbrev-ref HEAD: Получает имя текущей ветки.

🔁 Шаг 2: Добавим fetch и rebase

Подтянем изменения и сделаем rebase. Добавьте этот блок внутри функции Update-Fork, после определения $currentBranch:

Обновляем форк GitHub через PowerShell — от нуля до автоматизации Гайд, Программирование, Git, Powershell, Длиннопост
  • git fetch upstream: Загружает изменения из upstream.

  • git rebase "upstream/$currentBranch": Перемещает ваши локальные коммиты поверх последних изменений из upstream.

⚠️ Шаг 3: Обработка конфликтов

Если rebase не проходит чисто, PowerShell поможет разобраться. Добавьте этот блок после git rebase ...:

Обновляем форк GitHub через PowerShell — от нуля до автоматизации Гайд, Программирование, Git, Powershell, Длиннопост
  • Этот блок предлагает варианты действий при возникновении конфликтов во время rebase.

🚀 Шаг 4: Push и уведомление

В конце запушим изменения с --force и покажем результат. Добавьте этот блок в конец функции:

Обновляем форк GitHub через PowerShell — от нуля до автоматизации Гайд, Программирование, Git, Powershell, Длиннопост
  • Перед push проверяем, не остался ли rebase в незавершенном состоянии.

🧩 Финальная версия функции:

полный код функции Update-Fork большая простыня, поэтому ссылка на github

💡 Как запускать функцию

Вы можете использовать Update-Fork несколькими способами:

1. Вручную в текущей сессии PowerShell

Скопируйте весь код функции (из "Финальная версия функции") и вставьте его прямо в окно PowerShell. PowerShell поддерживает многострочную вставку. После этого вы сможете вызвать функцию:

Обновляем форк GitHub через PowerShell — от нуля до автоматизации Гайд, Программирование, Git, Powershell, Длиннопост

Или, если вы находитесь в другой директории, укажите путь к вашему форку:

Обновляем форк GitHub через PowerShell — от нуля до автоматизации Гайд, Программирование, Git, Powershell, Длиннопост

Этот способ подходит для разового использования, так как при закрытии сессии PowerShell функция будет забыта. 😒

2. 🛠️ Добавить функцию Update-Fork в профиль PowerShell

Это самый удобный способ, так как он сделает функцию Update-Fork доступной в любой новой сессии PowerShell без необходимости каждый раз копировать код.

Профиль PowerShell – это специальный скрипт (.ps1 файл), который автоматически выполняется при каждом запуске PowerShell.

📂 Через Notepad

✅ Шаг 1. Откройте PowerShell

  • Нажмите Win + R, введите powershell, нажмите Enter.

  • Или откройте PowerShell через меню Пуск.

📄 Шаг 2. Выполните команду для открытия файла профиля в Блокноте:

Обновляем форк GitHub через PowerShell — от нуля до автоматизации Гайд, Программирование, Git, Powershell, Длиннопост

🔍 Что это за команда?

  • $PROFILE — это специальная переменная PowerShell, которая содержит путь к вашему пользовательскому файлу конфигурации. Обычно это что-то вроде C:\Users\<ВашеИмяПользователя>\Documents\PowerShell\Microsoft.PowerShell_profile.ps1.

  • notepad — команда для запуска Блокнота с указанным файлом.

🧾 Что делать, если файл не существует?

Если вы увидите сообщение вида:

Обновляем форк GitHub через PowerShell — от нуля до автоматизации Гайд, Программирование, Git, Powershell, Длиннопост

— смело нажимайте "Да". PowerShell создаст для вас пустой файл профиля.

✏️ Шаг 3. Вставьте код функции

Скопируйте весь текст финальной версии функции Update-Fork (приведен выше) и вставьте его в открывшийся файл в Блокноте.

💾 Шаг 4. Сохраните и закройте

  • В Блокноте выберите "Файл" -> "Сохранить" (или нажмите Ctrl+S).

  • Закройте Блокнот.

🔄 Шаг 5. Перезапустите PowerShell

  • Закройте текущее окно PowerShell.

  • Откройте новое окно PowerShell.

Теперь функция Update-Fork должна быть доступна. Вы можете проверить это, выполнив:

Обновляем форк GitHub через PowerShell — от нуля до автоматизации Гайд, Программирование, Git, Powershell, Длиннопост

Если команда найдена, вы всё сделали правильно! 🎉 Теперь вы можете вызывать Update-Fork в любом репозитории.

💡 Альтернатива: Редактирование профиля через VS Code

Если вы используете Visual Studio Code (VS Code), редактировать профиль в нем может быть удобнее благодаря подсветке синтаксиса и другим функциям.

✅ Шаг 1. Убедитесь, что установлено расширение PowerShell

  1. Откройте VS Code.

  2. Перейдите на вкладку Extensions (Расширения) — иконка с квадратиками на боковой панели или Ctrl+Shift+X.

  3. В поиске введите PowerShell.

  4. Установите расширение PowerShell от Microsoft, если оно еще не установлено.

📝 Шаг 2. Откройте профиль PowerShell в VS Code

В терминале PowerShell (можно прямо в интегрированном терминале VS Code) выполните команду:

Обновляем форк GitHub через PowerShell — от нуля до автоматизации Гайд, Программирование, Git, Powershell, Длиннопост

🔍 Что происходит?

  • $PROFILE указывает на ваш файл профиля PowerShell.

  • code — это команда для запуска VS Code с указанным файлом.

📌 Если команда code не распознаётся: Это означает, что VS Code не добавлен в системную переменную PATH. Чтобы это исправить:

  1. Откройте VS Code.

  2. Нажмите Ctrl+Shift+P (или F1) чтобы открыть палитру команд.

  3. Начните вводить: Shell Command: Install 'code' command in PATH

  4. Выберите эту команду и выполните ее. Возможно, потребуется перезапустить терминал или систему.

✏️ Шаг 3. Вставьте код функции

Скопируйте полный текст финальной версии функции Update-Fork и вставьте его в открытый файл profile.ps1 в VS Code.

💾 Шаг 4. Сохраните и закройте

  • Сохраните файл в VS Code (Ctrl+S).

  • Можете закрыть VS Code или оставить открытым.

🔄 Шаг 5. Перезапустите PowerShell

  • Закройте все сессии PowerShell.

  • Откройте новую сессию PowerShell.

Теперь функция Update-Fork будет доступна. Проверьте, вызвав Update-Fork в вашем репозитории.

Если возникнут сложности с поиском профиля, команда $PROFILE в PowerShell всегда покажет точный путь. В зависимости от версии PowerShell и настроек системы, $PROFILE может указывать на разные файлы (например, profile.ps1 для всех хостов или специфичный для консоли).

3. Как отдельный .ps1-файл

  1. Сохраните полный код функции Update-Fork в файл, например, MyUpdateForkScript.ps1.

  2. Чтобы использовать функцию, вам нужно сначала "загрузить" этот файл в текущую сессию PowerShell (это называется "dot-sourcing"), а затем вызвать саму функцию:

Обновляем форк GitHub через PowerShell — от нуля до автоматизации Гайд, Программирование, Git, Powershell, Длиннопост

Или, если вы находитесь в директории со скриптом, а форк в другом месте:

Обновляем форк GitHub через PowerShell — от нуля до автоматизации Гайд, Программирование, Git, Powershell, Длиннопост
  1. Этот метод требует выполнения команды . .\MyUpdateForkScript.ps1 в каждой новой сессии, где вы хотите использовать функцию.

Готово! Теперь вы можете синхронизировать ваш форк с оригиналом одной командой Update-Fork.

Оригинал статьи на GitHub

Показать полностью 18
3

Демонстрация работы формулы softmax с разной температурой

Шпаргалка демонстрирует работу формулы softmax с разной температурой (`τ`).

Возьмем простой набор "оценок" (логитов) для трех классов и посмотрим, как меняются вероятности при изменении температуры.

Демонстрация работы формулы softmax с разной температурой Python, Гайд, Длиннопост

Функция softmax

Демонстрация работы формулы softmax с разной температурой Python, Гайд, Длиннопост

Вычисления

Демонстрация работы формулы softmax с разной температурой Python, Гайд, Длиннопост

Визуализация результатов

Демонстрация работы формулы softmax с разной температурой Python, Гайд, Длиннопост

Пример наглядно показывает, как параметр температуры τ позволяет контролировать "уверенность" или "случайность" выбора в функции softmax.

  • argmax (сокращение от "arguments of the maximum", аргументы максимума) — это математическая операция, которая находит аргумент (то есть входное значение или индекс), при котором функция или набор значений достигает своего максимума.

Проще говоря:

  • max находит само максимальное значение.

  • argmax находит позицию (индекс) или входное значение, где это максимальное значение находится.

Примеры:

  1. Набор чисел: Пусть у нас есть массив чисел: A = [10, 50, 20, 40]
    max(A) вернет 50 (само максимальное значение).
    argmax(A) вернет 1 (индекс элемента 50, если считать с 0: 10 - индекс 0, 50 - индекс 1, 20 - индекс 2, 40 - индекс 3).

  2. Функция: Пусть есть функция f(x) = -(x - 2)^2 + 10. Эта парабола имеет вершину в точке x=2, где значение функции равно 10.
    Максимальное значение функции max(f(x)) равно 10.
    argmax(f(x)) равен 2 (значение x, при котором функция f(x) максимальна).

В контексте классификации с помощью нейронных сетей и функции softmax:

  1. Модель на выходе обычно выдает "логиты" (оценки) для каждого класса.

  2. Функция softmax преобразует эти логиты в вероятности (числа от 0 до 1, сумма которых равна 1).

  3. Чтобы принять окончательное решение о том, к какому классу относится входной объект, мы обычно выбираем класс с наибольшей вероятностью.

  4. Операция argmax, примененная к массиву вероятностей softmax, вернет индекс класса, у которого самая высокая вероятность.

Пример с Softmax:

  • Логиты: [3.0, 1.0, 0.2]

  • Вероятности после softmax (при T=1): [0.839, 0.114, 0.047] (примерно)

  • Применяем argmax к вероятностям [0.839, 0.114, 0.047].

  • Результат argmax: 0 (потому что максимальное значение 0.839 находится на позиции с индексом 0). Это означает, что модель выбирает первый класс.

При очень низкой температуре (τ → 0) функция softmax приближается к argmax по исходным логитам, так как почти вся вероятность концентрируется на элементе с максимальным логитом.

Семействo функций и операций, связанных с поиском максимальных/минимальных значений

  1. Max (Максимум): Находит и возвращает самое большое значение из набора чисел или значений функции. Пример: max([10, 50, 20, 40]) вернет 50.
    Назначение: Просто найти пиковое значение.

  2. Min (Минимум): Находит и возвращает самое маленькое значение из набора чисел или значений функции. Пример: min([10, 50, 20, 40]) вернет 10.
    Назначение: Найти наименьшее значение, часто используется в функциях потерь (мы хотим минимизировать ошибку).

  3. Argmax (Аргумент максимума): Находит и возвращает индекс (позицию) или входное значение (аргумент), при котором достигается максимальное значение. Не само значение, а его "адрес". Пример: argmax([10, 50, 20, 40]) вернет 1 (индекс элемента 50, если считать с 0). Назначение: Узнать, какой элемент является максимальным. В классификации — узнать индекс класса с наибольшей вероятностью/оценкой.

  4. Argmin (Аргумент минимума): Находит и возвращает индекс (позицию) или входное значение (аргумент), при котором достигается минимальное значение. Пример: argmin([10, 50, 20, 40]) вернет 0 (индекс элемента 10). Назначение: Узнать, какой элемент является минимальным. Например, найти параметр, минимизирующий функцию потерь.

  5. Softmax: Преобразует вектор действительных чисел (логитов) в вектор вероятностей. Каждое выходное значение находится в диапазоне (0, 1), и их сумма равна 1. Большие входные значения получают большие вероятности. Это "мягкая", дифференцируемая версия argmax. Пример: softmax([3.0, 1.0, 0.2]) вернет примерно [0.839, 0.114, 0.047]. Назначение: Получение вероятностного распределения по классам в задачах классификации, используется в механизмах внимания, при генерации текста для выбора следующего слова. Ключевое свойство — дифференцируемость, что позволяет использовать ее в градиентных методах обучения.

  6. LogSoftmax: Применяет логарифм к результату softmax. То есть log(softmax(x)). Пример: log_softmax([3.0, 1.0, 0.2]) вернет примерно [-0.175, -2.175, -3.05]. Назначение: Часто используется в связке с функциями потерь, такими как NLLLoss (Negative Log Likelihood Loss). Вычисление log_softmax напрямую часто более численно стабильно, чем вычисление softmax, а затем взятие логарифма, особенно когда вероятности близки к 0. log(softmax(x)) = x - log(sum(exp(x))) — это позволяет избежать вычисления exp(x), которое может привести к очень большим или очень маленьким числам.

  7. Hardmax: Неформальный термин для операции, которая строго преобразует вектор в "one-hot" вектор, где элемент, соответствующий максимальному значению исходного вектора, становится 1, а все остальные — 0. По сути, это представление результата argmax в виде вектора. Пример: "Hardmax" от [3.0, 1.0, 0.2] будет [1, 0, 0]. Назначение: Теоретическое сравнение с softmax. softmax — это гладкая аппроксимация "hardmax". "Hardmax" не дифференцируема в точках, где есть несколько одинаковых максимумов, и ее градиент равен нулю почти везде, что делает ее непригодной для обучения с помощью градиентного спуска.

  • max/min и argmax/argmin дают точные, но "жесткие" ответы, в то время как

  • softmax предоставляет "мягкую", вероятностную и дифференцируемую альтернативу argmax.

Ссылка на блокнот 👉 https://colab.research.google.com/github/hypo69/1001-python-...

Удачи!

Показать полностью 4
2

Fine Tuning для модели, как и когда делать

Файн-тюнинг стоит делать не "как можно чаще", а когда это действительно необходимо и оправдано с точки зрения наличия новых данных, ожидаемого улучшения качества и затрат ресурсов (времени и денег). Вместо частого файн-тюнинга на малых объемах данных иногда эффективнее использовать другие подходы, например, Retrieval-Augmented Generation (RAG), где модель получает актуальную информацию в момент запроса из внешней базы знаний. Технически, нет строгих ограничений со стороны платформ (как Google Vertex AI, например) на то, как часто вы можете запускать процесс файн-тюнинга (fine-tuning), кроме общих квот на использование ресурсов и вашего бюджета. Вы можете запустить новый процесс файн-тюнинга хоть через час после предыдущего, если есть такая необходимость и ресурсы.

Однако, с практической точки зрения, частота файн-тюнинга определяется следующими факторами:

  1. Наличие новых данных: Самая главная причина для повторного файн-тюнинга – появление значительного объема новых, качественных данных, которые могут улучшить производительность модели для вашей задачи. Файн-тюнинг на небольшом количестве новых данных может не дать заметного эффекта или даже ухудшить модель (переобучение на новых данных).

  2. Стоимость: Каждый процесс файн-тюнинга требует вычислительных ресурсов (GPU/TPU) и, соответственно, стоит денег. Частый файн-тюнинг может быть весьма затратным.

  3. Время: Процесс файн-тюнинга занимает время – от часов до дней, в зависимости от размера модели, объема данных и конфигурации. Плюс время на подготовку данных и оценку результата.

  4. Необходимость: Действительно ли нужно обновлять модель?Изменилась ли задача, для которой вы используете модель?
    Ухудшилось ли качество ответов существующей дообученной модели со временем (например, из-за изменений во внешнем мире, которые отражены в новых данных)?
    Даст ли добавление новых данных ощутимый прирост качества, оправдывающий затраты?

  5. Оценка (Evaluation): После каждого файн-тюнинга необходимо проводить тщательную оценку модели на тестовом наборе данных, чтобы убедиться, что новая версия действительно лучше предыдущей и не произошло "катастрофического забывания" (когда модель ухудшает свои способности в областях, на которых ее не дообучали в этот раз).

Когда обычно делают повторный файн-тюнинг:

  • При накоплении существенного блока новых релевантных данных (например, данные за последний квартал, месяц и т.д.).

  • При значительных изменениях в предметной области или требованиях к задаче.

  • Когда мониторинг производительности показывает заметное снижение качества текущей модели.

  • Периодически (например, раз в квартал или полгода), если данные поступают непрерывно и есть бюджет/ресурсы на поддержание модели в актуальном состоянии.

Структура файла для файн-тюнинга (fine-tuning) зависит от платформы, которую вы используете (например, Google Vertex AI, OpenAI API, Hugging Face, etc.) и типа задачи, для которой вы дообучаете модель.

Однако, наиболее распространенным форматом является JSON Lines (JSONL). В этом формате каждая строка файла представляет собой отдельный, валидный JSON-объект, содержащий один пример для обучения.

Общая идея структуры для генеративных моделей (как Gemini):

Каждый JSON-объект (каждая строка в файле .jsonl) обычно содержит пары "вход" -> "ожидаемый выход".

Примеры форматов данных для файн-тюнинга:

1. Задачи инструктивного типа / чата / вопрос-ответ:

  • Вариант 1 (Простой):

Fine Tuning для модели, как и когда делать Программирование, Инструкция, IT, Длиннопост
  • Вариант 2 (Более структурированный, для чатов):

Fine Tuning для модели, как и когда делать Программирование, Инструкция, IT, Длиннопост

2. Задачи генерации текста (продолжение текста):

  • Вариант 1 (Объединенный):

Fine Tuning для модели, как и когда делать Программирование, Инструкция, IT, Длиннопост
  • Вариант 2 (Префикс/Продолжение):

Fine Tuning для модели, как и когда делать Программирование, Инструкция, IT, Длиннопост

3. Задачи классификации:

Fine Tuning для модели, как и когда делать Программирование, Инструкция, IT, Длиннопост

Важные моменты:

  1. Обязательно смотрите документацию той платформы, где вы проводите файн-тюнинг! Названия полей (input_text, output_text, prompt, completion, text, label и т.д.) могут отличаться. Например, Google Vertex AI часто использует input_text и output_text для supervised tuning.

  2. Формат Файла: Убедитесь, что это именно JSON Lines (.jsonl), а не обычный JSON-массив. Каждая строка - отдельный JSON.

  3. Кодировка: Обычно требуется UTF-8.

  4. Самое важное – это качество и релевантность ваших данных. Они должны быть чистыми, точными и соответствовать той задаче, которую вы хотите, чтобы модель решала.

  5. Размер Данных: Количество примеров влияет на качество файн-тюнинга. Обычно требуются сотни или тысячи примеров, в зависимости от сложности задачи и модели.

Пример файла my_finetuning_data.jsonl для Google Vertex AI (инструктивный тюнинг):

Fine Tuning для модели, как и когда делать Программирование, Инструкция, IT, Длиннопост
Показать полностью 6
10

Как обойти ошибку SSLCertVerificationError при использовании requests в Python и работать с сертификатами

Ошибка SSLCertVerificationError часто возникает при попытке установить соединение с HTTPS-сервером. Это происходит, когда Python не может проверить подлинность SSL-сертификата сайта. Причины могут быть разными: отсутствующие корневые сертификаты, проблемы с сертификатом на сервере или неправильная настройка клиента.

В этой статье я рассмотрю способы обхода этой ошибки, и покажу, что такое SSL-сертификаты и как работать с ними, используя различные инструменты.

🔍 Что такое SSL-сертификат и зачем он нужен?

SSL (Secure Sockets Layer) — это протокол безопасности, который обеспечивает защищённую передачу данных между клиентом и сервером. Он используется для шифрования данных и подтверждения подлинности сервера.

💡 Пример: Алиса и Борис

Представьте, что Алиса хочет отправить Борису важное сообщение, но боится, что кто-то может перехватить его. Для того чтобы удостовериться, что сообщение дошло именно до Бориса, она решает использовать шифрование с сертификатами.

  • Алиса: она знает, что только Борис может расшифровать сообщение, потому что у него есть приватный ключ.

  • Борис: он подтверждает свою личность с помощью сертификата, который содержит его публичный ключ. Этот сертификат выдан надёжным центром сертификации, который гарантирует, что Борис действительно является тем, за кого себя выдает.

SSL-сертификат — это как удостоверение личности для веб-сайта, которое помогает избежать MITM-атак (атака «человек посередине») и обеспечивает безопасность передачи данных.

🛠 Способы решения ошибки SSLCertVerificationError

✅ Способ 1: Отключение проверки SSL (не рекомендуется для продакшн-среды)

Наиболее быстрый способ обойти ошибку — это отключить проверку сертификата. Это удобно, когда вы работаете с локальными серверами или сайтами, которым доверяете. Однако важно помнить, что это небезопасное решение.

Как обойти ошибку SSLCertVerificationError при использовании requests в Python и работать с сертификатами Гайд, Python, Инструкция, Программирование, Ssl, Длиннопост

⚠️ Важно: Использовать verify=False стоит только для доверенных источников и в локальной разработке. В продакшн-средах лучше избегать этого метода.

✅ Способ 2: Установка корневых сертификатов (перманентное решение для Windows)

Если вы используете Windows и у вас отсутствуют корневые сертификаты, вы можете установить их вручную. Это решение обеспечит, чтобы библиотека requests могла корректно проверять сертификаты на всех веб-сайтах.

Инструкция для Windows:

  1. Перейдите в папку установки Python. Например:C:\Users\<твой_пользователь>\AppData\Local\Programs\Python\Python312\

  2. Запустите файл Install Certificates.command (или install_certificates.bat, в зависимости от версии Python).

Это действие установит необходимые корневые сертификаты для вашего Python.

✅ Способ 3: Использование библиотеки certifi

Для того чтобы гарантировать корректную проверку SSL-сертификатов, можно использовать библиотеку certifi, которая поставляется с актуальными корневыми сертификатами.

Как обойти ошибку SSLCertVerificationError при использовании requests в Python и работать с сертификатами Гайд, Python, Инструкция, Программирование, Ssl, Длиннопост

Этот способ более безопасен, чем отключение проверки SSL, и является хорошей альтернативой для тех, кто не хочет вручную устанавливать сертификаты.

🛠 Как создать SSL-сертификат на Windows?

Для тестирования и локальной разработки можно использовать самоподписанные сертификаты. Мы рассмотрим два способа их создания: через PowerShell и через командную строку (CMD).

🧰 Способ 1: Создание самоподписанного сертификата через PowerShell

PowerShell позволяет быстро создать самоподписанный SSL-сертификат. Вот пример команды:

Как обойти ошибку SSLCertVerificationError при использовании requests в Python и работать с сертификатами Гайд, Python, Инструкция, Программирование, Ssl, Длиннопост

Экспорт сертификата и ключа:

Как обойти ошибку SSLCertVerificationError при использовании requests в Python и работать с сертификатами Гайд, Python, Инструкция, Программирование, Ssl, Длиннопост

Вы можете использовать эти сертификаты для тестирования локальных серверов.

🧰 Способ 2: Создание сертификата через командную строку (CMD) с помощью openssl

Если у вас установлен OpenSSL, вы можете использовать его для создания сертификатов через командную строку.

  1. Создание самоподписанного сертификата:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout localhost.key -out localhost.crt -subj "/CN=localhost"

  1. Экспорт сертификата в формат PFX:

openssl pkcs12 -export -out localhost.pfx -inkey localhost.key -in localhost.crt -passout pass:P@ssw0rd123

  1. Если у вас нет OpenSSL, можно использовать makecert.exe:

makecert -r -pe -n "CN=localhost" -b 01/01/2023 -e 01/01/2030 -sky exchange -sv localhost.pvk localhost.cer
pvk2pfx -pvk localhost.pvk -spc localhost.cer -pfx localhost.pfx

Статья на github 👉 https://github.com/hypo69/1001-python-ru/blob/master/articles/ssl_sertifiactes_in_python/ssl_sertifiactes_in_python.md

Удачной разработки, лёгкого кодинга и никаких SSLError! 💻✨🐍

Показать полностью 4
Отличная работа, все прочитано!