Задать вопрос
  • Как запретить интернет соединение без vpn?

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

    Интернет перестанет работать. Затем добавить route для vpn сервера по его адресу или подсетью, указав верный шлюз
    route add ip_адресvpn mask 255.255.255.255
     ip_твой_правильный_шлюз

    Таким образом единственно доступный в интернете сервер будет vpn.

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

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

    @rPman
    Создание снапшота - атомарная операция (lvm/btrfs/zfs), с точки зрения восстановления базы данных из этого снапшота, это будет то же самое, как если бы вы нажали reset на компьютере, даже лучше - сняли все процессы сервера баз данных с помощью жесткого kill -9 $pid (SIGKILL, его не отловить) ведь записи на диск не прервутся.
    ВАЖНО, если база данных находится на одном томе! невозможно создать атомарно снапшот на нескольких томах. Вариант с запуском всей системы в виртуальной машине и созданием снапшотов ее средствами не рассматриваем, такой конфиг абсурден с точки зрения производительности.

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

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

    p.s. но я бы не рекомендовал такой способ все равно, особенно на постоянной основе.
    Для создания резервной копии на живой базе я рекомендую использовать вторую машину, на которую настроена репликация базы. В этом случае эту вторую базу можно остановить, снять снапшот, возобновить работу (чтобы репликация догнала master - меньше нагрузка на диски, меньше оперативной памяти и допустим слабый процессор) а снапшот спокойно копировать, не опасаясь каких-либо проблем.
    Данный способ нужно использовать на постоянной основе (мало того, требования к backup slave серверу значительно ниже чем рабочему master), и сам процесс создания копии никак не повлияет на работу исходной базы, когда как использование оригинальной базы, даже со снапшотом, значительно понизит ее производительность, так как копирование сильно нагружает дисковую подсистему.
    Ответ написан
    3 комментария
  • Как сделать локальный бэкап VDS сервера Ubuntu + Docker?

    @rPman
    Да это будет работать (linux вообще универсальная ОС, лишь бы архитектура x86/x64/.. процессора подходила, исключение - gentoo, там привязка может быть буквально к модели процессора), возможно потребуются телодвижения для настройки загрузчика и переустановки ядра (linux-image-...), скорее всего, если аппаратный конфиг будет похож (например и там и там одни и те же диски, не по размеру а по сути, например один диск на ОС а другие на данные базы и файлы веб сервера или образы docker), то все заведется без проблем, я так переносил несколько раз очень странные конфиги, дублируя на целевой машине даже uuid разделов и lvm томов.

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

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

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

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

    p.s. Есть способ облегчить реверсинженеринг:
    В зависимости от используемого пакетного менеджера, можно получить список установленных пакетов, затем сдублировать установку простым запуском (для debian based дистрибутивов) apt install список_имен_пакетов_с_версиями или dpkg -i имя_файла.deb, если предварительно их скачать из репозитория apt download в отдельном каталоге с помощью chroot.
    А затем банально сравнить списки файлов на оригинальной установке и этой фиктивной, все различия можно автоматически скопировать (новые, измененные и удаленные файлы). Я делал очень просто - формировал список файлов, в виде полный_путь_имя_файла размер дата_модификации (можно вместо размера и даты хеш md5 но это дольше и особого смысла не имеет, если нет злоумышленника, стремящегося помешать этому анализу) для оригинального каталога и сравниваемого, полученные файлы сортировал утилитой sort и сравнивал diff, полученный файл можно смотреть глазами а можно написать утилиту которая все будет копировать сама.
    Ответ написан
    Комментировать
  • У меня скрипт для рассылки друзьям на Python, хочу отправлять сообщения по номеру телефона, но получается только по username, как решить?

    @rPman
    По номеру телефона можно общаться только если вы друг у друга в контактах телефона.

    Иначе - ты бы перебирал номера телефонов (собственно одно время так и делали, добавляя по 10к в контакты себе) и спамил бы спамил, хорошо так не получится.
    Ответ написан
  • Как восстановить данные с SSD диска?

    @rPman
    Железная проблема, причем это явно контроллер.
    Нести в ремонт, стоимость ремонта может быть дороже чем с hdd на порядок, но хотя бы на диагностику отнесите, вполне возможно что данные вытянуть получится (готовьте диск, любой, на который вам восстановят данные)
    Ответ написан
    Комментировать
  • Запуск Windows от ПК на Limbo PC Emulator?

    @rPman
    первая же статья из гугла на 4pda
    https://4pda.to/forum/dl/post/19313973/Screenshot_...
    В limbo все гораздо проще. Надо просто их выбрать как на скриншоте. Расположение файлов на ваше усмотрение.
    Ответ написан
    Комментировать
  • Может ли провайдер заблокировать 80 порт на доступ извне?

    @rPman
    у меня ростелеком на белом, специально купленном ip, в разное время блокировал входящие на портах ниже 4000, я даже пытаться перестал, ssh например не работал никогда, а вот http по 80 то работает то нет.

    Кстати, возможна ситуация, когда блокировка происходит скорее всего не на провайдере где стоит сервер, а у провайдера на клиенте, хз по какой логике. Например помню с tele2 мобильного интернет не мог подключиться ни по каким портам, при этом в то же время с проводного провайдера, тоже в том же городе, связь была.
    Ответ написан
    Комментировать
  • Какая версия PostgreSQL-ODBC-драйвера подойдет для Windows 7?

    @rPman
    тут смотрел?
    https://www.postgresql.org/ftp/odbc/releases/

    Если приложение x86 а ОС x64 то посмотри как это тут решили (внизу статьи), само собой подправь название dll под нужную
    Ответ написан
  • Отключается монитор, может ли быть виноват процессора?

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

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

    p.s. если у тебя нет комплектующих для проведения тестов, отнеси в сервисцентр, где за 200-500р тебе проведут эту проверку, тем более у тебя проблема сразу вылезает.
    Ответ написан
    Комментировать
  • Какой vbs из C:\Windows\System32\Printing_Admin_Scripts\ru-RU\ мне поможет?

    @rPman
    попробуй powershell
    $printerName = "имя_принтера"
    # Снятие "галочки" с порта port1
    (Get-PrintConfiguration -PrinterName $printerName).PrinterPortName.Remove("port1")
    # Добавление "галочки" для порта port4
    (Get-PrintConfiguration -PrinterName $printerName).PrinterPortName.Add("port4")

    Не совсем уверен но кажется нужно после сохранить изменения.
    я на нашел готовых примеров использования, а chatgpt генерит что то типа этого, чему я не очень верю:
    Set-PrintConfiguration -PrinterName $printerName -PrinterPortName (Get-PrintConfiguration -PrinterName $printerName).PrinterPortName
    Ответ написан
    5 комментариев
  • Как максимально растянуть заряд ноутбука Lenovo нового поколения?

    @rPman
    android конечно же, основан на linux, и при условии наличия драйверов acpi даст наилучший результат.
    формально все можно настроить на любом linux и даже на windows, но усилий будет потрачено много.

    но у меня сомнения что оптимизация настроек софта поможет улучшить результат, 12 часов для ноутбука это и так отличный результат, вполне возможно что вся энергия идет на подсветку экрана
    Ответ написан
    5 комментариев
  • Из-за чего синтаксическая ошибка в формуле?

    @rPman
    разделитель не запятая а ';'
    Ответ написан
    Комментировать
  • Вопрос про настройку LLM сетей?

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

    p.s.
    скрывались за модификатором доступа private

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

    p.p.s. по названию свойств могу догадаться (я же почти телепат), что используется llama.cpp, только там я видел выбор mirastat алгоритма как опция
    Советую полистать хелп к llama.cpp llama-cli (раньше он назывался main) llama-cli --help там все это есть но чуть чуть названное по другому. Напомню что llama.cpp все еще разрабатывается, документация к нему не всегда понятна а многие вещи приходится вытаскивать из issue и discussion проекта на github и даже из исходников.

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


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

    1. SamplingPipeline: Возможно, `--samplers` и `--sampling-seq`
    2. PenalizeNL: `--penalize-nl`
    3. MirostatEta: `--mirostat-lr`
    4. MirostatTau: `--mirostat-ent`
    5. Mirostat: `--mirostat`
    6. PresencePenalty: `--presence-penalty`
    7. FrequencyPenalty: `--frequency-penalty`
    8. RepeatLastTokensCount: `--repeat-last-n`
    9. RepeatPenalty: `--repeat-penalty`
    10. Temperature: `--temp`
    11. TypicalP: `--typical`
    12. TfsZ: `--tfs`
    13. MinP: `--min-p`
    14. TopP: `--top-p`
    15. TopK: `--top-k`
    16. AntiPrompts: `--cfg-negative-prompt` или `--cfg-negative-prompt-file`
    17. LogitBias: `-l`
    18. MaxTokens: `-n`
    19. TokensKeep: `--keep`

    Описание на русском языке:

    1. `--samplers`: Выборочные алгоритмы, которые будут использоваться для генерации в указанном порядке, разделенные `;`.
    2. `--penalize-nl`: Наказывать токены новой строки (по умолчанию: false).
    3. `--mirostat-lr`: Коэффициент обучения Mirostat, параметр eta (по умолчанию: 0.1).
    4. `--mirostat-ent`: Целевая энтропия Mirostat, параметр tau (по умолчанию: 5.0).
    5. `--mirostat`: Использовать выборку Mirostat. (по умолчанию: 0, 0 = отключено, 1 = Mirostat, 2 = Mirostat 2.0).
    6. `--presence-penalty`: Штраф за присутствие повторяющейся последовательности токенов, альфа (по умолчанию: 0.0, 0.0 = отключено).
    7. `--frequency-penalty`: Штраф за частоту повторяющейся последовательности токенов, альфа (по умолчанию: 0.0, 0.0 = отключено).
    8. `--repeat-last-n`: Последние n токенов, которые необходимо учитывать для наказания (по умолчанию: 64, 0 = отключено, -1 = ctx_size).
    9. `--repeat-penalty`: Наказывать повторяющуюся последовательность токенов (по умолчанию: 1.0, 1.0 = отключено).
    10. `--temp`: Температура (по умолчанию: 0.8).
    11. `--typical`: Локальная типичная выборка, параметр p (по умолчанию: 1.0, 1.0 = отключено).
    12. `--tfs`: Выборка без хвостов, параметр z (по умолчанию: 1.0, 1.0 = отключено).
    13. `--min-p`: Выборка min-p (по умолчанию: 0.1, 0.0 = отключено).
    14. `--top-p`: Выборка top-p (по умолчанию: 0.9, 1.0 = отключено).
    15. `--top-k`: Выборка top-k (по умолчанию: 40, 0 = отключено).
    16. `--cfg-negative-prompt`: Отрицательный подсказка для использования для направления (по умолчанию: '').
    17. `-l`: Модифицирует вероятность появления токена в завершении.
    18. `-n`: Количество токенов для предсказания (по умолчанию: -1, -1 = бесконечность, -2 = пока не заполнится контекст).
    19. `--keep`: Количество токенов для сохранения из начальной подсказки (по умолчанию: 0, -1 = все).

    затем по каждому делай запрос отдельно, добавляя что это утилита по inference llm и что может значить соответствующая опция, пример:
    spoiler
    в приведенном help файле были ключи приложения для запуску большой языковой модели ии на своих мощностях llama.cpp, что может значить ключ --temp
    ответ:
    В контексте параметров большой языковой модели ИИ --temp означает температуру (temperature) для алгоритма сэмплирования при генерации текста.

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

    Например:

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

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

    Таким образом, значение --temp 0.8, указанное по умолчанию в помощи, задает относительно умеренную температуру сэмплирования для баланса между связностью и разнообразием генерируемого текста.

    --mirostat

    `--mirostat` - это ключ командной строки, который управляет использованием алгоритма выборки Mirostat при генерации текста с помощью большой языковой модели в llama.cpp.

    Mirostat (Minimial Regret Optimal Sampling for Text) - это алгоритм выборки для условного генерирования текста, который пытается находить оптимальные завершения с минимальным сожалением (regret) по отношению к заданной функции штрафа.

    Значения этого ключа:

    - 0 (по умолчанию) - отключает использование Mirostat, и вместо этого используются другие указанные алгоритмы выборки, такие как top-k, top-p, повторные штрафы и т.д.
    - 1 - включает использование оригинального алгоритма Mirostat.
    - 2 - включает использование улучшенной версии Mirostat 2.0.

    Когда Mirostat включен, он в основном игнорирует другие параметры выборки, такие как top-k, top-p, tail-free sampling и типичная выборка. Вместо этого он динамически адаптирует распределение выборки на основе целевой функции, используя обучение политики.

    Два важных гиперпараметра для Mirostat:

    1) `--mirostat-lr` (learning rate) - скорость обучения для алгоритма.
    2) `--mirostat-ent` (target entropy) - целевая энтропия выходного распределения.

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


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

    ВАЖНО: важнейший навык, который может понадобиться в ближайшие годы наверное любому человеку, хоть как то работающему с информацией, и тем более программистам, это умение работать и понимание недостатков современного ИИ, хотя бы на базе chatgpt или других компаний.
    Это похоже становится даже важнее чем гуглить (но не вместо, потому что современный ИИ все еще тупит и может напридумывать чуши), поэтому учиться учиться и еще раз учиться.
    Ответ написан
    Комментировать
  • На убутободобном linux установил драйвера wifi, как вернуть родные?

    @rPman
    Универсально, устанавливаешь систему, делаешь резервную копию (на самом деле достаточно создания снапшота, это 1 команда и заранее устанавливать систему на btrfs), затем ставишь свой драйвер с помощью make install, делаешь еще один снапшот, и сравниваешь эти два снапшота, например с помощью diff -ru, или получив список различий чем то типа btrfs-diff (он вместо сканирования всего, будет анализировать буквально различия снапшотов).

    Таким образом ты быстро поймешь, что именно сломано и даже как. Мало того, сломанные библиотеки (когда подменяется файл вместо установки рядом с новым именем) можно откатить с помощью штатного дебиановского dpkg:
    # получить имя пакета, в котором указанный файл, работает только для установленных пакетов, иначе apt-file
    dpkg -S /path/to/your/file

    чтобы переустановить пакет (не советую, так как такие пакеты помечаются как нужные и если они были установлены не вами а как зависимость, то эта информация будет потеряна)
    apt install --reinstall package_name
    либо
    # 1. Скачать пакет
    apt-get download package_name
    # 2. Извлечь содержимое пакета во временный каталог
    dpkg-deb -x package_name_version.deb /tmp/package_contents
    # делать с этим файлами что угодно по одному, в т.ч. копировать
    # либо установить пакет без отметки его важности
    dpkg -i package_name

    Альтернатива, изучать исходники конфига устанавливаемых драйверов и помнить, что огульно ставить что либо в систему с помощью make install очень и очень дурная практика, прямой путь все сломать без возможности восстановить.
    Ответ написан
  • Root Права для телефона. Пытаюсь через один выдать рут права на свой самсунг?

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

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

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

    p.s. и да, вам на 4pda или xdaforums
    Ответ написан
    Комментировать
  • Где найти бесплатную программу для объединения нескольких png в один с сохранением прозрачности без интернета?

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

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

    Для объединения четырёх PNG-изображений с сохранением прозрачности и указанием конкретных координат, можно использовать команду composite из пакета ImageMagick. Вот пример команды:
    # Определите входные изображения и их координаты.
    input_image1="image1.png"
    input_image2="image2.png"
    input_image3="image3.png"
    input_image4="image4.png"
    output_image="output.png"
    
    # Координаты для каждого изображения: (x1, y1), (x2, y2), (x3, y3), (x4, y4)
    coords1="0,0"
    coords2="100,100"
    coords3="200,200"
    coords4="300,300"
    
    # Создайте пустое изображение, которое будет служить холстом.
    convert -size 500x500 xc:none base.png
    
    # Объедините все изображения в одном холсте.
    composite -geometry +${coords1} $input_image1 base.png temp1.png
    composite -geometry +${coords2} $input_image2 temp1.png temp2.png
    composite -geometry +${coords3} $input_image3 temp2.png temp3.png
    composite -geometry +${coords4} $input_image4 temp3.png $output_image
    
    # Удалите промежуточные файлы, если они больше не нужны.
    rm temp1.png temp2.png temp3.png base.png

    p.s. это скрипт для linux bash, если хочешь для windows cmd то замени rm на del, а сверху установка значений переменных добавить в начало set имя=значение, и с осторожностью пробелы в названиях файлов, лучше без них
    Ответ написан
    Комментировать
  • Опасно ли передавать клиенту параметр _id полученный из БД mongodb?

    @rPman
    Нет не опасно, но пользовательский ввод все равно нужно валидровать
    Ответ написан
    Комментировать
  • Как обойти лимит ТГ на количество ботов?

    @rPman
    Реляционная схема у тебя такая?:
    Много клиентов, у каждого клиента много заведений, каждый клиент_заведение свой список объектов (музыка?)

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

    @rPman
    Для пространственного арбитража (выравнивание цен между биржами) тебе нужны только ask и bids, т.е. для этого тебе нужны только depth запросы.

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

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

    Т.е. только так можно оперативно получать информацию о стаканах, и уже на основе ее делать поиск пересечений bids/asks с разных бирж.

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

    Чтобы ускорить процесс, нужно делить его на две части - поиск торговой пары, для которой появилась возможность совершить арбитражную сделку, и вычисление объема, в пределах которого эта сделка может быть исполнена (речь идет о сделках по маркету, когда она совершается на весь объем одномоментно). Первое - достаточно при вычислении depth дополнительно хранить две цены buy и sell, по которой здесь и сейчас можно совершить сделку на минимальный объем сделки, определяемый лимитами биржи, соответственно сравнение проводить только этих чисел. При обнаружении пересечений - вести подсчет предельного объема уже на основе стаканов (если анализ проводить на каждое событие, получаемое по websocket, то алгоритм можно сократить до сравнения одного нового лимитного ордера со стаканами других бирж).

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

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

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

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

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

    Если у тебя mainpage.php и poisk.php это разные запросы, то через глобальные переменные данные между ними не передать.

    Нужна какая-нибудь база данных, чем бы она не являлась, например:
    * хранить в специальных заголовках запроса - cookies, эти данные как мяч будут автоматически передаваться между клиентом и сервером, т.е. все запросы от клиента будут содержать копию всех установленных cookies, до истечения их времени жизни
    * переменные сессии (используются cookies автоматически)
    сессия доступна сразу после session_start() а данные через ассоциативный массив $_SESSION (автоматически сохраняется по окончанию скрипта, учти это при параллельных запросах), идентификатор сессии автоматически поддерживается в заголовках запроса (сессия стартует когда пользователь открывает сайт, и единая для других окон, адже после перезапуска браузера, время жизни опция cookie_lifetime)
    Очень часто идентификаторы сессии или специально созданное значение в ней используется как идентификатор для поиска данных в других местах (например БД)
    * можно использовать файлы, в которых данные хранятся в сериализованном виде, в php штатно работает var_export/eval, serialize/unserialize, json_encode/json_decode - текстовые и бинарный igbinary_serialize/igbinary_unserialize (очень эффективный формат) или свой собственный, по желанию
    * можно использовать базу данных, начиная с sqlite (размещается в файле но работа с помощью sql), настоятельно рекомендую PDO - универсальная прослойка для работы с реляционными БД
    * есть еще всякие memcache, apcu, или к примеру самописный сервер данных (на сокетах и не только) но применимость - отдельный разговор

    p.s. есть иной подход, когда на php пишется полноценный веб сервер, принимающий http запросы (его напрямую редко пускают в интернет, обычно ставят еще какой-нибудь nginx для поддержки ssl и других тонкостей), в этом случае php приложение скорее всего - один инстанс (один процесс), который не завершается по завершению запроса, обрабатывает запросы клиентов асинхронно, в этом случае глобальные переменные будут доступны между запросами.
    Ответ написан
    3 комментария