• Что думаете про PRestashop?

    @Alesck
    Мы разрабатываем шаблоны PrestaShop.
    Сначала просто переделывали, теперь у нас своих 30+ адаптивных шаблонов и свои модули к ним.
    На престе можно сделать хороший магазин, с программистом и дизайнером, маркетолог тоже не помешает.
    Естественно, получается не дешево, то есть вариант с хорошим магазином дешевле 300-600к я бы не рассматривал.

    На западе считается одной из лучшей CMS наравне с Magento и Opencart. Уступает по популярности Wordpress, но Wordpress блоговый движок и не имеет такого количества функций магазина как PrestaShop.

    Шаблоны и модули не из дешевых если сравнивать с аналогами, но дешевле чем у Magento
    Программистов, умеющих работать с престой не много, те кто работают в основном работают или на биржи, или на запад или студии, поэтому рейт достаточно высок. В среднем 20-30 евродолларов в час. Работы по PrestaShop всегда много.

    Русскоязычная поддержка, скорее мертва чем жива, однако можно найти ответ на большое кол-во вопросов, в англоязычной ветке найти помощь, можно с вероятностью более 90%, для остального фриланс и программисты.

    Причина в том, что сообщество решает свои локальные задачи, их много, а людей, которые действительно помогают можно пересчитать по пальцам, 2-3 года мы также помогали на форумах, потом стали развивать только свои проекты, но это скорее глобальная тенденция, время у всех в дефиците.

    В конечном итоге преста может выйти лучше и дешевле, даже битрикса, зависит от постановки задач и специалистов.

    Самостоятельно в престе разбираться довольно долго, но и в других движках не быстро.
    Базовые вещи делаются легко, есть хостинг Presta Cloud, бесплатный, фишка в том, что часть кода на нем закрыта, а модули загружать нельзя, только покупать и шаблоны тоже.

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

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

    Плюсы:
    • Большое сообщество
    • Как правило легко разворачивать, устанавливать компоненты и шаблоны
    • Много есть из коробки
    • Опен сорс
    • Много модулей уже написано
    • Качество модулей выше среднего
    • Поддержка выше среднего, для большинства случаев
    • Локализация
    • Много модулей уже написаны для Российского рынка (оплата, доставка и прочее)
    Минусы:
    • Сложности в интеграции (смол и бигдата)
    • Синхронизация с 1с и другими складскими программами сложнее чем в битрикс
    • Не очень популярна в России, хотя еще 1-2 года назад была популярнее, кризис
    • Хороших разработчиков не много
    • Хороший магазин уровня Евросеть, М видео, сделать сложно, но можно, естественно только с командой профи.
    • Требует хорошей поддержки
    Ответ написан
    Комментировать
  • Как в консоли браузера отправить post запрос?

    @StockholmSyndrome
    fetch('test', {
      method: 'POST', 
      headers: {
        "Content-Type": "application/json;odata=verbose",
      }, 
      body: JSON.stringify({
        "__metadata": { "type": "SP.Data.List4.ListItem" },
      })
    });
    Ответ написан
    6 комментариев
  • Нужно API для расчёта стоимости и срока доставки посылок через Почту России

    marconi
    @marconi
    Вопрос старый, но уже решенный. Напишу для тех кто все еще ищет на него ответ. Сейчас у почты есть всё. Если у Вас есть договор используйте api сервиса otpravka.pochta.ru документация в личном кабинете "отправки". Если у Вас нет договора и доступа к api используйте эти два сервиса от Почты России. В одном можно рассчитать стоимость отправки, в другом сроки доставки.
    Расчет сроков доставки
    Расчет стоимости доставки

    К сервисам прилагается документация, из неё следует что ответы можно получить уже и в json.
    У двух этих сервисов есть существенный минус. Все запросы надо делать зная почтовый индекс места назначения.
    При этом нет сервиса поиска индекса по названию населеного пункта... ну или я такой не нашел...
    Ответ написан
    1 комментарий
  • Как задать множество переменным одинаковое значение?

    @entermix
    $var1 = $var2 = $var3 = 0;
    Ответ написан
    Комментировать
  • Как пустить часть трафика через VPN?

    Vindicar
    @Vindicar
    RTFM!
    Есть два подхода. В обоих случаях тебе нужен список заблокированных IP, его можно взять на антизапрете, например.
    Дальше вопрос, как пускать трафик.
    1. На хабре был материал про динамическую подгрузку маршрутов через BGP. Плюс - работает с любыми протоколами, и не требует дополнительной настройки со стороны проксируемого ПО. Минусы - ощутимо сложнее в понимании, на мой взгляд, да и с кроссплатформенностью могут быть проблемы. В статье приведена реализация на роутере Mikrotik.
    2. Использовать файл proxy.pac. Его можно сгенерировать скриптом типа такого:
    #!/bin/bash
    #!/bin/bash
    DNS_SERVER=8.8.8.8
    BLACKLIST_URL="http://antizapret.prostovpn.org/iplist.txt"
    #куда класть файл proxy.pac
    PACDIR=/var/www/html
    TMPLIST=/tmp/iplist.txt
    #домены, которые нужно пускать через прокси независимо от содержимого iplist.txt
    DOMAINS=(\
    rutracker.org \
    facebook.com \
    facebook.net \
    fbcdn.net \
    twitter.com \
    twitter.co \
    t.co \
    twimg.com \
    twitpic.com \
    periscope.tv \
    pscp.tv \
    )
    #качаем чёрный список
    wget -q --tries=10 -O "$TMPLIST" "$BLACKLIST_URL"
    # вытаскиваем IP наших прописанных доменов
    declare -a EXTRAIPS=()
    for domain in "${DOMAINS[@]}"
    do
            dig A "$domain" +short @$DNS_SERVER | grep -v '\.$' >>"$TMPLIST"
    done
    #в чёрном списке есть отдельные IP и есть подсети
    #также чёрный список очень длинный, поэтому кодируем его более компактно.
    IPLIST=`grep -Ex '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' "$TMPLIST" | awk '/^[0-9]+/ {split($1,b,/\./); printf("0x%02x%02x%02x%02x,", b[1],b[2],b[3],b[4]);}'`
    SUBNETLIST=`awk '/[0-9.]+\.[0-9]+\.[0-9]+\.[0-9]+\/[0-9]+/ {split($1,p,/\//); printf("[\"%s\", %s], ", p[1], p[2]);}' <"$TMPLIST"`
    #генерируем proxy.pac по шаблону
    #он проверяет домен на вхождение в фиксированные домены, а потом IP по списку.
    function templatePAC {
            NAME=$1
            shift
            DMNLIST=("$@")
            cat >"$PACDIR/$NAME" <<EOF
    function FindProxyForURL(url, host) {
      var domainblacklist = [
    EOF
            for d in "${DMNLIST[@]}"
            do
                    echo "  '$d'," >>"$PACDIR/$NAME"
            done
            cat >>"$PACDIR/$NAME" <<EOF
      ];
      var ipblacklist = [ $IPLIST ];
      var subnetblacklist = [ $SUBNETLIST ];
    
      function endsWith(str, suffix) {
        return str.indexOf(suffix, str.length - suffix.length) !== -1;
      }
      function numberToMask(n) {
        var m=[0,128,192,224,240,248,252,254,255];
        var r=[];
        for (var i=0; i<4; i++) {
          var p = (n > 8) ? 8 : n;
          r[i] = m[p];
          n -= p;
        }
        return r.join(".");
      }
      function maskMatch(ip, mask) {
        var m = numberToMask(mask[1]);
        return isInNet(ip, mask[0], m);
      }
    
      var blocked = false;
      for (var i=0; !blocked && (i<domainblacklist.length); i++)
        blocked = blocked || ((host == domainblacklist[i]) || endsWith(host, '.'+domainblacklist[i]));
      if (!blocked) {
        var ip = dnsResolve(host);
        for (var i=0; !blocked && (i<subnetblacklist.length); i++)
          blocked = blocked || maskMatch(ip, subnetblacklist[i]);
        blocked = blocked || (ipblacklist.indexOf(convert_addr(ip)) != -1);
      }
      if (blocked)
        return "PROXY ТУТ_ТВОЙ_ПРОКСИ:ПОРТ";
      else
        return "DIRECT";
    }
    EOF
    }
    # генерируем файл
    templatePAC proxy.pac "${DOMAINS[@]}"
    
    rm -f "$TMPLIST"

    Тогда можно отдавать этот proxy.pac любым веб-сервером (но лучше внутри VPN - если VPN не работает, то смысл в файле?), и настроить браузер на его использование.
    Минусы: работает только с браузерами, требует наличия вебсервера и полноценного прокси-сервера внутри VPN-сети (т.е. просто арендованный VPN не подойдёт, нужен VPS). Но мне показалось это проще в понимании, чем возня с BGP, да и требуется только наличие современного браузера и VPN клиента, без привязки к роутеру. Можно хоть на ноуте настроить, как я сделал.
    Ответ написан
    Комментировать
  • Как получить доступ к ресурсам хоста из контейнера docker?

    @freelancer007 Автор вопроса
    Решение было следующим, может ктото в поиске и пригодится)
    Контейнеру назначил внутренний статический IP 172.16.0.5
    и в UFW создал правило
    ufw allow from 172.16.0.5 to any port 7500
    Ответ написан
    Комментировать
  • Как правильно устанавливать что-либо в Docker контейнеры?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    2 + 3, даже если это на один раз. Потому что часто один превращается в "не один".
    Ответ написан
    1 комментарий
  • Как правильно устанавливать что-либо в Docker контейнеры?

    1. Если это на 1 раз, то №1.
    2. Если понадобится более 1 раза, то №2. Там несложно: всего 2 инструкции: FROM (имя исходного образа), и RUN и там как в bash файле команды apt-get update && apt-get install XXX && ...
    Ответ написан
    Комментировать
  • Как правильно использовать Docker для веб разработки?

    zvd
    @zvd
    Software developer interesting in DevOps
    Добрый день.
    Все, как вы их назвали, «задачи» должны быть по разным контейнерам.

    1. Что брать за базовый образ?
    Что используете то и берите. Используете в работе Debian? Берите Debian ( https://registry.hub.docker.com/_/debian/ )
    2. Чтобы создать свой базовый образ который будете в дальнейшем использовать для приложения, вот вам пример Dockerfile:
    #
    # MyBaseimage Dockerfile
    #
    
    # Pull base image.
    FROM ubuntu:14.04
    
    MAINTAINER Your Name <your.email@gmail.maybe>
    
    RUN apt-get update
    RUN apt-get upgrade -y
    
    RUN apt-get install -y language-pack-en
    ENV LANGUAGE en_US.UTF-8
    ENV LANG en_US.UTF-8
    ENV LC_ALL en_US.UTF-8
    
    RUN locale-gen en_US.UTF-8
    RUN dpkg-reconfigure locales
    
    RUN echo "Etc/UTC" > /etc/timezone
    RUN dpkg-reconfigure -f noninteractive tzdata
    
    RUN apt-get install -y build-essential
    RUN apt-get install -y python python-dev python-setuptools python-pip python-virtualenv
    RUN apt-get install -y libxml2-dev wget
    RUN apt-get install -y libpcre3
    RUN apt-get install -y libpcre3-dev
    RUN apt-get install -y libssl-dev
    RUN apt-get install -y libncurses5-dev
    RUN apt-get install -y git git-core
    RUN apt-get install -y libpq-dev
    
    # install nginx
    RUN apt-get install -y software-properties-common python-software-properties
    RUN apt-get update

    Собрать image в директории где у вас лежит Dockerfile
    docker build -t your_docker_account/your_baseimage .

    3. Dockerfile для сборки вашего образа уже с приложением
    #
    # MyApp Dockerfile
    #
    
    # Pull base image.
    FROM your_docker_account/your_baseimage
    
    MAINTAINER Your Name <your.email@gmail.maybe>
    
    # Set instructions on build.
    RUN virtualenv /env
    ADD ./ /code
    
    RUN cd /code; /env/bin/python setup.py install
    RUN cp /code/config/config.yml.docker_example /etc/code/config.yml
    
    # Expose ports.
    EXPOSE 8484
    WORKDIR /code
    CMD ["/env/bin/python", "app.py"]

    4. Собрать образ с приложением
    docker build -t your_docker_account/your_app_container .

    5. Запустить контейнер с БД, в качестве примера PostgreSQL
    docker run -p :5432:5432 --name my_postgresdb_container -e POSTGRESQL_DB=mydb_name -e POSTGRESQL_USER=mydb_user -e POSTGRESQL_PASS=super_secret_password -d kamui/postgresql

    для mariadb аналонично, контейнеры ищем здесь: https://registry.hub.docker.com/
    6. Запустить контейнер с вашим приложением, пример:
    docker run -d -p :5000:5000 \
      --name my_app_container \
      --link my_postgresdb_container:postgresdb \
      -e DOCKERDB_ENV_POSTGRESQL_DB=mydb_name \
      -e DOCKERDB_ENV_POSTGRESQL_USER=mydb_user \
      -e DOCKERDB_ENV_POSTGRESQL_PASS=super_secret_password \
      your_docker_account/your_app_container

    7. Подключиться к запущенному контейнеру с приложением
    docker exec -it your_app_container /bin/bash
    8. Читать stdout запущенного приложения в контейнере
    docker logs -f your_app_container

    + Чтобы автоматизировать запуск всех необходимых контейнеров берите Docker Compose ( https://docs.docker.com/compose/ )
    Пример файла конфигурации:
    your_app:
      build: .
      links:
        - postgresdb
      ports:
        - "5000:5000"
      environment:
        DOCKERDB_ENV_POSTGRESQL_DB: mydb_name
        DOCKERDB_ENV_POSTGRESQL_USER: mydb_user
        DOCKERDB_ENV_POSTGRESQL_PASS: super_secret_password
    postgresdb:
      image: kamui/postgresql
      ports:
        - "5432:5432"
      environment:
        POSTGRESQL_DB: mydb_name
        POSTGRESQL_USER: mydb_user
        POSTGRESQL_PASS: super_secret_password

    И теперь вместо пунктов 5 + 6 где мы запускали контейнеры мы можем всё стартануть одной командой
    docker-compose up

    + можно смонтировать код в контейнер и разрабатывать непосредственно в docker'контейнере.
    Надеюсь чем-то вам помог.
    Ответ написан
    3 комментария
  • Как запустить python скрипт в фоновом режиме?

    @Teslaman
    Можно написать демон для systemd если в вашей операционной системе он используется.

    Создаём файл демона:
    sudo touch /etc/systemd/system/bot.service

    Вставляем туда следующее:
    [Unit]
    Description=My bot
    After=multi-user.target
     
    [Service]
    Type=idle
    ExecStart=/usr/bin/python /путь/до/скрипта/bot.py
    Restart=always
     
    [Install]
    WantedBy=multi-user.target


    После этого в консоли выполяем:
    sudo systemctl daemon-reload
    sudo systemctl enable bot.service
    sudo systemctl start bot.service


    Чтобы остановить бот:
    sudo systemctl stop bot.service
    Чтобы удалить из автозагрузки:
    sudo systemctl disable bot.service
    Чтобы проверить работу демона:
    sudo systemctl status bot.service
    Ответ написан
    7 комментариев
  • Какой репозиторий можно использовать вместо packages.sury.org/php/?

    OCTAGRAM
    @OCTAGRAM
    Как ещё выясняется, там поудаляли старые дистрибутивы Debian, и не понятно, где же теперь взять зеркало.

    Пока что выживаю так: https://bitnami.com/stack/lapp/installer
    Ответ написан
    Комментировать
  • Почему у меня пусто в formData?

    @ZardoZAntony
    программист, сис. админ
    Еще одна причина пустоты в FormData если у всех input стоит атрибут disable. Никак не мог понять в чем беда, а этот аттрибут перед выполнении запроса расставлялся через js. Видимо тот, кто делал эту форму так ее защитил от ввода на время запроса :) Вроде смешно, а я 2 часа убил.
    Ответ написан
    2 комментария
  • Нужен софт для того, чтобы мышь «дёргалась»?

    IllariPosselt
    @IllariPosselt
    Поищите какой-нибудь автоматизатор действий мыши и клавиатуры, и настройте его через запуск по расписанию.
    Ответ написан
    2 комментария
  • Нужен софт для того, чтобы мышь «дёргалась»?

    @osof
    Где-то я читал о бесхитростном способе «дергать» мышь. Положить оптическую мышь на механические часы с достаточно жирной секундной стрелкой. Каждую минуту проходящая под оптический датчиком стрелка подвинет курсор на пиксель.
    Ответ написан
    1 комментарий
  • Какая версия Ubuntu лучше для бюджетного VPS?

    @Drno
    Ну обычно ставится последняя стабильная. Это ubuntu 20.04lts. Да, она жрет больше чем 18. но ненамного
    У меня под VPN - ubuntu 20.04, 1CPU\512mb\5gb disk.
    Т.к. оперативки мне надо было 1гб, я сделал еще swap file на 1гб.
    После добавления swap с диска и установки LXC контейнера от Антизапрет - свободного места 600мб осталось на диске))
    Ответ написан
    Комментировать
  • Какая версия Ubuntu лучше для бюджетного VPS?

    @AVKor
    Debian 11 или Ubuntu 20.04. Нет смысла ставить более старые версии.
    Ответ написан
    Комментировать
  • Какая версия Ubuntu лучше для бюджетного VPS?

    karabanov
    @karabanov Куратор тега Ubuntu
    Системный администратор
    Ubuntu 20.04 - свежее ядро, долговременная поддержка. Серверная версия места почти не занимает.
    Если по религиозным причинам не устраивает, то Debian 11.
    Ответ написан
    Комментировать
  • Как скопировать html код одного блока сайта и все стили его дочерних элементов?

    seregajd999
    @seregajd999
    Начинающий веб разработчик))
    Расширение для Google. CSS Used

    Ответ написан
    Комментировать
  • Как скопировать html код одного блока сайта и все стили его дочерних элементов?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Копипастишь кусок html и весь css сюда https://uncss-online.com/
    Жмакаешь кнопу
    Профит!!!!!!
    Ответ написан
    2 комментария