• Как убрать автоматический запуск контейнеров?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Контейнер создавался без флага --restart?
    Политика перезапуска контейнера что говорит?
    docker inspect -f '{{ .Name }} {{ .HostConfig.RestartPolicy.Name }}' $(docker ps -aq)

    Отключение автозапуска конкретного контейнера:
    docker update --restart=no <container_id>
    Ответ написан
    33 комментария
  • Что выбрать WP или Python+Django для сайта?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Короткий ответ (с учетом указанного ТЗ) - WP.

    Длинный ответ:
    публиковать страницы, создавать иерархию страниц, чпу url, какой то слайдер с картинками

    Учитывая типовое ТЗ, ответ - WP (все это уже реализовано, преимущественно бесплатно и в большом количестве).
    небольшое количество услуги в регионе

    Вы на старте выхода в интернет, предположу, что количество оказываемых услуг оффлайн - будет примерно равнозначно количеству оказываемых услуг онлайн, а значит производительность инструмента не первостепенна, ответ - WP.
    Нашли компанию, предлагает разработку сайта на WP или на Python+Django (дороже и дольше)

    Начнем с того, что это не равнозначные инструмент, ибо WP - это готовый движок/CMS для сайта + сам сайт (готовые шаблоны), развернул на хостинге и готово. А вот Django - это фреймворк, т.е. некий набор инструментов, да он позволяет сделать из него что угодно (ах*енно сделать (на правах отвечающего)), но потом. Соответственно, если вопроса в функционале и производительности не стоит (и предположу - сделать быстро) - выбираем WP, будет дешевле и быстрее.

    Что обычно я использую (от начального проекта к финальному):
    1. WP в стоке + сборка фронта (webpack) с оптимизацией + кэширование.
    2. Докупка железа и горизонтальное масштабирование п1 балансировщиком.
    3. Профилирование и переписывание определенных запросов под конкретные задачи в самом WP, обычно добавляет производительности в 2-3 раза (от wp там мало что остается, но ценник и сроки еще не такие, как в п4).
    4. Python + Django + кэширование (если нужно быстрее любого WP и более специфический функционал).
    5. П4 + FastAPI (если прям совсем прижало по производительности).
    Ответ написан
    6 комментариев
  • Как поставить права на папку /var/www?

    Для начала создай группу:
    sudo groupadd groupname
    Затем добавь себя в эту группу:
    sudo gpasswd -a username groupname
    После чего дай созданной группе права на запись в каталог:
    sudo chown -R root:groupname /var/www
    sudo chmod 775 /var/www

    username и groupname заменить на своё. Может понадобиться перелогиниться.
    Ответ написан
    3 комментария
  • Почему это не работает?

    bingo347
    @bingo347 Куратор тега TypeScript
    Crazy on performance...
    Дженерик здесь не нужен, Ваша функция и так всегда будет возвращать ITest, ибо в TS структурная типизация.
    А ругается TS, так как на T нет никакого контракта, и по сути внутри функции это равносильно unknown
    Ответ написан
    Комментировать
  • Почему это не работает?

    @twoone
    У вас возвращаемое из функции значение принадлежит к чистому типу T у которого отсутствуют признаки типа ITest, о чем и говорит ошибка. Это вы думаете что с помощью аргументов типа конкретизировали возвращаемое функцией значение. То есть вы смотрите как-бы из вне. Но компилятору необходимо сопоставить типы внутри самой функции. Выполняя это он и обнаруживает несоответствие типа { testField: number } типу T.

    Советовать что-либо сложно, поскольку в таком контексте не понятно что вы хотите добится.
    Ответ написан
    Комментировать
  • Когда использовать useCallback, useMemo и useEffect?

    @LEXA_JA
    useEffect - это хук, который позволяет использовать сайд эффект. В классах его аналогом было использование componentDidMount, componentDidUpdate и componentWillUnmount. В нем можно делать подписки, отправлять запросы управлять анимацией и т. д.
    const [data, setData] = useState(null);
    
    useEffect(() => {
      const controller = new AbortController()
      fetchData(controller.signal).then(setData)
    
      return () => controller.abort()
    }, [fetchData, setData])


    useCallback и useMemo предназначены для оптимизации. useCallback получает на функцию и массив аргументов, и возвращает одну и туже функцию, до тех пор, пока аргументы не изменились. useMemo отличается тем, что он возвращает не саму функцию, а результат её выполнения. По большому счету они являются взаимозаменямыми.
    Таким образом, useMemo используется для сохранения результатов тяжёлых вычислений, например обработка массива.
    const data = useMemo(() => array.map(mapper).filter(predicate).reduce(reducer), [array])

    А useCallback используется, когда важна постоянность ссылок на функцию. Например, когда мы передаём ссылку в компонент, который использует React.PureComponent или React.memo, или, когда функция используется в качестве аргумента в других хуках
    const handler = useCallback(() => {
      // что-то сделать 
    }, [])
    
    useEffect(() => {
      handler(value)
      // если не использовать useCallback, эффект будет срабатывать постоянно 
    }, [handler, value])
    Ответ написан
    1 комментарий