Задать вопрос
  • Как сделать такую анимацию в adobe premier или где еще?

    Adobe AfterEffects для задачи подходит гораздо лучше, чем Premier.

    Вот урок (на англ.) по анимации размера объекта уровнем звука, именно как вы хотите.
    Ответ написан
    Комментировать
  • Можно ли в Фотошопе сделать афинное преобразование по опорным точкам?

    sergiks
    @sergiks Куратор тега Алгоритмы
    ♬♬
    Vanishing Point – встроенная фишка в шопе.

    Однажды настраиваете перспективную сетку и потом просто copy-paste изображение и натаскиваете на эту сетку - оно трансформируется под заданную перспективу.
    Ответ написан
    1 комментарий
  • Несколько сообщений для ВК бота. Как отвечать на последнее?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    Не отвечать сразу, ждать 5 минут. Если поток слов от пользователя прервался, можно неспеша ответить на последнее.
    Ответ написан
  • Как оптимизировать работу скрипта?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Надо перебирать в цикле имеющиеся значения. Удобнее держать данные (строки) в массиве массивов:
    data = [
        ["M166 E16", "A-Class", "2004", "A 160", "W168.II", "бензин"],
        ["M166 E19", "A-Class", "2004", "A 190", "W168.II", "бензин"],
        // и остальные данные. 
      ];


    Вытащить значения полей ввода лучше лишь 1 раз и запомнить в переменных:
    // вместо многократного
    ($("#class").val())
    // лучше один раз
    var _class = $("#class").val();
    // и потом использовать значение этой переменной


    Общий алгоритм: ищем, перебирая строки. Как только нашли, дальше не ищем. В конце смотрим, нашлось вообще что-то (показываем) или нет (пишем «нет результатов»).

    Поиск вызывает вопросы:
    1. точно ли ищете полное соответствие значений или достаточно подстроки;
    2. важен ли case (может, искать будут «БЕНЗИН» вместо «бензин»
    3. точно ли хотите искать каждое значение во всех полях строки? Например, год – известно же, что он в определённой колонке. Быстрее сравнивать искомый год только с одним полем.


    Сравниние с -1 короче записать так: !!~value – тоже будет false только если value == -1

    Итого
    $(document).ready(function() {
      const data = [
        ["M166 E16", "A-Class", "2004", "A 160", "W168.II", "бензин"],
        ["M166 E19", "A-Class", "2004", "A 190", "W168.II", "бензин"],
        ["M266 E15", "A-Class", "2005", "A 150", "W169.I", "бензин"],
        // и остальные данные. 
      ];
    
    
      $('.left').on('input', function() {
        const _class = $("#class").val(),
          _model = $("#model").val(),
          _god = $("#god").val(),
          _kuzov = $("#kuzov").val(),
          _tip = $("#tip").val()
        ;
        
        var index = -1; // сначала считаем, что "не найдено"
        
        for(let i = 0; i < data.length; i++) {
          let car = data[i];
          if( !!~car.indexOf(_class)
            &&  !!~car.indexOf(_model)
            &&  !!~car.indexOf(_god)
            &&  !!~car.indexOf(_kuzov)
            &&  !!~car.indexOf(_tip)
          ) {
            index = i;
            break;
          }
        }
        
        if(!!~index) {  // нашли и index стал больше -1
          $("#page-title").html( "Мотор " + data[i][0] );
        } else {        // не нашли и index === -1
          $("#page-title").html( "Нет такого" );
        }
      });
    });
    Ответ написан
    Комментировать
  • Можно ли в приложении увидеть друзей из вк?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    Ответ написан
    Комментировать
  • Где посмотреть структуру современного приложения JS (ES6 модули)?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Ответ написан
    Комментировать
  • Как сделать одновременное редактирование документа, как в google docs?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Почитайте про шаблон проектирования «Команда».

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

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

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    попробуйте вместо
    if (document.form.name.value == '' || document.form.phone.value == '' ) {

    вот так:
    if (this.name.value == '' || this.phone.value == '' ) {
    Ответ написан
    Комментировать
  • Рисование 2d с помощью 3d моделей?

    SketchUp
    Ответ написан
    Комментировать
  • Как при нажатии на enter добавить?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    При копировании из HTML заменять <br> на \n.
    При копировании из textarea в div – наоборот, \n на <br>:
    document.getElementById("btn-from")
      .addEventListener('click',function(){
        elTa.value = elSrc.innerHTML
          .replace(/<br\/?>/ig, '\n')
          .replace(/\n+/g, '\n')
          .trim()
        ;
    });
    
    document.getElementById("btn-to")
      .addEventListener('click',function(){
        elSrc.innerHTML = elTa.value
          .replace(/\n/g, '<br>')
          .trim()
        ;
    });


    Рабочий пример
    Ответ написан
    Комментировать
  • Получение четного числа несколькими способами?

    sergiks
    @sergiks Куратор тега Алгоритмы
    ♬♬
    Верно. Способов несколько. Всего бесконечность минус 1:

    Берём любое случайное целое. Умножаем на 2. Это первое чётное.
    Проверяем, что результат не равен половине исходного числа – это единственное исключение.
    Второе чётное – это из исходного вычесть первое.

    Разница двух чётных – число чётное. Неравенство слагаемых мы гарантируем проверкой единственного случая выше.
    Ответ написан
  • Как с помощью циклов определить простое или составное число?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Всего два возможных исхода: «простое» или «составное».
    Случай с составным правильно определяется в варианте, где вы поставили break.

    Но там не break нужен. У вас функция, которая должна вернуть значение. Как только обнаружили, что найден делитель, всё, можно сразу возвращать результат «Составное число».

    Я бы порекомендовал такую логику: в цикле только ловите ахтунг-момент найденного делителя - и сразу возвращайте "Составное". Если же весь цикл отработал и не вылетел из функции, возвращайте "Простое". Не надо никаких «флагов» и доп. переменных. Код получается короткий и понятный.

    spoiler
    function testCycle(n) { 
      for (let i = 2; i < n / 2; i++)
        if (n % i === 0)
          return "Составное число"; 
      return "Простое число";
    }

    Примечания:
    • let – это то же, что и var, но действует не в рамках всей функции, а только в рамках блока. В данном случае, внутри цикла.
    • === – это «строгое» равенство. То же, что и ==, но ещё и проверяет, чтобы типы совпадали, т.е. не прокатит "0" === 0. Зато работает чуть быстрее.
    • проверяем не до n, а до n / 2, т. к. целые множители не могут превышать половину произведения (второй множитель не меньше 2)
    Ответ написан
    Комментировать
  • Что делать после todo?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Сделайте вложенный todo: где задачи 1-го уровня из себя представляют списки задач.
    Ответ написан
    Комментировать
  • Почему не срабатывает копирование в буфер?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    В буфер можно записывать только по действию пользователя: в обработчике клика, например. Но никак не по асинхронному событию где-то в коде.
    You can use the "cut" and "copy" commands without any special permission if you are using them in a short-lived event handler for a user action (for example, a click handler).


    Если у вас код не на странице, а это вы пилите расширение в браузер, можно запросить доп. разрешения, и тогда всё получится.
    Ответ написан
    Комментировать
  • Как решить задачу о распределении временных интервалов?

    sergiks
    @sergiks Куратор тега Алгоритмы
    ♬♬
    Это типичная задача упаковки (packing problem).

    В «коробку» длиной 100 и шириной K надо впихнуть комплект колбас шириной 1 и разной длины.
    Ответ написан
    Комментировать
  • Как после "10" вызовов function write() в сек, блокировать её на "10мин"?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    На стороне сервера – надо сохранять массив времен последних вызовов функции. При очередном вызове смотреть число времен в этом массиве и время самого раннего. Дописывать в конец текущее время и удалять записи старше 1 секунды.

    В качестве хранилища можно использовать Redis или другое хранилище в памяти.

    Если квота распространяется на каждого юзера в отдельности - хранить для каждого отдельно. В качестве ключа использовать в т.ч. user_id.

    На клиенте похожий принцип: хранить массив времен вызовов и проверять число и время самого раннего при каждом.
    Ответ написан
    Комментировать
  • Что делает этот код php?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Перебирается массив серийников. Путём нехитрых битовых операций сравниваются производные от URL и от последних двух частей в серийнике. Если совпадают, в массив Core::$url дописывается ключ "key" со значением подошедшего ключа.

    Разобрать длинную строку удобнее, разбив конструкцию:
    $d = array('test-site', 'ru');
    $e = array('ST-214E2210-33FE865E-EC05E9A3', 'ST-204C2010-3DEFEFBE-C30E1243', 'ST-214E4000-3D4F3356-E2BCEEBB');
    
    do {
      $b = implode('.', $d); // склеили, получили "test_site.ru"
              
      foreach ($e as $sKey){ // перебираем ключи
        $a = explode('-', $sKey) + array(0, 0, 0, 0); // разбили по дефису в массив,
        // убедились, что в массиве как минимум 4 элемента (если меньше, допис. нулями)
                    
        !( // логическое отрицание того, что в скобках
        	Core::convert64b32( // из 64 бит в 32
        		Core::convert64b32(
        			hexdec($a[3]) // последний фрагмент ключа перевели из 16-ричного в 10-е число
        		) 
        		^  // ксор, побитовое исключающее ИЛИ
        		abs(Core::crc32($b))  // 32-битное число, хэш из адреса сайта
        	) 
        	^  // XOR см. выше
        	~(  // побитовое отрицание
        		Core::convert64b32(
        			Core_Array::get( // тут из конфига получают значение "hostcms" 
        				Core::$config->get('core_hostcms'),
        				'hostcms'
        			)
        		) 
        		&  // побитовое И
        		abs(Core::crc32($b))
        		^
        		Core::convert64b32(
        			hexdec($a[2]) // предпоследний фрагмент из ключа, как число
        		)
        	)
        )
        &&  // только если выше в скобках получился 0, выполнится следующая строка
        Core::$url['key'] = $sKey;
      }
      array_shift($d);
    } while(count($d) > 1);
    
    $a = explode('-', $sKey) + array(0, 0, 0, 0);
    Ответ написан
    Комментировать
  • Как разворачивать и сворачивать (2 и более статей не получается)?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Не работает потому, что функцию sh() переопределяете для каждой статьи заново – остаётся последний вариант.

    Лучше сделать так:
    1. Скрываемым частям статей давать класс с display:none У вас это text__podzigilovol.
    2. В ссылке-кнопке для спрятать/показать записывать id управляемой статьи в data-атрибуте: data-id="info-2" – так кнопка будет «знать», кем она управляет.
    3. Кнопкам не писать в href никакого javascript:..., вместо этого лучше на них повесить слушателя события клика. Удобно дать всем кнопкам определённый класс, по нему их отыскать и в цикле повесить слушателя события.
    4. Обработчик клика описывается лишь один раз. Он получает в качестве this кликнутую ссылку. Из неё берёт data-атрибут с id нужного блока. И включает/выключает ему класс, который прячет этот блок.
    Рабочий пример
    Код
    function sh(event) {
      const className = "text__podzigilovol";
      event.preventDefault();
    
      obj = document.getElementById(this.dataset.id);
      if(!obj) return;
      if( obj.classList.contains(className)) {
        obj.classList.remove(className);
      } else {
        obj.classList.add(className);
      } 
    } 
    
    
    Array.prototype.forEach.call(
      document.querySelectorAll('.js-btn-readmore'),
      function(e){
        e.addEventListener('click', sh);
      }
    );
    Ответ написан
    8 комментариев
  • Как составить строку из значений нескольких переменных php?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Выбирайте:
    "$a$b$c";     //  в двойных кавычках подставляются значения (интерполяция)
    $a . $b . $c; // точка - оператор конкатенации
    implode('', [$a, $b, $c]);     // склеиваем массив 
    sprintf('%s%s%s', $a, $b, $c); // "печатаем" по формату и возвращаем результат
    Ответ написан
    Комментировать
  • Как сравнить элементы многомерного массива между собой?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Сортируйте наборы и склеивайте в строку – используйте полученные строки как ключи массива. Значения – массивы ключей исходного.

    Так получите под одним ключем "cloo" два значения ["cool", "looc"], а для остальных по одному.

    spoiler
    <?php
    $data = [
    	"cool" => [0 => "c", 1 => "o", 2 => "o", 3 => "l"],
      "looc" => [0 => "l", 1 => "o", 2 => "o", 3 => "c"],
      "test" => [0 => "t", 1 => "e", 2 => "s", 3 => "t"],
      "set"  => [0 => "s", 1 => "e", 2 => "t"],
      "get"  => [0 => "g", 1 => "e", 2 => "t"]
    ];
    
    $groups = [];
    foreach( $data AS $k => $v) {
    	sort($v);
    	$hash = implode('', $v);
    	if(!isset($groups[$hash])) $groups[$hash] = [];
    	array_push($groups[$hash], $k);
    }
    $result = array_values($groups);
    
    print_r($result);
    /*
    Array(
        [0] => Array
            (
                [0] => cool
                [1] => looc
            )
    
        [1] => Array
            (
                [0] => test
            )
    
        [2] => Array
            (
                [0] => set
            )
    
        [3] => Array
            (
                [0] => get
            )
    )
    */
    Ответ написан
    3 комментария