Задать вопрос
  • Как лучше синхронизовать данные между клиентом и сервером?

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

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

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

    @rPman
    Как можно отследить всю цепочку адресов куда ссылается Майфонтс?

    Отладочная консоль браузера f12 -> networks -> start analysis

    собирай список доменов и добавляй по доменам
    Ответ написан
    2 комментария
  • Как скрыть виртуальное пространство от андроид приложений?

    @rPman
    Патчить игру.

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

    Можно попробовать с помощью magisc модуля (установка на виртуалку та еще задачка), там в теме (начинай смотреть с конца) как раз обсуждают представляться не виртуалкой
    Ответ написан
    Комментировать
  • Установка RAID 1 на боевом сервере?

    @rPman
    Да, если не затронешь системный диск. Программный рейд не требует ни перезагрузки ни каких либо особых настроек и доустановки компонент.
    Если системный диск имеет GPT разметку, то, с некоторыми оговорками, возможно добавление разделов и добавление их в программный рейд, так же без перезагрузки.

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

    p.s. обязательно сделай предварительно резервную копию диска (рекомендую clonezilla), сэкономишь себе время и нервы
    Ответ написан
    2 комментария
  • Хочу узнать про процессор?

    @rPman
    вставить процессор в заведомо рабочую материнскую плату

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

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

    @rPman
    Для запросов, включающих в себя и фильтрацию where и сортировку/групировку, нужны составные индексы (обычно порядок полей в составном индексе рекомендуется сначала поля, которые в условии where, потом те что в group by/order by)

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

    p.s. иногда, когда запросов на чтение сильно больше запросов на запись, логичнее заполнять тригерами искомые данные в кастомной табличке-кеше

    например в твоем случае последняя добавленная запись может быть скопирована на insert/update в дополнительную таблицу (где вообще индексов нет), тогда брать ее от туда будет максимально просто и быстро
    Ответ написан
    Комментировать
  • Порекомендуйте какой либо vps/vds без оплаты или минимум для vpn и voip?

    @rPman
    поисковики виртуалок от многоуровневых реселеров типа lowendstock.com - цены от 2$ в год (качество таких не на высоте, я рекомендую смотреть цены от 1$в месяц)

    Данную сумму может выделить ну абсолютно любой человек, даже последний бомж, если он сумел выйти в интернет (чуть ли не каждый второй хостинг в этом списке поддерживает оплату в криптовалюте)
    Ответ написан
  • Как адресуются пакеты адресату с серым ip?

    @rPman
    Да что же за отвечающие такие, все кто говорит никак - не правы, может хоть немного думать будете прежде чем в заблуждение народ вводить.

    Серый ip, это значит машина выделенный ip адрес в сети Интернет не имеет, а для выхода в интернет использует одну из доступных технологий, обычно либо NAT либо proxy (http/socks/web)

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

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

    При правильной настройке роутера, нормальная работа сервисов внутри локальной сети с доступом из Интернета, возможна, даже если ip адрес в догонку к проблеме nat, еще и динамический (технология называется dyndns)

    p.s. есть еще ipv6 (в частности 6to4), в отличии от nat или прокси (или vpn, которая превращает ситуацию в ту же локальную сеть), при наличии поддержки провайдером (точнее не блокировании этой технологии) и роутера, позволяет выделить машинам внутри локальной сети прямые ipv6 адреса, доступные из сети Интернет, но только по этому протоколу.
    Ответ написан
    2 комментария
  • Планирую поменять процессор. Как заранее понять, какой будет прогресс в производительности?

    @rPman
    Процессор стал быстрее на треть в однопотоке (это самая важная характеристика из синтетических бенчмарков для обывателя) - 2162 vs 3356

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

    @rPman
    bat-ник, запускается по расписанию в планировщике задач (чекбоксик прав администратора, чтобы он мог убивать процесс, так же включить чекбоксик интерактивный, чтобы процесс запускался под текущим пользователем) и состоит из двух строчек:
    taskkill /IM:имя_файла_просмотрщика_pdf.exe
    start "" /max "c:\путь_до_просморщика_pdf\имя_файла_просмотрщика_pdf.exe" "путь_до_файла_pdf.pdf"


    Если компьютер может использоваться другими пользователями (например это сервер терминалов и народ подключается по rdp) то завести специально для этой задачи отдельного пользователя windows, и прописать его в taskkill так /fi "username eq имя_пользователя_windows"

    p.s. при подключении к машине по rdp на сервере открывается новая сессия, не затрагивающая ту, что видна на подключенном мониторе (эта сессия зовется консоль), а на рабочих станциях эта консоль будет заблокирована.
    Для разболокировки консоли можно найти утилиты, гуглить remote unlock windows console
    Ответ написан
    Комментировать
  • Разделение пространств/рабочих областей в браузере. Как настроить?

    @rPman
    Исчезновение открытых табов это особенность браузеров, такое я встречаю и у firefox (очень редко), чаще всего это связано с "неправильным" закрытием браузера, если оно совпадет, как я понима, с каким-то очередным обновлением, требующим что то подправить в настройках.

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

    Попробуй "tab session manager" и погугли аналогичные решения.

    Сам я этим не пользуюсь потому что понял что вместо попытки бороться с багами нужно немного изменить стратегию работы с табами и чаще пользоваться букмарками. Одно время я активно настраивал окно с быстрым доступом к сайтам (стартовое окно, открывается при новом табе, в гугл хроме не кастомизируется штатно, хотя есть расширения)
    Ответ написан
    Комментировать
  • Является ли сообщение, отправленное по Viber, SMS-сообщением?

    @rPman
    определения нужно искать не на вики а в rfc5724
    гугл показывает это, как я понял тут обсуждение ведется и трекается история

    Там в т.ч. четко определен и формат и способ передачи и прочее прочее

    Viber сообщение под это не поподают
    Ответ написан
    Комментировать
  • Как для сайта сверстать защищенный режим браузера?

    @rPman
    Все правильно тебе говорят, все что видно в браузере клиенту - может видеть и программа.
    Но можно очень простым способом сделать эту задачу очень сложной для "атакующих":

    Сайт должен представлять из себя программу удаленного управления, а реальный сайт запускаться на кастомном браузере (без интерфейса, пишется в 10 строчек на любом языке программирования на основе готовых контролов браузерных webview - chromium/firefox/webkit).

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

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

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

    Достоинства:
    - на стороне клиента - просто изображение, все что может сделать злоумышленник, это смотреть эту картинку, без какого либо анализа, ни одна рекламная сеть не рассчитывает на такой способ использования
    - в некоторых случаях сетевой трафик может быть меньше чем если бы сайт открывается классическим способом (особо кривые реализации, когда html размером мегабайты, при этом без мультимедиа) и зависит не от сложности сайта а от количества действий, совершаемых с сайтом пользователем, а точнее скролинг и смена страниц), отзывчивость работы в таких случаях для пользователя может быть наилучшей, само собой эффективнее исправить сайт
    Ответ написан
    1 комментарий
  • Есть ли у VR-приложений для обучения конкуренты?

    @rPman
    Важнейшее умение в современном мире, с момента появления интернета, - это умение искать информацию.
    примеры запросов: "vr для обучения" или "виртуальная реальность образование"

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

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

    @rPman
    Миллион способов реализации.

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

    @rPman
    Полагаю вопрос в том как передать сразу несколько данных форм в пределах одного запроса?

    Для этого в стандарте html forms существует возможность передачи списков, в этом случае имена полей должны быть вида "name[]" или "name[xxx]" где xxx это значение ключа соответствующего элемента в массиве (может быть не только число), в массиве на бакэнде значение элемента с именем name буде массивом, где ключ и знаение будут соответствовать xxx и значению, введенному в поле (для пустых скобок будет автоматически использоваться счетчик с 0)
    <form method="post" action="test.php">
    <input name="aaa[]" type="text">
    <input name="bbb[]" type="text"><br>
    <input name="aaa[xxx]" type="text">
    <input name="bbb[xxx]" type="text"><br>
    <input name="aaa[222]" type="text">
    <input name="bbb[222]" type="text">
    <input name="aaa[]" type="text">
    <input name="bbb[]" type="text"><br>
    <input type="submit">
    </form>

    выдаст массив $_POST:
    Array
    (
        [aaa] => Array
            (
                [0] => q
                [xxx] => w
                [222] => e
                [223] => r
            )
    
        [bbb] => Array
            (
                [0] => t
                [xxx] => y
                [222] => u
                [223] => i
            )
    )

    т.е. осталось только правильно сгенерировать нужную форму с правильными именами элементов
    Ответ написан
  • Можно ли массивом сделать замены preg_replace?

    @rPman
    Да конечно, preg_replace принимает как первым аргументом так и вторым - массив, если оба будут массивами, то метод будет использовать строчку замены соответствующую строке условию.

    Еще есть preg_replace_callback и preg_replace_callback_array почитай документацию и примеры, еще более гибкие операции

    p.s. осторожно, utf8 этими функциями работает с оговорками (модификатор /u), есть методы mb_ereg_... но array там уже не поддерживается
    Ответ написан
  • Как правильно подсчитать разницу во времени, SQLite?

    @rPman
    У меня совет, он не абсолютный конечно, но в большинстве случаев экономит время нервы и работает ЗНАЧИТЕЛЬНО эффективнее (меньше тратит процессорное время как бакэнд так и сервера базы данных)

    храните время в виде числа timestamp - количество секунд, по ситуации, в большинстве случаев хватает unixtime, очень редко может потребоваться хранить 64-битный long количества миллисекунд (timestamp*1000).
    Исторические даты (старее 1 января 1970) да, лучше хранить в формате, понимаемом базой данных (если нужно делать сравнение < >, сортировку и другие операции).

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

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

    p.s. у sqlite нет типа date (там как я понимаю строка) но есть функции работы со временем
    https://www.sqlite.org/datatype3.html#date_and_tim...
    https://www.sqlite.org/lang_datefunc.html
    на самом деле там веселее
    sqlite сохраняет данные в том типе, который вы попытаетесь записать, когда вы пишете тип date то это ничего не значит, и если дальше записать строку с датой, запишется строка, если число - будет число, дальнейшая работа зависит от того какую функцию скормишь этим данным
    если проведете бенчмарки, все это великолепие работает отвратительно, и имеет смысл когда в консоли sqlite делаешь анализ, и все эти now, before, 'one day' очень все облегчают, но когда пишешь код, проще работать с понятными секундами, для которых на других языках разработано огромное количество хелперов
    Ответ написан
    1 комментарий
  • Почему скрипт PHP PDO не хочет получать данные из базы?

    @rPman
    Есть ли в базе данные по условию?data = :data AND ref_id = 10215.
    В data хранятся данные в формате?date("d-m-Y");.
    По коду если запрос вернет пустой результат у тебя должна быть ошибка (варнинг в логах веб сервера или консоли где выполняется код), так как $depref1 не определен.
    и т.п.
    Ответ написан
    5 комментариев
  • Можно ли сжать файлы игры оставив игру работспособной?

    @rPman
    В вопросе ошибка, игра 13гб, RAM-диск - 125Гб, явно игра меньше диска и влезет туда раз 9 точно.

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

    Игра долго грузится? не влезает на SSD а HDD тормоз? я когда то давно раскидывал игру на два диска по каталогам, используя символические ссылки NTFS, переносил большие видеофайлы или неиспользуемые карты на HDD а нужные здесь и сейчас оставлял на SSD.

    Эта битва будет долгой, с каждым обновлением игры будет больше гемороя, я боролся с ARK: Survival Evolved, она хотела больше 500Гб, когда диск был 250Гб...

    Настоятельно рекомендую найти деньги и купить большего размера SSD
    Ответ написан
    1 комментарий