Задать вопрос
  • Как забрать данные из Virtual Console Huawei?

    @rPman
    Какие данные забрать то?
    Какой именно доступ имеется, консоль это скорее всего что то типа vnc, если он не модифицированный, то возможно написание приложения на основе libvnc плюс скрипт, запущенный на самом сервере, выводящий нужную информацию на экран в каком нибудь виде (например в битмап)

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

    @rPman
    Добро пожаловать в мир реверс инженеринга.

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

    конкретно в данном случае сайт получает данные с сервера в websocket по ссылке в дважды закодированном виде
    CgRUU0xBFc18h0QYwJep2qtfKgNOTVMwCDgCRfhlOz5lAHD9P9gBBA==

    это base64 строка, декодируется в это
    00000000  0a 04 54 53 4c 41 15 66  5a 87 44 18 a0 ba 93 da  |..TSLA.fZ.D.....|
    00000010  ab 5f 2a 03 4e 4d 53 30  08 38 02 45 ee 4a ab 3d  |._*.NMS0.8.E.J.=|
    00000020  65 00 a8 67 3f d8 01 04                           |e..g?...|

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

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

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

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

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

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

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

    @rPman
    шифровать чтобы скрыть данные от простого пользователя? или чтобы короче стало?

    способов много
    например атрибуты можно запаковать каким-нибудь base64
    Ответ написан
    Комментировать
  • А как выглядит настоящее, большое, корпоративное "Энтерпрайз" веб-приложение?

    @rPman
    Есть мнение - миром правит не заговор а глупость.

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

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

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

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

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

    Про создание 'аналог vps', пили скрипты автоматизации или бери готовое (под windows скорее всего нет), для virtualbox есть консольная утилита VBoxManage которая позволяет делать все что хочешь плюс еще в довесок скрытые функции.

    По организации виртуальных машин, есть следующие варианты:
    * подготавливаешь скрипты автоматической установки системы на виртуальную машину (я видел реализацию, когда виртуальная или реальная машина в режиме 'установка' запускалась с загрузкой по сети или с компакт диска, где ее ждал unattended/automated install (такие образы iso можно сделать чуть ли не штатно из большинства популярных дистрибутивов), который размечал разделы, копировал систему и прописывал настройки сети (я видел таких что прописывали статикой, не надо так) и по мелочи
    * подготавливаешь готовые образы виртуальных машин, которые являются стартовыми шаблонами, и делаешь простое копирование (используй cp --reflink=auto, тогда физически копия не будет занимать места на диске пока не начнутся туда записи, т.е. место будет занимать только изменения), затем диску меняешь uuid чтобы virtualbox не ругался на дубляж
    VBoxManage internalcommands sethduuid диск.vdi/vhd/vmdk

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

    p.s. на базе функционала virtualbox можно запилить очень мощный облачный хостинг, но в пределах одной машины (точнее без функционала кластера, например нет миграции), более продвинутые функции есть у qemu kvm, позволяет очень много интересного реализовать, на его базе redhat пилит свой платный продукт для этого, конкурирующий с vmware/xen.
    Ответ написан
  • Как загружать видео с фейсбука?

    @rPman
    заменить код на вызов свежей версии утилиты youtube-dl ссылка
    Ответ написан
    4 комментария
  • VPN матрешкой. Как победить IPSec?

    @rPman
    Все зависит от того, что именно за vpn на windows машине, и какие у него требования к сети

    Например если сеть, к которой подключает первая vpn сама из себя представляет локальную сеть, а выход в мир через NAT то некоторые типы vpn (например тот же ip sec или pptp) могут потребовать на роутере этой сети соответствующую поддержку

    p.s. openvpn будет работать даже если сеть за NAT, без поддержки GRE (требуется для pptp) и даже с использованием udp (или tcp как обычно), с ним многоуровневое каскадирование vpn возможно
    Ответ написан
  • Принцип хэширования чанков DHT?

    @rPman
    torrent dht это протокол для раздачи не кусочков торента, а фактически самого торент файла, с идентификацией по его хешу и само собой для получения списка пиров для его загрузки.

    первая же статья на русском про dht
    Ответ написан
  • Как можно ускорить парсинг 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. если же данные нужны только бакэнду, то само собой загружай их в память или на диск, в зависимости от размера и потребности
    Ответ написан
    Комментировать