Ответы пользователя по тегу JavaScript
  • Пет проект, как хранить данные?

    @rPman
    Веб технологии на самом деле очень сложный способ учиться программированию для новичков, так как затрагивает сразу несколько очень сложных и сильно разных областей:
    * базы данных (для хранения данных я рекомендую sql базы данных, и для начала sqlite, не потребуется настраивать и устанавливать сервер, так как хранит все в файле)
    * бакэнд (миллион способов, самый популярный php, можно python, так как зная его будет проще в другие области зайти, не рекомендую java или go для начинающих)
    * фронтэнд (без или javascript)
    * верстка и дизайн (html+css)

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

    @rPman
    На php это делают на строне сервера, обычно этим занимается сам веб сервер а не бакэнд, например к apache mod_rewrite, к nginx мод rewrite

    На javascript напрямую так делать нельзя, ведь сервер должен все равно должен понимать ссылку /coil и возвращать ту же страницу что и /a/coil но если у тебя SPA (single page application) и генерация контента происходит на стороне клиента, то почти наверняка ссылки у тебя уже будут site.com/#a/coil а значит подмену нужно будет делать прямой перезаписью в window.location.href
    Ответ написан
    2 комментария
  • Как отправить такой же JSON запрос методом POST?

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

    p.s. примеров не будет, так как в вопросе ничего не сказано кроме нескольких несвязных скриншотов дампов запросов
    к тому же, тем кто способен провести реверсинженеринг приложения, объяснять как пользоваться curl не нужно
    Ответ написан
  • Почему у функции в setInterval "пишем" одни скобки а не две вызывая ее при замыкании?

    @rPman
    потму что ты определил вложенные замыкания (не думал что такое синтаксически возможно)
    (param) => () => {
    вот пример
    var x = (param) => () => {  console.log("Выхлоп!" + param);}
    x();
    // > function x()
    x(1)();
    // Выхлоп!1
    
    var x = (param) => {  console.log("Выхлоп!" + param);}
    x(1);
    // Выхлоп!1


    лично мне интересно почему надо писать x(1)() а не x()(1)
    Ответ написан
    Комментировать
  • Как загрузить данные из JSON на nodejs сервере через WebSocket?

    @rPman
    https://www.npmjs.com/package/websocket
    смотри примеры client example
    Ответ написан
    Комментировать
  • Как сделать гравитацию между большим количеством объектов на JS?

    @rPman
    Гравитационная задача N тел, лучше на английском

    разобравшись с математикой, реализуй сначала на javascript а потом подумай как бы использовать webgl шейдеры для gpgpu (когда то была реализация opencl, называлась webcl, очень жаль что ее все браузеры забросили) так как ресурсов процессора на это не хватит

    p.s. для задач игровых может хватить простого сложения векторов скоростей гравитационного влияния каждого тела на каждое тело умноженных на очень маленький временной интервал, чем меньше интервал тем точнее будет симуляция (но она по любому будет не точной), трудоемкость m*n^2 где где m - количество этих временных интервалов в секунде а n - количество объектов
    Ответ написан
    Комментировать
  • Каким образом защищенный сайт допускает запросы "живых" пользователей, но блокирует запросы Python Requests и аналогов и как это обойти?

    @rPman
    Не дам готовый ответ но посоветую - открываешь отладчик в браузере по F12, вкладку network, проводишь полный сеанс работы пользователя с учетом чистых кук (и отдельно повторный заход), делаешь экспорт .par файла (это json файл, там все запросы, и ответы, полная информация)

    Затем смотришь нужные тебе запросы, они могут требовать (в заголовках или в параметрах) некие данные, которые собственно обфусицированным скриптом сайт и генерирует в 99% случаев это не скрытая строка а напрямую запрашиваемая в предыдущих запросах, т.е. ее можно поискать в par файле (лучше не как текст а разбирай json так как там могут быть строки с ковычками). Вместо ручного анализа может оказаться проще писать небольшой скрипт ковыряющийся в этих логах и доступных html/js файлах сайта.

    По уму отладчик в браузере умеет искать по истории запросов (там где есть поиск по url есть кнопка лупа - поиск, ее нажатие открывает еще одно поле поиска уже по данным)

    Работа с логом очень помогает, но сочувствую тебе.

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

    p.s. для тех кто пишет защиту от парсинга - совет, увеличивайте нагрузку на процессор (в т.ч. используя gpu) чтобы всякие selenium потребовали ну очень много ресурсов (грубо говоря фиктивную задачу как в майнинге либо 100500-уровневая раз дешифрация или хеширование)... подбирая такие нагрузки, чтобы рядовой клиент все еще не замечал проблем а вот массовый анализ стал бы затратным.
    Такова селяви.. либо делай данные общими либо создавай проблемы всем.
    Ответ написан
    Комментировать
  • Как выключить в браузере WebRTC через скрипт на сайте?

    @rPman
    Например расширение WebRTC Control и у firefox

    в принципе любой функционал на странице (в ее пределах само собой) можно контролировать через javascript, переопределив соответствующие методы на себя
    т.е. берешь какой-нибудь RTCPeerConnection и присваиваешь ему пустышку
    RTCPeerConnection={};
    чтобы вернуть назад, предварительно сохрани старое значение в своей переменной
    Ответ написан
  • JS в качестве БД?

    @rPman
    javascrip - это инструмент, json - это формат, а база данных - это место хранения, инструмент и формат одновременно.
    Т.е. тебе нужно еще понять где ты будешь хранить данные, и вот от сюда и полезут проблемы.

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

    Если твой сервер однопоточный (например если речь идет про javascript то бакэнд серверный можно писать на nodejs, с оговорками про асинхронность) то в принципе можно хранить все данные в файлах, и не сильно заморачиваться с блокировками и транзакциями, а из-за них основные проблемы возникают, зачем люди к готовым базам данным идут.
    Если тебя это все еще интересует,
    веди работу с базой данных из отдельных функций (например объединив их в класс), по окончанию работу каждой чтобы данные в файлах были в консистентном - правильном состоянии, перезапись делать через временный файл с переименовыванием в оригинальный после всех изменений, это аналог транзакций, это даст гарантии по сохранности данных при смерти внезапной скрипта, например окончилась память или место на диске, само собой проверять это при следующем запуске и давать возможность вручную разрулить. Если сумарный объем базы больше мегабайтов, то не храни все в одном файле, первый уровень разделения - по типам данных, например раздели данные для редких изменений и постоянных - списки товаров и корзина, кстати цены можно так же отдельно хранить, само собой тебе тогда придется идентификаторы заводить и следить за их уникальностью - вот уже сиквенсы пошли (кстати есть алгоритмы uuid где каждый новый гарантированно уникальный без необходимости централизации и чего либо хранения), если же данных совсем много и часто меняются случайные из них то храни каждый объект в своем файле, файловая система справится, но лучше все же освой нормальные БД

    Поэтому тебе правильно посоветовали, используй sqlite, минимум усилий на обслуживание и настройку (база данных = файл, никакого сервера и при этом полноценный sql с почти бесплатной миграцией на любую sql базу данных в будущем)
    Ответ написан
    Комментировать
  • Регулярка JS на получение float числа из строки?

    @rPman
    /^([0-9]+)(\.[0-9]+)(e([+-])?([0-9])+)?$/i
    ^ и $, метасимволы начала и конца, гарантируют что вся строка соответствует регулярке а не какая то ее часть
    i в конце - опция игнорирования регистра для мантисы но можно задать в регулярке варианты и так
    Данная регулярка пример и разберет на части целую, дробную и мантису
    100
    100.001
    100.011e+12 (кстати формально неправильно целую часть при использовании мантисы делать больше 10 но все парсеры это обработают правильно)
    Ответ написан
    Комментировать
  • Как устроена технология, позволяющая смотреть видео вместе удаленно, вроде Watch2Gether или NotAlone?

    @rPman
    Практически любой видеоплеер на веб странице позволяет управлять собой из скриптов, в данном случае важны пауза, запуск и запрос текущей позиции и перевод ее на заданное значение

    Сервер устанавливает соединение между клиентами (websocket через сервер или webrtc p2p напрямую) и по нему дублирует все команды, которые отправляет любой (или ведущий) пользователь своему видеоплееру. В простой реализации интерфейс видеоплеера скрывается а пользователю выдается посреднический интерфейс, но если нужно пользоваться интерфейсом браузера, то тогда придется отслеживать оперативно состояние плеера, играет он или в паузе и в какой позиции находится.... синхронизация между пользователями у видео будет гулять, возможно даже на секунды,.. не думаю что для данной задачи это критично... но если что можно подстраивая скорость воспроизведения (многие плееры это тоже позволяют) периодически догонять отстающих или наоборот притормаживать торопыг.. так как изменения скорости будут кратковременными и незначительные доли процента, их никто не заметит
    Ответ написан
    2 комментария
  • Как в JavaScript делать такие массивы?

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

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

    Если нужно при этом знать, у какого элемента какой предок и какие потомки, то добавить поля parrent и childs со ссылками либо на сами объекты либо на их идентификатор (номер) в массиве всех элементов

    Если нужна связь с элементами html dom то в соответствующие элементы добавляй либо сасылку на сам dom элемент либо на его уникальный id
    Ответ написан
    Комментировать
  • Как корректно обработать ошибки сервера средствами JavaScript (Возможно ли это)?

    @rPman
    Сообщения об ошибках должны быть видны разработчику в dev консоли, потому что ошибки должны быть обработаны не только с точки зрения кода но и владельца сервиса в целом!

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

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

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

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

    Меняй данные сразу при загрузке страницы
    Ответ написан
    1 комментарий
  • Нужен совет. Насколько мое решение лучше/хуже официального?

    @rPman
    использовать готовую функцию будет некрасиво, в правильной 'школе' за такой даже безупречный ответ должны ставить оценку 'хорошо'

    для 'отлично' я предлагаю написать функцию, которая будет заметно эффективнее и вместо N умножений будет делать примерно log(N)
    для этого попытаться представить возведение в степень не как N раз X*X*...*X а как (N/2 раз X*X*..*X)^2, а чтобы это делать в цикле, поступить так, если N четное, то делим его на два, вызываем рекурсивно свою же функцию и результат умнажаем на самого себя, иначе берем N-1 и делаем тоже самое но результат дополнительно умножаем на X

    p.s. полгаю если сумеешь заменить рекурсию на цикл, будет однозначно плюсищем
    Ответ написан
    Комментировать
  • Как в javascript сделать игнорирование опечаток?

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

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

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

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

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

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

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

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


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

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

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


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

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

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