Задать вопрос
  • Какую вы используете структуру для хранения изображений?

    bingo347
    @bingo347
    Crazy on performance...
    Генерирую uuid - например 39c807bc-5b1f-11e6-95a6-a3eadeba2e44

    На диске будет так:
    images/39c807bc/5b1f/11e6/95a6/a3eadeba2e44.jpg
    images/39c807bc/5b1f/11e6/95a6/a3eadeba2e44-small.jpg
    images/39c807bc/5b1f/11e6/95a6/a3eadeba2e44-preview.jpg

    а так же запись в БД с этим же id
    Ответ написан
    Комментировать
  • Как отправить команду без перезагрузки страницы?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Читаем про ajaxи про cors
    Если удаленный сервер не отдает cors заголовков и повлиять на это никак нельзя, то читаем про jsonp и imagep
    Ответ написан
    Комментировать
  • Как сделать верный Docker и использовать его для NodeJS приложения?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    Контейнер для nginx с экспортом 80 порта и импортом портов приложений, лучше разрешить все ядра, так же пробрасываем внутрь все папки со статикой
    Контейнер для бд (если есть) с экспортом ее порта
    По контейнеру для каждого приложения, тут настройки от приложения зависит
    Ответ написан
    Комментировать
  • Как идентифицировать речь?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    brain.js попробуйте, если нужно именно js
    нейронку он строит самую примитивную, зато прост в обращении
    Ну и да, будьте готовы, что работать оно все будет медленно

    P.S. на asm.js нейроны "думают" в разы быстрее (v8 5.0.71, node 6.3.1)
    Ответ написан
    Комментировать
  • Как проверить что в начале и в конце строки есть число?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Дополню пример Андрей Буров
    /^((-|\+)\.?|\.)?\d|\d$/.test("1test");
    помимо -5 вначале строки так же будет проверятся +5 ; .5 ; -.5 +.5
    Ответ написан
    Комментировать
  • Вопрос из области JavaScript?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Оператор typeof a возвращает строку с типом знаения содержащимся в переменной a на момент вызова
    Возможные значения:
    'string' - любая строка
    'boolean' - true / false
    'number' - любое число, включая NaN, Infinity и -Infinity
    'object' - любой объект кроме функций (не примитив), а так же значение null, массивы, regexp - так же считаются объектами
    'function' - функция (если быть точным - объект который можно вызвать, так как Proxy (es2015) все таки объекты, но вызываемый прокси вернет тип 'function')
    'undefined' - единственное значение - undefined (не определено), его имеют переменные и поля объектов по умолчанию (если оно не задано), а так же его возвращает оператор void при любом аргументе
    'symbol' - символ (es2015) - уникальный идентификатор возвращаемый функцией Symbol(), может использоваться для ключей объекта

    Так же для проверки на число, но исключая значения NaN, Infinity и -Infinity можно использовать такую конструкцию
    !isNaN(a) && isFinite(a)
    (сработает так же на строки, которые парсятся в числа, но можно проверить еще и тип через typeof)
    Ответ написан
    Комментировать
  • Почему перерисовка страницы происходит после alert()?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Операции с dom довольно тяжелые, поэтому когда Вы вызываете изменения в dom браузер их просто складывает и затем применяет все одним разом (своеобразная оптимизация) перед event-loop, то есть, когда текущий поток исполнения завершится
    alert - блокирующая операция, поэтому пока она работает (Вы видите окно) поток исполнения завершиться не может
    Ответ написан
    Комментировать
  • Как сделать общий таймер для всех процессов Node.js?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    Один процесс по таймеру делает publish в redis
    Остальные по subscribe ловят это уведомление и делают свою логику
    Ответ написан
    2 комментария
  • Как заставить объект плавно догонять мышь?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    По событию mousemove складываете координаты мыши в очередь
    По requestAnimationFrame выдергиваете из очереди несколько элементов, при том чем больше очередь - тем больше дергаем (надо подбирать), по полученному набору координат корректируете вектор скорости и отрисовываете движение
    Ответ написан
    Комментировать
  • Как в ubuntu зайти локально на локальный сайт при наличие SSL сертификата?

    bingo347
    @bingo347
    Crazy on performance...
    Нет виртуального хоста на 443 порту, поэтому апач отдает дефолтный
    Ответ написан
    7 комментариев
  • Как подключить модуль с помощью require()?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Для того чтоб модули работали на клиенте код нужно собирать с помощью webpack или аналогов
    Ответ написан
    2 комментария
  • Как создать проект Ionic?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    Пытается подключится к локальному порту 80 но его никто у Вас не слушает
    Ответ написан
    Комментировать
  • Как парсить объект с датой или временем внутри?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    localStorage.setItem("tasks", JSON.stringify(tasks, function(key, value) {
      if(value instanceof Date) {
        return '$ISODate(' + value.toISOString() + ')';
      }
      return value;
    }));

    var newTasks = JSON.parse(localStorage.getItem("tasks"), function(key, value) {
      if(typeof value !== 'string') {
        return value;
      }
      var m = value.match(/\$ISODate\((.*)\)/);
      if(!m) {
        return value;
      }
      return new Date(m[1]);
    });
    Ответ написан
  • Почему не наследует свойство конструктора?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Во-первых, Object.create создает объект из прототипа без вызова конструктора, и передавать ему надо прототипconst add = Object.create(Manipulate.prototype);С вызовом конструктора надо писать так:const add = new Manipulate('id1', 'id2');

    Во-вторых, Object.prototype.hasOwnProperty проверяет, что данное свойство есть в объекте и оно собственное (не из прототипа), для общей проверки (включая цепочку прототипов) используется оператор inconsole.log('test' in add);

    UPD:
    Добавлю еще, что стрелочная функция не имеет собственного контекста, this у нее из замыкания, нужна полноценная функция или метод объекта
    Ответ написан
    Комментировать
  • Алгоритм поиска последовательности выпадения числа. Возможно ли такое реализовать?

    bingo347
    @bingo347
    Crazy on performance...
    Создайте нейронную сеть типа перцептрон, обучайте пока результаты не станут удовлетворительными
    Ответ написан
    Комментировать
  • Как рассортировать данные JSON в порядке возрастания?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    У Вас объект, объекты в js имеют произвольный доступ, и хотя чаще всего ключи объекта идут в порадке добавления, никто гарантировать это не может!
    Что можно сделать? - получить массив ключей этого объекта и отсортировать этот массив согласно значениям свойств:
    var keys = Object.getOwnPropertyNames(obj.position);
    keys.sort((a, b) => obj.position[a] - obj.position[b]);
    Ответ написан
    Комментировать
  • На чем писать программу под Windows?

    bingo347
    @bingo347
    Crazy on performance...
    electron.js
    И не слушайте тех, кто рекомендует nw.js - она кривая
    Ответ написан
    Комментировать
  • Как в js кликнуть по a-->href?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    document.querySelector('a').click();
    Ответ написан
    Комментировать
  • Что такое "инвертированный" цикл for в JS?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Классический цикл for в javascript состоит из 3х операторов: init, predicate, nextIteration
    В общей записи это выглядит так:for(init; predicate; nextIteration) { body }

    Цикл for исполняется следующим образом:
    1. Выполняется оператор init в области видимости блока цикла
    Обычно здесь объявляют переменную-счетчик и присваивают ей начальное значение
    Определение "в области видимости блока цикла" означает, что если init-оператор представляет собой оператор let - то объявленные переменные будут видны в цикле, но не за его пределами
    2. Вычисляется predicate, его результат приводится к boolean и последующее выполнение зависит от результата этого приведения:
    Если результат === false - то цикл завершается
    Если результат === true - то переходим к шагу 3
    3. Исполняется тело цикла - блок body, официально блоком быть не обязан, может быть и единичным оператором, но лучше всегда писать блок (фигурные скобки)
    4. Исполняется оператор nextIteration и переходим к пункту 2

    Теперь разберемся на конкретных примерах:
    Прямой цикл
    for(let i = 0; i < 10; i++) {
      console.log(i);
    }

    Объявляется переменная i и ей присваивается начальное значение 0
    Получается результат выражения Boolean(i < 10) -> 0 < 10 - true -> Boolean(true) - true -> можем выполнять тело
    Выполняется тело console.log(i); -> видим 0 в консольке
    Выполняется i++ -> i становится 1
    Получается результат выражения Boolean(i < 10) -> 1 < 10 - true -> Boolean(true) - true -> можем выполнять тело
    ...
    Так все продолжается 10 раз, на 10 итерации появляются изменения после этого момента:
    Выполняется i++ -> i становится 10
    олучается результат выражения Boolean(i < 10) -> 10 < 10 - false -> Boolean(false) - false -> завершаем цикл

    инвертированный цикл
    for(let i = 10; i--;) {
      console.log(i);
    }

    Объявляется переменная i и ей присваивается начальное значение 10
    Получается результат выражения Boolean(i--) -> i-- - 10, i = 9 -> Boolean(10) - true -> можем выполнять тело
    Выполняется тело console.log(i); -> видим 9 в консольке
    Оператор nextIteration - пустой, ничего выполнять не надо
    Получается результат выражения Boolean(i--) -> i-- - 9, i = 8 -> Boolean(9) - true -> можем выполнять тело
    ...
    Цикл по прежнему работает 10 раз, последняя итерация (когда i к моменту исполнения predicate равна 0):
    Получается результат выражения Boolean(i--) -> i-- - 0, i = -1 -> Boolean(0) - false -> завершаем цикл

    Как видим, за счет отсутствия nextIteration оператора, на каждой итерации выполняется на одно действие меньше, поэтому цикл отрабатывает быстрее
    Ответ написан
    2 комментария
  • Почему не добавляется в canvas изображение?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Картинка еще не загрузилась, а Вы уже пытаетесь ее отрисовывать
    Алексей Ярков в одном из коментов написал правильный вариант кода
    Ответ написан