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

    @rPman
    Связывай письма не по теме а по хидерам в письмах: In-Reply-To, References и не стандартный майкрософтовский Thread-Index, по крайней мере так было раньше, маловероятно что что то еще добавилось
    Ответ написан
    Комментировать
  • Какая конфигурация RAM лучше для работы в Photoshop?

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

    в твоем случае разницу заметно можно будет на синтетических тестах и может быть очень небольшом количестве задач (и работе с БОЛЬШИМИ изображениями)

    НО только при условии что оперативной памяти для твоих задач в принципе не хватает! (мне кажется 8Гб это очень мало)
    Ответ написан
    Комментировать
  • Как реализовать поиск похожих изображений?

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

    Гугли задачу - image annotation
    с помощью нейронных сетей (именно эта технология сейчас бурно развивается в разрезе работы с фото и изображениями)

    добавление в поисковую базу изображения должно начинаться с его анализа и получения списка тегов, объектов, которые нейронная сеть может на нем найти, и уже после ищешь по этим ключевым словам
    Ответ написан
  • Может кто-то посоветовать книги для создания блокчейна?

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

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

    p.s. по теме вопроса,
    как идёт переключение с одной ветки на другую
    в зависимости от консенсуса, например для PoW - количество энергии, которая была затрачена на создание ветки, а у bitcoin это определяется через сложность, которая меняется только раз в 2 тысячи блоков а значит можно просто брать ветвь с наибольшим номером блока (количество), а если одинаковое количество - брать тот блок, что пришел в ноду первым (вообще нода сама может выбирать, какой блок использовать в данном случае)
    Ответ написан
  • Блочное выполнение кода?

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

    внутри же самой функции функционал разделять придется if-ами
    Ответ написан
  • Какой VPN выбрать в условиях санкций?

    @rPman
    Топаешь на lowendstock.com, выбираешь себе ЛЮБОЙ сервер с ценами от 2$ в год, почти все позволяют проводить оплату в криптовалюте (используй какие-нибудь dogecoin или любой другой дешевый мусор, чтобы не платить комиссию в биткоине или эфире в пару баксов)

    Затем, ничего не настраивая на сервере (максимум беспарольную авторизацию ssh), подключаешься к нему по ssh с ключом -D1080 (настройка тунеля - dynamic в putty) и получаешь локальный socks5 прокси без авторизации через удаленный сервер, прописываешь его в браузере localhost 1080 и все (я советую чтобы весь свой трафик не пускать через удаленный прокси, использовать foxy proxy либо настроить два отдельных профиля браузера и вручную выбирать когда пользоваться прокси а когда нет)

    ssh из коробки умеет и vpn, там есть свои ограничения (так как там tun устройство а не tap) и скорее всего windows будет не просто (ни разу не пробовал)

    p.s. дешевые vps-ки могут быть медленными, так как могут шарить один медленный сетевой канал между тесятками или даже сотнями таких же дешевых впсок, так же могут быть ограничения на скорость на подключение ssh если один ipv4 используется для нескольких машин 'хостера реселера', советую переходить тгда на ipv6 либо городить reverse ssh connection с перенаправлением портов (у себя дома запускаешь ssh сервер и настраиваешь удаленнюу машину на подключение к твоему серверу с перенаправлениями портов)
    Ответ написан
    2 комментария
  • Где лучше хранить массив объектов? 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
    Ответ написан