• Как можно ускорить код php?

    XXXXPro
    @XXXXPro
    Fullstack Web developer
    Насколько я понимаю, это алгоритм распознавания лица. Можно использовать готовый из PHP OpenCV (https://github.com/php-opencv/php-opencv). Ну или если в вашем варианте есть какие-то отличия, то реализовать этот же код заново, используя функции PHP OpenCV. Там большая часть вычислений реализована на C, поэтому выполняться будет существенно быстрее. (Правда, для этого нужен VDS, где можно самому ставить PHP extensions, а не обычный хостинг.)
    Ещё вариант — переписать код на C самостоятельно, без OpenCV, так, чтобы он висел в виде демона, а взаимодействие с ним происходило через Unix-сокет.
    Также, как правильно отметили в комментариях, некоторое ускорение может дать переход с 5 на 7 версию PHP.
    Ответ написан
    Комментировать
  • Почему не проходит пинг до пк?

    XXXXPro
    @XXXXPro
    Fullstack Web developer
    Проверьте маски подсетей в роутере BSBO_09_L и на самом bad_man, возможно, они прописаны неправильно. И вообще, проверьте есть ли в роутере запись в таблице маршрутизации для 172.31.1?
    Ответ написан
  • Почему программа не видит путь к файлу?

    XXXXPro
    @XXXXPro
    Fullstack Web developer
    Нужно формировать путь одинаково. А то в первом случае он у вас пишется относительно текущего каталога:
    "./downloads/{}.exe".format(package)
    а во втором — относительно пути, где лежит скрипт:
    os.path.dirname(os.path.abspath(__file__))+"\\downloads\\{}.exe".format(package)
    Если текущий каталог — это каталог со скриптом, то всё работает нормально, если же нет, то файл найти не удаётся. Причём я бы использовал второй вариант (с абсолютным путём).
    Ответ написан
    Комментировать
  • Можно ли сделать открытие камеры на телефона со сканером ш-к по на сайте?

    XXXXPro
    @XXXXPro
    Fullstack Web developer
    Максимум, что можно сделать — это вставить вот такой input:
    <input type="file" accept="image/*" capture="camera" />

    По щелчку по нему на мобильных устройствах будет вызываться камера, а не выбор файла, как обычно. Дальше можно на событие onchange для этого input повесить отправку формы на сервер. А вот распознавание кода и всю последующую обработку придется делать на сервере. Или писать полноценное Android-приложение.
    Ответ написан
    Комментировать
  • Как исправить ошибку при запуске PHP скрипта?

    XXXXPro
    @XXXXPro
    Fullstack Web developer
    Это вообще-то не ошибка, а предупреждение, связанное с тем, что массив $argv определен только при запуске из командной строки, а вы скрипт через Web-сервер запускаете. Тем не менее, код, по идее, отрабатывает нормально.
    Чтобы избавиться, нужно добавить дополнительную проверку:
    if (!empty($argv) && array_key_exists('1', $argv) && mb_strlen($argv[1]) > 2) {

    И еще не могу не заметить: делать include файла, имя которого пришло извне (из GET-запроса) без каких-либо проверок — в общем случае очень серьезная дыра в безопасности.
    Ответ написан
  • Не обновляется Apache2. Пишет (Job for apache2.service failed because the control process exited with error code.) Что делать?

    XXXXPro
    @XXXXPro
    Fullstack Web developer
    Вариант 1. Проверить, что нет ошибок в конфиге:
    apache2ctl -t
    Вариант 2. Посмотреть логи и статус службы:
    tail /var/log/apache2/error.log
    journalctl -xu apache2.service
    Вариант 3. Запустить вручную из консоли в отладочном режиме: apache2 -X, чтобы все ошибки выводились в консоль.
    Ответ написан
  • Какой самый компактный способ проверить поле крестики-нолики?

    XXXXPro
    @XXXXPro
    Fullstack Web developer
    Для классических крестиков-ноликов 3x3, на мой взгляд, проще всего сделать так: хранить выставленные на поле на поле крестики и нолики в одномерном массиве. А для проверки сделать массив для проверки выигрышных комбинаций, где перечислить смещения в основном массиве. И дальше — сделать цикл для проверки.
    То есть получаем вот что:
    var game_field=[' ',' ',' ',
    ' ',' ',' ',
    ' ',' ',' '];
    var wins = [[0,1,2],[3,4,5],[6,7,8],[0,4,8],[2,4,6],[0,3,6],[1,4,7],[2,5,8]];
    
    function check_game_over() {
      for (i=0; i<wins.length; i++) { // перебираем все выигрышные комбинации
        var game_over=true;
        if (game_field[wins[i][0]]!=' ') { // если первая из проверяемых клеток не пуста, начинаем проверку
          for (j=1; j<wins[i].length; j++) { // начинаем с единицы, так как сравнивать первую выигрышную клетку с собой не имеет смысла
            if (game_field[wins[i][0]!=game_field[wins[i][j]]) { // если значение в текущей клетке проверяемой комбинации отличается от первой, комбинация не выигрышная, выходим из вложенного цикла
              game_over=false;
              break;
            }
          }
          if (game_over) return game_field[wins[i][0]]; // возвращаем выигравшую сторону — крестик или нолик
        }
      }
      return false;
    }
    Ответ написан
  • Как сократить js код?

    XXXXPro
    @XXXXPro
    Fullstack Web developer
    Зачем нужны конструкции вида var a=a и зачем текущее время сначала присваивать в x, а потом переносить в now_time? Можно сразу в now_time поместить.
    Еще можно объединить условия: c>0 && a>0 && b>0
    Также можно применить такую вещь как замыкание (closure), если знаете, как его делать, хотя особого сокращения оно тут не даст.
    А setInerval можно вызывать в обычном цикле for:
    <?php for ($i=0; $i<5; $i++) echo 'setInterval(calc_sum,1000,"'.$cfg['pf'.$i].'",".$usdat['fa'.$i].'","'.$usdat['sbor'].'",24,"'.$i.'");'; ?>
    Ответ написан
    Комментировать
  • Как правильно генерировать конечную цену и строить динамические скидки?

    XXXXPro
    @XXXXPro
    Fullstack Web developer
    Во-первых, я сделал бы интерфейс iPriceCalc, и набор классов, реализующих этот интерфейс, и все расчеты вынес бы в них. (Соответственно, в классе должен быть один метод, в который передается информация о товаре и, на всякий случай, залогиненном пользователе.) Плюс на всякий случай предусмотрел бы для каждого товара предусмотреть возможность указывать в базе, какой именно класс для расчета цены должен использоваться.
    Редактор динамических скидок сделал бы так: таблица, в каждой ее строке несколько selectов. В первом из них выбираем, что именно проверяем (текущее число, текущий день недели, текущее время, цена продукта, категория и т.п.). Во втором — операция проверки (меньше, больше, равно, не равно). В третьем - значение с которым сравниваем.
    В конце таблицы — размер скидки и ее тип (абсолютная в рублях или относительная в процентах).
    Все это сохраняем в массив (с помощью сериализации в PHP или JSON) и передаем классу, осуществляющему расчет цены. Он проходит этот массив последовательно, берет каждую строку, подставляет вместо первого selectа реальное значение, смотрит, какую операцию нужно применить и сравнивает. Если все условия в наборе выполнились, скидка применяется и класс возвращает исправленную цену.
    То есть получаем примерно такой:
    class ConditionPriceCalculator implements iPriceCalc {
    function calc($product,$user) {
    $data = get_file_contents('файл с условиями');
    $conditions = unserialize($data);
    $result = true;
    foreach ($conditions as $condition) {
       // в поле comp_value лежит условное значение из первого selectа, для которого нужно посчитать реальное значение
       if ($condition['comp_value']=='day') $value1==date('d');
       elseif ($condition['comp_value']=='weekday') $value1=date('N');
      // ... и так далее
      $value=$condition['value']; // тут хранится, с чем сравнивать
      if ($condition['op']=='eq') $cur_res = $value1==$value2;
      if ($condition['op']=='ne') $cur_res = $value1!=$value2;
      //  и т.д.
      if (!$cur_res) $result = false; // если условие не выполнилось, общий результат сбрасываем в false, еще можно добавить break;
    }
    if ($result) {
      // если все условия из набора выполнились, рассчитываем новую цену:
    }
    }
    }

    В принципе, можно предусмотреть, чтобы таких наборов условий было несколько и применялся первый сработавший.
    Единственное ограничение — это то, что нельзя в одном наборе условий объединять их по "ИЛИ", а не по "И".
    Ответ написан
    1 комментарий
  • Как сделать плавающий блок замирающий под header?

    XXXXPro
    @XXXXPro
    Fullstack Web developer
    Навесить обработчик на событие onscroll и смотреть, насколько прокрутилась страница от начала. Т.е. будет что-то вроде такого:
    jQuery('body').on('scroll',function (e) {
      if (jQuery('body').scrollTop()>500) { // вместо 500 поставить отступ среднего блока от верха страницы
        jQuery('.midblock').addClass('fixedblock');
      }
      else {
       jQuery('.midblock').removeClass('fixedblock');
      }
    });

    Тут предполагается, что у среднего блока постоянно прописан класс midblock, а когда он переходит в состояние fixed, то добавляется класс fixedblock, в котором прописаны position:fixed и отступ сверху.
    Ответ написан
  • Какие есть современные альтернативы Wordpress?

    XXXXPro
    @XXXXPro
    Fullstack Web developer
    У меня есть мысль InstantCMS в этой роли попробовать. Единственное что — она не совсем блоговый движок, чтобы ее таковым сделать, нужно немного настроить — создать соответствующий тип контента, добавить и настроить виджеты. А по легкости и скорости показатели очень даже неплохие: у меня достаточно навороченный сайт грузится менее чем за 0.5 секунды. Плюс еще есть склейка и сжатие CSS и JS из коробки.
    Ответ написан
    2 комментария
  • Правильная переадресация htaccess?

    XXXXPro
    @XXXXPro
    Fullstack Web developer
    Нужно посмотреть, что в текущем .htaccess прописано. Скорее всего, нужно для URLов типа /novosti/ добавить в конец символ $ (конец строки), чтобы на URL вида /novosti/kategoriya/ корректно выдавался статус 404, а не делать костыли вида редиректов.
    Ответ написан
    Комментировать
  • Как лучше реализовать хранение данных в БД? Какой стек технологий выбрать?

    XXXXPro
    @XXXXPro
    Fullstack Web developer
    А зачем такое делать на NoSQL? Тут реляционные базы вполне подходят.
    Я бы вообще ограничился тремя таблицами:
    1) сайт
    2) товар вообще (по сути, там хранится только его id и наименование)
    3) товар на конкретном сайте (тут хранится id товара, id сайта, цена, дата парсинга).
    Ответ написан
    7 комментариев
  • В чем причина ошибки modx?

    XXXXPro
    @XXXXPro
    Fullstack Web developer
    Вы меняете кодировку в MySQL, а тут речь идет о кодировке в самом PHP. Если конкретно, где-то (скорее всего, в php.ini в опции internal_encoding, или в .htaccess в директивах php_value , или в настройках самого MODX, из которых через ini_set выставляется та же опция) прописана кодировка в виде utf8 вместо utf-8, что PHP воспринимает как некорректное значение.
    Кроме того, это не ошибка, а предупреждение.
    Ответ написан
    Комментировать
  • Оптимизация css?

    XXXXPro
    @XXXXPro
    Fullstack Web developer
    Я обычно жму до первого варианта: с одной стороны, экономия получается довольно существенная, с другой — код остается относительно читаемым и с ним можно работать напрямую, без постоянного пересжатия из исходной версии.
    Ответ написан
    Комментировать
  • Какую программу или сервис выбрать для расшифровки интервью?

    XXXXPro
    @XXXXPro
    Fullstack Web developer
    Можно попробовать Яндекс.Speechkit Cloud. Но там (по крайней мере, в бесплатной версии) лимит на размер загружаемого сообщения, так что придется резать по минутам. Плюс еще требуется, чтобы запись была качественной, без посторонних шумов.
    Ответ написан
    Комментировать
  • Как отловить grep без ожидания конца выполнения команды?

    XXXXPro
    @XXXXPro
    Fullstack Web developer
    Опция --max-count=1 вам в помощь (или даже просто -m).
    Ответ написан
    Комментировать
  • Как получить директорию из которой вызывалась программа?

    XXXXPro
    @XXXXPro
    Fullstack Web developer
    Функция os.getcwd() вам в помощь. Естественно, получить такой путь можно только до первого вызова os.chdir (если они у вас есть). Еще вариант — просто прописывать пути к файлам относительно текущего каталога в виде './file.txt'.
    Ответ написан
    Комментировать
  • Удаление конкретного элемента на jQuery?

    XXXXPro
    @XXXXPro
    Fullstack Web developer
    Нужно прописывать для каждого tr свой id и удалять по нему.
    Т.е. что-то вроде
    $('table').append('x');
    И потом удалять по селектору #del_номер.
    Другой вариант — сразу при создании tr вешать на него событие click и удалять по нему:
    $('.add_to_this').append(function() {
      return $(''<tr class="del"><td><input type="text" name="name'+i+'" placeholder="название"/></td><td><input type="text" name="simbol'+i+'" placeholder="значение"/></td><td><button>x</button></td></tr>'').click(
      function() {
        $(this).remove();
      });
    });
    Ответ написан
  • Доступ к ubuntu server по локальной сети через SSH?

    XXXXPro
    @XXXXPro
    Fullstack Web developer
    А пинг к нему проходит? И сам SSH-сервер настроен и запускается корректно? Получается ли к нему подключиться с него самого а) если коннектиться на localhost, б) если коннектиться по IP-адресу?
    Еще совершенно правильно написали в комментариях: нужно либо маску поменять, либо подсеть на одном из роутеров (второе проще, скажем, настроить на роутере DLink подсеть 192.168.1.0)
    Ответ написан
    Комментировать