Задать вопрос
  • Зачем нужны корневые сертификаты?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Кажется, что вся эта конструкция держится на том, что тот единственный корневой (?) сертификат, которым подписаны все остальные, есть только у удостоверяющего центра.
    Именно. Система держится на доверии к УЦ.

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

    И сразу второй вопрос: почему какой-нибудь Fiddler, который устанавливает в систему свой корневой сертификат вообще работает?
    Без установки своего корневого сертификата Fiddler не сможет перехватывать https-трафик. Тот, кто ставит себе Fiddler, должен понимать, что в системе возникает уязвимость.
    Ответ написан
    2 комментария
  • Как из txt или csv файла, из строки получить нужные данные и вернуть обратно в строку?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Если надо изменить одну строку:
    1. Открываете файл в режиме rw, захватываете его в эксклюзивное пользование, во избежание состояния гонки.
    2. Считываете все строки через fgetcsv, пока не найдёте нужную, запоминая позицию считанной строки.
    3. Считываете в массив все строки до конца файла.
    4. Вносите нужные вам изменения в данные.
    5. Перемещаете указатель файла на запомненную позицию.
    6. Записываете изменённую строку.
    7. Из массива записываете все сохранённые строки.
    8. Закрываете файл, освобождая блокировку.

    Если надо изменить все строки:
    1. Открываете исходный файл на чтение.
    2. Открываете новый файл на запись.
    3. Построчно читаете первый файл через fgetcsv, работаете с данными строки и записываете через fputcsv в новый файл.
    4. Закрываете оба файла.

    А вообще, для таких вещей давно придумали базы данных.
    Ответ написан
    2 комментария
  • Почему не добавляются значения в переменную через цикл?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    += - это арифметическая операция сложения, а не конкатенация строк.
    Ответ написан
    1 комментарий
  • Как сделать, чтобы закрытие модального окна не выполнялось сразу после открытия?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    const modalWindow = () => {
      if (e.target.classList.contains('button_openModal')) {
        document.getElementById(e.target.dataset.open)?.classList.add('modal_show');
        return;
      }
      if (e.target.classList.contains('button_closeModal')
        || e.target.closest('.modal_show') === null) {
        document.querySelector('.modal_show')?.classList.remove('modal_show');
      }
    };
    Ответ написан
    Комментировать
  • Почему setTimeout не работает в then?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    RTFM. setTimeout не возвращает Promise. Она возвращает идентификатор таймаута.
    Кроме того, setTimeout ожидает первым аргументом функцию. Вы же передаёте туда data + 4, что функцией явно не является
    Ответ написан
    Комментировать
  • Как посчитать количество регистраций по каждому дню месяца?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    user_id соответсвует количеству зарегистрированных клиентов и написал следующий код
    Неудачное решение. Нет никаких гарантий, что id будут идти строго последовательно.

    Решение для MySQL 8.0 и выше
    WITH RECURSIVE `dates` (`date`) AS (
      SELECT '2021-06-01'
      UNION
      SELECT `date` + INTERVAL 1 DAY
        FROM `dates`
        WHERE `date` < '2021-06-30'
    )
    SELECT `d`.`date`, MAX(`c`.`count`) OVER `win` AS `registered`
      FROM `dates` AS `d`
      LEFT JOIN (
        SELECT DISTINCT `date`, COUNT(*) OVER `win` AS `count`
          FROM `registers`
          WINDOW `win` AS (ORDER BY `date`)
      ) AS `c` ON `c`.`date` = `d`.`date`
      WINDOW `win` AS (ORDER BY `d`.`date`)
    Ответ написан
    4 комментария
  • Сортировка элементов. Что здесь 'a', а что 'b'?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Какой элемент функция sort передаст в callback-функцию первым, тот и a. Который вторым - тот b.
    А какие именно элементы - это сама функция sort решает.
    Callback-функция просто должна установить отношение следования между элементами. Если значение первого аргумента должно идти до значения второго, то вернуть число, большее нуля. Если после, то вернуть число, меньшее нуля. Если значения элементов равны, то вернуть ноль.
    Ответ написан
    1 комментарий
  • Как сократить/улучшить этот код?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    document.addEventListener(
      'click',
      (e) => {
        const target = e.target.closest('.media-category__item');
        if (!target) {
          return;
        }
        document.querySelector('.media-category__item.active')?.classList.remove('active');
        target.classList.add('active');
        document.querySelector('.media-tab.active')?.classList.remove('active');
        document.querySelector(`.media-tab[data-tab="${target.dataset.category}"]`)?.classList.add('active');
      },
    );
    Ответ написан
    7 комментариев
  • Как вывести данные из mysql за сегодня и с условием времени?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    BETWEEN '2022-04-06 18:30' AND '2022-04-06 19:00'
    BETWEEN CONCAT(CURDATE(), ' 18:30') AND CONCAT(CURDATE(), ' 19:00')
    Ответ написан
    3 комментария
  • Почему все мои письма попадают в СПАМ?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    HELO_DYNAMIC_IPADDR2 - IP-адрес отправителя находится в диапазоне динамических адресов.

    SUBJ_ILLEGAL_CHARS - В заголовке Subject присутствуют символы вне диапазона стандартного набора ASCII [0-127].

    Неверная настройка SPF для доменного имени почты или попытка отправить под чужим адресом.

    Решение - использовать корректно настроенный SMTP-сервер и отправлять через него. Можно использовать SMTP-сервер гугла, яндекса, майлру и т.п., если у вас там есть учётка.
    Ответ написан
  • Как внутрь массива php впихнуть левое значение?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    array_splice($original, $position, 0, $inserted);
    Ответ написан
    Комментировать
  • Как выбрать из массива 2 элемента с пропуском 2?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    $result = array_filter(
      $arr,
      fn($idx) => intdiv($idx, 2) % 2 === 1,
      ARRAY_FILTER_USE_KEY
    );
    Ответ написан
    Комментировать
  • Как разобрать такую строку {i:0;s:15:"_identity-admin";i:1;s:14:"[3,null,21600]";}?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Похоже, что строка неполная. Ваша строка - это сериализованный массив, но спереди ещё должен быть признак массива (a) и его длина (2).
    $t = unserialize('a:2:{i:0;s:15:"_identity-admin";i:1;s:14:"[3,null,21600]";}');
    var_dump($t);
    // array(2) {
    //   [0] => string(15) "_identity-admin"
    //   [1] => string(14) "[3,null,21600]"
    // }

    a:2 - массив с длиной 2 элемента
    i:0 - целочисленный индекс 0
    s:15 - строка длиной 15 символов
    Подробнее о формате можно посмотреть в первом комментарии к serialize.
    Ответ написан
    Комментировать
  • Как передать функцию в компонент через родителя во vue.js?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Я бы построил по другому принципу. Каждая страница - отдельный компонент, переключаемый через vue-router. В хидер передаётся описание кнопок. При нажатии на кнопку хидер генерирует событие с идентификатором кнопки. Страница обрабатывает событие, получает новые данные и передаёт их в контент.
    <page-following>
      <page-header
        title="Following"
        :buttons="buttons"
        @buttonPressed="onButtonPressed"
      />
      <!-- здесь контент -->
      <page-footer />
    </page-following>
    Ответ написан
    2 комментария
  • Как получить путь к файлу из input type="file"?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    IMHO, никак. Доступ к реальной файловой системе из js-скрипта в браузере сильно ограничен. Максимум - получить реальное имя без полного пути и временное служебное имя вида blob:null/8d02a1cb-72bc-4026-a4f7-d5f1c5d08bce.

    P.S. Странное имя функции "добавить неудачу".
    Ответ написан
    Комментировать
  • Как найти ближайшую дату в массиве?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    const parseDate = (date) => Date.parse(date.split('/').reverse().join('-'));
    const findClosest = (list, date = (new Date()).toLocaleDateString('en-GB')) => {
      const findDate = parseDate(date);
      return list.reduce(
        (acc, cur) => {
          const delta = parseDate(cur.date) - findDate;
          return (delta >= 0 && delta < acc.delta) ? { delta, el: cur } : acc;
        },
        { delta: Number.MAX_SAFE_INTEGER, el: null },
      ).el;
    };
    Ответ написан
    Комментировать
  • Как сделать задачу одним запросом в MySQL?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    MySQL 8.0 и выше
    WITH RECURSIVE `cte` (`date`) AS (
      SELECT :from_date
      UNION
      SELECT `date` + INTERVAL 1 DAY
        FROM `cte`
        WHERE `date` < :to_date
    )
    SELECT `cte`.`date`,
           IFNULL(`s`.`count`, 0) AS `joined_count`,
           IFNULL(`u`.`count`, 0) AS `left_count`
      FROM `cte`
      LEFT JOIN (
        SELECT `joined_date`, COUNT(*) AS `count`
          FROM `table`
          WHERE `joined_date` BETWEEN :from_date AND :to_date
          GROUP BY `joined_date`
      ) AS `s` ON `s`.`joined_date` = `cte`.`date`
      LEFT JOIN (
        SELECT `left_date`, COUNT(*) AS `count`
          FROM `table`
          WHERE `left_date` BETWEEN :from_date AND :to_date
          GROUP BY `left_date`
      ) AS `u` ON `u`.`left_date` = `cte`.`date`
    Ответ написан
    Комментировать
  • Как заблокировать расширение textarea?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    textarea {
      resize: none;
    }
    Ответ написан
    1 комментарий
  • Пустой массив C++, как решить?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Пустой массив - это массив без элементов. А у вас массив не пустой, а заполненный нулями.
    Ну а проблема в том, что не задано начальное значение Age.
    Ответ написан
    1 комментарий
  • Как вывести всю таблицу SQL исключая строки с повторением значения в ОДНОМ из столбцов?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    WITH `cte` AS (
      SELECT `ID`, `UserName`, `Car`, `Time`, `Date`, `NumberServer`,
             ROW_NUMBER() OVER `win` AS `order`
        FROM `dragsf`
        WINDOW `win` AS (PARTITION BY `Car` ORDER BY `Time`)
    ) SELECT *
      FROM `cte`
      WHERE `order` = 1
    Ответ написан
    1 комментарий