• Как в Webstorm "поиск по файлам" использовать регулярные выражения?

    Нужно включить поиск по регуляркам (голубой астериск на скриншоте) и, собственно, написать эту самую регулярку:
    65f1807a6837d054014964.png
    Ответ написан
    4 комментария
  • Несколько вопросов о mongodb?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Я работаю с MongoDB уже более 3 лет, поэтому буду рассказывать и давать советы опираясь на личный опыт эксплуатации.

    Получается, что нас всю жизнь учили данные нормализовывать и объясняли, почему это хорошо, а теперь все с точностью наоборот?

    Не совсем. Вас учили работать только с одной разновидностью баз данных - реляционной. Теперь вы увидели, что бывают еще и другие, документ-ориентированные. Разумеется, в каждой разновидности будут свои подходы к хранению и организации данных.
    Это не хорошо и не плохо, это иначе.
    Несомненно, ажиотаж вокруг термина NoSQL существует. И на то есть причины, в основном то, что данных действительно стало больше. Информационная энтропия увеличивается и ее все сложнее укладывать в рамки реляционных баз данных. Здесь можно долго рассуждать, но могу с уверенностью сказать, что сейчас появился спрос на такие хранилища, в которых структуру нужно менять более быстро, чем это могут позволить реляционные базы данных.

    Объясните, пожалуйста, на пальцах, правильно ли я все понимаю?

    По большей части вы правы. Это денормализованные данные, но с определенными моментами. Я покажу вам их на вашем же примере.

    Как в монго при этом обновлять данные, которые хранятся в каждом документе?


    Это реализуется с помощью банальных обновлений.
    Например, если у меня есть коллекция с книгами, в которой мне нужно обновить авторов.

    Типичная запись в ней выглядит так
    {
        "_id" : ObjectId("5801aa17964c6b2a050041a7"),
        "title" : "New Book",
        "authors" : [ 
            {
                "_id" : ObjectId("5801aa0f964c6b26030041a9"),
                "firstName" : "Phil",
                "lastName" : "Tkachev"
            }
        ]
    }


    И я хочу заменить имя в тех книгах, в которых я - автор, то мой запрос будет выглядеть так:

    db.getCollection('book').update(
     {'authors._id':ObjectId("5801aa0f964c6b26030041a9")}, 
     {$set: {'authors.$.firstName': 'Philipp'}  }, 
     {multi: true } 
    )


    Здесь есть ряд разных сценариев, просто почитайте документацию. В ней все неплохо расписано.

    Приемлемо ли в монго денормализовывать данные, чтобы хранить данные в отдельной коллекции, и обращаться к ним отдельным запросом (ведь джоинов там нет)?


    Есть ряд случаев, когда так и делают. Например есть разного рода ORM, тот же Mongoose, который так и делает.

    И принято ли так работать?


    И да, и нет. Когда вы работаете с такого рода базой данных, вам нужно подходить к организации данных исходя из решаемой проблемы, отталкиваться от проекта будущего приложения или решения задачи.
    Вам просто нужно ответить на вопрос, что дешевле, запросить документ по ключу или обновить запись внутри документов.
    Взять к примеру, ваш сайт, в котором есть новости и их авторы. Новости могут читать миллионы, а значит при обращении к каждой новости нужно будет делать подзапрос на информацию о каждом авторе. Т.е. вместо одного запроса, при просмотре новости, нужно будет делать 2. А если показывать список из 100 новостей? Будете делать 100 вторичных запросов? Нет, это тоже неправильно. Нужно будет получить список новостей, в коде приложения собрать идентификаторы авторов, сделать второй подзапрос, получить информацию об авторах, затем объединить ее с уже полученным списком статей. Это немного усложнит ваше приложение, но тоже позволит сэкономить ресурсы. Если вы встроите авторов внутрь статьи, это позволит вам обойтись одним запросом к базе, хоть на просмотр, хоть на список новостей. С другой стороны вам прийдется подумать об обновлении информации об авторе. Но, т.к. такая информация меняется сравнительно редко, то есть смысл встраивания.

    Что делать, если изменилась структура данных, если структуры то и нет?


    Здесь все просто. Когда вы разрабатываете свое приложение, вы изначально закладываете в него обработку изменений. Например, вы можете добавить поле версии документа, в котором храните номер версии структуры и реагировать на ее изменение в коде. Либо вы можете просто писать приложение таким образом, что оно автоматически будет конвертировать структуру из старой в новую при первом обращении.

    По дизайну вашего приложения.
    Судя по первичным данным, у вас новостной сайт.
    Логично было бы его представить в следующем виде.

    Коллекция новостей:

    {
    	_id: 'MongoId',
    	title: '',
    	body: '',
    	author: {
    		_id: 'идентификатор пользователя',
    		name: 'Имя пользователя',
    		subscribers: 'Количество подписчиков'
    	}
    }


    Автор является неполной копией данных о пользователе. Это поможет сэкономить место и позволит избежать ненужных запросов.

    Коллекция пользователей:

    {
    	_id: 'MongoId',
    	name: 'Имя пользователя',
    	email: '',
    	roles: ['user', 'author', 'admin'],
    	subscribers: 'Number'
    }


    Список ролей может опеределять уровень доступных возможностей. Его легко изменить, можно легко найти авторов или админов.

    Коллекция подписок:

    {
    	initiator: {
    		_id: 'идентификатор пользователя, который инициировал подписку',
    		name: 'Имя пользователя'
    	},
    	target: {
    		_id: 'идентификатор автора',
    		name: 'Имя пользователя'
    	},
    	date: 'ISODate',
    	confirmed: 'bool'
    }


    Здесь вы можете подстроить, как список подписок, так и список подписчиков одним запросом.
    Ответ написан
    1 комментарий
  • Как сделать такой слайдер?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    ну хоть немного фантазии можно проявлять.
    шаг в сторону от стандартов, и в тупике...

    <div class="slider-container">
        <div class="slider">
            <div class="slide"></div>
            <div class="slide"></div>
            <div class="slide"></div>
        </div>
    </div>


    .slider-container {
      width: 600px;
      overflow: hidden;
      display: flex;
      justify-content: center;
    }
    
    .slider {
      width: 900px;
    }


    получится что-то такое

    64b2b55b2c7a3107512460.png
    Ответ написан
    2 комментария
  • Нормально ли создавать функции внутри функций?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    В принципе можно.
    Но может тогда лучше класс создать с необходимыми методами?

    class fun1 {
      constructor(){
        // код...
        this.#fun2();
      }
      #fun2() {
        // код...
        this.#fun3();
      }
      #fun3() {
        // код...
        // вызов какой-то из вложенных функций
      }
      #fun4() {
        // код...
        // вызов какой-то из вложенных функций
      }
    }
    
    const f1 = new fun1();
    Ответ написан
    Комментировать
  • Баг Swiper JS при использовании миниатюр?

    Get-Web
    @Get-Web Куратор тега JavaScript
    Front-End Developer
    Это не баг, это ваша невнимательность. Вы переключаетесь на вторую галерею и начинаете листать до конца, слайды ушли в лево и перекрыли предыдущую галерею, почему? Потому что вы не добавили overflow: hidden; к контейнеру .gallery__slider-inner в котором находится галерея.. Поэтому когда вы переключаетесь обратно на первую галерею, вы все еще видите вторую минус один слайд от неё за счет пролистывания переключателя. Надеюсь вы поняли о чем я говорю
    Ответ написан
    1 комментарий
  • Почему создается кривой qr код (qr code styling)?

    MoralGray
    @MoralGray
    Из-за разных размеров и type svg.
    Можно избежать поставив type canvas.
    Ответ написан
    5 комментариев
  • Html 5 video как делать видео на весь блок?

    @AndreyMyagkov
    <div class="b-video">
    	<video class="viedeo__file"preload="auto" autoplay="true" loop="loop" muted="muted" volume="0" poster="img/slide.png" id="video">
            <source src="http://site.ru/video/1.mp4" type="video/mp4" id="source-video">
        </video>
    </div>
    
    
    <style>
    	.b-video {
    	    width: 100%;
    	    min-height: 600px;
    	    height: 100vh;
    	    position: relative;
    	    overflow: hidden;
    	    z-index: 1;
    }
    .viedeo__file{
        position: absolute;
        width: 100%;
        height: 100%;
        object-fit: cover;
    }
    </style>
    Ответ написан
    1 комментарий
  • Будет ли удобно верстать на macbook air m1 8/256?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Вполне. Как рабочая машинка - отличный девайс. Оптимальнее брать максимальную конфигурацию хотя бы по оперативной памяти - лишней не будет, а добавить нельзя.
    Ответ написан
  • Хватает ли macbook air m1 256/8 в 2022?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Да, хватает. Цвет - любой, покрытие на всех одинаковое, краска не слезает.
    Ответ написан
    Комментировать
  • Как сделать такие линии между блоками в CSS?

    noder_ss
    @noder_ss
    Линуксоид-энтузиаст и SQL разработчик
    1. Border-right, border-left
    2. SVG
    3. Простое наложения елемента
    4. Тег hr
    5. Canvas
    Ответ написан
    Комментировать
  • Могло ли дойти напряжение до материнской платы и спалить всё к чертям?

    hint000
    @hint000
    у админа три руки
    Если делать ставки, как в тотализаторе, то 80% за то, что в БП сгорел варистор (цена детальки 10-50 рублей, в зависимости от жадности продавцов). Сценарий такой: варистор в БП закоротил вход БП, после чего уже сгорел удлиннитель.
    15% за дополнительные повреждения в БП, в первую очередь конденсаторы.
    Оставшиеся 5% за повреждения материнской платы и прочего. Даже с дорогим БП нельзя полностью исключить такую возможность.
    Погорели блочки ко всем роутерам и модемам
    Вот там, держу пари, конденсаторы взорвались с вытеканием электролита.

    От таких случаев защищает реле напряжения, которое можно установить в щиток.
    Ответ написан
    2 комментария
  • Почему не присваивается класс для невалидного input type="checkbox"?

    IlyaMalone
    @IlyaMalone
    Frontend Developer
    Добавьте в условие:
    if (footerInput.value === '' || !footerInput.checked)
    Ответ написан
    2 комментария
  • Как я могу вывести в консоль все значения из объекта?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    А какие "все значения"? У Вас в каждом объекте area будет только одно значение под ключом areaText.
    Каждая следующая areaText перезаписывает предыдущую. Название ключа же одинаковое....
    Сделать массивом и перебрать. area.forEach(i => console.log(i))
    {
      img: 'img/explore/1.png',
      title: '2 Bedroom Apartments',
      area: [
        'Suite Area – 1,383 sq.ft',
        'Balcony Area – 886 sq.ft',
        'Total Area – 2,269 sq.ft'
      ]
    }
    Ответ написан
    Комментировать
  • Почему не удаляется/добавляется класс при каждом нажатии кнопки?

    SilenceOfWinter
    @SilenceOfWinter
    та еще зажигалка...
    потому что в popupInputValue будет значение последнего элемента forEach
    Ответ написан
    5 комментариев
  • Какую библиотеку использовать для постепенной анимации элемента при скролле страницы?

    MrDecoy
    @MrDecoy Куратор тега CSS
    Верставший фронтендер
    Ну конкретно такое не сложно сделать и самому - подписаться на скрролл, в зависимости от значения делать transform для слоёв.
    А так часто используют GSAP\ScrollMagic для сайтов с нестандартными анимациями при скроле
    https://greensock.com/scrollmagic/
    Написано только что
    Ответ написан
    Комментировать
  • Не закрывается div, если по нему кликнуть повторно?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    В обработчике клика сначала всем удаляется класс active,
    а только затем проверяется, по кому кликнули, и если убранного класса нет – он добавляется.

    Так при клике мгновенно удаляется-добавляется назад этот класс.

    Можно было бы удалять в начале не всем подряд, а всем, кроме себя.
    А для самого блока добавить вариант, что класс уже есть – тогда его убрать.

    Но вообще это некруто – полагаться на наличие/отсутствие классов. Лучше держать где-то данные — какой именно блок открыт. И в зависимости от этого отрисовывать интерфейс.

    Ответ написан
    2 комментария
  • Как добавить слушатель на каждую кнопку в каждом блоке отдельно?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    const blocks = document.querySelectorAll('.div');
    
    blocks.forEach(blk => {
      const inputIcon = blk.querySelector('.input-icon');
      const inputPass = blk.querySelector('.pass');
    
      inputIcon.addEventListener('click', () => {
        if (inputPass.getAttribute('type') == 'password') {
            inputIcon.classList.add('view');
            inputPass.setAttribute('type', 'text');
        } else {
            inputIcon.classList.remove('view');
            inputPass.setAttribute('type', 'password');
        }
      })
    })
    Ответ написан
    1 комментарий
  • Как я могу исправить баг анимации?

    hahenty
    @hahenty
    ('•')
    лень объяснять
    card.forEach( (itemCard, index) => {
      itemCard.addEventListener('click', (item) => {
        cardPopup.classList.remove('active');
        setTimeout(() => {
          cardPopup.classList.add('active')
          cardPopup.innerHTML = `
            <div class="card__popup-close" onclick="cardPopupCloseFun()"></div>
            <div class="card__popup-image">
              <img src="${arrayOfCards[index].image}" alt="">
            </div>
            <div class="card__popup-info">
              <h2 class="card__popup-name">${arrayOfCards[index].name}</h2>
              <p class="card__popup-title">${arrayOfCards[index].title}</p>
            </div>
          `;         
        }, 300)
    
      })
    })
    Ответ написан
    Комментировать
  • Как сделать, что после обновления страницы число лайков осталась?

    @ya_ne_znau
    Сохраняй информацию там, где она не будет удалена после перезагрузки страницы, например local storage:
    localStorage.setItem("likes", counter.toString());
    и вытаскивать:
    counter = parseInt(localStorage.getItem("likes") || "0");

    Ищи "local Storage js", а вообще надо уметь составлять вопросы на английском: "JavaScript save data after reload" (или как-то так).
    Ответ написан
    Комментировать
  • Проблема при установке ubuntu linux на виртуальной машине. Unabled to boot?

    @rPman
    архитектура должна совпадать
    ты установил x86-64 а в настройках виртуальной машины выбрал 32-битную i686
    иди в настройки 'общие' -> 'версия' и меняй

    если хост система у тебя сама 32-битная, и очень очень надо, то остается только софтварная виртуализация qemu, будет медленней раз в 10 (операционка вообще может минут 15 запускаться)
    Ответ написан
    1 комментарий