Задать вопрос
Ответы пользователя по тегу JavaScript
  • Альтернативная замена npm-библиотеки node-libcurl?

    @rPman
    Да уж питон в зависимостях тут прямо 'детская неожиданность'

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

    @rPman
    мем в студию: 'ни единого разрыва'.

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

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

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

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

    @rPman
    Для таких простых (бывают сложности если автор сайта борется с автоматизацией, но маловероятны, чаще всего проблем нет, максимум сложно кликать на кастомные комбобоксы и скролить ненастоящие скролбоксы) нет смысла писать 'готовое' решение

    Если тебе не серверное решение, т.е. подойдет работа в запущенном браузере, то устанавливаешь расширение типа tempermonkey, которое запускает пользовательский скрипт на указанных по шаблону страницах, а скрипт будет иметь вид, на каждый клик команда вида
    document.querySelector('CSS-селектор').click()
    либо если есть jquery
    $('CSS-селектор').click();

    CSS-селектор можно либо вручную смотреть на странице, либо в инспекторе браузера на нужном элементе правая кнопка - копировать css-селектор

    паузы между действиями реализуешь через setInterval или setTimer, если нужно собирать данные а не только кликать, то советую либо складировать их в localStorage а потом одной командой извлекать и генерировать файл за загрузку (если кроссбраузерно то генерируешь ссылку data uri с типом например txt или csv и открываешь ее, либо пользуешься File System API.

    У меня был кейс, когда я собираемые данные тут же отправлял на http сервер post ajax запросом, а тот уже складывал в нужном формате, но так как подавляющее большинство сапйтов теперь https то этот сервер тоже должен иметь https сертификат (иначе в браузере по умолчанию запрещены кросс запросы, это тюнится но с оговорками)
    Ответ написан
  • Как отследит "сон" у webview и подобных технологий?

    @rPman
    Странно, по уму сокет должен закрыться и открыться заново, если пройдет таймаут (он и для сервера и для клиента есть, не помню, можно ли его менять в браузере) или отправленные данные так и не дошли до клиекнта (полагаю в браузере время работы во сне создано специально для этого), но в 99% случаев на клиенте все ставят логику автоматического пересоздания этого сокета. Если сокет не был пересоздан, значит данных в канале новых нет, это смысл tcp протокола, отправленные данные либо дойдут либо будет ошибка но никак не их потеря.

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

    @rPman
    Автоматических инструментов нет, но можно попробовать частично облегчить ручной анализ

    Например большинство кода запутывают свою логику через формирования строки и преобразование ее в код с помощью eval

    Переопредели eval, поставив в него логирование запускаемого кода, и запустим требований код, среди последних записей будет итоговый.

    Само собой форматирование кода гуглить beautify javascript

    Коряво поименованные идентификаторы можно рефакторить в ide, там же форматировать
    Ответ написан
    Комментировать
  • Пет проект, как хранить данные?

    @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. полгаю если сумеешь заменить рекурсию на цикл, будет однозначно плюсищем
    Ответ написан
    Комментировать