• Как зарегистрироваться самозанятым без смартфона?

    @Drno
    В таком случае видимо придется сходить в налоговую и в банк. Ну или в мфц.
    Где все ваши данные забьют в компьютер… которому Вы не доверяете. Как то так
    Ответ написан
    Комментировать
  • Как выводить цифры числа слева направо?

    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.
    Ответ написан
    Комментировать
  • VUE 3 Router не видит GET параметры?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Видит, но не сразу:
    this.$watch(() => this.$route, (x) => {
      this.length = this.$route.query.length;
      this.width = this.$route.query.width;
      this.height = this.$route.query.height;
    }, {deep: true, immediate: true});

    ИМХО, это баг и надо бы завести issue им на github.
    Ответ написан
    6 комментариев
  • Как вернуть функционал добавления закладок как было до последнего обновления в Хром?

    @Kriegen Автор вопроса
    Хах.
    Нашел как вернуть как было ))

    1. В хроме открываем
    chrome://flags/
    2. Ищем:
    Power bookmarks side panel
    3. Делаем Disabled

    Радуемся )

    Кстати, в вопросе по ссылке ниже спрашивают про включение нового функционала (не связано с моим вопросом), но можно использовать и как инструкцию по его отключению )
    Как включить новый внешний вид в браузере Google Chrome?
    Ответ написан
    1 комментарий
  • VCS в квадрате. Можно ли с помощью Git контролировать состояние другого Git-репозитория?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Нет, рекурсия работать не будет. Гит увидит, что внутри каталога лежит вложенный репозиторий и проигнорирует его. А в своей базе пометит этот подкаталог как поддерево (subtree), чтобы не сломать.

    Вы пытаетесь соорудить какой-то жуткий костыль только лишь потому, что поленились изучить инструмент, в котором работаете. Поэтому для вас Git сейчас представляется как некая шайтан-машина, которой вы скармливаете команды, которые не понимаете, и в результате получаете ещё более непонятные «неожиданные результаты». Просто потратьте несколько дней, чтобы изучить азы. Не зубрите непонятные команды, а постарайтесь понять логику гита. А она — эта логика предельно проста и гениальна.

    не является сложной задачей что-либо сломать в своем проекте

    Сломать что-то в гите довольно сложно. Вам может только показаться что всё сломалось, но это лишь потому, что вы не понимаете, что делаете.

    каким-то образом снес половину коммитов

    Коммиты в гите — это неизменяемые сущности. Можно лишь создать новые «на замену», но старые не исчезают. Коммиты невозможно удалить без специальных команд очистки мусора.
    Вам показалось что коммиты исчезли, но на самом деле они все остались в репозитории, вы просто их не видите в текущей ветке. Но всё легко откатывается назад, используя журнал Reflog.

    Поэтому было бы неплохо как-либо сохранять прошлые версии Git репозитория

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

    Мой вам совет: Пройдите 16 коротких бесплатных уроков и полу́чите просветление.
    Ответ написан
    2 комментария
  • Как сформировать верстку сотами, и расположить элементы по овальной окружности?

    Stalker_RED
    @Stalker_RED
    Отдельный шестиугольник можно сделать при помощи clip-path, но думаю проще сразу всю схему отрисовать в svg, чем возиться с их позиционированием.
    Ответ написан
    Комментировать
  • Какой самый быстрый способ передачи информации между двумя ПК?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вытащить винт из виндового компа и ставить в линуксовый, примонтировать и скопировать с максимально возможной скоростью.
    Ответ написан
    Комментировать
  • Как выполнить команду на хосте после загрузки ОС в virtualbox?

    Adamos
    @Adamos
    Например, делаете общую папку, в которой скриптом в автозагрузке Windows создаете файл, а через inotify в Линуксе ловите его появление, выполняете команду и удаляете.
    Ответ написан
    7 комментариев