Задать вопрос
  • Зачем нужны set, get?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Ну вот из самого простого, что нельзя сделать с функцией, но можно с get/set:
    obj.field++;
    obj.field += 5;
    const variable = obj.field = 10;


    Или еще пример, вот было у нас
    const human = {
      name: 'Andrew'
    };
    Мы уже в коде много где использовали это поле как поле, и вдруг понадобилось делать что-то, когда это поле меняется, что проще, сделать сеттер или поменять весь остальной код?
    Ответ написан
    Комментировать
  • Не работает git add в чем может быть причина?

    bingo347
    @bingo347
    Crazy on performance...
    У Вас никаких изменений в индексируемых файлах, есть не индексируемая папка dist (которая по хорошему должна быть прописана в игноре).
    При этом Вы пытаетесь добавить файл parser/start.js
    Естественно git плевал на это, если в этом файле не было изменений
    Ответ написан
  • Как сделать выполнение php кода, когда пользователь закрыл вкладку?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Посылать запросы на unload/beforeunload события, как рекомендует Алексей Николаев - не очень хорошая идея
    Асинхронный запрос будет оборван в произвольное время, и может не дойти до сервера. Синхронный - заблокирует вкладку и создаст неприятный пользовательский опыт.

    Специально для таких случаев есть navigator.sendBeackon, который работает асинхронно, но не обрывается при закрытии вкладки (даже если сервер будет держать запрос пол часа - будет работать все ок, я проверял)
    Правда если нужна поддержка IE или старых сафари (iOS10 и старее), то все же придется вернутся к синхронным запросам для этих браузеров
    Ответ написан
    Комментировать
  • Как сделать vast рекламу html5?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    В спеке более чем разжевано как сделать:
    https://www.iab.com/wp-content/uploads/2015/06/VAS...

    Сам VAST - не более чем xml с данными, если не нужна поддержка VPAID - сделать можно за 1 вечер буквально.
    Ответ написан
    Комментировать
  • Как сделать автозапуск pm2?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    pm2 save
    сохраняет информацию о текущих запущенных процессах из под текущего юзера в папке ~/.pm2
    для каждого юзера у pm2 свой список процессов и свой дамп
    Нужно выполнять каждый раз, когда поменяли список процессов и хотим при перезапуске восстанавливать в текущем состоянии

    pm2 startup
    Добавляет сам pm2 в автозагрузку, в приоритете использует system.d, при отсутствии знает еще несколько init систем.
    Нужно выполнять 1 раз, сразу после установки pm2 и из под root (sudo pm2 startup)
    В случае systemd будет создан юнит pm2-root.service и сразу будет выполнено systemctl enable pm2-root.service
    Ответ написан
    Комментировать
  • Почему не работает smaba share?

    bingo347
    @bingo347
    Crazy on performance...
    Так исторически сложилось, что атрибут -x (он же единичка в восьмеричной записи) на директории означает не execute (как у файлов), а listing
    При 0 вообще ничего не сделать
    1 (-x) - возможность выполнять файл (или возможность делать листинг у директории, то есть смотреть ее содержимое)
    2 (-w) - возможность писать
    4 (-r) - возможность читать
    Другие цифры получаются суммой
    Так же в восьмеричной записи 3 цифры: права владельца, права владеющей группы, права всех остальных
    Если samba работает от пользователя и группы отличной от владеющих директорией - то первые две семерки к ней никак не относятся
    Ответ написан
  • Node.js надо инсталлировать в каждый проект, или можно "извне" задавать директорию глобальных пакетов?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    npm по умолчанию ставит все пакеты в папку node_modules внутри папки проекта
    node.js а так же бандлеры вроде webpack или rollup по умолчанию ищут модули в папке node_modules внутри проекта
    Глобально ставить ничего не нужно, это чревато проблемами с конфликтом версий и ошибками из-за этого. Глобально можно установить только терминальные утилиты используемые вне проектов (например глобальный eslint может понадобится IDE) и вот тут как раз таки стоит заморочиться настройкой, чтоб они устанавливались и работали из папки пользователя и им не нужны были административные права для установки и обновления.
    Ответ написан
  • Как распределить файлы по расширению по папкам - Webpack?

    bingo347
    @bingo347
    Crazy on performance...
    что-то вроде такого:
    const path = require('path');
    const MiniCssExtractPlugin = require('mini-css-extract-plugin');
    module.exports = {
      output: {
        path: path.join(__dirname, 'dist'),
        filename: 'js/[name].js'
      },
      plugins: [
        new MiniCssExtractPlugin({
          filename: 'css/[name].css'
        })
      ]
    };
    Ответ написан
    1 комментарий
  • Почему в ЯП'ах максимум 64 байта для переменной?

    bingo347
    @bingo347
    Crazy on performance...
    Это в каком это ЯП 64 байтные инты?
    64 бита (8 байт) - размер машинного слова на 64 разрядных машинах, это означает, что у Вас регистры процессора в основном по 64 бита, ячейки памяти, тоже по 64 бита. А значит и 8 битный инт на деле займет 64 бита, хотя если компилятор будет понимать, что вот тут до 8 подряд идущих 8 битных интов (или до 4х 16-битных, до 2х 32 битных), то их можно положить все в одну ячейку.
    Инты до 64 бит большинство современных процессоров могут обрабатывать в 1 ассемблерную команду для основных арифметических операций. Для большей разрядности арифметика уже строится алгоритмически. В некоторых случаях ее можно оптимизировать с помощью SIMD инструкций, но в любом случае задача это нетривиальная и далеко не всегда нужная. Поэтому ЯП ориентированные на математические вычисления как правило имеют такие типы данных, а другие языки чаще предлагают использовать библиотеки.
    Ответ написан
    Комментировать
  • Как написать асинхронный jest тест для action // mobx?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Во-первых, addItem ничего не возвращает, естественно нельзя вызвать у ничего (undefined) метод then, так как у undefined в принципе не может быть методов. Нужно добавить return:
    addItem = text => {
               return axios.post("/task", {
                   headers: { "Content-Type": "application/json" },
                   text: text
                 })
                 .then(res => {
                   this.arr.push(res.data.task);
                 })
                 .catch(e => console.log(e));
             };

    Во-вторых, у jest для промисов есть конструкция resolves
    describe("STORE", () => {
      it("create new task", () => {
        const store = new Store();
        const text = "test";
        expect(store.addItem(text)).resolves.toBe(1);
      });
    });

    И да, тест будет вполне законно провален, причина опять таки в return, но с этим я уже предлагаю разобраться самостоятельно
    Ответ написан
    1 комментарий
  • Как исправить эту ошибку nodejs, typescript?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    Нода не умеет typescript

    Вариант 1: скомпилировать
    устанавливаем:npm i typescriptи запускаем$(npm bin)/tsc examplesестественно нужен tsconfig.json
    Вариант 2: ts-node
    устанавливаем:npm i typescript ts-nodeи запускаем
    $(npm bin)/ts-node examples/upload-story.example.ts
    Ответ написан
    Комментировать
  • Как обновить дерево Vue.js?

    bingo347
    @bingo347
    Crazy on performance...
    OMG... упаси меня Боже зайти на сайт сделанный Вами...
    Нет, конечно можно Вам подсказать решение проблемы, но Вы вряд ли поймете, Вы ведь даже с документацией фреймворка ознакомится не удосужились, при том что она имеет нормальный перевод...

    Я попробую все же подсказать:
    Реактивные данные должны быть задекларированы в data, ну или в крайнем случае можно сделать незадекларированные данные реактивными через Vue.set

    И пожалуйста, не делайте так:const el = this.forms.find((f, idx) => idx === x);Скажите мне, зачем? Зачем нужно гонять ЦИКЛ ради того что бы достать элемент массива по индексу?const el = this.forms[x];даст абсолютно аналогичный результат, но не сожрет кучу тактов моего процессора...

    А вообще, бросайте Вы это программирование. Не Ваше это!
    Ответ написан
  • Должен ли верстальщик писать логику, например калькулятора обмена валюты?

    bingo347
    @bingo347
    Crazy on performance...
    Зависит от того что Вы прописали в договоре с заказчиком и в ТЗ
    Ответ написан
    3 комментария
  • Как добавить класс когда элемент появляется в область видимости?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Вот этоvar m_top = $('.go').offset().top;запомнит оффсет только для самого первого элемента найденного по селектору, поэтому и обрабатывается только он.
    Использовать событие scroll для отслеживания вьюпорта - это наплевательское отношение к ресурсам пользователя, ведь есть более эффективное апи для этого - IntersectionObserver
    Пример:
    $(document).ready(function(){
      var observer = new IntersectionObserver(function(entries){
        entries.forEach(function(entry){
          if(entry.isIntersecting) {
            $(entry.target).addClass('active bounceInLeft');
          } else {
            $(entry.target).removeClass('active bounceInLeft');
          }
        });
      }, {threshold: 0.1});
      $('.go').each(function(){
        observer.observe(this);
      });
    });

    Если нужен IE или Safari старее 12, то вот полифил: https://www.npmjs.com/package/intersection-observer
    Ответ написан
    Комментировать
  • Как в Vue в методе вызвать другой метод?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Комментировать
  • У меня убунту, а вторая система винда. Как удалить винду?

    bingo347
    @bingo347
    Crazy on performance...
    как восстановить винду
    Почитайте:
    https://losst.ru/ustanovka-zagruzchika-grub
    особенно про grub2-mkconfig
    Ответ написан
    Комментировать
  • Как сформировать объект в виде ассоциативного массива?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Да. В каждой форме по 3 элемента
    const arr = $('.filter').serializeArray();
    const result = [];
    for(let i = 0; i < arr.length; i += 3) {
      result.push(arr.slice(i, i + 3).reduce((acc, {name, value}) => ({...acc, [name]: value}), {}));
    }
    Ответ написан
    1 комментарий
  • Проблема при сборке проекта NPM?

    bingo347
    @bingo347
    Crazy on performance...
    webpack не установили
    Ответ написан
    Комментировать
  • Как выложить проект node.js и mysql на хостинг?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    Классический shared хостинг как правило не поддерживает ноду, так что вариантов тут 2: или искать спец хостинг под ноду или арендовать виртуальный сервер. За сравнительно небольшие деньги сегодня можно получить или виртуалку с настоящим линуксом или OpenVZ контейнер (что в принципе то же linux, но не совсем честный).
    Разобраться, как развернуть свое окружение не особо сложно, но если совсем никак, на фрилансе и сисадмины бывают.
    Ответ написан
    9 комментариев
  • Как получить колбек загрузки внешнего скрипта?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Если сторонняя библиотека посылает xhr/fetch запрос, то перехватить его со страницы невозможно никак, разве что обернуть соответствующее апи до загрузки этой библиотеки.
    Если это именно вставка скрипта, то у скрипт элемента есть события load и error связанные с загрузкой, можете подписаться на них. Тут задача уже, как поймать добавление конкретного тега скрипт, думаю MutationObserver прекрасно справится с этой задачей.
    Более подробных советов без кода и понимания, что происходит на странице, тут не дашь
    Ответ написан
    Комментировать