• Чем отличаются директивы root и alias в nginx "на пальцах"?

    @inkvizitor68sl
    Linux-сисадмин с 8 летним стажем.
    Не совсем.
    Делают они одно и то же только для location /.

    Если у вас, например, location /img, то при
    root /var/www ссылка /img/1,jpg будет вести в файл /var/www/img/1.jpg

    а при alias /var/www та же ссылка будет вести в /var/www/1.jpg.
    Ответ написан
    2 комментария
  • Хранение пароля к MYSQL в хэшированном виде?

    RomaZveR
    @RomaZveR
    CEO AlertMoney, PHP/Golang Developer
    Продолжать хранить в файлах конфигурации. Для безопасного хранения файлов конфигурации занимайтесь безопасностью самого сервера.
    База:
    - Код вашей "системы на php". Нет, серьёзно, проверяйте свой код, тестируйте.
    - Отключите ssh по паролю, используйте ключ с секретом;
    - Смените стандартный ssh порт на 2к+, просто чтобы китайцы логи не засоряли;
    - Настройте фаервол, в идеале кроме веб сервера и ssh из внешнего мира ничего не должно быть доступно;
    - Поддерживайте актуальные версии ПО на сервере (как минимум веб-сервер, php, бд не старше полугода).
    Ответ написан
    Комментировать
  • Есть где-нибудь полноценная инструкция nginx+gunicorn/uwsgi+flask с некоторыми дополнениями?

    sim3x
    @sim3x
    В данном мане предусматривается изоляция проектов через пользователей с расположением проектов в /home а не в /var/www

    https://www.digitalocean.com/community/tutorials/h...

    Также можно установить uWSGI глобально, а не для каждого проекта
    Предпочтительно в tirant mode
    Ответ написан
    2 комментария
  • Есть где-нибудь полноценная инструкция nginx+gunicorn/uwsgi+flask с некоторыми дополнениями?

    opium
    @opium
    Просто люблю качественно работать
    А в чем разница между запуском фласка или Джанго? Вы же питон запускает а не фреймворк
    Ответ написан
    1 комментарий
  • NGINX + Gunicorn + Flask Почему получаю 500 Internal Server Error когда делаю POST запросы?

    kosyachniy
    @kosyachniy Автор вопроса
    Python BackEnd, Web FullStack
    Нужно было настроить логирование
    import logging
    logging.basicConfig(filename='error.log',level=logging.DEBUG)


    Ошибка оказалась в том, что запускалось глобальное, а не виртуальное окружение.
    Ответ написан
    Комментировать
  • Горизонтальный masonry на css?

    обертка с whitespace nowrap и overflow-x auto
    внутри блоки inline-block
    ну и внутри уже наборы ваших элементов
    там простор для фантазии, но я бы сделал обычной сеткой или флексами
    Ответ написан
    1 комментарий
  • Силу тока зарядки мобильного телефона определяет сам телефон или зарядное устройство?

    alsopub
    @alsopub
    Можно.
    Ваше зарядное устройство дает постоянное напряжение 5В и может обеспечить ток максимум 1.5А. Телефон возьмет столько, сколько нужно.
    Физически нельзя "влить" в телефон произвольное количество ампер при постоянном напряжении.
    Ответ написан
    Комментировать
  • Как заряжается более емкий новый аккумулятор в технике?

    @nehrung
    Не забывайте кликать кнопку "Отметить решением"!
    Вот полный список функций контроллера литий-ионного аккумулятора:
    1. Не дать ему зарядиться выше установленного значения (чревато вспучиванием и возгоранием).
    2. Не дать ему разрядиться ниже установленного значения (чревато потерей ёмкости).
    3. Ограничить ток заряда и разряда (защита по току - стандартная опция почти любой силовой электроцепи, а для аккумов это чревато ещё и снижением срока службы).
    4. В батареях из множества последовательных элементов - балансировка батареи, т.е. приведение всех элементов к одинаковому состоянию (устранение разброса параметров). Поскольку батарея живёт столько, сколько самый слабый её элемент, балансировка позволяет продлить срок её службы.
    5. Иногда (например, в ноутах) ещё и слежение за температурой (соответственно и защита от перегрева) и передача инфы о состоянии батареи туда, где этим интересуются (в ОС).
    (Впрочем, бывают упрощённые контроллеры, обеспечивающие лишь часть перечисленных опций.)
    Эти опорные значения зашиваются в контроллер при его изготовлении, изредка в самых сложных контроллерах допускается их подстройка. Их величина определяется типом химии аккума. Скажем, по п.1 для LiIon это 4,15 V, для LiPo - 4,2 V, для LiFe - 3,6 V, по п.2 соответственно 2,9, 3,0 и 2,0 V. Переставив такой контроллер с одного аккума на другой того же типа, мы ничего не испортим, но надо не забывать и про п.3 - токи защиты у них могут быть разные.
    В вашем случае контроллер можно смело переносить, поскольку вы не собираетесь брать от более ёмкого аккума больший ток.
    Ваш второй вопрос непонятно сформулирован. Скажу только, что третий контакт там информационный, и вам смело можно его игнорировать. Если хотите "поднять" сдохший литий, можно на свой страх и риск сначала попытаться зарядить его зарядником для двух последовательных NiMh.
    Ответ написан
    Комментировать
  • Первая зарядка NiMH 48 часов?

    15432
    @15432
    Системный программист ^_^
    От зарядного тока время зависит. Током 10 мА можно и неделю заряжать.

    А вообще никелю все равно, как зарядится на 100%, все в тепло будет уходить, ничего ему от перезаряда не будет

    P.S. я свои током 2 ампера за час заряжаю
    Ответ написан
    2 комментария
  • Beautiful Soup, html5lib или lxml?

    alternativshik
    @alternativshik
    lxml однозначно.
    Ответ написан
    Комментировать
  • Зачем Flask использует систему расширений?

    ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    mako и WTForms библиотеки, что не заточены специально под Flask.

    flask_mako, flask_wtforms -- не реализуют ту же функциональность, а должны упрощать работу с mako и WTForms внутри Flask приложения, а так же упрощать взаимодействие mako и WTForms с другими библиотеками в рамках Flask-приложения.

    То есть, смысл расширений:
    1. нам не писать одно и то же в каждом проекте,
    2. разработчикам Flask не набивать фреймворк классами, сигналами, шаблонными тегами для каждой Python библиотеки.


    О первой причине прямо сказано в документации Flask ( flask.pocoo.org/docs/0.12/extensiondev ):
    Flask, being a microframework, often requires some repetitive steps to get a third party library working. Because very often these steps could be abstracted to support multiple projects the Flask Extension Registry was created.


    Например, flask_mako состоит из 1 файла ( https://github.com/benselme/flask-mako/blob/master... ) и судя по описанию --
    Extension implementing Mako Templates support in Flask with support for flask-babel

    -- расширение решает две задачи:
    1. интеграция с самим фреймворком Flask;
    2. интеграция с расширением flask-babel (обёртка вокруг python-библиотеки для интернационализации babel).

    Далее мы видим множественные импорты из Flask, werkzeug и mako.

    Например, из werkzeug импортируются инструменты для отладки, а из mako исключения:
    from werkzeug.debug.tbtools import Traceback, Frame, Line
    ...
    from mako import exceptions
    from mako.exceptions import RichTraceback, text_error_template

    Очевидно, это для того, чтобы в интерактивном отладчике Flask видеть внятные ошибки в html-шаблонах (в духе, "после такой-то строки ожидалось закрытие цикла через тег % endfor"). Подробнее, можно посмотреть ниже по коду в классе TemplateError.

    Внутри flask_mako я насчитал всего 6 одиночных функций и 3 класса -- можно в сжатые сроки разобраться и в назначении остальных.

    С документацией, комментированием исходников и именованием сущностей во Flask и его популярных расширениях -- всё очень даже неплохо, можно легко найти ответы на большинство вопросов.
    Ответ написан
    1 комментарий