• Какими инструментами сделан этот видео гайд?

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

    rqdkmndh
    @rqdkmndh
    Web-разработчик
    Такой вариант в nginx.conf:
    server {
            listen       80;
            server_name  localhost;
    
            location / {
                root   /var/www/html;
                index  index.php;
            }
    
            location /metrics {
                stub_status;
                allow 127.0.0.1;
                deny all;
            }
    
            location ~ \.php$ {
                root           /var/www/html;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;
                include        fastcgi_params;
            }
        }

    Описание метрик Nginx /metrics:
    Active connections — текущее количество активных соединений.
    accepts — общее количество соединений, принятых сервером.
    handled — количество соединений, обработанных сервером (совпадает с accepts, если нет ошибок).
    requests — общее количество обработанных запросов.
    Reading — количество соединений, которые Nginx читает от клиента.
    Writing — количество соединений, в которые Nginx пишет ответ клиенту.
    Waiting — количество keep-alive соединений, которые открыты и ожидают нового запроса.

    stub_status — это директива, которая включает модуль ngx_http_stub_status_module. Этот модуль выводит минимальную статистику о текущем состоянии Nginx
    Ответ написан
    Комментировать
  • Какая есть библиотека React для таких скролл табов?

    black1277
    @black1277
    Вольный стрелок
    Ответ написан
    Комментировать
  • Как в notepadd++ убрать первый символ?

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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    const result = data.reduce(
      (acc, cur) => ((acc[cur.country] ??= []).push(cur.city), acc),
      {},
    );
    Ответ написан
    1 комментарий
  • Как в express-validator отменить проверку поля?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    А документация что говорит? Например эта страница: https://express-validator.github.io/docs/guides/cu...

    Плюс есть оператор if: https://express-validator.github.io/docs/api/valid...
    Ответ написан
    1 комментарий
  • Почему Jest не может распарсить CSS модуля?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    https://jestjs.io/docs/webpack#handling-static-assets

    В обычной сборке у Вас scss файлы собираются бандлером вроде webpack.
    А в jest никакого бандлера нет.
    Ответ написан
    Комментировать
  • Как создать матрицу?

    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 комментариев
  • TypeError: Object of type datetime is not JSON serializable?

    @Everything_is_bad
    открываем гугл, пишем заголовок вопроса, дописываем fastapi, в итоге получаем https://fastapi.tiangolo.com/tutorial/encoder/
    Ответ написан
    1 комментарий
  • Как автоматически удалять старые процессы chrome?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    driver.quit()

    Используйте как минимум 1 глобальное исключение, и в случае ошибки, выполняйте driver.quit(), т.к. в ином случае, скрипт крашнется, а сессия браузера останется.
    Ответ написан
    9 комментариев
  • Как отловить событие нажатия - комбинация клавиш?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Распечатайте событие keydown в консоли. Вы там увидите помимо кода клавиши ещё поля shiftKey, ctrlKey имеющие булево значение, которые отображают, нажата ли соответствующая клавиша.
    Ответ написан
    Комментировать
  • Почему не работают onTransitionRun и onTransitionStart в реакте?

    rqdkmndh
    @rqdkmndh
    Web-разработчик
    Не работает потому что таких событий там нет. А есть такие:
    <div
      onAnimationStart={e => console.log('onAnimationStart')}
      onAnimationIteration={e => console.log('onAnimationIteration')}
      onAnimationEnd={e => console.log('onAnimationEnd')}
    />

    вот ссылочка на документацию
    Ответ написан
    Комментировать
  • Почему форма обратной связи php отправляет часть кода?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1) Тело хтмл письма, как и любой подвид иксмл, должно начинаться с оперделяющих тегов, у вас же тупо табличка отправляется.
    2) Заниматься мастурбациейфигней с отправкой через mail() в 21 веке как минимум стыдно, как максимум чревато проблемами при отладке и смене функциональности, не говоря уже о том что отправка хтмл контента и приложений становится задачей со звездочкой.
    3) Все легко решается переходом на нормальную библиотеку отправки почты, пхпмэйлер/свифтмэйлер и их многочисленные аналоги.
    Ответ написан
    3 комментария
  • Как запаролить сайт?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Пароль найдите самостоятельно (хранение пароля на клиенте не самая безопасная идея):
    Ответ написан
    4 комментария
  • Почему pause в cmd скрипте не предотвращает закрытие окна?

    @res2001
    Developer, ex-admin
    goto :eof - приводит к завершению скрипта в этом месте. Это равносильно exit.

    Пример кода приведен ниже в коментариях: Почему pause в cmd скрипте не предотвращает закрытие окна?
    Ответ написан
    9 комментариев
  • Почему 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 комментария
  • Как сделать возможность посадить элемент при 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 комментарий
  • Как вывести компонент React несколько раз учитывая количество count в объекте?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега React
    return new Array(ingredient.count).fill(null).map((_, index) => <Meat key={index} />);

    Создаём массив нужной длины, заполням его чем угодно (это обязательно, иначе работать не будет) и итерируем по нему как обычно в Реакте.
    Как правило индекс массива лучше не использовать в качестве ключа, но поскольку здесь компоненты взаимозаменяемые (раз не принимают пропсы), то от индекса вреда не будет.
    Ответ написан
    2 комментария
  • Стоит ли дальше учиться программировать?

    rqdkmndh
    @rqdkmndh
    Web-разработчик
    На счет AI вы правы. Уже сейчас он может выдавать код на уровне мидл-специалиста. И каждое новое поколение будет лучше и совершеннее. Но есть одно но... Чтобы получить от AI хороший код - нужно составить правильный качественный промт-запрос, а сделать это может именно качественный специалист. Кроме того, оценить насколько хороший получился код - может только профильный специалист (то что код работает и даже выдает правильный результат - еще не означает что код удовлетворяет всем критериям).
    Еще одна особенность, заключается в том, что современный AI может фокусироваться хорошо на небольшом количестве аспектов. Чем больше ему задаешь критериев и требований - тем больше у него происходит "расфокусировка" - код становится похожим на код написанный "склеротиком", появляются банальные ошибки и даже какая-то халтура. Поэтому при написании сложного кода с большим количеством требований - приходится получать варианты кода сначала с одними критериями, потом с другими и уже из полученных вариантов самому собирать итоговый рабочий код.
    Итого: не думаю, что в ближайшие 20-30 лет AI сможет полностью заменить программистов. Будут повышаться требования к знаниям и опыту, вероятно даже к уровню интеллекта - но востребованность специалистов, скорее всего будет расти.
    Ответ написан
    4 комментария