Задать вопрос
  • Как сделать грамотный счетчик в питоне?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Как-то так
    def cameras_checker(self):
        cameras = [
            {'name': 'Купол 12', 'ip': IP12, 'rebootIp': RODOS12, 'fails': 0},
            {'name': 'Купол 13', 'ip': IP13, 'rebootIp': RODOS13, 'fails': 0},
        ]
        while True:
            for camera in cameras:
                cmd = f"ping {camera['ip']} -n 1 -w 100"
                response = subprocesscall(cmd, stdout=subprocess.DEVNUL)
                if not response:
                    print(f'Camera {camera['name']} ok')
                    camera['fails'] = 0
                else:
                    camera['fails'] += 1
                    print(f"Camera {camera['name']} died")
                    if camera['fails'] = 5:
                        self.cameras_reboot(camera['rebootIp'])
            sleep(5)
    Ответ написан
    4 комментария
  • Как обойти ошибку "Превышен лимит памяти"?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    1. Чтобы найти максимум, не надо запоминать все значения, достаточно помнить максимальное.
    2. Эта задача решается гораздо проще со сложностью O(n), а не O(n2), как у вас.
    Берём два крайних отрезка (left = 0 и right = n-1), вычисляем площадь прямоугольника (right - left) * min(length[left], length[right]).
    Учитывая, что при сдвиге границ к центру расстояние (right - left) уменьшается, для увеличения площади необходимо увеличение min(length[left], length[right]). Поэтому берём ту границу left или right, длина отрезка для которой меньше, и начинаем двигать к центру, пока длина нового отрезка не станет больше предыдущей (length[left'] > length[left] или length[right'] > length[right]).
    Вычисляем новую площадь. Если она больше предыдущей, запоминаем положения отрезков. Повторяем процедуру сдвигания.
    Ответ написан
    Комментировать
  • Как написать SQL/DQL запрос при помощи библиотеки Doctrine?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Суть ORM - представление сущностей и связей БД в виде объектов. Соответственно и работать с ними, за исключением специфических случаев, надо как с объектами.
    В вашем случае код должен выглядеть как-то так:
    $taxAuthorities = $this->db->entityManager
        ->getRepository(TaxAuthority::class)
        ->findBy(['active' => true]);
    foreach ($taxAuthorities as $taxAuthority) {
        // здесь работа с объектом через геттеры
       // например, $taxAuthority->getTaxType()
    }

    Если всё-таки хотите построить запрос, то как-то так:
    $qb = $this->db->entityManager->createQueryBuilder();
    $query = $qb
        ->select('ta.taName', 'ta.taId', 'ta.taAmount', 'tam.tamColumnValue', 'tp.tpId', 'tp.tpName')
        ->from(TaxAuthority::class, 'ta')
        ->innerJoin(TaxType::class, 'tt', Join::WITH, $qb->expr()->eq('tt.ttId', 'ta.taTtId'))
        ->innerJoin(TaxAuthMatch::class, 'tam', Join::WITH, $qb->expr()->eq('tam.tamTaId', 'ta.taId'))
        ->innerJoin(TaxTypeMatch::class, 'ttm', Join::WITH, $qb->expr()->eq('ttm.ttmTtId', 'tt.ttId'))
        ->innerJoin(TaxProfileDefs::class, 'tpd', Join::WITH, $qb->expr()->eq('tpd.tpdTtId', 'tt.ttId'))
        ->innerJoin(TaxProfile::class, 'tp', Join::WITH, $qb->expr()->eq('tp.tpId', 'tpd.tpdTpId'))
        ->where($qb->expr()->eq('ta.taActive', 'Y'))
        ->orderBy('tam.tamColumnValue');
    // Посмотреть текст DQL
    // echo $query->getDQL();
    $result = $query->getQuery()->getResult();

    P.S. Нейминг полей, конечно, дичайший.
    Ответ написан
    Комментировать
  • Почему не верно монтируется каталог ubuntu server?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А вам точно нужно именно монтирование? Обычно достаточно симлинка
    ln -s /nvi /home/test/nvi
    Ответ написан
    1 комментарий
  • Как разбить текст в текстареа по строкам?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ответ написан
    Комментировать
  • Как реализовать вход через Steam?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    У стима стандартный OpenID, так что наверняка есть готовая библиотека для Spring.
    Ответ написан
    1 комментарий
  • Пишет ошибку SyntaxError: Non-UTF-8 code starting with '\x90', при этом все в UTF-8, как исправить?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А при чём тут код вашего скрипта, если вы пытаетесь выполнить команду python.exe python.exe
    Ответ написан
    2 комментария
  • Какая сложность у этого алгоритма?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Цикл while же выполняется пропорционально количеству цифр в числе..
    Да. А количество цифр в числе C это ⌊log10C⌋ + 1.
    Элемент суммы с меньшей степенью (1) отбрасываем, округление вниз убираем, основание логарифма неважно, получаем logC
    Ответ написан
    6 комментариев
  • Как раздать DHCP отдельной группе пользователей AD DS?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    DHCP в локальной раздаёт адреса не пользователям, а устройствам. Чтобы пользователь смог пройти аутентификацию с какого-то устройства, оно должно быть в сети, а значит ему уже должен быть выделен IP-адрес.
    Ответ написан
    2 комментария
  • Упустил, но что?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    С медианой перемудрили и неправильно посчитали для чётных длин.
    def get_result(self):
        if not self.data:
            return None
        if len(self.data) % 2 == 1:
            return float(self.data[len(self.data) // 2])
        return float(self.data[len(self.data) // 2 - 1] + self.data[len(self.data) // 2]) / 2

    А для остальных классов можно сделать проще и не хранить всю последовательность.
    class MinValue:
        def __init__(self):
            self.min = None
    
        def add(self, number):
            if number < self.min
                self.min = number
    
        def get_result(self):
            return self.min
    Ответ написан
  • Как скачать содержимое сайта?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Либо делать реверс-инжиниринг, разбираться, что там в JS и WASM накручено, либо просто сделать скриншоты и отправить в распознавалку.
    Второе, IMHO, на пару порядков быстрее, даже с учётом того, что скриншоты надо делать с увеличением.
    Ответ написан
    1 комментарий
  • Дайте советы по коду?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Выходите из подпрограммы как можно раньше, это позволит не выполнять лишние действия и уменьшит вложенность.
    @commands.Cog.listener()
    async def on_message(self, message):
        
        if message.author == self.bot.user:
            return
        
        if message.channel.id != 1233498806881095824:
            return
    
        user_id = message.author.id
        current_time = time.time()
    
        if not msg_delay(user_id, self, current_time):
            await message.channel.send("Ожидайте перед следующим обновлением опыта.")
            return
    
        user_name = message.author.name
        xp_amount = 100
        if message.attachments:
            xp_amount = 150
    
        self.last_xp_update[user_id] = current_time
        database.increase_xp(user_id, user_name, xp_amount)
    
        guild_id = message.guild.id
        guild = self.bot.get_guild(guild_id)
        member = guild.get_member(user_id)
        if member == None:
            return
    
        id_add_role, id_delete_role = await get_role_ids(user_id, user_name, db_levels, database)
        await manage_roles(member, guild, id_add_role, id_delete_role)
    Ответ написан
    Комментировать
  • Как при обращении к URL в NGINX выполнить скрипт.sh?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ответ написан
    Комментировать
  • Как через регулярное выражение сделать замену с использованием callback-функции?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    $str = '2 3 4 5 6';
    
    $res = preg_replace_callback(
        pattern: '#(?P<number>\d+)#',
        callback: static fn(array $match) => pow(base: intval($match['number']), exp: 2),
        subject: $str,
    );
    
    echo $res; // 4 9 16 25 36
    Ответ написан
    Комментировать
  • Как обработать многомерный массив для вывода определенных парных значений?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    for (let j = 0; j < arr[0].length; j += 1) {
      for (let i = 0; i < arr.length; i += 1) {
        res.innerHTML += `${arr[i][j]} `;
      }
      res.innerHTML += '<br>';
    }
    Ответ написан
  • Как сдплать правильную проверку айди юзера и БД?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    fetchone возвращает кортеж (tuple), который вы сравниваете с целочисленным chat_id.
    Замечания:
    Используйте CREATE TABLE IF NOT EXISTS ...
    Cтилистически, get_users, rows - почему названия во множественном числе, если работа идёт с единичными объектами?
    Ответ написан
  • Возможно ли сохранить результат выполнения ajaxSuccess в переменную?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    .ajaxSuccess() ничего не возвращает. Она только добавляет функцию-обработчик события ajaxSuccess, которая вызывается в случае успешного выполнения AJAX-запроса.
    Сохранить ответ, полученный в xhr можно, но значение будет присвоено только после выполнения запроса, что может произойти и через минуты или часы после вызова .ajaxSuccess().
    let response;
    $(document).ajaxSuccess(function(e, xhr, settings) {
    	response = xhr.responseJSON
    });

    Правильный подход - обрабатывать результат внутри callback-функции.
    Ещё более правильный - отказаться от jQuery и работать с нативным fetch через async/await.
    Ответ написан
    2 комментария
  • Одинаковые браузеры и аккаунты на разных ПК?

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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    если (n % 100 >= 10 && n % 100 <= 19) || n % 10 == 0 || n % 10 >= 5 то
      "автомобилей"
    иначе если n % 10 == 1 то
      "автомобиль"
    иначе
      "автомобиля"
    Ответ написан
    1 комментарий