Задать вопрос
  • Единые сервисы для нескольких продуктов норм или стрем?

    Нет "правильного" в общем смысле, пока твоя система соответствует поставленным требованиям.

    Выпиши в столбик все характеристики системы, которые для тебя важны.

    И оцени, оба твоих варианта в контексте этих характеристик.
    Назнач каждой характеристике коэффициент важности. Перемнож и сложи - выбери тот вариант, который больше баллов наберёт.

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

    CityCat4
    @CityCat4
    Жил да был черный кот за углом...
    Я человек ленивый, я попросил гугл (Gemini) проанализировать указанную репу.

    Вот ответ гугла:
    "Судя по описанию, изобрел классический велосипед с квадратными колесами. Его идея «двери с рисунком» — это обычный Challenge-Response протокол (запрос-ответ) на базе графического ключа, причем сильно уязвимый.Судя по его репозиторию, «прототип» написан на FastAPI и Redis, а логику ему генерировал ChatGPT. То есть человек без профильного образования в криптографии просто завернул старую концепцию в обертку современного веб-фреймворка.

    Его «уникальная» концепция — это S/KEY (алгоритм ОPIE) и одноразовые пароли (OTP), разработанные Беллом Лампортом еще в 1981 году, смешанные с концепцией графического пароля (Graphical Passwords / Pattern-based authentication) из начала 2000-х.
    Как это работает у него: Сервер дает картинку (grid_size, steps), пользователь по «секретному правилу» в голове строит маршрут (response) и отправляет его обратно. Сервер проверяет и удаляет этот challenge.
    В чем «новизна»? Ни в чем. Протоколы Challenge-Response используются в каждом первом токене аутентификации (например, в банковских приложениях или Blizzard Authenticator), только там вместо рисунка — время (TOTP) или счетчик (HOTP)."

    Гугл порекомендовал задать несколько вопросов :)

    Вопрос А: «Как ты защищаешься от атак по сторонним каналам (Side-Channel) и плечевого серфинга?
    »Если пользователь сидит в кафе, в метро или записывает экран, а камера над его плечом снимает, как он «молча смотрит на рисунок» и вводит ключ на экране — алгоритм полностью скомпрометирован. Хакеру даже не нужно брутфорсить. Он просто запишет видео ввода. В этом главная беда всех графических ключей, из-за чего от них отказываются в пользу биометрии.

    Вопрос Б: «Что происходит при атаке Man-in-the-Middle (Человек посередине)?
    »Он пишет: «Ты кидаешь ключ хакерам... Ключ больше не подходит».А если хакер перехватил трафик в момент отправки? Настоящая криптография (например, SRP — Secure Remote Password protocol) защищает от перехвата самого ответа в процессе. Если в системе хакер встанет между пользователем и сервером (MitM), он просто перехватит response до того, как тот долетит до сервера, подменит пакет и зайдет под видом пользователя, а пользователю вернет ошибку тайм-аута.

    Вопрос В: «Каков размер энтропии твоего правила?
    »Он заявляет про «60 триллионов дверей». Но человек — существо ленивое.Спросите его: если сетка (grid_size) имеет размер, например, 5х5 или 8х8, какова длина пути (steps)? Люди физически не способны запоминать сложные алгоритмы генерации путей в уме для каждой новой картинки. Они будут использовать простые правила: «проведи линию от верхнего левого котика к правому нижнему». Энтропия (хаотичность) человеческого выбора ничтожно мала. Компьютер подберет это «правило» по словарю за секунды.

    И последнее (это тоже текст гугла, но я в кои-то веки с ним согласен):
    То, что ChatGPT написал рабочий код на Python с интеграционными тестами и Docker-контуром, говорит лишь о том, что ChatGPT умеет настраивать Redis и FastAPI. Нейросеть не проверяла математическую стойкость алгоритма. ChatGPT просто реализовал логику: «прими данные — сверь с базой — удали из базы».

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

    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 комментария
  • Стоит ли переходить на IDE?

    Vamp
    @Vamp
    В одном из ответов здесь я прочитал, что лучше на этапе обучения писать код в блокноте и без подсказок

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

    Когда я запрыгиваю в новый язык, всегда делаю это в полноценной IDE со встроенными подсказками, линтерами, подсветками и полным фаршем. Тогда вхождение в новый язык происходит намного быстрее и проще. И вам советую делать так же. Современной разработки не существует без IDE. Не вижу смысла оттягивать момент знакомства с IDE на более поздний срок.
    Ответ написан
    7 комментариев
  • Изоляция сетевого слоя (WebSockets/Fetch) в Web Worker для высоконагруженного UI: используют ли такой паттерн в реальном проде?

    @null_object
    Используется, из того, что сразу вспоминается - веб версии телеграмма. У них достаточно интересная реализация уровня работы с данными. Весь сетевой слой: MTProto-соединения (это их бинарный протокол вместо классического json), шифрование, сериализация, обработка апдейтов, нормализация и кэширование) живёт в воркере, а главный поток через Proxy-обёртку просто запрашивает доменные данные и получает их готовыми к рендеру. Только они используют SharedWorker, чтобы один сокет шарился между всеми вкладками.

    Сейчас всё чаще слышно про local-first подход, который подразумевает минимальный и что самое главное - не заметный для пользователя обмен данными с сервером. То есть на клиенте хранятся кэш с ранее загруженными данными для ui, если что-то изменяется - сервер или клиент обмениваются только обновлениями, для этого придумали разные sync-engine и другие сложные штуки. Концепция спорная, да и всё хранить локально на клиенте очевидно не получится.

    Вообще, разные бывают ситуации и нужно комплексно смотреть на архитектуру фронта и бэка. Точно можно сказать, что это сильно усложнит код и придётся задуматься о вещах, о которых раньше не приходилось думать: как типизировать контракт между потоками, как не упереться в стоимость postMessage со структурным клонированием больших объектов, как отлаживать гонки в realtime-апдейтах. Фактически придётся построить и поддерживать свой маленький RPC-фреймворк
    Ответ написан
    1 комментарий
  • GitLab Как сделать автоматическую проверку кода при push или merge request с уведомлением разработчика о результате и получением от него обр. связи?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    1. Да, возможно. Поднимаете отдельный CI/CD сервер, создаете задачу с нужным вам функционалом и на этом сервере её запускаете. Отчёт можно любым приложением/скриптом отправить/залить куда и как угодно. Например, можно сразу в коммит или в запрос запостить сообщение через API: https://docs.gitlab.com/api/commits/#post-comment-...
    А при появлении сообщения в коммите/запросе гитлаб автоматом оповещает всех причастных, кто подписан. Просто настройте нужные вам оповещения — можно ботом в чат их слать в ТМ, на почту или ещё куда угодно.
    Так же гитлаб поддерживает стандартные форматы отчётов тестов из коробки, что позволяет сразу в интерфейсе гитлаба увидеть все результаты тестов. Возможно в вашем случае это подойдёт, возможно нет.
    Отдельный сервер нужен для того, чтобы не создавать проблемы и тормоза на основном сервере, где запущен гитлаб. А если запускаете на том же — убедитесь в установке ограничений производительности для задач. Иначе, когда у вас будет запускаться по сотне или даже тысяче задач в день — будет не очень комфортно работать с гитлабом.

    2. Это не имеет смысла. Пуш — это по факту просто загрузка коммита на сервер. Есть PR — он легко блокируется через подтверждение со стороны определённых пользователей или групп пользователей, а так же в случае если задача завершилась с ошибкой. Это всё настраивается в настройках. Вам следует просто правильно организовать рабочий процесс. Используйте стандартный Github Flow. PR для того и придуманы, чтобы в PR принимать или отклонять изменения. Не, так-то если очень хочется, то можно откатывать одиночные коммиты, но правильнее это делать через PR.

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

    4. Да, это стандартное поведение всех задач. Задача, обычно, запускается в контейнере и пока контейнер работает — статус задачи не меняется. Либо это отдельный скрипт на сервере, завершение которого гитлаб будет ждать. Задачу даже можно разбить на несколько стадий и по мере их завершения менять статус самой задачи, а результат можно даже в реальном времени в самом гитлабе в задаче наблюдать.
    Ответ написан
    Комментировать
  • Перенос битрикса с разных серверов на одном хостинге на один сервер на другой хостинг?

    @tgarl
    Вы сначала подумайте, а точно это нужно. 10-12 сайтов это выглядит как то что вы хотите создать себе на ровном месте проблемы.
    Потому что это единая админка, единая база данных будет, единый список пользователей, заказов...
    Кто бы что не говорил, но многосайтовость на битриксе это по большей степени для создания многоязычности и мультирегиональности. В остальном(сугубо мое мнение) лучше разделять. Конечно нужно смотреть что за сайты, если это простые новостные, то можно и объединить(размещать из одного места сразу на разных сайтах новости и статьи вполне будет удобно), но если это магазины, то я бы не стал(отмахивался бы всеми возможными способами от такого решения), особенно если есть интеграции хотя бы у парочки с 1С, потому что даже обмены придется распредлять так чтобы они не пересекались иначе будут ошибки.
    Ответ написан
    3 комментария
  • Удаляются некоторые exe файлы, отключал все службы, удалил все задачи в планировщике задач не помогло?

    GavriKos
    @GavriKos
    Микропетпроджект - https://voidtrack.space/
    С ноунейм клуба от лекс, санлекс, OneSmiLe


    Проблемы со сборками от васянов адресуйте конкретно авторам сборок.
    И ставьте чистую винду с подтвержденной хешсуммой и проверяйте на ней.
    Ответ написан
    Комментировать
  • Какие есть сервисы для "вытягивания" слов из аудио и видео файлов?

    @SunTechnik
    В Google вбиваем: "расшифровка аудио в текст"
    Далее читаем, пробуем.

    Ну или вот обзор:
    https://habr.com/ru/companies/bothub/articles/979320/

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

    Не стоит.

    А если чуть сложнее, то стоит, но относись к нему так, будто он в любой момент умрет, а все данные с него будут украдены в СЦ, когда понесешь сдавать по гарантии.

    Пихай его в RAID, включай шифрование, и держи в кладовке запасной.

    И прочитай внимательно условия возврата по гарантии, какие случаи гарантийные, а какие нет.
    Ответ написан
  • Что скрывается за обтекаемыми формулировками об использовании Cookie на сайтах?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    За этими формулировками скрывается российский 152-ФЗ "О персональных данных", европейский GDPR, американский CCPA/ADDPA, канадский PIPEDA, бразильский LGPD, китайский PIPL и их аналоги из других стран.

    > чем куки так уникальны

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

    > Почему нельзя просто сказать: "На данном сайте аутентификация реализована с помощью куки"?

    Потому что куки - это не только аутентификация и сессии. Это ещё, например, аналитика или хранение настроек и фильтров пользователя.
    Ответ написан
    Комментировать
  • Какие нейросети помимо ChatGPT эффективны в IT?

    В плане обучения человека - все контрпродуктивны.
    Ответ написан
    Комментировать
  • Какие нейросети помимо ChatGPT эффективны в IT?

    vpetrov
    @vpetrov
    частный SEO-специалист
    Постановка вопроса некорректная.
    Я бы не рекомендовал для обучения IT комплексно никакие нейросети, даже самые передовые и актуальные. Вам нужны хорошие бумажные учебники, тетрадка с ручкой для конспектирования и какой-нибудь компьютер для упражнений и практики.
    Любые "ИИ" в данном случае могут быть полезны для суммаризации данных, разъяснений сложных моментов, выявления пробелов в информации - но не более.
    В моей нише, например, актуальные модели ИИ как минимум бесполезны для обучения: это просто залежи устаревшей, чересчур общей и ложной информации. Кроме того, она не предназначена для обучения. Дидактика, методика и пропедевтика там не заложены ни в каком виде. Что, однако, не мешает использовать эти самые "ИИ" в качестве вспомогательного источника информации при правильном формировании запроса. Но вот чтобы его правильно формулировать - уже надо знать тему.
    Ответ написан
    1 комментарий
  • Как оптимально реализовать вкладки?

    Ankhena
    @Ankhena Куратор тега JavaScript
    Нежно люблю верстку
    я понимаю что есть более правильный подход но не могу найти

    Как вариант:

    1. Вешаем слушатель событий на документ или родителя этих табов
    2. Всем табам даем одинаковый класс
    3. Проверяем попал ли таргет на таб
    4. Всем убираем класс open
    5. Тому, который в таргете задаем его

    const CLASS_TAB = 'tab';
    const CLASS_OPEN = 'open';
    
    const block = document.querySelector('.block'); // родительский блок табов
    const tabs = block.querySelectorAll(`.${CLASS_TAB}`);
    
    block.addEventListener('click', ({target}) => {
      const tab = target.closest(`.${CLASS_TAB}`);
      if (tab) {
        tabs.forEach((item) => {
          item.classList.remove(CLASS_OPEN);
        });
        tab.classList.add(CLASS_OPEN);
      }
    });


    Условие тоже можно перезаписать компактнее, но мне кажется у вас вопрос как раз в логике кода, а не в сокращении символов.

    На что-то такое
    if (tab) tabs.forEach(t => t.classList.toggle('open', t === tab));


    Когда дойдёте до задачи, когда нужно менять класс не самой кнопке-табу, а соответствующему блоку с контентом, то:
    - Почитайте про DOM дерево, поиск родителей, соседей и т.д.
    - Так же рекомендую использовать data-атрибуты для связи элементов.
    Ответ написан
    9 комментариев
  • Кто имеет опыт в создании калькулятора с камерой и нейросетью?

    @AlexVWill
    Не думаю что это будет хороший проект ,так как вместо изобретения велосипеда надо взять обычный смартфон, где вся железная часть уже присутствует и просто установить в него нужную программу.
    Ответ написан
    7 комментариев
  • ИИ на ноутбуке с 64 Гб ОЗУ?

    @alexalexes
    Вам ничего не мешает установить ollama на этот ноут и проверить возможности моделей, которые влезут в его память.
    PS: Отвечу заранее, мощностей моделей хватит, чтобы с вами поболтать о погоде, играть в шарады, но ни о какой серьезной работе речь идти не может - модели объемов для персональных компов слишком туповаты, они не вместят в него необходимый контекст.
    PPS: Единственное направление для нейросетей, развернутых на коленке - это нейросети для распознавания образов. OCR, категоризация объектов, отслеживание наступления какого-либо состояния по изображению, звуку, других аналоговых метрик. Вот это можно ковырять в походных условиях. Про полноценную LLM даже не мечтайте развернуть.
    Ответ написан
    Комментировать
  • Как посчитать серьёзность отклонения числа от набора других чисел?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Для начала математически определить, что такое "серьёзность" отклонения. Это зависит не от чисел, а от той модели, которая лежит в их основе. В вашем случае, например, я вообще не вижу никакого отклонения, поскольку 22 явно попадает в диапазон возможных значений 5...43.
    Скорее всего, у вас проблема XY и вы ищете решение не той задачи.
    Ответ написан
    6 комментариев
  • Как настроить ChatGPT чтобы он не был конформистом?

    Psychosynthesis
    @Psychosynthesis
    Fullstack developer and radio engineer
    А зачем вообще у нейронки подтверждения каких-то убеждений или выводов своих спрашивать?

    Базовые систем-промпты:

    Общий
    Соблюдай следующие требования (это важно):
    Не выдумывай и не фантазируй. Если не знаешь - так и пиши "не знаю". Отвечай кратко и по существу, не повторяйся. Не пиши лишнего, не пиши того о чём я не просил, только если это явно может улучшить решение. Код никогда не сокращай если я не указал это явно. Проверяй свои ответы (писать "проверяю себя" не нужно, это команда). Писать лишних пояснений тоже не требуется. Не используй эмоджи если не просили. В комментариях и общении всегда используй русский, если иное не следует из контекста.


    Когда используется поиск
    Не нужно гуглить всё подряд, размышляй сам по максимуму, гугли только для уточнения деталей. Дополнительные требования если используешь поиск:
    - Перепроверяй факты. Несколько разных источников, это важно! Предпочтение отдавай официальным данным по стандартам либо библиотекам используемым в контексте, либо академическим источникам если вопрос общий.
    - Не используй (!) в качестве источников мусорные сайты без подробных инструкций (чаще всего это сео-помойки), отдавай предпочтения специализированным блогам (смотри на рейтинг статьи, если он есть) и официальным источникам. Старайся быть кратким.


    Сложные пошаговые задачи:
    Не скрывай ограничений. Если задача невозможна — так и скажи. Не пиши раньше времени «Готово» — только если действительно всё завершено в этом чате. Уточняй, если информация неточная, устаревшая или неполная. Проверяй себя. Если есть вариации и требуются дополнительные данные для следующего шага - прерывай рассуждения и сначала запроси недостающие, не строй предположений.


    В целом адекватные ответы выдавать будет.

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


    А вообще, нейронка это не ИИ, сколько раз надо это людям повторять? Это довольно тупой алгоритм предсказания следующего слова. Пользуйтесь им с учётом этого знания, не нужно ждать от него что он за вас думать будет, так отупеете совсем.
    Ответ написан
    2 комментария
  • Как засудить провайдера за ограничения к иностранному VPS?

    @AlexVWill
    Вы так пишете: "подать в суд", "юридические перспективы", "Подача иска" как будто живете в правовом государстве. У вас до сих пор иллюзия что политические вопросы (а вопрос, безусловно политический, хотя и затрагивает сферу гражданско-правовых отношений) вы можете решать в судебном порядке?
    Ответ написан
    3 комментария
  • Можно ли получить сразу полный список чего-либо от LLM по определённому критерию?

    @rPman
    за 1 промпт нет, так как это специфика обучающей выборки. Вообще такие запросы ИИ совершенно не должен уметь обрабатывать. Это не слепок интернета, что бы с ним сравнивать.

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

    p.s. то что вам модель что то ответила, не значит что она сделала это правильно

    p.p.s. современные openai модели, даже по api, перед ответом копаются в интернете, и собирают ответ от туда.

    upd. помним, что llm решает задачу 'странным способом', мы ей даем начало фразы, а модель ее пытается продолжить, добавляя один символ. Этим можно и воспользоваться, делаем скрипт, который перебирает все комбинации символов, начиная с длины один, добавляя эту комбинацию к промпту, и ждет от модели продолжение (ограничить несколькими символами, макс длина слова), промпт составить таким образом что бы модель либо ругнулась - нет такого слова, либо дописала слово. Если слово дописывает, то мы запускаем перебор всех символов с нашим текущим преффиксом (рекурсивно) и отправляем модели на проверку уже эти дополненные. Если слово модель дописать не может, мы делаем еще несколько попыток с разным seed (есть разные ухищрения что бы не увеличивать температуру) и если все они дают none то не продолжаем с этим преффиксом.
    Таким образом мы перебираем все комбинации букв, пропуская сразу заведомо неправильные. Можно дополнительно делать запрос с каждым найденным словом, на проверку соответствия нашему условию, пусть дает объяснение что это за слово (можно хитро составить промпт, заставить модель сомневаться в том что слово настоящее, оно тогда меньше галлюцинирует) таким образом прогнав 100500 слов через модель можно вытащить ее внутренний словарь и даже знания по каждому.
    Ответ написан
    2 комментария