• Как сделать сложный запрос по нескольким таблицам?

    @VitalyChaikin
    Вначале я бы сформировал запрос содержащий ВСЕ поля участвующие в условиях типа
    SELECT TOP 20 DISTINCT {Все поля участвующие в условиях} FROM T
    LEFT JOIN {Все таблицы} ON {Условия связей}
    После того как я убедился бы что запрос получает правильные данные, я бы преобразовал его
    SELECT TOP 20 DISTINCT {Все поля участвующие в условиях} {Функция для having} FROM T
    LEFT JOIN {Все таблицы} ON {Условия связей}
    group by {Все поля участвующие в условиях}
    Снова убедимся что {Функция для having} возвращает то что должно быть и добавляем
    having {Функция для having}
    Ответ написан
    Комментировать
  • Как скопировать ssh ключ в новую систему?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    После копирования надо обязательно поставить ключу права 600
    chmod 600 ~/.ssh/id_rsa
    Ну и как заметили выше, надо принять хост в доверенные, нажав "йес"
    Ответ написан
    Комментировать
  • Как ускорить поиск на совпадение подстроки?

    hzzzzl
    @hzzzzl
    предлагаю allVariants хранить в переменной в памяти, а не как элементы DOM, ну и всё нужное отрисовывать когда надо через
    $('input#searchVariant').on('keyup', function () { 
    вычислить строку по которой искать,
    найти нужные элементы в массиве/объекте с данными, 
    сделать для каждого свой блок 
    добавить куда надо на страницу 
    }
    Ответ написан
    2 комментария
  • Как ускорить поиск на совпадение подстроки?

    yellow79
    @yellow79
    Senior Software Engineer
    У вас тормозит не поиск, а манипуляции с DOM
    Во первых, заменить сравнение > -1 на строгое неравенство.
    Во вторых, не использовать манипулирование объектом style, вместо этого добавлять/удалять класс, при этом не нужно добавлять/удалять класс если он уже и так в нужном состоянии. То есть необходимо добавить проверку на наличие/отсутствие класса.
    Ну и в третьих, в начале функции, которая вызывается на событие "keyup" я бы воткнул проверку на то, какая кнопка была нажата, существует ряд кнопок, реагировать на которые нет смысла, например, пунктуация и пробелы, уверен вы найдёте ещё парочку =)
    <style>.hidden{display:none}</style>
    <script>
    allVariants.forEach(function (item) {
      if (item.getAttribute('name').toLowerCase().indexOf(query) !== -1) {
        if(item.classList.contains('hidden')){
          item.classList.remove('hidden')
        }
      }
      else {
        if(item.classList.contains('hidden') === false){
           item.classList.add('hidden')
        }
      }
    })
    </script>

    Ну и как упомянули выше, наверное стоит отказаться от forEach, я сам лично не исследовал, но мне кажется создание контекста для вызова функции и её вызов будут медленнее, чем пройтись обычным фором
    Ответ написан
    Комментировать
  • Как ускорить поиск на совпадение подстроки?

    Fragster
    @Fragster
    помогло? отметь решением!
    Как минимум закэшировать
    var variants = this.parentNode.nextElementSibling;
    var allVariants = variants.querySelectorAll('div.label-point');
    Затем убрать .toLowerCase() (возможно где-то закэшировать соответствие приведенного названия и элемента DOM дерева)

    Согласно https://proglib.io/p/javascript-performance-mistakes простой for быстрее forEach почти в 8 раз. Еще из серии экономии на спичках замена > на !==

    Можно воспользоваться библиотеками для дебоунса (например https://lodash.com/docs/4.17.11#debounce ), чтобы не вызывать обработку на каждое нажатие, а, например, не чаще, чем раз в секунду.

    Ну и почитать про профайлер в инструментах разработки, чтобы узнать, какие строки больше всего времени едят. С этого надо начинать.

    Еще подумалось, что можно сравнивать предыдущее и новое значение инпута, и если новое более строгое (Абыр -> Абырв), то искать не по всем, а только по найденным на предыдущем этапе. + нужно проверить, будет ли эффект, если не менять видимость, если она не должна меняться. Возможно такое, что пересчет стилей все равно происходит, даже если мы присваиваем стилям то же значение, что и в них хранится.

    А вообще отображение без пагинации тысяч элементов как-то странно. Так что прямая дорога дальше в реактивные фреймворки, потому что там это все намного прямее, чем прямая работа с DOM. Мне больше нравится vue.
    Ответ написан
    Комментировать
  • Проблема привязки репозитория bitbucket?

    fnnzzz
    @fnnzzz
    front-end dev
    сначала сделай:
    ssh-add -l

    создать файлик config
    ~/.ssh/config

    и укажи хост и ключик для него
    Host bitbucket.org
        IdentityFile ~/.ssh/my_key_filename


    дальше идешь по ssh и все должно быть ок
    ssh -Tvv git@bitbucket.org
    Ответ написан
    Комментировать
  • Как добавить field в serialization?

    Не советую так поступать. И совет Сергея это антипаттерн. Токены в запросах принято отправлять в заголовке http запроса, а не в теле.
    Стандарт: https://www.w3.org/Protocols/rfc2616/rfc2616-sec14...

    Найдите соответствующий middleware для Django в соответствии с Вашим видом токена, который значительно упростит Вашу жизнь. Для экзотики можно написать и свой middleware
    Ответ написан
    Комментировать
  • Как добавить field в serialization?

    tumbler
    @tumbler Куратор тега Django
    бекенд-разработчик на python
    Вообще когда в API говорят про токен, это обычно касается аутентификации. В этом случае поле в сериалайзер добавлять не надо.
    Если же хочется прям наряду с остальными полями токен передавать, то придется делать кастомное поле и навешивать на него валидацию.
    Ответ написан
    Комментировать
  • Как передать объект POST запросом в Serializer relations DRF?

    Можно попробовать сделать так:
    1) Указать метод __str__ у UnitMeasure
    def __str__(self):
        return self.name

    2) создать кастомный field
    class CustomPrimaryKeyRelatedField(PrimaryKeyRelatedField):
        def to_representation(self, value):
            return {'id': value.pk, 'name': str(value)}
        
        def to_internal_value(self, data):
            if isinstance(data, dict):
                data = data.get('id')
            return super(CustomPrimaryKeyRelatedField, self).to_internal_value(data)

    3) указать этот field в сериализаторе
    class MaterialSerializer(serializers.ModelSerializer):
        unit_measure = CustomPrimaryKeyRelatedField()
    
        class Meta:
            model = Material
            fields = ('id', 'name', 'unit_measure')

    Работоспособность не проверял
    Ответ написан
    Комментировать
  • Из-за чего ssh-agent не находит ключ при новой сессии терминала?

    @ashumkin
    системный разработчик
    происходит это потому, что ssh-agent запускаясь, выдаёт имя сокета, который задаётся в переменную окружения SSH_AUTH_SOCK (ssh-agent bash облегчает эту задачу, выдавая его в виде, пригодном для исполнения в bash/shell). Они "теряются" при перелогине. Так что, чтобы подключиться к ранее запущенному ssh-agent'у, нужно восстановить путь к его сокету.
    Как это сделать? Например, так:
    https://gist.github.com/martijnvermaat/8070533

    Upd.
    я себе сделал так (в ~/.bash_functions)
    function __ssh_agent_find_sockets() {
        local user=$(whoami)
        find /tmp/ssh-* -user "$user" -name agent\* -printf '%T@ %p\n' 2>/dev/null | sort -k 1nr | sed 's/^[^ ]* //'
    }
    
    function __ssh_agent_restore() {
        local found_socket=$(__ssh_agent_find_sockets | head -n 1)
        export SSH_AUTH_SOCK="$found_socket"
    }
    
    function __ssh_agent_socket() {
        # set up SSH agent socket symlink
        export SSH_AUTH_SOCK_LINK="/tmp/ssh-$USER/agent"
        if ! [ -r $(readlink -m $SSH_AUTH_SOCK_LINK) ] && [ -r $SSH_AUTH_SOCK ]
        then
            mkdir -p "$(dirname $SSH_AUTH_SOCK_LINK)" \
                && chmod go= "$(dirname $SSH_AUTH_SOCK_LINK)" \
                && ln -sfn $SSH_AUTH_SOCK $SSH_AUTH_SOCK_LINK
        fi
    }
    function __ssh_agent_run_do() {
        eval $(ssh-agent -s)
    }
    
    function __ssh_agent_run() {
        test -z "$SSH_AUTH_SOCK" && __ssh_agent_run_do
        __ssh_agent_socket
    return
    }


    а в ~/.bashrc:
    source ~/.bash_functions
    ...
    __ssh_agent_run
    ...
    Ответ написан
    1 комментарий
  • Как добавить класс к тегу?

    filgaponenko
    @filgaponenko
    frontend developer
    Вам необходимо в хуке жизненного цикла onInit проверить существование нужной переменной в localStorage и если такая переменная есть – инициализировать selectedLang нужным значением.
    Если переменной в localStorage нет – следует инициализировать selectedLang стандартным значением, например en.
    https://angular.io/guide/lifecycle-hooks
    Ответ написан
    1 комментарий
  • Какую сортировку применить для слов и чисел?

    sgjurano
    @sgjurano
    Разработчик
    Стоит отдельно отсортировать числа и слова, запомнив позиции слов и чисел во входной последовательности, а затем писать их в выходную в соответствии с этим порядком.

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

    @marataziat
    Джангист-тракторист
    Делайте нагрузку на разные роуты, где будет появляться 50x ошибка или долгое время ответа дебажте, и оптимизируйте.
    Ответ написан
    Комментировать
  • Как работает MySQL, если к одной записи обращаются 2 процесса?

    qork
    @qork
    { background: #F00B42 }
    Ответ написан
    Комментировать
  • Как в node js выполнить одновременно 500 запросов?

    yellow79
    @yellow79
    Senior Software Engineer
    Я бы использовал библиотеку async, там есть много интересного, но именно вам должно помочь это https://caolan.github.io/async/docs.html#times
    Ответ написан
    Комментировать
  • Как в node js выполнить одновременно 500 запросов?

    day90
    @day90
    Здесь можно поступить таким способом:
    Использовать setInterval. В котором считать каждое выполнение и по достижению 500 делать clearInterval.

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

    GavriKos
    @GavriKos
    Хочется двигаться в сторону веба - садитесь и программируйте для веба! Книги и все вот это - только ПАРАЛЛЕЛЬНО практике, причем практики должно быть МНОГО. А там - читайте что угодно.
    Ответ написан
    1 комментарий
  • Подключиться к сокет соединению с ssl?

    @Sovetnikov
    технический директор pulsprodaj.ru
    1. Посмотрите браузером куда вас веб-сервер редиректит по 301 статусу.

    2. Вы соединяетесь с сокет сервером на 8060 порт ... а он поддерживает обращения по пути '/ws'? Не вижу его в routes.
    Вы же на domain:8060/ws соединение делаете, а не в nginx который обрабатывает "location /ws/" с пересылкой на 8060 порт.
    Ответ написан
    4 комментария
  • Как собрать выполнения всех тасков с одной функции для дальнейшего ответа пользователю?

    собираем таски в лист и скармливаем это все в целери функцию chord
    task_ = []
    task_.append(clear_old_project.s(api_key=api_key))
    for group_ in list_all_groups:
                task_.append(frequency_start.s(api_key=api_key,
                                               job_request_id=job_request_id,
                                               app_secret=app_secret,
                                               project_id=proj_id,
                                               group_id=group_.id,
                                               providers=providers,
                                               region_key=region_key,
                                               phrase_forms=phrase_forms))
    
    chord(task_)(generate_reports_frequency.s(api_key, proj_id, job_request_id, app_secret, providers, region_key,o_currency))


    по завершению всех тасков, результаты будут переданы generate_reports_frequency как лист return-ов jn от всех функций в одну переменную (первый параметр)
    Ответ написан
    Комментировать
  • Как перейти с utf8 на utf8mb4 в MySQL?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    По минимуму достаточно сменить charset одного поля в таблице
    ALTER TABLE `table` 
      MODIFY `description` VARCHAR(xxx) CHARACTER SET utf8mb4;

    Ну или сразу у всех текстовых полей в таблице
    ALTER TABLE `table` CONVERT TO CHARACTER SET utf8mb4;
    Ответ написан
    Комментировать