{"id":13398164,"url":"https://github.com/aosabook/500lines","last_synced_at":"2025-05-13T16:05:09.093Z","repository":{"id":39604937,"uuid":"14098121","full_name":"aosabook/500lines","owner":"aosabook","description":"500 Lines or Less","archived":false,"fork":false,"pushed_at":"2023-08-19T11:18:34.000Z","size":60251,"stargazers_count":29456,"open_issues_count":59,"forks_count":5868,"subscribers_count":1781,"default_branch":"master","last_synced_at":"2025-04-22T11:42:29.051Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aosabook.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2013-11-04T02:02:53.000Z","updated_at":"2025-04-22T07:53:58.000Z","dependencies_parsed_at":"2023-10-20T17:29:55.534Z","dependency_job_id":null,"html_url":"https://github.com/aosabook/500lines","commit_stats":{"total_commits":2968,"total_committers":75,"mean_commits":39.57333333333333,"dds":0.8763477088948787,"last_synced_commit":"fba689d101eb5600f5c8f4d7fd79912498e950e2"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aosabook%2F500lines","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aosabook%2F500lines/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aosabook%2F500lines/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aosabook%2F500lines/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aosabook","download_url":"https://codeload.github.com/aosabook/500lines/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252590415,"owners_count":21772934,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-30T19:00:18.812Z","updated_at":"2025-05-05T22:45:25.684Z","avatar_url":"https://github.com/aosabook.png","language":"JavaScript","readme":"*500 Lines or Less*\n===================\n\n\u003e \"What I cannot create, I do not understand.\"\n\u003e\n\u003e -- Richard Feynman\n\nThis is the source for the book *500 Lines or Less*, the fourth in the\n[Architecture of Open Source Applications](http://aosabook.org) series.  As\nwith other books in the series, all written material will be covered by the\nCreative Commons - Attribution license, and all code by the MIT License: please\nsee the [license description](LICENSE.md) for details.  In addition, all\nroyalties from paid-for versions will all go to Amnesty International.\n\nThe production of this book has been made possible by the financial support of\n[PagerDuty](http://www.pagerduty.com/company/work-with-us/).\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://github.com/aosabook/500lines/raw/master/resource/pagerduty_logo.png\" alt=\"PagerDuty Logo\" /\u003e\n\u003c/p\u003e\n\n\nMission\n-------\n\nEvery architect studies family homes, apartments, schools, and other common\ntypes of buildings during her training.  Equally, every programmer ought to\nknow how a compiler turns text into instructions, how a spreadsheet updates\ncells, and how a database efficiently persists data.\n\nPrevious books in the AOSA series have done this by describing the high-level\narchitecture of several mature open-source projects. While the lessons learned\nfrom those stories are valuable, they are sometimes difficult to absorb for\nprogrammers who have not yet had to build anything at that scale.\n\n\"500 Lines or Less\" focuses on the design decisions and tradeoffs that\nexperienced programmers make when they are writing code: \n\n*   Why divide the application into these particular modules with these\n    particular interfaces?\n*   Why use inheritance here and composition there?\n*   How do we predict where our program might need to be extended, and how can\n    we make that easy for other programmers?\n\nEach chapter consists of a walkthrough of a program that solves a canonical\nproblem in software engineering in at most 500 source lines of code. We hope\nthat the material in this book will help readers understand the varied\napproaches that engineers take when solving problems in different domains, and\nwill serve as a basis for projects that extend or modify the contributions\nhere.\n\nContributors\n------------\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003cth\u003eName\u003c/th\u003e\n    \u003cth\u003eAffiliation\u003c/th\u003e\n    \u003cth\u003eProject\u003c/th\u003e\n    \u003cth\u003eOnline\u003c/th\u003e\n    \u003cth\u003eGitHub\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eMike DiBernardo\u003c/td\u003e\n    \u003ctd\u003eWave\u003c/td\u003e\n    \u003ctd\u003eeditorial\u003c/td\u003e\n    \u003ctd\u003e\n        \u003cul\u003e\n            \u003cli\u003e\u003ca href=\"https://twitter.com/mdibernardo\"\u003e@mdibernardo\u003c/a\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ca href=\"http://mikedebo.ca\"\u003emikedebo.ca\u003c/a\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/MichaelDiBernardo\"\u003eMichaelDiBernardo\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n   \u003ctr\u003e\n    \u003ctd\u003eAmy Brown\u003c/td\u003e\n    \u003ctd\u003eindie\u003c/td\u003e\n    \u003ctd\u003eeditorial\u003c/td\u003e\n    \u003ctd\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"http://www.amyrbrown.ca/\"\u003eamyrbrown.ca\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"http://www.twitter.com/amyrbrown\"\u003e@amyrbrown\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/amyrbrown\"\u003eamyrbrown\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eAllison Kaptur\u003c/td\u003e\n    \u003ctd\u003eDropbox\u003c/td\u003e\n    \u003ctd\u003ebyterun\u003c/td\u003e\n    \u003ctd\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://twitter.com/akaptur\"\u003e@akaptur\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/akaptur\"\u003eakaptur\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eAudrey Tang\u003c/td\u003e\n    \u003ctd\u003eg0v.tw, Socialtext, Apple\u003c/td\u003e\n    \u003ctd\u003espreadsheet\u003c/td\u003e\n    \u003ctd\u003e\n        \u003cul\u003e\n            \u003cli\u003e\u003ca href=\"https://twitter.com/audreyt\"\u003e@audreyt\u003c/a\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/audreyt\"\u003eaudreyt\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eBrandon Rhodes\u003c/td\u003e\n    \u003ctd\u003eDropbox\u003c/td\u003e\n    \u003ctd\u003econtingent\u003c/td\u003e\n    \u003ctd\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://twitter.com/brandon_rhodes\"\u003e@brandon_rhodes\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/brandon-rhodes\"\u003ebrandon-rhodes\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eCarl Friedrich Bolz\u003c/td\u003e\n    \u003ctd\u003eKing's College London\u003c/td\u003e\n    \u003ctd\u003eobject model\u003c/td\u003e\n    \u003ctd\u003e\n        \u003cul\u003e\n            \u003cli\u003e\u003ca href=\"https://cfbolz.de\"\u003ecfbolz.de\u003c/a\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ca href=\"https://twitter.com/cfbolz\"\u003e@cfbolz\u003c/a\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/cfbolz\"\u003ecfbolz\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eCate Huston\u003c/td\u003e\n    \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n    \u003ctd\u003eImage Filter app\u003c/td\u003e\n    \u003ctd\u003e\n        \u003cul\u003e\n            \u003cli\u003e\u003ca href=\"http://www.accidentallyincode.com/\"\u003ewww.accidentallyincode.com/\u003c/a\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ca href=\"https://twitter.com/catehstn\"\u003e@catehstn\u003c/a\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/catehstn\"\u003ecatehstn\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eChristian Muise\u003c/td\u003e\n    \u003ctd\u003eUniversity of Melbourne\u003c/td\u003e\n    \u003ctd\u003eflow-shop\u003c/td\u003e\n    \u003ctd\u003e\n        \u003cul\u003e\n            \u003cli\u003e\u003ca href=\"https://twitter.com/cjmuise\"\u003e@cjmuise\u003c/a\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/haz\"\u003ehaz\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eDaniel Jackson\u003c/td\u003e\n    \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n    \u003ctd\u003esame-origin-policy\u003c/td\u003e\n    \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n    \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eDaniel Rocco\u003c/td\u003e\n    \u003ctd\u003eBrightLink Technology\u003c/td\u003e\n    \u003ctd\u003econtingent\u003c/td\u003e\n    \u003ctd\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://twitter.com/drocco007\"\u003e@drocco007\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/drocco007\"\u003edrocco007\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eDann Toliver\u003c/td\u003e\n    \u003ctd\u003eBento Box\u003c/td\u003e\n    \u003ctd\u003edagoba\u003c/td\u003e\n    \u003ctd\u003e\n        \u003cul\u003e\n            \u003cli\u003e\u003ca href=\"http://danntoliver.com\"\u003edanntoliver.com\u003c/a\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ca href=\"https://twitter.com/dann\"\u003e@dann\u003c/a\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/dxnn\"\u003edxnn\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eDessy Daskalov\u003c/td\u003e\n    \u003ctd\u003eNudge Rewards\u003c/td\u003e\n    \u003ctd\u003ePedometer\u003c/td\u003e\n    \u003ctd\u003e\n        \u003cul\u003e\n            \u003cli\u003e\u003ca href=\"http://www.dessydaskalov.com/\"\u003ewww.dessydaskalov.com\u003c/a\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ca href=\"https://twitter.com/dess_e\"\u003e@dess_e\u003c/a\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/dessy\"\u003edessy\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eDethe Elza\u003c/td\u003e\n    \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n    \u003ctd\u003eblockcode\u003c/td\u003e\n    \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/dethe\"\u003edethe\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eDustin Mitchell\u003c/td\u003e\n    \u003ctd\u003eMozilla\u003c/td\u003e\n    \u003ctd\u003ecluster\u003c/td\u003e\n    \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/djmitche\"\u003edjmitche\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eErick Dransch\u003c/td\u003e\n    \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n    \u003ctd\u003eModeller\u003c/td\u003e\n    \u003ctd\u003e\n        \u003cul\u003e\n            \u003cli\u003e\u003ca href=\"https://twitter.com/ErickDransch\"\u003e@ErickDransch\u003c/a\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/EkkiD\"\u003eEkkiD\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eEunsuk Kang\u003c/td\u003e\n    \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n    \u003ctd\u003esame-origin-policy\u003c/td\u003e\n    \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n    \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eGreg Wilson\u003c/td\u003e\n    \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n    \u003ctd\u003eweb-server\u003c/td\u003e\n    \u003ctd\u003e\n        \u003cul\u003e\n            \u003cli\u003e\u003ca href=\"https://twitter.com/gvwilson\"\u003e@gvwilson\u003c/a\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/gvwilson\"\u003egvwilson\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eGuido van Rossum\u003c/td\u003e\n    \u003ctd\u003eDropbox\u003c/td\u003e\n    \u003ctd\u003ecrawler\u003c/td\u003e\n    \u003ctd\u003e\n        \u003cul\u003e\n            \u003cli\u003e\u003ca href=\"https://twitter.com/gvanrossum\"\u003e@gvanrossum\u003c/a\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/gvanrossum\"\u003egvanrossum\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eA. Jesse Jiryu Davis\u003c/td\u003e\n    \u003ctd\u003eMongoDB\u003c/td\u003e\n    \u003ctd\u003ecrawler\u003c/td\u003e\n    \u003ctd\u003e\n        \u003cul\u003e\n            \u003cli\u003e\u003ca href=\"https://twitter.com/jessejiryudavis\"\u003e@jessejiryudavis\u003c/a\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/ajdavis\"\u003eajdavis\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eJessica Hamrick\u003c/td\u003e\n    \u003ctd\u003eUniversity of California, Berkeley\u003c/td\u003e\n    \u003ctd\u003esampler\u003c/td\u003e\n    \u003ctd\u003e\n        \u003cul\u003e\n            \u003cli\u003e\u003ca href=\"http://www.jesshamrick.com\"\u003ewww.jesshamrick.com\u003c/a\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ca href=\"https://twitter.com/jhamrick\"\u003e@jhamrick\u003c/a\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/jhamrick\"\u003ejhamrick\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eLeah Hanson\u003c/td\u003e\n    \u003ctd\u003eGoogle\u003c/td\u003e\n    \u003ctd\u003estatic analysis\u003c/td\u003e\n    \u003ctd\u003e\n        \u003cul\u003e\n            \u003cli\u003e\u003ca href=\"https://twitter.com/astrieanna\"\u003e@astrieanna\u003c/a\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/astrieanna\"\u003eastrieanna\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eLeo Zovic\u003c/td\u003e\n    \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n    \u003ctd\u003eevent-web-framework\u003c/td\u003e\n    \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n    \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eMalini Das\u003c/td\u003e\n    \u003ctd\u003eTwitch\u003c/td\u003e\n    \u003ctd\u003eci\u003c/td\u003e\n    \u003ctd\u003e\n        \u003cul\u003e\n            \u003cli\u003e\u003ca href=\"http://malinidas.com\"\u003emalinidas.com\u003c/a\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ca href=\"https://twitter.com/malinidas\"\u003e@malinidas\u003c/a\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/malini\"\u003emalini\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eMarina Samuel\u003c/td\u003e\n    \u003ctd\u003eMozilla\u003c/td\u003e\n    \u003ctd\u003eocr\u003c/td\u003e\n    \u003ctd\u003e\n        \u003cul\u003e\n            \u003cli\u003e\u003ca href=\"http://marinasamuel.com\"\u003ewww.marinasamuel.com\u003c/a\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ca href=\"https://twitter.com/emtwos\"\u003e@emtwos\u003c/a\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/emtwo\"\u003eemtwo\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eNed Batchelder\u003c/td\u003e\n    \u003ctd\u003eedX\u003c/td\u003e\n    \u003ctd\u003etemplating engine\u003c/td\u003e\n    \u003ctd\u003e\n        \u003cul\u003e\n            \u003cli\u003e\u003ca href=\"http://nedbatchelder.com\"\u003enedbatchelder.com\u003c/a\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ca href=\"https://twitter.com/nedbat\"\u003e@nedbat\u003c/a\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/nedbat\"\u003enedbat\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eSantiago Perez De Rosso\u003c/td\u003e\n    \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n    \u003ctd\u003esame-origin-policy\u003c/td\u003e\n    \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n    \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eTaavi Burns\u003c/td\u003e\n    \u003ctd\u003ePreviously at Points, now at PagerDuty\u003c/td\u003e\n    \u003ctd\u003edata-store\u003c/td\u003e\n    \u003ctd\u003e\n        \u003cul\u003e\n            \u003cli\u003e\u003ca href=\"https://twitter.com/jaaaarel\"\u003e@jaaaarel\u003c/a\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/taavi\"\u003etaavi\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eYoav Rubin\u003c/td\u003e\n    \u003ctd\u003eMicrosoft\u003c/td\u003e\n    \u003ctd\u003eIn-memory functional database\u003c/td\u003e\n    \u003ctd\u003e\n        \u003cul\u003e\n            \u003cli\u003e\u003ca href=\"https://twitter.com/yoavrubin\"\u003e@yoavrubin\u003c/a\u003e\u003c/li\u003e\n        \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/yoavrubin\"\u003eyoavrubin\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\nTechnical Reviewers\n-------------------\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eAmber Yust\u003c/td\u003e\n    \u003ctd\u003eAndrew Gwozdziewycz\u003c/td\u003e\n    \u003ctd\u003eAndrew Kuchling\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eAndrew Svetlov\u003c/td\u003e\n    \u003ctd\u003eAndy Shen\u003c/td\u003e\n    \u003ctd\u003eAnton Beloglazov\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eBen Trofatter\u003c/td\u003e\n    \u003ctd\u003eBorys Pierov\u003c/td\u003e\n    \u003ctd\u003eCarise Fernandez\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eCharles Stanhope\u003c/td\u003e\n    \u003ctd\u003eChris Atlee\u003c/td\u003e\n    \u003ctd\u003eChris Seaton\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eCyryl Płotnicki-Chudyk\u003c/td\u003e\n    \u003ctd\u003eDan Langer\u003c/td\u003e\n    \u003ctd\u003eDan Shapiro\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eDavid Pokorny\u003c/td\u003e\n    \u003ctd\u003eEric Bouwers\u003c/td\u003e\n    \u003ctd\u003eFrederic De Groef\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eGraham Lee\u003c/td\u003e\n    \u003ctd\u003eGregory Eric Sanderson\u003c/td\u003e\n    \u003ctd\u003eJames O'Beirne\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eJan de Baat\u003c/td\u003e\n    \u003ctd\u003eJana Beck\u003c/td\u003e\n    \u003ctd\u003eJessica McKellar\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eJo Van Eyck\u003c/td\u003e\n    \u003ctd\u003eJoel Crocker\u003c/td\u003e\n    \u003ctd\u003eJohan Thelin\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eJohannes Fürmann\u003c/td\u003e\n    \u003ctd\u003eJohn Morrissey\u003c/td\u003e\n    \u003ctd\u003eJoseph Kaptur\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eJosh Crompton\u003c/td\u003e\n    \u003ctd\u003eJoshua T. Corbin\u003c/td\u003e\n    \u003ctd\u003eKevin Huang\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eMaggie Zhou\u003c/td\u003e\n    \u003ctd\u003eMarc Towler\u003c/td\u003e\n    \u003ctd\u003eMarcin Milewski\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eMarco Lancini\u003c/td\u003e\n    \u003ctd\u003eMark Reid\u003c/td\u003e\n    \u003ctd\u003eMatthias Bussonnier\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eMax Mautner\u003c/td\u003e\n    \u003ctd\u003eMeggin Kearney\u003c/td\u003e\n    \u003ctd\u003eMike Aquino\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eNatalie Black\u003c/td\u003e\n    \u003ctd\u003eNick Presta\u003c/td\u003e\n    \u003ctd\u003eNikhil Almeida\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eNolan Prescott\u003c/td\u003e\n    \u003ctd\u003ePaul Martin\u003c/td\u003e\n    \u003ctd\u003ePiotr Banaszkiewicz\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003ePreston Holmes\u003c/td\u003e\n    \u003ctd\u003ePulkit Sethi\u003c/td\u003e\n    \u003ctd\u003eRail Aliiev\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eRonen Narkis\u003c/td\u003e\n    \u003ctd\u003eRose Ames\u003c/td\u003e\n    \u003ctd\u003eSina Jahan\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eStefan Turalski\u003c/td\u003e\n    \u003ctd\u003eWilliam Lachance\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n","funding_links":[],"categories":["JavaScript","Documentation Tools","Python","Programming Language Tutorials","JavaScript (485)","others","计算机基础","工具集","Books"],"sub_categories":["For Scala","Project","集合整理"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faosabook%2F500lines","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faosabook%2F500lines","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faosabook%2F500lines/lists"}