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

    @rPman
    Приложение локально должно зарегистрировать протокол (либо вручную пользователь в браузере), выглядит это примерно так tg://параметры

    в браузере достаточно чтобы ссылка имела этот вид
    Ответ написан
    Комментировать
  • Какой из текстовых редакторов Linux умеет работать по FTP?

    @rPman
    докину варианты, в linux есть проект fuse, позволяет монтировать файловые системы, описываемые простой библиотекой, работающей как обычное приложение в userspace, на основе его сделана поддержка всяких экзотических ситуаций, в т.ч. работа по ftp - ftpfs (идет штатно с любым линукс), так же есть sshfs для доступа по ssh, avfs для архивов (сюда же fuse-zip и archivemount) или экзотический winregfs для чтения файлов реестра windows как файлы и т.п. десятки библиотек идут по дефолту в репозитории.

    монтируешь в каталог без root и пользуешься как локальными файлами из любых программ
    Ответ написан
    4 комментария
  • Как просматривать в браузере файлы doc, docx, xls, xlsx, ppt?

    @rPman
    мог бы хоть чуть чуть погуглить
    (это комунити версия, есть платная с большим функционалом)
    https://github.com/sheetjs/sheetjs
    https://github.com/SheetJS/js-word
    https://github.com/SheetJS/js-ppt
    Ответ написан
    Комментировать
  • Как сделать cекундомер без setInterval и setTimeout?

    @rPman
    Можно через настройку обновления страницы <meta http-equiv="refresh" content="1">в каком нибудь фрейме, где на onload вызывается дочерний метод, но это садамаза.
    НЕ НАДО ТАК ДЕЛАТЬ
    ----------------------

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

    @rPman
    чтобы передавать сообщения в обе стороны, есть следующие технологии:
    * websocket - client <-> server
    * webrtc - client <-> client напрямую
    Ответ написан
    Комментировать
  • Возможно ли узнать время, за которое запрос приходит на сервер?

    @rPman
    Логирование и синхронизация точного времени на сервере и клиенте.

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

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

    @rPman
    Правая кнопка - инспектор/исследовать, смотри

    в играх с высокой вероятностью это будет canvas, а это значит текст выводится без использования dom и чтобы его получить придется заниматься распознаванием
    Ответ написан
    4 комментария
  • Как в txt файле оставить только 2 строчки после определенного слова выше?

    @rPman
    * завести int status переменную, определяющую статус, что сейчас делаем, поиск подстроки (если значение 0) или вывод (если значение 1 или2, т.е. это количество выводимых строк))
    * читать файл построчно в цикле, пока он не закончится
    * для каждой строчки проверять искомую подстроку, если найдена - status =2 и continue
    * если status >0 то выводим строку
    * если status =2, выводим ': ' если status=1 то выводим '\n'
    * если status >0 уменшаем на 1
    Ответ написан
    Комментировать
  • Могут ли ошибки в консоли Хрома забить оперативную или постоянную память, если да, то как это предотвратить?

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

    вызывай скриптом consloe.clear() типа такsetInterval(()=>console.clear(),3600*1000)для автоматической очистки консоли раз в час, этого будет более чем достаточно
    Ответ написан
    Комментировать
  • Ограничение работы 2 пользователей на одном сайте?

    @rPman
    направления решения задачи многопользовательского редактирования:

    - нулевое, самое злобное для клиентов, выдавать ошибку, при попытке сохранить документ, если его редактировали, обновлять форму и предлагать ввести все заново, реализуется полем 'last modified time', которое загружается на форму и отправляется с запросом на обновление, если сервер видит их разными - писать ошибку.

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

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

    - третье, наилучшее в современных реалиях, применять изменения и выводить их в тот же момент как они вносятся на форму, как документы google docs, видно в какой ячейке какой пользователь сейчас поставил курсор, можно даже подсвечивать цветами, с затуханием. Рекомендуется, как ни странно достаточно проста в реализации, если интерфейс client side javascript а не генерация html на сервере.

    Все три способа требуют оперативную информацию о наличии блокировок пользователями, что реализуется с помощью вебсокет
    Ответ написан
    Комментировать
  • Как можно ускорить парсинг json?

    @rPman
    897kb
    надо почти мегабайт скачать! я не верю что у тебя с твоим интернетом за 80миллисекунд это происходит, скорее все из кеша берется

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

    p.s. на c++ есть парсер simdjson, он в десять раз быстрее парсит, но делает он это не в память, а по лексемам, прямо в процессе анализа результата, там что то типа, получить следующую лексему, смотрим ее тип, имя и либо пропускаем (включая объхекты) либо рекурсивно работаем с объектом

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

    upd: https://www.npmjs.com/package/simdjson
    Ответ написан
    2 комментария
  • Как реализовать проверку и подгрузку файлов между серверами?

    @rPman
    Не советую изобретать свою систему, пользуйся готовым rsync, который может работать как по своему протоколу (рекомендуется, для этого на обоих сторонах запускается rsyncd) так и к примеру по ssh, так же штатно scp умеет копировать только изменившеися файлы по ssh, ничего дополнительно настраивать и устанавливать не надо.

    по теме, я пилил простенькую програмку, на сервере-источнике маленький php сервер, возвращающий список новых файлов (у меня было много серверов источников файлов, и один клиент, он запрашивал список с каждого, проверял наличие их локально и скачивал отсутствующие), а каталог с файлами расшарен как обычный каталог со статикой в веб сервере, файлы загружались с помощью wget (у него штатная поддержка докачки прерванных, но можно что-нибудь еще поискать)
    Ответ написан
    Комментировать
  • JS: Бесконечная загрузка контента без лагов страницы - какие есть библиотеки?

    @rPman
    это называется virtual scrolling
    погугли готовые решения есть, чаще заморочки с поддержкой одновременно pc/mobile

    по функционалу это очень простая библиотка, чтобы не лагало, нужно запрашивать данных больше чем выводится, т.е. окно данных в памяти должно быть больше раза в 3-5 чем то что выводится на экран, и при скроллинге запрашивать доп данные для этого виртуального окна в памяти.

    Совет, если человек скролит с меньшим интервалом времени или сразу следующую страницу, запрашивай у бакэнда большего размера окно чем обычно, так как это типичный паттерн проскролировать 'подальше'
    Ответ написан
    Комментировать
  • Как проверить ссылку RSS?

    @rPman
    если ссылку спрашивать у пользователя, то он сам дурак, если даст неверный тип контента

    с высокой вероятностью в ссылке будет слово rss (либо type=rss, так многие cms-ки экспортируют свои статьи туда либо .rss) но само собой никто ничего не гарантирует, никаких стандартов на это нет

    как правильно - запрашиваешь по ссылке заголовки, без контента, и смотришь Content-Type должен быть тип text/rss+xml или application/rss+xml, редко бывает text/xml или application/xml но тут дальше только по содержимому
    Ответ написан
    Комментировать
  • Как защитить переписку от MITM атаки?

    @rPman
    Имеется функция, с помощью которой при общении смс не летят на сервер, то есть общение идет в барузере, закрыли вкладку и смс улетели
    вы доверяете коду, который браузер подгружает с сервера?
    Если на сервер данные не идут, значит используется webrtc, шифрование там заявлено но не совсем ясно что тут работает удостоверяющим центром, не сервер ли случайно? которому приходится доверять, так как формально обладая всеми этими данными и технической возможностью владелец сервера смог бы устроить MITM между клиентами.

    если ключи шифрования передавать лично из рук в руки, то можно передавать шифрованные сообщения поверх любого ненадежного протокола, есть даже плагины OpenPGP к браузеру, правда найти достаточно популярного и удобного я не смог, есть к примеру maiilvelope заявлено что автоматически работает с почтовыми сервисами, шифруя текст на стороне клиента, но добавить свой домен не получилось...
    Ответ написан
    Комментировать
  • Как работает цикл for и fillRect() в данном примере?

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

    @rPman
    Нажимаешь правую кнопку на нужном тебе элементе на странице (иногда надо добавлять shift+) выбираешь Инспектор (Исследовать) и получае консоль разработчика, она выберет нужный html элемент либо выбирай сам, правую кнопку на нем, выбирать copy -> css selector

    Получишь в буфере css селектор для данного элемента, очень часто он правильный
    Теперь тут же в консоли пишешь команду
    $('вставь_сюда_селектор').click();
    на нужный элемент будет сэмулирован клик мышкой.
    Можешь добавить больше кода и логики, например кликать через указанный интервал - setTimeout

    Если надо автоматизировать при загрузки страницы, бери расширение greasemonkey (tampermonkey), оно позволяет запускать пользовательские скрипты по разным условиям
    Ответ написан
    1 комментарий