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

    @rPman
    Строки - работники, колонки - критерии?
    В общем случае тебе нужно составить метрику, самая тупая - это расстояние в евклидовом пространстве до нулевой точки - т.е. квадратный корень из суммы квадратов значений (в твоем случае критериев)

    Если нужно сравнивать двух работников, то тогда квадратный корень из суммы квадратов разностей их критериев, но осторожно, эта метрика не транзитивна, т.е. если работник A лучше B, а B лучше C, то A не обязательно будет лучше C.

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

    Предполагается что критерии имеют одинаковый смысл - чем больше значение тем лучше, так же рост значимости - линейный, т.е. увеличение значения критерия в два раза и в четыре означает буквально улучшение в 2 раза и в 4 соответствено. Бывает, когда значение критерия обратное и не ограничено, т.е. чем меньше тем лучше, тогда его переворачивают 1/(X+1) в этом случае значение критерия станет на интервале 0-1 (правда не линейное но это более сложный разговор, к примеру экспоненту в линейный превращают логарифмом)

    Итого формула: Xi=sqrt(SUMj((Aj*Yij)^2))
    Где i - номер строки, j - номер колонки, Xi - значение метрики для i-го работника, Yij - значение критерия j для работника i, Aj - коэффициент значимости критерия j

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

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

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

    смотри FullChargeCapacity, а так же EstimatedChargeRemaining в процентах
    по скорости его уменьшения можешь оценить сколько ватт потратилось

    p.s. в linux так же информация estimated
    Ответ написан
    Комментировать
  • На чем лучше написать Desktop приложение?

    @rPman
    Нужно больше информации, что именно за приложение и какие из 'аспектов десктопности' ему нужны.

    Например, если нужно много формочек, к примеру для работы с данными в базе данных (наполнение, поиск, просмотр, анализ), без особой стилизации интерфейса, то я рекомендую (как бы я не ненавидел майкрософт) - microsoft visual studio + .net + WinForms. Запросы в базу данных лучше создавать в других инструментах (благо есть соответствующие ... студии). Есть разные фреймворки и среды разработки для данной задачи но такого удобного и эффективного (по затратам времени на разработку) лично я не видел. Благодаря некоторым усилиям сообщества и слабого противодействия майкрософт, такой код оказывается еще и кроссплатформенным, т.е. мало того что приложения можно запустить на win/linux/mac (с оговорками, особенно лицензионная чистота, например установщика приложения) так еще и сама среда позволяет создавать так же удобно приложения для веб (.net asp, но я это направление настоятельно не рекомендую). Что касается версии, то если изначально приложение писать для 3-ей версии .net фреймворка, то оно сможет запускаться даже на winxp (с оговорками можно 4-ую). Еще момент, про который многие забывают, приложения .net могут разрабатываться (и это поддерживается visual studio) не только на c# но и на .net managed аналогах как vb.net, c++.net, f# и даже python.net (но нужно помнить что это языки, синтаксически совместимые с оригиналом, но подключить какой то модуль без портирования и пересборки не получится). Есть недостатки, попробуй любого разработчика .net попросить решить проблему мерцающего контрола (например грид или ричедит), плюс это не самый шустрый фреймворк и clr виртуальная машина дает о себе знать а еще многословность как в java...

    Для c++ безоговорочный лидер рекомендаций - qt, кроссплатформенный и очень быстрый и удобный фреймворк (не только интерфейс). Конечно не получится лениво возекаться с мышкой как в ms vs.net но результат тоже будет хорошим.
    Ответ написан
    1 комментарий
  • Могу ли я как то получить список папок по айпи?

    @rPman
    Это дефолтный веб сервис apache для раздачи файлов а папках

    С ним умеет работать wget (например может пройтись по ссылкам и скачать список файлов с учётом exclude условий и ограничений по ссылке и количеству вложенностей переходов

    P.s. точно помню с таким сайтом умел работать far commander (win) но криво
    Ответ написан
    Комментировать
  • Как запретить Internet Explorer перенаправлять на Microsoft Edge?

    @rPman
    Нужно для этого отключить надстройку IEtoEdge BHO, в настройках IE отключение не доступно, но можно вручную удалить ключи, ссылающиеся на ie_to_edge_bho (там будут и для 64бита и для 32 бита), кажется 4 или 5 мест поиском находит (там по ситуации смотреть, класс нужно удалять не сам найденный ключ а его подуровень с именем - id класса) и перезагрузиться

    p.s. что же за нужда такая заставляет пользоваться IE на win10/11?
    Ответ написан
  • Как сделать из комптютера прокси для планшета?

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

    для гарантий что подключение идет через твою машину, используй vpn (настрой vpn сервер на своем ПК)

    p.s. если речь только о браузере, то советую установить firefox, и вручную в about:config настроить прокси
    Ответ написан
    Комментировать
  • Обновлять базу данными, затирая первые старые данные?

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

    Если нет связанных таблиц (что логично, твой id на самом деле не идентификатор, не вводи народ в заблуждение и назови по другому) в твоем случае скорее всего можно схитрить, можно key_id считать на лету, т.е. ключевое поле с autoincrement, но назови его по другому, например key_id_orig
    1+key_id_orig-min(key_id_orig)

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

    @rPman
    await asyncio.sleep(1.0 / MESSAGE_REPLY_RATE)
    нужно добавлять в тело цикла, после tasks.append(task), добавив await

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

    @rPman
    Работа с http запросами рекомендуется с помощью curl_xxx смотри там куча примеров, мало того для GET запросов вообще ничего не надо и простой file_get_contents('http://xxxx вернет ответ

    Работа со строками, если ты определяешь, что вернется в ответ на запрос, то делай это не в таком виде как ты предложил а используй какую-нибудь стандартную сериализацию, настоятельно рекомендую json, для ее работы в php есть методы json_encode/json_decode

    Тогда строки будут легко превращаться в объекты/массивы и с ними будет легко работать
    Ответ написан
  • Как сделать WebSocket (точнее wss) сниффер?

    @rPman
    html приложение - значит браузер.

    Для начала developer console по f12, вкладка networks, мониторит любую сетевую активность веб приложения и позволяет сохранить весь сеанс и весь трафик в .har файл (у него json формат), в подавляющем большинстве случаев этого достаточно для проведения анализа. Иногда хватает просто посмотреть активность в этой вкладке чтобы разобраться.

    Так же, ты можешь написать плагин/использовать готовый типа tempermonkey или просто инжектить свой код через браузерную консоль, который будет подменять класс websocket и методы его работы на свои, добавив любую логику, выглядит это примерно так

    var ws_send=Websocket.send;
    Websocket.send=function(data){console.log(data);return ws_send(data);}
    Ответ написан
  • Какой из способов создания оффлайн биткоин-кошелька самый безопасный?

    @rPman
    Это очень сложный вопрос и на него нельзя ответить коротко.

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

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

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

    В первую очередь машина.
    К оборудованию, на котором у тебя будут храниться деньги и с которого будет вестись управление ими (отправляться транзакции и генерироваться адреса) не должно быть доступа как минимум не надежных людей. Т.е. друзья/подруги, знакомые, любовники и прочее прочее как минимум не должны иметь неконтролируемый доступ. Чтобы установить дешевый кейлогер (который может собрать меньше сотни баксов средний программист-железячник) и подключить его в разрыв usb провода или прямо в клавиатуру, большого времени не надо (а уж просто вставить миниатюрный переходник usb-usb и через него переподключить клавиатуру требуется пара секунд)... а дел натворить такой кейлогер (как опция, с удаленным управлением) может много, от просто записывания всех нажатых кнопок для выявления паролей до ввода команд установки трояна на компьютер (его код можно ввести буквально в блокноте).
    Не рекомендую беспроводные клавиатуры и мыши, возможно bluetooth более надежными выглядят но много ли из них позволяют сменить пинкод авторизации?

    Во вторую очередь приложения:
    Не пользуйся кошельком на рядовой машине, с низкими требованиями к безопасности, на которой ты скачиваешь из интернета случайные приложения/расширения к браузеру, играешь игры с торрентов, запускаешь кряки и прочее прочее.
    В дешевом виде - можно загружаться со специально подготовленной флешки/внешнего диска (можно как linux так и windows настроить) где ничего кроме необходимых для работы приложений стоять не должно - браузер, расширения для работы, кошелек и все. Все должно быть установлено из доверенных источников и регулярно обновляться. Кстати стратегия обновлений подразумевает что обновления устанавливаются с небольшим лагом, так как есть практика (именно в криптоэкономике) когда свежевыпущенный релиз кошелька содержит критическую уязвимость, и если не приводивший к кражам но к потерям монет (помню было что то с lightning network).
    Это диск не должен использоваться в обычное время, так как вирусы давно умеют заражать сторонние флешки даже с чужие ос через бутсектор и даже efi прошивки (да достаточно параметры загрузки ос заменить)

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

    Теперь про кошелек
    для bitcoin настоятельно рекомендую electrum, параноики могут остановиться на bitcoin-core, в режиме pruned он занимает считанные несколько гигабайт. А вообще есть неплохой мастер выбора кошелька

    Seed фразу для генерации нужно генерировать только случайной (никаких удобно запоминающихся фраз и красивых стишков, все эти вещи контролируются и деньги воруются, читал про это, много людей на этом прогорело). Хранить фразу в нескольких местах одновременно легкодоступных (чтобы в момент большого П, представь например пожар или землятрясение, его можно было восстановить) и непонятных для злоумышленника. Это самый сложный момент для большинства и именно на неверном понимании проблемы люди теряют и будут терять свои деньги в будущем. Я видел людей, которые хранили свою сид фразу в текстовом файле на десктопе, я знаю что люди записывают сид на бумажке и складывают в ящик стола/сейф, к которому имеет кто то доступ кроме них. Записать сид фразу в файл в облачном хранилище без шифрования своим паролем и алгоритмом тоже не рекомендую. Использовать облачные клавиатуры на android устройствах для ввода seed фразы тоже нельзя (был пример когда какой то кошелек это не учел и какой то разработчик, имеющий доступ к дампам гугловской клавиатуры, украл монеты). Помним, что windows логирует все нажатые клавиши и отправляет их на сервер. Помним что если вы пользуетесь проприетарным софтом - это уже повод задуматься, кто еще стоит у вас 'за спиной'. Мало того, если пользуетесь открытым софтом но загружаете готовые бинарники - то ситуация точно такая же, да может с меньшими шансами на получить проблему, но не ненулевая и эта проблема не решаема, с философской точки зрения обнулить шансы невозможно.

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

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

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

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

    @rPman
    удостоверься что $trainings[1] действительно содержит побайтово "pump", причем очень часто символы могут совпадать визуально но не значением, например русская 'Р' и английская 'P'.

    выведи обе сравниваемые строки с помощью bin2hex
    Ответ написан
  • Что сделать, чтобы оператор связи не перепродал твою SIM карту?

    @rPman
    Теория, если подписаться на услугу с абонентской платой, хоть 1р в сутки, то пока деньги не закончатся, номер не заберут
    Ответ написан
    Комментировать
  • Почему файфокс отваливается по поиску днс, если к сайту обращаешься по ip?

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

    если у тебя не установлена поддержка https на твоем сайте, указывай конкретный протокол http:// перед ip адресом, так как скорее всего он пытается подключиться сразу по https и не может
    Ответ написан
  • Как узнать сколько виртуальных машин можно поднять?

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

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

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

    Советую провести эксперимент с использованием kvm и kolibrios.org например на 12-ядерном 12-gen интеле, сотня экземпляров работает без проблем но с постоянной нагрузкой в 900% (все виртуалки тупо показывают рабочий стол и там ничего не происходит)
    Ответ написан
    Комментировать
  • Можно ли установить антивирус таким образом, чтобы он срабатывал перед брандмауэром?

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

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

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

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

    Ты не можешь менять порядок работы антивирусного пакета сеть/файлы потому что это идеологически разные вещи, фаервол стоит до по определению и не может быть после.
    Ответ написан
    Комментировать
  • Как запустить программу с GUI на гостевой машине в VirtualBox?

    @rPman
    Безрамочный режим? у virtual box есть 'режим интеграции' (в гостевой ОС должны быть установлены virtual box additionals), в этом режиме все меню и окно virtualbox будут скрыты

    К сожалению они все еще будут показаны пока идет загрузка ОС, но можно попробовать схитрить и запускать в скрытом режиме, а затем через какое то время его показывать, я не нашел как это сделать из командной строки, но если кликнуть в интерфейсе на машину она будет показана, значит команда есть. Если машину, находящуюся в режиме headless сделать savestate а затем ее снова startvm, то она выйдет из режима headless, это конечно криво но работоспособно.

    Гостевое приложение будет работать как хост приложение, пока пользователь не нажмет системные кнопки типа ctrl+esc или alt+tab (это кстати меняется), так же при попытке переместить окно будет виден след фона гостевой ОС
    Ответ написан
  • Как с помощью Python записать "внутренний" звук компьютера?

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

    Иначе средства еще есть (OBS как то звуки записывает) но сомневаюсь что этот функционал доступен из python.
    Ответ написан
    Комментировать
  • Как сделать обновление данных в реальном времени в шаблоне html на django?

    @rPman
    Есть два основных направления
    * устаревший, но не требующий javascript на клиенте - это разделение страницы на фреймы (iframe и frame) таким образом, чтобы изменяющиеся части попадали на свой фрейм
    в этом случае будет мигать не вся страница а только изменяющаяся часть, и вообще то браузеры прекрасно это обрабатывают, даже курсор в формах остается на старом месте
    Не рекомендую этот подход, он устарел и имеет смысл только если действительно нужно разрабатывать сайт для условий отключенного javascript (например tor/i2p сети).
    Очень много логики можно реализовать на основе css, язык там уже на столько сложен и многофункционален что простые вещи типа отображение и смокрытие элементов на основе кликов - обычное дело.
    Совет, чтобы мерцание не было видно, оптимизируйте ответ бакэнда таким образом чтобы ответ выдавался по времени быстрее некоторого порога (при его превышении страница будет мерцать)

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

    Собирать на стороне клиента страницу можно по разному:

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

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

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

    Обновления со стороны сервера можно получать двумя способами
    - периодическими опросами (генерирует квадратичную нагрузку на сервер при увеличении одновременно работающих пользователей) но очень простой в реализации
    - воспользоваться websocket/events, эти технологии специально созданы для того чтобы сервер мог оперативно сообщить какую то информацию клиентам без постоянных опросов и лишней нагрузке на сервер, но требует поднятие websocket сервера, удерживающего открытые соединения, для тех кто привык к http rest подходу с cgi короткоживущими приложениями, это может быть сложно, но результат того стоит
    Ответ написан
    Комментировать
  • Слияние разделов диска на разных физических ssd?

    @rPman
    Да можешь расширить место ntfs раздела, уменьшив разделы с linux, если там достаточно свободного места. Рекомендую делать это с загрузочного диска linux с помощью например gparted. Настоятельно рекомендую перед этим сначала отключить гибернацию на windows машине, так как при ее наличии система ускоряет свою загрузку с ее помощью даже когда ты ее не используешь, и это может создать проблемы при работе из linux с диском c:.

    Красиво объединить два раздела на разных дисках в один в windows можно только при использовании его software raid 0, для этого диски должны быть с GPT разметкой и разделы должны быть равного размера, кстати сделать это с системным диском на лету не получится, нужно будет грузиться в режим восстановления (с установочного диска), пример инструкции (там raid mirror, но идея та же)

    В некоторых случаях можно не делать единый raid а создать два разных диска и вручную перенести объемные каталоги (именно каталоги, не файлы по отдельности) на другой диск, создав для этих каталогов символические ссылки на изначальном месте, если не трогать системные каталоги c:\windows то все будет работать (можно и там кое что перенести, но можно получить тыкву). Символические ссылки удобно создавать в far commander, кнопка alt+f6 интерфейс как копирование.
    Ответ написан
    Комментировать