Ответы пользователя по тегу JavaScript
  • Что в приоритете в реальных проектах циклы или рекурсия?

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

    Размер стека обычно ограничен, поэтому если количество вложенностей рекурсии велико, лучше переделать на использование циклов либо симулировать хранение состояния рекурсий на массивах (часто сложно)
    Ответ написан
    Комментировать
  • Как заставить моё расширение выполнить fetch ( http://localhost ) на сторонних сайтах?

    @rPman
    ajax https -> http не допускаются,
    можно схитрить и сделать get запрос через загрузку ресурса с http, например:
    <script type='text/plain' src='http://127.0.0.1/...'/>

    но не уверен что можно будет получить ответ (в консоли браузера будут ошибки)

    upd. совсем забыл, в современных браузерах это тоже перестало работать, если формировать такую строку скриптом

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

    @rPman
    Напрямую узнать ОС нет, только семейство (т.е. liunx/windows/macos), например window.navigator.platform вернет "linux armv8l", то же самое вернется для linux машины на таком же железе (arm процессоре).

    Но можно косвенно провести анализ по работе компонентов браузера (в т.ч. gpu, это самая незащищенная компонента в браузере)

    Есть готовые библиотеки, например https://github.com/bestiejs/platform.js
    Ответ написан
    Комментировать
  • Как хранить большие видео на сервере?

    @rPman
    Файлы! С доступом как статика на веб сервере, при необходимости права разруливать через basic auth (само собой https обязателен), добавляя пароли в url. При БОЛЬШОМ количестве файлов и сложной структуры по их управлению, заводи в базе данных прослойку а имена файлов пусть будут завязаны на идентификаторы из этой базы (или как некоторые делают - хеши от содержимого, как бонус дубликаты отлавливать)

    Этот подход самый простой для реализации и самый эффективный по затратам ресурсов сервера. Все остальные будут либо требовать больше процессора и больше времен на кодинг
    Ответ написан
    Комментировать
  • Терминал для сайта бинарных опционов?

    @rPman
    Из открытых проектов я знаю только https://github.com/StockSharp/StockSharp
    терминал открыт, бизнес модель разработчика - продажа и поддержка коннекторов

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

    p.s. а так гуглится приличное количество торговых терминалов на опенсорс,

    но что то мне говорит разбираться будет дольше чем запилить что то готовое, тебе же не нужно что то многофункциональное, достаточно графика и пары кнопок?

    На рынке криптоэкономике проекты обычно используют библиотеку от tradingview, там есть как опенсорс упрощенная версия так и проприетарная многофункциональная.
    Ответ написан
    Комментировать
  • Как проверять строки на равность, начиная с определённого момента?

    @rPman
    Задачу не понял, нужно больше примеров.

    Для не строгого сравнения строк придумали кучу алгоритмов, например Levenshtein, готовые реализации есть для кучи языков, гугли есть и для javascript. По факту это количество изменений, которые нужно сделать с первой строкой, чтобы превратить ее во вторую.

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

    p.s. суффиксное дерево, смотри там пример использования для поиска подстроки, это если у тебя БОЛЬШИЕ строки, эта структура поможет решать задачи похожие на твою
    Ответ написан
    Комментировать
  • Как отправлять запрос каждые N секунд, пока в ответ не получу нужный статус?

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

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

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

    @rPman
    автоматизированно ... на стороне js/ts

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

    Правильное решение - исправить бакэнд
    Ответ написан
  • Допустимо ли сокращать названия переменных до 1 буквы или комбинации символа + буквы?

    @rPman
    Да

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

    Это не закон а рекомендация!

    В конечном счете важен результат а не процесс (хотя бывают исключения).
    Ответ написан
  • Альтернативная замена 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 - количество объектов
    Ответ написан
    Комментировать