• Как лучше сделать парсер данных с разных источников?

    @alexalexes
    В вашей схеме еще не хватает подсистемы scheduler - планировщик заданий.
    Его нужно чаще всего запускать по крону (а может он у вас будет вертеться в бесконечном цикле, а может спать в потоковом режиме выполнения).
    Планировщик, на основе результатов проходов паука, парсера, ограничений на проходимых сайтах, нагрузки собственной системы, будет регулировать частоту запуска перезапуска заданий.
    Желательно, чтобы задания паука и парсера были достаточно атомарны.
    Паук в одну страницу постучал, записал статус получения ответа, каков контент в ответе (html или текстовое сообщение, или JSON и тд.), удалось ли ему распознать структуру, метаданные и тд.
    Если, например, вернулась 404 стр, то возможно, с помощью планировщика установить правило, что можно натравить паука на url чуть позже, через час, день, неделю и тд.
    По аналогии, можно фиксировать статусы работы других подсистем checker-а, парсера.
    Если один из модулей застревает на 5 разе на каком-то задании, то сыпать критическую ошибку в лог и тд.

    В общем, каков бы состав модулей не был, но планировщик нужен.
    Ответ написан
    Комментировать
  • Как делается drag and drop на странице?

    @alexalexes
    Может быть реализовано на нативном JavaScript путем навешивания обработчиков событий onmousedown, onmousemove, onmouseup на манипулируемый элемент (событие onmousedown), а также на заполняющий всю площадь страницы контейнер (события onmousemove, onmouseup). Естественно, механику взаимодействия элементов и отслеживания фазы drag and drop вам придется реализовать самостоятельно.
    PS: При реализации drag and drop не забудьте про пользователей с сенсорным экраном. У них другая группа событий: ontouchstart, ontouchmove, ontouchend, и число точек касаний у них может быть больше чем одна.
    Ответ написан
    Комментировать
  • Почему всегда выводит Not Include после refreshData()?

    @alexalexes
    Вместо этого условия, посмотрите, что у вас формируется в переменной pageAvailable при помощи точки останова или выведите непосредственно ее в лог.
    if (pageAvailable == false) {
                                        console.log("Not Include");
                                    } else{
                                        console.log("Include");
                                    }

    Тогда поймете, что у вас возникнет одна из двух ситуаций:
    - либо сравнение нужно до типа данных использовать: вместо == на ===.
    - либо вот это Object.values(response['data']).some(n => n.name === 'ArmPaper Idea'); не вылавливает из объекта response['data'], то что вы хотите выловить.
    Ответ написан
    Комментировать
  • Как правильно отправить письмо?

    @alexalexes
    У вас тег tr без пары закрывающей оказался. xslt разметка такое не прощает.
    Делайте либо так:
    <tr>
     <xsl:for-each select="Product">
    ......
    </xsl:for-each>
    </tr>

    Либо так:
    <xsl:for-each select="Product">
    <tr>
    ......
    </tr>
    </xsl:for-each>

    Если бизнес логика хитрая, и одним for-each не отделаться, вызывайте еще один template внутри содержимого tr.
    Ответ написан
    1 комментарий
  • Монитор теряет сигнал, помогает только перезагрузка. Почему?

    @alexalexes
    Почему так происходит, вам только радиомастер может рассказать, и то, когда вскроет монитор и сделает хотя бы поверхностную диагностику компонентов.
    Можно все что угодно обнаружить. От банального замыкания дорожек/контактов от многолетней пыли, до выхода из строя радио элементов, например, вздувшиеся конденсаторы на блоке питания.
    Ответ написан
    Комментировать
  • Как распарсить данные с json?

    @alexalexes
    Соответствующей функцией:
    https://developer.mozilla.org/ru/docs/Web/JavaScri...
    Ответ написан
    Комментировать
  • Как сгруппировать диалоги по двум полям в MySQL через GroupBY?

    @alexalexes
    Пробуйте этот запрос с вычисленным псевдопараметром dialog_hold.
    Суть в том, что этот параметр одинаковый для переписки пользователя 1 и пользователя 2 в ту и другую сторону.
    Должно получаться число 1000002 при sender_id=1, recipient_id=2 и при sender_id=2, recipient_id=1.
    По этому параметру можно отсортировать переписку так, чтобы беседы пользователей шли по порядку.
    Значение 1000000 должно быть заведомо большое, чем возможно число пользователей в вашей системе в любой исторический период. Однако, max(user_id) * 1000000 + max(user_id) никогда не должно превышать макс. целочисленное значение, с которым может работать СУБД (верхний предел id пользователей, когда этот финт ушами способен работать).
    select a.*
    from (select d.id, d.tovar_id, d.sender_id, d.recipient_id, d.message,
                 case
                   when d.sender_id < d.recipient_id
                   then d.sender_id * 1000000 + d.recipient_id
                   else d.recipient_id * 1000000 + d.sender_id
                 end dialog_hold
            from dialogs d
           where d.tovar_id = :tovar_id
             and (d.sender_id = :user_id or d.recipient_id = :user_id)
          ) a
    order by  a.tovar_id, a.dialog_hold, a.id
    Ответ написан
  • Есть камера от регистратора как её подключить к ТВ или компьютеру?

    @alexalexes
    Игра не стоит свеч.
    Этой камере нужно где-то брать 12 вольт (две жилы у джека - эта питание, третья - сигнал RCA желтый тюльпан).
    При подключении к телевизору вам придется заморочиться с отельным блоком питания,
    а при подключении к ПК, питание можно взять из БП системника, а вот для видеосигнала нужна плата видеозахвата, либо ее usb-аналог.
    Картинка скорее всего будет 720 × 576 - это как у любой самой бюджетной камеры, которая цепляется напрямую по USB без всяких заморочек.
    Ответ написан
  • Не приходят формы с сайта на почту?

    @alexalexes
    У вас что клиентский, что серверный скрипт не имеют функционала оповещать пользователя о возникшей ошибке.
    php-скрипт должен отдавать хоть малюсенькое текстовое сообщение, что удалось отправить почту.
    ....
    $send_result = mail($admin_email, adopt($form_subject), $message, $headers );
    echo $send_result ? 'success' : 'fail';

    Клиентский скрипт должен иметь возможность в коллбэк функции done словить это сообщение:
    ...
    ).done(function(e)
    {
        var resp = e.responseText;
        alert(resp === 'success' ? 'Сообщение отправлено!' : 'Ошибка отправки сообщения');
    ....
    }

    Для аякса хорошо бы еще добавить функцию fail(), когда серверный скрипт вообще не отвечает.
    $.ajax({
          type: "POST",
          url: "../js/mail.php", //Change
          data: th.serialize()
        }).done(function(e) {
         .......
        }).fail(function()
        {
          alert('Фатальная ошибка отправки!');
        });

    Немного доработав скрипты, и получив некоторые сообщения, можно будет сориентироваться, какого рода ошибка у вас возникла.
    Ответ написан
    Комментировать
  • Как добавить тег в скрипт?

    @alexalexes
    А что мешает плюсануть текст в нужном месте?

    ......('span').html( '<i class="new"></i>' + $('#form-uploa......


    PS: правда для вывода текста в тег использовать не метод text(), а html().
    Ответ написан
  • Как выполнить нужные условия до и после определенной даты JS?

    @alexalexes
    var now = new Date(); // Текущая дата
           var event_date = new Date ("Jul 17 2018 11:30:00 GMT+0300"); // дата события (+ часовой пояс, крайне обязательно)
           var dif_time = now.getTime() - event_date.getTime(); // разность в милисикундах по UTC (время приведено в один часовой пояс, крайне удачно)
           var duration = 60 * 60 * 1000; // время длительности вебинара в милисекундах
           switch(true)
           {
               case dif_time < 0:
                // действия до события
                break;
              case dif_time >= 0 && dif_time < duration:
                // действия во время события до окончания, (dif_time / 1000) - куда перематывать
                break;
              case dif_time >= duration:
                // действия после окончания события
                break;
           }
    Ответ написан
    4 комментария
  • Почему на MacOS криво работает кнопка наверх?

    @alexalexes
    У вас очень тяжелый файл www.annalev.ru/static/bundle/js/bundle.min.js, в котором лежит функция скроллинга, пока он не загрузиться на клиенте полностью, скроллинг не будет работать.
    Решить проблему можно несколькими путями:
    1) Все легковесные функции, которые не зависят от библиотек поместить в отдельный файл, который будет подключаться выше списком, чем тяжеловесные js.
    2) Написать код легковестных функций прямо в документе (или в общем шаблоне страниц, где описывается head или footer, в случае если у вас CMS);
    3) Написать обработчик скроллинга непосредственно в атрибуте onclick.
    PS: Дополнительно, посмотреть, какой функционал можно "выбросить" в подключенных библиотеках.
    Например, на JQuery можно опционально отключать некоторые возможности и скачивать js-файл значительно меньших размеров, чем в полной комплектации.
    Ответ написан
    4 комментария
  • Почему некорректно скачивается pdf в firefox?

    @alexalexes
    Приведенный код напрямую не связан с технологией ajax. Он всего лишь подставляет в элемент с id-шником lp-download-pdf свойства href (по наличию этого свойства можно догадаться, что это элемент-ссылка) и download, затем, принудительно программно запускает событие клика, словно по элементу нажал пользователь.
    Как браузер отреагирует на двойное "роботизированное" нажатие на ссылку с одним и тем же href можно только догадываться. Можно попытаться сделать ссылку при каждом нажатии уникальной.
    Подставьте на этом этапе какой-нибудь рандомный параметр к ссылке:
    .attr('href', string.trim() + "?random_param=" + Math.round(Math.random() * 1000))
    Ответ написан
    Комментировать
  • Почему не срабатывает аякс запрос?

    @alexalexes
    $("#form")
    У вас на странице формы имеют атрибут id="form" или id="form1"?
    Нет.
    А на что будут вешаться обработчики submit в этом случае? Ни на что.
    Решение:
    Для отладки JS-кода в любом непонятном месте, пока вы новичок, проверяйте, что вылавливает JQuery селектор:
    var form_elem = $("#form"); // тут должны словить DOM-объект формы в JQuery обертке
    form_elem.submit(function(.......... // а тут цепляем обработчик.

    Чтобы приведенный выше код поставил обработчики submit, на странице должны существовать элементы с такими атрибутами:
    <form id="form"></from>
    или такой:
    <form id="form1"></from>
    Атрибуты action и method, конечно, должен быть определены.
    Ответ написан
  • Можно ли задать соотношение сторон изображения?

    @alexalexes
    У меня самый колхозный вариант был: создать png картинку с прозрачным цветом с нужным соотношением сторон (и самых гигантских размеров, каким может быть монитор) и поместить ее в виде img в контейнер на самом глубоком z-значении.
    Пропорции контейнера выравнивались по содержимому и одновременно он мог быть любых не фиксированных стилем размеров.
    Ответ написан
    Комментировать
  • Почему параметр функции undefined?

    @alexalexes
    Проследите за тем, что значит this, там где работает функция.
    Контекст this теряется, если функция вызвана обработчиком какого-нибудь события.
    PS: если нужно обратиться с собственному классу, то обычно обращаются либо к глобальному экземпляру объекта, либо делают обвязку функции с помощью передачи this через переменную замыкания.
    Ответ написан
    Комментировать
  • Как избавиться от бага на IOS?

    @alexalexes
    Скорее всего нужен svg формат для гарнитуры шрифта.
    PS: по стопам вопроса Как подключить шрифт для iOS?
    Ответ написан
  • Как убрать белое пространство после футера?

    @alexalexes
    Наведите порядок в этом контейнере, из-за него распирает страницу:
    <div id="container">
    <div id="wb_bs1" style="position:absolute;left:0px;top:616px;width:85px;height:85px;z-index:753;">
    <a id="bs1" style="visibility:hidden;">&nbsp;</a>
    </div>
    <div id="wb_bs3" style="position:absolute;left:0px;top:1670px;width:85px;height:85px;z-index:754;">
    <a id="bs3" style="visibility:hidden;">&nbsp;</a>
    </div>
    <div id="wb_bs4" style="position:absolute;left:0px;top:2984px;width:85px;height:85px;z-index:755;">
    <a id="bs4" style="visibility:hidden;">&nbsp;</a>
    </div>
    <div id="wb_bs6" style="position:absolute;left:3px;top:6143px;width:85px;height:85px;z-index:756;">
    <a id="bs6" style="visibility:hidden;">&nbsp;</a>
    </div>
    <div id="wb_bs7" style="position:absolute;left:0px;top:6713px;width:85px;height:85px;z-index:757;">
    <a id="bs7" style="visibility:hidden;">&nbsp;</a>
    </div>
    <div id="wb_bs8" style="position:absolute;left:0px;top:7372px;width:85px;height:85px;z-index:758;">
    <a id="bs8" style="visibility:hidden;">&nbsp;</a>
    </div>
    <div id="wb_bs9" style="position:absolute;left:0px;top:8586px;width:85px;height:85px;z-index:759;">
    <a id="bs9" style="visibility:hidden;">&nbsp;</a>
    </div>
    <div id="wb_bs10" style="position:absolute;left:0px;top:9129px;width:85px;height:85px;z-index: 10000;">
    <a id="bs10" style="visibility:hidden;">&nbsp;</a>
    </div>
    </div>

    PS: Похоже на какой-то костыль, благодаря чему поддерживается необходимая высота страницы.
    Ответ написан
    2 комментария
  • Как переместить ось x, в Chart.js, в точку 0 оси координат x-y?

    @alexalexes
    https://code.tutsplus.com/ru/tutorials/getting-sta...
    Обратите внимание на этот пример:
    var chartOptions = {
      scales: {
        yAxes: [{
          barPercentage: 0.5,
          gridLines: {
            display: false
          }
        }],
        xAxes: [{
          gridLines: {
            zeroLineColor: "black",
            zeroLineWidth: 2
          },
          ticks: {
            min: 0,
            max: 6500,
            stepSize: 1300
          },
          scaleLabel: {
            display: true,
            labelString: "Density in kg/m3"
          }
        }]
      },
      elements: {
        rectangle: {
          borderSkipped: 'left',
        }
      }
    };

    В особенности, на свойства gridLines и ticks у xAxes.
    Прописывая данные свойства у себя в примере и отрегулировав числовые параметры, вы сможете добиться желаемого положения и отображения осей.
    Ответ написан
    4 комментария