My experience at Open Source Summit North America 2017

I’m a student with a lot of extracurricular activities. I’m a passionate open source developer, past Google Summer of Code 2016 & 2017 Intern, Google Code-in mentor, Software Developer(Skylabase Inc.), Docker Campus Ambassador, Buea Java User Group Leader, Google Code-in Org Admin(OpenMRS).

During my the Google Summer of Code 2017 applications, I remember having some discussions with my friend Konrad and asked if he’ll be applying for GSoC again this 2017 and he was like man, I’m not sure I’ll have the time to prepare a proposal, I’ll be traveling to Germany for CloudNativeCon and I’m like man that’s so cool. Who’s sponsoring and he said Linux Foundation. And I was like wow you must be a hell of a contributor to linux then. I was shocked to find out he had never contributed to any of Linux Foundations projects before the scholarship was awarded though he is a very passion open source developer like me and was also a GSoCer in 2015. I’m happy to say Konrad later became a 2017 GSoCer with Cloud Native Foundation something that wouldn’t have happen without attending their conference. Before this discussion with him I had been to Linux Foundations Events website a couple of times but I always felt like I’m not qualified for their scholarship since I had never contributed to any of their projects. So after hearing Konrad’s testimony I quickly visited the website again looking for interesting conferences to attend. Then I found Open Source Summit North America. That quickly got my attention. I looked at the content and found very interesting talks and amazing speakers. I was awarded the scholarship which was a complementary pass to all events at the conference. So I applied for travel funding too from Linux Foundation which was also awarded. The funds provided by Linux Foundation covered my round trip to LA and my hotel for 5 nights at JW Marriot L.A LIVE and also part of my visa fee.

The scholarship team at Linux Foundation was really helpful and very polite all the time even when I kept changing my mind sometimes. I was confused between Brussels and Ethiopian Airlines. Brussels was a shorter flight but more expensive while Ethiopia was less expensive but a very long flight with short connecting times. But I later on decided to take Ethiopia which I didn’t regret as I coincidently met two of my friends at the airport traveling to LA for the same conference with me on the same flight.

me teche and blaize.png
From left to right is me, Teche and Blaize

The flight to LA from Douala was a very long one since I took Ethopian Airlines. Was about 25 hours. At LAX, I was separated from the other guys at the customs border control. But I was fortunate enough to meet my GSoC mentor Judy Gichoya outside and we both headed to JW Marriot where I finally rejoined the guys.

 

at airport with mentor.png
Me and my GSoC mentor

The keynotes were really interesting. Most of the technical talks needed some prerequisite knowledge which I lacked. Most of the technical talks were was centered around sysadmins. So I mostly attended only the keynotes and leadership talks.

The change in time zone was kind of hard for me. LA is 8 hours behind Cameroon. So by 2pm I was already feeling very tired and sleepy.

I got to meet a lot of new people and some not new but met them for my first in person time like my mentor. I also met with a past GSoCer from India Vishwajeet Srivastava

gsocer.jpg
Me and Vishwajeet

