Задать вопрос
  • Как красиво использовать динамически подгружаемый API?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Вот те простой хэлпер для ленивой загрузки одной функции:
    function lazyAsync(lib) {
      let promise;
      return async function (...args) {
        promise ??= lib();
    
        return (await promise).call(this, ...args);
      };
    }
    
    const doSomething = lazyAsync(async () => {
      // тут загружаем
      const doSomething = await loadLib('doSomething');
    
      // тут что-то делаем с загруженным
    
      // тут возвращаем конечную функцию
      return data => {
        // тут делаем с аргументами
        return doSomething.process(imgData);
      };
    });
    
    // если сразу загружается нужная функция - можно не усложнять
    const doSomething = lazyAsync(loadDoSomethingProcess);
    
    await doSomething(1);
    await doSomething(2);
    await doSomething(3);
    Ответ написан
    Комментировать
  • Как предотвратить имитацию запросов?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Здесь в вопросе - 2 разных вопроса. Мне кажется так:
    1) Как защититься от любого мусора который прилетает с клиента. Скорее всего никак.
    Нужно реагировать только на HTTP запросы которые имеют смысл в контексте пользовательской
    сессии. Тут - как-бы бизнес логика и FSM для сессии должен все решать. Хакеры с помощью
    wget, curl, python могут генерировать фаззингом миллионы самых вариативных запросов
    в поиске вашего слабого места в этой части защиты.

    2) Как защититься от атаки man-in-the-middle.. Это если легальный пользователь
    зашел в свой клиент банк, а некто, кто физически сидит на канале может перехватывать
    IP пакеты. Изменять их. Удалять. Задерживать на какое-то время или делать повторы.
    Здесь коробочное решение это https (TLS/SSL) протокол по идее помогает.
    Ответ написан
    Комментировать
  • Почему SQL ошибка?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    RTFM
    У MariaDB (как и у MySQL) DISTINCT применяется только целиком к полученной строке. Никаких DISTINCT ON() в них нет.
    Ответ написан
    4 комментария
  • Скрипт JS Как сделать переадресацию в зависимости от utm метки?

    @leeroyjenkins176
    const links = {
    	36624938042: 'https://marketing-parsing3.tilda.ws/im/tproduct/368371303452-radialnie-opravki-levie-korotkie-vdi-b3',
    	48534127142: 'https://marketing-parsing3.tilda.ws/im/tproduct/579863714382-blok-privodnoi-radialnii-vdi40-5480-er32'
    }
    
    const searchParams = new URLSearchParams(location.search)
    const utm = searchParams.get('utm_term')
    
    if(utm && links.hasOwnProperty(utm)) {
    	location.href = links[utm]
    }


    Как написать скрипт для получения данных именно с гугл-таблицы придется разбираться самостоятельно
    Ответ написан
    Комментировать
  • Как устранить ошибку подлинности уведомления bitrix?

    YooMoneyHelp
    @YooMoneyHelp
    Добрый день!

    По нашим данным, на стороне Битрикса есть ограничение на приём запросов из внешних источников. IP адрес 162.158.172.37 не принадлежит ЮMoney.
    Ошибка говорит о том, что на вашей стороне что-то перехватывает уведомление от ЮKassa и отправляет его в Битрикс уже с другого IP.

    Подобное поведение часто встречается, если включена какая-либо anti DDos защита. Суть в том, что сервис подменяет IP уже на локальный и дублирует уведомление обработчику Битрикса. А в самом модуле установлена проверка на подлинность хостов - запрос должен приходить именно с IP ЮKassa, а не с локального адреса anti DDos.
    Ответ написан
    Комментировать
  • Как вложить span в textarea?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Никак.
    Textarea - зона текста, там может быть только текст.
    Если хотите большего - есть только три варианта, два - геморройные, с кучей коссбраузерных несовместимостей и особенностей, которые обязательно заставят вас рвать волосы на заднице:
    1. Отказаться от textarea и использовать contentEditable div.
    2. Подкладывать под(или поверх с pointer-events:none) div, который копирует содержимое textarea 1:1 со всеми стилями и отступами и раскрашивает его как надо.

    ...и третий, рекомендуемый лично мной:
    3. Использовать одну из долгоживущих готовых библиотек, в которых всё давно отладили и предоставили удобные интерфейсы.
    Ответ написан
    3 комментария
  • Как обойти проверку на ручной ввод js?

    r3n0
    @r3n0
    // _ AppSec // Bug Bounty / Legal Hacking
    Привет.

    Очень напомнило форму на одном известном сайте:

    66ab38fd4b836906599227.png

    Код поля ввода:

    <input placeholder="Ваш email" type="email" class="email_text" name="Re_Enter_Email" id="Re_Enter_Email" value="" required="required" onblur="preSubmitPay(0);" onkeydown="$('#err_email_enter_msg').hide();" oncopy="return false" ondrag="return false" ondrop="return false" onpaste="return false" autocomplete="off">


    Легко обходится, например, таким образом:

    document.getElementById('Re_Enter_Email').value = "email@email.tld";


    Практика показывает, что в подобных случаях проще присвоить нужное значение value, чем морочиться с отключением событий on* и имитировать пользовательский ввод.
    Ответ написан
    Комментировать
  • Сколько оперативной нужно веб серверу?

    @anton99zel
    29а класс средней школы №7
    Вы спрашиваете о чём то абстрактном.
    Что значит онлайн? Если это сайт, то он работает по принципу запрос-ответ. Любой вебсервер, типа Nginx или Apache могут обработать тысячи подключений в секунду.
    Расход памяти на поддержку системных сервисов хватит 512 мегабайт.
    А вот то, что действительно расходует память это запросы в базу данных и выполнение кода, допустим php.
    Тут зависит от методик, если вы умеете писать грамотно запросы в базу, знаете как работать с кешем, пишите оптииизированный и продуманный код, включая разумное использование сторонних библиотек, таких как плагины, шрифты, разного рода обработки.
    Условно говоря, можно положить сервер со 128 гигабайтами, а можно работать и с 4 гигабайтами.
    Нужно проводить тестирование, выявлять нагрузки и пытаться оптимизировать это.
    Вообще, линукс от виндовс отличается тем, что сколько линуксу памяти не выдавать, он будет резервировать под свои процессы не конкретный объем, а процентное соотношение.
    Ответ написан
    Комментировать
  • Сколько оперативной нужно веб серверу?

    @historydev
    Mistkerl, drück den Knopf.
    Вопрос из разряда погадай на шарике.
    Каждый запрос может тянуть от одного до N действий за собой, помимо самого наличия этого запроса (сетевая карта), каждое действие аналогично может тянуть за собой другие действия.

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

    Следом умножаешь кол-во ресурсов на ожидаемое кол-во запросов, а кол-во запросов - это среднее кол-во запросов от обычного юзера твоего проекта.

    Допустим мы выяснили, что на один запрос тратится 100мб оперативной памяти, 0.1% диска и 5 секунд времени это всё занимает, у нас 10 пользователей и 20 запросов в минуту среднее.

    Средняя общее кол-во запросов: (10 * 20) = 200
    Средний расход диска: (0.1 * 200) = 20%
    Средний расход оперативной памяти: (100 * 200) = 20000
    Ответ написан
    Комментировать
  • Почему Ctrl + D не дает коду выполняться дальше, а просто завершает программу?

    Adler_lug
    @Adler_lug
    Потому что Ctrl+D ≠ EOF
    Saying that Ctrl-D sends EOF is an educational lie-to-children. What it actually does is make any ongoing read() from the terminal return immediately with the contents of the current line buffer if any.

    Synergy happens because the Unix convention is that a read() of zero bytes represents EOF.

    This means that if you press Ctrl-D with an empty buffer, the read() will return with zero bytes, and a canonical program will interpret it as end-of-file. This is obviously just an illusion since you're still there to input more on the terminal, and a less canonical program could just keep reading if it wanted to.

    If you instead press Ctrl-D after entering some data, then that data is just returned and a canonical program will keep reading to find a linefeed or whatever else it's looking for.

    This is why EOF behavior is only triggered in canonical programs when Ctrl-D is pressed either after another Ctrl-D (the first flushes the buffer, the second returns a now-empty buffer) or after an Enter (for the same reason).
    Ответ написан
    1 комментарий
  • Как в битрикс в поисковой выдаче вывести разделы, к которым относиться искомый элемент?

    @koder_1
    Битрикс программист
    Берете стандартный компонент поиска, подсказку из товаров он уже выдает. Находите шаблон для вывода всплывающей подсказки, запросом по id найденных элементов получаете их разделы и добавляете разделы в подсказку.
    Ответ написан
    1 комментарий
  • Беспроводная клавиатура ломает X.Org. Как победить?

    CityCat4
    @CityCat4
    Дома с переломом ноги
    Тут вообще-то есть несколько ошибок, которые нужно устранить.

    1. Накуа modesetting? Пропишите руками дрова radeon (ATI же?)
    2. Найдите почему возникает failed to enable I/O ports

    Свисок может садиться на порты, котореы система предполагает под что-то другое, посмотрите, как он детектится. Ну, в крайнем случае - перейдите на провод, хотя это конечно попс - я сам не люблю провода от клавы...
    Ответ написан
    Комментировать
  • Можно ли писать div вне body?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега HTML
    Это так.
    Браузер прожуёт довольно страшную хрень, которую напишет разработчик, но есть ровно ноль причин её писать сознательно.
    Ответ написан
    1 комментарий
  • Как можно оставить в таблице_2 только те ID которые есть в таблице_1, остальные удалить?

    rozhnev
    @rozhnev Куратор тега MySQL
    Fullstack programmer, DBA, медленно, дорого
    Элементарно:
    DELETE FROM table2
    WHERE NOT EXISTS (SELECT id FROM table1 WHERE table2.id = table1.id);


    https://sqlize.online/s/po
    Ответ написан
    Комментировать
  • Как перевернуть наоборот добавленные из бд отзывы?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Я думаю что так лучше:
    SELECT `name`, `text`, `date` FROM `reviews` ORDER BY `date` DESC


    Кроме этого, я не советую использовать "root" для подключения к базе!
    Так же не советую выводить пользователю ошибки базы данных. Их следует писать в лог!
    Ответ написан
    Комментировать
  • Динамическое создание тега на JS, почему не сработает обработчик событий?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Ведь мы создаем новый li при клике на btn, и он попадает в DOM
    Ну да, попадает. А чтобы что-то с ним делать, нужно навесить обработчик события. Совершенно непонятно, что вас в этом процессе удивляет.
    Вы можете делегировать обработку события родительскому контейнеру (<ol />) и тогда навешивать отдельные обработчики на создаваемые элементы не придётся.
    Ответ написан
    3 комментария
  • PHP: Почему 'mb_convert_encoding' не конвертирует простую строку?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    - var_dump( $str );
    + echo bin2hex($str);
    Получаем cf f0 e8 e2 e5 f2 20 32 30 31 39 20 cc e8 f0 21
    Открываем таблицу cp1251 и смотрим
    cf - П, f0 - р, e8 - и, e2 - в, e5 - е, f2 - т, 20 - пробел, 32 - 2, 30 - 0, 31 - 1, 39 - 9, 20 - пробел, cc - М, e8 - и, f0 - р, 21 - !
    Привет 2019 Мир!
    Всё вполне сконвертировалось.
    Ответ написан
    Комментировать
  • PHP: Почему 'mb_convert_encoding' не конвертирует простую строку?

    @alexalexes
    $str = 'Привет 2019 Мир!'; // написано в той кодировке, в которой сохранен файл (хрустальный шар говорит, что utf-8)
    $str = mb_convert_encoding( $str, 'windows-1251', mb_detect_encoding( $str ) ); // конвертируем в cp1251
    header('Content-Type: text/html; charset=windows-1251'); // Откуда трабла с кодировкой? - не соответствие сообщаемой кодировки в http-заголовке от сервера, с выводимым контентом от сервера. Исправляется явным указанием заголовка
    var_dump( $str ); // выводим в той кодировке, что выводит заголовок charset сервера в браузер (хрустальный шар говорит, что до указания header() было charset=utf-8)
    Ответ написан
    2 комментария
  • Как в текст из базы данных вставить шаблон?

    @Nolan81
    программист
    Так и делают. Называется - шорткоды. Смотря что у вас там за визуальный редактор в админке, может придется постараться, чтобы он как то визуально показывал что тут будет карусель
    Ответ написан
    Комментировать
  • Как разместить кастомную информацию на странице раздела?

    @koder_1
    Битрикс программист
    У разделов тоже есть пользовательские поля.
    В списке разделов кликаете кнопку с тремя точками слева от названия раздела, в всплывающем меню выбираете редактировать, и вы в редакторе раздела.
    В редакторе раздела на вкладке Доп поля можно создать дополнительное поле раздела.
    Ответ написан
    Комментировать