Задать вопрос
  • Достаточно ли знать только Python?

    DevMan
    @DevMan
    достаточно.
    но ваша конкурентоспособность будет, хотя отличной от нуля, но очень низкой.

    не обязательно (хотя и желательно) знать другие языки, но нужно знать смежные области: например, базы данных, сети, системные апи. хотя бы выборочно и на базовом уровне.
    Ответ написан
    Комментировать
  • Как запустить Node / React проект на vps?

    VK_31
    @VK_31
    Постоянно учусь
    Для бека настраиваешь pm2 и nginx на редирект например http://домен/api -> localhost:3000
    Для фронта просто настраиваешь nginx на http://домен/
    Ответ написан
    Комментировать
  • Как запустить Node / React проект на vps?

    @frogfordog
    Для бэкэнда можно использовать pm2, для фронтэнда удобно пользоваться nginx.
    В интернете много туториалов по связки pm2+nginx.
    Ответ написан
    Комментировать
  • Как запустить Node / React проект на vps?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Ответ написан
    Комментировать
  • Как создать параллакс эффект?

    anatoly_kulikov
    @anatoly_kulikov
    Помог ответ? Отметь решением!
    Здесь понадобится и то, и другое. Очень сложный пример, полностью соглашусь.

    Тут наверное сделать без vue/react/angular будет достаточно больно.

    Хотя данный эффект не оригинален - просмотрите, возможно что-то подобное реализовано и есть какая-то библиотека. Есть сайт unheap, посмотрите там.
    Ответ написан
    3 комментария
  • Как сделать, что бы jquery скрипт срабатывал на определенном медиазапросе?

    Destell
    @Destell
    React, React Native junior developer
    min < window.innerWidth < max
    Ответ написан
    Комментировать
  • Стоит ли работая фриллансером отказаться от кросс-браузерной верстки в пользу новых css технологий?

    Vlad_IT
    @Vlad_IT
    Front-end разработчик
    На самом деле, нужно уточнять у заказчика, какая целевая аудитория сайта. Но я отказался от IE ниже 10-й версии, да и в 10-й версии стараюсь лишь сделать так, чтобы функционал сайта работал, и сайтом можно быть хоть как-то пользоваться (без эффектов всяких).
    80% для РФ мне кажется пока мало, нужно минимум 85% (включая частичную поддержку). Например flexbox уже можно спокойно использовать, а вот css grid с опаской.
    Ответ написан
    Комментировать
  • Стоит ли "дёргать" HR-компании?

    А я б дернула. Когда рассматриваемые нами кандидаты сообщают о каких бы то ни было ограничениях в сроках, мы принимаем это к вниманию, по возможности ускоряем процесс. Уж как минимум, информируем о состоянии дел и вероятности получения офера. Счтию нормальной практикой взаимное уважение и в этой сфере тоже.
    Ответ написан
    Комментировать
  • Стоит ли "дёргать" HR-компании?

    ubernoob
    @ubernoob
    HR чтобы узнать в каком я для них статусе

    Нет не стоит

    Выход только один, морозится и ждать, но сами понимаете, может стать плачевным для вас
    Ответ написан
    Комментировать
  • Можно ли жить на разработке приложений на ios(app store),android(google play)?

    kawabanga
    @kawabanga
    не реально, сдохнете от голода.
    Ответ написан
    Комментировать
  • Как сравнить значения select?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Судя по показанному коду, вы почему-то решили, будто бы элемент массива и option, имеющие одинаковые значения, находятся на одинаковых же позициях. Это абсурд. Сравнивать надо каждый с каждым, т.е., циклов должно быть два:

    for (const n of el.options) {
      for (const m of elValue) {
        if (n.value === m) {
          n.selected = true;
          break;
        }
      }
    }

    Хотя в явном виде можно и ни одного не написать:

    Array.prototype.forEach.call(
      el,
      n => n.selected = elValue.includes(n.value)
    );

    А можно (но не нужно) ничего не сравнивать, если собрать из массива значений селектор:

    el
      .querySelectorAll(elValue.map(n => `[value="${n}"]`))
      .forEach(n => n.selected = true);
    Ответ написан
    Комментировать
  • Насколько трудное данное тестовое задание и что полистать чтобы его решить?

    @ebroker
    Самый тривиальный способ через обход графа в ширину. Гугли bfs
    Ответ написан
    1 комментарий
  • Насколько трудное данное тестовое задание и что полистать чтобы его решить?

    @grinat
    Можешь тут глянуть реализацию https://github.com/qiao/PathFinding.js только там для поиска пути в лабиринте, но алгоритмы те же.
    А задание отстойное, мне ни раз не приходилось на проде это делать. С задачей комивояджера только сталкивался, но там не было смысла трахаться с ней, с данными для нее и т.п., потому что есть osrm.
    Ответ написан
    2 комментария
  • Как пишут frontend на более менее больших проектах?

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

    Если у вас нету никаких новомодных фреймворков, то сценарий простой. Берём вебпак, в него суём бабель, раз у вас импорты и экспорты с классами, настраиваем сборку файлов.
    Разделяете всё на модули, например, из описанных вами:
    //MobileMenu.js
    export default class MobileMenu {
    constructor() {
    this.isVisible = false;
    }
    
    toggle () {
    this.isVisible = !this.isVisible
    }
    }

    с остальными модулями по аналогии.
    Далее, создаёте файлик, где нужно запускать нужные модули. Например, у вас есть страница каталога, а есть страница товара. Для каждой страницы создавать свой файлик, в котором вы будете запускать свои модули, если это требуется.
    // Catalog.js
    import MobileMenu from '/path/MobileMenu'
    
    (() => {
    $(document).on('ready', () => {
    let mobileMenu = new MobileMenu();
    });
    })()


    ну а для детальной каталога у вас будет свой файл, который будет что-то запускать, нужное вам. А так же, должен быть глобальный файл, в котором будут запускаться модули, нужные на всём всём сайте. Надеюсь понятно описал.

    Это грубый пример, но надеюсь, сможете что-то подчерпнуть.

    P.S. У нас есть некоторые, большие проекты, на которых мы используем +- такой подход - это старые проекты, написанные давно, но до сих пор живущие. В один миг, была такая каша из хер пойми какого кода, не пойми, что за что отвечает, багов куча, т.к. где-то запускалось то, что не должно в принципе, код обрастал кучей костылей, условий. Было 2 варианта, как проекту жить дальше, переписать на rest + vue или сделать как я написал в ответе. Выбор пал на 2й вариант. Т.к. 1й вариант потребовал бы титонических усилий, что бы всё переписать, денег на это не дали бы.

    Получилось вполне не плохо. Сейчас, при заходе нового проекта, мы сразу делаем rest api + vue. Не только потому, что это модно и т.п., а очень разделяет всё всё на компоненты, модули и т.п, отделяет бек от фронта, что уже облегчает разработку, ведь тебе уже не нужно бекенд разворачивать, делать постоянно миграции, бегать к бекендерам, если на их стороне что-то сломалось и т.п. удобства
    Ответ написан
    6 комментариев
  • Как пишут frontend на более менее больших проектах?

    @askhat
    Сниппет кода который вы привели, очень похож на общее представление о веб-компоненте. Если класс CategoiesFilter расширит класс React.Component, вам будет нужно реализовать метод render. Тогда вы сможете избавиться от селекторов по заранее написанному html.
    Опционально вы сможете реализовать методы т.н. хуки жизненного цикла, тогда вы получите более тонкий контроль.
    Говорят пользователи Vue используют очень похожий подход к моделированию, но пользуются более гибким синтаксисом рендер функции (они просто пишут html и css.)
    Если речь идёт о более крупных приложениях, часто испозуют redux и mobx. Они реализуют похожие паттерны flux и observable. Но это уже совсем другая история.
    Смысл всех этих технологий в Virtual DOM. Он позволяет не писать все состояния вашего приложения сразу в html, а вычислят его на основе данных в JavaScript и только тогда создавать html наиболее оптимальным образом.
    Ответ написан
    3 комментария
  • ООП в моём тестовом задании, code review?

    rockon404
    @rockon404
    Frontend Developer
    1. Вы инкапсулируете модуль Form, но при этом он зависит от глобальных переменных, а не получает нужные параметры при создании экземпляра.
    2. Сам объект Form это ни что иное, как наглядная демонстрация антипаттерна God Object . Почему, не имеющий никакого отношения к форме, список является ее частью остается загадкой. Как и то почему в модуле инкапсулировано состояние приложения.
    3. Насчет аргумента "e" уже не раз написали. Насколько я понимаю, вы видели на просторах интернета, что так часто называют аргумент функции, но, видимо, не поняли почему. Один аргумент имеет говорящее название user, но и оно вводит в заблуждение, так как на вход ожидается массив пользователей.
    4. Почему не использованы возможности ES6 остается загадкой.
    5. Попробуйте сами догадаться, что не так с этим отрывком кода.
    users.push(this.user);
    
    let lastUser = users[users.length - 1];

    6. У вас почти все переменные в методах объявлены свойствами объекта, при том, что в этом нет никакой необходимости и это может стать причиной ошибок в дальнейшем. Почему не использованы локальные переменные остается загадкой.
    Ответ написан
    Комментировать
  • ООП в моём тестовом задании, code review?

    @grinat
    Это не ооп, ты просто собрал функции и засунул их в класс. Типа такого надо:
    class User (){
        construct ()
       save() {
           return ajax-запрос
       }
    }
    class List () {
      this._list = []
      consruct(id) {
      }
      addItem(user)
      render () {
          doucment.getElemntBy(id).innerHtml = ''
          this._list.forEach(user => {
             // добавление новой строки
         })
      }
       
      fetcList () {
         return аяк-запрос.then(users => {
            this._lsit = []
             users.forEachv(user => {
                 this.addItem(user)
            })
        })
       }
    }
    new Subsriber {
      action,
      cb
    }
    class Emitter {
        this._evts = []
        subsctibe(action, cb) {
           this.evts.push(new Subsriber (action, cb))
        }
        emit(action, value) {
            this.evts.forEach({action} => {
           if (act === action) {
               cb(value)
           }
         })
        }
    }
    class Form (){
      consruct(id, emmiter) {
        doucment.getElemntBy(id).addEventListener('sumbit', () => this.onSubmit)
      }
      addElement(elem) {
         this.elements.push(el)
       }
      onSubmit () {
          const user = new User()
          for (let elem of this.elements) {
              user[elem.name] = elem.value
         }
         user.save().then(добавленный юзер => {
               this.emmiter.emit('submit', user)
         })
      }
      }
    
      render () {
          doucment.getElemntBy(id).innerHtml = ''
          this.elements.forEach(elem => {
             doucment.getElemntBy(id).insertBefore(elem)
         })
      }
    }
    // инициализация этого говна
    const list = new List(listId)
    const emmiter = new Emiiter()
    const form = new Form(formId, emmiter)
    form.addElement(document.createElemnt('input'))
    
    // теперь отрисовка
    form.render()
    list.render()
    
    // подписываемся на события формы
    emmiter.subscribt('sumbit', user => {
        list.addItem(user)
        if (не грузим с сервера) {
          // перерисуем
             list.render()
        } else {
            // перерисуем
             list.fetchList().then(() => ist.render())
         }
    })
    Ответ написан
    Комментировать
  • ООП в моём тестовом задании, code review?

    // создание полей input
        Form.prototype.createInput = function createInput(e) {
            for (let i = 0; i < e.length; i++) {
                this.input = document.createElement('input');
                this.input.type = e[i].type;
                this.input.classList = 'js-input';
                this.input.name = e[i].name;
                this.input.placeholder = 'Введите ' + e[i].content + ':';
                this.input.id = e[i].id;
                this.input.value = '';
                this.formWrap.append(this.input);
            }
        }


    Тут вместо this.input нужна более локальная let input
    Ответ написан
    Комментировать