• Стоит ли изучить backbone js?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Чтобы никто не сломал себе ногу, стоит разобраться с модулями в JavaScript – начните использовать сборщик: Require.js или Webpack или Browserify. А код разделяйте в небольшие логически изолированные куски - модули – лежащие каждый в своём файле.

    Backbone.js в 2017 по-моему вполне актуален. Он не конкурирует с тем же React, который играет роль View в паттерне MVC. Посмотрите, например, реализацию простейшего TodoMVC на Backbone + React.
    Ответ написан
    Комментировать
  • Как округлить минуты в нужную сторону?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Получить минуты, округлить в большую сторону до 15-минутного значения, установить это значение минут:
    function roundTS(ts) {
      var D = new Date(ts);
      var m = 15 + Math.ceil( D.getMinutes() / 15);
      D.setMinutes(m);
      return D.getTime();
    }


    А если требуется именно с массивом минут, то примерно так:
    function roundMinArr( D, arr) {
      var i, m = D.getMinutes();  
      arr.sort((a,b)=>a-b);
      for(i in arr) {
        if( arr[i] < m) continue;
        D.setMinutes(arr[i]);
        return D;
      }
      D.setMinutes(60 + arr[0]);
      return D;
    }
    
    var D = roundMinArr( new Date('2017-08-16T12:17+03:00'), [0,15,35,44,59]);
    D.toString() // Wed Aug 16 2017 12:35:00 GMT+0300 (MSK)
    Ответ написан
    Комментировать
  • Как сделать при нечётном клике один звук, а при чётном другой?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Можно, как и просит ТС, прямо в HTML. При первом клике инициализировать массив из двух аудио, и переназначить функцию onclick:

    this.a=[
      new Audio('https://wav-library.net/sfx/mix/LightSwitch.mp3'),
      new Audio('https://wav-library.net/prmusic/rock/Run.mp3')
    ];
    this.f=()=>{ // это будет новый обработчик клика
      var cc=!!this.cc; // для краткости записи
      this.a[+!cc].pause(), // если предыдущий длинный играет - стоп его!
      this.a[+!cc].currentTime=0, // ..и перемотать на начало.
      a[+cc].play(), // играть новый
      this.cc=!cc // переназначить счётчик ( true | false )
    };
    this.onclick=this.f, // переназначить хэндлер клика
    this.f() // вызвать для первого клика принудительно

    CodePen

    HTML с этим скриптом будет такой:
    <td onclick="this.a=[ new Audio('https://wav-library.net/sfx/mix/LightSwitch.mp3'), new Audio('https://wav-library.net/prmusic/rock/Run.mp3')];
    this.f=()=>{var cc=!!this.cc;this.a[+!cc].pause(),this.a[+!cc].currentTime=0,a[+cc].play(),this.cc=!cc};
    this.onclick=this.f,this.f()">click me!</td>
    Ответ написан
  • Как автоматизировать бота для vk?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    Документация ВК по созданию чат-бота.

    Понадобится сервер, на котором постоянно будет работать ваш софт – слушать входящие запросы и в ответ на них вызывать методы API ВК.

    С крупным сообществом вы возможно столкнётесь с проблемой слишком большого числа запросов в единицу времени. Поэтому продумайте механизм очереди задач: при поступлении нового сообщения не обрабаывайте его сразу же, а просто сохраняйте в очередь. А отдельный "рабочий" процесс пусть берет по одному заданию из очереди и пишет им ответ.
    Ответ написан
    6 комментариев
  • Могут ли недобросовестные владельцы приложений ВКонтакте использовать мой access_token?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    Токен – это техническая возможность выполнять некоторые вызовы API ВКонтакте от имени пользователя, установившего приложение.

    Как распорядиться такой технической возможностью – целиком на совести автора приложения.

    Чего точно не нужно делать – это копировать по просьбе авторов приложения адресную строку из вашего браузера, когда ниже пишут «Не копируйте!..» В этом случае вы даёте действительно критические разрешения неизвестному приложению, 100% нарушающему правила ВК.
    Ответ написан
    Комментировать
  • Как достать нужное свойство из многомерного объекта?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    function getById( obj, id) {
      var i, found;
      if( obj.id === id) return obj;
      if( obj.hasOwnProperty('childGroups')) {
        for( i in obj.childGroups) {
          if( found = getById( obj.childGroups[i], id)) return found;
        }
      }
      return;
    }
    
    getById( obj,3) // {"id":3,"parentId":1,"childGroups":[{"id":6,"parentId":3},{"id":7,"parentId":3}]}
    Ответ написан
    Комментировать
  • Категоризация данных. Как сделать по уму?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Руководствуясь принципом KISS, может, просто начать писать через разделитель «категория.тип»:
    image.png|image.jpg|image.gif|audio.mp3

    Это поле в таблице у вас типа ENUM?
    Ответ написан
    1 комментарий
  • Как на php наложить звук на видео?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    На чистом PHP вряд ли. Понадобится библиотека для работы с видео. Скорее всего ffmpeg.

    Проще всего, наверное, установить на сервер ffmpeg и запускать его из PHP через exec() . Это проще, но имеет серьёзные недостатки:
    1. перекодирование может занять длительное время, а PHP по умолчанию имеет таймаут в 30 секунд для ответа веб-серверу.
    2. параллельно запустить несколько перекодировщиков для сервера тяжело – ffmpeg занимает немало памяти и грузит процессоры.

    Поэтому по-хорошему надо организовать очередь задач.
    Ответ написан
  • Как хранить .mp3 и .ogg на сервере?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Самое простое: загрузить файлы из формы методом POST и сохранить их где-то в папке.

    Чуть продвинутее – проверять содержание принятых файлов, чтобы убедиться, что вам загрузили именно аудио, а не фильм mp4 переименованный в mp3. Заодно, может, получить какие-то метаданные: хотя бы длительность трека, а если повезёт, название и имя исполнителя.

    Минус стандартного приёма файлов описанным выше методом в том, что всё время, пока файл качается, под него занят процесс PHP. Т.е. принять одновременно сотню файлов не получится: не хватит памяти. Одно из решений этой проблемы – поручить приём файла веб-серверу. Тот примет, сохранит на диск, и только тогда дёрнет php-скрипт, чтобы тот разобрался с файлом. Это можно сделать например, с веб-сервером nginx и модулем Upload
    Ответ написан
    Комментировать
  • Водяной знак на картинку налету?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Идея так-себе. Одновремено зайдёт 20 человек на сайт – и придётся «налету» процессить сотню картинок. Вряд ли это будет делаться параллельно в 100 потоков. Вы выстроите задания в очередь. И картинки станут появляться в браузерах посетителей с заметной задержкой.

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

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    function countSymbols(s) {
      return s.split('').reduce(
        (p,c) => (p.hasOwnProperty(c)?p[c]++:p[c]=1, p), {}
      );
    }
    var r = countSymbols('hello'); // {"h":1,"e":1,"l":2,"o":1}
    Ответ написан
    Комментировать
  • Какой логотип более правильный?

    Т.к. буквы не рядом, строгая параллельность наклонных не так важна,
    как визуальное равновесие пустого пространства слева и справа от буквы «О».
    Ответ написан
    2 комментария
  • Как достать значение объекта?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Вариант в лоб, плохой:
    function bad( obj, name) {
      return eval('obj.' + name);     
    }
    bad(r, 'foo.bar'); // 'value'


    Вариант чуть получше, проверяем на каждом шаге, есть ли такое свойство:
    function better( obj, name) {
      var parts = name.split('.'), i, cursor = r;
      
      for( i = 0; i < parts.length; i++) {
        if( !cursor.hasOwnProperty( parts[i])) throw('No such property: ' + parts[i]);
        cursor = cursor[parts[i]];
      }
      
      return cursor;
    }
    
    better(r, 'foo.bar'); // 'value'
    Ответ написан
    Комментировать
  • Как удалить вирус на Mac?

    Вирусов у вас пока, скорее всего, никаких нет. Не верьте веб сайтам, предлагающим что-то установить под любым предлогом. В OS X желательно устаналивать софт только через App Store. Ну, или из установщиков от разработчиков, которым вы очень, очень доверяете.

    1. Регулярно устанавливайте обновления системы через официальный App Store.
    2. Настройте TimeMachine, чтобы делались регулярные бэкапы на внешний диск.
    3. Не ведитесь на абсолютно левые сайты, как на ваших скриншотах – просто игноируйте такие.
    4. Не ходите по пиратским сайтам в поисках бесплатных шрифтов.
    5. Установите в Safari расширение AdBlock Plus, блокирующее рекламу и вредные сайты.
    Ответ написан
    6 комментариев
  • Время php или как его удобней сформировать?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    $date = new DateTime();
    $date->setTimezone( new DateTimeZone('+0000'));
    $date->setTimestamp( time());
    $date->add(new DateInterval('PT2H')); // добавим 2 часа про запас – просят же больше текущей
    
    echo $date->format('c') . "\n";
    Ответ написан
    4 комментария
  • Рисование графиков, есть ли интересная статья или пример?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Графики === D3.js

    Можно рендерить в SVG с отличным интерактивом и идеальным качеством печати (вектор же!). Можно и в canvas, если бешеная инфографика с огромным числом элементов (скаттер-плот из десятков тысяч точек). Из минусов не низкий порог вхождения.
    Ответ написан
    Комментировать
  • Как взять тот email где email равно anpapzyan94@gmail.com?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    $data = json_decode($json);
    $found = false;
    foreach($data as $person) {
      if( $person->email === 'anpapzyan94@gmail.com') {
        $found = $person;
        break;
      }
    }
    
    if( $found) {
      // нашёлся! – он в переменной $found
    }
    Ответ написан
    2 комментария
  • Сколько Nodejs сервер должен есть памяти сервера?

    По умолчанию процесс Node.js расчитывает, что ему доступны аж 1.5 Gb памяти.

    Параметр --max_old_space_size задаёт максимальный размер т.н. Old Space – части Heap, куда попадают неактивные и не нужные данные. Это, на практике, область, занимающая наибольшую память. Именно её есть смысл ограничить, чтобы процесс Node занимал поменьше памяти.

    Но у меньшей памяти есть и своя цена: чаще будет запускаться «сбор мусора» (garbage colleciton) – процесс очистки из памяти неиспользуемых данных, к которым более нет ссылок из глобальных или активных локальных переменных. Это блокирующий процесс – Node полностью останавливается на время очистки памяти, не реагирует на запросы и не выполняет никаких действий.

    Итого, чтобы занимать меньше памяти, нужно запускать Node с параметром:
    node --max_old_space_size=128 index.js
    Тут указано занимать под old data не более 128 Mb памяти, т.е. весь Node займёт незначительно больше.

    Можно задать переменную окружения WEB_MEMORY которой установить доступный процессу node.js объем памяти в Mb: WEB_MEMORY=128 bash startup.sh , если использовать для запуска node приложения скрипт, предложенный автором статьи (на англ.), откуда я всё это только что сам узнал )
    Ответ написан
    1 комментарий
  • Какая библиотека позволит отображать наполненность материалами по дням?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    D3js позволит. Но прямо готового решения под именно вашу задачу не подскажу, не видел.
    Ответ написан
    Комментировать