{"id":35,"date":"2017-05-08T14:56:00","date_gmt":"2017-05-08T14:56:00","guid":{"rendered":"http:\/\/blog.livierickson.com\/?p=35"},"modified":"2023-08-31T21:44:38","modified_gmt":"2023-08-31T21:44:38","slug":"getting-started-with-open-source-contributions-for-vr-ar","status":"publish","type":"post","link":"https:\/\/liverickson.com\/blog\/?p=35","title":{"rendered":"Getting Started with Open Source Contributions for VR &#038; AR"},"content":{"rendered":"\n<p>A couple of weeks back, I saw a request on Twitter for information about how to go about starting or contributing to open source software and projects, and I wanted to share what my experience with OSS has been, and my recommendations for anyone looking to get more involved with it (especially focusing on virtual reality).<\/p>\n\n\n\n<p>Firstly, some background on my experience with open source: I started developing virtual reality applications and prototypes using the Unity game engine. I considered them open source in that all of the source code was available on Github, I freely shared how I built things and information about what I covered, and accepted occasional pull requests when people who forked the project made a small fix or updated something. I also had several \u201copen source documentation\u201d projects, which were technical in nature but were based on tutorials and resources, rather than code, similar to a wiki. In January of this year, I joined High Fidelity, which creates an open source social VR platform by the same name, and got to learn a lot more about larger open source projects \u2014 and I got over my fear of contributing to them.<\/p>\n\n\n\n<p>Open source means different things to different people, but generally, it\u2019s used to describe software that makes its codebase available to be read, extended, or modified by contributors. A contributor is someone who adds value to the project through writing new code, fixing bugs, filing issues, writing documentation, and helping maintain the project and people who work on it. Often times, open source projects are sponsored or originate with a single person or company (referred to sometimes as maintainers \/ core contributors) .<\/p>\n\n\n\n<p>Contributing to, or starting your own, open source projects for the first time can feel intimidating \u2013 working in a new project or area of a codebase that someone else wrote isn\u2019t something that we all get exposure to regularly, especially if you\u2019ve spent time working independently on projects for a while. Different projects will operate in their own specific ways (e.g. not all will use GitHub to track issues; some may have restrictions on what types of fixes or features come into the main code base) but a rough outline for the steps to contributing to an OSS project are listed below.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">The basic steps to contributing<\/h1>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Get your own copy of the source code. If the project is hosted on GitHub, this generally means clicking the \u2018Fork\u2019 button, which creates a copy of the entire project to your own account that you can work from. If you need a primer on git, I recommend the <a href=\"https:\/\/try.github.io\/levels\/1\/challenges\/1\">interactive tutorial available from GitHub.<\/a><\/li>\n\n\n\n<li>Create a <em>branch<\/em> of the project from the master branch in your fork. This is the name that you\u2019ll give the copy of your code with a specific set of changes that you\u2019re going to make. The master branch is generally the \u2018base truth\u2019 of the code that makes up an application, so you\u2019ll usually want to work from that branch, especially if you\u2019re just starting out.<\/li>\n\n\n\n<li>Make your code changes! Maybe you found a spelling error and you\u2019ve just made a couple of characters different. That\u2019s a totally valid change, and string fixes also get downgraded in projects as lower-priority fixes. Commit your changes to your branch and push it up to your remote copy on GitHub.<\/li>\n\n\n\n<li>Ensure that you are following any contributing or code styling guidelines before you submit a pull request. Many projects have configuration files that will define this, or will run a style-check automatically. A pull request is a way to show that you want your changes to be considered in the code base. Usually, you have a conversation about your code and may be asked to make changes by the core maintainers of the repository.<\/li>\n<\/ol>\n\n\n\n<p>I recommend picking a project that you work with on a regular basis, whether it\u2019s a framework you use in your applications or a plugin that you use in your games. Understanding how the components work together and having a solid concept of what the goals are for the project you want to contribute to are important to being able to collaborate with the core team. Being a passionate user means that you\u2019re already a member of the community \u2013 you can think of contributing formally as a way of adding to something you use and like to make it even better!<\/p>\n\n\n\n<p>Some of the things that I recommend new contributors to an OSS project look for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em>Tags for beginner-friendly issues.<\/em> Not all projects use tags or do their issue tracking on GitHub, but if they do, these can be a good way to filter for tasks that should be easy for someone newer to the codebase to pick up.<\/li>\n\n\n\n<li><em>Missing documentation<\/em>. Find out if an open source project you use needs documentation help. I can almost promise you they do \u2013 keeping docs up to date is one of the recurring challenges that I see in development teams. Realize that a documented API has changed? Or that a new feature could use a tutorial to go with it? Take a look at how the team documents these things and consider contributing there in addition to the main codebase.<\/li>\n\n\n\n<li><em>Issue tracking<\/em>. If the project tracks issues on GitHub (or another publicly open tool for bugs and features) you have a couple of options how you can contribute to bugs. First, if you find any \u2013 submit them! Before you submit an issue, keep the following in mind:\n<ul class=\"wp-block-list\">\n<li>Search the issue tracker and make sure it hasn\u2019t already been submitted<\/li>\n\n\n\n<li>Write very clear messages about what you expected to see, what actually happened, and what you were doing. Any additional information about your system can also be useful.<\/li>\n\n\n\n<li>Provide a log file when possible \u2014 it can help identify issues that the developers could look through.<\/li>\n\n\n\n<li>Add a screenshot if there is a visual component<\/li>\n\n\n\n<li>Follow up with the discussion and resolution of the issue \u2014 it may be an area where you could get some guidance and fix yourself!<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><em>Feedback \/ Discussion: <\/em>Often, maintainers of an OSS project will provide a forum for users to weigh in on future feature discussions and project structure. Read through them and participate! If you\u2019re looking to get involved but aren\u2019t ready to take the plunge into a fix yet, this is a good way to learn about the team and figure out the community culture of a project.<\/li>\n<\/ul>\n\n\n\n<p>Open source is a community \u2014 these projects often bring together contributors from all over with a range of different experiences and uses for a project. As with any group of people, sometimes the community can be unhealthy, so never feel pressured into contributing to a project because it\u2019s trendy or cool if you don\u2019t enjoy the way that you\u2019re interacting with the other people who work on the project. Large projects have been known to be completely separated due to unresolved tension between conflicting groups of maintainers, so be vigilant on the way that people on a project interact with each other and whether it\u2019s a group you want to contribute to. Your skills and time are valuable \u2014 make sure you find projects that reflect your values. Familiarize yourself with licenses that source code may be released under, and recognize that your contributions will be guided by that.&nbsp;<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Open Source for AR &amp; VR<\/h1>\n\n\n\n<p>There are a number of open source projects related to virtual and augmented reality, some of which I\u2019ve listed below.&nbsp;<\/p>\n\n\n\n<p><strong>VRTK<\/strong>\u2013 A great open source toolkit for Unity, <a href=\"https:\/\/github.com\/thestonefox\/vrtk\">VRTK<\/a> helps reduce overhead for VR development using the Unity game engine. Created by <a href=\"https:\/\/twitter.com\/The_StoneFox\">@The_StoneFox<\/a>, the VRTK project is a beginner-friendly repo that clearly outlines coding standards, a code of conduct, and issues that are open. The project also has a number of places where developers using the toolkit can share their ideas, including a Slack channel.<\/p>\n\n\n\n<p><strong>Aframe <\/strong>\u2013 Mozilla\u2019s markup language that wraps around the WebVR API, Aframe is an open source project that aims to make developing VR-enabled websites easier. You can contribute to <a href=\"http:\/\/web.archive.org\/web\/20210227003544\/https:\/\/github.com\/aframevr\/aframe\/\">Afram<\/a><a href=\"https:\/\/github.com\/aframevr\/aframe\/\">e<\/a> directly on GitHub, or to additional components of the Aframe framework (such as <a href=\"https:\/\/github.com\/haydenjameslee\/networked-aframe\">networked-aframe<\/a>) <em>JavaScript, CSS, HTML<\/em><\/p>\n\n\n\n<p><strong>Mixed Reality Toolkit <\/strong>\u2013 The Mixed Reality Toolkit is a project from Microsoft for developing HoloLens applications and applications for the Mixed Reality VR partner headsets. There is a <a href=\"https:\/\/github.com\/Microsoft\/MixedRealityToolkit\">Visual Studio based project<\/a> as well as a project <a href=\"https:\/\/github.com\/Microsoft\/MixedRealityToolkit-Unity\">specifically for Unity development<\/a>. <em>C++, C, HTML, Objective-C, C#<\/em><\/p>\n\n\n\n<p><strong>OSVR<\/strong> \u2013 an open-source <a href=\"http:\/\/www.osvr.org\/\">schematic for VR HMDs<\/a> and libraries for <a href=\"https:\/\/osvr.github.io\/contributing\/\">cross-platform<\/a> VR development with guidance from companies like Intel, Sensics, Razer, and Leap Motion. <em>Languages vary<\/em><\/p>\n\n\n\n<p><strong>ReactVR <\/strong>\u2013 <a href=\"https:\/\/github.com\/facebook\/react-vr\">ReactVR<\/a> is a framework from Oculus \/ Facebook for developing WebVR sites that utilize their React libraries. Primarily JavaScript based, this is a good project to look at if you\u2019ve already had some experience working with React for traditional apps. <em>JavaScript<\/em><\/p>\n\n\n\n<p><strong>LearnVR <\/strong>\u2013 <a href=\"https:\/\/github.com\/misslivirose\/learnvr\">LearnVR<\/a> is a project that I started a few years back to keep track of resources that I found helpful for learning more about virtual and augmented reality. It\u2019s woefully out of date and could absolutely use some love (and it\u2019s a non-coding open source documentation project!) so if you have resources or thoughts of things to add, I would love to hear what you find helpful.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A couple of weeks back, I saw a request on Twitter for information about how to go about starting or contributing to open source software and projects, and I wanted to share what my experience with OSS has been, and my recommendations for anyone looking to get more involved with it (especially focusing on virtual reality). Firstly, some background on my experience with open source: I started developing virtual reality applications and prototypes using the<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":0,"activitypub_interaction_policy_quote":"","activitypub_status":"","footnotes":""},"categories":[3,6],"tags":[],"class_list":["post-35","post","type-post","status-publish","format-standard","hentry","category-development","category-spatial-computing"],"_links":{"self":[{"href":"https:\/\/liverickson.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/35","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liverickson.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liverickson.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liverickson.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/liverickson.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=35"}],"version-history":[{"count":1,"href":"https:\/\/liverickson.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/35\/revisions"}],"predecessor-version":[{"id":290,"href":"https:\/\/liverickson.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/35\/revisions\/290"}],"wp:attachment":[{"href":"https:\/\/liverickson.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=35"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liverickson.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=35"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/liverickson.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=35"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}