Coder Social home page Coder Social logo

booktree / booktree Goto Github PK

View Code? Open in Web Editor NEW
51.0 6.0 5.0 99 KB

UPDATE: I've decided that this project is not useful enough, Git for local editing is not the bottleneck. We must focus on ranking algorithms instead: https://github.com/************/ourbigbook

Makefile 100.00%

booktree's Introduction

Booktree Project

UPDATE: I've de that this project is not useful enough, Git for local editing is not the bottleneck. Let's do this instead https://github.com/************/write-free-science-books-to-get-famous-website

Book Development with Version Control

logo

Mission:

  • increase the quality / price ratio of textual learning material: textbooks, papers, tutorials.
  • motivate readers (students) to learn by contributing.

Links:

Intro for programmers

The project is modularized for maximum reuse. See the Architecture section.

Intro for non-programmers

  • create: edit and compile markdown / Latex input online or locally
  • publish: share HTML / PDF / EPUB online with one click
  • sell: set the price, buyers pay

with Version control because we adapted:

  • IT industry collaboration techniques Git + Bugtracker
  • to non programmer book developers

Read this if you are not familiar with version control (Git, SVN, Mercurial).

Use this if you want to convince policy makers to fund this idea.

Use cases

  • students and teachers will be motivated to improve the books they are using and create tutorials themselves to help their peers and to get recognition and thus better jobs, all while doing their obligations.

    Questions can be answered on issues only once, where they can be found by future learners. Closing issues motivates users to improve the text to prevent future users from even having the doubt.

  • researchers can collaborate, publish and get metrics on their papers more efficiently, freeing them from publishers who give them nothing in return but a brand.

For detailed use case stories see: use-cases.md.

Intended Features

High level roadmap of features we intend to implement.

Minimum viable product features:

  • when users push or save from the web UI markdown or LaTeX input, we compile and host HTML, PDF, EPUB output.

  • Js editor with side by side source / preview view for individual files, compatible with the on push compiler.

  • everything can be done via the web interface: mv, add, status, diff, multi-file commits, revolve merge conflicts.

    Non programmers:

    • learn Git from the browser
    • don't need to install anything

Other possible features:

  • metrics for everything: users, projects, groups, issues, comments, tags.

    Help people find the best material, and give the best contributors due credit.

  • writers can set a price for the compiled output, readers pay to have it.

  • bounty system similar to Bountysource: users can pay others to solve issues. Regular monthly payments can also be made for users to solve an average number of issues on each period, at a lower cost per issue.

For a detailed list of intended features, check our issue tracker.

For a list of features which we do not want see: non-features.md.

For the system architecture that will allow us to achieve those goals see: architecture.md.

Business model

Optimize for world happiness:

  • if your project is:

    • open source, you get all features for free
    • closed source, you may have to pay based on repository size / number of compiles
  • support: we are installable locally for free and we sell technical support.

  • book sale and bounties. Users can sell books and receive bounties, and we take a small percentage of their profit.

  • we will stay as open source as possible as long as it does not hinder the project.

    If we feel that we need to start making closed source features to get money to continue delivering the best product we will do so.

    If you are doing a similar project, we'd rather merge with you than compete.

Planned development timetable at: timetable.md.

Why the business model may work

  • The current coding / project management workflow is close to optimal for creation of code.

    Version control used for every single serious software project today.

    GitHub, a popular web interface had 3M users and 100M $ investment in 2012.

    Version control has helped the creation of open source libraries developed by thousands and used by millions, such as Firefox, the Linux kernel, GCC, jQuery, and many more.

    Books are very similar to code, but their development process is still on the paper age.

    We can reuse much of the existing coding infra structure to develop books and manage classes.

  • There are other projects which have insufficient subsets of what must be done, some of which are already financially bootstrapped.

    Because of our code reuse, we can offer a better product than them.

  • Specializing in books means that we can compile the books ourselves since there are few possible input / output types, allowing:

    • users to develop from the web UI without installing anything
    • users to sell the compiled output from our website
  • Books have lower costs than videos to:

    • create
    • modify
    • search
    • transmit and store, because files are smaller
    • collaborate on

    A sequence of well chosen images is better than a video because it is easy to refer to one of the images.

Contributing

If you want to contribute to this project, see the CONTRIBUTING.md.

booktree's People

Contributors

cirosantilli avatar razer6 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

