• Как сравнить два объекта?

    @zordec
    function deepEqual(obj1, obj2) {
      if (typeof obj1 !== "object" || typeof obj2 !== "object") {
        return false;
      }
      if (obj1 === undefined || obj2 === undefined) {
        return false;
      }
      if (obj1 === null || obj2 === null) {
        return false;
      }
      let obj1Keys = Object.keys(obj1);
      let obj2Keys = Object.keys(obj2);
      if (obj1Keys.length !== obj2Keys.length) {
        return false;
      }
      for (let i = 0; i < obj1Keys.length; i++) {
        if (obj2Keys.includes(obj1Keys[i]) === false) {
          return false;
        }
      }
      for (let i = 0; i < obj1Keys.length; i++) {
        if (typeof obj1[obj1Keys[i]] === "object") {
          return deepEqual(obj1[obj1Keys[i]], obj2[obj1Keys[i]]);
        }
        if (obj1[obj1Keys[i]] !== obj2[obj2Keys[i]]) {
          return false;
        }
      }
      return true;
    }
    Ответ написан
    Комментировать
  • Как объявить подсказку для событий во Vue?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    В Vue 3 можно декларировать. А пока можно использовать web-types.
    Ответ написан
    Комментировать
  • Как исправить ошибку в mysql бекап?

    BorLaze
    @BorLaze
    Java developer
    GRANT PROCESS ON *.* TO 'admin_root'@'localhost'
    Ответ написан
    6 комментариев
  • Как выбрать последнюю запись с внешним ключом, по которому фильтруем?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Для MySQL 8
    WITH `cte` AS (
      SELECT *,
             ROW_NUMBER() OVER (
               PARTITION BY `contact_id` ORDER BY `created_at` DESC
             ) AS `row`
        FROM `contacts_history`
        WHERE `created_at` BETWEEN '2021-02-05 15:56:57' AND '2021-02-20 13:44:09'
    ) SELECT *
      FROM `cte`
      WHERE `status_id` = 37
        AND `row` = 1

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

    Писать в базу время в UTC будет проще всего.
    Нерекомендуемой альтернативной будет хранить время-дату в БД вместе с тайм зоной.
    Ответ написан
    1 комментарий
  • Какое время писать в базу данных если пользователи в разных временных зонах?

    BasiC2k
    @BasiC2k
    .NET developer (open to job offers)
    "Каждую запись в базе данных хранить в UTC.
    При выборке данных, учитывать смещение каждого пользователя"
    Это лучший вариант.
    Ответ написан
    Комментировать
  • Как создать alias в vuex store?

    bingo347
    @bingo347
    Crazy on performance...
    Ответ написан
    Комментировать
  • Как наследовать слоты в Vue?

    Djaler
    @Djaler
    Сеньор-помидор
    <template>
        <v-data-table>
            <template v-for="(_, slot) of $slots" :slot="slot">
                <slot :name="slot"/>
            </template>
    
            <template v-for="(_, slot) of $scopedSlots" #[slot]="scope">
                <slot :name="slot" v-bind="scope"/>
            </template>
        </v-data-table>
    </template>
    Ответ написан
    1 комментарий
  • Самодиагностика CRM системы?

    BoShurik
    @BoShurik Куратор тега Symfony
    Symfony developer
    Делал нечто подобное, получилось так:
    namespace App\Doctor;
    
    use App\Doctor\Check\CheckInterface;
    
    final class Doctor
    {
        /**
         * @var CheckInterface[]
         */
        private iterable $checks;
    
        public function __construct(iterable $checks)
        {
            $this->checks = $checks;
        }
    
        /**
         * @return Violation[]|array
         */
        public function check(): array
        {
            $violations = [];
            foreach ($this->checks as $check) {
                $violations[$check->feature()] = array_merge($violations[$check->feature()] ?? [], $check->violations());
            }
    
            return $violations;
        }
    }

    namespace App\Doctor\Check;
    
    use App\Doctor\Violation;
    
    interface CheckInterface
    {
        public function feature(): string;
    
        /**
         * @return Violation[]
         */
        public function violations(): array;
    }

    services:
        _instanceof:
            App\Doctor\Check\CheckInterface:
                tags:
                    - { name: app.doctor.check }
    
        App\Doctor\Doctor:
            arguments:
                $checks: !tagged app.doctor.check

    public function doctorAction(): JsonResponse
    {
        return $this->json($this->doctor->check());
    }

    {
        "foo": [], // Ok
        "bar": [
            { "message": "Отсутствуют статусы", "treatment": "Добавьте статусы" }
        ]
    }


    Как вариант, можно группировать проверки по фичам, чтоб не проверять все, когда нужна информация по конкретной фиче, но для этого надо будет CompilerPass заюзать
    Ответ написан
    3 комментария
  • Стоит ли реализовывать умные компоненты?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    Вы просто столкнулись с общей проблемой переиспользования кода.
    Конечно хочется писать код один раз и избегать копипасты, но не всегда этого легко достичь.

    Побороть эту проблему может только грамотное планирование структуры програмы. Далеко не всегда можно достичь нужного результата с первого раза, приходится делать рефакторинг.

    Вот несколько принципов:
    - старайтесь разбивать программу на компотенты.
    - чем меньше и проще компонеты, тем проще их переиспользовать и проще с ними работать.
    - используйте миксины когда вам нужно переиспользовать логику и нельзя вынести ее в отдельный компонент.
    - разные вычисления можно вообще вынести в отдельные файлы в папку assets
    Ответ написан
    1 комментарий
  • Можно ли безболезненно сделать SSR?

    @Markizzio
    fullstack-developer
    Ответ написан
    Комментировать
  • Как установить докер?

    @q2digger
    никого не трогаю, починяю примус
    Самое правильное сейчас , если надо иметь докер под виндой - поставить WSL2 , запустить там например Убунту, и туда, штатным способом установить "нормальный" докер, а не вот этот костыль.
    Ответ написан
    2 комментария
  • Как найти идейного человека в команду, за относительно небольшие деньги?

    @bubn0ff
    it-шник
    Как всегда - все хотят получить много, а заплатить мало. Это работорговля. :-/ Хотите качество? Платите достойно! Иначе получите абы что и злого недовольного сотрудника/фрилансера.
    Ответ написан
    Комментировать
  • Как вы запоминаете термины языка?

    Psixodelik
    @Psixodelik
    Преподаватель на Hexlet
    Это вы себя накручиваете.

    Никто специально не сидит и не учит все термины. Тут как с другим языком — чем больше общаешься, тем лучше запоминаешь. Тут тоже самое: чем больше используешь определённые технологии, тем больше будешь знать терминов из этой области. А что не используешь, то конечно же забываешь. Не бери в голову. Если собес не проходит только из-за :not, то оно и к лучшему
    Ответ написан
    Комментировать
  • Как найти идейного человека в команду, за относительно небольшие деньги?

    paran0id
    @paran0id
    Умный, но ленивый
    Ищите человека с заниженной самооценкой или объективными изъянами, с которыми вы готовы мириться, а рынок в среднем не готов. Таких на удивление немало. Явление может (и будет) сопровождаться некоторыми побочными эффектами, типа нездорового перфекционизма, алкоголизма и перебоев в мотивации.
    Ответ написан
    Комментировать
  • Как найти идейного человека в команду, за относительно небольшие деньги?

    newross
    @newross
    Product owner
    Нигде.
    Самостоятельное решение задач требует более высокого уровня квалификации. Есть хорошие и дорогие фриленсеры, которые и ТЗ сами составят, утвердят с вами и полный бюджет помогут рассчитать.
    Средний уровень компетенции достаточно хорошо оплачивается. Зачем миддлу бесплатно участвовать в очередном проджекте с мутными перспективами?
    Так что если хочется сэкономить - либо пишите ТЗ фрилансерам, либо работайте с джунами.
    Ответ написан
    4 комментария
  • Какая правильная философия работы с ветками в git?

    @Vitsliputsli
    master - только для стабильного кода, который уже работает на проде.
    Новую разработку ведите в другой ветке (например, dev). Как стабилизируете и проверите код в dev, мержите его в master.
    На следующем этапе разработку в dev разбивайте на отдельные feature, там уже можно посмотреть что-нибудь вроде git-flow.
    Ответ написан
    1 комментарий
  • Формат файла описывающий действия?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Файл, похоже, в формате json. Гуглите "json <ваш язык прогаммирования>", чтобы найти библиотеку для парсинга этого формата. Потом надо обрабатывать семантику языка.

    Поля "$designer" похоже можно игнорировать. Дальше у каждого важного элемента есть поле "$kind". Читайте описание в схеме, которая по ссылке в конце файла "https://raw.githubusercontent.com/microsoft/BotFra..."

    Фактически это задана программа на весьма неудобном для человека языке программирования. Каждое действие - это узел в json. Он имеет kind, который определяет, что это за инструкция и всякие дополнительные поля, которые описывают параметры этой инструкции. Типа инструкция ветвления содержит команды для обеих веток исполнения и условие. В этом языке, похоже есть циклы, встроенные функции. Похоже, пользователь может задать какие-то свои функции, вызов которых вам тоже придется обрабатывать.

    После разбора файла json-парсером, надо писать обработку каждого типа действия, которое есть в этом файле. Это будет полноценный интерпретатор этого странного языка программирования.

    Например, "Microsoft.ForEach". Поищите эту строчку в схеме, она будет встречаться 6 раз. Интересное место №3 - там расписано, какие поля могут быть у этого типа действия. Там куча очевидных полей вроде designer и kind, но есть нужное нам "actions". Описание говорит, что это массив действий, которые будут вызваны для всех элементов списка. Т.е. встретив в файле узел foreach, надо взять поле "actions" и применить все действия оттуда ко всем элементам входного списка.

    И так надо по каждому "kind" действия писать обработку. Проще всего его будет писать на каком-то интерпретируемом языке, где есть что-то типа eval(). Потому что, например, в IfCondition есть поле condition, которое придется вычислять. Надо будет поддерживать какой-то словарь для всех переменных, локальных и глобальных, поддерживать стек вызова и словарь всех известных пользовательских подпрограм.
    Ответ написан
    3 комментария
  • DTO, как готовить в симфони?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Symfony не имеет никакого отношения к DTO и не накладывает каких-то требований на реализацию.
    Ответ написан
    Комментировать
  • Как сделать кроссдоменный запрос?

    @ravshan01 Автор вопроса
    Проблема была в том что заголовки не приходили, решил проблему добавлением заголовков через .htaccess
    Ответ написан
    Комментировать