Задать вопрос
  • Как создать и использовать свою кодировку знаков?

    Daemon23RUS
    @Daemon23RUS
    Образовательный интерес.

    Кодировка - сама по себе особо то и не пишется, вот взбрело Вам в голову изобрести свою кодировку - изобретайте. Например решили будет 8 бит на это. Предположим Вы начали 0- пробел, 1- A, 2 - Б .... итд. Ограничено лишь Вашей фантазией, я в качестве примера привел русский, но это может быть к примеру трольий,
    пусть так и будет. Опустим момент с клавиатурой. Будем только документы смотреть. Заполнили вы таблицу соответствия отображаемым символам. Теперь у Вас есть кодировка. Назовите, как угодно Вы теперь можете составлять (нужна клавиатура) и смотреть (нужны шрифты) трольи документы в созданной кодировке. Это условно, следующий момент программа просмотра/редактирования. Но и на этом этапе уже можно утверждать что Вы создали кодировку. Как хранятся ваши фалы - как байты; без метаданных о кодировке.
    Отображение - только при правильной интерпретации (через iconv или редактор) (на примере Ubuntu)
    Шрифты Выбираются по Unicode-кодам после декодирования (Тут тоже момент про глифы, они должны быть, если символ уникален)
    Следующий этап - внедрить ее в ОС.
    Нужна тролья локаль (тут почитайте погуглите как и что устроено)
    Но один из компонентов явно связан, это LC_CTYPE (Какие байты считаются буквами. Как переводить в верхний/нижний регистр. Какие символы — пробелы, цифры и т.д.) и LC_COLLATE (Правила сортировки строк)
    Остается iconv. Для него потребуется написать модуль для glibc (модуль преобразования (.so-файл) )

    Все у Вас теперь своя тролья кодировка.
    Это обобщенное описание, не претендующее на истину в первой инстанции, но поможет Вам понять принцип. Ну и отсутствие практической пользы, только как академический интерес. Да и вопрос наверно должен звучать "как подружить экзотическую кодировку с ОС" и для каждой ОС будут свои методы.
    Ответ написан
    3 комментария
  • Можно ли подключить схему зарядки к батарее аккумуляторов?

    Daemon23RUS
    @Daemon23RUS
    Максимальное напряжение input-output для LM317 40v В Вашей схеме макс напряжение на входе будет 40+8=48v
    Макс напряжение для заряда 18650 -> 4,2v -> 3шт = 12,6v что значительно ниже предельно допустимого в 48v
    И при зарядке камера может продолжать работать.
    И не забудьте/поленитесь (не пожалейте 200руб) на BMS например https://ozon.ru/t/UySpdZs
    Ответ написан
    Комментировать
  • Есть идея. Есть прехарденинг на гитхаб. Мне нужна оценка, обсуждение. С чего начать? Куда написать?

    Daemon23RUS
    @Daemon23RUS
    Есть 60 трл дверей и им соответствующих ключей. А правило изготовления - одно. На всю жизнь хватит.

    А есть U3S23H с производительностью 1160 ТH/s, он переберет Ваши "двери" за 0,05 секунды. А Вы про всю жизнь пишите. (Опустим алгоритмы, речь про порядки чисел)
    Уверены, что выбрали верную область для получения опыта ? Ведь все о чем Вы пишите - криптография. А для ее понимания нужно как минимум академическое образование (магистратура, аспирантура по криптографии, компьютерной безопасности и прикладной математике). На GPT не выехать (можно только заехать, и то в кукурузу)
    Ваша идея напоминает challenge-response аутентификацию, где по публичному "рисунку" и секретному правилу генерируется одноразовый ключ. Это отличный подход! Но безопасность зависит не только от количества "рисунков", а от сложности восстановления секретного правила по нескольким парам "рисунок - ключ", Размера секрета, Устойчивости правила к анализу (например, по 2-3 наблюдениям).
    К сожалению, самодельные криптографические алгоритмы почти всегда оказываются уязвимыми, даже если кажутся сложными. Напомнило "закон Шнейера".

    P.S. Подведу итог 2х дневного обсуждения:
    В частности устойчивость правила к анализу, выяснилось что достаточно 2х наблюдений. Я взял пример из комментария Егор Филимонов исключил пароль, оставил только матрицу и ответ
    исходный комментарий
    Вот: Я пользователь. Я выбрал пароль A1+A1; A1*A1; A1-A2(abs); A1*A2 (а мог бы меньше или больше действий и ячейки самые разные) и сохранил его. Начал работу. Получил вызов:
    1234

    A 0123
    B 4567
    C 8901
    D 2345

    В уме я вычислил: 0+0=0; 0*0=0; 0-1=1; 0*1=0
    И в поле ввода ввел полученный ключ: 0010 И получил доступ.

    На следующий день прихожу, начинаю работать и получаю новый вызов:
    1234

    A 9876
    B 5432
    C 1098
    D 7654

    решаю: 9+9=18; 9*9=81; 9-8=1; 9*8=72
    В окне ключа ввожу: 1881172 И получаю доступ.
    Do you understand now?

    И задал школьникам задачку на комбинаторику получил
    ответ
    Детали по разбиениям:0010
       [0, 0, 10] → 236,992 комбинаций
       [0, 0, 1, 0] → 48,278,656 комбинаций
    
    Детали по разбиениям:1881172
       [18, 8, 11, 72] → 82,944 комбинаций
       [18, 81, 1, 72] → 20,352 комбинаций
       [18, 81, 17, 2] → 18,816 комбинаций
       [1, 8, 8, 11, 72] → 13,188,096 комбинаций → исключено, за пределами 1й итерации
       [1, 8, 81, 1, 72] → 3,235,968 комбинаций → исключено, за пределами 1й итерации
       [1, 8, 81, 17, 2] → 2,991,744 комбинаций → исключено, за пределами 1й итерации
       [18, 8, 1, 1, 72] → 9,707,904 комбинаций → исключено, за пределами 1й итерации
       [18, 8, 1, 17, 2] → 8,975,232 комбинаций → исключено, за пределами 1й итерации
       [18, 8, 11, 7, 2] → 16,257,024 комбинаций → исключено, за пределами 1й итерации
       [18, 81, 1, 7, 2] → 3,988,992 комбинаций → исключено, за пределами 1й итерации
       [1, 8, 8, 1, 1, 72] → 1,543,556,736 комбинаций → исключено, за пределами 1й итерации
       [1, 8, 8, 1, 17, 2] → 1,427,061,888 комбинаций → исключено, за пределами 1й итерации
       [1, 8, 8, 11, 7, 2] → 2,584,866,816 комбинаций → исключено, за пределами 1й итерации
       [1, 8, 81, 1, 7, 2] → 634,249,728 комбинаций → исключено, за пределами 1й итерации
       [18, 8, 1, 1, 7, 2] → 1,902,749,184 комбинаций → исключено, за пределами 1й итерации
       [1, 8, 8, 1, 1, 7, 2] → 302,537,120,256 комбинаций → исключено, за пределами 1й итерации

    На основе этого ответа сегодня они написали программу (используя AI) и решили эту задачу,
    Операции: A1+A1 → A1*A1 → A1-A2 → A1*A2
    Результат
    ✅ Предварительная обработка завершена: 768 валидных операций.
    
     Проверяем разбиение: [18, 8, 11, 72]
       ❌ Нет операций для (0, 8)
    
     Проверяем разбиение: [18, 81, 1, 72]
       ✅ Все пары найдены. Проверяем комбинации...
    ✅ РЕШЕНИЕ НАЙДЕНО для разбиения [18, 81, 1, 72]
       Операции: A1+A1 → A1*A1 → A1-A2 → A1*A2
       mat1: [0, 0, 1, 0] → 0010
       mat2: [18, 81, 1, 72] → 1881172
    
    Process finished with exit code 0

    Программа на Python
    def find_operations_v2():
        # Матрицы
        mat1 = [
            [0, 1, 2, 3],
            [4, 5, 6, 7],
            [8, 9, 0, 1],
            [2, 3, 4, 5]
        ]
    
        mat2 = [
            [9, 8, 7, 6],
            [5, 4, 3, 2],
            [1, 0, 9, 8],
            [7, 6, 5, 4]
        ]
    
        # Единая функция для вычисления результата операции
        def apply_op(a, b, op):
            if op == 0:
                return a + b
            elif op == 1:
                return abs(a - b)
            else:  # op == 2
                return a * b
    
        # Все возможные операции: (r1,c1,r2,c2,op) → результаты (res1, res2)
        from collections import defaultdict
        all_ops = []  # список всех валидных операций
        result_map = defaultdict(list)  # (res1, res2) → операции
    
        for r1 in range(4):
            for c1 in range(4):
                for r2 in range(4):
                    for c2 in range(4):
                        for op in range(3):
                            res1 = apply_op(mat1[r1][c1], mat1[r2][c2], op)
                            res2 = apply_op(mat2[r1][c1], mat2[r2][c2], op)
                            if res1 > 81 or res2 > 81:
                                continue
                            all_ops.append((r1, c1, r2, c2, op))
                            result_map[(res1, res2)].append((r1, c1, r2, c2, op))
    
        print(f"✅ Предварительная обработка завершена: {len(all_ops)} валидных операций.")
    
        # Целевой результат для mat1
        target1 = [0, 0, 1, 0]
    
        # Возможные разбиения "1881172"
        possible_splits = [
            [18, 8, 11, 72],
            [18, 81, 1, 72],
            [18, 81, 17, 2]
        ]
    
        labels = "ABCD"
    
        # Перебираем все разбиения
        for target2 in possible_splits:
            print(f"\n Проверяем разбиение: {target2}")
            steps = list(zip(target1, target2))  # [(0,18), (0,8), (1,11), (0,72)] и т.д.
            candidates = []
            valid = True
            for t1, t2 in steps:
                key = (t1, t2)
                if key not in result_map:
                    print(f"   ❌ Нет операций для ({t1}, {t2})")
                    valid = False
                    break
                candidates.append(result_map[key])
            if not valid:
                continue
    
            print(f"   ✅ Все пары найдены. Проверяем комбинации...")
    
            # Перебираем все 4-операционные последовательности
            from itertools import product
            count = 0
            for ops_seq in product(*candidates):
                count += 1
                # Проверим результаты
                res1_check = []
                res2_check = []
                for (r1, c1, r2, c2, op) in ops_seq:
                    res1_check.append(apply_op(mat1[r1][c1], mat1[r2][c2], op))
                    res2_check.append(apply_op(mat2[r1][c1], mat2[r2][c2], op))
                if res1_check == target1 and res2_check == target2:
                    print(f"✅ РЕШЕНИЕ НАЙДЕНО для разбиения {target2}")
                    ops_str = []
                    for (r1, c1, r2, c2, op) in ops_seq:
                        cell1 = f"{labels[r1]}{c1+1}"
                        cell2 = f"{labels[r2]}{c2+1}"
                        op_char = "+" if op == 0 else "-" if op == 1 else "*"
                        ops_str.append(f"{cell1}{op_char}{cell2}")
                    print("   Операции:", " → ".join(ops_str))
                    print("   mat1:", res1_check, "→", ''.join(map(str, res1_check)))
                    print("   mat2:", res2_check, "→", ''.join(map(str, res2_check)))
                    return
    
            print(f"   ❌ Решений для этого разбиения не найдено.")
    
        print("\n❌ Ни одно разбиение не дало решения.")
    
    # Запуск
    find_operations_v2()


    P.S.S Мы честно решили вашу первую задачу - правило восстановлено по двум парам.
    Вы не оспорили решение - значит, система уязвима при 2 наблюдениях.

    Новая задача с 511427 и 1845 - логически невозможна:
    ---1  2  3  4    1  2  3  4
    --------------  ------------
    A [2, 7, 0, 4]	[1, 9, 4, 2]
    B [0, 3, 6, 5]	[5, 3, 0, 9]
    C [0, 7, 8, 3]	[4, 6, 2, 0]
    D [4, 5, 1, 2]	[1, 7, 8, 2]
    -----------------------------
          511427          1845

    Единственный допустимый вариант разбиения ключа 511427 -[5,11,42,7], так как:
    51 > 18 ->не может быть результатом сложения/вычитания, 51 = 3×17 или 1×51 -> оба множителя >9 -> невозможно при умножении,
    27 = 3×9 -> но в первой матрице нет цифры 9 -> невозможно, -> остаётся только [5,11,42,7].
    Но и здесь - проблема с 42:
    42 = 6×7 - единственный возможный вариант.
    В первой матрице: 6 есть (B3), 7 есть (A2, C2) -> возможно B3×A2 или B3×C2.
    Но во второй матрице: B3 = 0 -> операция умножения с B3 даёт 0.
    А в ответе 1845 - нуля нет. -> Противоречие.
    Утверждение, что правило одно - неверно.
    Если это ошибка - признайте.
    Если подтасовка - мы это видим.


    Честный анализ требует честных данных.
    У нас были одни - мы их разобрали.
    Теперь Вы предлагаете другие - но они не проходят проверку на реальность.
    Ответ написан
    44 комментария
  • Почему при включённом dhcp после перезагрузки, пк пытается принять занятый ip-адрес?

    Daemon23RUS
    @Daemon23RUS
    ... 22 пк, 16 МФУ и пару устройств по мелочи ...
    ...мой пк и еще около 5 вообще не испытывают проблем с получением айпи. На остальных, при перезагрузке пк айпи сбрасывается и пытается перебором снова взять допустимый адрес, ....
    ...И каждый раз минут по 20 пользователи тратят на получение адресов...

    Ищите 2й DHCP, чудес не бывает, Wireshark в помощь
    А учитывая то Вы работаете и от качества Вашей работы страдают Ваши сотрудники, а проблему в моменте решить не выходит - потрать 2 часа пропиши статику. А на 1-2 проблемных оставь DHCP и изучай Wireshark что в сети происходит. Как проблема будет локализована и устранена - еще 2 часа вернуть DHCP
    Про 2 часа это минут по 5 на комп, для неспешного админа :)
    Ответ написан
    1 комментарий
  • Есть варики подключить DeepSeek в phpStorm?

    Daemon23RUS
    @Daemon23RUS
    Плагин Continue поддерживает режимы Chat, Plan, Agent, Background + Выбор моделей для Autocomlete, Aply, Embed, Rerank
    Есть MPC
    Плагин так себе, мне для тестов хватило. Я больше различные модели тестировал, а не удобство в IDE
    Ответ написан
  • Легально ли принимать оплату за донат на пиратском сервере вов в рф?

    Daemon23RUS
    @Daemon23RUS
    Легально-ли получать деньги за пиратские сервера вов и тп

    Нет, и никакого двоякого толкования здесь быть не может.
    Есть правообладатель, который прямо это запрещает, плюс еще вагон и маленькая тележка претензий со стороны правообладателя (Близзард) и он, Вас может оставить "без штанов", Если бы не одно но, он ввиду известных обстоятельств прекратил деятельность на территории РФ, плюс, говоря простыми словами - кинул Российских игроков. Но будет большим заблуждением считать, что он до Вас не дотянется. Условно говоря Близзы могут, например мне выдать доверенность на представление интересов в области авторского права, и условный я, уже в рамках Российского законодательства буду оставлять Вас без штанов.
    Но навтыкать Близзам ой как хочется, поэтому мой Вам вариант, организуйте а-ля игру, пусть будет "огород", продавайте на нее подписку. В игре создайте действие - вырастит/собрать например морковку. В эквиваленте суммы подписки. А вот эту самую "морковку" и используйте для оплаты доната ВоВ.
    Ответ написан
    5 комментариев
  • Как решить проблему когда две запущенные транзакции изменяют одну и ту же строку, но одна из транзакций видит старые данные а не новые?

    Daemon23RUS
    @Daemon23RUS
    Если ты просто увеличиваешь баланс, можно обойтись без чтения:
    UPDATE users SET balance = balance + 50 WHERE id = 1;

    Это атомарно, не требует блокировок в приложении, и не страдает от lost update.

    Но если логику select'а не обойти
    SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
    BEGIN;
    SELECT balance FROM users WHERE id = 1 FOR UPDATE;
    -- вернёт актуальное значение после ожидания
    UPDATE users SET balance = ...;
    COMMIT;
    Ответ написан
  • Как сделать переходник с usb 9 pin на usb 4 pin?

    Daemon23RUS
    @Daemon23RUS
    В кардридере возможно 2 USB устройства, собственно сам кард ридер и USB порт на лицевой панели кардридера (или другой кардридер для 2го типа карт)
    Как уже верно ответили на мат. плате 9 пин это 2 независимых USB
    Вам осталось определить, какой из 2х USB отвечает за кардридер и подключить его, довольствуясь только им (без USB на панели, если таковой имеется)
    Или распаять 2 USB кабеля и использовать устройство полностью, зависит от конечной цели.
    Ответ написан
    Комментировать
  • Какая из предложенных сетевых схем лучше для домашней лабы?

    Daemon23RUS
    @Daemon23RUS
    Вариант А, единая точка управления (она же и единая точка глобального отказа)
    По факту у Вас всего навсего 2 входящих провайдера, и Вам надо "рулить" между ними. А для "руления" удобней использовать один роутер. А как набьете руку, познаете детали, то и вариант Б можете попробовать (я в плане, настроить, чтобы он адекватно работал)
    Ответ написан
    Комментировать
  • К какому типу приложения вы бы отнесли MMORPG, например WOW?

    Daemon23RUS
    @Daemon23RUS
    WoW - толстый клиент. Вся тяжесть графики лежит на клиенте + физика (физика кстати проверяется сервером). Условно сервер сообщает куда повернута голова персонажа, а вся картинка (рельеф, текстуры, персонажи, действия персонажей) формируется на клиенте. Сервер это валидатор и хранилище данных. Валидирует действия персонажа и хранит их. Дополнительно присылает ранее валидированные и сохраненные данные персонажей находящихся рядом + неигровые персонажи (тут результат работы скриптов на сервере отвечающих за поведение NPC, но на клиент все равно прилетает где стоит/куда идет/как идет/какое действие выполняет) . Был удивлен ответам, что WoW - тонкий клиент.
    Ответ написан
  • Ошибка в команде для подбора перебора паролей Nmap?

    Daemon23RUS
    @Daemon23RUS
    "Смешались в кучу кони, люди"
    (C) М. Лермонтова "Бородино"


    Пути \lab\webapp\.... и c:/temp/.... не наталкивают на мысли ?
    Ответ написан
    Комментировать
  • Блок Питания (компьютер) должен внутрь себя получать воздух от вентилятора или можно наружу?

    Daemon23RUS
    @Daemon23RUS
    Наружу дует, потому, что так задумано, и это логически оправдано по ряду причин. Так сказать "типовая конструкция". Существуют БП в которых воздух "дует во внутрь", это другой конструктив, который тоже оправдан, и так задумано конструктором. Вы можете спокойно развернуть вентилятор, и будет дуть во внутрь. Но оно Вам надо ?
    Вполне нормально, что корпус забирает свежий/прохладный воздух с лицевой стороны и пропуская через корпус выдувает с задней стороны. Вы можете поменять направление. Но обращу внимание, что компоненты внутри корпуса будут обдуваться уже подогретым блоком питания воздухом, что поднимет температуру на пару тройку градусов если не на десяток, что потребует более высоких оборотов того же CPU кулера + видеокарта. Которая кстати тоже конструктивно выдувает воздух через заднюю стенку.
    В общем еще раз внимательно посмотрите на потоки воздуха, что они охлаждают, на сколько меняется температура под нагрузкой. И еще раз ХОРОШО подумайте на своим вопросом. Если просветления не наступит, это сигнал что либо Вам надо еще учиться либо это вообще не Ваше. Потому как вопрос элементарный, просто занимает место на платформе, но раз он возник, значит и потребность в ответе тоже.
    Ответ написан
    Комментировать
  • Как сделать "красивые" имена ресурсам в локальной сети?

    Daemon23RUS
    @Daemon23RUS
    Идете в магазин доменов, покупаете красивый домен, например 6984f31a162c2020267682.png
    В панели управления задаете А запись своего сервера nexcloud.my.ru на адрес nginx, например 192.168.1.x
    В Nginx настраиваете "пере адресацию" на нужный адрес/порт
    Еще получаете SSL сертификат и устанавливаете в Nginx
    Получаете красивые адреса :)))))

    Ну а более дешевые варианты (100 руб в год) работают точно так же, только имена не настолько будут красивы, не по феншую, так сказать.
    P.S. А вообще иметь собственное доменное имя и заполнить его А записями на локальные ресурсы, вполне хорошая идея. Избавляет от необходимости держать собственный ДНС + следить за тем, чтобы у клиентов в локальной сети был указан локальный ДНС. Зачастую ДНС указывают принудительно не от DHCP а например 8.8.8.8 и даже в эетом случае все Ваши локальные ресурсы будут вполне нормально резволится
    Ответ написан
    Комментировать
  • Куда варисторы отводят напряжение?

    Daemon23RUS
    @Daemon23RUS
    Ну как же Вы смотрите и не видите, VR1 же. И VR2+VR3 Тоже (тут конечно от номинала зависит, но если 50% от VR1 то срабатывать будут все 3 шт почти синхронно.
    Ответ написан
    9 комментариев
  • Как снизить стоимость доставки при 300+ заказах в день?

    Daemon23RUS
    @Daemon23RUS
    Цель: снизить стоимость доставки минимум на 15–20%, не теряя в скорости и качестве.

    Посчитайте насколько Вам экономически выгодно использовать консолидацию (Это когда партия из нескольких заказов в один регион отправляется одной посылкой в регион, там вскрывается СДЭКом и рассылается поштучно дальше)
    Ответ написан
    Комментировать
  • Не получается открыть (пробросить порт) на ротуере от ростел RT-GM-2. Что для этого нужно выполнить в настройках роутера?

    Daemon23RUS
    @Daemon23RUS
    Звоните пишите в саппорт РТ. Коллеги сталкивались с подобным, они какого то рожна на белых IP по умолчанию еще и блокируют входящие порты. Звоните уточняйте, пусть открывают/разблокируют, а то голову можно сломать а причина у РТ
    Ответ написан
    Комментировать
  • Почему перестал работать apache и ssh на сервере Debian 12?

    Daemon23RUS
    @Daemon23RUS
    У Вас ноутбук и дома. Значит должна быть возможность подключатся напрямую в консоль с клавиатуры.
    Пробуйте локализовать проблему. Что будет если:
    1) Перезапустить сеть sudo systemctl restart networking.service (или как там у Вас будет)
    2) Перезапустить sshd sudo systemctl restart ssh (stop/start тоже пробуйте)
    3) Временно sudo ufw disable (предприняв меры по ограждению его от интернета)
    Как в этих случаях себя поведет система ? Ну и просмотр логов никто не отменял.
    Плюс старый добрый tcpdump port 22 (на порт где висит ssh) что покажет ?

    Очень похоже на правило firewall, работает только (If state of connection is NEW,ESTABLISHED,RELATED) но и остальных теорий немерено.
    P.S.
    Отвечу на все нужные вопросы.
    По мере Ваших ответов, мой будет дополнятся..
    Ответ написан
  • Почему время в mysql опережает на пару секунд?

    Daemon23RUS
    @Daemon23RUS
    Проблема наблюдателя во времени (проблема времени) - ?
    Я полагаю, что корень проблемы кроется в методе измерения.
    Опишите подробнее КАК вы измеряете. Как вы определили текущий момент времени. Где (какой комп/сервер) вы определили текущий момент времени.
    Если не найдется какой либо банальщины, то решение этого вопроса потянет на нобелевку (от классической физики до квантовой механики и теории гравитации) ;))))
    Ответ написан
    Комментировать
  • Насколько допустимо использовать положительный LDO для формирования отрицательного напряжения?

    Daemon23RUS
    @Daemon23RUS
    LDO для положительного напряжения более распространены, имеют лучше характеристики и ниже цену

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

    Daemon23RUS
    @Daemon23RUS
    При подключении этот сканер отъедает около 450мА, что, возможно, несколько больше чем другие нормально работающие в этом разъеме. Разъем в силу различных причин (нам не известных) может не обеспечить должное напряжение и момент PlugPlay не отрабатывается, устройство не определяется. Но питание присутствует и сканер сам по себе работает.
    Это как один из вариантов как развиваются события при подключении сканера в передний разъем. Еще может быть вагон и маленькая тележка софтверных проблем, например с VID/PID
    Ответ написан
    Комментировать