Задать вопрос
  • Как сменить фон рабочего стола?

    @rPman
    портативная версия Irfan Viewer умеет ставить фон рабочего стола, так же его умеет ставить firefox (правая кнопка на изображении)

    еще гуглится набор скриптов от BAT и WSH до питона
    https://superuser.com/questions/277805/how-do-i-se...
    Ответ написан
    Комментировать
  • Усилитель мобильного сигнала?

    @rPman
    Определись с радио-диапазоном, в котором тебе нужно усиление и приобрети соответствующую пассивную направленную антенну.

    2g: cdma/gprs (до 14 кбит) - www.cqham.ru/logoant.phtml , для edge антенны не очень гуглятся
    3g: CDMA2000 - тот же профиль но другие размеры dl2kq.de/ant/3-54.htm , для UMTS есть готовые (наверное у китайцев есть на все частоты)
    подбирать тщательно, антенна фиксированно усиливает только определенный диапазон
    рекомендуется не использовать каоксиал а размещать модем прямо с антенной
    ...

    Дальше ты должен знать направление до ближайшей вышки радиосвязи ОПСОСов и направлять антенну на нее

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

    @rPman
    Очевидно, что cron-стайл не решит твою задачу, что самое грустное, задача на столько простая, что решать ее сторонними инструментами и библиотеками - странно.

    Мне кажется мочь запилить свой time-task-execute сервис должен каждый программист, начинающий карьеру.

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

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

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

    Если платформа это предоставляет, читать ее документацию. Еще можно тупо попробовать скопировать сообщение в текстовый редактор без поддержки изображений, этот синтаксис сразу будет виден.
    Ответ написан
    Комментировать
  • Не запускается Windows 10 после установки диска ssd активным. Как исправить?

    @rPman
    что чтобы увеличить скорость работы системы, надо сделать SSD диск активным через Управление дисками
    либо тебя обманули либо ты не что то не понял.

    Это никак не влияет на производителность.

    Дальше диск не делают активным (активным делают его в биосе, т.е. с какого диска загружаться), делают активным раздел. Это фича старой технологии загрузки (в биосах она зовется legacy mbr), когда биос буквально запускает бинарный код из 0-го сектора указанного для загрузки диска, а тот продолжает загрузку с раздела, помеченного как активный.

    Скорее всего ты указал не тот раздел активным вот загрузка и сломалась. Восстанавливай, загрузившись с загрузочного компакт диска или usb с той же версией windows которая у тебя установлена и выбирай режим восстановления, там будут варианты от автоматического до ручного, если первый не поможет
    Ручное восстановление делать с помощью diskpart (утилита командной строки - эквивалент графического управления дисками) а так же Bootrec с ключами /fixboot потом /fixmbt и в догонку можно еще /RebuildBcd

    Есть некоторый шанс что ты
    вроде как даже сделал так, что винда была на SSD
    перенес систему но не перенес загрузчик (т.е он остался на hdd) на производительность это не влияет но если удалишь загрузочный раздел с hdd то загрузка прекратится.

    p.s. прежде чем дальше ломать систему, пытаясь ее восстановить, сделай сначала ее резервную копию, не жадничай, бакапы экономят время, деньги и нервные клетки
    скачай на флешку clonezilla либо делай то же самое, загрузившись с livecd linux (например xubuntu) clonezilla там как штатное приложение в репозитариях.
    Ответ написан
  • Почему rsync не работает на плохом канале?

    @rPman
    Проксируй, не используй rsync протокол напрямую.

    Используй к примеру ssh (путь для файлов указывай user@server:/path/).
    Или поэкспериментируй с разным vpn, например openvpn, попробуй к примеру udp подключение (на нестабильных каналах этот вариант может оказаться лучше, но не факт, все зависит от причин нестабильности).

    Я помню один раз настраивал (правда не довел до логичного конца, только как концепт) с помощью linux bonding и двух подключений openvpn через разные сервера (пути до них шли через разных провайдеров) к одной и той же машине (на этой машине был настроено два openvpn сервера A и B, а на другой vps-ке было настроено перенаправление портов на openvpn B), подключаясь таким образом к A и B openvpn серверам на клиенте и на сервере получались связанные tapA и tapB вирутальные ethernet устройства, на них поднимается bonding (рекомендую режимы active backup и broadcast), так же на сервере openvpn уменьшаешь таймауты.

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

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

    @rPman
    Доступные по цене это diy, вручную удаляют ИК фильтр, затем можно купить желаемый фильтр (вот он нормальный по цене будет дорогим) и вставить или без него но тогда только ночью норм качество будет (инфракрасный)
    Ответ написан
  • Какие есть хорошие уроки по OpenCL в C++?

    @rPman
    Большая часть проблем - это установка необходимых библиотек для поддержки opencl, даже на linux у меня были конфликты (решаемые) когда на машину одновременно устанавливались intel opencl, nvidia driver проприетарный и amd rocm

    начни от сюда

    Удостоверься что у тебя все установлено под твою видеокарту (не помогу с windows, там с интервалом раз в 3-4 года много что меняется именно в среде gpu-computing, не мудрено что все готовые сборки нейронных сетей типа SD или GPT для pytorch таскают с собой гигабайты готовых предустановленных окружений.
    ----------

    Про c++ враппер, год назад я пробовал устанавливать и использовать различные врапперы (я так понял они все на одном и том же основаны, так как вот такой изврат ...getInfo<CL_DEVICE_NAME>() сложно не заметить) и спотыкался на банальном запуске примеров из документации.

    Плюнул, и разобрался с https://man.opencl.org/ нагуглив любой минимальный пример, хоть этот древний

    Так вот главная рекомендация банальна и тупа - проверяй сообщение об ошибке каждого метода, сэкономишь тьму времени на отладке (а отладка cl грустная, так как все значения скрыты, структуры косвенные)
    Я написал себе макрос и хелпер
    /* макрос, помогающий обрабатывать ошибки opencl методов и автоматическое завершение работы при любой ошибке, с корректным освобождением ресурсов
      Использовать так CL_RET = clMethod....
      при возникновении ошибки сгенерирует исключение, в котором будет содержаться текущие имя файла и строка
     */
    /* если нужно в сообщении об ошибке сообщать имя файла исходников и номер строки */
    /**/#define CL_RET main_cl.error(__FILE__,__LINE__)
    /* если нужно в сообщении об ошибке сообщать имя файла исходников и номер строки но проигнорировать один код ошибки */
    /**/#define CL_RET_IGNORE(id) main_cl.error(__FILE__,__LINE__,id)
    /* код ошибки не будет содержать имени файла и строки */
    //**/#define CL_RET main_cl
    
    
    /* класс-обертка над стандартными операциями по инициализации OpenCL, обработка ошибок и т.п. */
    class CLHelper
    {
    	public:
    	/* хранится последнее значение кода ошибки метода, перед которым поставили макрос CL_RET */
    	cl_int ret;
    	/* последнее значение имни файла исходников места последнего вызова макроса CL_RET */
    	char* file=NULL;
    	/* последнее значение строчки файла исходников места последнего вызова макроса CL_RET */
    	int line;
    	cl_int ignore_ret;
    	/* код фиксации текущего имени файла и строки, вызывается в макросе CL_RET */
    	inline CLHelper& error(const char* _file,const int _line,cl_int _ignore_ret=-999999)
    	{
    		file=const_cast<char*>(_file);
    		line=_line;
    		ignore_ret=_ignore_ret;
    		return *this;
    	}
    	/* подмена оператора = для красивого использования CL_RET */
    	inline void operator=(cl_int _ret)
    	{
    		ret=_ret;
    		if(ret==CL_SUCCESS||(ignore_ret!=-999999&&ret==ignore_ret)) return;
    		//std::string msg=std::to_string("OpenCL error in ")+std::string(file)+":"+std::to_string(line);
    		std::string msg="OpenCL error ";
    		if(file!=NULL)
    		{
    			msg+="in ";
    			msg+=file;
    			msg+=":"+std::to_string(line)+" ret=";
    		}
    		msg+=ret_str(ret);
    		throw std::runtime_error(msg);
    	}
    ...
    }

    трансляция кода ошибки в строку
    кусок кода вывода подробного сообщения об ошибке компиляции .cl файла с kernel
    CL_RET_IGNORE(CL_BUILD_PROGRAM_FAILURE) = clBuildProgram(program, 1, &device_id, NULL, NULL, NULL);
        if(main_cl.ret==CL_BUILD_PROGRAM_FAILURE)
        {
        	size_t build_log_len;
        	CL_RET = clGetProgramBuildInfo(program, device_id, CL_PROGRAM_BUILD_LOG, 0, NULL, &build_log_len);
        	char buff_erro[build_log_len];
            CL_RET = clGetProgramBuildInfo(program, device_id, CL_PROGRAM_BUILD_LOG, build_log_len, buff_erro, NULL);
            std::cerr << buff_erro;
        	CL_RET = CL_BUILD_PROGRAM_FAILURE; // компиляция завершена с ошибкой но чтобы вывести лог компиляции выход отложили
        }


    Использовать так
    CL_RET = clGetPlatformIDs(MAX_PLATFORMS, platforms_id, &ret_num_platform);

    или так
    program = clCreateProgramWithSource(context, 1, (const char **)&cstr, (const size_t *)&source_size, &ret);
    CL_RET=ret;

    будет вызвано исключение с подробным сообщением об ошибке и его месте в коде

    соединять c-style код с c++ std не сложно, в случае с opencl тебе и так придется так или иначе выходить за рамки абстракций и опускаться до работы с буферами памяти... так зачем лишние прослойки
    Ответ написан
    Комментировать
  • Почему,после даже кратковременного обесточивания компьютера не срабатывает WOL?

    @rPman
    А он включен в BIOS? Например пробуждение компьютера ото сна сетевым пакетом может регулироваться этим сном и его правилами, а для выключенного нужен нативный wol, для которого одно время требовался специальный поводу от сетевой карты до материнки.
    Ответ написан
  • Ошибка 0xc0000001 при запуске Windows 10, как исправить?

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


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

    @rPman
    бэкапить диск, когда с него запущена система?
    Если речь про один и тот же раздел - то это бессмысленно и опасно, так как в бакап попадут неконсистентные данные, в 99% случаев это блокируется. Если разные разделы одного и того же диска - то проблем никаких нет, только скорость понизится.

    Хранить бакапы нужно НА ДРУГОМ физическом носителе, лучше другой компьютер и в идеале, компьютер, находящийся в другом доме/городе

    p.s. Создавать резервную копию системного диска могут очень небольшое количество софта. Для windows нужно использовать shadow copy, файлы будут доступны только как файлы, т.е. загрузочную копию так не создать. Точно помню что старая версия windows backup это умела. Обычно приложения для бакапа, работающие из системы плохо работают с системными файлами windows, т.е. если в момент восстановления ты попробуешь их скопировать, можно получить незагружаемую систему (я с таким сталкивался, то ли с правами что то неверное мутили, то ли с символическими ссылками ошибки были, но это было во времена win7, осадочек остался)

    p.p.s. настоятельно рекомендую для резервного копирования использовать clonezilla, загрузившись с usb/cdrom/другого носителя, так как работает она с диском на уровне раздела (при этом поддерживает все файловые системы и позволяет пропустить копирование не занятого места, что очень экономит время)
    spoiler
    один раз acronis меня уже кинул, когда бакап, созданный старой версией приложения не мог быть развернут новой версией (различия в версиях были значительными)
    Ответ написан
    1 комментарий
  • Как произвести группировку по последовательным повторам mysql?

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

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

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

    Если будет такое поле (id таблицы или сразу значение твоей второй колонки), то запрос, выдающий что тебе надо будет очень простым и отрабатывать очень быстро
    select date,val from table where val<>prev_val order by id


    p.s. иначе тебе придется на каждое значение искать его предыдущее вложенным запросом через order by limit или max/min limit что не очень быстро
    select date,val from table x where val<>(select val from table y where y.date<x.date order by id desc limit 1)

    спецы могут посоветовать красивее запрос через left join, я считаю нужно избегать таких случаев когда нужно искать соседнюю запись
    вот посмотри как я решал похожую задачу
    Ответ написан
    1 комментарий
  • Стоит ли лезть в изучение C++ для VR/AR?

    @rPman
    Знания c++ будет с любой точки зрения полезны!

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

    Т.е. изучив c++ тебе будет очень легко в других языках, а вот с# даст тебе знания только .net (там тоже куча языков но они managed, своя спицифика)
    Ответ написан
    Комментировать
  • Как правильно подключать файлы?

    @rPman
    #pragma once
    в начале файла предотвращает его повторную загрузку

    В c и c++ принято разделять описание своих типов и классов на заголовочный файл .h и собственно код .cpp
    Заголовочные файлы подключаешь с помощью #include "xxx.h", а вот файлы cpp компилируются отдельно в .o (.obj для майкрософтовского компилятора) объектные файлы и из этих объектных файлов линкер собирает итоговый exe-шник

    Все среды разработки делают сборку автоматически из твоих .cpp файлов, вызывая для каждого компилятор только когда они изменились и автоматически отслеживают взаимозависимости .h файлов (т.е. если два из 100 твоих файлов подключили xxx.h то при его измении будет пересобраны только эти два файла). Вручную эти зависимости описываются с помощью выбранной системы сборки, например make, там указываешь какой cpp файл от каких .h файлов зависит

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

    @rPman
    Твое текущее железо для твоего процессорного сокета практически наилучшее
    дальше только менять сразу материнка+процессор+память

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

    Я недавно за 17т.р. купил замену домашнему серверу, выбрав intel lga1700 сокет и самый дешевый процессор из адекватных Intel Pentium Gold-G7400 со встроенным видео (сейчас стоит примерно 8т.р.), почему lga1700 - потому что дает возможность в ближайшие 3-5 лет заапгрейдить почти топовый процессор для десктопов от интель на текущий момент (которые благодаря amd, спасибо им, цены по приспустили), а так как скорость роста производительности остановилась, современные решения могут быть актуальны много лет.
    spoiler
    Материнская плата MSI PRO H610M-E DDR4, Socket1700, Intel H610, mATX	7125р
    Процессор Intel Pentium Gold-G7400 Alder Lake-S, 2C/4T, 3700MHz 6Mb TDP-46Вт LGA1700	5775р
    Память DDR4 DIMM 16Gb, 3200MHz Mastero (ORD-OP-16G-3200-CL16)	3500р
    Кулер для процессора DeepCool GAMMAXX 200 V2, 100Вт (GAMMAXX200V2 1700 NATIVE)	1025 р
    (выбирал больше из того что было а не оптимальный)
    Ответ написан
    22 комментария
  • Как эффективно составить гистограмму слов (big data)?

    @rPman
    wc
    утилита командной строки, часть coreutils любого linux - в один поток считает количество строк/слов/символов в текстовых файлах


    разделение слов в файле с помощью xargs, сортировка sort, подсчет уникальных слов uniq -c
    cat file | xargs -n 1 | sort | uniq -c

    если файлы упакованы, распаковка запускается параллельно с помощью потоков (команда распаковки в stdout | wc )

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

    На нескольких нодах запускай команду сам.

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

    типа такого:
    for a in *.zst;do echo "zstd -d --stdout $a |(printf \"%s\\t\" $a;wc)";done | parallel -j 5

    данный код выводит по строчкам имя архива zstd со сжатым текстом и 3 числа, количество строк, слов и символов, параллельно запуская распаковку и подсчет символов в 5 потоков, утилизируя 12 ядер (12-gen intel) по максимуму посчитав 38гб несжатых (4.4гб сжатых) коротких json-файлов (построчно записаны в кучу файлов) за 121сек (узкое место тут распаковка)
    Ответ написан
    6 комментариев
  • Возможно ли прикрепить казахстанскую карту к русскому Paypal?

    @rPman
    Нужно будет пайпалу доказать что вы не живете в России, т.е. пройти верификацию (ее можно запросить через службу поддержки но если я верно понимаю лучше удалить старый аккаунт и создать новый), и, полагаю, любое подозрение по работе из россии (ip адреса например или даже использование vpn и прокси) могут дать повод для блокировки. Я читал что народ в наглую указывает российский паспорт но место проживания казахстан и все прокатывает... не уверен что это будет надежно в долгосрочной перспективе.
    Ответ написан
  • Какие контейнеры лучше выбрать?

    @rPman
    lxc, интегрируется в libvirt и работает с его GUI (наполнение вручную делать, например с помощью debootstrap)

    lxc и lxd работают на основе cgroups (формально lxd работает на основе lxc плюс дополнительная файловая система), если нужны снапшоты на lxc, переходи на файловую систему btrfs/zfs/xfs и пользуйся их снапшотами

    p.s. если еще linux user mode, это буквально запуск ядра linux и полноценной ОС как обычное приложение (не требует root) со всеми плюшками виртуализации (например можно использовать ядро другой версии, подключать модули, файловые системы и т.п.) при этом без использовании виртуализации (это тоже контейнеризация, но системные вызовы медленнее чем это у lxc, с другой стороны самая хорошая изоляция среди контейнерных ВМ)
    Ответ написан
    4 комментария
  • Как можно сделать виртуальную «флешку», которая будет отображаться в проводнике windows 10?

    @rPman
    Аналог linux-овму fusefs, но для windows - winfsp.dev
    Но он на c++!

    чтобы завести это на питоне, нужно писать прослойку, немного устаревшая статья но идея та же (в статье описаны обоа направления python -> c++ и c++ -> python)
    Ответ написан
    Комментировать