Задать вопрос
  • Какое сочетание клавиш обернет каждое слово тегом выделяя весь список слов в visual studio code?

    Предложу только вариант с мультикурсором:
    1. поставить курсор перед первым словом
    2. Option + Shift + Click перед последним

    В результате перед каждым из слов появится курсор. Дальше редактировать как обычно:
    • написать открывающий тег,
    • Cmd + стрелка_вправо перекинет курсор в конец строки (у каждой строки в своей позиции)
    • набрать закрывающий тег.
    Ответ написан
    Комментировать
  • В чем идея Mobile First подхода?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Сумев обходиться малым, позволить себе больше — проще, чем обладая многим, начать ограничивать себя.

    То же длиннее и на англ. в посте.
    абзац
    Progressive Advancement has won the game for now as far as I can see. If UI/UX designers start a product design with its desktop version, they will inevitably want to make use of most of the advantages of the advanced end. For example, the hover effect which is supported by a cursor mouse; HD images & complex charts which can display normally only when there is a recent bandwidth. In this way, the designers will make efforts to complete an amazing desktop version and only to find it can hardly be adopted on a mobile end unless they give up a lot of beautiful ideas. If so, the mobile end version will be more like an afterthought, an incomplete product which’s been watered down.
    Ответ написан
    Комментировать
  • Как задать фон и цвет всем объектам по которым не произведён клик?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Аккуратнее вынести стили в CSS. Скажем, стили по умолчанию у всех и некий класс active для единственного выбранного элемента:
    div.answer { background: #222; color: #aeaeae; }
    div.answer.active { background: #fff; color: #000; }


    Тогда скрипт примерно такой:
    const els = [...document.querySelectorAll('.answer')];
    
    const toggle = event => {
      els.forEach(el => el.classList[event.target === el ? 'add' : 'remove']('active'));
    }
    
    els.forEach(el => el.addEventListener('click', toggle));

    Fiddle
    spoiler

    Ответ написан
    Комментировать
  • Не понимаю оператора return в JS?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Смотрите, как вызывать/использовать эту функцию.

    var a = getRectArea( 3, 4 );
    Тут в переменной a окажется значение, которое функция вернула – то, что после "return" в ней оказалось. В вашем примере это 3 * 4, т.е. число 12. Ура, в переменной a теперь лежит число 12

    И как только выполнился return – всё, дальше функция уже не выполняется, это был выход.
    function test() {
      return;
      alert('Привет мир!'); // эта строка никогда не выполнится
    }
    Ответ написан
    1 комментарий
  • Как добавить event listener?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Сам gtag не предусматривает, чтобы слушали события на нём. Поэтому надо прошерстить весь свой код и найти все вызовы gtag() с искомым событием. И там же дописать ваш alert()
    Или сделать свою прослойку для аналитики. На странице вызывать вместо gtag() свою функцию, например, mytag() которая, в свою очередь, станет вызывать gtag() и может, другие скрипты аналитики.

    Upd. в комментариях выяснилось, что ТС не может поменять вызовы к gtag() В таком случае остаётся заменить функцию gtag() на свою:
    function gtag(){
      dataLayer.push(arguments); // это весь исходный её функционал
    
      if (arguments.length > 1
        && typeof arguments[0] === 'string'
        && arguments[0].toLowerString() === 'event'
        && typeof arguments[1] === 'string'
        && arguments[1] === 'name1'
      )
      {
        alert("Name 1!");
      }
    }
    Ответ написан
    4 комментария
  • Как работает этот алгоритм?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Тут как бы длинный поезд из смайликов и короткая видимая платформа остановки. В середине видны какие-то средние вагоны, а левый край поезда, определяемый переменной position – где-то далеко слева, его не видно, а значение position отрицательное. Ноль соответствует точно левому краю, началу видимой «платформы».

    Когда жмут prev – толпа смайликов едет вправо, её position увеличивается. Но при этом последний вагон не должен уехать правее левого края платформы. Поэтому position (обычно отрицательный) делается равным наибольшему из двух: 0 или вычисленному значению. Если «уехали», position получился положительным. И Math.min(0, position) станет равным 0.

    Та же механика с правым краем и движением «поезда» справа налево. Нельзя, чтобы правый вагон поезда уехал левее правого края платформы. Нельзя, чтобы показались пустые рельсы. Поэтому position не должен становиться левее == меньше, чем минус-длина поезда плюс длина платформы.
    Ответ написан
    3 комментария
  • Как заменить "к" на 000?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Ошибка где-то ещё:
    $str = 'тест кк';
    echo str_replace("к","000",$str);  
    
    // тест 000000
    Ответ написан
    Комментировать
  • Как делать пошаговые действия?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Поскольку всё в рамках одного домена/сайта, ограничения Same Origin Policy не помешают.

    Каждая открываемая страница – это новое свежее выполнение скрипта. Поэтому между переходами надо как-то сохранять «состояние» — например, в куках или LocalStorage. В некоторых настройках ни одно из этих хранилищ может оказаться недоступным – например, в зашоренном Tor-браузере.

    С использованием LocalStorage можно примерно так:
    const KEY_STATUS = 'status'; // ключ сохраняемого параметра
    const step = +localStorage.getItem(KEY_STATUS);
    
    /* 
      Шаги:
      0 - переход на /1
      1 - заполнение и клик (видимо, в переходом на новую страницу?)
      2 - переход на /2
    */
    if (0 === step) {
    
      document.location.href = "http://site.ru/1";
    
    } else if (1 === step) {
    
      document.getElementsByName("pw")[0].value = "test";
      document.getElementsByClassName("ur")[0].click();
    
    } else if (2 === step) {
      
      document.location.href = "http://site.ru/2";
    
    }
    
    localStorage.setItem(KEY_STATUS, 1 + step);
    Ответ написан
    7 комментариев
  • В какой программе лучше всего рисовать?

    персонажи для моделинга, города

    Blender

    дама

    Poser
    Ответ написан
  • Как реализовать облачное хранилище?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Для обучения я бы порекомендовал реализовать задуманное как прослойку между пользователем и Amazon S3 – их API становится стандартом де-факто и реализован ещё несколькими облачными провайдерами.
    Используйте амазоновский PHP SDK.

    Скорее всего, вы создадите bucket в котором корневые "папки" будут индивидуальны для каждого пользователя вашего сервиса. Под ними уже пользователи смогут создавать свои подпапки.

    Загрузку файлов придётся, вероятно, делать на ваш сервер, а оттуда уже отправлять на S3.
    Ответ написан
    Комментировать
  • Докеризация приложения?

    Философия докера размещать в одном контейнере один сервис.
    Например, отдельные контейнеры: MySQL, php-fpm, nginx. Как будто это коробки в локальной сети, видят друг друга. А во внешний мир торчит только порт 443 nginx.

    Для удобного управления многоконтейнерным приложением есть Docker Compose. В одном файле docker-compose.yml лаконично описываются все сервисы. Это короче, чем bash скрипт и «так правильно».

    Всё в одном контейнере с ubuntu —
    плохая практика

    Можно и все делать в одном контейнере. Но это мало чем отличается от просто vps. Так же приходится ставить доп. софт, обновления. И потом, чтобы переехать на другой сервер, тащить тяжёлый образ. И никак не масштабировать.
    Ответ написан
    8 комментариев
  • Математические вычисления с дробными числами?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    К счастью, у вас не банк с расчетом стаки по кредиту.

    Почему бы не считать все в копейках? Тогда все расчеты в целых.

    ..Пока маркетологи не захотят давать скидку в 1/3
    Ответ написан
    2 комментария
  • Как определить к какой форме принадлежит input?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Прикрутить бы VueJS, и сделать корзину реактивной: в любой из форм изменили число товара, везде так же изменилось.

    Костылинг мог бы быть с глобальным объектом, хранящим актуальную корзину. Любая из форм меняет значениеив нем. Сеттер значения эмитит событие, которе слушают все формы, чтобы обновить свои данные.
    Ответ написан
  • Как правильно подсчитать время, проведённое пользователем в онлайне (VK API)?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    Ответ зависит от алгоритма, частоты ваших проверок и обновлений параметра last_seen на стороне ВКонтакте.

    Наверное, стоит на своём аккаунте провести ряд экспериментов, чтобы выяснить:
    1. как обновляется время last_seen (с какой точностью), если:
      • в моб. приложении проявлять активность - прокручивать, листать
      • в моб. приложении проявлять активность - ставить лайки
      • в моб. приложении не проявлять активность, но держать открытым на виду
      • в моб. приложении не проявлять активность, держать в фоне
      • те же 4 пункта, но на сайте ВК.
      • если серверное standalone приложение от имени пользователя выполнит запрос к API
      • если iFrame приложение от имени пользователя по таймауту выполнит запрос к АПИ, при этом сам пользователь никаких действий, даже движений мышкой, не предпримет – обновит ли это last_seen?

    2. как обновится время last_seen, если моб. приложение закрыть. И сразу же открыть снова, но ничего не делать в нём.


    Это поможет сделать выводы:
    1. как часто имеет смысл проверять для одного юзера параметр last_seen: раз в 15 минут, в 10, в 5, каждую минуту?
    2. и только тогда – как интерпретировать полученые данные – ваш исходный вопрос.
    Ответ написан
    3 комментария
  • Возможно ли средствами css3 нарисовать такое?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Не пробовал, но стоит попробовать CSS свойство clip-path
    clip-path: rectangle(...)
    или mask-image и генерируемый SVG.

    Каждое из изображений обрезать своей маской, позиционировать над белым фоном. Белые рамки - может, поверх положить SVG опять же и дать толщину линиям.
    Ответ написан
    Комментировать
  • Как объединить два объекта без затирания вложенных свойств?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Не полениться обходить каждое свойство, и если его значение это объект, то рекурсивно не полениться обходить...

    Простых-встроенных методов пока нет.

    Например, см. реализцию _.merge() в библиотеке lodash.
    Ответ написан
    Комментировать
  • Как укоротить данный код?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Я бы предложил удлиннить на два дополнительных знака равенства:
    const bool = residential.is_brick === 0 || residential.is_brick === null;
    Ответ написан
    Комментировать
  • Безопасно ли передавать пароль через ajax?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    По протоколу HTTPS безопасно. По HTTP — опасно.
    Ответ написан
  • Как лучше передавать большие коллекции данных из Laravel в Vue.js?

    Можно создать в коде страницы глобальную переменную или функцию, которая вернёт массив пользователей.

    users/show.blade.php
    <script>
      function getMyUsers() { return @json($arrayOfUsers); }
    </script>
    ...
    <script>
    const vm = new Vue({
      data: function() {
        return {
          users: getMyUsers(),
          counter: 0,
        };
      }
    });

    Причём так можно упаковать не всех, а, например, только первые 500 пользователей.
    И если станут листать/прокручивать, то динамически, доп. запросами, подгружать дальше.
    Ответ написан
    Комментировать
  • Как защитить приложение?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Обсуждение похожего вопроса на github Electron'а.

    Один из вариантов – написать на C++ собственный модуль для NodeJS, реализующий скрываемый функционал.

    В вопросе не описано, как работает приложение: полностью автономно или клиент-сервер. Необходимость общения с сервером значительно упростила бы контроль оплаты.

    Для автономного моё предложение: регулярно обновлять приложение, улучшая его с каждым релизом. При автообновлениях проверять статус подписки. Так «хакеры» лишились бы свежих версий.
    Ответ написан
    1 комментарий