Задать вопрос
  • Где лучше хранить массив объектов? json или бд?

    @rPman
    Множественный одновременный доступ к данным - однозначно выбор ограничивается базами данных с поддержкой транзакций (есть исключения но лучше о них не думать), так как в тегах есть sql то наверное под БД понимается она? то да, лучше используй sql, там 99% проблем решены либо предоставлены инструменты для их решения а главное это правильный подход к разработке

    лично я бы не рекомендовал начинающему работать с nosql базами типа mongodb, они хоть и поддерживают транзакции но правильно их использовать может только опытный человек понимающий что к чему
    Ответ написан
    4 комментария
  • Чем объединить разнобойные диски с репликацией данных?

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

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

    зеркало же на btrfs создавать относительно надежно.

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

    Сейчас у меня такого зоопарка нет, массив собираю на основе 3тб дисков, но все равно добавляю их не целиком, а поделив их емкость на 3 части и сделав несколько файловых систем (по 1тб так чтобы можно было добавить к примеру 1тб диск или наоборот, добавить к массиву 4тб диск не пересобирая весь массив), так же я отказался от raid5 btrfs, использую mdadm, но это больше ради перестраховки
    Ответ написан
    2 комментария
  • Есть ли возможность писать standalone-приложения c GUI для Ubuntu Desktop на PHP или JS/Vue - как?

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

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

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

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

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

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

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

    @rPman
    Проблема терминологии, термин 'участник' неправильно изначально определен и создает кучу неоднозначностей.

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

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

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

    p.s. есть еще разработчики, чей код (если) майнеры принимают безоговорочно, в этом случае разработчики самые главные и могут все что угодно (повторяю - согласие майнеров в данном случае требуется все равно).
    Например чтобы нарушить провозглашенное правило первого 'цецентрализованного контракта на блокчейне' DAO в сети ethereum - 'код это закон', разработчики ethereum внесли соответствующий фикс а майнеры молча поддержали, заблокировав адреса одного из пользователей (который обнаружил уязвимость в коде и собирался присвоить монеты себе), так появился ethereum classic (в котором блокировки нет), точнее если праивльно формулировать, идеологически верный эфир переименовали в ethereum classic а новый измененный блокчейн стали называть ethereum.
    Ответ написан
    2 комментария
  • Создать JSON index для mysql 8?

    @rPman
    смотри
    CREATE INDEX id_employees_index ( (JSON_VALUE(visits, '$.id' RETURNING UNSIGNED)) )
    Ответ написан
  • Как правильно построить логику приложения?

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

    А дальше все просто, храни этот идентификатор рядом с данными в базе и в момент записи проверяй уникальность именно по нему

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

    @rPman
    одним запросом не получится, мало того тебе нужно мини программа чтобы получить желаемое, на bash сложнее чем на чем то удобнее (php/js/...)
    нужно получить список релизов выбранного репозитария, взять первую ссылку и ее уже загружать
    в твоем примере чтобы получить список в формате json:
    curl -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/adoptium/temurin8-binaries/releases?per_page=1

    тут параметр per_page=1 чтобы выдало только один релиз - последний, если убрать, будет выдано до 30 штук и можно постранично догружать

    в ответе json, берешь нужную ссылку [x].assets[y].browser_download_url
    где x - номер в списке версий релиза а y - номер в списке файлов

    само собой среди файлов ищи по имени нужный
    Ответ написан
  • Зловред в UEFI bios от мастера?

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

    с legasy boot mbr размещение такого трояна проще,

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

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

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


    Поэтому, у тебя есть следующие варианты по защите своей информации (в мире криптовалют информация = деньги):
    1. Ты физически защищаешь сервер от доступа злоумышленника и шифруешь данные на случай если доступ все же они получат
      Этот путь подразумевает буквально, сервер в сейфе, а для обслуживания к нему катается физически надежный человек, почти все датацентры предоставляют закрытые защищенные помещения для этого. Этот способ самый простой для реализации но самый дорогой.
    2. Обфусцируешь доступ к информации
      Организуешь всю систему так, чтобы получив доступ злоумышленнику потребовалось бы заметное время понять как именно нужно добраться до критичной информации и главное, расставляешь ловушки, сигнализирующие о том что сервер скомпроментировал, тогда ты уже со своей надежной машины переводишь монеты с горячего кошелька, останавливаешь сервис и разбираешься.

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

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


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

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

    собственно это два места куда девается память - external memory та часть что доступна например из total commander или при подключении смартфона проводом к компьютеру и приватная память приложения

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

    @rPman
    с вероятностью 99% - драйвера были установлены вручную, после этого с очередным обновлением приехало обновление ядра и initramfs приехал без модулей драйверов (по уму если ставить драйвера из репозитария, с обновлением ядра они должны корректно переустанавливаться, но драйвера с сайта nvidia этого делать не умеют либо делают не всегда)

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

    @rPman
    попробуй добавить в командную строку браузера --profile-directory="Profile 1", где "profile 1" имя профиля, а точнее подкаталога где он будет сохраняться

    на каждый браузер создавай свой IWebDriver
    Ответ написан
  • Что может случиться после перехода по вредоносной ссылке?

    @rPman
    * деанонимизация, как минимум сайт узнает ваш ip адрес (а из него примерные географические координаты), очень часто об этом забывают пользователи telegram и других анонимных чатов
    * спам через уведомления, сайты запрашивают разрешение на прием уведомлений (иногда циклически, пока не нажмешь да) и через некоторое время у вас будут всплывающие окна с картинками (реклама)
    * атака уязвимых веб сервисов где вы авторизованы - click jacking (вслепую заставлять нажимать кнопки на авторизованном сайте, рисуя его со 100% прозрачностью в iframe, пододвигая под курсор пользователя), cross site scripting (выполнять действия на сайтах вызывая напрямую там запросы)
    * есть опасность доступа к буферу обмена, дело в том что по стандарту, браузер не имеет прямого доступа к буферу, пока пользователь не совершит действие на сайте (клик мышкой), заставить пользователя это сделать не сложно, а содержимое буфера будет у злонамеренного сайта, а что там у вас в буфере бывает - иногда очень интересно
    * фишинг - подсовывать визуальную копию других сервисов, требовать авторизацию и таким образом выуживать логин пароль
    * многие люди разрешают (поведение браузеров по умолчанию) автоматическую загрузку файлов в каталог загрузки, злонамеренный сайт может подсунуть туда легитимное приложение, зараженное трояном, в надежде что пользователь когда-нибудь запустит его, увидев в папке загрузки (там всегда бардак и никто не запоминает откуда что скачали), на самом деле это одно из самых опасных действий, так как переводит операции из браузерной песочницы в операционную систему, а там уязвимости опаснее
    ...
    Ответ написан
    1 комментарий
  • Программа для сетевого доступа к файлам (аналог Netlook), как реализовать?

    @rPman
    это netlook? читаем описание:
    Поддержка трех протоколов: SMB, FTP и HTTP.

    SMB - это майкрософтовский протокол доступа к файлам по сети в локальных сетях с машинами с windows, в linux поддержка этого протокола обеспечена с помощью samba и соответствующих библиотек. В терминах этой сети share (шара) - это опубликованный каталог на машине (расшарить) или сервере

    на windows для работы с файлами по сети не требуется дополнительных библиотек, и все функции работы с файлами принимают \\имя_сервера\имя_шары\путь\файл
    на linux придется пользоваться библиотеками либо монтировать шару на какой-либо каталог (smbmount или файловая система cifs)

    Есть универсальная библиотека и утилита curl, поддерживает десятки протоколов, включая указанные выше само собой, можно пользоваться ей.

    Есть одна проблема, ключевая, получение списка машин в сети и списка шар на каждой. В зависимости от языка программирования и ОС будут свои нюансы.
    на c++ с использованием win32 api - используй это, ну и пример с поиском всех шар в сети
    Ответ написан
    Комментировать
  • Ноутбук выключается сам по себе, что делать?

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


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

    и само собой проведи типовые действия по восстановлению системы пройдись антивирусником потом под администратором sfc/scannow
    Ответ написан
    Комментировать
  • На каком языке программирования Meta Platforms (Facebook) создаёт метавселенную?

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

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

    то что в 'эту игру' (я про навешай потребителю лапши побольше) хотят играть другие ничего не меняет, просто смени место приложение вопросов на другую компанию
    Ответ написан
    4 комментария
  • Как с помощью Dism просканировать папку Windows которая лежит на диске D?

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

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

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

    @rPman
    тут несколько подходов, я трогал каждый из них и все они имеют право на существования
    1. оставь как есть, я рекомендую, пусть будет 100500 таблиц справочников (если проблем с именами нет ну и отлично), fk-индексы все это свяжут а инструменты анализа базы данных помогут с этим работать (автоматические query builder с мышевозекательным интерфейсом) и база будет сама следить за тем что идентификаторы справочников не противоречивы
    недостатков я не могу придумать, кроме может быть сильно разросшейся структуры, когда то давно я слышал что некоторые базы данных при увеличении количества таблиц начинают хуже работать но как я понимаю это если их будет десятки тысяч а не десятки и сотни.. может быть резервное копирование такой базы или ее репликация будет проходить чуть медленнее или еще хуже, организационно репликация может быть настроена на не рассылку ddl модификаций, в этом случае создание нового справочника будет задавать работу еще и админам, что нежелательно.

    2. противоположный, использование одной таблицы key-value для нескольких разнородных справочников (id, value, table_name), в 99% случаев можно использовать один сиквенс (одну последовательность идентификаторов), вам же не обязательно чтобы разные справочники начинали счет своих строк с одного и того же числа 1.
    Недостаток - база данных теперь не сможет контролировать что вы используете непротиворечивый идентификатор (можно в запись одного справочника указать номер из другого), хотя несуществующий так же нельзя будет указать (и будут работать delete cascade), так же удобной автогенерации sql не будет. Структура будет проще, так же интерфейс редактирования таких справочников может быть один вместо кучи форм и добавлять новые справочники будет сильно проще (хотя с точки зрения разработки нет особой разницы, один insert ты написал или create table перед этим)

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

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