Все сервисы Хабра

Сообщество IT-специалистов

Ответы на любые вопросы об IT

Профессиональное развитие в IT

Удаленная работа для IT-специалистов

Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

Хабр Q&A — вопросы и ответы для IT-специалистов

Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.

Узнать больше
другие проекты хабра
  • Хабр
  • Карьера
  • Фриланс
Задать вопрос
meowto16

Maxim Kirshin

Делаю штуки
  • 69
    вклад
  • 0
    вопросов
  • 93
    ответа
  • 46%
    решений
Ответы
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • Достижения
  • Стоит ли изучать сразу много разного или лучше сперва углубиться во что-то одно?

    meowto16
    Maxim Kirshin @meowto16
    Делаю штуки
    Если программирование только хобби - можно учить что угодно и как угодно
    Но на работе от вас не потребуют веб-разработку и C#, Unity одновременно)
    Ответ написан 03 авг.
    Комментировать
    Комментировать
  • Как добавить событие если добавляется класс?

    meowto16
    Maxim Kirshin @meowto16
    Делаю штуки
    У Bootstrap есть эвенты, на которые можно подисаться и выполнить нужную логику.

    https://getbootstrap.com/docs/4.0/components/modal...
    Ответ написан 07 апр.
    3 комментария
    3 комментария
  • Как тестировать NestJS?

    meowto16
    Maxim Kirshin @meowto16
    Делаю штуки
    Если говорить о юнит тестах:

    Контроллеры - тестим, что отдаются верные статус-коды и дергаются нужные сервисы. Можно проверять ответ, можно проверять валидацию параметров

    Сервисы - удобнее тестить когда используется паттерн с репозиторием, а в сервисе зашивается лишь бизнес-логика без обращения к БД.
    Просто тестируем бизнес-логику зашитую в сервисе, имплементация репозитория/ORM мокается.

    Если говорить о e2e тестах:

    Можно использовать supertest. Как и в остальных языках/фреймворках - создается тестовая база, забивается различными необходимыми для теста данными (с помощью фабрик, фикстур). В тестах идет прямое обращение к эндпоинтам и сравнивается результат, будто бы мы тестили это вручную в swagger'е
    Ответ написан 16 янв.
    Комментировать
    Комментировать
  • Как найти и вернуть записи в Mongodb?

    meowto16
    Maxim Kirshin @meowto16
    Делаю штуки
    https://docs.mongodb.com/manual/reference/method/d...
    Ответ написан 16 янв.
    Комментировать
    Комментировать
  • Как разместить картинку через background, при этом она должна быть по центру и вверху текста?

    meowto16
    Maxim Kirshin @meowto16
    Делаю штуки
    через псевдоэлемент ::before, либо просто тег в разметку добавить и его стилизовать
    Ответ написан более года назад
    Комментировать
    Комментировать
  • Объясните как работает данный код в React?

    meowto16
    Maxim Kirshin @meowto16
    Делаю штуки
    Это обычный нативный метод для массивов. К React'у он прямого отношения не имеет.

    Смотри по строкам:
    const [todo, setTodo] = useState([]) // todo: массив todo'шек. setTodo - сеттер, для изменения переменной todo
    
    const deleteItem = (id) => { // Объявляем функцию deleteItem, которая принимает внутрь id интересующей todo
      setTodo( // Устанавливаем новый state для переменной todo, которую объявили выше
        todo.filter(item => { // Берем текущее состояние переменной todo. 
           // filter как forEach проходится по каждому элементу массива. 
          // Принимает в себя callback вида (item, i, array), где item - текущий элемент (соответствует array[i]), текущий индекс, текущий массив (который обходим)
         // В функции callback'е ты должен вернуть булевое значение (true/false). Если true - элемент остается в массиве, если нет - убирается
          return item.id !== id // Если id элемента не равен id, который хотим удалить - оставляем элемент в массиве, иначе убираем
        })
      );


    Чтобы было более ясно вот более простой пример, без state в React:

    const products = [
      { id: 1, price: 25 },
      { id: 2, price: 50 },
      { id: 3, price: 75 },
      { id: 4, price: 100 },
      { id: 5, price: 125 },
    ]
    
    // Оставим продукты, которые только с ценой выше или равной 100
    const filteredProducts = products.filter(product => product.price >= 100) // [{ id: 4, price: 100 }, { id: 5, price: 125 }]

    }
    Ответ написан более года назад
    Комментировать
    Комментировать
  • Последовательное выполнение действий в массиве?

    meowto16
    Maxim Kirshin @meowto16
    Делаю штуки
    Что-то типа этого?

    function someFn(args) {
      const [cb1, cb2, num] = args
      return [cb1, cb2].reduce((acc, callback) => callback(acc), num)
    }
    
    someFn([(num) => num + 100, (num) => num * 2, 5]) // 210
    someFn([(num) => num + 50, (num) => num * 6, 5]) // 330
    Ответ написан более года назад
    2 комментария
    2 комментария
  • Как получить данные файла JSON в JS?

    meowto16
    Maxim Kirshin @meowto16
    Делаю штуки
    JavaScript не имеет доступа к файлам клиента.
    Если же данный файл лежит на сервере, то необходимо сначала сделать к нему запрос и затем распарсить json
    fetch('https://mysite.com/something.json')
      .then(r => r.json())
      .then(json => console.log(json))
    Ответ написан более года назад
    Комментировать
    Комментировать
  • Как правильно оформить CI для тестов?

    meowto16
    Maxim Kirshin @meowto16
    Делаю штуки
    В твой yaml файл особо не вникал. По теме вопроса - можешь использовать husky, pre-push настройка в конфиге у него. Будет выглядеть типа этого в package.json

    {
    // ...package.json
      "husky": {
        "hooks": {
          "pre-push": "jest --coverage"
        }
      },
    }
    Ответ написан более года назад
    2 комментария
    2 комментария
  • Зачем используется колбек при вызове функции изменения состояния из useState?

    meowto16
    Maxim Kirshin @meowto16
    Делаю штуки
    В твоем примере от него нет смысла.
    А так он обычно используется, чтобы задать стейт на основании предыдущего значения стейта
    function handler(newValue) {
      setValue((prevState) => prevState + 1) // Установит стейт на основании предыдущего значения + 1
    }
    Ответ написан более года назад
    1 комментарий
    1 комментарий
  • Где находится ошибка в коде?

    meowto16
    Maxim Kirshin @meowto16
    Делаю штуки
    1 строка, не может найти элемент spiderChart по id
    Ответ написан более года назад
    2 комментария
    2 комментария
  • Как сделать всплывающую подсказку к слову?

    meowto16
    Maxim Kirshin @meowto16
    Делаю штуки
    https://codepen.io/manabox/pen/ogQBwJ
    Ответ написан более года назад
    1 комментарий
    1 комментарий
  • Как запретить копировать текст кроме телефона и email?

    meowto16
    Maxim Kirshin @meowto16
    Делаю штуки
    // PREVENT CLIPBOARD COPYING
    document.querySelector('body').addEventListener("copy", function(evt){
        if(evt.target.nodeName === "A" && (evt.target.href.indexOf("mailto:") === 0 || evt.target.href.indexOf("tel:") === 0)) return;
    
        // Change the copied text if you want
        evt.clipboardData.setData("text/plain", "Copying is not allowed on this webpage");
    
        // Prevent the default copy action
        evt.preventDefault();
    }, false);
    Ответ написан более года назад
    Комментировать
    Комментировать
  • Как вставить символы перед предпоследним слешем?

    meowto16
    Maxim Kirshin @meowto16
    Делаю штуки
    $str = '/catalog/tv/audio/black/';
    $output = preg_replace("/\/audio\//", "/audio_m/", $str);
    echo $output;
    Ответ написан более года назад
    5 комментариев
    5 комментариев
  • Как сделать проверку на наличие @ в почте?

    meowto16
    Maxim Kirshin @meowto16
    Делаю штуки
    const email = "somemail@mail.ru";
    email.includes("@"); // true
    Ответ написан более года назад
    Комментировать
    Комментировать
  • Оцените верстку сайта?

    meowto16
    Maxim Kirshin @meowto16
    Делаю штуки
    В общем и целом, тем более если учитывать, что только 10 дней учился - это очень и очень хорошо.
    Косяки ты и сам можешь видеть где верстка уезжает и прочее, про горизонтальный скролл и семантику тебе уже сказали, бэм тоже.

    От себя могу добавить, что на карточках с прайсом, где сделано градиентом - режутся края.

    Формы дивами конечно тоже не стоит добавлять, ты же их отправлять собираешься потом))

    Также пути к статике (картинки, css и пр.) указывать лучше абсолютные, а не относительные (ну если ты создашь вторую внутреннюю страницу, ты сам это поймешь)
    <img class="member_photo" src="src/img/members/member_two.png" alt="member_two">


    Также например вместо этого можно было добавить общий стиль, либо модификатор может какой
    .facebook_btn:hover .facebook,
    .twitter_btn:hover .facebook,
    .chat_btn:hover .facebook,
    .global_btn:hover .facebook,
    .facebook_btn:hover .twitter,
    .twitter_btn:hover .twitter,
    .chat_btn:hover .twitter,
    .global_btn:hover .twitter,
    .facebook_btn:hover .global,
    .twitter_btn:hover .global,
    .chat_btn:hover .global,
    .global_btn:hover .global,
    .facebook_btn:hover .chat,
    .twitter_btn:hover .chat,
    .chat_btn:hover .chat,
    .global_btn:hover .chat {
        -webkit-filter: invert(1);
        filter: invert(1)
    }


    такую ширину нельзя указывать, как ты на мобильных будешь смотреть? делай резиной в будущем
    .img_blog {
        width: 540px;
        height: 400px
    }
    
    .img_blog2 {
        width: 540px;
        height: 400px
    }


    каждому элементу не обязательно font-family указывать
    .contact_us {
        text-align: center;
        font-family: "Open Sans";
        font-weight: bold;
        color: #fff;
        font-size: 19pt;
        margin-top: 100px
    }
    
    .contact_us_down {
        text-align: center;
        font-family: "Open Sans";
        font-weight: normal;
        color: #fff;
        padding-bottom: 75px
    }
    
    .contact_info {
        padding-top: 25px;
        padding-bottom: 40px;
        font-family: "Open Sans";
        font-weight: 600;
        color: #fff;
        font-size: 14pt;
        text-align: center
    }


    pt уже по-моему никто не использует. используй px, rem, иногда em
    .header_text {
            font-size: 30pt
        }
    
        .header_descr {
            font-size: 13pt
        }


    Успехов!
    Ответ написан более года назад
    3 комментария
    3 комментария
  • Как получить переменную из get/post?

    meowto16
    Maxim Kirshin @meowto16
    Делаю штуки
    <!-- page1.html -->
    <form action="/page2.html">
      <input type="number" name="myNumber" placeholder="Введите число" required>
      <input type="submit" value="Отправить">
    </form>


    <!-- page2.html -->
    <script>
      const params = new URLSearchParams(document.location.search)
      alert(params.get('myNumber'))
    </script>
    Ответ написан более года назад
    Комментировать
    Комментировать
  • Как сделать адаптив этому шаблону?

    meowto16
    Maxim Kirshin @meowto16
    Делаю штуки
    @media (max-width: 767px) {
      main {
        flex-flow: column nowrap;
        height: auto;
      }
      .left, .center, .right {
        width: 100%;
      }
    }
    Ответ написан более года назад
    1 комментарий
    1 комментарий
  • Как правильно расположить блоки с помощью flex?

    meowto16
    Maxim Kirshin @meowto16
    Делаю штуки
    Ответ написан более года назад
    Комментировать
    Комментировать
  • Поиск мата в тексте?

    meowto16
    Maxim Kirshin @meowto16
    Делаю штуки
    первая же ссылка в гугле https://github.com/rin-nas/php-censure
    Ответ написан более двух лет назад
    1 комментарий
    1 комментарий
Оценили как «Нравится»
  • 1
  • 2
  • 3
  • 4
  • 5
  • Следующие →
Самые активные сегодня
  • dimonchik2013
    Dimonchik
    • 13 ответов
    • 0 вопросов
  • sergey-gornostaev
    Сергей Горностаев
    • 9 ответов
    • 0 вопросов
  • drygdryg
    Виктор Голованенко
    • 7 ответов
    • 0 вопросов
  • mayton2019
    • 6 ответов
    • 0 вопросов
  • vabka
    Василий Банников
    • 6 ответов
    • 0 вопросов
  • PavelMos
    • 5 ответов
    • 0 вопросов
  • © Habr
  • О сервисе
  • Обратная связь
  • Блог

Войдите на сайт

Чтобы задать вопрос и получить на него квалифицированный ответ.
Войти через центр авторизации