• Насколько индекс ускоряет выборку с условием-неравенством?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега MySQL
    Будет ли этот запрос быстрее работать, если для столбца `time` есть индекс?
    Это покажет EXPLAIN, а ещё лучше - само выполнение запроса с индексом и без него. Скорее всего - будет.

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

    alekciy
    @alekciy
    Вёбных дел мастер
    Для этого нужно запустить отдельный pool задав директиву user см. https://www.php.net/manual/ru/install.fpm.configur... . Тогда php будет выполняться от заданного юзера, а не www-data.

    Я на своем сервере делаю так. У каждого отдельного юзера есть свой php pool который работает от своего юзера + слушает сокет на 127* интерфейсе. Пример конфига /etc/php/7.0/fpm/pool.d/aliya.conf (юзер это aliya):
    [aliya]
    listen                 = 127.0.0.1:9041
    listen.backlog         = 20
    listen.allowed_clients = 127.0.0.1
    catch_workers_output   = yes
    
    user  = aliya
    group = aliya
    
    pm                   = dynamic
    pm.min_spare_servers = 2
    pm.max_spare_servers = 4
    pm.start_servers     = 3
    pm.max_children      = 5
    pm.max_requests      = 50
    
    env[HOSTNAME] = $HOSTNAME
    env[PATH]     = /usr/local/bin:/usr/bin:/bin
    env[TMP]      = /tmp
    env[TMPDIR]   = /tmp
    env[TEMP]     = /tmp
    
    php_admin_value[display_errors]  = stderr
    php_flag[display_startup_errors] = on
    php_admin_flag[log_errors]       = on
    
    php_admin_flag[mail.add_x_header] = on
    php_admin_value[sendmail_path]    = /usr/sbin/mini_sendmail -t -f***@***a.ru
    php_admin_value[mail.log]         = /var/www/aliya/data/log/mail.log
    
    php_admin_value[memory_limit]      = 256M
    php_admin_value[session.save_path] = /tmp
    Ответ написан
  • Почему выдает ошибку при конвертировании файла?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Открываем список сигнатур и смотрим комбинацию 0x52 0x49 или RI.
    Получаем один из трёх вариантов - wav, avi или webp.
    А то, что у файла расширение jpeg, так это просто кто-то криво его задал.
    Проверяйте тип через mime_content_type, Для JPEG должен возвращаться тип image/jpeg.
    Ответ написан
    Комментировать
  • Как сделать жесткое исключение NOT IN в mysql?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Разумнее использовать WHERE NOT EXIST, который скорее всего будет более эффективен:
    SELECT [DISTINCT] number
    FROM table t1
    WHERE service NOT IN (1,2,3)
      AND NOT EXISTS (
        SELECT NULL
        FROM table t2
        WHERE t1.number = t2.number
          AND t2.service IN (1,2,3)
    )

    Индекс по (number, service) - весьма желателен.

    Если service - целочисленное поле со значениями от единицы и более, то для даных конкретных условий можно построить и более эффективный запрос:
    SELECT number
    FROM test
    GROUP BY number
    HAVING MIN(service) > 3
    Ответ написан
    Комментировать
  • Как это превращается в строку?

    scottparker
    @scottparker
    new Array(4).join('La')- соединяет элементы массива вставляя между ними La. Элементы массива пустые, то есть получается "" + "La" + "" + "La" + "" + "La" + ""
    Ответ написан
    Комментировать
  • Как проскролить страницу после того как произошел hedaer(location)?

    Adamos
    @Adamos
    <a id="comment-12345">Тот коммент, до которого надо проскроллить</a>
    
    Location: /#comment-12345

    Или полностью на фронте - при отправке ставить куку, а при входе на страницу ее проверять и скроллить, если она установлена.
    Ответ написан
    3 комментария
  • Объект-итератор не итерирует объект. Почему?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Вызов arr.values() всегда возвращает новый объект итератора, "перемотанный" на начало. Поэтому в первом случае у вас два разных итератора, а во втором - один и вы по нему идёте.
    Ответ написан
    Комментировать
  • Как читать вывод git diff?

    @res2001
    Developer, ex-admin
    Файл был переименован. index, видимо, показывает коммит где файл появился первоначально с правами на файл 0644 (стандартные права файловых систем Unix). 10 - "обычный файл".
    Утилита stat выводит такую же инфу о правах, но в шестнадцатиричном виде, а тут восьмеричный.
    Вместо 10 может быть еще 12 - ссылка, и возможно еще какие-то варианты.

    Три минуса и три плюса - стандартное для diff обозначение для сравниваемых файлов. Типа первый файл это ---, второй файл +++.
    Цифры в @@ отрицательная - это "строка, колонка" для первого файла, положительная - для второго. Указывают место где файлы различаются.
    Ответ написан
    Комментировать
  • Подбор пароль к хэшу?

    Sanes
    @Sanes
    Я не могу додуматься как сделать расшифровщик хэшей, на некоторых сайтах есть.

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

    zkrvndm
    @zkrvndm Автор вопроса
    Архитектор решений
    Всем спасибо, похоже я нашел решение. На равне с типами запроса GET, POST и другими оказывается существует еще тип запроса HEAD. Этот тип запроса позволяет запросить заголовки ответа, без самого тела ответа.

    Соответственно факт изменения файла можно проверить через сверку заголовка ETag:
    (await fetch('/', { method: 'HEAD' })).headers.get('ETag');

    Заголовок HTTP ответа ETag является идентификатором специфической версии ресурса. Если ресурс по заданному URL изменился, будет сгенерированно новое значение Etag. Поэтому Etag чем-то похож на отпечаток ("fingerprints") и позволяет быстро определить являются ли два представления ресурса одними и теме же.

    https://developer.mozilla.org/ru/docs/Web/HTTP/Hea...
    Ответ написан
    1 комментарий
  • Существует ли, утилита для Linux с выводом программ для их запуска?

    все установленные программы

    В Linux нет такого понятия, как "установить". В принципе любой исполняемый файл в системе - это уже рабочая программа, которую можно вызывать. Для удобства только они добавляются в $PATH
    Например:
    1. Vim
    2. MIDNIGHTCOMMANDER
    3. ...

    В таком виде никак не получится, так как в Linux нигде не сохраняется человекочитаемое название.

    Так что в целом список всех установленных программ - это ls
    А для запуска нужной достаточно ввести её имя.

    Но такой список вам никакой пользы не даст, так как он будет просто огромный.
    Вот например что выдаёт ls /bin:
    .                                    h2ph                               sbverify
     ..                                   h2xs                               scp
     NF                                   hd                                 screen
     VGAuthService                        head                               screendump
     X11                                  helpztags                          script
    '['                                   hexdump                            scriptreplay
     aa-enabled                           host                               scsi_logging_level
     aa-exec                              hostid                             scsi_mandat
     ab                                   hostname                           scsi_readcap
     add-apt-repository                   hostnamectl                        scsi_ready
     addpart                              htcacheclean                       scsi_satl
     addr2line                            htdbm                              scsi_start
     apport-bug                           htdigest                           scsi_stop
     apport-cli                           htop                               scsi_temperature
     apport-collect                       htpasswd                           sdiff
     apport-unpack                        hwe-support-status                 sed
     appres                               i386                               see
     apropos                              i386-tcc                           select-editor
     apt                                  iconv                              sensible-browser
     apt-add-repository                   id                                 sensible-editor
     apt-cache                            info                               sensible-pager
     apt-cdrom                            infobrowser                        seq
     apt-config                           infocmp                            serialver
     apt-extracttemplates                 infotocap                          setarch
     apt-ftparchive                       install                            setfont
     apt-get                              install-info                       setkeycodes
     apt-key                              instmodsh                          setleds
     apt-mark                             ionice                             setlogcons
     apt-sortpkgs                         ip                                 setmetamode
     ar                                   ipcmk                              setpci
     arch                                 ipcrm                              setpriv
     as                                   ipcs                               setsid
     at                                   iptables-xml                       setterm
     atq                                  ischroot                           setupcon
     atrm                                 iscsiadm                           sftp
     automat-visualize3                   jaotc                              sg
     awk                                  jar                                sg_bg_ctl
     b2sum                                jarsigner                          sg_compare_and_write
     base32                               java                               sg_copy_results
     base64                               javac                              sg_dd
    ... дальне не влезло в лимит по символам.
    Ответ написан
    Комментировать
  • Как корректно подставлять текст к ссылке?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Как можно реализовать это?
    Если я правильно понял, вам нужно сравнение без кейс сенситив.
    Будем считать что у вас адекватный архитектурный подход и для хранения данных используется БД. Тогда вариантов два:
    1) Магия strtolower(). При регистрации все данные перегоняем в нижний регистр и так и записываем. Соответственно перед выборкой тоже делаем искомой строке strtolower().
    2) Задаем таблице кодировку с постфиксом _ci, то есть кейс инсенситив. Тогда выборка будет игнорировать регистр, и в выборке GazEs12 = gazes12.
    Ответ написан
    7 комментариев
  • Как узнать свой пароль для sudo юзера в ubuntu?

    @pfg21
    ex-турист
    от тебя требуется ввести пароль для юзера someuser

    специальная фишка sudo для того чтобы не светить всяким пользователям пароль root.
    Ответ написан
    6 комментариев
  • В каких случаях нужно регистрировать стили(WordPress)?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Регистрация нужна для корректной работы скриптов и стилей, которые подключаются с зависимостями. Например, скрипт jquery уже зарегистрирован в WordPress, но по умолчанию он не выводится. Если какой-то плагин или вы в функцию wp_enqueue_script() третьим параметром передадите зависимость от скрипта jquery, то сначала подключится он, после него ваш скрипт

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

    Когда ты делаешь новую фичу, ты создаёшь специально для неё новую ветку.
    Вот в неёи пуш, даже если ещё не закончил
    Ответ написан
    4 комментария
  • Как упростить if выражение в JavaScript?

    Alexandroppolus
    @Alexandroppolus
    кодир
    https://developer.mozilla.org/ru/docs/Web/JavaScri...

    let today = [yearToday, monthToday, dayToday].map(s => s.padStart(2, '0')).join('-')
    Ответ написан
    1 комментарий
  • Какой стек технологий лучше всего подойдет для работы с объемными базами данных?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    исходя из вышеизложенного, какой бы стек технологий вы бы выбрали как разработчик чтобы решить вышеописанную задачу?

    Для начала немного контекста - 2 важных примечания:
    1) Описанная задача решается на любом упомянутом стеке, + еще десяток возможных вариантов (Java/Spring, питон, нода, дотнет, голанг и т.д.).
    2) Быстродействие системы зависит от ее самой медленной части, и в 95% случаев самая медленная часть - БД, просто в силу специфики работы: много данных со сложными связями, выборки с сортировкой и фильтрацией из большого массива и вот это все, в то время как язык бэкенда в основном выполняет достаточно простые манипуляции с уже готовыми наборами данных (за редчайшими исключениями, которых в вашем кейсе нет, или они не описаны в вопросе).

    В вашем случае:
    - база можно сказать совсем небольшая, до 1 миллиона записей условный мускуль ворочает весьма шустро, если железо соответствует.
    - задача сбора метрик достаточно тривиальная, особого ума в сохранении действий пользователя не надо, бОльшая часть работы - вывод в красивые графики и написание быстрых запросов с хитрыми выборками/агрегациями, немного пошаманить с формулами, возможно делать какие-то сводные выборки с денормализованными результатами для отчетов и прочие мелочи. Работа не сложная, но нудная, и ее много.

    Насчет стоимости и условий:
    полный самопис 150к+ (я это не тяну) или же сайт на Laravel +MySQL а дальше варьируется.
    полный самопис - либо маркетинг, либо идиотизм, писать на голом языке не будет ни одна нормальная студия, в принципе в данном случае либо используется фреймворк и заказчику преподносится как "сделано вручную программистами девственниками под светом серебряной луны", либо разработчики идиоты, мнящие себя круче всех (нет). В первом случае это то же что и "сайт на Laravel +MySQL" (норма и стандарт для среднего уровня студий), во втором - развод на мани на пустом месте и попытка продать г**но в обертке "иксклюзивнасти".

    По цене - на сегодняшний день, если я не ошибаюсь, 150к деревянных это +- 1000уе. Цена приемлемая за нормальную работу, если найдете дешевле "на Laravel" - думаю будет вообще ок. Опять же, цены штука такая, кто-то за копейки сделает хорошо, кто-то за дорого каку сляпает. Влияет так же регион, понятно что в Мск цена будет серьезно больше чем в условном Челябинске...

    Важный момент - нормальное ТЗ в разы упрощает как поиск исполнителя, так и оценку работы. Я бы на вашем месте погрузился именно в тему создания качественного ТЗ, нежели в дебри современных технологий.

    UPD:
    проект планируется на 100 к+ посетителей в месяц...
    предупреждают что если аудитория достигнет условных 100 тысяч в месяц Лара начнет потихонечку задыхаться от нагрузки,
    ок, пусть будет 200к для наглядности.
    В среднем, если это маркетплейс, то постоянных посетителей будет не много, думаю около 10%, так что ими можно пренебречь. Условно - 200к / 30 дней = 6600 в сутки, при активных 10-12 часах посещения это ~600 в час. Пусть на 1 посетителя будет 5 запросов страниц, это 600*5=3000 в час = 50 в минуту или менее 1 запроса в секунду.
    Даже если умножить это на 30 (допустим такая пиковая нагрузка), 30rps вообще "ниачем". Не знаю кто там вам считал то это проблема, любое современное железо среднего уровня вытягивает без напряга.
    Ответ написан
    2 комментария
  • Как скачивать большие файлы по ссылке php?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Правильное решение - запускать консольный скрипт в отдельном потоке, тогда ждать ничего не надо, и таймлимит на консольные приложения отсутствует.
    Ответ написан
    3 комментария
  • Как задать второе значение переменной если 1 не найдено?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    $city = $gorod ?? 'Текст';
    Ответ написан
    1 комментарий
  • Как добавить отдельные классы для каждого объекта в цикле while?

    @Vic87
    Конечно, не присваиваются. $classes[$i] для $i > 4 у вас не определены. Ессно, что класс будет пустым.

    Не думали пойти другим путем, без заморотов с присвоением класса каждому посту? Например, используя псевдокласс :nth-child и через него реализовать особенности верстки. Тогда вывод постов можете делать без всякого гимора, обычным порядком.
    Ответ написан
    Комментировать