I had a great time at the sponsors showcase too. Found out about a lot of cool technologies that these tech companies are using. Participated in a couple jackpots though I didn’t win any :(. I also got a lot of swag from the booths.

It was great watching the interview of Linus Tovalds by Jim Zemlin. What was even cooler was taking a picture with him 😀

IMG-20170911-WA0008
Me and Tovalds

Also met with some 2 Kenyan guys and a Cameroon based in boston

IMG-20170913-WA0000
Part of the African crew at OSSNA

One of the other activities I really enjoyed too was the 5k fun run. Though I got tired quickly and ended up been in the last group.

20170912_065649.jpg
morning before 5k fun run

 

We also had a bus tour which was short but fun.

20170913_070253.jpg
Getting ready for the tour

I got to take a picture at the Walt Disney Concert Hall

20170913_072513.jpg
Photo taken at the Walt Disney Concert Hall

The reception at Paramount Studios was one of the best. The choice of the venue couldn’t have been better. I saw a lot of movie artifacts. I even took a picture close to the famous star trek suit.

20170913_201402
Me at Paramount Studios

And at the end of the conference even though I didn’t get much from the technical sessions because they needed some exposure I lacked and also because they were mostly centered around sysadmins, at least I now know what I should be learning and the next time I come for a conference like this I’ll benefit more from the technical sessions. I also learned a lot from the leadership tracks and I’m now so much involved into mentoring. I’m mentoring 2 of my juniors from university to code on the LibreHealth Radiology project. I also volunteered to be Google Code-in Org Admin for OpenMRS and a Google Code-in mentor at LibreHealth.

This was a great conference. It broadened my perspective about tech and pointed to the direction I should be going and also made me understand that, there is a lot I still need to learn. I wish a lot of people from my community will get a chance like this. Attending events like this does not only motivate you to work harder but also builds new skills in you. I can’t thank Linux Foundation enough for this.

Advertisements

Setting up a development environment for LibreHealth Radiology without Docker

The recommended way of setting up development environment for LibreHealth Radiology  is using Docker. See this blog posts for instructions on how to use docker for your development environment. See blog post here Development environment with Docker.

But some people have been having some timeout issues with mysql using the docker setup. So this is an alternative way to setup your environment. But I’d recommend you try with the docker setup first.

Prerequisites

  • Java 8
  • Tomcat
  • mysql
  • git
  • maven
  • IDE

Please see their respective documentations for instructions on how to install them.

Procedure

Setup Toolkit

LibreHealth Radiology is just a module that runs on a LibreHealth Toolkit server. So to setup radiology you need to first setup a toolkit server.

Clone the toolkit code from GitLab

git clone https://gitlab.com/librehealth/lh-toolkit.git

Now build the code

cd lh-toolkit

mvn clean package

You might encounter a test failure during the build. I did. You should skip the tests using

mvn clean package -DskipTests

Now you need to deploy the generated .war file to tomcat. But the build generated an openmrs.war file instead of lh-toolkit.war. This is because toolkit is a fork from openmrs and the build still generates an openmrs.war instead. That is easy to fix. We’ll just rename the file to lh-toolkit.war. For that run the following code

cd /webapp/target/

mv openmrs.war lh-toolkit.war

Now you need to copy this .war file to the tomcat webapps folder. My tomcat installation directory is /Library/Tomcat. You need to replace that in the command below with your actual tomcat directory

mv lh-toolkit /Library/Tomcat/webapps/

Now you restart tomcat and open your browser to http://localhost:8080/lh-toolkit/

You’ll be presented with an installation wizard to complete the installation of toolkit.

 

Screen Shot 2017-09-27 at 9.55.04 PM.png

Select your language and take next

Screen Shot 2017-09-27 at 9.56.10 PM.png

Make sure simple install is selected and move forward

Screen Shot 2017-09-27 at 9.57.04 PM.png

Enter your mysql root password and move forward.

Screen Shot 2017-09-27 at 9.58.43 PM

Scroll to the bottom of this page and take note of the directory where the

lh-toolkit-runtime.properties file is kept.

Screen Shot 2017-09-27 at 10.01.10 PM.png

For me it’s in /Users/larry/.OpenMRS/lh-toolkit/ it might be different for you. Take note of it and move forward.

Screen Shot 2017-09-27 at 10.02.10 PM.png

Wait for installation to complete.

Screen Shot 2017-09-27 at 10.03.29 PM.png

If your output is like mine above that means you have successfully installed toolkit. The OpenMRS name there is a bug. I’ll create an issue for it. Now you need to install a user interface since as from 2.0 of toolkit the user interface was removed and it’s just an api server now. You are free to build which ever user interface you want to work interact with it.

For Radiology, we’ll be using the legacyui module. You have to clone and build it too then install the module. For that Follow the instructions below.

Install a User Interface

We’ll first clone the legacyui module from gitlab using

git clone https://gitlab.com/librehealth/lh-toolkit-legacyui.git

Now build a .omod file

cd lh-toolkit-legacyui/

mvn clean package

Once the build is done and successful, do

ls omod/target

And you’ll see a file called legacyui-1.2-SNAPSHOT.omod the version number may differ from this depending on when you doing the setup.

Remember the directory I told you to take note of, the directory containing the lh-toolkit-runtime.properties file?

Yes. That one. For me it was /Users/larry/.OpenMRS/lh-toolkit. There is a  subdirectory called modules. You have to copy the .omod file to that directory. For that do

cp omod/target/legacyui-1.2-SNAPSHOT.omod  /Users/larry/.OpenMRS/lh-toolkit/modules

Don’t forget to replace this /Users/larry/.OpenMRS/lh-toolkit/modules with the equivalent on your machine

Now restart tomcat and visit http://localhost:8080/lh-toolkit/

You should see this

Screen Shot 2017-09-27 at 10.58.38 PM.png

Instead of the page above you may see the error below

Screen Shot 2017-09-27 at 10.47.51 PM.png

Try restarting tomcat one or two times again and see.

You may notice that home page is a little different from the demo website. In the demo website the green bar is orange. That is easy to fit

Go to Administration under the maintenance section, click on settings

Screen Shot 2017-09-26 at 10.50.03 AM.png

You’ll see a setting for theme. Enter orange and safe.

Screen Shot 2017-09-26 at 10.51.38 AM.png

Your application should now look like below

Screen Shot 2017-09-26 at 10.52.18 AM

Now we are going to deploy the radiology module.

Deploy Radiology Module

The radiology module has dependencies on OpenMRS REST module and Open Web Apps module. You have to download those and install first before proceeding with deploying radiology. To get these modules visit https://modules.openmrs.org/#/search and search for open web apps to download the open web apps module. You should endup with a file named owa-1.7.0.omod. The version may differ depending on the time you do the download.

Search `rest webservices` to get the webservices module. You may see to versions like below. Don’t take the extension. See the screenshot below, the second one is the right one

Screen Shot 2017-09-28 at 12.57.04 AM.png

You’ll end up with a file like webservices.rest-2.20.0.omod and you can now install these omods just like you installed the legacyui module. But I’ll show you another method below how to do it graphically. This just so you know that this method is also available. In the future you are free to either us command line or this method.

While logged in to toolkit, go to Administration

Screen Shot 2017-09-28 at 1.01.59 AM.png

Click on manage modules

Screen Shot 2017-09-28 at 1.04.34 AM.png

Click on the Add or Upgrade Module button

Screen Shot 2017-09-28 at 1.05.44 AM.png

Now choose the omod files of the module you want to install and click upload

Screen Shot 2017-09-28 at 1.07.41 AM.png

Now proceed with radiology

Since you’ll be contributing to the radiology module, you should fork the repo.

Clone your fork

git clone https://gitlab.com/YourGitLabID/lh-radiology.git

cd lh-radiology

Add a remote pointing to the original repo

git remote add upstream https://gitlab.com/librehealth/lh-radiology.git

Fetch all branches

git fetch --all

Pull latest changes

git pull --rebase upstream master

Then build code

mvn clean package

That will generate a .omod file and you are free to deploy it using any of the methods see fit. You final home page should look like this, note the link to Radiology on the navbar

Screen Shot 2017-09-28 at 1.12.31 AM.png

Please leave feedback in the comment sections below.

 

 

 

 

 

 

 

 

Setting up development environment for LibreHealth Radiology using Docker

Introduction

The LibreHealth Radiology Module provides features of a Radiology Information System powered by LibreHealth Toolkit. It’s a spring framework application that uses JSP for it’s UI. There is a new UI in development that uses Angular 2/4 and communicates with the backend via REST but that UI is not production ready yet. To develop on the module you need a server running LibreHealth Toolkit(lh-toolkit). But good for you that has been dockerized.

We have a demo website you can visit if you just want to have a feel of the features. The link to the demo is https://radiology.librehealth.io/lh-toolkit/ and username and password is admin/Admin123

This tutorial is for those wanting to develop the backend. So it does not demonstrate setting up development environment for the Angular 2/4 UI. That will be in another blog post.

Prerequisites

To complete this tutorial, you need the following installed. Please see their respective documentations on how to install these on your platform.

  • Java 8
  • Maven
  • Git
  • IDE of your choice. I use Idea
  • Docker

LibreHealth Radiology runs on Java8 and uses Maven to build. Git is used to get the code and Docker packages the module in a docker image making deployment easy.

Procedure

Get the code

If you plan to make contributions to this module, you’d need to fork the repo on GitLab

Go to https://gitlab.com/librehealth/lh-radiology and fork the repo.

Clone your fork

git clone https://gitlab.com/YourGitLabId/lh-radiology.git

Add a remote repository pointing to the original repo on LibreHealth

cd lh-radiology

git remote add upstream https://gitlab.com/librehealth/lh-radiology.git

Fetch all branches

git fetch --all

Build your code

Make sure you are in the root directory of the project (lh-radiology)

mvn clean package docker:build

mvn clean package will compile your code to a .omod file which is just a custom file extension designed by OpenMRS for it’s modules. That is the file you’d have to deploy to a running toolkit server. But with introduction of docker you don’t have to worry about that.

docker:build builds a docker image from the contents of the compiled module. This docker image contains a Toolkit server, REST webservices, legacyui and your newly built radiology module all installed.

Run your application

mvn docker:start

Your application will be running on http://localhost:8080/lh-toolkit, default username and password is admin/Admin123

You should see this

Screen Shot 2017-09-26 at 10.43.27 AM

You may notice that this a little different from the demo website. In the demo website the green bar is orange. That is easy to fit

Go to Administration under the maintenance section, click on settings

Screen Shot 2017-09-26 at 10.50.03 AM.png

You’ll see a setting for theme. Enter orange and safe.

Screen Shot 2017-09-26 at 10.51.38 AM.png

Your application should now look like below

Screen Shot 2017-09-26 at 10.52.18 AM

 

Import your code into an IDE(Optional)

This step is optional and can be done at any point after getting the code. Must not be done after deploying the application. But I always chose to do it last or at least after building the code with mvn. This is because depending on your IDE, it maybe intelligent enough to identify this project as a maven project during import and while importing the module, your IDE may try to download all dependencies specified in the pom.xml of the project. This tends to take a while with some IDEs and sometimes fail even if it’s the first time these dependencies are been fetched. That is why I like building first because all the dependencies will now be cashed in your local maven repo and when importing into an IDE it won’t take much time.

 

 

There are a number of IDEs you can choose from. You may already have one you are using that like and that’s ok. I will not be showing how to do this with every possible IDE but with just the one I’m using InteliJ IDEA. If you use something else, please see it’s documentation on how to import maven projects.

Launch IDEA and select import project

Screen Shot 2017-09-26 at 11.00.24 AM.png

Select your project directory and hit next. Now select import from external model and make sure it is set to Maven

Screen Shot 2017-09-26 at 11.07.54 AM.png

Take next, next, next

When you asked to select and SDK, use Java 8. If you have not already setup an SDK, click on the plus sign to add and SDK then look for your java8 installation folder.

Click finish and your code will be imported by IDEA

Screen Shot 2017-09-26 at 11.11.12 AM.png

 

You can now make changes to the module. Every time you make a change, you have to redeploy the module but that is every easy. From the terminal, execute the following commands in the project folder

# first stop the already running application

mvn docker:stop

# then build again

mvn clean package docker:build

# and deploy

mvn docker:start

Creating a Radiology Report using MRRT Report template LibreHealth Radiology

Introduction

As of last year the LibreHealth Radiology module which was at that time under OpenMRS supported MRRT report templates. But these templates where not used in the creation of reports yet. This year during GSoC coding phase one, the MRRT templates are been used in creation of radiology reports.

This feature is not stable yet but for the purpose of GSoC evaluations I’m documenting it though a lot will change after GSoC evaluations are over. But the workflow will stay the same. The changes to be made about this feature will not be visible to end users but developers. The current way the report templates are been stored adds unnecessary complexity to the codebase and I already made a proposal to my mentors about refactoring and it was approved.

Procedure

Get the module

This code is not yet merged into LibreHealth so you’d have to clone of my own version of the code from https://gitlab.com/ivange94/lh-radiology/ and checkout the gsoc2017 branch and build then deploy to a running LibreHealth Toolkit 2.0 server. Also install the Open Web Apps Module and the Webservices module.

Configurations

Before you can go ahead and use the module to create orders and reports there are some configurations that need to be made before you can create orders and reports.

You need to set your orderable concepts before you can create an order.

Also you need to set a complex concept for the reporting tool to use when creating radiology reports. Radiology reports are saved as complex obs. To create complex obs you need to have at least one complex concept in your system. With my new proposal to change how the reports and templates are been stored, you won’t need to configure this. It will be removed but for now just bare with it.

Set Orderable Concepts

The screenshot below shows the property you need to set.

Screen Shot 2017-08-19 at 9.55.46 PM

You need to set the UUID of all concept classes you’ll want to be orderable. For this tutorial we are going to use the concept class Test

Procedure

Go to Administration/Manage Concept Classes and click on the Test concept class then copy the UUID.

Go to Administration/Settings/Radiology and paste the UUID in the Radiology Concept Classes box as shown above.

Set Complex Obs for Reports

As mentioned above, reports are saved as complex obs. For this there needs to be at least one complex concept in the system. You normally add concepts via a concept dictionary but for this we’ll go ahead and create one just for testing purposes.

Create a complex concept

Go to Dictionary and click add new concept. For testing purposes you can name your concept anything. The most important thing is to make sure it’s datatype is set to Complex and the handler is set to TextHandler

Screen Shot 2017-08-21 at 12.06.57 PM

Save your concept and copy it’s UUID

Screen Shot 2017-08-21 at 12.09.53 PM.png

Go to Administration/Settings/Radiology and paste the UUID to the complex class box

Screen Shot 2017-08-21 at 12.12.10 PM

You are now set up to create Orders and Reports.

Create an Order

In the Radiology dashboard under the Orders tab

Screen Shot 2017-08-21 at 12.22.41 PM

Click on Add Radiology Order to add a new order. To be able to report this order you must set it’s status to Completed.

Screen Shot 2017-08-21 at 12.32.59 PM.png

Under the report section you’ll notice a dropdown with a default of Free Text Report. We are going to create an MRRT report and for that you need to have an MRRT Report template.

You can add an MRRT template by importing it from the Report Templates Tab on the Radiology dashboard

Screen Shot 2017-08-21 at 12.35.36 PM

When creating a report select MRRT Report and search for a template to use for your report. I have one template in my system so I’ll search of Cardiac MRI

Screen Shot 2017-08-21 at 12.39.09 PM

Select your template and click claim report. You’ll be presented with a template editor that uses the template you selected.

Screen Shot 2017-08-21 at 12.40.21 PM

Enter principal results interpreter/Provider and complete your report.

GSoC Final Coding Phase Week 1

The first week of the final coding phase just concluded and for this phase my job was to fetch actual data from the backend via REST.

The screenshot below shows actual orders that are fetched from the backend via REST

Screen Shot 2017-08-06 at 2.51.27 PM

And below are reports fetched from the backend

Screen Shot 2017-08-06 at 2.51.41 PM

More work still needs to be done on how the data is displayed on the tables. I intend to make the table paginated so that it will reduce the load time when reports are been fetched. There are some angular components for data tables that implement pagination but I’ll implement mine. I’ve tried a couple that didn’t work and were not very user friendly.

The app currently only interacts with the backend by fetching data. The next step is adding data. The starting point is radiology orders. And that is the complicated one as during the order creation process a lot of REST calls have to be made to the backend.

When creating an order, you need a patient, provider, imaging procedure, etch and all have these have to be obtained via REST search. See order dialog below

Screen Shot 2017-08-06 at 2.51.59 PM

Once we are able to add orders via REST, the next hard part to implement via REST is Report Template import.

Commits this week

https://github.com/ivange94/lh-radiology-owa/commit/7c54d68b30bb34e713c6a76c59022ccda2a35783

https://github.com/ivange94/lh-radiology-owa/commit/9099e3d994919577fca1810fccf2b0169cb128d0

https://github.com/ivange94/lh-radiology-owa/commit/46bfed004007a54ac49a9eca66fc7d784d96211e

 

 

OpenMRS Implementers Meeting 2016 Experience

I have procrastinated for a long time about writing this. Especially since I’ve been busy with GCI16 mentoring, OpenMRS help desk, internship and other personal adventures. But its finally here.

I have been around OpenMRS for two years now since I saw an OpenMRS flyer in a friends note book I borrowed. Can’t remember what the flyer was about though, but that is how I got to know OpenMRS.

My contributions to OpenMRS involves bug fixes and implementing new features. I also help other community members especially new comers with the technical issues they are having since I had much help to from the community when I was starting. And community members like Daniel Kayiwa would not sleep unless my problem was solved. It felt good giving back to the community. I participated for my first in GSoC as a student with OpenMRS. Currently I’m a GCI-2016 Mentor with OpenMRS. I am also one of the help desk managers at OpenMRS. Where I coordinate cases and make sure issues are responded to by the right team and in time. I also follow up with issue creators to make sure their problems are solved and they are satisfied or if they need more assistance.

My story about the OpenMRS 2016 implementers meeting began a little after GSoC 2016. After I had passed the final evaluations, few weeks later I received a mail my mentor Judy Gichoya telling me about a mail from Google Summer of Code which says she can endorse her GSoC student for a $500 travel stipend to attend any conference. Knowing much about my desire to attend conferences and also to finally meet the OpenMRS Community physically, she told me to apply for the stipend and also apply for an OpenMRS Scholarship which I did. The $500 stipend was approved within 24 hours but due to the massive amount of OpenMRS scholarship applicantions my approval came about 6 weeks after my application. I received a mail from Jeff Neiman about my scholarship approval. OpenMRS funded my flight expenses, hotel reservation for 6 days at the Speke Resort, Muyonyo and my conference registration.

I arrived Uganda on the 6th of December 2016 and suprisenly OpenMRS had already arranged for my transportation from the airport.

20161206_085517

The drive from the airport to the hotel where the conference was taking place was a long one and 1 hour later I finally met with the OpenMRS community members in person. This was  a really amazing experience. I introduced my self to everyone I recognized, Jan Flowers,Darius Jazayeri , Burke Mamlin, Sri Maurya Kummamuru, Daniel Kayiwa, Kawesi Joseph, Jeff Neiman, Paul Biondich, Theresa Cullen, Suranga Kasthurirathne, Mike Seaton, etc, etc. The list is really long. It was so nice to finally meet all of them. The OpenMRS community is like no other I’ve seen. I’m glad to be part of this awesome community.

img_4krxv5
Me, Sri Maurya Kummamuru, Darius Jazayeri (from left to right)

Conference started with the singing of the Uganda national anthem.

uganda_anthem
Photo by Jeff Neiman

I enjoyed the sessions. I learnt a lot about OpenMRS and Bahmni. And now I perfectly sure of which distribution I need to start an OpenMRS implementation here in Cameroon.

20161207_092416
Photo taken just before the start of unconference sessions.
20161207_113711
Shruthi Pitta from Bahmni talk about Bahmni distribution.

cy_-p-lxcaeaimq

czeauoxwiaa06h8

We also visited sites using OpenMRS. My group visited the Kisugu Health Centre.

20161207_150254
Uganda EMR in use.

Listening to Matthew Ssemakadde lead a session about OpeMRS education was really awesome. We talked about how make the OpenMRS implementers and developer certifications successful.

img_20161210_181050
OpenMRS Certification Program session

Unlike most conferences, OpenMRS 2016 was not only about talk, talk, talk. There was also entertainment. There was football match of Uganda vs The rest of the world which I think ended in a draw. I last played football in primary school. Which is about 10 years ago. So yes I’m not in field. lol

20161207_183324

We also had entertainment during dinner at the Lake side on Thursday Dec 8.

czlanjjw8aennlc
Photo download from Burkes twitter post

We all dressed in our OpenMRS T-shirt in time for the group photosczjpubjusaa5ylq

I volunteered to lead the OpenMRS hackerthon with a tutorial for using the OpenMRS SDK which I ended up learning a lot my self.

img_20161210_181540

Shruthi Pitta submitted her first pull request to openmrs after fixing a bug during the hackerthon.

img_20161211_152800

The hackerthon ended the last day Sunday Dec 11, 2016 with good bye selfies.

20161211_175022
Selfie taken by Tadeo

The experience was an amazing one and I say a big thank you to OpenMRS for the funding to attend and Google for the travel stipend. This wouldn’t have been possible without them.

Why Should Students Contribute To Opensource Projects?

At SMCONFB16 which was on the 18th of June 2016, I saw a lot of skepticism from people especially students about getting involved with open source projects. Their concerns were centered around the point, “How do you make money from it, if you give it for free?”.

There are obviously a lot of benefits to anyone contributing to open source projects but this blog post is targeted towards students and especially the ones in a computer science related field of study.

First I would like to say that most of us don’t do it for the money but for the love of it. And contributing to open source is a way of giving back to the community. I know you’d say love alone cannot put food on our tables at least thats what the girls say. But I would like to let you know that as a student there are actually a lot of benefits of contributing to open source projects including financial.

I think the most valuable asset of been part of an open source project is the experience and skills you’ll acquire. Not everything can be taught in class. Open source gives you the opportunity to practice and master software engineering skills taught in class and even learn new things. These include communication skills, project management skills, leadership skills and how to work in teams. You’ll also learn how to use popular software engineering tools like git. Experience gained from open source will help you in your future jobs since most of the tools used in open source projects will be the same you’ll use in your jobs. In open source you get to learn from very talented people who are also volunteering their time to create software and mentor others. You also get to learn about things like convention and culture of a community. You might be the best developer but if you don’t follow a community’s culture, you will not go far in that community.

We usually need internships to master what was taught in class and also learn new things. But getting an internship to work on what you love doing is not very easy. Considering the fact that our environment is made of mostly startups and very little or no giant tech companies, our options for internships are limited because most of this startups will not do what you want. That is, the work that the startup is investing in may not be of interest to you. For example one of my friends loves to do his internship in Artificial Intelligence but how many startups can he find doing that? As a startup, I want to start making money fast so that i can pay my bills, pay my developers and also get something from it. Hence I will always go for the thing that will make it to the market very fast and start selling. As a result most startups do only web development and mobile development using Ionic(if they do any mobile programming at all), since these are easier and can make it to the market very fast. But how many of us actually like building websites or building hybrid apps?  With open source, you have the liberty to choose what you want to work on. There are open source projects for almost any computer science related field for example, Web development, frontend javascript, database, backend, design, compilers, operating systems, systems programming, network security, etc. Hence finding what you love to work on is just a matter of few Google searches.

Your open source contributions will increase your chances of getting your dream job. When you contribute to an open source project, you don’t need to tell employers what you’ve done. You just tell them to Google search your name(that was a joke you obviously have to tell them even if they already know ). Your reputation as an open  source developer will always precede you. Most of our dream jobs will require an experience level of at least 3 years. But after you just graduate, that is something you’ll lack. So you can make up for that by working on big open source projects while you are still a student.

Open source will connect you to the right people. While working on open source projects you get to make a lot of friends. I don’t mean friends that you play football with or go get drunk with(yes you’ll get that too and thats awesome too) but i mean influential friends that can help you attain the level you want in life. Friends that will give  you the advice you never knew existed. Friends that will open your eyes to the opportunities you are ignorant of. Friends that will connect  you to other friends and soon you’ll become a testimony. I mean it, you will be talking with people that others can only read about on the Internet or watch on TV.

That been said, open source is not only about learning and meeting people or increasing your chances of getting jobs. As a student, you can actually make a lot of money as and open source developer. A lot of you are familiar with Google Summer of Code(GSoC) program where Google pays students  $5500 to work on open source projects. For the past years about 30 students from Buea have had the privilege to be part of this program and if you ask from them they’ll tell you that, this is an opportunity you should never miss.  I can vote for this because am a GSoCer my self. Imaging getting paid $5500 to work on something you have passion for. Being a GSoCer will not only benefit you financial but also all the above points will be part of your benefits. GSoC is not the only open source internship out there. You can see more of such internships from this blog post, summer-internships-for-open-source-enthusiasts. The  open source organizations you contribute to may also end up employing you.

A good example of a testimony of contributing to open source is Nyah Check. Most of us know him. If you don’t just google search his name. Due to his contributions to open source, he has done GSoC 3 times and has also traveled out of this country more than 4 times without him spending a dime. Recently he’s traveled to the US twice in 1 month to attend conferences. And while at the conferences he gets to meet a lot of influential people in the tech community.

There are obviously a lot more benefits of contributing to open source projects, but if the above don’t inspire you, then there is no need for me to continue further. For those of you that have been inspired, I encourage you to go to opensource.com and learn about new & interesting projects. Browse projects on GitHub. Or read about GSoC.  There are a lot of articles about how to get started with open source but if you want something that is not already published, all you need do is leave a comment.