Задать вопрос
  • Есть ли нагрузка на генератор при выдаче электричества в общественную сеть (микрогенерация)?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Если вы отдаёте мощность - не важно куда (в сеть или на обогреватель), то эту мощность нужно вырабатывать, а значит нагрузка будет, и будет она пропорциональна отдаваемой мощности.
    Сколько мощности будет отдаваться в сеть будет решать ваш контроллер согласно своих характеристик и настроек. Соответствующую нагрузку он и будет перекладывать на плечи вашего генератора.
    Чтобы отдать энергию в сеть, вам нужен инвертор, который синхронизируется своим синусом с сетью и будет передавать в сеть некоторую мощность. В зависимости от алгоритма работы этого инвертора мощность, отнимаемая от генератора, может подниматься скачком, или нарастать плавно - это зависит только от дороговизны вашего инвертора и контроллера.
    Ответ написан
    3 комментария
  • Питон ставит правила(сарказм) по f.read, что делать, не работает как должно. Есть возможности?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    with open("convert_der/after.txt", "r") as r:
            count = r.read().count('|')
            print(f'Суммарно {count}')
            read = r.read()

    Смотрите что тут происходит:
    - открывается файл на чтение
    - вычитывается всё содержимое файла и в содержимом подсчитывается число "|", при этом считанное содержимое никуда не сохраняется в памяти.
    - повторный read уже ничего не прочитает. Просто пустая строка будет.

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

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

    Такому алгоритму не нужно памяти сверх необходимого для хранения одной последовательности, плюс небольшая константа для переменных. В общем, инкрементация в среднем за O(log_M(N)), где M - размер алфавита, а N - число знаков.

    У вас, кстати, еще ошибка:
    То есть в диапазон должно входить 3^2=9 значений,

    3^2+3^1
    Ответ написан
  • Правильно ли решил задачу по топпингу в пиццу. 7.1 Эрик Мэтиз Python?

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

    Учиться, учиться и ещё раз учиться.
    Ответ написан
  • Как передать json файл из серверного файла app.js ( node.js ) в клиентский function.js, для обработки и вывода в html?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    fetch('data.json') выполняется на компьютере пользователя внутри его браузера, а файл вы сохранили в файловой системе сервера, в каталоге где запущено ваше приложение.
    fetch загружает контент по http с удалённого сервера, по умолчанию берется тот же хост, с которого получена страница со скриптом. Но этот сервер не отдаёт по http по пути имени этого файла этот файл. Для этого нужно либо создать соответствующий хендлер на сервере и настроить роутинг, либо положить файл в файловой системе так, чтобы его раздавал веб-сервер, который вы используете в качестве прокси, например nginx. Тогда вы сможете скачать клиентом этот файл.

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

    Это тривиальная задача, которую изучают все в самом начале изучения веб-разработки. Если вы хотите дойти до всего самостоятельно и изобрести пару квадратоколёсных велосипедов по пути - ваше право. Но трудно найти индивидуального репетитора, который будет вас учить таким азам, которые можно прочесть в книжке.
    Ответ написан
    Комментировать
  • Почему не парсятся ссылки на python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Смотрите внимательно как устроен ваш парсер. Вам уже намекнули в соседнем ответе.
    Вы парсите статью так, будто бы её текст весь в одной строке (во второй по счету). А ссылки вы ищете в третьей строке, но из-за того, что статья многострочная там их нет.

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

    ВОт вы почему-то свято уверены, что lines[2][8:] - это перечень ссылок через запятую. Может быть даже в одном из примеров в какой-то момент когда-то так оно и было, но с тех пор вы уже поменяли, скорее всего, код или входной формат, но не учли это.
    Делайте больше отладочного вывода. Лучше не принтами, а с использованием модуля logging, тогда отладочный выхлоп можно включать и отключать при необходимости не трогая код.
    Каждый раз, когда вы меняете код, не важно для исправления старых ошибок, или для добавления новой функциональности, вы неизбежно вносите новые ошибки.
    Чтобы это контролировать пишут юнит-тесты. Но вам, похоже, еще рановато.
    Ещё, особенно в небольших скриптах, полезно убеждаться, что всё идёт как надо в промежуточных этапах. Для этого в питоне есть ключевое слово assert.
    Оно позволяет указать обязательное условие, которое должно соблюдаться в этом месте выполнения программы, и текст ошибки, с которой упадёт программа в этом месте, если условие не соблюдается.
    Конкретно здесь, можно было бы убедиться с помощью assert, что в третьей строке вы отрезали 8 символов и эти символы соответствуют префиксу "Images: ".
    Падение программы на этом месте даст вам понять, что вы где-то ошиблись и что-то пошло не так, как вы ожидали. Эти ассерты также помогут вам сразу обнаруживать изменение входного формата данных, за который, возможно, отвечает не ваш код.
    Ответ написан
    Комментировать
  • Имеются ли какие алгоритмы оптимизации точек на карте?

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Ну так прочитайте свой код.
    Вот спецификация метода: https://docs.aiogram.dev/en/dev-3.x/api/methods/ge...
    Там указано какого типа юзерайди ожидается, а вы туда юзернейм суёте строкой.

    Вы можете сохранять ботом словарь имен и идентификаторов всех юзеров, которые пишут в чате, заглядывать в этот словарь и доставать оттуда user_id.
    Можете команду мьюта отсылать ответом на сообщение пользователя, которого хотите замьютить. Тогда достать его идентификатор можно так: message.reply_to_message.from_user.id
    Ответ написан
    1 комментарий
  • Как сделать оформление словаря в txt файле и вычитывание значений из этого файла?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Надо вам бы книжечку почитать по питону. Быстрее и полезнее было бы для вас в плане освоения.
    Вот, например устаревшая конструкция:
    #-*- coding:cp1251 -*-
    Сейчас принято весь код держать в utf-8 и испоьзовать свежий питон третьей версии.

    Прочитайте про PEP8.
    Считается плохим стилем использовать CamelCase для чего-то кроме классов.
    Для переменных и имен функций нужно использовать snake_case.
    selected_genre = str()
    selected_game = str()

    Ни к чему объявлять такие переменные присвоением пустой строки, причем с вызовом явного конструктора. В Питоне строки - неизменяемый тип, а переменные. это не ячейки, зарезервированные в памяти, а, как бы, "бирки" с именем, которые вешаются на объекты. ВОт строки - это объекты, которые нельзя менять. Как создаются, так и остаются.

    genre_file = open('genres.txt')
    Не хорошо так открывать файл. Для такого мелкого скрипта это не так важно, но хорошую привычку у себя формировать надо всегда и всегда надо работать с файлами правильно. Через контекстный менеджер with и используя pathlib.

    GenreList.append(line.strip())
    Обратите внимание на разницу между append и extend, именно в этом одна из причин проблемы, с которой вы тут боретесь.

    value = item.split(" ")[1:]
    Сплит можно делать по знаку равно, а не только по пробелу. Такое ощущение, что вы не особо задумываетесь, что пишете в коде.

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

    Во-первых, используйте стандартные форматы для сериализации структур данных, например json, а тут лучше yaml. Он лучше подходит для редактирования человеком и не надо его парсить вручную совершая кучу ошибок в никому не нужном коде. Ваша задача вся решается в несколько понятных простых строчек, а вы тут навертели.

    Во-вторых, почему вы так странно храните и выбираете игры? Храните их одним перечнем словарей. Каждый словарь в перечне будет соответствовать одной игре. В этом словаре будут все её параметры: название, жанр, рейтинг, если надо, который будет влиять на вероятность выбора...

    Разбивайте всегда задачу на ОЧЕНЬ МАЛЕНЬКИЕ подзадачи и решайте их отдельно. Проверяйте решение подзадачек тоже по отдельности, убеждайтесь, что этим мелкие кирпичики работают.

    Повторюсь, изучайте питон, чтобы программировать на нем как на питоне, а не вот так вот. Успехов.
    Ответ написан
    4 комментария
  • Как настроить автоматический сон ПК при отсутствии раздачи?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Взять старый ноут, вставить в него ssd, отключить сон и закрыть крышку.
    Ноут не так уж много жрёт, особенно с выключенным экраном, графику ведь не надо рисовать. Ввиду отсутствия необходимости в экране, то можно взять убитый в плане корпуса и экрана ноут, поставить на него убунту, подключаться по ssh и работать с торрентами через веб-интерфейс торрентокачалки.
    И не надо засыпать\просыпаться.
    Ответ написан
    Комментировать
  • Как загрузить большое количество данных в базу SQLite на React Native?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Добавьте в каждую таблицу поле с таймштампом и ставьте туда свежее значение при создании и каждом апдейте записи. Нужно сделать индекс на это поле, тогда выборка всех изменений в БД от конкретного момента (момента последней репликации) будет извлекаться практически мгновенно. Число запросов будет соответствовать числу таблиц в БД.
    Синхронизацию можно делать сколь угодно часто, поскольку изменившихся данных будет не много, а чаще всего их не будет вовсе. Выборка происходит по индексу, а значит очень быстро, особенно если ничего не изменилось.

    В локальной БД сохраняйте дату последней репликации в отдельной таблице.
    Имейте в виду, что обратная репликация из оффлайн БД в основную уже не будет такой простой. Во-первых нужно что-то придумывать с генерацией идентификаторов для новых записей. Возможно придётся переходить на 16-битные идентификаторы (GUID), чтобы они не пересекались с основной базой.
    Ещё нужно понимать, что в оффлайн режиме у вас может оказаться недостоверным время на локальной машине.
    Если на локальной машине есть доступ к GPS, то можно снизить число негативных последствий, но не предотвратить их вовсе.
    Если вам критично не перепутать время правки записей и первоисточник изменений из-за неточности локального времени, то тут надо будет предпринимать меры для решения этой проблемы, и, есть вероятность, что придётся идти на серьёзные компромиссы.
    Если у вас будет много локальных клиентов, которые будут работать в оффлайн-режиме, то ситуация усугубится многократно. Минимизируйте возможность правки общих данных клиентами из оффлайн-режима.

    Помните, что GPS сейчас не гарантирует достоверного времени на локальной машине, поскольку в некоторых регионах военное положение, а подразделения РЭБ в куче мест ставят помехи и искажают сигналы со спутников. Часы могут сильно врать.
    Ответ написан
    Комментировать
  • Почему не запускается manage.py?

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

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

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Если все субдомены должны ввести на один физический сервис, то на днс сервере ничего динамически прописывать не надо, просто добавляете запись со звёздочкой.
    Если нужен просто редирект, то можно реализовать его на nginx, например, a на бэке ничего делать не приедпридется. А можно наоборот, все сделать на быке, туда по-любому прилетает полный урл, можно делать любую логику.

    Что конкретно не понятно? Там вам в комментарии правильно объяснили, что вопрос задан слишком широко. Мало данных. Не понятно что именно не понятно.
    Ответ написан
    Комментировать
  • Как обойти блокировки сайтов?

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

    Не факт, конечно, что там именно такая параноидальная и замороченная система, но такое определённо имеет смысл, если надо предотвратить долбёжку и не целевое использование АПИ.

    Кстати, по урлу из вашего кода источник дал мне множество раз быстро обновлять страницу. Я не заметил, чтобы там что-то менялось с такой скоростью. Изучите ответ сервера, там есть заголовки, намекающие о времени рекомендуемого кэширования ресурса.

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

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    float(k.get('money', 0))
    Ответ написан
    Комментировать
  • Умная розетка с автовключением без интернета?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Я так понимаю речь идёт об импровизированном Watchdog-таймере для роутера.
    Если у роутера есть USB, то вот есть готовые приборчики на али: https://aliexpress.ru/popular/usb-watchdog-timer.html
    Не пробовал их подружить с роутером, но не вижу причины почему бы не заработало.

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

    Если вам нужна перезагрузка роутера не связанная с отсутствием интернета, то можно соорудить что-то из реле и вот такого таймера: https://www.youtube.com/watch?v=A3fozboEvWQ
    Сигнал для этого реле задержки с роутера можно ардуинкой через USB подавать.

    Ещё у умных розеток бывает кнопка для управления э той розеткой. Можно подключиться параллельно этой кнопки и "нажимать" её по таймеру (как в видео) с помощью реле с парой нормально замкнутых контактов. Тогда умная розетка отключит роутер по сигналу из интернета, и, за одно, обесточит реле, которое замкнёт при этом свою пару нормально-замкнутых контактов, что запустит таймер, настроенный на 2 минуты, а он, в свою очередь, через две минуты "нажмёт" через другое реле или оптопару кнопку на умной розетке, что приведет к ее включению.

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

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

    А бесплатных курсов и репетиторов тут нет.
    Ответ написан
    2 комментария
  • Как сделать пагинацию в Django для итерируемых в шаблоне объектов?

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

    Чтобы удобнее было отображать такого рода деревья и не делать при этом огромное количество лишних запросов на каждое поддерево, формируют для каждого узла синтетический идентификатор, который включает через разделитель идентификаторы всей цепочки его родителей.
    Упорядочивание узлов по такому идентификатору автоматически гарантирует их правильное расположение в дереве, а также позволит извлечь из одного идентификатора цепочку всех предков.
    Ответ написан
    Комментировать