• Как сопоставлять товары при парсинге?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    0. Тренируем нейронку распознавать товары, материалы по Вашей теме:
    0.1. https://habr.com/ru/companies/stm_labs/articles/708608/
    0.2. https://new-retail.ru/business/e_commerce/price_ru...
    0.3. Сравнение текстовых описаний через методы обработки естественного языка (NLP), такие как TF-IDF, word2vec, BERT для извлечения смысла и семантического сравнения текстов (Spacy, Hugging Face Transformers и другие библиотеки NLP для анализа текста).
    0.4. Анализ изображений товаров с помощью сверточных нейронных сетей (CNN), которые могут выявлять визуальные сходства между изображениями товаров, даже если они отличаются углом съемки, освещением или масштабом (OpenCV и TensorFlow).
    0.5. Графовые базы данных и алгоритмы, которые могут использоваться для идентификации связей между товарами на основе их атрибутов и отношений.
    1. Нейронка из п0. распознает товары.
    2. Человек в случайном порядке проверяет работу нейронки из п1. и при необходимости, сообщает ей её ошибки. Таким образом происходит дообучение нейронки уже в процессе работы.

    Либо, использовать поисковые движки (с его возможностями полнотекстового поиска и сопоставления), по типу Elasticsearch или OpenSearch (получая наибольшую вероятность сопоставления).
    Ответ написан
    5 комментариев
  • Как организовать доступ к непубличным токенам?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Веб-разработка
    В репозитории хранится .env.example, содержащий заглушки ключей и комментарии с инструкциями для их получения. После клонирования он переименовывается и заполняется.
    Ответ написан
    2 комментария
  • Как разделять относительно одинаковые скрипты между клиентами?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Скрипты выросли. И у них появилась общая часть (shared). Которая не меняется. И вариативная часть которую
    можно спокойно менять под каждого клиента
    . Как выделить общее и частное - это великая тайна.
    И понять ее можно только с опытом.

    Я-бы предложил следующую стратегию. В общее (shared) должны зайти интерфейсы и абстрактные классы
    или какие-то сущности которые почти никогда не меняются. В вариативные части (client1, client2 ...)
    зайдут реализации или то что просто сильно меняется.

    Преимущества данного подхода - будет меньше кода в перспективе. Но есть и недостаток.
    Некоторые клиенты могут почувстовать странное (немотивированное) изменение версии
    в (shared) части которое они не заказывали. Впрочем это может быть редко или вообще никогда.
    Ответ написан
    Комментировать
  • Как разделять относительно одинаковые скрипты между клиентами?

    SeaInside
    @SeaInside
    15 лет пилю все эти штуки
    Проектировать расширяемую, модульную структуру решения (конкретнее без примеров кода не сказать).

    Оставлять в "основном" решении возможность подвязаться на события / переопределить какие-то константы, методы / etc.
    В "клиентских" решениях либо расширять базовое решение (наследование в терминах ООП), либо в основном решении продумывать публичное API так, чтобы иметь возможность императивно дополнять / модифицировать результат основного скрипта. Ну либо проектировать настройки основного решения так, чтобы оно одновременно покрывало все клиентские сценарии (декларативный подход).

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

    Императивный подход куда быстрее запилить, само по себе "основное" решение будет куда меньше, но в коде "клиентских" версий будет гораздо больше неочевидного. Тесты опять-таки, если пишутся, в таком случае должны писаться на клиентских сайтах тоже, так как прохождение тестов на "основном" решении вообще ничего не будет гарантировать.

    Если вышесказанное звучит как-то сложно, то работа над параллельными версиями (если клиентов не больше человек 10) - вполне себе вариант, почему нет. :)
    Ответ написан
    1 комментарий
  • Как найти, где вызывается метод в PHP?

    Sanasol
    @Sanasol Куратор тега PHP
    нельзя просто так взять и загуглить ошибку
    https://github.com/serbanghita/Mobile-Detect/blob/...

    public function __call($name, $arguments)
    Ответ написан
    1 комментарий
  • Почему в ответе скрипта появляется закрывающий тег РНР?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Для ответа на этот вопрос нужна всего лишь капелька здравого смысла.
    Ну и адекватное восприятие реальности, с чем у большинства населения, увы, как раз большие проблемы.

    Человек с адекватным восприятием реальности сделает очень простое умозаключение: если в ответе появляются посторонние символы, то это значит, что они присутствуют в скрипте. После этого найдет эти символы и удалит. Тупо проверив все файлы, которые участвуют в обработке запроса.
    А для неразрешимой проблемы "почему на локалке посторонних символов нету" найдет простое рациональное объяснение: файлы "на локалке" и "не на локалке" отличаются.

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

    Ну и поскольку у меня глаза не могут смотреть на эти хаотичные телодвижения, то вот как этот код может выглядеть на самом деле

    файл init.php
    <?php
    $conn = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8mb4', DB_USER, DB_PASSWORD);  
    $conn -> setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); 
    
    set_exception_handler(function ($e)
    {
        http_response_code(500);
        error_log($e);
        echo json_encode([
                'code' => 'error',
                'message' => 'Internal server error'
        ]);
    });

    файл с кодом
    <?php
    // Подключаемся к базе данных
    require 'init.php';
    
    // Получаем данные
    $list = get_list($conn);
    
    echo json_encode([
        'code' => 'success',
        'data' => $list
    ]);


    Без всей этой кропотливой возни и самоповторов.
    Отсутствие данных ошибкой не является. В JS можно проверить массив data и вывести сообщение, что он пустой. Никакой специальный код для этого передавать не нужно.
    А настоящие ошибки надо обрабатывать единообразно, в одном месте. А не писать обработку после каждой строчки, причем каждый раз по-разному.
    Ответ написан
    3 комментария
  • Как обновить страницу в браузере после изменения в js скрипт?

    @MagicMight
    no magic quotes
    1) Откройте инструменты разработчика и отключите кэширование
    2) Если надо, можете добавить к ссылкам на скрипты динамический хвост типа $script_url . '?t=' . time();
    3)
    // set expires header
    header('Expires: Thu, 1 Jan 1970 00:00:00 GMT');
    
    // set cache-control header
    header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
    header('Cache-Control: post-check=0, pre-check=0',false);
    
    // set pragma header
    header('Pragma: no-cache');

    Prevent Browser Caching for PHP Script
    Ответ написан
    5 комментариев
  • CMS для небольшого веб-проекта?

    Sanes
    @Sanes
    Отзывы это те же самые комментарии. Wordpress подойдет.
    Ответ написан
    1 комментарий
  • Возникает ошибка в логе php если нет UserAgent, как поправить?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    - $agent  = htmlspecialchars($_SERVER['HTTP_USER_AGENT'], ENT_QUOTES);
    + $agent  = htmlspecialchars($_SERVER['HTTP_USER_AGENT'] ?? '', ENT_QUOTES);
    Ответ написан
    Комментировать
  • Как понять эти селекторы?

    Get-Web
    @Get-Web Куратор тега CSS
    Front-End Developer
    К элементу у которого есть оба класса:
    <div class="class-1 class-2">
        Some text
    </div>

    Если бы между ними был пробел .class-1 .class-2 тогда стиль применялся бы к .class-2 который находится внутри .class-1
    <div class="class-1">
    	<div class="class-2">
    		Some text
    	</div>
    </div>
    Ответ написан
    Комментировать
  • Как установить php8.2-sqlite3 Ubuntu 18?

    karabanov
    @karabanov Куратор тега Ubuntu
    Системный администратор
    Под такой старый дистрибутив Ondrej не собирает пакеты.

    Отвечая на вопрос "Как установить php8.2-sqlite3 Ubuntu 18?" могу предложить запускать PHP в контейнере.
    Ответ написан
    3 комментария
  • Как правильно перехватывать события ухода пользователя со страницы?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Ответ написан
    Комментировать
  • Как сделать чтобы фотографии были также слитно?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Практически весь код нужно выкинуть..
    /*.photo__section {*/
    .photo__colage {
      /*height: 857px;*/
      /*display: flex;*/
      /*display: inline-block;*/
      /*justify-content: space-between;*/
      /*align-items: center;*/
      display: grid;
      grid-template-columns: repeat(4, 1fr);
    }
    
    .photo__photo {
      /*width: 477px;*/
      /*height: 357px;*/
      /*position: relative;*/
      /*flex-direction: column;*/
      /*justify-content: space-between;*/
      background-size: cover;
      /*margin-left: 0;*/
      /*vertical-align: right;
      /*justify-content: space-between;
      flex-direction: column;*/
    }
    Ответ написан
    Комментировать
  • Как убрать уведомление 'Опасный сайт'?

    @Refguser
    Делаю ИМ и другие решения
    Выкинь это домен. Он в блеклистах. Запаришься вытаскивать.

    Но если сильно хочешь - можешь и заняться. Возможно через годик-другой и вытянешь :)
    Ответ написан
    Комментировать
  • Как заблокировать доступ к ресурсу для конкретного региона?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    GeoIP ngx_http_geoip_module

    1. Nginx должен включать модуль ngx_http_geoip_module.
    2. Качаем БД GeoLite2 Country.
    3. Пример конфига (nginx.conf), с отправкой всех из Индии в 403 лес:
    http {
        geoip_country /path/to/GeoLite2-Country.mmdb;
        map $geoip_country_code $allowed_country {
            default yes;
            IN no; # banned india
        }
    }
    
    server {
        if ($allowed_country = no) {
            return 403;
        }
    }
    Ответ написан
    5 комментариев
  • Существуют визуальные панели управления сервером?

    @Refguser
    Делаю ИМ и другие решения
    Панелей управления сервером полно самых разных. И у всех свои задачи и возможности.
    От специализированных для web-серверов (ISPmanager, CPanel. aaPanel и тд) до более широких систем управления типа Webmin.
    Ответ написан
    Комментировать
  • Как узнать width и height видеофайла при загрузке на сервер?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    ffmpeg
    Ответ написан
    Комментировать
  • Как создать прокси сервер на своём компьютере?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    Чтобы создать прокси сервер на своем компьютере - нужно установить и запустить прокси сервер на своем компьютере
    Ответ написан
    Комментировать