Задать вопрос
  • Какой монитор выбрать для разработки и 3D графики?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Самый главный критерий - бюджет, про который Вы не сказали.

    На его смену хочу взять побольше размером 27-28, с разрешением 2k.

    2к - это минималка, чтобы слепой с метра не заметил пикселей на мониторе. О какой графике Вы говорите?
    смысла брать 4k и 30 дюймовые наверное нет...

    Минимум 4к, тк. ppi должен быть выше 150.
    Минимум rgb 100%. Конечно лучше мерить в srgb, но тут как получится.

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

    Хорошая статья, хоть и времен мамонтов.
    Ответ написан
  • Как найти точный url сайта на javascript?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Пользуюсь сайтом написаном на javascript

    SPA?
    Можно ли както узнать url и заходить через него в интересующиеся разделы напрямую.

    Если js настроен на обработку url параметров, то можно, но учитывая, что url не меняется, то вероятнее всего нет.

    Дайте ссылку на сайт, тогда ответ будет точнее.
    Ответ написан
  • Как преобразовать файлы с именами в числа?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Самый старый файл - первый:
    import os
    import glob
    
    # sort by change date
    def sort(path, ext="*.jpg"):
        files = glob.glob(os.path.join(path, ext))
        files.sort(key=os.path.getmtime)
        return files
    
    # rename files
    def rename(path):
        _sorted = sort(path)
    
        for i, file_path in enumerate(_sorted, 1):
            folder, old_name = os.path.split(file_path)
            new_name = f"{i}.jpg"
            new_path = os.path.join(folder, new_name)
    
            os.rename(file_path, new_path)
            print(f"Rename {old_name} to {new_name}")
    
    if __name__ == "__main__":
        # path to dir with images
        folder_path = "/path/to/dir/images"
        rename(folder_path)
    Ответ написан
    5 комментариев
  • Можно ли как то отследить элемент JS?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Просто блок div c классом

    Класс js-pagination-item

    Из автора вопроса, спустя несколько уточняющих вопрос - все таки получилось добыть разведданные, ими оказался элемент с селектором div.js-pagination-item.

    Заюзаем MutationObserver (как предложит тов. Rsa97):
    // wait dom loaded
    document.addEventListener('DOMContentLoaded', () => {
      // observer
      const observer = new MutationObserver((mutations) => {
        mutations.forEach((mutation) => {
          if (mutation.addedNodes.length > 0) {
            mutation.addedNodes.forEach((node) => {
              // target element
              if (node.nodeType === 1 && node.classList.contains('js-pagination-item')) {
                // print in the console log
                console.log('Detected element!');
              }
            });
          }
        });
      });
    
      // start
      observer.observe(document.body, {childList: true, subtree: true});
    });

    Код дождется полной загрузки страницы и лишь потом начнет наблюдение. Если Ваш элемент появится ранее разгрузки страницы, то уберите слушателя с DOMContentLoaded.
    Ответ написан
    Комментировать
  • Как настроить перенаправление (редирект) с домена на домен?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Т.к. в вопросе не указаны:
    - Требования по соблюдению вложенности и параметров url;
    - Тип редиректа;
    - Расположение .htaccess.

    То напишу 2 варианта (с и без вложенности и параметров), а оба варианта будут использовать 301 редирект.

    Предполагается, что .htaccess находится в корневой директории домена:

    # 123.ru > redirect 301 > http://12345.ru,
    # 123.ru/?test=123 > redirect 301 > http://12345.ru,
    # 123.ru/cats/?test=123 > redirect 301 > http://12345.ru:
    
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^123\.ru [NC]
    RewriteRule ^(.*)$ http://12345.ru/ [L,R=301]

    # 123.ru > redirect 301 > http://12345.ru,
    # 123.ru/?test=123 > redirect 301 > http://12345.ru/?test=123,
    # 123.ru/cats/?test=123 > redirect 301 > http://12345.ru/cats/?test=123:
    
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^123\.ru [NC]
    RewriteRule ^(.*)$ http://12345.ru/$1 [L,R=301]

    UPD: вариант с перенаправлением любого маршрута (втч. с url параметрами) на 12345.ru:
    # 123.ru/cats/?test=123 > redirect 301 > http://12345.ru:
    
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^123\.ru [NC]
    RewriteRule ^(.*)$ http://12345.ru/ [L,R=301]
    Ответ написан
    2 комментария
  • Почему переменная класса становится undefined при обращении из метода?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Стрелочная функция не имеет своего this, соответственно возьмет его из скоупа выше:
    MyFunc = (e) => {
      console.log("MyVariable: " + this.MyVariable); // oh yes
    }
    Ответ написан
    Комментировать
  • Как правильно делать фильтр на сайте?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Результат интересует как behance. Когда при выборе категории меняется страница работ, url из "behance.ru" превращается "behance.ru/kate", но визуально нет переадресации на новую страницу.

    Если брать пример с behance.ru, то у них на сайте используется vuejs, который предварительно был отрендерен на сервере.

    Если Вы хотите на обычном js такое реализовать, то Вам необходимо менять url при клике на определенный элемент:
    // listeners
    document.querySelector('.showDivan').addEventListener('click', () => filter('divan'));
    document.querySelector('.showShkaf').addEventListener('click', () => filter('shkaf'));
    document.querySelector('.showAll').addEventListener('click', () => filter('all'));
    
    // filtering
    const filter = category => {
      const items = document.querySelectorAll('.product');
    
      items.forEach(item => {
        item.style.display = category === 'all' || item.classList.contains(category) ? 'block' : 'none';
      });
    
      // change url
      history.pushState({}, '', `/category/${category}`);
    }

    Стоит ли делать на чистом js? Ради фана - можно, в остальных случаях - не рекомендуется, т.к. для этого изобрели тот же самый vuejs/reactjs.
    Ответ написан
    1 комментарий
  • Как сделать проще. компактней код?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Попроще, как заказывали!
    const clickTargetElement = document.querySelector('.hiking__about_item_img');
    
    const imageConfigurations = {
      primaryImage: {
        htmlElement: document.querySelector('.img1'),
        sourcePaths: ['img/about_hiking/1.png', 'img/about_hiking/2.png'],
        altTexts: ['House and mountains in the background', 'Snowy mountains']
      },
      secondaryImage: {
        htmlElement: document.querySelector('.img2'),
        sourcePaths: ['img/about_hiking/1.png', 'img/about_hiking/2.png'],
        altTexts: ['House and mountains in the background', 'Snowy mountains']
      }
    }
    
    const toggleImageAttributes = ({htmlElement, sourcePaths, altTexts}) => {
      const isPrimarySource = htmlElement.getAttribute('src') === sourcePaths[0];
      const indexToUse = isPrimarySource ? 1 : 0;
    
      htmlElement.setAttribute('src', sourcePaths[indexToUse]);
      htmlElement.setAttribute('alt', altTexts[indexToUse]);
    }
    
    clickTargetElement.addEventListener('click', () => {
      Object.values(imageConfigurations).forEach(toggleImageAttributes);
    });
    Ответ написан
    4 комментария
  • Как длительное время распознавать слова в браузере?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    https://developer.mozilla.org/en-US/docs/Web/API/S...
    https://developer.mozilla.org/en-US/docs/Web/API/S...
    Как вариант, слушать события result и end, и перезапускать SpeechRecognition:
    const rec = new SpeechRecognition();
    
    rec.addEventListener('result', () => {
      // code
    });
    
    rec.addEventListener('end', () => recognition.start());
    rec.start();


    как принудительно его включить чтобы не отключался пока страница открыта?

    На данный момент - никак. Поведение может варьироваться в зависимости от браузера и его версии. Рекомендуется руками обрабатывать соответствующие события и перезапускать SpeechRecognition.
    при повторном использовании recognizer.start() - появляется диалоговое окно браузера спрашивающее о микрофоне - как этого избежать?

    Если Вы не отзывали разрешение на странице или в рамках одной сессии браузера, - confirm (окно с запросом разрешения на использование оборудования) не должно появляться. Как избежать? - не запрашивать разрешение.
    можно ли отключить это сообщение?

    Это нативное окно браузера и находится вне контекста скриптов на странице.
    Ответ написан
  • Как удалить просроченные товары в разделе товары в ВК автоматически?

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

    Написать скрипт.
    или на чём он пишется

    На языке программирования. Учитывая, что у Вас в тегах Python - то на Python он так же пишется.
    Ответ написан
  • Как правильно закрыть от индексации URL с GET параметром источника ссылки?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Не индексировать страницы в url которых имеется url параметр param, robotx.txt:
    User-agent: *
    Disallow: /*?param=

    Но лучше использовать канонические адреса, html страницы:
    <link rel="canonical" href="https://www.example.com/statya"/>
    Ответ написан
    1 комментарий
  • Насколько законно для крупной компании пробивать человека по почте?

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

    Размер и длина ;) компании не имеют значения. На всех действует 152 ФЗ ("общедоступные персональные данные - персональные данные, доступ неограниченного круга лиц к которым предоставлен с согласия субъекта персональных данных или на которые в соответствии с федеральными законами не распространяется требование соблюдения конфиденциальности").

    Соответственно, в теории можно подать на них в суд за использование ПД, им придется доказать, что Вы давали такое согласие. Однако, на кого Вы будите подавать в суд? Ответчик кто? Вся компания? Конкретный чел? Может, кот пробежал по клаве и взломал пентагон? - экспертизы в студию!

    Я хочу узнать, насколько незаконны их действия?

    Законны, пока не доказано обратное.

    На что они меня пробили, отправили письмо моему начальнику, а сама компания чуть ли не угрожает мне.

    Как мерили уровень "угроз"?
    Нет такой статьи "покушение на угрозу". Это не угроза, пока не доказано обратное.

    Если резюмировать, то овчинка выделки не стоит, с обоих сторон.
    Ответ написан
    Комментировать
  • Как или чем решить новую капчу Yandex SmrtCaptcha?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Существуют ли браузерные расширения для автоматического решения данной капчи?

    Нет, в этом весь смысл капчи.
    Меня эта капча настолько бесит, что я даже готов потратить время и написать свое расширение для обхода, лишь бы было внешнее API для ее решения.

    Пишите - ждать по 20-60 секунд для расшифровки, через специализированные сервисы + это не бесплатно, смысла для личного пользования практически нет.

    alexalexes все правильно написал в комменте.
    Ответ написан
    2 комментария
  • Чем отличается источники трафика в метрике?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    а так же есть еще ya.ru и yandex.ru на которых по одному визиту. Почему они разделились?

    Потому что это разные сайты?
    Ответ написан
  • Как написать скрипт/софт на Python который будет автоматически отвечать на сообщения в телеграмме по шаблону?

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

    Рекомендую начать с гугла и запроса "python telegram libraries".
    С помощью какого фреймворка вообще пишутся подобные скрипты ?

    python-telegram-bot
    Telethon
    Aiogram
    И возможно ли это реализовать с помощью телеграмм бота написанного на aiogram?

    Возможно.
    Ответ написан
    Комментировать
  • Как отправить запрос с конкретной формы и передать ID или Class формы в PHP-скрипт через ajax-запрос?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Как нужно вызывать js-функцию, чтобы она брала данные с той формы которую отправили? И как передать через ajax или ID, или Class формы?

    Модифицировать кнопку форм, чтобы она вызывала событие формы submit:
    <button type="submit" class="button">Отправить</button>

    Создадим один обработчик для всех форм:
    async function sendForm(form) {
      const data = {
        name: form.querySelector("input[name='name']").value,
        email: form.querySelector("input[name='email']").value,
        phone: form.querySelector("input[name='phone']").value,
        message: form.querySelector("textarea[name='message']").value,
        formId: form.id,
        formClass: form.className
      }
    
      try {
        const response = await fetch('php/send.php', {
          method: 'POST',
          headers: {'Content-Type': 'application/json'},
          body: JSON.stringify(data)
        });
    
        if(response.ok) {console.log('Success send form')}
        else console.log('Error send form', response);
      }
    
      catch(error) {console.log('Error: ' + error.message)}
    }

    Вешаем слушателей на submit форм:
    document.querySelector('#form1').addEventListener('submit', (e) => {
      e.preventDefault();
      sendForm(event.target);
    });
    
    document.querySelector('#form2').addEventListener('submit', (e) => {
      e.preventDefault();
      sendForm(event.target);
    });

    В зависимости от формы нужно в PHP-скрипте менять тему письма.

    В php обработчике формы обрабатываем полученные данные от js (php у меня не очень):
    $json = file_get_contents("php://input");
    $data = json_decode($jsonData, true);
    
    // get formId and formClass
    $id = $data['formId'];
    $class = $data['formClass'];
    
    // this change type email message
    Ответ написан
    4 комментария
  • Как зафиксировать ключевые запросы в директ?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Изучаем как работают операторы в Яндексе:

    - "купить машину иркутск":
    -- Фиксированное количество слов.
    -- Порядок слов не фиксирован (купить машину иркутск == иркутск купить машину).
    -- Словоформы разрешены (купить машины иркутске).
    -- Запрещены стоп-слова/служебные части речи (купить машину иркутск != купить машину из иркутска).

    - "купить машину +в иркутск" (оптимально для большинства случаев):
    -- Изменения? Зафиксировали присутствие "в" (стоп-слова/служебные части речи). Все остальное тоже самое - купить машину +в иркутск == купить машины +в иркутске == машины купить +в иркутск == +в машину купить иркутск.

    - "[купить машину в иркутск]":
    -- Закрепление количества, порядка и стоп-слов/служебных частей речи (но лишь в том случае, если точно понимаете, зачем это делать).
    Ответ написан
    Комментировать
  • Где искать JS код если в консоль показывает что он в VM?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    JS из WM - это что то вроде выполнение кода в контексте браузера, но не из js файла при загрузке страницы. Как вариант, где искать: innerHTML, eval, createElement(script).
    Ответ написан
    Комментировать
  • Next JS это только про SSR или на нём приложение ничем не отличается от реакта?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Next JS это только про SSR

    Это про любой тип веб-приложения:
    - SSR.
    - SSG.
    - ISR.

    Ну а еще, это фактически единственный инструмент, который может все и сразу под React.

    Next JS это тот же реакт в котором сразу есть все необходимые пакеты для работы с ним или он все же медленней обычного spa приложения на реакте с пакетами?

    - Все инструменты в наличие.
    - Next может экспортировать собранное React приложение, после чего - некста там уже не будет, а статика, маршрутизация и реактивность останется. Что быстрее статики?
    что в нексте реакт всегда обращается к своему серверу для SSR

    Как настроите, так и будет работать. Можно всегда, можно иногда, можно никогда.
    а у обычного реакта мы фетчем просто запросы шлем, когда все spa приложение очень быстро работает без лишних запросов на сервер

    На Next тоже самое можно. А Ваш SPA в SEO может? А рендерить одни страницы без SEO, вторые ПРЕрендерить с SEO, а остальные и так и так на лету может? А единовременно в рамках одного приложения? А еще и без дополнительных библиотек? А еще с конским комьюнити в рамках одного инструмента?

    Еще начинают активно внедряться Server Components, которые по некоторым отзывам - могут стать отраслевым стандартом.

    Если Вас интересует лишь SPA без SEO и дополнительных опций рендеринг, который будет рендериться лишь на клиенте, то оптимальнее будет выбрать лишь React + Роутер + WebPack в качестве сборщика.

    Vercel

    Vercel, оплата интеграции по стандартному тарифу, ну Вы знаете ;)
    Ответ написан
    1 комментарий
  • Не получается подключить js файл через CDN, в чём может быть проблема?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Впервые подключаю js через cdn и не могу понять в чём проблема?!

    А если в консоль браузера глянуть?

    Один из вариантов:
    1. Неправильная ссылка.
    2. Блочит браузер (сам браузер или расширение).
    3. Блочит провайдер.
    Ответ написан
    Комментировать