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

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    with zipfile.ZipFile('spam.zip', 'w') as z: 
        z.write('C:\Windows\explorer.exe', 'path/in/archive/and_new_name.exe')
    Ответ написан
    1 комментарий
  • Как позвать толпу на онлайн хакатон?

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

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

    Для более плодотворного поиска ответа на ваш вопрос хорошо бы знать больше подробностей. Какая тема, какой стек технологий, какая цель...

    Я, вот, подумываю на счет концепции "бесконечного хакатона".
    Это такая площадка для публикации идей, команд и проектов для обсуждения и совместной работы. Кто-то скажет: "Зачем?! Есть же гитхаб, гитлаб, кикстартер и прочие! Там можно оформить страничку проекта, обсуждать фичи, принимать фичреквесты, форкать, делать ревью..."
    Суть "Бесконечного Хакатона" в том, что там первична именно коллаборация обсуждения и планирования, а не кодинга.
    На площадке можно было бы завести проект, оформить его карточку (для эффективного поиска), настроить донаты для краудфандинга, привязать репозиторий (возможно сделанный по шаблону).
    Для работы с кодом есть IDE и gitgub, для общения есть зумм, но нет единой точки кристаллизации, где можно искать проекты, единомышленников и идеи.
    Ответ написан
    3 комментария
  • Как осуществить автоматическое обновление программы при ее запуске?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    А что конкретно вам не понятно?

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

    Вариантов тут много. Наверно есть готовые библиотеки, которые это заточены делать. Из следовало бы создать, если бы их не существовало, а это значит, что они скорее всего уже есть и в изобилии. Ищите готовые решения.
    Ответ написан
    Комментировать
  • Как можно с одного скрипта Python(находится на виртуальной машине)запустить дугогой скрипт на Python(на другой виртуальной машине)?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Если я вас правильно понял, то нужно по инициативе программы на питоне в одной машине инициировать запуск программы на питоне в другой машине.
    Много способов:
    • SSH позволяет удалённо что-то запустить, а питон может шелл-команду с запуском ssh с параметрами выполнить локально. Это приведёт к желаемому вам результату. Но нужно прописать ключи и подготовить всё это. Не безопасный вариант.
    • Вторая программа (а удаленной стороне) может поднять веб-сервер и ждать сигнал на запуск какого-то куска кода() в виде http-запроса. Этот вариант лучше первого.
    • Можно поднять на одной из перечисленных или на отдельной машине сервис с очередью сообщений, например RabbitMQ. Сигнал для запуска может быть передан через него.

    Опишите для чего вам это и вам подскажут что обычно используют для этих целей. Возможно вы вообще не с той стороны подошли и нужно делать по-другому.
    Ответ написан
    2 комментария
  • Какую плату Arduino лучше купить для системы автоматического управления теплицей?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    NodeMCU (Esp8266) вместе с отладочной платой вроде этой. Там уже и проц поинтереснее и вайфай на борту и проектов в инете куча.
    Но мой вам совет, возьмите максимально подходящий по составу периферии проект из существующих у каких-нибудь зубров DIY вроде Алекса Гувера. Там всё разжевано и по полочкам, есть видосы, есть референсы и ссылки, есть рекомендации проверенных продавцов китайских магазинов с нужными деталями.
    Ответ написан
    Комментировать
  • Как вставить текст на картинку, чтобы он лежал на плоскости, заданной координатами?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вам нужны афинные преобразования.
    Вот их можно нагуглить на стек-офверфлоу
    Ответ написан
  • Как остановить цикл?

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

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

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Стейджинг и контроль версий не очень подходят т.к. область работ почти по всему ядру CMS и модулей + новые увесистые наработки.

    1. Подходят / не подходят, а если у вас всё это делается без стейджинга и контроля версий, я вам советую продать сайт пока возможность есть со всеми потрохами и поискать себя в другой области. Система контроля версий - это единственное, что потом позволит вам хотя бы задним числом понять кто не чист на руку и отомстить плохими отзывами в профиле.
    2. Не ищите дешевых фрилансеров без репутации и профиля, которым имело бы смысл дорожить.
    3. Держите репозиторий в гитхабе и старайтесь, чтобы разработчик от своего основного эккаунта кодил. Акк должен быть с активностью, историей, иначе что это за разработчик такой? Вообще верно в той поговорке сказано: "не гонялся бы ты, поп, за дешевизной".
    4. Дешевых нонейм-фрилансеров без истории опасно пускать в ядро. Отдавайте их код на ревью ребятам посерьёзнее, с репутацией. Ревью тоже работа, но обойдётся дешевле, чем закодить все эти фичи. За то опытный человек своим глазом глянет. С него потом и спросить можно как это он проглядел вредоносный коммит.
    5. Выносите всё что можно в опенсорс, но контрибьютьте корневой проект сами или через проверенных людей. Тут вам и бесплатные руки (если фичи полезные), илишние глаза для проверки на вшивость.
    6. Не хватает денег на крутых серьёзных разрабов с репутацией, делегируйте им хотя бы составление детального ТЗ и, как я выше уже написал, ревью.
    7. Помните, что порой лучшее - враг хорошего. Умейте выстраивать MVP. По Паретто 80% прибыли вам принесёт 20% фич. Сделайте их хорошо, а остальное, может быть, отпадёт за ненадобностью по факту.
    8. Как говорится "вам пора, и вам пора, с вентиляторным заводом заключать договора". Правильно коллега подметил в соседнем ответе. Вы ж не подпольную крипто-биржу, наверно, там кодите. Можно договора заключать с разрабами в белую. Лишний повод ему не гадить засветив реквизиты и подписавшись.
    Ответ написан
    1 комментарий
  • Почему else - invalid syntax?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Посмотрите, к какому, по-вашему, оператору if относится этот else. С учетом расставленных вами отступов ни к какому.
    Ответ написан
    1 комментарий
  • Парсинг данных Python и тэг br?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    name, _, age = list(soup.find_all(class_='block')[0].children)
    Ответ написан
    Комментировать
  • Как пере-импортировать переменную из файла Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    import importlib
    import config
    from config import templates, admins
    
    
    def reload():
        global templates, admins
        imprtlib.reload(config)
        from config import templates, admins

    Кстати, как в соседнем ответе верно подметили, плохая идея хранить конфигурацию в виде питоновского файла.
    Ответ написан
    Комментировать
  • Python как разделить текстовый файл на несколько по длине строки?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    py "('x'*random.randint(1, 10) for _ in range(100))" | \ 
    py -x "open(f'tmp/path_to_dest_folder/words_len={len(x):05}.txt', 'a').write(x+'\n')"

    Первая строчка генерит слова, в вашем случае там будет cat big_file.txt.
    Вторая строчка разгребает все по файлам.
    Ответ написан
    Комментировать
  • Поможете с "cb = lambda m: random.choice(m.group(1).split('|'))"?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Передаётся вот здесь:
    rgx.sub(cb, s)
    Все сопоставления регекспу будут подаваться этой функции в аргумент.
    cb = lambda m: \     # Это лямбда-функция с одним аргументом по имени m
        random.choice(   # результат функции вычисляется методом случайного выбора из
            m.group(1)   # текста (сопоставленного с первой скобкой регекспа)
            .split('|')  #  разбитого по символу "|"
        )

    Регексп rgx = re.compile('\{([^{}]*)\}') находит куски текста в фигурных скобках и m.group(1) будет соответствовать этому куску при каждом вызове лямбды.
    Ответ написан
  • Ошибка При Создании Пинг Понга На Пайтон?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вы читайте текст ошибки.
    То так то эдак пишете, то с малой, то с большой буквы название пакета.
    там критично:
    from kivy.app import App
    from Kivy.uix.widget import Widget


    kivy и Kivy для питона различаются. Пакет называется с маленькой буквы, а вы во второй строчке его импортируете с большой. Само собой он не найден.
    Вот вам об этом и в ошибке написано: "No module named 'Kivy'"
    File "C:\Python\main.py", line 2, in
    from Kivy.uix.widget import Widget
    ModuleNotFoundError: No module named 'Kivy'
    Ответ написан
  • Как в Python вычислить ближайшие точки по имеющимся GPS-координатам?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    ищет ближайшие рестораны, координаты которых есть у меня в словаре

    Если ваш бот планирует расти и поддерживать много всяких POI, в том числе помимо ресторанов, то имеет смысл вынести всё это в БД.
    Удобно использовать postgres с расширением postgis. В составе этого расширения есть оптимизированные функции поиска ближайших точек, кроме того в БД удобно хранить сами POI, их можно импортировать из OSM.

    Кроме этого не во всех подобных задачах правильно использовать геометрические метрики для нахождения ближайших точек.
    Какая-то точка может быть ближе к заданной геометрически, но она может оказаться на другой стороне реки, а крюк через мост до нее будет очень большим.
    Для этого вам лучше использовать какое-нибудь решение, учитывающее роутинг. Например OSRM. Такие сервисы зачастую умеют строить матрицы расстояний между точками. OSRM, кстати, отлично развёртывается в докере, на основе данных OSM он может строить как пешие маршруты (если, конечно, ваш регион покрыт пешими тропами в OSM), так и в других модальностях.
    Полезным артефактом от OSRM будет также геометрия маршрута и путевые точки по ходу его следования. Также OSRM в своём API имеет быстрый метод динамической привязки координат к графу дорог. Может пригодиться, скажем, для отслеживания курьера и предупреждения о его прибытии.
    Ответ написан
    Комментировать
  • Почему не записывается лог файл?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    всё правильно, с "a" должно создаваться. Вы просто, скорее всего, не нашли его. Он создаётся в текущем каталоге. сделайте обычный print(os.getcwd()) рядом с записью, и увидите путь, где лежит ваш файл.

    Но это плохая идея так писать логи. Для этого есть модуль logging. Вот здесь всё очень детально и с примерами изложено.
    Ответ написан
    Комментировать
  • Как зарегистрировать свой qr код?

    trapwalker
    @trapwalker
    Программист, энтузиаст

    Сразу хочу предупредить что я знаю что такое qr код и для чего он нужен. И знаю что есть куча генераторов qr кодов.

    Теперь у меня возникла проблема, а как сделать что-бы при сканировании моего qr кода открывался сайт? Именно моего qr кода.

    Судя по вопросу вы слишком самоуверены в своём "знании".
    Вы путаете. Не сайт привязывается к QR-коду, а QR-код создаётся из ссылки на сайт, из номера телефона или из email, или параметров подключения к wifi.

    Вот сейчас подумал, что, возможно, вы хотели по одному и тому же QR-коду ходить на со временем изменяющуюся страницу? Можно нарисовать QR-код для ссылки, полученной с помощью любого сервиса сокращения URLов, а потом подменять там целевой адрес для редиректа. Это даст вам заодно еще и статистику переходов по ссылке.
    Ответ написан
    4 комментария
  • Как вычислить время между записями-событиями в БД?

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

    Как делать запрос из питона вы найдёте в каждом первом примере найденном через гугл.
    Ответ написан
    Комментировать