Задать вопрос
  • Как делать мультикурсор в новом PHPStorm?

    @Flying
    Вот здесь можно почитать обсуждение с разработчиками по данному вопросу. Если вкратце - это настраивается в
    Settings -> Keymap -> Editor Actions -> Rectangular Selection
    Ответ написан
    Комментировать
  • Как исправить ошибку при сборке проекта "Error: Lock is already released"?

    Martovitskiy
    @Martovitskiy
    Вот решение
    Используйте флаг --no-lock. Ошибка будет удалена в v2.5.2
    Ответ написан
    Комментировать
  • Как вы обновляете vue проекты на проде?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    CI/CD (Continuous Integration/Continuous Delivery) сервер ответ на ваши проблемы. Например, bitbucket pipelines, circle ci, gitlab pipelines, jenkins и т.д. Работает так:
    • сервер отслеживает пуши в определенные ветки, например, в master.
    • если в master пришли коммиты, то запускается определенный скрипт, который вызывает сборку (обычно еще перед этим запускаются тесты, если есть).
    • если сборка прошла успешно, то результат этой сборки кладется в отдельную папку -- это называется build artifact
    • этот build artifact тем или иным образом загружается на хостинг -- у всяких там AWS/Azure и т.п. облак обычно есть API для этого, можно передавать файлы через scp или sftp.

    Если вся инфраструктура локальная, то и CI/CD сервер обычно ставят локально, например, Jenkins или TeamCity. Но без выделенного админа/девопса проще в облаках настроить, наверное.

    P.S. это, конечно, годится не только для проектов на vue, а вообще для любого веба, включая бэкенд.
    Ответ написан
    Комментировать
  • Зачем использовать NULL в базах данных?

    php666
    @php666
    PHP-макака
    Простой пример: таблица пользователей и форма для их редактирования. Если мы не заполняем поле и отправляем форму, то на сервер приходит пустая строка, которая и сохраняется в БД.
    это у вас она сохраняется. Что мешает этого не делать? Достаточно после валидации бизнес-логики пройтись по массиву данных, перед вставкой в базу, и обNULLить все переменные с пустыми строками. Пустые строки в базе не нужны, никогда. Нет ни одной причины их там хранить.

    пустая строка - это тоже осмысленное значение
    теоретически - это "осмысленное значение", практически - это мусор, это результат развития языков высокого уровня, типа php, которые позволяют вам записывать в базу пустую строку (поощряют это делать в виду своих конструктивных особенностей).
    Ответ написан
    Комментировать
  • Что умеет выдающийся Frontend разработчик?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    > Я могу себе представить требования к backend, потому что backend сложнее.
    Нет

    > Там нужно учитывать количество пользователей, контролировать нагрузку, управлять памятью.
    Во фронте тоже нужно это учитывать

    > Там разного рода масштабирования, linux и sql.
    Во фронте много js, json, xml, CS, много зрелых технологий на изучение которых требуется много времении сил, много новых технологий.

    > А вот требования к frontend разработчику высокого уровня мне представить сложно. Тут один достаточно простой (по сравнению) ЯП, приходящие модные технологии вроде babel, webpack и TypeScript, которые еще сильнее упрощают работу и какой-нибудь фреймворк.
    А как же webassembly, html5, RMTP, и другое медиа? Флэш сейчас уступил место JS и HTML5, но это только расширяет возможности использования.

    > Есть особенности работы браузеров, но их не так много и они по большей части решаются тем же babel.
    По большей, но мы же говорим про выдающегося, который может например написать сам babel?

    > Фронтенд не масштабируется, не реплицируется.
    Так можно говорить, если переложить всю работу на бэкенд. А правильно - грамотно распределять что делает фронтенд, что делает бэкенд и оптимизировать передачу данных. Это оба специалиста должны сотрудничать.

    > В целом, если его очень хорошо протестировать, то разработчик уверен на 99.9%, что все работает на всех браузерах и на всех утройствах. Здесь не может быть ситуации, когда пришло слишком много пользователей или память на сервере закончилась.
    Ну как это не может? Вы знаете все устройства, где запустится ваше вебприложение? А если на смарттв? А если на нонейм планшете? А если это голосовой чат в веб-приложении на 50 человек?

    > Тут нет мониторинг систем.
    Зато есть понимание метрик, их сбора, и отправки на бэкенд или куда-то еще?

    Вдобавок фронтенд, в отличие от бэкенда, ОЧЕНЬ быстро прогрессировал за последние несколько лет. Настолько быстро, что хороших специалистов крайне сложно найти - они просто не успевают изучить все, что на них падает. Бэкенд постабильнее, там печатные книги успевают выйти в 10-м издании.
    Ответ написан
    Комментировать
  • Cookie или localStorage?

    @artinnok
    бекенд-программист
    Тут нет оптимального варианта - надо смотреть на бэкэнд и фронтенд совокупно.
    Далее, считаем что фронтенд SPA, бэкэнд чистое API.

    Если выбор за Cookies:
    1. На сервере необходимо реализовать защиту от CSRF
    2. На фронте также надо будет реализовать обвязку под передачу CSRF-токена
    3. Вся авторизация будет обрабатываться бэкэндом - т.е. он ставит куку через Set-Cookie с httpOnly и secure и сам же читает из куки для аутентификации / авторизации
    4. Фронтенд не имеет доступа к кукам - не думает об авторизации и об XSS
    5. Обычно, XSS используют чтобы украсть авторизационный токен через JS - если авторизационная кука httpOnly - нет доступа к кукам через JS, нет проблем

    Если выбор за localStorage:
    1. Не надо делать CSRF защиту на сервере - нет кук, нет проблем
    2. Экранировать потенциально опасные данные бэкэндом на входе - обеспечит дополнительную защиту от XSS при рендере данных
    3. Надо делать защиту от XSS на фронте, т.е. экранирование данных при рендере - чтобы потенциально вредоносный JS код превращался в строку, а не вставлялся в DOM
    4. На фронте надо сделать обвязку под сохранение / передачу / валидацию токена
    5. Всегда остается человеческий фактор - забыли сделать экранирование при рендере на фронте, JS код имеет доступ к токену и он утек


    Могу посоветовать использовать фреймворки, как на бэкэ, так и на фронте - они обычно имеют уже реализованную защиту от основных типов атак. Мы на проекте юзаем localStorage и React, ну и верим в лучшее :)
    Ответ написан
  • Как правильно присваивать значение свойству во vue?

    delphinpro
    @delphinpro
    frontend developer
    При создании экземпляра Vue пробегается по всем имеющимся свойствам на всю глубину и присобачивает к ним геттеры и сеттеры, которые запускают внутренние механизмы реакции на изменение свойтсв, делая их реактивными.
    Когда вы просто добавляете новое свойство, никаких геттеров/сеттеров к нему автоматически не навешивается, и Vue не может отслеживать изменения.
    Именно поэтому для добавления новых свойств необходимо использовать метод Vue.set(), который при создании через defineProperty проинициализирует все внутренние механизмы реактивности.
    Ответ написан
    Комментировать
  • Как правильно работать с датой?

    john36allTa
    @john36allTa
    alien glow of a dirty mind
    Если это MySQL база, то лучше сохранять время относительно временной зоны сервера, для этого не нужно со фронта передавать дату, использовать в дате тип TIMESTAMP (по умолчанию работает функция SQL NOW() ). У клиента такая дата будет парситься ( new Date(serverTimestamp * 1000) ) относительно его часового пояса.
    Если всё же нужно передавать на сервер дату, то отправлять date.toUTCString() по Гринвичу или, как сказал Emil Revencu, брать new Date().getTime() / 1000 ( new Date().getTime() это в миллисекундах )
    Ответ написан
    Комментировать
  • Как подставлять данные из аякс во Vue?

    0xD34F
    @0xD34F Куратор тега Vue.js
    пробовал использовать computed <...> если пользователь руками поменяет этот адрес, он все равно останется прежним

    Добавьте сеттер:

    email() {
      get() {
        return this.$store.state.user.email;
      },
      set(val) {
        // тут вызов мутации, которая поменяет значение в хранилище
      },
    },
    Ответ написан
    2 комментария
  • Как развернуть сокращенную ссылку ВК?

    SerJook
    @SerJook
    кодер
    Первую ссылку можно расшифровать без перехода по ней.
    Потом выполнять запросы с выключенным CURLOPT_FOLLOWLOCATION.
    Естественно надо проверять на ошибки и возможно зациклить.
    <?php
    function get_location($ch, $output){
        $curl_info = curl_getinfo($ch);
        $headers = substr($output, 0, $curl_info["header_size"]); //split out header
        preg_match("!\r\n(?:Location|URI): *(.*?) *\r\n!", $headers, $matches);
        return $matches[1];
    }
    $link = "https://vk.com/away.php?to=https%3A%2F%2Fvk.cc%2F8L3cD8&post=-75604109_25935&cc_key=";
    $arr = parse_url($link);
    parse_str($arr['query'], $output);
    
    $vk_cc_link = $output['to'];
    
    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_URL, $vk_cc_link);
    // Я задал эти параметры, потому что у меня на локалхосте не настроен SSL
    //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
    //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
    curl_setopt($ch, CURLOPT_HEADER, true);
    
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    
    $output = curl_exec($ch);
    
    $link = get_location($ch, $output);
    
    $arr = parse_url($link);
    
    parse_str($arr['query'], $out);
    $new_link = $out['to'];
    curl_setopt($ch, CURLOPT_URL, $new_link);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
    $output = curl_exec($ch);
    $link = get_location($ch, $output);
    echo $link;
    ?>


    Должно вывести:
    https://boom.ru/redirect/album/6101146?web=1
    Ответ написан
    1 комментарий
  • Как правильно дождаться данных из стора в компоненте?

    @nvdfxx
    Senior Pomidor developer
    Просто в computed поместите все вызовы из стора, а не в mounted
    Ответ написан
    3 комментария
  • Нормально ли перезапускать nodejs сервер каждый раз?

    megafax
    @megafax
    web-программист
    По видимому Вы не понимаете как и что работает. Когда Вы разработываете на php, и внеся изменения в код - Вы же обновляете страницу, для которой этот код был написан? В отличие от PHP - nodejs исполняется сразу и загружается в память, так что можно вплоть до того, что после запуска - удалять файлы и софт будет работать. Так вот Вы изменили что то в коде и как по Вашему должен этот код (без внешнего вмешательства) узнать, что чтото там изменилось, если вы такую логику не прописали в самом коде?
    Так что не переживайте и учите nodejs дальше.
    Ответ написан
    Комментировать
  • Обработка для всех запросов в axios?

    dasha_programmist
    @dasha_programmist
    ex Software Engineer at Reddit TS/React/GraphQL/Go
    используй интерцепторы, в доке есть пример для response interceptor, там и обрабатывай ошибку
    axios.interceptors.response.use((response) => {
        return response;
    }, function (error) {
        // Do something with response error
        if (error.response.status === 401) {
            console.log('unauthorized, logging out ...');
            auth.logout();
            router.replace('/auth/login');
        }
        return Promise.reject(error.response);
    });
    Ответ написан
    1 комментарий
  • Как тут можно разместить зловредный скрипт?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    Зачем при наведении или клике, если есть событие onload например у картинки?

    Можно даже вместо картинки букву написать, тогда сработает onerror.
    Ответ написан
    Комментировать
  • Как тут можно разместить зловредный скрипт?

    webinar
    @webinar
    Учим yii: https://youtu.be/-WRMlGHLgRg
    HTML теги вставляются и работают исправно, а вот javascript код не работает. Я так понимаю это потому, что данные этого компонента выводятся не при загрузке страницы, а после.

    Ну так код может содержать логику запускаемую по наступлению события, например банальный click по body
    Ответ написан
    Комментировать
  • Как тут можно разместить зловредный скрипт?

    AngReload
    @AngReload
    Кратко о себе

    Скрипт срабатывает при наведении -
    <a onmouseover=alert(document.cookie)>click me!</a>
    Ответ написан
    Комментировать
  • Где правильно хранить данные в nuxt?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    На сторону браузера process.env попадает через вебпак, Александр Косицын в целом правильно описал. В nuxt этот плагин уже настроен.

    Из разметки нельзя потому что разметка выполняется в своем собственном контексте (например, console.log тоже нельзя вызвать). Решение в лоб — пробрасывать в разметку через data() {}. Более устойчивое решение — сделать nuxt-плагин, который будет вставлять эти данные в прототип vue. Например, так:
    // plugins/nuxt-env-plugin.js
    import Vue from 'vue';
    
    Vue.use({
        install(Vue) {
            Vue.prototype.$env = {IMG_URL: process.env.IMG_URL}; // Vue.prototype.$env = process.env не сработает
        },
    });
    // не забудьте подключить его в nuxt.config.js

    И тогда можно будет <img :src="$env.IMG_URL + '/user-pic.jpg'">. Только осторожно, не передавайте на клиент весь process.env, т.к. потенциальный злоумышленник может воспользоваться переменными окружения для организации атаки.
    Ответ написан
    Комментировать
  • Как перевести проект на nuxt?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    везде написано по кусочкам

    https://ssr.vuejs.org/

    Почему нет возможности просто добавить серверный рендеринг в мой уже существующий проект?

    Вообще на nuxt свет клином не сошелся, гугл по запросу vue cli ssr выдает несколько пакетов, в том числе довольно активных.

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

    Чтобы не переписывать весь роутинг на нюкстовский (а это действительно не очень весело), попробуйте router-module. src переименовываете в components, остальное остается как есть.

    вместо простой отдачи файло nginx'ом, предстоит настроить обработку запросов через node

    reverse-proxy к приложению на nodejs делается очень просто, да и мануалов полно:

    upstream myAppName {
        server 127.0.0.1:3003;
    }
    
    server {
        listen 80;
    
        location / {
            proxy_pass http://myAppName;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header User-Agent $http_user_agent;
            proxy_cache_bypass $http_upgrade;
        }
    }


    $.ajax()

    Если это jQuery, то придется заменить на axios. Кое-какие запросы придется перенести из mounted в asyncData.

    Сейчас на месте ее появления крутится красивый прелоадер, а как это будет после переноса на nuxt? Страница будет рендериться эти пару секунд?

    Делайте запрос к этой статистике только на клиентской стороне:
    mounted() {
        if (process.browser) {
            this.fetchStats();
        }
    }

    Вообще такие медленные вещи надо в любом случае кэшировать на бэкенде, например класть заранее посчитанную статистику в redis там или mongodb.
    Ответ написан
    Комментировать
  • Использование @ в путях vuejs?

    yarkov
    @yarkov Куратор тега Vue.js
    Помог ответ? Отметь решением.
    .element {
        background: url('~@/assets/images/logo.jpg');
    }
    Ответ написан
    2 комментария
  • Как добавить к ответу генерируемое поле связанной модели при выборке?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Laravel
    class Article 
    {
        protected $appends = ['commaTags'];
    }


    P.S.
    public function getCommaTagsAttribute()
    {
        $this->tags->implode('name', ', ');
    }
    Ответ написан
    2 комментария