Задать вопрос
  • Как лучше хранить такие данные?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Можно и не хранить.
    // Первая цифра
    'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'.indexOf('Щ') % 9 + 1 // 9
    // Вторая цифра
    ('АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'.indexOf('Ф') + 1) % 10 // 2
    Ответ написан
    3 комментария
  • Как посчитать количество функций в коде JS?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Такие задачи однозначно решаются обходом AST. Возьмите общеизвестный парсер и инструмент для обхода его дерева, например связка из @babel/parser и @babel/traverse подойдет.
    Так же можно посмотреть в какие ноды что парсится с помощью https://astexplorer.net/ - в нем несколько языков, а для js/ts на выбор есть несколько парсеров.
    Вам по сути нужно найти FunctionDeclaration содержащий в body ReturnStatement и извлечь из него Identifier соответствующий имени. А для второй части - FunctionDeclaration с ArgumentsList не нулевой длины.
    Ну и так как в условии сказано, что внутрь не заходить, то можно пройтись лишь по верхнему уровню, тогда @babel/traverse и не нужен даже
    Ответ написан
    3 комментария
  • Как менять слайды по наведению?

    LenovoId
    @LenovoId
    svg, css,js



    Здесь автоматическое добавление областей для наведения

    Ответ написан
  • Почему Event Loop пропускает очередь poll и сразу выполняет check?

    @komigor Автор вопроса
    Оказалось бращение к файловой системе Node.js делегирует системным вызовам, то есть эта фаза не полностью под контролем Node.js, в отличие от всех остальных в моем скрипте. Поэтому, до тех пор, пока придёт ответ от файловой системы, event loop может пройти виток или больше.
    Ответ написан
    Комментировать
  • SQL инъекция в UPDATE возможна ли?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Инъекция может быть через любой запрос.
    И защищать тоже надо любые запросы.
    Никогда не надо торговаться, "а можно я не буду защищать именно этот запрос? Ну мааааам!"
    Надо просто всегда следовать простым правилам - любая переменная попадает в запрос только через плейсхолдер

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

    Уязвимость — это сама возможность с помощью переданных в запрос данных изменить его код.
    Даже если ты не знаешь ни одного способа ей воспользоваться, уязвимость от этого никуда не девается.
    Даже если та возможность, про которую ты знаешь, в данном случае не прокатит - остаются ещё тысячи других.
    Если есть уязвимость, то способы ей воспользоваться всегда найдутся.

    То есть сама уязвимость никак не зависит ни от каких второстепенных факторов - типа запроса, передаваемых данных, способов их валидации, твоих знаний SQL. Это сам факт. Можно подставить свой код в запрос? Значит он уязвим. А как конкретно можно нагадить - это отдельная тема.

    Кроме того, любая уязвимость - это всегда ошибки. Если в $id будет пусто, то запрос вызовет ошибку. Если в $id будет слово select то запрос вызовет ошибку. Если будет слово "привет", то запрос вызовет ошибку. Оно тебе надо?

    При этом разных вариантов возможных ошибок и способов воспользоваться уязвимостью - тысячи, им посвящены целые учебники и статьи. Но для того чтобы защищаться, не надо знать ни одного. Потому что защищаться надо не от отдельных способов эксплуатации, а закрывать саму уязвимость. И сделать это очень просто:
    1. Любые данные должны добавляться в запрос только через плейсхолдеры
    2. Любые другие элементы запроса должны выбираться из белого списка - заранее прописанных в нашем коде значений.


    Если вопрос "а можно я не буду защищаться?" вызван ленью, то это тоже решаемо. В принципе, лень - это очень важное качество для программиста. Главное - направить её в нужное русло.

    Если каждый раз писать по три строчки долго
    $sql = "INSERT INTO users SET email = ?, password = ?"; // заменяем на знаки вопроса
    $stmt = $db->prepare($sql); // подготавливаем запрос, получаем stmt
    $stmt->bind_param("ss", $email, $hash); // два знака вопроса - две переменных - две буквы s
    $stmt->execute(); // выполняем запрос

    То надо воспользоваться такой вещью, как программирование. И написать функцию, которая возьмет на себя всю рутинную работу.
    function prepared_query($mysqli, $sql, $params, $types = "")
    {
        $types = $types ?: str_repeat("s", count($params));
        $stmt = $mysqli->prepare($sql);
        $stmt->bind_param($types, ...$params);
        $stmt->execute();
        return $stmt;
    }

    и в итоге предыдущие 4 строчки превратятся в одну:
    prepared_query($db, "INSERT INTO users SET email = ?, password = ?", [$email, $hash]);

    или твой запрос:
    prepared_query($db, "UPDATE table SET test WHERE id = ?", [$id]);

    - просто, быстро, удобно и безопасно
    Ответ написан
    26 комментариев
  • New Map удаляет повторяющиеся элементы?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    Ну конечно. Смотрите, когда вы используете массив для создания Map в таком виде - первый элемент массива становится ключем, а второй значением.

    На выходе получается что-то вроде:
    const arr = [
      ['a', 1],
      ['b', 2],
      ['c', 3],
    ];
    
    const map = new Map(arr);
    // Map { 'a' => 1, 'b' => 2, 'c' => 3 }


    По этому если вы добавите еще один массив с НЕ уникальным ключем, он перезапишет предыдущее значение
    const arr = [
      ['a', 1],
      ['b', 2],
      ['c', 3],
      ['b', 99],
    ];
    
    const map = new Map(arr);
    // Map { 'a' => 1, 'b' => 99, 'c' => 3 }
    Ответ написан
    Комментировать
  • Как разбить одно поле input'а на несколько значений?

    tsepen
    @tsepen
    Frontend developer
    Лучше конечно для каждого значения отдельный инпут создавать, мало ли что введет юзер, забудет отчество ввести или местами поменяет ИОФ введет, в итоге в базу попадут некорректные данные
    Ответ написан
    3 комментария
  • Где взять датасет (данные) содержащий иронию и сарказм?

    Noizefan
    @Noizefan
    Сам собери, ты же айтишник

    ___
    можно распарсить соц сети (особенно твиттер) по хештегам #sarcasm
    Ответ написан
    1 комментарий
  • В чем превосходство Typescript?

    Kozack
    @Kozack Куратор тега JavaScript
    Thinking about a11y
    Типы? Есть JSDOC.

    Именно Типы.
    1. Система типов у TypeScript по возможностям превосходит JSDOC.
    2. Много инструментов для автоматической проверки типов. JSDOC поменьше.


    Это такой более строгий предохранитель от того чтобы не выстрелить себе в ногу. Можете воспринимать это как навороченный линтер, который проверяет не форматирование кода, сколько логику его работы.
    Ответ написан
    1 комментарий
  • Как подать жалобу на действия РКН?

    BasiC2k
    @BasiC2k
    .NET developer (open to job offers)
    Есть общественное объединение Роскомсвобода. Обратитесь к ним. Давно за ними наблюдаю, они делают правильное дело.
    Ответ написан
    Комментировать
  • Синтез речи на сайт, но не Web Speech Api?

    @rPman
    Лучший открытый русскоязычный голосовой движок мне известный - rhvoice, есть во всех формах, от Windows SAPI до компилируемой библиотеки или android версии.

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

    getElementById (неожиданно) находит элемент по его id.
    В документе не может быть несколько элементов с одним id.
    Так что таким кодом вы и так находите единственный элемент с id=line

    Возможно, вам нужно что-то типа getElementsByClassName, getElementsByName, getElementsByTagName или querySelectorAll
    Ответ написан
    Комментировать
  • Как нарисовать линию с кругами на canvas?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Линию на линии. С разными атрибутами толщины, цвета, прерывистости и концов:



    Линия вполне может быть и кривой.
    Ответ написан
    1 комментарий
  • Почему консоль выводит именно это?

    WblCHA
    @WblCHA
    Потому что ты объявил в области видимости функции Б новую переменную А:
    function a() {} /* = */ var a = function() {}

    Да, ты её обновил после присвоения А нового значения, и даже после ретурна, НО прежде, чем выполнять код, интерпритатор проходится по коду и (не помню правильной формулировки) определяет области видимости и переменные, которые в ней находятся.
    То есть на момент выполнения кода, в функции Б присутствует своя переменная А, а если убрать объявление переменной в функции, то будет взята переменная из области видимости выше.

    Как-то так.
    Ответ написан
    3 комментария
  • У всех Сафари крашится на самоподписанных сертификатах?

    Akuma
    @Akuma Автор вопроса
    Веб-программист
    Отвечу на свой вопрос. Это из-за Bitwarden оно крашится. Выяснил просто экспериментами.
    Баг-репорт уже отправил
    Ответ написан
    Комментировать
  • Процессы работают на различных ядрах процессора или нет?

    gbg
    @gbg Куратор тега Программирование
    Любые ответы на любые вопросы
    Вы начнете с этим сталкиваться, когда дело дойдет до больших (реально больших) серверов с большим количеством сокетов и NUMA.

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

    Короче, пока у вас для экспериментов писюк/ноутбук, для вас все будет одинаково, не задумывайтесь об этом.
    Ответ написан
    Комментировать
  • Процессы работают на различных ядрах процессора или нет?

    @pfg21
    ex-турист
    да.
    с точки зрения программы "железных" процессоров нет.
    есть цифра максимального количества одновременно исполняемых потоков.
    даже если программа наштампует исполняемых потоков больше максимального числа, то операционная система просто нашинкует ресурсы потоков исполнения между всеми запрашивающими.
    т.е. многопотоковая программа будет исполнятся и на однопотоковом процессоре.
    Ответ написан
    4 комментария
  • Как сделать анимацию нажатия кнопки с заливанием фона из точки нажатия?

    Ищи ripple эффект
    Ответ написан
    Комментировать
  • Как документировать код на JavaScript?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    Все придумали до нас: JSDoc
    Ответ написан
    1 комментарий
  • Как работает этот сайт?

    @weart
    Да любая библиотека типа fullpage js. На ивенты смены страниц вешаются анимации и всё. Изи
    Ответ написан
    Комментировать