• Правильно ли использовать string для primary key sequelize?

    @antares4045
    ky0, граница тонка, и я понимаю, что пользуясь моим советом бездумно можно так наговнокодить, что потом починить не получится. Но вы поймите сейчас эпоха высокоуровневых языков: поверх абсолютно всего сахар насыпать легко и просто. Так что решение использовать в качестве ключа строки не должно наложить дополнительных расходов, если вдруг (что врядли) потребуется переделка. Наболее дорогим ресурсом в it сфере сейчас является время программиста, и возможность сэкономить пару минут каждому входящему в проект специалисту путём использования пусть и менее производительной, но гораздо более читаемой структуры -- это не просто вариант, это блин и есть правильный путь. Если вы начинаете городить высоконагруженную архитектуру для приложения с одним пользователем, то вы просто обманываете того, кто платит вам деньги, даже если он в курсе и согласен (или даже сам попросил) -- вы специалист и ваша задача осознавать, что для сортировки массива вам не нужно создавать исскуственный интеллект.
  • Как в VSCode сделать вывод кириллицы в консоли при работе на питоне?

    @antares4045
    До меня дошло: вы смотрите данные во вкладке "Выходные данные", я (и, как мне кажется, все с кем вы до этого общались) решил, что вы смотрите прямо в консоли (вкладка терминал) -- там я уверен всё в порядке.
    Если вам нужны именно данные с этой вкладки -- ну уверен что это настраивается: есть вот такая ссылка но мне не помогло.

    UPD: после перезарузки взлетело) только точно также как и у отвечавшего не уверен, дело в кодировке консоли или системной кодировке
  • Существует ли способ написать мобильное приложение за месяц-два?

    @antares4045
    UnicornOrangeJuice, ну собственно говоря, мой ответ не изменился: либо вы можете просто попытаться скрыть от пользователя, что он смотрит на тот же самый сайт, который он может открыть в браузере (и за этот подход черти уже разогревают для вас котёл), либо вам надо переписать полностью всё на какой-нибудь кросплатформенный фреймворк (именно переписать, что займёт не меньше времени, чем разработка сайта (минус разработка дизайна и api)

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

    @antares4045
    Adamos, если всё так, то вам действительно поможет тот "доисторический" подход, когда приложение состояло по сути из браузера без поисковой строки истории переходов и всей прочей "лишней" фигни и просто открывало захаркоженую ссылку. только слежите, чтобы этот ваш псевдобраузер использовал webkit, так-как разработчики вашего сайта врядли ожидают, что с сайта будут заходить с какого-нибудь самодельного клона ie.

    Правда советую предупредить решающих, что подход мёртвый, с гигантским оверхедом и лучше уж потратить бабки на более дружелюбный сайт.
  • Как отключить все transition на сайте?

    @antares4045
    Froggyweb, только лучше наверное none а не all 0s
  • Как сделать разные состояния у объектов useContext?

    @antares4045
    CHtommy, redux ныне деприкейтед, его фейсбук какраз и рекомендует заменить связкой контекста и редюсера. С точки зрения использования разница минимальна, но так код "более функциональный" и без порицаемого так всеми синглотна в ядре логики.

    По поводу телеграмма: https://t.me/antares4045
    Только я не обещаю, что буду отвечать хоть сколько нибудь быстро. И не ждите, что я буду делать за вас работу.
  • Телеграм-бот игнорирует сообщения в канале, что делать?

    @antares4045
    Михаил Зайцев, хотя довольно странно. возможно та статья единственная вздорная статья в интернете, поскольку я больше не могу найти ни одого подтверждения, что боты умеют получать сообщения с каналов, кроме этой.

    Зато если вбить в поисковик что-то вроде "telegram bot not receiving messages from channels". почти наверняка первым делом увидите опровержения раз, два (хотя тут упомянута "Bots can receive updates from channels now, If they are added as administrator", как потенциальная обходная дыра (но у меня с наскоку не получилось)), ну и как вишенка, на торте: слово channel в доках я нашёл только в контексете неких inline-bots (чёрт знает, что за зверь)
  • Телеграм-бот игнорирует сообщения в канале, что делать?

    @antares4045
    Михаил Зайцев, Да. Я тоже заметил. Всё, что я нашёл, это ответ на стаковерфлоу 2016-го года, что боты сообщения в каналах, в соответствии с официальным API, видеть и не должны. сейчас в доках ситуация обратная: судя по ним, если выключить приватность, бот должен сообщения получать, но мой бот, написанный на основе python-telegram-bot, сообщений не видит. Скорее всего баг либы, или надо доки более детально курить. На этапе этих рассуждений, на меня на работе навалился лютый кранч, и стало резко "не до того". Если разберётесь -- отпишитесь: мне интересно, но я близжайшие несколько недель этим заняться не смогу.
  • Телеграм-бот игнорирует сообщения в канале, что делать?

    @antares4045
    Михаил Зайцев, хм. вы правы. сообщения, начинающиеся со слеша, в каналах не воспринимаются телеграмом как команды. надо исследовать вопрос.
  • Как запланировать действие в python?

    @antares4045
    arsfilinov, Не знаю, в чём возникла проблема. решение отлично изолируется:
    from datetime import datetime
    
    class ChaceCalcer:
        def __init__(self, functor, initValue):
            self.lasttime = datetime.now().timestamp()
            self.functor = functor
            self.value = initValue
        def get(self):
            now = datetime.now().timestamp()
            functor = self.functor
            self.value = functor(now - self.lasttime, self.value)
            self.lasttime = now
            return self.value
        
    class ChaceCalclerShell:
        def __init__(self):
            self.values = dict()
        def __getitem__(self, name):
            return self.values[name]
        def initValue(self, name, functor, initValue=0):
            self.values[name] = ChaceCalcer(functor, initValue)
            return self.values[name]
    
    
    import time
    import math
    chacher = ChaceCalclerShell()
    
    chacher.initValue('linear', lambda timedelta, prevValue: prevValue + timedelta * 2, 100)
    #зададим функцию, линейно возростающую
    
    time.sleep(1)
    
    print('linear  :', chacher['linear'].get())
    chacher.initValue('exponent', lambda timedelta, prevValue: prevValue * (math.exp(timedelta)), 1)
    #с некоторой задержкой также добавим экспененциальную зависимость
    print('exponent:', chacher['exponent'].get())
    time.sleep(3)
    
    print('linear  :', chacher['linear'].get())
    
    time.sleep(2)
    
    print('linear  :', chacher['linear'].get())
    print('exponent:', chacher['exponent'].get())
    
    time.sleep(2)
    
    print('linear  :', chacher['linear'].get())
    print('exponent:', chacher['exponent'].get())

    вывод:

    linear : 102.0174617767334
    exponent: 1.0
    linear : 108.0318660736084
    linear : 112.05375576019287
    exponent: 151.284176584114
    linear : 116.07564210891724
    exponent: 1129.0029375966299


    Соответственно можете использовать в качестве идентификаторов формул, что то, основанное на ID пользователя (ну или сами ID)
  • Задача на Python. Как найти число?

    @antares4045
    nihi1ist, хотя, справедливости ради, без рекурсии получилось чище

    import math
    
    min = 1
    max = 100
    maxdepth = math.ceil(math.log(max-min + 1, 2))
    
    print('возможные ответы: 1 - равно, 2 - загаданое число больше, 3 - загаданое число меньше ')
    
    result = None
    round  = 1
    
    while result is None and round <= maxdepth:
        print(f'число находится в диапазоне [{min}, {max}].')    
        print(f'попытка {round} / {maxdepth}')
    
        round += 1
        support = (min + max) // 2
    
        answer = ''
        while answer not in { '1', '2', '3' }:
            answer = input(f'это {support}? :')
            if answer not in { '1', '2', '3' }:
                print('ответ не распознан. попробуем ещё раз')
    
        if answer == '2':
            min = support + 1
        if answer == '3':
            max = support - 1
        if answer == '1':
            result = support
    
    
    if result is not None:
        print('результат -', result)


    надо заняться чем-нибудь полезным ;(
  • Задача на Python. Как найти число?

    @antares4045
    nihi1ist,
    конструкция
    if req == num else 'меньше' if req < num else 'больше'
    это два тернарных оператора
    https://pythonim.ru/osnovy/ternarnyy-operator-python
  • Задача на Python. Как найти число?

    @antares4045
    import math
    
    def binsearch(min, max, check, depth=1, maxdepth=None):
        if maxdepth is None:
            maxdepth = math.ceil(math.log(max-min + 1, 2))
    
        if depth > maxdepth:
            print('Ваши ответы противоречивы. прощайте.')
            return None
    
        print(f'число находится в диапазоне [{min}, {max}].')    
        print(f'попытка {depth} / {maxdepth}')
    
        support = (min + max) // 2
        result = check(support)
        if result == 'меньше':
            return binsearch(support+1, max, check, depth=depth+1, maxdepth=maxdepth)
        if result == 'больше':
            return binsearch(min, support-1, check, depth=depth+1, maxdepth=maxdepth)
        return support
    
    def guess():
        print('возможные ответы: 1 - равно, 2 - загаданое число больше, 3 - загаданое число меньше ')
        answers = {
            '1' : 'равно',
            '2' : 'меньше',
            '3' : 'больше'
        }
        def check(req):
            answer = ''
            while answer not in answers.keys():
                answer = input(f'это {req}? :')
                if answer not in answers.keys():
                    print('ответ не распознан. попробуем ещё раз')
            return answers[answer]
        return check
    
    
    result = binsearch(1, 100, guess())
    if result is not None:
        print('результат -', result)


    а вот утверждение, что вы собираетесь переписать решение рекурсивное без функций... интересно. не помню, чтобы нам даже на первом курсе давали такие задачи (хотя заучке вроде меня всё было очевидно ещё в классе восьмом)
  • Задача на Python. Как найти число?

    @antares4045
    Михаил, честно говоря -- просто залип на моменте, когда начал писать о опорном элементе и смещающемся окне без использования кода и просто написал решение -- не выспался наверное

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

    @antares4045
    Roman Kitaev, был почти уверен, что мне начнут объяснять, что я решаю не ту задачу, но в этом то и кроется проблема:
    надо было собрать композицию из функций из трёх библиотек, две из которых были асинхронными. у меня нигде не было доступа, к месту, в которых функции по факту вызывались: я просто отдавал их калбеками. запуск синхронной функции.
    Тем не менее отмечу, что я действительно не дочитал до конца официальные доки в тот раз. Моя проблема разрешима в рамках одного лишь asyncio при помощи конструкции:
    async def a():
        def b():
            asyncio.run(c())
        await asyncio.get_running_loop().run_in_executor( None, b)


    С с эстетической точки зрения она меня всё ещё коробит, но меньше моего предыдущего решения: это уже похоже на тот путь, которым могли авторы библиотеки разрешать проблему косвенной рекурсии. но не говорите мне, что это не костыль, вставленный в истеричной попытке подружить libuv с GIL.
  • Есть асинхронный модуль для отправки писем на email?

    @antares4045
    shurshur, однажды в методе сервера, который, в силу навязанного мне архитектурного решения, был async функцией у меня возникла необходимость вызывать обязательно синхронную функцию, которая в свою очередь уже должна была вызывать async функцию, и дожидаться результатов её выполнения. простая цепочка:

    async def a():
      def b():
        await c()
      b()


    причём из-за непреодолимых обстоятельств, вложеную функцию никак нельзя было превращать в корутину.
    я потратил часов 8 на гугление и пришёл к выводу, что текущая реализация asyncio настолько "нормальна", что мне пришлось городить костыль, ломающий психику любому, его прочитавшему (если интересно, могу скинуть)

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

    @antares4045
    dark-cucumber, scrollTop везде одинаковым обязан быть (JQuery на боевых проектах ни разу не использовал -- потому допускаю существование не известного мне бага)
    У человека тут всё классно работает. Если не поможет: вечером, возможно, покопаюсь.
  • Где найти актуальный package.json и package-lock.json для сборки react + webpack?

    @antares4045
    anriko, символ \ во всех языках СИ семейства является экранирующим -- следующая за ним буква имеет особую смысловую нагрузку, а если вы хотите написать просто \ (который к примеру является разделителем в путях в ОС windows, то вы вынуждены писать \\, соответственно
    .\\node_modules\\.bin\\webpack -- в текущей папке есть папка node_modules в ней есть папка .bin а в ней наконец нечто (скорее всего файл), по имени webpack -- это нечто и нужно запустить, чтобы выполнить команду start