diff --git a/README.md b/README.md index d8fe67f..657318d 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,10 @@ -Open Source Efforts at The Obvious Corporation +Open Source at Medium ============================================== This repository serves as the umbrella project to represent the -various open source efforts at The Obvious Corporation -. Come here to get an overview of the various -projects, to learn how to contribute to them, and to sign up as a -contributor. +various open source efforts at [A Medium Corporation](https://medium.com). +Come here to get an overview of the various projects, to learn how to +contribute to them, and to sign up as a contributor. Table Of Contents ----------------- @@ -17,11 +16,15 @@ On this page: Other pages: -* [Sign the OCLA](https://github.com/Obvious/open-source/blob/master/sign-ocla.md) -* [OCLA Rationale](https://github.com/Obvious/open-source/blob/master/ocla-rationale.md) -* [Contributors](https://github.com/Obvious/open-source/blob/master/contributors) -* [Obvious Contributor License Agreement 1.0](https://github.com/Obvious/open-source/blob/master/ocla-1.0.md) -* [Apache License 2.0](https://github.com/Obvious/open-source/blob/master/apache-license-2.0.md) +* [Sign the CLA](https://github.com/Medium/opensource/blob/master/sign-cla.md) +* [CLA Rationale](https://github.com/Medium/opensource/blob/master/cla-rationale.md) +* [Contributors](https://github.com/Medium/opensource/blob/master/contributors) +* [Contributor License Agreement 2.0](https://github.com/Medium/opensource/blob/master/cla-2.0.md) +* [MIT License](https://github.com/Medium/opensource/blob/master/mit-license.md) + +Style guides: + +* [JavaScript](https://github.com/Medium/opensource/blob/master/styleguides/JavaScript.md) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * @@ -30,53 +33,56 @@ Note to External Contributors Hello, External Person! -We at Obvious are eager to work with you. For small changes — -little bugfixes, correcting typos, and the like — please just -submit pull requests to any of our projects. For larger changes, -though, we have to ask you to jump through a little hoop. +We at Medium are eager to work with you. For small changes — little +bugfixes, correcting typos, and the like — please just submit pull +requests to any of our projects. For larger changes, though, we have to ask you to jump +through a little hoop. -In particular, in order for us to accept any major patches from you, -you will have to electronically sign a statement that indicates two -things: +In particular, in order for us to accept any major patches from you, you will have to +electronically sign a statement that indicates two things: * You are willingly licensing your contributions under the terms of - the open source license of the project that you're contributing to. + the open source license of the project that you’re contributing to. * You are legally able to license your contributions as stated. -The reason we do this is to ensure, to the extent possible, that we -don't "taint" the projects we manage with contributions that turn out -to be improper. This protects everyone who wants to use the projects, -including *you*! If you want a longer explanation, then you can check -out the [OCLA Rationale -page](https://github.com/Obvious/open-source/blob/master/ocla-rationale.md). +The reason we do this is to ensure, to the extent possible, that we don’t “taint” +the projects we manage with contributions that turn out to be improper. This protects +everyone who wants to use the projects, including *you*! If you want a longer explanation, +then you can check out the [CLA Rationale page](https://github.com/Medium/opensource/blob/master/cla-rationale.md). -Once you sign the Obvious Contributor License Agreement (the "OCLA"), -we will then be able to merge your contributions with a clear -conscience and with only the friction that results from the usual -technical back-and-forth of a vibrant open source project. +Once you sign the Contributor License Agreement (the “CLA”), we will then be able to +merge your contributions with a clear conscience and with only the friction that results +from the usual technical back-and-forth of a vibrant open source project. To get started with this process, visit the -[Sign the OCLA](https://github.com/Obvious/open-source/blob/master/sign-ocla.md) +[Sign the CLA](https://github.com/Medium/opensource/blob/master/sign-cla.md) page. -For reference, the standard open source license used by The Obvious -Corporation is the -[Apache License 2.0](https://github.com/Obvious/open-source/blob/master/apache-license-2.0.md) -with a small clarifying preamble. +For reference, projects manageed by A Medium +Corporation include some using +[MIT License](https://github.com/Medium/opensource/blob/master/mit-license.md) +with a small clarifying preamble and some using +the [Apache 2.0 License](https://github.com/Medium/opensource/blob/master/apache-license-2.0.md). + +In addition to our CLA, we have a policy where we avoid owning code that we don’t intend +to maintain through use. If your patch is not in-line with our intended use case +at Medium we will not merge it into any of our trees. But don't be discouraged! If +that’s the case, we encourage you to run your own fork. Email us with a link to it +and we will consider linking to it from the main repo. If you have any questions about any of this, please raise them by -filing a bug on this project, since there's a good chance that if you +filing a bug on this project, since there’s a good chance that if you have a question then someone else has the same question too. If it is -really and truly a private matter, then you can mail Obvious's +really and truly a private matter, then you can mail Medium’s official Open Sourceror privately, at -[open-source@obvious.com](mailto:open-source@obvious.com). +[open-source@medium.com](mailto:open-source@medium.com). Thanks, and happy hacking! Cheers, -Your friends at The Obvious Corporation +Your friends at A Medium Corporation * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * @@ -88,45 +94,33 @@ List of Projects These are [Node](http://nodejs.org/) modules that can be used pretty directly as libraries in applications. -* [Async Builder](https://github.com/Obvious/asyncBuilder) — - Asynchronous dependency loading "the cool way". -* [Bidar](https://github.com/Obvious/bidar) — Binary serialization - and object iteration. -* [Composers](https://github.com/Obvious/composers) — Asynchronous - programming framework. -* [Daemon Sauce](https://github.com/Obvious/daemonsauce) — Making +* [Daemon Sauce](https://github.com/Medium/daemonsauce) — Making it easy to be a proper *nix daemon. -* [Falkor](https://github.com/Obvious/falkor) — HTTP Level Functional +* [Dynamite](https://github.com/Medium/dynamite) — A promise-based DynamoDB client. +* [Falkor](https://github.com/Medium/falkor) — HTTP Level Functional Testing Library. -* [Leb](https://github.com/Obvious/leb) — Utilities for the LEB128 - number representation. -* [Matador](https://github.com/Obvious/matador) — Application +* [Kew](https://github.com/Medium/kew) — A lightweight promise library optimized for node.js +* [Matador](https://github.com/Medium/matador) — Application framework. -* [Oid](https://github.com/Obvious/oid) — Utilities for object +* [Oid](https://github.com/Medium/oid) — Utilities for object identity. -* [Pipette](https://github.com/Obvious/pipette) — Stream and pipe +* [Pipette](https://github.com/Medium/pipette) — Stream and pipe utilities. -* [Populator](https://github.com/Obvious/populator) — - Asynchronous object populator. -* [Ursa](https://github.com/Obvious/ursa) — RSA public/private key - crypto. -* [Typ](https://github.com/Obvious/typ) — Type predicates and +* [Shepherd](https://github.com/Medium/shepherd) — Asynchronous dependency injection for node.js. +* [Typ](https://github.com/Medium/typ) — Type predicates and assertions. -* [Variants](https://github.com/Obvious/variants) — A variants +* [Variants](https://github.com/Medium/variants) — A variants (experiments, mods) system with dynamic flag evaluation. ### Node Build Tools These are build-time tools packaged as [Node](http://nodejs.org/) modules. -* [PhantomJS](https://github.com/Obvious/phantomjs) — NPM wrapper for +* [PhantomJS](https://github.com/Medium/phantomjs) — NPM wrapper for grabbing the right PhantomJS binary. -* [Plovr](https://github.com/Obvious/plovr) — Integration of - the Plovr JavaScript build tool (a packaging of the Google Closure compiler). -* [Soynode](https://github.com/Obvious/soynode) — Integration of +* [Soynode](https://github.com/Medium/soynode) — Integration of the Soy template system (part of Google Closure). ### Other -* [Open Source Umbrella Project](https://github.com/Obvious/open-source) - — This site. +* [Open Source Umbrella Project](https://github.com/Medium/opensource) — This site. diff --git a/ocla-1.0.md b/cla-2.0.md similarity index 82% rename from ocla-1.0.md rename to cla-2.0.md index b084339..7716b18 100644 --- a/ocla-1.0.md +++ b/cla-2.0.md @@ -1,17 +1,15 @@ -The Obvious Contributors License Agreement +The Contributors License Agreement ========================================== -Version 1.0 +Version 2.0 ----------- ### Preface -This Agreement is between You, the Users, the Contributors, and The -Obvious Corporation. The intent of the Agreement is to clarify your -responsibilities as a Contributor. +This Agreement is between You, the Users, the Contributors, and A Medium Corporation. The intent of the Agreement is to clarify your responsibilities as a Contributor. The Agreement is meant to protect You, the Users, the Contributors, -and The Obvious Corporation from the malicious misdeeds of others. +and A Medium Corporation from the malicious misdeeds of others. The Agreement is *not* intended to restrict how You use Your own Contributions. @@ -27,11 +25,10 @@ and the singular shall include the plural. 2. "You" / "Your" — The individual signing this Agreement. -3. "The Obvious Corporation" — The company which manages the - Projects. The company's website is at . +3. "A Medium Corporation" — The company which manages the + Projects. The company's website is at . -4. "Project" — Open source projects being managed by The - Obvious Corporation. The Projects may all be found at +4. "Project" — Open source projects being managed by A Medium Corporation. The Projects may all be found at with an overview at . @@ -64,7 +61,7 @@ When You provide a Contribution to a Project: * You license that Contribution under the terms of the license of that Project. More specifically, You grant an irrevocable license for Your Contribution to the Users, the Contributors, and - The Obvious Corporation. + A Medium Corporation. * You assert that You have the authority and are able to license Your Contribution under the license of that Project. @@ -81,5 +78,5 @@ Furthermore: * If You become aware of a problem with any of Your Contributions or with the fact that You have signed this Agreement, then You agree to - inform The Obvious Corporation about the problem, without any undue + inform A Medium Corporation about the problem, without any undue delay. diff --git a/ocla-rationale.md b/cla-rationale.md similarity index 90% rename from ocla-rationale.md rename to cla-rationale.md index a375977..83b50f2 100644 --- a/ocla-rationale.md +++ b/cla-rationale.md @@ -1,10 +1,10 @@ -OCLA Rationale +CLA Rationale ============== Why do this at all? ------------------- -The point of the OCLA signing process is to have a credible record of +The point of the CLA signing process is to have a credible record of a developer stating that they really intend to contribute to an open source project. Technically speaking, the thing we are aiming for is a *non-repudiable* statement from a contributor, that is, a statement @@ -18,7 +18,7 @@ by claiming they weren't really contributing under the project's open source license. For some projects "trouble" has historically come, for example, in the form of patent lawsuits. -The Obvious Corporation wants to do our part to guard against this +A Medium Corporation wants to do our part to guard against this potential trouble, and we believe so should you. We aren't innovating here by asking you to sign an agreement, but we *are* trying to innovate by making the agreement and process nearly-transparent, @@ -58,16 +58,16 @@ We no longer live in that time. One wonderful thing about the world we live in today is that we can achieve the necessary non-reputiability without having to have a -physical document. In the case of the OCLA, we bootstrap this ability +physical document. In the case of the CLA, we bootstrap this ability off of the infrastructure provided by GitHub: More specifically, we treat GitHub as a neutral third party to witness the transactions -between a would-be contributor and The Obvious Corporation. GitHub +between a would-be contributor and A Medium Corporation. GitHub ends up acting sort of like a notary, in that its records of the actions — such as in particular the pull requests — of people using it can be taken as authoritative and unbiased. So, when a contributor forks this project, commits a change indicating -agreement to the OCLA, and files a pull request back with this project, +agreement to the CLA, and files a pull request back with this project, GitHub knows that all that happened, knows when it happened, and knows the identity of the entity taking all that action. Should there ever be a dispute about whether any of that took place, it's not just @@ -85,7 +85,7 @@ traditional email. We promise never to use this information for any purpose other than resolving authorship disputes. The upshot is that filing a pull request containing a statement of -agreement to the OCLA, along with the supplementary email, is close +agreement to the MCLA, along with the supplementary email, is close enough to having submitted a signed physical document saying the same things. That is, this tactic is a workable solution to the problem. And since fits in naturally with how actual contributions get made, what diff --git a/contributors/AdityaShirole.md b/contributors/AdityaShirole.md new file mode 100644 index 0000000..8adca7b --- /dev/null +++ b/contributors/AdityaShirole.md @@ -0,0 +1,13 @@ +2015-10-30 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Aditya Shirole +https://github.com/AdityaShirole diff --git a/contributors/adrianrossouw.md b/contributors/adrianrossouw.md new file mode 100644 index 0000000..d8f5a55 --- /dev/null +++ b/contributors/adrianrossouw.md @@ -0,0 +1,13 @@ +2014-09-15 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Adrian Rossouw +https://github.com/AdrianRossouw \ No newline at end of file diff --git a/contributors/afang.md b/contributors/afang.md new file mode 100644 index 0000000..50a8797 --- /dev/null +++ b/contributors/afang.md @@ -0,0 +1,13 @@ +October 8, 2015 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Andy Fang +https://github.com/afang diff --git a/contributors/apache/Filirom1.md b/contributors/apache/Filirom1.md new file mode 100644 index 0000000..c585311 --- /dev/null +++ b/contributors/apache/Filirom1.md @@ -0,0 +1,13 @@ +2013-11-27 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Romain Philibert +https://github.com/Filirom1 diff --git a/contributors/apache/JaidenAshmore.md b/contributors/apache/JaidenAshmore.md new file mode 100644 index 0000000..bd390c4 --- /dev/null +++ b/contributors/apache/JaidenAshmore.md @@ -0,0 +1,13 @@ +22/04/2013 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Jaiden Ashmore +https://github.com/JaidenAshmore diff --git a/contributors/apache/JohnYangSam.md b/contributors/apache/JohnYangSam.md new file mode 100644 index 0000000..57f9790 --- /dev/null +++ b/contributors/apache/JohnYangSam.md @@ -0,0 +1,13 @@ +2012-12-31 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +John Yang-Sammataro +https://github.com/JohnYangSam diff --git a/contributors/apache/Lindurion.md b/contributors/apache/Lindurion.md new file mode 100644 index 0000000..6030207 --- /dev/null +++ b/contributors/apache/Lindurion.md @@ -0,0 +1,13 @@ +2013-10-11 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Eric W. Barndollar +https://github.com/Lindurion diff --git a/contributors/apache/MattWhelan.md b/contributors/apache/MattWhelan.md new file mode 100644 index 0000000..f283f72 --- /dev/null +++ b/contributors/apache/MattWhelan.md @@ -0,0 +1,13 @@ +Fri Dec 6 15:04:04 PST 2013 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, +Matt Whelan + +https://github.com/MattWhelan diff --git a/contributors/apache/Midnight-Coder.md b/contributors/apache/Midnight-Coder.md new file mode 100644 index 0000000..ba67c56 --- /dev/null +++ b/contributors/apache/Midnight-Coder.md @@ -0,0 +1,13 @@ +2014-04-07 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +063446fb691881581971b90f601fb9a5. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Sagar Jhobalia +https://github.com/Midnight-Coder diff --git a/contributors/apache/README b/contributors/apache/README new file mode 100644 index 0000000..7b778d8 --- /dev/null +++ b/contributors/apache/README @@ -0,0 +1 @@ +This directory contains CLAs signed before we switched licenses from Apache to MIT. diff --git a/contributors/apache/aarono.md b/contributors/apache/aarono.md new file mode 100644 index 0000000..c3f4726 --- /dev/null +++ b/contributors/apache/aarono.md @@ -0,0 +1,13 @@ +Monday 28th of April 2014 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Aaron O'Mullan +https://github.com/AaronO diff --git a/contributors/apache/alexrass.md b/contributors/apache/alexrass.md new file mode 100644 index 0000000..0d0f1f7 --- /dev/null +++ b/contributors/apache/alexrass.md @@ -0,0 +1,13 @@ +2013-01-30 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Alex Rass +https://github.com/alexrass \ No newline at end of file diff --git a/contributors/apache/andreypopp.md b/contributors/apache/andreypopp.md new file mode 100644 index 0000000..bb24791 --- /dev/null +++ b/contributors/apache/andreypopp.md @@ -0,0 +1,13 @@ +2013/10/02 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Andrey Popp +https://github.com/andreypopp diff --git a/contributors/apache/andybons.md b/contributors/apache/andybons.md new file mode 100644 index 0000000..bd1e30a --- /dev/null +++ b/contributors/apache/andybons.md @@ -0,0 +1,13 @@ +2013-01-22 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am free and able to make this agreement +and sign this declaration. + +Signed, + +Andrew Bonventre +https://github.com/andybons diff --git a/contributors/apache/asapach.md b/contributors/apache/asapach.md new file mode 100644 index 0000000..9a92c0c --- /dev/null +++ b/contributors/apache/asapach.md @@ -0,0 +1,13 @@ +2013-08-18 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Aliaksei Sapach +https://github.com/asapach \ No newline at end of file diff --git a/contributors/apache/asciidisco.md b/contributors/apache/asciidisco.md new file mode 100644 index 0000000..8fe9e90 --- /dev/null +++ b/contributors/apache/asciidisco.md @@ -0,0 +1,13 @@ +2013-03-25 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Sebastian Golasch +https://github.com/asciidisco \ No newline at end of file diff --git a/contributors/atimb.md b/contributors/apache/atimb.md similarity index 100% rename from contributors/atimb.md rename to contributors/apache/atimb.md diff --git a/contributors/apache/casear.md b/contributors/apache/casear.md new file mode 100644 index 0000000..c03c500 --- /dev/null +++ b/contributors/apache/casear.md @@ -0,0 +1,9 @@ +25/04/2013 + +I hereby agree to the terms of the Obvious Contributors License Agreement, version 1.0, with MD5 checksum fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this agreement and sign this declaration. + +Signed, + +Casear Chu https://github.com/Casear diff --git a/contributors/apache/cdauth.md b/contributors/apache/cdauth.md new file mode 100644 index 0000000..310d039 --- /dev/null +++ b/contributors/apache/cdauth.md @@ -0,0 +1,13 @@ +2013-01-14 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Candid Dauth +https://github.com/cdauth diff --git a/contributors/ctalkington.md b/contributors/apache/ctalkington.md similarity index 100% rename from contributors/ctalkington.md rename to contributors/apache/ctalkington.md diff --git a/contributors/danfuzz.md b/contributors/apache/danfuzz.md similarity index 100% rename from contributors/danfuzz.md rename to contributors/apache/danfuzz.md diff --git a/contributors/apache/darul75.md b/contributors/apache/darul75.md new file mode 100644 index 0000000..3f8a106 --- /dev/null +++ b/contributors/apache/darul75.md @@ -0,0 +1,9 @@ +2014-01-02 + +I hereby agree to the terms of the Obvious Contributors License Agreement, version 1.0, with MD5 checksum fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this agreement and sign this declaration. + +Signed, + +Julien Valéry https://github.com/darul75 diff --git a/contributors/domenic.md b/contributors/apache/domenic.md similarity index 100% rename from contributors/domenic.md rename to contributors/apache/domenic.md diff --git a/contributors/apache/eahutchins.md b/contributors/apache/eahutchins.md new file mode 100644 index 0000000..765488f --- /dev/null +++ b/contributors/apache/eahutchins.md @@ -0,0 +1,14 @@ +2013-11-05 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Edward Hutchins +https://github.com/eahutchins + diff --git a/contributors/apache/evanj.md b/contributors/apache/evanj.md new file mode 100644 index 0000000..5438f10 --- /dev/null +++ b/contributors/apache/evanj.md @@ -0,0 +1,13 @@ +2013-10-26 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am free and able to make this agreement +and sign this declaration. + +Signed, + +Evan Jones +https://github.com/evanj diff --git a/contributors/apache/existentialism.md b/contributors/apache/existentialism.md new file mode 100644 index 0000000..27b7e2b --- /dev/null +++ b/contributors/apache/existentialism.md @@ -0,0 +1,13 @@ +2013-05-05 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Brian Ng +https://github.com/existentialism diff --git a/contributors/apache/felthy.md b/contributors/apache/felthy.md new file mode 100644 index 0000000..6ac2154 --- /dev/null +++ b/contributors/apache/felthy.md @@ -0,0 +1,13 @@ +2013-04-02 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Pete Feltham +https://github.com/felthy diff --git a/contributors/apache/fengmk2.md b/contributors/apache/fengmk2.md new file mode 100644 index 0000000..6c87556 --- /dev/null +++ b/contributors/apache/fengmk2.md @@ -0,0 +1,13 @@ +2014-05-22 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Yuan Feng +https://github.com/fengmk2 diff --git a/contributors/apache/fmenezes.md b/contributors/apache/fmenezes.md new file mode 100644 index 0000000..1a31add --- /dev/null +++ b/contributors/apache/fmenezes.md @@ -0,0 +1,13 @@ +2014-06-20 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Filipe Constantinov Menezes +https://github.com/fmenezes diff --git a/contributors/apache/gbloice.md b/contributors/apache/gbloice.md new file mode 100644 index 0000000..60e30e9 --- /dev/null +++ b/contributors/apache/gbloice.md @@ -0,0 +1,13 @@ +2013-11-20 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +ce876e3d1743ae78eaa20f9b9ea281ad. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Graham Bloice +https://github.com/gbloice \ No newline at end of file diff --git a/contributors/apache/izuzak.md b/contributors/apache/izuzak.md new file mode 100644 index 0000000..0591e3d --- /dev/null +++ b/contributors/apache/izuzak.md @@ -0,0 +1,13 @@ +2013-02-23 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Ivan Zuzak +https://github.com/izuzak diff --git a/contributors/apache/jgable.md b/contributors/apache/jgable.md new file mode 100644 index 0000000..ad42fc9 --- /dev/null +++ b/contributors/apache/jgable.md @@ -0,0 +1,13 @@ +2013-08-19 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Jacob Gable +https://github.com/jgable \ No newline at end of file diff --git a/contributors/apache/jmervine.md b/contributors/apache/jmervine.md new file mode 100644 index 0000000..4995370 --- /dev/null +++ b/contributors/apache/jmervine.md @@ -0,0 +1,10 @@ +12 July 2013 + +I hereby agree to the terms of the Obvious Contributors License Agreement, version 1.0, with MD5 checksum fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this agreement and sign this declaration. + +Signed, + +Joshua Mervine +https://github.com/jmervine diff --git a/contributors/apache/lillesand.md b/contributors/apache/lillesand.md new file mode 100644 index 0000000..0130352 --- /dev/null +++ b/contributors/apache/lillesand.md @@ -0,0 +1,13 @@ +2014-04-01 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +7beb312f0f5c2d80d11f9bd9747351295eac2241. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Jøran Lillesand +https://github.com/lillesand diff --git a/contributors/apache/manobi.md b/contributors/apache/manobi.md new file mode 100644 index 0000000..14cefbe --- /dev/null +++ b/contributors/apache/manobi.md @@ -0,0 +1,13 @@ +2013-02-10 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Gabriel de Oliveira Barbosa +https://github.com/manobi diff --git a/contributors/apache/masakura.md b/contributors/apache/masakura.md new file mode 100644 index 0000000..179811e --- /dev/null +++ b/contributors/apache/masakura.md @@ -0,0 +1,13 @@ +2014-06-18 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Tomo Masakura +https://github.com/masakura diff --git a/contributors/apache/mastercactapus.md b/contributors/apache/mastercactapus.md new file mode 100644 index 0000000..de5b67f --- /dev/null +++ b/contributors/apache/mastercactapus.md @@ -0,0 +1,14 @@ +2014-06-17 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Nathan Caza +https://github.com/mastercactapus + diff --git a/contributors/apache/monbro.md b/contributors/apache/monbro.md new file mode 100644 index 0000000..0be410d --- /dev/null +++ b/contributors/apache/monbro.md @@ -0,0 +1,13 @@ +2014-01-27 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Michael Klein +https://github.com/monbro diff --git a/contributors/apache/myme.md b/contributors/apache/myme.md new file mode 100644 index 0000000..a002e44 --- /dev/null +++ b/contributors/apache/myme.md @@ -0,0 +1,13 @@ +2012-11-25 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am free and able to make this agreement +and sign this declaration. + +Signed, + +Martin Øinæs Myrseth +https://github.com/myme diff --git a/contributors/apache/nathanjsweet.md b/contributors/apache/nathanjsweet.md new file mode 100644 index 0000000..9da2e03 --- /dev/null +++ b/contributors/apache/nathanjsweet.md @@ -0,0 +1,13 @@ +06/23/2014 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Nathan Sweet +https://github.com/nathanjsweet \ No newline at end of file diff --git a/contributors/apache/okize.md b/contributors/apache/okize.md new file mode 100644 index 0000000..11c1784 --- /dev/null +++ b/contributors/apache/okize.md @@ -0,0 +1,13 @@ +2014-01-24 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Morgan Wigmanich +https://github.com/okize \ No newline at end of file diff --git a/contributors/apache/pixelheresy.md b/contributors/apache/pixelheresy.md new file mode 100644 index 0000000..1df98d0 --- /dev/null +++ b/contributors/apache/pixelheresy.md @@ -0,0 +1,13 @@ +August 12, 2013 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Keith Gibbs +https://github.com/pixelheresy \ No newline at end of file diff --git a/contributors/apache/queequac.md b/contributors/apache/queequac.md new file mode 100644 index 0000000..dedc48f --- /dev/null +++ b/contributors/apache/queequac.md @@ -0,0 +1,13 @@ +2013-09-19 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Roland Eckl +https://github.com/queequac diff --git a/contributors/apache/sergeylukin.md b/contributors/apache/sergeylukin.md new file mode 100644 index 0000000..7445446 --- /dev/null +++ b/contributors/apache/sergeylukin.md @@ -0,0 +1,13 @@ +2013-06-20 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Sergey Lukin +https://github.com/sergeylukin diff --git a/contributors/apache/slaks.md b/contributors/apache/slaks.md new file mode 100644 index 0000000..667e54a --- /dev/null +++ b/contributors/apache/slaks.md @@ -0,0 +1,13 @@ +2012-12-20 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Schabse Laks +https://github.com/slaks diff --git a/contributors/apache/snicker.md b/contributors/apache/snicker.md new file mode 100644 index 0000000..a94100c --- /dev/null +++ b/contributors/apache/snicker.md @@ -0,0 +1,13 @@ +2013/12/05 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Nick Gordon +https://github.com/snicker diff --git a/contributors/apache/thebyrd.md b/contributors/apache/thebyrd.md new file mode 100644 index 0000000..d516f14 --- /dev/null +++ b/contributors/apache/thebyrd.md @@ -0,0 +1,9 @@ +2012-10-11 + +I hereby agree to the terms of the Obvious Contributors License Agreement, version 1.0, with MD5 checksum fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am free and able to make this agreement and sign this declaration. + +Signed, + +David Byrd https://github.com/thebyrd diff --git a/contributors/apache/theefer.md b/contributors/apache/theefer.md new file mode 100644 index 0000000..b2f8e50 --- /dev/null +++ b/contributors/apache/theefer.md @@ -0,0 +1,13 @@ +2013-09-03 + +I hereby agree to the terms of the Obvious Contributors License +Agreement, version 1.0, with MD5 checksum +fbe613f727e76c93e4a5967536c87fbe. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Sébastien Cevey +https://github.com/theefer diff --git a/contributors/baris.md b/contributors/baris.md new file mode 100644 index 0000000..f614650 --- /dev/null +++ b/contributors/baris.md @@ -0,0 +1,13 @@ +2015-10-15 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Baris Metin +https://github.com/baris diff --git a/contributors/brentburg.md b/contributors/brentburg.md new file mode 100644 index 0000000..0c9fef7 --- /dev/null +++ b/contributors/brentburg.md @@ -0,0 +1,13 @@ +2015-05-01 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Brent Burgoyne +https://github.com/brentburg diff --git a/contributors/broucz.md b/contributors/broucz.md new file mode 100644 index 0000000..7d30eb9 --- /dev/null +++ b/contributors/broucz.md @@ -0,0 +1,13 @@ +Wednesday, October 14, 2015 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Pierre Brouca +https://github.com/broucz diff --git a/contributors/claylo.md b/contributors/claylo.md new file mode 100644 index 0000000..8260c9e --- /dev/null +++ b/contributors/claylo.md @@ -0,0 +1,13 @@ +2014-10-15 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Clay Loveless +https://github.com/claylo diff --git a/contributors/corbinu.md b/contributors/corbinu.md new file mode 100644 index 0000000..90e7d17 --- /dev/null +++ b/contributors/corbinu.md @@ -0,0 +1,13 @@ +1/26/2015 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Corbin Uselton +https://github.com/corbinu diff --git a/contributors/eduardolundgren.md b/contributors/eduardolundgren.md new file mode 100644 index 0000000..fe91860 --- /dev/null +++ b/contributors/eduardolundgren.md @@ -0,0 +1,13 @@ +17/07/2014 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Eduardo Lundgren +https://github.com/eduardolundgren \ No newline at end of file diff --git a/contributors/fjarrett.md b/contributors/fjarrett.md new file mode 100644 index 0000000..45e83e9 --- /dev/null +++ b/contributors/fjarrett.md @@ -0,0 +1,13 @@ +2015-10-08 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Frankie Jarrett +https://github.com/fjarrett diff --git a/contributors/frostney.md b/contributors/frostney.md new file mode 100644 index 0000000..19cce0e --- /dev/null +++ b/contributors/frostney.md @@ -0,0 +1,13 @@ +2015-11-03 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Johannes Stein +https://github.com/frostney diff --git a/contributors/hopkinsth.md b/contributors/hopkinsth.md new file mode 100644 index 0000000..77408bb --- /dev/null +++ b/contributors/hopkinsth.md @@ -0,0 +1,13 @@ +2015-01-13 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Thomas Hopkins +https://github.com/hopkinsth diff --git a/contributors/johnmcalester.md b/contributors/johnmcalester.md new file mode 100644 index 0000000..25dd748 --- /dev/null +++ b/contributors/johnmcalester.md @@ -0,0 +1,13 @@ +2016-01-05 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +John McAlester +https://github.com/johnmcalester diff --git a/contributors/jonnolen.md b/contributors/jonnolen.md new file mode 100644 index 0000000..bbcfd77 --- /dev/null +++ b/contributors/jonnolen.md @@ -0,0 +1,11 @@ +2015-09-10 + +I hereby agree to the terms of the Contributors License Agreement, version 2.0, with MD5 checksum 0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this agreement and sign this declaration. + +Signed, + +Jon Nolen + +https://github.com/jonnolen diff --git a/contributors/kaworru.md b/contributors/kaworru.md new file mode 100644 index 0000000..1c81de3 --- /dev/null +++ b/contributors/kaworru.md @@ -0,0 +1,13 @@ +2015-07-23 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Markus Bordihn +https://github.com/Kaworru diff --git a/contributors/lsinger.md b/contributors/lsinger.md new file mode 100644 index 0000000..9a539c2 --- /dev/null +++ b/contributors/lsinger.md @@ -0,0 +1,13 @@ +2015-10-28 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Leif Singer +https://github.com/lsinger diff --git a/contributors/mairatma.md b/contributors/mairatma.md new file mode 100644 index 0000000..aa425f2 --- /dev/null +++ b/contributors/mairatma.md @@ -0,0 +1,13 @@ +2014-08-11 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Maira Bello +https://github.com/mairatma \ No newline at end of file diff --git a/contributors/naivefun.md b/contributors/naivefun.md new file mode 100644 index 0000000..bb8e13e --- /dev/null +++ b/contributors/naivefun.md @@ -0,0 +1,13 @@ +10/21/2015 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +PeiSong Xiong +https://github.com/naivefun diff --git a/contributors/pra85.md b/contributors/pra85.md new file mode 100644 index 0000000..130d6bd --- /dev/null +++ b/contributors/pra85.md @@ -0,0 +1,13 @@ +2016-02-12 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Prayag Verma +https://github.com/pra85 diff --git a/contributors/sanatgersappa b/contributors/sanatgersappa new file mode 100644 index 0000000..c9b7221 --- /dev/null +++ b/contributors/sanatgersappa @@ -0,0 +1,13 @@ +2015-10-09 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Sanat Gersappa +https://github.com/sanatgersappa diff --git a/contributors/timmytofu.md b/contributors/timmytofu.md new file mode 100644 index 0000000..8213989 --- /dev/null +++ b/contributors/timmytofu.md @@ -0,0 +1,13 @@ +2016-02-23 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Tim Adams +https://github.com/timmytofu diff --git a/contributors/udaiveerS.md b/contributors/udaiveerS.md new file mode 100644 index 0000000..1823a49 --- /dev/null +++ b/contributors/udaiveerS.md @@ -0,0 +1,13 @@ +2016-01-26 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Udaiveer Singh
 +https://github.com/udaiveerS \ No newline at end of file diff --git a/contributors/victorgama.md b/contributors/victorgama.md new file mode 100644 index 0000000..2ef92ab --- /dev/null +++ b/contributors/victorgama.md @@ -0,0 +1,13 @@ +Wednesday, May 20, 2015 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Victor Gama +https://github.com/victorgama diff --git a/mit-license.md b/mit-license.md new file mode 100644 index 0000000..a5a4a92 --- /dev/null +++ b/mit-license.md @@ -0,0 +1,23 @@ +The MIT License (MIT) + +Copyright (c) 2014 A Medium Corporation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + diff --git a/sign-ocla-paper.md b/sign-cla-paper.md similarity index 74% rename from sign-ocla-paper.md rename to sign-cla-paper.md index 424b045..e71f72f 100644 --- a/sign-ocla-paper.md +++ b/sign-cla-paper.md @@ -1,17 +1,17 @@ -Sign the OCLA: Dead Tree Edition +Sign the CLA: Dead Tree Edition ================================ -Even though we at The Obvious Corporation would love to leave the +Even though we at A Medium Corporation would love to leave the paper world behind, various jurisdictions require that we also accept physically signed documents. If you wish to take advantage of this -when signing the OCLA, then all you need to do is mail us a document +when signing the CLA, then all you need to do is mail us a document with the following content: ``` [date] -I hereby agree to the terms of the attached Obvious Contributors -License. +I hereby agree to the terms of the attached Contributors +License Agreement. I furthermore declare that I am free and able to make this agreement and sign this declaration. @@ -38,12 +38,12 @@ Replace the bracketed text as follows: contacted. * `[your phone number]` with a phone number at which you can be contacted. -Print out a copy of [the OCLA](ocla-1.0.md), sign and date that copy, +Print out a copy of [the CLA](cla-2.0.md), sign and date that copy, and attach it to the page described above. Send it all to: - The Obvious Corporation + A Medium Corporation Attention: Open Sourceror - 800 Market St. Suite 800 + 760 Market Street Suite 900 San Francisco CA 94102 diff --git a/sign-ocla.md b/sign-cla.md similarity index 60% rename from sign-ocla.md rename to sign-cla.md index dbe641d..e187813 100644 --- a/sign-ocla.md +++ b/sign-cla.md @@ -1,29 +1,29 @@ -Sign the OCLA +Sign the CLA ============= -This page is the step-by-step guide to signing the Obvious +This page is the step-by-step guide to signing the Medium Contributors License Agreement. It's easy and pretty painless! For an explanation about why we ask you to do this, see the -[OCLA Rationale page](ocla-rationale.md). +[CLA Rationale page](cla-rationale.md). 1. First and foremost, read [the current version of the - OCLA](ocla-1.0.md). It is written to be as close to plain + CLA](cla-2.0.md). It is written to be as close to plain English as possible. 2. Make an account on [GitHub](https://github.com/) if you don't already have one. -3. File a pull request on this project (the Obvious Open Source +3. File a pull request on this project (the Medium Open Source Umbrella Project), as [outlined below](#filing-the-pull-request). -4. Email the Obvious Open Sourceror, as [outlined below](#sending-the-email). +4. Email the Medium Open Sourceror, as [outlined below](#sending-the-email). -5. Wait for an Obvious team member to merge your pull request. +5. Wait for a Medium team member to merge your pull request. You may start + opening pull requests for the project you're contributing to but we will + only be able to merge your contributions after your signed CLA is merged. -6. Contribute! - -If you wish to, you may also file the OCLA in paper form. Please -see the instructions on [the paper OCLA page](sign-ocla-paper.md) +If you wish to, you may also file the CLA in paper form. Please +see the instructions on [the paper CLA page](sign-cla-paper.md) for details. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * @@ -45,9 +45,9 @@ Put the following in the file: ``` [date] -I hereby agree to the terms of the Obvious Contributors License -Agreement, version 1.0, with MD5 checksum -fbe613f727e76c93e4a5967536c87fbe. +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. I furthermore declare that I am authorized and able to make this agreement and sign this declaration. @@ -64,6 +64,15 @@ Replace the bracketed text as follows: * `[your name]` with your name. * `[your github userid]` with your GitHub userid. +You can confirm the MD5 checksum of the CLA by running the md5 program over `cla-2.0.md`: + +``` +md5 cla-2.0.md +MD5 (cla-2.0.md) = 0962bd43bb8849553d91650a78cb2924 +``` + +If the output is different from above, do not sign the CLA and let us know. + That's it! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * @@ -71,13 +80,13 @@ That's it! Sending the Email ----------------- -Send an email to Obvious's official Open Sourceror -at [open-source@obvious.com](mailto:open-source@obvious.com), -with the subject "OCLA" and the following body: +Send an email to Medium's official Open Sourceror +at [open-source@medium.com](mailto:open-source@medium.com), +with the subject "CLA" and the following body: ``` I submitted a pull request to indicate agreement to the terms -of the Obvious Contributors License Agreement. +of the Contributors License Agreement. Signed, diff --git a/styleguides/JavaScript.md b/styleguides/JavaScript.md new file mode 100644 index 0000000..9232110 --- /dev/null +++ b/styleguides/JavaScript.md @@ -0,0 +1,76 @@ +# JavaScript Rules + +Enclosed you’ll find stylistic rules and guidelines for JavaScript authors +contributing code back to Medium. Following these rules will make sure +that our codebase is consistent and maintainable. + +Ideally, all our code should look like a single person typed it, no matter +how many people contributed. **If you’re editing a file, make sure your +changes are consistent with the rest of the file even if it goes against +some of the rules on this page.** + +### Naming ### + +- Use `functionNamesLikeThis`, `variableNamesLikeThis`, `ClassNamesLikeThis`, + `EnumNamesLikeThis`, `methodNamesLikeThis`, and `SYMBOLIC_CONSTANTS_LIKE_THIS`. +- Private properties, variables, and methods (in files or classes) should be + named with a leading underscore. +- Protected properties, variables, and methods should be named without an + underscore (like public ones). +- For more information on private and protected, read the section on visibility. + +### Namespaces ### + +Client code should use namespaces under `obv` that mirror the folder structure. + +```js +goog.provide('obv.sloth') + +obv.sloth.sleep = function() { + // ... +} +``` + +Filenames should should match the namespace of class that they define, e.g. `obv.foo.Class` should +be in `/foo/Class.js` and `obv.bar.baz` should be in `/bar/baz.js`. Filenames should end in .js, and +should contain no punctuation except for - or _. Prefer - to _ + +### Code formatting ### + +* Always start your curly braces on the same line as whatever they’re opening. For example: + +```js +if (something) { + // ... +} else { + // ... +} +``` + +* Try not to make your lines go over 100 characters. +* Use 2-char indent for blocks and 4-char indent for wrapped lines. +* Use whitespace around operators. +* Do not put any space after `[`, `{` or before `]`, `}` in single-line array and object initializers. + +```js +var arr = [1,2,3] +var obj = {a: 1, b: 2, c: 3} +``` + +* Format multiline array and object initializers likes this: + +```js +var obj = { + a: 1, + b: 2, + c: 3 +} +``` + +* Do not use semicolons unless omiting one will break your code. +* Use single-quotes for strings. + +### Types ### + +For client code, we use Google Closure Compiler for type checks. Annotate your functions and properties +accordingly. For more information, seeSee the [JS Compiler Docs](https://developers.google.com/closure/compiler/docs/js-for-compiler). diff --git a/styleguides/JavaScript/README.md b/styleguides/JavaScript/README.md deleted file mode 100644 index 7fb0d67..0000000 --- a/styleguides/JavaScript/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# Welcome to the Obvious JavaScript Style Guide! - -Enclosed you'll find stylistic rules and guidelines for JavaScript authors contributing code back to the Obvious Corporation. - -This styleguide may be reused or repurposed for your own projects under the Obvious [Apache 2.0 License](https://github.com/Obvious/open-source/blob/master/apache-license-2.0.md). For those wishing to contribute to an Obvious Corp JavaScript project, this is essentially *highly recommended reading* material before you begin submitting code back. - - * [Style Rules](./JavaScript/style-rules.md) - * [Language Rules](./JavaScript/language-rules.md) - * [JavaScript Inheritance](./JavaScript/inheritance.md) - * [Closure Library](./JavaScript/closure-library.md) - -**Note:** With much thanks and gratitude, portions of this style guide have been borrowed from the [Google JavaScript Style Guide](http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml). \ No newline at end of file diff --git a/styleguides/JavaScript/closure-library.md b/styleguides/JavaScript/closure-library.md deleted file mode 100644 index a2f3630..0000000 --- a/styleguides/JavaScript/closure-library.md +++ /dev/null @@ -1,49 +0,0 @@ -# Closure Usage # - -We use [Plovr](http://plovr.com/docs.html) to compile and compress our client-side JavaScript. It -comes bundled with a copy of the (Closure Library)[closure-library.googlecode.com] which we can -`goog.require` seemlessly from anywhere. - -Even though we can include any piece of Closure in Medium, we should not, since some of the classes -are very heavy, primarily due to their flexibility and to support for older browsers (e.g. IE6). - -As well as anything in [base.js](http://closure-library.googlecode.com/svn/docs/closure_goog_base.js.html) -the following classes are approved: - - * `goog.Disposable` - * `goog.array` - * `goog.asserts` - * `goog.async.Deferred` - * `goog.crypt` - * `goog.events.KeyCodes` - * `goog.labs.net.xhr` - * `goog.net.XmlHttp` - * `goog.math` - * `goog.object` - * `goog.pubsub.PubSub` - * `goog.string` - * `goog.structs` - * `goog.uri.util` - * `goog.userAgent` - * `goog.testing` - -New classes should be approved on a case by case basis - -## goog.Disposable ## - -The correct usage of `dispose` is to override `disposeInternal()` and to always call the base-class. The reasons is that `dispose()` checks whether the object is already disposed before calling `disposeInternal()`, this can help avoid NPEs and such. If you implement `dispose()` yourself you'd want to assert that you weren't disposed. It is very important to call the super class, particularly in the case of screens, as there is a lot of clean-up done higher up that will avoid memory leaks. - -```js -MyClass.prototype.disposeInternal = function () { - unlisten(this.listenerRef) - goog.base(this, 'disposeInternal') -} -``` - -In turn, you can call dispose on instances you have ownership over. - -``` js -MyClass.prototype.abort = function () { - goog.dispose(myDisposableClass) -} -``` \ No newline at end of file diff --git a/styleguides/JavaScript/inheritance.md b/styleguides/JavaScript/inheritance.md deleted file mode 100644 index 8b56d9b..0000000 --- a/styleguides/JavaScript/inheritance.md +++ /dev/null @@ -1,142 +0,0 @@ -# JS Inheritance # - -**Obvious JS should use Node's inheritance functions on the server and Closure's inheritance -functions on the client.** - -What follows is an explanation of how prototypical inheritance works in JavaScript, how Node and -Closure handle inheritance, and a discussion of alternative approaches. - -## Background ## - -JavaScript includes a prototype based inheritance model as a language feature. This is rather -powerful, though most people restrict themselves and follow a more traditional class-based -inheritance approach. For example, when was the last time you saw an object change its behavior? - -```js -function Car() {} -Car.prototype.move = function (x, y) { - alert('Just driving along in 2D') -} - -function Plane() {} -Plane.prototype.move = function (x, y, z) { - alert('I can fly!!') -} - -var batMobile = new Car() -batMobile.move(1, 2) - -batMobile.__proto__ = new Plane() -batMobile.move(2, 3, 10) -``` - -Traditional class-based inheritance leads to systems where the taxonomy and relationships between -different entities are easier to understand. Code is also easier to reason about; if, at any point, -you can say “The Bat Mobile is a car” you don't have to worry about checking it's type before -calling operations on it (though Duck-Typing can be useful in some situations). - -## Native Inheritance ## - -If you wanted to make use of prototypical inheritance directly you need to jump through a few hoops. -The simplest way to define a "class" hierarchy is as so: - -```js -function BatMobile() {} -BatMobile.prototype = new Car() -``` - -This is all very well, but what happens if `Car`'s constructor has non-trivial, instance specific -logic in? Yes, the BatMobile could get messed up. So to get around this we'd need to create a -temporary constructor: - -```js -function BatMobile() {} -function TempClass() {} -TempClass.prototype = Car.prototype -BatMobile.prototype = new TempClass() -``` - -This sets up a prototype chain without executing `Car`'s constructor. - -In order to call a super-classes implementation of a function you can use `.call` or `.apply` to -execute the super class's method in the right scope: - -```js -BatMobile.prototype.doBreak = function () { - Car.prototype.doBreak.call(this) - this._deployChute() -} -``` - -The downsides of doing inheritance natively are additional boiler plate when setting up -subclasses, also note how each method calling a super method needs to know the actual super-class. -This can make maintaining or renaming classes annoying. - -Luckily for us both Node and Closure have affordances built in to make this process simpler, while -still delegating to native prototypes. - - -## Node.js ## - -Node's `util` package contains an `inherits` function which sets up the prototype chain and adds a -static reference to the constructor. Typical usage is as follows: - -```js -function BatMobile(arg) { - Car.call(this, arg) -} -util.inherits(BatMobile, Car) - -BatMobile.prototype.go = function () { - BatMobile.super_.go.call(this) - this.fireRockets() -} -``` - -## Closure ## - -Closure has a similar helper, that predates node, but is basically the same. Closure includes a -magical function called `goog.base` which the compiler understands and will optimize. - -```js -function BatMobile(arg) { - goog.base(this, arg) -} -goog.inherits(BatMobile, Car) - -BatMobile.prototype.go = function () { - goog.base(this, 'go') - this.fireRockets() -} -``` - -## Other Systems ## - -There are a multitude of different class systems for JavaScript. Most of them introduce a DSL that -involves passing object literals to helper methods, though the underlying implementations vary. - -Some libraries use a "mixin" approach, which will break the `instanceof` operator. Other libraries -will actually extend the prototype. But unless you are familiar with the library and read the -implementation it can be unclear what is happening. - -Often this style works well for small classes, but when you have a large class with hundreds of -lines maintenance can become an issue. For example, if you drop into the file it is not immediately -clear whether the function is being included as a `method` or a `static` or something completely -separate to the class. - -While more verbose, seeing `ClassName.prototype.instanceMethod` or `ClassName.staticMethod` is self- -documenting and clear. - -Another issue that can arise in systems that do more than delegate to native prototypes is that -classes become incompatible. Sticking close to the language primitives means there is nothing at -all stopping you from doing this: - -```js -function Vehicle() {} - -function Car() {} -util.inherits(Car, Vehicle) - -function BatMobile() {} -goog.inherits(BatMobile, Car) -``` diff --git a/styleguides/JavaScript/language-rules.md b/styleguides/JavaScript/language-rules.md deleted file mode 100644 index 4ed1fb9..0000000 --- a/styleguides/JavaScript/language-rules.md +++ /dev/null @@ -1,441 +0,0 @@ -# JavaScript Language Rules # - -## var ## - -**Declarations with var: Always** - -When you fail to specify var, the variable gets placed in the global context, potentially clobbering -existing values. Also, if there's no declaration, it's hard to tell in what scope a variable lives -(e.g., it could be in the Document or Window just as easily as in the local scope). So always -declare with var. - -Mulit-line `var` statements are acceptable, but avoid complex logic. - -```js -var stack = [] - , readCursor = 0 - , writeCursor = 0 - , root = this.getParentElement() -``` - - -## Constants ## - -**Use NAMES_LIKE_THIS for constants** - -For simple primitive value constants, the naming convention is enough: - -```js -/** - * The number of seconds in a minute. - * @type {number} - */ -example.SECONDS_IN_A_MINUTE = 60 -``` - -For non-primitives, use the @const annotation. - -```js -/** - * The number of seconds in each of the given units. - * @type {Object.} - * @const - */ -example.SECONDS_TABLE = { - minute: 60, - hour: 60 * 60 - day: 60 * 60 * 24 -} -``` - -This allows the compiler to enforce constant-ness. - -Avoid the `const` keyword, Internet Explorer doesn't parse it, so don't use it. - -`obv.namespace.ClassName.CONSTANT = 'foo'` is preferred over -`obv.namespace.ClassName.prototype.CONSTANT = 'foo'` since the compiler can collapse the first down -to a couple of characters, where as the latter would always be referred to as `this.ab` once -compiled. - - -## Semicolons ## - -**Only use semicolons when absolutely necessary** - -According to the spec, statements in JavaScript should be delimited with a semi-colon, however the -spec also outlines a error-recovery mode known as "Automatic Semicolon Insertion". A growing -community of JS developers have chosen to make use of ASI to reduce visual clutter in code, Obvious -is following this approach. You can [read more about ASI here](http://blog.izs.me/post/2353458699/an-open-letter-to-javascript-leaders-regarding). - -There are a couple places where missing semicolons are particularly dangerous, either avoid these -cases or prefix lines with a `(` or `[` with a semi: - -```js -// 1. -MyClass.prototype.myMethod = function() { - return 42 -} // No semicolon here. - -(function() { - // Some initialization code wrapped in a function to create a scope for locals. -})() - -var x = { - 'i': 1 - , 'j': 2 -} // No semicolon here. - -// 2. Trying to do one thing on Internet Explorer and another on Firefox. -// I know you'd never write code like this, but throw me a bone. -[normalVersion, ffVersion][isIE]() - - -var THINGS_TO_EAT = [apples, oysters, sprayOnCheese] // No semicolon here. - -// 3. conditional execution a la bash --1 == resultOfOperation() || die() -``` - - -## Nested functions ## - -**Yes** - -Nested functions can be very useful, for example in the creation of continuations and for the task -of hiding helper functions. Feel free to use them. - - -## Function Declarations Within Blocks ## - -**No** - -Do not do this: - -```js -if (x) { - function foo() {} -} -``` - -or this: - -``` js -for (var i = 0; i < len; i++) { - function foo() {} -} -``` - -While most script engines support Function Declarations within blocks it is not part of ECMAScript -(see ECMA-262, clause 13 and 14). Worse implementations are inconsistent with each other and with -future EcmaScript proposals. ECMAScript only allows for Function Declarations in the root statement -list of a script or function. Instead use a variable initialized with a Function Expression to -define a function within a block: - -```js -if (x) { - var foo = function() {} -} -``` - - -## Exceptions / Errors ## - -**Yes** - -You basically can't avoid exceptions if you're doing something non-trivial. Go for it. - - -## Custom exceptions ## - -**Absolutely, Yes** - -Without custom exceptions, returning error information from a function that also returns a value can -be tricky, not to mention inelegant. Bad solutions include passing in a reference type to hold error -information or always returning Objects with a potential error member. These basically amount to a -primitive exception handling hack. Feel free to use custom exceptions when appropriate. - - -## Standards features ## - -**Always preferred over non-standards features** - -For maximum portability and compatibility, always prefer standards features over non-standards -features. For example `string.charAt(3)` over `string[3]` and element access with DOM functions instead of -using an application-specific shorthand. Or `document.getElementById('x')` over `$('#x')` - - -## Wrapper objects for primitive types ## - -**No** - -There's no reason to use wrapper objects for primitive types, plus they're dangerous: - -```js -var x = new Boolean(false) -if (x) { - alert('hi') // Shows 'hi'. -} -``` - -Don't do it! - -However type casting is fine. - -```js -var x = Boolean(0) -if (x) { - alert('hi') // This will never be alerted. -} -typeof Boolean(0) == 'boolean' -typeof new Boolean(0) == 'object' -``` - -This is very useful for casting things to number, string and boolean. - - -## Inheritance ## - -**Yes** - -Use Closure's `goog.inherits` in client code and Node's `util.inherits` for server code. See -separate doc on [JS inheritance](inheritance.md) for further explanation. - - -## Method definitions ## - -While there are several methods for attaching methods and properties to a constructor, the preferred style is: - -```js -Foo.prototype.bar = function () { - /* ... */ -} -``` - - -## Closures ## - -**Yes, but be careful** - -The ability to create closures is perhaps the most useful and often overlooked feature of JS. Here -is [a good description of how closures work](http://jibbering.com/faq/faq_notes/closures.html). - -One thing to keep in mind, however, is that a closure keeps a pointer to its enclosing scope, which -can be the source of memory leaks. - - -## eval() ## - -**Avoid if possible, use JSON where supported** - -eval() makes for confusing semantics and is dangerous to use if the string being eval()'d contains -user input. There's usually a better, more clear, safer way to write your code, so its use is -generally not permitted. However eval makes deserialization considerably easier than the non-eval -alternatives, so its use is acceptable for this task (for example, to evaluate RPC responses). - - -## with() {} ## - -**No** - -Using `with` clouds the semantics of your program. Because the object of the with can have properties -that collide with local variables, it can drastically change the meaning of your program. For -example, what does this do? - -```js -with (foo) { - var x = 3 - return x -} -``` - -Answer: anything. The local variable x could be clobbered by a property of foo and perhaps it even -has a setter, in which case assigning 3 could cause lots of other code to execute. Don't use with. - - -## this ## - -**Only in object constructors, methods, and in setting up closures** - -The semantics of this can be tricky. At times it refers to the global object (in most places), the -scope of the caller (in eval), a node in the DOM tree (when attached using an event handler HTML -attribute), a newly created object (in a constructor), or some other object (if function was -`call()`ed or `apply()`ed). - -Because this is so easy to get wrong, limit its use to those places where it is required: - -- in constructors -- in methods of objects (including in the creation of closures) - - -## for-in loop ## - -**Only for iterating over keys in an object/map/hash** - -for-in loops are often incorrectly used to loop over the elements in an Array. This is however very -error prone because it does not loop from 0 to length - 1 but over all the present keys in the -object and its prototype chain. Here are a few cases where it fails: - -```js -function printArray(arr) { - for (var key in arr) { - print(arr[key]) - } -} - -printArray([0, 1, 2, 3]) // This works. - -var a = new Array(10) -printArray(a) // This is wrong. - -a = document.getElementsByTagName('*') -printArray(a) // This is wrong. - -a = [0, 1, 2, 3] -a.buhu = 'wine' -printArray(a) // This is wrong again. - -a = new Array -a[3] = 3 -printArray(a) // This is wrong again. -``` - -Always use normal for loops when using arrays. - -```js -function printArray(arr) { - var l = arr.length - for (var i = 0; i < l; i++) { - print(arr[i]) - } -} -``` - - -## Associative Arrays ## - -**Never use Array as a map/hash/associative array** - -Associative Arrays are not allowed... or more precisely you are not allowed to use non number -indexes for arrays. If you need a map/hash use Object instead of Array in these cases because the -features that you want are actually features of Object and not of Array. Array just happens to -extend Object (like any other object in JS and therefore you might as well have used Date, RegExp or -String). - - -## Multiline string literals ## - -**No** - -Do not do this: - -```js -var myString = 'A rather long string of English text, an error message \ - actually that just keeps going and going -- an error \ - message to make the Energizer bunny blush (right through \ - those Schwarzenegger shades)! Where was I? Oh yes, \ - you\'ve got an error and all the extraneous whitespace is \ - just gravy. Have a nice day.' -``` - -The whitespace at the beginning of each line can't be safely stripped at compile time; whitespace -after the slash will result in tricky errors; and while most script engines support this, it is not -part of ECMAScript. - -Use string concatenation instead: - -```js -var myString = 'A rather long string of English text, an error message ' + - 'actually that just keeps going and going -- an error ' + - 'message to make the Energizer bunny blush (right through ' + - 'those Schwarzenegger shades)! Where was I? Oh yes, ' + - 'you\'ve got an error and all the extraneous whitespace is ' + - 'just gravy. Have a nice day.' -``` - -Or better yet a template. - - - -## Array and Object literals ## - -**Yes** - -Use Array and Object literals instead of Array and Object constructors. - -Array constructors are error-prone due to their arguments. - -```js -// Length is 3. -var a1 = new Array(x1, x2, x3) - -// Length is 2. -var a2 = new Array(x1, x2) - -// If x1 is a number and it is a natural number the length will be x1. -// If x1 is a number but not a natural number this will throw an exception. -// Otherwise the array will have one element with x1 as its value. -var a3 = new Array(x1) - -// Length is 0. -var a4 = new Array() -``` - -Because of this, if someone changes the code to pass 1 argument instead of 2 arguments, the array might not have the expected length. - -To avoid these kinds of weird cases, always use the more readable array literal. - -```js -var a = [x1, x2, x3] -var a2 = [x1, x2] -var a3 = [x1] -var a4 = [] -``` - -Object constructors don't have the same problems, but for readability and consistency object literals should be used. - -```js -var o = new Object() - -var o2 = new Object() -o2.a = 0 -o2.b = 1 -o2.c = 2 -o2['strange key'] = 3 -``` - -Should be written as: - -```js -var o = {} - -var o2 = { - a: 0 - , b: 1 - , c: 2 - , 'strange key': 3 -} -``` - - -## Modifying prototypes of builtin objects ## - -**No** - -Modifying builtins like Object.prototype and Array.prototype are strictly forbidden. Modifying other -builtins like Function.prototype is less dangerous but still leads to hard to debug issues in -production and should be avoided. - - -## Internet Explorer's Conditional Comments ## - -**No** - -Don't do this: - -```js -var f = function () { - /*@cc_on if (@_jscript) { return 2* @*/ 3; /*@ } @*/ -} -``` - -Conditional Comments hinder automated tools as they can vary the JavaScript syntax tree at runtime. diff --git a/styleguides/JavaScript/style-rules.md b/styleguides/JavaScript/style-rules.md deleted file mode 100644 index 15bf666..0000000 --- a/styleguides/JavaScript/style-rules.md +++ /dev/null @@ -1,680 +0,0 @@ -# JavaScript Style Rules # - -## Naming ## - -In general, use `functionNamesLikeThis`, `variableNamesLikeThis`, `ClassNamesLikeThis`, -`EnumNamesLikeThis`, `methodNamesLikeThis`, and `SYMBOLIC_CONSTANTS_LIKE_THIS`. - -### Properties and methods ### - -- Private properties, variables, and methods (in files or classes) should be named with a leading underscore. -- Protected properties, variables, and methods should be named without an underscore (like public ones). -- For more information on private and protected, read the section on visibility. - -### Method and function parameter ### - -Optional function arguments start with `opt_`. - -Functions that take a variable number of arguments should have the last argument named `var_args`. -You may not refer to `var_args` in the code; use the `arguments` array. - -Optional and variable arguments should also be specified in `@param` annotations. - -(Note: these are two exceptions to the variableNamingRules) - -### Accessor functions ### - -Getters and setters methods for properties are not required. However, if they are used, then getters -must be named `getFoo()` and setters must be named `setFoo(value)`. (For boolean getters, `isFoo()` -is also acceptable, and often sounds more natural.) - -### Namespaces ### - -Client code should use namespaces under `obv` that mirror the folder structure. - -```js -goog.provide('obv.sloth') - -obv.sloth.sleep = function() { - ... -} -``` - - -### Filenames ### - -Filenames should should match the namespace of class that they define, e.g. `obv.foo.Class` should -be in `/foo/Class.js` and `obv.bar.baz` should be in `/bar/baz.js`. Filenames should end in .js, and -should contain no punctuation except for - or _ - -Prefer - to _ - - -## Custom toString() methods ## - -**Must always succeed without side effects.** - -You can control how your objects string-ify themselves by defining a custom `toString()` method. -This is fine, but you need to ensure that your method (1) always succeeds and (2) does not have -side-effects. If your method doesn't meet these criteria, it's very easy to run into serious -problems. For example, if toString() calls a method that does an assert, assert might try to output -the name of the object in which it failed, which of course requires calling toString(). - - -## Deferred initialization ## - -**OK** - -It isn't always possible to initialize variables at the point of declaration, so deferred -initialization is fine. - - -## Explicit scope ## - -**Always** ((Debatable)) - -Always use explicit scope - doing so increases portability and clarity. For example, don't rely on -window being in the scope chain. You might want to use your function in another application for -which window is not the content window. - - -## Code formatting ## - -### Curly Braces ### - -Because of implicit semicolon insertion, always start your curly braces on the same line as whatever -they're opening. For example: - -```js -if (something) { - // ... -} else { - // ... -} -``` - -### Line Length ### - -We don't strictly enforce an line length limit, but be sensible. Prefer to wrap at 100-chars, -especially for comments and doc blocks, horizontal scrolling sucks. - -### Whitespace ### - -In general: - -- 2-char indent for blocks. -- 4-char indent for wrapped lines (unless stated otherwise below). -- whitespace around operators. - -The following sections demonstrate and explain specific cases: - -### Array and Object Initializers ### - -Single-line array and object initializers are allowed when they fit on a line: - -No space after `[` or before `]` - -```js -var arr = [1, 2, 3] . -``` - -No space after `{` or before `}` - -``` js -var obj = {a: 1, b: 2, c: 3} -``` - -Multiline array initializers and object initializers are indented 4, unless there is a comma: - -```js -// Object initializer. -var inset = { - top: 10 - , right: 20 - , bottom: 15 - , left: 12 -} - -// Array initializer. -this._rows = [ - '"Slartibartfast" ' - , '"Zaphod Beeblebrox" ' - , '"Ford Prefect" ' - , '"Arthur Dent" ' - , '"Marvin the Paranoid Android" ' - , 'the.mice@magrathea.com' -] - -// Used in a method call. -createDom('div', { - id: 'foo' - , className: 'some-css-class' - , style: 'display:none' -}, 'Hello, world!') -``` - -Long identifiers or values present problems for aligned initialization lists, so always prefer non-aligned initialization. For example: - -```js -CORRECT_Object.prototype = { - a: 0 - , b: 1 - , lengthyName: 2 -} -``` - -Not like this: - -```js -WRONG_Object.prototype = { - a : 0 - , b : 1 - , lengthyName: 2 -} -``` - - -### Function Arguments ### - -When possible, all function arguments should be listed on the same line. If doing so would exceed -a reasonable line length, the arguments must be line-wrapped in a readable way. The indentation may -be either four spaces, or aligned to the parenthesis. - -Below are the most common patterns for argument wrapping: - -```js -// Four-space, wrap at 100. Works with very long function names, survives -// renaming without reindenting, low on space. -example.foo.bar.doThingThatIsVeryDifficultToExplain = function( - veryDescriptiveArgumentNumberOne, veryDescriptiveArgumentTwo, - tableModelEventHandlerProxy, artichokeDescriptorAdapterIterator) { - // ... -} - -// Four-space, one argument per line. Works with long function names, -// survives renaming, and emphasizes each argument. -example.foo.bar.doThingThatIsVeryDifficultToExplain = function( - veryDescriptiveArgumentNumberOne, - veryDescriptiveArgumentTwo, - tableModelEventHandlerProxy, - artichokeDescriptorAdapterIterator) { - // ... -} - -// Parenthesis-aligned indentation, wrap at 100. Visually groups arguments, -// low on space. -function foo(veryDescriptiveArgumentNumberOne, veryDescriptiveArgumentTwo, - tableModelEventHandlerProxy, artichokeDescriptorAdapterIterator) { - // ... -} - -// Parenthesis-aligned, one argument per line. Visually groups and -// emphasizes each individual argument. -function bar(veryDescriptiveArgumentNumberOne, - veryDescriptiveArgumentTwo, - tableModelEventHandlerProxy, - artichokeDescriptorAdapterIterator) { - // ... -} -``` - -When the function call is itself indented, you're free to start the 4-space indent relative to the -beginning of the original statement or relative to the beginning of the current function call. The -following are all acceptable indentation styles. - -```js -if (veryLongFunctionNameA( - veryLongArgumentName) || - veryLongFunctionNameB( - veryLongArgumentName)) { - veryLongFunctionNameC(veryLongFunctionNameD( - veryLongFunctioNameE( - veryLongFunctionNameF))) -} -``` - - -### Passing Anonymous Functions ### - -When declaring an anonymous function in the list of arguments for a function call, the body of the -function is indented two spaces from the left edge of the statement, or two spaces from the left -edge of the function keyword. This is to make the body of the anonymous function easier to read -(i.e. not be all squished up into the right half of the screen). - -```js -prefix.something.reallyLongFunctionName('whatever', function(a1, a2) { - if (a1.equals(a2)) { - someOtherLongFunctionName(a1) - } else { - andNowForSomethingCompletelyDifferent(a2.parrot) - } -}) - -var names = prefix.something.myExcellentMapFunction( - verboselyNamedCollectionOfItems, - function(item) { - return item.name - }) -``` - - -### More Indentation ### - -In fact, except for array and object initializers , and passing anonymous functions, all wrapped -lines should be indented four spaces, not indented two spaces. - -```js -thisIsAVeryLongVariableName = - hereIsAnEvenLongerOtherFunctionNameThatWillNotFitOnPrevLine() - -thisIsAVeryLongVariableName = 'expressionPartOne' + someMethodThatIsLong() + - thisIsAnEvenLongerOtherFunctionNameThatCannotBeIndentedMore() - -someValue = this.foo( - shortArg, - 'Some really long string arg - this is a pretty common case, actually.', - shorty2, - this.bar()) - -if (searchableCollection(allYourStuff).contains(theStuffYouWant) && - !ambientNotification.isActive() && (client.isAmbientSupported() || - client.alwaysTryAmbientAnyways())) { - ambientNotification.activate() -} -``` - - -### Blank lines ### - -Use newlines to group logically related pieces of code. For example: - -```js -doSomethingTo(x) -doSomethingElseTo(x) -andThen(x) - -nowDoSomethingWith(y) - -andNowWith(z) -``` - - -### Binary and Ternary Operators ### - -Always put the operator on the preceding line, so that you don't have to think about implicit -semi-colon insertion issues. - -```js -var x = a ? b : c // All on one line if it will fit. - -// Indentation +4 is OK. -var y = a ? - longButSimpleOperandB : longButSimpleOperandC - -// Chained calls can put the period at the start -this.doSomething() - .doSomethingElse() - .andNext() -``` - -Long lines often look bad no matter what you do, so if all else fails, just _try_ to make it look -as good as you can. - - -## Parentheses ## - -**Only where required** - -Use sparingly and in general only where required by the syntax and semantics. - -Never use parentheses for unary operators such as `delete`, `typeof` and `void` or after keywords -such as `return`, `throw` as well as others (`case`, `in` or `new`). - - -## Strings ## - -**Prefer ' over "** - -For consistency single-quotes (') are preferred to double-quotes ("). This is helpful when creating -strings that include HTML: - -```js -var msg = 'This is some HTML' -``` - - -## Visibility (private and protected fields) ## - -**Encouraged, use JSDoc annotations @private and @protected** - -We recommend the use of the JSDoc annotations @private and @protected to indicate visibility levels -or classes, functions, and properties. - -@private global variables and functions are only accessible to code in the same file. - -Constructors marked @private may only be instantiated by code in the same file and by their static -and instance members. @private constructors may also be accessed anywhere in the same file for their -public static properties and by the `instanceof` operator. - -Global variables, functions, and constructors should never be annotated @protected. - - -## JavaScript Types ## - -**Encouraged and (eventually) enforced by the compiler for client code** - -When documenting a type in JSDoc, be as specific and accurate as possible. The types we support are -JS2 style types and JS1.x types. - -See the [JS Compiler Docs](https://developers.google.com/closure/compiler/docs/js-for-compiler) for -a full reference. - - -## Comments ## - -**Use JSDoc** - -All files, classes, methods and properties should be documented with JSDoc comments. - -Inline comments should be of the `//` variety and have a space before the first character. - -Avoid sentence fragments. Start sentences with a properly capitalized word, and end them with punctuation. - -### Comment Syntax ### - -The JSDoc syntax is based on JavaDoc . Many tools extract metadata from JSDoc comments to perform -code validation and optimizations. These comments must be well-formed. - -```js -/** - * A JSDoc comment should begin with a slash and 2 asterisks. - * Inline tags should be enclosed in braces like {@code this}. - * @desc Block tags should always start on their own line. - */ - ``` - -### TODOs ### - -TODOs should descriptively declare how a piece of code should change in the future. -TODOs are specified in // style and specify a person who has more information about it. -It's preferred to keep TODOs out of jsdocs and near the applicable code itself. -For critical TODOs, it's best to also file a tracking issue. - -```js -// TODO(ev): Use a better sorting algorithm than bubble sort here. -``` - - -### JSDoc Indentation ### - -If you have to line break a block tag, you should treat this as breaking a code statement and indent -it four spaces. - -```js -/** - * Illustrates line wrapping for long param/return descriptions. - * @param {string} foo This is a param with a description too long to fit in - * one line. - * @return {number} This returns something that has a description too long to - * fit in one line. - */ -project.MyClass.prototype.method = function(foo) { - return 5 -} -``` - -You should not indent the @fileoverview command. - - -### Top/File-Level Comments ### - -The top level comment is designed to orient readers unfamiliar with the code to what is in this -file. It should provide a description of the file's contents, its author(s), and any dependencies or -compatibility information. As an example: - -```js -// Copyright 2012 The Obvious Corporation. - -/** - * @fileoverview Description of file, its uses and information - * about its dependencies. - */ -``` - - -### Class Comments ### - -Classes must be documented with a description, and appropriate type tags. - -```js -/** - * Class making something fun and easy. - * @param {string} arg1 An argument that makes this more interesting. - * @param {Array.} arg2 List of numbers to be processed. - * @constructor - * @extends {goog.Disposable} - */ -project.MyClass = function(arg1, arg2) { - // ... -} -goog.inherits(project.MyClass, goog.Disposable) -``` - -### Method and Function Comments ### - -A description must be provided along with parameters. Method descriptions should start with a -sentence written in the third person declarative voice. - -```js -/** - * Operates on an instance of MyClass and returns something. - * @param {project.MyClass} obj Instance of MyClass which leads to a long - * comment that needs to be wrapped to two lines. - * @return {boolean} Whether something occured. - */ -function PR_someMethod(obj) { - // ... -} -``` - -For simple getters that take no parameters and have no side effects, the description can be omitted. - -### Property Comments ### - -```js -/** - * Maximum number of things per pane. - * @type {number} - */ -project.MyClass.prototype.someProperty = 4 -``` - -## Inner Classes and Enums ## - -**Should be defined in the same file as the top level class** - -Inner classes and enums defined on another class should be defined in the same file as the top level -class. goog.provide statements are only necessary for the top level class. - - - -# Tips and Tricks # - -## JavaScript tidbits ## - -### True and False Boolean Expressions ### - -The following are all false in boolean expressions: - -``` -null -undefined -'' the empty string -0 the number -``` - -But be careful, because these are all true: - -``` -'0' the string -[] the empty array -{} the empty object -This means that instead of this: -``` - -while (x != null) { -you can write this shorter code (as long as you don't expect x to be 0, or the empty string, or false): - -while (x) { -And if you want to check a string to see if it is null or empty, you could do this: - -if (y != null && y != '') { -But this is shorter and nicer: - -if (y) { - -Caution: There are many unintuitive things about boolean expressions. Here are some of them: - -``` -Boolean('0') == true -'0' != true -0 != null -0 == [] -0 == false -Boolean(null) == false -null != true -null != false -Boolean(undefined) == false -undefined != true -undefined != false -Boolean([]) == true -[] != true -[] == false -Boolean({}) == true -{} != true -{} != false -``` - -### Conditional (Ternary) Operator (?:) ### - -Instead of this: - -```js -if (val != 0) { - return foo() -} else { - return bar() -} -``` - -you can write this: - -```js -return val ? foo() : bar() -``` - -The ternary conditional is also useful when generating HTML: - -```js -var html = '' -``` - -## && and || ## - -These binary boolean operators are short-circuited, and evaluate to the last evaluated term. - -"||" has been called the 'default' operator, because instead of writing this: - -```js -/** @param {*=} opt_win */ -function foo(opt_win) { - var win - if (opt_win) { - win = opt_win - } else { - win = window - } - // ... -} -``` - -you can write this: - -```js -/** @param {*=} opt_win */ -function foo(opt_win) { - var win = opt_win || window - // ... -} -``` - -"&&" is also useful for shortening code. For instance, instead of this: - -```js -if (node) { - if (node.kids) { - if (node.kids[index]) { - foo(node.kids[index]) - } - } -} -``` - -you could do this: - -```js -if (node && node.kids && node.kids[index]) { - foo(node.kids[index]) -} -``` - -or this: - -```js -var kid = node && node.kids && node.kids[index] -if (kid) { - foo(kid) -} -``` - -However, this is going a little too far: - -```js -node && node.kids && node.kids[index] && foo(node.kids[index]) -``` - -and can cause problems due to our usage of ASI. - -### Iterating over Node Lists ### - -Node lists are often implemented as node iterators with a filter. This means that getting a property like length is O(n), and iterating over the list by re-checking the length will be O(n^2). - -```js -var paragraphs = document.getElementsByTagName('p') -for (var i = 0; i < paragraphs.length; i++) { - doSomething(paragraphs[i]) -} -``` - -It is better to do this instead: - -```js -var paragraphs = document.getElementsByTagName('p') -for (var i = 0, paragraph; paragraph = paragraphs[i]; i++) { - doSomething(paragraph) -} -``` - -This works well for all collections and arrays as long as the array does not contain things that are treated as boolean false. - -In cases where you are iterating over the childNodes you can also use the firstChild and nextSibling properties. - -```js -var parentNode = document.getElementById('foo') -for (var child = parentNode.firstChild; child; child = child.nextSibling) { - doSomething(child) -} -``` diff --git a/themucha.md b/themucha.md new file mode 100644 index 0000000..85e8b4e --- /dev/null +++ b/themucha.md @@ -0,0 +1,13 @@ +2015-08-04 + +I hereby agree to the terms of the Contributors License +Agreement, version 2.0, with MD5 checksum +0962bd43bb8849553d91650a78cb2924. + +I furthermore declare that I am authorized and able to make this +agreement and sign this declaration. + +Signed, + +Mark Mucha +https://github.com/themucha