Задать вопрос
  • Почему 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 комментария
  • JSONPath - - как вернуть объекты (ключи, значения) на 1-м и 3-м уровнях?

    oldTV
    @oldTV Автор вопроса
    Вот что значит написать правильный вопрос: разобрался сам, ответ: $.paths.*~
    Ответ написан
    Комментировать
  • Как удалить текст в ячейке после символа?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Вот, надеюсь, понятный способ:
    const nodes = [ ...document.querySelector('td').childNodes ];
    const index = nodes.findIndex(({ nodeName }) => nodeName === 'BR');
    if (index > -1) nodes[index + 1].remove();
    Находим все узлы DOM внутри td. Их будет 3:
    1. текстовый
    2. элемент BR
    3. и опять текстовый

    Следующий узел после найденного BR — удаляем.
    Ответ написан
    Комментировать
  • Как придать div вот такую форму?

    black1277
    @black1277
    Вольный стрелок
    Вот накидал по быстрому для примера

    Этот способ удобен тем, что можно сделать край любой формы, в зависимости от того какой svg использовать. Недостаток в том, что бордер можно только через drop-shadow сделать.
    Ответ написан
    4 комментария
  • HTML тэг чтобы открыть папку в линуксе?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Это называется не тэг, а URI scheme. На странице описания есть и примеры использования этой scheme, в том числе и в UNIX-like.
    Ответ написан
    1 комментарий
  • Как спрятать ключ от API чтоб работал github pages?

    @bqio
    https://bqio.github.io/
    Для хранения секретных ключей используется сервер, либо environment variables.

    Как пример, dotenv
    Ответ написан
    Комментировать
  • Как найти самое часто встречаемое число в массиве?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const mostFrequentNum = Array
      .from(arr.reduce((acc, n) => acc.set(n, -~acc.get(n)), new Map))
      .reduce((max, n) => max[1] > n[1] ? max : n, [ , 0 ])
      .at(0);

    или

    const mostFrequentNum = Object
      .entries(arr.reduce((acc, n) => (acc[n] = (acc[n] ?? 0) + 1, acc), {}))
      .reduce((acc, n) => (acc[n[1]] = +n[0], acc), [])
      .pop();
    Ответ написан
    2 комментария
  • Как импортировать зависимость из другой зависимости?

    @its2easyy
    Во-первых, это неудобно, зачем 2 раза устанавливать один и тот же пакет.

    Если npm может выбрать версию которая одновременно подойдёт и для проекта и для пакета, то зависимость будет установлена только один раз.
    если зависимость #2 внутри #1 обновится, мне также придется ее обновлять во избежание конфликтов версий

    в проекте ^2.3.4, в зависимости стало ^2.4.0, npm установит 2.4.0 потому что она подходит под оба условия, в проекте версию можно не трогать. Обновлять нужно будет только мажорные версии потому что они предполагают breaking changes.
    Вопрос: зачем?

    Вы не контролируете состав зависимостей в пакете, поэтому нет гарантии что эта вложенная зависимость там останется даже после обновления минорной версии, а если она пропадёт то импорт из node_modules выдаст ошибку.
    Ответ написан
    1 комментарий
  • Почему ref здесь не реактивен?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Не выдумывайте, всё реактивно. Просто вы заменяете массив в хранилище (мутация remove) - после этого в хранилище у вас одни данные, а рендер вы выполняете на основе других.
    Ответ написан
    7 комментариев
  • Почему тут TypeError у map?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    А зачем там str и что вы имели ввиду, написав это?
    Просто уберите.

    function camelize(str) {
        return str
            .split('-')
            .map(function(word, index) {
                if (index == 0) {
                    return word;
                } else {
                    return word[0].toUpperCase() + word.slice(1);
                }
            })
            .join('')
    }
    
    let str = prompt('Введите текст через дефис');
    alert(camelize(str));


    Можно и покороче

    function camelize(str) {
        return str
            .split('-')
            .map((word, index) => index == 0 ? word : word[0].toUpperCase() + word.slice(1))
            .join('')
    }
    
    let str = prompt('Введите текст через дефис');
    alert(camelize(str));


    const upper = (word, index) => index == 0 ? word : word[0].toUpperCase() + word.slice(1);
    function camelize(str) {
        return str
            .split('-')
            .map(upper)
            .join('')
    }
    
    let str = prompt('Введите текст через дефис');
    alert(camelize(str));


    const upper = (word, index) => index == 0 ? word : word[0].toUpperCase() + word.slice(1);
    const camelize = str => str.split('-').map(upper).join('');
    
    let str = prompt('Введите текст через дефис');
    alert(camelize(str));
    Ответ написан
    1 комментарий
  • Как справить вывод кода в VS Code?

    black1277
    @black1277
    Вольный стрелок
    Идёте в настройки, выбираете пункт Расширения, ищите название Rune Code configuration и в правой панельке ищете опцию Show Execution Message и снимаете с неё галочку. Всё!
    Ответ написан
    2 комментария
  • Где можно взять массив стран на русском для javascript?

    webanet
    @webanet
    var c = [
        'Афганистан',
        'Албания',
        'Антарктика',
        'Алжир',
        'Американское Самоа',
        'Андора',
        'Ангола',
        'Антигуа и Барбуда',
        'Азербайджан',
        'Аргентина',
        'Австралия',
        'Австрия',
        'Багамские Острова',
        'Бахрейн',
        'Бангладеш',
        'Армения',
        'Барбадос',
        'Бельгия',
        'Бермудские Острова',
        'Бутан',
        'Боливия',
        'Босния и Герцеговина',
        'Ботсвана',
        'Остров Буве',
        'Бразилия',
        'Белиз',
        'Британская территория в Индийском океане',
        'Соломоновы Острова',
        'Британские Виргинские острова',
        'Бруней',
        'Болгария',
        'Мьянма',
        'Бурунди',
        'Белоруссия',
        'Камбоджа',
        'Камерун',
        'Канада',
        'Кабо-Верде',
        'Каймановы острова',
        'Центральноафриканская Республика',
        'Шри-Ланка',
        'Чад',
        'Чили',
        'Китайская Народная Республика',
        'Остров Рождества',
        'Кокосовые острова',
        'Колумбия',
        'Коморы',
        'Майотта',
        'Республика Конго',
        'Демократическая Республика Конго',
        'Острова Кука',
        'Коста-Рика',
        'Хорватия',
        'Куба',
        'Кипр',
        'Чехия',
        'Бенин',
        'Дания',
        'Доминика',
        'Доминиканская Республика',
        'Эквадор',
        'Сальвадор',
        'Экваториальная Гвинея',
        'Эфиопия',
        'Эритрея',
        'Эстония',
        'Фарерские острова',
        'Фолклендские острова',
        'Южная Георгия и Южные Сандвичевы острова',
        'Фиджи',
        'Финляндия',
        'Аландские острова',
        'Франция',
        'Французская Гвиана',
        'Французская Полинезия',
        'Французские Южные и Антарктические территории',
        'Джибути',
        'Габон',
        'Грузия',
        'Гамбия',
        'Палестина',
        'Германия',
        'Гана',
        'Гибралтар',
        'Кирибати',
        'Греция',
        'Гренландия',
        'Гренада',
        'Гваделупа',
        'Гуам',
        'Гватемала',
        'Гвинея',
        'Гайана',
        'Республика Гаити',
        'Остров Херд и острова Макдональд',
        'Ватикан',
        'Гондурас',
        'Гонконг',
        'Венгрия',
        'Исландия',
        'Индия',
        'Индонезия',
        'Иран',
        'Ирак',
        'Ирландия',
        'Израиль',
        'Италия',
        'Кот-д’Ивуар',
        'Ямайка',
        'Япония',
        'Казахстан',
        'Иордания',
        'Кения',
        'КНДР',
        'Республика Корея',
        'Кувейт',
        'Киргизия',
        'Лаос',
        'Ливан',
        'Лесото',
        'Латвия',
        'Либерия',
        'Ливия',
        'Лихтенштейн',
        'Литва',
        'Люксембург',
        'Макао',
        'Мадагаскар',
        'Малави',
        'Малайзия',
        'Мальдивы',
        'Мали',
        'Мальта',
        'Мартиника',
        'Мавритания',
        'Маврикий',
        'Мексика',
        'Монако',
        'Монголия',
        'Молдавия',
        'Черногория',
        'Монтсеррат',
        'Марокко',
        'Мозамбик',
        'Оман',
        'Намибия',
        'Науру',
        'Непал',
        'Нидерланды',
        'Кюрасао',
        'Аруба',
        'Синт-Мартен',
        'Бонэйр, Синт-Эстатиус и Саба',
        'Новая Каледония',
        'Вануату',
        'Новая Зеландия',
        'Никарагуа',
        'Нигер',
        'Нигерия',
        'Ниуэ',
        'Норфолк',
        'Норвегия',
        'Северные Марианские острова',
        'Внешние малые острова США',
        'Микронезия',
        'Маршалловы Острова',
        'Палау',
        'Пакистан',
        'Панама',
        'Папуа — Новая Гвинея',
        'Парагвай',
        'Перу',
        'Филиппины',
        'Острова Питкэрн',
        'Польша',
        'Португалия',
        'Гвинея-Бисау',
        'Восточный Тимор',
        'Пуэрто-Рико',
        'Катар',
        'Реюньон',
        'Румыния',
        'Россия',
        'Руанда',
        'Сен-Бартелеми',
        'Острова Святой Елены, Вознесения и Тристан-да-Кунья',
        'Сент-Китс и Невис',
        'Ангилья',
        'Сент-Люсия',
        'Сен-Мартен (Франция)',
        'Сен-Пьер и Микелон',
        'Сент-Винсент и Гренадины',
        'Сан-Марино',
        'Сан-Томе и Принсипи',
        'Саудовская Аравия',
        'Сенегал',
        'Сербия',
        'Сейшельские Острова',
        'Сьерра-Леоне',
        'Сингапур',
        'Словакия',
        'Словения',
        'Сомали',
        'Южно-Африканская Республика',
        'Зимбабве',
        'Испания',
        'Южный Судан',
        'Судан',
        'Западная Сахара',
        'Суринам',
        'Шпицберген и Ян-Майен',
        'Свазиленд',
        'Швеция',
        'Швейцария',
        'Сирия',
        'Таджикистан',
        'Таиланд',
        'Того',
        'Токелау',
        'Тонга',
        'Тринидад и Тобаго',
        'Объединённые Арабские Эмираты',
        'Тунис',
        'Турция',
        'Туркмения',
        'Теркс и Кайкос',
        'Тувалу',
        'Уганда',
        'Украина',
        'Республика Македония',
        'Египет',
        'Великобритания',
        'Гернси',
        'Джерси',
        'Остров Мэн',
        'Танзания',
        'Соединённые Штаты Америки',
        'Виргинские Острова',
        'Буркина-Фасо',
        'Уругвай',
        'Узбекистан',
        'Венесуэла',
        'Уоллис и Футуна',
        'Самоа',
        'Йемен',
        'Замбия',
    ];
    Ответ написан
    2 комментария
  • Как экранированить грамотно csv?

    iMedved2009
    @iMedved2009
    Не люблю людей
    (?:^"|;")(""|[\w\W]*?)(?=";|"$)|(?:^(?!")|;(?!"))([^;]*?)(?=$|;)|(\r\n|\n)

    https://regex101.com/r/EeOjHs/1
    Ответ написан
    4 комментария
  • Что происходит в этом цикле?

    black1277
    @black1277
    Вольный стрелок
    // создаем стрелочную функцию, принимающую два параметра
    const countChars = (str, char) => {
    	// создаем переменные и присваиваим им значение 0
    	let i = 0;
    	let count = 0;
    	// запускаем цикл с предусловием
    	while (i < str.length) { // пока i меньше чем длина строки str
    		// исполняем тело цикла
    
    		// берем символ из строки str расположенный по индексу i и переводим в нижний регистр
    		// берем символ из аргумента функции и переводим в нижний регистр
    		if (str[i].toLowerCase() === char.toLowerCase()) { // сравниваем оба значения
    			// если совпало увеличиваем счетчик на 1
    			count = count + 1;
    		}
    		// перед новой итерацией цикла увеличиваем индекс на 1
    		i = i + 1;
    	}
    // возвращаем из функции накопленный результат подсчета или начальное значение если совпадений не было
    	return count;
    };
    
    let result = countChars('abba#abba#abba#', '#') // пример использования
    console.log(result); // 3
    Ответ написан
    Комментировать
  • Являются ли стрелочные функции аналогом bind функций?

    iiiBird
    @iiiBird
    Пока ты спишь - твой конкурент совершенствуется
    2 комментария