• Слайдер для главной страницы сайта?

    @PHPjedi
    Ответ написан
    Комментировать
  • Как правильно разбивать проект на компоненты?

    @deliro
    Всё просто.
    * Если кусок кода выглядит, как отдельная сущность — выделяй в компонент
    * Если кусок кода используется в более чем одном месте — выделяй
    Ответ написан
    1 комментарий
  • Почему абзац не помещается в центр?

    @trofimovdev
    Python
    Потому что CSS непредсказуем
    Ответ написан
    Комментировать
  • Оптимальный аналог JQuery?

    webinar
    @webinar
    Учим yii: https://youtu.be/-WRMlGHLgRg
    медленная библиотечка и вообще

    аргументация серьезнейшая, видимо правда в последней инстанции (это сарказм)

    Много негатива вижу в сторону JQuery

    а конструктивная критика есть, кроме "это говно", "да ну на" и других?

    что можно использовать вместо неё

    Или чистый js или все аргументы против jquery будут относится и к этому что-то.
    Ответ написан
    Комментировать
  • Зачем вы используете фреймворк?

    Потому что мы решаем бизнес-задачи, а не пишем "правильный"в сферическом вакууме код.
    Время это деньги.
    Час работы верстальщика в студии для клиента от 1000р стоит.
    Сколько часов уйдет на написание велосипеда про который вы тут говорите?
    Не каждый клиент согласится оплачивать вашу работу, при том что это уже реализовано в jquery. Это экономически не выгодно. По той же причине развозить хлеб берут Газель, когда есть "качественные" Мерседесы (их тоже берут, но не всем по карману).

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

    Еще они находятся в постоянной доработке.
    Пример - слайдер фоторама. Вроде бы обычное слайдшоу. Но на его разработку и доработку ушло 2 года, как сказал сам создатель.
    Если мне пришел макет на верстку, я не буду пилить это слайдшоу в рамках его реализации (не смогу физически).

    Еще для фронта есть плюс: готовые решения работают во всех браузерах, экономится время на тестирование. И клиенты не пишут "Я зашел со своего старого айфона-динозавра, а там ничего не работает".
    Ответ написан
    Комментировать
  • Есть ли польза от codewars?

    sim3x
    @sim3x
    Синтетические задачки
    Для начинающих - крайне полезно
    Для средняков - полезно посмотреть на чужой код и понять как он работает
    Для топов - развлечение на самое простое, короткое или однострочное решение

    Просто куски кода оттуда никогда не юзал
    Подходы - юзал

    Не знаешь как решить. Сядь и нарисуй блоксхему алгоритма без привязки к ЯП
    Ответ написан
    Комментировать
  • Как сортировать по индексу другого массива в js?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Сортировать по indexOf( ID ) в массиве, задающем порядок сортировки:
    var data = [
      {ID: 1, country: 'England'},
      {ID: 4, country: 'USA'},
      {ID: 9, country: 'Russia'},
      {ID: 5, country: 'Germany'},
      {ID: 6, country: 'France'},
    ];
    
    const order = [5,1,9,6,4];
    
    data.sort((a,b) => order.indexOf(a.ID) - order.indexOf(b.ID));
    
    /* [
      {"ID":5,"country":"Germany"},
      {"ID":1,"country":"England"},
      {"ID":9,"country":"Russia"},
      {"ID":6,"country":"France"},
      {"ID":4,"country":"USA"}]
    */


    На больших массивах для ускорения:
    1. добавить в исходный массив новое поле с порядковым номером, который каждый элемент должен занять после сортировки;
    2. отсортировать по этому полю.

    Так будет быстрее, чем на каждой операции сравнения двух элементов искать их индексы во втором массиве.
    data = data.map( e => {e.sortBy = order.indexOf(e.ID); return e;} );
    data.sort( (a,b) => a.sortBy - b.sortBy);
    Ответ написан
    Комментировать
  • Как в less сделал арифметическую прогрессию?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    .generate-styles(3);
    
    .generate-styles(@n, @i: 1) when (@i =< @n) {
      .style-@{i} {
        left: 50px + @i * 15px;
      }
      .generate-styles(@n, (@i + 1));
    }


    На выходе даст это:
    .style-1 {
      left: 65px;
    }
    .style-2 {
      left: 80px;
    }
    .style-3 {
      left: 95px;
    }
    Ответ написан
    1 комментарий
  • Стоит и какие наработки выкладывать на github для будущего портфолио?

    paulradzkov
    @paulradzkov
    Дизайнер, верстальщик, начальник отдела UI
    Сто́ит выкладывать всё, вообще всё. И так как это будет публичный код, стоит позаботиться, чтобы это был не стыдный для данного этапа вашего развития код.

    Но в портфолио для работодателя должно быть адекватно малое количество крепких работ. Вы можете создать себе организацию на ГитХабе и перемещать туда неактуальные репозитории, чтобы в корневом аккаунте были только клевые работы. Вы можете создать репозиторий «portfolio» из одного readme.md и в него собирать ссылки на лучшие ваши проекты с аннотациями.

    Я уже писал про сортировку репозиториев на ГитХабе с помощью организаций Как вы организуете свою работу?
    Ответ написан
    Комментировать
  • Front-end разработка, правильная сборка?

    search
    @search
    мама говорит что я особенный
    Если компания дорожит качеством продукта и безопасностью данных своих клиентов, то сборка и выкат новой версии проводится автоматически Continuous Intrgration сервером. У программистов вобще нет доступа к проду. Доступ к проду есть только у CI-сервера. У программиста есть доступ только к GIT репозиторию проекта. Вся работа проводится в своём окружении и в отдельной ветке. Затем ветка тестируется на тестовом окружении (близком к продакшену), если надо правится, и затем вливается в главную ветку проекта. После этого CI подхватывает изменения, билдит фронт и бэк и выкатывает это дело на прод. Это очень общий вариант. Там есть куча нью-ансов.

    Лично я предпочитаю идти по вышеописанному пути с первого дня работы даже когда работаю один. Потому что в этом случае ты всегда можешь откатиться на последний стабильный релиз, уйти дамой и доделать всё на следующий день. Вместо того чтоб с выпученными глазами и трясущимися губами всю ночь что-то там фиксить (что есть признаком очень низкокачественного проекта).

    UPD
    Забыл сказать, что этот путь не даётся легко. Нужно потренироваться где-то полгодика. Но зато на всю жизнь получаешь спокойные ночи и здоровый цвет лица, так что оно того стоит.
    Ответ написан
    2 комментария
  • Стоит ли учить Jquery в нынешнее время?

    ShadowOfCasper
    @ShadowOfCasper
    Middle User Interface Web Developer
    Стоит. Каждой задаче свой инструмент. Если ангуляр и реакт вошли в моду, это не значит, что способы упрощённой манипуляции домом из неё вышли. Если тебе кто-то говорит, что jQuery - костыль для людей, не умеющих нативно перебирать ноды или писать xmlhttprequest - скажи им, что компьютер - это костыль для людей, не умеющих жить без гугла и социалок. jQuery всегда будет популярен. Он упрощает простые обмены данных, классов в пределах DOM, умеет работать с ajax и значительно упрощает синтаксис.
    Ответ написан
    3 комментария
  • Как в Gulp сделать отдельную задачу для сборки на продакшн?

    zorro76
    @zorro76
    Дублировать ничего не нужно, вот пример моего gulpfile.js:
    // Configuring paths and options for different environments
    env = process.env.NODE_ENV || 'dev';
    
    if (env === 'dev') {
        outputDir = 'builds/development/';
        sassStyle = 'expanded';
        sassComments = true;
    } else {
        outputDir = 'builds/production/';
        sassStyle = 'compressed';
        sassComments = false;
    }
    
    //и потом к примеру в стилях у меня 
    ....
    .pipe(gulpIf(env !== 'dev', cleanCSS({compatibility: 'ie8'})))
    
    // в js
    ...
    .pipe(gulpIf(env !== 'dev', uglify()))
    ....
    просто меняю env на === и собираю стили и скрипты для продакшн (оптимизированы)
    
    и т.д по сути заменяя лишь значения с !== на === собираются 2 сборки: или builds/development /или builds/production/
    Ответ написан
    3 комментария
  • Как улучшить процесс разработки/тестирования/деплоя?

    Серебряной пули нет, всё индивидуально, но в общем случае нужны две системы:

    одна - "от PM". Это может быть и гуглодоки для начала, или Б24, или ...
    вторая - "от разраба": тасктрекер, связанный с СУВ (как правило это issue в Github/Gitlab ).

    Упомянутая выше JIRA или TFS вроде как "2 в 1", но, по моему опыту, для небольших проектов проще, гибче, надёжнее две отдельные системы, чем крутой корпоративный бестолковый комбайн.
    Хотя, возможно, таки "пуля" есть - Redmine, но у него родовая травма в виде "сделано на Ruby"
    Ответ написан
    4 комментария
  • Почему никто не используют все возможности bootstrap?

    space2pacman
    @space2pacman
    Просто царь.
    Его лучше вообще не использовать. а делать все на Vanilla CSS, Vanilla HTML и Vanilla JS
    Ответ написан
  • Как избежать конфликта стилей css?

    potapchino
    @potapchino
    БЭМ
    Ответ написан
    Комментировать
  • Какой необходимый уровень знаний для junior React.js Разработчика?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    UPDATE: реальные тестовые задания и разборы здесь, ответы на все вопросы из поста в моем блоге об обучении react.

    не включая основы js

    Извините, но стандартная задача, про "напишите функуцию add, которая при вызове add(1)(2) вернет 3" - многих положила на лопатки =) Поэтому будьте готовы..

    React
    0) Какую проблему решает react ?
    1) Мгновенно ли срабатывает setState? Если нет, то как выполнить код, который 100% выполнится после того, как новый state будет установлен?
    2) Зачем многие постоянно пишут в constructor: this.FUNCTION_NAME = this.FUNCTION_NAME.bind(this) и отсюда вопрос вытекает чему равно this в разных местах вашего компонента...
    3) в каких методах жизненого цикла стоит выполнять xhr запросы? В каких стоит "обновлять state на основе props"?
    4) Что будет если вызвать this.setState в render методе компонента?
    5) зачем нужен componenWIllUnmount, приведите пример..
    6) Контролируемые, не контролируемые компоненты
    7) Как организовать роутинг в реакт приложении? (ответ: взять react-router - подходит, но было бы круто, если бы вы рассказали, как он примерно работает)*
    8) Зачем нужны propTypes? Что происходит с ними в production сборке?
    9) Как можно удобно "отлаживать" чужой код приложения, написанного на react (намек в сторону React devtools)
    ...

    Redux
    0) Какую проблему решает redux?
    1) Зачем многие создают типы действий NAME_REQUEST / NAME_SUCCESS ? А заодно, что такое "действие", а что такое "создатель действия"...
    2) Что такое редьюсер? Можете написать простой редьюсер без react/redux?*
    3) Для чего нужен redux-thunk? Как он работает? Напишите (можно псевдокод) асинхронный создатель действия (либо, если надоело говорить "терминами" - асинхронный aciton)
    4) Как компоненты приложения получают "пропсы" из "стора"?*
    5) Можно ли (и считается ли это нормальным) использовать state, если используется Redux?
    6) Почему в reducer'ax мы возвращаем новые объекты? Приведите пример, когда вы возвращаете новый объект, а когда тот же самый.
    6.5) А так же, "как в js вообще это работает?". Например:
    let obj1 { name: 'Test', age: 100 }
    let obj2 = obj1
    obj2.name = 'Test_new'

    Что будет в obj1, почему? В каких случаях объекты могут быть равны?
    7) Что возвращает функция connect (из react-redux)?
    ...

    Общее:
    0) package.json
    1) Webpack, gulp, etc...
    2) node.js
    3) promise

    Что-нибудь практическое:
    1) Как бы вы валидировали форму, если ошибки валидации приходят после submit'a ее на сервер..
    2) Почему не работает следующий код, сделайте чтобы работало
    ...
    На истину не претендую, но такие вопросы имели место быть на собеседованиях. В беседе можно многое разузнать дополнительными вопросами и так далее. Так же, если часть вопросов вам неизвестна - не беда, многие и на половину ответить не могут.

    p.s. возможно дополню...
    p.p.s. звездочкой отметил, на мой взгляд не самые необходимые для junior-собеседования вопросы.
    Ответ написан
    31 комментарий
  • Заказчик просит отрисовать все состояния экрана (выпадающее меню и тд) Это будут уже новые экраны или засчитывается как один экран?

    webirus
    @webirus
    Тыжверстальщик! Наверстай мне упущенное...
    Хороший дизайнер ОБЯЗАН предоставить бесплатно все макеты состояний сайта, приложения.
    Открытые меню, всплывающие окна, разворачивающиеся списки и так далее.
    Даже ховер на ссылках и кнопках нужно обязательно предоставить.
    Должно быть 2 исходника (в идеале), но можно и в одном скрытыми слоями (тогда нужно сопроводительное письмо).
    Придумывать, как всё это открывается, закрывается, скрывается - работа дизайнера.
    Дизайнер должен сразу учитывать это и оценивать в стоимости проекта заранее.
    Ответ написан
    Комментировать
  • Как обновлять данные из файла в nodejs?

    Самый простой способ это принудительный перезапуск приложения раз в 24 часа. Но я бы просто считывал этот json через модуль fs, а не через require.
    Если этот вариант не подходит, то можно еще сбросить кеш require. Но я не вижу причин, чтобы не использовать fs.
    Кроме того, лучше прямо узнавать, когда файл изменился, а не предполагать. Поэтому можно использовать fs.watch, чтобы следить за файлом и отреагировать именно тогда, когда он изменится.
    Ответ написан
    Комментировать
  • Как лучше писать код?

    Вырви мозг) То что понял:
    1) getKeyIndex: я бы сделал ее функцией, принимающей объект:
    function getKeyIndex({ keys, key }) {
        const keyPos = keys
           .concat(key)
           .sort((a, b) => a - b)
           .findIndex(i => i === key)
    
        return keys[keyPos - 1];
    }

    Вообще, кстати, то что она возвращает не соответствует его названию. Возвращает же предыдущий key, а вроде как должен вернуть индекс эл-та.
    2) Cудя по всему getSecondProperty работает только с getKeyIndex. Зачем тогда его передавать? Заведите getKeyIndex через function.

    Вообщем:
    1) Поговаривают, что нехорошо писать const fn = (gn) => {}, лучше function fn(){}
    2) Функция должна делать только одно и название функции должно совпадать с тем, что она делает
    3) Функция должна принимать 1-2 параметра, если больше, то лучше через объект и в самой функции пользоваться деструктором.
    4) Делать функцию, которая возвращает функцию, которая возвращает функцию, которая возвращает функцию т.д лучше не надо
    Ответ написан
    1 комментарий