Задать вопрос
  • Как передать переменные/аргументы из python в dll? И можно ли это осуществить?

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

    https://habr.com/ru/post/466499/
    Ответ написан
    4 комментария
  • Самый простой способ сделать домашний VPN сервер?

    @rPman
    windows server штатно имеет поддержку vpn pptp или l2tp и да, есть роутеры с поддержкой vpn (гуглится первый попавшийся мануал)
    dyndns и аналоги отлично решают проблему не статичного ip
    Ответ написан
    Комментировать
  • Рефакторинг кода. Как оптимизировать количество if?

    @rPman
    Вместо if в таких случаях используют switch case.

    Альтернатива - определи map с ключом твои сравниваемые значения и значением делегат Func или экземпляр класса с виртуальным методом. Но что бы ты не делал, синтаксически это не добавит тебе простоты, а просто переместит в другое место определение кода и сравниваемое значение.

    Есть еще препроцессор #if или даже собственный кодогенератор, иногда оно оправдано.

    Городить что то сложнее switch нужно, когда логика, стоящая внутри кода около каждого из вариантов значения, может быть свернута в общий единый код или наоборот, он весь сводится к коротким инструкциям,красиво смотрящимся в виде анонимных функций, которые неплохо смотрятся в виде констант иннициализатора map
    Ответ написан
    Комментировать
  • Как вырезать компоненты windows?

    @rPman
    Сделать кастомную сборку на 1гб и вырезать только защитник - это две разные задачи и у них кардинально разные способы решения.

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

    p.s. У кастомных сборок есть один главный недостаток, мешающих использовать их на постоянной основе как основная система - при очередном обновлении в систему вернутся и телеметрия, и метро-приложения, и one-drive со скайпом и прочее прочее, причем бывает все возвращается постепенно, что то сразу, а что то ждет крупного обновления.

    А без обновлений система сейчас - мина замедленного действия.
    Ответ написан
    1 комментарий
  • Как увеличить/уменьшить разные числа с одинаковой скоростью?

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

    текущее значение = стартовое_значение_переменной + (конечное_значение_переменной - стартовое_значение_переменной)*(разница между текущим временем и начальным в секундах/длина всего интервала в секундах)
    Ответ написан
    Комментировать
  • Как защитить контент от парсинга с помощью Nginx?

    @rPman
    Основная защита от парсинга - только при доступе к данным по авторизации и установка лимитов на данные (объем, доступный пользователю либо за какой то период времени, например сутки/месяц).

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

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

    Можно поставить 'палки в колеса', сделав этот процесс сложнее (и дороже), в основном это запутывание/шифрование данных, доступных напрямую (по api) с бакэнда и обфускация кода, его преобразования в видимый пользователю контент, чтобы классические (дешевые) инструменты не работали. Как всегда стоимость защиты (затрат на разработку) должна быть сравнима затрат граберов на получение данных (обычно им проще).
    К сожалению вместе с контент-грабером, в заблуждение будут введены роботы поисковых систем, ведь их основная работа - грабить контент.
    spoiler
    * api не должен быть простым и интуитивно понятным, идентификаторы могут вообще не быть постоянными (их можно преобразовывать на бакэнде на основе данных в сессии)
    * код javascipt, например получения ссылки на объект должен быть нетривиальным, т.е. чтобы получить следующую ссылку на требуемый граберу объект, потребовалось бы использовать сам браузер (а не простенький скрипт парсер html)
    * верстка может быть непостоянной, изменяющиеся, простые гуляющие наименования классов и идентификаторов уже могут создать кучу проблем (я такое встречал), а уж постоянное изменение структуры должно совсем запудрить голову даже опытным граберам (не встречал)
    * шрифт может не являться правильным (видимые символы могут не соответствовать их кодам), при этом генерируемый каждый раз новый под конкретную сессию пользователя. Простая подстановка, сильно усложнит (но не сделает невозможной) получение данных через буфер или document.innerText в консоли браузера, оставив граберу только вариант распознавание экрана скринридером (а не тривиальная верстка потребует от пользователя сложную настройку и автоматизацию и эти инструменты)
    * типовые javascript методы браузера должны быть замещены на 'неправильно работающие', чтобы граберу пришлось использовать внешние скрипты а не простой инжект javascript (обычно это сильно упрощает).
    Ответ написан
    3 комментария
  • Как хранить большие JSON массивы, которые постоянно обновляются (API)?

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

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

    А сами данные, в формате, получаемом от озона нужны в совместимом формате (не нужна ли агрегация данных с нескольких запросов?)?

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

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

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

    p.s. я воспринимаю хранение в файлах как использование nosql база данных, тем более что это очень даже быстро, и даже если хранение данных в режиме много файлов в одной записи

    p.p.s. хранение файлов в php формате (var_export) и подключение их include может оказаться самым быстрым способом из всех возможных, для readonly 'баз данных' (json или serialize медленнее в полтора два раза).
    upd. мне тут подсказали что есть еще более быстрый сериализатор php - igbinary и входит в поставку того же debian/ubuntu
    Ответ написан
    Комментировать
  • Как сделать, чтобы телеграм-бот не отвечал на групповые фото?

    @rPman
    Запоминай время последнего фото, и если текущее время и предыдущее отличаются меньше чем на секунду, все пропускать и не слать сообщение
    Ответ написан
    Комментировать
  • Возможно ли узнать реальный IP сервера защищенным CloudFalre?

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

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

    @rPman
    Не пользуйся крон, это худший способ запуска кода 'как можно чаще'.

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

    Этот скрипт запускать, создав простейший сервис
    Ответ написан
    Комментировать
  • Странные вещи с сетью на ноутбуке, как исправить?

    @rPman
    Если остальные машины в сети получают ip по dhcp, то логично, что наступает коллизия, одинаковые адреса и обе машины теряют сеть, переткнуть кабель и адрес выдают новый, до следующей коллизии
    Ответ написан
  • Почему долгий запрос delete к таблице сильно тормозит запросы insert к другим таблицам?

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

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

    @rPman
    В windows идет встроенный кинотеатр - приложение Кино и ТВ

    Что тебе нужно от кинотеатра то? сам процесс просмотра видео - это выбор видеоплеера (рекомендую media player classic, настраивается все от поспроцессинга до кнопок и интерфейса), процесс выбора фильма - это начинается от способа наполнения своей библиотеки, как хранить, как описывать, в 99% случаев штатный проводник (windows explorer), включив миниатюры и дав файлам фильмов адекватные названия, и поиском по f3 - будет более чем достаточен.
    Ответ написан
    Комментировать
  • Как воспроизвести Flash в приложении?

    @rPman
    Чужое exe приложение - никак, там все зависит от того как именно они ролики проигрывают.

    Текущую дату на прошлое менял?
    Ответ написан
    3 комментария
  • Как сделать цикл с setInterval который запускался и останавливался через каждые 10 секунд?

    @rPman
    Ты вызываешь count, запускающую новый setInterval рекурсивно , сразу как срабатывает тик интервала, т.е. с каждым новым тиком количество интервалов у тебя увеличивается, лимиты ресурсов у браузера заканчиваются и вот ошибка.

    setInterval должен быть запущен однократно.

    Код в примере и задача в вопросе отличаются, что нужно то?
    Если исходить из задачи, нужно создать setTimeout, который через 10 секунд запустит setinterval с 1 секундным шагом, который уже в свою очередь будет вызывать твой принт и только его
    Ответ написан
    1 комментарий
  • Расхождение ip адресов?

    @rPman
    Если исключить ротуер из сети и воткнуть шнурок провайдера сразу к пк то так же все работает, правда тестировал 1 раз.
    Лучше тестируй, сутками
    если подтвердится - то это однозначно докажет что проблема в роутере

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

    @rPman
    Вся перефирия уже давно работает через логические прослойки. Напрямую к контактам наверное только к LPT есть доступ, и то там прослоек дофига, просто для совместимости устройство такое в операционной системе есть (в windows например пиши/читай прямо в lpt0 файл).

    напрямую к контактам data PCI, в теории, там напрямую доступны, спецификации открытые (почти), покупай доступ, читай изучай..

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

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

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

    В догонку, драйвера, вирусы и т.п. проверяй. Надеюсь ты не майнишь фоном?
    Ответ написан
  • Как вывести Tether из кошелька blockchain.com, не имея Ether?

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

    Осторожно, обычная комиссия дефи в эфире - 40$-80$ (перевод примерно 10$, можно дождаться когда падает до 2$), любая покупка подразумевает поход либо к частнику (вопросы доверия, но у тебя только такой вариант разумен) либо к биржам, у которых есть минимальные лимиты вывода и ее большие комиссии за вывод (бинанс легко потребует 17$).

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

    @rPman
    В вопросе сказано 'автоподключение', это значит в коде нет желания писать где то connect или аналогичную ему строку иннициализации.

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

    И вот тут возникает вопрос о месте хранения настроек. Если для всего проекта предполагается одна база данных с одним одномоментным подключением, то значит настройки должны храниться глобально (в подавляющем большинстве случаев это отдельный подключаемый файл config.php с инициализацией констант в define) либо в конфигурационном файле, десериализаторов которых пруд пруди, используй хоть .ini (parse_ini_file) хоть .json хоть что угодно.

    Я пользовался разок определением констант в виде статичных мемберов класса, подключаемых прямо внутри определения класса с помощью include (синтаксически это красивее define и не требует городить громоздкие уникальные имена)

    Так же возможна ситуация, когда вообще нет глобального объекта для работы с базой данных, точнее когда этот объект никто не удерживает кроме 'его самого', а доступ к нему организован через функцию, например:
    function db()
    {
      static $db=false;
      // до появления static у функций можно было хранить и запрашивать объект у самого класса статичным методом
      if(!$db) $db=new Database();
      return $db;
    }
    
    ....
    
    db()->query(...)
    в этом случае подключение к базе будет сделано в момент первого доступа к ней, что иногда даже полезно
    Ответ написан
    Комментировать