• Чем опасен force push?

    Lobotomist
    @Lobotomist
    Software Developer
    BD_ l3ftoverZ! ответил в принципе верно - можно затереть чужие изменения, но это не единственная опасность.

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

    История из жизни.

    Вот реальная ситуация, которая произошла у меня на работе. К сожалению, за давностью лет конкретные детали я помню смутно, но в целом все было примерно так. В какой-то момент появилась ошибка. Причем код, в котором она была был очень "говнокод", человек его написавший уже уволился и понять в каком месте этот говнокод написан неправильно, не понимая "логики" автора было очень сложно. С помощью git-bisect я нашел проблемный коммит и стал дальше раскручивать клубок. В итоге выяснилось, что было нарушено по крайней мере три важных правила работы с гитом (описанные во внутренней вики и обязательные к исполнению) и если бы хотя бы одно из них нарушено не было - все было бы ок.
    1. Я сделал пуш в мастер и оперативно осознав, что что-то там не так быстренько поправил и залил форсед пушем исправления. Это было важно сделать именно так. Я решил, что во-первых, маловероятно, что кто-то успел сделать пулл, а во-вторых, даже если он и сделал - когда у него возникнут конфликты он либо сам все поймет, либо обратится ко мне. Первое нарушение. Мне следовало уведомить всех разработчиков об этом и объяснить как нужно правильно действовать.
    2. Естественно, один разработчик успел сделать пулл и отребэйзил на старый мастер ветку этого уволившегося и стал доделывать таск. Когда спустя продолжительное время он стал ребэйзить эту ветку на мастер у него полезли конфликты. Он не понял из-за чего эти конфликты возникли. Но храбро все их решил. Етественно, не правльно, уже хотя-бы потому, что он вообще не должен был их решать. Нарушение второго правила - "решай конфликты только тогда, когда ты понимаешь почему они возникли". Обратись он ко мне - все было бы в порядке.
    3. Когда он стал пушить свои изменения он нарушил третье правило: "Всегда проверяй список коммитов, которые ты пушишь". Он не заметил, что кроме "своих" коммитов, он так же пушит чужие, старые версии коммитов мастера, которые он отребэйзил на новые. Он должен был это заметить и забить тревогу - что такое, откуда эти коммиты, я их не делал. Опять же, обратись он ко мне - я бы на месте бы разобрался в чем дело, и исправил ситуацию.

    Так что не надейтесь на авось (как я в данном случае).


    В целом, получается так - если ты понимаешь, что обе проблемы - 1) перезатирание чужих изменений и 2) наличие у кого-то старых версий коммитов не актуальны - смело делай форсед пуш. Например:
    • Это ветка по задаче, в которой работаешь только ты и согласно workflow никто не должен без твоего ведома брать из нее какие-то коммиты.
    • Ты точно знаешь кто имеет доступ к ветке и уверен, что эти люди с ситуацией справятся корректно. Ты их предупредил и они знают что в таких ситуациях делать.
    Ответ написан
    Комментировать
  • Как загрузить процессор на 100% в linux?

    fredyk
    @fredyk
    ### CPU ###

    md5sum /dev/urandom - Single thread CPU test
    stress --cpu 4 --timeout 300s - Multi threadCPU test
    cat /dev/zero | bzip2 -c > /dev/null - CPU Stress Test

    ### HDD ###

    cat /dev/sda3 | pipebench -q > /dev/null - RAW Read Speed Test
    dd bs=16k count=102400 oflag=direct if=/dev/zero of=test_data - Write Test
    dd bs=16K count=102400 iflag=direct if=test_data of=/dev/null - Read Test
    Ответ написан
    Комментировать
  • Что такое «101»?

    @werwooolf
    Классы кодируются как 3-4 буквы предмета + 3 цифры уровня класса. Сотни в коде примерно соответствуют году обучения в 4-летнем колледже.
    1хх — freshhman (1 курс) — вводные классы
    2xx — sophmore (2 курс)
    3xx — junior (3 курс)
    4xx — senior (4 курс) — специализированные классы повышенного уровня сложности

    Студенту нельзя (или просто не рекоммендуется) брать курсы по номеру выше чем его год обучения.
    Для магистров и аспирантов классы будут соотвественно начинаться с 5хх-9хх.

    Десятки и сотни в номере обозначают разные классы, чаще всего нумерация идет в порядке увеличения сложности, или зависимости классов. Так, например, чтобы взять класс FIN345 («Финансы — средний уровень») нужно обязательно взять FIN302 — «Введение в финансы» и тп. А FIN445 будет наверняка на порядок сложнее чем FIN345.

    Итого, 101 — самый начальный воодный класс в любом предмете, например МАТ101 — введение в математику или BIO101 — введение в биологию.
    Ответ написан
    1 комментарий
  • Что такое «101»?

    EugeneOZ
    @EugeneOZ
    Wiki
    The term 101 (pronounced «One-oh-one») often indicates an introductory level of learning.
    Ответ написан
    1 комментарий
  • Какой JS фреймворк выбрать для full-stack?

    edli007
    @edli007
    full stack, team lead
    В свое время работал и с React\Redux, и Vue, и Angular.

    Зависит от задачь, наиболее удобным являеться React\Redux, при наличии человека что может вам настроить кастомный webpack, это просто сказка а не разработка.

    Vue это для ленивых, когда выше означеного нет, он позволяет быстро клепать шаблоншину из коробки. Тот же базовый ReactApp, что так любят лентяи, почти ничего и не умеет.

    Angular с его TypeScript, честно - не оценил, в нашей команде все люди имеют определенный уровень квалификации и о таких детских ошибках что он предостеригает даже не думают. Но если у вас есть вероятность гомнокодеров и грандиозные планы - это может быть выход, но не факт что дешевый.
    Условности использования TypeScript замедляют общую разработку в значительной мере, следует самостоятельно оценить профит от меньшего количества багов за счет встроенных защит от дурака, на то что от более ранговых специалистов багов изначально будет меньше а работать без TypeScript будут быстрее.

    Ну если у вас, извините за слово, работают совсем дятлы, то выход для них один - Ember, этот фреймворк очень хорош, его основная идея состоит в бесприкословном следовании спецыфикации, игнорируя личные предпочтения программистов. Такой код очень удобно читать, поддерживать и вобще в долгосрочной перспективе он лучше всего, но сложность найти самих эмберщиков, высокий порог вхождения. Так что если у вас есть толпа людей, которые еще ничего не умеют и требуеться что-то сделать, заставьте учить их эмбер, тогда они сделают то что надо, какие бы кривые руки у них не были.
    Ответ написан
    8 комментариев
  • Какой JS фреймворк выбрать для full-stack?

    @Coder321
    Если выберете Angular для фронта то можно посмотреть в сторону nestjs, это ангулароподобный node фреймворк.
    Еще мне понравился Loopback.
    Ответ написан
    1 комментарий
  • Какой JS фреймворк выбрать для full-stack?

    dima9595
    @dima9595
    Junior PHP
    Если вам важен js как на фронте, так и на бэке, то попробуйте Adonis JS. Это что-то типо Laravel, только на Node.JS. Вот статейка на хабре: https://habrahabr.ru/post/324220/
    Ответ написан
    1 комментарий
  • Заменит ли Yarn Bower и Npm?

    Negwereth
    @Negwereth
    lvivcss.com.ua
    bower - довольно странное явление, так как npm модули можно напрямую бандлить.

    А yarn сам по себе npm-модуль.
    Ну а webpack - это вообще другое.
    Ответ написан
    6 комментариев
  • Заменит ли Yarn Bower и Npm?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Знать надо npm. Все остальное в той или иной мере повторяет функционал. Смысл yarn довольно трудно понять, не напоровшись на подводные камни npm, jspm бессмысленно без systemjs, bower умирает.

    А webpack вообще про сборку, а не про управление пакетами. Хотя хорошая штука, да:)
    Ответ написан
    Комментировать