Social Coding 2018 Recap

Ryan Lopopolo

I keep track of every open source contribution I have ever made with the #patch hashtag on my lifestream. 2018 wasn’t a big year, but it was my best so far. These are the contributions I made.

Contributions

Fix Resource Leak in Gunicorn

Gunicorn is a Python WSGI server. Gunicorn can be configured using a Python module that is loaded with exec. Gunicorn was not closing the file handle after opening the provided module, which resulted in a ResourceWarning: unclosed file warning. GH-1889 addresses the leak by opening and reading the module using a with block.

Fix Ansible Deprecation Warnings in lets-encrypt-route-53 Role

ansible-role-lets-encrypt-route-53 is an Ansible role that uses Amazon Route53 for the dns-01 challenge with the acme_certificate module. Ansible 2.7 deprecated using with_items to specify packages with package modules, e.g. apt. GH-14 updates the tasks to supply the list of packages directly to the module.

Reduce Scope of Tokio Dependencies in futures-locks

futures-locks is a Rust crate that provides Futures-aware locking primitives. futures-locks depended on Tokio, which is a fat dependency. tokio is intended to be an application crate dependency; a library crate should depend on tokio sub crates. GH-10 reduces the number of crates that futures-locks depends on from 51 to 3.

Successes in 2018

All of my PRs in 2018 are linting and warning shaped. By using these libraries, I experienced some of their unfinished edges first-hand. This helped narrow the scope of my first contributions to the projects. Narrowed scope breeds two benefits: the changes are good first issues and the changes are easier to merge.

Social Coding in 2019

Making an open source contribution has similar motivations to creating a startup: solve a problem you have in an environment you know. Sending a PR requires familiarity with the project; it requires you to have used the code. To send more PRs in 2019, I need to use more libraries, which means broadening scope and taking on projects in new domains.