• Обязательно ли использование бутстрапа?

    Madeas
    @Madeas
    UI / UX Designer, Frontend Developer
    вы сами ответили на свой вопрос:
    Нужен ли бутстрап в нынешнем году?

    половина заказов на бустстрапе
    Ответ написан
    Комментировать
  • Зачем methods, если есть computed?

    zorar4ik
    @zorar4ik
    Full stack overflow
    Передай в computed аргумент, например
    Ответ написан
    2 комментария
  • Не проверяются пароли, в чем проблема?

    SagePtr
    @SagePtr
    Еда - это святое
    $password = crypt($_POST['password'], $salt);
    Не изобретайте велосипед и откройте для себя эти функции: password_hash, password_verify
    И как уже подсказали выше, нужно проверять длину не хеша пароля, а исходного пароля (у хэша длина в любом случае будет больше 6 символов и проверку он автоматом пройдёт, даже при пустом пароле)
    Ответ написан
    Комментировать
  • Что будет с строкой, если ей присвоить ключ как объекту?

    Lynn
    @Lynn
    nginx, js, css
    https://learn.javascript.ru/native-prototypes

    По стандарту, если обратиться к свойству числа, строки или логического значения, то будет создан объект соответствующего типа, например new String для строки, new Number для чисел, new Boolean – для логических выражений.
    Ответ написан
    Комментировать
  • Как связать свойства объекта в v-for с input?

    MalkovVladimir73
    @MalkovVladimir73
    Fullstack (node + vue.js)
    А чему равен key? Дело, случаем, не в том, что вы используете v-for ... of, вместо v-for ... in?
    Ответ написан
    Комментировать
  • Взаимодействие компонентов во Vue.js?

    @kirill-93
    Никакой задержки в передачи данными между компонентами быть не может. Это у вас в режиме разработчика они компоненты, а в итоге все это собирается в единый файл.
    Вы когда кликаете, наверняка аякс запрос идет на Яндекс. Вот его вы и ждете.
    Откройте консоль разработчика и посмотрите.
    Ответ написан
    3 комментария
  • Дилемма повышать в должности или нет?

    Moskus
    @Moskus
    Весьма вероятно, что у вас есть один вменяемый программист и пять особ, которые ещё не выросли из школьного образа мышления, а также ещё, как минимум, один такой, в руководстве, кто это придумал.
    Экзамены - это синтетический тест, который означает, что компания не может оценить их квалификацию по их работе, потому заменяет это на ритуал, который к реальности, скорее всего, отношения не имеет.
    Если человек отказывается играть в эту игру, это не говорит ничего о том, что он умеет, также как ничего не говорит об этом и желание других играть.
    Ответ написан
    8 комментариев
  • Дилемма повышать в должности или нет?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Убрать глупые и ненужные экзамены. Тогда всё встанет на свои места.
    Ответ написан
    5 комментариев
  • Почему изменяется начальное содержимое объекта?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    Когда вы нажимаете в консоли на стрелочку раскрытия объекта/массива, консоль только в этот момент пытается получить это значение (вызвать геттер). Если хотите видеть содержимое в момент вывода в консоль, то сериализируйте например в JSON
    console.warn(JSON.stringify(store.all()))
    Так вы сразу получите раскрытую строку.
    Ответ написан
    Комментировать
  • Нормально ли так проверять авторизацию?

    SerafimArts
    @SerafimArts
    Senior Notepad Reader
    Всё печально. Давай по-порядку:

    Одной из ключевых задач ООП является абстракция, что требует декомпозиции кода. Следовательно, первым шагом для причёсывания кода будет:
    class Worker extends User // <- Не стоит забывать о PSR
    {
        public function __construct(array $data)
        {
            if (empty($data)) {
                header(....);
                exit;
            }
    
            // В конструкторе нет ретурна, так что это ошибка
        }
    }


    Шаг 1 Результат: Мы отвязались от кукисов и можем эту же логику переиспользовать вообще с чем угодно.

    Теперь мы больше не связаны с окружением (ещё header надо убрать) и имеем код, позволяющий переиспользовать себя в различных ситуациях:
    $worker = new Worker($_COOKIE);

    Ну и так далее.

    При этом есть фатальные косяки (отвечая на твой вопрос "Нормально ли так проверять авторизацию"): Что если я возьму, открою консоль в браузере и заменю кукис id=1 на id=42?

    Решаем эту проблему:
    $worker = new Worker($_SESSION);

    Вот и пригодились все "улучшения", которые мы произвели ранее. Для решения проблемы нам понадобилось лишь заменить источник данных (т.е. массив) из кукисов на сессии. Этот процесс передачи данных извне называется "делегированием".

    Помимо этого - сам процесс входа в систему называется "аутентификацией", а не "авторизацией". Авторизация - это процесс проверки прав доступа к какому-то функционалу.

    Результат не идеален и содержит ещё кучку проблем, но с фатальными мы вроде разобрались.

    Твоя задача далее, разу уж ты поставил тег "ООП" - смотреть на код, который ты написал и попробовать его перенести в другие условия. Если он там уже работать не будет без изменений его внутренностей - значит в коде есть набор косяков. Пример:
    1) Можно ли использовать твой код, получая данные не из БД, а из файлов?
    2) Можно ли создать нового "рабочего" не передавая туда ID, чтобы он сгенерировался сам на основе, например, auto increment поля в БД?
    3) Можно ли добавить условия в запрос к БД (например, что "рабочий" не забанен)?
    4) и т.д.
    Ответ написан
    7 комментариев
  • Почему двоичный поиск работает только "вверх"?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Косяков и странностей тут навалом.

    Значение max вы перед началом поиска устанавливаете равным максимальному индексу - отлично. А как же min - почему не устанавливаете его равным 0? Забыли? Или думаете что 0 там сам собой появится? Не появится.

    Кстати, а зачем min и max класть в data? - вне binarySearchInit они не используются. Пусть будут локальными переменными этого метода.

    Значения в массиве являются строками, так что у вас 11 будет меньше, чем 2 (или для вас не существует ничего больше девятки?). Надо сделать числами, замените .push(item) на .push(+item) (или .push(Number(item)), или .push(parseInt(item))). Соответственно, надо сделать числом и search - для этого достаточно добавить соответствующий модификатор v-model.

    Сортировка введённых данных - по умолчанию элементы массива сортируются как строки. Заменить .sort() на .sort((a, b) => a - b).

    Зачем такие сложности с отдельной кнопкой для получения данных? Сделайте array вычисляемым свойством:

    computed: {
      array() {
        return this.info
          .split(';')
          .map(n => parseInt(n))
          .filter(n => !Number.isNaN(n))
          .sort((a, b) => a - b);
      },
    },

    Да и сам результат поиска тоже может быть вычисляемым свойством.
    Ответ написан
    4 комментария
  • Как сбрасывать модули в дефолтное состояние?

    kulakoff
    @kulakoff Куратор тега Vue.js
    Vue.js developing
    Просто объявите функцию, которая будет возвращать дефолтный стейт для модуля. И сделайте мутацию, в которой стейту будет устанавливаться дефолтное состояние через вызов этой функции. А вот когда вызывать эту мутацию: в хуках компонента или в хуках роутера или когда-то еще будет уже зависеть от ваших потребностей и логики приложения.
    Ответ написан
    2 комментария
  • Каков путь JS разработчика?

    Deissh
    @Deissh
    I like Python, Node.JS, Go, pain, bugs and my cat.
    Достаточно много людей орентируются по этой RoadMap.
    Long Image
    68747470733a2f2f692e696d6775722e636f6d2ffrontend.png
    Ответ написан
    1 комментарий
  • Тестовое задание (Junior Frontend), приемлемое ли?

    @kirill-93
    Вертел я такие задания при устройстве на работу.
    Однажды тоже устраиваясь в "крутую" контору прислали большое задание. Все выходные убил на него. Потом еще две недели мурыжили собеседованиями и в итоге не взяли.
    Я с тех пор никогда не соглашаюсь на тестовые задания, которые займут больше получаса моего времени.
    Объемные задания должны оплачиваться. Если они очень требовательно отбирают сотрудников, то сначала надо дать простое задание/прособеседовать и уже если человек их устраивает, давать объемное задание и платить.

    UPD
    Не слушайте, пожалуйста, бред об опыте и пользе для вас. Из таких "будущих хороших специалистов" потом веревки вьют, типа "поработай по вечерам, это ж опыт для тебя!" или "давай ты теперь и по субботам выходить будешь, а мы тебя за это серьёром называть будем!". Очень работает с наивными молодыми людьми.
    Вы поймите, что все эти разговоры про опыт и пользу для вас - это уловки с целью сэкономить и вас обмануть. Всем плевать на ваш опыт, им нужно денег меньше вам заплатить и все.
    Огромное тестовое задание - это неуважение к кандидаду.
    Давай представим обратную ситуацию: я прихожу к потенциальному работодателю и говорю: "Давайте я у вас тут недельку посижу без каких-либо обязательств, а вы мне зарплату платите. А потом посмотрим, может быть останусь, а может уйду". Нормально? Ситуация выглядит именно так, потому что работодатель не делает одолжения принимая на работу, он "покупает" ваше время и ваш опыт и все.
    Ответ написан
    13 комментариев
  • Как создавать такую анимацию?

    Vlad_IT
    @Vlad_IT Куратор тега Вёрстка
    Front-end разработчик
    В данном случае, вот так anpzenit.ru/wp-content/themes/lawbusiness/images/i... :D
    А по хорошему, вот так https://css-tricks.com/svg-line-animation-works/
    Ответ написан
    Комментировать
  • Как передать в дочерний компонет значения из стейта?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Пытался разными способами <...> что то явно не так

    А как мне понять, что у вас не так, если вы не показали, как пытались?

    v-model="$store.state.registrations.user_email"

    Изменять состояние вне мутаций не следует, сделайте computed свойство, геттер которого будет забирать данные из хранилища, а сеттер вызывать мутацию:

    user_email: {
      get() {
        return this.$store.state.registrations.user_email;
      },
      set(val) {
        this.$store.commit('update_user_email', val);
      },
    },

    v-model всегда будет разный

    Имя редактируемого свойства можно оформить в виде параметра компонента, и передавать его в мутацию вместе с новым значением (или передавать объект вида { имя_свойства: значение } и с помощью Object.assign закидывать его в объект в стейте - так за один вызов мутации можно будет обновлять несколько свойств).
    Ответ написан
    3 комментария
  • Почему не получается обратиться к getters?

    0xD34F
    @0xD34F Куратор тега Vue.js
    не получается обратиться к геттеру <...> показывает null, хотя если вызвать store.getters, то данные есть

    "Показывает null" - значит не успели ещё данные загрузиться к тому моменту, когда вы дёргаете геттер, только и всего. Нечего тут сказки рассказывать про "не получается". Всё окей.

    "Хотя" - не более чем особенность отображения объектов в консоли. Когда разворачиваете объект в первый раз, подтягивается его актуальное содержимое. Т.е., в консоль вы store.getters кидаете до получения данных, а смотрите что там есть уже после.

    Не хотите в компоненте видеть этот null - не надо рендерить экземпляр компонента, пока данные не будут получены:

    <компонент v-if="$store.getters.profile" />

    Правда, прямо сейчас вы так сделать не сможете, есть косяк, вот здесь:

    //Подключаю хранилище
    import store from './store';
    
    store.dispatch('getUser');
    new Vue({
        el: '#app',
        router: router,
        components:{
            'head-app':headImplant,
            'footer-app':footer,
            'sidebar-app': sidebar
        }
    });

    Где подключение-то? Просто импортировать в main.js экземпляр хранилища недостаточно, вы должны передать его в конструктор Vue, как свойство store объекта с настройками:

    new Vue({
      store,
      ...
    Ответ написан
    Комментировать
  • Как окрасить шахматную доску с помощью if?

    profesor08
    @profesor08 Куратор тега JavaScript
    Как вариант можешь стилями их раскрасить, без необходимости в js.

    tr:nth-child(odd) td:nth-child(odd) {
      background: white;
    }
    
    tr:nth-child(odd) td:nth-child(even) {
      background: black;
    }
    
    tr:nth-child(even) td:nth-child(even) {
      background: white;
    }
    
    tr:nth-child(even) td:nth-child(odd) {
      background: black;
    }
    Ответ написан
    Комментировать
  • Как сделать такие контуры у блоков?

    Vlad_IT
    @Vlad_IT Куратор тега CSS
    Front-end разработчик
    Я хотел сначала дать решение, но после последнего абзаца
    Помогите пожалуйста специалисту, который только возобновил работу после 3 лет декретного отпуска:)

    подумал, что вам будет очень полезно самой почитать и разобраться https://css-tricks.com/building-progress-ring-quickly/
    Эта штука называется по разному - radial progress, ring, progress, cyrcle progress, просто гуглите это название с добавкой "css", найдете много материала.
    Ответ написан
    5 комментариев