mirror of
https://github.com/EbookFoundation/free-programming-books.git
synced 2024-12-30 07:15:28 +00:00
e42b4701c4
* add awesome_bot to check urls * allow dupes * make url checking dependent on commit message * add web.archive.org to whitelist cuz awesome_bot is having trouble with those links * fix travis.yaml * check urls * need ruby * another site to avoid * check urls * make regex more generic * sudo deprecated * make travis linter happy check url * try skip results check url * timeout was what was killing us check url * testing fixing urls check url * dont allow timeout check url * testing timeout check url * put fpb back check url * enable to check_urls on arbitrary files check_urls:free-programming-books.md * try again check_urls:free-programming-books.md * test again check_urls:free-programming-books.md * travis doesnt like : check_urls=free-programming-books.md * allow arbitrary number of files to be checked check_urls=free-programming-books.md * woops forgot to fix the trigger regex check_urls=free-programming-books.md free-programming-books-en.md * use for loop instead of xargs check_urls=free-programming-books.md free-programming-books-en.md * add documentation
133 lines
8.1 KiB
Markdown
133 lines
8.1 KiB
Markdown
*Read this in other languages: [中文](CONTRIBUTING-zh.md).*
|
|
|
|
## Contributor License Agreement
|
|
By contributing you agree to the [LICENSE](https://github.com/EbookFoundation/free-programming-books/blob/master/LICENSE) of this repository.
|
|
|
|
## Contributor Code of Conduct
|
|
By contributing you agree to respect the [Code of Conduct](https://github.com/EbookFoundation/free-programming-books/blob/master/CODE_OF_CONDUCT.md) of this repository.
|
|
|
|
## In a nutshell
|
|
1. "A link to easily download a book" is not always a link to a *free* book. Please only contribute free content. Make sure it's free. We do not accept links to pages that *require* working email addresses to obtain books, but we welcome listings that request them.
|
|
2. You don't have to know Git: if you found something of interest which is *not already in this repo*, please open an [Issue](https://github.com/EbookFoundation/free-programming-books/issues) with your links propositions.
|
|
- If you know Git, please Fork the repo and send pull requests.
|
|
3. We have 5 kinds of lists. Choose the right one:
|
|
|
|
- *Books* : PDF, HTML, ePub, a gitbook.io based site, a Git repo, etc.
|
|
- *Courses* : A course is a learning material which is not a book. [This is a course](http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/).
|
|
- *Interactive Tutorials* : An interactive website which lets the user type code or commands and evaluates the result (by "evaluate" we don't mean "grade"). e.g.: [Try Haskell](http://tryhaskell.org), [Try Github](http://try.github.io).
|
|
- *Podcasts and Screencasts* : Podcasts and screencasts.
|
|
- *Problem Sets & Competitive Programming* : A website or software which lets you assess your programming skills by solving simple or complex problems, with or without code review, with or without comparing the results with other users.
|
|
|
|
4. Make sure to follow the [guidelines below](#guidelines) and respect the [Markdown formatting](#formatting) of the files.
|
|
|
|
5. Travis CI will run tests to make sure your lists are alphabetized and formatting rules are followed. Be sure to check that your changes pass the tests.
|
|
|
|
### Guidelines
|
|
- make sure a book is free. Double-check if needed. It helps the admins if you comment in the PR as to why you think the book is free.
|
|
- we don't accept files hosted on google drive, dropbox, mega, scribd, issuu and other similar file upload platforms
|
|
- insert your links in alphabetical order. If you see a misplaced link, please reorder it and submit a PR
|
|
- use the link with the most authoritative source (meaning author's website is better than editor's website is better than third party website)
|
|
+ no file hosting services (this includes (but is not limited to) Dropbox and Google Drive links)
|
|
- always prefer a `https` link over a `http` one -- as long as they are on the same domain and serve the same content
|
|
- on root domains, strip the trailing slash: `http://example.com` instead of `http://example.com/`
|
|
- always prefer the shortest link: `http://example.com/dir/` is better than `http://example.com/dir/index.html`
|
|
+ no URL shortener links
|
|
- usually prefer the "current" link over the "version" one: `http://example.com/dir/book/current/` is better than `http://example.com/dir/book/v1.0.0/index.html`
|
|
- if a link has an expired certificate/self-signed certificate/SSL issue of any other kind:
|
|
1. *replace it* with its `http` counterpart if possible (because accepting exceptions can be complicated on mobile devices)
|
|
2. *leave it* if no `http` version but link still accessible through `https` by adding an exception to the browser or ignoring the warning
|
|
3. *remove it* otherwise
|
|
- if a link exists in multiple format, add a separate link with a note about each format
|
|
- if a resource exists at different places on the Internet
|
|
+ use the link with the most authoritative source (meaning author's website is better than editor's website is better than third party website)
|
|
+ if they link to different editions and you judge these editions are different enough to be worth keeping them, add a separate link with a note about each edition (see [Issue #2353](https://github.com/EbookFoundation/free-programming-books/issues/2353) to contribute to the discussion on formatting.)
|
|
- prefer atomic commits (one commit by addition/deletion/modification) over bigger commits. No need to squash your commits before submitting a PR. (We will never enforce this rule as it's just a matter of convenience for the maintainers)
|
|
- if the book is older, include the publication date with the title.
|
|
- include the author name or names where appropriate. You can shorten author lists with "et al."
|
|
- if the book is not finished, and is still being worked on, add the "in process" notation, as described [below.](#in_process)
|
|
- if an email address or account setup is requested before download is enabled, add language-appropriate notes in parentheses, e.g.: `(email address *requested*, not required)`
|
|
|
|
### Formatting
|
|
- All lists are `.md` files. Try to learn [Markdown](https://guides.github.com/features/mastering-markdown/) syntax. It's simple!
|
|
- All the lists start with an Index. The idea is to list and link all sections and subsections there. Keep it in alphabetical order.
|
|
- Sections are using level 3 headings (`###`), and subsections are level 4 headings (`####`).
|
|
|
|
The idea is to have
|
|
- `2` empty lines between last link and new section
|
|
- `1` empty line between heading & first link of its section
|
|
- `0` empty line between two links
|
|
- `1` empty line at the end of each `.md` file
|
|
|
|
Example:
|
|
|
|
[...]
|
|
* [An Awesome Book](http://example.com/example.html)
|
|
(blank line)
|
|
(blank line)
|
|
### Example
|
|
(blank line)
|
|
* [Another Awesome Book](http://example.com/book.html)
|
|
* [Some Other Book](http://example.com/other.html)
|
|
|
|
- Don't put spaces between `]` and `(`:
|
|
|
|
```
|
|
BAD : * [Another Awesome Book] (http://example.com/book.html)
|
|
GOOD: * [Another Awesome Book](http://example.com/book.html)
|
|
```
|
|
|
|
- If you include the author, use ` - ` (a dash surrounded by single spaces):
|
|
|
|
```
|
|
BAD : * [Another Awesome Book](http://example.com/book.html)- John Doe
|
|
GOOD: * [Another Awesome Book](http://example.com/book.html) - John Doe
|
|
```
|
|
|
|
- Put a single space between the link and its format:
|
|
|
|
```
|
|
BAD : * [A Very Awesome Book](https://example.org/book.pdf)(PDF)
|
|
GOOD: * [A Very Awesome Book](https://example.org/book.pdf) (PDF)
|
|
```
|
|
|
|
- Author comes before format:
|
|
|
|
```
|
|
BAD : * [A Very Awesome Book](https://example.org/book.pdf)- (PDF) Jane Roe
|
|
GOOD: * [A Very Awesome Book](https://example.org/book.pdf) - Jane Roe (PDF)
|
|
```
|
|
|
|
- Multiple formats:
|
|
|
|
```
|
|
BAD : * [Another Awesome Book](http://example.com/)- John Doe (HTML)
|
|
BAD : * [Another Awesome Book](https://downloads.example.org/book.html)- John Doe (download site)
|
|
GOOD: * [Another Awesome Book](http://example.com/) - John Doe (HTML) [(PDF, EPUB)](https://downloads.example.org/book.html)
|
|
```
|
|
|
|
- Include publication year in title for older books:
|
|
|
|
```
|
|
BAD : * [A Very Awesome Book](https://example.org/book.html) - Jane Roe - 1970
|
|
GOOD: * [A Very Awesome Book (1970)](https://example.org/book.html) - Jane Roe
|
|
```
|
|
|
|
<a name="in_process"></a>
|
|
- In-process books:
|
|
|
|
```
|
|
GOOD: * [Will Be Awesome Soon Book](http://example.com/book2.html) - John Doe (HTML) (:construction: *in process*)
|
|
```
|
|
|
|
### Automation
|
|
- Formatting rules enforcement is automated via [Travis CI](https://travis-ci.com) using [fpb-lint](https://github.com/vhf/free-programming-books-lint) (see [.travis.yml](.travis.yml))
|
|
- URL validation uses [awesome_bot](https://github.com/dkhamsing/awesome_bot)
|
|
- To trigger URL validation, push a commit that includes a commit message containing `check_urls=file_to_check`:
|
|
|
|
```
|
|
check_urls=free-programming-books.md free-programming-books-en.md
|
|
```
|
|
|
|
- You may specify more than one file to check, using a single space to separate each entry.
|
|
- If you specify more than one file, results of the build is based on the result of the last file checked. You should be aware that you may get passing green builds due to this so be sure to inspect the build log at the end of the pull request by clicking on "Show all checks" -> "Details".
|