Задать вопрос
  • Как правильно поставлять готовые приложения на Python?

    А в случае Python есть виртуальные окружения (venv) и pip.
    Инициализируешь venv.
    А потом просто перечисляешь все пакеты и их версии в файле requirements.txt и запускаешь pip install -r requirements

    А вот как передавать заказчикам - зависит от того, что это за софт.
    Где-то может оказаться удобнее использовать zipapp, а где-то может будет лучше запаковать Docker/OCI-образ.
    Ответ написан
    Комментировать
  • Как организовать хранение файлов на сервере?

    @deliro
    S3 или S3-compatible хранилища. В целом он простой, но для джанги есть либа, которая делает вообще бесшовным работу с s3
    Ответ написан
    Комментировать
  • Почему Nginx из докер композа не видит соседний контейнер?

    @Tabletko
    никого не трогаю, починяю примус
    Изнутри контейнера nginx-а не могу получить доступ на этот соседний контейнер

    Вы пишите про соседний контейнер, а в конфиге nginx обращается сам на себя
    Ответ написан
    Комментировать
  • Почему Nginx из докер композа не видит соседний контейнер?

    @dronmaxman
    VoIP Administrator
    docker run --restart unless-stopped -p 5001:5050 -d --name api --network nginx-proxy-man projsharp-api:2023_04_02__19_52_17


    Зачем ты порт вытаскиваешь, если все равно подключаешь его в одну сеть nginx-proxy-man, -p можно убрать.

    Поправить nginx конфиг
    
     location /api/ {
                    proxy_pass              http://api:5050/api/;
        }
    Ответ написан
    Комментировать
  • Почему Nginx из докер композа не видит соседний контейнер?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    Замени 127.0.0.1 на имя сервиса - у каждого контейнера свой уникальный loopback интерфейс никак не связанный ни с системным ни с соседским.
    Ответ написан
    Комментировать
  • Python ошибка TypeError: list indices must be integers or slices, not str, не получается разобраться?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Скорее всего проблема в том, что вы переменную ozon_packaging перезаписываете на первой итерации данными имеющими другую структуру.
    Ответ написан
    1 комментарий
  • Нужен ли антивирус на linux server?

    Sanes
    @Sanes
    Ниразу не пригодился. Иногда для веб-приложений ставят. Когда у вас неконтролируемые CMS или самопальные скрипты. Например если у вас публичный хостинг, то ставить надо.
    Ответ написан
    5 комментариев
  • Нужен ли антивирус на linux server?

    @dronmaxman
    VoIP Administrator
    Тоже самое, ни разу не пригодился. Было пару пробитых серверов, ради интереса гонял на них разные антивирусы и скрипты, пытался найти трояна или зараженный файл - все глухо.

    Для себя сделал вывод, что это бестолковщина для linux сервера.

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

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

    Универсальной статьи нет, так как настройка зависит от ПО которое крутиться на сервере.
    Есть общие рекомендации:
    - настроить firewall, открывать только нужные порты
    - для SSH использовать ключи, изменить порт (например 2324), ограничить доступ с определенных IP
    - запретить вход от root на сервер по паролю
    - не использовать имена учетных записей которые попадают в перебор (типа admin, super, cisco и т.д.)
    - запускать сервисы от непривилегированных учетных записей
    - настроить бекапы
    - настроить контроль версий etckeeper
    - настроить fail2ban

    Следующий уровень паранои, это уже решения по типу Suricata IDS-IPS
    Ответ написан
    Комментировать
  • Как определить максимальное число не используя функцию max?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Это очень простая задача.
    Создаете переменную для ответа. Помещаете туда первую найденную цифру в вашем числе. Следующую найденную сравниваете со значением в переменной и, если новая цифра больше той, что в переменной, присваиваем в переменную новую цифру, иначе ищем следующую.
    Когда число исчерпается, в переменной останется значение максимальной цифры.

    Ну и на сладкое - вы получаете из input строку. Просто перебирайте её циклом и каждый следующий элемент превращайте в int. Это вместо шаманства с делением на 10 и остатков.
    Ответ написан
    9 комментариев
  • Как заставить def работать?

    Vindicar
    @Vindicar
    RTFM!
    Поучи язык. Просто поучи, без ботов.
    def объявляет функцию, но не вызывает её.
    Ты её объявляешь внутри record_volume(), но ничего с ней не делаешь.
    Ответ написан
    Комментировать
  • Как защитить админку?

    @12rbah
    Советую в гугл вбить node js authorization, и там будут примеры того как можно реализиовать авторизацию/аутентификацию
    Ответ написан
    Комментировать
  • Почему после очистки добавленного листа исчезают значения из другого листа?

    fenrir1121
    @fenrir1121
    Начни с документации
    c.add(b)
    b.clear()

    Ознакомьтесь с тем, что из себя представляет список в питоне. Если упрощать это динамический массив ссылок. В вашем случае все элементы списка c фактически ведут в один и тот же очищенный b.
    Кстати у списка нет метода .add, поэтому такой код вообще не запустится.

    Визуализация как связаны объекты в вашем коде63fc85239dd32123307508.png
    Ответ написан
    2 комментария
  • Зачем именно нужны связи в бд?

    @deliro
    Когда к тебе придёт менеджер и скажет: "эй, hrnsywtfczlh, а почему у нас тут вот заказов отгруженных на 15 миллионов, а получателей даже не в базе?", тогда-то ты и поймёшь, зачем нужны связи в БД. Но сперва поседеешь.
    Ответ написан
    7 комментариев
  • Зачем именно нужны связи в бд?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Нужно поговорить об аномалиях. Например в твоей системе я могу (теоретически) добавить месседж
    который не принадлежит ни одному пользователю системы. Я просто сделаю

    insert into message(9999999, -1, "Mua-haha...");

    И у меня есть пост от анонимоса который не зарегистрирован как пользователь.

    Разумеется можно полагаться на логику твоего приложения и думать что такая ситуация невозможна
    но с точки зрения БД она вполне возможна потому как родственная связь User + Message нигде не объявлена.
    И SQL позволяет это сделать.

    Чтоб поправить ситуацию надо эту связь добавить и тогда я не смогу создать фейковые посты от анонимосов.
    ALTER TABLE Message
    ADD FOREIGN KEY (userid) REFERENCES users(id);

    По умолчанию констрейнт создается с опцией restict (это было в Оракле как в Майскл - не знаю)
    и это гарантирует что невозможно также удалять родительские записи пока есть дочки.
    Для скорости ссылочные ключи всегда - индексированы.

    Рассуждать на тему вреда от аномалий - это просто терять время. Каждый владелец БД сам решает
    какие уровни строгости ему вводить. Вообще любая теория касаемая БД - по сути просто развивает
    идею строгости НФ1,2,3,4,5,6 и ссылочных ограничений.

    Будет ли виден пост от анонимосов - это тоже другой вопрос и он не имеет отношения к обсуждаемой
    теме. Ведь тема касается именно логичности данных в БД а не тем методам которые их отображают.

    По сути вопрос сводится к тому как не создавать мусор в БД.
    Ответ написан
    2 комментария
  • Почему is работает не так, как ожидается?

    ElonMask2
    @ElonMask2
    Autor of Tesla Machini and SpaxeX
    Ладно
    a = 'af' Инициализируем ПЕРВУЮ переменную А = АФ  идентиф=1
    b = 'a' Инициализируем ВТОРУЮ переменную Б= А     идентиф=2
    b += 'f' Инициализируем ТРЕТЬЮ переменную Б = А + Ф  идентиф=3
    # А все почему? Строка - НЕИЗМЕНЯЕМЫЙ ТИП
    print(a is b)
    >>> False
    a = 5
    b = 2
    b += 3
    # Тоже самое но, в питоне числа до 255 КЕШИРУЮТСЯ и 50 is 50 и 255 is 255
    print(a is b)
    >>> True


    А тут,
    a = 'af'       #Инициализируем ПЕРВУЮ (ОНА ИДЕТ В КЕШ) А = АФ
    b = 'a' + 'f'  #Инициализируем ВТОРУЮ интерпретатор не тупой и Б = ТОЖЕ АФ (а так как аф есть в кеше Б получает ссылку на ту же память)
    
    print(a is b)
    >>> True


    Где читать? Гугл-
    Изменяемые неизменяемые типы,
    Ответ написан
  • В чем минусы событийно ориентированного подхода?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Ну да, Вы перепутали сообщение и событие. Вызов метода объекта в ООП можно интерпретировать как сообщение этому объекту из конкретного места и контекста в выполняющемся коде.
    Это не то же самое, что события. Нет никакой шины или очереди событий.
    Для событийного программирования существуют Pub\Sub механизмы, в рамках которых есть паблишеры, которые формируют событие в любом месте и контексте кодовой базы, а есть подписчики, которые реагируют на конкретные типы событий, обрабатывают и передают их дальше или терминируют.
    Этот подход иногда полезен, но часто он рубит распыляет логику по куче обработчиков. Такие системы очень сложно отлаживать, трудно тестировать, практически невозможно доказывать корректность программы для любой допустимой входной последовательности событий. Антипаттерн это потому, что после некоторого порога сложности начинает накапливаться много формальных событий и неочевидных состояний системы. Эта мешанина трудно воспринимается и анализируется человеком
    Ответ написан
    7 комментариев
  • Есть ли простое и быстрое решение определить, что фраза изменена незначительно?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    это классическая задача. Решается через расстояние Левенштейна
    Ответ написан
    1 комментарий
  • Есть ли простое и быстрое решение определить, что фраза изменена незначительно?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Можно вести подсчет триграмм. (Троек символов). И если разница в небольшом числе триграмм - тогда
    считаем что слова равны с "допуском". Величину допуска можно установить экспериментально исходя
    из тестовых выборок.

    Для случая сходразвал сход-развал.
    сходразвал: схо ход одр дра раз азв вал
    для слова с дефисом из триграмм выпадают
    одр дра
    следовательно допуск равен двум.

    Можно использовать би-граммы или четерех-граммы. Это вопрос эксперимента. Что лучше подойдет на
    данном наборе исходных данных.
    Ответ написан
    Комментировать