Задать вопрос
  • Как лучше опрашивать состояния элементов?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Т.е. на сервере что-то происходит, о чём надо оповестить клиент, и вы делаете это, опрашивая раз в секунду сервер «есть чё?», причём в несколько параллельных потоков – по каждому айтему.

    Сделайте «конец» api, с которого можно забирать сразу несколько готовых задач. Когда задача на сервере «пропадает», пихайтё её item_id в некий одноразовый массив для выдачи в клиент.

    Так хоть в один всего поток раз в секунду будете опрашивать сервер, и забирать массив с id завершенных.
    Ответ написан
    Комментировать
  • Как реализовать распознавание фотографий на js и нейронных сетях?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Распозначание цифр делается на основе обучения сети немаленьким набором картинок MNIST где каждой нарисованной цифре соответствует её правильное значение.

    На JavaScript возьмите, например, библиотеку ConvnetJS.

    Готовую, обученную на распознавание компьютерной техники по картинкам сеть хотите готовенькую? Вряд ли найдёте.

    Напишите и обучите сами, спарсив какой-нибудь магазин компьютерной техники – там легко сопоставить картинку и соответствующий ей класс устройства. Но набор только продающихся моделей, наверное, маловат. Можно ещё добавить поисковую выдачу Яндекса/Google по картинкам.
    Ответ написан
    Комментировать
  • Не могу понять как правильно задать условие?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    С прицелом на более сложные кейсы предложу генерировать моменты, переключающие расписание, непременно в будущем. Т.е. создаём объект нужной даты-времени из текущего. И накидываем неделю по необходимости.

    Все ключевые моменты в ближайшем будущем. Смотрим, который из них ближе всего. Это определяет то, какой сейчас интервал активен:
    // Два момента, переключающих расписание
    var s18 = getNextMoment( 0, 18); // Sunday 18:00
    var f12 = getNextMoment( 5, 12); // Friday 12:00
    
    function getNextMoment( day, hour) {
      var D = new Date(), dayDiff;
      D.setHours(hour);
      D.setMinutes(0);
      D.setSeconds(0);
      dayDiff = day - D.getDay();
      D.setDate( D.getDate() + dayDiff + ( dayDiff < 0 ? 7 : 0));
      return D;
    }
    
    if( f12 < s18) { // сначала наступит Пятница 12.00
    
      // Режим ожидания
      
    } else { // сначала наступит Воскресенье 18
      
      if( new Date().getHours() < 6) {
        // Ночной
      } else {
        // Дневной
      }
      
    }
    Ответ написан
    2 комментария
  • Как получить все возможные комбинации в массиве битов?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Например, алгоритмом Нарайана Пандита, который на каждой итерации меняет два элемента между собой местами. Реализация на JavaScript для примера.

    В вашей задаче, учитывая, что это не произвольные массивы строк, а биты, быстрее, наверное, подряд перебирать числа от 0 до 63 и считать включённые биты.
    Ответ написан
    Комментировать
  • Как сделать игру в реальном времени на laravel?

    Мастер-таймер запускается на сервере. Вернее, там отсчитывается время с кторого и до которого идёт приём событий от пользователей.

    Для юзера так же важна точность времени. Поэтому на клиенте надо получить точное время окончания игры. Для синхронизации времени клиента с сервером через небыструю, с меняющейся на ходу задержкой, сеть есть протокол синхронизации времени NTP (как работает NTP).

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

    Например, на сервере игра заканчиваются в 12:34:56. Сейчас на сервере время 01:23:45 (предположим, она не 49 с идёт, а гораздо дольше). А на клиенте сейчас 04:21:00. Задача получить время на клиенте, когда на сервере наступит 12:34:56.

    Первый ping ушёл с клиента в 04:21:00, и вернулся с серверным временем 01:23:47 через 3 секунды в 04:21:03. Считаем, что ответ сервера пришёлся на середину нашего отреза в 3 секунды. Из этого получаем клиентское время, когда наступит конец игры.

    Эти пинги можно повторять снова и снова, уточняя время окончания. А таймер обратного отсчёта запускайте setTimeout'ом в небольшой промежуток меньше секунды, напр. 200ms. И пусть он показывает, сколько осталось до уточнённого момента конца игры.
    Ответ написан
    Комментировать
  • Как организовать автоматическую генерирацию видео из изображений с аудиодорожкой?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Видео можно сгенерировать с помощью ffmpeg – это отдельная программа, запускается в командной строке. Для ffmpeg есть обёртка под php, но она не облегчает задачу. Лучше в php генерить всю команду с параметрами, и выполнять её через exec().

    Для видео в примере придётся ещё указывать тип эффекта на каждый кадр:
    • зум к центру (или к другой точке?) – фильтр zoompan
    • движение картинки вдоль прямой – тот же zoompan или crop


    Синтезировать речь можно через API Яндекс SpeechKit.

    Загружать, как верно написал doku ro, средствами PHP и YouTube API (пример).
    Ответ написан
    2 комментария
  • Какие есть блиотеки для работы с blockchain?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Посмотрите видео (на англ., 39 минут) про построение системы голосования на блокчейн. Научно-популярно разжёванное, с нуля до построения и развёртывания работающего приложения.
    Ответ написан
    Комментировать
  • Как рассчитать время работы скрипта в php?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Вместо time(), который с точностью до целых секунд, используйте microtime(true), который вернёт с точностью до тысячных долей секунды.

    Скорее всего, ваш скрипт выполняется меньше секунды, и из-за округления до целых возвращается 0.
    Ответ написан
    Комментировать
  • Как конвертировать docx в pdf на сервере?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Можно через Google Apps: загружать docx в Drive и получать pdf-версию как файл или ссылку на файл. Есть REST API. В небольших объёмах точно бесплатно.
    Ответ написан
    Комментировать
  • Как правильно сохранять изображения для geektimes?

    Разница в сглаживании (anti-aliasing).
    В Windows текст сглаживается довольно жестко – алгоритм допускает искажения формы символо ради лучшего попадания в пиксельную сетку и буква выглядит почти как пиксельная графика:
    Увеличенный фрагмент
    c37b176ffacf5ba5c9bf38b9d0b73553133a57b9

    На Маке ситуация иная – текст сглаживается сохраняя дизайн шрифта, но выглядит мягче.
    скрин вашего вопроса
    67a92a5a5c554841a74b4f4ee04834ee.png

    Подробнее
    про разности анти-алиасинга на разных платформах.

    Маковский вариант больше похож на то, что получается у вас с иллюстрацией, и ваша картинка мне не кажется некорректно замыленной.

    Чтобы картинка выглядела так же «кристально» чётко как и текст под Windows, надо, чтобы в публикации её размер был 1:1 от сделанного снимка экрана. Надо избежать перерасчёта картинки в браузере.

    Разберитесь, какого размера становятся изображения в публикации, и подготовьте иллюстрацию 1:1 пиксель-в-пиксель.

    При этом читатели на Маке среди гармоничного мягкого текста увидят «явно-виндовый» скрин с пиксельным текстом.
    Ответ написан
  • Как называется это состояние?

    По-моему, это системное выделение текста, зависит не от браузера, а от системы. Этот тот фрагмент текста, который скопируется в буфер при нажатии на клавиатуре Cmd + C, который пропадёт, если начать печатать (если этот текст редактируем).

    В рамках одного окна браузера не получится выделить несколько фрагментов текста. Зато в разных <frame> на одной странице – у меня получается (FireFox, OS X) (попробовать)
    Скриншот
    ddf68eae93c64b12b09abe75cf545fe9.png
    Upd. я имею в виду, что сделать несколько выделений в рамках одного «окна» невозможно. Окно, или, вернее, контекст – это или документ в приложении (не только браузере), или фрейм в одном окне браузера, или доп. панели в интерфейсе приложения (напр. адресная строка в браузере).

    Одновременно в одном компьютере / сессии не может быть активно-выделено несколько фрагментов текста – того, что скопируется, если на клавиатуре нажать Ctrl / Cmd + C

    Поэтому тот единственный активный подсвечивается синим (или как система настроена – Windows или OS X). А все прочие становятся серенькими. При этом в рамках тех, остальных, сереньких приложений, выделения остаются актуальны-активны, фокус не теряют.
    Ответ написан
    3 комментария
  • Как написать условие на проверку пустой переменной JavaScript?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    В данном случае, когда id интервала содержит ненулевое целое число, можно так:
    switchInterval && clearInterval(switchInterval);

    или в более читаемом виде
    if( switchInterval) {
      clearInterval(switchInterval);
    }


    Этот способ не подходит, если валидным значением является ноль или false или пустая строка.
    Ответ написан
  • Как избежать лимитов VK API?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Чтобы понять, в чём дело, смотрите ответы ВК на каждый запрос – есть ли там поле error. Пишите их в лог, чтобы можно было разобраться пост-фактум.

    Чтобы избежать превышения лимитов при наплыве посетителей, не обрабатывайте запросы синхронно, а устройте очередь задач. Поступил запрос от посетителя – создайте задачу и сохраните её в очередь, а серверу ВК ответьте "ок" и больше ничего сейчас не предпринимайте. Другой процесс, постоянно работающий в фоне, пусть берет по одной задаче из очереди, обрабатывает и шлёт ответ пользователю. Пусть учитывает время трёх предыдущих отправленых вызовов к API ВК. И при необходимости, чуть ждёт, прежде, чем выполнять следующий.
    Ответ написан
    6 комментариев
  • Почему код JavaScript не работает?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Попробуйте так:
    var i, test;
    for( i = 0; i < checkbox.length; i++) {
      if (checkbox[i].checked) {
        test = document.getElementById('slide' + (i+1));
        test  &&  test.click();
      }
    }
    Ответ написан
    Комментировать
  • Как сделать отсчёт времени до определённой даты?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Тут две задачи:
    1. из строки «часы:минуты:секунды» получить объект Date с ближайшим в будущем моментом с этим часом, минутой и секундой;
    2. запустить таймер обратного отсчёта до этой Даты.


    Сделать объект Date на сейчас и его копию. Копии установить час, минуту и секунду из строки. Если получился объект в прошлом, накинуть один дополнительный день.

    Обратный отсчёт – запускать одну и ту же функцию по несколько раз в секунду для плавности отображения времени, т.к. таймеры в JavaScript не точные и если запускать 1 раз в секунду, секунды могут «икать».

    В функции берем текущее время, сравниваем с заданным. Показываем остающиеся часы-минуты-секунды. И вызываем себя же через сколько-то миллисекунд. Если уже наступило целевое время, выводим другой текст и более не вызываем себя.

    Код
    /**
     * Из строки времени в формате HH:MM:SS
     * делает объект Date
     * с ближайшим, после текущего момента, таким временем.
     * @param String строка времени
     * @return Date Object
     */
    function parseTime(s) {
      var now = new Date(), D = new Date(now.getTime()), HMS = s.split(':');
    
      if( HMS.length !== 3) throw({message:"неверный формат времени"});
      
      HMS = HMS.map(function(t){return parseInt(t)}); // перевести строки в целые
      
      D.setHours(HMS[0]);
      D.setMinutes(HMS[1]);
      D.setSeconds(HMS[2]);
      
      if( D < now) D.setDate( D.getDate() + 1);
      
      return D;
    }
    
    /**
     * добивает число нулями до двух позиций.
     *  3 -> 03
     * 13 -> 13
     */
    function pad(n, len, char) {
      var s = n.toString(10);
      char = char || '0';
      len = len || 2;
      if( s.length >= len) return s;
      return (Array(1+len).join(char) + n).slice(-len);
    }
    
    /**
     * Выводит в заданный DOM-элемент время, 
     * оставшееся до даты-времени в объекте toDate
     */
    function countdown( toDate, el) {
      var diff = toDate.getTime() - new Date().getTime()
        , H
        , M
        , S = Math.floor(diff/1000)
      ;
      
      if( S <= 0) { //  время прошло
        el.innerText = "--:--:-- Ой, всё!";
        return;
      }
      
      H = Math.floor(S/3600);
      S = S % 3600;
      M = Math.floor(S/60);
      S = S % 60;
      
      el.innerText = '' +pad(H) +':' +pad(M) +':' +pad(S);
      
      setTimeout( countdown.bind(this, toDate, el), 111);
    }
    
    countdown(
      parseTime('15:00:00'),
      document.querySelector('h1.question__title')
    );

    Если приведённый код выполнить в консоли/скретчпаде на этой странице, вместо заголовка вопроса появится таймер отсчёта.

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

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    JavaScript там не нужен, судя по вашему коду. Обойдёмся одним PHP:
    <?php
    $id	= 2743;	// ID заданной рубрики
    $n	= 5;	// количество выводимых записей
    $recent = new WP_Query("cat=$id&showposts=$n");
    $sum = 0;
    
    while($recent->have_posts()) {
    
    	$recent->the_post();
    
    	if( get_field("result") === 'Win') {
    		$value = get_field('koff') * get_field('summa');
    		$sum += $value;
    		$out = sprintf( '%01.2f', $value); // 1.23
    	} elseif( get_field("result") === 'open') {
    		$out = "&hellip;"; // троеточие
    	} else {
    		$out = '0.00';
    	}
    	
    	echo $out . ' рублей.';
    }
    
    printf( "<p>Сумма: %01.2f рублей.</p>", $sum);
    Ответ написан
    4 комментария
  • Что почитать по тестированию PHP приложений?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Документацию PHPUnit (на англ.) + на Хабре есть перевод на Русский язык.
    Ответ написан
    Комментировать
  • Как сделать диагональную линию между двумя div?

    Что не получилось со skew? Вроде, можно подобрать skewY и translateY:
    f6e27dad56b24bf1b9bacba54ffe07e5.pngfiddle

    Или просто активному до- и после- пририсовывать по бокам «уши».
    Ответ написан
    4 комментария
  • Возможно ли создать чат-бота для ВК с помощью сервиса api.ai?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Среди поддерживаемых api.ai языков есть и Русский язык, поэтому ответ «да, возможно».
    Ответ написан
    Комментировать
  • Почему some отрабатывает, а every нет?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    every()каждый») – более строгий, чем some()некоторые»)

    every() вернёт true только, когда по всем элементам выполнено условие.
    some() вернёт true, как только хотя бы в одном встретится выполнение условия.

    В вашем примере можно переписать без some() старым добрым indexOf():
    const availableVersions = versions.filter(
      version => !!~item.version_ids.indexOf( version.id )
    );

    Fiddle

    !!~ из любого значения, кроме -1, вернёт true, а для -1 вернёт false.
    Ответ написан
    Комментировать