• Как для сайта сверстать защищенный режим браузера?

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

    Сайт должен представлять из себя программу удаленного управления, а реальный сайт запускаться на кастомном браузере (без интерфейса, пишется в 10 строчек на любом языке программирования на основе готовых контролов браузерных webview - chromium/firefox/webkit).

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

    На сервере xvfb + libvnc (лучше реализовывать серверную часть а не брать готовый полнофункциональный, хотя главное ведь запретить отсылку команд закрытия приложения и xserver, кажется у x11vnc есть соответствующие опции), в браузере - что то типа noVNC

    Недостатки
    - очень высокие требования к серверу (на каждого клиента потребуется десятки мегабайт RAM советую использовать старые или кастрированные версии компонент браузера, можно даже старой версии, например 10-летней давности webkit требовал 5-10 мегабайт, а современный полторы сотни)
    - относительно высокий трафик для мультимедиа на сайте (не ваш вариант, у вас магазин)
    - потребуется с осторожностью настраивать сайт и окружение (например без доступа к интернету), чтобы уменьшить шансы клиентам обойти ограничения и к примеру серфить или даже ддосить через такой механизм другие сайты

    Достоинства:
    - на стороне клиента - просто изображение, все что может сделать злоумышленник, это смотреть эту картинку, без какого либо анализа, ни одна рекламная сеть не рассчитывает на такой способ использования
    - в некоторых случаях сетевой трафик может быть меньше чем если бы сайт открывается классическим способом (особо кривые реализации, когда html размером мегабайты, при этом без мультимедиа) и зависит не от сложности сайта а от количества действий, совершаемых с сайтом пользователем, а точнее скролинг и смена страниц), отзывчивость работы в таких случаях для пользователя может быть наилучшей, само собой эффективнее исправить сайт
    Ответ написан
    1 комментарий
  • Какой роутер выбрать Keenetic Hero 4G KN-2310 или TP-LINK Archer MR400?

    @Drno
    КИнетик. если не хотите непонятных проблем
    а зачем такой дорогой? у них есть и дешевле модели
    Ответ написан
    3 комментария
  • Какой роутер выбрать Keenetic Hero 4G KN-2310 или TP-LINK Archer MR400?

    xez
    @xez
    TL Junior Roo
    Mikrotik бери
    Ответ написан
    Комментировать
  • Какой роутер выбрать Keenetic Hero 4G KN-2310 или TP-LINK Archer MR400?

    @TheBigBear
    СтарОдмины мы
    Странное сравнение 100Мбитного TP-Link и 1Гигабитного кинетика....
    "Обычная домашняя сеть" - это какая? Судя по выбранным моделям - Интернет мобильный? Не проводной? Сейчас всё чаще провайдеры (в том числе LTE) предлагают скорость интернета выше 100Мбит
    И мой субъективный совет - не берите комбайны.
    Лучше нормальный роутер+USB LTE-свисток (который можно в случае чего заменить, удлинить по USB кабелю и прицепить на окно или просто подключить внешнюю антенну на крышу
    А так:
    Если простой пользователь - лучше Кинетик (с гигабитными LAN-портами и WiFi 2.4 / 5 ГГц),
    продвинутый и есть желание самообразоваться - Микротик
    Ответ написан
    2 комментария
  • Почему php скрипт не записывает логи с .txt файл?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    ini_set('error_reporting',E_ALL);
    ini_set('display_errors', 1);
    file_put_contents("ip.txt", date('Y-m-d H:i:s') . ' : ' $_SERVER['REMOTE_ADDR']."\n" , FILE_APPEND);
    Ну и смотрите ошибки, скорее всего права кривые.
    Ответ написан
    2 комментария
  • Почему выводит пустой цвет фона у элемента?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    red.style.backgroundColor – берётся элемент red,
    его свойство style содержит инлайновые стили, назначенные именно этому элементу. Напрямую.

    Не унаследованные через листы стилей, предопределённые браузером, назначенные браузерным расширением.

    Напрямую свойство в style:
    const el = document.createElement('div');
    div.style.backgroundColor = "red";
    
    div.style.backgroundColor // "red"


    Добавленный класс:
    div.classList.add("green-text"); // CSS .green-text { color: green; }
    
    div.style.color // ""

    Прямо в разметке
    <p style="font-weight: bold">Bold</p>
    document.querySelector('p').style.fontWeight // "bold"

    Унаследованный от родителя
    <p style="font-weight: bold">
      <span>Bold</span>
    </p>

    document.querySelector('span').style.fontWeight // ""
    Ответ написан
    Комментировать
  • Почему выводит пустой цвет фона у элемента?

    Fragster
    @Fragster
    помогло? отметь решением!
    Комментировать
  • Ошибка в gulpfile.js, как решить?

    irtek
    @irtek
    Wordpress-addicted
    У вас установлен gulp версии 4, а код, который вы запускаете устаревший и написан для версии 3. Там другой синтаксис и архитектура для запуска задач (tasks) была.
    Ответ написан
    8 комментариев
  • Почему неправильно выполняется сравнение чисел?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Ну если автомобиль перевернуть вверх колёсами и поставить крышей на асфальт - он тоже не будет ездить. И с чего бы это вдруг? А нас ведь всё тот же автомобиль, он обязан ехать!

    Так писать операцию сравнения нельзя. А в приведённом примере JavaScript сначала вычислит результат 604.5< -597.5 - получит false, который превратит в 0, потому что дальше ещё одна арифмитическая операция сравнения 0 < 512.5 - вот и получилось true. А второй пример написан правильно - и результат правильный.

    P.S. Это не язык программирования выдаёт какую-то ошибочную дичь, нет. Это вы должны подстраивать свои хотелки под правила и логику языка программирования.
    Ответ написан
    Комментировать
  • Тесты Laravel, config() или env()?

    TTATPuOT
    @TTATPuOT
    https://code.patriotovsky.ru/
    Используйте в основном коде и тестах только config().
    Это связано с тем, что у вас в приложении всегда должен быть только одни источник данных.

    Простой пример из дефолтной сборки Laravel. В app.php есть строка:
    'name' => env('APP_NAME', 'Laravel'),
    Самое просто, что вы можете сделать, это вызвать config('app.name') где-нибудь в коде, чтобы получить данные из этой настройки. Вот только если вы вызовите env('APP_NAME') вы, возможно, получите ошибку, в случае, если эта переменная не задана в переменных среды.
    Но как вы видите из кода выше, она совершенно необязательно должна быть задана в переменных среды, так как для неё задано значение по умолчанию: Laravel. А значения в конфиге могут быть вообще самой разной степени извращённости. И они могут составляться из частей. Например:
    'endpoint' => 'https://' . env('API_DOMAIN') . '/some/subroute',


    Это банальный и простой пример. Но на большой проекте с массой переменных и настроек вы однозначно столкнётесь с трудностями такого рода.

    Ваша задача сделать код удобным и читаемым. Чтобы будущие программисты могли распутать макаронину, что вы сплели. А разнообразие источников данных только запутает читателя.
    Ответ написан
    Комментировать
  • Как сделать задание cron?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    обычно если пых установлен, достаточно просто php /var/www/имя/data/www/сайт/cron.php, если не видит пхп - запускаете whereis php, смотрите где оно и указываете полный путь.
    Ответ написан
    Комментировать
  • Как вывести ключ рандомно из объекта?

    @AlexeySmk
    const keys = Object.keys(yourObj);
    
    const randomNumber = Math.floor(Math.random() * keys.length);
    const randomKey = keys[randomNumber];
    const randomValue = yourObj[randomKey];
    
    console.log(randomKey, randomValue)
    Ответ написан
    1 комментарий
  • Как создать событие?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Свойства - геттеры и сеттеры

    В простом варианте, сразу обрабатывать все условия:
    const obj = {
      _x: 0,
      get x() {
        return this._x;
      },
      set x(value) {
        this._x = value;
        if (this._x === 5) {
          console.log('Пятёрочка!');
        }
      },
    };
    
    // использование
    obj.x = 5; // Пятёрочка!


    С добавлением фильтров можно поступить так:
    const obj = {
      _x: 0,
      _filters: {},
      addFilter(value, callback) {
        this._filters[value] = callback;
      },
      get x() {
        return this._x;
      },
      set x(value) {
        this._x = value;
        this._filters[value]?.(value);
      },
    };
    
    // добавить обработчики
    obj.addFilter(5, () => console.log('Пятёрочка!'));
    obj.addFilter(10, v => console.log(`${v} это десять!`));
    
    // использование
    obj.x = 10; // 10 это десять!
    Ответ написан
    4 комментария
  • Как перевести весь текст в коде страницы с русского на английский?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Я бы делал примерно так:
    Написал скрипт рекурсивно обходящий все пхп файлы в нужной папке, в тексте искал по регулярке [\p{Cyrillic}+\s,-\.\?;]+ русские фразы, выносил бы их в бд, и заменял автоинкрементным айдишником из таблицы, что то типа:
    - echo "Василий схватился за мышь с остервенением и отвагой";
    + echo Helper::translate(55);

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

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

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    В JavaScript любую функцию можно «класть в переменную», передавать аргументом в другую функцию – поступать с ней, как, например, с обычным числом или строкой.
    const f1 = function() {
      console.log("I am F 1");
    };
    
    const f2 = f1;
    f2(); // I am F 1

    Так и в этом примере: три функции передают как аргументы в основную.

    Логика кода в вопросе: сложить два числа.
    И вызвать одну из трёх функций, в зависимости от сравнения результата с числом 3.

    Бытовая аналогия: вам на стол поставили три телефона: красный, чёрный и зелёный. Каждый настроен звонить на какой-то свой фикс. номер. Вы не знаете, на какой именно. Но у вас инструкция: если число меньше 3, поднять трубку на красном аппарате. Если равно, то на чёрном. Если больше, то на зелёном.

    Вот упрощённый пример:
    function call_if_true(value, func) {
      if (value) {
        func();
      }
    }
    
    call_if_true(
      1,
      function() { console.log("It's true!"); }
    );
    Ответ написан
    Комментировать
  • Как на php показать какой отрезок времени назад был опубликован пост?

    neuotq
    @neuotq
    Прокрастинация
    Используйте библиотеку Carbon
    $postTimestamp = '2023-01-01 00:00:01';
    echo Carbon::parse($postTimestamp)->diffForHumans(Carbon::now());
    // "5 days before"
    
    //Локализация
    Carbon::parse($postTimestamp)->locale('ru')->diffForHumans(Carbon::now());

    Только изучите документацию подробнее, важно чтобы даты были в одном часовом поясе лучше всего хранить в UTC 0 и соответственно сравнивать тоже в нем. А уже если нужно вывести конкретную дату(дату и время, а не разницу), то тут перед выводом делать смещение, Carbon это тоже умеет.
    Ответ написан
    Комментировать
  • Javascript - как перевести объект в число?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    jQuery не нужна.
    Ответ написан
    Комментировать
  • Почему Laravel не использует pivot таблицу?

    vfreelancer
    @vfreelancer
    php
    pivot таблица по умолчанию названия в ед. числе должны быть: protected $table = 'genre_movie'; иначе надо указывать явно
    Ответ написан
    3 комментария
  • Ссылка из массива на внешнюю переменную?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    "Что-ж вы так убиваетесь?! Вы же ТАК никогда не убъётесь!!!" (С)

    $one = 3;
    $two = 4;
    
    $link = [0 => &$one,  1 => &$two];
    $link[0] = 1;
    $link[1] = 2;
    
    echo $one."\n";
    echo $two."\n";


    А в своём неумелом коде вы создали переменные $first и $second (операцией присвоения =), после чего в массив записались их значения (тобишь NULL и NULL, из не прошедших инициализию $one и $two). После чего эти элементы массива переписались новым присвоением.
    Ответ написан
    2 комментария