Рубрики
Без рубрики

Идти Опсуссорс – погружение в фейсбуку

Авторы Саурав М. Н Кунал Кушваха Что такое стипендия MLH? MLH Breathionship … Теги от Opensource, MLHGRAD, JavaScript, карьеры.

Авторы

Fellowship MLH является альтернативой для инженеров -программистов, с акцентом на проекты с открытым исходным кодом. Вместо того, чтобы работать над проектом только для одной компании, студенты участвуют в проекты с открытым исходным кодом, которые используются компаниями по всему миру. Это отличный способ получить реальный опыт разработки программного обеспечения с комфорта вашего дома. Сообщество с открытым исходным кодом очень полезно и призывает новых разработчиков принять участие в своих организациях. Одним из высококачественных воздействий, может проверить свои навыки, получать знания и облигацию с сообществом создавать код качества, который помогает людям по всему миру.

В начале программы ребята помещаются в небольшие группы, называемые «стручками», которые в совокупности вносят вклад в назначенные проекты в качестве команды в рамках образовательной настраивания профессионального инженера программного обеспечения. Помимо работы, программа стипендий также предоставляет возможности построить сеть и повеселиться во время этого! Студенты получают работу над новейшими технологиями с открытым исходным кодом и сопоставляются с проектами в соответствии с их навыками и процентом, предоставляя учащимся возможности обучения, способствующие реальным проектам. Но, это не только о кодировании. Мягкие навыки и командно-строительные упражнения проводятся MLH регулярно, в дополнение к техническим практическим семинарам! Это отдаленная возможность, но обеспечивает глобальную платформу для студентов, чтобы продемонстрировать свои навыки. Во время общения мы внесли свой вклад в проект Facebook/Jest.

Ну, это была возможность, которую мы были представлены в начале общения. Мы были над Луной, чтобы получить этот проект!

Jest – это структура тестирования JavaScript, предназначенная для обеспечения правильности любого кодовой базы JavaScript. Это позволяет писать тесты с доступным, знакомым и богатым функциями API, который дает вам результаты быстро. Quest является хорошо документированным, требует небольшой конфигурации и может быть расширено, чтобы соответствовать вашим требованиям. Шутка делает тестирование восхитительно.

Где мы начали?

  • Прежде чем внести свой вклад в какие -либо проекты с открытым исходным кодом, вы должны использовать его. Вы бы очень сложно внести свой вклад, если вы не знаете, что должен делать проект. Вот как мы начали. Использование Jest Чтобы написать наши тесты для приложений, которые мы создали ранее.
  • Помимо первой недели стипендии MLH, у нас была встреча со вкладами, как лучшим образом, чтобы лучше понять дорожную карту задач и назначенных нам проектов. Это была продуктивная сессия и помогла нам получить представление о проекте. Достигнув вкладчиков настоятельно рекомендуется, если вы застряли, внося вклад в любой проект с открытым исходным кодом. Вы можете добраться до членов сообщества через список рассылки.
  • Следующим этапом было понимание того, как работает проект. Это была неделя дайвинга глубоко в кодовую базу шума. Документация и переговоры о конференции пригодятся при этом. Поскольку вы работаете над проектом в качестве новичка, всегда хорошая идея предоставить будущему вкладчикам формы руководства, которая поможет им в содействии, так же, как мы делаем с этим блогом! Другим способом получения знакомого с проектом является отладки рабочего процесса и принимает заметки через дискуссии для дальнейших исследований. Приходя к тому, как начать внесение вкладов, рекомендуется, чтобы кто-то начнутся с некоторыми любезными проблемами, если они новые для проекта. Это отличный способ получить импульс и ознакомиться с руководящими принципами вклада.

Нужно ли нам освоить, используя шутки, чтобы внести свой вклад? 🤞

  • Вам не нужно быть экспертом, чтобы способствовать открытому источнику. Если вы новичок, вы наверняка можете найти проекты, которые помогут вам расширить навыки и получить реальную разработку программного обеспечения. Если есть кривая обучения, как в шутку для нас, это хорошо, потому что теперь у вас есть возможность обучения при вкладе.
  • Приходя к тому, как понимать такие большие кодовые базы? Ну, ты этого не делаешь. Проект разделен на отдельные пакеты, которые облегчают навигацию и исследовать кодовую базу. Вы можете иметь общее представление о рабочем процессе. Вы можете глубоко погружаться в упаковки отдельно, когда требуется внести свой вклад в него. Для этого вы можете взглянуть на раздел выпусков репозитория GitHUB, а также отфильтровать проблемы с легкостью начать. А OFC, если вы не застряли где угодно, сообщество, чтобы помочь вам!

