Release 0.2.1 or, How Hacktoberfest Ruins Everything. Me too. Probably.
Tags: opensource, javascript, node, hacktoberfest
Published: 2020-10-02 03:54:03

It’s October 1st 2020 at 11:45PM and I’m exhausted. It’s not that late but it’s been a long day and week so far. Perfect time to talk about my [OSD600 release 0.2 assignment](https://github.com/Seneca-CDOT/topics-in-open-source-2020/wiki/release-0.2):  **Hacktoberfest** 🎃


Hacktoberfest is an annual month-long celebration of all things open-source, lovingly (_melodramatically_?) described as “Open source is changing the world – one pull request at a time.” It’s also quite controversial in the eyes of many people. In fact one of the first hits when searching for Hacktoberfest on google is a [blog article](https://blog.domenic.me/hacktoberfest/) LINK where the author goes on to call the festival a month long DDOS attack on repo maintainers. It’s actually an interesting read, and I understand and empathize with those who concur.

___

Anyway, my job for OSD600’s month long 0.2 assignment is to create four pull requests. I’ve made it my goal this month to contribute only bug fixes and feature requests to projects and to avoid what others might describe as _part of the problem_ unless otherwise specified by the repository. I’m doing my part. Well, trying to at least. We’ll see how it goes.

I surprisingly had some extra time today and instead of scouting out repos for Hacktoberfest as planned, I decided to jump right in and try to tackle an issue in a messaging app called [Rambox](https://github.com/ramboxapp/community-edition). Rambox is a messaging and email app that allows you to have several “tabs” of messaging apps open to avoid having several messaging apps running in the background. It does this by running instances of the chat application’s web app, so you don’t actually run the main app, just a localized web version of it. I use it at least hourly and actually mentioned it in [my first blog post](https://dev.to/chrispinkney/who-is-chris-3fp). I poked around their repo and noticed [an issue](https://github.com/ramboxapp/community-edition/issues/2828) asking the developers to add support for two web apps that he uses. I figured I might be able to handle, and sent my comment to the developers asking to be assigned to the issue. The hunt was on.

<p align="center">
  <img width="720" height="400" src="https://www.fossmint.com/wp-content/uploads/2017/03/Rambox-Messaging-Emailing-App.png">
</p>


The first steps was to fork, clone, branch, and build. But in actuality the real first step was figuring out how the hell his app works. It’s built with Electron, JS, and something called [Sencha JS Ext](https://en.wikipedia.org/wiki/Ext_JS). Sencha is a JS application framework that allows for the creation of JS based web applications. Next to that you have [Electron](https://en.wikipedia.org/wiki/Electron_(software_framework)), which is a framework (developed by GitHub actually) that allows developers to create desktop applications using Chromium and Node.JS. There’s actually a lot of interesting criticism regarding Electron’s bulky overhead since it’s inherently bundled with Chromium.

After doing a bit of research and digging, I tried to figure out how to add new services to Rambox. I searched through the repo trying to find a file that specified the actual services it currently uses, if I could find this I could use it to model a new service. I couldn’t for the life of me find any reference to any service. What the hell?! Did they obfuscate their (surprisingly **GPLv3**) code for some reason?

R T F M. rtfm. RTFM! Their [CONTRIBUTING.md](https://github.com/ramboxapp/community-edition/blob/master/CONTRIBUTING.md#adding-or-editing-services) specifies how to add a new service… So much time wasted. It’s not very well documented and I still couldn’t figure out how to access this service JSON file to add new services. I combed through old master branch commits and [finally found a PR](https://github.com/ramboxapp/community-edition/commit/836abd07ffa95b56a53b56a596d999a279292324) that added a feature. Interesting they store a JSON file with a list of services they support (and their respective websites) in a branch called `gh-pages` which acts as an API.

<p align="center">
  <img width="220" height="166" src="https://media.tenor.com/images/f6118644d384fe84551e753c9aeaf920/tenor.gif">
</p>

Once I figured out how to `git checkout` to this branch (which wasn’t as simply as it usually is) I added my new two services, pushed to origin, and changed the main app’s API location (to point to my own fork’s `services.json`) so I could test my changes. I then used `sencha app watch` to build the app and `npm start` to start it surprisingly it worked! I tested the two services and both worked as expected. Hurray! I then [submitted my PR](https://github.com/ramboxapp/community-edition/pull/2841) and started to play the waiting game.

---

It was thrilling to actually see the app work out of the box, and though my changes were small I learned a lot about how the app works and also more about how Git works. If I’m being honest I spent more time fighting with Git and doing research than I did actually programming. I’m starting to come to the conclusion that programming is only 10% part of the job.

Sorry for the tl;dr. Here’s a picture of my cat.

![enter image description here](https://i.imgur.com/KESAKl6.jpg)