Задать вопрос
  • Как можно ускорить парсинг json?

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

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

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

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

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

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

    не существует адекватной гарантирующей защиты, позволяющей скрыть от пользователя эту информацию.

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

    Еще способы решения, выполнять критичную логику на сервере, а клиент пусть будет просто отображением, вырожденный случай - на сервере запускается приложение а на клиент транслируется ее изображение, само собой на практике на столько сильно переносить код на сервер не обязательно.
    Ответ написан
  • Есть ли оболочка для PHP для работы с биткоин кошельком?

    @rPman
    да, это библиотека облачной платформы

    для работы с bitcoin достаточно официального кошелька (причем если задачи - мерчант, т.е. кошельки, чей баланс нужно смотреть новосозданные) то можно использовать ключ -prune=512, тогда блокчейн на диске будет занимать считанные гигабайты (сейчас 5 кажется), ровно размер базы UTXO.

    используй официальный https://developer.bitcoin.org/reference/rpc/
    для оперативного получения уведомлений о новых блоках и транзакциях notify ключи демона bitcoin или zeromq (скорее всего это нужно только если весь блокчейн анализируешь)
    библиотеки для этого совершенно не требуется, максимум одна функция отправки curl типа такой:
    spoiler
    function wallet($method,$params=array(),$json=true)
    {
    	if(!is_array($params)) $params=array($params);
    	$ch = curl_init();
    	curl_setopt($ch, CURLOPT_URL, 'http://'.BITCOIN_USER.':'.BITCOIN_PASS.'@'.BITCOIN_IP.':BITCOIN_PORT');
    	curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array('jsonrpc'=>'1.0','id'=>'1','method'=>$method,'params'=>$params)));
    	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1) ;
    	$txs_str=curl_exec($ch);
    	curl_close($ch);
    	$result=$json?json_decode($txs_str):$txs_str;
    	if(is_null($result))
    	{
    		die('FATAL: Invalid ip, login or password of bitcoin wallet?'.nl);
    	}
    	return $result;
    }

    подправь обработку ошибок и тебе больше ничего не понадобится
    Ответ написан
  • В чем идея и как работают шаблоны?

    @rPman
    изначально php это язык шаблонов

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

    php файл это, сюрприз, фактически html (точнее ему пофиг) файл, в котором вставлены вставки с кодом <?php ... ?>, при этом эти вставки могут семантически делить шаблон на блоки, и использовать их как просто вызов echo текст шаблона, в результате можно использовать условные блоки, циклы, и функции:

    <html>
    <body>
    <?php function test($p) { ?>
    Привет <?=$p; ?>
    <?php } ?>
    циклы:
    <ol>
    <?php for($i=3;$i>0;$i--) { ?>
    <li value="<?=$i; ?>">ha ha ha</li>
    <?php } ?>
    </ol>
    Вызовы:
    <?php test('blablabla'); ?>
    <?php test('123123123'); ?>
    
    </body>
    </html>

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

    На практике, генерация именно html на серверной стороне, идеологически устарела. Да, если надо сформировать документ (например docx или лучше open document .odt) то шаблоны идеальны, но для web лучше формировать итоговую страничку на клиентской стороне, используя шаблоны уже на javascript
    Ответ написан
  • Как сделать загрузку ресурсов (asset bundles) с того же сервера, который обрабатывает мультиплеер?

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

    У тебя должна быть:
    1. система описания и хранения пакетов дополнений/модификаций, с учетом их версий и взаимозависимостей
    уже на этом этапе готовое это что то типа пакетного менеджера из мира linux (dpkg apt или rpm, ими все не заканичивается пакетных менеджеров сотни в мире) именно они предлагают полную и готовую инфраструктуру по всем параметрам, осторожно с лицензиями, там могут быть GPL а не LPGL, что ограничит использование в проприетарных проектах.
    Помимо просто функции добавить пакет+версия, тут должна быть функция отзыва.. попробуй реализуй когда у пакета зависимости
    2. система раздачи и загрузки файлов
    настоятельно рекомендую не изобретать ничего нового, если размер пакетов маленький (сотни мегабайтов максимум) то хватит просто http протокола, статики на веб сервере (именно его используют вышеописанные пакетные менеджеры)
    Если файлы большие, то сам бог велел использовать torrent протокол, на сервере достаточно минимального трекера и так же http веб сервер со статикой, на клиенте - libtorrent с поддержкой webtorrent (последние версии) и опционально запущенный торент клиент, для минимальной поддержки dht (в этом случае не потребуется раздавать torrent файлы, хватит просто magnet ссылки, но обычно это уже не важно)
    В этом случае можно сильно (от слово много) сэкономить денег на поддержке серверов, так как после нескольких сотен клиентов, загружающих единомоментно гигабайты контента (сами гигабайты не дорогие, проблема раздать сразу много), опустошаются даже богатые кошельки.
    3. система контроля за целостностью файлов клиента
    это вообще адовый ад, готовых инструментов чтобы все в вместе - нет
    по отдельности да, например готовые античит (за много денег)
    Решение тесно переплетается с собственно системой установки файлов (каждый пакет контролирует свой список файлов, какие то модифицирует, какие то заменяет, контролировать конфликты зависимостей (даже linux-пакетные менеджеры это делают с помощью клиента, но тут вопрос больше к тому как организуешь саму базу и как ее будешь тестировать, пользователи иногда ну очень странные вещи хотят, например фиксируют старые версии отдельных пакетов)

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

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

    @rPman
    стандартного/официального определения этим терминам нет.

    Термин - 'цифровые деньги', появился примерно в 2011г (digital money в 2008) что совпадает с появлением и популяризацией криптовалюты bitcoin, именно тогда заговорили о криптовалютах как о цифровых деньгах. Поэтому можно считать что этот термин лучше использовать исключительно для криптовалют.

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

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

    p.s. очевидно что скоро два термина 'цифровые' и 'электронные' сольются в одно понятие
    Ответ написан
    Комментировать
  • Сжатие дисков/папок в Linux?

    @rPman
    btrfs + zstd сжатие
    Ответ написан
    Комментировать
  • Возможно ли копировать полностью всю ОС Ubuntu через ssh?

    @rPman
    файлы заблокированные на чтение в linux есть точно так же как и в других системах, исторически любое резервное копирование предлагается (в любой ос) делать через создание снапшота (в linux это средствами lvm если он используется или при использовани cow файловых систем таких как btrfs/zfs/... прямо их средствами), снапшот является замороженным мгновенным снимком файловой системы, без ограничений по чтению.

    совершенно нормально, используя root копировать с помощью обычного cp (scp если по ssh) или rsync или к примеру tar -c . | ssh user@server tar -x скопирует все удаленно, завернув сначала в tar а на удаленной машине распаковав (с помощью ключей tar можно контролировать например файловую систему --one-file-system или передачу hardlink и symlink, например --dereference и --hard-dereference добавят в архив сам файл а не линк на него...)

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

    p.s. если же все же хочется скопировать систему как есть, а снапшоты недоступны, то лучше перевести диск в режим ro: mount -r remount,ro /dev/sd... и так с каждым разделом, на котором размещена система (тогда начнут отваливаться программы, пытающиеся делать запись) и уже получившиеся данные копировать
    в этом случае можно использовать partclone, умеет копировать раздел как dd но не передавая сектора, помеченные как свободные, что заметно быстрее (собственно это самый быстрый способ скопировать раздел)
    Ответ написан
    Комментировать
  • Лучшие практики по работе с хранилищем s3?

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

    можно используя сам amazon реализовать авторизацию, но это повысит стоимость (так как потребуется платить еще и за эту прослойку)

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

    p.s. если же данные нужны только бакэнду, то само собой загружай их в память или на диск, в зависимости от размера и потребности
    Ответ написан
    Комментировать
  • Какое условие поставить при недосутпности адреса в curl?

    @rPman
    после вызова curl_exec сделай вызов curl_getinfo и проверь что именно тебе возвращает сервер, в частности CURLINFO_HTTP_CODE (или лучше CURLINFO_RESPONSE_CODE) ($info['http_code']) должен быть 200, если не так, то смотри
    CURLINFO_SSL_VERIFYRESULT (список кодов смотри в комментариях) и CURLINFO_PROXY_SSL_VERIFYRESULT если используется прокси
    смотри ответ CURLINFO_HTTP_CONNECTCODE, CURLINFO_OS_ERRNO
    CURLINFO_CONDITION_UNMET

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

    @rPman
    Да, если этот ключ - ключ шифрования, которым будет зашифрована вся критичная информация, которая хранится в браузере расширением.

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

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

    Расшифрованные данные и сам ключ шифрования не должны никуда записываться и должны храниться только в оперативной памяти.
    Ответ написан
    Комментировать
  • Можно ли осуществить продажу компонента через приватный репозиторий git?

    @rPman
    Можно конечно, но почему так сложно?
    Почему тут обязательно должен присутствовать github?
    Код компоненты можно отдать архивом.

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

    а можно попросить у покупателя доступ к его серверу и залить ему в его гит нужный код
    Ответ написан
    1 комментарий
  • Можно ли гарантированно защитить приложение от передачи данных при удаленном управлении устройством?

    @rPman
    для android.

    Запрет на доступ к изображения окна приложения это штатные права

    НО! гарантированно - никак, так как при наличии рута все обходится
    Мало того, приложение можно модифицировать, и если процесс установки не проходит под личным контролем заверяющего (на месте, не удаленно), то эти настройки прав убираются и даже root не потребуется.
    Так же, с помощью специального разработанного приложения accessibility (через которые происходит управление приложениями для слепых) можно получить доступ к элементам приложения, кнопкам, тексту и т.п. и автоматически нажимать все необходимые кнопки подтверждения, что так же позволит обойти запреты и предупреждения об этом без наличия рута.

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

    @rPman
    попробуй mb_ereg_match вместо preg_match, так как он работает с байтами в строке а не мультибайтовыми как все mb_...
    Ответ написан
    Комментировать
  • Муки выбора ноутбука. Что взять?

    @rPman
    где ты нашел с nvidia 1650ti да и по такой цене?
    * msi gf63 thin 8ram i5-10500h, 1650ti 59тр

    за 60т.р.? если говорить про стоимости на единицу производительности то это лучший вариант из указанных тобой
    матовый экран!, 512m.2 ssd, норм дискретка (4gb ram? не могу найти в сети информации о таких конфигурациях, на будущее указывай полностью индекс ноута, так как первые буквы вообще ничего не говорят)

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

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

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

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

    @rPman
    пробрасываешь порт ssh на роутере (скорее всего называется nat - виртуальные сервера) до твоего linux сервера, все остальное можешь делать средствами ssh port forwarding (работает в обе стороны), мало того многие инструменты управления и удаленного администрирования в linux подразумевают что могут подключаться через ssh подключение.

    в довесок у ssh есть штатный vpn
    Ответ написан
    Комментировать
  • Хочу писать приложения под Win10, что учить?

    @rPman
    microsoft visual studio, среда разработки, фреймворк и пакет языков c# (плюс managed c плюс vb# и т.п.), мощный комбаин, которого по уму будет достаточно для создания приложения люббого типа, от клиент-серверных до десктопных и мбоильных

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

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

    @rPman
    варианты:

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

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

    @rPman
    поправил ответ:

    чтобы преобразовать в hex нужно использовать bin2hex (dechex не подойдет, но не умеет нулями дополнять слева), pack в формате big indean, а ограничение целого числа (так как числа знаковые в php) решить используя bcmath, подлелить на 0x100000000 и взять остаток для левой и правой части результата соответственно
    upd:
    $val='9223372036854775808';
    echo bin2hex(pack('N',bcdiv($val,0x100000000,0))).bin2hex(pack('N',bcmod($val,0x100000000,0)));
    Ответ написан