Хорошо, я знаю предложение об ошибке/функции. Где мне начать вносить изменения? 🤔

  • Он начинается с открытия проблемы. Ваша проблема должна быть хорошо документирована и объяснить мотивацию позади этого. Если вы запрашиваете новую функцию, вы должны упомянуть, какая такая особенность, как можно добраться, чтобы реализовать ее и почему это важно. Если ваша проблема связана с решением ошибки, вы должны упомянуть, как воспроизвести эту ошибку. Какие изменения нарушаются благодаря этому и что должно быть ожидаемое поведение? У вас должно быть подробное объяснение того, что вы хотите достичь, и как его достичь. Попросите отзывы о своей проблеме от членов сообщества, чтобы получить больше понимания на этом.
  • Документирование имеет решающее значение, поскольку помогает другим помочь вам. Если вы уже знакомы с тем, как решить проблему, вы можете открыть запрос на то же самое. Документация также играет важную роль здесь. Вы должны упомянуть, какие изменения вы сделали и почему. Какие проблемы вы столкнулись с вами и как вы их исправили. Если изменение, которое вы сделали, собирается повлиять на существующую кодовую базу. И помните, не забудьте добавить линию в журналах!

Рабочий процесс тестового прогона 🚀

Я верю, что этот пост Куналом это справедливо Jest-архитектура

Важность сообщества 👥

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

Как задать вопросы и запрос Обратная связь

  • Не просто говорю привет в чате! Это не может быть достаточно подчеркнуто. Все довольно заняты своей жизнью, включая вас. Так что добавьте краткую и краткую форму вашего вопроса на каналах обсуждения. Тейте подходящего человека (сначала посмотрите правила канала).
  • Попробуйте предоставить ссылки или короткопроизводимые формы вашей проблемы другому человеку. Это увеличивает вероятность вашего вопроса больше внимания и решена раньше.
  • Спросите 10 коротких вопросов вместо длинного (не слишком короткого). Задавать краткие вопросы помогают человеку получить ответ раньше, так как мало времени тратится на понимание контекста текста по сравнению с тем, чтобы сказать длинный вопрос.
  • Это приводит нас в другую хорошую точку, сломайте большие PR в меньших, если это возможно! Это очень поощряется, поскольку он помогает рецензеру понять изменения более упрощенным образом, и этот разрыв процесса приводит к эффективным обсуждениям и обратная связь.
  • Укажите шаги для воспроизведения ошибки в вашем сообщении, чтобы другие могли знать, с чем вы имеете дело. Также упомяните, что вы пытались его исправить, и что он привел к тому, чтобы избежать дублирования ответов и таких вещей, как «Я уже пробовал».
  • Запрос обратной связи важен при внесении взносов. Продемонстрируйте свою работу четко определенным образом, так что понятно, что вы пытались достичь. Это включает в себя предоставление информации о внесенных вами изменениях и как она влияет на функциональность кода.
  • Читаемость кода также очень важна. После стандарта организации, предоставляя комментарии, где это необходимо.
  • Не спам канал, если вы не получите ответ сразу. Будьте терпеливы и ждите соответствующего времени, прежде чем снова спросить.

Так что это был конец общего руководства вклада для OpenSource. Давайте возьмем глубокий погружение в то, как мы решали наши проблемы и несколько советов с проектом Facebook

Новая особенность: отчет о индивидуальных испытаниях

Резюме ⚡.

  • [ Часть 2 2] – зависит от #10293
  • Первоначально опрометки будут обновляться Testsuites постепенно и обновлять индивидуальные тестовые случаи пакетных. Это PR пытается сообщить о ходе индивидуальных (атомных) тестовых случаев.
  • Поддерживается для jest-циркового бегуна.
  • Представляет EventListeners Для работников процессов отправить результаты теста своему родителю.
  • Обрабатывает отчеты о прогрессе как при запуске тестов, параллельно (нерестовые работники) и inband (последовательно).

Предыдущие ссылки и предложения

