Задать вопрос
  • Может ли эта уязвимость навредить сайту?

    SagePtr
    @SagePtr
    Еда - это святое
    А ещё в пост вставить картинку с котиком, а через некоторое время (когда пост затеряется и шанс модератора наткнуться на него будет минимальным) - заменить картинку с котиком на изображение листа конопли и натравить на него Роскомнадзор.
    В итоге сайт улетает в блокировку, а владельцы некоторое время не понимают, почему кол-во посетителей из России вдруг упало, а найти картинку, к которой РКН придрался, будет весьма сложно, так как факт замены в логах нигде отражён не будет, ибо заменена она будет на стороне стороннего сервера.
    Ответ написан
    1 комментарий
  • EPayments перестали выпускать карты? Альтернативы для фриланса?

    @hoff7
    payoneer - отлично работают, никаких нареканий.
    Ответ написан
    Комментировать
  • Зачем собирать проект на сервере?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Предполагается, что "сервер" это не боевой сервер, где крутится приложение, а сервер сборки, например агент teamcity/jenkins/hudson.

    Если же у вас на "боевом" сервере что-то пойдет не так, то это что? интернет пропадет, чтобы подкачать зависимости? Так а как юзеры будут тогда на нем работать?

    Предполагается, что разработчиков много.

    Предполагается наличие pull request-ов, которые требуют успешного билда для merge

    Если ты работаешь сам, то делай как тебе удобно. Если работаешь не сам - есть best practice
    Ответ написан
    Комментировать
  • Зачем собирать проект на сервере?

    Stalker_RED
    @Stalker_RED
    У софта, библиотек, и прочих зависимостей бывают версии. Еще и у железа отличия бывают.

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

    Собрав у себя локально и перелив на сервер, у которого отличается окружение - рискуете получить кучу глюков, и чем больше оно отличается, тем сильнее рискуете.
    Ответ написан
    7 комментариев
  • Тестовое задание (Junior Frontend), приемлемое ли?

    @uroot
    Дали 3 дня и после можно скинуть даже не полностью готовое.
    В этом вся соль. Делаете что умеете, а после пытаетесь сделать все остальное. От этого, видимо, будет зависеть ваша ЗП. Вам же не сказали, что нужно заверстать весь макет + анимация + API карты, иначе вы бездарь. Они дали типичный макет для их студии и хотят по максимуму проверить ваши навыки, понять что вы умеете. Но и вправду, не сильно понятно, зачем столько страниц верстать, можно было одну + карта.
    Ответ написан
    Комментировать
  • Тестовое задание (Junior Frontend), приемлемое ли?

    SkipTyler
    @SkipTyler
    Junior+ Front-End developer
    Как по мне это даже не для Front-end

    А для верстальщика, еще и без адаптива...
    Ответ написан
    Комментировать
  • Тестовое задание (Junior Frontend), приемлемое ли?

    Слишком большое задание для теста. Хватило бы и одной страницы. А тут - довольно плотно поработать, чтобы сделать хорошо. Если без оплаты, то вероятно, они так экономят на верстке лендосов каких-нибудь.
    Ответ написан
    2 комментария
  • Тестовое задание (Junior Frontend), приемлемое ли?

    @stratosmi
    Имхо, вы путаете:

    Junior
    и
    Trainee

    Для джуна задание нормальное. Более чем несложное.

    А то, как вы к нему относитесь боязливо - скорее выдает трейни.

    Радует что нет адаптива


    И это вы пишите в конце второго десятилетия 21 века?
    Когда трафик со смартфонов давно превысил 60% ?
    Ответ написан
    Комментировать
  • Тестовое задание (Junior Frontend), приемлемое ли?

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

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

    orlov0562
    @orlov0562
    I'm cool!
    Да, фронты занимаются всем тем, что видит пользователь. И если раньше, это была только верстка под 1-2 браузера, то сейчас это верстка под разные разрешения, анимация, попапы, реактивные компоненты и много чего еще. Не думаю, что обычный бэк пишущий парсеры и API, вот так может взять psd-шный макет по слоям и сделать из него за разумное время адаптивное SPA приложение, например на Vue. Вот отсюда и выросла отрасль - фронт усложнился и нужны узкие специалисты. При этом бэк в свою очередь становится все проще и проще, тк в 90% случаев бэк это лишь набор инструкций для вывода данных из базы.
    Ответ написан
  • Как сегодня верстают такие бордеры?

    profesor08
    @profesor08 Куратор тега CSS
    Псевдоэлементы в помощь:
    Ответ написан
    2 комментария
  • Почему гугл и яндекс не сделали свои главные страницы в виде pwa?

    @stratosmi
    Незачем.

    PWA предполагает что в браузере остается работать некая часть кода сайта, берущая на себя частично серверный функционал.

    Но зачем это поисковику?
    Какой там будет функционал?
    Как вы себе представляете без сети поисковик?

    А, скажем, для почты того же Google некоторый смысл в этом есть и они используют PWA для GMail. Также и для Youtube. И mail.ru использует.
    В Firefox в этом можно убедиться вбив в строке адресной
    about:serviceworkers
    Ответ написан
    3 комментария
  • Почему выводится старое значение state?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    this.setState(
      prevState => ({ test: !prevState.test }),
      () => console.log(this.state.test),
    );
    Ответ написан
    Комментировать
  • Почему выводится старое значение state?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега React
    Because this.props and this.state may be updated asynchronously, you should not rely on their values for calculating the next state.

    Документация

    Вот так правильно:
    this.setState(
      (state) => ({test: !state.test}),
      () => console.log(this.state.test)
    );
    Ответ написан
    Комментировать
  • Как скопировать все props в state?

    @dimoff66
    Кратко о себе: Я есть
    this.state = {...props}
    Ответ написан
    1 комментарий
  • Как скопировать все props в state?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега React
    Есть и такая, но, скорее всего, вы видели вот это: this.state = {...props}

    Тогда не нужно будет писать this.state.props.foo, можно будет обращаться через this.props.foo.

    На мой взгляд, это плохая практика и так можно делать только в некоторых очень ограниченных сценариях.
    Ответ написан
    1 комментарий
  • Разработчик на React Native — все еще frontend разработчик?

    Может ли опыт на React Native считаться одновременно опытом на обычном React? Они настолько похожи?
    Я бы сказал, процентов на 60. Там нет CSS в традиционном понимании и свои правила раскладки, но то, что касается JS вполне транслируется в браузер - архитектура приложения, паттерны React и т.п. Система сборки там тоже своя и нет заморочек браузерного рендеринга.
    Ответ написан
    Комментировать
  • Стоит ли уходить с разработки WordPress?

    OtshelnikFm
    @OtshelnikFm Куратор тега WordPress
    Обо мне расскажет yawncato.com
    Уходите.

    А вообще как один этап развития в фрилансе (в частности в вордпресс) - это уход от фриланса как такового в сторону пассивного дохода: блогеры, курсы, менторство, премиум решения (уход на энвато, кодеселлер в рунете).
    Уход вообще из рунета. Но скиллы вы понимаете какие там должны быть?

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

    Мне не интересен фриланс как таковой, а вот разрабатывать премиум решения - это удовольствие. Конечно еще работы много предстоит - но я думаю это хорошее направление. Тут ты сам себе заказчик.

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

    Поэтому бросайте заниматься ерундой - и если скиллы есть - ищите уникальную нишу. Рынок переполнен типовыми исполнителями - докажите что вы круче. А для этого вы должны выделяться и в вас должно быть что-то что выделяет вас выгодно от других.
    Ответ написан
    3 комментария
  • Оценка своего уровня. Как улучшить код?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    1. Используйте const вместо let для определения переменных которые не переопределяются в коде. Это помогает снизить когнитивную нагрузку с человека читающего код и негласный стандарт в React разработке.

    2. Такие вещи как globalStyles и конфигурацию store лучше вынести в отдельные файлы. Они могут со временем хорошо разрастись.
    По поводу globalStyles, вы вообще можете вынести их в отдельный css файл.

    3. Вместо:
    {
      isModal
      ? <Route path="/auth" component={AuthPopup} />
      : null
    }

    лучше:
    {isModal && <Route path="/auth" component={AuthPopup} />}


    4. Вместо:
    function mapDispatchToProps(dispatch) {
        return {
            autoLogin: () => dispatch(autoLogin()),
            getBrowser: () => dispatch(getBrowser()),
            getMedia: () => dispatch(getMedia())
        }
    }


    лучше:
    const mapDispatchToProps = {
      autoLogin,
      getBrowser,
      getMedia,
    };


    5. Точки с запятыми в конце то есть, то нет. Определитесь и приведите код к одному виду.

    6.
    & label {}
    & input {}
    & span {}

    Это не очень хороший подход. Во-первых ваши стили не изолированные, что может приводить к неожиданным результатам. Во-вторых у вас очень много дублирования стилей. Определите Input и Label как базовые компоненты и используйте в разных местах, то же с остальным если есть.

    7. Почему папка со страницами называется Containers? Дань бойлерплейтам?

    8. Использование trailing comma является хорошей практикой.

    9.
    import {combineReducers} from 'redux';
    import photoReducer from './photoReducer';
    import authReducer from './authReducer';
    import globalReducer from './globalReducer';
    
    export default combineReducers({
        photoReducer, authReducer, globalReducer
    })


    Все таки приятней работать с хранилищем в котором ключи не имеют в названии слова reducer:
    import {combineReducers} from 'redux';
    import photo from './photoReducer';
    import auth from './authReducer';
    import global from './globalReducer';
    
    export default combineReducers({
      photo, 
      auth,
      global,
    });


    10. Забудьте вообще, что в языке есть возможность использовать вложенный тернарный оператор:
    return e === 'invalid-email' ? 'Неверно указан e-mail'
        : e === 'user-not-found' ? 'Указанный e-mail на найден'
        : e === 'wrong-password' ? 'Неверный пароль'
        : e === 'email-already-in-use' ? 'Указанный e-mail уже используется'
        : e === 'network-request-failed' ? 'Нет подключения к интернету'
        : e === 'operation-not-allowed' ? 'Произошла ошибка, попробуйте снова'
        : e === 'popup-closed-by-user' ? 'Окно авторизации закрыто пользователем'
        : e === 'account-exists-with-different-credential' ? 'Аккаунт уже существует с другими данными, используйте другой способ авторизации'
        : e

    Это одна из самых худших практик в JavaScript разработке. Тут лучше подойдет конструкция switch case

    11. Константы actionTypes лучше вынести в папку constants и разложить по разным файлам, иначе со временем у вас там будет свалка.

    12. Вместо:
    import {SET_ACTIVE, CHANGE_VALUE, SET_DEFAULT, UPLOAD, UPDATE_IMAGE, SET_IMAGE_ERROR, SET_LIKE, SET_COMMENT, ADD_ARTICLE_SUCCESS, FETCH_ARTICLES_START, FETCH_ARTICLES_SUCCESS, FETCH_ARTICLES_ERROR} from '../actions/actionTypes';

    Лучше:
    import {
      SET_ACTIVE,
      CHANGE_VALUE,
      SET_DEFAULT, UPLOAD,  
      UPDATE_IMAGE,
      SET_IMAGE_ERROR,
      SET_LIKE,
      SET_COMMENT,
      ADD_ARTICLE_SUCCESS,
      FETCH_ARTICLES_START,
      FETCH_ARTICLES_SUCCESS,
      FETCH_ARTICLES_ERROR,
    } from '../actions/actionTypes';


    13. Попробуйте внедрить библиотеку reselect. И для получения значения из store вместо записи вида:
    function mapStateToProps(state) {
        return {
            browser: state.globalReducer.browser
        }
    }


    использовать селектор:
    const mapStateToProps = state => ({
      browser: browserSelector(state),
    });
    Ответ написан
    12 комментариев