Задать вопрос
  • Как узнать какой процесс запускает кнопка в windows 10?

    KoyaKoya
    @KoyaKoya
    IT Lover
    1. Запускаем PowerShell от имени администратора.
    2. Вставляем команду:
    Disable-PnpDevice -InstanceId 'device'

    3. В Диспетчере устройств, в Свойствах устройства идем на вкладку Сведения, в списке Свойство выбираем Путь к экземпляру устройства и копируем значение.
    4. В PowerShell вставляем скопированное значение в нашу команду вместо слова device (кавычки должны остаться).
    5. Подтверждаем выполнение, введя [Y].

    Чтобы включить обратно устройство, в команде меняем Disable на Enable.
    Вы можете сделать из этого скрипт и по ярлыку выполнять это действие.
    Ответ написан
    1 комментарий
  • Трюк с тернарным оператором PHP?

    @Flying
    В целом то, что вам нужно скорее ближе к новой функциональности в PHP 8: throw expression. В этом случае ваш код мог бы выглядеть, к примеру, вот так:
    Auth::check() ?? throw new AuthenticationRequiredException("Вам необходимо сначала авторизоваться");

    Однако, если вы реально хотите именно такой конструкции как ваша - то здесь, конечно, тоже есть варианты, ведь начиная с PHP 7 нам доступен uniform function call syntax и, следовательно, возможны конструкции вида:
    Auth::check() ?? (function(){echo "Вам необходимо сначала авторизоваться";})();

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

    Существенно лучшим вариантом в этом случае на самом деле будет просто создание отдельной функции, которая будет брать на себя реакцию на такие ситуации:
    function failure(string $error): void 
    {
      // Просто для того чтобы быть ближе к вашему примеру, 
      // в реальности здесь должна быть нормальная логика обработки, 
      // к примеру тот же throw new RuntimeExcepton($error);
      echo $error;  
    }

    в этом случае ваш пример сводится к:
    Auth::check() ?? failure("Вам необходимо сначала авторизоваться");

    Помимо этого обратите внимание на то, что использование null coalescing operator ?? подразумевает, что тип возвращаемого значения функции Auth::check() - это mixed|null что выглядит странно, поскольку от результата проверки ожидается тип boolean.

    В реальности здесь лучше подходит сокращённая версия тернарного оператора, т.н. elvis operator. В этом случае ваш код может выглядеть вот так:
    class Auth {
        public static function check(): bool 
        {
            return false;
        }
    }
    
    function failure(string $error): void 
    {
        // В реальности, как указано выше, лучше использовать 
        // throw new RuntimeException($error);   
        // echo используется для примера
        echo $error;
    }
    
    Auth::check() ?: failure('Вам необходимо сначала авторизоваться');

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

    Lucian
    @Lucian
    https://t.me/MakeFreelance
    Привет, жаль конечно, но такова жизнь, я в свое время похожим способом 100к потерял, но мне уже окупилось многократно, т.к. с тех пор больше таких случаев небыло. Рассматривайте эти 10к рублей как получение опыта, по сути вы купили эти знания дешевле чем я в 10 раз. Двигайтесь вперед, там возможностей больше. Посчитайте сколько часов вы потратите чтобы вернуть эти деньги и умножте на свою ставку, оно того точно не стоит.
    Ответ написан
    8 комментариев
  • Можно-ли защититься от DDoS без сторонних сервисов?

    1. Идеальное решение, взять 3 VPS и настроить Nginx балансировщик между VPS, цена вопроса составит порядка 1000р/мес.
    2. Выбирать VPS с широким каналом 200-300Мбит (хотя по сути хватит и 100, если у Вас оптимизирован сайт), один VPS (резервный) можно разместить за границей.
    3. Настроить защиту: если сайт для России, то IP-адреса с других стран можно заблокировать, сделать защиту от хотлинков, настроить fail2ban, настроить iptables,...

    Как итог, получить защиту от 3 000 000 запросов в час минимум.

    Проверить тестами сколько сейчас запросов может обработать Ваш сервер, может он уже при 20 запросах в секунду задыхается.
    ИМХО нормально если сейчас обрабатывает хотя бы 50 в секунду.

    И самое главное отказаться от Apache ))
    А если у Вас еще и просто дешевый хостинг, тогда для начала просто взять VPS.
    Или перейти на web хостинг с дорогим тарифом (с DDoS защитой), но это решение хуже VPS и дороже.
    Ответ написан
    Комментировать
  • Стоит ли переписывать полностью метод в данной ситуации?

    @vism
    Вобщем вы за ответом пришли туда, где 95% евда мидл-джуны.

    Варианты ранее предложеные либо сильно меняют структуру, либо переусложняют.

    Просто создаете второй метод и общее тело (формирование запроса) выносите в третий приватный/протектид метод. (вот vista1x не поленился и даже код накидал примерный)
    В созданном методе заодно оставляете аргумент для сортировки.
    Нужен будет еще - создаете третий.

    Понимаете, что таких появится еще много - тогда уже меняете структуру, рефакторите.
    Ответ написан
    5 комментариев
  • Стоит ли переписывать полностью метод в данной ситуации?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Вариантов 3:
    1) Добавить параметр: плюсы - просто, можно добавить гибкий параметр, например $sortField. минусы - в следующий раз понадобится менять еще и направление сортировки - прийдется снова костылить.
    2) Отдельный метод - уже лучше, но все равно рано или поздно функционал надо будет менять и с параметрами что -то прийдется делать.
    2.1) Передавать в качестве аргумента некий массив/объект настроек, плюсы - гибко, минусы - каждый раз надо учитывать/знать структуру объекта настроек, что не очень удобно.
    3) Использовать внутренние паблик свойства объекта для настройки работы логики объекта, плюсы - не надо менять инерфейс вызова, достаточно сделать
    $users->sortBy = 'order'; $users->sortDir = 'desc'; $users->getUsers();
    . Минусы - сходу не вижу, у кого есть идеи - отпишитесь в комментах.
    Ответ написан
  • Как работает почасовая оплата на DigitalOcean?

    Если дроплет выключен (Power-Off), плата взимается так же, как и за включённый. Об этом есть прямой вопрос и ответ в FAQ по биллингу.

    API DigitalOcean позволяет, среди прочего, создавать и удалять дроплеты. Создаются дроплеты из образа (image) – стандартного с чистой системой (напр. Ubuntu), или из вашего кастомного образа (snapshot), который сохраните после настроек софта и пр.

    Хранение snapshot'а стоит $0.05 за Гб в месяц.

    Т.е. экономный вариант: запустить дроплет с Ubuntu, настроить, сделать snapshot. Когда не нужен – выключить и удалить, чтобы не тратить деньги. В таком состоянии плата идёт только за хранение образа. Когда снова понадобилась коробка, создаёте новый дроплет из этого snapshot на те 4–5 часов, что он вам нужен. Сохраняете новый snapshot и удаляете старый при необходимости. Выключаете и удаляете droplet.

    Всё это можно проделывать как через веб-интерфейс, так и через API Digital Ocean.

    Попробуйте. По моей реф. ссылке вам предоставят $10 «на попробовать», когда вы зарегистрируетесь и привяжете живую карту. С таким экономным подходом хватит надолго.
    Ответ написан
    23 комментария
  • Как протестировать метод, который вызывает методы другого класса?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    class MyTest extends \PHPUnit\Framework\TestCase
    {
        public function testDoSomethingOne(): void
        {
            /** @var \PHPUnit\Framework\MockObject\MockObject $mockOfA */
            $mockOfA = $this->getMockBuilder(A::class)->getMock();
    
            $mockOfA->expects($this->once())
                ->method('setData')
                ->with(20);
    
            (new B)->doSomething($mockOfA, 1);
        }
    
        public function testDoSomethingTwo(): void
        {
            /** @var \PHPUnit\Framework\MockObject\MockObject $mockOfA */
            $mockOfA = $this->getMockBuilder(A::class)->getMock();
    
            $mockOfA->expects($this->once())
                ->method('setData')
                ->with(10000);
    
            (new B)->doSomething($mockOfA, 100);
        }
    }


    The practice of replacing an object with a test double that verifies expectations, for instance asserting that a method has been called, is referred to as mocking.

    https://phpunit.de/manual/6.5/en/test-doubles.html
    Ответ написан
    2 комментария
  • Как делается backend на Java?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Выбирайте PHP. Месяца не хватит даже на изучение материала.
    Ответ написан
    5 комментариев
  • Какой смысл в refresh токене?

    @deliro
    Но что будет, если злоумышленник также украдет refresh token?

    Не украдёт. JWT может быть не-httpOnly, чтобы его мог читать фронтенд. Следовательно, JWT можно украсть через XSS-дырку. refresh token должен быть всегда httpOnly и читать его может только сервер.

    Второй уровень защиты — JWT ставится на .example.com, в то время как refresh токен ставится только на auth.example.com. Таким образом, даже если любой из твоих сервисов (кроме сервиса авторизации) будет скомпрометирован, refresh токен останется защищённым, т.к. не будет доступен никому кроме сервиса авторизации.

    Да, это всё подразумевает, что как минимум refresh-токен нужно хранить защищённым от XSS, то есть точно не в localStorage, а в куках или чём-то подобном.
    Ответ написан
    4 комментария
  • Нужно подключить к Arduino датчики на определенном расстоянии, какой кабель использовать и какова максимальная длина?

    Stalker_RED
    @Stalker_RED
    i2c разрабатывался как шина для использования внутри устройства.
    Ограничения по длине в спецификации не прописаны, но есть ограничение по паразитной емкости. При 170pF падает скорость, при 400pF - все.
    На практике, некоторые модули могут работать и с большей емкостью, но это лотерея и эксперименты.

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

    1-Wire поддерживает гораздо больше длину, 500 метров - не предел.
    https://www.maximintegrated.com/en/app-notes/index...

    Или старый добрый RS485
    Ответ написан
    4 комментария
  • Как правильно подсчитать одним запросом количество новостей по месяца?

    wagoodoogoo
    @wagoodoogoo
    prestashop, webix, phalcon, vue, slim, craft cms
    поле date называть это "моветон" :)
    SELECT COUNT(id),  concat(MONTHNAME(date), ' ', YEAR(date)) as month FROM news
    GROUP BY month
    Ответ написан
    Комментировать
  • Как валидировать внутренний массив в Symfony 4?

    BoShurik
    @BoShurik Куратор тега Symfony
    Symfony developer
    https://symfony.com/doc/current/reference/constrai...
    'toEmail' => [
        new Assert\NotBlank(),
        new Assert\Type('array'),
        new Assert\All([
            'constraints' => [
                new Assert\NotBlank(),
                new Assert\Email(),
            ],
        ])
    ]
    Ответ написан
    Комментировать
  • Чем отличаются self::, parent:: и static:: в PHP?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Позднее связывание — это значит привязка будет происходит не на этапе компиляции кода, а на этапе его исполнения.
    В примере Кирилл Арутюнов это видно — self всегда указывает на тот класс, в котором оно объявлено, а static — на класс в котором он по факту будет вызван с учетом всех наследований.
    Ответ написан
    Комментировать
  • Чем отличаются self::, parent:: и static:: в PHP?

    arutyunov
    @arutyunov
    Mooza.ru — Делаем сайты
    Проще объяснить на примере:

    class A {
      public static function getValSelf()
      {
      	return new self();
      }
    
      public static function getValStatic()
      {
      	return new static();
      }
    }
    
    Class B extends A {
    }
    
    var_dump(get_class(B::getValSelf())); // 'A'
    var_dump(get_class(B::getValStatic())); // 'B'
    Ответ написан
    Комментировать
  • Хранение таблицы активных заказов в редис?

    XAKEPEHOK
    @XAKEPEHOK
    А вот у нас недавно редис взял и похерил добрую половину ключей. Просто взял ночью и похерил. Рандомно разные ключи. У нас такое впервые за 5 лет работы. Бэкап - да, есть, но это уже потеря консистентности. После этого случая я зарубил себе на носу, что храню там только те данные, которые допустимо потерять или можно восстановить без особых потерь
    Ответ написан
  • Почему PHP7 работает медленнее?

    Zettabyte
    @Zettabyte
    Проф. восстановление данных ▪ Вопрос? См. профиль
    PHP benchmark script от Alessandro Torrisi, который вы используете, не очень хорошо работает для современных реалий и быстрого железа.

    Попробуйте вот этот, он лучше подходит как для актуального сейчас софта, так и для сравнения разных аппаратных платформ: https://github.com/odan/benchmark-php
    Ответ написан
    Комментировать
  • Почему PHP7 работает медленнее?

    Melkij
    @Melkij
    PostgreSQL DBA
    Казалось бы, ответ очевиден

    Нет, не очевиден. См. близкие Single Thread попугаи.
    У E3-1225 v5 чуть меньшие частоты, но архитектура новее на 3 года. С классическими 5% в год от интела всё равно разница есть.
    Плюс скорей всего здесь больше влияния имеет латентность памяти.
    Ответ написан
    Комментировать