Задать вопрос
  • Как с помощью html страницы открытой в компе отправить запрос на активный порт localhost?

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

    p.s. Таким образом вы можете отсылать GET запросы по локальной сети клиента, сканируя к примеру ее на наличие машин и сервисов, а это получение очень важной информации изнутри сети.

    Например я уже трижды, в разное время, видел https://127.0.0.1:7070 запрос при заходе в личный кабинет сбербанк онлайн (на этом порту anydesk висит) это происходит редко, без специальной подготовки отследить сложно (я вообще заметил его потому что у меня в браузере добавлен самописный сертификат для локалхоста, и теперь фаерфокс предупреждает любые попытки открыть шифрованный канал с его помощью)
    Ответ написан
    Комментировать
  • Как реализовать расширение, которое будет автоматически постить текст в дискуссии Steam?

    @rPman
    Устанавливаете расширение greasemonkey/tempermonkey или любой другой, позволяющий инжектить (запускать по условию) ваш скрипт на страницу, для отладки вы вообще можете в консоли браузера скрипт вставлять без расширений.

    Затем скрипт ищет на странице поля ввода и кнопки примерно так $('#inputbox_id') и получаете/устанавливаете его содержимое .value или .text (для textbox), на кнопку нажимаете .click(), т.е. вся возня со скриптом у вас должна быть вокруг того чтобы не делать эти действия сразу друг за другом (это могут проверять для защиты от автоматизации в общем случае) а с интервалом и контроль над различными ошибками (например код формы изменился).

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

    Чтобы узнать какие css селекторы у нужных вам полей, в браузере достаточно нажать правую кнопку мыши (иногда с shift) и выбрать inspect element, в открывшемся инструменте разработчика можно правой кнопкой мыши выбирать нужные элементы страницы и в контекстном меню выбирать copy/css selector или что вам угодно.

    Управлять своим скриптом со стороны лучше по http/websocket на ваш сервер (вам придется поднимать https версию если вебсайт ее тоже использует)
    Ответ написан
    Комментировать
  • Как создать два независимых вывода аудио из-под разных источников в Windows 10?

    @rPman
    В вашем случае можно воспользоваться настройками Media Player Classic, который позволяет определить через какие колонки какой канал выводить, понижая количество колонок, например стерео выводить на пару колонок квадро.

    Настройки - встроенные фильтры - Аудио переключатели, добавить каналов и отметить два нужных.

    В настройках windows нужно включить квадрофонический вывод, подключив к передним наушники а к задним колонкам - динамики.

    Панель управления - звук - Настроить (как я понял потом вы можете это переключить обратно на стерео либо ).

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

    @rPman
    делать периодические запросы к WMI
    https://docs.microsoft.com/en-us/windows/win32/wmi...
    смотреть performance data provider

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

    @rPman
    Простейшие комбинаторные алгоритмы.

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

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

    Если путей нет бегунок удаляется.

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

    p.s. можно по хитрому реализовать хранение пути в бегунке, чтобы оптимизировать затраты на n*логарифм от размера лабиринта, вместо квадрата.
    Ответ написан
    1 комментарий
  • Как раздать WiFi на 50 смартфонов?

    @rPman
    Никак, либо быстрая скорость и дорого и сложно, либо медленно но бюджетно.

    Обычный роутер понятие растяжимое, сейчас даже в дешевые dlink всовывают работу нескольких роутеров в унисон, раздающих одну сеть.

    Помимо выбора железа есть еще поиск мест размещения роутера, в зависимости от положения клиентов с их неравномерной нагрузкой, окружающих стен препятствий. Боюсь качественный анализ может стоить половину бюджета.

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

    @rPman
    Как таковой миграции именно с proxmox нет да и не думаю что актуальна такая примитивная операция как пункт меню в интерфейсе.
    https://pve.proxmox.com/wiki/Migration_of_servers_...
    Ответ написан
    Комментировать
  • Насколько хорошо/оптимально использовать хранимую процедуру для полинга?

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

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

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

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

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

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

    По окончанию работы счетчика вы должны снова запросить из базы данных список задач которые опоздали или должны быть исполнены сейчас, вычисляя разницу между расчетным количеством исполнений (now - creation_time)/exec_interval и счетчиком исполнений (тут же проверяем лимит количества запусков, и при его превышении задачу удаляем, не забыв доделать нужное количество запусков). Для каждой задачи получаем количество исполнений - запускаем эти задачи и по окончанию каждой итерации увеличиваем счетчик исполнений.

    p.s. разделение задач по разным таблицам в зависимости от длины интервала никак на производительность не повлияют, только усложнят алгоритм
    Ответ написан
  • Можно ли использовать mysql в качестве широковещания в laravel?

    @rPman
    Можно ли микроволновкой гвозди забивать?

    mysql не предназначена для передачи сообщений - это инструмент хранения и анализа данных.

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

    p.s. у разных баз данных есть штатный механизм рассылки нотификаций клиентам, но именно у mysql его нет, реализуется плагинами, правда, внезапно, там будут те же сокеты :)
    Ответ написан
    Комментировать
  • Как делая программу на java (groovy) передать параметр в plsql не строкой, а байтовым массивом?

    @rPman
    tr1ck1, вам сообщение об ошибке, на русском языке, совсем ничего не подсказывает? даже нисколечки?
    PLS-00172: строковый литерал слишком длинный


    Наверное вы пытаетесь вставить в одну единственную запись типа varchar, string куда запихали 11к строк, оно тупо не помещается наверное?

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

    @rPman
    Вопрос содержит две подзадачи:
    1. подключение между двумя подсетями, в зависимости от того как 'далеко' они находятся, задача будет усложняться
    2. виртуальная машина, с точки зрения настроек сети - просто еще одна машина, в зависимости от настроек виртуальной машины, либо подключенная напрямую к сети через виртуальных свитч, либо через виртуальный роутер со своей виртуальной подсетью (виртуальная машина такой делает, включая в нем NAT), это значит в зависимости от ответа на первый вопрос, будет меняться ответ на этот второй.

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

    @rPman
    Писать серверную часть можно и на php, и да, даже если нужна работа с сокетами

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

    Если хотите хоть какой то надежности от 'взлома' (от появления читеров) то ваша игра должна идти на сервере, а клиент - только отображение, т.е. это например классический игровой цикл запускаете на сервере, клиенты подключаются и передают свои действия и забирают изменения состояния мира. Если у вас реалтайм и не хотите лагов, то клиент должен как то сам додумывать как должна идти игра в следующие сотню миллисекунд, т.е. возможно на клиенте будет так же запущен тот же игровой цикл, с оглядкой на то что верить можно только серверу, т.е. например возможны откаты состояния мира если клиент додумал его неправильно (во время лага сервер думает что пуля все еще летит, когда как на сервере врезалась в цель, которая удачно изменила свое направление под пулю перед началом сетевого лага).
    Ответ написан
    6 комментариев
  • Нужно что-то вроде бесплатного VPS/VDS под Linux, где взять?

    @rPman
    amazon aws free tier 1год бесплатно
    Ответ написан
    Комментировать
  • Возможно ли предотвратить декомпилирование приложения?

    @rPman
    Единственный способ гарантированно защититься от взлома - передавать клиенту итоговую 'картинку', а с клиента пересылать его действия. Вырожденный случай - игроки подключаются к вашему серверу с чем то типа remote desktop (такая возможность достаточно давно появилась в игровых движках).

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

    Все остальное можно будет взломать, трафик проанализировать. Конечно можно сделать это максимально сложной и дорогой, но это и для вас разработку усложнит.
    Ответ написан
  • Как разработать стакан котировок на vue?

    @rPman
    А причем тут vue или python?

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

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

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

    @rPman
    Не обязательно все делать именно в mysql так что если я говорю база это значит может быть в т.ч. к примеру локальные переменные сессии веб-сервера.

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

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

    Человека идентифицируйте сессией, понятие сессия есть во всех фреймоврках для вебсервера, например php - смотрите session_start()
    Ответ написан
  • Как сделать скриншот с одного компьютера на другой?

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

    Для браузера - https://developer.mozilla.org/ru/docs/Web/API/Scre...
    Ответ написан
    Комментировать
  • Как получить JS-объект через dev tools в Chrome?

    @rPman
    Смотрите по коду как к объекту обращается сайт.

    Скорее всего там будет какой то глобальный объект и где то в дебрях его мемберов будет ваш объект.

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

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