• Как реализовать запись аудио через микрофон и отправка на бэкэнд в реальном времени?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Просто берёшь пример из документации и меняешь строку chunks.push(e.data) на отправку blob'а в web-socket.
    Ответ написан
    1 комментарий
  • Интеграция кнопок мессенджеров на веб-сайте, как сделать?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    <a href="skype:example123?chat">Start Chat</a>
    <a href="skype:example123?call">Start Chat</a>
    <a href="tel:+12215555555">+1(221) 555-55-55</a>
    <a href="https://t.me/agvento1">Telegram the author</a>
    WhatsApp
    <a href="https://wa.me/2217777777?text=Hello!">Chat+message on WhatsApp</a>
    Ответ написан
    1 комментарий
  • Как убрать вот эту черточку между папками, чтоб при нажатии на папку, внутренняя папка сплывала вниз?

    WblCHA
    @WblCHA
    https://stackoverflow.com/questions/59432350/why-a...

    The setting you are looking for is "compact folders". You can get there by going to: File → Preferences → Settings → explorer.compactFolders and then unchecking the box.

    Параметр, который вы ищете, это «компактные папки». Вы можете попасть туда, выбрав: Файл → Настройки → Настройки → explorer.compactFolders, а затем сняв флажок.
    Ответ написан
    Комментировать
  • Как отключить пароль в убунту?

    i229194964
    @i229194964
    Веб разработчик
    введите в терминале
    sudo visudo
    найдите строку NOPASSWD (обычно находится под строкой, где упоминается группа sudo
    %sudo ALL=(ALL:ALL) ALL
    Добавьте NOPASSWD перед командами, которые вы хотите выполнить без запроса пароля.
    %sudo ALL=(ALL:ALL) NOPASSWD: /usr/bin/apt-get
    Ответ написан
    1 комментарий
  • Как проверить есть ли str1 в str2?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    в баш можно заюзать регулярку в [[ ]]
    if [[ "$str1" =~ .*$str2.* ]]; then
      echo "ok"
    else
      str2="$str1$str2"
    fi
    Ответ написан
    1 комментарий
  • Как сделать звёздный рейтинг в сниппете?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Яндекс, страница товара или услуги:
    <div itemscope itemtype="http://schema.org/Product">
      <span itemprop="name">Название продукта</span>
      <span itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">
        Рейтинг:
        <span itemprop="ratingValue">4.5</span> из 
        <span itemprop="bestRating">5</span>
        на основе 
        <span itemprop="ratingCount">10</span> оценок
      </span>
    </div>

    Яндекс, информационная страница:
    <article itemscope itemtype="http://schema.org/Article">
      <header>
        <h1 itemprop="headline">Заголовок статьи</h1>
        <div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">
          Рейтинг:
          <span itemprop="ratingValue">4.5</span> из 
          <span itemprop="bestRating">5</span>
          на основе 
          <span itemprop="ratingCount">10</span> оценок
        </div>
      </header>
      <div itemprop="articleBody">
        <!-- Текст статьи -->
      </div>
    </article>

    Гугл, страница товара или услуги:
    <html>
      <head>
        <title>Название страницы</title>
        <script type="application/ld+json">
        {
          "@context": "http://schema.org/",
          "@type": "Product",
          "name": "Название продукта",
          "image": "https://example.com/product-image.jpg",
          "description": "Описание продукта",
          "aggregateRating": {
            "@type": "AggregateRating",
            "ratingValue": "4.5",
            "bestRating": "5",
            "ratingCount": "10"
          },
          "offers": {
            "@type": "Offer",
            "priceCurrency": "USD",
            "price": "19.99",
            "availability": "http://schema.org/InStock"
          }
        }
        </script>
      </head>
      <body>
        <!-- Содержимое страницы -->
      </body>
    </html>

    Гугл, информационная страница:
    <html>
      <head>
        <title>Название страницы</title>
        <script type="application/ld+json">
        {
          "@context": "http://schema.org",
          "@type": "CreativeWork",
          "name": "Название статьи",
          "aggregateRating": {
            "@type": "AggregateRating",
            "ratingValue": "4.5",
            "bestRating": "5",
            "ratingCount": "10"
          }
        }
        </script>
      </head>
      <body>
        <!-- Содержимое страницы -->
      </body>
    </html>
    Ответ написан
    7 комментариев
  • Как в strapi добавить поле «автора»?

    @DmitryNJG
    Пример из v4. Добавьте поле в author в коллекции.
    Вы можете через хуки добавить автора получив id пользователя из jwt токена , допустим
    strapi.db.lifecycles.subscribe({
        models: ["api::post.post"],
       async beforeCreate(event) {
        const ctx = strapi.requestContext.get();
        event.params.data = {
          ...event.params.data,
         author: ctx.state.user.id
        }
      }
    })
    Ответ написан
    Комментировать
  • Как в NestJS сформировать вывод ошибок валидации?

    @dimuska139 Автор вопроса
    Backend developer
    Разобрался, в общем. Нужно просто сделать свой ValidationPipe:
    @Injectable()
    export class ValidationPipe implements PipeTransform<any> {
      async transform(value, metadata: ArgumentMetadata) {
    
        if (!value) {
          throw new BadRequestException('No data submitted');
        }
    
        const { metatype } = metadata;
        if (!metatype || !this.toValidate(metatype)) {
          return value;
        }
        const object = plainToClass(metatype, value);
        console.dir(object);
        const errors = await validate(object);
        if (errors.length > 0) {
          throw new HttpException({message: 'Input data validation failed', errors:  this.buildError(errors)}, HttpStatus.BAD_REQUEST);
        }
        return value;
      }
    
      private buildError(errors) {
        const result = {};
        errors.forEach(el => {
          const prop = el.property;
          Object.entries(el.constraints).forEach(constraint => {
            result[prop] = constraint[0];
          });
        });
        return result;
      }
    
      private toValidate(metatype): boolean {
        const types = [String, Boolean, Number, Array, Object];
        return !types.find((type) => metatype === type);
      }
    }


    И использовать его в контроллере вот так:
    @UsePipes(new ValidationPipe())
    @Post()
    async create(@Body() createPostDto: CreatePostDto) {
      console.dir(createPostDto)
    }


    В строке result[prop] = constraint[0]; 0 не просто так. В constraint[0] находится "ключ" ошибки. Например, "isNotEmpty". То есть по этому ключу можно сделать свой текст ошибки, в том числе и перевод. prop - это название поля, в котором возникла ошибка. А в constraint[1] находится стандартный текст валидатора, в котором фигурирует название поля (мне он не нужен).

    P.s. подсмотрел вот тут.
    Ответ написан
    Комментировать
  • Как закрасить дробные части такого индикатора?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Градиентом нарисовать:

    const { filledColor: F, emptyColor: E, ...props } = defineProps({
      value: Number,
      maxValue: Number,
      segments: {
        type: Number,
        default: 5,
      },
      filledColor: {
        type: String,
        default: 'red',
      },
      emptyColor: {
        type: String,
        default: 'black',
      },
    });
    
    const background = val =>
      val >= 1 ? F :
      val <= 0 ? E :
                 `linear-gradient(to right, ${F}, ${F}, ${val * 100}%, ${E} ${val * 100}%)`;

    <div class="rating">
      <div
        v-for="i in segments"
        :style="{ background: background(value / maxValue * segments - i + 1) }"
        class="rating-segment"
      ></div>
    </div>
    Ответ написан
    Комментировать
  • Как раздать git hook для всей команды?

    vabka
    @vabka
    Токсичный шарпист
    Например есть husky - очень удобно, если с фронтом работаете.

    Если без сторонних инструментов, то можно хуки сложить в папку, которая будет трекаться в репозитории и поправить git config:
    git config core.hooksPath .githooks
    - это нужно выполнять для каждого репозитория у каждого разработчика. Можно упростить жизнь, вставив это в какой-нибудь скриптовый файл, который все обязательно запускают.
    Ответ написан
    4 комментария
  • Можно ли разукрасить вывод логов docker?

    karabanov
    @karabanov Куратор тега Ubuntu
    Системный администратор
    Можно перенаправить вывод в какой нибудь разукрашиватель
    Ответ написан
    Комментировать
  • Как получить дату первого дня недели, зная номер недели?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    const dateByWeekNumber = (year, week) => {
      // Cоздаём дату, гарантированно входящую в первую неделю.
      const date = new Date(year, 0, 7);
      // Откатываемся до первого четверга года
      // По ГОСТ ИСО 8601-2001 первая неделя года должна содержать четверг
      date.setDate(date.getDate() - (date.getDay() + 10) % 7);
      // Переходим в нужную неделю
      date.setDate(date.getDate() + (week - 1) * 7);
      // Откатываемся до понедельника
      date.setDate(date.getDate() - 3);
      return date;
    };
    dateByWeekNumber(2023, 10);
    //  Date Mon Mar 06 2023 00:00:00 GMT+0300 (Москва, стандартное время)
    dateByWeekNumber(2020, 1);
    // Date Mon Dec 30 2019 00:00:00 GMT+0300 (Москва, стандартное время)
    Ответ написан
    1 комментарий
  • Как в javascript перехватывать вызов методов объекта?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Хук get не позволяет получить параметры вызова метода

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

    function sequence(functions) {
      return new Proxy(functions, {
        get(target, key) {
          const val = target[key];
          return val instanceof Function
            ? (...args) => {
                console.log(`${key} called with arguments: `, args);
                return val.apply(target, args);
              }
            : val;
        },
      });
    }
    Ответ написан
    Комментировать
  • Js canvas.Как растяуть изображение так, чтобы оно не деформировалось, и всегда было по всей ширине canvas?

    Dr_Elvis
    @Dr_Elvis
    В гугле забанен
    Простая логика. Если у тебя канвас 400 на 600 пикселей, а картинка 30 на 40, то чтобы увеличить её по ширине тебе нужно её ширину увеличить в 400/30=13,3 раза, значит и высоту увеличиваешь в 13,3 раза, то есть 80*13.3=532 пикселя. и вот у тебя картинка по все ширине и равномерно по высоте.
    Ответ написан
    Комментировать
  • Запросы на сервер put, post,get, delete отправляются с помощью fetch. Как менять файл JSON на сервере с помощью Php?

    Stalker_RED
    @Stalker_RED
    Ставишь себе php.
    Ставишь какой-нибудь веб-сервер: nginx, apache или набирающий популярность caddy.
    (можно не ставить вебсервер, а использовать встроенный в PHP но у него с настройками пичалька).

    Настраиваешь веб сервер чтобы при побращении на mysite.localhost/чототам дергал твои php-скрипты.
    Тут у тебя есть развилка - можешь в настройках веб-сервера направить PUT и DELETE в разные скрипты или, в лучших традициях сделать единую точку входа, и уже в PHP-коде проверять
    if ($_SERVER['REQUEST_METHOD'] === 'PUT') {
     // ...
    }

    Вся документация легко гуглится, по запросу "php json" или "php write file" в первых результатах будет или официальная документация на php.net, где есть примеры, или stackoverflow, тоже с примерами.
    Через пару недель как наиграешься, выкидываешь весь код, и идешь читать phptherightway и учить фреймворки.
    Ответ написан
    Комментировать
  • Как запустить команду при отсутствии пинга?

    hint000
    @hint000
    у админа три руки
    Для удобства написал функцию.
    is_host_acessible() {
      ping $1 -c 10 >/dev/null && echo 1
    }
    
    if [ ! $(is_host_acessible 192.168.123.45) ]; then
        echo "запускаем резервный сервак"
    fi

    а если кратко, то так
    ping 192.168.123.45 -c 10 || echo "запускаем резервный сервак"
    Ответ написан
    22 комментария
  • Всем привет. Я зарегистрировала свое приложение на hh.api, получила client id и client secret. Не разобралась, что делать дальше?

    @rPman
    а дальше идешь на сайт с документацией
    https://github.com/hhru/api
    там будет все красиво описано со ссылками на другую документацию, с примерами, по русски (так не привычно), оформлено очень качественно
    https://api.hh.ru/openapi/redoc
    Ответ написан
    6 комментариев
  • Как преобразовать список ul в json?

    Seasle
    @Seasle Куратор тега JavaScript
    const collectTree = (itemSelector, elementSelector, root = document) =>
      [...root.querySelectorAll(itemSelector)].map((element) => ({
        name: element.querySelector(elementSelector)?.textContent.trim(),
        child: collectTree(itemSelector, elementSelector, element),
      }));

    collectTree('ul > li', 'a');
    // или
    collectTree(':scope > ul > li', 'a');

    Результат

    [
        {
            "name": "Вегетотропные средства",
            "child": [
                {
                    "name": "Адренолитические средства",
                    "child": [
                        {
                            "name": "Альфа- и бета-адреноблокаторы",
                            "child": []
                        },
                        {
                            "name": "Альфа-адреноблокаторы",
                            "child": [
                                {
                                    "name": "Альфа-адреноблокаторы в комбинациях",
                                    "child": []
                                }
                            ]
                        },
                        {
                            "name": "Бета-адреноблокаторы",
                            "child": [
                                {
                                    "name": "Бета-адреноблокаторы в комбинациях",
                                    "child": []
                                }
                            ]
                        },
                        {
                            "name": "Симпатолитики",
                            "child": [
                                {
                                    "name": "Симпатолитики в комбинациях",
                                    "child": []
                                }
                            ]
                        }
                    ]
                },
                {
                    "name": "Противоопухолевые средства",
                    "child": [
                        {
                            "name": "Алкилирующие средства",
                            "child": []
                        },
                        {
                            "name": "Антиметаболиты",
                            "child": []
                        },
                        {
                            "name": "Другие противоопухолевые средства",
                            "child": []
                        },
                        {
                            "name": "Противоопухолевые антибиотики",
                            "child": []
                        },
                        {
                            "name": "Противоопухолевые гормональные средства и антагонисты гормонов",
                            "child": []
                        },
                        {
                            "name": "Противоопухолевые средства — ингибиторы протеинкиназ",
                            "child": []
                        },
                        {
                            "name": "Противоопухолевые средства — моноклональные антитела",
                            "child": [
                                {
                                    "name": "Противоопухолевые средства — моноклональные антитела в\n                                        комбинациях",
                                    "child": []
                                }
                            ]
                        },
                        {
                            "name": "Противоопухолевые средства растительного происхождения",
                            "child": [
                                {
                                    "name": "Противоопухолевые средства растительного происхождения в\n                                        комбинациях",
                                    "child": []
                                }
                            ]
                        }
                    ]
                },
                {
                    "name": "Разные средства",
                    "child": [
                        {
                            "name": "Вспомогательные вещества, реактивы и полупродукты",
                            "child": []
                        },
                        {
                            "name": "Детское питание (включая смеси)",
                            "child": []
                        },
                        {
                            "name": "Другие разные средства",
                            "child": []
                        },
                        {
                            "name": "Радиопрофилактические и радиотерапевтические средства",
                            "child": []
                        },
                        {
                            "name": "Склерозирующие средства",
                            "child": []
                        },
                        {
                            "name": "Средства для коррекции нарушений при алкоголизме, токсико- и\n                                наркомании",
                            "child": [
                                {
                                    "name": "Средства для коррекции нарушений при алкоголизме, токсико-\n                                        и наркомании в комбинациях",
                                    "child": []
                                }
                            ]
                        }
                    ]
                },
                {
                    "name": "Регенеранты и репаранты",
                    "child": [
                        {
                            "name": "Регенеранты и репаранты в комбинациях",
                            "child": []
                        }
                    ]
                }
            ]
        }
    ]

    Ответ написан
    4 комментария