Задать вопрос
  • 404я при попытки авторизоваться через шторм в github. Как исправить?

    Эта 404 ошибка возникает из-за бага встроенного OAuth-скрипта в старых версиях IDE. Решается за минуту через ручной выпуск классического токена.

    Как исправить:
    1. На GitHub зайдите в Settings -> Developer settings -> Personal access tokens (classic) -> Generate new token (classic).
    2. Дайте ему имя, обязательно отметьте галочками права repo, gist и read:org, после чего нажмите Generate и скопируйте сам токен.
    3. В PhpStorm перейдите в Settings -> Version Control -> GitHub, удалите старую зависшую учетку (через минус), нажмите «Плюс» -> Log In with Token и вставьте скопированный ключ.

    Связь сразу поднимется в обход забагованной браузерной авторизации.
  • Как понять, что конструктор нормально подходит именно под большой сайт?

    Принцип Дженги — это классика стартапов.
    На самом деле, такая схема часто оправдана как временный MVP для проверки гипотез отдела маркетинга. Затащить тысячи позиций по API в готовый шаблон можно за пару дней, чтобы быстро откатать спрос.
    Но если бизнес оставляет эту конструкцию на постоянку в проде и пытается поверх нее строить сложную сквозную аналитику — тогда да, вся эта башня гарантированно рухнет от любого чиха.
  • Как успешно подключить виртуальную машину hackthebox academy?

    Скорее всего, дело в блокировке стандартных UDP-портов вашим провайдером или неверном размере пакета (MTU), из-за чего соединение зависает прямо перед авторизацией.

    Попробуйте решить это следующими шагами:

    1. Перейдите в раздел Access на сайте Академии, переключите протокол с UDP на TCP и выберите порт 443 (трафик пойдет под видом обычного HTTPS). Скачайте новый файл.

    2. Откройте скачанный .ovpn файл в любом текстовом редакторе и добавьте в самый конец две строчки для принудительного ограничения размера пакетов:
    mssfix 1300
    tun-mtu 1300

    3. В терминале полностью убейте зависшие процессы openvpn перед новым запуском:
    sudo killall openvpn
    И запустите заново: sudo openvpn [имя_файла].ovpn

    4. Проверьте интерфейс. Иногда строка "Initialization Sequence Completed" просто не успевает отрисоваться, хотя туннель уже поднялся. Не закрывая терминал с VPN, откройте соседнюю вкладку и введите: ip a show tun0. Если там появился IP-адрес 10.10.x.x — вы в сети, можно работать.

    Личный опыт:
    Я столкнулась с похожей жесткой блокировкой от провайдера, когда даже TCP 443 не помогал. Решила проблему кардинально — развернула собственный зарубежный VPS на хостинге под эти задачи и настроила подключение через свой VPN (Психанула).Свой чистый туннель провайдеры не трогают, и через него виртуальные лабораторные машины Академии коннектятся без единого разрыва и без шаманства с MTU.

    Если локальная сеть совсем не пускает туннели, просто перейдите в нужный модуль курса и нажмите кнопку "Start Pwnbox" — откроется готовая виртуальная машина прямо в соседней вкладке браузера, запускать OpenVPN на своей системе не потребуется.
  • Как правильно располагать абстрактные классы, имеющие разные ответственности?

    Переносить интерфейсы во внешние слои к их реализациям — это грубая архитектурная ошибка. Это полностью разрушает главное правило Чистой Архитектуры — направление зависимостей.
    Согласно луковой структуре, все зависимости должны быть направлены строго внутрь (к ядру). Внутренние слои (Domain / Core) понятия не имеют, какая инфраструктура находится снаружи (база данных, файлы, UI). Если вы перенесете интерфейсы в папки к реализациям, то ваше ядро будет вынуждено импортировать их из внешних слоев. Это породит запрещенную обратную зависимость «Ядро ➡️ Инфраструктура».
    Интерфейс всегда принадлежит вызывающему коду (тому, кто его использует), а не вызываемому (реализации). Разносить интерфейсы нужно не к реализациям, а по функциональным зонам самого ядра, чтобы не нарушать принцип разделения интерфейса (ISP из SOLID).
    Где правильно расположить ваши интерфейсы:
    Интерфейс репозитория (работа с файлом/БД): Оставляем в Core (Application/Domain). Бизнес-логике приложения нужно знать, какие действия можно совершать с данными (сохранить, получить), но ей плевать на физический носитель. Реализация уходит в слой инфраструктуры и импортирует этот интерфейс из ядра.
    Класс для генерации нового ID: Это чистое доменное правило, определяющее логику сущности. Абстракция должна лежать в самом центре — в Domain Model.
    Класс для конвертации объекта в словарь (Serializer): Зависит от того, для чего он нужен. Если для отдачи данных в UI/API — интерфейс лежит на границе Application Services / Presenters. Если для сохранения в файл — в инфраструктурном шлюзе.
    Примечание для Python:
    для обычного перевода объекта в dict абстрактные классы часто избыточны, лучше использовать методы самой сущности или библиотеки вроде Pydantic.Идеальная структура директорий:Не нужно плодить «подслои core» внутри инфраструктуры.
    Разнесите код в ядре по смыслу:

    my_project/

    ├── core/ (Слой Domain / Core — не зависит от внешнего мира)
    │ ├── domain/
    │ │ ├── models.py # Сущности бизнес-логики
    │ │ └── id_generator.py # ABC для генератора ID (Доменное правило)
    │ │
    │ └── application/
    │ ├── interfaces.py # ABC для Репозиториев и внешних сервисов
    │ └── use_cases.py # Логика приложения, использующая эти ABC

    └── infrastructure/ (Внешний слой — импортирует и реализует интерфейсы ядра)
    ├── file_repository.py # Реализация репозитория (работа с файлом)
    ├── db_id_generator.py # Реализация генератора ID
    └── serializers.py # Конкретные мапперы