Ответы пользователя по тегу JavaScript
  • Есть инсталлятор Electron-приложения для Windows?

    @rPman
    никак

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

    гугли electron obfuscation, может что то тебе подойдет, для сокрытия и запутывания исходников
    Ответ написан
  • Как метод массива sort, сортирует элементы массива?

    @rPman
    Потому что так определена функция сортировки
    compareFn(a, b) return value sort order
    > 0 sort a after b
    < 0 sort a before b
    === 0 keep original order of a and b

    Для чисел подходит как раз разница
    Ответ написан
    1 комментарий
  • Как увеличить количество соединений к socket server?

    @rPman
    судя по этому issue у народа до 1000 на один процесс все работало ну и он закрыт значит должно быть больше.

    смотри ошибки в коде сервера, что пишет в логи
    Ответ написан
    Комментировать
  • Сайт полностью прогружает стили только в режиме инкогнито, как исправить?

    @rPman
    у тебя на стилях твоих сервер выдает хеадер
    cache-control max-age=31536000
    expires Mon, 25 Dec 2023 17:55:13 GMT
    логично что все закешировалось и отдает новую версию только на новых машинах или в приватном режиме (там кеш чистится по закрытию страницы, ибо это использовалось для деанонимизации)

    это классическая проблема и решается в простом виде добавлением к имени файла какого то идентификатора, определяемого версией файла (например дата или хеш файла) например так main.css?i=123123

    p.s. лучше меняй сразу имя файла на main.123123.css, так ошибки легче будет отловить (если где то забудешь изменить ссылку)

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

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

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

    Если твоя задача не состоит в краже пользовательской авторизации, то достаточно через проксирование сайта на своем домене открыть его как свою страницу и уже к ней будет полный доступ, можно получить document страницы, делать поисковые запросы querySelector и делать клики через .click()
    Ответ написан
  • Как сделать автоматическую дополняемую страницу?

    @rPman
    Правильно - websocket

    Это штатный инструмент, чтобы сервер смог передать данные на клиент, не по его запросу а по собственной инициативе.

    Требуется на сервере установить (реализовать в коде) websocket server, благодаря готовым библиотекам это очень просто, гуглить к примеру ReactPHP websocket (реакт - асинхронный фреймворк, добавляет асинхронные фичи, за которые полюбили nodejs), на нем вообще можно реализовать полноценный веб сервер (но nginx все равно рекомендуется ставить на выходе в мир как прокси) которые и обычные http rest запросы примет и websocket соединения подержит, да еще и раз в 10000 быстрее будет (я про сравнение типовых подходов без особых оптимизаций и кешировании), ведь приложение в этом случае не закрывается на каждый запрос а значит многое можно держать в памяти как обычные переменные (а не 100500 прослоек вида мемкеш)

    p.s. есть еще устаревшая long pooling технология, когда вместо websocket открывается обычный http rest запрос, но на сервере он не закрывается сразу, периодически выдавая в поток допустим 1 символ пробела (крутя в цикле банальный sleep и проверку базы данных) чтобы по таймауту не закрылся, а по появлению на сервере нужных данных, отправлять их как обычно тем же json-ом. Клиент же сразу как этот запрос завершается должен тут же его снова отправить. Этот подход не потребует что то менять на сервере но считается быдлокодом.
    Ответ написан
    Комментировать
  • Что в приоритете в реальных проектах циклы или рекурсия?

    @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, там же форматировать
    Ответ написан
    Комментировать