{"id":15490395,"url":"https://github.com/theodesp/things-i-learned-while-opensourcing","last_synced_at":"2026-02-20T15:32:47.470Z","repository":{"id":97066634,"uuid":"99819982","full_name":"theodesp/things-I-learned-while-opensourcing","owner":"theodesp","description":"Things I've learned while open-sourcing. Experience from the trenches.","archived":false,"fork":false,"pushed_at":"2017-08-31T11:31:09.000Z","size":6,"stargazers_count":2,"open_issues_count":0,"forks_count":2,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-20T08:32:04.566Z","etag":null,"topics":["knowledgebase","opensource","pragmatic"],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/theodesp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-08-09T14:50:45.000Z","updated_at":"2018-02-03T11:54:28.000Z","dependencies_parsed_at":"2023-04-22T21:14:03.100Z","dependency_job_id":null,"html_url":"https://github.com/theodesp/things-I-learned-while-opensourcing","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/theodesp/things-I-learned-while-opensourcing","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theodesp%2Fthings-I-learned-while-opensourcing","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theodesp%2Fthings-I-learned-while-opensourcing/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theodesp%2Fthings-I-learned-while-opensourcing/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theodesp%2Fthings-I-learned-while-opensourcing/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/theodesp","download_url":"https://codeload.github.com/theodesp/things-I-learned-while-opensourcing/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theodesp%2Fthings-I-learned-while-opensourcing/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29655307,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-20T09:27:29.698Z","status":"ssl_error","status_checked_at":"2026-02-20T09:26:12.373Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["knowledgebase","opensource","pragmatic"],"created_at":"2024-10-02T07:20:56.282Z","updated_at":"2026-02-20T15:32:47.451Z","avatar_url":"https://github.com/theodesp.png","language":null,"readme":"# things-I-learned-while-opensourcing\nThings I've learned while open-sourcing. Experience from the trenches.\n\n## Getting started\n\nThis project is a collection of valuable knowledge topics I've accumulated while contributing to opensource projects. I've laid\ndown a table for each project I've contribute and made some useful remarks.\n\n[binaryornot](https://github.com/audreyr/binaryornot)\n---\n* Checking if a file is binary is not a trivial job. One has to perform a series of heuristic checks to see if a file is considered\nbinary. See [link](http://eli.thegreenplace.net/2011/10/19/perls-guess-if-file-is-text-or-binary-implemented-in-python/)\n* Python has a libary called [chardet](http://chardet.readthedocs.io/en/latest/usage.html) that detects with a certain probability the encoding of a file.\n* In general if a file containes a high ratio or non printable chars or some certain null bytes it is considered binary but not all the times.\n\n[Inversify](https://github.com/inversify/InversifyJS)\n---\n* Inversion of control is more than having a map of keys and objects. Often you need more customization.\n* Inversify.js has a really good project structure for Typescript apps.\n* [Reflect-Metadata](https://www.npmjs.com/package/reflect-metadata) Can be used to add additional meta properties to parameters or classes\n* Decorators can be usefull for adding metadata properties in a seemless way.\n* Its important to have a good PULL_REQUEST_TEMPLATE, CONTRIBUTING and ISSUE_TEMPLATE to our projects.\n* [Appveyor](https://www.appveyor.com/) is really cool CI for Windows.\n\n[Cookiecutter](https://github.com/audreyr/cookiecutter)\n---\n* [Click](http://click.pocoo.org/5/) is as really cool package for creating beautiful command line interfaces.\n* [Jinja Templates](http://jinja.pocoo.org/) has really cool features for debugging and sandboxing.\n* [pytest](https://docs.pytest.org/en/latest/) is the defacto testing framework for python.\n* Pytest with --cov reporting does not work well with PyCharm.\n* You can pass a custom environmnent to [Popen](https://docs.python.org/2/library/subprocess.html#popen-constructor)\n* Windows accepts only strings for env variables. Use os.pathsep to enable crossplatform separators.\n\n[RQ](https://github.com/nvie/rq)\n---\n* [rg](https://www.mankier.com/1/rg) is a command line tool similar to grep and silver searcher\n* [SIGRTMIN](https://dougsland.livejournal.com/43885.html) Signals are not defined for MacOS\n* [twine](https://pypi.python.org/pypi/twine) Is a tool to help you interact with PyPi\n* [flushdb redis command](https://redis.io/commands/flushdb) clears all keys of a database. This command never fails.\n* In old python runtimes `assertIsNotNone` is not defined\n* `unicode` command is not defined for python3\n\n[angular-es6-mobx-flux-example](https://github.com/theodesp/angular-es6-mobx-flux-example)\n---\n* Angular 1.5+ versions introduced Lifecycle Hooks and Components [Link](https://toddmotto.com/angular-1-5-lifecycle-hooks). so its really easy to write clean angular code that resembles React Components.\n* ES6 in Angular 1 is not so bad. We can leverage the power of Mobx to have a very scalable applications without having to learn another framework.\n\n[Cache Line](https://github.com/theodesp/cache-line)\n---\n* [Node Gyp](https://github.com/nodejs/node-gyp) Can be used to write native applications in C/C++ and reference them in Node.\nThe only problem is that [Node C++ Documendation](https://nodejs.org/api/n-api.html) is not very good.\n\n[Kyt-starter](https://github.com/theodesp/kyt-starter)\n---\n* [Kyt](https://github.com/NYTimes/kyt) Is a very versatile foundation for building webpack apps. Its one of the easiest tools to use.\n\n[fetch-future](https://github.com/theodesp/fetch-future)\n---\n* *Futures* are one of the best alternatives to Promises [See why](https://github.com/fluture-js/Fluture/wiki/Comparison-to-Promises) as they are composable and cancelable.\n\n## Contributing\nIf you like this project and you would like to share your valuable knowledge you can clone/for the project and Submit a PR.\n\n## Licence\n\nMIT © Theo Despoudis\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftheodesp%2Fthings-i-learned-while-opensourcing","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftheodesp%2Fthings-i-learned-while-opensourcing","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftheodesp%2Fthings-i-learned-while-opensourcing/lists"}