• Ветка рефералов, как сделать?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    MySQL 8
    WITH RECURSIVE `cte` (`level`, `id`, `login`, `referrer`) AS (
      SELECT 0, `id`, `login`, `referrer`
        FROM `users`
        WHERE `id` = :userId
      UNION
      SELECT `u`.`level` + 1, `r`.`id`, `r`.`login`, `r`.`referrer`
        FROM `cte` AS `u`
        JOIN `users` AS `r` ON `r`.`id` = `u`.`referrer`
    )
    SELECT *
      FROM `cte`
    Ответ написан
    4 комментария
  • SASS: extend or mixin?

    andead
    @andead
    друпал девелопер, фрилансер
    extend нельзя использовать в @media, поэтому пользуюсь только миксинами.
    Ответ написан
    Комментировать
  • Как сделать формат данных в цикле?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const clone = (data, replacements) =>
      data instanceof Object
        ? data instanceof Array
          ? data.map(n => clone(replacements?.hasOwnProperty(n) ? replacements[n] : n, replacements))
          : Object.fromEntries(Object.entries(data).map(([ k, v ]) => [
              k,
              clone(replacements?.hasOwnProperty(k) ? replacements[k] : v, replacements)
            ]))
        : data;
    
    
    const products = arr.map(n => clone(obj.product[0], n));
    Ответ написан
    4 комментария
  • Как писать fullstack с webpack?

    Aetae
    @Aetae
    Тлен
    webpack devServer, в частности функция proxy.
    Webpack поднимает сервер с горячей перезагрузкой фронта, бэк сервера поднимаешь на других портах, и обращаешься к api прозрачно с помощью встроенного прокси.
    Ответ написан
    Комментировать
  • Как запретить писать в input?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Никак не обезопаситься. Всегда можно посмотреть, что за запрос уходит из браузера и симмитировать его с любыми нужными полями/заголовками/куками.
    Данным, пришедшим от клиента, доверять нельзя никогда.

    P.S. Хотя для вашей ситуации можно на сервере подписать данные электронной подписью или зашифровать их и на сервере же проверять подпись/расшифровывать. Но если ключ будет один на всех, то можно будет подставить данные с другого клиента, а если ключ будет свой для каждой сессии, то проще хранить данные в сессии и не отдавать клиенту.
    Ответ написан
    2 комментария
  • Как определить при помощи JS браузер пользователя и его ip?

    SPART4K
    @SPART4K
    Middle Front-end Developer (Vue.js/Nuxt.js)
    navigator.userAgent
    Информацию о браузере - устройствe и тп

    fetch('https://api.ipify.org/').then(
      r => r.text()
    ).then(console.log);

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

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

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

    CREATE TRIGGER trigger_name
    EVENT ACTION ON table_name
    FOR EACH ROW
    BEGIN
        SET @trigger_name_table_name = CONCAT('executed, ', 'column_value=', NEW.column);
    -- trigger action
        SET @trigger_name_table_name = NULL;
    END;

    Если в теле триггера определены EXIT хэндлеры - они тоже должны выполнять соответствующие сбросы.
    Ответ написан
    Комментировать
  • Как решит вопрос с учеткой?

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

    Grinvind
    @Grinvind
    Помогаю увеличивать трафик с поисковых систем
    Пользуюсь приложением AIMP, единственное, не в курсе, есть ли синхронизация у него.
    Ответ написан
    Комментировать
  • Крауд маркетинг/ссылочный профиль - ссылаться на domain.com или domain.com/de, если хочешь продвинуться в Германии?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    имеет, входит в рекомендации Webmasters
    но неясным осталось не наказывает ли Гугл за явную анкорность

    одно дело - ссылка на domain.com/de/uber-alles.html ( типа из строки скопировали), и другое - просто на domain.com/de/, куда фиг попадешь без редиректа

    продумайте этот момент

    вроде бы доказано работает сабдомен, т.е. de.domain.com
    с папкой же мы экспериментировали, но все AB тесты ничего не показали, может быть так, а может и эдак
    Ответ написан
    2 комментария
  • Почему происходит перезагрузка сайта при нажатии на кнопку?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ответ написан
    Комментировать
  • Как в классе со статическими методами создать подключение к БД?

    rozhnev
    @rozhnev
    Fullstack programmer, DBA, медленно, дорого
    Передавать в метод параметром

    static addUser(db, {user}) {
        db.query(...)
    }
    static removeUser(db, user_id) {
        db.query(...)
    }
    Ответ написан
    1 комментарий
  • Как дотянуться до метода в этом случае?

    Seasle
    @Seasle Куратор тега JavaScript
    const foo = {
        bar: t => t * 2,
        baz: {
            biz(a) { return this.bar(a) }
        }
    };

    и
    foo.baz.biz.bind(foo)(4)
    или
    foo.baz.biz.call(foo, 4)
    или
    foo.baz.biz.apply(foo, [4])
    Ответ написан
    Комментировать
  • Как составить запрос по разным строкам, где значение одного из столбцов одинаковое?

    rozhnev
    @rozhnev Куратор тега MySQL
    Fullstack programmer, DBA, медленно, дорого
    select user_id
    from tbl 
    where entity_id in (24, 25)
    group by user_id
    having count(distinct entity_id) = 2;


    sqllize
    Ответ написан
    Комментировать
  • Как создать файл используя js?

    Sect0R
    @Sect0R
    Full Stack Developer
    function downloadTextAsFile(text, filename) {
      const blob = new Blob([text], {type: 'text/plain;charset=UTF-8'});
      const link = document.createElement('a');
    
      link.setAttribute('download', filename);
      link.setAttribute('type', 'hidden');
      link.setAttribute('href', window.URL.createObjectURL(blob));
    
      document.body.appendChild(link);
      link.click();
    
      setTimeout(() => {
        window.URL.revokeObjectURL(link.href);
        document.body.removeChild(link);
      }, 100);
    }
    
    downloadTextAsFile('Hello world', 'hellofile.txt');
    Ответ написан
    Комментировать
  • Каррирование... Что здесь происходит?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    Константин, карирование оно не в вызове функции. А в том, что после вызова функции возвращается другая функция, внутри которой есть замыкание на аргумент, переданный в предыдущий вызов.

    Правильно ли я понимаю, что curriedSum(1)(2,3) - здесь в качества a - цифра 1, а в качестве b - (2,3) ? А как же c?

    Eсли смотреть относительно функции sum, то:
    В первых круглых скобка только a = 1.
    Во вторых круглых скобках b = 2 и c = 3.

    А здесь тогда как? curriedSum(1)(2)(3) - где здесь каррирование?

    Первый вызов вернёт функцию, которая "помнит" 1, второй вызов вернёт функцию, которая "помнит" 1+2, ну и третий вызов вернёт сумму 1+2+3.

    То есть эта запись: curriedSum(1)(2)(3)
    Эквивалентна этой:
    let curriedSum = curry(sum); // сделали функцию sum карируемой.
    
    var one = curriedSum(1) // так как sum ожидает 3 аргумента, то этот вызов вернёт функццию, которая помнит 1 и ожидает ещё 2 аргумента.
    var onePlusTwo = one(2) // так как sum ожидает 3 аргумента, то этот вызов вернёт функццию, которая помнит 1 и 2 и ожидает ещё 1 аргумент.
    var result = onePlusTwo(3) // так как sum ожидает 3 аргумента, два аргумента уже помнит функция onePlusTwo и мы передаём третий аргумент, то вернёт результат sum(1,2,3)
    result == 6 // true
    
    // При этом, мы можем в данном случае снова вызвать onePlusTwo, но уже с другим аргументом,
    // и получим соответствующий результат:
    onePlusTwo(7) // вернёт 10, так как onePlusTwo помнит 1+2, то есть получим sum(1,2,7) // 10.

    Вот в чём и состоит смысл карирования. Иметь функцию, которая помнит какое-то значение и не требует каждый раз это значение в аргументах.
    Ответ написан
    Комментировать
  • Как наложить цвет на png с помощью CSS, JS?

    Get-Web
    @Get-Web Куратор тега CSS
    Front-End Developer
    Как вариант использовать изображение как маску:
    Ответ написан
    1 комментарий
  • Сколько всего ip адресов в глобальном интернете?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Реально можно использовать чуть меньше 2 млрд адресов
    IPv4. Фактически последние IP-blocks были распределены много лет назад.
    Сейчас только за счет NAT и серых адресов в ротации абоненты и получают в аренду
    ардеса.

    Новые адреса можно добыть только забрав их номера у корпораций которые в свое время
    нахватали много.
    Самой большой долей адресов владеет США.

    По IPv6 не скажу. Не знаю.
    Ответ написан
    3 комментария
  • Перспективно ли изучения GO для начинающих?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я не собираюсь переквалифицироваться в джуны и пытаться устроиться в компанию, возраст уже не тот для этого да и организация иная - нет привязки к единому месту географически к тому-же я всегда худо-ли бедно, но работал на себя, не в компании.


    Письмо, полное сомнений и множества вопросов. Я не совсем понял что требуется от нас. Если отвечать на главный вопрос - то да. Перспективно. Go драйвит Google как основной язык для микросервисов. Но учитывая возраст кандидата я-бы спросил следующее.
    - как с английским?
    - как быстро обучаешся чему-то новому?
    - согласен ли на релокацию?

    Какие перспективы в РФ - понятия не имею но перспективы в зарубежных конторах - есть.

    Хочу предупредить автора об ошибках которые я сам совершал. Я думал что дело в языках и технологиях. Но это не так. Дело в коммуникациях. Я работал минимум с 5 зарубежными компаниями и я своими глазами видел что мои знания просто нивелировались на фоне например моего не очень сильного английского. А другие teammates в силу широких коммуникатиционных скилов могли очень быстро найти контакт с нужными людьми и обходили
    меня в карьере достаточно быстро.

    По сути когда тебе за 40 - вообще не имеет значения какой язык ты знаешь. У тебя за плечами должен быть уже
    такой багаж что тебя можно просто брать как опытного советника в технических вопросах. Язык можно подучить но если речь идет просто о распределенных системах и микро-сервисах то больше знаний требуется в части например анализа узких мест системы. Кеширования. Грамотного дизайна безопасности и репликаций и бекапов и восстановления от сбоев. Этот пласт знаний вообще лежит вне языка. И поэтому джун даже очень хорошо выучивший Go или Python не может решать такие вопросы. А автор - скорее всего может. Барьером может быть
    какая-то банальность. Например язык. Поэтому я и спрашиваю.
    Ответ написан
    4 комментария