Задать вопрос
  • Как создать системный раздел EFI?

    @rPman
    А материнка умеет загружаться в режиме EFI?

    EFI раздел это раздел, с меткой EFI BOOT, с файловой системой FAT32, собственно больше ничего (есть еще требования к gpt таблице разделов но я не нашел информации что это обязательно, кажется EFI можно использовать и при старой dos таблице разделов).

    В linux grub2 умеет самостоятельно работать с EFI разделом (но не всегда сам его монтирует, т.е. можно вручную его перед запуском смонтировать в /boot/efi) но важное замечание, текущая установка linux, из которой запускается grub-setup или gru-install должна быть запущена в режиме EFI.

    Помимо того что grub прописывает efi загрузчик в EFI Boot, он еще делает запись в EFI биосе (доступ есть только если запущено в режиме EFI, а вот в legacy mbr доступа не будет), это так же можно сделать с помощью утилиты efobootmgr
    Ответ написан
    Комментировать
  • Каким образом и где можно разместить аудиофайл с расширением mp3 чтобы доступ на прослушивание к нему был, но возможность скачивания не была доступна?

    @rPman
    Браузеры поддерживают проигрывание DRM контента, это не дает 100% гарантию но создает некоторые трудности для скачивания
    p.s. я не нашел красивого примера, стандарты на это дело еще не стабилизировались

    Еще пример, так же не защищает но создает сложности - обфускация содержимого. Достаточно от сервера передавать 'испорченное' содержимое, в неизвестном формате, а на клиенте перед проигрыванием его исправлять. Это может быть к примеру тупое шифрование, пароль скрыть в обфусцированных исходниках и постоянно менять...

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

    Ну и само собой, даже DRM защищенный контент можно будет записать, запустив браузер в виртуальной машине.
    Ответ написан
    Комментировать
  • Какую архитектуру парсинга маркетплейса выбрать?

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

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

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

    Отсюда архитектура - отдельно дубовые парсеры-загрузчики (их можно размещать буквально где угодно, они получают команду на загрузку и молотят, выдавая json-чики пакетами в виде результата), отдельно узлы-обработчики, которые на каждый пакет данных от загрузчиков делает нужные запросы в базу данных (или заранее кеширует в памяти, но тут нужно считать, что дешевле - апгрейдить сервер базы данных или держать на дисках кеш-дампы запросов и обновлять их параллельно БД, в этом случае кстати БД остается как конечное хранилище и аналитики). Ну и про базу данных, они на запись медленные только если там индексы распиханы по максимуму, хороший способ, если загрузка в базу редкая (например раз в сутки длится час) то можно отключить на это время индексы, провести загрузку, вернуть индексы - это кратно ускоряет процесс ЗАГРУЗКИ но не проверки целостности и поиск данных, т.е. подходит именно когда анализ проводится не в БД.

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

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

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

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

    В зависимости от ОС и настроек, автомонтирование флешек может быть отсутствовать, так же путь к автомонтированию может быть разный. Обычно флешки монтируются в /media/имя_пользователя/метка_диска но вручную их можно смонтировать с помощью команды mount

    И главное, в linux должна быть установлена поддержка файловой системы, используемой на носителе. Например если там exfat то поддержку нужно устанавливать вручную (по лицензионным соображениям ее нельзя поставлять в готовом виде, лучи поноса отправлять майкрософту, которые уже на fat32 успели миллиарды наварить на отчислениях).
    Например установка поддержки exfat в ubuntu/mint/debian/...:
    sudo apt install exfat-fuse
    Ответ написан
    6 комментариев
  • Как вывести список всех компьютеров в пределах диапазона из Active Directory?

    @rPman
    Лучше использовать для этого штатные утилиты командной строки или скрипт powershell (код будет проще), например
    $ip = "192.168.1.1"
    
    # получить dns имя по ip
    [System.Net.Dns]::GetHostEntry($ip).HostName
    
    # получить операционную систему по ip
    # права у текущего пользователя должны быть достаточными
    $creds = Get-Credential
    
    Invoke-Command -ComputerName $ip -Credential $creds {
        Get-WmiObject -Class Win32_OperatingSystem | Select-Object Caption, Version
    }

    p.s. по уму wmi есть и для python но код точно будет многословным (попроси chatgpt он тебе нарисует или нагугли)
    p.s.
    wmi
    или ldap3
    Ответ написан
    Комментировать
  • Как найти endpoint у H2O GPT?

    @rPman
    вот же дока с примерами https://github.com/h2oai/h2ogpt/blob/main/docs/REA...
    Ответ написан
    Комментировать
  • Как предоставить приложению максимум ресурсов?

    @rPman
    Не получится, гуглится что эта утилита однопоточная, т.е. занимает одно ядро и на несколько не паралелится.
    С другой стороны, разве эта утилита не упирается в своей работе в возможности дисковых накопителей? т.е. ее тормоза могут быть обусловлены низкой скоростью дисков.
    Ответ написан
    3 комментария
  • Где PHP хранит кэш на "отдачу"?

    @rPman
    Отдает nextcloud, значит настройки его смотреть.

    Попробуй в /var/www/nextcloud/config/config.php (путь может немного другим быть, например home, смотри настройки веб сервера) и там настройка
    'tempdirectory' => '/tmp/nextcloudtemp',
    Ответ написан
  • Как в PHP использовать в родителе константу или статическую переменную из потомка?

    @rPman
    Имя_класса::имя_пременной
    Так же ключевое слово parent - имя предка, self - текущего класса
    например parent::CONST_NAME
    p.s. опс, не то.


    Чтобы уж ответить на вопрос, в php нет метода получения списка потомков класса, но есть функция get_declared_classes() - возвращает массив имен всех классов, и функция is_subclass_of("объект или имя класса","имя проверяемого класса") вернет true если первый класс является потомком второго. Так всех перебрав можно будет получить список потомков, ну а затем нужному по имени из переменной - $var_class_name::static_member и даже по имени мембера в переменной $var_class_name::$$static_member_name
    Ответ написан
  • Как лучше организовать хранение данных?

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

    Иногда стоит не усложнять систему. Пример реализации, которой я активно пользовался лет 10 назад - в ms visual studio используя winforms можно очень легко создавать интерфейс бд, там часть базы оформляется в виде реляционного слепка реальной базы в памяти, буквально кликая мышкой. Так вот объекты в памяти можно было сохранять и считывать из файла .xml. это было на столько удобно что для малых размеров база данных в принципе не нужна.
    Ответ написан
    Комментировать
  • Как удалить лишнее с БД mysql имея более 7000 id, которые удалять не надо?

    @rPman
    Тебе все ответили, тут два варианта - создавать в базе inmemory таблицу с одной колонкой и без индексов, и на ее основе уже делать
    DELETE FROM A WHERE A.id NOT IN (SELECT id FROM B);


    Либо написать скрипт, который выгрузит все id из базы, сравнит их (пока чисел не миллионы, это вообще не проблема) и сформирует список id которые нужно удалить (если всего 10к то их будет всего 3к), когда на десяток строк в любом языке программирования. Так как удаляются конкретные id то такой запрос будет работать быстрее чем delete where not in и возможно быстрее использования временной таблицы. Особых ограничений на количество id в where id in (...) я не нашел, если они есть то это проблема драйвера подключения к бд.

    Есть еще третий вариант, который потребует изменения всего проекта, но заложит неплохие возможности. В базе данных нужно определить флаг - deleted (boolean), который устанавливать true если запись нужно удалить, это может быть дополнительное поле в каждой таблице где это имеет смысл, либо отдельная таблица (это эффективнее, если удаленные записи долго не нужно хранить) с единственным полем id, куда будут складываться идентификаторы записей на удаление. Естественно все запросы проекта нужно будет модифицировать с учетом этого поля/таблицы, чтобы пропускались записи, помеченные на удаление. Реальное же удаление проводить в момент наименьшей нагрузки на сервер или по другому критерию (например удаленные записи можно хранить для использования, к примеру отчетности). У метода есть подводные камни - например уникальные индексы/ограничения на другие поля нужно так же переделывать на сдвоенные с флагом удаленности, чтобы допускались записи с тем же значением что и удаленные.
    Ответ написан
    1 комментарий
  • Какие пакеты лучше использовать для написания программы?

    @rPman
    Управление удаленным браузером - selenium или самому использовать механим управления браузером по сети (у firefox это marionette, у хромиум кажется через --remote-debugging-port свой, собственно драйвера selemium их и используют, унифицируя)
    Ответ написан
  • Комьютер работает не от всех розеток в квартире, почему так?

    @rPman
    Для начала открой документацию по материнской плате и смотри, что значат 5 писков (у разных вендоров разный порядок индикации звуком)

    Ищи другие различия. Если между сетью и компьютером был ИПБ (точнее если он line interactive но они сейчас все такие), то при недостаточных параметрах питания, компьютер бы запитывался от ИПБ и как минимум включался бы.

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

    @rPman
    Список юзеров получаем с бэкенда. Для этого нужно установить и запустить локально сервер.
    т.е. у тебя УЖЕ есть сервер и тебе его просто запустить, открываешь документацию по этому серверу и работаешь (ее должны были написать те кто делал этот сервер), либо, если документации нет, изучаешь весь код

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

    p.s. есть практика размещать все необходимое для запуска приложения в настройках пакета, тогда запуск будет что то типа:
    npm install
    npm build
    npm run-script start

    Т.е. install установит и обновит зависимости проекта, build запустит скрипты подготовки и оптимизации (например webpack), в общем что указано разработчиками, ну и запуск run-script start

    И конечно, если это сделать в каталоге проекта в терминале, то закрытие терминала все закроет автоматически, поэтому это нужно будет прописать в виде сервиса systemd или каким то другим способом, принятом в твоей ОС
    Ответ написан
    Комментировать
  • Возможно ли выгрузить часть слоёв в VRAM видеокарты AMD, если основная - NVIDIA?

    @rPman
    Да, но поддержку пилить придется самому.

    Например llama.cpp есть поддержка нескольких видеокарт, на сколько я знаю есть возможность с разными вендорами через opencl.

    Там есть библиотека ggml, чтобы свои сети пилить и даже конвертировать их их pytorch
    Ответ написан
    Комментировать
  • Какие лимиты в ChatGpt-4 за 20 долларов?

    @rPman
    Используй api, в документации кода готового достаточно, лимиты практически отсутствуют (там больше речь о непрерывной нагрузке) и оплатой по факту использования, минимальная оплата 5$ (иначе не будет доступа к gpt4), деньги на счёте будет год лежать до их траты (там оплачиваешь план, остатки сгорают через год)

    К сожалению голосовой ассистент по api недоступен. Так же не доступны агенты и плагины, включая поиск по сети.

    P.s. claude anthropic 32к контекст в бесплатной версии, несколько исходных файлов влезают в контекст, работает неплохо

    P.p.s. напоминаю даже gpt4 отвратительно работают с большим контекстом, пропуская информацию до 80% фактов по тестам.
    Это родовая болячка gpt из-за квадрата в трудоемкости и требованиям к памяти от размера контекста, их обучают по особому, что значительно понижает качество работы в таких условиях
    Ответ написан
    Комментировать
  • Есть ли разница втыкать приёмник радио канала для мышки в USB 2.0 или USB 3.0?

    @rPman
    Один момент, при покупке usb разветвителя (usb-hub) нужно найти, в каком режиме работают его порты STT или MTT (Single / Multiple Transaction Translator), если это будет STT то подключенное в хаб устройство с низкой скоростью и версией usb (например usb2) даже если хаб поддерживает usb3 версию, все остальные подключенные устройства перейдут в режим usb2, т.е. низкой скорости. Особенно обидно если подключить старую клавиатуру usb1, при этом скорость упадет до 1мбита.

    Первая же статья в гугле https://habr.com/ru/articles/430220/ (там есть про это часть)
    Ответ написан
    Комментировать
  • Как сделать globbing строки в php?

    @rPman
    Ответ - регулярные выражения, синтаксис чуть сложнее чем * и ? но возможности выше
    preg_replace для однобайтовых кодировок или mb_ereg_replace для любых.

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

    upd. совсем забыл, preg_replace с модификатором /u понимает utf8 строки
    Ответ написан
    4 комментария
  • Какую оперативную память лучше использовать для таких 3D редакторов как Blender и Unreal Enginie 5?

    @rPman
    ECC серверная обычно дороже, да еще и медленнее.
    Разница в скорости будет на грани погрешности 3-5%, и то только в специфических задачах
    Чтобы словить сбой на не ecc памяти десктопному пользователю нужно держать заполненной память на 100% и работать непрерывно годами.

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

    @rPman
    4pda основан на ip.board, все загружается без танцев с бубном, только осторожно, без авторизации получаются другие страницы чуть в ином формате. Вот пример кода на основе simple_html_dom:
    <?php
    include('simple_html_dom.php');
    
    // ссылка на первую страницу темы
    define('START_URL','https://4pda.to/forum/index.php?showtopic=1084129');
    // количество страниц &st= из ссылки » в навигаторе по страницам
    define('PAGES_CNT',580);
    
    @mkdir('data');
    
    for($i=0;$i<=PAGES_CNT;$i+=20)
    {
    	// формируем url
    	$url=START_URL.($i==0?'':'&st='.$i);
    	// имя кеш файла чтобы не загружать повторно
    	$cache_fn='data/'.md5(START_URL).'.'.$i.'.html';
    	if(!file_exists($cache_fn))
    	{
    		// Загружаем страницу
    		$data=file_get_contents($url);
    		// сохраняем страницу в кеше
    		file_put_contents($cache_fn,$data);
    		// пауза между запросами к серверу для защиты его от ddos
    		sleep(1);
    	} else
    	{
    		// читаем из кеша
    		$data=file_get_contents($cache_fn);
    	}
    
    	$html=str_get_html($data);
    	$num=0;
    	foreach($html->find('div[class]:not([class=""]') as $post)
    	{ // перебираем посты в теме
    		// пропускаем первый пост темы, он дублируется на каждой странице
    		if($num++==0) continue;
    		// выводим пост на экран
    		$post_html=$post->find('div.post_body',0)->text();
    		echo $post_html.PHP_EOL;
    	}
    	// вставляем разделитель между постами
    	echo '<hr/>'.PHP_EOL;
    	$html->clear();
    }
    ?>

    вернет на экран посты указанные в START_URL, мне лень было вычислять конец треда автоматически, бери количество постов вручную из навигатора постов.

    Страницы можешь вручную указать for($i=0;$i<=PAGES_CNT;$i+=20) вместо 0 - начальный (с шагом 20) и PAGES_CNT конечный пост.

    Вместо текстового представления $post_html=$post->find('div.post_body',0)->text(); можешь сложнее структуру сообщения анализировать, выявляя цитирования и к примеру исключая их из текста (они занимают большую часть всего, дублируя многократно информацию).

    Конкретно этот пример не влезет в контекстное окно бесплатного claude - это 70к токенов. Поэтому дели на куски.
    Ответ написан
    8 комментариев