Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
500 Lines or Less
JavaScript Python TeX HTML Ruby Clojure Other
Branch: master
Failed to load latest commit information.
_build Minimal HTML build; styles not working yet.
_includes Initializing repository for '500 Lines or Less'.
_layouts Initializing repository for '500 Lines or Less'.
blockcode address issues raised by debo in review
catechism Remove describe from Object in favor of eval-ing describes inside of …
ci Done
cluster Done.
contingent Re-render chapter, and use Arial for diagrams
crawler HTML also.
css/bootstrap Initializing repository for '500 Lines or Less'.
dagoba copyedits
data-store Well, that was easy.
flow-shop One tiny change to make pronoun agree
functionalDB Updates based on the second review
graph-layout Add README for graph layout engine
html HTML everything except the matrices.
image-filters adds setup.md file.
interpreter acknowledgements
minutiae Minimal HTML build; styles not working yet.
modeller HTML everything except the matrices.
objmodel PDF
ocr Adding neural_network_design.py.
pedometer British spelling for 'travelled'
rasterizer For didactic purposes, define a base class SceneObject from which Sce…
resource Update readme with logo.
same-origin-policy Added threat model section
sample Sample formatting reference chapter.
sampler Changed code to match chapter text (all changes are to comments)
spreadsheet Merge branch 'master' of https://github.com/audreyt/500lines into aud…
static-analysis Update StaticAnalysisChapter.md
template-engine Typeset template engine.
tex Done.
torrent_client Some initial text
web-server Merge branch 'master' of github.com:aosabook/500lines
.classpath changing from node app tp clojure
.gitignore More images.
LICENSE.md Initializing repository for '500 Lines or Less'.
Makefile Initializing repository for '500 Lines or Less'.
README.md Add dagoba author to README.md
_config.yml Initializing repository for '500 Lines or Less'.
build.py Converting images.
requirements.txt Minimal HTML build; styles not working yet.

README.md

500 Lines or Less

"What I cannot create, I do not understand."

-- Richard Feynman

This is the source for the book 500 Lines or Less, the fourth in the Architecture of Open Source Applications series. As with other books in the series, all written material will be covered by the Creative Commons - Attribution license, and all code by the MIT License: please see the license description for details. In addition, all royalties from paid-for versions will all go to Amnesty International.

The production of this book has been made possible by the financial support of PagerDuty.

PagerDuty Logo

Mission

Every architect studies family homes, apartments, schools, and other common types of buildings during her training. Equally, every programmer ought to know how a compiler turns text into instructions, how a spreadsheet updates cells, and how a browser decides what to put where when it renders a page. This book's goal is to give readers that broad-ranging overview, and while doing so, to help them understand how software designers think.

Contributions should not focus on the details of one algorithm or on the features of a particular language. Instead, they should discuss the decisions and tradeoffs software architects make when crafting an application:

  • Why divide the application into these particular modules with these particular interfaces?
  • Why use inheritance here and composition there?
  • Why multi-thread this but not that?
  • When should the application allow for or rely on plugins, and how should they be configured and loaded?

Contribution Guidelines

Writing for a book like this should be fun, so we're trying to keep process to minimum. Here is our basic set of procedural guidelines:

  1. When you start coding, try to submit one pull request early (e.g. somewhere between 50-100 lines), so that we can catch any early problems that we never thought about.

  2. After that first commit, feel free to submit pull requests as often or as infrequently as you like.

  3. When you are done your "first draft" of your code, do let us know in the commit message, or by emailing us directly (emails below). We'll assign a reviewer or two to your work at that time.

Contributors

Name Affiliation Project Online GitHub Email (if you choose)
Mike DiBernardo freelance editorial MichaelDiBernardo mikedebo@gmail.com
Amy Brown indie editorial amyrbrown amy@amyrbrown.ca
Dustin Mitchell Mozilla cluster   djmitche dustin@mozila.com
Audrey Tang g0v.tw, Socialtext, Apple spreadsheet audreyt audreyt@audreyt.org
Greg Wilson Mozilla web-server gvwilson gvwilson@third-bit.com
Kresten Krab Thorup Trifork torrent client krestenkrab krab@trifork.com
Taavi Burns Previously at Points, now at PagerDuty data-store taavi taavi.burns@gmail.com
Guido van Rossum Dropbox crawler gvanrossum guido@python.org
A. Jesse Jiryu Davis MongoDB crawler ajdavis jesse@emptysquare.net
Erick Dransch Upverter Modeller EkkiD erick.dransch@upverter.com
Sarah Mei Ministry of Velocity testing framework sarahmei  
Ned Batchelder edX templating engine nedbat ned@nedbatchelder.com
Leah Hanson Google static analysis astrieanna leah.a.hanson@gmail.com
Christian Muise University of Melbourne flow-shop haz christian.muise@gmail.com
Carlos Scheidegger AT&T Research rasterizer cscheid carlos.scheidegger@gmail.com
Marina Samuel Mozilla ocr emtwo msamuel@mozilla.com
Cate Huston Image Filter app catehstn catehuston@gmail.com
Yoav Rubin Microsoft In-memory functional database yoavrubin
Dessy Daskalov Nudge Rewards Pedometer dessy dessy.daskalov@gmail.com
Carl Friedrich Bolz King's College London object model cfbolz cfbolz@gmx.de
Jessica Hamrick University of California, Berkeley sampler jhamrick jhamrick@berkeley.edu
Allison Kaptur Hacker School byterun @akaptur @akaptur allison.kaptur@gmail.com
Daniel Rocco BrightLink Technology contingent @drocco007 drocco007 drocco@gmail.com
Brandon Rhodes Dropbox contingent @brandon_rhodes brandon-rhodes brandon@rhodesmill.org
Dann Toliver Bento Box dagoba dxnn aosa@mrmuster.com
Something went wrong with that request. Please try again.