Задать вопрос
  • Как скомпилировать Python 3.10 и IPMItool под efi?

    @rPman
    Тут есть ссылка на обсуждение почему python3 будет сложно сделать, но есть micropython
    Ответ написан
  • В чем может быть причина такого дисбаланса записи и чтения?

    @rPman
    140Тб записей это странно, еще более странно что утилита говорит что 96% Хорошо, когда как всего у накопителя заявлены 300Тб (т.е. должно быть ~50% исчерпания лимита записей), с некоторыми шансами CrystalDiskinfo глючит и не может у nvme корректно распознать этот предел (например неправильно умножает числа из SMART диска на размер блока). Обычно правильную информацию говорят официальные утилиты от производителя диска, типа этого.

    Если количество записей реальны - открой диспетчер задач (ctrl+shift+esc) и для начала понаблюдай за записями, там будет видно и общую статистику и по процессам. Так же можно запустить монитор ресурсов из панели управления... кажется там же можно настроить логирование, в крайнем случае это можно сделать с помощью Process Monitor

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

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

    На самом деле тут несколько проблем, каждая из которых решается разными способами:
    * сбои в железе, т.е. буквально смерть диска или флешки (нельзя на них работать, никак нельзя), в частых случаях это решают резервированием, спасибо для дисков существует RAID5, когда за счет добавление 1 диска к массиву (начиная с 3 дисков до 32 шт) обеспечивает работоспособность при потере любого 1 диска, а при добавлении 2-ух дисков, соответственно переживает потерю любых двух дисков.
    * сбои в электропитании - качественный бесперебойник и настройка на автоматическое сохранение работы. Система резервного электропитания - отдельный большой разговор и дешевым это не будет, в зависимости от того, какие бывают сбои, может оказаться что единственный вариант - дорогой online ups + дизельный генератор.
    Для рабочих windows и иногда и linux можно настроить hibernation по сигналу с UPS, это как минимум спасет не только файловую систему но и не сохраненную работу.
    Так же есть механизмы у систем виртуализации, если гостевая операционная система не умеет hibernation, то это сможет сделать сервер виртуальной машины (кажется любой)
    * сбои в софте и кривые руки пользователя - самый интересный сбой, когда по ошибке одним движением пользователь уничтожает важные данные, ошибка конфигурации отправляет базу в ноль или безвозвратно портит данные. На это тоже есть два решения, в обычном случае это регулярные бакапы, причем если есть база данных то можно сделать очень оперативный инкрементальный бакап прямо средствами БД (что то типа прерванной репликации например) и регулярные снапшоты (как еще одна форма бакапа, только не покидающая машину).
    И вот тут выбор файловой системы может сильно помочь, например cow fs типа btrfs или zfs умеют делать снапшоты бесплатно, без деградации скорости работы (до этого был lvm но его снапшоты кратно! замедляли запись, пока снапшот не удалишь), у windows ntfs тоже есть shadow copy но там какие то особенности есть, не делающие это чистым снапшотом, т.е. пользовательские файлы так резервируются а система не всегда, ну через нее делают бакап перед установкой обновлений.
    Можно настроить буквально поминутные снапшоты с удалением тех что старее часа/суток/... и фоновым переносом их на бакап сервер, т.е. это сочетание системы резервного регулярного и оперативного копирования
    Ответ написан
    Комментировать
  • Какие есть бесплатные переводчики (или же не особо дорогие) на python для казахского языка?

    @rPman
    Можешь запустить фейсбуковский переводчик локально Есть ли бесплатный api переводчика?
    Kaz->Cyr у них 50 попугаев (eng->rus - 56, rus->eng 61)

    в примере я указал модель всего 600м параметров, это самая маленькая из имеющихся но без проблем работает без GPU, можно использовать по больше
    Ответ написан
    Комментировать
  • Как запустить цикл с okhttp3 в фоновом режиме Android?

    @rPman
    тебе нужно создать фоновый сервис https://developer.android.com/training/run-backgro...
    Мои скилы устарели, плюс гугл похоже сильно последние пару лет перелопачивает способ разработки приложений для android и что лучше использовать и будут ли какие либо ограничения судить сложно, информация из гугла очень противоричивая

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

    С точки зрения длительной загрузки файла мне кажется WorkManager подходит лучше чем Service
    Ответ написан
  • Как обработать ошибку запуска порта?

    @rPman
    Зачем ты 7 раз запускаешь бота с одним и тем же портом?, слушать он сможет только один (точнее один на каждый локальный ip адрес).

    Чтобы ничего не выводилось пиши .on('error',()=>{}) но толку то от этого, оно в любом случае не сработает, это просто уберет вывод сообщения об ошибке
    Ответ написан
  • Тема связана с распространением и получением сигналов от wifi роутера?

    @rPman
    Стандарты на эту тему только появляются, гугли wifi indor navigation.

    Особого оборудования не требуется но нужна прошивка на роутере и спец софт на клиентах.

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

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

    Данное сообщение говорит что в системе нет драйверов например на USB или дисковый контроллер и дальше работать не будет.

    Есть следующие решения:
    * найти в биосе usb-cdrom режим (видел такой в паре материнок старых), в довесок, чтобы с гарантией, сделать копию диска простым копированием iso образа прямо в устройство флеш-накопителя (условно если он будет /dev/sdb вот в него и копируй с помощью dd), и пофиг какого этот диск размера (лишь бы было больше или равно размеру iso), этот метод кстати универсальный и позволяет загружать liveusb как на EFI так и на legacy mbr.

    * переключить систему в режим EFI или Legacy mbr, в зависимости от ситуации, драйвера могут использоваться разные в т.ч. из BIOS для режима EFI

    * Заранее разбить диск на два раздела (либо добавить в систему еще один диск) и чтобы с гарантией (это если будет еще проблема в обнаружении диска, т.е. установщик покажет пустой список) использовать SATA устройство, а в биосе переключить в режим IDE (драйвера для этого режима с гарантией есть в установщике), но не забыть позже установить драйвера на материнку и вернуть AHCI режим. Первый раздел использовать как целевой для установки а на второй, отформатировав его в fat32/ntfs/exfat, скопировать в корень содержимое установочного iso образа. Дело в том что установщик windows будет искать свои файлы в корне всех дисков системы, если не найдет их на загрузочном диске (не удивлюсь если эта фича поддерживается еще с тех времен, когда систему устанавливали с флопи-дисков)

    * если ничего не помогает, тогда соверши первую фазу установки (когда идет копирование файлов до перезагрузки) или даже всю, создав виртуальную машину в работающем linux (рекомендую qemu прямо из командной строки, ее проще новичку для данной задачи использовать) и прописав в ней весь используемый жесткий диск. К сожалению без дополнительных телодвижений это сработает только при использовании legacy mbr, так как для efi установщик должен еще прописать информацию об установленной системе в биосе, но это можно будет сделать позже средствами linux (у меня опыта нет, гугли, утилита efibootmgr)
    Ответ написан
    Комментировать
  • Как прочитать txt файл в телефоне android studio java?

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

    https://www.digitalocean.com/community/tutorials/a...
    Ответ написан
    3 комментария
  • Развертывание 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 точек, это ниочем.

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

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