Задать вопрос
  • Как решить задачу, на оптимальную нагрузку курьера доставки?

    @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? там и отладчик, и отображение регистров, и ввод вывод.
    Ответ написан
  • Почему некорректно выводятся символы utf-8 в linux?

    @rPman
    , ccs=UTFxxx это придумка Майкрософт с целью диверсии на стандарты (часть из плана по монополизации мира, успешного).

    В стандарте c++ есть методы конвертации из одной кодировки в другую std::convert....
    Ответ написан
    Комментировать
  • Как настроить общий доступ для разных пользователей?

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

    Поэтому возможна ситуация, когда ты выдаешь права на шару, но забываешь выдать права на каталог и наоборот
    Ответ написан
    Комментировать
  • Что использовать взамен TeamViewer напрямую без доступа в интернет?

    @rPman
    Rustdesk

    Учти, с твоим процессором, vnc-основанные системы удаленного доступа должны тормозить, у них принцип работы таков, что они сканируют весь экран, сжимают его и транслируют

    Steam remote/Rustdesk и некоторые проприетарные реализации vnc работают хитрее, через драйвер в системе и оптимизируют, но работают нормально только при наличии шустрой gpu

    Так что лучше пользуйся rdp
    Ответ написан
    Комментировать
  • Процесс загрузки ОС на виртуальную машину не работает застряв на установке. Что делать чтобы продолжить?

    @rPman
    У меня все работает.
    Захожу на сайт Parrot OS, выбираю загрузки, Security Edition, Torrents, версия для VirtualBox,.. скачивается .ova файл, выбираю в интерфейсе VirtualBox в меню импорт машины, выбираю скачанный файл, импортирую, запускаю... все работает, все дополнения уже установлены...

    На каком шаге у тебя не так?
    Хост система linux, версия virtualbox 7.0
    Ответ написан
    1 комментарий
  • Можно ли написать скрипт/автотест с подсчетом действий на странице?

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

    Свой javascript скрипт выглядеть будет так - ищем нужный эелемент (например document.querySelector('css-selector') и к нему вызываем .click() или что тебе нужно (можно смотреть текст .innerText или так же искать querySelector....) а чтобы между действиями была пауза, используем setTimeout. Если нужно собирать информацию, ее можно складывать в localStorage/web storage либо http запросами отправлять на свой сервер (осторожно, если страница https то и твой сервер тоже должен быть https, так же в браузере должны быть разрешены CORS)
    Ответ написан
    Комментировать
  • Как ограничить количество запросов на отправку письма активации не записывая нечего в базу данные?

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

    Так же добавить к ссылке хеш 'от нее плюс секретную соль', или используй ассиметричное ее шифрование, чтобы не дать ее взломать
    Ответ написан
  • Как запретить настройку расширений в Chrome?

    @rPman
    Скачиваешь расширение .crx (это zip архив с файлами расширения) либо делаешь это напрямую в каталоге chromium/Default/Extensions/ocgpenflpmgnfapjedencafcfakcekcd/3.5.3_0/

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

    Код там без обфускации и минимизации, с комментариями, думаю справитесь, делов на несколько минут
    Ответ написан
    4 комментария
  • Перевести число в слово?

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

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

    @rPman
    У тебя используется прокси с авторизацией?
    посмотри тут
    Ответ написан
    Комментировать