План тестирования ⚡.

  • [x] Добавьте пользовательскую поддержку сообщений в шуме
  • [x] Обновление OnCustommessage Функции для прохождения тестов (вызванные обновлением своего типа) API, реализованные, как указано здесь – https://github.com/facebook/jest/issues/6616#issuecomment-402782271.
  • [x] Исправить проблему утечки памяти

Текущая реализация

Авторы

Соавтор – Saurav M. H @sauravhiremath CO-автор – Кунал Кушваха @ Кунал-Кушваха соавтор – Rogelio Guzman @rogeliog

Благодарность

@ Кунал-Кушваха за его супер потрясающий вклад 🚀 🚀 @rogeliog для укладки фундамента для этого пр. 🚀 @Simenb и @jevakallio за их время и отзывы 👏

  • Иногда для привлечения новой особенности вам придется пройти большинство детей REPOS и может охватить. Это довольно нормально для проектов MonoRepo. В этом случае составьте грубую диаграмму или схему потока, чтобы вы знали, что вы делаете, и не потеряться в огромном проекте.
  • Хорошо, хорошо, у нас было одно крошечное преимущество здесь. Проблема уже обнаружена. Я не могу подчеркнуть, насколько четко определенная проблема одинаково важна по сравнению с его разработанным решением.

Эта проблема:

  • Кажется, что Jest в настоящее время сообщает, что прогресс только при прохождении полного набора. Мы предполагаем, что вместо этого он должен сообщать о прогрессе каждую секунду для отдельных тестовых случаев. (Ну, мы сделали это намного лучше, чем на секунду, больше на нем позже)
  • В противном случае выход прогресса запутается. ” Испытания: n «Быть отдельной строкой в выходе» создает впечатление, что он так же, как гранулирован как «тестовые апартаменты: N» и будут немедленно увеличены, когда пройдет тестовый случай.
  • Таким образом, только проблема текста может быть запутанным. И вы делаете ставку, просто читая вышеуказанное утверждение недостаточно. Итак, здесь приходит объяснительный образ

Решение

Нарушение проблемы в отдельные особенности

  • Поддержка отправки пользовательских сообщений родителю из рабочей нити
  • Сообщите о прогрессе для индивидуальных испытаний

Поддержка отправки пользовательских сообщений для родителя из рабочих потоков

  • Это добавляет jest-работник Возможность работников отправлять «пользовательские сообщения» своему родителям, пока они еще работают. В конечном итоге это позволит нам отчитываться за обновлениями случая теста для репортера.
  • Эта часть была особенно сложной, так как был какой-то наследный код, который был очень запутанным для работы с (довольно распространенным с огромными кодовыми базами)
  • Используя внедрение событий в Nodev10 (используется эмитта который является типизированной формой Node Eventemitters) для отправки сообщений вместо использования традиционных обратных вызовов.
  • Эмиттер использовался только для параллельных прогонов (поддерживая рабочие потоки). Для внутриполосных прогонов не было не так много изменений.
  • Изменение основного куска jest-работник Модуль, этот PR был приземлен без каких-либо изменений.

Сообщите о прогрессе для индивидуальных испытаний

  • Предлагаемая особенность:
    • Изначально, шумам RESES обновит тесты постепенно, и обновляет отдельные тестовые случаи пакетных. Это PR пытается сообщить о ходе индивидуальных (атомных) тестовых случаев.
    • Поддерживается только для jest-цирк бегун.
    • Представляет EventListeners для рабочих процессов для отправки результатов теста для их родителя, используя эмитта
    • Обрабатывает отчеты о прогрессе как при запуске тестов, параллельно (нерестовые работники) и inband (последовательно).
  • Снова предложение неполное без демонстрации для него

