Задать вопрос
  • На каком языке лучше писать api (читайте описание)?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Вначале нужно определить, для чего именно "лучше". А вообще, выжимайте максимум из того, с чем работаете, а уже затем переписывайте узкие места.
    Ответ написан
    Комментировать
  • FastAPI Prometheus_fastapi_instrumentator где мне следует разместить?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    где мне следует разместить Prometheus_instrumentator — внутри или снаружи lifespan?

    Снаружи lifespan, чтобы он был доступен на протяжении всего жизненного цикла приложения. Но instrumentator.instrument нужно вызывать после создания экземпляра fastapi, но до запуска самого приложения.
    Ответ написан
    1 комментарий
  • Как скрывает исходящие ссылки этот сайт?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    есть ли плагин который делеет так автоматически со всеми внешними ссылками

    Не видел таких, а для ссылок с редиректом подойдет плагин редиректор, например 301 Redirects или Redirection, указываете какой url нужно "слушать" и куда с него направлять.
    Ответ написан
    Комментировать
  • Как анализировать рынок IT, чтобы помочь ребенку с выбором направления?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    На данный момент, я бы для ребенка выбрал следующую схему:
    1. Универ на программиста + параллельное изучение java (максимальный спрос).
    2. С третьего курса - бесконечные попытки устроится на стажировку java разрабом в финтех.
    3. Затем (у него уже есть теплое место и достаточно денег), он самостоятельно выберет другое направление по душе, если понадобиться.
    Может есть какие то ресурсы где будет описана конкуренция и тенденция? Заранее спасибо за ответы.

    Основной сайт для поиска работы (как индикатор) подойдет? Я как раз делал подборку 2 недели назад по nodejs, php и python, вроде данные не сильно изменились.

    P.S. В резюме указаны лишь те, кто "активно ищет работу".

    Вакансии (backend):
    - NodeJS (Express/Nest): 57 вакансий.
    - PHP (Laravel/Symfony/Yii): 295 вакансий.
    - Python (Django/FastAPI/Flask): 365 вакансий.
    - .NET: 364 вакансий.
    - Java: 719 вакансий.

    Резюме (backend):
    - NodeJS (Express/Nest): 2111 резюме.
    - PHP (Laravel/Symfony/Yii): 4392 резюме.
    - Python (Django/FastAPI/Flask): 9957 резюме.
    - .NET: 3808 резюме.
    - Java: 9932 резюме.

    Соотношение вакансий к резюме (backend):
    - NodeJS (Express/Nest): 1/37.
    - PHP (Laravel/Symfony/Yii): 1/15.
    - Python (Django/FastAPI/Flask): 1/27.
    - .NET: 1/10.
    - Java: 1/13.

    ----------------------------------

    Вакансии (fullstack):
    - NodeJS (Express/Nest): 132 вакансий.
    - PHP (Laravel/Symfony/Yii): 410 вакансий.
    - Python (Django/FastAPI/Flask): 416 вакансий.
    - .NET: 451 вакансий.
    - Java: 787 вакансий.

    Резюме (fullstack):
    - NodeJS (Express/Nest): 2307 резюме.
    - PHP (Laravel/Symfony/Yii): 4257 резюме.
    - Python (Django/FastAPI/Flask): 4951 резюме.
    - .NET: 3100 резюме.
    - Java: 6852 резюме.

    Соотношение вакансий к резюме (fullstack):
    - NodeJS (Express/Nest): 1/17.
    - PHP (Laravel/Symfony/Yii): 1/10.
    - Python (Django/FastAPI/Flask): 1/12.
    - .NET: 1/11.
    - Java: 1/9.

    Итог:
    - NodeJS (Express/Nest) - очень мало вакансий и самая большая конкуренция за рабочее место (в этой подборке), в среднем, в 1.5-2 раза больше, чем в PHP/Python/.NET/Java.
    - Python (Django/FastAPI/Flask) - самое большое число вакансий. Конкуренция за рабочее место в сравнение с PHP в 1.5-2 раза больше. Стоит отметить колоссальную разницу в соотношении вакансий к резюме между backend и fullstack разработчиками - 27 и 12, очень похоже на тех самых "вкатунов", которые "долбят" лишь одно направление, "рисуют" 1-3 года опыта и вперед.
    - PHP, .NET и Java имеют примерно равную конкуренцию.
    Ответ написан
    4 комментария
  • Как wikidot.com определяет, что я в России?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Как wikidot.com определяет, что я в России?

    - IP.
    - Геозона браузера.
    - Язык браузера.
    - DNS/WebRTC утечки прокси.
    - По отпечатку браузера в целом, возможно, он ранее был засвечен на российском ресурсе, который однозначно (по их мнению) позволяет вас отнести к российскому сегменту. Как анти-бот системы определяют ботов и как от них защищаться?
    Ответ написан
    Комментировать
  • Частичный перенос сайта с Tilda на Wordpress: как перенести лишь целевую страницу, а остальные оставить на одном домене?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    оставить на Тильде ради SEO

    Обычно наблюдаю обратное, что то изменилось?
    На мой взгляд, это кошмарные костыли, но возможно есть идеи реализации, или конкретные подводные камни, которые вы можете описать, и заказчик передумает так делать :)

    Есть, можно перенести с тильды на wp весь сайт, ради seo, а так же, чтобы избежать описанный геморрой в вопросе.
    Ответ написан
    Комментировать
  • Какой вид рендеринга лучше использовать для SEO интернет магазина и блога на NextJS?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Если брать интернет магазин и блог на NextJS, то какой вид рендеринга будет правильней использовать для SEO?

    Классический ssr + кэширование.
    Ответ написан
    Комментировать
  • Какие pet проекты востребованы в резюме?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Какие pet проекты востребованы в резюме?

    Либо популярные опенсорсные библиотеки, либо коммерческие проекты, т.е. в вашем случае - никакие.
    Преимущественно занимался на литкоде и немного изучал алгоритмы, никаких библиотек не осваивал, буду нагонять. Хотя хотел бы получить совет на какие именно лучше обратить внимание.

    Следующие и примерно в следующем порядке:
    0. Pip -> uv для виртуального окружения.
    1. Async django + (drf|django-ninja) + postgresql.
    2. Celery.
    3. JS, для "недо-фронта".
    4. FastAPI.
    5. React/Vue для фронта.
    Вопрос в следующем: как сочетать технологии в своих проектах?

    1. Ставите задачу, например - написать интернет магазин.
    2. Гуглите, как сделать то и то, задаете здесь конкретные вопросы. Не лезете в преждевременную оптимизацию (это очень важно!).
    3. Повторить п1-2 99 раз, на разных проектах.
    4. Знаете, где, что и зачем применять.
    Ответ написан
    Комментировать
  • Как устранить ошибку 403 forbidden error wordpress wp-admin?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Я так понимаю, что мой ip не в белом листе

    Возможно, но не факт. Может какой то ультра-плагин выбрасывает 403, почему? А почему бы и нет..?

    Варианты:
    1. Плагин безопасности wp или любой другой плагин блочит. Залезаем по ftp и меняем наименование директории /wp-content/plugins на /wp-content/_plugins.
    2. Хостинг блочит. Если это shared хостинг, пишите в поддержку - пусть разбираются.
    3. Неправильные разрешения на директории. Обычно (для wp), они должны быть такими: папки 755, файлы 644, wp-config.php 440 или 400.
    4. Вирус, который пролез на хостинг и закрыл в .htaccess доступ к админке.

    Гуглить wordpress 403 forbidden wp-admin
    Да с говна на говно, мы предлагали просто сверстать сайт, но ему принципиально использовать wp и elementor.

    Попробуйте не "просто сверстать", а предложить "современный, модный и производительный вариант на wp+gutenberg, на который все переходят с elementor", может прокатит.
    Ответ написан
  • Стоит ли бежать со стартапа?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Не надо ничего гадать и спрашивать, резюме на hh и вперёд по десяткам вакансий, только после этого вы поймёте свою стоимость на рынке. Затем, сообщаете своему работодателю о конкретных офферах от других потенциальных работодателей, и т.к. вы "болеете" за текущий проект и команду, то готовы остаться на прежнем месте за "аналогичную/-X%" зарплату.
    Ответ написан
    Комментировать
  • Что использовать для тестирование в TS?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Ответ написан
    Комментировать
  • Как создать тип данных, представляющий смещение?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    (лево ИЛИ право) ИЛИ (верх ИЛИ низ)

    // Левое ИЛИ правое значение.
    type OffsetHorizontal =
      | { left: number; right?: never; }
      | { right: number; left?: never; }
    
    // Верхнее ИЛИ нижнее значение.
    type OffsetVertical =
      | { top: number; bottom?: never; }
      | { bottom: number; top?: never; }
    
    // Горизонтальные значения, с запретом использования с вертикальными.
    type OffsetHorizontalOnly = OffsetHorizontal & {
      top?: never;
      bottom?: never;
    }
    
    // Вертикальные значения, с запретом использования с горизонтальными.
    type OffsetVerticalOnly = OffsetVertical & {
      left?: never;
      right?: never;
    }
    
    // OffsetHorizontalOnly ИЛИ OffsetVerticalOnly.
    type Offset = OffsetHorizontalOnly | OffsetVerticalOnly;
      
    // Верно:
    // { left: 100 }
    // { right: 100 }
    // { top: 100 }
    // { bottom: 100 }
    
    // Неверно:
    // { left: 100, right: 100 }
    // { top: 100, bottom: 100 }
    // { left: 100, top: 100 }
    // { right: 100, top: 100 }
    // { left: 100, bottom: 100 }
    // { right: 100, bottom: 100 }

    Если понадобиться вариант с И/ИЛИ между осями, то можно так реализовать:
    // Левое ИЛИ правое значение.
    type OffsetHorizontal =
      | { left: number; right?: never; }
      | { right: number; left?: never; }
    
    // Верхнее ИЛИ нижнее значение.
    type OffsetVertical =
      | { top: number; bottom?: never; }
      | { bottom: number; top?: never; }
      
    // OffsetHorizontal И/ИЛИ OffsetHorizontal.  
    type Offset =  
      | OffsetHorizontal  
      | OffsetVertical  
      | (OffsetHorizontal & OffsetVertical);
      
    // Верно:
    // { left: 100 }
    // { right: 100 }
    // { top: 100 }
    // { bottom: 100 }
    // { left: 100, top: 100 }
    // { right: 100, top: 100 }
    // { left: 100, bottom: 100 }
    // { right: 100, bottom: 100 }
    
    // Неверно:
    // { left: 100, right: 100 }
    // { top: 100, bottom: 100 }
    Ответ написан
    1 комментарий
  • Нужна ли официальная маркировка покупаемых в SAPE ссылок как реклама?

    Mike_Ro
    @Mike_Ro Куратор тега Поисковая оптимизация
    Python, JS, WordPress, SEO, Bots, Adversting
    Нужна ли официальная маркировка покупаемых в SAPE ссылок как реклама?

    Понятие рекламы:
    реклама - информация, распространенная любым способом, в любой форме и с использованием любых средств, адресованная неопределенному кругу лиц и направленная на привлечение внимания к объекту рекламирования, формирование или поддержание интереса к нему и его продвижение на рынке;

    Если это "реклама" конкретного продукта, то нужна, и не только в Sape. То, что Sape не является ОРД - не освобождает от потенциального штрафа рекламодателя, т.е. вас.
    Ответ написан
    8 комментариев
  • Почему docker не видит .env?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    не видит эти переменные

    Что значит не видит, как вы это определили? Посмотрите, что происходит в консоли докера на сервере:
    docker-compose up
    docker logs fruityblox_bot

    Возможные варианты:
    - .env не вошел в .tar образ, соответственно не переехал на сервер вместе с ним.
    - .env не лежит в той директории, где вы выполняете docker-compose up.
    Ответ написан
    3 комментария
  • Как получить из массива все возможные пары элементов?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Можно ли это сделать?

    Можно, законом не запрещено.
    Нужно получить все возможные пары элементов.

    В каком виде? Предположу, что в виде пары в массиве (['a', 'b'], ['a', 'c'] итп), тогда можно так:
    const arr = [ 'a', 'b', 'c', 'd', 'e' ];
    
    const pairs = arr.flatMap((x, i) =>
      arr
        .map((y, j) => i !== j ? [ x, y ] : [])
        .filter((pair) => pair.length),
    );
    
    console.log(pairs);
    
    /*
    [
      [ 'a', 'b' ], [ 'a', 'c' ],
      [ 'a', 'd' ], [ 'a', 'e' ],
      [ 'b', 'a' ], [ 'b', 'c' ],
    ...
    ]
    */
    Ответ написан
    1 комментарий
  • В чем разница между selenium, playwright и puppeteer?

    Mike_Ro
    @Mike_Ro Куратор тега Selenium
    Python, JS, WordPress, SEO, Bots, Adversting
    - В 15 годах писал похожий парсер, используя node, fetch и axios, но сейчас часть сайтов возвращает html без таблиц с ценами, почему?

    - Для чего нужны selenium, playwright и puppeteer, если я могу через fetch и axios все получить?

    Скорее всего проблема в динамическом формировании этих данных на странице. Тут сразу 2 правильных ответа, можете и не можете единовременно:
    - Можете - в инструментах разработчика браузера смотрите, с какого адреса приходят данные и затем дергайте данные напрямую, минуя сам сайт, в таком случае можно продолжать использовать fetch.
    - Не можете - если вариант выше сложен, то вам нужен инструмент, который сможет выполнять js на странице. fetch/axios возвращают первый ответ сервера, т.е. js на тот момент еще не выполнился на странице, соответственно данные не были подгружены. Вопрос рендера js на странице решают инструменты по типу selenium, playwright и puppeteer.
    - Если все же использовать selenium, playwright и puppeteer, что из них лучше на данный момент?

    Вначале нужно определить, что понимается под "лучше":
    - Можно использовать критерий современности, тогда puppeteer отпадает (playwright написала команда puppeteer).
    - Можно использовать критерий производительности, тогда selenium проигрывает playwright сразу по 2 пунктам, по прожорливости и отклику на действия.
    - Можно использовать критерий обнаружения анти-бот системами, тогда selenium (с учетом undetected_chromedriver) проигрывает playwright тем, что имеет явную дополнительную задержку в ~100-300мс при выполнении CDP команд, что прям заметно. Playwright такой задержки либо не имеет вообще, либо она в рамках погрешности.
    Можно ли их с nodejs использовать?

    Selenium написан на java, но так же имеется возможность использования его с nodejs. Playwright вообще написан на ts, все примеры документации и сопутствующие библиотеки с большей вероятность будут писаться под ts по умолчанию.
    - Часто вижу о упоминание CDP в контексте парсинга, это зачем и для чего нужно?

    CDP (Chrome DevTools Protocol) грубо говоря - это некие "низкоуровневые" команды для "chromium based" браузеров, который позволяют этим браузером управлять. В playwright так реализованы большинство "высокоуровневых" команд, например: при использовании playwright мы пишем await locator.getAttribute(name), а playwright использует аналогичную команду из CDP DOM.getAttributes или DOM.describeNode.
    - Что использовать для отправки сообщений в телегу?

    Если речь идет об nodejs, то Telegraf.
    Ответ написан
    1 комментарий
  • Как проверить метод POST при тестировании API?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Комментировать
  • Отправка формы html?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    данные формы не поступают в таблицу.

    Что значит "не поступают"? Что делаете и что при этом происходит? В консоли что? Пока придется гадать...
    const pool = mysql.createPool

    Вижу подключение к бд, но проверок успешно ли установлено соединение - нет.
    app.post("/two.html", urlencodedParser, function (req, res) {

    Вижу использование urlencodedParser для обработки данных формы, но не вижу его объявления, попробуйте так (express 4.16.0+):
    // Подключение к бд
    const urlencodedParser = express.urlencoded({extended: false});
    // app.post эндпоинт

    if(!req.body) return res.sendStatus(400);

    Больше инфы:
    console.log("req.body);
    if (!req.body) return res.status(400).send("Данные не были отправлены");

    if(err) return console.log(err);

    Больше инфы:
    if (err) {
      console.error('Error:', err);
      return res.status(500).send('Server error');
    }


    const name = req.body.name;
    const usluga = req.body.usluga;
    const tel = req.body.tel;

    Так симпатичнее:
    const {name, usluga, tel} = req.body;
    < form action="/two.html" method="post">

    Возможно, в будущем, будет лучше указать другой эндпоинт для приема данных с формы?
    <form action="/submit-form" method="post">
    Ну и на всякий, в вашем случае, two.html должен лежать рядом с server.js.
    Ответ написан
    2 комментария
  • Как защитить ленд от дублей при A/B тестировании через 302 редирект?

    Mike_Ro
    @Mike_Ro Куратор тега Поисковая оптимизация
    Python, JS, WordPress, SEO, Bots, Adversting
    часть трафика попадает на вариант B

    Вопрос: хватает ли связки 302 + на варианте B, указывающего на основной URL (вариант A) или есть риск вылетов?

    Предположим, что на страницу Б временно редиректит (302 (temporary move)) 50% посетителей, со стороны поисковика это будет выглядеть как минимум странно или даже подозрительно.

    Попробуйте готовые сервисы А/Б тестирования, например вариокуб (или аналоги). Все тексты, верстка и скрипты вставляются на страницу в момент захода посетителя (без редиректов), эти изменения с большей вероятностью не видны поисковым системам, + не нужно самому управлять редиректами.
    Ответ написан
    Комментировать
  • Как детектить Playwright?

    Mike_Ro
    @Mike_Ro Автор вопроса
    Python, JS, WordPress, SEO, Bots, Adversting
    Отвечу сам себе - сам playwright с патчами (в отличие от selenium) никак не детектить, но не модифицированный (или плохо модифицированный) браузер имеет множество несоответствий с тем, за кого себя выдает бот, их и нужно искать.
    Ответ написан
    Комментировать