Задать вопрос
  • На чем и как написать универсальный web сервер?

    @rPman
    web api на запись файлов и перезапуск служб.
    уверен что для этого нужно использовать СИ?

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

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

    Скорее всего будешь запускать что то типа sudo service служба restart, само собой, настроив права доступа на запуск

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

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

    проведи тест, настрой в смартфоне отключение экрана через 30 секунд и запусти видео из telegram и каким-нибудь просмотрщиков android (штатно гугловская галерея) и в догонку - браузер

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

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

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

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

    p.s. Если бы вместо json тебе подошел бы xml (тоже инструмент передачи структурированных данных) то можно было бы воспользоваться шаблоном xslt (их поддерживают все браузеры, стандарт старый), пример (кстати в доке ошибка, правильно - в браузере открывают xml файл, который преобразуется с помощью xslt в нормальный html, но в консоли будет только xml)

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

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

    Пример ссылки:
    data:text/html;charset=utf-8;base64,PHNjcmlwdD5hbGVydCgnaGknKTs8L3NjcmlwdD4=
    как видишь хабр такие ссылки режет, так как иначе это огромная дыра в безопасности (украсть куки можно)
    Ответ написан
    4 комментария
  • Как правильно подключить SATA HDD/SSD к USB компьютера через адаптер с питанием?

    @rPman
    usb не требует никаких манипуляций в биосе, он по определению hot plug

    Но! проблемы могут быть у контроллера переходника!

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

    Логика говорит что СНАЧАЛА прибор должен получить основное питание, а потом быть подключенным по usb к компьютеру. Соответственно для отключения, первым отключается usb кабель, а потом только питание.

    spoiler
    все зависит от контроллера переходника, на сколько он готов к переходу от питание от usb (он может в этот момент быть в режиме OTG или же наоборот, например ожидать какие то манипулияции с прошивкой например) к питание от своего блока.

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

    @rPman
    Правильно - настроить vlan на роутере, выделив для компьютера отдельную локальную сеть. не все роутеры это поддерживают. В этом случае сменой конфигурации или переустановкой ОС на компьютере выйти из 'сетевой песочницы' не получится.

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

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

    ЗЫ во первых количество результатов сильно приблизительное, в реальности сильно меньше, во вторых перебирать все, если данных много вручную не реально, а за ботов Гугл бранит, когда-то ip-шники подсетками брали на это дело...
    Ответ написан
  • Обязательно ли возвращать объект в методе, если в PHP его изменение идет по ссылке?

    @rPman
    Нет никаких требований ООП или ограничений на то, как возвращать, надо ли возвращать, сколько возвращать и прочее.

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

    @rPman
    Одно слово - wifi

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

    p.s. понятно что по уму нужно провести исследование, запустить сканер к примеру mtr и смотреть его статистику (он покажет где именно возникают потери, хотя и не 100% гарантия)
    Ответ написан
    Комментировать
  • Использования куки в том же браузере где он создался?

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

    curl мощнейшая утилита, как и браузерная консоль разработчика (которая открывается по F11), на закладке Network можно выбрать любое подключение, нажать правую кнопку и выбрать копировать, там можно получить готовую команду curl, полностью повторяющую этот запрос

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

    @rPman
    Сам apk это zip архив, есть декомпиляторы, получить полностью рабочий исходный код обычно не получится но поковыряться в логике и файлах приложения могут помочь

    Получить доступ к данным работающего приложения без root нельзя, теоритически это можно сделать с помощью резервного копирования (сам механизм создания копии локально работает, там будет зашифрованный паролем пользователя tar архив, но восстановить ее уже не получится, android сломан гуглом специально уже почти 10 лет как, но сами данные доступны), но только если разработчики приложения не запретили это в принципе (тогда остается только рут доступ на устройстве)

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

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

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

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

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

    @rPman
    Разница в скорости между последовательным и случайным доступом на ssd/usb flash сильно зависит от контроллера и его внутреннего устройства и зачастую в дешевых устройствах график скорости чтения случйного в зависимости от размера блока будет не прямым и ломаться (скорость начнет сильно падать и становиться меньше чем при последовательном) где то на 256...64кб - это скорее всего размер внутреннего блока хранения (не сектор, при записи он весь не перезаписывается, хотя вполне возможно что есть флешки где это так), и при чтении данных, попадающих в него, он скорее всего будет прочитан весь, этакий аппаратный read ahead

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

    Разница по времени чтения фрагементированного файла на ssd и hdd отличается на порядок (буквально в 10 раз и больше) поэтому даже слабая фрагментация больших файлов становится заметной на жестком диске, на ssd же этого заметить очень сложно, только синтетическими тестами.

    Я один раз пробовал проводить дефрагментацию (больше 30% фрагментации по мнению windows) дешевого ssd как раз с большим внутренним размером кластера и не заметил никакой разницы в использовании такого диска, полагаю стратегия использования диска как системный не укладывается в паттерн, который бы требовал дефрагментацию в такой ситуации
    Ответ написан
    2 комментария
  • Использование md5 в качестве имени файла изображения. Вероятна ли коллизия и насколько?

    @rPman
    Все так, коллизия маловероятна.

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

    Просто подумай, не сломается ли у тебя ничего в твоей логике, если злоумышленник такое провернет
    Ответ написан
    5 комментариев
  • Как справиться с частым потоком входящих данных?

    @rPman
    И причем тут эластик?

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

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

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

    @rPman
    Есть старый подход к созданию web приложений на php, которому обычно учатся начинающие (я надеюсь) который подразумевает следующее - любое действие пользователя на странице отправляется на сервер запросом и о в ответ возвращает НОВУЮ страницу с новым содержимым, 'по счастливой случайности' являющейся точной копией предыдущей кроме ну например появляется div элемент с нужным содержанием.

    Реализуется это следующим образом - php файл это программа, которая генерирует все формы страницы, которые могли бы быть (может быть много разных php файлов, обычно разделяемых по смыслу, например разные разделы сайта), а url в браузере (адрес этой страницы) описывает как именно нужно генерировать страницу, на практике это реализуется http GET параметрами в формате:
    http://site.com/cool_prog.php?param=value&other_param=other_value

    в php программе список этих параметров хранится в переменной $_GET в виде массива (кстати там возможны параметры массивы с именами типа param[]=value1&param[]=value2)

    Отсюда при нажатии на кнопку у тебя должна открываться к примеру страница
    http://site.com/cool_prog.php?show_div=
    а в коде php, где нужно вставить какой то кусок html проверка
    <?php if(isset($_GET['show_div'])) { ?>
    <div>yooo!</div>
    <?php } ?>


    Само собой способов передать состояние приложения много, так же с помощью настроек веб сервера (у apache к примеру это .htaccess модуль mod_rewrite) можно подменить часть некрасивых к примеру &category=value на приятные глазу https://site.com/value/

    Повторюсь - это устаревший подход и использовать его нужно только если есть потребность в создани веб приложения для машин, не поддерживающих javascript (такие приложения создают сильную нагрузку на сетевой трафик и сервер но зато никой нагрузки и никаких требований для клиентов)

    Лучше всего на сервере реализовывать только бизнеслогику и работу с данными, а все что касается визуальной части - релизовывать на javascript в браузере у клиента.
    Ответ написан
  • Как сделать цикл функции в PHP?

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

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

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

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

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

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

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

    Универсального инструмента нет, но в частных случаях можно написать приложение, использующее headless браузер и какое то закодированное условие окончания загрузки (таймаут например) и формат, в котором сохранять страницу (например картинка, или pdf, или html дамп,..)
    p.s. когда то давно я писал приложение на visual studio .net c# использующее стандартный компонент WebBrowser (это древний internet explorer, поддерживается до сих пор), так вот при запуске его в linux mono, подставляется headless firefox

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

    @rPman
    осторожно, пустые строки в csv могут оказаться частью данных в строковых колонках, php fgetcsv корректно их обрабатывает а вот всякие упрощенные file и fgets ... нет

    правильно - написать приложение из 10 строчек типа такого:
    $r=fopen('filename.csv','r');
    $w=fopen('result.csv','w');
    while(!feof($r))
    {
      $row=fgetcsv($r,0,',','"'); // из-за 0 вторым параметром будет работать медленно, если знаешь максимальную длину строки в файле, пропиши ее тут с запасом
      if(empty($row)) continue;
      fputcsv($w,$row,',','"');
    }
    fclose($w);
    fclose($r);


    идеально - не пользоваться этим говноинструментом, на столько отвратительного способа передачи данных еще нужно поискать, сколько занимаюсь обработкой данных, столько натыкаюсь на постоянные ошибки тех кто экспортирует данные в csv. Ну есть же другие удобные инструменты, выдай дамп json (есть неплохой вариант - размещать записи построчно, одна строка один json объект), или одно время любили xml (у него тоже есть проблемы)

    Абсолютно верный путь - передавать данные в базе данных sqlite, или пусть будет проприетарный майкрософтвский .mdb если это принципиально, главное чтобы не изобретали способы сериализации чисел строк дат, списков и прочего.

    p.s. для тех кто не понял, \n внутри строк это часть стандарта
    escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE
    Ответ написан
    Комментировать
  • Какой стек технологий лучше выбрать для разработки чата?

    @rPman
    зачем все так усложнять

    рабочий чат на websocket лежит в примерах наверное любой документации к websocket, первый же нагугленный проект (бакэнд на go но там код на 20 строк все понятно) на столько простой что даже непонятно что непонятно

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