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

    @rPman
    тут два подхода

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

    Второй способ, написать регулярное выражение (промышленный стандарт по работе со строками, просто но часто избыточно по ресурсам) которое выделит нужную строчку, и посмотреть ее размер или сразу вызвать что то типа string.replace(/регулярное выражение/,'')

    в регулярном выражении символ начала строки - ^, повторение символа + после этого символа, точка и плюс в регулярных выражениях зарезервирована, значит нужно добавить \ перед ними, типа так: /^\+\.+/

    Если количество точек может быть нулевым (т.е. плюс и сразу пробел) значит вместо + использовать *
    Ответ написан
    Комментировать
  • Как отслеживать изменение локального файла в директории через js?

    @rPman
    Сама идея приложения у тебя максимально неправильная но да ладно.

    В тегах у тебя php, на нем обычно пишут бакэнд - серверную часть, вот и отслеживай изменения в файле через него. Т.е. к примеру на javascript из браузера по таймеру (setInterval) раз в 1-10 секунд делаешь запрос на сервер вида - выдай мне изменения в файле начиная с такой то даты (например новые строки) или пустой ответ. А на php код должен проверять дату последнего изменения в файле метод filemtime (осторожно, результаты кешируются, поэтому перед проверкой сбрасывай кеш) и сравнивать с датой, которую запросил браузер.

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

    @rPman
    тебе так сложно нажать правую кнопку в инспекторе на нужной ветке и выбрать copy as css selector?
    не всегда оно красивое но браузер старается
    #processor > option:nth-child(1)

    по теме, воспользуйся css selector по значению атрибута
    #processor > option[value="6398"]

    p.s. тебе точно нужно выбирать по значению цены? может правильнее использовать querySelectorAll и перебирать каждое значение, проверять по условию и действовать?
    Ответ написан
    Комментировать
  • Не получается использовать метод toFixed() в javascript на значение массива, как это сделать?

    @rPman
    там строка а не число, преобразуй ее в число с помощью parseFloat сначала (и по уму проверить на ошибки)
    Ответ написан
    1 комментарий
  • Почему не срабатывают скрипты после XMLHttpRequest запроса?

    @rPman
    console.log(xhr.status) перед if-ом, проверь, возможно у тебя твой бакэнд возвращает не 200
    а еще в отладочной консоли и networks браузера смотри, если ошибки там про это будет написано
    Ответ написан
    1 комментарий
  • Как из запускаемого в браузере локального HTML с JS создать файл в локальной же файловой системе?

    @rPman
    Есть косвенное решение - разрешить в браузере сохранять загрузки автоматически без запроса места сохранения (на сколько я знаю это поведение по умолчанию) и из скрипта сформировать файл через File, Blob или MediaSource, создать для него ссылку с помощью createObjectURL (на сколько я помню это будет data uri строчка) и кликнуть по ней.

    var file=new Blob([JSON.stringify(obj, null, 2)], {  type: "application/json"});
    var url=URL.createObjectURL(file);
    var a = document.getElementById("a"); // где то на странице невидимая ссылка
    a.href = URL.createObjectURL(file);
    a.download = 'myfilename.json';


    Как вариант строчку сделать самому и отправить его прямо в location, что то типа location.href='data:text/plain;charset=utf-8,test').

    Твое python приложение пусть ожидает файл в каталоге для загрузок, указанном в настройках браузера. Будь готов, что браузер добавить ' (xxx)' к имени файла, если такой же там уже есть.

    Я примерно таким образом добавленным через консоль (или расширением типа greasemonkey) скриптом кликал и собирал данные в веб приложении, после отправлял их на сохранение в виде csv-шника, а затем собрал кучу сохраненных файлов уже десктопным приложением.
    Ответ написан
    Комментировать
  • Как запустить чужой проект веб-приложения с GitHub на своем компьютере?

    @rPman
    При открытии html локально javascript отключается (или лимитируется, точно не разбирался), сделано это чтобы открывая злонамеренный html не получить проблемы.

    Достаточно выложить файлы этого проекта в любой веб север, хоть однострочник от php (php -S 127.0.0.1:8080) и открыть этот адрес в браузере - все работает
    Ответ написан
    Комментировать
  • Как отключить распечатку документа в браузере?

    @rPman
    Какое то окошко выскочит все равно, либо окно скриншота либо запрос подтверждения сохранения файла, штатный браузер не даст сохранять файлы без спроса.
    Ответ написан
    Комментировать
  • Как заставить браузер на удаленном сервере вести себя 'как обычно' при отключенной сессии?

    @rPman
    Отключаяя сессию rdp для машины это сигнал блокировки экрана, браузер это отлавливает и тормозит обработку скриптов (точно так же как и при минимизации окна/смены таба)

    Полагаю headless версии браузера тебе не подходят? те что selenium к примеру запускают?

    Решения:
    - универсально, рекомендую - рекурсивный rdp, сессия, где запущен браузер должна быть открыта в другой сессии (другой пользователь, и не обязательно с этой же машины, но нет смысла заводить вторую машину), вот уже к этой второй сессии можно подключаться удаленно, при ее отключении открытое окно сессии mstsc к браузеру не будет передавать сигнал о дисконнекте, ее даже можно безопасно минимизировать (не проверял)
    - запускать браузер не в rdp сессии а в консоли сервера (это та что подключена к монитору), используя vnc/teamviewer/anydesk и аналоги
    к сожалению на серверах ее может не быть или она недоступна, к тому же она только одна на машине.
    - виртуализация, установи виртуальную машину, где запускай хоть десктопные версии windows (это легально только с pro/ultimate версиями), каждый браузер будет запущен в своей сессии-консоли, доступ по rpd средствами виртуальной машины
    - смени операционную систему на linux, тебе ведь только браузер запускать, там с помощью xserver-xvfb можно запускать любое количество серверов xserver, подключаться к ним по vnc (есть врапперы rdp), это будет проще и дешевле в обслуживании
    Ответ написан
    Комментировать
  • Как парсить число в дату в JS?

    @rPman
    Date.parse
    returns the number of milliseconds since January 1, 1970, 00:00:00 UTC


    new Date(value)
    An integer value representing the number of milliseconds since January 1, 1970, 00:00:00 UTC
    Ответ написан
    Комментировать
  • Почему числу внутри setInterval нельзя прибавить другое число?

    @rPman
    в javascript аргументы не передаются by ref, но если передать объект - то он будет передан как ссылка на него, а значит его переменные не будут скопированы

    let interval = setInterval(function(obj){
        console.log(obj.currentNumber);
        obj.currentNumber++;
    }, 1000, {currentNumber:5});
    Ответ написан
    2 комментария
  • Как убедиться что сжатые изображения является продуктами исходного?

    @rPman
    Исключительно ради стеба.

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

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

    Пример использования - криптовалюта zcash, в ней для анонимных монет использовано было именно это шифрование.

    На хабре недавно была статья о компиляторе C (сильно упрощенный) который позволяет писать такой код относительно свободно. Библиотек под разные языки полно, правда они не так красивы как прямо целый компилятор.

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

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

    @rPman
    Нужно больше информации, что именно за приложение и какие из 'аспектов десктопности' ему нужны.

    Например, если нужно много формочек, к примеру для работы с данными в базе данных (наполнение, поиск, просмотр, анализ), без особой стилизации интерфейса, то я рекомендую (как бы я не ненавидел майкрософт) - microsoft visual studio + .net + WinForms. Запросы в базу данных лучше создавать в других инструментах (благо есть соответствующие ... студии). Есть разные фреймворки и среды разработки для данной задачи но такого удобного и эффективного (по затратам времени на разработку) лично я не видел. Благодаря некоторым усилиям сообщества и слабого противодействия майкрософт, такой код оказывается еще и кроссплатформенным, т.е. мало того что приложения можно запустить на win/linux/mac (с оговорками, особенно лицензионная чистота, например установщика приложения) так еще и сама среда позволяет создавать так же удобно приложения для веб (.net asp, но я это направление настоятельно не рекомендую). Что касается версии, то если изначально приложение писать для 3-ей версии .net фреймворка, то оно сможет запускаться даже на winxp (с оговорками можно 4-ую). Еще момент, про который многие забывают, приложения .net могут разрабатываться (и это поддерживается visual studio) не только на c# но и на .net managed аналогах как vb.net, c++.net, f# и даже python.net (но нужно помнить что это языки, синтаксически совместимые с оригиналом, но подключить какой то модуль без портирования и пересборки не получится). Есть недостатки, попробуй любого разработчика .net попросить решить проблему мерцающего контрола (например грид или ричедит), плюс это не самый шустрый фреймворк и clr виртуальная машина дает о себе знать а еще многословность как в java...

    Для c++ безоговорочный лидер рекомендаций - qt, кроссплатформенный и очень быстрый и удобный фреймворк (не только интерфейс). Конечно не получится лениво возекаться с мышкой как в ms vs.net но результат тоже будет хорошим.
    Ответ написан
    1 комментарий
  • Как сделать обновление данных в реальном времени в шаблоне html на django?

    @rPman
    Есть два основных направления
    * устаревший, но не требующий javascript на клиенте - это разделение страницы на фреймы (iframe и frame) таким образом, чтобы изменяющиеся части попадали на свой фрейм
    в этом случае будет мигать не вся страница а только изменяющаяся часть, и вообще то браузеры прекрасно это обрабатывают, даже курсор в формах остается на старом месте
    Не рекомендую этот подход, он устарел и имеет смысл только если действительно нужно разрабатывать сайт для условий отключенного javascript (например tor/i2p сети).
    Очень много логики можно реализовать на основе css, язык там уже на столько сложен и многофункционален что простые вещи типа отображение и смокрытие элементов на основе кликов - обычное дело.
    Совет, чтобы мерцание не было видно, оптимизируйте ответ бакэнда таким образом чтобы ответ выдавался по времени быстрее некоторого порога (при его превышении страница будет мерцать)

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

    Собирать на стороне клиента страницу можно по разному:

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

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

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

    Обновления со стороны сервера можно получать двумя способами
    - периодическими опросами (генерирует квадратичную нагрузку на сервер при увеличении одновременно работающих пользователей) но очень простой в реализации
    - воспользоваться websocket/events, эти технологии специально созданы для того чтобы сервер мог оперативно сообщить какую то информацию клиентам без постоянных опросов и лишней нагрузке на сервер, но требует поднятие websocket сервера, удерживающего открытые соединения, для тех кто привык к http rest подходу с cgi короткоживущими приложениями, это может быть сложно, но результат того стоит
    Ответ написан
    Комментировать
  • Возможно ли сделать мониторинг товаров на разных сайтах?

    @rPman
    когда запросы блочатся, когда есть проверка браузера. Задавая вопрос,
    но ты не задала вопрос про свою проблему

    покажи свой код, покажи свои попытки, где именно затык, вот тогда тебе дадут советы

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

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

    запускай полноценный браузер, симулируй клики пользователя, способов миллион, от инжекта javascript на страницу нормально запущенного браузера и прередачи информации через http до полноценных библиотек типа selenium
    Ответ написан
    6 комментариев
  • Почему php не отправляет письмо на телеграм?

    @rPman
    {$txt}
    текст в ссылках должен быть пропущен через urlencode, а еще у тебя там минус в идентификаторе

    так же настоятельно рекомендую, прежде чем делать приложение, протестировать ссылки вручную через curl, будет видно и ответ, а с ключом -v подробности и заголовки ответа.

    fopen не самый лучший способ коммуникации по сети, проще было бы file_get_contents использовать, и у него есть context, который позволяет много что настроить в запросе) но лучше пользоваться встроенный curl_xxx
    Ответ написан
    2 комментария
  • Как сделать такую нейросеть для предугодания чисел?

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

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

    В твоем случае водящие числа это твой набор, а выходящие - одно число.

    Количество строк в этой таблице должно быть очень большим, т.е. не получится обучить нейросеть на десятке примеров. Вот посмотри пример обучения сети считать числа фибоначи.

    В некоторых случаях можно умножить обучающую выборку, генерируя дополнительные данные, например у тебя количество чисел во входящей последовательности 5, но понять ее можно уже по 4-ем, тогда можно создать из каждой последовательности по две более коротких, используя подпоследовательность, для первой итоговое число будет 5-ое число последовательности, а для второй первое число входной последовательности будет второе число оригинальной. Для твоих 100 чисел можно попробовать брать 50 чисел, и сделать 49 обучающих записей на основе одной известной

    p.s. задавай вопрос chatgpt, он иногда выглядит умным, например угадал последовательность фибоначи, где числа умножены на 2 (для простой последовательности он легко все понимает, так как это было буквально в его обучающей выборке)
    Ответ написан
    Комментировать
  • Можно ли сделать в canvas js анимацию без спрайт-листа?

    @rPman
    Не хранить изображения в png, а подготовить видео файл из них (например секунду на кадр), крутить в video, при желании в режиме паузы, переключая по номеру времени currentTime, либо, если нужно именно на canvas, смотреть как это предлагает документация
    Ответ написан
    2 комментария