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

Лучшие практики открытого исходного кода: опыт стипендии MLH

Авторы Кунал Саурав Что такое общение MLH? Общение MLH является … с меткой Opensource, MLGGRAD, JavaScript, советы.

Авторы

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

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

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

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

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

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

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

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

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

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

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

Посмотрите в блог, который я написал на шут-архитектуре

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

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

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

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

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

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

Резюме ⚡.

Часть 1 из 2

Цель : Поддержка пользовательских сообщений для Whest Worker Ref : https://github.com/facebook/jest/pull/9662

  • Оригинальный PR от @rogeliog https://github.com/facebook/jest/pull/9662 Глубоко вдохновляет текущий пиар.
  • Этот подза-пр – попытка достичь https://github.com/facebook/jest/issues/6616
  • Как независимый PR, это позволяет отправлять пользовательские сообщения родителям от рабочего процесса с использованием прослушивателей событий узла

Эта PR часть усилий, чтобы сломать PR # 10227, чтобы мы могли в конечном итоге иметь https://github.com/facebook/jest/issues/6616.

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

Расширение от https://github.com/facebook/jest/pull/9662.

Закрывается # 9662.

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

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

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

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

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

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

О авторах

О Кунале:

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

Хотите подать заявку на стипендию MLH?

Визит: https://fellowship.mlh.io. Вот что это нравится: https://dev.to/kunal/one-month-intoThe-mlh-fellowship-4fg5.

Оригинал: “https://dev.to/kunal/open-source-best-practices-mlh-fellowship-experience-43ee”