• Как работает bot.delete_message?

    @Everything_is_bad
    Ну так ты сам сначала пишешь message.chat.id, потом message.chat_id, это не считая говно кода с вложенным хендлером.
    Ответ написан
    3 комментария
  • Как правильно вывести структуру из dll на c++ в Python?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Возврат структуры по значению при определённых условиях (связанных с размером и типами данных полей структуры) добавляет скрытый параметр (указатель на область памяти куда нужно вернуть результат), который функция будет ожидать. Это твой случай, и поэтому все остальные параметры съехали на один. Решение -- либо научить ctypes тому, что возвращается сложный тип и у функции может быть скрытый параметр (полагаю, что так: ctypes.restype(outdata), где outdata -- тип rez1, см), либо переделать функцию так, чтобы она не требовала скрытого параметра (например, добавив явный указатель на результат в список параметров, см).
    Ответ написан
    4 комментария
  • Как лучше организовать структуры программы по поиску значения в таблице на Python?

    @dmshar
    Если действительно ОЧЕНЬ большие - то храните в базе данных. В принципе если задача состоит в поиске допуска по диаметру то этого хватит с головой. Задача не сложная, но очень кропотливая.

    Если данные или часть закачаны в ОП, и требуют дальнейшей сложной обработки, то в Рython есть вполне работоспособная структура DataFrame из Pandas, куда такие данные такого типа нормально раскладываются. Экспорт-импорт из DataFrame в SQL реализован там-же.
    Даже непонятно, о чем тут можно еще рассуждать.
    А вот про то, как вы будете из pdf данные вытягивать перед тем, как их погружать в БД - про про это я бы подумал особо, потому как засад на этом пути достаточно много.
    Ответ написан
    Комментировать
  • Как связать YandexGPT с базой данных?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Стоит ли тратить время или (пока) такая идея заведомо гиблая?

    Гиблая
    Ответ написан
    Комментировать
  • Почему OpenVPN не отзывает сертификат пользователя?

    @mureevms
    В конфиге сервера нехватает параметра
    crl-verify /path/to/crl.pem
    Ответ написан
    7 комментариев
  • Как сделать, чтобы код работал?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Самого запуска бота в коде нет. Собственно поэтому и ошибок нет без запуска.
    Последней строчкой
    bot.run(TOKEN)

    P.s ознакомьтесь с правилами ресурса и исправьте вопрос, если надеетесь на дальнейшую помощь
    Ответ написан
    Комментировать
  • Как красиво обработывать ошибки для пользователя, в процессе выполнения скрипта Python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    1. Исключения try except.
    2. Логирование.
    3. Если нет возможности подробно описывать ошибки в самом скрипте, то пишите коды ошибок, а на стороннем ресурсе (едином для всех) описывайте, что означают эти коды.

    Т.к. в реальном мире все возможные варианты не предусмотреть, то предлагаю использовать 3 вариант + предложение отправить ошибку в поддержку за вознаграждение, в итоге поимеем:
    - Относительно недорого тестера.
    - Относительно довольного пользователя (получил какой то бонус + ткнул носом целого разраба).
    Ответ написан
    Комментировать
  • Как исправить код? Что я делаю не так?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Всё логично, вы нажали Ctrl+C на клавиатуре, операционная система отправила программе сигнал interrupt, интерпретатор выбросил исключение KeyboardInterrupt - это нормальное поведение. Если не хотите вывода трейсбэка, добавьте обработчик KeyboardInterrupt.
    Ответ написан
    Комментировать
  • Google Forms - как получить только уникальные заполнения?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Как можно зафиксировать, что человек уже заполнял форму?

    Гугл аккаунт люди меняют и заполняют 2ой раз.

    Если на 100% надежно, то - никак! Максимально надежно - то только централизованной аунтификацией на Вашем сайте. Т.к. любое хранение куки, localStorage да и тот же Google аккаунт можно изменить. Но опять же, им ничего не мешает зарегать новый аккаунт у Вас в сайте и повторить все махинации.

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

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Что делать если про скачивании aiogram, выходить данная команда?

    error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-buil...

    Наверное стоит прочитать ошибку?

    На винде отсутствует Microsoft Visual C++, качать здесь https://visualstudio.microsoft.com/ru/visual-cpp-b....
    Ответ написан
    5 комментариев
  • Возможно ли как-то использовать обычную функцию заместо макро-функции?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    #define BIT_SET(port, bit) (port |= (1 << bit))
    
    int main(void)
    {
        BIT_SET(PORTB, PORTB0);
    }


    вот такой вариант, с макро-функцией, работает, так как это просто текстовая замена

    Он работает, потому что с таким определением BIT_SET PORTB не может быть определён просто как 0x04. Потому что просто текстовая замена 0x04 |= 1 << 0 не имеет смысла. Он определён как volatile ссылка на память с адресом 0x04. Когда ты научишься передавать ссылку на такую память в функцию, функция тоже начнёт работать.
    Ответ написан
    3 комментария
  • Как можно получить изменения во VIEW, когда изменяется базовая таблица?

    Melkij
    @Melkij
    PostgreSQL DBA
    view не хранит никаких данных. Это просто сохранённое дерево запроса, встраиваемое в обратившийся к этой view запрос.
    Вам нужен триггер на таблице с данными, который будет писать в отдельную аудит таблицу историю изменений. Потом из этой таблицы получайте историю.
    Ответ написан
    Комментировать
  • Ничего не понятно, что делать?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Всё как написано в коде:
    • Выбрать случайного персонажа
    • Выбрать случайное сообщение
    • В цикле отправить выбранному выбранное n раз.

    А вам надо в цикле в каждой его итерации выбирать случайного персонажа и случайное сообщение, и тут же отправлять.
    Ответ написан
    2 комментария
  • Как сделать, чтобы message.text смотрел на только что введеный, а не старый текст?

    @twistfire92
    Python backend developer
    Объект message у вас один всегда, который берется из аргументов функции. Вы его нигде не меняете, поэтому при проверке if message.text == 'Подтвердить': всегда вернется одно и то же значение.
    Если вы хотите ожидать от пользователя нового ввода, стоит перекинуть управление в другую функцию.
    Конкретно в вашем случае лучше воспользоваться register_next_step_handler. И каждый раз прокидывать в него оставшиеся элементы списка из cells_products_data.
    Я не уверен, что register_next_step_handler работает в асинхронном режиме, не юзал telebot в async.
    Изучите этот инструмент подробнее.
    Ответ написан
    Комментировать
  • Как настроить аудидт или логвотч, если не знать что искать?

    @vitaly_il1
    DevOps Consulting
    Предотвращение - немедленно делать то, что советует Atlassian.

    Обнаружение атак - в общем случае можно сделать алерт, если объем лога за минуту (10 минут, час) значительно вырос. Обычно есть 100 записей в минуту - будем посылать алерт если есть 300.
    Плюс прочитать что пишет Atlassian и настроить алерты по ключевым словам (URL, requests, ...) которые используются в аттаках.

    Если отвлечься от Atlassian и говорить в целом - чтобы не изобретать велосипед, нужен WAF (web application firewall). Я последние годы 99% в облаке, но если вы нет, наверняка есть и on-prem products.
    Примеры облачных WAF - AWS WAF (ACL), Cloudflare. Мы получаем набор правил от провайдера WAF, который сделан на основе анализа огромного траффика и должен отфильтровывать "плохой" траффик. Разумеется, набор обновляется в реальном времени.

    Так что слова для поиска: WAF, SIEM, IDS.
    Ответ написан
    2 комментария
  • Как в цикле For передать два значенния?

    @Everything_is_bad
    zip, но лучше начать читать учебник, если такое в ступор вводит.
    Ответ написан
    Комментировать
  • Как передать вложенную структуру в функцию?

    @Shavadrius
    Так у вас функция принимает на вход Тест, а вы Тест2 туда передаете... Ну как бы...
    Ответ написан
    Комментировать
  • Не понимаю, почему программа "тяжелая"?

    Alexandroppolus
    @Alexandroppolus
    кодир
    40000000 чисел Фибоначчи - это лютая вещь со всех сторон. Даже если ты врубишь мемоизацию, как посоветовал Максим Припадчев , то там дохрена вычислений, потому что числа будут длиной в миллионы цифр.

    Мы суммируем только четные числа Фибоначчи.
    Легко заметить, что F(n) четное, только если n делится на 3, т.е. n = 3m.
    То есть тебе нужна сумма F(3*m) для всех m от 0 до floor((40000000-2) / 3) включительно, если правильно понимаю этот ваш range.

    я тут пояндексил и промыслил формулы:
    1) F(3*n) = F(n+1)^3 + F(n)^3 + F(n-1)^3 (из википедии)
    2) sum[0...N] F(i)^3 = (1/2)*(F(n)*F(n+1)^2 + (-1)^(n-1)*F(n-1) + 1) отсюда

    сумму F(3*n) можно выразить через сумму F(n)^3 и потом применить формулу (2)

    в итоге получается

    sum[0...N] F(3*i) = (1/2)*(F(n)*F(n+1)^2 + (-1)^(n-1)*F(n-1) + 1) - 1 + F(n)^3 + F(n+1)^3

    для этого выражения нам нужны F(n), F(n+1) и F(n-1) = F(n+1) - F(n)

    F(n) и F(n+1) вычисляем методом "fast doubling", который делает O(ln(n)) действий вместо O(n) стандартного способа. Ускорение знатное.

    Итого:
    const fib = (n, a = []) => {
        if (n < 1) {
            a[0] = 0n;
            a[1] = 1n;
        } else {
            const m = Math.floor(n/2);
            fib(m, a);
            const x = a[0] * (2n * a[1] - a[0]);
            const y = a[0] * a[0] + a[1] * a[1];
            if (n % 2) {
                a[0] = y;
                a[1] = x + y;
            } else {
                a[0] = x;
                a[1] = y;
            }
            
        }
        return a;
    }
    
    const sumFib3n = (n) => {
        if (n < 1) { return 0n; }
    
        const [fn, fnp1] = fib(n); // fn = fib(n), fnp1 = fib(n+1), 
        const fnm1 = fnp1 - fn;  // fnm1 = fib(n-1), 
        const sgn = n % 2 ? 1n : -1n;
        const sumPow3 = (fn * fnp1 * fnp1 + sgn * fnm1 + 1n) / 2n;
        
        return sumPow3 - 1n + fn * fn * fn + fnp1 * fnp1 * fnp1;
    }
    
    console.log(sumFib3n(Math.floor((40000000 - 2)/3)));
    Ответ написан
    2 комментария
  • Не понимаю, почему программа "тяжелая"?

    Maksim_64
    @Maksim_64
    Data Analyst
    Потому что вызовов рекурсивной функции происходит больше раз чем ты ожидаешь, и растет все это дело не линейно с увеличением n. Нужно оптимизировать рекурсивную функцию.
    from functools import lru_cache
    @lru_cache
    def F(n):
        print(n)
        if n <= 1:
            return n
        if n>1: 
            return F(n-1)+F(n-2)
    F(8)
    Вот твоя функция в точности, я добавил кеширование результатов, и print(n). Запусти с ним и без него и посмотри сколько лишних вызовов происходит. Если владеешь английским вот хорошая статья почитай как сделать своими руками, без встроенного декоратора, различные стратегии и т.д. https://realpython.com/lru-cache-python/
    Ответ написан
    1 комментарий
  • Знает ли кто-то системную DLL, которая не фиксирует себя в памяти при загрузке?

    Vapaamies
    @Vapaamies
    Психанул и снес свои ответы козлам, не отмечающим…
    Знаю, что есть ключ реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs, но не знаю, из-за него ли такое поведение.
    Ответ написан
    Комментировать