Skip to main content

My First Open Source Contribution

It's my dream to contribute to open source. It is all started in 2 year of college i came to know the linux is so much awesome to work and learn about computer and know about github where you can find the open source software code.

I thought, I need to learn more to contribute to the software community later i read lot of article about contributing to opensource.

Every article say
  • Learn a programming language you like.
  • Find a project written in programming language you choose.
  • Read it.
  • Use it.
  • Find any bug open a issue.
  • Fix the issue
Seems like simple as pie. I thought let's give it a try

My scenario
  • I use C to solve program in hackerrank and other coding sites and i know little bit about C++ and java at the time.
  • when i searched for the project, all project are seems to be dinosaur huge, Finally i convinced myself and pick a project.
  • I started reading the source code.
  • It donot understand lot of code and i donot know where to find those answers.
then frustrated and QUIT.

Well i cannot forgive myself that i cannot do anything.

I haven't thought about it for few years. I started learning different language and using git to store couple of my project that i done in my college days.

Things tends to change sudden when

I logon to Reddit platform and subscribe to programming language subreddit that i like and check few article when i have free time
Suddenly i saw Newsboat software migrating from language C++ to Rust ( If you donot know newsboat, it is a command line highly configurable rss reader )
I thought - can i contribute to this project
I dropped a comment in that article that i like to contribute to it and i donot know where to start

Link to the Article
Well i got the reply and i followed what exactly he told then

I forked the repository and check the source code

Also i checked the issues of once in a while, suddenly author of the repository opened a new issue " Port utility functions with simple arguments to Rust " so i checked the utility file i have seen few function that are simple

Well my mind said this is the time to make your dream come true. I select function  "get_default_browser" which is to get the environment variable of BROWSER if it not exist then lynx is returned

I checked how to set and remove environment variables in rust implemented it and ported c++ test case to rust and run the test cast. Well we need to also run the C++ test case to check ported rust code works

To run C++ test i decided to use a docker container, I pulled rust container from docker repository
and install necessary dependency that are required by the software and i ran the test

Guess what, Failed :(
OOPS the test case failed are not due to my code ( big relief ) then i searched the github repo to find a way to contact the maintainer to tell my problem

i found IRC ( Internet Relay Chat ) channel #newsboat so i joined the channel and asked the question and i waited for about 2 hours after that i got the reply then i try the solution he provided to pass the failed testcase but it didn't work so i was spending half the day fighting with this  and him on the other hand giving few solution

After that we found out I used container so it has no locale.
(locale - parameters that defines the user's language, region and any special variant preferences that the user wants to see in their user interface Eg: en-US means English UnitedStates)

Then i ran all the test Voila all test are passed so i made a Pull Request to the Main repository and checking for his commands



Yikes i have written unit test case which is not suitable for this scenario because changing the environment variable may affect other test case behavior so he told to convert those into Integration test and also specified.



So i created a struct EnvVariable which can be used to set and remove environment value and once
the test case is done it will replace the new value with old value So i made the pull request again





Nope..

Well he told to remove EnvVariable struct because integration test runs seperatly so i didn't affect other. I went to home for Festival ( i stayed there for 6. days) when i checked my bag i forgot to bring laptop charger so i cannot do the change. Then after i came to work i made the pull request

and ....

ACCEPTED



I was very happy that i finally contributed to the open source



Things i learned from this contribution
  • I learned about integration test.
  • configuring locale in linux
Contributors are awesome they were very humble and answered all my question.

issue link: https://github.com/newsboat/newsboat/pull/344
project link: https://github.com/newsboat/newsboat




Comments

Post a Comment

Popular posts from this blog

Docker

Docker is used to run software packages called "containers". Containers are isolated from each other and bundle their own tools, libraries and configuration files; they can communicate with each other through well-defined channels                                                                                                --Wikipedia  I have already written a article about the containers you can check out in here https://thangaayyanar.blogspot.com/2018/06/containers.html This time, let's learn more about docker engine how we can use this. The important things we need to know in docker are Docker Image:  The container can be created with the help of Image. The Image file consists of code, libraries, environment variable...

BlockChain

As the name says chain of block Now what is a block?       A block typically contains a  cryptographic hash of the previous block,  a timestamp transaction data    Where it is used?      It is the backbone of cryptocurrency i.e it ensure the security and integrity of data. The usage doesn't stop here well blockchain are resistant to modification of the data. so it can used in Bank Identity verification Hospital records and much more   How it ensures security and integrity of data? Block added to the chain, contain the hash ( result obtained from hash algorithm such as MD5,SHA) of the previous block so changes in one block lead to mismatch. Proof of work algorithm - Adding a node in the block chain require validation whether the new block is valid or not which is done my miner if they find the valid hash they will be rewarded How to do one?      The most interesting part ...

My experience in iOS Hackathon

This is my second hackathon, my first hackathon was on machine learning if you want to check out that article by following the below link https://thangaayyanar.blogspot.com/2018/02/what-i-learned-from-machine-learning.html So let's get started First let us discuss about the idea of what we are trying to achieve in this hackathon. From the above image you can able to know that we are going to recognize text from the image and use it to do find which field it is.  we separated this idea into three modules Identify the region Recognize the text  Field classification Module I : Identify the region To identify the selected region we used Vision framework ( ML framework provided by apple to detect the object ). The vision framework give us the boundary of the text region ( i.e frame - x,y,width,height ).  Then using the above region we crop the selected region and pass it to the next module. Module II : Recognize the text To recognize the text we ...