Поиск ошибок – это возможность обучения – Утечка памяти

  • Как мы это нашли?

    • К счастью, появилась тест утечки памяти внутри шума. По сути, он создал неглубокую копию объектов, а затем удалил все ссылки (или ребра) к этому узлу. (Я ссылаюсь на узел здесь, в контексте глобального объекта.) Если объект все еще не собрал мусор, то это означает, что есть утечка памяти, потому что есть еще другие объекты, ссылающиеся на него. По сути, это то, как обнаруживается утечка памяти. К счастью, нам не нужно кодировать это вручную, кто-то уже построил модуль NPM для него.
  • Что мы пробовали и как долго?

    • О, парень! Это была самая утомительная часть. Зная, как работала утечка памяти было недостаточно для отладки этого. Сначала мы пытались вручную находить какие-либо наивные ошибки в кодовой базе, но это не было.
    • Следующая вещь, мы взяли снимки памяти на различных интервалах во время пробогов. Здесь мы запускаем тесты в диапазоне, поэтому легче понимать, где дела идут не так.
    • Затем мы профилировали эти снимки и попытались найти здесь полезную информацию. Не повезло здесь тоже.
    • Продал журнал памяти кучи испытаний, но здесь тоже ничего не устарело.
    • Теперь мы использовали самый старый рецепт в поваренной книге, как рекомендовано мастером. Nuking коды! (kudos to @taneliang для поиска этого скрытого рецепта)
    • Мы начали удалять куски кодов, чтобы увидеть, вызывает ли какая часть. Это был наш последний курорт, и мы начали с места, которое мы думали, было наиболее уязвимым для утечки памяти. И, вуаля! Мы нашли это
  • Как мы это исправили?

    • Мы обнаружили, что это было связано с прямой ссылкой на отправку объекта в потоку работника. И даже после того, как рабочий процесс был осиротан, он все еще держал ссылку на объект с ним. Итак, мы решили это, создав глубокую эмпировку (что является модулем говорят, что мы сделали глубокую копию объекта, которое может иметь или не иметь циклических ссылок) и снова отправила его в рабочие потоки снова. И да, это сработало!
    • Это было однострочное исправление. Просто одна строка!
sendMessageToJest = (eventName, args) =>
    this.eventEmitter.emit(
      eventName,
      deepCyclicCopy(args, {keepPrototype: false}),
    );
  • Что мы узнали?
    • Но приход к этой линии был одним из лучших путешествий, которые у нас были. Мы многому научились
      • Chrome V8 Куча.
      • Как сборка мусора обрабатывается внутри.
      • Как узел поддерживает разные кучи и межпользотения между рабочей нитью, он нередит.
    • Это были некоторые из вещей, которые мы узнали при исправлении этой ошибки.

Ура! Вы пережили ботаник. Здесь есть печенье 🍪

Также мы не являемся экспертами здесь, и ни наша работа идеально. Только некоторые ребята, которые делятся своим опытом. Вы можете согласиться или не согласны с некоторыми из наших очков здесь. И это совершенно хорошо, мы уважаем вас за вопрос нашей работы. Это всего лишь дорожная карта, которую мы взяли и уложили, вы можете либо пойти по этому пути, либо найти свой собственный. Оба имеют свое веселье и препятствия:)

Так что это было об этом. Вот как мы начали с проекта, который мы никогда не участвовали раньше и приземлились в новую функцию во время общения. Огромный крик для всех членов сообщества, команда MLH Freationship, и все остальные за то, что он является частью этого путешествия и расширяет возможности всех, чтобы достичь большего.

Спасибо за чтение.

О авторах

О Кунале:

Привет всем! Меня зовут Кунал, и я младший из Индии. Мои интересы включают DevOps, машин обучения и веб-разработку. Я был частью различных программ с открытым исходным кодом, таких как стипендия MLH, лето Google кода, код Google-I и т. Д. Помимо работы, я являюсь основным членом команды различных обществами колледжей и программирования учебных лагерей, где я преподаю науку о данных и DevOps студентов. Я также добровольно в сообществе (CodeCau.se/yt), который я начал, как инструктор, и у нас тысячи студентов учатся с нами. Я имел вклад в исходный источник с открытым исходным кодом, поскольку мой год первокурсника, и он сделал длительное влияние на мою поездку в карьере. Мои цели включают в себя работу над продуктами и услугами, которые влияют на мир. Следовательно, я хотел бы работать на организацию, которая ведет будущее отрасли.

О Саураве:

Дружественный разработчик соседства из Индии: D Компьютерная наука инженерновой студент делает специализацию в биоинформатике. Абсолютно люблю работать на DevOps и полной веб-разработке. Иметь опыт работы на архитектурах продукта и платформы для стартапов. Были частью технических глав и доставленных переговоров по глубокому обучению и развертыванию продукции. Оживленное верующее сообщество с открытым исходным кодом. В настоящее время часть стипендии MLH и была вкладчиком OSS на 2 года. Моя работа была и всегда будет направлена на то, чтобы сделать жизнь людей проще и строить продукты, которые создают разницу. Суммировать это, я люблю свою арку и оперативность:)

Оригинал: “https://dev.to/sauravmh/going-opensource-a-dive-into-facebook-s-jest-cgb”