Задать вопрос
  • Расскажите про "+" в email?

    OdobenusRosmarus
    @OdobenusRosmarus
    + и все что дальше него до @ — просто игнорируется. Это очень удобно, потому что позволяет иметь при одном ящике бесчисленное количество адресов.

    Я например часто использую эту фичу когда регистрируюсь на каких-то сайтах, например для facebook e-mail myemail+fb@domain.net, для yandex — myemail+ya@domain.net, для какого — нибудь сомнительного сайта — myemail+hrenkakayato@domain.net и т.д.

    Письма по всем этим адресам будут доставлены в myemail@domain.net

    И если потом например в мой ящик начинает приходить спам на имя myemail+hrenkakayato, то сразу видно, где утечка. И легко сделать фильтр, чтобы просто банить такие письма…
    Ответ написан
    4 комментария
  • Как правильно настроить сервер(а) для dev/test/prod?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Все настройки ваших серверов сводятся к установке приложения gitlab-runner (либо настройке SSH для CI/CD сервера: т.е. CI/CD сервер подключается к целевому серверу по SSH/SFTP, копирует файлы и выполняет скрипты на целевой машине), а так же настройке требуемых зависимостей вашего проекта. Stage сервер настраивается идентично Prod серверу. Dev сервер настраивается для прямого доступа к нему со стороны разработчиков для отладки и дебага багов, не воспроизводящихся локально. В гитлабе настраивается CI/CD для деплоя через gitlab-runner или SSH, развертывается отдельный CI/CD сервер с приложением gitlab-runner и докером для запуска CI/CD задач и деплоя на серверы. Для каждой ветки настраиваются свои правила и ограничения деплоя под отдельные сервера. Итого у вас должно быть минимум пять серверов: гитлаб, cicd, dev, stage, prod. Плюс еще есть роль VPN сервера - эту роль вполне можно совместить с гитлабом. CI/CD - только отдельный сервер, ибо задачи штука ресурсоёмкая (компиляция, сборка, установка зависимостей и прочее). Еще очень полезная штука - кэширующий сервер для образов докера и пакеты (harbor - топ). Ускоряет работу задач и экономит трафик. Prod сервер может быть как сервером, так и группой серверов - prod-app, prod-db, prod-files и т.п. В идеале stage должен быть идентичной конфигурации, но обычно обходятся простыми виртуалками для экономии ресурсов, в отличии от prod сервера.
    Ответ написан
    Комментировать
  • Как передать logging из импортированных модулей в основную программу?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Чтобы правильно использовать модуль logging, нужно во всех своих модулях содавать логгеры следующим образом:
    import logging
    log = logging.getLogger(__name__)

    В модулях, которые не запускаются сами по себе, никакого другого кода инициализации и настройки логирования не требуется.
    Если вы в своём модуле желаете различать два или более вида логов, то можно сделать как-то так:
    log = logging.getLogger(__name__)
    class MyModel:
        log = logging.getLogger(__name__ + '.MyModel')
        # ...

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

    В главном запускаемом файле кроме обычного создания логгера как во всех модулях будет ещё и инициализация и настройка системы логирования.
    В самом простом виде это что-то вроде такого:
    if __name__ == '__main__':
        logging.basicConfig(stream=sys.stderr, level='INFO', format='%(asctime)s %(levelname)-7s %(message)s')

    Тут говорится, что все логи уровня >= INFO будут в указанном формате направлены в stderr.

    В более сложном случае вы можете загрузить настройку логирования из конфигурационного файла или описать кодом:
    if __name__ == '__main__':
        # У вас может быть несколько разных способов форматировать код для разных мест:
        formatter_simple = Formatter(u'%(relativeCreated)08d %(levelname)-7s %(message)s')
        formatter_complex = Formatter(u'%(asctime)s %(levelname)-7s [%(filename)21s:%(lineno)-4d] %(message)s')
        # Несколько разных хендлеров для перехвата нужного вида сообщений и отправки в правильное место:
        handler_null      = logging.NullHandler()
        handler_screen    = handler(fmt=formatter_simple, stream=sys.stderr)
        handler_main_file = handler(
            fmt=formatter_complex,
            cls=logging.handlers.TimedRotatingFileHandler,
            when='midnight',
            backupCount=5,
            encoding='utf-8',
            filename=local_path('log/server.log'),
        )
        handler_errors_file = handler(
            fmt=formatter_complex,
            cls=logging.handlers.TimedRotatingFileHandler,
            when='midnight',
            backupCount=5,
            encoding='utf-8',
            filename=local_path('log/errors.log'),
            level='ERROR',
        )
        # А потом описываем сами логгеры:
        #   это корневой логер, пропускает все сообщения через себя насквозь и в то же отдаёт их своим хендлерам
        log_root       = logger(None, level='DEBUG', propagate=1, handlers=[handler_errors_file, handler_main_file, handler_screen])
        #   этот логер перехватывает логи торнадо-приложения, пропускает через себя и отдаёт хендлерам:
        log_app        = logger('tornado.application', level='DEBUG', propagate=1, handlers=[handler_errors_file, handler_main_file, handler_screen])
        #   этот собирает логи событий модели уровня выше или равного INFO (не отладочные) 
        #     и отдаёт соответствующим хендлерам, дальше для обработки свои сообщения не пускает
        log_events     = logger('app.model.events',     level='INFO',  propagate=0, handlers=[handler_errors_file, handler_events_file])
        #   этот логер съедает и отдаёт спец-хендлеру (он не показан выше, но должен быть) все логи http доступа
        log_websrv     = logger('tornado.access',                    level='DEBUG', propagate=0, handlers=[handler_websrv_file])
        #    этот логер глотает и гасит за ненадобностью все логи, которые генерит библиотека PIL при работе с PNG-файлами
        log_pil        = logger('PIL.PngImagePlugin',                level='INFO',  propagate=0, handlers=[handler_null])

    Если сообщение не перехвачено и не остановлено специфичным логером, оно улетает корневому логеру.
    Ну примерно как-то так.
    Само собой всю эту настройку лучше вынести в отдельный модуль и запускать при старте главного файла.
    Логеры вроде log_pil, log_websrv и прочих сохранены в отдельные переменные, но по факту в коде эти переменные нигде не используются. Их можно и не присваивать вовсе. В модуле логирования все логгеры регистрируются глобально в списке и поэтому в каждом модуле не требуется ничего импортировать, достаточно создать логгер по имени. По этому имени логер ищется среди созданных или автоматом создаётся новый. Имена логгеров используют точечную нотацию, и по ступеням имени их удобно фильтровать.

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

    P.S.
    Старайтесь не использовать CamelCase в именовании файлов проекта. Не смотря на то, что негласное это правило часто нарушается даже популярными библиотеками, всё же это часто создаёт лишнюю неразбериху и проблемы.
    В частности много геморроя можно поиметь переименовав файл сменив лишь регистр символа под контролем версий при работе с репозиторием на разных файловых системах. В винде, к примеру, регистр в именах сохраняется, но системой не различается, а в линукс различается. Таким образом винда не увидит переименования, а линукс увидит. Это может породить адский треш.
    Ответ написан
    Комментировать
  • Как через CMD полностью очистить содержимое папки?

    pindschik
    @pindschik
    ФЫВА ОЛДЖ
    В настоящем DOS работала команда deltree, но в винде она не поддерживается (реализовывалась утилитой).
    Так что прямого простого пути нет, кроме как через батник с циклом.

    НО

    А кто сказал, что нужно именно удалять? :)
    Воспользуйтесь встроенной командой robocopy с ключами на синхронизацию папок, и синхронизуйте вашу папку с эталонной пустой. Работает и по сети.
    Ответ написан
    Комментировать
  • Как через CMD полностью очистить содержимое папки?

    @Zzzz9
    rmdir /s /q "Родительская папка"
    mkdir "Родительская папка"

    del /s /q * && (for /d %i in (D:\2\*) do rmdir /s /q "%i")
    Ответ написан
    3 комментария
  • Почему мой компьютер не виден в локальной сети?

    @res2001
    Developer, ex-admin
    Обычно достаточно добавить сеть в Частный профиль и по умолчанию все остальное срабатывает.

    Вообще общий доступ настраивается в win11: Settings->Network&Internet->Advanced Network Settings->Advanced Sharing Settings: для Private Networks включить все что там есть.
    Для All Networks включить Password protection sharing и выбрать режим шифрования (128 бит рекомендуется).
    У меня все это вроде бы было включено по умолчанию, но не поручусь.
    Если у вас в сети нет домена и АД, то желательно на всех компах настроить одну и ту же рабочую группу для одноранговых сетей микрософт: Setting->System->About->Domain and Workgroup->Change (после изменения возможно потребуется перезагрузка). Там же можно задать и имя компьютера в сети.
    Ну и на последок в свойствах сетевого адаптера, который используется для доступа в локальную сеть (Settings->Network&Internet->Advanced Network Settings->сверху в списке раскрываем нужный сетевой адаптер->More Adapter Options->Edit) должны быть включены Client for Microsoft Networks, File and Printer Sharing for Microsoft Networks. Эти настройки по умолчанию включены.
    В винде начиная с вин10 довольно часто меняют названия и местоположения некоторых настроек. Все вышеприведенное актуально для Win11 23H2.

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

    После этого другие компы должны начать видеть компьютер в сети и иметь возможно использовать его расшаренные ресурсы регистрируясь по логину/паролю. Для этих целей можно завести отдельных пользователей и группы, которым раздавать права на расшаренные ресурсы.
    Ответ написан
    Комментировать
  • Почему долго стартует сервер на Gigabyte MZ73-LM0 ( 4 минуты )?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    А чего Вы хотели?! Серверное железо должно быть готово управляться удаленно!
    1) Сначала запускается "Менеджмент контроллер" (BMC). Это не прото какой-то там контроллер, это целый компухтер в виде SOC, обычно на базе intel 486, со своей операционкой, TCP/IP стеком, HTTP- и VNC- серверами, графическим адаптером и прочей хренью.
    2) После этого запускается БИОС самой материнской платы. Вся эта хрень проходит через работающий BMC, который контролирует ход загрузки и параметры вставленных хардверных хреней.
    3) Уф, БИОС кажется запустили, пора бы запускать БИОСы всяких вставленных железок... тоже пропустим-ка через BMC...
    4) О!, блин... Кажется можно теперь загрузить и операционку.... стоп... но BMC должен отразить теперь эту графику...
    5) Кажется все... операционка работает, BMC подглядывает.

    Если уж и хотели себе домашнее железо, нужно было брать именно домашнее железо.
    Здесь никак не уменьшить время загрузки, ибо это все сделано специально, чтобы можно было к серверным стойкам не ходить лишний раз.
    Ответ написан
    Комментировать
  • Как решить проблему подключения большого количества клиентов в одной WiFi сети (Keenetic)?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    При разбиении на несколько зон с помощью дополнительных точек доступа надо разносить точки по разным каналам и снижать мощности передатчиков так, чтобы точки не глушили друг-друга, иначе будет только хуже. Тут нужно грамотное радиопланирование покрытия.
    Вот, например, инструкция от Eltex
    Ответ написан
    Комментировать
  • Высокие потери пакетов на маршруте через магистральные узлы (twelve99) — как устранить проблему?

    @asmelnik
    Дабы "железо" не убивали ДДОС-ом icmp, есть обычная практика -- на магистральном железе резать icmp полисером.
    Т.к. на конечном узле потерь нет, есть высокая вероятность того, что промежуточные вам просто не отвечают в должном объеме.

    Подробности описывать -- трактат наваять надо.
    В двух словах -- icmp запрос магистральному маршрутизатору напрягает CPU, а транзитный трафик обрабатывают отдельные ASIC-и в объемах на порядки выше, чем это делает CPU. Поэтому icmp ограничивают.

    Проверяйте iperf -ом например связь точка-точка.
    И поиграйтесь с размерами пакетов.
    Ответ написан
    Комментировать
  • Как кзнать мак адрес роутера к которому подключен андроид смартфон?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Использовать любой анализатор вай-фая. Например WiFi Analyzer (open-source).
    Ответ написан
    Комментировать
  • Как улучшить соединения к интернету?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Взять хороший современный роутер и вместо USB свистка - полноценный WiFi адаптер парой антенн. Обязательно с поддержкой MIMO. Например Archer AX5400 и Archer TX50UH. Или сразу полноценную Mesh систему - например TP Link Deco. Плюс в меш есть несколько ethernet портов, куда можно воткнуть кабель и до потребителя.
    Есть альтернатива в виде ethernet через розетки - там тоже есть свои нюансы, не самое лучше решение (по отзывам от знакомых, сам не юзал). Но, если совсем нет альтернатив - то вполне можно использовать. Только надо тщательно выбирать девайсы, смотреть на отзывы и реальный опыт использования.
    В многоэтажных домах сегодня эфир очень сильно перегружен, поэтому если хочется максимально качественный коннект, то придётся протянуть кабель. По плинтусам с кабель каналом, дырки в стенах - там же за плинтусом легко прячутся. Там, где нет плинтуса - кладётся маленький кабель-канал (в углу или вдоль потолка). В районе дверей кабель легко прячется за наличниками.
    У вас какая площадь, сколько комнат, какие стены - толщина, материал?
    Ответ написан
    9 комментариев
  • Как в 1С заставить окна не прятаться за пределами экрана?

    @TheBigBear Автор вопроса
    СтарОдмины мы
    Сам спросил - сам сделал
    Почистил кэш в AppData\Roaming\1C\1cv8
    все починилось
    Всем спасибо
    Ответ написан
    Комментировать
  • Как пробросить внутренний номер аналоговой АТС в Asterisk?

    @Komrus
    CIO
    Если Гугл не врёт, то DAG2000-16S - это VoIP шлюз с портами FXS (т.е. в аналоговыми портами, которые сами "гудят" в линию)/ Предназначен для подключения аналоговых телефонных аппаратов.

    И у офисной АТС внутренние порты - это тоже FXS

    Соединять аналоговые порты телефонных линий надо FXS - FXO. (один - гудит в линию, второй - ждёт гудок)

    Т.е. - в Вашем случае нужен шлюз в портами FXO
    Ответ написан
    Комментировать
  • Как убрать лаги в VirtualBox?

    @Drno
    Какие лаги?
    Ту, которую ты выставил в настройках. (Виртуальную)
    Ответ написан
    Комментировать
  • Можете посоветовать книги, статьи, видио уроки по JavaScript, jQuery и по PHP?

    Adamos
    @Adamos
    Посоветую забыть про ролики и добавить в закладки три сайта:
    https://www.php.net/manual/ru/
    https://learn.javascript.ru/
    https://youmightnotneedjquery.com/
    Немножко освоившись, взяться за учебники для предметного изучения. По РНР, в принципе, можно с этого начать, только огромная масса учебников на русском тупо устарела...
    Ответ написан
    1 комментарий
  • Как исправить ошибку Email rejected per DMARC policy?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Чтобы отправлять почту, в наше время нужно выполнить много условий?

    1. Нужна PTR-запись для IP отправителя, и должна существовать соответствующая A-запись (например, 111.22.33.44 указывает на mail.site.ru, должна существовать A-запись для mail.site.ru, необязательно на тот же IP).

    2. Нужно описать SPF (TXT-запись с v=spf1 у домена site.ru), по которому данный IP должен быть доверенным для отправки почты.

    3. Нужно настроить DKIM и подписывать письма ключом, публичная часть которого описана в DNS.

    4. Должна быть описана политика DMARC в TXT-записи _dmarc.site.ru. При этом если там указано p=reject, то получателю предписывается полностью отвергать почту от недоверенных отправителей.

    Вот вероятнее всего что-то из этого сделано не так.

    Полезно также использовать https://mxtoolbox.com/DMARC.aspx и другие инструменты на том же сайте (отдельная благодарность paran0id за напоминание).
    Ответ написан
    5 комментариев
  • Какими вы пользуетесь инструментами для удаления приложений в домене?

    meDveD_spb
    @meDveD_spb
    Total Network Inventory
    Total Software Deployment
    Ответ написан
    Комментировать
  • Как поставить перенос текста при отправке в wall.post VK API?

    @MMMYIWW Автор вопроса
    Решилось заменой на:
    message.replace("\n","%0a");
    Ответ написан
    Комментировать
  • Как заставить скрипт в Linux испольняться просто набрав его имя в терминале?

    @AVKor
    1. Добавить в самое начало скрипта шебанг: #!/usr/bin/env bash
    2. Дать права на выполнение: chmod +x /path/to/run.sh
    3. Поместить в файл ~/.bash_aliases строку alias run='/path/to/run.sh'
    Ответ написан
    3 комментария
  • Как показывать крутилку если недоступен прокси в nginx?

    karabanov
    @karabanov
    Системный администратор
    location / {
            proxy_pass http://server/;
            proxy_intercept_errors on;
            proxy_redirect off;
            error_page 502 /502.html;
    }
    
    location /502.html {
          root /path/to/directory/with/error/pages;
    }

    proxy_intercept_errors
    error_page
    Ответ написан
    Комментировать