Задать вопрос
  • Почему не получается воспользоваться js модулем?

    black1277
    @black1277
    Вольный стрелок
    При использовании импортов тип скрипта должен быть указан как "module". Попробуйте так:
    <script type="module"> // <-- =========  здесь =============
            const tooltip = d3.select("body").append("div")
                .attr("class", "tooltip")
                .style("opacity", 0);
    //=============
                        const script = document.createElement('script');
                        script.id = 'dynamic-script'; 
                        script.type = 'module';    //================= Добавляем этот атрибут================
                        script.src = "/static/js/" + scriptFile; 
                        document.body.appendChild(script);
    //=============
    </script>
    Ответ написан
    2 комментария
  • Какими инструментами сделан этот видео гайд?

    black1277
    @black1277
    Вольный стрелок
    Сделано в Blender, вот оригинальное видео Скорее всего используется программа захвата видео окна программы и какой-то плагин (возможно самописный), регулирующий в какие моменты производить запись.
    Еще как вариант, возможно была сделана полная запись со всеми движениями мыши и вызовом инструментов, а потом видео прогнали через нейросеть, которая оставила только кадры с визуальными изменениями и подогнала все нестыковки.
    Ответ написан
    2 комментария
  • Как в notepadd++ убрать первый символ?

    black1277
    @black1277
    Вольный стрелок
    Жмешь сочетание cntrl+H, в режим поиска выбираешь 'Регулярное выражение', в поле 'найти' вводишь ^:
    в поле 'заменить' оставляешь пустым и жмешь на кнопку 'Заменить все'
    Ответ написан
    1 комментарий
  • Почему сервис не запускается в контейнере докер?

    black1277
    @black1277
    Вольный стрелок
    Он же пишет 'Connection refused' - значит когда он стартует БД еще не готова принять соединение. Если думали, что это:
    depends_on:
          - main_db

    спасает от этого - увы нет. Чтобы сервис стартовал нормально нужно проверять готовность БД:
    services:
      mysql:
        healthcheck:
          test: ["CMD", "mysqladmin", "ping", "-h", "mysql", "-p${DB_PASSWORD:-secret}"]
          interval: 10s
          timeout: 5s
          retries: 5
          start_period: 10s

    а сервис стартовать по готовности БД:
    main_queue:
        depends_on:
          mysql:
            condition: service_healthy
            restart: true
    Ответ написан
    2 комментария
  • Как сделать cmd скрипт с меню?

    black1277
    @black1277
    Вольный стрелок
    1(важно) создаете текстовый файл и сохраняете его в формате UTF-8 (без BOM)
    2 открываете консоль win+R вводите cmd и жмете enter
    3 вводите команду powercfg /L - получите список всех схем питания и самое главное - их идентификаторы
    4 копируете код отсюда в текстовый файл и заменяете в строках с Powercfg -SETACTIVE айдишник на свои, полученные из предыдущего шага
    @echo off
    chcp 65001>nul
    
    call :ECHO " --= Выбор системы питания =--" 0B
    echo.
    call :ECHO " E - ЭНЕРГОСБЕРЕГАЮЩАЯ" 0E
    echo.
    call :ECHO " S - СБАЛАНСИРОВАННАЯ" 0A
    echo.
    call :ECHO " V - ВЫСОКОПРОИЗВОДИТЕЛЬНАЯ" 0D
    echo.
    call :ECHO " -----------------------------" 0B
    echo.
    
    call :ECHO " по умолчанию = " 0B
    call :ECHO " ВЫСОКОПРОИЗВОДИТЕЛЬНАЯ" 0C
    echo.
    call :ECHO " время для выбора " 0B
    call :ECHO "7сек" 0C
    echo.
    CHOICE /T 7 /C ESV /D v /M "Сделайте выбор"
    
    if %errorlevel% == 1 goto energo
    if %errorlevel% == 2 goto sbalans
    if %errorlevel% == 3 goto visoko
    
    :energo
    call :ECHO " -----------------------------" 0B
    echo.
    call :ECHO " выбрана" 0B
    call :ECHO " ЭНЕРГОСБЕРЕГАЮЩАЯ" 0E
    Powercfg -SETACTIVE a1841308-3541-4fab-bc81-f71556f20b4a
    goto saz
    
    :sbalans
    call :ECHO " -----------------------------" 0B
    echo.
    call :ECHO " выбрана" 0B
    call :ECHO " СБАЛАНСИРОВАННАЯ" 0A
    Powercfg -SETACTIVE 381b4222-f694-41f0-9685-ff5bb260df2e
    goto saz
    
    :visoko
    call :ECHO " -----------------------------" 0B
    echo.
    call :ECHO " выбрана" 0B
    call :ECHO " ВЫСОКОПРОИЗВОДИТЕЛЬНАЯ" 0D
    Powercfg -SETACTIVE 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
    
    :saz
    
    echo.
    echo " Завершение программы через 3 сек"
    >nul timeout/nobreak 3
    chcp 866>nul
    
    exit /b
     
    :ECHO
    chcp 866>nul
     
    for /f %%i in ('"prompt $h& for %%i in (.) do rem"') do (set Z=%%i)
    pushd "%TEMP%" && (
        <nul>"%~1^" set /p="%Z%%Z%  %Z%%Z%"
        findstr /a:%2 . "%~1^*"
        del "%~1^"
        popd
        )
    chcp 65001>nul
    exit /b

    В этой строке CHOICE /T 7 /C ESV /D v /M "Сделайте выбор" изменяйте на какие буквы будет реакция выбора 'ESV', а между /D и /M - какой выбор по умолчанию.
    Ответ написан
    2 комментария
  • Какая есть библиотека React для таких скролл табов?

    black1277
    @black1277
    Вольный стрелок
    Ответ написан
    Комментировать
  • Почему Set-Content в Powershell сохраняет строку текста с CRLF на конце и как это изменить?

    black1277
    @black1277
    Вольный стрелок
    Этот код в Powershell:
    'тестовая string' | Set-Content -NoNewline test.txt -Encoding 'UTF8'

    создает только строку 'тестовая string' без всяких CRLF символов!
    Это можно проверить, открыв файл в любом другом текстовом редакторе в режиме показа всех символов(к примеру Notepad++)
    А то что вы видите в VScode - зависит от его собственных настроек.
    Ответ написан
    Комментировать
  • Как создать матрицу?

    black1277
    @black1277
    Вольный стрелок
    # Создаем вертикальный вектор с шагом 5
    col_vector = np.arange(0, 100, 5).reshape(-1, 1)
    
    # Повторяем этот вектор горизонтально 20 раз
    mat_A = np.tile(col_vector, (1, 20))

    .reshape(-1, 1): Преобразует массив в вертикальный вектор (20, 1)
    Ответ написан
    6 комментариев
  • Как в JS добавить вторую кнопку Закрыть или Отмена?

    black1277
    @black1277
    Вольный стрелок
    const fn = () => {
      document.getElementById('burger-menu').classList.toggle("burger-hidden");
      document.getElementById('burger-button').classList.toggle("burger-icon-close");
    }
    document.querySelectorAll('.burger-icon').forEach(el=>el.addEventListener('click', fn))
    Ответ написан
    2 комментария
  • Как прописать ELASTICSEARCH_URL в файле .env?

    black1277
    @black1277
    Вольный стрелок
    ELASTICSEARCH_URL это не одна строка параметр, а несколько. Поэтому .env:
    ELASTICSEARCH_URL=https://localhost:9200
    ELASTICSEARCH_CA_CERTS=./http_ca.crt
    ELASTICSEARCH_USERNAME=elastic
    ELASTICSEARCH_PASSWORD=PASSWORD

    Примерно как должен выглядеть код:
    from flask import Flask
    from elasticsearch import Elasticsearch
    from dotenv import load_dotenv
    import os
    
    # Загрузка переменных окружения из .env файла
    load_dotenv()
    
    app = Flask(__name__)
    
    # Получение параметров из переменных окружения
    es_url = os.getenv("ELASTICSEARCH_URL")
    es_ca_certs = os.getenv("ELASTICSEARCH_CA_CERTS")
    es_username = os.getenv("ELASTICSEARCH_USERNAME")
    es_password = os.getenv("ELASTICSEARCH_PASSWORD")
    
    # Подключение к Elasticsearch с использованием параметров из .env файла
    es = Elasticsearch(es_url, ca_certs=es_ca_certs, basic_auth=(es_username, es_password))
    
    # ваш код ...
    Ответ написан
    1 комментарий
  • Как написать SQL запрос?

    black1277
    @black1277
    Вольный стрелок
    SELECT DISTINCT city.name
    FROM city
    INNER JOIN ad_cars ON city.name = ad_cars.city
    ORDER BY city.name;

    INNER JOIN соединяет две таблицы на основании совпадения значений в столбцах city.name и ad_cars.city.
    DISTINCT удаляет дублирующиеся записи.
    ORDER BY city.name сортирует результаты по названию города.
    Ответ написан
    2 комментария
  • Как реализовать корректную работу кнопки назад в браузере?

    black1277
    @black1277
    Вольный стрелок
    Вам нужно использовать кэширование, чтобы при возврате назад сайт мог загрузить уже загруженные данные моментально из кэша. Лучше всего для этого подходит использование Service Worker API Вот пара ссылок для понимания: youtube и Habr
    А чтобы возврат происходил именно на то место откуда перешли - можно использовать якорную ссылку
    Ответ написан
    Комментировать
  • Где найти репетитора / куратора по JavaScript?

    black1277
    @black1277
    Вольный стрелок
    Вот же для этого как раз сервис и открыли https://career.habr.com/experts
    Ответ написан
    2 комментария
  • Почему pause в cmd скрипте не предотвращает закрытие окна?

    black1277
    @black1277
    Вольный стрелок
    Вот так будет работать как функция
    @echo off
    
    set "path_bin_1=d:\TEMP\test.exe"
    call :testname
    
    echo "%path_bin_1%"
    echo "%filename%"
    
    pause
    
    exit
    REM тело функции располагаем в конце после оператора exit чтобы предотвратить выполнение в потоке.
    
    :testname
    echo "%path_bin_1%"
    for /F "delims=" %%a in ("%path_bin_1%") do (
        set file=%%~fa
        set filepath=%%~dpa
        set filename=%%~nxa
    )
    exit /B

    exit /B возвращает управление сразу после того места где был вызов процедуры
    goto теперь не нужен - убрали тело функции за оператор exit
    После pause можно писать другой код и опять вызывать call :testname
    Ответ написан
    4 комментария
  • Как правильно настроить подключение к RabbitMQ с использование Docker и Laravel?

    black1277
    @black1277
    Вольный стрелок
    Для fpm откройте порт и привяжите сеть:
    fpm:
        build:
          context: .
          dockerfile: docker/Fpm.Dockerfile
        volumes:
          - ./:/var/www/laravel-docker
        ports:
          - 5672:5672
        links:
          - mysql
        networks:
          - mm-network
    
    networks:
      mm-network:
        external: true

    и в самом PHP нужно соединяться не на 15672 порт (это порт для вебинтерфейса), а на 5672. Строка подключения на rabbit должна выглядеть так:
    amqp://guest:guest@localhost:5672
    Ответ написан
    1 комментарий
  • Почему при установке npm сыплет ошибками?

    black1277
    @black1277
    Вольный стрелок
    Вы всё правильно делали. Это у них в пакете конфликты зависимостей неразруленные. Чтобы все установилось используйте команду:
    npm i --legacy-peer-deps
    это установит пакеты невзирая на предупреждения и все будет работать (я проверил). Надеюсь версия Node у вас не древняя, я проверял на 20-й
    Ответ написан
    1 комментарий
  • Как убрать/выключить "Свободное трансформирование"?

    black1277
    @black1277
    Вольный стрелок
    наверное вы путаете "Свободное трансформирование" и "Показать инструменты трансформации"(галочка слева вверху).
    И еще в новой версии фотошопа ввели новое поведение инструмента "Свободное трансформирование" . Можно включить в настройках старое поведение. Посмотрите это видео с ютуба
    Ответ написан
    2 комментария
  • Как записать файл в папку контейнера во время запуска docker-compose?

    black1277
    @black1277
    Вольный стрелок
    Есть способ сделать как вам нужно. Создайте файл user.txt с таким содержимым:
    username ALL = NOPASSWD: /usr/bin/tee
    вместо username подставьте имя пользователя из вашего контейнера. Для этого выполните в консоли контейнера команду whoami - получите ваш username.
    В вашем docker-compose файле добавьте к нужному сервису:
    volumes:
        - ./user.txt:/etc/sudoers.d/username

    Теперь, при запуске docker-compose будет монтироваться файл c правами sudo на использование команды tee. И у вас получится записать свой файл в нужную папку.
    Ответ написан
    1 комментарий
  • Как сделать возможность посадить элемент при Drag'n'Drop на определенное место?

    black1277
    @black1277
    Вольный стрелок
    Примерно, вот так:

    const deleteButton = document.querySelectorAll('.column__card-button');
    const addButton = document.querySelector('.add_card')
    const cardContent = document.querySelector('.column__card-content_add')
    const columns = document.querySelectorAll('.column')
    const columnTitle = document.querySelector('.column_title')
    const mainContainer = document.querySelector('.main_container')
    const toDoContainer = document.querySelector('.todo_container')
    let actualCard = null;
    const tasks = document.querySelectorAll('.column__card')
    const areatxt = document.getElementById('textareaid')
    
    addButton.addEventListener('click', function() {
      let columnCardText = areatxt.value;
      areatxt.value = ''
      const newColumnCard = `<div class="column__card" draggable="true"><div
      class="column__card-content">${columnCardText}</div><button class="column__card-button"></button></div>`
      columnTitle.insertAdjacentHTML("afterEnd", newColumnCard);
      //updateLocalStorage()
    });
    
    mainContainer.addEventListener('click', function(event) {
      if (event.target.classList.contains('column__card-button')) {
        const card = event.target.closest('.column__card');
        if (card) {
          card.remove();
        }
      }
      //updateLocalStorage()
    });
    
    function dragStart(e) {
      actualCard = e.target
      e.target.classList.add("is-dragging");
    };
    
    function dragEnd(e) {
      this.classList.remove('hovered');
    };
    
    function dragEnter(e) {
      e.preventDefault();
      this.classList.add('hovered');
    };
    
    function dragLeave() {
      this.classList.remove('hovered');
    };
    
    function dragOver(e) {
      e.preventDefault();
      const activeElement = mainContainer.querySelector(`.is-dragging`);
      const currentElement = e.target;
      
      const isMoveable = activeElement !== currentElement && currentElement.classList.contains(`column__card`);
    
      if (!isMoveable) {
        if (e.target.classList.contains("column") && !this.contains(actualCard)) {
          this.appendChild(actualCard);
        }    
        return;
      }
      // e.clientY — вертикальная координата курсора в момент,
      // когда сработало событие
      const nextElement = getNextElement(e.clientY, currentElement);
    
      // Проверяем, нужно ли менять элементы местами
      if (
        nextElement &&
        activeElement === nextElement.previousElementSibling ||
        activeElement === nextElement
      ) {
        return;
      }
    
      this.insertBefore(activeElement, nextElement);  
    };
    const getNextElement = (cursorPosition, currentElement) => {
      // Получаем объект с размерами и координатами
      const currentElementCoord = currentElement.getBoundingClientRect();
      // Находим вертикальную координату центра текущего элемента
      const currentElementCenter = currentElementCoord.y + currentElementCoord.height / 2;
    
      // Если курсор выше центра элемента, возвращаем текущий элемент
      // В ином случае — следующий DOM-элемент
      const nextElement = (cursorPosition < currentElementCenter) ?
          currentElement :
          currentElement.nextElementSibling;
    
      return nextElement;
    };
    for (const column of columns) {
      column.addEventListener('dragenter', dragEnter);
      column.addEventListener('dragleave', dragLeave);
      column.addEventListener('dragover', dragOver);
      column.addEventListener('drop', drop);
      column.addEventListener('dragstart', dragStart);
      column.addEventListener('dragend', dragEnd);
    }
    
    function drop(e) {
      e.preventDefault();
      actualCard.classList.remove("is-dragging");
      actualCard = null;
      this.classList.remove('hovered');
      //updateLocalStorage();
    };


    Запоминалку на LocalStorage рипнул только.
    Ответ написан
    Комментировать
  • Как наиболее грамотно запустить sql файл с инициализацией бд в Docker?

    black1277
    @black1277
    Вольный стрелок
    Проще всего сделать так:
    1 создаете папку initDatabase1 рядом с docker-compose-файлом
    2 в эту папку скопируйте все SQL-файлы, которые должны выполнится после старта БД
    3 в docker-compose в секции с db1 добавьте:
    volumes:
          - ./initDatabase1:/docker-entrypoint-initdb.d

    Для второй БД создайте папку initDatabase2 и поместите туда соответствующие SQL-файлы, а в секцию с db2:
    volumes:
          - ./initDatabase2:/docker-entrypoint-initdb.d
    Ответ написан
    1 комментарий