• Как написать SQL запрос, чтобы при нахождении одной записи с определенным значением поля, другие записи с таким же значением не выводились?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    SELECT * 
    FROM articles a
    WHERE NOT EXISTS(SELECT * FROM tag2article ta WHERE ta.tag_id = 5 AND ta.article_id = a.id)
    Ответ написан
    Комментировать
  • Случайно число от 0 до 5 и присвоить значение переменным?

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

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

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    С чего вы взяли, что i не меняется? То, что у вас не печатается ничего с i>0 - это не значит, что внешний цикл не работает. Это значит, что принт больше не выполняется.
    Вторая подсказка: у вас внутренний цикл по z, он один раз добегает до конца, но что дальше? Где вы сбрасываете z?
    Ответ написан
  • Telebot owm. Бот видит только 1 команду и опирается только на нее. Есть варианты решить данную проблему?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Знаете почему никто не хочет отвечать на ваш вопрос?
    Тут несколько причин. Сперва вы запостили код без форматирования. Вы не могли не заметить этого, но надолго оставили вопрос как есть. Это выглядит как неуважение к тем, кто мог бы ответить.
    Кроме того, прочитайте как вы сформулировали свой вопрос. Пришлось вникать, перечитывать текст несколько раз и и читать весь код, чтобы понять что вам надо. Неужели нельзя проще изложить?
    Третья причина - это отсутствие попытки решить проблему самостоятельно. Такое ощущение, что вы, как тут кто-то предположил уже, посмотрели какой-то видос и срисовали с ютуба кусочки кода, а они сходу не заработали. К черту попытки самостоятельно разобраться, да? Зачем нам отступать немного назад и пытаться разобраться сперва с базовыми вещами и более простыми примерами, верно? Вам надо сразу продуктъ написать! Сразу готовенькое.

    Давайте я вам дам, простите, непрошенный, совет как впредь решать такие проблемы.
    Упрощайте. Удалите из кода всё лишнее, оставьте минимум, который должен работать и если он не работает, то вы что-то не поняли на более ранних стадиях изучения предмета. Нет смысла разбираться в сложном, когда вы еще не понимаете простого. Вы удаляете ВСЁ лишнее: лишние импорты, лишние команды, лишние хендлеры. Оставляете базовый простой пример и пробуете. Не работает? Ищете мануал по своей библиотеке и там наверняка есть в точности такой пример, ведь он максимально простой. Сравните его со своим. В чем отличие?
    Думаю на этом этапе уже станет ясно.

    К примеру в вашем коде видно, что срабатывает только один хендлер на любой текст, но в коде именно так все и задекларировано. Любой текст - делаем приветствие. Если сообщение обработано, библиотека не задействует прочие хендлеры, даже если они тоже подходят.

    Но, повторюсь. Проблема глубже. Она не в хендлерах и не в декораторах, а в том, что надо сперва разбираться с простыми примерами, а потом переходить к более сложным. Учитесь читать документацию. Ролики в ютубе - плохой учитель. Успехов.
    Ответ написан
  • Существуют ли готовые устройства по автоматическому включению оборудования от наличия нагрузки у другого оборудования?

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

    Если управляющая нагрузка мощная, то всё это не такая и проблема. Так можно, к примеру, пылесос включать при включении гриндера и т.д. Сложнее селать более чувствительную схему, например, когда хочется управлять с помощью одной умной лампочки всей люстрой на 10 рожков, в которых 9 тупых лампочек и одна умная. При наличии тока через умную лампочку, можно было бы заитывать всю люстру, но такой небольшой ток не так-то просто надёжно детектировать, особенно без разрыва управляющей цепи.
    Ответ написан
    Комментировать
  • Хочу заняться программирование БПЛА/ ИИ на БПЛА, с чего начать?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    С лётных симуляторов. Выбирайте те, у которых есть API с телеметрией.
    Имея АПИ, можно пробовать писать код.
    Ответ написан
    Комментировать
  • Как делается такая гравитация в играх?

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Прогоните его через утилиту jq, например.
    Или пайпом через такую команду:
    py "json.dumps(json.load(sys.stdin), ensure_ascii=False)" < encrypted.json > uncrypted.json
    Ответ написан
    Комментировать
  • Как сделать такой перебор через itertools на Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Можно определить функцию инкремента для вашего "числа" с заданным набором "цифр" (алфавитом).
    Например так:
    def inc(s, ab='123abc'):
        if not s:
            return ''
        x = (ab.index(s[-1]) + 1) % len(ab)
        return (s[:-1] if x else inc(s[:-1])) + ab[x]

    Теперь вы для любой строки с заданным алфавитом можете вычислить следующую в алфавитном порядке.
    Для оптимизации скорости генерации лучше представить алфавит в виде словаря, а не строки:
    alphabet_dict = dict(enumerate(alphabet_string))
    alphabet_dict.update(zip(alphabet_string, range(len(alphabet_string))))

    Тогда в функции надо ab.index(...) заменить на ab[...].
    Теперь поиск индекса символа будет происходить за O(1).
    Ответ написан
    3 комментария
  • Нужен простой hex-редактор или программа патчер?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Держите вот я написал вам такую утилиту:
    #!/usr/bin/python3
    
    
    def patch_file(patch_fn, dest_fn, offset=0, limit=None):
        with open(patch_fn, 'rb') as patch_file, open(dest_fn, 'rb+') as dest_file:
            patch = patch_file.read()[:limit]
            dest_file.seek(offset)
            dest_file.write(patch)
    
    
    if __name__ == '__main__':
        import sys
        args = sys.argv[1:]
        if args:
            args[2:] = [int(v) for v in args[2:]]
            print(args)
            patch_file(*args)
        else:
            print(f'{sys.argv[0]} <PATCH_FILE_NAME> <DEST_FILE_NAME> [OFFSET] [LIMIT]')
            print('  OFFSET by default is 0')
            print(
                '  No LIMIT by default. You can use counting from end of patch file content to limit them. \n'
                '    For example LIMIT=5 will truncate 5 bytes of patch content\n'
                '    LIMIT=-5 cut last 5 bytes of patch content before patching.'
            )

    Сохраните в файл, например patch.py
    Под линуксом нужно сделать chmod +x patch.py.
    А под виндой можно запускать так:
    python patch.py patch_file_name dest_file_name 33 -2

    Заменит в dest_file_name все с 33 символа на содержимое patch_file_name за исключением двух последних символов патча. Последний и предпоследний параметры можно опустить.

    Или использовать утилиту dd. Она стандартная и портирована под винду.
    Ответ написан
  • Нормально ли учить Django более полугода?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    До относитеьно комфортной работы на фрилансе вам надо хотя бы для себя сделать не один такой проект. Можно еще разбирать по косточкам готовые в опенсорсе, чтобы понимать как делаются те или иные вещи. Если встретили что-то непонятное -- нунлите.
    Все реальные задачи куда интереснее и сложнее, чем то, что рассматривается в книжных примерах.
    Ответ написан
    Комментировать
  • Нужна ли математика Python,Java программисту?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Получить работу - возможно. Это зависит от того кто принимает на работу и как у вас подвешен язык.
    А вот быть полноценным программистом не понимая основ - это да, не получится.
    Так или иначе, но незнание математики не позволит эффективно решать задаи.
    Нужно, к примеру, понимать основы анализа, чтобы ориентироваться в темах областей оределения, областей значения функций. Нужно понимать чем отличаются рациональные от иррациональных чисел, понимать что такое интегрированиеи дифференцирование - на этом напрямую завязаны практически все явления реального мира (скорость, ускорение, движение...)
    Нужно понимать пределы, комплексные числа, векторную алгебру. Нужно понимать как умножаются матрицы...

    Постоянно в практике сталкиваюсь с задачами, где понимание таких вещей просто обязательно.
    К примеру простая задача - определить с какой стороны от маршрута на карте дана точка, слева или справа. Без векторной арифметики вы просто потеряете кучу времени! Постоянно нужно что-то нормализовывать. усреднять, считать мелианы и скользящие средние, аггрегировать и интеполировать. ричем, к примеру, в геймдеве аще встречадются одн направления, в финтехе немного дургие, но встречается так или иначе всё.

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

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Каких ботов? каких игр? Хотя бы пример какой привели бы... Для пасьянса вы хотите там бота или для чего?
    Игры предлагают SDK для этого, или предполагается реверс-инженерить протокол и ломать защиты?
    Надо сперва детализировать задачу, а потом искать под нее библиотеки и курсы.
    В общих чертах скорее всего вам придётся делать парсер, придётся разбираться с авторизацией и делать http-запросы, возможно использовать селениум. Придется строить модель игрового мира, описывать объектную модель предметной области, может быть понимать немного теорию игр и теорию конечных автоматов. Если вы адаете такие вопросы (не детализируя), то скорее всего узконаправленные курсы вам помочь пока не смогут. Надо расширять эрудицию в целом.
    Ответ написан
    Комментировать
  • Как переставляя столбцы и строки матрицы, переместить самый большой элемент в верхний левый угол?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вы не уточнили, что понимается под словом "переставляя". Можно ли скажем, переставить первую и пятую строку местами? Или может быть можно, скажем, пятую строку поставить в начало...
    А может быть под "переставляя" имеется в виду перестановку рядом стоящих строк местами?
    В любом случае имеет смысл сперва найти самый ольшой элемент в матрице, а потом переставлять строки, чтобы он всплыл в угол.
    В чем конкретно у вас проблема? Если вы хотите готовый алгоритм, то этот ресурс не для этого. а на конкретные вопросы тут с удовольствием ответят и помогут.
    Ответ написан
    3 комментария
  • Как реализовать честную игру в Угадай число?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Ваше решение волне валидно. Разве что некоторым игрокам придётся объяснять что такое md5 и рассказывать про сложность нахождения коллизий.
    Опять же, ушлый игрок сможет предположить, что кто-нибудь ввалил огромные мощности на поиск коллизий, а потом ему подсовывает нужную соль под ответ. Тем более не обяательно чтобы конкретное исло было в result, а достстоноч, чтобы там было не одно из выбранных 5.
    Короче, для надёжности я бы вам посоветовал добавить помимо своей соли, еще и соль, выбранную игроком. Ведь какая разница от чего считать md5, если вы играете по-честному. А вот найти коллизии при наличии гарантированно рандомной (или просто не подготовленной соли), да еще и так быстро (в рамках игры) - это куда сложнее.
    Ответ написан
    Комментировать
  • Как отправлять много запросов get (python) чтобы не забанили на сайте?

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

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

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

    В любом случае нужно стараться максимально затруднить вычисление причинно следственной связи между действиями бользователя\парсера и баном. Можно, к примеру, вести рейтинг клиентов и подключений, а когда этот рейтинг подозрительности достигнет некоторого порога, с некоторой вероятностью за рандомную единицу времени банить такого клиента. Если недобросовестному клиенту повезло и его не забанили сейчас, то забанят чуть позже, зато он не "расскажет" другим клиентам о критериях и не поможет им подстроиться под порог бана.

    Вот весь этот длинный ответ как бы должен намекнуть вам, что нет простого ответа на ваш вопрос. Если сайт, который вы парсите, устроен просто и незатейливо, если банит он тупо по пороговой частоте запросов и IP, то допустимую частоту можно вычислить затратив на подбор несколько прокси, которых забанят, зато дальше можно смело масштабировать обращения, распределив их частоту между свежими нескомпрометированными прокси.

    Если защита на сайте сложнее, то и бороться с нею будет сложнее.

    Нет протого ответа на ваш вопрос, тем более такой наивно абстрактный.
    Ответ написан
    Комментировать
  • Почему не работает переменная которая прошла через функцию?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    И не должно. начните, действительно с учебника, а не сгугла, потому что это основы и самая база. Если вы это не прочитали в учебнике, то вам в питоне больше елать нечего. Просто займитесь чем-то другим. Нагуглить это вы не сможете.
    Это как спрашивать как на калькуляторе установить рингтон.
    Ответ написан
    Комментировать
  • Как отслеживать изменение даты файла с сайта?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Рекомендую сделать скрипт, который будет получать со странички нужные даты и сравнивать с теми, что сохранены в локальном файле, например текстовом, или json, или, даже, csv.
    Если дата соответствующего файла изменилась, скрипт качает новое расписание сохраняет новые даты в файл./
    Если не изменилась - делать ничего не надо.
    Этот скрипт можно запускать с любой нужной частотой, например, с помощью cron или любого другого системного планировщика.
    Ответ написан
    Комментировать