Задать вопрос
  • Как сделать 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к токенов. Поэтому дели на куски.
    Ответ написан
  • Какую выбрать LLM для быстрого локального запуска?

    @rPman
    llama3-70b и Codestral 22B единственные открытые сетки, которые давали мне адекватный вариант на не простые задачи (я почти не трогал qwen и command r+ а они тоже хороши).

    Чтобы оценить требования памяти в зависимости от размера модели и ее квантизации, полистай сообщения этого бота, например вот для llama70b

    p.s. llama.cpp позволит разместить часть весов в GPU а часть в RAM, это имеет смысл если оперативной памяти чуть чуть не хватает, а квантизация уже на грани понижения качества, я так codestral 22b с квантизацией 5bit на 16gb запускал, указав 48 из 57 слоев на gpu с такими скоростями:
    llama_print_timings:        load time =    1997,65 ms
    llama_print_timings:      sample time =     790,28 ms /   256 runs   (    3,09 ms per token,   323,94 tokens per second)
    llama_print_timings: prompt eval time =   21593,29 ms /  7650 tokens (    2,82 ms per token,   354,28 tokens per second)
    llama_print_timings:        eval time =   33864,88 ms /   255 runs   (  132,80 ms per token,     7,53 tokens per second)
    llama_print_timings:       total time =   55938,24 ms /  7905 tokens
    Ответ написан
    Комментировать
  • Почему консоль всегда выводит, что я програл?

    @rPman
    c = rand() % 2;у тебя тут ошибка, c у тебя равно символу с кодом либо 0 либо 1,
    if (u == c)
    а сравниваешь с символом '0' либо '1', у них код 48 и 49 соответственно

    поэтому добавляй к c еще код символа '0' (он в ascii кодировке перед '1')
    c = rand() % 2+'0';
    p.s. из-за исторических наслоений, символ не считается несовместимым типом с числом, иначе бы ты увидел эту ошибку в сообщениях компилятора
    Ответ написан
    Комментировать
  • Почему торрент сам запускается даже с выключенной автозагрузкой?

    @rPman
    Sysinternails autoruns покрывает большую часть способов автозапуска
    Ответ написан
    Комментировать
  • Имеют ли VPN-провайдеры юридическое право не хранить логи пользователей?

    @rPman
    Где размещаешь vpn сервер, законы той страны и изучай.

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

    Это будет работать с любым протоколом, хоть vpn, хоть прокси, хоть ssh подключение (сложнее но реально, можно выявить типичные паттерны работы ssh socks port forwarding) и не важно, официальный ли ты vpn протокол используешь или маскируешь трафик под https сессию.

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

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

    @rPman
    посмотри, может ip whitelist есть в самом принтере?
    Либо поставь между принтером и сетью 'любой' дешевый роутер (т.е. управляемый) и разруливай ограничения либо NAT-ом либо подсетку сделай исключительно для принтера
    Ответ написан
  • Как лучше всего хранить данные для доступа к api?

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

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

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

    Так же существуют готовые централизованные инструменты по хранению и управлению такими данными (например централизованно отозвать доступ у машины, или сменить пароль и т.п.) типа azure key vault.
    Ответ написан
    Комментировать
  • Низкая скорость передачи данных после переноса дисков?

    @rPman
    Для начала выяснить что именно тормозит - диски или сеть. Для этого во время отсутствия нагрузки запустить какой-нибудь бенчмарк, для диска (crystaldiskinfo) и для сети (iperf) по отдельности.

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

    Если причина в дисках - начинать изучение с анализа SMART, затем проверить работоспособность порта контроллера (переключить диск в другой порт) и конечно сменить кабель SATA, они (а скорее всего разъемы) очень часто бывают причиной слабо объяснимых проблем с дисками.
    Ответ написан
    Комментировать
  • Есть ли аналоги ide типа phpstorn, pycharm, sublime для iPad?

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

    Иначе, искать облачные решения, например самый простой - арендуешь полноценную машину на vps, настраиваешь удаленный доступ (если windows - то rdp, если linux - то x2go) и работаешь.

    Формально, apple устройства подходят только для разработки в пределах своей инфраструктуры, используя xcode, т.е. ты не можешь без боли делать что то 'наружу'.

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

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

    В windows есть два способа:
    1. старый, постепенно ломаемый макйрософт - windows for work group, имеет смысл для маленьких сетей (кажется до 6 машин, точнее это ограничение одновременных подключений к одной машине), это значит логин и пароль на сервере (где настроена шара) и клиенте (кто подключает каталог, повторяю, сессия а не компьютер) должны совпадать, иначе будет запрошен логин пароль или будет отказано в подключении.
    2. домен контроллер, в этом случае оба компьютера должны быть подключены в один домен (или разные но с настройками доверия, там помню тьма особенностей), в этом случае права на доступ можно настраивать используя пользователей домена (сессия на клиенте так же должна быть на основе доменного пользователя а не локального)

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

    @rPman
    anchor навигация?

    Непрерывно опрашивай на setInterval значение location.href, и при его изменении вызывай свой метод, это сработает с гарантией где угодно но с лагом, т.е. если интервал будет недостаточно маленьким, и в его пределах пользователь нажмет дважды 'назад', то этот метод укажет только на одно событие... чтобы понять что произошло больше переходов, смотреть в history.length, само собой если пользователь успеет нажать не назад а вперед, или туда-сюда несколько раз, это так же не даст верную информацию, но мне кажется на столько отслеживать перемещение по истории пользователя обычно не требуется.
    Ответ написан
  • Как установить Win 10 поверх Win 7 (с сохранением файлов)?

    @rPman
    Нужно отличать - сохранение файлов и сохранение установленных программ.
    Файлы это просто файлы, их можно скопировать отдельно из резервной копии или вручную, загрузившись с любой livecd/liveusb системы, а затем, после установки 'на чистую' (без сохранения), вернуть файлы назад.

    С установленными приложениями сложнее, наиболее частая причина, по которым приложения не будут переноситься после штатного обновления - это установка не верных версий компонент (ты приложение ставил для win7 а затем запускаешь его на win10), отсутствие дополнительных компонент, плюс отсутствие системных компонент нужной версии (всякие .net sdk, vcredist,..).

    Правильный способ - после обновления операционной системы, последовательно для каждого установленного приложения запустить его установщик и выбрать modify/upgrade, иногда это автоматизируется (если установочный пакет - .msi, кстати часто его скрывают за самораспаковывающимся exe). И само собой читать требования к установке, возможно какие то компоненты придется ставить вручную.

    И еще - рекомендация по обновлению ОС. Делать это нужно не скачкообразно, не нужно перескакивать через промежуточные версии. Правильно - windows 7 -> windows 8 -> windows 10 (причем уже две или три значительно крупные ревизии прошли, рекомендую брать старую 8-летней давности windows 10 msdn, а там на нее автоматически приедут обновления, это кстати ОЧЕНЬ долгий процесс, занимающий сутки или больше)
    Ответ написан
    3 комментария
  • Возможно ли ускорить вывод 400+ услуг с ценами на одной странице?

    @rPman
    Я не работал с modx, документация говорит что это php+mysql.

    17 секунд на формирование всего 400 записей это необычно долго. С высокой вероятностью там происходит что то типа - на каждую запись выполняется сложный запрос вместо того, чтобы сделать все одним.
    Традиционно, в любом приложении, узкие места начинают искать с помощью профилирования - оценке времени выполнения разных мест в коде (как долго в сумме в какой функции идет выполнение) и sql запросов (можно средствами базы данных, а можно все тем же профилировщиком кода).
    Ключевые слова для гугла - php-spx, xhprof

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

    Почти наверняка можно данную задачу решить не средствами фреймворка modx, а напрямую, написав вручную sql запрос и сформировав страницу кодом на php, тем более изначально php это язык создания шаблонов.
    Сделали, загрузка примерно 1-2 сек
    вот тут наверняка этот запрос и сделали, почему бы его и не вставить напрямую в страницу вывода цен, а не формировать html капк кеш.
    Ответ написан
    Комментировать
  • Можем ли мы быть уверены в несуществовании в каждом компьютере "подпольных" программ?

    @rPman
    Гарантий никаких.
    Но, весь мир держится на 'авось' и 'неуловимом джо', иначе все развалится.

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

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

    p.p.s. начинать нужно с модулей pipi (pip python) и npmjs (nodejs), там такой садом и гомора, что за голову хватаешься
    Ответ написан
    3 комментария
  • Прием оплаты картами, но поступления на крипту?

    @rPman
    анонимный прием оплаты на сайте.
    ...
    покупатель оплачивает картой РФ/СБП
    ...
    сразу мне на криптовлюту.
    начиная с этого момента ты не сможешь дальше продвинуться, по факту это непреодолимая преграда, пока не будет обновлено законодательство (а оно не будет) или не изменится ситуация с изоляцией россии от глобальной финансовой системы (маловероятно в ближайшие годы)

    если убрать из списка требований Россия - то подобный функционал исторически предлагали крупнейшие криптовалютные биржи типа binance, гуглить cryptocurrency merchant.

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

    @rPman
    Попробуй посмотреть в /proc/$pid там куча файлов, описывающих процесс
    Ответ написан
    Комментировать
  • Как подключить айфон как IP камеру?

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

    p.s. возможно провайдер 3g/lte не позволяет подключиться к веб сервисам на iphone, потому что там стоит nat (это часто происходит, так как ipv4 не хватает на все мобильные), это не обойти естественными способами, так как провайдер часто запрещает простейший upnp (автонастройка перенаправления портов на роутере)
    Ответ написан
    Комментировать