Задать вопрос
Ответы пользователя по тегу JavaScript
  • Как в javascript сделать игнорирование опечаток?

    @rPman
    У опечаток есть определенный профиль ошибок, т.е. не случайные кнопки
    Правильно - написать свою реализацию функции левенштейна, которая определяет свою стоимость ошибки (меньшую) для таких событий как:
    * знаки препинания и пробелы должны иметь малую стоимость или даже нулевую (к пробелам особое отношение но в твоей задаче лучше удалить)
    * повторяющиеся символы должны иметь наименьшую стоимость (удаление символа)
    * символы, находящиеся рядом на клавиатуре при подмене имеют маленькую стоимость, их лучше забить в код вручную (мне не требовалось работать с мультиязычными данными, максимум англ и рус), если найдете готовую базу для всех языковых раскладок клавиатур включая мобильные, был бы рад

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

    Так же, после определенной накопленной суммы разницы между строками, дальше тратить время не актуально, советую в своей реализации добавить этот параметр (особенно это актуально когда надо огромные объемы данных обработать)
    Ответ написан
    Комментировать
  • Как правильно построить логику приложения?

    @rPman
    Если у загружаемых данных (объектов) нет какого то уникального идентификатора, сделай его из самих данных, взяв к примеру md5 хеш из строки, в которую сериализовал данные (только если внутри есть списки, постарайся чтобы порядок в них не гулял или отсортируй их, речь идет исключительно для получения строки, которая будет для одних и тех же данных всегда одинаковой)

    А дальше все просто, храни этот идентификатор рядом с данными в базе и в момент записи проверяй уникальность именно по нему

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

    @rPman
    Добро пожаловать в мир децентрализованных денег.
    В мире фиатных валют, если провайдер, у которого ты хостишь свой сервер, украдет у тебя деньги, у тебя есть возможность прийти в полицию, в банк и потребовать вернуть эти деньги, и иногда это даже сработает, поэтому провайдер не будет пользоваться этой лазейкой чтобы тебя обокрасть (хотя если ты покупаешь виртуалку у реселера-частника, все может быть.

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


    Поэтому, у тебя есть следующие варианты по защите своей информации (в мире криптовалют информация = деньги):
    1. Ты физически защищаешь сервер от доступа злоумышленника и шифруешь данные на случай если доступ все же они получат
      Этот путь подразумевает буквально, сервер в сейфе, а для обслуживания к нему катается физически надежный человек, почти все датацентры предоставляют закрытые защищенные помещения для этого. Этот способ самый простой для реализации но самый дорогой.
    2. Обфусцируешь доступ к информации
      Организуешь всю систему так, чтобы получив доступ злоумышленнику потребовалось бы заметное время понять как именно нужно добраться до критичной информации и главное, расставляешь ловушки, сигнализирующие о том что сервер скомпроментировал, тогда ты уже со своей надежной машины переводишь монеты с горячего кошелька, останавливаешь сервис и разбираешься.

      Одним из примеров такой реализации является разделение на 2 сервера, один оперативный, основной, обслуживающий твой веб сервис и твоих пользователей, второй - защищенный, обслуживающий только исходящие переводы. Второй сервер значительно менее требовательный на столько, что его можно разместить чуть ли не у владельца дома или даже к примеру смартфоне (абсурд но как ни странно такая модель имеет место быть). Между серверами, по своему api идут команды, среди которых можно вставить ловушки, которые обязательно тронут злоумышленники и это даст нужный сигнал на отключение системы. В такой схеме нужно понимать концепцию read only частей базы данных, изменения которых могут приходить только со стороннего сервера, например части, отвечающие за работу операторов, обслуживающих доставку товара в интернет магазине, могут быть изменены только с их рабочих мест, реализовывать это можно разными способами, кстати блокчейн - один из них, но как пример - каждая запись снабжается цифровой подписью, и любое изменение подписывается тем кто это изменение произвел, такие записи подделать, взломав только один сервер невозможно, а сервер, отвечающий за отправку монет будет принимать только правильно подписанные записи... в общем реализация потребует творческого подхода но все реально.

      Само собой описанный способ не самый лучший но хотя бы доказуемо надежный, из простых способов я посоветовал бы просто хранить критичную информацию исключительно в оперативной памяти, слегка обфусцированной, защита от простого сканирования памяти, а сам процесс ее загрузки делать в момент включения сервера (или его полной установки из резервной копии, для чистоты, каждый раз когда происходит его выключение)
    3. Гомоморфное шифрование
      Этот подход я не видел в реализации, так как невероятно сложен (если что математика уже реализована, есть библиотеки, например HElib, зато позволит проводить полностью все операции на сервере а самую последнюю, собственно отсылку - на доверенном сервере
      гомоморфные вычисления позволяют проводить математические операции над зашифрованными данными без их расшифровки, т.е. сервер, выполняющий эти операции не будет знать ответа, поэтому доверять таким вычислениям можно без оглядки (правда сервер может пропустить вычисления, но это легко решается добавлением в каждую операцию какое то вычисление, связанное с прошлой, в общем легко будет заметить что сервер перестал отвечать)


    p.s. само собой, админы провайдеров, пока еще, массово не анализируют все виртуальные машины на предмет наличия критичной информации, иначе бы за этим последовали серии громких и необъяснимых краж денег, но такие события точно происходили (админ linode украл деньги пула, хостящегося на нем)
    Ответ написан
    Комментировать
  • Как найти координаты Б когда известны координаты А, C?

    @rPman
    информации недостаточно

    нужно знание например как расположена зеленая линия или чем именно (формула) является синяя? или хотя бы угол между красными
    Ответ написан
    Комментировать
  • Как сделать так, чтобы страница держалась в открытом виде многое время?

    @rPman
    у тебя 2 пути

    простой и дорогой, нужно запустить 100 браузеров (в каждом свой профиль со своими настройками прокси)

    сложный но эффективный - нужно проанализировать исходные тексты веб сервиса, понять как работает страница и симулировать нужные тебе действия с помощью отправки запросов с помощью твоего nodejs

    p.s. скорее всего не получится где то сэкономить или упростить, эти два пути не только являются граничными но и единственно рабочими
    Ответ написан
  • Как оптимизировать загрузку видео autoplay?

    @rPman
    При запросе видео по указанным ссылкам, есть примерно полсекундная задержка, затем идет загрузка (ростелеком 1.5мб/с)
    если зайти на сайт, примерно 6 секунд идет загрузка, потом появляется анимация loading.. еще через секунд 5 уже появляется анимация и запускается видео (на запуск видео уходит как раз эта секунда его загрузки), обновление страницы загружает сайт меньше чем за секунду (это в основном анимация 'раскрытия окна')

    Отсюда могу предположить что проблема именно с видео - это проблема отдачи его на сервере, изучайте, что у вас там? обычно nginx статику отдает максимально эффективно, откуда там пол секундная задержка до начала загрузки (смотреть тем же wget) я хз.

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

    p.p.s. как же грустно наблюдать современный вебдев, сам я от него далек но знаю каким он был 10 лет назад, это удручающее зрелище
    Ответ написан
    Комментировать
  • Как измерить сколько памяти занимает html элемент и объект созданный через new?

    @rPman
    провести эксперимент не вариант что ли?

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

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

    создание нового dom элемента (а точнее изменение чего либо что меняет положение и размеры элементов на экране) на порядок более медленное чем изменение его содержимого или цвета

    p.s. а еще есть самостоятельное рисование на canvas, плюс webgl, позволяют отрисовывать очень сложные интерфейсы
    p.p.s. еще есть svg но он медленнее
    Ответ написан
    5 комментариев
  • Как дерево представить в видемассива?

    @rPman
    в чем вопрос если ответ в тегах есть? рекурсия
    вон id даже готовые, содержат идентификатор предка

    тупо пробегаешь по всем ветвям дерева, добавляя в результативный массив идентификаторы
    Ответ написан
    Комментировать
  • Как общаться между вкладками браузера js?

    @rPman
    в похожей ситуации я реализовывал семафор следующим способом
    if(localstorage['имя_семафора']++>1)
    { // значит этот семафор уже кто то занял,
      localstorage['имя_семафора']--;
      //  ждем некоторое время и повторяем попытку
    }  else
    { // никто семафор не занял можно работать
      ...
      // по окончанию работы семафор надо освободить
      localstorage['имя_семафора']--;
    }
    смысл в том что localstorage[]++ это атомарная операция (вот в этом месте я скорее всего не прав), а благодаря тому что единственная опасная операция, которая могла бы вклиниться между работай с localstorage и if - это --, и она проихойдет когда семафор и так должен освободиться, т.е. проблем это не создаст.

    p.s. почему говорю семафор а не мьютекс, потому что можно сравнивать не только с 1 но и большим числом - это определит, сколько одновременно можно ресурс занимать
    p.p.s. в интернете гуляет реализацию мьютекс на javascrit как раз на localstorage но она какая то переусложненная и я не понимаю зачем
    если кто то по умнее, объясните пожалуйста
    Ответ написан
    Комментировать
  • Как использовать javascript для junior backend разработчика на php?

    @rPman
    it это наиболее динамичный (быстро развивающийся и меняющийся) 'рынок'

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

    веб стек один из самых сложных, и затрагивает сразу много технологий, и языки программирования - далеко не единственные из них

    мой совет, пока ты junior - изучай все до чего дотягиваешься, считай тебе дана возможность повысить свой скил за счет работодателя, как бы некрасиво это не звучало.
    Ответ написан
    Комментировать
  • Как взять содержание атрибута и вставить в другой атрибут?

    @rPman
    что значит .src и .content? таких полей у NodeElement нет

    чтобы установить атрибут, нужно использовать .setAttribute('content,value), а чтобы получить .getAttribute(''src'')
    Ответ написан
    2 комментария
  • Почему при POST Запросе я получаю статус код 500?

    @rPman
    ENOENT - файл не найден

    win32 error codes (правда они положительные а у тебя со знаком - почему то):
    PEERDIST_ERROR_ALREADY_EXISTS
    4058 (0xFDA)
    An element already exists and was not replaced.

    непонятно какой код у тебя выводит эту ошибку поэтому гадать дальше не интересно
    Ответ написан
  • Объясните, как работает эта функция?

    @rPman
    функция считает произведение всех чисел в массиве следующим образом - вызываем функцию с массивом в параметрах и номером элемента, с которого нужно начать умножение (считает с права на лево, т.е. уменьшает номер), для этого функция вызывает сама себя рекурсивно но с номером на 1 меньше и умножает результат на arr[n-1], стоит условие если номер 0 или меньше то вернуть 1, таким образом рекурсия прекратится когда закончится массив

    так как в коде стоит arr[n-1] а не arr[n], а индексы в массивах в javascript начинаются с 0, значит если нужно посчитать произведение всех элементов массива, то нужно указать в параметрах n = количество элементов (т.е. на 1 больше номера последнего элемента)
    Ответ написан
    Комментировать
  • Как сменить значение value в DOM?

    @rPman
    разный тип инпута свой метод
    смотри .val(...) для text
    или .prop('checked',true/false)) для input/radio
    Ответ написан
    Комментировать
  • Как поменять объект в HTML при помощи JS DOM?

    @rPman
    Тебе нужно именно подменить или достаточно чтобы их видно было попеременно?

    На странице нужно создать два эелемента и P и TEXTAREA и по нажатию кнопок заполнять их содержимым и попеременно менять им стиль display на none и inline (или block в общем смотри по своим требованиям к отображению), скрывая и показывая только нужный элемент
    Ответ написан
  • Как при нажатии на ссылку скопировать её название?

    @rPman
    navigator.clipboard.writeText
    текущий элемент получай через Event.currentTarget
    Ответ написан
    Комментировать
  • Как отобразить индикатор загрузки PWA-приложения?

    @rPman
    статистику можно самостоятельно собрать, по логам на сервере видно когда приложение начало загружаться, а в момент запуска на клиенте приложение может сообщить время серверу когда этот процесс завершился (хотя не обязательно).

    Собираешь статистику по устройствам, подсетям, трафику... все видно будет в логах сервера.

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

    @rPman
    Прием оплаты в криптовалюте совершенно не требует ни coinbase, ни регистраций, ни KYC,... ничего
    Это основная и главная идея криптовалют - независимость ни от кого, все что от тебя требуется это софт - криптовалютный кошелек или библиотека с функционалом кошелька.

    По теме, если прямо так хочется coinbase (на nodejs а не typescript), создай прослойку в виде сервиса (ты ее так или иначе сделаешь), да хоть http, которая будет заниматься исключительно монетными делами

    p.s. у библиотеки ccxt есть поддержка типов typescript
    Ответ написан
    Комментировать