Задать вопрос
  • Не помешает ли ODBC работе Астериска с MySQL?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    По большому счёту, ODBC мешать не должен. Просто будет два соединения с базой - через нативный MySQL и через ODBC. Если сейчас CEL через MySQL не используется, то можно писать в ту же базу, просто это будет отдельная таблица `cel`.
    Ответ написан
  • Как заменить псевдокласс has?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Через чистый CSS никак не заменить. Только если вешать JS обработчик на input и менять класс label.
    Если бы убрать :before, то можно было бы использовать
    Нельзя. Селектор с :has у вас относится к label, а без него - к input.
    Ответ написан
    Комментировать
  • Можно ли в Linux на файловой системе EXT4 запретить именовать файлы одинаково с разным регистром букв?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Надо включить поддержку регистронезависимости при создании файловой системы
    mkfs -t ext4 -O casefold /dev/диск
    или позднее
    umount /dev/диск
    tune2fs -O casefold /dev/диск
    mount /dev/диск

    Затем установить у нужного каталога атрибут регистронезависимости
    chattr +F /путь/к/каталогу
    Ответ написан
    7 комментариев
  • Почему с фильтром PostgreSQL выдаёт больше записей?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    До группировки в первом случае в исходную выборку попадают строки, в которых invoice_id == NULL, среди которых есть такие, что time_start < '2024-01-01 00:00:00'. Соответственно, customer_id из них отсеивается в HAVING.
    Пример:
    |-------------+------------+---------------------|
    | customer_id | invoice_id |      time_start     |
    |-------------+------------+---------------------|
    |         1   |     null   | 2023-12-31 00:00:00 |
    |         1   |        1   | 2024-02-01 00:00:00 |
    |-------------+------------+---------------------|

    В первом случае в предварительную выборку попадают обе строки и, поскольку MIN(time_start) == '2023-12-31 00:00:00' < '2024-01-01 00:00:00', то customer_id == 1 в финальную выборку не попадает.
    Во втором случае в предварительную выборку попадает только вторая строка и, поскольку MIN(time_start) == '2024-02-01 00:00:00' > '2024-01-01 00:00:00', то customer_id == 1 попадает в финальную выборку.
    Ответ написан
    Комментировать
  • Что надежнее софтовый raid1 из 2-х дисков, или просто две идентичных копии на 2-х дисках?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Бэкап не имеет смысла делать на рейд. Ну, если вы, конечно, не ожидаете, что диски с бэкапом выйдут из строя одновременно с основной копией. Два бэкапа тоже нет особого смысла делать по той же самой причине.
    Лучше периодически проверять, что из бэкапов можно восстановить данные за приемлемое время.
    Ответ написан
  • Как предоставить доступ с терминалов на ВМ с полной имитацией работы на локальном ПК?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Это называется "тонкий клиент". Есть как готовые (стоят, обычно, дороже, чем компьютеры с теми же параметрами), так и чисто софт, который можно установить на любой компьютер или грузить по сети. Смотрите ThinStation или wtWare.
    Ответ написан
    Комментировать
  • Как хранить настройки сайта?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Два базовых правила:
    1. Всё, что передаётся пользователю, он может увидеть.
    Если не хотите, чтобы пользователь что-то видел, просто не передавайте это на фронт. Отправляйте только то, что пользователю можно видеть.
    2. Всё, что приходит от пользователя требует проверки.
    Если вы не хотите, чтобы пользователь мог прислать на бэк недостоверные данные, просто не принимайте их без проверки.
    В обоих случаях, чтобы знать, что конкретному пользователю можно видеть и что он может прислать требуется аутентификация/авторизация как минимум для пользователей с повышенными правами.
    Ответ написан
  • CNAME определяет каононические имя только для/вместо A/AAAA записей, или для прочих тоже?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В MX-записи указывается каноническое имя A-записи. Использование CNAME в MX запрещено RFC2181 (раздел 10.3).
    Ответ написан
    8 комментариев
  • Что такое уровни абстракции в книге 'Чистый код' Мартина?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Уровни абстракции - разбиение программы на модули, каждый из которых реализует свой уровень, предоставляя интерфейс для следующего уровня и скрывая от него детали реализации.

    Например:
    Первый уровень - драйверы базы данных. Они реализуют соединение с базой, протокол обмена данными.
    Второй - универсальный интерфейс базы данных (PDO). Он реализует работу с любой базой данных в едином стиле.
    Третий - ORM. Он представляет объектную модель данных, хранящихся в БД.
    Четвёртый - основные операции бизнес-логики.
    Пятый - бизнес-логика верхнего уровня.

    При этом, драйвер БД использует сетевой интерфейс, у которого семь уровней абстракции (модель OSI), не вдаваясь в детали реализации.
    Ответ написан
    Комментировать
  • Как решать задачу с графом?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Рекурсивный перебор в глубину из узлов-выходов, ограниченный временем жизни лабиринта, с обнулением посещённых узлов (можно через список посещённых).
    Запоминаем маршрут с максимальной выгодой, потом разворачиваем его, получая прямой путь.
    Отдельно надо обрабатывать вариант, когда два узла соединены путём с нулевым временем. Тут обход может зациклиться.
    Вариант на PHP

    <?php
    
    /*
     * Комната 0 введена для унификации алгоритма.
     * Из неё можно попаст в любой выход, в неё попасть из других комнат нельзя.
     */
    const NODES = [
        0 => ['battleTime' => 0, 'loot' => 0],
        1 => ['battleTime' => 5, 'loot' => 15],
        2 => ['battleTime' => 2, 'loot' => 1],
        3 => ['battleTime' => 3, 'loot' => 5],
        4 => ['battleTime' => 3, 'loot' => 6],
        5 => ['battleTime' => 4, 'loot' => 7],
        6 => ['battleTime' => 5, 'loot' => 9],
        7 => ['battleTime' => 7, 'loot' => 16],
        8 => ['battleTime' => 2, 'loot' => 3],
        9 => ['battleTime' => 0, 'loot' => 0],
        10 => ['battleTime' => 0, 'loot' => 0],
    ];
    
    const ROUTE_TIMES = [
        0 => [9 => 0, 10 => 0],
        1 => [2 => 1],
        2 => [1 => 1, 8 => 2, 9 => 3, 4 => 1],
        3 => [9 => 2, 4 => 4],
        4 => [3 => 4, 2 => 1, 5 => 3],
        5 => [4 => 3, 10 => 1],
        6 => [10 => 4, 7 => 4],
        7 => [8 => 4, 6 => 4],
        8 => [2 => 2, 7 => 4, 10 => 6],
        9 => [3 => 2, 2 => 3],
        10 => [5 => 1, 8 => 6, 6 => 4],
    ];
    
    const MAX_LIFETIME = 25;
    
    function findRoute(array $state): array
    {
        $bestState = $state;
        foreach (ROUTE_TIMES[$state['currentNode']] as $nextNode => $travelTime) {
            $nodeTime = $state['lifetime'] + $travelTime +
                (in_array($nextNode, $state['route']) ? 0 : NODES[$nextNode]['battleTime']);
            if ($nodeTime > MAX_LIFETIME) {
                continue;
            }
            $nodeState = findRoute([
                'lifetime' => $nodeTime,
                'currentNode' => $nextNode,
                'wealth' => $state['wealth'] + (in_array($nextNode, $state['route']) ? 0 : NODES[$nextNode]['loot']),
                'route' => [...$state['route'], $nextNode],
            ]);
            if ($nodeState['wealth'] > $bestState['wealth']) {
                $bestState = $nodeState;
            }
        }
        return $bestState;
    }
    
    $state = findRoute([
        'lifetime' => 0,
        'currentNode' => 0,
        'wealth' => 0,
        'route' => [],
    ]);
    
    echo "Route: ", implode(' => ', array_reverse($state['route'])), "\n";
    echo "Wealth: ", $state['wealth'], "\n";
    echo "Time: ", $state['lifetime'], "\n";

    Route: 8 => 2 => 1 => 2 => 4 => 5 => 10
    Wealth: 32
    Time: 25
    Ответ написан
    Комментировать
  • Можно грохнуть эти параметры пользователя AD?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Это параметры Exchange, для Postfix/Dovecot они роли не играют.
    Ответ написан
    Комментировать
  • Asterisk вызвать свой скрипт после завершение вызова?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А зачем так усложнять себе жизнь? У tcpdump есть фильтр, в нём можно настроить адрес и порт, которые будут записываться. Просто запустите его в отдельном терминале через screen и получите дамп всего обмена с вашим шлюзом.
    А может вам вообще лучше подойдёт sngrep.
    Ну или смотрите в сторону опций F и g у Dial.
    Ответ написан
    Комментировать
  • Как установить AD DS на win server 2019?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А пароль точно у администратора? Пользователь "Администратор" и пользователь в группе "Администраторы" - это не одно и то же.
    Ответ написан
  • SQL сумма продажи за день?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    SELECT DATE(payment_date) AS `date`, SUM(amount) AS income
      FROM payment
      WHERE payment_date >= '2005-07-01' AND payment_date < '2005-08-01'
      GROUP BY `date`
    Ответ написан
    4 комментария
  • Почему meta charset="utf-8"/ работает только если сместить кавычку на meta "charset=utf-8"?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Раз код писали в блокноте, то, скорее всего, в Windows. Значит сохранили в кодировке windows-1251.
    Когда пишете тэг правильно, <meta charset="utf-8">, то указанная вами кодировка utf-8 не совпадает с реальной кодировкой текста, отображаются вопросики.
    Когда пишете тэг неправильно, то он игнорируется и кодировка распознаётся правильно, отображается нормальный текст.
    Кодировка, указанная в тэге, должна соответствовать кодировке, в которой сохранён текст.
    Ответ написан
    1 комментарий
  • Где в функции ошибка?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ноль не относится к положительным числам.
    Ответ написан
    Комментировать
  • Где можно посмотреть, почитать про troubleshoot серверов как ос так и железа?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Стандартно. Заменить диски. Вывести старые диски из массива и ввести в него новые или пометить новые как hot spare, в зависимости от реализации raid. Дождаться завершения перестроения массива, убедиться, что всё в порядке.
    Ответ написан
    Комментировать
  • Почему тепловизоры не делают на основе принципа пирометрического клина?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В зависимости от температуры видимый свет начинает менять цвет на разной толщине стекла.
    И какой видимый свет вы планируете получить, например, от человеческого тела?
    Пирометрический клин годится только для накалённых предметов, испускающих видимое свечение. Он позволяет определить разницу между излучением красного и зелёного диапазонов. Если тело излучает только в ИК-диапазоне, то клин бесполезен.
    Ответ написан
    1 комментарий
  • Dhcp и шлюзы - как понять куда что и почему?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Шлюз и должен быть в той же сети, что и само устройство. Он должен быть доступен напрямю без промежуточных узлов.
    Если вы используете две различные подсети, то в каждой из них адрес шлюза должен быть своим, хотя на шлюзе оба этих адреса могут висеть на одном интерфейсе.
    Как вариант, можете изменить сеть с /24 на /22, тогда сеть станет 192.168.0.x/22 и адреса 192.168.1.x и 192.168.2.x окажутся в одной сети.
    Ответ написан
  • Как сформировать список по вложенному массиву рекурсивной функцией?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ну, будем извращаться.
    <?php
    function formatList(array $list): string
    {
        $result = '';
        foreach ($list as $key => $value) {
            if (!is_array($value)) {
                $result .= "<li>{$key} => {$value}</li>";
                continue;
            }
            $result .= "<li>{$key} =></li>";
            foreach ($value as $item) {
                $result .= formatList($item);
            }
        }
        if ((debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2)[1]['function'] ?? '') !== 'formatList') {
            $result = "<ul>{$result}</ul>";
        }
        return $result;
    }
    print formatList($arr);

    <ul><li>id => 1</li><li>name => item1</li><li>items =></li><li>id => 2</li><li>name => item2</li><li>items =></li><li>id => 3</li><li>name => item3</li><li>items =></li><li>id => 4</li><li>name => item4</li><li>items =></li><li>id => 5</li><li>name => item5</li><li>items =></li><li>id => 6</li><li>name => item6</li><li>items =></li></ul>
    Ответ написан
    2 комментария