Задать вопрос
  • Нужно ли удалять UTM-метки при переходах между страницами сайта?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Нужно ли удалять UTM-метки при переходах между страницами сайта?

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

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

    1. Использовать события mousedown, mousemove итп, для момента зажатия ЛКМ.
    2. Использовать метод getBoundingClientRect(), для получения координат элементов (их пересечения), куда передвинули мышь из п1, если пересечение достигнуто, то добавляем css класс данному элементу.
    Может кто нибудь предложит решение на примере со скришота

    Что конкретно у Вас не получилось? Если всё, то на фрилансе предложат сделают все за Вас.

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

    the_house
    @the_house
    Full stack разработчик
    import logging
    from flask import Flask, request, jsonify
    
    app = Flask(__name__)
    
    @app.route('/api/v1/skill', methods=['POST'])
    def skill():
            request_json = request.json
            if 'request' in request_json:
                    command = request_json['request']['command']
            if 'Включи аудио стрим' in command:
                    response_text = 'Включаю аудио стрим'
                    url = 'http://you.site/stream.mp3'
                    return jsonify({
                            "version": request_json['version'],
                            "response": {
                                    "text": response_text,
                                    "tts": response_text,
                                    "buttons": [],
                                    "end_session": False
                            },
                            "session": request_json['session'],
                            "user_id": request_json['session']['user_id'],
                            "audio": {
                                    "url": url
                            }
                    })
            return jsonify({'status': 'error'})
    
    if __name__ == '__main__':
            app.run(host='0.0.0.0', port=5000)
    Ответ написан
    2 комментария
  • Как быстро переключаться между редактором и консолью во vscode?

    @heinehen Автор вопроса
    Простите, это уже теперь неактуально — сам задал вопрос, сам и ответил:
    1. ctrl+shift+p;
    2. Open Keyboard Shortcuts (JSON);
    3. Прописать следующий код:
    {
            "key": "ctrl+`",
            "command": "workbench.action.terminal.focus"
        },
        {
            "key": "ctrl+`",
            "command": "workbench.action.focusActiveEditorGroup",
            "when": "terminalFocus"
        }
    Ответ написан
    Комментировать
  • Настройка Nginx для проксирования Postgresql?

    dyuriev
    @dyuriev
    A posteriori
    Все что не HTTP - проксируется через stream { server { ... } }

    Документация по теме: ngx_stream_proxy_module

    Примерно так:
    stream {
     server {
      listen $ext_ip:5432 so_keepalive=on;
      proxy_pass $lan_ip:5432;
     }
    }
    Ответ написан
    1 комментарий
  • Как настроить отдачу метрик с nginx?

    rqdkmndh
    @rqdkmndh
    Web-разработчик
    Такой вариант в nginx.conf:
    server {
            listen       80;
            server_name  localhost;
    
            location / {
                root   /var/www/html;
                index  index.php;
            }
    
            location /metrics {
                stub_status;
                allow 127.0.0.1;
                deny all;
            }
    
            location ~ \.php$ {
                root           /var/www/html;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;
                include        fastcgi_params;
            }
        }

    Описание метрик Nginx /metrics:
    Active connections — текущее количество активных соединений.
    accepts — общее количество соединений, принятых сервером.
    handled — количество соединений, обработанных сервером (совпадает с accepts, если нет ошибок).
    requests — общее количество обработанных запросов.
    Reading — количество соединений, которые Nginx читает от клиента.
    Writing — количество соединений, в которые Nginx пишет ответ клиенту.
    Waiting — количество keep-alive соединений, которые открыты и ожидают нового запроса.

    stub_status — это директива, которая включает модуль ngx_http_stub_status_module. Этот модуль выводит минимальную статистику о текущем состоянии Nginx
    Ответ написан
    Комментировать
  • Как получить только родительские каталоги из массива с путями?

    #!/bin/bash
    ALL_CHANGED_FILES='[
      "monorepo/spfx-packages/news/src/webparts/news",
      "monorepo/spfx-packages/news/config",
      "monorepo/spfx-packages/news",
      "monorepo/spfx-packages/news/src/webparts/news/loc",
      "monorepo/spfx-packages/alert/src/webparts/alert",
      "monorepo/spfx-packages/alert/config",
      "monorepo/spfx-packages/alert",
      "monorepo/spfx-packages/alert/src/webparts/alert/loc"
    ]'
    echo "$ALL_CHANGED_FILES" | sed -rn 's@([^/]+/[^/]+/[^/]+)/.+@\1"@p' | sort -u | sed -r '$!s/.+/&,/'
    Ответ написан
    1 комментарий
  • Как выводить цифры числа слева направо?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Можно делать накопление числа в строку а потом в конце перевернуть ее

    >>> "".join(reversed("улыбок тебе дед макар"))
    Ответ написан
    1 комментарий
  • Как составить букмарклет для поиска в Yandex из Google?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Так?
    javascript:(function(){var q=encodeURIComponent(document.querySelector('input[name="q"]').value);window.open("https://yandex.ru/search/?text="+q);})();
    Ответ написан
    1 комментарий
  • Как заблокировать доступ к ресурсу для конкретного региона?

    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 комментариев
  • Сталкивался кто-нибудь, как переделать из querySelector в querySelectorall?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Нужно слайдеры в цикле обрабатывать. Выше уже предложили одно из решений, но в нём есть нюанс - создание функций в цикле достаточно дорого по ресурсам (мы же заботимся о наших пользователях?), благо есть альтернатива, в качестве слушателя события может быть не только функция, но и объект с методом handleEvent:
    class PrevClickListener {
        constructor(track, next) {
            this.track = track;
            this.next = next;
        }
    
        handleEvent() {
            const {track, next} = this;
            next.removeAttribute('disabled');
            track.scrollTo({
                left: track.scrollLeft - track.firstElementChild.offsetWidth,
                behavior: 'smooth',
            });
        }
    }
    
    class NextClickListener {
        constructor(track, prev) {
            this.track = track;
            this.prev = prev;
        }
    
        handleEvent() {
            const {track, prev} = this;
            prev.removeAttribute('disabled');
            track.scrollTo({
                left: track.scrollLeft + track.firstElementChild.offsetWidth,
                behavior: 'smooth',
            });
        }
    }
    
    class TrackScrollListener {
        constructor(track, prev, next) {
            this.track = track;
            this.prev = prev;
            this.next = next;
        }
    
        handleEvent() {
            const {track, next, prev} = this;
            const trackScrollWidth = track.scrollWidth;
            const trackOuterWidth = track.clientWidth;
    
            prev.removeAttribute('disabled');
            next.removeAttribute('disabled');
    
            if (track.scrollLeft <= 0) {
                prev.setAttribute('disabled', '');
            }
    
            if (track.scrollLeft === trackScrollWidth - trackOuterWidth) {
                next.setAttribute('disabled', '');
            }
        }
    }
    
    const sliders = document.querySelectorAll('[data-slider]');
    for (const slider of sliders) {
        const track = slider.querySelector('[data-slider-track]');
        const prev = slider.querySelector('[data-slider-prev]');
        const next = slider.querySelector('[data-slider-next]');
        if (!track || !prev || !next) continue;
    
        prev.addEventListener('click', new PrevClickListener(track, next));
        next.addEventListener('click', new NextClickListener(track, prev));
        track.addEventListener('scroll', new TrackScrollListener(track, prev, next));
    }
    Ответ написан
    Комментировать
  • Как в конфиге NGINX запретить напрямую доступ к файлу кроме запросов с определенного домена?

    @Kypidon4ik
    Фрилансер, Wordpress developer
    Для запрета напрямую доступа к файлу кроме запросов с определенного домена вам необходимо использовать директиву valid_referers в блоке location.

    Вот пример конфигурации:

    nginx
    server {
        listen 80;
        server_name example.com;
    
        location /path/to/file {
            valid_referers none blocked example.com;
            if ($invalid_referer) {
                return 403;
            }
            
            # Дополнительная конфигурация для доступа к файлу
        }
    
        # Другая конфигурация сервера
    }


    В данном примере, example.com является разрешенным доменом, с которого разрешены запросы к файлу по указанному пути /path/to/file. Если запрос идет с другого домена или напрямую, то сервер возвращает код состояния 403 "Forbidden".

    Обратите внимание на необходимость добавления модуля ngx_http_referer_module при сборке NGINX, так как эта директива зависит от него.
    Ответ написан
    7 комментариев
  • Что использовать для модификации контента ответа на http запрос?

    @pantsarny
    Любой прокси, который может модифицировать контент
    Ответ написан
    8 комментариев
  • Как добавить отступы между файлами VSCode?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Как в VSCode увеличить отступ подпапок( и подфайлов) в дереве файлов?
    https://stackoverflow.com/questions/55310734/how-t...

    Вообще, т.к. VS Code это ElectronJS приложение, соответственно нужно открыть инструменты разработчика в VS Code, найти нужные стили структуры проекта и прописать в кастомном css нужные отступы. Можно использовать готовые плагины, этот или этот.
    Ответ написан
    Комментировать
  • Как преобразовать json в структуру GO?

    @armantarkhanian
    Как-то так:
    package main
    
    import (
    	"encoding/json"
    	"fmt"
    	"log"
    )
    
    type item struct {
    	Branche branche `json:"branche"`
    }
    
    type branche struct {
    	BranchCount int    `json:"branch_count"`
    	ID          string `json:"id"`
    }
    
    func main() {
    	jsonString := `[
    		{
    			"branche": {
    				"branch_count": 5,
    				"id": "4504137598462702"
    			}
    		},
    		{
    			"branche": {
    				"branch_count": 6,
    				"id": "450413723846223"
    			}
    		}
    	]`
    
    	var items []item
    	if err := json.Unmarshal([]byte(jsonString), &items); err != nil {
    		log.Fatalln(err)
    	}
    
    	for _, item := range items {
    		fmt.Println(item.Branche.BranchCount, item.Branche.ID)
    	}
    }
    Ответ написан
    Комментировать
  • Как прикрепить HTML-код с тегом 'code'?

    @pfemidi
    Тут могло бы быть краткое описание меня
    А можно вместо замены '<' на "[меньше, чем]" просто в слове "code" которое внутри текста html заменить латинскую букву на такую же по изображению русскую. Вот ниже я заменил латинское 'e' на русское 'е':
    <pre>
    <code class="language-python">
    def factorial(n):
        if n == 1:
            return n
        return n * factorial(n-1)
    </codе>
    </pre>

    Безусловно при copy'n'paste это создаст проблемы, но визуально будет выглядеть "как надо".
    Ответ написан
    Комментировать
  • Почему beforeunload не отправляет запросы в браузере Safari?

    Lynn
    @Lynn
    nginx, js, css
    Посмотрите на Beacon API. Он как раз предназначен для аналитики.
    А обычные запросы браузер имеет полное право обрывать потому что полагает что в нём уже нет никакого смысла раз вы покидаете страницу.

    А ещё в MDN прелагают использовать событие visibilitychange вместо beforeunload.
    https://developer.mozilla.org/en-US/docs/Web/API/N...
    Ответ написан
    1 комментарий
  • Какой софт можно использовать в качестве корпоративной хранилки файлов?

    rozhnev
    @rozhnev
    Fullstack programmer, DBA, медленно, дорого
    Ответ написан
    Комментировать
  • Можно ли с помощью Service Worker перехватить и изменить http запрос?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Одна из задач Service Worker - именно программируемый прокси на стороне клиента.
    То есть на Ваш вопрос "можно?" - я бы ответил, да - это одна из основных функций Service Worker.
    Но есть одно но, Service Worker работает только с тем доменном, с которого загружен его код. То есть можно перехватывать только запросы к своему домену. Притом, данная функция доступна только для не кросдоменных запросов (тех что идут со страниц своего же домена). Стоит так же упомянуть экспериментальное событие foreignfetch упомянутое в сводке фич chrome на google developers за сентябрь "16 - оно позволяет перехватывать обращение к своему домену с чужих ресурсов, но о нем не знает ни mdn, ни caniuse - как следствие событие потенциально работает только в chrome 54+.
    Так же стоит учитывать, что поддержка Service Worker хорошо реализована только в Chrome и Firefox. В Edge появилась с 17 версии (вышедшей вместе с win10 April"18 update), в safari тоже появилась недавно (11.1 - десктоп, 11.4 - iOS)

    Если это все устраивает, то:
    Читаем эту статью на mdn: https://developer.mozilla.org/ru/docs/Web/API/Serv...
    Так как из стать выше для Вашей задачи можно почерпнуть только работу с событием fetch (с событием foreignfetch работаем аналогично) и большинство примеров нацелены на программируемый кэш, а для подделки запросов нужно генерировать свой объект Responce - читаем эту статью: https://developer.mozilla.org/en-US/docs/Web/API/R... (only English)
    Так же читаем про Request: https://developer.mozilla.org/en-US/docs/Web/API/R...

    Вся суть будет сводится примерно к следующему коду Service Worker:
    self.addEventListener('fetch', event => {
      const {request} = event;
      // обрабатываем request чтоб понять, что от нас хотят
      //...
      if(/* условие, что запрос нужно подменить */) {
        event.respondWith(new Response('Hello world', /* вместо строки можно Blob или ArrayBuffer */ {
          headers: { 'Content-Type': 'text/plain' }
        }));
      } else {
        event.respondWith(fetch(request)); // если не наш случай, отправляем запрос на сервер,
        // тут так же можно заморочится с кэшем
      }
    });


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

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    GitHooks -> post-checkout: https://git-scm.com/docs/githooks#_post_checkout и в скрипте npm install.
    Ответ написан
    Комментировать