Задать вопрос
  • Инструмент для создания любого типа файла?

    Zettabyte
    @Zettabyte
    Проф. восстановление данных ▪ Вопрос? См. профиль
    Hex-редактор позволит вам создать файл абсолютно любого формата, даже вашего собственного.
    Ответ написан
    Комментировать
  • Как преобразовать вложенные словари в объекты с типами для API-обёртки?

    Wispik
    @Wispik
    можно использовать pydantic
    и потом описать модели, согласно нужным типам данных
    Ответ написан
    Комментировать
  • PyOtp постоянно ошибка binanscii.Error: Non-base 32 digit found. Как исправить?

    @galaxy
    key = "letters1keydog963"
    totp = pyotp.TOTP(key)


    Конструктор ожидает ключ, закодированный в Base32, а там нет символов 0, 1, 8 и 9 (в документации это как-то очень вскользь прописано).

    Для произвольных, в т.ч. бинарных, ключей используйте base64.b32encode.

    Как я понял, так они сделали ради совместимости с Google Authentificator:

    Parameters
    Secret
    REQUIRED: The secret parameter is an arbitrary key value encoded in Base32 according to RFC 3548. The padding specified in RFC 3548 section 2.2 is not required and should be omitted.
    Ответ написан
    Комментировать
  • Python не выходит из цикла while, что делать?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Мне кажется я понимаю в чем проблема автора. Socket - это не файл.
    Это просто стриминговый протокол по которому можно ждать данных
    бесконечно. Потому что никакого маркера конца нету.

    Тут нужно договориться что либо сервер закрывает соединение после отдачи файла.
    Либо клиент сам отваливается когда детектирует либо принятие числа байтов
    либо специальный байт маркер EOT (как договоритесь).
    Ответ написан
    Комментировать
  • Как обеспечить невозможность извлечения шрифтов с сайта?

    Zettabyte
    @Zettabyte
    Проф. восстановление данных ▪ Вопрос? См. профиль
    Подсмотрите как грузятся шрифты то ли у adobe, то ли у похожего платного провайдера.

    Я это видел давно, но там JS, он тянет куски (видимо, шрифт, порезанный на небольшие наборы символов), эти куски, по-моему, встраиваются инлайном, т.е. идут в текстовой кодировке.

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

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Как вариант (>=Python3.10):
    from typing import Dict, Any
    
    def process(answer, result_json: Dict[str, Any]) -> None:
        tmp_json = parse_answer(answer)
        result_json['summary_text'] += tmp_json['result']
        result_json['tags'].extend(tmp_json['tags'])
        result_json['input_size'] += answer.input_size
        result_json['output_size'] += answer.output_size
    
    def handler(text: str, max_size: int) -> Dict[str, Any]:
        result_json = {'summary_text': '', 'tags': [], 'input_size': 0, 'output_size': 0}
    
        match len(text):
            case size if size > max_size:
                chunker = TextChunker(maxlen=max_size)
                for chunk in chunker.chunk(text):
                    answer = get_answer(chunk, tags_quantity=1)
                    process(answer, result_json)
            case _:
                answer = get_answer(text, tags_quantity=3)
                process(answer, result_json)
    
        return result_json
    Ответ написан
    2 комментария
  • HTML/CSS блог на джанго?

    @Everything_is_bad
    открывай гугл и забивай "django static site generator" или подобное
    Ответ написан
    Комментировать
  • Почему пропал интернет после отключения электричества?

    @default_route
    Настаивайте на выезде техника - если линка нет, то удалённо вопрос не решить, если только порт не схлопнулся по петле, или его принудительно не погасили
    Ответ написан
    8 комментариев
  • Как сделать грамотный счетчик в питоне?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    По феншую и правильно по хорошему бы реализовать класс, в котором будешь хранить состояние счётчиков

    import subprocess
    from time import sleep
    
    class CameraMonitor:
        def __init__(self):
            self.IP12 = '192.168.0.100'
            self.IP13 = '192.168.0.101'
            self.RODOS12 = '192.168.1.100'
            self.RODOS13 = '192.168.1.101'
            
            self.fail_count = {'Купол 12': 0, 'Купол 13': 0}
            self.reboot_count = {'Купол 12': 0, 'Купол 13': 0}
    
        def ping_camera(self, ip):
            cmd = f'ping {ip} -n 1 -w 100'
            response = subprocess.call(cmd, stdout=subprocess.DEVNULL)
            return response == 0
    
        def cameras_checker(self):
            r_dict = {'Купол 12': self.IP12, 'Купол 13': self.IP13}
            while True:
                for camera, ip in r_dict.items():
                    if self.ping_camera(ip):
                        print(f'Camera {camera} - OK')
                        self.fail_count[camera] = 0
                    else:
                        self.fail_count[camera] += 1
                        print(f'Camera {camera} - Died')
    
                        if self.fail_count[camera] >= 5:
                            self.cameras_reboot(camera)
    
                sleep(5)
    
        def cameras_reboot(self, camera):
            if camera == 'Купол 12':
                ip = self.RODOS12
            else:
                ip = self.RODOS13
            
            self.reboot_count[camera] += 1 
            print(f'Rebooting {camera} at IP {ip}')
    
        def info(self):
            for camera, count in self.reboot_count.items():
                print(f'Перезагрузок {camera}: {count}')
    
    
    if __name__ == "__main__":
        monitor = CameraMonitor()
        monitor.cameras_checker()
    Ответ написан
    3 комментария
  • Как у меня появились чужие данные в автозаполнении?

    @Akellacom
    CTO
    Возможно у вас просто раздвоение личности, и это ваша вторая личность о которой вы даже не подозреваете.
    https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D...
    Ответ написан
    Комментировать
  • Как в Linux пустить весь трафик через socks5 прокси?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Есть два вида странных людей:
    1. Желающие использовать VPN для определённых приложений.
    2. Желающие использовать прокси для всего трафика.

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

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Похоже на отвал какого-то чипа памяти на видеокарте либо отвал GPU. Так же может быть проблема в кабеле или в мониторе. Надо проверить с другим кабелем, разъемом, монитором и источником сигнала.
    Ответ написан
    3 комментария
  • Как сделать свой почтовый ящик на flask?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Flask
    Седой и строгий
    Flask - это web-фреймворк, а приём и отправка почты осуществляются по протоколам POP, IMAP и SMTP, так что никак. Можете разве что web-интерфейс для почтовых сервисов написать.
    Ответ написан
    Комментировать
  • Опасно ли не закрыть сокет сервера или клиента в Python?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Хэндлеры, хоть сокетов, хоть файлов - это конечный ресурс, а ОС и интерпретатор не дают вам никаких гарантий его автоматического освобождения. Так что если у вас интенсивно работающее приложение, то оно может в какой-то момент поставить раком машину, на которой работает. Готовы ли вы принять этот риск ради возможности говнокодить - вопрос к вам.
    Ответ написан
    5 комментариев
  • Как записывать данные в массив в массиве?

    EPIDEMIASH
    @EPIDEMIASH
    Человек швейцарский нож
    Да просто снести 4 строчку вашего кода
    Ответ написан
    1 комментарий
  • Что эффективнее: np.array_equal или (A == B).all()?

    Vindicar
    @Vindicar
    RTFM!
    Модуль timeit в руки и вперёд, измеряй

    >>> timeit.timeit(stmt='(A == B).all()', setup='import numpy; A, B = numpy.zeros((1000,)), numpy.zeros((1000,))', number=10_000_000)
    20.43348090001382
    >>> timeit.timeit(stmt='numpy.array_equal(A, B)', setup='import numpy; A, B = numpy.zeros((1000,)), numpy.zeros((1000,))', number=10_000_000)
    27.85776079981588
    >>>


    Правда, есть у меня уверенность, что A == B создаёт временный массив, так что это менее эффективно по памяти. А вот делает ли так array_equal() - не знаю.

    EDIT: открыл исходники функции...
    return builtins.bool((a1 == a2).all())
    Ну ты понел.
    Ответ написан
    5 комментариев
  • Возможно ли выполнить JavaScript код в Rust при помощи NodeJS?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Хоть и вопрос несколько сумбурный и не совсем понятно, что автор хочет на самом деле...
    Но краткий ответ: да, возможно, но есть нюансы...

    Самый простой вариант - запускать node как отдельный процесс. Можно просто запускать на каждый чих, а можно заморочиться и организовать общение между приложением на Rust и приложением на Node.js

    Вариант поинтереснее - Node.js можно собрать как библиотеку (есть даже готовые бинарные сборки такого), линкуем с приложением на Rust. Всё живёт в одном процессе, но node будет запускать свои потоки.

    Есть и обратный последнему вариант. Можно из Rust кода собрать бинарный аддон к Node.js
    Правда тут уже JS код будет запускать код на Rust.
    https://napi.rs
    https://neon-rs.dev

    Можно пойти дальше. Если задача просто исполнять JS код из приложения на Rust, то можно слинковаться с одним из JS движков. Приколюх предоставляемых платформой Node.js здесь не будет (вроде fs или http), хотя никто не мешает реализовать это самостоятельно.
    https://crates.io/crates/v8
    https://crates.io/crates/quickjs_runtime
    Ответ написан
    3 комментария
  • Можно ли напрямую подключить кулер(вентилятор) к повышайке на 24V 2A?

    @nehrung
    Не забывайте кликать кнопку "Отметить решением"!
    так как аккум даёт максимум 4.2 v я решил поставить повышайку которая может с 3 вольт поднять до 30 вольт и максимум выдаёт 2 ампер. Кулер потребляет 0.2 ампер. Но безопасно ли подключать таким образом?
    Выбрали экспертом - отвечаю. Судя по этим параметрам, так делать можно. Но надо иметь ввиду, что ток, потребляемый от аккума, будет много больше, чем 0,2 ампера. Насколько меньше напряжение, настолько же больше будет ток. Я буду оперировать напряжением не 30 вольт, а 24, поскольку именно таково штатное напряжение питания вентилятора, и именно на 24 надо настраивать выход вашей повышайки:

    24/4,2=5,7 раз. По мере разряда аккума, его напряжение падает, так что при 3 вольтах 24/3=8 раз.

    0,2 х (5,7...8) = от 1,14 до 1,6 ампер. С учётом того, что КПД повышайки меньше 100%, ток будет даже немного больше.

    Исходя из этого тока и требуемой продолжительности работы вашего вентилятора, выбирайте ёмкость аккумулятора.
    Ответ написан
    8 комментариев
  • Вопрос с собеседования на Java Бекенд. Как гарантировать согласованность операций?

    Я не из МТС банка, но у нас в собесе тоже есть похожий вопрос, но я бы не назвал его простым, так как там дальше ещё много дополнительных вопросов и обсуждений можно невертеть.

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

    Самый простой и часто используемый вариант - Outbox.

    Смысл в том, что мы должны в нашей основной базе завести таблицу, в которой будет записано, что нам нужно отправить запрос в тот сервис и с какими параметрами. (Например отправить письмо по электронной почте)

    Создавать запись в эту таблицу мы будем в той же транзакции, что и основную запись (например при регистрации пользователя).

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

    Переносить взаимодействие со сторонним сервисом в Outbox также имеет смысл из-за того что ты не можешь гарантировать его доступность и задержки - если будешь работат с ним при обработке запроса от клиента по API, то можешь просто упасть по тайм-аут.

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

    66ab5b548e5a9142225375.png

    Благодаря тому что мы записываем основные бизнес-данные и намерение сделать запрос в сторонний сервис в одной транзакции - мы гарантируем, что мы не будем отправлять запрос, если данные не записались и наоборот - если данные записались, то мы гарантируем, что попытаемся рано или поздно отправить запрос.
    Ответ написан
    3 комментария