Задать вопрос
  • Архитектура сервиса обработки задач [PHP]?

    @rPman
    асинхронности в PHP нет
    Если основная причина того что обработчик событий не успевает - в том что он долго:
    * отправляет сетевой запрос (отправка sms или почта)
    * просто таймеры, например запросы сетевые отправлять нужно с интервалами
    * работа с файлами (асинхронно будет быстрее)
    то на это вполне существуют асинхронные фреймворки, например очень мощный ReactPHP, у него очень хорошая база, большое коммунти и мне кажется на любой чих найдется библиотека.

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

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

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

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

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

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

    В итоге, любая задача будет запущена в виде процесса ОС, в linux это делается с помощью bash ... & а в windows - например start /min. Сам процесс обработки очередей будет занят сном, чтением списка процессов и проверкой pid уже запущенных, на это не требуется никаких особых ресурсов (при необходимости очередью может рулить этот процесс, буквально вместо базы данных слушать сокеты и принимать заявки на исполнение, в phpreact для этого все готово, даже слабые машины могут легко тянуть десятки тысяч запросов, я эксприментировал с websocket)

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

    @rPman
    Для установки, начиная с 26 api (android 8) приложение должно иметь право REQUEST_INSTALL_PACKAGES.
    Устанавливать приложение нужно с помощью Intent.ACTION_INSTALL_PACKAGE (до api 29 т.е. до 10 андроида)или PackageInstaller API.

    p.s. за обход этого гугл делает атата, например запретили так делать (открывать apk дефолтным просмотрщиком как ты хочешь) разработчикам Total Commander под угрозой выкидывания из гуглстора
    https://www.ghisler.com/android.htm
    Removed all functions to install apk files manually by request from Google.


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

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

    Покажи что выдают
    fdisk -l /dev/vda
    pvdisplay -m
    lvdisplay -m

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

    Если файловая система ext2..4 то достаточно прописать resize2fs (причем кажется оно давно умеет это делать на лету без отмонтирования диска)
    Ответ написан
    Комментировать
  • Распаковка массива, когда ее нет?

    @rPman
    array_map('xo', $str);
    array_map вызывает функцию xo для каждого элемента массива $str

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

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

    @rPman
    Считать нужно количество байт в имени а не символов.

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

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

    Строки с именами нужно хранить в базе а файлы именовать чем то более нейтральным - например хеш в hex записи или числовой идентификатор
    Ответ написан
    Комментировать
  • Позволяет ли Royalty Free лицензия использовать объект в коммерческом использовании?

    @rPman
    вот и прочитал бы эту лицензию
    Royalty Free License

    Royalty Free License allows you to use the product without the need to pay royalties or other license fees for multiple uses, per volume sold, or some time period of use or sales. Products published with this license may not be sold, given, or assigned to another person or entity in the form it is downloaded from the site, but can be used in your commercial projects multiple times after paying for it just once.

    This is, however, a non-exclusive license and the product remains the property of a seller for further distribution. Please, refer to legally binding General Terms and Conditions to learn more about Royalty Free License, other types of licenses and general rules applicable to all products.

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

    @rPman
    bsc основан на эфире, поэтому практически все инструкции и библиотеки подойдут

    формально можно воспользоваться официальной нодой https://github.com/bnb-chain/node (будет кушать место и ресурсы) там и примеры есть как с ней работать
    Ответ написан
    Комментировать
  • Будет ли работать ОЗУ в буке от Acer?

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

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

    производители ноутбуков любят на сайте писать разное нехорошее, но в реальности все грустнее, одни и те же модели могут комплектоваться разными материнками! узнать про которые можно только разобрав железо (может dmi что-нибудь скажет но маловероятно), на одних лимит один, на других другой, производитель гарантирует тот лимит что написал, остальное как повезет.
    Ответ написан
  • Хватит ли гигабайт для работы с Davinci Resolve?

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

    @rPman
    оба делаете mtr (winmtr) чего-нибудь не далекого, пусть и сайт dom.ru

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

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

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

    @rPman
    hdmi (dvi-i) передать можно будет и на 50 метров (если есть лишние 20 тысяч рублей)

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

    для 10-20 метров хватит обычных usb кабелей и usb-хаба

    p.s. настоятельно рекомендую не связываться с перекодированием видео (всякие over ethernet, wifi и т.п.), будет лаг, будет понижение качества (на квадратики разваливаться будет)
    Ответ написан
    Комментировать
  • Облачная СУБД для чайника?

    @rPman
    Если сумеешь внятно и с разумными доводами ответить - зачем тебе именно облачное решение, как бы ты это не понимал, то тогда пользуйся, иначе лучше:
    * арендуй vps-ку с ценами от 3.5$ в год (лучше что то от 3$ в месяц, памяти будет по больше)
    * установи туда любую открытую/бесплатную базу данных mysql/postgres/...
    * установи локально открытый/бесплатный GUI для баз данных, например devart dba studio express (по уму тебе хватит любой GUI с поддержкой построителя запросов)
    * установи локально условно бесплатный ms visual studio community (лучше не последнюю версию) и создавай приложения на win forms для своей базы данных на столько просто, что мне кажется для мелких проектов не превзойденно.
    Благодаря майкрософтовской экосистеме работа с ее продуктами будет почти бесшовна (тут тебе и эксель, и доступ к старой ms access, и огромное комунити).
    При должном старании кстати .net приложения будут кроссплатформенными, кросс-языковыми (вон даже на python.net можно писать) и достаточно шутрыми (экосистема уровня java, может даже круче).
    p.s. веб бакэнд на visual studio писать грустно, точнее результат будет требовать windows server, это обходится но уже не просто а значит при выборе на чем писать здесь и сейчас быстро просто не подходит.
    Ответ написан
    Комментировать
  • Как сделать автоматическую дополняемую страницу?

    @rPman
    Правильно - websocket

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

    Требуется на сервере установить (реализовать в коде) websocket server, благодаря готовым библиотекам это очень просто, гуглить к примеру ReactPHP websocket (реакт - асинхронный фреймворк, добавляет асинхронные фичи, за которые полюбили nodejs), на нем вообще можно реализовать полноценный веб сервер (но nginx все равно рекомендуется ставить на выходе в мир как прокси) которые и обычные http rest запросы примет и websocket соединения подержит, да еще и раз в 10000 быстрее будет (я про сравнение типовых подходов без особых оптимизаций и кешировании), ведь приложение в этом случае не закрывается на каждый запрос а значит многое можно держать в памяти как обычные переменные (а не 100500 прослоек вида мемкеш)

    p.s. есть еще устаревшая long pooling технология, когда вместо websocket открывается обычный http rest запрос, но на сервере он не закрывается сразу, периодически выдавая в поток допустим 1 символ пробела (крутя в цикле банальный sleep и проверку базы данных) чтобы по таймауту не закрылся, а по появлению на сервере нужных данных, отправлять их как обычно тем же json-ом. Клиент же сразу как этот запрос завершается должен тут же его снова отправить. Этот подход не потребует что то менять на сервере но считается быдлокодом.
    Ответ написан
    Комментировать
  • Не загружается нужная Windows 10?

    @rPman
    Скорее всего был удален загрузочный раздел windows, на котором в т.ч. лежат EFI файлы и файлы режима восстановления.

    Исправляется средствами восстановления с установочного компакт диска/usb, вот первая же статья из гугла по этому вопросу

    после этого grub придется переустановить.

    p.s. не совмещай на одном диске загрузчики от разных ОС, windows имеет неприятную привычку лезть куда не следует с очередным обновлением, это было, это есть и нет никаких предпосылок что они исправятся в будущем. linux загрузчик можно разместить абсолютно где угодно, от карты памяти или cdrom до pxe загрузчика в сети.
    Ответ написан
    2 комментария
  • Ссылки заперт вставки на другом сайте?

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

    Вариантов реализации много, например

    - ссылка из ?a=xxx&b=yyy&... преобразуется в ?a=XXXX, где XXX идентификатор, выдаваемый и сохраняемый в базе с датой и исходной строкой ?a=xxx&b=yyy&, соответственно в роутере проводишь обратное преобразование по идентификатору из базы. Ссылки удалять из базы со временем (добавь туда дату смерти и при запросе ее сравнивай с текущей).

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

    - видел смешные реализации типа к ссылке добавить текущий таймстамп и игнорировать слишком старые, сам понимаешь такие легко обнаружить и подделать.
    Ответ написан
    1 комментарий
  • Возможно ли восстановить данные с SSD после форматирования?

    @rPman
    trim может не вызываться в ту же секунду, но операционная система может это делать в фоне через какое то время.

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

    p.s. на сколько я знаю mkfs в linux делает trim по умолчанию, но вот про windows... требуется исследование.
    Ответ написан
    1 комментарий
  • Отследить пополнение Bitcoin кошелька?

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

    bitcoin-core умеет это делать, если добавить требуемые адреса в кошелек (можно даже только публичные адреса), тогда баланс можно запросить rpc запросом

    p.s. есть ключ командной строки ноды, позволяющей запускать пользовательское приложение на каждый новый блок, и даже появление транзакции кошелька в мемпуле, кажется -notify.
    Там еще добавили новый протокол, ZeroMQ
    Ответ написан
    4 комментария
  • Не работает проверка на число в массиве/GET?

    @rPman
    $_GET возвращают только строки и массивы, а is_integer проверяет тип переменной, а не ее значение.

    Чтобы проверить по значению, есть is_numeric, для строк "1" или " -0.123" оно будет true но "1-ая" уже false
    Ответ написан
    Комментировать
  • Может ли администратор сервера Vault прочитать секреты другой команды?

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

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

    Теперь по вопросу. Есть ли у них готовые инструменты для администраторов/модераторов - маловероятно, но судя по тому сколько грязного белья Маск выкатывает по твиттеру, чем другие площадки 'хуже'?
    Ответ написан
    Комментировать
  • Где можно скачать интересные расширения для dreamweaver?

    @rPman
    Разве этот инструмент не считается сообществом чем то устаревшим.

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

    Советую, беги от этого пока не поздно :)
    Ответ написан
    Комментировать