• Где и как можно оптимизировать код?

    longclaps
    @longclaps
    Дружище, это кошмар. И в нём виноват не ты, а составители задания, которые обрекли тебя это слепить.
    Эта игра состоит в том чтобы пройти по дереву сюжетов, делая выбор той или иной ветви.
    Умеешь ли ты строить дерево? Умеешь ли обходить? Умеешь ли хранить/редактировать? Нет, нет, нет. И ты выкрутился, как мог. Молодец, а теперь смотри

    Хранить дерево будем в файле 'kolobok.yaml':
    intro: "Испеки мне колобок"
    choise:
      - "по сусекам поскреби":
          intro: "испекла. Что сделал колобок"
          choise:
            - "покатился с окна на заваленку":
                intro: "встретил зайца"
                choise:
                  - "я тебе песенку спою":
                      intro: "спел песенку, а навстречу волк"
                      choise:
                        - "я уже чёрствым стал":
                            final: "Волк поломал зубы"
                        - "отнеси к дедушке с бабушкой":
                            final: "Волк бросил колобка в речку"
                        - "я тебе песенку спою":
                            final: "колобок встретил медведя"
                  - "попробуй меня догнать":
                    intro: "прошмыгнул между ног зайца"
                  - "Не успел ответить":
                    final: "заяц его съел"
            - "скатился на лавку"
            - "остался остывать на окне"
      - "свари мне каши":
        final: "Старуха сварила кашу"
      - "пойду на базар":
        final: "медведь его съел"

    Движок мог бы быть примерно таким:
    import yaml
    
    with open('kolobok.yaml') as f:
        root = yaml.load(f, Loader=yaml.FullLoader)
    
    
    def dfs(d):
        if 'intro' in d:
            print(d['intro'])
        if 'final' in d:
            print(d['final'])
            exit(0)
        if 'choise' in d:
            print('выберите цифру ответа')
            choise = d['choise']
            for i, p in enumerate(choise, 1):
                print(i, next(iter(p)) if type(p) is dict else p)
            while True:
                try:
                    answer = input()
                    i = int(answer) - 1
                    if not 0 <= i < len(choise):
                        raise ValueError
                except ValueError:
                    print(f'ответ "{answer}" не поддерживается, пробуй ещё:')
                p = choise[i]
                if type(p) is dict:
                    dfs(p.popitem()[1])
                else:
                    print(p)
                    exit(0)
    
    
    dfs(root)

    Сколь-нибудь долгий путь, 4 сцены - лишь по ветке 1 -> 1 -> 1 -> 1, вбивать всё недосуг.
    Про YAML, DFS и прочие штуки можно найти в интернете.
    Ответ написан
  • Python или C++?, что перспективнее?

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

    flapflapjack
    @flapflapjack
    на треть я прав
    Причину подсказать не могу, но могу рассказать, как восстановил в такой же ситуации, как у вас - SSD диск.

    У ddrescue есть параметр, где можно указать map-файл, что-то типа лога. При следующем запуске с тем же параметром восстановление пойдет с того момента, как возникла последняя неудача с восстановлением.

    Таким образом, запустив раз 50 такую команду, я смог полность на 100% восстановить SSD с базой 1С на другой HDD вообще без потерь. Проблема была такая же: диск монтируется, но при обращении - отваливается и не отвечает. Тому SSD диску было лет 10 наверное.
    Ответ написан
  • Как эффективно продвинуть программу конверсии специалистов из другого стека?

    BojackHorseman
    @BojackHorseman
    ...в творческом отпуске...
    какая-то ерунда) найму пыхового проггера писать на незнакомом языке, но заплачу ему меньше денег, потому что он его не знает) а кто знает, того не найму, чтобы сэкономить.

    не, ну мощно, чего. закажите статьи на аине или доу, посмеемся вместе))
    Ответ написан
  • Как уменьшить SQL нагрзку?

    @rPman
    Вы закачиваете ВСЮ таблицу и построчно анализируя ее делаете апдейты по одной строчке, тут поплохеет любому серверу. Во первых почти наверняка всю логику можно просто засунуть в запрос, так как там проверки по простому условию на дату. Во вторых, я не изучал код, если это сложно реализовать в sql, то хотя бы не делайте update по одной записи, собирайте id необходимых записей и обновляйте пакетом либо через временную таблицу либо через инлайн данные тупо через where id in (список id)

    p.s. не пытайтесь везде работать с датами как дата в виде строки, это всегда неудобно, половина кода у вас парсинг строки с датой... работайте с __int64 date timestamp, зачастую это самый удобный тип данных.
    Ответ написан
  • Какой ЯП выбрать как дополнение к php - Go или Python?

    @bacon
    Если очень кратко, без всяких нюансов:
    Python - для ускорения разработки.
    Go - для ускорения работы сервиса, хотя наверно лучше сказать, для оптимизации узких мест.
    Ответ написан
  • Как просматривать процессы из программы на C/C++?

    @famousman204 Автор вопроса
    Короче говоря ответ такой. Все данные от ядра системы находятся в волшебной папке /proc/
    кому интересно загляните почитать
    Ответ написан
  • Может ли запрос SELECT приводить к удалению данных?

    FanatPHP
    @FanatPHP
    Чебуратор тега PHP
    склоняюсь к мнению, что это глюк на самом сервере SQL.

    всякий раз, когда ты склоняешься к такому мнению, это значит что глюк 100% в твоем собственном коде.

    Учитывая весь этот адов винегрет, от которого глаза начинают кровоточить, удивительно что оно вообще хоть как-то работает.

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

    alekciy
    @alekciy
    Вёбных дел мастер
    Вариантов много. Из простого:
    • по User-Agent
    • по IP адресу через отслеживание количества запросов с одного адреса
    • по используемым публичным прокси (многие такие сервисы явно сообщают, о себе кто они)
    • и т.д.

    Из сложного:
    • отслеживают перемещение мыши
    • ведут аналитику на о типичных поведениях пользователя и ищуют анамалии


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