• Необходим ли цап для наушников Audio Technica ATH-A990Z?

    DevMan
    @DevMan
    для фона, тем более тюбика, отдельный ЦАП не нужен.
    более того: для подобной задачи можно взять уши и проще.
    Ответ написан
    Комментировать
  • Необходим ли цап для наушников Audio Technica ATH-A990Z?

    @Drno
    Для ютуба - все равно.
    Jbl от 3-5к будет достаточно
    Ответ написан
    Комментировать
  • Необходим ли цап для наушников Audio Technica ATH-A990Z?

    vabka
    @vabka
    Токсичный шарпист
    1. Youtube сильно сжимает => какой бы ЦАП ты не взял, разницы ты не услышишь.

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

    moryachello
    @moryachello
    Всего понемножку, много не бывает.
    class MyClass {
      constructor() {
        this.buttons = document.querySelectorAll('.btn');
        this.onClick = this.onClick.bind(this);
      }
    
      onChange(callback) {
        this.callback = callback;
        this.buttons.forEach((button) => {
          button.addEventListener('click', this.onClick);
        });
      }
    
      onClick(event) {
        const buttonText = event.target.textContent;
        this.callback(buttonText);
      }
    }
    
    const myInstance = new MyClass();
    
    myInstance.onChange((text) => {
      alert(`Выбрана кнопка: ${text}`);
    });
    Ответ написан
    Комментировать
  • Как облагородить/сократить данный свитч?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Овер-сократить можно примерно так:
    const checkArr = [!mailArr.length, !inputEmptyArr.length];
    if (consentCheckbox) {
      checkArr.push(consentCheckbox.checked);
    }
    btnSubmite.classList.toggle('valid-success', !checkArr.some(x => !x));

    В двух версиях массив отличается наличием последнего элемента .checked
    Разницу - в if()

    every(=== true) логически равноценно !some(=== false) – интересует, есть ли хоть один false.

    Итого всех макарон – добавить или удалить класс.
    Ответ написан
    2 комментария
  • Как правильно, выпадающий список навигации при клике или при наведении?

    DanArst
    @DanArst Куратор тега CSS
    Гриффиндор в моде при любой погоде!
    Определенно при клике. А тогглером будет у вас button или a - это уже дело ваше, хотя я склоняюсь ко второму.
    Почему использовать клик, а не ховер для открытия навигации?
    1) Очевидно дело в юзабилити - при ховере юзеру придется постоянно наводить на нужный элемент, чтобы меню появилось, а если вдруг он случайно наведет не туда при уже открытом меню? Ему придется опять возвращаться к первоначальной точке.
    2) В любом случае придется переписывать логику под клик для планшетов и мобильных. Так зачем выполнять одну работу дважды?
    3)
    но дизайнер со страстью которой можно позавидовать топит именно за него
    Его область - дизайн, а как это будет работать - это уже ваша задача, так что ваше мнение тут должно быть приоритетнее. И на край скиньте ему ссылку для прочтения Why Hover Menus Do Users More Harm Than Good
    Ответ написан
    Комментировать
  • Как сложить все значения динамически добавляемых input?

    @goshaLoonny
    Ответ написан
    Комментировать
  • Как сложить все значения динамически добавляемых input?

    XanXanXan
    @XanXanXan
    const result = document.querySelector('.result');
    const inputContainer = document.querySelector('.input-container');
    
    inputContainer.addEventListener('input', () => {
      result.textContent = Array.from(
        inputContainer.querySelectorAll('.input_js'),
        input => Number(input.value)
      ).reduce((a, b) => a + b);
    });
    Ответ написан
    1 комментарий
  • Как сверстать такое расположение блоков (желательно на флексах)?

    Get-Web
    @Get-Web Куратор тега CSS
    Front-End Developer
    Например так:

    Или отрицательный margin как в комментарии ответили
    Ответ написан
    Комментировать
  • Как правильно обрезать строку?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Можно регулярным выражением вытащить последнее число прямо перед закрывающей скобкой, которое непременно со знаком минус:
    const str = 'matrix(1, 0, 0, 1, 0, -47)'
    
    +str.match(/(-\d+)\)/).pop()  // -47
    Плюс перед выражением это унарный оператор, который переводит аргумент в тип число.
    Ответ написан
    5 комментариев
  • Такая запись деструктуризации считается ограничением а нгуляре?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    1. destructuring assignments в микросинтаксисе структурок не работает https://github.com/angular/angular/issues/27555

    2. лучше писать так
    <div *ngFor="let entry of obj | keyvalue">
      {{ entry.key }} {{ entry.value }}
    </div>
    Ответ написан
    Комментировать
  • Как запустить 5000 потоков параллельно с GET запросами?

    Vamp
    @Vamp
    Распараллелить выполнение в самом воркере с помощью ReactPHP или лучше GuzzleAsync. В таком случае не придется держать 5000 воркеров именно

    Вариант с GuzzleAsync - самый лучший. Под капотом он использует возможности curl_multi_exec, которые позволяют асинхронно отправлять несколько запросов, не плодя при этом лишние процессы. Не уверен конечно, что осилит 5000 параллельных запросов, но даже если и не сможет, то можно разделить 5000 между несколькими воркерами.

    2. "Правильно ли" это вообще делать с помощью PHP или это все таки задача уже других языков которые умеют в параллельное выполнение, корутины? Go, NodeJs?

    У вас нагрузка в основном IO bound, так что не имет значения какой язык выбрать. Главное чтобы он поддерживал IO multiplexing (который поддерживается в PHP через вышеупомянутый curl_multi_exec).

    3. Может уже есть готовые решения в виде библиотек на PHP? Искал, но не нашел

    Guzzle
    Ответ написан
    3 комментария
  • Как добавить данные в БД через HTML-форму?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Сначала учимся правильно соединяться.
    В случае mysqli это
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $link = mysqli_connect($host, $user, $pass, $db_name);
    $link->set_charset("utf8mb4");

    И никаких ужасов с "Соединение не установлено" тут быть не должно.

    После этого выполняем запрос INSERT. Причем запросы мы всегда пишем так, чтобы данные в БД попадали отдельно от самого запроса. Это непреложное правило, которое надо соблюдать всегда.
    Для этого надо
    • Заменить все переменные в запросе на специальные маркеры, которые называются плейсхолдеры или параметры, а по сути - просто знаки вопроса
    • Подготовить запрос к исполнению с помощью функции prepare(). Эта функция принимает строку запроса и возвращает экземпляр специального класса stmt, с которым в дальнейшем и производятся все манипуляции
    • Привязать переменные к запросу.
    • Выполнить подготовленный ранее запрос с помощью с помощью execute()

    В mysqli это будет так
    $sql = "INSERT INTO `events` (`title`, `discription`, `date`, `img`) VALUES (?,?,?,?)";
    $stmt = $link->prepare($sql);
    $stmt->bind_param("sssss", $title, $discription, $date, $path);
    $stmt->execute();

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

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

    Весь код, который добавляет запись в БД, должен быть расположен ДО любого вывода.
    После обработки запроса методом POST необходимо перенаправить клиента куда-нибудь методом GET и завершить работу скрипта. Делается это функцией header с заголовком location: . после которой написать exit;
    Соответственно, никаких ужасов с "Запись добавлена".

    Кстати, немного удобнее с БД работать не через mysqli, а чрез PDO, Тем более что там колупаться с bind_param не нужно, а можно сразу отправить все данные в execute

    Подключение
    $host = '127.0.0.1';
    $db   = 'test';
    $user = 'root';
    $pass = '';
    $port = "3306";
    $charset = 'utf8mb4';
    $options = [
        \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
        \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
        \PDO::ATTR_EMULATE_PREPARES   => false,
    ];
    $dsn = "mysql:host=$host;dbname=$db;charset=$charset;port=$port";
    $pdo = new \PDO($dsn, $user, $pass, $options);


    Выполнение запроса
    $sql = "INSERT INTO `events` (`title`, `discription`, `date`, `img`) VALUES (?,?,?,?)";
    $stmt = $link->prepare($sql);
    $stmt->execute([$title, $discription, $date, $path]);
    Ответ написан
    1 комментарий
  • Как задать пошагово класс?

    coderisimo
    @coderisimo Куратор тега JavaScript
    1 комментарий
  • Как вывести сумму двух чисел?

    Stalker_RED
    @Stalker_RED
    Кнопка не нужна, можно слушать событие input.
    У инпутов должен быть name. Похоже, вы используете классы не по назначению, но да ладно, с этим вы позже еще наиграетесь.
    Приводить к числу унарным плюсом - ненадежно и не наглядно. Хотя, надо признать, экономит изрядное количество нажатий на клавиатуру, если вы не пишете этот parseInt(X, 10);
    innerHTML используется для вставки HTML, если вставляете просто текст, то достаточно textContent.

    Ответ написан
    Комментировать
  • Как правильно писать код на js?

    JohnnyGat
    @JohnnyGat
    Стараюсь писать код, понятный человеку.
    const transformClass = document.querySelector(".info-speaker__link-wrap");
    const introLink = document.querySelector(".info-speaker__link");
    
    introLink?.addEventListener("mouseenter", (e) => {
        transformClass.classList.add("info-speaker__link-wrap-trans");
    });
    
    introLink?.addEventListener("mouseout", (e) => {
        transformClass.classList.remove("info-speaker__link-wrap-trans");
    });


    https://developer.mozilla.org/ru/docs/Web/JavaScri...
    Оператор ?. заменяет проверку того что объект существует.
    Ответ написан
    1 комментарий
  • Как написать цикл foreach без повторений блока разметки html?

    function build_table($array){
        $html = '';
        if (count($array)) {
            foreach( $array as $key=>$value){
                if (count($value)) {
                    $html.= '<tr><td>'.implode('</td><td>',$value).'</td></tr>';
                }
            }
            if ($html != '') $html = '<table>'.$html.'</table>';
        }
        return $html;
    }

    Не проверял, но идея думаю понятна.
    Ответ написан
    1 комментарий
  • Как вывести данные из бд на определённый отрезок времени?

    @magarif
    Программист
    Мне кажется, вам нужно просто добавить условие
    Если есть поле `dateEnd` в формате даты

    foreach ($content as $key) {
      $showClass = strtotime($key->dateEnd) - time() > 0;
      echo '<span class=" span__content '. ($showClass ? $key->css_class_top : '') .'">контент</span>';
    }
    Ответ написан
    3 комментария