Задать вопрос
  • Есть ли современные ресурсы/книги по созданию WebGL графики для браузеров?

    WblCHA
    @WblCHA
    А почему именно голый ВебГЛ? Почему не тот же Three JS? Просто голый он если уж совсем углубляться в дебри, а оно тебе действительно надо?) Всё же применения у него мало, основные: игры и сложные анимации.
  • Почему async функции багаются быстрыми запросами? Как доработать?

    WblCHA
    @WblCHA
    Lynn «Кофеман», ну, извиняюсь, серьёзно базы никогда не трогал.) Впрочем, локи скорее дополнение ко всему вышесказанному, чем замена. Хотя хэндмейд очереди запросов можно заменить, вроде.
  • Почему async функции багаются быстрыми запросами? Как доработать?

    WblCHA
    @WblCHA
    Карлиндоу Мэрлифи, вебсокеты тебе здесь не помогут, у тебя бутылочное горлышко здесь — обращение к базе. В остальном Kentavr16 всё хорошо расписал.

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

    Естественно, обёртки наше всё.
  • Почему async функции багаются быстрыми запросами? Как доработать?

    WblCHA
    @WblCHA
    Карлиндоу Мэрлифи, тем не менее это самое простое решение. Добавь тротл/дебоунс со стороны клиента.
    Впрочем, на сервере тоже лучше ограничения поставить, ограничь количество запросов для пользователей в секунду, можешь ещё в очередь запихать запросы, если очень надо их так обрабатывать.
  • Как решить проблему с типизацией getValue?

    WblCHA
    @WblCHA
    Alexandroppolus, удачи.) Доставать все подключи всех ключей всех длин у меня желания нет.) Да и тс с удовольствием сожрёт все ресурсы твоего проца с таким количеством элементов в юнионе.
    К тому же тип так-то верный на выходе, ведь мы в любом случае получим массив.)
  • Чем занимаются Middle Frontend разработчики?

    WblCHA
    @WblCHA
    Kentavr16,
    Сейчас ведь есть еще и трейни-позиции

    Вообще, они всегда были, но непонятно зачем их называли и называют джунами.

    П.С. - сам не айтишник, но в силу обстоятельств много наслышан из первых уст о рекрутинге/HR в айти-сфере.

    Стоп, а кто ты?) Или программирование чисто хобби?
  • Json удаляет \ как исправить?

    WblCHA
    @WblCHA
    Так может стоит экранировать так необходимый символ?
  • Существуют ли аналоги AHK с нормальным диалектом?

    WblCHA
    @WblCHA
    у нее супер убогая документация

    Нормальная документация, чем она ТАК плоха?

    несовместимостью 1 и 2 версии, из-за чего часто гуглишь нерабочие примеры.

    Все они рабочие, во втором просто более строгие правила и переписать с первого на второй вообще не проблема (в основном, скобочки добавить и глобальные переменные подтянуть). Да и никто не мешает первую версию использовать.

    Вообще, первая версия не очень приятна, вторая явно лучше и удобнее.
  • Веб-разработка на Windows?

    WblCHA
    @WblCHA
    Drno,
    Просто потому, что это «обрубок» докера.

    Почему обрубок? Он же по умолчанию всл использует.

    И, если не ошибаюсь, wsl для устаеовки еще и магазин требует МСовский?

    Так было только для первых версий первого всла. И то, это было не для самого всла, а для обёртки (на тот момент тольку убунту была, по моему).
  • Веб-разработка на Windows?

    WblCHA
    @WblCHA
    VoidVolker,
    стабильностью

    А чем всл нестабилен? Уже года 3 его использую, но нестабильности незамечал.

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

    Разве почти все решения для линухи не работают для всл? Там же специфические решения только для взаимодействия между виндой и самим вслом.
  • Веб-разработка на Windows?

    WblCHA
    @WblCHA
    Лично я предпочитаю всл. Ещё с первой версии на нём сижу и рад.
  • Какие примеры кода показывать работадателю, если ты под NDA?

    WblCHA
    @WblCHA
    всем нужны примера кода, понятно почему

    Никому ненужны, а тем, кому нужны, непонятно зачем. Как минимум потому, что код — это результат работы команды.
  • Как сохранить результат функции в отдельную переменную?

    WblCHA
    @WblCHA
    Kentavr16, я бы ещё добавил, что этот замечательный человек никогда не отмечает ответы решением.)
  • Как правильно контролировать хук use-sound?

    WblCHA
    @WblCHA
    Как предотвратить вызов метода play при первом рендере, и вызывать play() только тогда, когда пользователь поменяет звук посредством функции handleChangeSound

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

    WblCHA
    @WblCHA
    serhiops, всё, проблема ясна и решение очевидно. Забудь о той фигне, что я выше написал, вот решение:

    spoiler
    function _defineProperties(target, props) {
      for (let i = 0; i < props.length; i++) {
        const descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        if ('value' in descriptor) {
          descriptor.writable = true;
        }
        Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
      }
    }
    function _createClass(Constructor, protoProps, staticProps) {
      if (protoProps) {
        _defineProperties(Constructor.prototype, protoProps);
      }
      if (staticProps) {
        _defineProperties(Constructor, staticProps);
      }
      Object.defineProperty(Constructor, 'prototype', { writable: false });
      return Constructor;
    }
    function _toPropertyKey(t) {
      const i = _toPrimitive(t, 'string');
      return typeof i === 'symbol' ? i : String(i);
    }
    function _toPrimitive(t, r) {
      if (typeof t !== 'object' || !t) {
        return t;
      }
      const e = t[Symbol.toPrimitive];
      if (void 0 !== e) {
        const i = e.call(t, r || 'default');
        if (typeof i !== 'object') {
          return i;
        }
        throw new TypeError('@@toPrimitive must return a primitive value.');
      }
      return (r === 'string' ? String : Number)(t);
    }
    function _classCallCheck(instance, Constructor) {
      if (!(instance instanceof Constructor)) {
        throw new TypeError('Cannot call a class as a function');
      }
    }
    function _callSuper(t, o, e) {
      return (
        (o = _getPrototypeOf(o)),
        _possibleConstructorReturn(
          t,
          _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e),
        )
      );
    }
    function _possibleConstructorReturn(self, call) {
      if (call && (typeof call === 'object' || typeof call === 'function')) {
        return call;
      } else if (call !== void 0) {
        throw new TypeError('Derived constructors may only return object or undefined');
      }
      return _assertThisInitialized(self);
    }
    function _assertThisInitialized(self) {
      if (self === void 0) {
        throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
      }
      return self;
    }
    function _inherits(subClass, superClass) {
      if (typeof superClass !== 'function' && superClass !== null) {
        throw new TypeError('Super expression must either be null or a function');
      }
      subClass.prototype = Object.create(superClass && superClass.prototype, {
        constructor: { value: subClass, writable: true, configurable: true },
      });
      Object.defineProperty(subClass, 'prototype', { writable: false });
      if (superClass) {
        _setPrototypeOf(subClass, superClass);
      }
    }
    function _wrapNativeSuper(Class) {
      const _cache = typeof Map === 'function' ? new Map() : undefined;
      _wrapNativeSuper = function _wrapNativeSuper(Class) {
        if (Class === null || !_isNativeFunction(Class)) {
          return Class;
        }
        if (typeof Class !== 'function') {
          throw new TypeError('Super expression must either be null or a function');
        }
        if (typeof _cache !== 'undefined') {
          if (_cache.has(Class)) {
            return _cache.get(Class);
          }
          _cache.set(Class, Wrapper);
        }
        function Wrapper() {
          return _construct(Class, arguments, _getPrototypeOf(this).constructor);
        }
        Wrapper.prototype = Object.create(Class.prototype, {
          constructor: {
            value: Wrapper,
            enumerable: false,
            writable: true,
            configurable: true,
          },
        });
        return _setPrototypeOf(Wrapper, Class);
      };
      return _wrapNativeSuper(Class);
    }
    function _construct(t, e, r) {
      if (_isNativeReflectConstruct()) {
        return Reflect.construct.apply(null, arguments);
      }
      const o = [null];
      o.push.apply(o, e);
      const p = new (t.bind.apply(t, o))();
      return r && _setPrototypeOf(p, r.prototype), p;
    }
    function _isNativeReflectConstruct() {
      try {
        var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], () => {}));
      } catch (err) {}
      return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {
        return !!t;
      })();
    }
    function _isNativeFunction(fn) {
      try {
        return Function.toString.call(fn).indexOf('[native code]') !== -1;
      } catch (err) {
        return typeof fn === 'function';
      }
    }
    function _setPrototypeOf(o, p) {
      _setPrototypeOf = Object.setPrototypeOf
        ? Object.setPrototypeOf.bind()
        : function _setPrototypeOf(o, p) {
            o.__proto__ = p;
            return o;
          };
      return _setPrototypeOf(o, p);
    }
    function _getPrototypeOf(o) {
      _getPrototypeOf = Object.setPrototypeOf
        ? Object.getPrototypeOf.bind()
        : function _getPrototypeOf(o) {
            return o.__proto__ || Object.getPrototypeOf(o);
          };
      return _getPrototypeOf(o);
    }
    const ReversedArray = /* #__PURE__*/ (function (_Array) {
      _inherits(ReversedArray, _Array);
      function ReversedArray() {
        _classCallCheck(this, ReversedArray);
        return _callSuper(this, ReversedArray, arguments);
      }
      return _createClass(ReversedArray);
    })(/* #__PURE__*/ _wrapNativeSuper(Array));
    
    const arr = new ReversedArray(1, 2, 3);
    
    console.log(arr);


    Спасибо бабелю за проделанную работу. Так выглядит полифил для 3ёх строчек кода:
    class ReversedArray extends Array {}
    
    const arr = new ReversedArray(1, 2, 3)
    
    console.log(arr);

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

    WblCHA
    @WblCHA
    serhiops, а зачем? Тебе эти знания пригодятся примерно никогда.
  • Как правильно унаследовать массив через прототипы?

    WblCHA
    @WblCHA
    serhiops, молодец, и? Дальше что? С тем же успехом ты мог там написать const a = 1 и потом спрашивать "где а?".
    Если ты хочешь получить массив на выходе, возвращай массив, а если ты хочешь инстанс своего класса, то копируй все значения из массива и его длину в свой объект или мап. Только это будет не массив, это будет объект со структурой, как у массива.
    const RevercedArray = function(...args) {
        const arr = Array.apply(this, args);
        arr.forEach((v, i) => {
          this[i] = v
        })
        this.length = arr.length
      };
  • Как правильно унаследовать массив через прототипы?

    WblCHA
    @WblCHA
    Так может массив вернуть из конструктора?