Задать вопрос
  • Как исправить код, чтобы shellcheck не ругался на одинарные кавычки?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Правильный способ - не насиловать sed/awk/etc, а по-нормальному шаблонизировать весь скрипт, чтобы комментарии не валялись вместе с переменными вперемешку с переносами строки.
    Ответ написан
    3 комментария
  • Как сделать обмен музыки из канала в телеграмме с сайтом?

    @q2digger
    никого не трогаю, починяю примус
    берем Telegram Bot API (https://core.telegram.org/bots/api), в другую руку берем какой нибудь знакомый язык программирования, например Python и пишем бота, который следит за постами с музыкой в вашем канале и при появлении новой делает какие-то запланированные действия, например выкладывает музыку на вашу страницу. У таких платформ как Wordpress или Django есть API, и все это отлично автоматизируется.
    Ответ написан
    Комментировать
  • Как определить свой уровень программирования?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    Если твой код иногда работает, то поздравляю - ты Junior. Если понимаешь, почему не работает, то ты уже на пути в Middle'ы. А если уже ненавидишь себя за выбор пути и задумываешься о домике на берегу реки - добро пожаловать в Senior'ы
    Ответ написан
    8 комментариев
  • Как собрать приложение из докер образов в бинарник?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Нужен не бинарник, а скрипт, который установит Докер, создаст конфиг и запустит. Мультиплатформенно и универсально сделать это - большой геморрой, даже через подходящее ПО вроде Ansible. Имхо, вы не в ту сторону воюете.
    Ответ написан
    4 комментария
  • Как решить проблему скорости интернета с подключением через OpenVPN?

    Скорее всего процессор кинетика просто затыкается на шифровании трафика. Это типичная скорость для IPSEC или OpenVPN на подобных роутерах (если в их проце и прошивке нет аппаратной поддержки шифрования)
    P.S. Официальный документ на этот счет - https://help.keenetic.com/hc/ru/articles/115005342...
    Ответ написан
    1 комментарий
  • Как вернуть сервис в кастомном валидаторе nestjs?

    alex_romanov116
    @alex_romanov116
    Web-developer
    1)
    import {useContainer, Validator} from "class-validator";
    
    useContainer(Container);

    2) используем useContainer из nest
    async function bootstrap() {
      const app = await NestFactory.create(AppModule);
      useContainer(app.select(AppModule), { fallbackOnErrors: true });
    ...}

    3) навешиваем декоратор injectable
    import {ValidatorConstraint, ValidatorConstraintInterface} from 'class-validator';
    import {UsersService} from './user.service';
    import {Injectable} from '@nestjs/common';
    
    @ValidatorConstraint({ name: 'isUserAlreadyExist', async: true })
    @Injectable() // this is needed in order to the class be injected into the module
    export class IsUserAlreadyExist implements ValidatorConstraintInterface {
        constructor(protected readonly usersService: UsersService) {}
    
        async validate(text: string) {
            const user = await this.usersService.findOne({
                email: text
            });
            return !user;
        }
    }


    4) и провайдим constraint
    @Module({
        controllers: [UsersController],
        providers: [IsUserAlreadyExist, UsersService],
        imports: [],
        exports: []
    })
    export class UserModule {
    }
    Ответ написан
    Комментировать
  • Как исправить ошибку TS?

    director-rentv
    @director-rentv
    Frontend-разработчик
    Пометьте const AUTH_FIELDS как readonly

    const AUTH_FIELDS = {
      LOGIN: 'login',
      PASSWORD: 'password'
    } as const


    Тогда этот объект будет с полями литерального типа, без as const они просто мутабельный string
    Ответ написан
    Комментировать
  • Нужно ли удалять 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 комментариев