booktree's Issues

Will we support one main compiler / format, and if yes which?

If we fix one it would greatly reduce costs and increase focus.

Desired capacities:

  • PDF output is a must
  • how important is preview as you type? If very important, we must stick to a js compiler, but no Js compiler currently does PDF simply.
  • if we are going to allow the sale of closed source books, we will also need to use a format that determines a subset of the information which will be public. E.g., GitBook and Softcover show the cover, and a summary publicly. On GitBook the title is website metadata, while in Softcover is is also Git tracked in the repo.

The compiler must support the following features:

  • headers
  • images with legend, width and height
  • tables with legend
  • computer code inline and display, with language specification
  • math inline and display
  • label ref like references to all of the above and across files
  • lists
  • TOC
  • URL links, autolinks. Links between internal files are not necessary since such concept does not exist in the PDF output: only header links should be used.
  • bibliography. Similar to references: only linking to the source paragraph from citations is mandatory. Bibtex parsing + a directive to insert the parsed bibtex would be an extra bonus.

A list of alternatives is present at: https://github.com/booktree/booktree/wiki/Compilers

I'm leaning towards either:

  • Kramdown, because it is the best compiler written in Ruby, so it reduces the learning curve and makes integration easier. Already has latex PDF output, and an experimental Prawn PDF output: gettalong/kramdown#78 Also the recommended compiler by Jekyll, so huge weight behind it.
  • marked: probably the best Js bet, but no PDF output like the other Js options. Maintainers are not considering even trivial pull requests quickly: markedjs/marked#426 markedjs/marked#414 markedjs/marked#412 markedjs/marked#411

LaTeX formats would be interesting to attack the already existing marked of academia, which ShareLaTeX and WriteLaTeX occupy. This tool would be more on the power side of the ease of use / power scale than them.

Related issues:

Editor frontend.

We need to choose one. One promising option is Prose.

Essential requirements:

  • support GitLab API. Possibly others. Prose: prose/prose#713
  • Markdown to HTML preview, specially Javascript preview as you type.

Secondary requirements:

  • multi file commit: Prose WONTFIX: prose/prose#712
  • file navigation. Prose has it, but not in the same screen as the editor: prose/prose#711: related on tree show view: #42 (good precursor) Share/write latex show on editor which is the way to go.

Add link to latest version of file on default branch from fixed version blob.

http://feedback.gitlab.com/forums/176466-general/suggestions/6194533-add-link-to-latest-version-of-file-on-default-bran

Decide if this really is a good idea.

The converse at http://feedback.gitlab.com/forums/176466-general/suggestions/5765123-shortcut-key-to-go-a-static-canonical-version-of-t might be acceptable, my doubt is if it's a good idea since it is better to give tag links instead of sha links to end users (or else you end up with a ton of hard to refer to versions). Also, it is likely that only CI builds for tags would be stored, not for every commit.

Will we use a CI to compile output or not, if yes how?

Will we have a CI for compilation or not?

If not, then:

  • there would be only a single supported format
  • we would have to think how to run LaTeX without generating a security risk to our server
  • but system complexity and cost would go WAY down.

If yes, the CI would have to:

  • if multiple formats are supported, upload individual HTML fragment files to the web interface, which shows the uploaded files on the pre fie blob preview after sanitizing them. But then, what to do about commits without tags or branches (there would be too many to store all the uploads)?

  • upload the single page HTML, PDF, zip, etc. output of the compilation to an outputs section from which it can be downloaded

  • offer some way to do HTML preview while editing.

    The simpler implementation is to just ensure that each builder has the capacity to built a single page preview and a standard interface. Update as you type is out of the question, and even update on button click might be sluggish.

    To allow update-as-you-type, we could determine the exact markdown flavor on the .travis.yml like file and then have a Js compiler that reads that file and uses the right syntax. This would be hard to implement, as such flexible compiler does not exist yet.

We are not going to implement GitHub page like functionality because it is only useful for having specific book formats and we want standardization over customization.

A middle ground might be to have a CI that only runs a single type of compilation, ideally from a Js engine + LaTeX for the PDF. This would allow preview as you type 100% compatible with the build. There is currently no Js engine that outputs LaTeX.

The CI will then deploy the outputs somewhere. We could deploy to tags, like GitHub releases. See also: #35

If we are going to do this, the following steps might be required:

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.