• Проблема с выводом звука в Discord. Звук выводится только из правого динамика. Как выводить из обоих?

    redpax
    @redpax
    Предприниматель
    Есть решение, нашел случайно его:

    1) Запускаем spotlight и пишем MIDI нажимаем интер
    2) Там нажимаем + и выбираем "создать многовыходное устройство"
    3) Запускам дискорд голосовой канал
    4) Выбираем как выходное устройство для звука "многовыходное устройство"
    5) Теперь звук идет моно из обоих динамиков.

    64631f9c08a3c157789725.png

    64631fa75d034165624138.png
    Ответ написан
    2 комментария
  • Как восстановить файлы после reset --hard?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Восстановить очень легко, так как гит ничего не удаляет из репозитория, по крайней мере сразу.
    Команда reset лишь переместила указатель ветки. Полностью удалить что-то крайне сложно.
    Вы можете посмотреть через git reflog где был указатель до этого и вернуть его туда обратно.
    git reset --hard HEAD@{1}
    Данная команда вернёт ветку на состояние, помеченное на вашем скрине как HEAD@{1}
    Либо можно скопировать непосредственно sha-хэш места, куда хотите вернуться.

    Затем повторить отмену последнего коммита, но уже правильно:
    git reset HEAD~1
    Такая команда не будет изменять рабочий каталог, а значит ничего из него не удалит.
    Ответ написан
    1 комментарий
  • Как используя IMAGEMAGICK получить pdf фаил с размером страницы в сантиметрах?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В первом варианте вы сказали системе, что у вас разрешение измеряется в пикселах на сантиметр, и один сантиметр - это 91 пиксел. Вполне логично, что вы получаете (27300/91)x(17400/91) = 300x191.21 сантиметра.
    Во втором варианте вы задаёте 753 пиксела на дюйм, получая (27300/753)x(17400/753) = 36.25x23.11 дюйма или 92.09x58.69 сантиметра.
    Давайте подумаем, если нам надо, чтобы 27300 пикселов укладывались ровно в 91 сантиметр, то сколько пикселов должно быть в одном сантиметре? Ба, да это же пропорция из третьего класса. 27300 / 91 = x / 1 => x = 300.
    А для 17400 точек и 59 сантиметров? 17400 / 59 = y / 1 => y = 294.91525
    Ответ написан
    Комментировать
  • Как на laravel проверить, что тебе пришло null?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Laravel
    'paid_back_at' => [
        function (string $attribute, mixed $value, Closure $fail) {
            if ($value !== null) {
                $fail("The {$attribute} is invalid.");
            }
        },
    ],
    https://laravel.com/docs/10.x/validation#using-closures
    Ответ написан
    2 комментария
  • Как избавиться от try-catch в контроллерах?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    Смотря для чего вы делаете эти try catch. Это не всегда повторяемость иногда действительно нужна, например, чтобы перебросить своё исключение. Пойти можно разными способами. Но а простой - это вам нужно просто их убрать и сделать Listener или Subscriber, который будет обрабатывать ошибки и отдавать их в нужном формате в api. Если правильно понял для чего нужно. Пример.
    Ответ написан
    1 комментарий
  • Как в PHP в классе свойствам назначать значения по умолчанию объекты.?

    Всё зависит от того какая цель. Я бы сделал это через обычный enum
    Вариант 1 (enum)

    <?php
    
    enum CurrenciesEnum: string
    {
        case RUB = 'RUB';
        case USD = 'USD';
        case EUR = 'EUR';
        case GBP = 'GBP';
        case JPY = 'JPY';
        case CNY = 'CNY';
    
        private const DATA = [
            'RUB' => ['name' => 'Рублей', 'short' => '₽', 'ratio' => 1, 'default' => 1, 'display' => 1],
            'USD' => ['name' => 'Dollar', 'short' => '$', 'ratio' => 1, 'default' => 1, 'display' => 1],
            'EUR' => ['name' => 'Euro', 'short' => '€', 'ratio' => 1, 'default' => 1, 'display' => 1],
            'GBP' => ['name' => 'Pound', 'short' => '£', 'ratio' => 1, 'default' => 1, 'display' => 1],
            'JPY' => ['name' => '円', 'short' => '¥', 'ratio' => 1, 'default' => 1, 'display' => 1],
            'CNY' => ['name' => '元', 'short' => 'Ұ', 'ratio' => 1, 'default' => 1, 'display' => 1],
        ];
    
        public function code(): string
        {
            return $this->value;
        }
    
        public function name(): string
        {
            $this->insureValue();
            return self::DATA[$this->value]['name'];
        }
    
        public function short(): string
        {
            $this->insureValue();
            return self::DATA[$this->value]['short'];
        }
    
        public function ratio(): string
        {
            $this->insureValue();
            return self::DATA[$this->value]['ratio'];
        }
    
        public function default(): string
        {
            $this->insureValue();
            return self::DATA[$this->value]['default'];
        }
    
        public function display(): string
        {
            $this->insureValue();
            return self::DATA[$this->value]['display'];
        }
    
        private function insureValue(): void
        {
            if (!isset(self::DATA[$this->value])) {
                throw new InvalidArgumentException($this->value);
            }
        }
    }
    
    echo CurrenciesEnum::RUB->code(), PHP_EOL;
    echo CurrenciesEnum::RUB->name(), PHP_EOL;
    echo CurrenciesEnum::RUB->short(), PHP_EOL;


    Вариант 2 (enum)

    <?php
    
    enum CurrenciesEnum
    {
        case RUB;
        case USD;
        case EUR;
        case GBP;
        case JPY;
        case CNY;
    
        public function code(): string
        {
            return $this->name;
        }
    
        public function name(): string
        {
            return self::getField($this->name, 'name');
        }
    
        public function short(): string
        {
            return self::getField($this->name, 'short');
        }
    
        public function ratio(): string
        {
            return self::getField($this->name, 'ratio');
        }
    
        public function default(): string
        {
            return self::getField($this->name, 'default');
        }
    
        public function display(): string
        {
            return self::getField($this->name, 'display');
        }
    
        private static function getField(string $currency, string $field): string
        {
            $data = [
                self::RUB->name => ['name' => 'Рублей', 'short' => '₽', 'ratio' => 1, 'default' => 1, 'display' => 1],
                self::USD->name => ['name' => 'Dollar', 'short' => '$', 'ratio' => 1, 'default' => 1, 'display' => 1],
                self::EUR->name => ['name' => 'Euro', 'short' => '€', 'ratio' => 1, 'default' => 1, 'display' => 1],
                self::GBP->name => ['name' => 'Pound', 'short' => '£', 'ratio' => 1, 'default' => 1, 'display' => 1],
                self::JPY->name => ['name' => '円', 'short' => '¥', 'ratio' => 1, 'default' => 1, 'display' => 1],
                self::CNY->name => ['name' => '元', 'short' => 'Ұ', 'ratio' => 1, 'default' => 1, 'display' => 1],
            ];
    
            if (!isset($data[$currency])) {
                throw new InvalidArgumentException($currency);
            }
    
            return $data[$currency][$field];
        }
    }
    
    echo CurrenciesEnum::RUB->code(), PHP_EOL;
    echo CurrenciesEnum::RUB->name(), PHP_EOL;
    echo CurrenciesEnum::RUB->short(), PHP_EOL;



    Вариант 3 (storage)


    Класс Currency
    final class Currency
    {
        public function __construct(
            readonly string $code,
            readonly string $name,
            readonly string $short,
            readonly int $ratio = 1,
            readonly int $default = 1,
            readonly int $display = 1,
        )
        {
        }
    }


    Класс CurrencyStorage
    final class CurrenciesStorage
    {
        private static self|null $instance = null;
    
        /** @var Currency[] */
        private array $currencies = [];
    
        private function __construct()
        {
        }
    
        public static function getInstance(): self
        {
            if (self::$instance === null) {
                self::$instance = new self();
            }
    
            return self::$instance;
        }
    
        public function add(Currency $currency): void
        {
            $this->currencies[$currency->code] = $currency;
        }
    
        public function has(string $code): bool
        {
            return isset($this->currencies[$code]);
        }
    
        public function get(string $code): Currency|null
        {
            return $this->currencies[$code] ?? null;
        }
    
        public function all(): array
        {
            return $this->currencies;
        }
    }


    Потом при инициализации своего модуля тебе нужно будет создать инстанс сторажда и заполнить его дефолтными значениями:
    $storage = CurrenciesStorage::getInstance();
    $storage->add(new Currency('RUB', 'Рублей', '₽'));
    $storage->add(new Currency('USD', 'Dollar', '$'));
    $storage->add(new Currency('EUR', 'Euro', '€'));


    // Получить данные по одному объекту
    echo $storage->get('RUB')->code, PHP_EOL;
    echo $storage->get('RUB')->name, PHP_EOL;
    echo $storage->get('RUB')->short, PHP_EOL;
    
    // Получить все объекты
    var_dump($storage->all());


    Данный код в объектном стиле, в IDE будут работать подсказки, у стораджа есть тайпхинтинк (соответственно туда ничего кроме currency нельзя буде запихнуть). Плюс работает инкапсуляция, т.к. свойства у currency readonly их нельзя будет изменить в другом коде
    Ответ написан
  • Существует более мощный, чем nano текстовый редактор из командной строки?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    dte
    а вообще смотри и выбирай по вкусу - Text_editors
    Ответ написан
    4 комментария
  • Как быстро вставить много строк в PostgreSQL?

    Если только "вставить и хранить" - я бы подумал, нахрена хранить в БД, если в "нужный момент" можно взять из файла, или откуда-нибудь ещё.

    Вообще, традиционно проблема быстрой вставки решается в три приёма - снятие индекса, вставка, наложение индекса. В Postgre, если я помню верно, третий шаг бьётся ещё на два: добавление собственно индекса и наложение на него constraint. Такой путь чем-то не подходит?

    Дополнительно, можно хорошо ускорить процесс, если вставлять по нескольку строк за раз, вроде
    INSERT INTO table (field1, field2, field3) VALUES (value1, value2, value3), (value4, value5, value6), (value7, value8, value9)
    Ответ написан
    4 комментария
  • Почему не обновляется запись в бд при нажатии на кнопку?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    потому что нельзя получить программу, задавая вопросы на форуме
    Учиться всё равно надо
    Надо купить или хотя бы скачать учебник Котерова, и начать осваивать программирование.
    Прочитать и усвоить оттуда, что такое SQL, как пишутся запросы
    Что такое РНР и как выполнять SQL запросы из РНР
    Как сделать так, чтобы баланс пополнился только у одного пользователя, а не у всех сразу
    Как отличать пользователей друг от друга
    Что такое база данных
    И так далее

    А если просто из головы выдумывать какие-то нелепые фантазии вместо кода, то они работать-то не будут

    Про то, как выполнять SQL запросы из РНР, можно посмотреть в этом ответе
    Но сначала надо понять, какой именно запрос мы хотим выполнить. А с этим тут тоже проблемы.
    Ответ написан
  • Перенос с php в css?

    iiiBird
    @iiiBird Куратор тега CSS
    Пока ты спишь - твой конкурент совершенствуется
    к примеру все изменяющиеся стили вынести по отдельным классам. и добавляй их к основному стилю для .output в зависимости от ошибки
    Ответ написан
    Комментировать
  • PHP как привязать код к странице?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    сделать надо сначала хоть как-то, а потом уже искать "более элегантное" решение, если первоначальное не устроит.
    заодно можно будет задать осмысленный практический вопрос, а не транслировать невнятные фантазии.
    Ответ написан
    Комментировать
  • Как сделать авто обновление контента vue.js?

    zoroda
    @zoroda
    Необычный Fullstack
    Есть два основных решения:
    1. Организовать периодический опрос сервера из приложения. Например, при помощи функции window.setInterval(), вызывать которую можно из секции mounted ().
    2. Организовать доставку сообщений по инициативе сервера. Обычно это web socket.
    Оба решения имеют свои плюсы и минусы. Проще, конечно, первый.
    Вот кусок кода из моего проекта:
    const axios = require('axios')
    
    export default {
      methods: {
        getCounters (count = 1, time = '', start) {
          axios.get(this.url + 'counters/' + this.server + '/?count=' + count + '&time=' + (time || '&noCache=' + (new Date().getTime()) + Math.random()))
            .then((res) => {
                this.currentData= res.data[0]
            })
            .catch((err) => {
              this.queryError = 'Нет ответа от сервера'
            })
        },
        stopTimer () {
          if (this.interval) {
            window.clearInterval(this.interval)
          }
        },
        startTimer () {
          this.stopTimer()
          this.interval = window.setInterval(() => {
            this.getCounters()
          }, 1000)
        }
      },
      mounted () {
        this.startTimer()
      },
      beforeDestroy () {
        this.stopTimer()
      }
    }
    Ответ написан
    Комментировать
  • Какое условие поставить при недосутпности адреса в curl?

    @rPman
    после вызова curl_exec сделай вызов curl_getinfo и проверь что именно тебе возвращает сервер, в частности CURLINFO_HTTP_CODE (или лучше CURLINFO_RESPONSE_CODE) ($info['http_code']) должен быть 200, если не так, то смотри
    CURLINFO_SSL_VERIFYRESULT (список кодов смотри в комментариях) и CURLINFO_PROXY_SSL_VERIFYRESULT если используется прокси
    смотри ответ CURLINFO_HTTP_CONNECTCODE, CURLINFO_OS_ERRNO
    CURLINFO_CONDITION_UNMET

    p.s. так же проверь $response, если он пустой то нет смысла пытаться его распарсить на xml, это тоже ошибка (это значит сервер вернул пустой ответ при это м не сгенерировав ошибки, такое бывает когда криворукие бакэнд программисты реализуют api)
    Ответ написан
    7 комментариев
  • Как сделать плеер как на Netflix?

    Sanasol
    @Sanasol Куратор тега PHP
    нельзя просто так взять и загуглить ошибку
    619c0206b3790355071150.jpeg

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

    Лучшее что вы можете сделать это защиту от хотлинкинга т.е. делать проверку заголовков на запросы только с вашего домена и временные ссылки на основе IP юзера/браузера. Чтобы другой человек эту же ссылку открыть не мог и не мог встроить на сайт вашу прямую ссылку.

    https://nginx.org/ru/docs/http/ngx_http_secure_lin...
    https://ru.stackoverflow.com/a/479172/233646
    https://moonback.ru/page/nginx-hotlink-protection-2020
    Ответ написан
    1 комментарий
  • Существует ли в природе учебник по ООП на русском, где пошагово создается приложение на PHP?

    DevMan
    @DevMan
    не существует.
    ООП – это не создать приложение. ООП – это понять концепцию и прокачать ее.

    создание одного приложения по книжке или другому уроку(ам) никак не поможет в освоении. здесь нужна продолжительная практика.
    Ответ написан
    Комментировать
  • Как убрать стремный курсор в PhpStorm?

    JhaoDa
    @JhaoDa
    LaravelRUS Team
    Может вы просто Ins нажали?
    Если нет, то Editor → Genereal → Appearance, Use block caret.
    Ответ написан
    3 комментария
  • Как вывести найденную строчку из файла?

    Wendor
    @Wendor
    nodejs developer / *nix admin
    Вам лучше нанять разработчика, который сделает на сайте "админку", в которую вы сможете загружать свою Excel'ку или вручную добавлять коды (как вам удобнее). А если так хочется получать данные из гуглотаблички, то и это не сложно. Ну а отображать данные клиенту еще проще. Задачка на 2-3 часа (разобраться с хотелками, реализовать, оттестить). То что сайт "без движка", роли не играет.

    К примеру, есть таблица в гуглодоках.

    Чтобы сделать по ней поиск, например в nodejs (то что было под рукой), будет такой код:
    const { GoogleSpreadsheet } = require('google-spreadsheet');
    
    const apiKey = API_KEY; // Ключ для работы с Google SpreadSheet API
    const findId = "234567"; // Искомый номер
    const spreadSheetId = "1PWuqvPkqB7gFEe1l7vXOvWdFkqbNAN6IsbP_9gUM1mE"; // ID таблицы в гуглодоках
    
    (async () => {
      const doc = new GoogleSpreadsheet(spreadSheetId );
    
      await doc.useApiKey(apiKey);
      await doc.loadInfo();
      const sheet = doc.sheetsByIndex[0];
      const rows = await sheet.getRows(); 
      const point = rows.find(row => row._rawData[0] == findId)._rawData[1];
      console.log(point);
    })();
    Ответ написан
    Комментировать
  • Как сделать кнопку с скролом страницы?

    Seasle
    @Seasle Куратор тега JavaScript
    Думаю механизм ясен.
    Ответ написан
    Комментировать
  • Как обнулить формы одной кнопкой в boostrap?

    bootd
    @bootd
    Гугли и ты откроешь врата знаний!
    Формам добавить общий класс, любой на выбор

    <button class="resetForms">Очистить форму</button>

    $('.resetForms').on('click', function (event) {
      event.preventDefault();
      $('ваш класс с формами').trigger('reset');
    })
    Ответ написан
    Комментировать
  • Как посчитать количество единиц в строке?

    coderisimo
    @coderisimo Куратор тега JavaScript
    Еще один способ (лаконичный) :)

    str.split(1).length-1
    Ответ написан
    Комментировать