• Выбор ОС для разработки под Docker: Windows или Linux?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Разработку ведут не столько в операционке, сколько в твоем любимом IDE/редакторе.
    А вот запускать сайт (бэкенд), в принципе лучше в таком же окружении, в каком он будет крутиться в продакшене.

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

    Люди, которые хаят виндовс - просто не умеют им пользоваться. Все основные популярные ОС не просто так популярные, и полны своих достоинств.
    Сколько я не общался с хейтерами - практически все аргументы больше касаются того, как люди привыкли работать с компьютером в определенной ОС, и то, что фичи в другой ОС работают иначе не только технически, но и идеологически, они не хотят принимать.
    Ответ написан
    1 комментарий
  • Стоит ли браться за изучение Vue.js с посредственными знаниями js?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Конечно! Будете говнокодером.
    Ответ написан
    Комментировать
  • Как семантически сверстать вот такой слайдер?

    @FabiBoom
    1) Имхо, вариант со списком не очень, так как это не группа однородных элементов, которые выполняют одну функцию. Вариант с параграфом отлично подходит, хотя и обычный div подойдет с правильным названием класса.
    2) Разумных способов много, можно накидать псевдоэлементов и их анимировать (самый популярный), можно обертки, можно фон и так далее. Вот, например, мой элементарный вариант с анимацией, хотя тут и есть простой JS, но его можно убрать и изменять CSS переменную вручную)).
    Ответ написан
    Комментировать
  • Для каких задач Node.js является более приоритетным выбором среди других платформ?

    RaShe
    @RaShe
    Вы развели холивар и люди писаются кипятком какой язык лучше. Но на самом деле (о боже он откроет тайну) все хороши. Начинать писать проект надо на том на чем лучше всего умеешь, а потом когда будут (если вообще будут) проблемы тогда их уже и решать. Когда будет проблема тогда вы увидите какой инструмент вам подойдет лучше всего.

    Нода отлично подходит для бэка и прекрасно уживается рядом с питоном и с# в микросервисах.
    Ответ написан
    1 комментарий
  • Как реализовать волнистую линию у блока?

    mipfikus
    @mipfikus
    Вообще я не знаю, но
    Ответ написан
    Комментировать
  • Как отображать первые 3 символа в строке, а остальные заменять?

    0xD34F
    @0xD34F Куратор тега JavaScript
    str.slice(0, 3) + '-'.repeat(Math.max(0, str.length - 3))
    
    // или
    
    str.replace(/(?<=.{3})./g, '-')
    
    // или
    
    Array.from(str, (n, i) => i < 3 ? n : '-').join('')
    
    // или
    
    str.replace(/./g, (m, i) => i < 3 ? m : '-')
    
    // или
    
    str.match(/.{0,3}/) + Array(Math.max(0, str.length - 2)).join('-')
    
    // или
    
    str.substring(0, 3).padEnd(str.length, '-')
    Ответ написан
    7 комментариев
  • Как найти и заменить значение вложенного объекта?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    function cloneWithReplace(
        // клонируемый объект
        obj,
        // объект с функциями вида value => newValue, в соответствующих ключах для замены
        // нужен не всегда, поэтому по умолчанию сделаем пустой объект
        replacers = {},
        // Map с значениями, которые уже склонировали, дабы не попасть в рекурсию
        // так как внешний код обычно его не будет передавать, зададим значение по умолчанию
        storeMap = new Map()
    ) {
        // для начала чекнем, что объект уже клонировали:
        if(storeMap.has(obj)) {
            return storeMap.get(obj);
        }
    
        // получим тип объекта, он нам пригодится пару раз, дабы отличать функции
        const type = typeof obj;
    
        // если obj примитив, то его можно просто вернуть
        if(obj === null || (type !== 'object' && type !== 'function')) {
            return obj;
        }
    
        // создадим переменную с результатом и инициируем ее в зависимости от типа оригинала
        let result;
        if(type === 'function') {
            // функцию можно "склонировать" лишь обернув
            result = function() {
                return obj.apply(this, arguments);
            };
            // неплохо бы, чтоб клон правильно сообщал имя функции и количество аргументов
            // но так как IE не ест такую магию, обернем в try-catch
            try {
                Object.defineProperties(result, {
                    name: Object.getOwnPropertyDescriptor(obj, 'name'),
                    length: Object.getOwnPropertyDescriptor(obj, 'length')
                });
            } catch {}
        } else if(Array.isArray(obj)) {
            // массивы клонируем рекурсивно, при помощи map
            result = obj.map(value => cloneWithReplace(value, replacers, storeMap));
            // так как нормальные массивы не содержат других полей, кроме числовых
            // можно сохранить клон в защиту от рекурсии и вернуть результат
            storeMap.set(obj, result);
            return result;
        } else {
            // для всех других объектов просто создадим новый объект и скопируем ему ссылку на прототип
            result = Object.setPrototypeOf({}, Object.getPrototypeOf(obj));
        }
    
        // сохраним клон в защиту от рекурсии
        storeMap.set(obj, result);
    
        // осталось склонировать поля с заменой тех случаев, где у нас есть replacer
        for(const key of Object.getOwnPropertyNames(obj).concat(Object.getOwnPropertySymbols(obj))) {
            if(typeof replacers[key] === 'function') {
                // если есть replacer используем его
                result[key] = replacers[key](obj[key]);
            } else {
                // иначе клонируем поле рекурсивно
                result[key] = cloneWithReplace(obj[key], replacers, storeMap);
            }
        }
    
        return result;
    }
    
    // используем так:
    const newData = cloneWithReplace(data, {
        value: () => 'new value'
    });
    Ответ написан
    1 комментарий
  • Как стать топовым WEB разработчиком?

    origami1024
    @origami1024
    went out for a night walk
    Знаю HTML, CSS, Bootstrap 3,4, верстал на них, сейчас освоил FlexBox, знаю как адаптивно верстать.
    Чуток знаю основы WEB дизайна, есть макеты на Behance

    Да ты и так уже топовый веб разработчик, можно закрывать вопрос
    Ответ написан
    1 комментарий
  • Как написать такой css-селектор?

    @secretsergey
    .block:not(.ignore) {
      color: red;
    }
    .block:not(.ignore) ~ .block{
      color: black;
    }
    Ответ написан
    1 комментарий
  • Как распарсить строку и подставить значения из объекта?

    0xD34F
    @0xD34F Куратор тега JavaScript
    template.replace(/\{(.+?)\}/g, (m, g1) => user[g1] ?? m)
    Ответ написан
    1 комментарий
  • Почему функция работает не так?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Потому что кое-кто не в курсе, что бывает, когда выполняется установка значения необъявленной переменной.

    Если переменной нет, она будет искаться во внешних областях видимости. И если ни в одной из внешних областей видимости переменной с таким именем нет, будет создана глобальная переменная. То есть, у вас при первом вызове popUp создаётся глобальная переменная elem_obj, а при последующих вызовах обновляется её значение.
    Ответ написан
    3 комментария
  • Как парсить нужный class?

    @loonny
    Этот код прямиком из 1999 года? Зачем вам < !-- //--> внутри <script></script> в 2020 году? xDDD
    Вы можете объяснить словами что вам необходимо? Я не нашел класса c3596661599 в предоставленном вами коде.
    Ответ написан
    5 комментариев
  • Слайдер такого вида jquery?

    @loonny
    Owl Carousel самый лучший на мой взгляд. Функции что вы описали там есть.
    Отличная оптимизация кода
    Хорошая поддержка браузеров (даже старых)
    И как вишенка на торте, он поддерживает Touch (нажми и тащи).
    Ответ написан
    Комментировать
  • Как в компонент React передавать только валидные пропсы?

    GreyCrew
    @GreyCrew
    Full-stack developer
    Для этого существует множество способов
    по простому, через спред оператор
    const { ...rest } = this.state
    <NewsComponent
      { ...rest }
    />


    Таким образом мы передадим все существующие параметры. Другое дело, что чаще всего во внутреннем компоненте, что то да может ссылаеться на несуществующий параметр. Тогда можно просто задать его по умолчанию.

    const { title, description = "" } = this.state
    <NewsComponent
      title,
      description
    />
    Ответ написан
    Комментировать
  • Какой вариант написания лучше?

    bootd
    @bootd
    Гугли и ты откроешь врата знаний!
    2й читается лучше на мой взгляд, а так разницы никакой.

    Разница лишь в возможностях обоих подходов.

    Во 2м можно написать некую свою логику до return и создать или заменить исходное значение свойства на новое.

    Как пример:
    const mapStateToProps = ({ user, data }) => {
      const myProp = localStorage.get('myProp');
    
      return {
        myProp,
        user,
        data
      }
    };


    Исходя из вашего 1го примера, его можно ещё короче записать.
    const mapStateToProps = props => props;

    Какой только смысл в этом!!! Так вообще не читается, что внутри props лежит, фиг его знает... Зато коротко и экономит несколько байт
    Ответ написан
    1 комментарий
  • Как решить такую задачу на логику?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Один поезд начинает движение влево, второй вправо, какой именно куда - неважно. Если не встретились, то через время t меняют направление движения. Потом через время 2t, 3t, 4t и т.д. Как вариант t, 2t, 4t, 8t.
    Ответ написан
    2 комментария
  • Как решить такую задачу на логику?

    sergiks
    @sergiks Куратор тега Алгоритмы
    ♬♬
    Один пускай стоит, а второй туда-сюда с возрастающей амплитудой

    spoiler
    Похожая задача на англ.: Two robot with parachute in a line
    Ответ написан
    Комментировать