Задать вопрос
  • Замена строк в json?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    это можно сделать довольно легко с помощью gron
    допустим есть два сопоставимых файла 1.json и 2.json
    необходимо заменить значение ключа iata_code в первом файле на значения из второго файла.
    1.json
    {
        "json": 1,
        "city": "Лондон",
        "airports": [
          {
            "name": "Хитроу",
            "city": "Лондон",
            "country": "Великобритания",
            "iata_code": "ЛХР"
          },
          {
            "name": "Хитроу2",
            "city": "Лондон2",
            "country": "Великобритания2",
            "iata_code": "ЛХР2"
          }
        ]
    }

    2.json
    {
      "json": 2,
      "city": "London",
      "airports": [
        {
          "name": "Heathrow",
          "city": "London",
          "country": "United Kingdom",
          "iata_code": "LHR"
        },
        {
          "name": "Heathrow2",
          "city": "London2",
          "country": "United Kingdom2",
          "iata_code": "LHR2"
        }
      ]
    }


    1) удаляем все значения iata_code из первого файла и записываем в промежуточный файл 3.gron
    gron 1.json | grep -v "iata_code" > 3.gron

    2) во втором файле оставляем только значения iata_code и добавляем в промежуточный файл 3.gron
    gron 2.json | grep "iata_code" >> 3.gron

    3) преобразовываем промежуточный файл в json
    gron --ungron 3.gron > 3.json

    результат
    3.json
    {
      "airports": [
        {
          "city": "Лондон",
          "country": "Великобритания",
          "iata_code": "LHR",
          "name": "Хитроу"
        },
        {
          "city": "Лондон2",
          "country": "Великобритания2",
          "iata_code": "LHR2",
          "name": "Хитроу2"
        }
      ],
      "city": "Лондон",
      "json": 1
    }
    Ответ написан
    1 комментарий
  • Как повторить такую же анимацию?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Для начала можно посмотреть в их исходники. Беглый просмотр кода показывает основной план действий:

    • Создать плоскость с кастомным материалом. Вершинный шейдер стандартный нейтральный, который ничего необычного не делает, только сохраняет координаты UV, чтобы их во фрагментном использовать. Фрагментный будет содержать в себе всю логику. Это частенько так делается в 2D-эффектах.
    • Во фрагментный шейдер передать две текстуры. Одна обычная, для фона. Вторая - карта смещений для пикселей. Displacement map по-нашему. Берем пиксели из фона, смещаем по данным из карты смещений - получаем результат.
    • Нарисовать текстуру для фона. В их случае она делается из кадров видео, т.е. вот этот бултыхающийся градиент на фоне в их случае заранее заготовлен. И, к слову, видно, что он шакалится. Но с точки зрения производительности видео тут - это хорошая идея. Генерирование клякс-градиентов - требовательная в вычислительном плане задача.
    • Нарисовать displacement map по какой-то логике, завязанной на положение мыши. Тут большой простор для экспериментов. В их случае они используют отдельную сцену с кучей объектов, у которых меняются расположение и прозрачность в зависимости от положения мыши и просто со временем. Там много магических чисел. Вероятно все подбиралось наугад. Как это обычно и происходит. И потом они рендерят эту сцену в текстуру, которая передается в уже упомянутый шейдер. Можно было бы на 2D канвасе ее рисовать. Но с трехмерной сценой в таких задачах проще работать, хотя это поначалу кажется контринтуитивным.

    Все остальное в коде - обвязка, чтобы это организовать в рамках Three.js. В этом конкретном сценарии этот инструмент выглядит слегка избыточными. Можно было бы взять какую-нибудь альтернативную легковесную библиотеку, но по сути делать пришлось бы то же самое.

    От этого вполне можно оттолкнуться и сделать что-то подобное в рамках своих инструментов/требований/дизайнов.
    Ответ написан
    Комментировать
  • Несколько разных dns серверов?

    martin74ua
    @martin74ua
    Linux administrator
    Зачем писать NS от mail.ru ?
    Они предлагают это сделать для ленивых - чтобы не вникать, какие записи надо внести в домен - передайте домен на dns хостинг к нам и не думайте.
    Почитайте внимательно их документацию, они вам скажут, что конкретно надо добавить в доменную зону. И все у вас будет хорошо...

    А мешать в одном домене ns сервера с разных провайдеров - это такое.. На клаудфларовском у вас нету записей от mail.ru, на mail.ru нету записей от клаудфлара... В результате - почта у вас то работает, то не работает... Сайт то открывается, то не открывается....
    Ответ написан
    1 комментарий
  • Несколько разных dns серверов?

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

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Ответ написан
    Комментировать
  • Как выводить варианты ответов в случайном порядке?

    0xD34F
    @0xD34F Куратор тега Vue.js
    function shuffle(arr) {
      for (let i = arr.length; i > 1;) {
        const j = Math.random() * (i--) | 0;
        [ arr[i], arr[j] ] = [ arr[j], arr[i] ];
      }
    
      return arr;
    }

    computed: {
      shuffledAnswers() {
        return shuffle(Object.entries(this.questions[this.idx].answers));
      },
      ...

    <div v-for="[ key, answer ] in shuffledAnswers">
      ...

    UPD. Конечно, вопрос был не об этом, но есть ряд замечаний по поводу показанного кода.

    "answers": {

    Пусть это будет массив. Соответственно, правильный ответ будет обозначаться через индекс.

    import usersData from "../questions.json";

    Не надо импортировать вопросы в компоненте теста, пусть они передаются в него через props.

    selectedAnswer: "",

    Всего один? Этого мало, надо запоминать все полученные ответы.

    count: 5,

    <div v-if="idx < count">

    Если завтра добавятся новые вопросы или удалятся какие-то из существующих, побежите изменять значение этого свойства? Оно не нужно, надо смотреть на длину массива с вопросами. Или, можно сделать вычисляемое свойство, представляющее текущий вопрос (просто извлекаем элемент из массива с вопросами по индексу текущего вопроса), и проверять, существует ли он.

    computed:{
      randomQuestions () {
        usersData.sort(() => Math.random() - 0.5)

    Во-первых, вычисляемые свойства не должны изменять данные. Во-вторых, почему не надо так сортировать. Поскольку массив вопросов никак не изменяется, делать тут вычисляемое свойство смысла нет, пусть оно будет обычным. Перемешанная копия массива с вопросами, у вопросов перемешанные массивы ответов, а также добавлено свойство под ответ, выбранный пользователем.

    :disabled="selectedAnswer != ''"

    Блокировать выбор ответа не надо - вдруг пользователь случайно не туда нажал. Пусть будет возможность изменить сделанный выбор. Это касается не только ответов на текущий вопрос, а всех, т.е., в дополнение к

    <button
      @click="nextQuestion"

    надо сделать такую же кнопку для перехода к предыдущему вопросу.

    document.querySelectorAll("input").forEach((el) => (el.checked = false));

    Не надо лезть в DOM руками. Чтобы при переходе к следующему вопросу сбрасывать выбор, достаточно пересоздавать элементы, назначив их общему предку ключ, зависящий от индекса (:key="индекс_вопроса"). Но это, конечно, костыльное решение. Правильно будет управлять радиокнопками основываясь на данных, через v-model.

    @change="answered($event)"

    answered(e) {
      this.selectedAnswer = e.target.value;
      if (this.selectedAnswer == this.questions[this.idx].correctAnswer) {
        this.correctAnswers++;

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

    https://jsfiddle.net/0L9ayx1u/1/
    Ответ написан
    1 комментарий
  • Сортировка по порядку добавления свойстыа привязка к элементам?

    @tgarl
    Так пересортируйте порядок и все, примерно так(если ничего не перепутал)
    //добавьте перед $arResult['CW_CASES'] = $cases;
    $poryadok=array();
    $keyaaray=array_flip($arResult['PROPERTIES']['CW_OTRASL_PROJ']['VALUE']);
    foreach($cases as $key=>$val){
    			$poryadok[$keyaaray[$val['ID']]]=$val;
    		}
    ksort($poryadok);
    $cases=$poryadok;
    Ответ написан
    1 комментарий
  • Несколько копий Аспро?

    Zzcode
    @Zzcode
    Если говорить про лицензионное соглашение, то так делать нельзя. Один ключ - Одно решение.

    Правильнее всего конечно сделать многосайтовость на одном ключе и можно привязать хоть 100 доменов.

    Не могу не сказать, как работает в теории конечно. При покупке решение, в папке module хранится полностью исходники решения и их можно скачать и загрузить на другой сайт и все будет работать, но это полное нарушение лицензионного соглашения и в теории конечно может последовать ответственность за данный способ, советую лучше использовать многосайтовость и не мучаться.
    Ответ написан
    Комментировать
  • Дополнительный монитор и закрытие крышки macbook air m1?

    alexeyvolodin
    @alexeyvolodin
    истина где-то рядом
    Насколько я помню: единственный вариант - отправлять в спящий режим принудительно и закрывать крышку
    UPD:
    Гугление привело на такой скрипт https://github.com/pirj/noclamshell
    Из коробки с подключенным внешним монитором невозможно отправить в спящий режим закрытием крышки
    Ответ написан
    2 комментария
  • Подключение двух мониторов и телевизора к macbook air m1?

    yakovlev_13
    @yakovlev_13
    Шаманство, экзорцизм и некромантия.
    Если адапте может делать из usb 3.0 видео на hdmi - то это 1 дисплей.
    а хаб(тот что на первой картинке) можно попробовать подключить мак -DP-HDMI=хаб=2 HDMI
    но это теоретически
    Ответ написан
    Комментировать
  • Модальное окно на vue.js в готовый проект на битрикс?

    Мы используем Vue для реализации отдельных компонентов, в том числе и на "традиционных" сайтах.
    Можно и с модальным окном (полноценным, с portal-vue и т.д.). Упрощённый пример:

    import Vue from 'vue';
    import Modal from '@/scripts/vue/components/Modal.vue';
    
    // Находим элемент-компонент
    // Скорее всего тут будет не id, а что-то вроде селектора по классу js-some-thing и т.д.
    const el = document.getElementById('some-id');
    
    // Создаём элемент для vue-компонента
    // И помещаем его внутрь
    // Не обязательно, но так удобно потом "прибираться"
    const mountingPoint = document.createElement('div');
    el.appendChild(mountingPoint);
    
    // Создаём инстанс vue, монтируем его в наш элемент
    let modal = new Vue({
      el: mountingPoint,
      render(h) {
        // А вот и модалка
        return h(Modal);
      },
    });


    Соответственно можно передавать props, вкладывать другие компоненты в модалку, изменять дата, слушать события и т.д. и т.п.
    Подробнее про рендер-функции https://ru.vuejs.org/v2/guide/render-function.html

    Когда нужно прибраться за собой:

    modal.$destroy();
      modal.$el.parentElement.removeChild(modal.$el);
      modal = null;
    Ответ написан
    Комментировать
  • Запуск js в зависимости от размеров окна браузера?

    tigroid3
    @tigroid3
    PHP, YII2, SQL, Postgres, Docker, SPHINX, GIT
    как вариант)
    $(window).resize(function () {
    	yslovie();	
    });
    
    function yslovie() {
    	if ($(window).width() < 800) {
    			alert('меньше 800px');
    		} else {
    			alert('больше 800px');
    		}	
    }
    Ответ написан
    1 комментарий