Задать вопрос
  • Развертывание VPS из локально настроенного образа. Так вообще делают?

    @rPman
    Некоторые провайдеры предоставляют такую возможность, так как linux дистрибутивы изначально ориентированы не только на реальное железо но и на виртуальное, поддержка обычно хорошая. Единственное, это доступно только если используется виртуализация kvm/vmware/vbox/hyperv/... но не паравертуализация (lxc/virtuozzo/...)

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

    Совет, выбирай ядро с пометкой cloud/vps/kvm и т.п., а то универсальные ядра долго грузятся.

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

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

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

    @rPman
    Выводишь все карточки на php, но в style корневого div-а каждой ставишь им display:none, а скриптом на js в зависимости от фильтра пробегаешь по всем корневым div-ам каждой карточки и включаешь их отображение display:inline (тогда карточки будут располагаться друг за другом), можешь использовать display:block тогда один над другим будет (там еще от float зависит)

    Работа с элементами на javascript зависит от выбранного фреймворка, например в jquery ты можешь написать $('.имя_класса').each(function(){...}), а чтобы удобнее было фильтровать, заранее на php добавь каждому корневому тегу атрибуты со значениями по которым будешь проводить фильтрацию, например атрибут category а значения Шведский стол, другой атрибут curency а значения usd/rub/... тогда выбирая в фильтре значения в функции erach просто проверяешь сравниваешь значения атрибутов с выбранными на форме и соответственно включаешь и выключаешь их.

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

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

    @rPman
    Даже при использовании дорогих 3d сканеров (миллионы рублей), набежит ошибка в сантиметры, если ты будешь ходить туда сюда и собирать скан помещения.

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

    Существующего ИИ как я понимаю пока не достаточно чтобы это сделать, хотя неплохой вызов.

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

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

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

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

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

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

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

    Есть 2 основных метода, зависит от того как именно будет вестись исполнение сделок.

    Первый, децентрализованный - вы не обслуживаете стакан (только как информационный сервис) и предлагаете участникам исполнение выбранных ордеров участников на нужный объем, выступая гарантом escrow и возможно местом хранения балансов (т.е. клиенты выбирают встречный ордер, называют свой объем и биржа на этот объем исполняет ордер), и не важно что там ордера пересекаются по цене (т.е. 'стакан' в виде буквы X) и скорее всего у вас будет свой аффинированный с биржей маркетмейкер, который на привилегированных условиях иметь приоритетное право блокировать ордера и брать их на исполнение. Т.е. это будет некий бот, который запускает на исполнение встречные заявки по пересекающимся ценам а разницу в суммах берет себе, грубый пример у вас есть ордера продажи 1 по $5.1 и покупки 1 по $5.0, очевидно что если оба этих ордера исполнятся то возникает избыток на балансе (грубо говоря вы сначала продаете 1 биткоин получив $5.1 а затем покупаете по $5.0, в остатке $0.1).

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

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

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

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

    Второй способ, очень просто в реализации. Пишется за несколько дней, я для прикола, изучая websocket ReactPHP, делал ядро биржи, которая на симуляциях доходила до 10к сделок в секунду, там зависело от количества лимитных ордеров, которые затрагивают сделки и почти линейно замедляло, полагаю на C++ можно было бы сделать на пару порядков быстрее. Но такой прямой способ обслуживания балансов в оперативной памяти очень опасен для продакшен, например нужно помнить о единичных сбоях в памяти.
    Ответ написан
    Комментировать
  • Почему в этом коде при проверке слов с помощью оператора in в скобках он работает как надо, а без скобок по другому?

    @rPman
    Это не должно работать, or это логический оператор, т.е. ты буквально пытаешься сравнить строковые константы как логическое выражение которое true/false, а затем пытаешься результат сравнения найти в массиве с помощью in, который введённая строка (массив символов), хз что он там у тебя находит, но явно не то что ожидаешь.

    Уличная скобки, ты меняешь приоритет операций, и сначала у тебя отрабатывает in, с ближайшим словом, а затем or строки истинные, должно быть всегда true
    Ответ написан
    Комментировать
  • Как генерировать PDF документы из шаблонов?

    @rPman
    Pdf - худший формат для данной задачи.

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

    Настоятельно рекомендую изменить данные момент в вашем бизнес-процессе, и использовать в качестве шаблона какой-либо открытый офисный формат типа open document или по старинке html
    Ответ написан
    Комментировать
  • Как отправить фото с бэкенда на фронтенд вместе с другими данными?

    @rPman
    не стоит упаковывать бинарные данные с другими, делай два отдельных запроса, фото как файл, а метаданные как другой файл, сериализованым тем что тебе удобно, например текстовый JSON (поддерживается как nodejs так и браузером), JSON.stringify превратит объект в строку, а JSON.parse соберет из него объект
    Ответ написан
    1 комментарий
  • Как рандомизировать массив с сохранением рандомного порядка?

    @rPman
    Перемешивай массив с помощью shuffle, он использует какой то свой сид, который при запуске php сбрасывается, т.е. каждый раз одинаково

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

    @rPman
    В течение дня с помощью 3 курьеров нужно развести 20 коробок по 20 адресам из 4 точек. Например в рамках Питера.
    Для начала тебе нужно построить граф путей, где вершины - это 20 целевых адресов и 4 исходные точки, а вектора - это оценка (в худшем) времени пути между ними, причем как от складов до адресов так и между адресами. Это тут самая сложная задача, так как исходные данные только карты, где непонятно сколько времени ехать, есть ли зависимость от времени суток и нагруженности курьера.

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

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

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

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

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

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

    @rPman
    Выключить компьютер можно командой:
    * windows - shutdown /s /t 0 (где 0 это время, через которое произойдет выключение, за это время можно отменить)
    * linux - shutdown -h 0

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

    Можно собирать статистику ping за какой то интервал времени, и если сервер не отвечает, можно считать что связь оборвалась. Готовую программу на выбранном языке тебе может кто то напишет,
    spoiler
    советую для windows не выбирать cmd/bat, да и на powershell это будет многословно. Если что в любой windows старше winxp в поставке идет c#/js#/vbs# компилятор, а если копнуть дальше то windows scripting host (это javascript/vbasic) и того со времен win95, поэтому лучше выбирать эти полноценные языки.
    Ответ написан
    Комментировать
  • Насколько можно доверять функции сканирования дисков Read/Write test на Infrotrend GS1012R2?

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

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

    * scp (штатный механизм ssh) - самая простая настройка для сервера, наиболее надежный (встроенное шифрование и сжатие трафика), но нужны клиенты с поддержкой scp (все популярные файловые менеджеры умеют, типа far commander или total commander)
    Есть еще sftp, он немного отличается как более продвинутый (под linux есть fuse модуль для монтирования его в каталог), реализация идет штатно с ssh (ну или я привык что такие вещи в linux легко) так же поддерживается популярными клиентами работы с файлами

    * любые инструменты синхронизации, когда вместо доступа к файлам по какому либо протоколу, они копируются и синхронизируются автоматически таким образом что размещены на всех машинах где нужен доступ.
    Собственно все популярные централизованные системы типа dropbox/Google Drive/OneDrive и т.п. работают по этому принципу, но в довесок данные копируются еще и на сервера компании этого инструмента.
    Я рекомендую использовать открытый проект Syncthing - он не копирует файлы ни на какой сервер, и поддерживает любые ОС от windows до android (очень прикольно настраивать синхронизацию через промежуточное устройство типа смартфон, позволяющее синхронизировать файлы между закрытыми сетями)
    Ответ написан
    2 комментария
  • Как стримить без задержек 12-16 видеопотоков на одной странице?

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

    Т.е. прежде чем что то решать, нужно четко понять, что именно является узким местом. Убедись что у тебя процессор не на 100% нагружен. Оцени нагрузку на сеть.

    Варианты решения:
    * уменьшить битрейт, уменьшить разрешение видео, уменьшить fps видео - это поможет как с сетью так и нагрузкой на процессор
    * проверить наличие драйверов на видеокарту, бывает что идущие с операционной системой поддерживают ускорение на базовом уровне и его не хватает для декодирования 16 видео (это очень высокая нагрузка даже с низким разрешением видео)
    * установить более мощную видеокарту (кстати этот вриант потребует исследований)
    * поставить промежуточный сервер декодер (на базе того же ffmpeg, у него есть ограниченная поддержка gpu) который будет собирать твои видео в матрицу и выдавать единое видео, как частный случай не все 16 а по 4 видео. Дело в том что одно видео с высоким битрейтом и разрешением потребует меньше ресурсов чем несколько видео с суммарно таким же битрейтом и разрешением (если считать по количеству пикселов)... там зависимость нагрузки не линейная.
    Как частный случай, просто перекодируя поток из тяжелого высокоэффективного кодека в какой-нибудь mjpeg можно неплохо снять нагрузку с итоговой машины (советую поперебирать кодеки), но высоких fps такой подход не даст.
    Ответ написан
    2 комментария
  • Как выполнить копирование данных в каталог?

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

    Правильно, использовать ssh или специализированные протоколы и синхронизировать каталоги через них, вот на вскидку варианты:
    * scp, штатная утилита, работает через ssh, по сути это то же самое что cp только по ssh
    * rsync, продвинутая cp, может работать в т.ч. через ssh, умеет передавать дельту (но там вопрос про эффективность в быстрых сетях)
    * инкрементальные снапшоты btrfs, максимально эффективно позволяет получать и соответственно передавать дельту изменений в файловой системе (на уровне кластеров), скорость файловой системы не деградирует при использовании снапшотов, а в момент сбора дампа разницы диск не нагружен (все остальные способы сканируют каталоги и файлы чтобы выявить дельту)
    идеален для случаев если нужно синхронизировать огромное количество файлов либо огромные файлы.
    * кластерные/распределенные файловые системы, позволяют синхронизировать каталоги буквально один к одному в реальном времени (идеальны если нужно много читать и мало писать, типовая сетевая файловая система при чтении полезет к файлу в сеть, а кластерная - в локальную копию), есть нюансы и сложности. Например DRBD
    Ответ написан
    Комментировать
  • Хаотичное ухудшение производительности запроса - как определить причину?

    @rPman
    dml или ddl? обычно когда имеют в виду dml то говорят просто sql.

    запросы create/alter/drop могут менять или сбрасывать собираемую статистику, которая в свою очередь влияет на построение плана и итоговую скорость выполнения запросов

    Так же возможно каскадный запуск перекомпиляции связанных объектов в фоне (если я верно понимаю как это работает в oracle) что банально отнимает процессорное время и соответственно замедляет выполнение запросов
    Ответ написан
  • Есть ли свободный учебный симулятор простейшего компьютера с ассемблером?

    @rPman
    Почему бы не взять подмножество команд x86 и обучать ассемблеру в какой-нибудь IDE типа SASM? там и отладчик, и отображение регистров, и ввод вывод.
    Ответ написан