├── .gitignore ├── .travis.yml ├── Gemfile ├── Gemfile.lock ├── LICENSE ├── README.md ├── _bibliography ├── big-data.bib ├── consistency-crdts.bib ├── counters.bib ├── dist-langs.bib ├── example.bib ├── futures.bib ├── langs-consistency.bib ├── langs-extended-for-dist.bib ├── message-passing.bib ├── references.bib ├── rpc.bib └── streaming.bib ├── _config.yml ├── _includes ├── footer.html ├── head.html ├── header.html ├── icon-github.html ├── icon-github.svg ├── icon-twitter.html ├── icon-twitter.svg ├── navbar-links.html └── navbar.html ├── _layouts ├── chapter.html ├── default.html └── page.html ├── about.md ├── chapter ├── 1 │ ├── figures │ │ ├── grpc-benchmark.png │ │ ├── grpc-client-transport-handler.png │ │ ├── grpc-cross-language.png │ │ ├── grpc-googleapis.png │ │ ├── grpc-languages.png │ │ ├── grpc-server-transport-handler.png │ │ ├── hello-world-client.png │ │ ├── hello-world-server.png │ │ ├── http2-frame.png │ │ ├── http2-stream-lifecycle.png │ │ └── protobuf-types.png │ ├── gRPC.md │ └── rpc.md ├── 2 │ ├── futures.md │ └── images │ │ ├── 1.png │ │ ├── 15.png │ │ ├── 5.png │ │ ├── 6.png │ │ ├── 7.png │ │ ├── 8.png │ │ ├── 9.png │ │ ├── p-1.png │ │ ├── p-1.svg │ │ ├── p-2.png │ │ └── p-2.svg ├── 3 │ ├── E_account_spreadsheet_vats.png │ ├── E_vat.png │ ├── message-passing.md │ ├── sentinel_nodes.png │ └── supervision_tree.png ├── 4 │ ├── MR.png │ └── dist-langs.md ├── 5 │ └── langs-extended-for-dist.md ├── 6 │ ├── acidic-to-basic-how-the-database-ph-has-changed.md │ ├── being-consistent.md │ ├── counters.md │ └── resources │ │ ├── code │ │ └── counters │ │ │ └── python │ │ │ ├── operation-based-increment-and-decrement-counter.py │ │ │ ├── operation-based-increment-only-counter.py │ │ │ ├── state-based-increment-and-decrement-counter-correct.py │ │ │ ├── state-based-increment-and-decrement-counter-incorrect.py │ │ │ ├── state-based-increment-only-counter-correct.py │ │ │ └── state-based-increment-only-counter-incorrect.py │ │ └── images │ │ ├── counters │ │ ├── decrement-operation.png │ │ ├── increment-and-decrement-operations-commute.png │ │ ├── increment-operation.png │ │ ├── operation-based-increment-and-decrement-counter.png │ │ ├── operation-based-increment-only-counter.png │ │ ├── state-based-increment-and-decrement-counter-correct-lattice.png │ │ ├── state-based-increment-and-decrement-counter-correct.png │ │ ├── state-based-increment-and-decrement-counter-incorrect-lattice.png │ │ ├── state-based-increment-and-decrement-counter-incorrect.png │ │ ├── state-based-increment-only-counter-correct.png │ │ └── state-based-increment-only-counter-incorrect.png │ │ └── partitioned-network.jpg ├── 7 │ └── langs-consistency.md ├── 8 │ ├── Hive-architecture.png │ ├── Hive-transformation.png │ ├── big-data.md │ ├── cluster-overview.png │ ├── ecosystem.png │ ├── edge-cut.png │ ├── hadoop-ecosystem.jpg │ ├── spark-ecosystem.png │ ├── spark_pipeline.png │ ├── sparksql-data-flow.jpg │ ├── sql-vs-dataframes-vs-datasets.png │ └── vertex-cut-datastructure.png └── 9 │ ├── DAG.jpg │ ├── DiagramStream.jpg │ ├── Kafka.jpg │ ├── Naiad.jpg │ ├── TimelyD.jpg │ ├── Topology.jpg │ └── streaming.md ├── example.md ├── feed.xml ├── index.html └── resources ├── css ├── blog.css ├── bootstrap.min.css ├── custom.css.old.css ├── entypo.css ├── github.css.old.css ├── latex.css ├── main.css ├── prettify.css └── tufte.css ├── glyphs ├── BS-Bold.eot ├── BS-Bold.svg ├── BS-Bold.ttf ├── BS-Bold.woff ├── BS-BoldItalic.eot ├── BS-BoldItalic.svg ├── BS-BoldItalic.ttf ├── BS-BoldItalic.woff ├── BS-Regular.eot ├── BS-Regular.svg ├── BS-Regular.ttf ├── BS-Regular.woff ├── BS-RegularItalic.eot ├── BS-RegularItalic.svg ├── BS-RegularItalic.ttf ├── BS-RegularItalic.woff ├── Consolas-Bold.eot ├── Consolas-Bold.svg ├── Consolas-Bold.ttf ├── Consolas-Bold.woff ├── Consolas-Italic.eot ├── Consolas-Italic.svg ├── Consolas-Italic.ttf ├── Consolas-Italic.woff ├── Consolas.eot ├── Consolas.svg ├── Consolas.ttf ├── Consolas.woff ├── SN-Book.eot ├── SN-Book.svg ├── SN-Book.ttf ├── SN-Book.woff ├── SN-BookItalic.eot ├── SN-BookItalic.svg ├── SN-BookItalic.ttf ├── SN-BookItalic.woff ├── SN-Semibold.eot ├── SN-Semibold.svg ├── SN-Semibold.ttf ├── SN-Semibold.woff ├── SN-SemiboldItalic.eot ├── SN-SemiboldItalic.svg ├── SN-SemiboldItalic.ttf ├── SN-SemiboldItalic.woff ├── entypo-social.eot ├── entypo-social.ttf ├── entypo-social.woff ├── entypo.eot ├── entypo.ttf ├── entypo.woff ├── et-book │ ├── et-book-bold-line-figures │ │ ├── et-book-bold-line-figures.eot │ │ ├── et-book-bold-line-figures.svg │ │ ├── et-book-bold-line-figures.ttf │ │ └── et-book-bold-line-figures.woff │ ├── et-book-display-italic-old-style-figures │ │ ├── et-book-display-italic-old-style-figures.eot │ │ ├── et-book-display-italic-old-style-figures.svg │ │ ├── et-book-display-italic-old-style-figures.ttf │ │ └── et-book-display-italic-old-style-figures.woff │ ├── et-book-roman-line-figures │ │ ├── et-book-roman-line-figures.eot │ │ ├── et-book-roman-line-figures.svg │ │ ├── et-book-roman-line-figures.ttf │ │ └── et-book-roman-line-figures.woff │ ├── et-book-roman-old-style-figures │ │ ├── et-book-roman-old-style-figures.eot │ │ ├── et-book-roman-old-style-figures.svg │ │ ├── et-book-roman-old-style-figures.ttf │ │ └── et-book-roman-old-style-figures.woff │ └── et-book-semi-bold-old-style-figures │ │ ├── et-book-semi-bold-old-style-figures.eot │ │ ├── et-book-semi-bold-old-style-figures.svg │ │ ├── et-book-semi-bold-old-style-figures.ttf │ │ └── et-book-semi-bold-old-style-figures.woff ├── icomoon.eot ├── icomoon.svg ├── icomoon.ttf └── icomoon.woff ├── img ├── data-parallelism.png ├── exports-imports.png ├── imagequilt-animal-sounds.png ├── imagequilt-chinese-calligraphy.png ├── mapreduce-execution.png ├── mscr.png ├── napoleons-march.png ├── rhino.png ├── rpc_chapter_1_asyncrpc.jpg ├── rpc_chapter_1_syncrpc.jpg ├── rpc_chapter_1_ycog_10_steps.png └── table-example-be-page-159.png └── js ├── main.js └── vendor ├── bootstrap.min.js ├── jquery-1.11.0.min.js ├── lang-scala.js ├── retina.js └── slideout.min.js /.gitignore: -------------------------------------------------------------------------------- 1 | _site 2 | .sass-cache 3 | .jekyll-metadata 4 | 5 | .DS_Store 6 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | 2 | # opt-in to Travis new infrastructure 3 | sudo: false 4 | 5 | language: ruby 6 | rvm: 7 | - 2.0.0-p648 8 | 9 | # for faster builds 10 | cache: bundler 11 | env: BUNDLE_PATH=bundle-vendor/bundle 12 | 13 | # we must override install, or Travis's default Gemfile support 14 | # will kick in and use `vendor`, ignoring our BUNDLE_PATH 15 | # declaration in `.bundle/config` 16 | install: 17 | - bundle install 18 | 19 | script: 20 | - bundle exec jekyll build -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | gem 'jekyll', '3.2.0' 3 | gem 'jekyll-scholar' -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | bibtex-ruby (4.4.2) 5 | latex-decode (~> 0.0) 6 | citeproc (1.0.4) 7 | namae (~> 0.8) 8 | citeproc-ruby (1.1.5) 9 | citeproc (>= 1.0.4, < 2.0) 10 | csl (~> 1.4) 11 | colorator (1.1.0) 12 | csl (1.4.5) 13 | namae (~> 0.7) 14 | csl-styles (1.0.1.7) 15 | csl (~> 1.0) 16 | ffi (1.9.14) 17 | forwardable-extended (2.6.0) 18 | jekyll (3.2.0) 19 | colorator (~> 1.0) 20 | jekyll-sass-converter (~> 1.0) 21 | jekyll-watch (~> 1.1) 22 | kramdown (~> 1.3) 23 | liquid (~> 3.0) 24 | mercenary (~> 0.3.3) 25 | pathutil (~> 0.9) 26 | rouge (~> 1.7) 27 | safe_yaml (~> 1.0) 28 | jekyll-sass-converter (1.5.0) 29 | sass (~> 3.4) 30 | jekyll-scholar (5.8.5) 31 | bibtex-ruby (~> 4.0, >= 4.0.13) 32 | citeproc-ruby (~> 1.0) 33 | csl-styles (~> 1.0) 34 | jekyll (~> 3.0) 35 | jekyll-watch (1.5.0) 36 | listen (~> 3.0, < 3.1) 37 | kramdown (1.13.1) 38 | latex-decode (0.2.2) 39 | unicode (~> 0.4) 40 | liquid (3.0.6) 41 | listen (3.0.8) 42 | rb-fsevent (~> 0.9, >= 0.9.4) 43 | rb-inotify (~> 0.9, >= 0.9.7) 44 | mercenary (0.3.6) 45 | namae (0.11.0) 46 | pathutil (0.14.0) 47 | forwardable-extended (~> 2.6) 48 | rb-fsevent (0.9.8) 49 | rb-inotify (0.9.7) 50 | ffi (>= 0.5.0) 51 | rouge (1.11.1) 52 | safe_yaml (1.0.4) 53 | sass (3.4.23) 54 | unicode (0.4.4.2) 55 | 56 | PLATFORMS 57 | ruby 58 | 59 | DEPENDENCIES 60 | jekyll (= 3.2.0) 61 | jekyll-scholar 62 | 63 | BUNDLED WITH 64 | 1.13.5 65 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Programming Models for Distributed Computation 2 | ============================================== 3 | 4 | Source repo for the book that I and my students in my course at Northeastern University, [CS7680 Special Topics in Computing Systems: Programming Models for Distributed Computing](http://heather.miller.am/teaching/cs7680/), are writing on the topic of programming models for distributed systems. 5 | 6 | This is a book about the programming constructs we use to build distributed 7 | systems. These range from the small, RPC, futures, actors, to the large; systems 8 | built up of these components like MapReduce and Spark. We explore issues and 9 | concerns central to distributed systems like consistency, availability, and 10 | fault tolerance, from the lens of the programming models and frameworks that 11 | the programmer uses to build these systems. 12 | 13 | _**Please note that this is a work in progress, the book contents are in this repo, but we have not yet polished everything and published the final book online. Expected release: end of December**_ 14 | 15 | _Note: the chapters can be viewed by manually going to `http://dist-prog-book.com/chapter/x/article-name.html`, e.g., http://dist-prog-book.com/chapter/2/futures.html. One we finish off the chapters that need the most work, we will "release" the book by putting a proper index page in place._ 16 | 17 | _Note: we are currently in talks with a major publisher to publish this book as open-access textbook! Keep your fingers crossed!🤞_ 18 | 19 | ## Chapters 20 | 21 | 1. RPC 22 | 2. Futures & Promises 23 | 3. Message-passing 24 | 4. Distributed Programming Languages 25 | 5. Languages Extended for Distribution 26 | 6. CAP, Consistency, & CRDTs 27 | 7. Programming Languages & Consistency 28 | 8. Large-scale Parallel Batch Processing 29 | 9. Large-scale Streaming 30 | 31 | ## Editing this book 32 | 33 | ### Workflow 34 | 35 | 1. Fork/clone 36 | 2. Edit on your local branch 37 | 3. **Make a pull request to the `master` branch with your changes. Do not commit directly to the repository** 38 | 4. After merge, visit the live site `http://dist-prog-book.com/chapter/x/your-article.html` 39 | 40 | Note: We have CI that builds the book for each commit. Pull requests that don't 41 | build will not be merged. 42 | 43 | Note: when PRs are merged, the site is built and redeployed automatically. 44 | 45 | ### Structure 46 | 47 | Chapters are located in the `chapter` folder of the root directory. 48 | 49 | ## Dependencies 50 | 51 | This site uses a Jekyll, a Ruby framework. You'll need Ruby and Bundler 52 | installed. 53 | 54 | If you have Ruby already installed, to install Bundler, just do `sudo gem install bundler` 55 | 56 | ## Building & Viewing 57 | 58 | **Please build and view your site locally before submitting a PR!** 59 | 60 | cd into the directory where you cloned this repository, then install the 61 | required gems with `bundle install`. This will automatically put the gems into 62 | `./vendor/bundle`. 63 | 64 | Start the server in the context of the bundle: 65 | 66 | bundle exec jekyll serve 67 | 68 | The generated site is available at `http://localhost:4000` 69 | 70 | Note, this will bring you to the index page. If you'd like to see your chapter, 71 | make sure to navigate there explicitly, e.g., 72 | `http://localhost:4000/chapter/1/rpc.html`. 73 | 74 | ## Adding/editing pages 75 | 76 | Articles are in Markdown with straightforward YAML frontmatter. 77 | 78 | You can include code, math (LaTeX syntax), figures, blockquotes, side notes, 79 | etc. You can also use regular BibTeX to make a bibliography. To see everything 80 | you can do, I've prepared an example article. 81 | 82 | - [Live example article](http://dist-prog-book.com/example.html) 83 | - [Corresponding example page markdown](https://raw.githubusercontent.com/heathermiller/dist-prog-book/master/example.md) 84 | 85 | If you would like to add BibTeX entries to the bibliography for your chapter, 86 | check the `_bibliography` directory for a `.bib` file named after your chapter. 87 | -------------------------------------------------------------------------------- /_bibliography/big-data.bib: -------------------------------------------------------------------------------- 1 | @article{armbrust2015scaling, 2 | title={Scaling spark in the real world: performance and usability}, 3 | author={Armbrust, Michael and Das, Tathagata and Davidson, Aaron and Ghodsi, Ali and Or, Andrew and Rosen, Josh and Stoica, Ion and Wendell, Patrick and Xin, Reynold and Zaharia, Matei}, 4 | journal={Proceedings of the VLDB Endowment}, 5 | volume={8}, 6 | number={12}, 7 | pages={1840--1843}, 8 | year={2015}, 9 | publisher={VLDB Endowment} 10 | } 11 | 12 | 13 | @inproceedings{armbrust2015spark, 14 | title={Spark sql: Relational data processing in spark}, 15 | author={Armbrust, Michael and Xin, Reynold S and Lian, Cheng and Huai, Yin and Liu, Davies and Bradley, Joseph K and Meng, Xiangrui and Kaftan, Tomer and Franklin, Michael J and Ghodsi, Ali and others}, 16 | booktitle={Proceedings of the 2015 ACM SIGMOD International Conference on Management of Data}, 17 | pages={1383--1394}, 18 | year={2015}, 19 | organization={ACM} 20 | } 21 | 22 | @article{bu2010haloop, 23 | title={HaLoop: efficient iterative data processing on large clusters}, 24 | author={Bu, Yingyi and Howe, Bill and Balazinska, Magdalena and Ernst, Michael D}, 25 | journal={Proceedings of the VLDB Endowment}, 26 | volume={3}, 27 | number={1-2}, 28 | pages={285--296}, 29 | year={2010}, 30 | publisher={VLDB Endowment} 31 | } 32 | 33 | @inproceedings{chambers2010flumejava, 34 | title={FlumeJava: easy, efficient data-parallel pipelines}, 35 | author={Chambers, Craig and Raniwala, Ashish and Perry, Frances and Adams, Stephen and Henry, Robert R and Bradshaw, Robert and Weizenbaum, Nathan}, 36 | booktitle={ACM Sigplan Notices}, 37 | volume={45}, 38 | number={6}, 39 | pages={363--375}, 40 | year={2010}, 41 | organization={ACM} 42 | } 43 | 44 | 45 | @article{ching2015one, 46 | title={One trillion edges: graph processing at Facebook-scale}, 47 | author={Ching, Avery and Edunov, Sergey and Kabiljo, Maja and Logothetis, Dionysios and Muthukrishnan, Sambavi}, 48 | journal={Proceedings of the VLDB Endowment}, 49 | volume={8}, 50 | number={12}, 51 | pages={1804--1815}, 52 | year={2015}, 53 | publisher={VLDB Endowment} 54 | } 55 | 56 | @article{dean2008mapreduce, 57 | title={MapReduce: simplified data processing on large clusters}, 58 | author={Dean, Jeffrey and Ghemawat, Sanjay}, 59 | journal={Communications of the ACM}, 60 | volume={51}, 61 | number={1}, 62 | pages={107--113}, 63 | year={2008}, 64 | publisher={ACM} 65 | } 66 | 67 | 68 | @inproceedings{ekanayake2010twister, 69 | title={Twister: a runtime for iterative mapreduce}, 70 | author={Ekanayake, Jaliya and Li, Hui and Zhang, Bingjing and Gunarathne, Thilina and Bae, Seung-Hee and Qiu, Judy and Fox, Geoffrey}, 71 | booktitle={Proceedings of the 19th ACM International Symposium on High Performance Distributed Computing}, 72 | pages={810--818}, 73 | year={2010}, 74 | organization={ACM} 75 | } 76 | 77 | 78 | @inproceedings{ghemawat2003google, 79 | title={The Google file system}, 80 | author={Ghemawat, Sanjay and Gobioff, Howard and Leung, Shun-Tak}, 81 | booktitle={ACM SIGOPS operating systems review}, 82 | volume={37}, 83 | number={5}, 84 | pages={29--43}, 85 | year={2003}, 86 | organization={ACM} 87 | } 88 | 89 | @inproceedings{gonzalez2012powergraph, 90 | title={Powergraph: Distributed graph-parallel computation on natural graphs}, 91 | author={Gonzalez, Joseph E and Low, Yucheng and Gu, Haijie and Bickson, Danny and Guestrin, Carlos}, 92 | booktitle={Presented as part of the 10th USENIX Symposium on Operating Systems Design and Implementation (OSDI 12)}, 93 | pages={17--30}, 94 | year={2012} 95 | } 96 | 97 | @inproceedings{hindman2011mesos, 98 | title={Mesos: A Platform for Fine-Grained Resource Sharing in the Data Center.}, 99 | author={Hindman, Benjamin and Konwinski, Andy and Zaharia, Matei and Ghodsi, Ali and Joseph, Anthony D and Katz, Randy H and Shenker, Scott and Stoica, Ion}, 100 | booktitle={NSDI}, 101 | volume={11}, 102 | pages={22--22}, 103 | year={2011} 104 | } 105 | 106 | @inproceedings{hunt2010zookeeper, 107 | title={ZooKeeper: Wait-free Coordination for Internet-scale Systems.}, 108 | author={Hunt, Patrick and Konar, Mahadev and Junqueira, Flavio Paiva and Reed, Benjamin}, 109 | booktitle={USENIX Annual Technical Conference}, 110 | volume={8}, 111 | pages={9}, 112 | year={2010} 113 | } 114 | 115 | @inproceedings{isard2007dryad, 116 | title={Dryad: distributed data-parallel programs from sequential building blocks}, 117 | author={Isard, Michael and Budiu, Mihai and Yu, Yuan and Birrell, Andrew and Fetterly, Dennis}, 118 | booktitle={ACM SIGOPS Operating Systems Review}, 119 | volume={41}, 120 | number={3}, 121 | pages={59--72}, 122 | year={2007}, 123 | organization={ACM} 124 | } 125 | 126 | 127 | @inproceedings{kreps2011kafka, 128 | title={Kafka: A distributed messaging system for log processing}, 129 | author={Kreps, Jay and Narkhede, Neha and Rao, Jun and others}, 130 | booktitle={Proceedings of the NetDB}, 131 | pages={1--7}, 132 | year={2011} 133 | } 134 | 135 | @inproceedings{li2014tachyon, 136 | title={Tachyon: Reliable, memory speed storage for cluster computing frameworks}, 137 | author={Li, Haoyuan and Ghodsi, Ali and Zaharia, Matei and Shenker, Scott and Stoica, Ion}, 138 | booktitle={Proceedings of the ACM Symposium on Cloud Computing}, 139 | pages={1--15}, 140 | year={2014}, 141 | organization={ACM} 142 | } 143 | 144 | 145 | @inproceedings{malewicz2010pregel, 146 | title={Pregel: a system for large-scale graph processing}, 147 | author={Malewicz, Grzegorz and Austern, Matthew H and Bik, Aart JC and Dehnert, James C and Horn, Ilan and Leiser, Naty and Czajkowski, Grzegorz}, 148 | booktitle={Proceedings of the 2010 ACM SIGMOD International Conference on Management of data}, 149 | pages={135--146}, 150 | year={2010}, 151 | organization={ACM} 152 | } 153 | @inproceedings{okcan2011processing, 154 | title={Processing theta-joins using MapReduce}, 155 | author={Okcan, Alper and Riedewald, Mirek}, 156 | booktitle={Proceedings of the 2011 ACM SIGMOD International Conference on Management of data}, 157 | pages={949--960}, 158 | year={2011}, 159 | organization={ACM} 160 | } 161 | 162 | @inproceedings{olston2008pig, 163 | title={Pig latin: a not-so-foreign language for data processing}, 164 | author={Olston, Christopher and Reed, Benjamin and Srivastava, Utkarsh and Kumar, Ravi and Tomkins, Andrew}, 165 | booktitle={Proceedings of the 2008 ACM SIGMOD international conference on Management of data}, 166 | pages={1099--1110}, 167 | year={2008}, 168 | organization={ACM} 169 | } 170 | 171 | @article{pike2005interpreting, 172 | title={Interpreting the data: Parallel analysis with Sawzall}, 173 | author={Pike, Rob and Dorward, Sean and Griesemer, Robert and Quinlan, Sean}, 174 | journal={Scientific Programming}, 175 | volume={13}, 176 | number={4}, 177 | pages={277--298}, 178 | year={2005}, 179 | publisher={Hindawi Publishing Corporation} 180 | } 181 | 182 | @inproceedings{shvachko2010hadoop, 183 | title={The hadoop distributed file system}, 184 | author={Shvachko, Konstantin and Kuang, Hairong and Radia, Sanjay and Chansler, Robert}, 185 | booktitle={2010 IEEE 26th symposium on mass storage systems and technologies (MSST)}, 186 | pages={1--10}, 187 | year={2010}, 188 | organization={IEEE} 189 | } 190 | 191 | @online{WinNT, 192 | author = {Tarau, Paul}, 193 | title = {Bulk synchronous model}, 194 | year = 2014, 195 | url = {http://www.cse.unt.edu/~tarau/teaching/parpro/papers/Bulk%20synchronous%20parallel.pdf}, 196 | urldate = {2016-11-24} 197 | } 198 | 199 | @article{thusoo2009hive, 200 | title={Hive: a warehousing solution over a map-reduce framework}, 201 | author={Thusoo, Ashish and Sarma, Joydeep Sen and Jain, Namit and Shao, Zheng and Chakka, Prasad and Anthony, Suresh and Liu, Hao and Wyckoff, Pete and Murthy, Raghotham}, 202 | journal={Proceedings of the VLDB Endowment}, 203 | volume={2}, 204 | number={2}, 205 | pages={1626--1629}, 206 | year={2009}, 207 | publisher={VLDB Endowment} 208 | } 209 | 210 | @inproceedings{thusoo2010hive, 211 | title={Hive-a petabyte scale data warehouse using hadoop}, 212 | author={Thusoo, Ashish and Sarma, Joydeep Sen and Jain, Namit and Shao, Zheng and Chakka, Prasad and Zhang, Ning and Antony, Suresh and Liu, Hao and Murthy, Raghotham}, 213 | booktitle={2010 IEEE 26th International Conference on Data Engineering (ICDE 2010)}, 214 | pages={996--1005}, 215 | year={2010}, 216 | organization={IEEE} 217 | } 218 | 219 | @article{valiant1990bridging, 220 | title={A bridging model for parallel computation}, 221 | author={Valiant, Leslie G}, 222 | journal={Communications of the ACM}, 223 | volume={33}, 224 | number={8}, 225 | pages={103--111}, 226 | year={1990}, 227 | publisher={ACM} 228 | } 229 | 230 | @inproceedings{vavilapalli2013apache, 231 | title={Apache hadoop yarn: Yet another resource negotiator}, 232 | author={Vavilapalli, Vinod Kumar and Murthy, Arun C and Douglas, Chris and Agarwal, Sharad and Konar, Mahadev and Evans, Robert and Graves, Thomas and Lowe, Jason and Shah, Hitesh and Seth, Siddharth and others}, 233 | booktitle={Proceedings of the 4th annual Symposium on Cloud Computing}, 234 | pages={5}, 235 | year={2013}, 236 | organization={ACM} 237 | } 238 | 239 | @inproceedings{xin2013graphx, 240 | title={Graphx: A resilient distributed graph system on spark}, 241 | author={Xin, Reynold S and Gonzalez, Joseph E and Franklin, Michael J and Stoica, Ion}, 242 | booktitle={First International Workshop on Graph Data Management Experiences and Systems}, 243 | pages={2}, 244 | year={2013}, 245 | organization={ACM} 246 | } 247 | 248 | @inproceedings{yu2008dryadlinq, 249 | title={DryadLINQ: A System for General-Purpose Distributed Data-Parallel Computing Using a High-Level Language.}, 250 | author={Yu, Yuan and Isard, Michael and Fetterly, Dennis and Budiu, Mihai and Erlingsson, {\'U}lfar and Gunda, Pradeep Kumar and Currey, Jon}, 251 | booktitle={OSDI}, 252 | volume={8}, 253 | pages={1--14}, 254 | year={2008} 255 | } 256 | 257 | @article{zaharia2010spark, 258 | title={Spark: cluster computing with working sets.}, 259 | author={Zaharia, Matei and Chowdhury, Mosharaf and Franklin, Michael J and Shenker, Scott and Stoica, Ion}, 260 | journal={HotCloud}, 261 | volume={10}, 262 | pages={10--10}, 263 | year={2010} 264 | } 265 | 266 | @inproceedings{zaharia2012discretized, 267 | title={Discretized streams: an efficient and fault-tolerant model for stream processing on large clusters}, 268 | author={Zaharia, Matei and Das, Tathagata and Li, Haoyuan and Shenker, Scott and Stoica, Ion}, 269 | booktitle={Presented as part of the}, 270 | year={2012} 271 | } 272 | 273 | @article{zhang2012imapreduce, 274 | title={imapreduce: A distributed computing framework for iterative computation}, 275 | author={Zhang, Yanfeng and Gao, Qixin and Gao, Lixin and Wang, Cuirong}, 276 | journal={Journal of Grid Computing}, 277 | volume={10}, 278 | number={1}, 279 | pages={47--68}, 280 | year={2012}, 281 | publisher={Springer} 282 | } 283 | -------------------------------------------------------------------------------- /_bibliography/consistency-crdts.bib: -------------------------------------------------------------------------------- 1 | @inproceedings{Uniqueness, 2 | author = {Philipp Haller and 3 | Martin Odersky}, 4 | title = {Capabilities for Uniqueness and Borrowing}, 5 | booktitle = {ECOOP 2010, Maribor, Slovenia, June 21-25, 2010.}, 6 | pages = {354--378}, 7 | year = {2010}, 8 | } 9 | 10 | @inproceedings{Elsman2005, 11 | author = {Martin Elsman}, 12 | title = {Type-specialized serialization with sharing}, 13 | booktitle = {Trends in Functional Programming}, 14 | year = {2005}, 15 | pages = {47-62}, 16 | } 17 | 18 | @article{Kennedy2004, 19 | author = {Andrew Kennedy}, 20 | title = {Pickler combinators}, 21 | journal = {J. Funct. Program.}, 22 | volume = {14}, 23 | number = {6}, 24 | year = {2004}, 25 | pages = {727-739}, 26 | } -------------------------------------------------------------------------------- /_bibliography/counters.bib: -------------------------------------------------------------------------------- 1 | @inproceedings{Shapiro2011, 2 | author = {Marc Shapiro and Nuno Preguiça and Carlos Baquero and Marek Zawirski}, 3 | title = {A comprehensive study of Convergent and Commutative Replicated Data Types}, 4 | booktitle = {[Research Report] RR-7506, Inria – Centre Paris-Rocquencourt}, 5 | pages = {50}, 6 | year = {2011}, 7 | } 8 | 9 | @inproceedings{CRDT2011, 10 | author = {Marc Shapiro, Nuno Preguiça, Carlos Baquero and Marek Zawirski}, 11 | title = {Conflict-free Replicated Data Types}, 12 | booktitle = {[Research Report] RR-7687, INRIA}, 13 | year = {2011}, 14 | pages = {18}, 15 | } -------------------------------------------------------------------------------- /_bibliography/dist-langs.bib: -------------------------------------------------------------------------------- 1 | @article{Mernik2005, 2 | author = {Marjan Mernik and 3 | Jan Heering and 4 | Anthony M. Sloane}, 5 | title = {When and how to develop domain-specific languages}, 6 | journal = {ACM computing surveys}, 7 | volume = {37}, 8 | number = {4}, 9 | year = {2005}, 10 | pages = {316-344}, 11 | } 12 | 13 | @article{Armstrong2010, 14 | author = {Joe Armstrong}, 15 | title = {Erlang}, 16 | journal = {Communications of the ACM}, 17 | volume = {53}, 18 | number = {9}, 19 | year = {2010}, 20 | pages = {68-75}, 21 | } 22 | 23 | @article{Deursen2000, 24 | author = {Arie van Deursen and 25 | Paul Klint and 26 | Joost Visser}, 27 | title = {Domain-Specific Languages: An Annotated Bibliography}, 28 | journal = {Sigplan Notices}, 29 | volume = {35}, 30 | number = {6}, 31 | year = {2000}, 32 | pages = {26-36}, 33 | } 34 | 35 | @article{Liskov1988, 36 | author = {Barbara Liskov}, 37 | title = {Distributed Programming in Argus}, 38 | journal = {Communications of the ACM}, 39 | volume = {31}, 40 | number = {3}, 41 | year = {1988}, 42 | pages = {300-312}, 43 | } 44 | 45 | @article{Black1987, 46 | author = {Andrew Black and 47 | Norman Hutchinson and 48 | Eric Jul and 49 | Henry Levy and 50 | Larry Carter}, 51 | title = {Distribution and Abstract Types in Emerald}, 52 | journal = {IEEE Transactions on Software Engineering}, 53 | volume = {1}, 54 | number = {}, 55 | year = {1987}, 56 | pages = {65-76}, 57 | } 58 | 59 | @incollection{waldo1997, 60 | title={A note on distributed computing}, 61 | author={Waldo, Jim and Wyant, Geoff and Wollrath, Ann and Kendall, Sam}, 62 | booktitle={Mobile Object Systems Towards the Programmable Internet}, 63 | pages={49--64}, 64 | year={1997}, 65 | publisher={Springer} 66 | } 67 | 68 | @article{nitzberg1991, 69 | title={Distributed shared memory: A survey of issues and algorithms}, 70 | author={Nitzberg, Bill and Lo, Virginia}, 71 | journal={Distributed Shared Memory-Concepts and Systems}, 72 | pages={42--50}, 73 | year={1991} 74 | } 75 | 76 | @inproceedings{zaharia2012resilient, 77 | title={Resilient distributed datasets: A fault-tolerant abstraction for in-memory cluster computing}, 78 | author={Zaharia, Matei and Chowdhury, Mosharaf and Das, Tathagata and Dave, Ankur and Ma, Justin and McCauley, Murphy and Franklin, Michael J and Shenker, Scott and Stoica, Ion}, 79 | booktitle={Proceedings of the 9th USENIX conference on Networked Systems Design and Implementation}, 80 | pages={2--2}, 81 | year={2012}, 82 | organization={USENIX Association} 83 | } 84 | 85 | @article{dean2008mapreduce, 86 | title={MapReduce: simplified data processing on large clusters}, 87 | author={Dean, Jeffrey and Ghemawat, Sanjay}, 88 | journal={Communications of the ACM}, 89 | volume={51}, 90 | number={1}, 91 | pages={107--113}, 92 | year={2008}, 93 | publisher={ACM} 94 | } 95 | 96 | @inproceedings{gonzalez2012powergraph, 97 | title={Powergraph: Distributed graph-parallel computation on natural graphs}, 98 | author={Gonzalez, Joseph E and Low, Yucheng and Gu, Haijie and Bickson, Danny and Guestrin, Carlos}, 99 | booktitle={Presented as part of the 10th USENIX Symposium on Operating Systems Design and Implementation (OSDI 12)}, 100 | pages={17--30}, 101 | year={2012} 102 | } 103 | 104 | @article{brewer2012cap, 105 | title={CAP twelve years later: How the" rules" have changed}, 106 | author={Brewer, Eric}, 107 | journal={Computer}, 108 | volume={45}, 109 | number={2}, 110 | pages={23--29}, 111 | year={2012}, 112 | publisher={IEEE} 113 | } 114 | 115 | @article{gilbert2002brewer, 116 | title={Brewer's conjecture and the feasibility of consistent, available, partition-tolerant web services}, 117 | author={Gilbert, Seth and Lynch, Nancy}, 118 | journal={ACM SIGACT News}, 119 | volume={33}, 120 | number={2}, 121 | pages={51--59}, 122 | year={2002}, 123 | publisher={ACM} 124 | } 125 | 126 | @inproceedings{shapiro2011conflict, 127 | title={Conflict-free replicated data types}, 128 | author={Shapiro, Marc and Pregui{\c{c}}a, Nuno and Baquero, Carlos and Zawirski, Marek}, 129 | booktitle={Symposium on Self-Stabilizing Systems}, 130 | pages={386--400}, 131 | year={2011}, 132 | organization={Springer} 133 | } 134 | -------------------------------------------------------------------------------- /_bibliography/example.bib: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | References 4 | ========== 5 | 6 | @inproceedings{Uniqueness, 7 | author = {Philipp Haller and 8 | Martin Odersky}, 9 | title = {Capabilities for Uniqueness and Borrowing}, 10 | booktitle = {ECOOP 2010, Maribor, Slovenia, June 21-25, 2010.}, 11 | pages = {354--378}, 12 | year = {2010}, 13 | } 14 | 15 | @inproceedings{Elsman2005, 16 | author = {Martin Elsman}, 17 | title = {Type-specialized serialization with sharing}, 18 | booktitle = {Trends in Functional Programming}, 19 | year = {2005}, 20 | pages = {47-62}, 21 | } 22 | 23 | @article{Kennedy2004, 24 | author = {Andrew Kennedy}, 25 | title = {Pickler combinators}, 26 | journal = {J. Funct. Program.}, 27 | volume = {14}, 28 | number = {6}, 29 | year = {2004}, 30 | pages = {727-739}, 31 | } -------------------------------------------------------------------------------- /_bibliography/futures.bib: -------------------------------------------------------------------------------- 1 | @inproceedings{Uniqueness, 2 | author = {Philipp Haller and 3 | Martin Odersky}, 4 | title = {Capabilities for Uniqueness and Borrowing}, 5 | booktitle = {ECOOP 2010, Maribor, Slovenia, June 21-25, 2010.}, 6 | pages = {354--378}, 7 | year = {2010}, 8 | } 9 | 10 | @inproceedings{Elsman2005, 11 | author = {Martin Elsman}, 12 | title = {Type-specialized serialization with sharing}, 13 | booktitle = {Trends in Functional Programming}, 14 | year = {2005}, 15 | pages = {47-62}, 16 | } 17 | 18 | @article{Kennedy2004, 19 | author = {Andrew Kennedy}, 20 | title = {Pickler combinators}, 21 | journal = {J. Funct. Program.}, 22 | volume = {14}, 23 | number = {6}, 24 | year = {2004}, 25 | pages = {727-739}, 26 | } 27 | 28 | @article{Multilisp, 29 | author = {Halstead,Jr., Robert H.}, 30 | title = {MULTILISP: A Language for Concurrent Symbolic Computation}, 31 | journal = {ACM Trans. Program. Lang. Syst.}, 32 | issue_date = {Oct. 1985}, 33 | volume = {7}, 34 | number = {4}, 35 | month = oct, 36 | year = {1985}, 37 | issn = {0164-0925}, 38 | pages = {501--538}, 39 | numpages = {38}, 40 | url = {http://doi.acm.org/10.1145/4472.4478}, 41 | doi = {10.1145/4472.4478}, 42 | acmid = {4478}, 43 | publisher = {ACM}, 44 | address = {New York, NY, USA}, 45 | } 46 | 47 | @article{Promises88, 48 | author = {Liskov, B. and Shrira, L.}, 49 | title = {Promises: Linguistic Support for Efficient Asynchronous Procedure Calls in Distributed Systems}, 50 | journal = {SIGPLAN Not.}, 51 | issue_date = {July 1988}, 52 | volume = {23}, 53 | number = {7}, 54 | month = jun, 55 | year = {1988}, 56 | issn = {0362-1340}, 57 | pages = {260--267}, 58 | numpages = {8}, 59 | url = {http://doi.acm.org/10.1145/960116.54016}, 60 | doi = {10.1145/960116.54016}, 61 | acmid = {54016}, 62 | publisher = {ACM}, 63 | address = {New York, NY, USA}, 64 | } 65 | 66 | @article{Argus88, 67 | title={Distributed programming in Argus}, 68 | author={Liskov, Barbara}, 69 | journal={Communications of the ACM}, 70 | volume={31}, 71 | number={3}, 72 | pages={300--312}, 73 | year={1988}, 74 | publisher={ACM} 75 | } 76 | 77 | @article{4, 78 | author = {Eriksen, Marius}, 79 | title = {Your Server As a Function}, 80 | journal = {SIGOPS Oper. Syst. Rev.}, 81 | issue_date = {January 2014}, 82 | volume = {48}, 83 | number = {1}, 84 | month = may, 85 | year = {2014}, 86 | issn = {0163-5980}, 87 | pages = {51--57}, 88 | numpages = {7}, 89 | url = {http://doi.acm.org/10.1145/2626401.2626413}, 90 | doi = {10.1145/2626401.2626413}, 91 | acmid = {2626413}, 92 | publisher = {ACM}, 93 | address = {New York, NY, USA}, 94 | } 95 | 96 | @misc{5, 97 | title={What are the differences between JavaScript Promise and a Java Future?}, 98 | author={Google}, 99 | url = {https://www.quora.com/What-are-the-differences-between-JavaScript-Promise-and-a-Java-Future}, 100 | publisher = {Quora} 101 | } 102 | 103 | @misc{6, 104 | title={The JavaScript Event Loop: Explained}, 105 | author={Erin Swenson-Healey}, 106 | url = {http://blog.carbonfive.com/2013/10/27/the-javascript-event-loop-explained/} 107 | } 108 | 109 | @misc{7, 110 | title={jQuery.Deferred()}, 111 | url = {https://api.jquery.com/jquery.deferred/} 112 | } 113 | 114 | @misc{8, 115 | title={Effective Scala}, 116 | author={Marius Eriksen}, 117 | url = {http://twitter.github.io/effectivescala} 118 | } 119 | 120 | @misc{8, 121 | title={Concurrency model and Event Loop}, 122 | author={MDN}, 123 | url = {https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop} 124 | } 125 | 126 | @misc{9, 127 | title={Task vs Future vs Promise}, 128 | author={Ned Stoyanov}, 129 | url = {http://www.nedstoyanov.com/promises-and-futures/} 130 | } 131 | 132 | @misc{10, 133 | title={Futures and Promises - List of Implementations}, 134 | url = {http://www.liquisearch.com/futures_and_promises/list_of_implementations} 135 | } 136 | 137 | @misc{11, 138 | title={Promises and Deferreds}, 139 | author={Trevor Burnham}, 140 | url = {https://www.safaribooksonline.com/library/view/async-javascript/9781941222782/f_0028.html} 141 | } 142 | 143 | @misc{12, 144 | title={Futures and Promises}, 145 | url = {http://www.seastar-project.org/futures-promises/} 146 | } 147 | 148 | @misc{13, 149 | title={Why do Promise libraries use event loops?}, 150 | url = {http://stackoverflow.com/questions/23447876/why-do-promise-libraries-use-event-loops} 151 | } 152 | 153 | @misc{14, 154 | title={Why do Promise libraries use event loops?}, 155 | url = {http://stackoverflow.com/questions/23447876/why-do-promise-libraries-use-event-loops} 156 | } 157 | 158 | 159 | @misc{15, 160 | title={Tasks, microtasks, queues and schedules}, 161 | author={Jake Archibald}, 162 | url = {https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/} 163 | } 164 | 165 | @misc{16, 166 | title={You're Missing the Point of Promises}, 167 | author={Domenic Denicola}, 168 | url = {https://blog.domenic.me/youre-missing-the-point-of-promises/} 169 | } 170 | 171 | @misc{17, 172 | title={Dataflow Concurrency}, 173 | url = {http://doc.akka.io/docs/akka/2.3-M1/scala/dataflow.html} 174 | } 175 | 176 | @misc{18, 177 | title={Promise & Deferred objects in JavaScript Pt.1: Theory and Semantics}, 178 | author={Chris Webb}, 179 | url = {http://blog.mediumequalsmessage.com/promise-deferred-objects-in-javascript-pt1-theory-and-semantics} 180 | } 181 | 182 | @misc{19, 183 | title={Promise & Deferred objects in JavaScript Pt.1: Theory and Semantics}, 184 | author={Chris Webb}, 185 | url = {http://blog.mediumequalsmessage.com/promise-deferred-objects-in-javascript-pt1-theory-and-semantics} 186 | } 187 | 188 | @misc{20, 189 | title={CompletableFuture}, 190 | author={Doug Lea}, 191 | url = {http://cs.oswego.edu/pipermail/concurrency-interest/2012-December/010423.html} 192 | } 193 | 194 | @misc{21, 195 | title={CompletableFuture}, 196 | author={Doug Lea}, 197 | url = {http://cs.oswego.edu/pipermail/concurrency-interest/2012-December/010423.html} 198 | } 199 | 200 | @misc{22, 201 | title={Difference between Future and Promise}, 202 | url = {http://stackoverflow.com/questions/14541975/difference-between-future-and-promise} 203 | } 204 | 205 | @misc{whatisthis, 206 | title={Welcome to Thunk.org!}, 207 | url = {https://thunk.org/} 208 | } 209 | 210 | @misc{24, 211 | title={CompletableFuture}, 212 | author={Doug Lea}, 213 | url = {http://cs.oswego.edu/pipermail/concurrency-interest/2012-December/010423.html} 214 | } 215 | 216 | @misc{25, 217 | title={JVM Internals}, 218 | author={james d bloom}, 219 | url = {http://blog.jamesdbloom.com/JVMInternals.html} 220 | } 221 | 222 | @misc{26, 223 | title={ExecutionContext}, 224 | url = {http://www.scala-lang.org/api/current/scala/concurrent/ExecutionContext.html} 225 | } 226 | 227 | @misc{27, 228 | title={ForkJoinPool: the Other ExecutorService}, 229 | author={Jessica Kerr}, 230 | url = {http://blog.jessitron.com/2014/02/forkjoinpool-other-executorservice.html} 231 | } 232 | 233 | @misc{28, 234 | title={Scala: the global ExecutionContext makes your life easier}, 235 | author={Jessica Kerr}, 236 | url = {http://blog.jessitron.com/2014/02/scala-global-executioncontext-makes.html} 237 | } 238 | 239 | @misc{29, 240 | title={Learn implicits: Scala Futures}, 241 | author={Jorge Montero}, 242 | url = {http://engineering.monsanto.com/2015/06/15/implicits-futures/} 243 | } 244 | 245 | @misc{30, 246 | title={Simple concurrency with Scala Futures (Futures tutorial)}, 247 | author={Alvin Alexander}, 248 | url = {http://alvinalexander.com/scala/concurrency-with-scala-futures-tutorials-examples} 249 | } 250 | 251 | @misc{31, 252 | title={JavaScript Promises and Error Handling}, 253 | author={OdeToCode}, 254 | url = {http://odetocode.com/blogs/scott/archive/2015/10/01/javascript-promises-and-error-handling.aspx} 255 | } 256 | 257 | @inproceedings{32, 258 | author = {Lea, Doug}, 259 | title = {A Java Fork/Join Framework}, 260 | booktitle = {Proceedings of the ACM 2000 Conference on Java Grande}, 261 | series = {JAVA '00}, 262 | year = {2000}, 263 | isbn = {1-58113-288-3}, 264 | location = {San Francisco, California, USA}, 265 | pages = {36--43}, 266 | numpages = {8}, 267 | url = {http://doi.acm.org/10.1145/337449.337465}, 268 | doi = {10.1145/337449.337465}, 269 | acmid = {337465}, 270 | publisher = {ACM}, 271 | address = {New York, NY, USA}, 272 | } 273 | 274 | @inproceedings{33, 275 | author = {de Boer, Frank S. and Clarke, Dave and Johnsen, Einar Broch}, 276 | title = {A Complete Guide to the Future}, 277 | booktitle = {Proceedings of the 16th European Symposium on Programming}, 278 | series = {ESOP'07}, 279 | year = {2007}, 280 | isbn = {978-3-540-71314-2}, 281 | location = {Braga, Portugal}, 282 | pages = {316--330}, 283 | numpages = {15}, 284 | url = {http://dl.acm.org/citation.cfm?id=1762174.1762205}, 285 | acmid = {1762205}, 286 | publisher = {Springer-Verlag}, 287 | address = {Berlin, Heidelberg}, 288 | } 289 | 290 | @inproceedings{34, 291 | author = {de Boer, Frank S. and Clarke, Dave and Johnsen, Einar Broch}, 292 | title = {A Complete Guide to the Future}, 293 | booktitle = {Proceedings of the 16th European Symposium on Programming}, 294 | series = {ESOP'07}, 295 | year = {2007}, 296 | isbn = {978-3-540-71314-2}, 297 | location = {Braga, Portugal}, 298 | pages = {316--330}, 299 | numpages = {15}, 300 | url = {http://dl.acm.org/citation.cfm?id=1762174.1762205}, 301 | acmid = {1762205}, 302 | publisher = {Springer-Verlag}, 303 | address = {Berlin, Heidelberg}, 304 | } 305 | 306 | @article{35, 307 | author = {Friedman, D. P. and Wise, D. S.}, 308 | title = {Aspects of Applicative Programming for Parallel Processing}, 309 | journal = {IEEE Trans. Comput.}, 310 | issue_date = {April 1978}, 311 | volume = {27}, 312 | number = {4}, 313 | month = apr, 314 | year = {1978}, 315 | issn = {0018-9340}, 316 | pages = {289--296}, 317 | numpages = {8}, 318 | url = {http://dx.doi.org/10.1109/TC.1978.1675100}, 319 | doi = {10.1109/TC.1978.1675100}, 320 | acmid = {1310419}, 321 | publisher = {IEEE Computer Society}, 322 | address = {Washington, DC, USA}, 323 | keywords = {Compiling, Lisp, functional combinations, multiprocessing, recursion, suspensions, suspensions, Compiling, functional combinations, Lisp, multiprocessing, recursion}, 324 | } 325 | 326 | @techreport{Hewitt77, 327 | author = {Baker,Jr., Henry G. and Hewitt, Carl}, 328 | title = {The Incremental Garbage Collection of Processes}, 329 | year = {1977}, 330 | source = {http://www.ncstrl.org:8900/ncstrl/servlet/search?formname=detail\&id=oai%3Ancstrlh%3Amitai%3AMIT-AILab%2F%2FAIM-454}, 331 | publisher = {Massachusetts Institute of Technology}, 332 | address = {Cambridge, MA, USA}, 333 | } 334 | 335 | @inproceedings{ELang, 336 | author = {Miller, Mark S. and Tribble, E. Dean and Shapiro, Jonathan}, 337 | title = {Concurrency Among Strangers: Programming in E As Plan Coordination}, 338 | booktitle = {Proceedings of the 1st International Conference on Trustworthy Global Computing}, 339 | series = {TGC'05}, 340 | year = {2005}, 341 | isbn = {3-540-30007-4, 978-3-540-30007-6}, 342 | location = {Edinburgh, UK}, 343 | pages = {195--229}, 344 | numpages = {35}, 345 | url = {http://dl.acm.org/citation.cfm?id=1986262.1986274}, 346 | acmid = {1986274}, 347 | publisher = {Springer-Verlag}, 348 | address = {Berlin, Heidelberg}, 349 | } 350 | 351 | @article{PromisePipe07, 352 | title={The Promise System}, 353 | author = {Miller, Mark S. and Tribble, E. Dean and Jellinghaus, Rob}, 354 | journal={Presentation}, 355 | url = {http://web.archive.org/web/20071023111712/http://www.sunless-sea.net/Transcripts/promise.html}, 356 | year={2007} 357 | } 358 | 359 | @techreport{Joule, 360 | title={Joule: Distributed application foundations}, 361 | author={Tribble, E. Dean and Miller, Mark S. and Hardy, Norm and Krieger, David}, 362 | number={ADd003.4P}, 363 | institution={Agorics, Inc.}, 364 | url={http://www.erights.org/history/joule/MANUAL.BK2.pdf}, 365 | year={1995} 366 | } 367 | 368 | @misc{Twisted, 369 | author = {Glyph Lefkowitz}, 370 | title = {Twisted}, 371 | year = {2002}, 372 | publisher = {GitHub}, 373 | journal = {GitHub repository}, 374 | howpublished = {\url{https://github.com/twisted/twisted}} 375 | } 376 | 377 | @misc{Qjs, 378 | author = {Kris Kowal}, 379 | title = {Q.js}, 380 | year = {2009}, 381 | publisher = {GitHub}, 382 | journal = {GitHub repository}, 383 | howpublished = {\url{https://github.com/kriskowal/q}} 384 | } 385 | 386 | @online{JQueryPromises, 387 | author = {Valerio Gheri}, 388 | title = {JavaScript Promises and Why JQuery Implementation is Broken}, 389 | year = 2013, 390 | url = {\url{https://thewayofcode.wordpress.com/tag/jquery-deferred-broken/}}, 391 | urldate = {2017-01-06} 392 | } 393 | 394 | @INPROCEEDINGS{38, 395 | author = {Didier Le Botlan and Guido Tack and Andreas Rossberg and Andreas Rossberg and Didier Le and Botlan Guido Tack and Thorsten Brunklaus and Thorsten Brunklaus and Gert Smolka and Gert Smolka}, 396 | title = {Alice through the looking glass}, 397 | booktitle = {In Trends in Functional Programming}, 398 | year = {2006}, 399 | pages = {79--96}, 400 | publisher = {Intellect Books} 401 | } 402 | 403 | @misc{39, 404 | title={Futures and Promises in Scala 2.10}, 405 | author={Heather Miller}, 406 | url = {https://speakerdeck.com/heathermiller/futures-and-promises-in-scala-2-dot-10} 407 | } 408 | 409 | @article{SIP14, 410 | title={Futures and promises}, 411 | author={Haller, Philipp and Prokopec, Aleksandar and Miller, Heather and Klang, Viktor and Kuhn, Roland and Jovanovic, Vojin}, 412 | journal={Scala Documentation}, 413 | url = {http://docs.scala-lang.org/overviews/core/futures.html}, 414 | year={2013} 415 | } 416 | 417 | @article{PromisesAPlus, 418 | title={Promises/A+ Specification}, 419 | author={Promises/A+}, 420 | journal={Promises/A+ Specification}, 421 | url = {https://promisesaplus.com/}, 422 | year={2013} 423 | } 424 | 425 | 426 | @article{PromisesA, 427 | title={CommonJS Promises/A Specification}, 428 | author={Kris Zyp}, 429 | journal={Promises/A Specification}, 430 | url = {http://wiki.commonjs.org/wiki/Promises/A}, 431 | year={2009} 432 | } 433 | 434 | @misc{Ecmascript15, 435 | title={ECMAScript Language Specification}, 436 | author={ECMAScript, ECMA and European Computer Manufacturers Association and others}, 437 | year={2015} 438 | } 439 | 440 | 441 | @misc{40, 442 | title={Futures and promises}, 443 | url = {https://en.wikipedia.org/wiki/Futures_and_promises} 444 | } 445 | 446 | @misc{41, 447 | title={Lazy Futures or Promises?}, 448 | url = {https://groups.google.com/forum/#!topic/scala-language/dP2SyUCF724} 449 | } 450 | 451 | @misc{42, 452 | title={Try}, 453 | url = {http://www.scala-lang.org/api/2.9.3/scala/util/Try.html} 454 | } 455 | 456 | 457 | @misc{43, 458 | title={Finagle: A Protocol-Agnostic RPC System}, 459 | url = {https://blog.twitter.com/2011/finagle-a-protocol-agnostic-rpc-system} 460 | } 461 | 462 | @misc{44, 463 | title={Promise.all()}, 464 | url = {https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all} 465 | } 466 | 467 | @misc{45, 468 | title={Promise Pipelining}, 469 | url = {https://www.revolvy.com/main/index.php?s=Promise%20pipelining} 470 | } 471 | 472 | @misc{46, 473 | title={Promises}, 474 | url = {https://christophermeiklejohn.com/pl/2016/03/04/promises.html} 475 | } 476 | 477 | @misc{47, 478 | title={futures}, 479 | url = {https://www.ps.uni-saarland.de/alice/manual/futures.html} 480 | } 481 | 482 | @article{Thunks, 483 | author = {Ingerman, P. Z.}, 484 | title = {Thunks: A Way of Compiling Procedure Statements with Some Comments on Procedure Declarations}, 485 | journal = {Commun. ACM}, 486 | issue_date = {Jan. 1961}, 487 | volume = {4}, 488 | number = {1}, 489 | month = jan, 490 | year = {1961}, 491 | issn = {0001-0782}, 492 | pages = {55--58}, 493 | numpages = {4}, 494 | url = {http://doi.acm.org/10.1145/366062.366084}, 495 | doi = {10.1145/366062.366084}, 496 | acmid = {366084}, 497 | publisher = {ACM}, 498 | address = {New York, NY, USA}, 499 | } 500 | -------------------------------------------------------------------------------- /_bibliography/langs-consistency.bib: -------------------------------------------------------------------------------- 1 | @article{BloomL, 2 | author = {Neil Conway and William Marczak and Peter Alvaro and Joseph M. Hellersteina and David Maier}, 3 | title = {Logic and Lattices for Distributed Programming}, 4 | journal = {UC Berkeley Technical Report No. UCB/EECS-2012-167}, 5 | volume = {167}, 6 | year = {2012}, 7 | url = {http://db.cs.berkeley.edu/papers/UCB-lattice-tr.pdf} 8 | } 9 | 10 | @inproceedings{Bloom, 11 | author = {Peter Alvaro and Neil Conway and Joseph M. Hellerstein and William R. Marczak}, 12 | title = {Consistency Analysis in Bloom: a CALM and Collected Approach}, 13 | booktitle = {Conference on Innovative Data Systems Research}, 14 | series = {CIDR}, 15 | year = {2011}, 16 | url = {http://db.cs.berkeley.edu/papers/cidr11-bloom.pdf} 17 | } 18 | 19 | @inproceedings{Lasp, 20 | author = {Christopher Meiklejohn and Peter Van Roy}, 21 | title = {Lasp: A Language for Distributed, Coordination-Free Programming}, 22 | booktitle = {Proceedings of the 17th International Symposium on Principles and Practice of Declarative Programming}, 23 | series = {PPDP}, 24 | year = {2015}, 25 | url = {https://pdfs.semanticscholar.org/c0ad/b28526a29f0765669167d3201e2b3605895e.pdf} 26 | } 27 | 28 | @inproceedings{Dynamo, 29 | author = {Giuseppe DeCandia and Deniz Hastorun and Madan Jampani and Gunavardhan Kakulapati and Avinash Lakshman and Alex Pilchin and Swaminathan Sivasubramanian and Peter Vosshall and Werner Vogels}, 30 | title = {Dynamo: Amazon’s Highly Available Key-value Store}, 31 | booktitle = {ACM Symposium on Operating Systems Principles}, 32 | series = {SOSP}, 33 | year = {2007}, 34 | url = {https://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf}, 35 | } 36 | 37 | @inproceedings{ConsistencyWithoutBorders, 38 | author = {Peter Alvaro and Peter Bailis and Neil Conway and Joseph M. Hellerstein}, 39 | title = {Consistency Without Borders}, 40 | booktitle = {ACM Symposium on Cloud Computing}, 41 | series = {SOCC}, 42 | year = {2013}, 43 | url = {http://www.bailis.org/papers/consistency-socc2013.pdf}, 44 | } 45 | -------------------------------------------------------------------------------- /_bibliography/message-passing.bib: -------------------------------------------------------------------------------- 1 | @inproceedings{DeKoster:2016:YAT:3001886.3001890, 2 | author = {De Koster, Joeri and Van Cutsem, Tom and De Meuter, Wolfgang}, 3 | title = {43 Years of Actors: A Taxonomy of Actor Models and Their Key Properties}, 4 | booktitle = {Proceedings of the 6th International Workshop on Programming Based on Actors, Agents, and Decentralized Control}, 5 | series = {AGERE 2016}, 6 | year = {2016}, 7 | isbn = {978-1-4503-4639-9}, 8 | location = {Amsterdam, Netherlands}, 9 | pages = {31--40}, 10 | numpages = {10}, 11 | url = {http://doi.acm.org/10.1145/3001886.3001890}, 12 | doi = {10.1145/3001886.3001890}, 13 | acmid = {3001890}, 14 | publisher = {ACM}, 15 | address = {New York, NY, USA}, 16 | keywords = {Actor Model, Concurrency}, 17 | } 18 | 19 | @article{Yonezawa:1986:OCP:960112.28722, 20 | author = {Yonezawa, Akinori and Briot, Jean-Pierre and Shibayama, Etsuya}, 21 | title = {Object-oriented Concurrent Programming in ABCL/1}, 22 | journal = {SIGPLAN Not.}, 23 | issue_date = {Nov. 1986}, 24 | volume = {21}, 25 | number = {11}, 26 | month = jun, 27 | year = {1986}, 28 | issn = {0362-1340}, 29 | pages = {258--268}, 30 | numpages = {11}, 31 | url = {http://doi.acm.org/10.1145/960112.28722}, 32 | doi = {10.1145/960112.28722}, 33 | acmid = {28722}, 34 | publisher = {ACM}, 35 | address = {New York, NY, USA}, 36 | } 37 | 38 | @inproceedings{Dedecker:2006:APA:2171327.2171349, 39 | author = {Dedecker, Jessie and Van Cutsem, Tom and Mostinckx, Stijn and D\&\#39;Hondt, Theo and De Meuter, Wolfgang}, 40 | title = {Ambient-Oriented Programming in Ambienttalk}, 41 | booktitle = {Proceedings of the 20th European Conference on Object-Oriented Programming}, 42 | series = {ECOOP'06}, 43 | year = {2006}, 44 | isbn = {3-540-35726-2, 978-3-540-35726-1}, 45 | location = {Nantes, France}, 46 | pages = {230--254}, 47 | numpages = {25}, 48 | url = {http://dx.doi.org/10.1007/11785477_16}, 49 | doi = {10.1007/11785477_16}, 50 | acmid = {2171349}, 51 | publisher = {Springer-Verlag}, 52 | address = {Berlin, Heidelberg}, 53 | } 54 | 55 | @inproceedings{Cutsem:2007:AOE:1338443.1338745, 56 | author = {Cutsem, Tom Van and Mostinckx, Stijn and Boix, Elisa Gonzalez and Dedecker, Jessie and Meuter, Wolfgang De}, 57 | title = {AmbientTalk: Object-oriented Event-driven Programming in Mobile Ad Hoc Networks}, 58 | booktitle = {Proceedings of the XXVI International Conference of the Chilean Society of Computer Science}, 59 | series = {SCCC '07}, 60 | year = {2007}, 61 | isbn = {0-7695-3017-6}, 62 | pages = {3--12}, 63 | numpages = {10}, 64 | url = {http://dx.doi.org/10.1109/SCCC.2007.4}, 65 | doi = {10.1109/SCCC.2007.4}, 66 | acmid = {1338745}, 67 | publisher = {IEEE Computer Society}, 68 | address = {Washington, DC, USA}, 69 | } 70 | 71 | @book{ReactiveSystems, 72 | author = {Hugh McKee}, 73 | title = {Designing Reactive Systems: The Role of Actors in Distributed Architecture}, 74 | year = {2016}, 75 | } 76 | 77 | @inproceedings{Miller:2005:CSP:1986262.1986274, 78 | author = {Miller, Mark S. and Tribble, E. Dean and Shapiro, Jonathan}, 79 | title = {Concurrency Among Strangers: Programming in E As Plan Coordination}, 80 | booktitle = {Proceedings of the 1st International Conference on Trustworthy Global Computing}, 81 | series = {TGC'05}, 82 | year = {2005}, 83 | isbn = {3-540-30007-4, 978-3-540-30007-6}, 84 | location = {Edinburgh, UK}, 85 | pages = {195--229}, 86 | numpages = {35}, 87 | url = {http://dl.acm.org/citation.cfm?id=1986262.1986274}, 88 | acmid = {1986274}, 89 | publisher = {Springer-Verlag}, 90 | address = {Berlin, Heidelberg}, 91 | } 92 | 93 | @article{Agha:1990:COP:83880.84528, 94 | author = {Agha, Gul}, 95 | title = {Concurrent Object-oriented Programming}, 96 | journal = {Commun. ACM}, 97 | issue_date = {Sept. 1990}, 98 | volume = {33}, 99 | number = {9}, 100 | month = sep, 101 | year = {1990}, 102 | issn = {0001-0782}, 103 | pages = {125--141}, 104 | numpages = {17}, 105 | url = {http://doi.acm.org/10.1145/83880.84528}, 106 | doi = {10.1145/83880.84528}, 107 | acmid = {84528}, 108 | publisher = {ACM}, 109 | address = {New York, NY, USA}, 110 | } 111 | 112 | @article{Armstrong:2010:ERL:1810891.1810910, 113 | author = {Armstrong, Joe}, 114 | title = {Erlang}, 115 | journal = {Commun. ACM}, 116 | issue_date = {September 2010}, 117 | volume = {53}, 118 | number = {9}, 119 | month = sep, 120 | year = {2010}, 121 | issn = {0001-0782}, 122 | pages = {68--75}, 123 | numpages = {8}, 124 | url = {http://doi.acm.org/10.1145/1810891.1810910}, 125 | doi = {10.1145/1810891.1810910}, 126 | acmid = {1810910}, 127 | publisher = {ACM}, 128 | address = {New York, NY, USA}, 129 | } 130 | 131 | @inproceedings{Haller:2012:IAM:2414639.2414641, 132 | author = {Haller, Philipp}, 133 | title = {On the Integration of the Actor Model in Mainstream Technologies: The Scala Perspective}, 134 | booktitle = {Proceedings of the 2Nd Edition on Programming Systems, Languages and Applications Based on Actors, Agents, and Decentralized Control Abstractions}, 135 | series = {AGERE! 2012}, 136 | year = {2012}, 137 | isbn = {978-1-4503-1630-9}, 138 | location = {Tucson, Arizona, USA}, 139 | pages = {1--6}, 140 | numpages = {6}, 141 | url = {http://doi.acm.org/10.1145/2414639.2414641}, 142 | doi = {10.1145/2414639.2414641}, 143 | acmid = {2414641}, 144 | publisher = {ACM}, 145 | address = {New York, NY, USA}, 146 | keywords = {actors, concurrent programming, distributed programming, scala, threads}, 147 | } 148 | 149 | @inproceedings{Hewitt:1973:UMA:1624775.1624804, 150 | author = {Hewitt, Carl and Bishop, Peter and Steiger, Richard}, 151 | title = {A Universal Modular ACTOR Formalism for Artificial Intelligence}, 152 | booktitle = {Proceedings of the 3rd International Joint Conference on Artificial Intelligence}, 153 | series = {IJCAI'73}, 154 | year = {1973}, 155 | location = {Stanford, USA}, 156 | pages = {235--245}, 157 | numpages = {11}, 158 | url = {http://dl.acm.org/citation.cfm?id=1624775.1624804}, 159 | acmid = {1624804}, 160 | publisher = {Morgan Kaufmann Publishers Inc.}, 161 | address = {San Francisco, CA, USA}, 162 | } 163 | 164 | @article {vantcutsem14ambienttalk, 165 | title = {AmbientTalk: programming responsive mobile peer-to-peer applications with actors}, 166 | journal = {Computer Languages, Systems and Structures, SCI Impact factor in 2013: 0.296, 5 year impact factor 0.329 (to appear)}, 167 | year = {2014}, 168 | publisher = {Elsevier}, 169 | issn = {1477-8424}, 170 | author = {Tom Van Cutsem and Elisa Gonzalez Boix and Christophe Scholliers and Andoni Lombide Carreton and Dries Harnie and Kevin Pinte and Wolfgang De Meuter}, 171 | editor = {Nick Benton} 172 | } 173 | 174 | @inproceedings{Bykov:2011:OCC:2038916.2038932, 175 | author = {Bykov, Sergey and Geller, Alan and Kliot, Gabriel and Larus, James R. and Pandya, Ravi and Thelin, Jorgen}, 176 | title = {Orleans: Cloud Computing for Everyone}, 177 | booktitle = {Proceedings of the 2Nd ACM Symposium on Cloud Computing}, 178 | series = {SOCC '11}, 179 | year = {2011}, 180 | isbn = {978-1-4503-0976-9}, 181 | location = {Cascais, Portugal}, 182 | pages = {16:1--16:14}, 183 | articleno = {16}, 184 | numpages = {14}, 185 | url = {http://doi.acm.org/10.1145/2038916.2038932}, 186 | doi = {10.1145/2038916.2038932}, 187 | acmid = {2038932}, 188 | publisher = {ACM}, 189 | address = {New York, NY, USA}, 190 | keywords = {cloud computing, distributed actors, programming models}, 191 | } 192 | 193 | @article{Tomlinson:1988:ROC:67387.67410, 194 | author = {Tomlinson, C. and Kim, W. and Scheevel, M. and Singh, V. and Will, B. and Agha, G.}, 195 | title = {Rosette: An Object-oriented Concurrent Systems Architecture}, 196 | journal = {SIGPLAN Not.}, 197 | issue_date = {April 1989}, 198 | volume = {24}, 199 | number = {4}, 200 | month = sep, 201 | year = {1988}, 202 | issn = {0362-1340}, 203 | pages = {91--93}, 204 | numpages = {3}, 205 | url = {http://doi.acm.org/10.1145/67387.67410}, 206 | doi = {10.1145/67387.67410}, 207 | acmid = {67410}, 208 | publisher = {ACM}, 209 | address = {New York, NY, USA}, 210 | } 211 | 212 | @article{Haller:2009:SAU:1496391.1496422, 213 | author = {Haller, Philipp and Odersky, Martin}, 214 | title = {Scala Actors: Unifying Thread-based and Event-based Programming}, 215 | journal = {Theor. Comput. Sci.}, 216 | issue_date = {February, 2009}, 217 | volume = {410}, 218 | number = {2-3}, 219 | month = feb, 220 | year = {2009}, 221 | issn = {0304-3975}, 222 | pages = {202--220}, 223 | numpages = {19}, 224 | url = {http://dx.doi.org/10.1016/j.tcs.2008.09.019}, 225 | doi = {10.1016/j.tcs.2008.09.019}, 226 | acmid = {1496422}, 227 | publisher = {Elsevier Science Publishers Ltd.}, 228 | address = {Essex, UK}, 229 | keywords = {Actors, Concurrent programming, Events, Threads}, 230 | } 231 | 232 | @inproceedings{epstein2011, 233 | acmid = {2034690}, 234 | added-at = {2014-12-10T16:12:02.000+0100}, 235 | address = {New York, NY, USA}, 236 | author = {Epstein, Jeff and Black, Andrew P. and Peyton-Jones, Simon}, 237 | biburl = {http://www.bibsonomy.org/bibtex/24882f140b6bbca2806c57a22c57b5c5d/chesteve}, 238 | booktitle = {Proceedings of the 4th ACM symposium on Haskell}, 239 | doi = {10.1145/2034675.2034690}, 240 | interhash = {48386ecc60d5772410dec97e267a570b}, 241 | intrahash = {4882f140b6bbca2806c57a22c57b5c5d}, 242 | isbn = {978-1-4503-0860-1}, 243 | keywords = {imported}, 244 | location = {Tokyo, Japan}, 245 | numpages = {12}, 246 | pages = {118--129}, 247 | publisher = {ACM}, 248 | series = {Haskell '11}, 249 | timestamp = {2014-12-10T16:12:02.000+0100}, 250 | title = {Towards Haskell in the cloud}, 251 | xxxurl = {http://doi.acm.org/10.1145/2034675.2034690}, 252 | year = 2011 253 | } 254 | 255 | @book{Agha:1986:AMC:7929, 256 | author = {Agha, Gul}, 257 | title = {Actors: A Model of Concurrent Computation in Distributed Systems}, 258 | year = {1986}, 259 | isbn = {0-262-01092-5}, 260 | publisher = {MIT Press}, 261 | address = {Cambridge, MA, USA}, 262 | } 263 | 264 | @book{Peierls:2005:JCP:1076522, 265 | author = {Peierls, Tim and Goetz, Brian and Bloch, Joshua and Bowbeer, Joseph and Lea, Doug and Holmes, David}, 266 | title = {Java Concurrency in Practice}, 267 | year = {2005}, 268 | isbn = {0321349601}, 269 | publisher = {Addison-Wesley Professional}, 270 | } 271 | 272 | @misc{OrleansHalo4Talk, 273 | title = {Building the Halo 4 Services with Orleans}, 274 | author = {Caitie McCaffrey}, 275 | year = {2015}, 276 | note = {QCon}, 277 | url = {https://www.infoq.com/presentations/halo-4-orleans}, 278 | } 279 | 280 | @misc{ErlangWhatsAppTalk, 281 | title= {Scaling to Millions of Simultaneous Connections}, 282 | author = {Rick Reed}, 283 | year = {2012}, 284 | note= {Erlang Factory SF Bay Area}, 285 | url = {https://vimeo.com/44312354}, 286 | } 287 | 288 | @misc{PayPalAkka, 289 | title = {squbs: A New, Reactive Way for PayPal to Build Applications}, 290 | author = {Akara Sucharitakul }, 291 | year = {2016}, 292 | url = {https://www.paypal-engineering.com/2016/05/11/squbs-a-new-reactive-way-for-paypal-to-build-applications/}, 293 | } 294 | 295 | @misc{KayQuote, 296 | title = {prototypes vs classes was: Re: Sun's HotSpot}, 297 | author = {Alan Kay}, 298 | year = {1998}, 299 | url = {http://lists.squeakfoundation.org/pipermail/squeak-dev/1998-October/017019.html}, 300 | } 301 | -------------------------------------------------------------------------------- /_bibliography/references.bib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/_bibliography/references.bib -------------------------------------------------------------------------------- /_bibliography/rpc.bib: -------------------------------------------------------------------------------- 1 | @inproceedings{Uniqueness, 2 | author = {Philipp Haller and 3 | Martin Odersky}, 4 | title = {Capabilities for Uniqueness and Borrowing}, 5 | booktitle = {ECOOP 2010, Maribor, Slovenia, June 21-25, 2010.}, 6 | pages = {354--378}, 7 | year = {2010}, 8 | } 9 | 10 | @article{implementingrpc, 11 | title={Implementing remote procedure calls}, 12 | author={Birrell, Andrew D and Nelson, Bruce Jay}, 13 | journal={ACM Transactions on Computer Systems (TOCS)}, 14 | volume={2}, 15 | number={1}, 16 | pages={39--59}, 17 | year={1984}, 18 | publisher={ACM} 19 | } 20 | 21 | @article{rmipaper, 22 | title={A Distributed Object Model for the Java\^{} T\^{} M System}, 23 | author={Wollrath, Ann and Riggs, Roger and Waldo, Jim}, 24 | year={1996} 25 | } 26 | 27 | @book{rmibook, 28 | title={Java. rmi: The Remote Method Invocation Guide}, 29 | author={Pitt, Esmond and McNiff, Kathy}, 30 | year={2001}, 31 | publisher={Addison-Wesley Longman Publishing Co., Inc.} 32 | } 33 | 34 | @book{critiqueofrpc, 35 | title={A critique of the remote procedure call paradigm}, 36 | author={Tanenbaum, Andrew Stuart and van Renesse, Robbert}, 37 | year={1987} 38 | } 39 | 40 | @inproceedings{rpcoverrdma, 41 | title={FaSST: Fast, Scalable and Simple Distributed Transactions with Two-Sided (RDMA) Datagram RPCs}, 42 | author={Kalia, Anuj and Kaminsky, Michael and Andersen, David G}, 43 | booktitle={12th USENIX Symposium on Operating Systems Design and Implementation (OSDI 16)}, 44 | pages={185--201}, 45 | organization={USENIX Association} 46 | } 47 | 48 | @inproceedings{sunnfs, 49 | title={Design and implementation of the Sun network filesystem}, 50 | author={Sandberg, Russel and Goldberg, David and Kleiman, Steve and Walsh, Dan and Lyon, Bob}, 51 | booktitle={Proceedings of the Summer USENIX conference}, 52 | pages={119--130}, 53 | year={1985} 54 | } 55 | 56 | @misc{thrift, 57 | title={Apache Thrift}, 58 | author={Prunicki, Andrew}, 59 | year={2009} 60 | } 61 | 62 | @article{corba, 63 | title={The Common Object Request Broker: Architecture and Specification}, 64 | author={Object Management Group}, 65 | journal={OMG Document Number 91.12.1}, 66 | year={1991} 67 | } 68 | 69 | @misc{grpc, 70 | title = {gRPC}, 71 | author={Google}, 72 | url = {http://www.grpc.io/}, 73 | note = {Accessed: 2016-11-11}, 74 | } 75 | 76 | @misc{soaparticle1, 77 | title = {Exclusive .NET Developer's Journal "Indigo" Interview with Microsoft's Don Box}, 78 | author={Derek Ferguson}, 79 | url = {http://dotnet.sys-con.com/node/45908}, 80 | note = {Accessed: 2016-11-11}, 81 | } 82 | 83 | @misc{corbasite, 84 | title = {CORBA-OMG}, 85 | author={CORBA}, 86 | url = {http://www.corba.org/}, 87 | note = {Accessed: 2016-11-11}, 88 | } 89 | 90 | 91 | @inproceedings{finagle, 92 | title={Your server as a function}, 93 | author={Eriksen, Marius}, 94 | booktitle={Proceedings of the Seventh Workshop on Programming Languages and Operating Systems}, 95 | pages={5}, 96 | year={2013}, 97 | organization={ACM} 98 | } 99 | 100 | @inproceedings{anycastrpc, 101 | title={Anycast-RPC for Wireless Sensor Networks}, 102 | author={Bergstrom, Eric and Pandey, Raju}, 103 | booktitle={2007 IEEE International Conference on Mobile Adhoc and Sensor Systems}, 104 | pages={1--8}, 105 | year={2007}, 106 | organization={IEEE} 107 | } 108 | 109 | @article{rpcrfc, 110 | title={RFC 1831 - RPC: Remote procedure call protocol specification version 2}, 111 | author={Srinivasan, Raj}, 112 | year={1995} 113 | } 114 | 115 | @misc{microservices1rpc, 116 | title={Delving Into the Microservices Architecture}, 117 | author={Mueller, John}, 118 | year={2015}, 119 | url = {http://blog.smartbear.com/microservices/delving-into-the-microservices-architecture/}, 120 | } 121 | 122 | @article{rpcorigin, 123 | title={High-level framework for network-based resource sharing}, 124 | author={White, James E}, 125 | year={1975} 126 | } 127 | 128 | @inproceedings{interweave1, 129 | title={Integrating remote invocation and distributed shared state}, 130 | author={Tang, Chunqiang and Chen, DeQing and Dwarkadas, Sandhya and Scott, Michael L}, 131 | booktitle={Parallel and Distributed Processing Symposium, 2004. Proceedings. 18th International}, 132 | pages={30}, 133 | year={2004}, 134 | organization={IEEE} 135 | } 136 | 137 | 138 | @inproceedings{interweave2, 139 | title={Interweave: A middleware system for distributed shared state}, 140 | author={Chen, DeQing and Dwarkadas, Sandhya and Parthasarathy, Srinivasan and Pinheiro, Eduardo and Scott, Michael L}, 141 | booktitle={International Workshop on Languages, Compilers, and Run-Time Systems for Scalable Computers}, 142 | pages={207--220}, 143 | year={2000}, 144 | organization={Springer} 145 | } 146 | 147 | @inproceedings{interweave3, 148 | title={Multi-level shared state for distributed systems}, 149 | author={Chen, DeQing and Tang, Chunqiang and Chen, Xiangchuan and Dwarkadas, Sandhya and Scott, Michael L}, 150 | booktitle={Parallel Processing, 2002. Proceedings. International Conference on}, 151 | pages={131--140}, 152 | year={2002}, 153 | organization={IEEE} 154 | } 155 | 156 | @article{offloading1, 157 | title={A survey of computation offloading for mobile systems}, 158 | author={Kumar, Karthik and Liu, Jibang and Lu, Yung-Hsiang and Bhargava, Bharat}, 159 | journal={Mobile Networks and Applications}, 160 | volume={18}, 161 | number={1}, 162 | pages={129--140}, 163 | year={2013}, 164 | publisher={Springer} 165 | } 166 | 167 | @misc{ibis, 168 | title={Ibis Communication middleware}, 169 | author={Ibis}, 170 | url = {https://www.cs.vu.nl/ibis/rmi.html}, 171 | } 172 | 173 | @article{cuckoo, 174 | title={Cuckoo: flexible compute-intensive task offloading in mobile cloud computing}, 175 | author={Zhou, Zhigang and Zhang, Hongli and Ye, Lin and Du, Xiaojiang}, 176 | journal={Wireless Communications and Mobile Computing}, 177 | year={2016}, 178 | publisher={Wiley Online Library} 179 | } 180 | 181 | @inproceedings{maui, 182 | title={MAUI: making smartphones last longer with code offload}, 183 | author={Cuervo, Eduardo and Balasubramanian, Aruna and Cho, Dae-ki and Wolman, Alec and Saroiu, Stefan and Chandra, Ranveer and Bahl, Paramvir}, 184 | booktitle={Proceedings of the 8th international conference on Mobile systems, applications, and services}, 185 | pages={49--62}, 186 | year={2010}, 187 | organization={ACM} 188 | } 189 | 190 | @article{docker, 191 | title={Docker: lightweight linux containers for consistent development and deployment}, 192 | author={Merkel, Dirk}, 193 | journal={Linux Journal}, 194 | volume={2014}, 195 | number={239}, 196 | pages={2}, 197 | year={2014}, 198 | publisher={Belltown Media} 199 | } 200 | 201 | @inproceedings{selfdest, 202 | title={RFID systems and security and privacy implications}, 203 | author={Sarma, Sanjay E and Weis, Stephen A and Engels, Daniel W}, 204 | booktitle={International Workshop on Cryptographic Hardware and Embedded Systems}, 205 | pages={454--469}, 206 | year={2002}, 207 | organization={Springer} 208 | } 209 | 210 | @misc{oraclenfs, 211 | title={Overview of Secure RPC}, 212 | author={Oracle}, 213 | url = {https://docs.oracle.com/cd/E23823_01/html/816-4557/auth-2.html}, 214 | } 215 | 216 | @misc{capnprotosecure, 217 | title={Is Cap'n Proto Secure?}, 218 | author={Kenton}, 219 | url = {https://capnproto.org/faq.html#is-capn-proto-secure}, 220 | } 221 | 222 | 223 | @article{grid1, 224 | title={High performance GridRPC middleware}, 225 | author={Caniou, Yves and Caron, Eddy and Desprez, Fr{\'e}d{\'e}ric and Nakada, Hidemoto and Tanaka, Yoshio and Seymour, Keith}, 226 | journal={Recent Developments in Grid Technology and Applications, Nova Science Publishers}, 227 | pages={141--181}, 228 | year={2008} 229 | } 230 | 231 | @incollection{gridsolve1, 232 | title={Gridsolve: The evolution of a network enabled solver}, 233 | author={YarKhan, Asim and Dongarra, Jack and Seymour, Keith}, 234 | booktitle={Grid-Based Problem Solving Environments}, 235 | pages={215--224}, 236 | year={2007}, 237 | publisher={Springer} 238 | } 239 | 240 | @article{gridsolve2, 241 | title={Interactive Grid-access using Gridsolve and giggle}, 242 | author={Hardt, M and Seymour, Keith and Dongarra, Jack and Zapf, M and Ruitter, NV}, 243 | journal={Computing and Informatics}, 244 | volume={27}, 245 | number={2}, 246 | pages={233--248}, 247 | year={2012} 248 | } 249 | 250 | @article{ninf, 251 | title={Ninf-G: A reference implementation of RPC-based programming middleware for Grid computing}, 252 | author={Tanaka, Yoshio and Nakada, Hidemoto and Sekiguchi, Satoshi and Suzumura, Toyotaro and Matsuoka, Satoshi}, 253 | journal={Journal of Grid computing}, 254 | volume={1}, 255 | number={1}, 256 | pages={41--51}, 257 | year={2003}, 258 | publisher={Springer} 259 | } 260 | 261 | @article{erlang, 262 | title={Concurrent programming in ERLANG}, 263 | author={Armstrong, Joe and Virding, Robert and Wikstr{\"o}m, Claes and Williams, Mike}, 264 | year={1993}, 265 | publisher={Citeseer} 266 | } 267 | 268 | @misc{Apigee, 269 | title={gRPC: The Story of Microservices at Square}, 270 | author={Surtani, Manick and Ho, Alan}, 271 | url = {https://www.youtube.com/watch?v=-2sWDr3Z0Wo}, 272 | } 273 | 274 | @misc{CoreSurfaceAPIs, 275 | title={gRPC core APIs}, 276 | author={Google}, 277 | url = {https://github.com/grpc/grpc/tree/master/src/core}, 278 | } 279 | 280 | @misc{gRPCCompanies, 281 | title={About gRPC}, 282 | author={Google}, 283 | url = {http://www.grpc.io/about/}, 284 | } 285 | 286 | @misc{gRPCLanguages, 287 | title={gRPC Documentation}, 288 | author={Google}, 289 | url = {http://www.grpc.io/docs/}, 290 | } 291 | 292 | @misc{gRPCProtos, 293 | title={Google APIs}, 294 | author={Google}, 295 | url = {https://github.com/googleapis/googleapis/}, 296 | } 297 | 298 | @misc{rpcimage, 299 | title={Remote Procedure Call (RPC)}, 300 | author={Taing, Nguonly}, 301 | url = {http://lycog.com/distributed-systems/remote-procedure-call/}, 302 | note = {Image URL: http://lycog.com/wp-content/uploads/2011/03/rpc-10-steps.png} 303 | } 304 | 305 | @misc{trendrpcthrift, 306 | title={Remote Procedure Call (RPC)}, 307 | author={Google Trends}, 308 | url = {https://www.google.com/trends/explore?cat=31&date=today%2012-m&q=apache%20thrift,grpc&hl=en-US} 309 | } 310 | 311 | @misc{grpcauth, 312 | title={GRPC Authentication}, 313 | author={Google}, 314 | url = {http://www.grpc.io/docs/guides/auth.html}, 315 | } 316 | 317 | @misc{rfc707, 318 | title={RFC 707: A high-level framework for network-based resource sharing}, 319 | author={White, James E}, 320 | year={1975}, 321 | publisher={December} 322 | } 323 | 324 | @techreport{rfc674, 325 | title={RFC 674: Procedure call documents: Version 2}, 326 | author={Postel, J and White, JE}, 327 | year={1974} 328 | } 329 | 330 | @article{rfc684, 331 | title={RFC 684: Commentary on procedure calling as a network protocol}, 332 | author={Schantz, Richard}, 333 | year={1975} 334 | } 335 | 336 | @misc{grpcbetter, 337 | title={GRPC Authentication}, 338 | author={Google}, 339 | url = {https://www.quora.com/Is-GRPC-better-than-Thrift}, 340 | publisher = {Quora} 341 | } 342 | 343 | @misc{multiplexingthrift, 344 | title={Added service multiplexing support}, 345 | author={Yu, Lixin}, 346 | url = {https://github.com/eleme/thriftpy/pull/88/commits/0877531f9246ca993c1d9af5d29cd009ee6ec7d4}, 347 | publisher = {Github} 348 | } 349 | 350 | @techreport{rfc5531, 351 | title={RFC 5531: RPC: Remote Procedure Call Protocol Specification Version 2}, 352 | author={Thurlow, R}, 353 | year={2009} 354 | } 355 | 356 | @techreport{rfc1831, 357 | title={RFC 1831: RPC: Remote Procedure Call Protocol Specification Version 2}, 358 | author={Srinivasan, R}, 359 | year={1995} 360 | } 361 | 362 | @misc{grpcchapter, 363 | title={gRPC}, 364 | booktitle={Programming Models for Distributed Computation}, 365 | author={Grosu, P and Abdul Rehman, M and Anderson, E and Pai, V and Miller, H}, 366 | url = {http://dist-prog-book.com/chapter/1/gRPC.html}, 367 | publisher = {Github} 368 | } 369 | 370 | @misc{stubrpc, 371 | title={stub}, 372 | author={Rouse, M}, 373 | url = {http://whatis.techtarget.com/definition/stub}, 374 | publisher = {WhatIs} 375 | } 376 | 377 | 378 | @misc{grpcpersec, 379 | title={Scalable Realtime Microservices with Kubernetes and gRPC}, 380 | author={Mandel, M}, 381 | url = {https://www.youtube.com/watch?v=xb8u2s7cxzg&t=486s}, 382 | publisher = {YouTube} 383 | } 384 | 385 | @misc{usgdp, 386 | title={2016 United States Budget Estimate}, 387 | author={InsideGov}, 388 | url = {http://federal-budget.insidegov.com/l/119/2016-Estimate}, 389 | publisher = {InsideGov} 390 | } 391 | 392 | 393 | @incollection{notedistributed, 394 | title={A note on distributed computing}, 395 | author={Waldo, Jim and Wyant, Geoff and Wollrath, Ann and Kendall, Sam}, 396 | booktitle={Mobile Object Systems Towards the Programmable Internet}, 397 | pages={49--64}, 398 | year={1997}, 399 | publisher={Springer} 400 | } 401 | 402 | @misc{dewan, 403 | title={Synchronous vs Asynchronous}, 404 | author={Dewan, P}, 405 | url = {http://www.cs.unc.edu/~dewan/242/s07/notes/ipc/node9.html}, 406 | year={2006}, 407 | publisher = {UNC} 408 | } 409 | 410 | 411 | @misc{async, 412 | title={Asynchronous RPC}, 413 | url = {https://msdn.microsoft.com/en-us/library/windows/desktop/aa373550(v=vs.85).aspx}, 414 | year={2006}, 415 | publisher = {Microsoft} 416 | } 417 | 418 | @misc{roi, 419 | title={Remote Object Invocation}, 420 | author={Setia, S}, 421 | url = {https://cs.gmu.edu/~setia/cs707/slides/rmi-imp.pdf}, 422 | publisher = {QMU} 423 | } 424 | 425 | 426 | @misc{Wiener, 427 | title={XML-RPC}, 428 | author={Weiner, D}, 429 | url = {http://xmlrpc.scripting.com/spec.html}, 430 | year={1999}, 431 | publisher = {QMU} 432 | } 433 | 434 | 435 | @misc{soapvsxml, 436 | title={XML-RPC}, 437 | author={Jones, M}, 438 | url = {https://www.quora.com/What-is-the-difference-between-xml-rpc-and-soap}, 439 | year={2014}, 440 | publisher = {Quora} 441 | } 442 | 443 | @misc{thrifttut, 444 | title={Apache THRIFT: A Much Needed Tutorial}, 445 | author={Maheshwar, C}, 446 | url = {http://digital-madness.in/blog/wp-content/uploads/2012/11/BSD_08_2013.8-18.pdf}, 447 | year={2013}, 448 | publisher = {Digital Madness} 449 | } 450 | 451 | @misc{finagletut, 452 | title={Finagle-Quickstart}, 453 | author={Twitter}, 454 | url = {https://twitter.github.io/finagle/guide/Quickstart.html}, 455 | year={2016}, 456 | publisher = {Twitter} 457 | } 458 | 459 | 460 | @misc{norman, 461 | title={Communication Fundamentals}, 462 | author={Norman, S}, 463 | url = {http://slideplayer.com/slide/8555756/}, 464 | year={2015}, 465 | publisher = {SlideShare} 466 | } 467 | 468 | 469 | 470 | -------------------------------------------------------------------------------- /_bibliography/streaming.bib: -------------------------------------------------------------------------------- 1 | @inproceedings{chandrasekaran2003telegraphcq, 2 | title={TelegraphCQ: continuous dataflow processing}, 3 | author={Chandrasekaran, Sirish and Cooper, Owen and Deshpande, Amol and Franklin, Michael J and Hellerstein, Joseph M and Hong, Wei and Krishnamurthy, Sailesh and Madden, Samuel R and Reiss, Fred and Shah, Mehul A}, 4 | booktitle={Proceedings of the 2003 ACM SIGMOD international conference on Management of data}, 5 | pages={668--668}, 6 | year={2003}, 7 | organization={ACM} 8 | } 9 | 10 | @inproceedings{zaharia2012resilient, 11 | title={Resilient distributed datasets: A fault-tolerant abstraction for in-memory cluster computing}, 12 | author={Zaharia, Matei and Chowdhury, Mosharaf and Das, Tathagata and Dave, Ankur and Ma, Justin and McCauley, Murphy and Franklin, Michael J and Shenker, Scott and Stoica, Ion}, 13 | booktitle={Proceedings of the 9th USENIX conference on Networked Systems Design and Implementation}, 14 | pages={2--2}, 15 | year={2012}, 16 | organization={USENIX Association} 17 | } 18 | 19 | @misc{apachekafka, 20 | title = {Apache Kafka}, 21 | howpublished = {https://kafka.apache.org/}, 22 | note = {Accessed: 2016-12-9} 23 | } 24 | 25 | @misc{apachestorm, 26 | title = {Apache Storm}, 27 | howpublished = {http://storm.apache.org/}, 28 | note = {Accessed: 2016-12-9} 29 | } 30 | 31 | @inproceedings{zaharia2012discretized, 32 | title={Discretized streams: an efficient and fault-tolerant model for stream processing on large clusters}, 33 | author={Zaharia, Matei and Das, Tathagata and Li, Haoyuan and Shenker, Scott and Stoica, Ion}, 34 | booktitle={Presented as part of the}, 35 | year={2012} 36 | } 37 | 38 | @inproceedings{murray2013naiad, 39 | title={Naiad: a timely dataflow system}, 40 | author={Murray, Derek G and McSherry, Frank and Isaacs, Rebecca and Isard, Michael and Barham, Paul and Abadi, Mart{\'\i}n}, 41 | booktitle={Proceedings of the Twenty-Fourth ACM Symposium on Operating Systems Principles}, 42 | pages={439--455}, 43 | year={2013}, 44 | organization={ACM} 45 | } 46 | 47 | @article{akidau2015dataflow, 48 | title={The dataflow model: a practical approach to balancing correctness, latency, and cost in massive-scale, unbounded, out-of-order data processing}, 49 | author={Akidau, Tyler and Bradshaw, Robert and Chambers, Craig and Chernyak, Slava and Fern{\'a}ndez-Moctezuma, Rafael J and Lax, Reuven and McVeety, Sam and Mills, Daniel and Perry, Frances and Schmidt, Eric and others}, 50 | journal={Proceedings of the VLDB Endowment}, 51 | volume={8}, 52 | number={12}, 53 | pages={1792--1803}, 54 | year={2015}, 55 | publisher={VLDB Endowment} 56 | } 57 | 58 | @inproceedings{toshniwal2014storm, 59 | title={Storm@ twitter}, 60 | author={Toshniwal, Ankit and Taneja, Siddarth and Shukla, Amit and Ramasamy, Karthik and Patel, Jignesh M and Kulkarni, Sanjeev and Jackson, Jason and Gade, Krishna and Fu, Maosong and Donham, Jake and others}, 61 | booktitle={Proceedings of the 2014 ACM SIGMOD international conference on Management of data}, 62 | pages={147--156}, 63 | year={2014}, 64 | organization={ACM} 65 | } 66 | 67 | @inproceedings{kulkarni2015twitter, 68 | title={Twitter heron: Stream processing at scale}, 69 | author={Kulkarni, Sanjeev and Bhagat, Nikunj and Fu, Maosong and Kedigehalli, Vikas and Kellogg, Christopher and Mittal, Sailesh and Patel, Jignesh M and Ramasamy, Karthik and Taneja, Siddarth}, 70 | booktitle={Proceedings of the 2015 ACM SIGMOD International Conference on Management of Data}, 71 | pages={239--250}, 72 | year={2015}, 73 | organization={ACM} 74 | } 75 | 76 | @misc{spotifylabs, 77 | title = {Spotify Labs}, 78 | howpublished = {https://labs.spotify.com/2016/02/25/spotifys-event-delivery-the-road-to-the-cloud-part-i/}, 79 | note = {Accessed: 2016-12-9} 80 | } 81 | 82 | @article{akidau2013millwheel, 83 | title={MillWheel: fault-tolerant stream processing at internet scale}, 84 | author={Akidau, Tyler and Balikov, Alex and Bekiro{\u{g}}lu, Kaya and Chernyak, Slava and Haberman, Josh and Lax, Reuven and McVeety, Sam and Mills, Daniel and Nordstrom, Paul and Whittle, Sam}, 85 | journal={Proceedings of the VLDB Endowment}, 86 | volume={6}, 87 | number={11}, 88 | pages={1033--1044}, 89 | year={2013}, 90 | publisher={VLDB Endowment} 91 | } 92 | 93 | @misc{apacheaurora, 94 | title = {Apache Aurora}, 95 | howpublished = {http://aurora.apache.org}, 96 | note = {Accessed: 2016-12-15} 97 | } 98 | 99 | @misc{nimbusproject, 100 | title = {Nimbus Project}, 101 | howpublished = {http://www.nimbusproject.org/docs/2.10.1/}, 102 | note = {Accessed: 2016-12-15} 103 | } 104 | @inproceedings{alon1996space, 105 | title={The space complexity of approximating the frequency moments}, 106 | author={Alon, Noga and Matias, Yossi and Szegedy, Mario}, 107 | booktitle={Proceedings of the twenty-eighth annual ACM symposium on Theory of computing}, 108 | pages={20--29}, 109 | year={1996}, 110 | organization={ACM} 111 | } 112 | @misc{pipelinedb, 113 | title = {PipelineDB}, 114 | howpublished = {https://www.pipelinedb.com/}, 115 | note = {Accessed: 2016-12-15} 116 | } 117 | @misc{apachesamza, 118 | title = {Apache Samza}, 119 | howpublished = {http://samza.apache.org}, 120 | note = {Accessed: 2016-12-15} 121 | } 122 | @misc{apacheflink, 123 | title = {Apache Flink}, 124 | howpublished = {https://flink.apache.org}, 125 | note = {Accessed: 2016-12-15} 126 | } 127 | @misc{structuredstreaming, 128 | title = {Structured Streaming}, 129 | howpublished = {http://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#overview}, 130 | note = {Accessed: 2016-12-15} 131 | } 132 | @misc{alibabaflink, 133 | title = {Alibaba Flinke}, 134 | howpublished = {http://data-artisans.com/blink-flink-alibaba-search/#more-1698}, 135 | note = {Accessed: 2016-12-15} 136 | } 137 | @misc{hadoopyarn, 138 | title = {Hadoop YARN}, 139 | howpublished = {https://hadoop.apache.org/docs/r2.7.2/hadoop-yarn/hadoop-yarn-site/YARN.html}, 140 | note = {Accessed: 2016-12-15} 141 | } -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | # Welcome to Jekyll! 2 | # 3 | # This config file is meant for settings that affect your whole blog, values 4 | # which you are expected to set up once and rarely need to edit after that. 5 | # For technical reasons, this file is *NOT* reloaded automatically when you use 6 | # 'jekyll serve'. If you change this file, please restart the server process. 7 | 8 | # Site settings 9 | title: Programming Models for Distributed Computing 10 | email: your-email@domain.com 11 | description: > # this means to ignore newlines until "baseurl:" 12 | Write an awesome description for your new site here. You can edit this 13 | line in _config.yml. It will appear in your document head meta (for 14 | Google search results) and in your feed.xml site description. 15 | baseurl: "" # the subpath of your site, e.g. /blog 16 | url: "http://yourdomain.com" # the base hostname & protocol for your site 17 | twitter_username: jekyllrb 18 | github_username: jekyll 19 | 20 | # Build settings 21 | markdown: kramdown 22 | gems: ['jekyll/scholar'] 23 | 24 | -------------------------------------------------------------------------------- /_includes/footer.html: -------------------------------------------------------------------------------- 1 | 39 | -------------------------------------------------------------------------------- /_includes/head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {% if page.title %}{{ page.title | escape }}{% else %}{{ site.title | escape }}{% endif %} 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /_includes/header.html: -------------------------------------------------------------------------------- 1 | 28 | -------------------------------------------------------------------------------- /_includes/icon-github.html: -------------------------------------------------------------------------------- 1 | {% include icon-github.svg %}{{ include.username }} 2 | -------------------------------------------------------------------------------- /_includes/icon-github.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /_includes/icon-twitter.html: -------------------------------------------------------------------------------- 1 | {% include icon-twitter.svg %}{{ include.username }} 2 | -------------------------------------------------------------------------------- /_includes/icon-twitter.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /_includes/navbar-links.html: -------------------------------------------------------------------------------- 1 |
  • Intro
  • 2 |
  • Chapters
  • 3 |
  • About
  • -------------------------------------------------------------------------------- /_includes/navbar.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /_layouts/chapter.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% include head.html %} 5 | 6 |
    7 |
    8 |
    9 |
    10 | 25 |
    26 | 31 |
    32 |
    33 |
    34 | 35 | 36 | 37 | 38 |
    39 | 44 |
    45 |
    46 |
    47 |
    48 |
    49 |
    50 | 51 |
    52 |
    53 |
    54 |
    55 | {% assign minutes = content | number_of_words | divided_by:180 %} 56 |
    {{ page.tag }}
    57 |

    {{ page.title }}

    58 |
    By {{ page.by }}
    59 |
    {{ page.subtitle }} 60 | {% if minutes <= 5 %} 61 | 62 | {% else %} 63 | ({{ minutes }} min read) 64 | {% endif %} 65 |
    66 |
    67 | {{ content }} 68 |
    69 |
    70 | 71 |
    72 |
    73 |
    74 |
    75 |
    76 |
    77 | 101 |
    102 |
    103 |
    104 |
    105 | 106 | 138 | 139 | 140 | 141 | 142 | -------------------------------------------------------------------------------- /_layouts/default.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% include head.html %} 5 | 6 |
    7 |
    8 | 9 | 14 |
    15 |
    Programming Models for
    16 |
    Distributed Computing
    17 |
    18 |
    19 |
    20 |
    21 |
    22 | 23 | 24 |
    25 |
    26 | {{ content }} 27 |
    28 |
    29 | 30 | {% include footer.html %} 31 |
    32 |
    33 | 34 | 35 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /_layouts/page.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: chapter 3 | --- 4 | 5 | 6 | 7 | 8 | 9 | 10 | {{ content }} 11 | 12 | 13 | -------------------------------------------------------------------------------- /about.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: About 4 | permalink: /about/ 5 | --- 6 | 7 | This is the base Jekyll theme. You can find out more info about customizing your Jekyll theme, as well as basic Jekyll usage documentation at [jekyllrb.com](http://jekyllrb.com/) 8 | 9 | You can find the source code for the Jekyll new theme at: 10 | {% include icon-github.html username="jglovier" %} / 11 | [jekyll-new](https://github.com/jglovier/jekyll-new) 12 | 13 | You can find the source code for Jekyll at 14 | {% include icon-github.html username="jekyll" %} / 15 | [jekyll](https://github.com/jekyll/jekyll) 16 | 17 | {% for post in site.posts %} 18 | {{ post.title }} 19 |
    20 | {% endfor %} 21 | -------------------------------------------------------------------------------- /chapter/1/figures/grpc-benchmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/1/figures/grpc-benchmark.png -------------------------------------------------------------------------------- /chapter/1/figures/grpc-client-transport-handler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/1/figures/grpc-client-transport-handler.png -------------------------------------------------------------------------------- /chapter/1/figures/grpc-cross-language.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/1/figures/grpc-cross-language.png -------------------------------------------------------------------------------- /chapter/1/figures/grpc-googleapis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/1/figures/grpc-googleapis.png -------------------------------------------------------------------------------- /chapter/1/figures/grpc-languages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/1/figures/grpc-languages.png -------------------------------------------------------------------------------- /chapter/1/figures/grpc-server-transport-handler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/1/figures/grpc-server-transport-handler.png -------------------------------------------------------------------------------- /chapter/1/figures/hello-world-client.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/1/figures/hello-world-client.png -------------------------------------------------------------------------------- /chapter/1/figures/hello-world-server.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/1/figures/hello-world-server.png -------------------------------------------------------------------------------- /chapter/1/figures/http2-frame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/1/figures/http2-frame.png -------------------------------------------------------------------------------- /chapter/1/figures/http2-stream-lifecycle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/1/figures/http2-stream-lifecycle.png -------------------------------------------------------------------------------- /chapter/1/figures/protobuf-types.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/1/figures/protobuf-types.png -------------------------------------------------------------------------------- /chapter/2/images/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/2/images/1.png -------------------------------------------------------------------------------- /chapter/2/images/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/2/images/15.png -------------------------------------------------------------------------------- /chapter/2/images/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/2/images/5.png -------------------------------------------------------------------------------- /chapter/2/images/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/2/images/6.png -------------------------------------------------------------------------------- /chapter/2/images/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/2/images/7.png -------------------------------------------------------------------------------- /chapter/2/images/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/2/images/8.png -------------------------------------------------------------------------------- /chapter/2/images/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/2/images/9.png -------------------------------------------------------------------------------- /chapter/2/images/p-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/2/images/p-1.png -------------------------------------------------------------------------------- /chapter/2/images/p-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/2/images/p-2.png -------------------------------------------------------------------------------- /chapter/3/E_account_spreadsheet_vats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/3/E_account_spreadsheet_vats.png -------------------------------------------------------------------------------- /chapter/3/E_vat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/3/E_vat.png -------------------------------------------------------------------------------- /chapter/3/sentinel_nodes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/3/sentinel_nodes.png -------------------------------------------------------------------------------- /chapter/3/supervision_tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/3/supervision_tree.png -------------------------------------------------------------------------------- /chapter/4/MR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/4/MR.png -------------------------------------------------------------------------------- /chapter/6/being-consistent.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: "Being Consistent" 4 | by: "Aviral Goel" 5 | --- 6 | 7 | ## Replication and Consistency 8 | 9 | Availability and Consistency are the defining characteristics of any distributed system. As dictated by the CAP theorem, accommodating network partitions requires a trade off between the two properties. Modern day large scale internet based distributed systems have to be highly available. To manage huge volumes of data (big data) and to reduce access latency for geographically diverse user base, their data centers also have to be geographically spread out. Network partitions which would otherwise happen with a low probability on a local network become certain events in such systems. To ensure availability in the event of partitions, these systems have to replicate data objects. This begs the question, how to ensure consistency of these replicas? It turns out there are different notions of consistency which the system can adhere to. 10 | 11 | * **Strong Consistency** implies linearizability of updates, i.e., all updates applied to a replicated data type are serialized in a global total order. This means that any update will have to be simultaneously applied to all other replicas. Its obvious that this notion of consistency is too restrictive. A single unavailable node will violate this condition. Forcing all updates to happen synchronously will impact system availability negatively. This notion clearly does not fit the requirements of highly available fault tolerant systems. 12 | 13 | * **Eventual Consistency** is a weaker model of consistency that does not guarantee immediate consistency of all replicas. Any local update is immediately executed on the replica. The replica then sends its state asynchronously to other replicas. As long as all replicas share their states with each other, the system eventually achieves stability. Each replica finally contains the same value. During the execution, all updates happen asynchronously at all replicas in a non-deterministic order. So replicas can be inconsistent between updates. If updates arrive concurrently at a replica, a consensus protocol can be employed to ensure that both updates taken together do not violate an invariant. If they do, a rollback has to be performed and the new state is communicated to all the other replicas. 14 | 15 | Most large scale distributed systems try to be **Eventually Consistent** to ensure high availability and partition-tolerance. But conflict resolution is hard. There is little guidance on correct approaches to consensus and its easy to come up with an error prone ad-hoc approach. What if we side-step conflict resolution and rollback completely? Is there a way to design data structures which do not require any consensus protocols to merge concurrent updates? 16 | 17 | ## A Distributed Setting 18 | 19 | ### TODO need to write pseudocode. Will finish this part with the detailed explanation of CRDTs in the next chapter. 20 | 21 | Consider a replicated counter. Each node can increment the value of its local copy. The figure below shows three nodes which increment their local copies at arbitrary time points and each replica sends its value asynchronously to the other two replicas. Whenever it receives the value of its replica, it adds it to its current value. If two values are received concurrently, both will be added together to its current value. So merging replicas in this example becomes trivial. 22 | 23 | Let's take a look at another interesting generalization of this. Integer Vector 24 | 25 | We can make an interesting observation from the previous examples: 26 | 27 | __*All distributed data structures don't need conflict resolution*__ 28 | 29 | This raises the following question: 30 | 31 | __*How can we design a distributed structure such that we don't need conflict resolution?*__ 32 | 33 | The answer to this question lies in an algebraic structure called the **join semilattice**. 34 | 35 | ## Join Semilattice 36 | 37 | A join-semilattice or upper semilattice is a *partial order* `≤` with a *least upper bound* (LUB) `⊔` for all pairs. 38 | `m = x ⊔ y` is a Least Upper Bound of `{ x , y }` under `≤` iff `∀m′, x ≤ m′ ∧ y ≤ m′ ⇒ x ≤ m ∧ y ≤ m ∧ m ≤ m′`. 39 | 40 | Here the least upper bound `⊔` has the follow properties: 41 | 42 | **Associative** 43 | 44 | `(x ⊔ y) ⊔ z = x ⊔ (y ⊔ z)` 45 | 46 | **Commutative** 47 | 48 | `x ⊔ y = y ⊔ x` 49 | 50 | **Idempotent** 51 | 52 | `x ⊔ x = x` 53 | 54 | The examples we saw earlier were of structures that could be modeled as join semilattices. The merge operation for the increment only counter is the summation function and for the integer vector it is the per-index maximum of the vectors being merged. 55 | 56 | So, if we can model the state of the data structure as a partially ordered set and design the merge operation to always compute the "larger" of the two states, its replicas will never need consensus. They will always converge as execution proceeds. Such data structures are called CRDTs (Conflict-free Replicated Data Type). But what about consistency of these replicas? 57 | 58 | ## Strong Eventual Consistency (SEC) 59 | 60 | We discussed a notion of consistency, *Eventual Consistency*, in which replicas eventually become consistent if there are no more updates to be merged. But the update operation is left unspecified. Its possible for an update to render the replica in a state that causes it to conflict with a later update. In this case the replica may have to roll back and use consensus to ensure that all replicas do the same to ensure consistency. This is complicated and wasteful. But if replicas are modeled as CRDTs, the updates never conflict. Regardless of the order in which the updates are applied, all replicas will eventually have equivalent state. Note that no conflict arbitration is necessary. This kind of Eventual Consistency is a stronger notion of consistency than the one that requires conflict arbitration and hence is called *Strong Eventual Consistency*. 61 | 62 | ### Strong Eventual Consistency and CAP Theorem 63 | 64 | Let's study SEC data objects from the perspective of CAP theorem. 65 | 66 | #### Consistency and Network Partition 67 | 68 | Each distributed replica will communicate asynchronously with other reachable replicas. These replicas will eventually converge to the same value. There is no consistency guarantee on the value of replicas not reachable due to network conditions and hence this condition is strictly weaker than strong consistency. But as soon as those replicas can be reached, they will also converge in a self-stabilizing manner. 69 | 70 | #### Availability and Network Partition 71 | 72 | Each distributed replica will always be available for local reads and writes regardless of network partitions. In fact, if there are n replicas, a single replica will function even if the remaining n - 1 replicas crash simultaneously. This **provides an extreme form of availability**. 73 | 74 | SEC facilitates maximum consistency and availability in the event of network partitions by relaxing the requirement of global consistency. Note that this is achieved by virtue of modeling the data objects as join semilattices. 75 | 76 | #### Strong Eventual Consistency and Linearizability 77 | 78 | In a distributed setting, a replica has to handle concurrent updates. In addition to its sequential behavior, a CRDT also has to ensure that its concurrent behavior also ensures strong eventual consistency. This makes it possible for CRDTs to exhibit behavior that is simply not possible for sequentially consistent objects. 79 | 80 | Consider a set CRDT used in a distributed setting. One of the replicas pi executes the sequence `add(a); remove(b)`. Another replica pj executes the sequence `add(b); remove(a)`. Now both send their states asynchronously to another replica pk which has to merge them concurrently. Same element exists in one of the sets and does not exist in the other set. There are multiple choices that the CRDT designer can make. Let's assume that the implementation always prefers inclusion over exclusion. So in this case, pk will include both `a` and `b`. 81 | 82 | Now consider a sequential execution of the two sequences on set data structure. The order of execution will be either `add(a); remove(b); add(b); remove(a)` or `add(b); remove(a); add(a); remove(b)`. In both cases one of the elements is excluded. This is different from the state of the CRDT set implementation. Thus, strong eventually consistent data structures can be sequentially inconsistent. 83 | 84 | Similarly, if there are `n` sequentially consistent replicas, then they would need consensus to ensure a single order of execution of operations across all replicas. But if `n - 1` replicas crash, then consensus cannot happen. This makes the idea of sequential consistency incomparable to that of strong eventual consistency. 85 | 86 | ## What Next? 87 | 88 | This chapter introduced Strong Eventual Consistency and the formalism behind CRDTs, join semilattices, which enables CRDTs to exhibit strong eventual consistency. The discussion however does not answer an important question: 89 | 90 | __*Can all standard data structures be designed as CRDTs?*__ 91 | 92 | The next chapter sheds more light on the design of CRDTs and attempts to answer this question. 93 | -------------------------------------------------------------------------------- /chapter/6/resources/code/counters/python/operation-based-increment-and-decrement-counter.py: -------------------------------------------------------------------------------- 1 | class CmRDT: 2 | pass 3 | 4 | class Counter(CmRDT): 5 | 6 | def __init__(self): # constructor function 7 | self._count = 0 8 | 9 | def value(self): # query function 10 | return self._count 11 | 12 | def increment(self): # update function 13 | self._count += 1 14 | for replica in self.replicas(): 15 | self.transmit("increment", replica) 16 | 17 | def decrement(self): # update function 18 | self._count -= 1 19 | for replica in self.replicas(): 20 | self.transmit("decrement", replica) 21 | -------------------------------------------------------------------------------- /chapter/6/resources/code/counters/python/operation-based-increment-only-counter.py: -------------------------------------------------------------------------------- 1 | class CmRDT: 2 | pass 3 | 4 | class Counter(CmRDT): 5 | 6 | def __init__(self): # constructor function 7 | self._count = 0 8 | 9 | def value(self): # query function 10 | return self._count 11 | 12 | def increment(self): # update function 13 | self._count += 1 14 | for replica in self.replicas(): 15 | self.transmit("increment", replica) 16 | -------------------------------------------------------------------------------- /chapter/6/resources/code/counters/python/state-based-increment-and-decrement-counter-correct.py: -------------------------------------------------------------------------------- 1 | class CvRDT: 2 | pass 3 | 4 | class Counter(CvRDT): 5 | 6 | def __init__(self, 7 | increments = None, 8 | decrements = None): # constructor function 9 | if increments is None: 10 | self._increments = [0] * length(replicas()) 11 | else: 12 | self._increments = increments 13 | if decrements is None: 14 | self._decrements = [0] * length(replicas()) 15 | else: 16 | self._decrements = decrements 17 | 18 | def increments(self): # query function 19 | return list(self._increments) # return a clone 20 | 21 | def decrements(self): # query function 22 | return list(self._decrements) # return a clone 23 | 24 | def value(self): # query function 25 | return (sum(self.increments()) - 26 | sum(self.decrements())) 27 | 28 | def increment(self): # update function 29 | self._increments[self.replicaId()] += 1 30 | 31 | def decrement(self): # update function 32 | self._decrements[self.replicaId()] += 1 33 | 34 | def compare(self, other): # comparison function 35 | return (all(v1 <= v2 for (v1, v2) in 36 | zip(self.increments(), 37 | other.increments())) 38 | and 39 | all(v1 <= v2 for (v1, v2) in 40 | zip(self.decrements(), 41 | other.decrements()))) 42 | 43 | def merge(self, other): # merge function 44 | return Counter(increments = map(max, zip(self.increments(), 45 | other.increments())), 46 | decrements = map(max, zip(self.decrements(), 47 | other.decrements()))) 48 | -------------------------------------------------------------------------------- /chapter/6/resources/code/counters/python/state-based-increment-and-decrement-counter-incorrect.py: -------------------------------------------------------------------------------- 1 | class CvRDT: 2 | pass 3 | 4 | class Counter(CvRDT): 5 | 6 | def __init__(self, counts = None): # constructor function 7 | if counts is None: 8 | self._counts = [0] * length(self.replicas()) 9 | else: 10 | self._counts = counts 11 | 12 | def value(self): # query function 13 | return sum(self._counts) 14 | 15 | def counts(self): # query function 16 | return list(self._counts) # return a clone 17 | 18 | def increment(self): # update function 19 | self._counts[self.replicaId()] += 1 20 | 21 | def decrement(self): # update function 22 | self._counts[self.replicaId()] -= 1 23 | 24 | def compare(self, other): # comparison function 25 | return all(v1 <= v2 for (v1, v2) in 26 | zip(self.counts(), 27 | other.counts())) 28 | 29 | def merge(self, other): # merge function 30 | return Counter(map(max, zip(self.counts(), 31 | other.counts()))) 32 | -------------------------------------------------------------------------------- /chapter/6/resources/code/counters/python/state-based-increment-only-counter-correct.py: -------------------------------------------------------------------------------- 1 | class CvRDT: 2 | pass 3 | 4 | class Counter(CvRDT): 5 | 6 | def __init__(self, counts = None): # constructor function 7 | if counts is None: 8 | self._counts = [0] * length(self.replicas()) 9 | else: 10 | self._counts = counts 11 | 12 | def value(self): # query function 13 | return sum(self._counts) 14 | 15 | def counts(self): # query function 16 | return list(self._counts) # return a clone 17 | 18 | def increment(self): # update function 19 | self._counts[self.replicaId()] += 1 20 | 21 | def compare(self, other): # comparison function 22 | return all(v1 <= v2 for (v1, v2) in 23 | zip(self.counts(), 24 | other.counts())) 25 | 26 | def merge(self, other): # merge function 27 | return Counter(map(max, zip(self.counts(), 28 | other.counts()))) 29 | -------------------------------------------------------------------------------- /chapter/6/resources/code/counters/python/state-based-increment-only-counter-incorrect.py: -------------------------------------------------------------------------------- 1 | class CvRDT: 2 | pass 3 | 4 | class Counter(CvRDT): 5 | 6 | def __init__(self, count = 0): # constructor function 7 | self._count = count 8 | 9 | def value(self): # query function 10 | return self._count 11 | 12 | def increment(self): # update function 13 | self._count += 1 14 | 15 | def compare(self, other): # comparison function 16 | return self.value() <= other.value() 17 | 18 | def merge(self, other): # merge function 19 | return Counter(max(self.value(), other.value())) 20 | -------------------------------------------------------------------------------- /chapter/6/resources/images/counters/decrement-operation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/6/resources/images/counters/decrement-operation.png -------------------------------------------------------------------------------- /chapter/6/resources/images/counters/increment-and-decrement-operations-commute.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/6/resources/images/counters/increment-and-decrement-operations-commute.png -------------------------------------------------------------------------------- /chapter/6/resources/images/counters/increment-operation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/6/resources/images/counters/increment-operation.png -------------------------------------------------------------------------------- /chapter/6/resources/images/counters/operation-based-increment-and-decrement-counter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/6/resources/images/counters/operation-based-increment-and-decrement-counter.png -------------------------------------------------------------------------------- /chapter/6/resources/images/counters/operation-based-increment-only-counter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/6/resources/images/counters/operation-based-increment-only-counter.png -------------------------------------------------------------------------------- /chapter/6/resources/images/counters/state-based-increment-and-decrement-counter-correct-lattice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/6/resources/images/counters/state-based-increment-and-decrement-counter-correct-lattice.png -------------------------------------------------------------------------------- /chapter/6/resources/images/counters/state-based-increment-and-decrement-counter-correct.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/6/resources/images/counters/state-based-increment-and-decrement-counter-correct.png -------------------------------------------------------------------------------- /chapter/6/resources/images/counters/state-based-increment-and-decrement-counter-incorrect-lattice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/6/resources/images/counters/state-based-increment-and-decrement-counter-incorrect-lattice.png -------------------------------------------------------------------------------- /chapter/6/resources/images/counters/state-based-increment-and-decrement-counter-incorrect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/6/resources/images/counters/state-based-increment-and-decrement-counter-incorrect.png -------------------------------------------------------------------------------- /chapter/6/resources/images/counters/state-based-increment-only-counter-correct.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/6/resources/images/counters/state-based-increment-only-counter-correct.png -------------------------------------------------------------------------------- /chapter/6/resources/images/counters/state-based-increment-only-counter-incorrect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/6/resources/images/counters/state-based-increment-only-counter-incorrect.png -------------------------------------------------------------------------------- /chapter/6/resources/images/partitioned-network.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/6/resources/images/partitioned-network.jpg -------------------------------------------------------------------------------- /chapter/8/Hive-architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/8/Hive-architecture.png -------------------------------------------------------------------------------- /chapter/8/Hive-transformation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/8/Hive-transformation.png -------------------------------------------------------------------------------- /chapter/8/cluster-overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/8/cluster-overview.png -------------------------------------------------------------------------------- /chapter/8/ecosystem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/8/ecosystem.png -------------------------------------------------------------------------------- /chapter/8/edge-cut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/8/edge-cut.png -------------------------------------------------------------------------------- /chapter/8/hadoop-ecosystem.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/8/hadoop-ecosystem.jpg -------------------------------------------------------------------------------- /chapter/8/spark-ecosystem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/8/spark-ecosystem.png -------------------------------------------------------------------------------- /chapter/8/spark_pipeline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/8/spark_pipeline.png -------------------------------------------------------------------------------- /chapter/8/sparksql-data-flow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/8/sparksql-data-flow.jpg -------------------------------------------------------------------------------- /chapter/8/sql-vs-dataframes-vs-datasets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/8/sql-vs-dataframes-vs-datasets.png -------------------------------------------------------------------------------- /chapter/8/vertex-cut-datastructure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/8/vertex-cut-datastructure.png -------------------------------------------------------------------------------- /chapter/9/DAG.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/9/DAG.jpg -------------------------------------------------------------------------------- /chapter/9/DiagramStream.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/9/DiagramStream.jpg -------------------------------------------------------------------------------- /chapter/9/Kafka.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/9/Kafka.jpg -------------------------------------------------------------------------------- /chapter/9/Naiad.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/9/Naiad.jpg -------------------------------------------------------------------------------- /chapter/9/TimelyD.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/9/TimelyD.jpg -------------------------------------------------------------------------------- /chapter/9/Topology.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/chapter/9/Topology.jpg -------------------------------------------------------------------------------- /example.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: "Remote Procedure Call" 4 | by: "Joe Schmoe and Mary Jane" 5 | --- 6 | 7 | You’ll find this post in your `_posts` directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run `jekyll serve`, which launches a web server and auto-regenerates your site when a file is updated. 8 | 9 | To add new posts, simply add a file in the `_posts` directory that follows the convention `YYYY-MM-DD-name-of-post.ext` and includes the necessary front matter. Take a look at the source for this post to get an idea about how it works. 10 | 11 | Jekyll also offers powerful support for code snippets: 12 | 13 | ```ruby 14 | def print_hi(name) 15 | puts "Hi, #{name}" 16 | end 17 | print_hi('Tom') 18 | #=> prints 'Hi, Tom' to STDOUT. 19 | ``` 20 | 21 | Check out the [Jekyll docs](https://jekyllrb.com/docs/home/) for more info on how to get the most out of Jekyll. File all bugs/feature requests at [Jekyll’s GitHub repo](https://github.com/jekyll/jekyll). If you have questions, you can ask them on [Jekyll Talk](https://talk.jekyllrb.com/). 22 | 23 | ## Header 24 | 25 | Here's some textSee Tufte’s comment in the Tufte book fonts thread. which has a little foot/side note thingy. 26 | 27 | This is another example of a thing.Blue text, while also a widely recognizable clickable-text indicator, is crass and distracting. Luckily, it is also rendered unnecessary by the use of underlining. This thing is different becuase it doesn't have a number I guess? 28 | 29 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor 30 | incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis 31 | nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. 32 | Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu 33 | fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in 34 | culpa qui officia deserunt mollit anim id est laborum. 35 | 36 | One can also have blockquotes 37 | 38 |
    39 |

    The English language . . . becomes ugly and inaccurate because our thoughts are foolish, but the slovenliness of our language makes it easier for us to have foolish thoughts.

    40 | 41 |
    42 | 43 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 44 | 45 | > This is also a blockquote, but I guess it doesn't have who it's attributed to. 46 | 47 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. {% cite Uniqueness --file example %} 48 | 49 |
    50 | Figurative map of the successive losses of the French Army in the Russian campaign, 1812-1813 51 |
    52 | 53 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. {% cite Elsman2005 Kennedy2004 --file example %} 54 | 55 | This is a bulleted list: 56 | 57 | - one 58 | - two 59 | - three 60 | 61 | This is a numbered list: 62 | 63 | 1. one 64 | 2. two 65 | 3. three 66 | 67 | You can also have inline math, like this $$x^2+x=4$$ as well as equation blocks: 68 | 69 | \\[x^2 + 3 = y\\] 70 | 71 | ## References 72 | 73 | {% bibliography --file example %} 74 | 75 | -------------------------------------------------------------------------------- /feed.xml: -------------------------------------------------------------------------------- 1 | --- 2 | layout: null 3 | --- 4 | 5 | 6 | 7 | {{ site.title | xml_escape }} 8 | {{ site.description | xml_escape }} 9 | {{ site.url }}{{ site.baseurl }}/ 10 | 11 | {{ site.time | date_to_rfc822 }} 12 | {{ site.time | date_to_rfc822 }} 13 | Jekyll v{{ jekyll.version }} 14 | {% for post in site.posts limit:10 %} 15 | 16 | {{ post.title | xml_escape }} 17 | {{ post.content | xml_escape }} 18 | {{ post.date | date_to_rfc822 }} 19 | {{ post.url | prepend: site.baseurl | prepend: site.url }} 20 | {{ post.url | prepend: site.baseurl | prepend: site.url }} 21 | {% for tag in post.tags %} 22 | {{ tag | xml_escape }} 23 | {% endfor %} 24 | {% for cat in post.categories %} 25 | {{ cat | xml_escape }} 26 | {% endfor %} 27 | 28 | {% endfor %} 29 | 30 | 31 | -------------------------------------------------------------------------------- /resources/css/custom.css.old.css: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | /*html { font-size: 14px; }*/ 5 | 6 | 7 | body { 8 | margin: auto; 9 | } 10 | 11 | .topbar { 12 | position: relative; 13 | background: #F3F3F3; 14 | height: 70px; 15 | width: 100%; 16 | } 17 | 18 | h2, h3 { 19 | font-family: 'Alegreya Sans', sans-serif; 20 | font-family: 'Fira Sans'; 21 | font-weight: 200; 22 | font-style: normal; 23 | } 24 | 25 | .post-title { 26 | font-family: 'Alegreya Sans', sans-serif; 27 | font-family: 'Fira Sans'; 28 | font-weight: 200; 29 | /*font-size: 3.2em;*/ 30 | /*line-height: 1em;*/ 31 | /*line-height: 1.6em;*/ 32 | } 33 | 34 | .post-title, .post-title:after { 35 | position: relative; 36 | /*left: 10px;*/ 37 | line-height: 1.6em; 38 | /*background: #ffdb00; 39 | -webkit-box-shadow: -10px 0px 0px #ffdb00, 10px 0px 0px #ffdb00; 40 | box-shadow: -10px 0px 0px #ffdb00, 10px 0px 0px #ffdb00; 41 | box-decoration-break: clone;*/ 42 | } 43 | 44 | .author { 45 | font-family: 'Montserrat', sans-serif; 46 | text-transform: uppercase; 47 | color: #b3b3b3; 48 | } 49 | 50 | .book-title { 51 | position: absolute; 52 | top: 20px; 53 | padding-left: 30px; 54 | } 55 | 56 | .prog-mod { 57 | font-family: 'Alegreya Sans', sans-serif; 58 | font-weight: 700; 59 | font-style: italic; 60 | font-size: 22px; 61 | margin-bottom: -8px; 62 | margin-left: -10px; 63 | color: #595959; 64 | } 65 | 66 | .dist-comp { 67 | font-family: 'Alegreya Sans', sans-serif; 68 | text-transform: uppercase; 69 | font-weight: 900; 70 | font-style: normal; 71 | font-size: 24px; 72 | } 73 | 74 | @font-face { 75 | font-family: 'Consolas'; 76 | src: url('{{ site.baseurl }}/resources/glyphs/Consolas.eot?#iefix') format('embedded-opentype'), url('{{ site.baseurl }}/resources/glyphs/Consolas.woff') format('woff'), url('{{ site.baseurl }}/resources/glyphs/Consolas.ttf') format('truetype'), url('{{ site.baseurl }}/resources/glyphs/Consolas.svg#Consolas') format('svg'); 77 | font-weight: normal; 78 | font-style: normal; 79 | } 80 | 81 | @font-face { 82 | font-family: 'Consolas'; 83 | src: url('{{ site.baseurl }}/resources/glyphs/Consolas-Italic.eot?#iefix') format('embedded-opentype'), url('{{ site.baseurl }}/resources/glyphs/Consolas-Italic.woff') format('woff'), url('{{ site.baseurl }}/resources/glyphs/Consolas-Italic.ttf') format('truetype'), url('{{ site.baseurl }}/resources/glyphs/Consolas-Italic.svg#Consolas-Italic') format('svg'); 84 | font-weight: normal; 85 | font-style: italic; 86 | } 87 | 88 | code { 89 | color: #7599a9; 90 | /*background: #F4F4F4;*/ 91 | /*border-radius: 3px;*/ 92 | /*padding: 2px;*/ 93 | /*border: 1px solid #DDDDDD;*/ 94 | /*margin: 0 3px 0 3px;*/ 95 | /*padding: 0 2px 0 2px;*/ 96 | } 97 | 98 | .logo { 99 | margin-left: -16px; 100 | margin-top: 16px; 101 | } 102 | 103 | blockquote { 104 | /*font-family: Georgia, serif;*/ 105 | font-size: 18px; 106 | font-style: italic; 107 | /*width: 500px;*/ 108 | margin: 0.25em 0; 109 | padding: 0.35em 40px; 110 | /*line-height: 1.45;*/ 111 | position: relative; 112 | /*color: #383838;*/ 113 | } 114 | 115 | blockquote:before { 116 | display: block; 117 | padding-left: 10px; 118 | content: "\201C"; 119 | font-size: 80px; 120 | position: absolute; 121 | left: -20px; 122 | top: -20px; 123 | color: #7a7a7a; 124 | } 125 | 126 | blockquote cite { 127 | color: #999999; 128 | font-size: 14px; 129 | display: block; 130 | /*margin-top: 5px;*/ 131 | } 132 | 133 | blockquote cite:before { 134 | content: "\2014 \2009"; 135 | } 136 | 137 | blockquote footer:before { 138 | content: "\2014 \2009"; 139 | } 140 | 141 | blockquote footer { 142 | margin-top: -12px; 143 | font-size: 12px; 144 | font-style: normal; 145 | font-family: 'Montserrat', sans-serif; 146 | text-transform: uppercase; 147 | color: #b3b3b3; 148 | } 149 | 150 | .bibliography { 151 | width: 55%; 152 | } 153 | 154 | @media (max-width: 760px) { 155 | .bibliography { width: 90%; } 156 | } -------------------------------------------------------------------------------- /resources/css/entypo.css: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | @font-face { 5 | font-family: 'EntypoRegular'; 6 | src: url('{{ site.baseurl }}/resources/glyphs/entypo.eot'); 7 | src: url('{{ site.baseurl }}/resources/glyphs/entypo.eot?#iefix') format('embedded-opentype'), 8 | url('{{ site.baseurl }}/resources/glyphs/entypo.woff') format('woff'), 9 | url('{{ site.baseurl }}/resources/glyphs/entypo.ttf') format('truetype'), 10 | url('{{ site.baseurl }}/resources/glyphs/entypo.svg#EntypoRegular') format('svg'); 11 | font-weight: normal; 12 | font-style: normal; 13 | } 14 | 15 | @font-face { 16 | font-family: 'EntypoSocialRegular'; 17 | src: url('{{ site.baseurl }}/resources/glyphs/entypo-social.eot'); 18 | src: url('{{ site.baseurl }}/resources/glyphs/entypo-social.eot?#iefix') format('embedded-opentype'), 19 | url('{{ site.baseurl }}/resources/glyphs/entypo-social.woff') format('woff'), 20 | url('{{ site.baseurl }}/resources/glyphs/entypo-social.ttf') format('truetype'), 21 | url('{{ site.baseurl }}/resources/glyphs/entypo-social.svg#EntypoRegular') format('svg'); 22 | font-weight: normal; 23 | font-style: normal; 24 | } 25 | 26 | .entypo { 27 | font-family: 'EntypoRegular'; 28 | font-size: 2em; 29 | font-weight: normal; 30 | line-height: 0; 31 | } 32 | 33 | .entypo-social { 34 | font-family: 'EntypoSocialRegular'; 35 | font-size: 2em; 36 | font-weight: normal; 37 | line-height: 0; 38 | } 39 | 40 | .entypo.phone:before{ content:'\1F4DE'; } 41 | .entypo.mobile:before{ content:'\1F4F1'; } 42 | .entypo.mouse:before{ content:'\E789'; } 43 | .entypo.address:before{ content:'\E723'; } 44 | .entypo.mail:before{ content:'\2709'; } 45 | .entypo.paper-plane:before{ content:'\1F53F'; } 46 | .entypo.pencil:before{ content:'\270E'; } 47 | .entypo.feather:before{ content:'\2712'; } 48 | .entypo.attach:before{ content:'\1F4CE'; } 49 | .entypo.inbox:before{ content:'\E777'; } 50 | .entypo.reply:before{ content:'\E712'; } 51 | .entypo.reply-all:before{ content:'\E713'; } 52 | .entypo.forward:before{ content:'\27A6'; } 53 | .entypo.user:before{ content:'\1F464'; } 54 | .entypo.users:before{ content:'\1F465'; } 55 | .entypo.add-user:before{ content:'\E700'; } 56 | .entypo.vcard:before{ content:'\E722'; } 57 | .entypo.export:before{ content:'\E715'; } 58 | .entypo.location:before{ content:'\E724'; } 59 | .entypo.map:before{ content:'\E727'; } 60 | .entypo.compass:before{ content:'\E728'; } 61 | .entypo.direction:before{ content:'\27A2'; } 62 | .entypo.hair-cross:before{ content:'\1F3AF'; } 63 | .entypo.share:before{ content:'\E73C'; } 64 | .entypo.shareable:before{ content:'\E73E'; } 65 | .entypo.heart:before{ content:'\2665'; } 66 | .entypo.heart-empty:before{ content:'\2661'; } 67 | .entypo.star:before{ content:'\2605'; } 68 | .entypo.star-empty:before{ content:'\2606'; } 69 | .entypo.thumbs-up:before{ content:'\1F44D'; } 70 | .entypo.thumbs-down:before{ content:'\1F44E'; } 71 | .entypo.chat:before{ content:'\E720'; } 72 | .entypo.comment:before{ content:'\E718'; } 73 | .entypo.quote:before{ content:'\275E'; } 74 | .entypo.home:before{ content:'\2302'; } 75 | .entypo.popup:before{ content:'\E74C'; } 76 | .entypo.search:before{ content:'\1F50D'; } 77 | .entypo.flashlight:before{ content:'\1F526'; } 78 | .entypo.print:before{ content:'\E716'; } 79 | .entypo.bell:before{ content:'\1F514'; } 80 | .entypo.link:before{ content:'\1F517'; } 81 | .entypo.flag:before{ content:'\2691'; } 82 | .entypo.cog:before{ content:'\2699'; } 83 | .entypo.tools:before{ content:'\2692'; } 84 | .entypo.trophy:before{ content:'\1F3C6'; } 85 | .entypo.tag:before{ content:'\E70C'; } 86 | .entypo.camera:before{ content:'\1F4F7'; } 87 | .entypo.megaphone:before{ content:'1F4E3'; } 88 | .entypo.moon:before{ content:'\0045'; } 89 | .entypo.palette:before{ content:'\1F3A8'; } 90 | .entypo.leaf:before{ content:'\1F342'; } 91 | .entypo.note:before{ content:'\266A'; } 92 | .entypo.beamed-note:before{ content:'\266B'; } 93 | .entypo.new:before{ content:'\1F4A5'; } 94 | .entypo.graduation-cap:before{ content:'\1F393'; } 95 | .entypo.book:before{ content:'\1F4D5'; } 96 | .entypo.newspaper:before{ content:'\1F4F0'; } 97 | .entypo.bag:before{ content:'\1F45C'; } 98 | .entypo.airplane:before{ content:'\2708'; } 99 | .entypo.lifebuoy:before{ content:'\E788'; } 100 | .entypo.eye:before{ content:'\E70A'; } 101 | .entypo.clock:before{ content:'\1F554'; } 102 | .entypo.mic:before{ content:'\1F3A4'; } 103 | .entypo.calendar:before{ content:'\1F4C5'; } 104 | .entypo.flash:before{ content:'\26A1'; } 105 | .entypo.thunder-cloud:before{ content:'\26C8'; } 106 | .entypo.droplet:before{ content:'\1F4A7'; } 107 | .entypo.cd:before{ content:'\1F4BF'; } 108 | .entypo.briefcase:before{ content:'\1F4BC'; } 109 | .entypo.air:before{ content:'\1F4A8'; } 110 | .entypo.hourglass:before{ content:'\23F3'; } 111 | .entypo.gauge:before{ content:'\1F6C7'; } 112 | .entypo.language:before{ content:'\1F394'; } 113 | .entypo.network:before{ content:'\E776'; } 114 | .entypo.key:before{ content:'\1F511'; } 115 | .entypo.battery:before{ content:'\1F50B'; } 116 | .entypo.bucket:before{ content:'\1F4FE'; } 117 | .entypo.magnet:before{ content:'\E7A1'; } 118 | .entypo.drive:before{ content:'\1F4FD'; } 119 | .entypo.cup:before{ content:'\2615'; } 120 | .entypo.rocket:before{ content:'\1F680'; } 121 | .entypo.brush:before{ content:'\E79A'; } 122 | .entypo.suitcase:before{ content:'\1F6C6'; } 123 | .entypo.traffic-cone:before{ content:'\1F6C8'; } 124 | .entypo.globe:before{ content:'\1F30E'; } 125 | .entypo.keyboard:before{ content:'\2328'; } 126 | .entypo.browser:before{ content:'\E74E'; } 127 | .entypo.publish:before{ content:'\E74D'; } 128 | .entypo.progress-3:before{ content:'\E76B'; } 129 | .entypo.progress-2:before{ content:'\E76A'; } 130 | .entypo.progress-1:before{ content:'\E769'; } 131 | .entypo.progress-0:before{ content:'\E768'; } 132 | .entypo.light-down:before{ content:'\1F505'; } 133 | .entypo.light-up:before{ content:'\1F506'; } 134 | .entypo.adjust:before{ content:'\25D1'; } 135 | .entypo.code:before{ content:'\E714'; } 136 | .entypo.monitor:before{ content:'\1F4BB'; } 137 | .entypo.infinity:before{ content:'\221E'; } 138 | .entypo.light-bulb:before{ content:'\1F4A1'; } 139 | .entypo.credit-card:before{ content:'\1F4B3'; } 140 | .entypo.database:before{ content:'\1F4F8'; } 141 | .entypo.voicemail:before{ content:'\2707'; } 142 | .entypo.clipboard:before{ content:'\1F4CB'; } 143 | .entypo.cart:before{ content:'\E73D'; } 144 | .entypo.box:before{ content:'\1F4E6'; } 145 | .entypo.ticket:before{ content:'\1F3AB'; } 146 | .entypo.rss:before{ content:'\E73A'; } 147 | .entypo.signal:before{ content:'\1F4F6'; } 148 | .entypo.thermometer:before{ content:'\1F4FF'; } 149 | .entypo.water:before{ content:'\1F4A6'; } 150 | .entypo.sweden:before{ content:'\F601'; } 151 | .entypo.line-graph:before{ content:'\1F4C8'; } 152 | .entypo.pie-chart:before{ content:'\25F4'; } 153 | .entypo.bar-graph:before{ content:'\1F4CA'; } 154 | .entypo.area-graph:before{ content:'\1F53E'; } 155 | .entypo.lock:before{ content:'\1F512'; } 156 | .entypo.lock-open:before{ content:'\1F513'; } 157 | .entypo.logout:before{ content:'\E741'; } 158 | .entypo.login:before{ content:'\E740'; } 159 | .entypo.check:before{ content:'\2713'; } 160 | .entypo.cross:before{ content:'\274C'; } 161 | .entypo.squared-minus:before{ content:'\229F'; } 162 | .entypo.squared-plus:before{ content:'\229E'; } 163 | .entypo.squared-cross:before{ content:'\274E'; } 164 | .entypo.circled-minus:before{ content:'\2296'; } 165 | .entypo.circled-plus:before{ content:'\2295'; } 166 | .entypo.circled-cross:before{ content:'\2716'; } 167 | .entypo.minus:before{ content:'\2796'; } 168 | .entypo.plus:before{ content:'\2795'; } 169 | .entypo.erase:before{ content:'\232B'; } 170 | .entypo.block:before{ content:'\1F6AB'; } 171 | .entypo.info:before{ content:'\2139'; } 172 | .entypo.circled-info:before{ content:'\E705'; } 173 | .entypo.help:before{ content:'\2753'; } 174 | .entypo.circled-help:before{ content:'\E704'; } 175 | .entypo.warning:before{ content:'\26A0'; } 176 | .entypo.cycle:before{ content:'\1F504'; } 177 | .entypo.cw:before{ content:'\27F3'; } 178 | .entypo.ccw:before{ content:'\27F2'; } 179 | .entypo.shuffle:before{ content:'\1F500'; } 180 | .entypo.back:before{ content:'\1F519'; } 181 | .entypo.level-down:before{ content:'\21B3'; } 182 | .entypo.retweet:before{ content:'\E717'; } 183 | .entypo.loop:before{ content:'\1F501'; } 184 | .entypo.back-in-time:before{ content:'\E771'; } 185 | .entypo.level-up:before{ content:'\21B0'; } 186 | .entypo.switch:before{ content:'\21C6'; } 187 | .entypo.numbered-list:before{ content:'\E005'; } 188 | .entypo.add-to-list:before{ content:'\E003'; } 189 | .entypo.layout:before{ content:'\268F'; } 190 | .entypo.list:before{ content:'\2630'; } 191 | .entypo.text-doc:before{ content:'\1F4C4'; } 192 | .entypo.text-doc-inverted:before{ content:'\E731'; } 193 | .entypo.doc:before{ content:'\E730'; } 194 | .entypo.docs:before{ content:'\E736'; } 195 | .entypo.landscape-doc:before{ content:'\E737'; } 196 | .entypo.picture:before{ content:'\1F304'; } 197 | .entypo.video:before{ content:'\1F3AC'; } 198 | .entypo.music:before{ content:'\1F3B5'; } 199 | .entypo.folder:before{ content:'\1F4C1'; } 200 | .entypo.archive:before{ content:'\E800'; } 201 | .entypo.trash:before{ content:'\E729'; } 202 | .entypo.upload:before{ content:'\1F4E4'; } 203 | .entypo.download:before{ content:'\1F4E5'; } 204 | .entypo.save:before{ content:'\1F4BE'; } 205 | .entypo.install:before{ content:'\E778'; } 206 | .entypo.cloud:before{ content:'\2601'; } 207 | .entypo.upload-cloud:before{ content:'\E711'; } 208 | .entypo.bookmark:before{ content:'\1F516'; } 209 | .entypo.bookmarks:before{ content:'\1F4D1'; } 210 | .entypo.open-book:before{ content:'\1F4D6'; } 211 | .entypo.play:before{ content:'\25B6'; } 212 | .entypo.paus:before{ content:'\2016'; } 213 | .entypo.record:before{ content:'\25CF'; } 214 | .entypo.stop:before{ content:'\25A0'; } 215 | .entypo.ff:before{ content:'\23E9'; } 216 | .entypo.fb:before{ content:'\23EA'; } 217 | .entypo.to-start:before{ content:'\23EE'; } 218 | .entypo.to-end:before{ content:'\23ED'; } 219 | .entypo.resize-full:before{ content:'\E744'; } 220 | .entypo.resize-small:before{ content:'\E746'; } 221 | .entypo.volume:before{ content:'\23F7'; } 222 | .entypo.sound:before{ content:'\1F50A'; } 223 | .entypo.mute:before{ content:'\1F507'; } 224 | .entypo.flow-cascade:before{ content:'\1F568'; } 225 | .entypo.flow-branch:before{ content:'\1F569'; } 226 | .entypo.flow-tree:before{ content:'\1F56A'; } 227 | .entypo.flow-line:before{ content:'\1F56B'; } 228 | .entypo.flow-parallel:before{ content:'\1F56C'; } 229 | .entypo.left-bold:before{ content:'\E4AD'; } 230 | .entypo.down-bold:before{ content:'\E4B0'; } 231 | .entypo.up-bold:before{ content:'\E4AF'; } 232 | .entypo.right-bold:before{ content:'\E4AE'; } 233 | .entypo.left:before{ content:'\2B05'; } 234 | .entypo.down:before{ content:'\2B07'; } 235 | .entypo.up:before{ content:'\2B06'; } 236 | .entypo.right:before{ content:'\27A1'; } 237 | .entypo.circled-left:before{ content:'\E759'; } 238 | .entypo.circled-down:before{ content:'\E758'; } 239 | .entypo.circled-up:before{ content:'\E75B'; } 240 | .entypo.circled-right:before{ content:'\E75A'; } 241 | .entypo.triangle-left:before{ content:'\25C2'; } 242 | .entypo.triangle-down:before{ content:'\25BE'; } 243 | .entypo.triangle-up:before{ content:'\25B4'; } 244 | .entypo.triangle-right:before{ content:'\25B8'; } 245 | .entypo.chevron-left:before{ content:'\E75D'; } 246 | .entypo.chevron-down:before{ content:'\E75C'; } 247 | .entypo.chevron-up:before{ content:'\E75F'; } 248 | .entypo.chevron-right:before{ content:'\E75E'; } 249 | .entypo.chevron-small-left:before{ content:'\E761'; } 250 | .entypo.chevron-small-down:before{ content:'\E760'; } 251 | .entypo.chevron-small-up:before{ content:'\E763'; } 252 | .entypo.chevron-small-right:before{ content:'\E762'; } 253 | .entypo.chevron-thin-left:before{ content:'\E765'; } 254 | .entypo.chevron-thin-down:before{ content:'\E764'; } 255 | .entypo.chevron-thin-up:before{ content:'\E767'; } 256 | .entypo.chevron-thin-right:before{ content:'\E766'; } 257 | .entypo.left-thin:before{ content:'\2190'; } 258 | .entypo.down-thin:before{ content:'\2193'; } 259 | .entypo.up-thin:before{ content:'\2191'; } 260 | .entypo.right-thin:before{ content:'\2192'; } 261 | .entypo.arrow-combo:before{ content:'\E74F'; } 262 | .entypo.three-dots:before{ content:'\23F6'; } 263 | .entypo.two-dots:before{ content:'\23F5'; } 264 | .entypo.dot:before{ content:'\23F4'; } 265 | .entypo.cc:before{ content:'\1F545'; } 266 | .entypo.cc-by:before{ content:'\1F546'; } 267 | .entypo.cc-nc:before{ content:'\1F547'; } 268 | .entypo.cc-nc-eu:before{ content:'\1F548'; } 269 | .entypo.cc-nc-jp:before{ content:'\1F549'; } 270 | .entypo.cc-sa:before{ content:'\1F54A'; } 271 | .entypo.cc-nd:before{ content:'\1F54B'; } 272 | .entypo.cc-pd:before{ content:'\1F54C'; } 273 | .entypo.cc-zero:before{ content:'\1F54D'; } 274 | .entypo.cc-share:before{ content:'\1F54E'; } 275 | .entypo.cc-remix:before{ content:'\1F54F'; } 276 | .entypo.db-logo:before{ content:'\1F5F9'; } 277 | .entypo.db-shape:before{ content:'\1F5FA'; } 278 | 279 | .entypo-social.github:before{ content:'\F300'; } 280 | .entypo-social.c-github:before{ content:'\F301'; } 281 | .entypo-social.flickr:before{ content:'\F303'; } 282 | .entypo-social.c-flickr:before{ content:'\F304'; } 283 | .entypo-social.vimeo:before{ content:'\F306'; } 284 | .entypo-social.c-vimeo:before{ content:'\F307'; } 285 | .entypo-social.twitter:before{ content:'\F309'; } 286 | .entypo-social.c-twitter:before{ content:'\F30A'; } 287 | .entypo-social.facebook:before{ content:'\F30C'; } 288 | .entypo-social.c-facebook:before{ content:'\F30D'; } 289 | .entypo-social.s-facebook:before{ content:'\F30E'; } 290 | .entypo-social.google+:before{ content:'\F30F'; } 291 | .entypo-social.c-google+:before{ content:'\F310'; } 292 | .entypo-social.pinterest:before{ content:'\F312'; } 293 | .entypo-social.c-pinterest:before{ content:'\F313'; } 294 | .entypo-social.tumblr:before{ content:'\F315'; } 295 | .entypo-social.c-tumblr:before{ content:'\F316'; } 296 | .entypo-social.linkedin:before{ content:'\F318'; } 297 | .entypo-social.c-linkedin:before{ content:'\F319'; } 298 | .entypo-social.dribbble:before{ content:'\F31B'; } 299 | .entypo-social.c-dribbble:before{ content:'\F31C'; } 300 | .entypo-social.stumbleupon:before{ content:'\F31E'; } 301 | .entypo-social.c-stumbleupon:before{ content:'\F31F'; } 302 | .entypo-social.lastfm:before{ content:'\F321'; } 303 | .entypo-social.c-lastfm:before{ content:'\F322'; } 304 | .entypo-social.rdio:before{ content:'\F324'; } 305 | .entypo-social.c-rdio:before{ content:'\F325'; } 306 | .entypo-social.spotify:before{ content:'\F327'; } 307 | .entypo-social.c-spotify:before{ content:'\F328'; } 308 | .entypo-social.qq:before{ content:'\F32A'; } 309 | .entypo-social.instagram:before{ content:'\F32D'; } 310 | .entypo-social.dropbox:before{ content:'\F330'; } 311 | .entypo-social.evernote:before{ content:'\F333'; } 312 | .entypo-social.flattr:before{ content:'\F336'; } 313 | .entypo-social.skype:before{ content:'\F339'; } 314 | .entypo-social.c-skype:before{ content:'\F33A'; } 315 | .entypo-social.renren:before{ content:'\F33C'; } 316 | .entypo-social.sina-weibo:before{ content:'\F33F'; } 317 | .entypo-social.paypal:before{ content:'\F342'; } 318 | .entypo-social.picasa:before{ content:'\F345'; } 319 | .entypo-social.soundcloud:before{ content:'\F348'; } 320 | .entypo-social.mixi:before{ content:'\F34B'; } 321 | .entypo-social.behance:before{ content:'\F34E'; } 322 | .entypo-social.google-circles:before{ content:'\F351'; } 323 | .entypo-social.vk:before{ content:'\F354'; } 324 | .entypo-social.smashing:before{ content:'\F357'; } -------------------------------------------------------------------------------- /resources/css/github.css.old.css: -------------------------------------------------------------------------------- 1 | code .hll { background-color: #ffffcc } 2 | code .c { color: #999988; font-style: italic } /* Comment */ 3 | code .err { color: #a61717; background-color: #e3d2d2 } /* Error */ 4 | code .k { color: #000000; font-weight: bold } /* Keyword */ 5 | code .o { color: #000000; font-weight: bold } /* Operator */ 6 | code .cm { color: #999988; font-style: italic } /* Comment.Multiline */ 7 | code .cp { color: #999999; font-weight: bold; font-style: italic } /* Comment.Preproc */ 8 | code .c1 { color: #999988; font-style: italic } /* Comment.Single */ 9 | code .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */ 10 | code .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ 11 | code .ge { color: #000000; font-style: italic } /* Generic.Emph */ 12 | code .gr { color: #aa0000 } /* Generic.Error */ 13 | code .gh { color: #999999 } /* Generic.Heading */ 14 | code .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ 15 | code .go { color: #888888 } /* Generic.Output */ 16 | code .gp { color: #555555 } /* Generic.Prompt */ 17 | code .gs { font-weight: bold } /* Generic.Strong */ 18 | code .gu { color: #aaaaaa } /* Generic.Subheading */ 19 | code .gt { color: #aa0000 } /* Generic.Traceback */ 20 | code .kc { color: #000000; font-weight: bold } /* Keyword.Constant */ 21 | code .kd { color: #000000; font-weight: bold } /* Keyword.Declaration */ 22 | code .kn { color: #000000; font-weight: bold } /* Keyword.Namespace */ 23 | code .kp { color: #000000; font-weight: bold } /* Keyword.Pseudo */ 24 | code .kr { color: #000000; font-weight: bold } /* Keyword.Reserved */ 25 | code .kt { color: #445588; font-weight: bold } /* Keyword.Type */ 26 | code .m { color: #009999 } /* Literal.Number */ 27 | code .s { color: #d01040 } /* Literal.String */ 28 | code .na { color: #008080 } /* Name.Attribute */ 29 | code .nb { color: #0086B3 } /* Name.Builtin */ 30 | code .nc { color: #445588; font-weight: bold } /* Name.Class */ 31 | code .no { color: #008080 } /* Name.Constant */ 32 | code .nd { color: #3c5d5d; font-weight: bold } /* Name.Decorator */ 33 | code .ni { color: #800080 } /* Name.Entity */ 34 | code .ne { color: #990000; font-weight: bold } /* Name.Exception */ 35 | code .nf { color: #990000; font-weight: bold } /* Name.Function */ 36 | code .nl { color: #990000; font-weight: bold } /* Name.Label */ 37 | code .nn { color: #555555 } /* Name.Namespace */ 38 | code .nt { color: #000080 } /* Name.Tag */ 39 | code .nv { color: #008080 } /* Name.Variable */ 40 | code .ow { color: #000000; font-weight: bold } /* Operator.Word */ 41 | code .w { color: #bbbbbb } /* Text.Whitespace */ 42 | code .mf { color: #009999 } /* Literal.Number.Float */ 43 | code .mh { color: #009999 } /* Literal.Number.Hex */ 44 | code .mi { color: #009999 } /* Literal.Number.Integer */ 45 | code .mo { color: #009999 } /* Literal.Number.Oct */ 46 | code .sb { color: #d01040 } /* Literal.String.Backtick */ 47 | code .sc { color: #d01040 } /* Literal.String.Char */ 48 | code .sd { color: #d01040 } /* Literal.String.Doc */ 49 | code .s2 { color: #d01040 } /* Literal.String.Double */ 50 | code .se { color: #d01040 } /* Literal.String.Escape */ 51 | code .sh { color: #d01040 } /* Literal.String.Heredoc */ 52 | code .si { color: #d01040 } /* Literal.String.Interpol */ 53 | code .sx { color: #d01040 } /* Literal.String.Other */ 54 | code .sr { color: #009926 } /* Literal.String.Regex */ 55 | code .s1 { color: #d01040 } /* Literal.String.Single */ 56 | code .ss { color: #990073 } /* Literal.String.Symbol */ 57 | code .bp { color: #999999 } /* Name.Builtin.Pseudo */ 58 | code .vc { color: #008080 } /* Name.Variable.Class */ 59 | code .vg { color: #008080 } /* Name.Variable.Global */ 60 | code .vi { color: #008080 } /* Name.Variable.Instance */ 61 | code .il { color: #009999 } /* Literal.Number.Integer.Long */ -------------------------------------------------------------------------------- /resources/css/latex.css: -------------------------------------------------------------------------------- 1 | .latex-sub, .latex-sup { text-transform: uppercase; 2 | font-size: smaller; 3 | position: relative; } 4 | 5 | .latex-sub { top: 0.2rem; 6 | margin-left: -0.1667rem; 7 | margin-right: -0.125rem; } 8 | 9 | .latex-sup { top: -0.2rem; 10 | margin-left: -0.36rem; 11 | margin-right: -0.15rem; 12 | text-shadow: none; } 13 | 14 | .latex::selection, .latex span:not(.latex-sup)::selection { text-shadow: 0.03em 0 #b4d5fe, -0.03em 0 #b4d5fe, 0 0.03em #b4d5fe, 0 -0.03em #b4d5fe, 0.06em 0 #b4d5fe, -0.06em 0 #b4d5fe, 0.09em 0 #b4d5fe, -0.09em 0 #b4d5fe, 0.12em 0 #b4d5fe, -0.12em 0 #b4d5fe, 0.15em 0 #b4d5fe, -0.15em 0 #b4d5fe; 15 | background: #b4d5fe; } 16 | 17 | .latex::-moz-selection, .latex span:not(.latex-sup)::-moz-selection { text-shadow: 0.03em 0 #b4d5fe, -0.03em 0 #b4d5fe, 0 0.03em #b4d5fe, 0 -0.03em #b4d5fe, 0.06em 0 #b4d5fe, -0.06em 0 #b4d5fe, 0.09em 0 #b4d5fe, -0.09em 0 #b4d5fe, 0.12em 0 #b4d5fe, -0.12em 0 #b4d5fe, 0.15em 0 #b4d5fe, -0.15em 0 #b4d5fe; 18 | background: #b4d5fe; } 19 | -------------------------------------------------------------------------------- /resources/css/prettify.css: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | @font-face { 5 | font-family: 'Consolas'; 6 | src: url('{{ site.baseurl }}/resources/glyphs/Consolas.eot?#iefix') format('embedded-opentype'), url('{{ site.baseurl }}/resources/glyphs/Consolas.woff') format('woff'), url('{{ site.baseurl }}/resources/glyphs/Consolas.ttf') format('truetype'), url('{{ site.baseurl }}/resources/glyphs/Consolas.svg#Consolas') format('svg'); 7 | font-weight: normal; 8 | font-style: normal; 9 | } 10 | 11 | @font-face { 12 | font-family: 'Consolas-Italic'; 13 | src: url('{{ site.baseurl }}/resources/glyphs/Consolas-Italic.eot?#iefix') format('embedded-opentype'), url('{{ site.baseurl }}/resources/glyphs/Consolas-Italic.woff') format('woff'), url('{{ site.baseurl }}/resources/glyphs/Consolas-Italic.ttf') format('truetype'), url('{{ site.baseurl }}/resources/glyphs/Consolas-Italic.svg#Consolas-Italic') format('svg'); 14 | font-weight: normal; 15 | font-style: normal; 16 | } 17 | 18 | @font-face { 19 | font-family: 'Consolas-Bold'; 20 | src: url('{{ site.baseurl }}/resources/glyphs/Consolas-Bold.eot?#iefix') format('embedded-opentype'), url('{{ site.baseurl }}/resources/glyphs/Consolas-Bold.woff') format('woff'), url('{{ site.baseurl }}/resources/glyphs/Consolas-Bold.ttf') format('truetype'), url('{{ site.baseurl }}/resources/glyphs/Consolas-Bold.svg#Consolas-Bold') format('svg'); 21 | font-weight: bold; 22 | font-style: normal; 23 | } 24 | 25 | 26 | 27 | .com { color: #93a1a1; font-family: 'Consolas-Italic', monospace; } 28 | .lit { color: #195f91; font-family: 'Consolas', monospace;} 29 | .pun, .opn, .clo { color: #93a1a1; font-family: 'Consolas', monospace; } 30 | .fun { color: #dc322f; font-family: 'Consolas', monospace; } 31 | .str, .atv { color: #268bd2; font-family: 'Consolas', monospace; } 32 | .kwd, .tag { color: #195f91; font-family: 'Consolas-Bold', monospace; } 33 | .typ, .atn, .dec, .var { color: #CB4B16; font-family: 'Consolas', monospace; } 34 | .pln { color: 888;/*color: #93a1a1;*/ font-family: 'Consolas', monospace; } 35 | pre.prettyprint { 36 | background: #fefbf3; 37 | padding: 9px; 38 | border: 1px solid rgba(0,0,0,.2); 39 | -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.1); 40 | -moz-box-shadow: 0 1px 2px rgba(0,0,0,.1); 41 | box-shadow: 0 1px 2px rgba(0,0,0,.1); 42 | overflow-x: scroll; 43 | } 44 | 45 | /* Specify class=linenums on a pre to get line numbering */ 46 | ol.linenums { margin: 0 0 0 40px; } /* IE indents via margin-left */ 47 | ol.linenums li { color: rgba(0,0,0,.15); line-height: 20px; } 48 | /* Alternate shading for lines */ 49 | li.L1, li.L3, li.L5, li.L7, li.L9 { } 50 | 51 | /* 52 | $base03: #002b36; 53 | $base02: #073642; 54 | $base01: #586e75; 55 | $base00: #657b83; 56 | $base0: #839496; 57 | $base1: #93a1a1; 58 | $base2: #eee8d5; 59 | $base3: #fdf6e3; 60 | $yellow: #b58900; 61 | $orange: #cb4b16; 62 | $red: #dc322f; 63 | $magenta: #d33682; 64 | $violet: #6c71c4; 65 | $blue: #268bd2; 66 | $cyan: #2aa198; 67 | $green: #859900; 68 | */ 69 | 70 | /*.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{*//*padding:2px;border:1px solid #888*//*}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}*/ -------------------------------------------------------------------------------- /resources/css/tufte.css: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | /* Import ET Book styles 5 | adapted from https://github.com/edwardtufte/et-book/blob/gh-pages/et-book.css */ 6 | 7 | @charset "UTF-8"; 8 | 9 | @font-face { font-family: "et-book"; 10 | src: url("{{ site.baseurl }}/resources/glyphs/et-book/et-book-roman-line-figures/et-book-roman-line-figures.eot"); 11 | src: url("{{ site.baseurl }}/resources/glyphs/et-book/et-book-roman-line-figures/et-book-roman-line-figures.eot?#iefix") format("embedded-opentype"), url("{{ site.baseurl }}/resources/glyphs/et-book/et-book-roman-line-figures/et-book-roman-line-figures.woff") format("woff"), url("{{ site.baseurl }}/resources/glyphs/et-book/et-book-roman-line-figures/et-book-roman-line-figures.ttf") format("truetype"), url("{{ site.baseurl }}/resources/glyphs/et-book/et-book-roman-line-figures/et-book-roman-line-figures.svg#etbookromanosf") format("svg"); 12 | font-weight: normal; 13 | font-style: normal; } 14 | 15 | @font-face { font-family: "et-book"; 16 | src: url("{{ site.baseurl }}/resources/glyphs/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.eot"); 17 | src: url("{{ site.baseurl }}/resources/glyphs/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.eot?#iefix") format("embedded-opentype"), url("{{ site.baseurl }}/resources/glyphs/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.woff") format("woff"), url("{{ site.baseurl }}/resources/glyphs/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.ttf") format("truetype"), url("{{ site.baseurl }}/resources/glyphs/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.svg#etbookromanosf") format("svg"); 18 | font-weight: normal; 19 | font-style: italic; } 20 | 21 | @font-face { font-family: "et-book"; 22 | src: url("{{ site.baseurl }}/resources/glyphs/et-book/et-book-bold-line-figures/et-book-bold-line-figures.eot"); 23 | src: url("{{ site.baseurl }}/resources/glyphs/et-book/et-book-bold-line-figures/et-book-bold-line-figures.eot?#iefix") format("embedded-opentype"), url("{{ site.baseurl }}/resources/glyphs/et-book/et-book-bold-line-figures/et-book-bold-line-figures.woff") format("woff"), url("{{ site.baseurl }}/resources/glyphs/et-book/et-book-bold-line-figures/et-book-bold-line-figures.ttf") format("truetype"), url("{{ site.baseurl }}/resources/glyphs/et-book/et-book-bold-line-figures/et-book-bold-line-figures.svg#etbookromanosf") format("svg"); 24 | font-weight: bold; 25 | font-style: normal; } 26 | 27 | @font-face { font-family: "et-book-roman-old-style"; 28 | src: url("{{ site.baseurl }}/resources/glyphs/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.eot"); 29 | src: url("{{ site.baseurl }}/resources/glyphs/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.eot?#iefix") format("embedded-opentype"), url("{{ site.baseurl }}/resources/glyphs/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.woff") format("woff"), url("{{ site.baseurl }}/resources/glyphs/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.ttf") format("truetype"), url("{{ site.baseurl }}/resources/glyphs/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.svg#etbookromanosf") format("svg"); 30 | font-weight: normal; 31 | font-style: normal; } 32 | 33 | /* Tufte CSS styles */ 34 | html { font-size: 15px; } 35 | 36 | .body-wrap { width: 87.5%; 37 | padding-left: 12.5%; 38 | margin-left: auto; 39 | margin-right: auto; 40 | font-family: et-book, Palatino, "Palatino Linotype", "Palatino LT STD", "Book Antiqua", Georgia, serif; 41 | /*background-color: #fffff8;*/ 42 | background-color: #ffffff; 43 | color: #111; 44 | max-width: 1400px; 45 | counter-reset: sidenote-counter; } 46 | 47 | .logo-wrap { position: relative; 48 | width: 87.5%; 49 | padding-left: 12.5%; 50 | margin-left: auto; 51 | margin-right: auto; 52 | font-family: et-book, Palatino, "Palatino Linotype", "Palatino LT STD", "Book Antiqua", Georgia, serif; 53 | color: #111; 54 | max-width: 1400px; 55 | counter-reset: sidenote-counter; } 56 | 57 | h1 { font-weight: 400; 58 | margin-top: 4rem; 59 | margin-bottom: 1.5rem; 60 | font-size: 3.2rem; 61 | line-height: 1; } 62 | 63 | h2 { font-style: italic; 64 | font-weight: 400; 65 | margin-top: 3rem; 66 | margin-bottom: 0; 67 | font-size: 2.7rem; 68 | line-height: 1; } 69 | 70 | h3 { font-style: italic; 71 | font-weight: 400; 72 | font-size: 2.2rem; 73 | margin-top: 2rem; 74 | margin-bottom: 0; 75 | line-height: 1; } 76 | 77 | p.subtitle { font-style: italic; 78 | margin-top: 1rem; 79 | margin-bottom: 1rem; 80 | font-size: 1.8rem; 81 | display: block; 82 | line-height: 1; } 83 | 84 | .numeral { font-family: et-book-roman-old-style; } 85 | 86 | .danger { color: red; } 87 | 88 | article { position: relative; 89 | padding: 5rem 0rem; } 90 | 91 | section { padding-top: 1rem; 92 | padding-bottom: 1rem; } 93 | 94 | p, ol, ul { font-size: 1.4rem; } 95 | 96 | p { line-height: 2rem; 97 | margin-top: 1.4rem; 98 | margin-bottom: 1.4rem; 99 | padding-right: 0; 100 | vertical-align: baseline; } 101 | 102 | /* Chapter Epigraphs */ 103 | div.epigraph { margin: 5em 0; } 104 | 105 | div.epigraph > blockquote { margin-top: 3em; 106 | margin-bottom: 3em; } 107 | 108 | div.epigraph > blockquote, div.epigraph > blockquote > p { font-style: italic; } 109 | 110 | div.epigraph > blockquote > footer { font-style: normal; } 111 | 112 | div.epigraph > blockquote > footer > cite { font-style: italic; } 113 | /* end chapter epigraphs styles */ 114 | 115 | blockquote { font-size: 1.4rem; } 116 | 117 | blockquote p { width: 55%; 118 | margin-right: 40px; } 119 | 120 | blockquote footer { width: 55%; 121 | font-size: 1.1rem; 122 | text-align: right; } 123 | 124 | section>ol, section>ul { width: 45%; 125 | -webkit-padding-start: 5%; 126 | -webkit-padding-end: 5%; } 127 | 128 | li { padding: 0.5rem 0; } 129 | 130 | figure { padding: 0; 131 | border: 0; 132 | font-size: 100%; 133 | font: inherit; 134 | vertical-align: baseline; 135 | max-width: 55%; 136 | -webkit-margin-start: 0; 137 | -webkit-margin-end: 0; 138 | margin: 0 0 3em 0; } 139 | 140 | figcaption { float: right; 141 | clear: right; 142 | margin-right: -48%; 143 | margin-top: 0; 144 | margin-bottom: 0; 145 | font-size: 1.1rem; 146 | line-height: 1.6; 147 | vertical-align: baseline; 148 | position: relative; 149 | max-width: 40%; } 150 | 151 | figure.fullwidth figcaption { margin-right: 24%; } 152 | 153 | /* Links: replicate underline that clears descenders */ 154 | a:link, a:visited { color: inherit; } 155 | 156 | a:link { text-decoration: none; 157 | background: -webkit-linear-gradient(#fffff8, #fffff8), -webkit-linear-gradient(#fffff8, #fffff8), -webkit-linear-gradient(#333, #333); 158 | background: linear-gradient(#fffff8, #fffff8), linear-gradient(#fffff8, #fffff8), linear-gradient(#333, #333); 159 | -webkit-background-size: 0.05em 1px, 0.05em 1px, 1px 1px; 160 | -moz-background-size: 0.05em 1px, 0.05em 1px, 1px 1px; 161 | background-size: 0.05em 1px, 0.05em 1px, 1px 1px; 162 | background-repeat: no-repeat, no-repeat, repeat-x; 163 | text-shadow: 0.03em 0 #fffff8, -0.03em 0 #fffff8, 0 0.03em #fffff8, 0 -0.03em #fffff8, 0.06em 0 #fffff8, -0.06em 0 #fffff8, 0.09em 0 #fffff8, -0.09em 0 #fffff8, 0.12em 0 #fffff8, -0.12em 0 #fffff8, 0.15em 0 #fffff8, -0.15em 0 #fffff8; 164 | background-position: 0% 93%, 100% 93%, 0% 93%; } 165 | 166 | @media screen and (-webkit-min-device-pixel-ratio: 0) { a:link { background-position-y: 87%, 87%, 87%; } } 167 | 168 | a:link::selection { text-shadow: 0.03em 0 #b4d5fe, -0.03em 0 #b4d5fe, 0 0.03em #b4d5fe, 0 -0.03em #b4d5fe, 0.06em 0 #b4d5fe, -0.06em 0 #b4d5fe, 0.09em 0 #b4d5fe, -0.09em 0 #b4d5fe, 0.12em 0 #b4d5fe, -0.12em 0 #b4d5fe, 0.15em 0 #b4d5fe, -0.15em 0 #b4d5fe; 169 | background: #b4d5fe; } 170 | 171 | a:link::-moz-selection { text-shadow: 0.03em 0 #b4d5fe, -0.03em 0 #b4d5fe, 0 0.03em #b4d5fe, 0 -0.03em #b4d5fe, 0.06em 0 #b4d5fe, -0.06em 0 #b4d5fe, 0.09em 0 #b4d5fe, -0.09em 0 #b4d5fe, 0.12em 0 #b4d5fe, -0.12em 0 #b4d5fe, 0.15em 0 #b4d5fe, -0.15em 0 #b4d5fe; 172 | background: #b4d5fe; } 173 | 174 | /* Sidenotes, margin notes, figures, captions */ 175 | img { max-width: 100%; } 176 | 177 | .sidenote, .marginnote { float: right; 178 | clear: right; 179 | margin-right: -60%; 180 | width: 50%; 181 | margin-top: 0; 182 | margin-bottom: 0; 183 | font-size: 1.1rem; 184 | line-height: 1.3; 185 | vertical-align: baseline; 186 | position: relative; } 187 | 188 | .sidenote-number { counter-increment: sidenote-counter; } 189 | 190 | .sidenote-number:after, .sidenote:before { content: counter(sidenote-counter) " "; 191 | font-family: et-book-roman-old-style; 192 | position: relative; 193 | vertical-align: baseline; } 194 | 195 | .sidenote-number:after { content: counter(sidenote-counter); 196 | font-size: 1rem; 197 | top: -0.5rem; 198 | left: 0.1rem; } 199 | 200 | .sidenote:before { content: counter(sidenote-counter) " "; 201 | top: -0.5rem; } 202 | 203 | blockquote .sidenote, blockquote .marginnote { margin-right: -82%; 204 | min-width: 59%; 205 | text-align: left; } 206 | 207 | p, footer, table { width: 55%; } 208 | 209 | div.fullwidth, table.fullwidth { width: 100%; } 210 | 211 | div.table-wrapper { overflow-x: auto; 212 | font-family: "Trebuchet MS", "Gill Sans", "Gill Sans MT", sans-serif; } 213 | 214 | .sans { font-family: "Gill Sans", "Gill Sans MT", Calibri, sans-serif; 215 | letter-spacing: .03em; } 216 | 217 | code { font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; 218 | font-size: 1.0rem; 219 | line-height: 1.42; } 220 | 221 | .sans > code { font-size: 1.2rem; } 222 | 223 | h1 > code, h2 > code, h3 > code { font-size: 0.80em; } 224 | 225 | .marginnote > code, .sidenote > code { font-size: 1rem; } 226 | 227 | pre.code { font-size: 0.9rem; 228 | width: 52.5%; 229 | margin-left: 2.5%; 230 | overflow-x: auto; } 231 | 232 | pre.code.fullwidth { width: 90%; } 233 | 234 | .fullwidth { max-width: 90%; 235 | clear:both; } 236 | 237 | span.newthought { font-variant: small-caps; 238 | font-size: 1.2em; } 239 | 240 | input.margin-toggle { display: none; } 241 | 242 | label.sidenote-number { display: inline; } 243 | 244 | label.margin-toggle:not(.sidenote-number) { display: none; } 245 | 246 | @media (max-width: 760px) { .body-wrap { width: 84%; 247 | padding-left: 8%; 248 | padding-right: 8%; } 249 | .logo-wrap { width: 84%; 250 | padding-left: 8%; 251 | padding-right: 8%; } 252 | p, footer, .bibliography { width: 100%; } 253 | pre.code { width: 97%; } 254 | ul { width: 85%; } 255 | figure { max-width: 90%; } 256 | figcaption, figure.fullwidth figcaption { margin-right: 0%; 257 | max-width: none; } 258 | blockquote { margin-left: 1.5em; 259 | margin-right: 0em; } 260 | blockquote p, blockquote footer { width: 100%; } 261 | label.margin-toggle:not(.sidenote-number) { display: inline; } 262 | .sidenote, .marginnote { display: none; } 263 | .margin-toggle:checked + .sidenote, 264 | .margin-toggle:checked + .marginnote { display: block; 265 | float: left; 266 | left: 1rem; 267 | clear: both; 268 | width: 95%; 269 | margin: 1rem 2.5%; 270 | vertical-align: baseline; 271 | position: relative; } 272 | label { cursor: pointer; } 273 | div.table-wrapper, table { width: 85%; } 274 | img { width: 100%; } } -------------------------------------------------------------------------------- /resources/glyphs/BS-Bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/BS-Bold.eot -------------------------------------------------------------------------------- /resources/glyphs/BS-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/BS-Bold.ttf -------------------------------------------------------------------------------- /resources/glyphs/BS-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/BS-Bold.woff -------------------------------------------------------------------------------- /resources/glyphs/BS-BoldItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/BS-BoldItalic.eot -------------------------------------------------------------------------------- /resources/glyphs/BS-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/BS-BoldItalic.ttf -------------------------------------------------------------------------------- /resources/glyphs/BS-BoldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/BS-BoldItalic.woff -------------------------------------------------------------------------------- /resources/glyphs/BS-Regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/BS-Regular.eot -------------------------------------------------------------------------------- /resources/glyphs/BS-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/BS-Regular.ttf -------------------------------------------------------------------------------- /resources/glyphs/BS-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/BS-Regular.woff -------------------------------------------------------------------------------- /resources/glyphs/BS-RegularItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/BS-RegularItalic.eot -------------------------------------------------------------------------------- /resources/glyphs/BS-RegularItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/BS-RegularItalic.ttf -------------------------------------------------------------------------------- /resources/glyphs/BS-RegularItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/BS-RegularItalic.woff -------------------------------------------------------------------------------- /resources/glyphs/Consolas-Bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/Consolas-Bold.eot -------------------------------------------------------------------------------- /resources/glyphs/Consolas-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/Consolas-Bold.ttf -------------------------------------------------------------------------------- /resources/glyphs/Consolas-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/Consolas-Bold.woff -------------------------------------------------------------------------------- /resources/glyphs/Consolas-Italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/Consolas-Italic.eot -------------------------------------------------------------------------------- /resources/glyphs/Consolas-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/Consolas-Italic.ttf -------------------------------------------------------------------------------- /resources/glyphs/Consolas-Italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/Consolas-Italic.woff -------------------------------------------------------------------------------- /resources/glyphs/Consolas.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/Consolas.eot -------------------------------------------------------------------------------- /resources/glyphs/Consolas.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/Consolas.ttf -------------------------------------------------------------------------------- /resources/glyphs/Consolas.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/Consolas.woff -------------------------------------------------------------------------------- /resources/glyphs/SN-Book.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/SN-Book.eot -------------------------------------------------------------------------------- /resources/glyphs/SN-Book.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/SN-Book.ttf -------------------------------------------------------------------------------- /resources/glyphs/SN-Book.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/SN-Book.woff -------------------------------------------------------------------------------- /resources/glyphs/SN-BookItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/SN-BookItalic.eot -------------------------------------------------------------------------------- /resources/glyphs/SN-BookItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/SN-BookItalic.ttf -------------------------------------------------------------------------------- /resources/glyphs/SN-BookItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/SN-BookItalic.woff -------------------------------------------------------------------------------- /resources/glyphs/SN-Semibold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/SN-Semibold.eot -------------------------------------------------------------------------------- /resources/glyphs/SN-Semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/SN-Semibold.ttf -------------------------------------------------------------------------------- /resources/glyphs/SN-Semibold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/SN-Semibold.woff -------------------------------------------------------------------------------- /resources/glyphs/SN-SemiboldItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/SN-SemiboldItalic.eot -------------------------------------------------------------------------------- /resources/glyphs/SN-SemiboldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/SN-SemiboldItalic.ttf -------------------------------------------------------------------------------- /resources/glyphs/SN-SemiboldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/SN-SemiboldItalic.woff -------------------------------------------------------------------------------- /resources/glyphs/entypo-social.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/entypo-social.eot -------------------------------------------------------------------------------- /resources/glyphs/entypo-social.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/entypo-social.ttf -------------------------------------------------------------------------------- /resources/glyphs/entypo-social.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/entypo-social.woff -------------------------------------------------------------------------------- /resources/glyphs/entypo.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/entypo.eot -------------------------------------------------------------------------------- /resources/glyphs/entypo.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/entypo.ttf -------------------------------------------------------------------------------- /resources/glyphs/entypo.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/entypo.woff -------------------------------------------------------------------------------- /resources/glyphs/et-book/et-book-bold-line-figures/et-book-bold-line-figures.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/et-book/et-book-bold-line-figures/et-book-bold-line-figures.eot -------------------------------------------------------------------------------- /resources/glyphs/et-book/et-book-bold-line-figures/et-book-bold-line-figures.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/et-book/et-book-bold-line-figures/et-book-bold-line-figures.ttf -------------------------------------------------------------------------------- /resources/glyphs/et-book/et-book-bold-line-figures/et-book-bold-line-figures.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/et-book/et-book-bold-line-figures/et-book-bold-line-figures.woff -------------------------------------------------------------------------------- /resources/glyphs/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.eot -------------------------------------------------------------------------------- /resources/glyphs/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.ttf -------------------------------------------------------------------------------- /resources/glyphs/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.woff -------------------------------------------------------------------------------- /resources/glyphs/et-book/et-book-roman-line-figures/et-book-roman-line-figures.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/et-book/et-book-roman-line-figures/et-book-roman-line-figures.eot -------------------------------------------------------------------------------- /resources/glyphs/et-book/et-book-roman-line-figures/et-book-roman-line-figures.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/et-book/et-book-roman-line-figures/et-book-roman-line-figures.ttf -------------------------------------------------------------------------------- /resources/glyphs/et-book/et-book-roman-line-figures/et-book-roman-line-figures.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/et-book/et-book-roman-line-figures/et-book-roman-line-figures.woff -------------------------------------------------------------------------------- /resources/glyphs/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.eot -------------------------------------------------------------------------------- /resources/glyphs/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.ttf -------------------------------------------------------------------------------- /resources/glyphs/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.woff -------------------------------------------------------------------------------- /resources/glyphs/et-book/et-book-semi-bold-old-style-figures/et-book-semi-bold-old-style-figures.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/et-book/et-book-semi-bold-old-style-figures/et-book-semi-bold-old-style-figures.eot -------------------------------------------------------------------------------- /resources/glyphs/et-book/et-book-semi-bold-old-style-figures/et-book-semi-bold-old-style-figures.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/et-book/et-book-semi-bold-old-style-figures/et-book-semi-bold-old-style-figures.ttf -------------------------------------------------------------------------------- /resources/glyphs/et-book/et-book-semi-bold-old-style-figures/et-book-semi-bold-old-style-figures.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/et-book/et-book-semi-bold-old-style-figures/et-book-semi-bold-old-style-figures.woff -------------------------------------------------------------------------------- /resources/glyphs/icomoon.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/icomoon.eot -------------------------------------------------------------------------------- /resources/glyphs/icomoon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Generated by IcoMoon 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /resources/glyphs/icomoon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/icomoon.ttf -------------------------------------------------------------------------------- /resources/glyphs/icomoon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/glyphs/icomoon.woff -------------------------------------------------------------------------------- /resources/img/data-parallelism.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/img/data-parallelism.png -------------------------------------------------------------------------------- /resources/img/exports-imports.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/img/exports-imports.png -------------------------------------------------------------------------------- /resources/img/imagequilt-animal-sounds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/img/imagequilt-animal-sounds.png -------------------------------------------------------------------------------- /resources/img/imagequilt-chinese-calligraphy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/img/imagequilt-chinese-calligraphy.png -------------------------------------------------------------------------------- /resources/img/mapreduce-execution.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/img/mapreduce-execution.png -------------------------------------------------------------------------------- /resources/img/mscr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/img/mscr.png -------------------------------------------------------------------------------- /resources/img/napoleons-march.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/img/napoleons-march.png -------------------------------------------------------------------------------- /resources/img/rhino.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/img/rhino.png -------------------------------------------------------------------------------- /resources/img/rpc_chapter_1_asyncrpc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/img/rpc_chapter_1_asyncrpc.jpg -------------------------------------------------------------------------------- /resources/img/rpc_chapter_1_syncrpc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/img/rpc_chapter_1_syncrpc.jpg -------------------------------------------------------------------------------- /resources/img/rpc_chapter_1_ycog_10_steps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/img/rpc_chapter_1_ycog_10_steps.png -------------------------------------------------------------------------------- /resources/img/table-example-be-page-159.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heathermiller/dist-prog-book/5b8315f697ca3071a7abb9683229979d5974a89b/resources/img/table-example-be-page-159.png -------------------------------------------------------------------------------- /resources/js/main.js: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | $(document).ready(function() { 5 | styleCode(); 6 | 7 | $(function () { 8 | $('[data-toggle="tooltip"]').tooltip() 9 | }) 10 | 11 | // current page, links with active class 12 | $("[href]").each(function() { 13 | if (this.href == window.location.href) { 14 | $(this).addClass("active"); 15 | } 16 | }); 17 | 18 | $('#burger').click(function(){ 19 | $(this).toggleClass('open'); 20 | }); 21 | 22 | }); 23 | 24 | // speaker deck viewcounts 25 | // var futuresPromises = getSpeakerdeckStats("cv96bzz6", "futures-promises-views"); 26 | // var picklesSporesScaladays = getSpeakerdeckStats("5gabjggm", "pickles-spores-scaladays"); 27 | // var sporesStrangeloop = getSpeakerdeckStats("d350fdec", "spores-strangeloop"); 28 | // var instantPicklesOopsla = getSpeakerdeckStats("8qzwp7pc", "instant-pickles-oopsla"); 29 | // 30 | // function getSpeakerdeckStats(key, id) { 31 | // var url = "http://www.kimonolabs.com/api/" + key + "?apikey=6cd6688b9e11a1f5e1dd19d711e87b98"; 32 | // $.ajax({ 33 | // "url": url, 34 | // "crossDomain": true, 35 | // "dataType": "jsonp", 36 | // success: function(json) { 37 | // onSuccessfulResponse(json, id); 38 | // } 39 | // }); 40 | // }; 41 | // 42 | // function onSuccessfulResponse(json, id) { 43 | // var viewcount = json.results.collection1[0].viewcount; 44 | // // var starcount = json.results.collection1[0].starcount.text; 45 | // $("#"+id).text(viewcount); 46 | // }; 47 | 48 | function styleCode() { 49 | if (typeof disableStyleCode != "undefined") { return; } 50 | $("pre code").each(function() { 51 | if (!$(this).hasClass("prettyprint lang-{{ site.primarylanguage }}")) { 52 | $(this).addClass("prettyprint lang-{{ site.primarylanguage }}"); 53 | } 54 | }); 55 | } -------------------------------------------------------------------------------- /resources/js/vendor/lang-scala.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright (C) 2010 Google Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * @fileoverview 20 | * Registers a language handler for Scala. 21 | * 22 | * Derived from http://lampsvn.epfl.ch/svn-repos/scala/scala-documentation/trunk/src/reference/SyntaxSummary.tex 23 | * 24 | * @author mikesamuel@gmail.com 25 | */ 26 | 27 | PR['registerLangHandler']( 28 | PR['createSimpleLexer']( 29 | [ 30 | // Whitespace 31 | [PR['PR_PLAIN'], /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'], 32 | // A double or single quoted string 33 | // or a triple double-quoted multi-line string. 34 | [PR['PR_STRING'], 35 | /^(?:"(?:(?:""(?:""?(?!")|[^\\"]|\\.)*"{0,3})|(?:[^"\r\n\\]|\\.)*"?))/, 36 | null, '"'], 37 | [PR['PR_LITERAL'], /^`(?:[^\r\n\\`]|\\.)*`?/, null, '`'], 38 | [PR['PR_PUNCTUATION'], /^[!#%&()*+,\-:;<=>?@\[\\\]^{|}~]+/, null, 39 | '!#%&()*+,-:;<=>?@[\\]^{|}~'] 40 | ], 41 | [ 42 | // A symbol literal is a single quote followed by an identifier with no 43 | // single quote following 44 | // A character literal has single quotes on either side 45 | [PR['PR_STRING'], /^'(?:[^\r\n\\']|\\(?:'|[^\r\n']+))'/], 46 | [PR['PR_LITERAL'], /^'[a-zA-Z_$][\w$]*(?!['$\w])/], 47 | [PR['PR_KEYWORD'], /^(?:abstract|case|catch|class|def|do|else|extends|final|finally|for|forSome|if|implicit|import|lazy|match|new|object|override|package|private|protected|requires|return|sealed|super|throw|trait|try|type|val|var|while|with|yield)\b/], 48 | [PR['PR_LITERAL'], /^(?:true|false|null|this)\b/], 49 | [PR['PR_LITERAL'], /^(?:(?:0(?:[0-7]+|X[0-9A-F]+))L?|(?:(?:0|[1-9][0-9]*)(?:(?:\.[0-9]+)?(?:E[+\-]?[0-9]+)?F?|L?))|\\.[0-9]+(?:E[+\-]?[0-9]+)?F?)/i], 50 | // Treat upper camel case identifiers as types. 51 | [PR['PR_TYPE'], /^[$_]*[A-Z][_$A-Z0-9]*[a-z][\w$]*/], 52 | [PR['PR_PLAIN'], /^[$a-zA-Z_][\w$]*/], 53 | [PR['PR_COMMENT'], /^\/(?:\/.*|\*(?:\/|\**[^*/])*(?:\*+\/?)?)/], 54 | [PR['PR_PUNCTUATION'], /^(?:\.+|\/)/] 55 | ]), 56 | ['scala']); -------------------------------------------------------------------------------- /resources/js/vendor/retina.js: -------------------------------------------------------------------------------- 1 | // retina.js, a high-resolution image swapper (http://retinajs.com), v0.0.2 2 | 3 | (function(){function t(e){this.path=e;var t=this.path.split("."),n=t.slice(0,t.length-1).join("."),r=t[t.length-1];this.at_2x_path=n+"@2x."+r}function n(e){this.el=e,this.path=new t(this.el.getAttribute("src"));var n=this;this.path.check_2x_variant(function(e){e&&n.swap()})}var e=typeof exports=="undefined"?window:exports;e.RetinaImagePath=t,t.confirmed_paths=[],t.prototype.is_external=function(){return!!this.path.match(/^https?\:/i)&&!this.path.match("//"+document.domain)},t.prototype.check_2x_variant=function(e){var n,r=this;if(this.is_external())return e(!1);if(this.at_2x_path in t.confirmed_paths)return e(!0);n=new XMLHttpRequest,n.open("HEAD",this.at_2x_path),n.onreadystatechange=function(){return n.readyState!=4?e(!1):n.status>=200&&n.status<=399?(t.confirmed_paths.push(r.at_2x_path),e(!0)):e(!1)},n.send()},e.RetinaImage=n,n.prototype.swap=function(e){function n(){t.el.complete?(t.el.setAttribute("width",t.el.offsetWidth),t.el.setAttribute("height",t.el.offsetHeight),t.el.setAttribute("src",e)):setTimeout(n,5)}typeof e=="undefined"&&(e=this.path.at_2x_path);var t=this;n()},e.devicePixelRatio>1&&(window.onload=function(){var e=document.getElementsByTagName("img"),t=[],r,i;for(r=0;rt._tolerance?t.open():t.close()}t._moved=false};this.panel.addEventListener(f.end,this._onTouchEndFn);this._onTouchMoveFn=function(e){if(r||t._preventOpen||typeof e.touches==="undefined"){return}var n=e.touches[0].clientX-t._startOffsetX;var i=t._currentOffsetX=n;if(Math.abs(i)>t._padding){return}if(Math.abs(n)>20){t._opening=true;var o=n*t._orientation;if(t._opened&&o>0||!t._opened&&o<0){return}if(o<=0){i=n+t._padding*t._orientation;t._opening=false}if(!t._moved&&u.className.search("slideout-open")===-1){u.className+=" slideout-open"}t.panel.style[h+"transform"]=t.panel.style.transform="translateX("+i+"px)";t.emit("translate",i);t._moved=true}};this.panel.addEventListener(f.move,this._onTouchMoveFn);return this};d.prototype.enableTouch=function(){this._touch=true;return this};d.prototype.disableTouch=function(){this._touch=false;return this};d.prototype.destroy=function(){this.close();a.removeEventListener(f.move,this._preventMove);this.panel.removeEventListener(f.start,this._resetTouchFn);this.panel.removeEventListener("touchcancel",this._onTouchCancelFn);this.panel.removeEventListener(f.end,this._onTouchEndFn);this.panel.removeEventListener(f.move,this._onTouchMoveFn);a.removeEventListener("scroll",this._onScrollFn);this.open=this.close=function(){};return this};e.exports=d},{decouple:2,emitter:3}],2:[function(t,e,n){"use strict";var i=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}();function o(t,e,n){var o,s=false;function r(t){o=t;a()}function a(){if(!s){i(u);s=true}}function u(){n.call(t,o);s=false}t.addEventListener(e,r,false);return r}e.exports=o},{}],3:[function(t,e,n){"use strict";var i=function(t,e){if(!(t instanceof e)){throw new TypeError("Cannot call a class as a function")}};n.__esModule=true;var o=function(){function t(){i(this,t)}t.prototype.on=function e(t,n){this._eventCollection=this._eventCollection||{};this._eventCollection[t]=this._eventCollection[t]||[];this._eventCollection[t].push(n);return this};t.prototype.once=function n(t,e){var n=this;function i(){n.off(t,i);e.apply(this,arguments)}i.listener=e;this.on(t,i);return this};t.prototype.off=function o(t,e){var n=undefined;if(!this._eventCollection||!(n=this._eventCollection[t])){return this}n.forEach(function(t,i){if(t===e||t.listener===e){n.splice(i,1)}});if(n.length===0){delete this._eventCollection[t]}return this};t.prototype.emit=function s(t){var e=this;for(var n=arguments.length,i=Array(n>1?n-1:0),o=1;o