├── README.md ├── build.sh ├── build └── templater.js ├── class-preview ├── README.md ├── fonts │ ├── copse-regular-webfont.eot │ ├── copse-regular-webfont.svg │ ├── copse-regular-webfont.ttf │ ├── copse-regular-webfont.woff │ ├── quattrocentosans-bold-webfont.eot │ ├── quattrocentosans-bold-webfont.svg │ ├── quattrocentosans-bold-webfont.ttf │ ├── quattrocentosans-bold-webfont.woff │ ├── quattrocentosans-bolditalic-webfont.eot │ ├── quattrocentosans-bolditalic-webfont.svg │ ├── quattrocentosans-bolditalic-webfont.ttf │ ├── quattrocentosans-bolditalic-webfont.woff │ ├── quattrocentosans-italic-webfont.eot │ ├── quattrocentosans-italic-webfont.svg │ ├── quattrocentosans-italic-webfont.ttf │ ├── quattrocentosans-italic-webfont.woff │ ├── quattrocentosans-regular-webfont.eot │ ├── quattrocentosans-regular-webfont.svg │ ├── quattrocentosans-regular-webfont.ttf │ └── quattrocentosans-regular-webfont.woff ├── images │ ├── background.png │ ├── body-background.png │ ├── bullet.png │ ├── hr.gif │ └── octocat-logo.png ├── index.html ├── javascripts │ └── main.js ├── params.json └── stylesheets │ ├── github-dark.css │ ├── normalize.css │ └── styles.css ├── data ├── assignments.yml ├── lectures.yml ├── site-instructions.md └── this-week.yml ├── deploy.sh ├── favicon.ico ├── fonts ├── glyphicons-halflings-regular.woff └── glyphicons-halflings-regular.woff2 ├── images ├── barber-1x.jpg ├── barber-2x.jpg ├── barber-3x.jpg ├── barber-original.jpg ├── bishop-1x.jpg ├── bishop-2x.jpg ├── bishop-3x.jpg ├── bishop-original.jpg ├── boyd-1x.jpg ├── boyd-2x.jpg ├── boyd-original.jpg ├── geron-original.jpg ├── hastie-1x.png ├── hastie-2x.jpg ├── hastie-3x.jpg ├── hastie-original.jpg ├── james-1x.jpg ├── james-2x.jpg ├── james-3x.jpg ├── james-original.jpg ├── murphy-1x.jpg ├── murphy-2x.jpg ├── murphy-3x.jpg ├── murphy-original.jpg ├── people │ ├── DFL.jpg │ ├── ben.jpg │ ├── bonnie.jpg │ ├── brett.jpg │ ├── brian.jpg │ ├── daniel.jpg │ ├── david.jpg │ ├── elliott.jpg │ ├── kurt.jpg │ ├── lisa.jpg │ ├── mi.jpg │ ├── nan.jpg │ ├── sanyam.jpg │ ├── utku.jpg │ ├── vitaly.jpg │ └── zemin.jpg ├── provost-fawcett-original.jpg └── shalev-shwartz-original.jpg ├── index.hbs ├── package-lock.json ├── package.json ├── params.json ├── scripts └── navigation.js ├── styles ├── colors.css ├── colors.styl ├── phone.css ├── phone.styl ├── style.css ├── style.styl ├── tablet-and-phone.css └── tablet-and-phone.styl └── templates ├── _assignment-details.hbs ├── assignments.hbs ├── lectures.hbs └── this-week.hbs /README.md: -------------------------------------------------------------------------------- 1 | # DS-GA 1003 Website 2 | 3 | ## Editing, rebuilding, and deploying this page 4 | 5 | ### Building locally: quickstart 6 | 7 | Be sure to have [Node.js](https://iojs.org/) 7.x+ installed. 8 | 9 | Run `npm install` in the project root. This will install some build tools we use. 10 | 11 | Run `npm run build-in-place` to do the templating and stylesheet compilation in-place. You can then view the site by simply opening `index.html`. 12 | 13 | Run `./build.sh` to do a local build into the `out/` directory. You can then preview the site at `out/index.html`. This should usually be the same as just `index.html`, but it is good to check before committing, since this "local deploy" process is slightly more complicated than the in-place build process. 14 | 15 | ### How to edit content 16 | The file index.hbs is usually what you should edit, basically as though you were editing an HTML file. The final HTML is generated with some JavaScript processing that pulls in data from the YAML files in the data directory -- basically the information in the lectures and assignments tables. 17 | 18 | ### Deployment 19 | Run the script `./deploy.sh` from the root directory of the project to build and deploy the page to GitHub. The script does the following: 1) Pulls down the gh-pages branch into a folder called "out" in the project root directory. (GitHub serves webpages from gh-pages branches.) Then it runs `npm run build` which compiles the page and puts the output into out. Then the revised out folder is committed and pushed back to the gh-pages branch, ready to be served. 20 | 21 | ### Technologies used 22 | 23 | [Stylus](https://learnboost.github.io/stylus/) is used for styling. 24 | 25 | [Handlebars](http://handlebarsjs.com/) is used for templating. `index.hbs` is minimally templated, mostly delegating to the partials in `templates/`. Those pull their data from `data/`. The logic that ties them all together is in `build/templater.js`. 26 | 27 | The site is intended to be responsive, which we accomplish with per-device stylesheets and media queries in the HTML. 28 | 29 | ### Things to Keep in Mind 30 | 31 | While editing you should be using an [EditorConfig](http://editorconfig.org/) plugin for your text editor to enforce a few basic stylistic things. 32 | 33 | We are trying to maintain a reasonable HTML document outline (so, don't use `
` as if it were `
`). To preview the document outline, use the [HTML 5 Outliner tool](https://gsnedders.html5.org/outliner/). 34 | -------------------------------------------------------------------------------- /build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e # exit with nonzero exit code if anything fails 3 | 4 | ## TODO migrate to gulp probably 5 | 6 | # clear and re-create the out directory 7 | rm -f index.html 8 | rm -rf styles/*.css 9 | 10 | npm run build-in-place 11 | 12 | mkdir -p out/styles/ 13 | cp index.html favicon.ico out/ 14 | cp styles/*.css out/styles/ 15 | 16 | cp -r images fonts scripts out/ 17 | 18 | echo "" 19 | find out/ -print 20 | echo "" 21 | -------------------------------------------------------------------------------- /build/templater.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const path = require('path'); 3 | const yaml = require('js-yaml'); 4 | const fs = require('fs'); 5 | const handlebarsFactory = require('handlebars'); 6 | const moment = require('moment'); 7 | const assert = require('assert'); 8 | const toSlug = require('slugg'); 9 | 10 | const SLIDES = 'Slides'; 11 | const NOTES = 'Notes'; 12 | const REFERENCES = 'References'; 13 | 14 | const TEMPLATES_DIR = path.resolve(__dirname, '../templates'); 15 | 16 | doTemplating(process.argv[2], process.argv[3]); 17 | 18 | function doTemplating(input, output) { 19 | const handlebars = handlebarsFactory.create(); 20 | registerHelpers(handlebars); 21 | registerPartials(handlebars); 22 | 23 | const template = compileTemplate(handlebars, input); 24 | const documents = parseDocuments(); 25 | 26 | // Uncomment to see documents; useful while tweaking the templates 27 | // console.log(require("util").inspect(documents, { depth: Infinity })); 28 | 29 | fs.writeFileSync(output, template(documents)); 30 | } 31 | 32 | function compileTemplate(handlebars, input) { 33 | return handlebars.compile(fs.readFileSync(input, { encoding: 'utf-8' })); 34 | } 35 | 36 | function parseDocuments() { 37 | const lectures = yaml.safeLoad(fs.readFileSync(path.resolve(__dirname, '../data/lectures.yml'))); 38 | 39 | // Normalize the data 40 | for (const lecture of lectures) { 41 | for (const event of Object.values(lecture.Events)) { 42 | ensureArrayExists(event, SLIDES); 43 | ensureArrayExists(event, NOTES); 44 | ensureArrayExists(event, REFERENCES); 45 | } 46 | } 47 | 48 | let assignmentsFrontmatter, assignments; 49 | let i = 0; 50 | yaml.safeLoadAll(fs.readFileSync(path.resolve(__dirname, '../data/assignments.yml')), doc => { 51 | switch (i) { 52 | case 0: 53 | assignmentsFrontmatter = doc; 54 | break; 55 | case 1: 56 | assignments = doc; 57 | break; 58 | default: 59 | throw new Error('Cannot have more than two documents in assignments.yaml'); 60 | } 61 | ++i; 62 | }); 63 | 64 | for (const assignment of assignments) { 65 | if (!assignment.PDF && !assignment.ZIP) { 66 | assignment.noFiles = true; 67 | } 68 | } 69 | 70 | let thisWeek = yaml.safeLoad(fs.readFileSync(path.resolve(__dirname, '../data/this-week.yml'))); 71 | 72 | if (thisWeek === null) { 73 | thisWeek = { lecture: null }; 74 | } else { 75 | // Pull data from lectures and assignments into thisWeek: 76 | const thisWeekLecture = lectures.find(l => l.Title === thisWeek['Lecture/Lab']); 77 | const thisWeekAssignment = assignments.find(a => a.Label === thisWeek.Assignment); 78 | 79 | if (thisWeekLecture === undefined) { 80 | throw new Error(`Could not find entry in lectures.yml with Title "${thisWeek['Lecture/Lab']}" specified in ` + 81 | `this-week.yaml`); 82 | } 83 | if (thisWeekAssignment === undefined) { 84 | throw new Error(`Could not find entry in assignments.yml with Label "${thisWeek['Assignment']}" specified in ` + 85 | `this-week.yaml`); 86 | } 87 | 88 | thisWeek.lecture = thisWeekLecture; 89 | thisWeek.assignment = thisWeekAssignment; 90 | } 91 | 92 | return { lectures, thisWeek, assignmentsFrontmatter, assignments }; 93 | } 94 | 95 | function registerPartials(handlebars) { 96 | for (const filename of fs.readdirSync(TEMPLATES_DIR)) { 97 | const filePath = path.resolve(TEMPLATES_DIR, filename); 98 | const partialName = path.basename(filename, '.hbs'); 99 | const contents = fs.readFileSync(filePath, { encoding: 'utf-8' }); 100 | 101 | handlebars.registerPartial(partialName, contents); 102 | } 103 | } 104 | 105 | function registerHelpers(handlebars) { 106 | handlebars.registerHelper('date', d => moment.utc(new Date(d).toISOString()).format('MMMM Do')); 107 | handlebars.registerHelper('shortDate', d => moment.utc(new Date(d).toISOString()).format('MMM D')); 108 | handlebars.registerHelper('maybeLink', v => { 109 | if (typeof v === 'string') { 110 | return v; 111 | } 112 | 113 | assert (typeof v === 'object' && v !== null, 'Links must be either strings or objects'); 114 | 115 | const keys = Object.keys(v); 116 | assert(keys.length === 1, 'Link objects must have a single key'); 117 | const key = keys[0]; 118 | 119 | return new handlebars.SafeString('' + key + ''); 120 | }); 121 | handlebars.registerHelper('lectureSlug', l => 'lecture-' + toSlug(l.Title)); 122 | handlebars.registerHelper('assignmentSlug', l => 'assignment-' + toSlug(l.Label)); 123 | } 124 | 125 | function ensureArrayExists(obj, prop) { 126 | if (!(prop in obj)) { 127 | obj[prop] = []; 128 | } 129 | } 130 | 131 | function copyArrayInto(source, dest, keyName) { 132 | if (source && source[keyName]) { 133 | dest[keyName].push(...source[keyName]); 134 | } 135 | } 136 | -------------------------------------------------------------------------------- /class-preview/README.md: -------------------------------------------------------------------------------- 1 | # ml2018 2 | DSGA-1003: Machine Learning and Computational Statistics, Spring 2018 3 | -------------------------------------------------------------------------------- /class-preview/fonts/copse-regular-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/class-preview/fonts/copse-regular-webfont.eot -------------------------------------------------------------------------------- /class-preview/fonts/copse-regular-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/class-preview/fonts/copse-regular-webfont.ttf -------------------------------------------------------------------------------- /class-preview/fonts/copse-regular-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/class-preview/fonts/copse-regular-webfont.woff -------------------------------------------------------------------------------- /class-preview/fonts/quattrocentosans-bold-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/class-preview/fonts/quattrocentosans-bold-webfont.eot -------------------------------------------------------------------------------- /class-preview/fonts/quattrocentosans-bold-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/class-preview/fonts/quattrocentosans-bold-webfont.ttf -------------------------------------------------------------------------------- /class-preview/fonts/quattrocentosans-bold-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/class-preview/fonts/quattrocentosans-bold-webfont.woff -------------------------------------------------------------------------------- /class-preview/fonts/quattrocentosans-bolditalic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/class-preview/fonts/quattrocentosans-bolditalic-webfont.eot -------------------------------------------------------------------------------- /class-preview/fonts/quattrocentosans-bolditalic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/class-preview/fonts/quattrocentosans-bolditalic-webfont.ttf -------------------------------------------------------------------------------- /class-preview/fonts/quattrocentosans-bolditalic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/class-preview/fonts/quattrocentosans-bolditalic-webfont.woff -------------------------------------------------------------------------------- /class-preview/fonts/quattrocentosans-italic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/class-preview/fonts/quattrocentosans-italic-webfont.eot -------------------------------------------------------------------------------- /class-preview/fonts/quattrocentosans-italic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/class-preview/fonts/quattrocentosans-italic-webfont.ttf -------------------------------------------------------------------------------- /class-preview/fonts/quattrocentosans-italic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/class-preview/fonts/quattrocentosans-italic-webfont.woff -------------------------------------------------------------------------------- /class-preview/fonts/quattrocentosans-regular-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/class-preview/fonts/quattrocentosans-regular-webfont.eot -------------------------------------------------------------------------------- /class-preview/fonts/quattrocentosans-regular-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/class-preview/fonts/quattrocentosans-regular-webfont.ttf -------------------------------------------------------------------------------- /class-preview/fonts/quattrocentosans-regular-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/class-preview/fonts/quattrocentosans-regular-webfont.woff -------------------------------------------------------------------------------- /class-preview/images/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/class-preview/images/background.png -------------------------------------------------------------------------------- /class-preview/images/body-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/class-preview/images/body-background.png -------------------------------------------------------------------------------- /class-preview/images/bullet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/class-preview/images/bullet.png -------------------------------------------------------------------------------- /class-preview/images/hr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/class-preview/images/hr.gif -------------------------------------------------------------------------------- /class-preview/images/octocat-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/class-preview/images/octocat-logo.png -------------------------------------------------------------------------------- /class-preview/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | NYU Center for Data Science: DS-GA 1003 by davidrosenberg 7 | 8 | 9 | 10 | 11 | 14 | 15 | 16 | 17 | 18 | 19 |
20 |

NYU Center for Data Science: DS-GA 1003

21 |

Machine Learning and Computational Statistics (Spring 2018)

22 |
23 | 24 | 36 | 37 |
38 | 41 |
42 |

43 | Hello

44 | 45 |

I'm David 46 | Rosenberg, and I'll be the instructor for DS-GA 1003 / CSCI-GA 2567 in 47 | Spring 2018. This is a temporary page to give you some information before the 48 | course begins. This year's class will be similar to last 49 | year's class, though there will be some modifications in the selection of the more advanced topics.

50 | 51 |

52 | Course Registration

53 | 54 |
    55 |
  • 56 | CDS Grad Students: You should be able to register for DS-GA 1003 once registration opens. 57 |
58 |
    59 |
  • 60 | Computer Science Grad Students: You should be able to register for CSCI-GA 2567 (also this course) once registration opens. If assistance is needed, please contact Katie Laugel. 61 |
62 |
    63 |
  • 64 | Other PhD Students: Your adviser can request registration for this course for you, if it is relevant to your PhD research. Please send requests to Kathryn Angeles and David Rosenberg. We can then either register you for the course or add you to the waitlist if the course is full when registration opens on November 13. But please also consider the comments below about course preparation and requirements. I encourage you to go through the Prerequisite Questionnaire, just to make sure you have the preparation. 65 |
66 | 67 |
    68 |
  • 69 | Other Students: The student categories listed above have priority, and there are usually relatively few available slots after their registration. But in principle, I'm happy to have anybody in the class who is well-prepared and will have the capacity for the very demanding workload this class imposes. To request permission to take the course, please send your completed Prerequisite Questionnaire to Kathryn Angeles and David Rosenberg. 70 | Please note: Registration for students in this category will not open until early January. At that time, students will either be able to register for the course in Albert or add themselves to the waitlist if the course is full. 71 |
72 | 73 |

74 | Prerequisites and Requirements

75 | 76 |

Perhaps the best way to get a sense of how prepared you will be for the course material and workload is to read the slides and lecture notes from Week 1 of 2017 and complete Homework #1 (give yourself one week). This will also give you a jumpstart on the course, because we will have almost the same first homework in 2018.

77 | 78 |

You can also self-assess your preparation by filling out the Prerequisite Questionnaire. If you would like to ask my opinion on whether you are sufficiently prepared for the class, please send me your completed questionnaire. More details on the prerequisites are given below:

79 | 80 |
  • 81 | Programming: You'll need to be comfortable with Python and NumPy, at least. Knowing how to generate plots and tables to summarize results will be necessary as well. For a crash course in Python for data science, the first few chapters of Data Science from Scratch seem like a good bet. For more in-depth coverage, including the pandas library, Python for Data Analysis is worth a look. While pandas won't be particularly useful for the homework assignments, it's highly recommended for doing basic data analysis in practice and will be useful for your course projects.
82 |
  • 83 | Math: Your best bet would be to review the notes from the prerequisite class DS-GA 1002. The priorities would be a review of matrix algebra (be comfortable with reading and manipulating expressions involving matrices, vectors, and norms), gradients, and basic probability theory (expectations, independence, Law of Large Numbers, conditional distributions, and conditional expectations). You'll also need to be comfortable with some basic analysis, such as taking limits and computing derivatives from first principles. But I consider pretty much every part of the 1002 syllabus (from fall 2015 -- in subsequent years it was split into two courses) to be an important part of a data scientist's toolbox.
84 |
  • 85 | Machine Learning: You should at least be familiar with the basic notions of supervised learning, overfitting, and cross-validation. The course is designed to follow DS-GA 1001, and many of your peers will have taken this class. At a bare minimum, you'll need to be familiar with all concepts in these Black Box Machine Learning slides. For a more in-depth background, the book Data Science for Business is highly recommended. It covers many important issues about mapping real-world problems into machine learning problems, which we don't cover much in this course. To get a jump start into practical machine learning, I highly recommend the book Hands-on Machine Learning with Scikit-Learn and TensorFlow. If you've never done any machine learning before, it's worth working through the Jupyter notebooks corresponding to the first two chapters of that book, available on GitHub. It will be helpful when you get to your projects.
  • 86 |
87 | 88 |

89 | Textbooks

90 | 91 |

The following 3 textbooks will serve as good references at different times during our course:

92 | 97 |

The first two books are available as PDFs for free from the publishers. As a free alternative to Bishop's book above, you might consider the following: 98 |

101 |

102 | General Advice

103 | 104 |
    105 |
  • This year's course lectures and homeworks will be similar to last year's. If you want to hit the ground running, it would not be a waste of time to start working on last year's homework assignments now.
  • 106 |
  • The homework writeups must all be submitted as PDF or HTML files. There are many ways to do this, but it might be worth your time to figure out a way you're comfortable with before the class starts. For parts of the homework that are math heavy, you may want to use LyX or write directly in LaTeX. You can also write math directly in a Jupyter notebook, which can be convenient as well.
    107 |
  • 108 |
109 |
110 | 114 |
115 | 116 | 117 | 127 | 128 | 129 | -------------------------------------------------------------------------------- /class-preview/javascripts/main.js: -------------------------------------------------------------------------------- 1 | var sectionHeight = function() { 2 | var total = $(window).height(), 3 | $section = $('section').css('height','auto'); 4 | 5 | if ($section.outerHeight(true) < total) { 6 | var margin = $section.outerHeight(true) - $section.height(); 7 | $section.height(total - margin - 20); 8 | } else { 9 | $section.css('height','auto'); 10 | } 11 | } 12 | 13 | $(window).resize(sectionHeight); 14 | 15 | $(document).ready(function(){ 16 | $("section h1, section h2").each(function(){ 17 | $("nav ul").append("
  • " + $(this).text() + "
  • "); 18 | $(this).attr("id",$(this).text().toLowerCase().replace(/ /g, '-').replace(/[^\w-]+/g,'')); 19 | $("nav ul li:first-child a").parent().addClass("active"); 20 | }); 21 | 22 | $("nav ul li").on("click", "a", function(event) { 23 | var position = $($(this).attr("href")).offset().top - 190; 24 | $("html, body").animate({scrollTop: position}, 400); 25 | $("nav ul li a").parent().removeClass("active"); 26 | $(this).parent().addClass("active"); 27 | event.preventDefault(); 28 | }); 29 | 30 | sectionHeight(); 31 | 32 | $('img').load(sectionHeight); 33 | }); 34 | 35 | fixScale = function(doc) { 36 | 37 | var addEvent = 'addEventListener', 38 | type = 'gesturestart', 39 | qsa = 'querySelectorAll', 40 | scales = [1, 1], 41 | meta = qsa in doc ? doc[qsa]('meta[name=viewport]') : []; 42 | 43 | function fix() { 44 | meta.content = 'width=device-width,minimum-scale=' + scales[0] + ',maximum-scale=' + scales[1]; 45 | doc.removeEventListener(type, fix, true); 46 | } 47 | 48 | if ((meta = meta[meta.length - 1]) && addEvent in doc) { 49 | fix(); 50 | scales = [.25, 1.6]; 51 | doc[addEvent](type, fix, true); 52 | } 53 | }; -------------------------------------------------------------------------------- /class-preview/params.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Ml2017", 3 | "tagline": "", 4 | "body": "### Welcome to GitHub Pages.\r\nThis automatic page generator is the easiest way to create beautiful pages for all of your projects. Author your page content here [using GitHub Flavored Markdown](https://guides.github.com/features/mastering-markdown/), select a template crafted by a designer, and publish. After your page is generated, you can check out the new `gh-pages` branch locally. If you’re using GitHub Desktop, simply sync your repository and you’ll see the new branch.\r\n\r\n### Designer Templates\r\nWe’ve crafted some handsome templates for you to use. Go ahead and click 'Continue to layouts' to browse through them. You can easily go back to edit your page before publishing. After publishing your page, you can revisit the page generator and switch to another theme. Your Page content will be preserved.\r\n\r\n### Creating pages manually\r\nIf you prefer to not use the automatic generator, push a branch named `gh-pages` to your repository to create a page manually. In addition to supporting regular HTML content, GitHub Pages support Jekyll, a simple, blog aware static site generator. Jekyll makes it easy to create site-wide headers and footers without having to copy them across every page. It also offers intelligent blog support and other advanced templating features.\r\n\r\n### Authors and Contributors\r\nYou can @mention a GitHub username to generate a link to their profile. The resulting `` element will link to the contributor’s GitHub Profile. For example: In 2007, Chris Wanstrath (@defunkt), PJ Hyett (@pjhyett), and Tom Preston-Werner (@mojombo) founded GitHub.\r\n\r\n### Support or Contact\r\nHaving trouble with Pages? Check out our [documentation](https://help.github.com/pages) or [contact support](https://github.com/contact) and we’ll help you sort it out.\r\n", 5 | "note": "Don't delete this file! It's used internally to help with page regeneration." 6 | } -------------------------------------------------------------------------------- /class-preview/stylesheets/github-dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | The MIT License (MIT) 3 | 4 | Copyright (c) 2016 GitHub, Inc. 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | 24 | */ 25 | 26 | .pl-c /* comment */ { 27 | color: #969896; 28 | } 29 | 30 | .pl-c1 /* constant, variable.other.constant, support, meta.property-name, support.constant, support.variable, meta.module-reference, markup.raw, meta.diff.header */, 31 | .pl-s .pl-v /* string variable */ { 32 | color: #0099cd; 33 | } 34 | 35 | .pl-e /* entity */, 36 | .pl-en /* entity.name */ { 37 | color: #9774cb; 38 | } 39 | 40 | .pl-smi /* variable.parameter.function, storage.modifier.package, storage.modifier.import, storage.type.java, variable.other */, 41 | .pl-s .pl-s1 /* string source */ { 42 | color: #ddd; 43 | } 44 | 45 | .pl-ent /* entity.name.tag */ { 46 | color: #7bcc72; 47 | } 48 | 49 | .pl-k /* keyword, storage, storage.type */ { 50 | color: #cc2372; 51 | } 52 | 53 | .pl-s /* string */, 54 | .pl-pds /* punctuation.definition.string, string.regexp.character-class */, 55 | .pl-s .pl-pse .pl-s1 /* string punctuation.section.embedded source */, 56 | .pl-sr /* string.regexp */, 57 | .pl-sr .pl-cce /* string.regexp constant.character.escape */, 58 | .pl-sr .pl-sre /* string.regexp source.ruby.embedded */, 59 | .pl-sr .pl-sra /* string.regexp string.regexp.arbitrary-repitition */ { 60 | color: #3c66e2; 61 | } 62 | 63 | .pl-v /* variable */ { 64 | color: #fb8764; 65 | } 66 | 67 | .pl-id /* invalid.deprecated */ { 68 | color: #e63525; 69 | } 70 | 71 | .pl-ii /* invalid.illegal */ { 72 | color: #f8f8f8; 73 | background-color: #e63525; 74 | } 75 | 76 | .pl-sr .pl-cce /* string.regexp constant.character.escape */ { 77 | font-weight: bold; 78 | color: #7bcc72; 79 | } 80 | 81 | .pl-ml /* markup.list */ { 82 | color: #c26b2b; 83 | } 84 | 85 | .pl-mh /* markup.heading */, 86 | .pl-mh .pl-en /* markup.heading entity.name */, 87 | .pl-ms /* meta.separator */ { 88 | font-weight: bold; 89 | color: #264ec5; 90 | } 91 | 92 | .pl-mq /* markup.quote */ { 93 | color: #00acac; 94 | } 95 | 96 | .pl-mi /* markup.italic */ { 97 | font-style: italic; 98 | color: #ddd; 99 | } 100 | 101 | .pl-mb /* markup.bold */ { 102 | font-weight: bold; 103 | color: #ddd; 104 | } 105 | 106 | .pl-md /* markup.deleted, meta.diff.header.from-file */ { 107 | color: #bd2c00; 108 | background-color: #ffecec; 109 | } 110 | 111 | .pl-mi1 /* markup.inserted, meta.diff.header.to-file */ { 112 | color: #55a532; 113 | background-color: #eaffea; 114 | } 115 | 116 | .pl-mdr /* meta.diff.range */ { 117 | font-weight: bold; 118 | color: #9774cb; 119 | } 120 | 121 | .pl-mo /* meta.output */ { 122 | color: #264ec5; 123 | } 124 | 125 | -------------------------------------------------------------------------------- /class-preview/stylesheets/normalize.css: -------------------------------------------------------------------------------- 1 | /* normalize.css 2012-02-07T12:37 UTC - https://github.com/necolas/normalize.css */ 2 | /* ============================================================================= 3 | HTML5 display definitions 4 | ========================================================================== */ 5 | /* 6 | * Corrects block display not defined in IE6/7/8/9 & FF3 7 | */ 8 | article, 9 | aside, 10 | details, 11 | figcaption, 12 | figure, 13 | footer, 14 | header, 15 | hgroup, 16 | nav, 17 | section, 18 | summary { 19 | display: block; 20 | } 21 | 22 | /* 23 | * Corrects inline-block display not defined in IE6/7/8/9 & FF3 24 | */ 25 | audio, 26 | canvas, 27 | video { 28 | display: inline-block; 29 | *display: inline; 30 | *zoom: 1; 31 | } 32 | 33 | /* 34 | * Prevents modern browsers from displaying 'audio' without controls 35 | */ 36 | audio:not([controls]) { 37 | display: none; 38 | } 39 | 40 | /* 41 | * Addresses styling for 'hidden' attribute not present in IE7/8/9, FF3, S4 42 | * Known issue: no IE6 support 43 | */ 44 | [hidden] { 45 | display: none; 46 | } 47 | 48 | /* ============================================================================= 49 | Base 50 | ========================================================================== */ 51 | /* 52 | * 1. Corrects text resizing oddly in IE6/7 when body font-size is set using em units 53 | * http://clagnut.com/blog/348/#c790 54 | * 2. Prevents iOS text size adjust after orientation change, without disabling user zoom 55 | * www.456bereastreet.com/archive/201012/controlling_text_size_in_safari_for_ios_without_disabling_user_zoom/ 56 | */ 57 | html { 58 | font-size: 100%; 59 | /* 1 */ 60 | -webkit-text-size-adjust: 100%; 61 | /* 2 */ 62 | -ms-text-size-adjust: 100%; 63 | /* 2 */ 64 | } 65 | 66 | /* 67 | * Addresses font-family inconsistency between 'textarea' and other form elements. 68 | */ 69 | html, 70 | button, 71 | input, 72 | select, 73 | textarea { 74 | font-family: sans-serif; 75 | } 76 | 77 | /* 78 | * Addresses margins handled incorrectly in IE6/7 79 | */ 80 | body { 81 | margin: 0; 82 | } 83 | 84 | /* ============================================================================= 85 | Links 86 | ========================================================================== */ 87 | /* 88 | * Addresses outline displayed oddly in Chrome 89 | */ 90 | a:focus { 91 | outline: thin dotted; 92 | } 93 | 94 | /* 95 | * Improves readability when focused and also mouse hovered in all browsers 96 | * people.opera.com/patrickl/experiments/keyboard/test 97 | */ 98 | a:hover, 99 | a:active { 100 | outline: 0; 101 | } 102 | 103 | /* ============================================================================= 104 | Typography 105 | ========================================================================== */ 106 | /* 107 | * Addresses font sizes and margins set differently in IE6/7 108 | * Addresses font sizes within 'section' and 'article' in FF4+, Chrome, S5 109 | */ 110 | h1 { 111 | font-size: 2em; 112 | margin: 0.67em 0; 113 | } 114 | 115 | h2 { 116 | font-size: 1.5em; 117 | margin: 0.83em 0; 118 | } 119 | 120 | h3 { 121 | font-size: 1.17em; 122 | margin: 1em 0; 123 | } 124 | 125 | h4 { 126 | font-size: 1em; 127 | margin: 1.33em 0; 128 | } 129 | 130 | h5 { 131 | font-size: 0.83em; 132 | margin: 1.67em 0; 133 | } 134 | 135 | h6 { 136 | font-size: 0.75em; 137 | margin: 2.33em 0; 138 | } 139 | 140 | /* 141 | * Addresses styling not present in IE7/8/9, S5, Chrome 142 | */ 143 | abbr[title] { 144 | border-bottom: 1px dotted; 145 | } 146 | 147 | /* 148 | * Addresses style set to 'bolder' in FF3+, S4/5, Chrome 149 | */ 150 | b, 151 | strong { 152 | font-weight: bold; 153 | } 154 | 155 | blockquote { 156 | margin: 1em 40px; 157 | } 158 | 159 | /* 160 | * Addresses styling not present in S5, Chrome 161 | */ 162 | dfn { 163 | font-style: italic; 164 | } 165 | 166 | /* 167 | * Addresses styling not present in IE6/7/8/9 168 | */ 169 | mark { 170 | background: #ff0; 171 | color: #000; 172 | } 173 | 174 | /* 175 | * Addresses margins set differently in IE6/7 176 | */ 177 | p, 178 | pre { 179 | margin: 1em 0; 180 | } 181 | 182 | /* 183 | * Corrects font family set oddly in IE6, S4/5, Chrome 184 | * en.wikipedia.org/wiki/User:Davidgothberg/Test59 185 | */ 186 | pre, 187 | code, 188 | kbd, 189 | samp { 190 | font-family: monospace, serif; 191 | _font-family: 'courier new', monospace; 192 | font-size: 1em; 193 | } 194 | 195 | /* 196 | * 1. Addresses CSS quotes not supported in IE6/7 197 | * 2. Addresses quote property not supported in S4 198 | */ 199 | /* 1 */ 200 | q { 201 | quotes: none; 202 | } 203 | 204 | /* 2 */ 205 | q:before, 206 | q:after { 207 | content: ''; 208 | content: none; 209 | } 210 | 211 | small { 212 | font-size: 75%; 213 | } 214 | 215 | /* 216 | * Prevents sub and sup affecting line-height in all browsers 217 | * gist.github.com/413930 218 | */ 219 | sub, 220 | sup { 221 | font-size: 75%; 222 | line-height: 0; 223 | position: relative; 224 | vertical-align: baseline; 225 | } 226 | 227 | sup { 228 | top: -0.5em; 229 | } 230 | 231 | sub { 232 | bottom: -0.25em; 233 | } 234 | 235 | /* ============================================================================= 236 | Lists 237 | ========================================================================== */ 238 | /* 239 | * Addresses margins set differently in IE6/7 240 | */ 241 | dl, 242 | menu, 243 | ol, 244 | ul { 245 | margin: 1em 0; 246 | } 247 | 248 | dd { 249 | margin: 0 0 0 40px; 250 | } 251 | 252 | /* 253 | * Addresses paddings set differently in IE6/7 254 | */ 255 | menu, 256 | ol, 257 | ul { 258 | padding: 0 0 0 40px; 259 | } 260 | 261 | /* 262 | * Corrects list images handled incorrectly in IE7 263 | */ 264 | nav ul, 265 | nav ol { 266 | list-style: none; 267 | list-style-image: none; 268 | } 269 | 270 | /* ============================================================================= 271 | Embedded content 272 | ========================================================================== */ 273 | /* 274 | * 1. Removes border when inside 'a' element in IE6/7/8/9, FF3 275 | * 2. Improves image quality when scaled in IE7 276 | * code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/ 277 | */ 278 | img { 279 | border: 0; 280 | /* 1 */ 281 | -ms-interpolation-mode: bicubic; 282 | /* 2 */ 283 | } 284 | 285 | /* 286 | * Corrects overflow displayed oddly in IE9 287 | */ 288 | svg:not(:root) { 289 | overflow: hidden; 290 | } 291 | 292 | /* ============================================================================= 293 | Figures 294 | ========================================================================== */ 295 | /* 296 | * Addresses margin not present in IE6/7/8/9, S5, O11 297 | */ 298 | figure { 299 | margin: 0; 300 | } 301 | 302 | /* ============================================================================= 303 | Forms 304 | ========================================================================== */ 305 | /* 306 | * Corrects margin displayed oddly in IE6/7 307 | */ 308 | form { 309 | margin: 0; 310 | } 311 | 312 | /* 313 | * Define consistent border, margin, and padding 314 | */ 315 | fieldset { 316 | border: 1px solid #c0c0c0; 317 | margin: 0 2px; 318 | padding: 0.35em 0.625em 0.75em; 319 | } 320 | 321 | /* 322 | * 1. Corrects color not being inherited in IE6/7/8/9 323 | * 2. Corrects text not wrapping in FF3 324 | * 3. Corrects alignment displayed oddly in IE6/7 325 | */ 326 | legend { 327 | border: 0; 328 | /* 1 */ 329 | padding: 0; 330 | white-space: normal; 331 | /* 2 */ 332 | *margin-left: -7px; 333 | /* 3 */ 334 | } 335 | 336 | /* 337 | * 1. Corrects font size not being inherited in all browsers 338 | * 2. Addresses margins set differently in IE6/7, FF3+, S5, Chrome 339 | * 3. Improves appearance and consistency in all browsers 340 | */ 341 | button, 342 | input, 343 | select, 344 | textarea { 345 | font-size: 100%; 346 | /* 1 */ 347 | margin: 0; 348 | /* 2 */ 349 | vertical-align: baseline; 350 | /* 3 */ 351 | *vertical-align: middle; 352 | /* 3 */ 353 | } 354 | 355 | /* 356 | * Addresses FF3/4 setting line-height on 'input' using !important in the UA stylesheet 357 | */ 358 | button, 359 | input { 360 | line-height: normal; 361 | /* 1 */ 362 | } 363 | 364 | /* 365 | * 1. Improves usability and consistency of cursor style between image-type 'input' and others 366 | * 2. Corrects inability to style clickable 'input' types in iOS 367 | * 3. Removes inner spacing in IE7 without affecting normal text inputs 368 | * Known issue: inner spacing remains in IE6 369 | */ 370 | button, 371 | input[type="button"], 372 | input[type="reset"], 373 | input[type="submit"] { 374 | cursor: pointer; 375 | /* 1 */ 376 | -webkit-appearance: button; 377 | /* 2 */ 378 | *overflow: visible; 379 | /* 3 */ 380 | } 381 | 382 | /* 383 | * Re-set default cursor for disabled elements 384 | */ 385 | button[disabled], 386 | input[disabled] { 387 | cursor: default; 388 | } 389 | 390 | /* 391 | * 1. Addresses box sizing set to content-box in IE8/9 392 | * 2. Removes excess padding in IE8/9 393 | * 3. Removes excess padding in IE7 394 | Known issue: excess padding remains in IE6 395 | */ 396 | input[type="checkbox"], 397 | input[type="radio"] { 398 | box-sizing: border-box; 399 | /* 1 */ 400 | padding: 0; 401 | /* 2 */ 402 | *height: 13px; 403 | /* 3 */ 404 | *width: 13px; 405 | /* 3 */ 406 | } 407 | 408 | /* 409 | * 1. Addresses appearance set to searchfield in S5, Chrome 410 | * 2. Addresses box-sizing set to border-box in S5, Chrome (include -moz to future-proof) 411 | */ 412 | input[type="search"] { 413 | -webkit-appearance: textfield; 414 | /* 1 */ 415 | -moz-box-sizing: content-box; 416 | -webkit-box-sizing: content-box; 417 | /* 2 */ 418 | box-sizing: content-box; 419 | } 420 | 421 | /* 422 | * Removes inner padding and search cancel button in S5, Chrome on OS X 423 | */ 424 | input[type="search"]::-webkit-search-decoration, 425 | input[type="search"]::-webkit-search-cancel-button { 426 | -webkit-appearance: none; 427 | } 428 | 429 | /* 430 | * Removes inner padding and border in FF3+ 431 | * www.sitepen.com/blog/2008/05/14/the-devils-in-the-details-fixing-dojos-toolbar-buttons/ 432 | */ 433 | button::-moz-focus-inner, 434 | input::-moz-focus-inner { 435 | border: 0; 436 | padding: 0; 437 | } 438 | 439 | /* 440 | * 1. Removes default vertical scrollbar in IE6/7/8/9 441 | * 2. Improves readability and alignment in all browsers 442 | */ 443 | textarea { 444 | overflow: auto; 445 | /* 1 */ 446 | vertical-align: top; 447 | /* 2 */ 448 | } 449 | 450 | /* ============================================================================= 451 | Tables 452 | ========================================================================== */ 453 | /* 454 | * Remove most spacing between table cells 455 | */ 456 | table { 457 | border-collapse: collapse; 458 | border-spacing: 0; 459 | } 460 | -------------------------------------------------------------------------------- /class-preview/stylesheets/styles.css: -------------------------------------------------------------------------------- 1 | /* 2 | Leap Day for GitHub Pages 3 | by Matt Graham 4 | */ 5 | @font-face { 6 | font-family: 'Quattrocento Sans'; 7 | src: url("../fonts/quattrocentosans-bold-webfont.eot"); 8 | src: url("../fonts/quattrocentosans-bold-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/quattrocentosans-bold-webfont.woff") format("woff"), url("../fonts/quattrocentosans-bold-webfont.ttf") format("truetype"), url("../fonts/quattrocentosans-bold-webfont.svg#QuattrocentoSansBold") format("svg"); 9 | font-weight: bold; 10 | font-style: normal; 11 | } 12 | 13 | @font-face { 14 | font-family: 'Quattrocento Sans'; 15 | src: url("../fonts/quattrocentosans-bolditalic-webfont.eot"); 16 | src: url("../fonts/quattrocentosans-bolditalic-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/quattrocentosans-bolditalic-webfont.woff") format("woff"), url("../fonts/quattrocentosans-bolditalic-webfont.ttf") format("truetype"), url("../fonts/quattrocentosans-bolditalic-webfont.svg#QuattrocentoSansBoldItalic") format("svg"); 17 | font-weight: bold; 18 | font-style: italic; 19 | } 20 | 21 | @font-face { 22 | font-family: 'Quattrocento Sans'; 23 | src: url("../fonts/quattrocentosans-italic-webfont.eot"); 24 | src: url("../fonts/quattrocentosans-italic-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/quattrocentosans-italic-webfont.woff") format("woff"), url("../fonts/quattrocentosans-italic-webfont.ttf") format("truetype"), url("../fonts/quattrocentosans-italic-webfont.svg#QuattrocentoSansItalic") format("svg"); 25 | font-weight: normal; 26 | font-style: italic; 27 | } 28 | 29 | @font-face { 30 | font-family: 'Quattrocento Sans'; 31 | src: url("../fonts/quattrocentosans-regular-webfont.eot"); 32 | src: url("../fonts/quattrocentosans-regular-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/quattrocentosans-regular-webfont.woff") format("woff"), url("../fonts/quattrocentosans-regular-webfont.ttf") format("truetype"), url("../fonts/quattrocentosans-regular-webfont.svg#QuattrocentoSansRegular") format("svg"); 33 | font-weight: normal; 34 | font-style: normal; 35 | } 36 | 37 | @font-face { 38 | font-family: 'Copse'; 39 | src: url("../fonts/copse-regular-webfont.eot"); 40 | src: url("../fonts/copse-regular-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/copse-regular-webfont.woff") format("woff"), url("../fonts/copse-regular-webfont.ttf") format("truetype"), url("../fonts/copse-regular-webfont.svg#CopseRegular") format("svg"); 41 | font-weight: normal; 42 | font-style: normal; 43 | } 44 | 45 | /* normalize.css 2012-02-07T12:37 UTC - https://github.com/necolas/normalize.css */ 46 | /* ============================================================================= 47 | HTML5 display definitions 48 | ========================================================================== */ 49 | /* 50 | * Corrects block display not defined in IE6/7/8/9 & FF3 51 | */ 52 | article, 53 | aside, 54 | details, 55 | figcaption, 56 | figure, 57 | footer, 58 | header, 59 | hgroup, 60 | nav, 61 | section, 62 | summary { 63 | display: block; 64 | } 65 | 66 | /* 67 | * Corrects inline-block display not defined in IE6/7/8/9 & FF3 68 | */ 69 | audio, 70 | canvas, 71 | video { 72 | display: inline-block; 73 | *display: inline; 74 | *zoom: 1; 75 | } 76 | 77 | /* 78 | * Prevents modern browsers from displaying 'audio' without controls 79 | */ 80 | audio:not([controls]) { 81 | display: none; 82 | } 83 | 84 | /* 85 | * Addresses styling for 'hidden' attribute not present in IE7/8/9, FF3, S4 86 | * Known issue: no IE6 support 87 | */ 88 | [hidden] { 89 | display: none; 90 | } 91 | 92 | /* ============================================================================= 93 | Base 94 | ========================================================================== */ 95 | /* 96 | * 1. Corrects text resizing oddly in IE6/7 when body font-size is set using em units 97 | * http://clagnut.com/blog/348/#c790 98 | * 2. Prevents iOS text size adjust after orientation change, without disabling user zoom 99 | * www.456bereastreet.com/archive/201012/controlling_text_size_in_safari_for_ios_without_disabling_user_zoom/ 100 | */ 101 | html { 102 | font-size: 100%; 103 | /* 1 */ 104 | -webkit-text-size-adjust: 100%; 105 | /* 2 */ 106 | -ms-text-size-adjust: 100%; 107 | /* 2 */ 108 | } 109 | 110 | /* 111 | * Addresses font-family inconsistency between 'textarea' and other form elements. 112 | */ 113 | html, 114 | button, 115 | input, 116 | select, 117 | textarea { 118 | font-family: sans-serif; 119 | } 120 | 121 | /* 122 | * Addresses margins handled incorrectly in IE6/7 123 | */ 124 | body { 125 | margin: 0; 126 | } 127 | 128 | /* ============================================================================= 129 | Links 130 | ========================================================================== */ 131 | /* 132 | * Addresses outline displayed oddly in Chrome 133 | */ 134 | a:focus { 135 | outline: thin dotted; 136 | } 137 | 138 | /* 139 | * Improves readability when focused and also mouse hovered in all browsers 140 | * people.opera.com/patrickl/experiments/keyboard/test 141 | */ 142 | a:hover, 143 | a:active { 144 | outline: 0; 145 | } 146 | 147 | /* ============================================================================= 148 | Typography 149 | ========================================================================== */ 150 | /* 151 | * Addresses font sizes and margins set differently in IE6/7 152 | * Addresses font sizes within 'section' and 'article' in FF4+, Chrome, S5 153 | */ 154 | h1 { 155 | font-size: 2em; 156 | margin: 0.67em 0; 157 | } 158 | 159 | h2 { 160 | font-size: 1.5em; 161 | margin: 0.83em 0; 162 | } 163 | 164 | h3 { 165 | font-size: 1.17em; 166 | margin: 1em 0; 167 | } 168 | 169 | h4 { 170 | font-size: 1em; 171 | margin: 1.33em 0; 172 | } 173 | 174 | h5 { 175 | font-size: 0.83em; 176 | margin: 1.67em 0; 177 | } 178 | 179 | h6 { 180 | font-size: 0.75em; 181 | margin: 2.33em 0; 182 | } 183 | 184 | /* 185 | * Addresses styling not present in IE7/8/9, S5, Chrome 186 | */ 187 | abbr[title] { 188 | border-bottom: 1px dotted; 189 | } 190 | 191 | /* 192 | * Addresses style set to 'bolder' in FF3+, S4/5, Chrome 193 | */ 194 | b, 195 | strong { 196 | font-weight: bold; 197 | } 198 | 199 | blockquote { 200 | margin: 1em 40px; 201 | } 202 | 203 | /* 204 | * Addresses styling not present in S5, Chrome 205 | */ 206 | dfn { 207 | font-style: italic; 208 | } 209 | 210 | /* 211 | * Addresses styling not present in IE6/7/8/9 212 | */ 213 | mark { 214 | background: #ff0; 215 | color: #000; 216 | } 217 | 218 | /* 219 | * Addresses margins set differently in IE6/7 220 | */ 221 | p, 222 | pre { 223 | margin: 1em 0; 224 | } 225 | 226 | /* 227 | * Corrects font family set oddly in IE6, S4/5, Chrome 228 | * en.wikipedia.org/wiki/User:Davidgothberg/Test59 229 | */ 230 | pre, 231 | code, 232 | kbd, 233 | samp { 234 | font-family: monospace, serif; 235 | _font-family: 'courier new', monospace; 236 | font-size: 1em; 237 | } 238 | 239 | /* 240 | * 1. Addresses CSS quotes not supported in IE6/7 241 | * 2. Addresses quote property not supported in S4 242 | */ 243 | /* 1 */ 244 | q { 245 | quotes: none; 246 | } 247 | 248 | /* 2 */ 249 | q:before, 250 | q:after { 251 | content: ''; 252 | content: none; 253 | } 254 | 255 | small { 256 | font-size: 75%; 257 | } 258 | 259 | /* 260 | * Prevents sub and sup affecting line-height in all browsers 261 | * gist.github.com/413930 262 | */ 263 | sub, 264 | sup { 265 | font-size: 75%; 266 | line-height: 0; 267 | position: relative; 268 | vertical-align: baseline; 269 | } 270 | 271 | sup { 272 | top: -0.5em; 273 | } 274 | 275 | sub { 276 | bottom: -0.25em; 277 | } 278 | 279 | /* ============================================================================= 280 | Lists 281 | ========================================================================== */ 282 | /* 283 | * Addresses margins set differently in IE6/7 284 | */ 285 | dl, 286 | menu, 287 | ol, 288 | ul { 289 | margin: 1em 0; 290 | } 291 | 292 | dd { 293 | margin: 0 0 0 40px; 294 | } 295 | 296 | /* 297 | * Addresses paddings set differently in IE6/7 298 | */ 299 | menu, 300 | ol, 301 | ul { 302 | padding: 0 0 0 40px; 303 | } 304 | 305 | /* 306 | * Corrects list images handled incorrectly in IE7 307 | */ 308 | nav ul, 309 | nav ol { 310 | list-style: none; 311 | list-style-image: none; 312 | } 313 | 314 | /* ============================================================================= 315 | Embedded content 316 | ========================================================================== */ 317 | /* 318 | * 1. Removes border when inside 'a' element in IE6/7/8/9, FF3 319 | * 2. Improves image quality when scaled in IE7 320 | * code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/ 321 | */ 322 | img { 323 | border: 0; 324 | /* 1 */ 325 | -ms-interpolation-mode: bicubic; 326 | /* 2 */ 327 | } 328 | 329 | /* 330 | * Corrects overflow displayed oddly in IE9 331 | */ 332 | svg:not(:root) { 333 | overflow: hidden; 334 | } 335 | 336 | /* ============================================================================= 337 | Figures 338 | ========================================================================== */ 339 | /* 340 | * Addresses margin not present in IE6/7/8/9, S5, O11 341 | */ 342 | figure { 343 | margin: 0; 344 | } 345 | 346 | /* ============================================================================= 347 | Forms 348 | ========================================================================== */ 349 | /* 350 | * Corrects margin displayed oddly in IE6/7 351 | */ 352 | form { 353 | margin: 0; 354 | } 355 | 356 | /* 357 | * Define consistent border, margin, and padding 358 | */ 359 | fieldset { 360 | border: 1px solid #c0c0c0; 361 | margin: 0 2px; 362 | padding: 0.35em 0.625em 0.75em; 363 | } 364 | 365 | /* 366 | * 1. Corrects color not being inherited in IE6/7/8/9 367 | * 2. Corrects text not wrapping in FF3 368 | * 3. Corrects alignment displayed oddly in IE6/7 369 | */ 370 | legend { 371 | border: 0; 372 | /* 1 */ 373 | padding: 0; 374 | white-space: normal; 375 | /* 2 */ 376 | *margin-left: -7px; 377 | /* 3 */ 378 | } 379 | 380 | /* 381 | * 1. Corrects font size not being inherited in all browsers 382 | * 2. Addresses margins set differently in IE6/7, FF3+, S5, Chrome 383 | * 3. Improves appearance and consistency in all browsers 384 | */ 385 | button, 386 | input, 387 | select, 388 | textarea { 389 | font-size: 100%; 390 | /* 1 */ 391 | margin: 0; 392 | /* 2 */ 393 | vertical-align: baseline; 394 | /* 3 */ 395 | *vertical-align: middle; 396 | /* 3 */ 397 | } 398 | 399 | /* 400 | * Addresses FF3/4 setting line-height on 'input' using !important in the UA stylesheet 401 | */ 402 | button, 403 | input { 404 | line-height: normal; 405 | /* 1 */ 406 | } 407 | 408 | /* 409 | * 1. Improves usability and consistency of cursor style between image-type 'input' and others 410 | * 2. Corrects inability to style clickable 'input' types in iOS 411 | * 3. Removes inner spacing in IE7 without affecting normal text inputs 412 | * Known issue: inner spacing remains in IE6 413 | */ 414 | button, 415 | input[type="button"], 416 | input[type="reset"], 417 | input[type="submit"] { 418 | cursor: pointer; 419 | /* 1 */ 420 | -webkit-appearance: button; 421 | /* 2 */ 422 | *overflow: visible; 423 | /* 3 */ 424 | } 425 | 426 | /* 427 | * Re-set default cursor for disabled elements 428 | */ 429 | button[disabled], 430 | input[disabled] { 431 | cursor: default; 432 | } 433 | 434 | /* 435 | * 1. Addresses box sizing set to content-box in IE8/9 436 | * 2. Removes excess padding in IE8/9 437 | * 3. Removes excess padding in IE7 438 | Known issue: excess padding remains in IE6 439 | */ 440 | input[type="checkbox"], 441 | input[type="radio"] { 442 | box-sizing: border-box; 443 | /* 1 */ 444 | padding: 0; 445 | /* 2 */ 446 | *height: 13px; 447 | /* 3 */ 448 | *width: 13px; 449 | /* 3 */ 450 | } 451 | 452 | /* 453 | * 1. Addresses appearance set to searchfield in S5, Chrome 454 | * 2. Addresses box-sizing set to border-box in S5, Chrome (include -moz to future-proof) 455 | */ 456 | input[type="search"] { 457 | -webkit-appearance: textfield; 458 | /* 1 */ 459 | -moz-box-sizing: content-box; 460 | -webkit-box-sizing: content-box; 461 | /* 2 */ 462 | box-sizing: content-box; 463 | } 464 | 465 | /* 466 | * Removes inner padding and search cancel button in S5, Chrome on OS X 467 | */ 468 | input[type="search"]::-webkit-search-decoration, 469 | input[type="search"]::-webkit-search-cancel-button { 470 | -webkit-appearance: none; 471 | } 472 | 473 | /* 474 | * Removes inner padding and border in FF3+ 475 | * www.sitepen.com/blog/2008/05/14/the-devils-in-the-details-fixing-dojos-toolbar-buttons/ 476 | */ 477 | button::-moz-focus-inner, 478 | input::-moz-focus-inner { 479 | border: 0; 480 | padding: 0; 481 | } 482 | 483 | /* 484 | * 1. Removes default vertical scrollbar in IE6/7/8/9 485 | * 2. Improves readability and alignment in all browsers 486 | */ 487 | textarea { 488 | overflow: auto; 489 | /* 1 */ 490 | vertical-align: top; 491 | /* 2 */ 492 | } 493 | 494 | /* ============================================================================= 495 | Tables 496 | ========================================================================== */ 497 | /* 498 | * Remove most spacing between table cells 499 | */ 500 | table { 501 | border-collapse: collapse; 502 | border-spacing: 0; 503 | } 504 | 505 | body { 506 | font: 14px/22px "Quattrocento Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; 507 | color: #666; 508 | font-weight: 300; 509 | margin: 0px; 510 | padding: 0px 0 20px 0px; 511 | background: url(../images/body-background.png) #eae6d1; 512 | } 513 | 514 | h1, h2, h3, h4, h5, h6 { 515 | color: #333; 516 | margin: 0 0 10px; 517 | } 518 | 519 | p, ul, ol, table, pre, dl { 520 | margin: 0 0 20px; 521 | } 522 | 523 | h1, h2, h3 { 524 | line-height: 1.1; 525 | } 526 | 527 | h1 { 528 | font-size: 28px; 529 | } 530 | 531 | h2 { 532 | font-size: 24px; 533 | color: #393939; 534 | } 535 | 536 | h3, h4, h5, h6 { 537 | color: #666666; 538 | } 539 | 540 | h3 { 541 | font-size: 18px; 542 | line-height: 24px; 543 | } 544 | 545 | a { 546 | color: #3399cc; 547 | font-weight: 400; 548 | text-decoration: none; 549 | } 550 | 551 | a small { 552 | font-size: 11px; 553 | color: #666; 554 | margin-top: -0.6em; 555 | display: block; 556 | } 557 | 558 | ul { 559 | list-style-image: url("../images/bullet.png"); 560 | } 561 | 562 | strong { 563 | font-weight: bold; 564 | color: #333; 565 | } 566 | 567 | .wrapper { 568 | width: 650px; 569 | margin: 0 auto; 570 | position: relative; 571 | } 572 | 573 | section img { 574 | max-width: 100%; 575 | } 576 | 577 | blockquote { 578 | border-left: 1px solid #ffcc00; 579 | margin: 0; 580 | padding: 0 0 0 20px; 581 | font-style: italic; 582 | } 583 | 584 | code { 585 | font-family: "Lucida Sans", Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal; 586 | font-size: 13px; 587 | color: #efefef; 588 | text-shadow: 0px 1px 0px #000; 589 | margin: 0 4px; 590 | padding: 2px 6px; 591 | background: #333; 592 | -moz-border-radius: 2px; 593 | -webkit-border-radius: 2px; 594 | -o-border-radius: 2px; 595 | -ms-border-radius: 2px; 596 | -khtml-border-radius: 2px; 597 | border-radius: 2px; 598 | } 599 | 600 | pre { 601 | padding: 8px 15px; 602 | background: #333333; 603 | -moz-border-radius: 3px; 604 | -webkit-border-radius: 3px; 605 | -o-border-radius: 3px; 606 | -ms-border-radius: 3px; 607 | -khtml-border-radius: 3px; 608 | border-radius: 3px; 609 | border: 1px solid #c7c7c7; 610 | overflow: auto; 611 | overflow-y: hidden; 612 | } 613 | pre code { 614 | margin: 0px; 615 | padding: 0px; 616 | } 617 | 618 | table { 619 | width: 100%; 620 | border-collapse: collapse; 621 | } 622 | 623 | th { 624 | text-align: left; 625 | padding: 5px 10px; 626 | border-bottom: 1px solid #e5e5e5; 627 | color: #444; 628 | } 629 | 630 | td { 631 | text-align: left; 632 | padding: 5px 10px; 633 | border-bottom: 1px solid #e5e5e5; 634 | border-right: 1px solid #ffcc00; 635 | } 636 | td:first-child { 637 | border-left: 1px solid #ffcc00; 638 | } 639 | 640 | hr { 641 | border: 0; 642 | outline: none; 643 | height: 11px; 644 | background: transparent url("../images/hr.gif") center center repeat-x; 645 | margin: 0 0 20px; 646 | } 647 | 648 | dt { 649 | color: #444; 650 | font-weight: 700; 651 | } 652 | 653 | header { 654 | padding: 25px 20px 40px 20px; 655 | margin: 0; 656 | position: fixed; 657 | top: 0; 658 | left: 0; 659 | right: 0; 660 | width: 100%; 661 | text-align: center; 662 | background: url(../images/background.png) #4276b6; 663 | -moz-box-shadow: 1px 0px 2px rgba(0, 0, 0, 0.75); 664 | -webkit-box-shadow: 1px 0px 2px rgba(0, 0, 0, 0.75); 665 | -o-box-shadow: 1px 0px 2px rgba(0, 0, 0, 0.75); 666 | box-shadow: 1px 0px 2px rgba(0, 0, 0, 0.75); 667 | z-index: 99; 668 | -webkit-font-smoothing: antialiased; 669 | min-height: 76px; 670 | } 671 | header h1 { 672 | font: 40px/48px "Copse", "Helvetica Neue", Helvetica, Arial, sans-serif; 673 | color: #f3f3f3; 674 | text-shadow: 0px 2px 0px #235796; 675 | margin: 0px; 676 | white-space: nowrap; 677 | overflow: hidden; 678 | text-overflow: ellipsis; 679 | -o-text-overflow: ellipsis; 680 | -ms-text-overflow: ellipsis; 681 | } 682 | header p { 683 | color: #d8d8d8; 684 | text-shadow: rgba(0, 0, 0, 0.2) 0 1px 0; 685 | font-size: 18px; 686 | margin: 0px; 687 | } 688 | 689 | #banner { 690 | z-index: 100; 691 | left: 0; 692 | right: 50%; 693 | height: 50px; 694 | margin-right: -382px; 695 | position: fixed; 696 | top: 115px; 697 | background: #ffcc00; 698 | border: 1px solid #f0b500; 699 | -moz-box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.25); 700 | -webkit-box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.25); 701 | -o-box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.25); 702 | box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.25); 703 | -moz-border-radius: 0px 2px 2px 0px; 704 | -webkit-border-radius: 0px 2px 2px 0px; 705 | -o-border-radius: 0px 2px 2px 0px; 706 | -ms-border-radius: 0px 2px 2px 0px; 707 | -khtml-border-radius: 0px 2px 2px 0px; 708 | border-radius: 0px 2px 2px 0px; 709 | padding-right: 10px; 710 | } 711 | #banner .button { 712 | border: 1px solid #dba500; 713 | background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffe788), color-stop(100%, #ffce38)); 714 | background: -webkit-linear-gradient(#ffe788, #ffce38); 715 | background: -moz-linear-gradient(#ffe788, #ffce38); 716 | background: -o-linear-gradient(#ffe788, #ffce38); 717 | background: -ms-linear-gradient(#ffe788, #ffce38); 718 | background: linear-gradient(#ffe788, #ffce38); 719 | -moz-border-radius: 2px; 720 | -webkit-border-radius: 2px; 721 | -o-border-radius: 2px; 722 | -ms-border-radius: 2px; 723 | -khtml-border-radius: 2px; 724 | border-radius: 2px; 725 | -moz-box-shadow: inset 0px 1px 0px rgba(255, 255, 255, 0.4), 0px 1px 1px rgba(0, 0, 0, 0.1); 726 | -webkit-box-shadow: inset 0px 1px 0px rgba(255, 255, 255, 0.4), 0px 1px 1px rgba(0, 0, 0, 0.1); 727 | -o-box-shadow: inset 0px 1px 0px rgba(255, 255, 255, 0.4), 0px 1px 1px rgba(0, 0, 0, 0.1); 728 | box-shadow: inset 0px 1px 0px rgba(255, 255, 255, 0.4), 0px 1px 1px rgba(0, 0, 0, 0.1); 729 | background-color: #FFE788; 730 | margin-left: 5px; 731 | padding: 10px 12px; 732 | margin-top: 6px; 733 | line-height: 14px; 734 | font-size: 14px; 735 | color: #333; 736 | font-weight: bold; 737 | display: inline-block; 738 | text-align: center; 739 | } 740 | #banner .button:hover { 741 | background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffe788), color-stop(100%, #ffe788)); 742 | background: -webkit-linear-gradient(#ffe788, #ffe788); 743 | background: -moz-linear-gradient(#ffe788, #ffe788); 744 | background: -o-linear-gradient(#ffe788, #ffe788); 745 | background: -ms-linear-gradient(#ffe788, #ffe788); 746 | background: linear-gradient(#ffe788, #ffe788); 747 | background-color: #ffeca0; 748 | } 749 | #banner .fork { 750 | position: fixed; 751 | left: 50%; 752 | margin-left: -325px; 753 | padding: 10px 12px; 754 | margin-top: 6px; 755 | line-height: 14px; 756 | font-size: 14px; 757 | background-color: #FFE788; 758 | } 759 | #banner .downloads { 760 | float: right; 761 | margin: 0 45px 0 0; 762 | } 763 | #banner .downloads span { 764 | float: left; 765 | line-height: 52px; 766 | font-size: 90%; 767 | color: #9d7f0d; 768 | text-transform: uppercase; 769 | text-shadow: rgba(255, 255, 255, 0.2) 0 1px 0; 770 | } 771 | #banner ul { 772 | list-style: none; 773 | height: 40px; 774 | padding: 0; 775 | float: left; 776 | margin-left: 10px; 777 | } 778 | #banner ul li { 779 | display: inline; 780 | } 781 | #banner ul li a.button { 782 | background-color: #FFE788; 783 | } 784 | #banner #logo { 785 | position: absolute; 786 | height: 36px; 787 | width: 36px; 788 | right: 7px; 789 | top: 7px; 790 | display: block; 791 | background: url(../images/octocat-logo.png); 792 | } 793 | 794 | section { 795 | width: 590px; 796 | padding: 30px 30px 50px 30px; 797 | margin: 20px 0; 798 | margin-top: 190px; 799 | position: relative; 800 | background: #fbfbfb; 801 | -moz-border-radius: 3px; 802 | -webkit-border-radius: 3px; 803 | -o-border-radius: 3px; 804 | -ms-border-radius: 3px; 805 | -khtml-border-radius: 3px; 806 | border-radius: 3px; 807 | border: 1px solid #cbcbcb; 808 | -moz-box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.09), inset 0px 0px 2px 2px rgba(255, 255, 255, 0.5), inset 0 0 5px 5px rgba(255, 255, 255, 0.4); 809 | -webkit-box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.09), inset 0px 0px 2px 2px rgba(255, 255, 255, 0.5), inset 0 0 5px 5px rgba(255, 255, 255, 0.4); 810 | -o-box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.09), inset 0px 0px 2px 2px rgba(255, 255, 255, 0.5), inset 0 0 5px 5px rgba(255, 255, 255, 0.4); 811 | box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.09), inset 0px 0px 2px 2px rgba(255, 255, 255, 0.5), inset 0 0 5px 5px rgba(255, 255, 255, 0.4); 812 | } 813 | 814 | small { 815 | font-size: 12px; 816 | } 817 | 818 | nav { 819 | width: 230px; 820 | position: fixed; 821 | top: 220px; 822 | left: 50%; 823 | margin-left: -580px; 824 | text-align: right; 825 | } 826 | nav ul { 827 | list-style: none; 828 | list-style-image: none; 829 | font-size: 14px; 830 | line-height: 24px; 831 | } 832 | nav ul li { 833 | padding: 5px 0px; 834 | line-height: 16px; 835 | } 836 | nav ul li.tag-h1 { 837 | font-size: 1.2em; 838 | } 839 | nav ul li.tag-h1 a { 840 | font-weight: bold; 841 | color: #333; 842 | } 843 | nav ul li.tag-h2 + .tag-h1 { 844 | margin-top: 10px; 845 | } 846 | nav ul a { 847 | color: #666; 848 | } 849 | nav ul a:hover { 850 | color: #999; 851 | } 852 | 853 | footer { 854 | width: 180px; 855 | position: fixed; 856 | left: 50%; 857 | margin-left: -530px; 858 | bottom: 20px; 859 | text-align: right; 860 | line-height: 16px; 861 | } 862 | 863 | @media print, screen and (max-width: 1060px) { 864 | div.wrapper { 865 | width: auto; 866 | margin: 0; 867 | } 868 | 869 | nav { 870 | display: none; 871 | } 872 | 873 | header, section, footer { 874 | float: none; 875 | } 876 | header h1, section h1, footer h1 { 877 | white-space: nowrap; 878 | overflow: hidden; 879 | text-overflow: ellipsis; 880 | -o-text-overflow: ellipsis; 881 | -ms-text-overflow: ellipsis; 882 | } 883 | 884 | #banner { 885 | width: 100%; 886 | } 887 | #banner .downloads { 888 | margin-right: 60px; 889 | } 890 | #banner #logo { 891 | margin-right: 15px; 892 | } 893 | 894 | section { 895 | border: 1px solid #e5e5e5; 896 | border-width: 1px 0; 897 | padding: 20px auto; 898 | margin: 190px auto 20px; 899 | max-width: 600px; 900 | } 901 | 902 | footer { 903 | text-align: center; 904 | margin: 20px auto; 905 | position: relative; 906 | left: auto; 907 | bottom: auto; 908 | width: auto; 909 | } 910 | } 911 | @media print, screen and (max-width: 720px) { 912 | body { 913 | word-wrap: break-word; 914 | } 915 | 916 | header { 917 | padding: 20px 20px; 918 | margin: 0; 919 | } 920 | header h1 { 921 | font-size: 32px; 922 | white-space: nowrap; 923 | overflow: hidden; 924 | text-overflow: ellipsis; 925 | -o-text-overflow: ellipsis; 926 | -ms-text-overflow: ellipsis; 927 | } 928 | header p { 929 | display: none; 930 | } 931 | 932 | #banner { 933 | top: 80px; 934 | } 935 | #banner .fork { 936 | float: left; 937 | display: inline-block; 938 | margin-left: 0px; 939 | position: fixed; 940 | left: 20px; 941 | } 942 | 943 | section { 944 | margin-top: 130px; 945 | margin-bottom: 0px; 946 | width: auto; 947 | } 948 | 949 | header ul, header p.view { 950 | position: static; 951 | } 952 | } 953 | @media print, screen and (max-width: 480px) { 954 | header { 955 | position: relative; 956 | padding: 5px 0px; 957 | min-height: 0px; 958 | } 959 | header h1 { 960 | font-size: 24px; 961 | white-space: nowrap; 962 | overflow: hidden; 963 | text-overflow: ellipsis; 964 | -o-text-overflow: ellipsis; 965 | -ms-text-overflow: ellipsis; 966 | } 967 | 968 | section { 969 | margin-top: 5px; 970 | } 971 | 972 | #banner { 973 | display: none; 974 | } 975 | 976 | header ul { 977 | display: none; 978 | } 979 | } 980 | @media print { 981 | body { 982 | padding: 0.4in; 983 | font-size: 12pt; 984 | color: #444; 985 | } 986 | } 987 | @media print, screen and (max-height: 680px) { 988 | footer { 989 | text-align: center; 990 | margin: 20px auto; 991 | position: relative; 992 | left: auto; 993 | bottom: auto; 994 | width: auto; 995 | } 996 | } 997 | @media print, screen and (max-height: 480px) { 998 | nav { 999 | display: none; 1000 | } 1001 | 1002 | footer { 1003 | text-align: center; 1004 | margin: 20px auto; 1005 | position: relative; 1006 | left: auto; 1007 | bottom: auto; 1008 | width: auto; 1009 | } 1010 | } 1011 | -------------------------------------------------------------------------------- /data/assignments.yml: -------------------------------------------------------------------------------- 1 | Due time: 10pm 2 | Submit link: "https://gradescope.com" 3 | --- 4 | - 5 | Label: Homework 0 6 | Description: Typesetting your homework 7 | Due: 2000-01-01 8 | PDF: {hw0.pdf: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Homework/hw0.pdf"} 9 | ZIP: {hw0.zip: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Homework/hw0.zip"} 10 | - 11 | Label: Homework 1 12 | Description: GD, SGD, and Ridge Regression 13 | Due: 2018-02-01 14 | PDF: {hw1.pdf: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Homework/hw1.pdf"} 15 | ZIP: {hw1.zip: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Homework/hw1.zip"} 16 | - 17 | Label: Homework 2 18 | Description: Lasso Regression 19 | Due: 2018-02-13 20 | PDF: {hw2.pdf: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Homework/hw2.pdf"} 21 | ZIP: {hw2.zip: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Homework/hw2.zip"} 22 | - 23 | Label: Homework 3 24 | Description: SVM and Sentiment Analysis 25 | Due: 2018-02-22 26 | PDF: {hw3.pdf: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Homework/hw3.pdf"} 27 | ZIP: {hw3.zip: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Homework/hw3.zip"} 28 | - 29 | Label: Homework 4 30 | Description: Kernel Methods 31 | Due: 2018-03-02 32 | PDF: {hw4.pdf: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Homework/hw4.pdf"} 33 | ZIP: {hw4.zip: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Homework/hw4.zip"} 34 | - 35 | Label: Homework 5 36 | Description: Probabilistic Modeling 37 | Due: 2018-04-09 38 | PDF: {hw5.pdf: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Homework/hw5.pdf"} 39 | ZIP: {hw5.zip: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Homework/hw5.zip"} 40 | - 41 | Label: Homework 6 42 | Description: Multiclass, Trees, and Gradient Boosting 43 | Due: 2018-04-23 44 | PDF: {hw6.pdf: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Homework/hw6.pdf"} 45 | ZIP: {hw6.zip: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Homework/hw6.zip"} 46 | - 47 | Label: Homework 7 48 | Description: Computation Graphs, Backprop, and Neural Networks 49 | Due: 2018-05-11 50 | PDF: {hw7.pdf: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Homework/hw7.pdf"} 51 | ZIP: {hw7.zip: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Homework/hw7.zip"} 52 | -------------------------------------------------------------------------------- /data/lectures.yml: -------------------------------------------------------------------------------- 1 | - 2 | Title: Week 0 3 | Events: 4 | 2000-01-01: 5 | Label: ML Prereqs 6 | # Video: "https://youtu.be/U6M0m9c9_Js" 7 | Slides: 8 | - {Black Box Machine Learning: "https://bloomberg.github.io/foml/#lecture-1-black-box-machine-learning"} 9 | - {Evaluating Classifiers: "https://bloomberg.github.io/foml/#lecture-14-performance-evaluation"} 10 | Notes: 11 | - {Géron's Machine Learning Landscape: "https://github.com/ageron/handson-ml/blob/master/01_the_machine_learning_landscape.ipynb"} 12 | - {Géron's End-to-End Machine Learning: "https://github.com/ageron/handson-ml/blob/master/02_end_to_end_machine_learning_project.ipynb"} 13 | References: 14 | - Provost and Fawcett book 15 | - {"Géron Ch 1,2": "https://getit.library.nyu.edu/go/9443019"} 16 | - 17 | Title: Week 1 18 | Events: 19 | 2018-01-23: 20 | Label: Lecture 21 | Slides: 22 | - {Course Logistics and Overview: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/01a.course-logistics.pdf"} 23 | - {Statistical Learning Theory: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/01b.intro-stat-learning-theory.pdf"} 24 | Notes: 25 | - {Conditional Expectations: "https://davidrosenberg.github.io/mlcourse/Notes/conditional-expectations.pdf"} 26 | - {SLT and SGD Concept Check Questions: "https://davidrosenberg.github.io/mlcourse/Archive/2018/ConceptChecks/1-Lec-Check.pdf"} 27 | - {SLT and SGD Concept Check Solutions: "https://davidrosenberg.github.io/mlcourse/Archive/2018/ConceptChecks/1-Lec-Check_sol.pdf"} 28 | References: 29 | - {"Bottou's SGD Tricks": "http://leon.bottou.org/papers/bottou-tricks-2012"} 30 | 2018-01-24: 31 | Label: Lab 32 | Slides: 33 | - {Gradients and Directional Derivatives: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Labs/1-gradients-Slides.pdf"} 34 | Notes: 35 | - {Gradients and Directional Derivatives: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Labs/1-gradients-Notes_sol.pdf"} 36 | - {Gradient Concept Check Questions: "https://davidrosenberg.github.io/mlcourse/Archive/2018/ConceptChecks/1-Lab-Check.pdf"} 37 | - {Gradient Concept Check Solutions: "https://davidrosenberg.github.io/mlcourse/Archive/2018/ConceptChecks/1-Lab-Check_sol.pdf"} 38 | - {Directional Derivatives and Approximation (Short): "https://davidrosenberg.github.io/mlcourse/Notes/directional-derivative.pdf"} 39 | References: 40 | - {Barnes "Matrix Differentiation" notes: "http://www.atmos.washington.edu/~dennis/MatrixCalculus.pdf"} 41 | - 42 | Title: Week 2 43 | Events: 44 | 2018-01-30: 45 | Label: Lecture 46 | Slides: 47 | - {Stochastic Gradient Descent: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/02a.SGD.pdf"} 48 | - {Excess Risk Decomposition: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/02b.excess-risk-decomposition.pdf"} 49 | - {L1 and L2 regularization: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/02c.L1L2-regularization.pdf"} 50 | Notes: 51 | - {PreLecture Concept Check Questions: "https://davidrosenberg.github.io/mlcourse/Archive/2018/ConceptChecks/2-PreLec-Check.pdf"} 52 | - {PreLecture Concept Check Solutions: "https://davidrosenberg.github.io/mlcourse/Archive/2018/ConceptChecks/2-PreLec-Check_sol.pdf"} 53 | - {Completing the Square: "https://davidrosenberg.github.io/mlcourse/Notes/completing-the-square.pdf"} 54 | - {Excess Risk and L1/L2 Questions: "https://davidrosenberg.github.io/mlcourse/Archive/2018/ConceptChecks/2-Lec-Check.pdf"} 55 | - {Excess Risk and L1/L2 Solutions: "https://davidrosenberg.github.io/mlcourse/Archive/2018/ConceptChecks/2-Lec-Check_sol.pdf"} 56 | References: 57 | - "HTF Ch. 3" 58 | 2018-01-31: 59 | Label: Lab 60 | Slides: 61 | # - {Grouping and Elastic Net: "https://davidrosenberg.github.io/mlcourse/Archive/2017/Lectures/3a.elastic-net.pdf"} 62 | References: 63 | - "HTF 3.4" 64 | - 65 | Title: Week 3 66 | Events: 67 | 2018-02-06: 68 | Label: Lecture 69 | Slides: 70 | - {Elastic Net and Correlation: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/03a.elastic-net.pdf"} 71 | - {Loss Functions: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/03b.loss-functions.pdf"} 72 | Notes: 73 | - {Elastic Net correlation theorem: "https://davidrosenberg.github.io/mlcourse/Notes/elastic-net-theorem.pdf"} 74 | - {Lasso and Elastic Net (ipynb): "https://github.com/davidrosenberg/mlcourse/blob/gh-pages/Notebooks/Lasso%20and%20Elastic%20Net/lasso_and_elastic_net.ipynb"} 75 | References: 76 | - "HTF 3.4" 77 | - {'Mairal, Bach, and Ponce on Sparse Modeling': "https://arxiv.org/pdf/1411.3230v2.pdf"} 78 | 2018-02-07: 79 | Label: Lab 80 | Slides: 81 | - {Subgradient Descent: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/03c.subgradient-descent.pdf"} 82 | 83 | - 84 | Title: Week 4 85 | Events: 86 | 2018-02-13: 87 | Label: Lecture 88 | Slides: 89 | - {Subgradient Descent (continued): "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/04a.subgradients-continued.pdf"} 90 | - {SVM Insights from Duality: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/04b.SVM-summary.pdf"} 91 | - {The Representer Theorem: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/04c.representer-theorem.pdf"} 92 | - {Lagrangian Duality in 10 Minutes (Optional)): "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/04d.lagrangian-duality-in-ten-minutes.pdf"} 93 | Notes: 94 | - {"Subgradients": "https://davidrosenberg.github.io/mlcourse/Archive/2018/Labs/4-Subgradients-Notes_sol.pdf"} 95 | - {Pre-lecture warmup for SVM and Lagrangians: "https://davidrosenberg.github.io/mlcourse/Notes/svm-lecture-prep.pdf"} 96 | - {SVM Insights from Duality: "https://davidrosenberg.github.io/mlcourse/Notes/SVM-main-points.pdf"} 97 | - {Subgradients and Lagrangian Duality Questions: "https://davidrosenberg.github.io/mlcourse/Archive/2018/ConceptChecks/4-Lec-Check.pdf"} 98 | - {Subgradients and Lagrangian Duality Solutions: "https://davidrosenberg.github.io/mlcourse/Archive/2018/ConceptChecks/4-Lec-Check_sol.pdf"} 99 | References: 100 | - {Boyd subgradient notes: "http://web.stanford.edu/class/ee364b/lectures.html"} 101 | - {Support Vector Machines (Optional): "https://davidrosenberg.github.io/mlcourse/Notes/svm-notes.pdf"} 102 | - {Extreme Abridgement of BV (Optional): "https://davidrosenberg.github.io/mlcourse/Notes/convex-optimization.pdf"} 103 | 2018-02-14: 104 | Label: Lab 105 | Slides: 106 | - {Features: "https://github.com/davidrosenberg/mlcourse/blob/gh-pages/Labs/4-Features/tex/04e.features.pdf"} 107 | Notes: 108 | - {Simplest Example: "https://github.com/davidrosenberg/mlcourse/blob/gh-pages/Notebooks/Features/simple_feature_transformations.ipynb"} 109 | - {Ingesting text with BOW: "https://github.com/davidrosenberg/mlcourse/blob/gh-pages/Notebooks/Features/test_BOW.ipynb"} 110 | - {Polynomial features: "https://github.com/davidrosenberg/mlcourse/blob/gh-pages/Notebooks/Features/polynomial_feature_comparison.ipynb"} 111 | - {Vector quantization with k-means: "https://github.com/davidrosenberg/mlcourse/blob/gh-pages/Notebooks/Features/vector_quantization.ipynb"} 112 | References: 113 | - {Feature Engineering for Machine Learning by Casari and Zheng: "https://www.safaribooksonline.com/library/view/feature-engineering-for/9781491953235/"} 114 | - 115 | Title: Week 5 116 | Events: 117 | 2018-02-20: 118 | Label: Lecture 119 | Slides: 120 | - {Kernel Methods: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/05a.kernel-methods.pdf"} 121 | Notes: 122 | - {Kernel Concept Check Questions: "https://davidrosenberg.github.io/mlcourse/Archive/2018/ConceptChecks/5-Lab-Check.pdf"} 123 | - {Kernel Concept Check Solutions: "https://davidrosenberg.github.io/mlcourse/Archive/2018/ConceptChecks/5-Lab-Check_sol.pdf"} 124 | References: 125 | - "SSBD Chapter 16" 126 | - {"A Survey of Kernels for Structured Data": "http://homepages.rpi.edu/~bennek/class/mmld/papers/p49-gartner.pdf"} 127 | 2018-02-21: 128 | Label: Lab 129 | Slides: 130 | - {CitySense: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/05b.citysense.pdf"} 131 | - {Maximum Likelihood: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/05c.MLE.pdf"} 132 | - 133 | Title: Week 6 134 | Events: 135 | 2018-02-27: 136 | Label: Lecture 137 | Slides: 138 | - {Conditional Probability Models: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/06a.conditional-probability-models.pdf"} 139 | Notes: 140 | - {"Exponential Distribution Example (First part)": "https://davidrosenberg.github.io/mlcourse/Notes/conditional-exponential-distributions.pdf"} 141 | - {Conditional Model Questions: "https://davidrosenberg.github.io/mlcourse/Archive/2018/ConceptChecks/10-Lab-Check.pdf"} 142 | - {Conditional Model Solutions: "https://davidrosenberg.github.io/mlcourse/Archive/2018/ConceptChecks/10-Lab-Check_sol.pdf"} 143 | 2018-02-28: 144 | Label: Lab 145 | Slides: 146 | - {Review for Midterm: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/06c.midterm-review.pdf"} 147 | - 148 | Title: Week 7 149 | Events: 150 | 2018-03-06: 151 | Label: Midterm Exam 152 | 2018-03-07: 153 | Label: Project Adviser Meetings 154 | - 155 | Title: Week 8 156 | Events: 157 | 2018-03-20: 158 | Label: Lecture 159 | Slides: 160 | - {'Bayesian Methods': "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/08a.bayesian-methods.pdf"} 161 | - {'Bayesian Conditional Models': "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/08b.bayesian-regression.pdf"} 162 | Notes: 163 | - {"Proportionality Review": "https://davidrosenberg.github.io/mlcourse/Notes/proportionality.pdf"} 164 | - {"Thompson Sampling for Bernoulli Bandits [Optional]": "https://davidrosenberg.github.io/mlcourse/in-prep/thompson-sampling-bernoulli.pdf"} 165 | References: 166 | - "Barber 9.1, 18.1" 167 | - "Bishop 3.3" 168 | 2018-03-21: 169 | Label: Canceled for snow 170 | - 171 | Title: Week 9 172 | Events: 173 | 2018-03-27: 174 | Label: Lecture 175 | Slides: 176 | - {'Bayesian Conditional Models': "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/09a.bayesian-regression.pdf"} 177 | Notes: 178 | - {"Proportionality Review": "https://davidrosenberg.github.io/mlcourse/Notes/proportionality.pdf"} 179 | - {"Multivariate Gaussians (draft)": "https://davidrosenberg.github.io/mlcourse/in-prep/multivariate-gaussian.pdf"} 180 | - {"Bayesian Linear Regression (draft)": "https://davidrosenberg.github.io/mlcourse/in-prep/bayesian-regression.pdf"} 181 | - {Bayesian Methods and Regression Questions: "https://davidrosenberg.github.io/mlcourse/Archive/2018/ConceptChecks/11-Lec-Check.pdf"} 182 | - {Bayesian Methods and Regression Solutions: "https://davidrosenberg.github.io/mlcourse/Archive/2018/ConceptChecks/11-Lec-Check_sol.pdf"} 183 | References: 184 | - "Barber 9.1, 18.1" 185 | - "Bishop 3.3" 186 | 2018-03-28: 187 | Label: Lab 188 | Slides: 189 | - {'Multiclass': "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/09b.multiclass.pdf"} 190 | Notes: 191 | - {"Multiclass Questions": "https://davidrosenberg.github.io/mlcourse/Archive/2018/ConceptChecks/7-Lec-Check.pdf"} 192 | - {"Multiclass Solutions": "https://davidrosenberg.github.io/mlcourse/Archive/2018/ConceptChecks/7-Lec-Check_sol.pdf"} 193 | References: 194 | - "SSBD Chapter 17" 195 | - {In Defense of One-Vs-All Classification: "http://www.jmlr.org/papers/v5/rifkin04a.html"} 196 | - {Reducing Multiclass to Binary: "http://www.jmlr.org/papers/volume1/allwein00a/allwein00a.pdf"} 197 | - 198 | Title: Week 10 199 | Events: 200 | 2018-04-03: 201 | Label: Lecture 202 | Slides: 203 | - {Classification and Regression Trees: "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/10a.trees.pdf"} 204 | References: 205 | - "JWHT 8.1 (Trees)" 206 | - "HTF 9.2 (Trees)" 207 | 2018-04-04: 208 | Label: Lab 209 | Slides: 210 | - {'Intro to the Bootstrap': "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/10b.bootstrap.pdf"} 211 | References: 212 | - "JWHT 5.2 (Bootstrap)" 213 | - "HTF 7.11 (Bootstrap)" 214 | - 215 | Title: Week 11 216 | Events: 217 | 2018-04-10: 218 | Label: Lecture 219 | Slides: 220 | - {'Bagging and Random Forests': "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/11a.bagging-random-forests.pdf"} 221 | - {'Adaboost [Optional]': "https://davidrosenberg.github.io/mlcourse/Archive/2017/Lectures/9b.adaboost.pdf"} 222 | Notes: 223 | - {"Trees, Bootstrap, Bagging, and RF Questions": "https://davidrosenberg.github.io/mlcourse/Archive/2018/ConceptChecks/9-Lec-Check.pdf"} 224 | - {"Trees, Bootstrap, Bagging, and RF Solutions": "https://davidrosenberg.github.io/mlcourse/Archive/2018/ConceptChecks/9-Lec-Check_sol.pdf"} 225 | References: 226 | - "JWHT 8.2 (Bagging/RF)" 227 | - "HTF 8.7, 15, 10 (Bagging/RF)" 228 | - {A Conversation with Jerry Friedman: "https://arxiv.org/pdf/1507.08502.pdf"} 229 | 2018-04-11: 230 | Label: Lab 231 | Slides: 232 | - {'Gradient Boosting': "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/11b.gradient-boosting.pdf"} 233 | Notes: 234 | - {"Gradient Boosting": "https://davidrosenberg.github.io/mlcourse/Archive/2017/Labs/9-GBM-Notes.pdf"} 235 | - {"Boosting Questions": "https://davidrosenberg.github.io/mlcourse/Archive/2018/ConceptChecks/boosting-Lec-Check.pdf"} 236 | - {"Boosting Solutions": "https://davidrosenberg.github.io/mlcourse/Archive/2018/ConceptChecks/boosting-Lec-Check_sol.pdf"} 237 | - {"gbm.py": "https://davidrosenberg.github.io/mlcourse/Archive/2017/Labs/gbm.py"} 238 | - {"Exponential Distribution Gradient Boosting": "https://davidrosenberg.github.io/mlcourse/Notes/conditional-exponential-distributions.pdf"} 239 | - {"Poisson Gradient Boosting": "https://davidrosenberg.github.io/mlcourse/Notes/poisson-gradient-boosting.pdf"} 240 | References: 241 | - {Friedman's GBM Paper: http://statweb.stanford.edu/~jhf/ftp/trebst.pdf} 242 | - {Ridgeway's GBM Guide: http://www.saedsayad.com/docs/gbm2.pdf} 243 | - {XGBoost Paper: http://arxiv.org/abs/1603.02754} 244 | # - {"Bühlmann and Hothorn's Boosting Paper": https://projecteuclid.org/euclid.ss/1207580163} 245 | - 246 | Title: Week 12 247 | Events: 248 | 2018-04-17: 249 | Label: Lecture 250 | Slides: 251 | - {'Neural Networks': "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/12a.neural-networks.pdf"} 252 | - {'Back Propagation': "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/12b.backpropagation.pdf"} 253 | Notes: 254 | References: 255 | - {'Yes you should understand backprop (Karpathy)': "https://medium.com/@karpathy/yes-you-should-understand-backprop-e2f06eab496b"} 256 | - {'Challenges with backprop (Karpathy Lecture)': "https://youtu.be/gYpoJMlgyXA?t=13m44s"} 257 | 2018-04-18: 258 | Label: Project Adviser Meetings 259 | - 260 | Title: Week 13 261 | Events: 262 | 2018-04-24: 263 | Label: Lecture 264 | Video: "https://youtu.be/tgCIAft_W24?t=48m48s" 265 | Slides: 266 | - {'k-Means (See Video Link)': "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/13a.k-means.pdf"} 267 | - {'Gaussian Mixture Models': "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/13b.mixture-models.pdf"} 268 | - {'General EM Algorithm': "https://davidrosenberg.github.io/mlcourse/Archive/2018/Lectures/13c.EM-algorithm.pdf"} 269 | Notes: 270 | References: 271 | - "HTF, 13.2.1 (k-means)" 272 | - "Bishop 9.2,9.3 (GMM/EM)" 273 | - {"An Alternative to EM for GMM [Optional]": "https://arxiv.org/pdf/1706.03267.pdf"} 274 | 2018-04-25: 275 | Label: Course Review 276 | - 277 | Title: Week 14 278 | Events: 279 | 2018-05-01: 280 | Label: Lecture 281 | Slides: 282 | - {"Feature Importance (ipynb -- view with damianavila/RISE)": "https://davidrosenberg.github.io/mlcourse/Archive/2018/Labs/FeatureImportance/feature-importance-slides.ipynb"} 283 | Notes: 284 | References: 285 | - "See references in ipynb" 286 | 2018-05-02: 287 | Label: Project advisor meetings. 288 | -------------------------------------------------------------------------------- /data/site-instructions.md: -------------------------------------------------------------------------------- 1 | When this-week.yml has the string "null" in it, it's not included at the top 2 | -------------------------------------------------------------------------------- /data/this-week.yml: -------------------------------------------------------------------------------- 1 | null 2 | -------------------------------------------------------------------------------- /deploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ## Run this from project root 3 | 4 | set -e # Exit with nonzero exit code if anything fails 5 | 6 | SOURCE_BRANCH="master" 7 | TARGET_BRANCH="gh-pages" 8 | 9 | function doCompile { 10 | ./build.sh 11 | } 12 | 13 | # Save some useful information 14 | REPO=`git config remote.origin.url` 15 | SSH_REPO=${REPO/https:\/\/github.com\//git@github.com:} 16 | SHA=`git rev-parse --verify HEAD` 17 | 18 | # Clone the existing gh-pages for this repo into out/ 19 | # Create a new empty branch if gh-pages doesn't exist yet (should only happen on first deply) 20 | rm -rf out 21 | git clone $REPO out 22 | cd out 23 | git checkout $TARGET_BRANCH || git checkout --orphan $TARGET_BRANCH 24 | cd .. 25 | 26 | # Clean out existing contents 27 | rm -rf out/**/* || exit 0 28 | 29 | # Run our compile script 30 | doCompile 31 | 32 | # Now let's go have some fun with the cloned repo 33 | cd out 34 | 35 | # Commit the "changes", i.e. the new version. 36 | # The delta will show diffs between new and old versions. 37 | git add --all . 38 | git commit -m "Deploy to GitHub Pages: ${SHA}" 39 | 40 | # Now that we're all set up, we can push. 41 | git push $REPO $TARGET_BRANCH 42 | -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/favicon.ico -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /images/barber-1x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/barber-1x.jpg -------------------------------------------------------------------------------- /images/barber-2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/barber-2x.jpg -------------------------------------------------------------------------------- /images/barber-3x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/barber-3x.jpg -------------------------------------------------------------------------------- /images/barber-original.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/barber-original.jpg -------------------------------------------------------------------------------- /images/bishop-1x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/bishop-1x.jpg -------------------------------------------------------------------------------- /images/bishop-2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/bishop-2x.jpg -------------------------------------------------------------------------------- /images/bishop-3x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/bishop-3x.jpg -------------------------------------------------------------------------------- /images/bishop-original.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/bishop-original.jpg -------------------------------------------------------------------------------- /images/boyd-1x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/boyd-1x.jpg -------------------------------------------------------------------------------- /images/boyd-2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/boyd-2x.jpg -------------------------------------------------------------------------------- /images/boyd-original.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/boyd-original.jpg -------------------------------------------------------------------------------- /images/geron-original.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/geron-original.jpg -------------------------------------------------------------------------------- /images/hastie-1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/hastie-1x.png -------------------------------------------------------------------------------- /images/hastie-2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/hastie-2x.jpg -------------------------------------------------------------------------------- /images/hastie-3x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/hastie-3x.jpg -------------------------------------------------------------------------------- /images/hastie-original.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/hastie-original.jpg -------------------------------------------------------------------------------- /images/james-1x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/james-1x.jpg -------------------------------------------------------------------------------- /images/james-2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/james-2x.jpg -------------------------------------------------------------------------------- /images/james-3x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/james-3x.jpg -------------------------------------------------------------------------------- /images/james-original.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/james-original.jpg -------------------------------------------------------------------------------- /images/murphy-1x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/murphy-1x.jpg -------------------------------------------------------------------------------- /images/murphy-2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/murphy-2x.jpg -------------------------------------------------------------------------------- /images/murphy-3x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/murphy-3x.jpg -------------------------------------------------------------------------------- /images/murphy-original.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/murphy-original.jpg -------------------------------------------------------------------------------- /images/people/DFL.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/people/DFL.jpg -------------------------------------------------------------------------------- /images/people/ben.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/people/ben.jpg -------------------------------------------------------------------------------- /images/people/bonnie.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/people/bonnie.jpg -------------------------------------------------------------------------------- /images/people/brett.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/people/brett.jpg -------------------------------------------------------------------------------- /images/people/brian.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/people/brian.jpg -------------------------------------------------------------------------------- /images/people/daniel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/people/daniel.jpg -------------------------------------------------------------------------------- /images/people/david.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/people/david.jpg -------------------------------------------------------------------------------- /images/people/elliott.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/people/elliott.jpg -------------------------------------------------------------------------------- /images/people/kurt.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/people/kurt.jpg -------------------------------------------------------------------------------- /images/people/lisa.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/people/lisa.jpg -------------------------------------------------------------------------------- /images/people/mi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/people/mi.jpg -------------------------------------------------------------------------------- /images/people/nan.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/people/nan.jpg -------------------------------------------------------------------------------- /images/people/sanyam.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/people/sanyam.jpg -------------------------------------------------------------------------------- /images/people/utku.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/people/utku.jpg -------------------------------------------------------------------------------- /images/people/vitaly.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/people/vitaly.jpg -------------------------------------------------------------------------------- /images/people/zemin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/people/zemin.jpg -------------------------------------------------------------------------------- /images/provost-fawcett-original.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/provost-fawcett-original.jpg -------------------------------------------------------------------------------- /images/shalev-shwartz-original.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/images/shalev-shwartz-original.jpg -------------------------------------------------------------------------------- /index.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | DS-GA 1003 / CSCI-GA 2567: Machine Learning, Spring 2018 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 21 | 22 |
    23 |

    24 | Machine Learning 25 | 26 | DS-GA 1003 / CSCI-GA 2567 · Spring 2018 · 27 | NYU Center for Data Science 28 | 29 |

    30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 |
    InstructorDavid Rosenberg
    LectureTuesday 5:20pm–7pm, GSACL C95 (238 Thompson St.)
    LabWednesday 6:45pm–7:35pm, MEYER 121 (4 Washington Pl)
    Office HoursInstructor: Wednesdays 5:00-6:00pm CDS (60 5th Ave.), 6th floor, Room 650
    Section Leader: Wednesdays 7:45-8:45pm, CDS (60 5th Ave.) Room C15
    Graders: Mondays 3:30-4:30pm CDS (60 5th Ave.), 6th floor, Room 660
    55 | 56 | {{> this-week thisWeek }} 57 |
    58 |
    59 |

    About This Course

    60 | 61 |
    62 |

    This course covers a wide variety of topics in machine learning and statistical modeling. While mathematical methods and theoretical aspects will be covered, the primary goal is to provide students with the tools and principles needed to solve the data science problems found in practice. This course also serves as a foundation on which more specialized courses and further independent study can build.

    63 | 64 |

    This course was designed as part of the core curriculum for the Center for Data Science's Masters degree in Data Science. Other interested students who satisfy the prerequisites are welcome to take the class as well. This class is intended as a continuation of DS-GA-1001 Intro to Data Science, which covers some important, fundamental data science topics that may not be explicitly covered in this DS-GA class (e.g. data cleaning, cross-validation, and sampling bias).

    65 | 66 |

    We will use Piazza for class discussion. Rather than emailing questions to the teaching staff, please post your questions on Piazza, where they will be answered by the instructor, TAs, graders, and other students. For questions that are not specific to the class, you are also encouraged to post to Stack Overflow for programming questions and Cross Validated for statistics and machine learning questions. Please also post a link to these postings in Piazza, so others in the class can answer the questions and benefit from the answers. 67 | 68 | 69 | 70 |

    Other information:

    71 | 79 |
    80 | 81 |
    82 |

    Prerequisites

    83 |
      84 |
    • DS-GA-1001: Intro to Data Science or its equivalent
    • 85 |
    • DS-GA-1002: Statistical and Mathematical Methods or its equivalent
    • 86 |
    • Solid mathematical background, equivalent to a 1-semester undergraduate course in each of the following: linear algebra, multivariate calculus (primarily differential calculus), probability theory, and statistics. (The coverage in the 2015 version of DS-GA 1002, linked above, is sufficient.)
    • 87 |
    • Python programming required for most homework assignments.
    • 88 |
    • Recommended: Computer science background up to a "data structures and algorithms" course
    • 89 |
    • Recommended: At least one advanced, proof-based mathematics course
    • 90 |
    • Some prerequisites may be waived with permission of the instructor
    • 91 |
    • You can also self-assess your preparation by filling out the Prerequisite Questionnaire
    • 92 |
    93 |
    94 |
    95 |

    Grading

    96 |

    Homework (40%) + Midterm Exam (20%) + Final Exam (20%) + Project (20%)

    97 |

    98 | Many homework assignments will have problems designated as “optional”. At the end of the semester, strong performance on these problems may lift the final course grade by up to half a letter grade (e.g. B+ to A- or A- to A), especially for borderline grades. You should view the optional problems primarily as a way to engage with more material, if you have the time. Along with the performance on optional problems, we will also consider significant contributions to Piazza and in-class discussions for boosting a borderline grade. 99 |

    100 |
    101 | 102 |
    103 |

    Important Dates

    104 |
      105 |
    • Midterm Exam (100 min) Tuesday, March 6th, 5:20–7pm.
    • 106 |
    • Final Exam (100 min) Tuesday, May 15th, 6-7:50pm (confirmed).
    • 107 |
    • See Assignments section for homework-related deadlines.
    • 108 |
    • See Project section for project-related deadlines.
    • 109 |
    110 |
    111 | 112 | 113 |
    114 | 115 |
    116 |

    Resources

    117 | 118 |
    119 |

    Textbooks

    120 | 121 | The cover of Elements of Statistical Learning 122 | 123 | The cover of An Introduction to Statistical Learning 124 | 125 | The cover of Understanding Machine Learning: From Theory to Algorithms 126 | 127 | The cover of Pattern Recognition and Machine Learning 128 | 129 | The cover of Bayesian Reasoning and Machine Learning 130 | 131 |
    132 | 133 |
    The 134 | Elements of Statistical Learning (Hastie, Friedman, and Tibshirani) 135 |
    This will be our main textbook for L1 and L2 regularization, trees, bagging, random forests, and boosting. It's written by three statisticians who invented many of the techniques discussed. There's an easier version of this book that covers many of the same topics, described below. (Available for free as a PDF.) 136 | 137 |
    An Introduction to Statistical Learning (James, Witten, Hastie, and Tibshirani) 138 |
    This book is written by two of the same authors as The Elements of Statistical Learning. It's much less intense mathematically, and it's good for a lighter introduction to the topics. (Available for free as a PDF.) 139 | 140 |
    Understanding Machine Learning: From Theory to Algorithms (Shalev-Shwartz and Ben-David) 141 |
    Last year this was our primary reference for kernel methods and multiclass classification, and we may use it even more this year. Covers a lot of theory that we don't go into, but it would be a good supplemental resource for a more theoretical course, such as Mohri's Foundations of Machine Learning course. (Available for free as a PDF.) 142 | 143 |
    Pattern Recognition and Machine Learning (Christopher Bishop) 144 |
    Our primary reference for probabilistic methods, including bayesian regression, latent variable models, and the EM algorithm. It's highly recommended, but unfortunately not free online. 145 | 146 |
    Bayesian Reasoning and Machine Learning (David Barber) 147 |
    A very nice resource for our topics in probabilistic modeling, and a possible substitute for the Bishop book. Would serve as a good supplemental reference for a more advanced course in probabilistic modeling, such as DS-GA 1005: Inference and Representation (Available for free as a PDF.) 148 |
    149 | 150 |
    Hands-On Machine Learning with Scikit-Learn and TensorFlow (Aurélien Géron) 151 |
    This is a practical guide to machine learning that corresponds fairly well with the content and level of our course. While most of our homework is about coding ML from scratch with numpy, this book makes heavy use of scikit-learn and TensorFlow. Comfort with the first two chapters of this book would be part of the ideal preparation for this course, and it will also be a handy reference for your projects and work beyond this course, when you'll want to make use of existing ML packages, rather than rolling your own.
    152 | 153 |
    Data Science for Business (Provost and Fawcett) 154 |
    Ideally, this would be everybody's first book on machine learning. The intended audience is both the ML practitioner and the ML product manager. It's full of important core concepts and practical wisdom. The math is so minimal that it's perfect for reading on your phone, and I encourage you to read it in parallel to doing this class, especially if you haven't taken DS-GA 1001.
    155 | 156 | 157 | 158 |
    159 | 160 |
    161 |

    Other tutorials and references

    162 | 163 | 171 |
    172 | 173 |
    174 |

    Software

    175 | 176 |
      177 |
    • NumPy is "the fundamental package for scientific computing with Python." Our homework assignments will use NumPy arrays extensively. 178 |
    • scikit-learn is a comprehensive machine learning toolkit for Python. We won't use this for most of the homework assignments, since we'll be coding things from scratch. However, you may want to run the scikit-learn version of the algorithms to check that your own outputs are correct. Most people will use it for their final projects. Also, studying the source code can be a good learning experience. 179 |
    180 |
    181 |
    182 | 183 |
    184 |

    Lectures

    185 | 186 | 191 | 192 | {{> lectures lectures }} 193 |
    194 |
    195 |

    Assignments

    196 | 197 |
    198 |

    Late Policy: Homeworks are due at {{assignmentsFrontmatter.[Due time]}} on the date specified. Homeworks will still be accepted for 48 hours after this time but will have a 20% penalty.

    199 | 200 |

    Collaboration Policy: You may discuss problems with your classmates. However, you must write up the homework solutions and the code from scratch, without referring to notes from your joint session. In your solution to each problem, you must write down the names of any person with whom you discussed the problem—this will not affect your grade.

    201 | 202 |

    Homework Submission: Homework should be submitted through Gradescope. If you have not used Gradescope before, please watch this short video: "For students: submitting homework." At the beginning of the semester, you will be added to the Gradescope class roster. This will give you access to the course page, and the assignment submission form. To submit assignments, you will need to:

    203 |
      204 |
    1. Upload a single PDF document containing all the math, code, plots, and exposition required for each problem.
    2. 205 |
    3. Where homework assignments are divided into sections, please begin each section on a new page.
    4. 206 |
    5. You will then select the appropriate page ranges for each homework problem, as described in the "submitting homework" video.
    6. 207 |
    208 |

    Homework Feedback: Check Gradescope to get your scores on each individual problem, as well as comments on your answers. Since Gradescope cannot distinguish between required and optional problems, final homework scores, separated into required and optional parts, will be posted on NYUClasses.

    209 |
    210 | 211 | {{> assignments assignments }} 212 |
    213 | 214 |
    215 |

    Project

    216 |
    217 |

    Overview

    218 |

    The project is your opportunity for in-depth engagement with a data science problem. In job interviews, it's often your course projects that you end up discussing, so it has some importance even beyond this class. That said, it's better to pick a project that you will be able to go deep with (in terms of trying different methods, feature engineering, error analysis, etc.), than choosing a very ambitious project that requires so much setup that you will only have time to try one or two approaches.

    219 |
    220 |
    221 |

    Key Dates

    222 |
      223 |
    • Feb 26 (Mon 10pm): Deadline for choosing project groups
    • 224 |
    • March 2 (Fri 10pm): Email short description (few sentences) of project idea(s) to adviser, along with personal intros
    • 225 |
    • March 7 (Wed, Lab time): First meeting with advisers. Each group will give a 5-minute presentation of their project idea to their assigned project adviser, followed by brief discussion.
    • 226 |
    • March 22 (Thurs 10pm): Project Proposals Due
    • 227 |
    • Apr 18th (Wed, Lab time): Second meeting with advisers
    • 228 |
    • May 2nd (Wed, Lab time): Third meeting with advisers
    • 229 |
    • May 17th or May 18th, depending on adviser: Final Project Reports Due to Advisers
    • 230 |
    231 |
    232 | 233 |
    234 |

    Guidelines for Project Topics

    235 |

    A good project for this class is one that's a real "problem", in the sense that you have something you want to accomplish, and it's not necessarily clear from the beginning the best approach. The techiques used should be relevant to our class, so most likely you will be building a prediction system. A probabilistic model would also be acceptable, though we will not be covering these topics until later in the semester.

    236 | 237 |

    To be clear, the following approaches would be less than ideal:

    238 |
      239 |
    1. Finding an interesting ML algorithm, implementing it, and seeing how it works on some data. This is not appropriate because I want your choice of methods to be driven by the problem you are trying to solve, and not the other way around.
    2. 240 |
    3. Choosing a well-known problem (e.g. MNIST digit classification or the Netflix problem) and trying out some of our ML methods on it. This is better than the previous example, but with a very well-established dataset, a lot of the most important and challenging parts of real-world data science are left out, including defining the problem, defining the success metric, and finding the right way to encode the data.
    4. 241 |
    5. Choosing a problem related to predicting stock prices. Historically, these projects are the most troubled. Interestingly, our project advisers who have worked in this field are the ones who advise against this most strongly.
    6. 242 |
    243 |
    244 |
    245 |

    Project proposal guidelines

    246 |

    The project proposal should be roughly 2 pages, though it can be longer if you want to include figures or sample data that will be helpful to your presentation. Your proposal should do the following:

    247 |
      248 |
    1. Clearly explain the high-level problem you are trying to solve (e.g. predict movie ratings, predict the outcome of a court case, ...).
    2. 249 |
    3. Identify the data set or data sets that you will be using. You should give a clear description of the characteristics of the data (how many examples, what kinds of features do we have for each example, are there issues with missing data or bad data, etc.).
    4. 250 |
    5. How will you evaluate performance? In certain settings, you may want to try a few different performance measures.
    6. 251 |
    7. Identify a few "baseline algorithms". These are simple algorithms for solving the problem, such as always predicting the majority class for a classification problem, using a small set of decision rules designed by hand, or using a ridge regression model on a basic feature set. Ideally, you will be able to report the performance of a couple baseline algorithms in your proposal. The goal will be to beat the baseline, so if the baseline is already quite high, you will have a challenge.
    8. 252 |
    9. What methods do you plan to try to solve your problem, along with a rough timeline. Methods include data preprocessing, feature generation, and the ML models you'll be trying. Once you start your investigation, it's best to use an iterative approach, where the method you choose next is based on an understanding of the results of the previous step.
    10. 253 |
    254 |
    255 |
    256 |

    Project writeup guidelines

    257 |

    The main objective of the project writeup is to explain what you did in a self-contained report. No strict guidelines on the format of the report, but the goal is to make it something you'd be proud to share with a potential employer. Some of the content will resemble your project proposals. Make sure to:

    258 |
      259 |
    1. Clearly explain the high-level problem you are trying to solve (e.g. predict movie ratings, predict the outcome of a court ase, ...).
    2. 260 |
    3. Identify the data set or data sets that you will be using. You should give a clear description of the characteristics of the ata (how many examples, what kinds of features do we have for each example, are there issues with missing data or bad data, etc.).
    4. 261 |
    5. How did you evaluate performance and measure success?
    6. 262 |
    7. What did you use for features, and explain any feature engineering that you did.
    8. 263 |
    9. What did you do to attempt to improve performance over your baseline algorithms (e.g. error analysis, new features, new parameter tuning,...)
    10. 264 |
    11. What challenges did you encounter? What insights into your problem did you get?
    12. 265 |
    13. What would be good next steps to take if you were to continue this work?
    14. 266 |
    15. If you got ideas from other sources, please cite them.
    16. 267 |
    268 | 269 |
    270 |
    271 |

    Some Previous Projects

    272 | 281 |
    282 | 283 |
    284 |

    Some Public Data Sets (just to get you thinking)

    285 | 297 |
    298 |
    299 |
    300 |

    People

    301 | 302 |
    303 |

    Instructor

    304 | 305 |
    306 | A photo of David Rosenberg 307 |
    308 |

    David Rosenberg

    309 | 310 |

    David is a data scientist in the office of the CTO at Bloomberg L.P. Formerly he was Chief Scientist of YP Mobile Labs at YP.

    311 |
    312 |
    313 |
    314 | 315 |
    316 |

    Section Leader

    317 | 318 |
    319 | A photo of Ben Jakubowski 320 |
    321 |

    Ben Jakubowski

    322 |

    Ben is a 2017 NYU Data Science MS graduate. He currently works as a data scientist for the University of Chicago's Crime Lab New York (CLNY), where his portfolio includes several prediction problems that arise in criminal justice and social policy.

    323 |
    324 |
    325 |
    326 |
    327 |

    Graders

    328 | 329 |
      330 |
    • 331 | A photo of Lisa Ren 332 |
      333 |

      Lisa Ren (Head Grader)

      334 | 335 |

      Lisa is a second-year student in the Data Science program at NYU.

      336 |
      337 |
    • 338 |
    • 339 | A photo of Utku Evci 340 |
      341 |

      Utku Evci

      342 |

      Utku is a second year Courant Computer Science M.Sc. student from Turkey interested in Neural Networks and their energy landscape.

      343 |
      344 |
    • 345 |
    • 346 | A photo of Mi Fang 347 |
      348 |

      Mi Fang

      349 |

      Mi is a second year student in CS department at Courant.

      350 |
      351 |
    • 352 |
    • 353 | A photo of Sanyam Kapoor 354 |
      355 |

      Sanyam Kapoor

      356 |

      Sanyam is a Masters student in Computer Science at NYU Courant and currently works as a Researcher in Machine Learning at the NYU Center for Data Science.

      357 |
      358 |
    • 359 |
    • 360 | A photo of Nan Wu 361 |
      362 |

      Nan Wu

      363 |

      Nan is a second year student in the Data Science program at NYU.

      364 |
      365 |
    • 366 |
    • 367 | A photo of Zemin Yu 368 |
      369 |

      Zemin Yu

      370 |

      Zemin is a second year student in the Data Science program at NYU.

      371 |
      372 |
    • 373 |
    374 |
    375 | 376 | 377 |
    378 |

    Project Advisers

    379 | 380 |
      381 | 388 |
    • 389 | A photo of Kurt Miller 390 |
      391 |

      Kurt Miller

      392 |

      Kurt is a researcher at the quantitative hedge fund PDT Partners.

      393 |
      394 |
    • 395 |
    • 396 | A photo of Brian Dalessandro 397 |
      398 |

      Brian d'Alessandro

      399 |

      Brian is Director of Data Science at Zocdoc, and he was formerly the VP of Data Science at Dstillery. He is also an Adjunct Professor of Data Science at NYU Stern School of Business.

      400 |
      401 |
    • 402 |
    • 403 | A photo of Bonnie Ray 404 |
      405 |

      Bonnie Ray

      406 |

      Bonnie is VP Data Science at Pegged Software. Prior to Pegged, she was Director, Cognitive Algorithms, at IBM Research and has also served on the faculty at the New Jersey Institute of Technology.

      407 |
      408 |
    • 409 | 410 |
    • 411 | A photo of Daniel Chen 412 |
      413 |

      Daniel L. Chen

      414 |

      Daniel is at the Institute for Advanced Studies 415 | in Toulouse and Toulouse School of Economics. He is a former Chair of Law and Economics at 416 | ETH Zurich (2012-2015), Duke Assistant Professor of Law, Economics, and Public Policy (2010-2012), and Kauffman Fellow at the University of Chicago Law School (2009-2010).

      417 |
      418 |
    • 419 |
    • 420 | A photo of Vitaly Kuznetsov 421 |
      422 |

      Vitaly Kuznetsov

      423 |

      Vitaly is a Research Scientist at Google Research, New York.

      424 |
      425 |
    • 426 |
    • 427 | A photo of Elliott Ash 428 |
      429 |

      Elliott Ash

      430 |

      Elliott is a Visiting Scholar at Princeton 431 | University's Woodrow Wilson School of Public Affairs and 432 | Assistant Professor of Economics at University of Warwick. 433 | His research combines methods from applied 434 | microeconometrics, natural language processing, and machine 435 | learning to provide empirical evidence on the socioeconomic 436 | impacts of legal and political institutions.

      437 |
      438 |
    • 439 |
    • 440 | A photo of David Frohardt-Lane 441 |
      442 |

      David Frohardt-Lane

      443 |

      David Frohardt-Lane is a portfolio manager at 444 | 3Red Trading, overseeing a quantitative trading team. 445 | Previously he worked as a trader at GETCO for 8 years. He is 446 | a former professional gambler who has been involved sports 447 | analytics for over 15 years.

      448 |
      449 |
    • 450 | 451 | 452 |
    453 |
    454 | 455 | 456 |
    457 | 458 | 461 | 462 | 463 | 464 | 474 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dsga1003", 3 | "requires": true, 4 | "lockfileVersion": 1, 5 | "dependencies": { 6 | "balanced-match": { 7 | "version": "1.0.0", 8 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 9 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 10 | "dev": true 11 | }, 12 | "brace-expansion": { 13 | "version": "1.1.11", 14 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 15 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 16 | "dev": true, 17 | "requires": { 18 | "balanced-match": "^1.0.0", 19 | "concat-map": "0.0.1" 20 | } 21 | }, 22 | "concat-map": { 23 | "version": "0.0.1", 24 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 25 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 26 | "dev": true 27 | }, 28 | "debug": { 29 | "version": "2.6.0", 30 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.0.tgz", 31 | "integrity": "sha1-vFlryr52F/Edn6FTYe3tVgi4SZs=", 32 | "dev": true, 33 | "requires": { 34 | "ms": "0.7.2" 35 | } 36 | }, 37 | "fs.realpath": { 38 | "version": "1.0.0", 39 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 40 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 41 | "dev": true 42 | }, 43 | "glob": { 44 | "version": "7.1.3", 45 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", 46 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", 47 | "dev": true, 48 | "requires": { 49 | "fs.realpath": "^1.0.0", 50 | "inflight": "^1.0.4", 51 | "inherits": "2", 52 | "minimatch": "^3.0.4", 53 | "once": "^1.3.0", 54 | "path-is-absolute": "^1.0.0" 55 | } 56 | }, 57 | "handlebars": { 58 | "version": "4.0.11", 59 | "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", 60 | "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", 61 | "dev": true, 62 | "requires": { 63 | "async": "^1.4.0", 64 | "optimist": "^0.6.1", 65 | "source-map": "^0.4.4", 66 | "uglify-js": "^2.6" 67 | }, 68 | "dependencies": { 69 | "align-text": { 70 | "version": "0.1.4", 71 | "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", 72 | "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", 73 | "dev": true, 74 | "requires": { 75 | "kind-of": "^3.0.2", 76 | "longest": "^1.0.1", 77 | "repeat-string": "^1.5.2" 78 | } 79 | }, 80 | "amdefine": { 81 | "version": "1.0.1", 82 | "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", 83 | "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", 84 | "dev": true 85 | }, 86 | "async": { 87 | "version": "1.5.2", 88 | "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", 89 | "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", 90 | "dev": true 91 | }, 92 | "camelcase": { 93 | "version": "1.2.1", 94 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", 95 | "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", 96 | "dev": true, 97 | "optional": true 98 | }, 99 | "center-align": { 100 | "version": "0.1.3", 101 | "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", 102 | "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", 103 | "dev": true, 104 | "optional": true, 105 | "requires": { 106 | "align-text": "^0.1.3", 107 | "lazy-cache": "^1.0.3" 108 | } 109 | }, 110 | "cliui": { 111 | "version": "2.1.0", 112 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", 113 | "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", 114 | "dev": true, 115 | "optional": true, 116 | "requires": { 117 | "center-align": "^0.1.1", 118 | "right-align": "^0.1.1", 119 | "wordwrap": "0.0.2" 120 | }, 121 | "dependencies": { 122 | "wordwrap": { 123 | "version": "0.0.2", 124 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", 125 | "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", 126 | "dev": true, 127 | "optional": true 128 | } 129 | } 130 | }, 131 | "decamelize": { 132 | "version": "1.2.0", 133 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 134 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 135 | "dev": true, 136 | "optional": true 137 | }, 138 | "is-buffer": { 139 | "version": "1.1.6", 140 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 141 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", 142 | "dev": true 143 | }, 144 | "kind-of": { 145 | "version": "3.2.2", 146 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 147 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 148 | "dev": true, 149 | "requires": { 150 | "is-buffer": "^1.1.5" 151 | } 152 | }, 153 | "lazy-cache": { 154 | "version": "1.0.4", 155 | "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", 156 | "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", 157 | "dev": true, 158 | "optional": true 159 | }, 160 | "longest": { 161 | "version": "1.0.1", 162 | "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", 163 | "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", 164 | "dev": true 165 | }, 166 | "minimist": { 167 | "version": "0.0.10", 168 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", 169 | "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", 170 | "dev": true 171 | }, 172 | "optimist": { 173 | "version": "0.6.1", 174 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", 175 | "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", 176 | "dev": true, 177 | "requires": { 178 | "minimist": "~0.0.1", 179 | "wordwrap": "~0.0.2" 180 | } 181 | }, 182 | "repeat-string": { 183 | "version": "1.6.1", 184 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 185 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", 186 | "dev": true 187 | }, 188 | "right-align": { 189 | "version": "0.1.3", 190 | "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", 191 | "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", 192 | "dev": true, 193 | "optional": true, 194 | "requires": { 195 | "align-text": "^0.1.1" 196 | } 197 | }, 198 | "source-map": { 199 | "version": "0.4.4", 200 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", 201 | "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", 202 | "dev": true, 203 | "requires": { 204 | "amdefine": ">=0.0.4" 205 | } 206 | }, 207 | "uglify-js": { 208 | "version": "2.8.29", 209 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", 210 | "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", 211 | "dev": true, 212 | "optional": true, 213 | "requires": { 214 | "source-map": "~0.5.1", 215 | "uglify-to-browserify": "~1.0.0", 216 | "yargs": "~3.10.0" 217 | }, 218 | "dependencies": { 219 | "source-map": { 220 | "version": "0.5.7", 221 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 222 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 223 | "dev": true, 224 | "optional": true 225 | } 226 | } 227 | }, 228 | "uglify-to-browserify": { 229 | "version": "1.0.2", 230 | "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", 231 | "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", 232 | "dev": true, 233 | "optional": true 234 | }, 235 | "window-size": { 236 | "version": "0.1.0", 237 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", 238 | "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", 239 | "dev": true, 240 | "optional": true 241 | }, 242 | "wordwrap": { 243 | "version": "0.0.3", 244 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", 245 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", 246 | "dev": true 247 | }, 248 | "yargs": { 249 | "version": "3.10.0", 250 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", 251 | "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", 252 | "dev": true, 253 | "optional": true, 254 | "requires": { 255 | "camelcase": "^1.0.2", 256 | "cliui": "^2.1.0", 257 | "decamelize": "^1.0.0", 258 | "window-size": "0.1.0" 259 | } 260 | } 261 | } 262 | }, 263 | "inflight": { 264 | "version": "1.0.6", 265 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 266 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 267 | "dev": true, 268 | "requires": { 269 | "once": "^1.3.0", 270 | "wrappy": "1" 271 | } 272 | }, 273 | "inherits": { 274 | "version": "2.0.3", 275 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 276 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 277 | "dev": true 278 | }, 279 | "js-yaml": { 280 | "version": "3.10.0", 281 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", 282 | "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", 283 | "dev": true, 284 | "requires": { 285 | "argparse": "^1.0.7", 286 | "esprima": "^4.0.0" 287 | }, 288 | "dependencies": { 289 | "argparse": { 290 | "version": "1.0.9", 291 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", 292 | "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", 293 | "dev": true, 294 | "requires": { 295 | "sprintf-js": "~1.0.2" 296 | } 297 | }, 298 | "esprima": { 299 | "version": "4.0.0", 300 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", 301 | "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", 302 | "dev": true 303 | }, 304 | "sprintf-js": { 305 | "version": "1.0.3", 306 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 307 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 308 | "dev": true 309 | } 310 | } 311 | }, 312 | "minimatch": { 313 | "version": "3.0.4", 314 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 315 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 316 | "dev": true, 317 | "requires": { 318 | "brace-expansion": "^1.1.7" 319 | } 320 | }, 321 | "moment": { 322 | "version": "2.20.1", 323 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.20.1.tgz", 324 | "integrity": "sha512-Yh9y73JRljxW5QxN08Fner68eFLxM5ynNOAw2LbIB1YAGeQzZT8QFSUvkAz609Zf+IHhhaUxqZK8dG3W/+HEvg==", 325 | "dev": true 326 | }, 327 | "ms": { 328 | "version": "0.7.2", 329 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", 330 | "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", 331 | "dev": true 332 | }, 333 | "once": { 334 | "version": "1.4.0", 335 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 336 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 337 | "dev": true, 338 | "requires": { 339 | "wrappy": "1" 340 | } 341 | }, 342 | "path-is-absolute": { 343 | "version": "1.0.1", 344 | "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 345 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 346 | "dev": true 347 | }, 348 | "slugg": { 349 | "version": "1.2.1", 350 | "resolved": "https://registry.npmjs.org/slugg/-/slugg-1.2.1.tgz", 351 | "integrity": "sha1-51KvIkGvPycURjxd4iXOpHYIdAo=", 352 | "dev": true 353 | }, 354 | "stylus": { 355 | "version": "0.54.5", 356 | "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz", 357 | "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=", 358 | "dev": true, 359 | "requires": { 360 | "css-parse": "1.7.x", 361 | "debug": "*", 362 | "glob": "7.0.x", 363 | "mkdirp": "0.5.x", 364 | "sax": "0.5.x", 365 | "source-map": "0.1.x" 366 | }, 367 | "dependencies": { 368 | "amdefine": { 369 | "version": "1.0.1", 370 | "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", 371 | "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", 372 | "dev": true 373 | }, 374 | "balanced-match": { 375 | "version": "1.0.0", 376 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 377 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 378 | "dev": true 379 | }, 380 | "brace-expansion": { 381 | "version": "1.1.8", 382 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 383 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 384 | "dev": true, 385 | "requires": { 386 | "balanced-match": "^1.0.0", 387 | "concat-map": "0.0.1" 388 | } 389 | }, 390 | "concat-map": { 391 | "version": "0.0.1", 392 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 393 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 394 | "dev": true 395 | }, 396 | "css-parse": { 397 | "version": "1.7.0", 398 | "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz", 399 | "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=", 400 | "dev": true 401 | }, 402 | "fs.realpath": { 403 | "version": "1.0.0", 404 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 405 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 406 | "dev": true 407 | }, 408 | "glob": { 409 | "version": "7.0.6", 410 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", 411 | "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", 412 | "dev": true, 413 | "requires": { 414 | "fs.realpath": "^1.0.0", 415 | "inflight": "^1.0.4", 416 | "inherits": "2", 417 | "minimatch": "^3.0.2", 418 | "once": "^1.3.0", 419 | "path-is-absolute": "^1.0.0" 420 | } 421 | }, 422 | "inflight": { 423 | "version": "1.0.6", 424 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 425 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 426 | "dev": true, 427 | "requires": { 428 | "once": "^1.3.0", 429 | "wrappy": "1" 430 | } 431 | }, 432 | "inherits": { 433 | "version": "2.0.3", 434 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 435 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 436 | "dev": true 437 | }, 438 | "minimatch": { 439 | "version": "3.0.4", 440 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 441 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 442 | "dev": true, 443 | "requires": { 444 | "brace-expansion": "^1.1.7" 445 | } 446 | }, 447 | "minimist": { 448 | "version": "0.0.8", 449 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 450 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 451 | "dev": true 452 | }, 453 | "mkdirp": { 454 | "version": "0.5.1", 455 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 456 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 457 | "dev": true, 458 | "requires": { 459 | "minimist": "0.0.8" 460 | } 461 | }, 462 | "once": { 463 | "version": "1.4.0", 464 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 465 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 466 | "dev": true, 467 | "requires": { 468 | "wrappy": "1" 469 | } 470 | }, 471 | "path-is-absolute": { 472 | "version": "1.0.1", 473 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 474 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 475 | "dev": true 476 | }, 477 | "sax": { 478 | "version": "0.5.8", 479 | "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", 480 | "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=", 481 | "dev": true 482 | }, 483 | "source-map": { 484 | "version": "0.1.43", 485 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", 486 | "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", 487 | "dev": true, 488 | "requires": { 489 | "amdefine": ">=0.0.4" 490 | } 491 | }, 492 | "wrappy": { 493 | "version": "1.0.2", 494 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 495 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 496 | "dev": true 497 | } 498 | } 499 | }, 500 | "wrappy": { 501 | "version": "1.0.2", 502 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 503 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 504 | "dev": true 505 | } 506 | } 507 | } 508 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dsga1003", 3 | "private": true, 4 | "scripts": { 5 | "build-in-place": "npm run template && npm run stylus", 6 | "template": "node ./build/templater.js index.hbs index.html", 7 | "stylus": "stylus styles" 8 | }, 9 | "devDependencies": { 10 | "handlebars": "^4.0.6", 11 | "js-yaml": "^3.2.5", 12 | "glob": "^7.1.2", 13 | "moment": "^2.9.0", 14 | "slugg": "^1.0.0", 15 | "stylus": "0.54.5" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /params.json: -------------------------------------------------------------------------------- 1 | {"name":"NYU Center for Data Science: DS-GA 1003","tagline":"Machine Learning and Computational Statistics (Spring 2016)","body":"### Hello\r\nI'm [David Rosenberg](https://www.linkedin.com/in/david-rosenberg-5982414), and I'll be the instructor for DS-GA 1003 this year. This is a temporary page to give you some information before the course begins (January 27, 2015). This year's class will be very similar to [last year's class](https://davidrosenberg.github.io/ml2015/), though some of the more advanced topics may change. \r\n\r\n### Prerequisites\r\n* **Programming**: You'll need to be comfortable with Python and [NumPy](http://www.numpy.org/), at least. Knowing how to generate plots and tables to summarize results will be necessary as well. You should take a look at the [first homework assignment from last year](https://davidrosenberg.github.io/ml2015/homework/hw1.pdf) to see what you'll be jumping into. For a crash course in Python for data science, the first few chapters of [Data Science from Scratch](http://amzn.com/149190142X) seem like a good bet. For more in depth coverage, including the [pandas library](http://pandas.pydata.org/), [Python for Data Analysis](http://amzn.com/1449319793) is worth a look. While pandas won't be particularly useful for the homework assignments, it's highly recommended for doing basic data analysis in practice and may be useful for your course projects. (If you're an R user, I highly recommend the [data.table](https://github.com/Rdatatable/data.table/wiki) package.)\r\n* **Math**: Your best bet would be to review the notes from the prerequisite class [DS-GA 1002](http://www.cims.nyu.edu/~cfgranda/pages/DSGA1002_fall15/notes.html). The priorities would be a review of matrix algebra (be comfortable with reading and manipulating expressions involving matrices, vectors, and norms), gradients, and basic probability theory (expectations, independence, Law of Large Numbers, conditional distributions, and conditional expectations). But I consider pretty much every part of the 1002 syllabus to be an important part of a data scientist's toolbox. \r\n* **Machine Learning**: You should at least be familiar with the basic notions of supervised learning, overfitting, training set, test set, and cross-validation. The course is designed to follow [DS-GA 1001](http://cds.nyu.edu/ds-ga-introduction-data-science-fall-2015/), and many of your peers will have taken this class. The book [Data Science for Business](http://www.amazon.com/Data-Science-Business-data-analytic-thinking/dp/1449361323) is highly recommended. It covers many important issues in practical data science that we don't have time for in this course. You might also consider working through [Andrew Ng's Machine Learning course](https://www.coursera.org/learn/machine-learning) on Coursera. Essentially any introduction to machine learning would be sufficient.\r\n\r\n### Textbooks\r\nWe won't have a main textbook for the class this year, and we'll focus on books that are free online. In addition to the books discussed on last year's website, I'll add the following recommendations:\r\n* David Barber's [Bayesian Reasoning and Machine Learning](http://web4.cs.ucl.ac.uk/staff/D.Barber/pmwiki/pmwiki.php?n=Brml.HomePage), available free online.\r\n* Christopher Bishop's [Pattern Recognition and Machine Learning](http://www.amazon.com/Pattern-Recognition-Learning-Information-Statistics/dp/0387310738), which is not available free online, though I have found it to be nice for several topics. \r\n\r\n### General Advice \r\n* This year's course lectures and homeworks will be similar to last year's. If you want to hit the ground running, it would not be a waste of time to start working on last year's homework assignments now.\r\n* The homework writeups must all be submitted as PDF files. There are many ways to do this, but it might be worth your time to figure out a way you're comfortable with before the class starts. For parts of the homework that are math heavy, you may want to use [LyX](http://www.lyx.org/) or write directly in [LaTeX](https://www.latex-project.org/). You can also write math directly in iPython, which can be convenient as well. ","google":"UA-64247420-2","note":"Don't delete this file! It's used internally to help with page regeneration."} -------------------------------------------------------------------------------- /scripts/navigation.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | 'use strict'; 3 | var nav = document.querySelector('body > nav'); 4 | var sections = Array.prototype.slice.call(document.querySelectorAll('body > section')); 5 | 6 | window.addEventListener('hashchange', setSelectedLink); 7 | window.addEventListener('scroll', setHashFromScroll); 8 | 9 | if (!window.location.hash) { 10 | setHashFromScroll(); 11 | } 12 | setSelectedLink(); 13 | 14 | function setSelectedLink() { 15 | var selected = nav.querySelector('a.selected'); 16 | if (selected) { 17 | selected.classList.remove('selected'); 18 | } 19 | 20 | nav.querySelector('a[href="' + window.location.hash + '"]').classList.add('selected'); 21 | } 22 | 23 | function setHashFromScroll() { 24 | var bodyScrollTop = document.body.scrollTop || document.documentElement.scrollTop; 25 | var minDifference = +Infinity; 26 | var minSectionId; 27 | 28 | sections.forEach(function (section) { 29 | var difference = Math.abs(section.offsetTop - bodyScrollTop); 30 | if (difference < minDifference) { 31 | minDifference = difference; 32 | minSectionId = section.id; 33 | } 34 | }); 35 | 36 | // Don't want to scroll to the section directly since we are already inside a user scroll handler. 37 | history.replaceState({}, '', '#' + minSectionId); 38 | setSelectedLink(); 39 | } 40 | }()); 41 | -------------------------------------------------------------------------------- /styles/colors.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidrosenberg/ml2018/52f4e496049c01439119258ada279ebb4a7389ba/styles/colors.css -------------------------------------------------------------------------------- /styles/colors.styl: -------------------------------------------------------------------------------- 1 | accent = rgb(87, 7, 142) 2 | accent-hover = lighten(accent, 30%) 3 | gray = #D9D9D9 4 | body-color = #444444 5 | bg-gray = #f8f7f8 6 | -------------------------------------------------------------------------------- /styles/phone.css: -------------------------------------------------------------------------------- 1 | .phone-only-block { 2 | display: block; 3 | } 4 | body { 5 | padding: 10px; 6 | padding-bottom: 70px; 7 | } 8 | body > nav { 9 | width: 100%; 10 | height: 60px; 11 | top: initial; 12 | bottom: 0; 13 | display: flex; 14 | } 15 | body > nav > a { 16 | width: auto; 17 | flex: 0 0 14.285714285714286%; 18 | border-bottom: none; 19 | border-right: 1px solid #960ef3; 20 | touch-action: manipulation; 21 | } 22 | body > nav > a:hover { 23 | width: auto; 24 | } 25 | #this-week { 26 | display: inline-block; 27 | width: initial; 28 | } 29 | #this-week > h1 { 30 | text-align: center; 31 | } 32 | #this-week .week-summary { 33 | display: inline-block; 34 | } 35 | #this-week section { 36 | display: block; 37 | padding-right: 30px; 38 | margin-bottom: 20px; 39 | min-width: initial; 40 | max-width: initial; 41 | } 42 | #this-week section:last-child { 43 | margin-bottom: 0; 44 | } 45 | #home { 46 | padding-top: 20px; 47 | } 48 | #home > h1 { 49 | text-align: center; 50 | margin-bottom: 40px; 51 | } 52 | #home > h1 > span, 53 | #home > h1 > span .department { 54 | margin-top: 10px; 55 | font-size: 12px; 56 | } 57 | #home > h1 > span .department { 58 | margin-top: 5px; 59 | display: block; 60 | } 61 | #home p span { 62 | display: inline-block; 63 | width: calc(100% - 145px); 64 | } 65 | #home p strong { 66 | width: 145px; 67 | } 68 | #textbooks img { 69 | max-width: 30%; 70 | width: auto; 71 | height: auto; 72 | margin-right: 5px; 73 | } 74 | #lectures > section > h1 { 75 | font-size: 24px; 76 | } 77 | #lectures > section .date { 78 | display: inline-block; 79 | } 80 | #lectures > section .topics, 81 | #lectures > section .references { 82 | padding-right: 0; 83 | } 84 | #lectures > section > table { 85 | display: block; 86 | margin-top: 0; 87 | } 88 | #lectures > section > table:not(:last-child) { 89 | margin-bottom: 20px; 90 | border-bottom: 2px solid #d9d9d9; 91 | } 92 | #lectures > section > table thead { 93 | display: none; 94 | } 95 | #lectures > section > table tbody td, 96 | #lectures > section > table tbody th { 97 | display: block; 98 | margin-bottom: 25px; 99 | padding-top: 0; 100 | } 101 | #assignments .homework strong { 102 | display: inline-block; 103 | } 104 | #assignments .homework .deadline, 105 | #assignments .homework .files { 106 | width: auto; 107 | } 108 | #assignments .homework .module > * { 109 | display: block; 110 | padding-bottom: 10px; 111 | } 112 | #assignments .homework .files > * { 113 | margin-right: 10px; 114 | } 115 | #people ul { 116 | display: block; 117 | } 118 | #people .person { 119 | display: block; 120 | width: auto; 121 | flex-basis: auto; 122 | margin-right: 0; 123 | } 124 | #people .person > img { 125 | float: left; 126 | } 127 | -------------------------------------------------------------------------------- /styles/phone.styl: -------------------------------------------------------------------------------- 1 | @import "colors" 2 | 3 | nav-height = 60px 4 | number-of-nav-items = 7 5 | 6 | .phone-only-block 7 | display: block 8 | 9 | body 10 | padding = 10px 11 | padding: padding 12 | padding-bottom: padding + nav-height 13 | 14 | body > nav 15 | width: 100% 16 | height: nav-height 17 | top: initial 18 | bottom: 0 19 | display: flex 20 | 21 | > a 22 | width: auto 23 | flex: 0 0 (100% / number-of-nav-items) 24 | border-bottom: none 25 | border-right: 1px solid accent-hover 26 | touch-action: manipulation 27 | 28 | &:hover 29 | width: auto 30 | 31 | #this-week 32 | display: inline-block 33 | width: initial 34 | 35 | > h1 36 | text-align: center 37 | 38 | .week-summary 39 | display: inline-block 40 | 41 | section 42 | display: block 43 | padding-right: 30px 44 | margin-bottom: 20px 45 | min-width: initial 46 | max-width: initial 47 | 48 | &:last-child 49 | margin-bottom: 0 50 | 51 | #home 52 | padding-top: 20px 53 | 54 | > h1 55 | text-align: center 56 | margin-bottom: 40px 57 | 58 | > span 59 | &, .department 60 | margin-top: 10px 61 | font-size: 12px 62 | .department 63 | margin-top: 5px 64 | display: block 65 | 66 | p 67 | label-width = 145px 68 | span 69 | display: inline-block 70 | width: "calc(100% - %s)" % label-width 71 | 72 | strong 73 | width: label-width 74 | 75 | #textbooks 76 | img 77 | max-width: 30% 78 | width: auto 79 | height: auto 80 | margin-right: 5px 81 | 82 | #lectures > section 83 | > h1 84 | font-size: 24px 85 | 86 | .date 87 | display: inline-block 88 | 89 | .topics, .references 90 | padding-right: 0 91 | 92 | > table 93 | display: block 94 | margin-top: 0 95 | 96 | &:not(:last-child) 97 | margin-bottom: 20px 98 | border-bottom: 2px solid gray 99 | 100 | thead 101 | display: none 102 | 103 | tbody 104 | td, th 105 | display: block 106 | margin-bottom: 25px 107 | padding-top: 0 108 | 109 | // .icon 110 | // &.references, &.slides 111 | // &::before 112 | // top: 0 113 | // left: 0 114 | 115 | // margin-top: -6px 116 | 117 | // font-size: 14px 118 | 119 | #assignments .homework 120 | strong 121 | display: inline-block 122 | 123 | .deadline, .files 124 | width: auto 125 | 126 | .module > * 127 | display: block 128 | padding-bottom: 10px 129 | 130 | .files > * 131 | margin-right: 10px 132 | 133 | #people 134 | ul 135 | display: block 136 | 137 | .person 138 | display: block 139 | width: auto 140 | flex-basis: auto 141 | margin-right: 0 142 | 143 | > img 144 | float: left 145 | -------------------------------------------------------------------------------- /styles/style.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: "Glyphicons Halflings"; 3 | src: url("../fonts/glyphicons-halflings-regular.woff2") format("woff2"), url("../fonts/glyphicons-halflings-regular.woff") format("woff"); 4 | } 5 | *, 6 | *::before, 7 | *::after { 8 | margin: 0; 9 | padding: 0; 10 | box-sizing: border-box; 11 | } 12 | .phone-only-block { 13 | display: none; 14 | } 15 | body { 16 | padding: 40px; 17 | padding-left: 100px; 18 | padding-top: 0; 19 | line-height: 1.6em; 20 | color: #444; 21 | font-family: Helvetica, Arial, sans-serif; 22 | background-color: #f8f7f8; 23 | } 24 | a { 25 | text-decoration: none; 26 | color: #57078e; 27 | } 28 | a:hover { 29 | color: #960ef3; 30 | } 31 | h1 { 32 | text-transform: uppercase; 33 | line-height: normal; 34 | } 35 | p { 36 | margin: 16px 0; 37 | font-size: 16px; 38 | line-height: 1.6em; 39 | } 40 | @media (max-width: 420px) { 41 | p { 42 | font-size: 14px; 43 | } 44 | } 45 | p:first-child { 46 | margin-top: 0; 47 | } 48 | p:last-child { 49 | margin-bottom: 0; 50 | } 51 | ul, 52 | ol { 53 | margin-left: 20px; 54 | } 55 | .module { 56 | background: #fff; 57 | border-radius: 8px; 58 | padding: 20px; 59 | box-shadow: 0 0 5px rgba(0,0,0,0.12); 60 | } 61 | .icon::before { 62 | font-family: "Glyphicons Halflings"; 63 | opacity: 0.4; 64 | margin-right: 10px; 65 | vertical-align: middle; 66 | color: #57078e; 67 | } 68 | .icon.pdf::before { 69 | content: "\e164"; 70 | } 71 | .icon.zip::before { 72 | content: "\e166"; 73 | } 74 | body > nav { 75 | position: fixed; 76 | top: 0; 77 | left: 0; 78 | z-index: 2; 79 | width: 60px; 80 | height: 100%; 81 | background-color: #57078e; 82 | box-shadow: 0 0 10px rgba(0,0,0,0.3); 83 | } 84 | body > nav > a { 85 | position: relative; 86 | display: block; 87 | width: 60px; 88 | height: 60px; 89 | padding: 10px 10px 10px 10px; 90 | box-sizing: border-box; 91 | border-bottom: 1px solid #960ef3; 92 | font-size: 14px; 93 | font-weight: bold; 94 | letter-spacing: 0.03em; 95 | text-transform: uppercase; 96 | text-align: left; 97 | color: #fff; 98 | white-space: nowrap; 99 | line-height: 42px; 100 | background-color: #57078e; 101 | overflow: hidden; 102 | transition: width ease 0.2s, color ease 0.2s, background-color ease 0.2s; 103 | } 104 | body > nav > a:hover { 105 | width: 200px; 106 | box-shadow: 0 0 5px rgba(0,0,0,0.3); 107 | color: #fff; 108 | } 109 | body > nav > a.selected { 110 | border-bottom: none; 111 | color: #57078e; 112 | background: #fff; 113 | } 114 | body > nav > a::before { 115 | float: left; 116 | display: inline-block; 117 | width: 60px; 118 | height: 60px; 119 | margin: -10px 15px 0 -10px; 120 | font-size: 20px; 121 | font-family: "Glyphicons Halflings"; 122 | font-style: normal; 123 | font-weight: normal; 124 | letter-spacing: normal; 125 | line-height: 60px; 126 | text-align: center; 127 | vertical-align: middle; 128 | -webkit-font-smoothing: antialiased; 129 | -moz-osx-font-smoothing: grayscale; 130 | } 131 | @media (max-width: 420px) { 132 | body > nav > a::before { 133 | font-size: 16px; 134 | } 135 | } 136 | body > nav > a[href="#home"]::before { 137 | content: "\e021"; 138 | } 139 | body > nav > a[href="#about"]::before { 140 | content: "\e086"; 141 | } 142 | body > nav > a[href="#resources"]::before { 143 | content: "\e043"; 144 | } 145 | body > nav > a[href="#lectures"]::before { 146 | content: "\e109"; 147 | } 148 | body > nav > a[href="#assignments"]::before { 149 | content: "\e012"; 150 | } 151 | body > nav > a[href="#project"]::before { 152 | content: "\e006"; 153 | } 154 | body > nav > a[href="#people"]::before { 155 | content: "\e008"; 156 | } 157 | body > section { 158 | border-bottom: 1px solid #d9d9d9; 159 | padding-bottom: 70px; 160 | padding-top: 20px; 161 | } 162 | body > section > h1 { 163 | margin-bottom: 40px; 164 | font-size: 36px; 165 | } 166 | @media (max-width: 420px) { 167 | body > section > h1 { 168 | font-size: 20px; 169 | } 170 | } 171 | body > section > section:not(:last-of-type) { 172 | margin-bottom: 30px; 173 | } 174 | body > section > section > h1 { 175 | margin-bottom: 10px; 176 | font-size: 20px; 177 | } 178 | @media (max-width: 420px) { 179 | body > section > section > h1 { 180 | font-size: 16px; 181 | } 182 | } 183 | #home { 184 | text-align: center; 185 | padding-top: 40px; 186 | } 187 | #home > h1 { 188 | font-size: 46px; 189 | text-align: left; 190 | margin-bottom: 50px; 191 | } 192 | @media (max-width: 420px) { 193 | #home > h1 { 194 | font-size: 24px; 195 | } 196 | } 197 | #home > h1 > span { 198 | display: block; 199 | margin-top: 5px; 200 | font-size: 20px; 201 | } 202 | @media (max-width: 420px) { 203 | #home > h1 > span { 204 | font-size: 16px; 205 | } 206 | } 207 | #home > h1 .department { 208 | font-size: 16px; 209 | vertical-align: middle; 210 | } 211 | @media (max-width: 420px) { 212 | #home > h1 .department { 213 | font-size: 14px; 214 | } 215 | } 216 | #course-info { 217 | margin: 10px auto; 218 | text-align: left; 219 | } 220 | #course-info th { 221 | font-weight: bold; 222 | min-width: 170px; 223 | vertical-align: top; 224 | font-size: 20px; 225 | color: #57078e; 226 | text-transform: uppercase; 227 | opacity: 0.6; 228 | } 229 | @media (max-width: 420px) { 230 | #course-info th { 231 | font-size: 16px; 232 | } 233 | } 234 | #course-info tr:last-of-type { 235 | line-height: 1; 236 | } 237 | #course-info .email::before { 238 | content: "\2709"; 239 | margin-left: 5px; 240 | } 241 | #this-week { 242 | margin: 30px auto 0 auto; 243 | width: 1220px; 244 | text-align: left; 245 | } 246 | @media screen and (max-width: 1340px) { 247 | #this-week { 248 | width: 670px; 249 | } 250 | } 251 | #this-week li, 252 | #this-week p { 253 | line-height: 1.1; 254 | } 255 | #this-week li { 256 | margin-bottom: 10px; 257 | } 258 | #this-week > h1 { 259 | font-size: 36px; 260 | opacity: 0.6; 261 | } 262 | @media (max-width: 420px) { 263 | #this-week > h1 { 264 | font-size: 20px; 265 | } 266 | } 267 | #this-week .week-summary { 268 | display: flex; 269 | flex-wrap: wrap; 270 | justify-content: center; 271 | padding: 25px; 272 | border: 2px solid #57078e; 273 | border-radius: 8px; 274 | font-size: 16px; 275 | background-color: #fff; 276 | box-shadow: 0 0 5px rgba(0,0,0,0.12); 277 | } 278 | @media (max-width: 420px) { 279 | #this-week .week-summary { 280 | font-size: 14px; 281 | } 282 | } 283 | #this-week h1 { 284 | font-weight: bold; 285 | text-transform: uppercase; 286 | padding-bottom: 10px; 287 | } 288 | #this-week ul { 289 | list-style-type: none; 290 | margin: 0; 291 | } 292 | #this-week section { 293 | width: 250px; 294 | margin: 5px 20px; 295 | vertical-align: top; 296 | } 297 | #this-week section.assignment > p { 298 | margin-top: 0; 299 | } 300 | #this-week section.assignment .files { 301 | display: flex; 302 | justify-content: space-between; 303 | flex-wrap: wrap; 304 | } 305 | #about .module { 306 | margin-bottom: 30px; 307 | } 308 | #textbooks img { 309 | height: 200px; 310 | margin: 0 10px 10px 0; 311 | } 312 | #textbooks dd { 313 | margin-bottom: 10px; 314 | } 315 | #textbooks cite { 316 | font-weight: bold; 317 | } 318 | #references ul { 319 | margin-top: 10px; 320 | } 321 | #lectures > .abbreviations { 322 | margin-bottom: 20px; 323 | list-style-type: none; 324 | } 325 | #lectures > section { 326 | margin-bottom: 20px; 327 | font-size: 14px; 328 | } 329 | #lectures > section > table { 330 | width: 100%; 331 | margin-top: -50px; 332 | border-collapse: collapse; 333 | } 334 | #lectures > section thead { 335 | line-height: 50px; 336 | } 337 | #lectures > section tbody > tr:not(:last-of-type) { 338 | border-bottom: 1px solid rgba(87,7,142,0.2); 339 | } 340 | #lectures > section tbody > tr:not(:first-of-type) td, 341 | #lectures > section tbody > tr:not(:first-of-type) th { 342 | padding-top: 15px; 343 | } 344 | #lectures > section th { 345 | text-align: left; 346 | text-transform: uppercase; 347 | } 348 | #lectures > section th, 349 | #lectures > section td { 350 | vertical-align: top; 351 | } 352 | #lectures > section .label { 353 | width: 20%; 354 | } 355 | #lectures > section .references { 356 | width: 25%; 357 | } 358 | #lectures > section .slides { 359 | width: 20%; 360 | } 361 | #lectures > section ul { 362 | list-style-type: none; 363 | margin: 0; 364 | } 365 | #lectures > section li { 366 | line-height: normal; 367 | margin-bottom: 10px; 368 | } 369 | #lectures > section h1 { 370 | margin-bottom: 15px; 371 | } 372 | #lectures > section .date, 373 | #lectures > section .video { 374 | display: block; 375 | margin-top: 5px; 376 | } 377 | #lectures > section .date { 378 | color: #57078e; 379 | font-size: 0.9em; 380 | opacity: 0.6; 381 | } 382 | #lectures > section .video { 383 | font-size: 0.85em; 384 | } 385 | #lectures > section .video::after { 386 | font-family: "Glyphicons Halflings"; 387 | margin-left: 5px; 388 | vertical-align: top; 389 | content: "\e059"; 390 | } 391 | #lectures > section .references { 392 | padding-right: 60px; 393 | } 394 | #assignments .policies { 395 | margin-bottom: 30px; 396 | } 397 | #assignments .homework { 398 | margin-bottom: 20px; 399 | } 400 | #assignments .homework strong { 401 | text-transform: uppercase; 402 | display: block; 403 | } 404 | #assignments .homework .module { 405 | display: inline-block; 406 | vertical-align: middle; 407 | max-width: 600px; 408 | width: 100%; 409 | } 410 | #assignments .homework .module > * { 411 | display: table-cell; 412 | padding-right: 40px; 413 | } 414 | #assignments .homework .module > *:last-of-type { 415 | padding-right: 0; 416 | } 417 | #assignments .homework .title { 418 | width: 310px; 419 | } 420 | #assignments .homework .title > h1 { 421 | line-height: 1.6em; 422 | white-space: nowrap; 423 | } 424 | #assignments .homework .title > p { 425 | margin-top: 0; 426 | } 427 | #assignments .homework .deadline { 428 | width: 190px; 429 | } 430 | #assignments .homework .files { 431 | width: 100px; 432 | } 433 | #assignments .submit, 434 | #assignments .solutions { 435 | display: inline-block; 436 | vertical-align: middle; 437 | margin-top: 5px; 438 | margin-left: 30px; 439 | } 440 | #assignments .submit { 441 | text-align: center; 442 | } 443 | #assignments .submit .icon { 444 | margin-bottom: 5px; 445 | } 446 | #assignments .submit .icon::before { 447 | content: "\2709"; 448 | font-size: 32px; 449 | margin-right: 0; 450 | } 451 | #assignments .submit a:hover { 452 | color: #57078e; 453 | } 454 | #assignments .submit a:hover .icon::before { 455 | opacity: 1; 456 | } 457 | #people > section:not(:last-of-type) { 458 | margin-bottom: 50px; 459 | } 460 | #people > section.multiple-people { 461 | margin-bottom: 30px; 462 | max-width: 1300px; 463 | } 464 | #people ul { 465 | display: flex; 466 | flex-flow: row wrap; 467 | list-style-type: none; 468 | margin: 0; 469 | } 470 | #people .person { 471 | display: flex; 472 | margin-right: 20px; 473 | margin-bottom: 20px; 474 | flex-grow: 0; 475 | flex-shrink: 0; 476 | flex-basis: 600px; 477 | width: 600px; 478 | min-height: 190px; 479 | } 480 | #people .person > img { 481 | width: 150px; 482 | height: 150px; 483 | margin-right: 20px; 484 | border-radius: 8px; 485 | flex: 0 0 auto; 486 | } 487 | #people .person > .info { 488 | min-width: 0; 489 | } 490 | #people .person > .info > p { 491 | margin: 0 5px; 492 | } 493 | #people .person > .info > p.name { 494 | font-weight: bold; 495 | } 496 | #people .person > .info > p.email { 497 | overflow: hidden; 498 | text-overflow: ellipsis; 499 | } 500 | #people .person > .info > p.bio { 501 | margin-top: 10px; 502 | font-size: 14px; 503 | } 504 | -------------------------------------------------------------------------------- /styles/style.styl: -------------------------------------------------------------------------------- 1 | @import "colors" 2 | 3 | nav-width = 60px 4 | body-padding = 40px 5 | body-left = nav-width + body-padding 6 | module-padding = 20px 7 | 8 | font-largest = 9 | font-size: 46px 10 | 11 | @media(max-width: 420px) 12 | font-size: 24px 13 | 14 | font-large = 15 | font-size: 36px 16 | 17 | @media(max-width: 420px) 18 | font-size: 20px 19 | 20 | font-medium = 21 | font-size: 20px 22 | 23 | @media(max-width: 420px) 24 | font-size: 16px 25 | 26 | font-small = 27 | font-size: 16px 28 | 29 | @media(max-width: 420px) 30 | font-size: 14px 31 | 32 | font-smallest = 33 | font-size: 14px 34 | 35 | @font-face 36 | font-family: "Glyphicons Halflings" 37 | src: url("../fonts/glyphicons-halflings-regular.woff2") format("woff2"), 38 | url("../fonts/glyphicons-halflings-regular.woff") format("woff") 39 | 40 | icon-home = 41 | content: "\e021" 42 | icon-info-sign = 43 | content: "\e086" 44 | icon-calendar = 45 | content: "\e109" 46 | icon-list = 47 | content: "\e012" 48 | icon-star = 49 | content: "\e006" 50 | icon-user = 51 | content: "\e008" 52 | icon-book = 53 | content: "\e043" 54 | icon-pencil = 55 | content: "\270f" 56 | icon-envelope = 57 | content: "\2709" 58 | icon-new-window = 59 | content: "\e164" 60 | icon-save = 61 | content: "\e166" 62 | icon-video = 63 | content: "\e059" 64 | 65 | 66 | *, *::before, *::after 67 | margin: 0 68 | padding: 0 69 | box-sizing: border-box 70 | 71 | .phone-only-block 72 | display: none 73 | 74 | body 75 | padding: body-padding 76 | padding-left: body-left 77 | padding-top: 0 78 | line-height: 1.6em 79 | 80 | color: body-color 81 | font-family: Helvetica, Arial, sans-serif 82 | 83 | background-color: bg-gray 84 | 85 | a 86 | text-decoration: none 87 | color: accent 88 | 89 | &:hover 90 | color: accent-hover 91 | 92 | h1 93 | text-transform: uppercase 94 | line-height: normal 95 | 96 | p 97 | margin: 16px 0 98 | 99 | {font-small} 100 | line-height: 1.6em 101 | 102 | &:first-child 103 | margin-top: 0 104 | 105 | &:last-child 106 | margin-bottom: 0 107 | 108 | ul, ol 109 | margin-left: 20px 110 | 111 | .module 112 | background: white 113 | border-radius: 8px 114 | padding: module-padding 115 | box-shadow: 0 0 5px rgba(0,0,0,0.12) 116 | 117 | .icon 118 | &::before 119 | font-family: "Glyphicons Halflings" 120 | opacity: 0.4 121 | margin-right: 10px 122 | vertical-align: middle 123 | color: accent 124 | 125 | &.pdf::before 126 | {icon-new-window} 127 | 128 | &.zip::before 129 | {icon-save} 130 | 131 | body > nav 132 | position: fixed 133 | top: 0 134 | left: 0 135 | z-index: 2 136 | 137 | width: nav-width 138 | height: 100% 139 | 140 | background-color: accent 141 | box-shadow: 0 0 10px rgba(0,0,0,0.3) 142 | 143 | > a 144 | position: relative 145 | 146 | display: block 147 | width: 60px 148 | height: nav-width 149 | padding: 10px 10px 10px 10px 150 | box-sizing: border-box 151 | border-bottom: 1px solid accent-hover 152 | 153 | {font-smallest} 154 | font-weight: bold 155 | letter-spacing: .03em 156 | text-transform: uppercase 157 | text-align: left 158 | color: white 159 | white-space: nowrap 160 | line-height: 42px 161 | 162 | background-color: accent 163 | overflow: hidden 164 | transition: width ease .2s, color ease .2s, background-color ease .2s 165 | 166 | &:hover 167 | width: 200px 168 | box-shadow: 0 0 5px rgba(0,0,0,0.3) 169 | 170 | color: white 171 | 172 | &.selected 173 | border-bottom: none 174 | 175 | color: accent 176 | 177 | background: white 178 | 179 | &::before 180 | float: left 181 | 182 | display: inline-block 183 | width: nav-width 184 | height: nav-width 185 | margin: -10px 15px 0 -10px 186 | 187 | {font-medium} 188 | font-family: "Glyphicons Halflings" 189 | font-style: normal 190 | font-weight: normal 191 | letter-spacing: normal 192 | line-height: 60px 193 | text-align: center 194 | vertical-align: middle 195 | -webkit-font-smoothing: antialiased 196 | -moz-osx-font-smoothing: grayscale 197 | 198 | &[href="#home"]::before 199 | {icon-home} 200 | &[href="#about"]::before 201 | {icon-info-sign} 202 | &[href="#resources"]::before 203 | {icon-book} 204 | &[href="#lectures"]::before 205 | {icon-calendar} 206 | &[href="#assignments"]::before 207 | {icon-list} 208 | &[href="#project"]::before 209 | {icon-star} 210 | &[href="#people"]::before 211 | {icon-user} 212 | 213 | body > section 214 | border-bottom: 1px solid gray 215 | padding-bottom: 70px 216 | padding-top: 20px 217 | 218 | > h1 219 | margin-bottom: 40px 220 | 221 | {font-large} 222 | 223 | > section:not(:last-of-type) 224 | margin-bottom: 30px 225 | 226 | > section > h1 227 | margin-bottom: 10px 228 | 229 | {font-medium} 230 | 231 | #home 232 | text-align: center 233 | padding-top: body-padding 234 | 235 | > h1 236 | {font-largest} 237 | text-align: left 238 | 239 | margin-bottom: 50px 240 | 241 | > span 242 | display: block 243 | margin-top: 5px 244 | 245 | {font-medium} 246 | 247 | .department 248 | {font-small} 249 | vertical-align: middle 250 | 251 | #course-info 252 | margin: 10px auto 253 | text-align: left 254 | 255 | th 256 | font-weight: bold 257 | min-width: 170px 258 | vertical-align: top 259 | 260 | {font-medium} 261 | color: accent 262 | text-transform: uppercase 263 | 264 | opacity: 0.6 265 | 266 | tr:last-of-type 267 | line-height: 1 268 | 269 | .email::before 270 | {icon-envelope} 271 | margin-left: 5px 272 | 273 | #this-week 274 | margin: 30px auto 0 auto 275 | 276 | width: 1220px 277 | @media screen and (max-width: 1340px) 278 | width: 670px 279 | 280 | text-align: left 281 | 282 | li, p 283 | line-height: 1.1 284 | 285 | li 286 | margin-bottom: 10px 287 | 288 | > h1 289 | {font-large} 290 | opacity: 0.6 291 | 292 | .week-summary 293 | display: flex 294 | flex-wrap: wrap 295 | justify-content: center 296 | 297 | padding: 25px 298 | border: 2px solid accent 299 | border-radius: 8px 300 | 301 | {font-small} 302 | 303 | background-color: white 304 | box-shadow: 0 0 5px rgba(0,0,0,0.12) 305 | 306 | h1 307 | font-weight: bold 308 | text-transform: uppercase 309 | padding-bottom: 10px 310 | 311 | ul 312 | list-style-type: none 313 | margin: 0 314 | 315 | section 316 | width: 250px 317 | margin: 5px 20px 318 | 319 | vertical-align: top 320 | 321 | &.assignment 322 | > p 323 | margin-top: 0 324 | 325 | .files 326 | display: flex 327 | justify-content: space-between 328 | flex-wrap: wrap 329 | 330 | #about 331 | .module 332 | margin-bottom: 30px 333 | 334 | #textbooks 335 | img 336 | height: 200px 337 | margin: 0 10px 10px 0 338 | 339 | dd 340 | margin-bottom: 10px 341 | 342 | cite 343 | font-weight: bold 344 | 345 | #references 346 | ul 347 | margin-top: 10px 348 | 349 | #lectures 350 | > .abbreviations 351 | margin-bottom: 20px 352 | list-style-type: none 353 | 354 | #lectures > section 355 | margin-bottom: 20px 356 | {font-smallest} 357 | 358 | > table 359 | width: 100% 360 | margin-top: -50px 361 | border-collapse: collapse 362 | thead 363 | line-height: 50px 364 | 365 | tbody > tr:not(:last-of-type) 366 | border-bottom: 1px solid rgba(accent, 0.2) 367 | 368 | tbody > tr:not(:first-of-type) 369 | td, th 370 | padding-top: 15px 371 | 372 | th 373 | text-align: left 374 | text-transform: uppercase 375 | th, td 376 | vertical-align: top 377 | 378 | .label 379 | width: 20% 380 | .references 381 | width: 25% 382 | .slides 383 | width: 20% 384 | 385 | ul 386 | list-style-type: none 387 | margin: 0 388 | 389 | li 390 | line-height: normal 391 | margin-bottom: 10px 392 | 393 | h1 394 | margin-bottom: 15px 395 | 396 | .date, .video 397 | display: block 398 | margin-top: 5px 399 | 400 | .date 401 | color: accent 402 | font-size: 0.9em 403 | opacity: 0.6 404 | 405 | .video 406 | font-size: 0.85em 407 | 408 | &::after 409 | font-family: "Glyphicons Halflings" 410 | margin-left: 5px 411 | vertical-align: top 412 | {icon-video} 413 | 414 | .references 415 | padding-right: 60px 416 | 417 | // .icon 418 | // &.references, &.slides 419 | // &::before 420 | // position: absolute 421 | // left: -42px 422 | // top: 20px 423 | 424 | // font-size: 30px 425 | 426 | // &.references::before 427 | // {icon-book} 428 | 429 | // &.slides::before 430 | // {icon-pencil} 431 | 432 | // &.video::before 433 | // {icon-video} 434 | 435 | #assignments 436 | .policies 437 | margin-bottom: 30px 438 | 439 | .homework 440 | margin-bottom: 20px 441 | 442 | strong 443 | text-transform: uppercase 444 | display: block 445 | 446 | .module 447 | display: inline-block 448 | vertical-align: middle 449 | max-width: 600px 450 | width: 100% 451 | 452 | > * 453 | display: table-cell 454 | padding-right: 40px 455 | 456 | &:last-of-type 457 | padding-right: 0 458 | 459 | .title 460 | width: 310px 461 | 462 | > h1 463 | line-height: 1.6em 464 | white-space: nowrap 465 | 466 | > p 467 | margin-top: 0 468 | 469 | .deadline 470 | width: 190px 471 | 472 | .files 473 | width: 100px 474 | 475 | .submit, .solutions 476 | display: inline-block 477 | vertical-align: middle 478 | margin-top: 5px 479 | margin-left: 30px 480 | 481 | .submit 482 | text-align: center 483 | 484 | .icon 485 | margin-bottom: 5px 486 | 487 | &::before 488 | {icon-envelope} 489 | font-size: 32px 490 | margin-right: 0 491 | 492 | a:hover 493 | color: accent 494 | 495 | .icon::before 496 | opacity: 1 497 | 498 | #people 499 | > section:not(:last-of-type) 500 | margin-bottom: 50px 501 | 502 | > section.multiple-people 503 | margin-bottom: 30px 504 | max-width: 1300px 505 | 506 | ul 507 | display: flex 508 | flex-flow: row wrap 509 | list-style-type: none 510 | margin: 0 511 | 512 | .person 513 | display: flex 514 | 515 | margin-right: 20px 516 | margin-bottom: 20px 517 | 518 | flex-grow: 0 519 | flex-shrink: 0 520 | flex-basis: 600px 521 | width: 600px 522 | 523 | img-size = 150px 524 | 525 | min-height: img-size + 2 * module-padding 526 | 527 | > img 528 | width: img-size 529 | height: img-size 530 | margin-right: 20px 531 | border-radius: 8px 532 | 533 | flex: 0 0 auto 534 | 535 | > .info 536 | min-width: 0 // bizarre flexbox behavior; https://bugs.webkit.org/show_bug.cgi?id=94584#c2 537 | > p 538 | margin: 0 5px 539 | 540 | &.name 541 | font-weight: bold 542 | 543 | &.email 544 | overflow: hidden 545 | text-overflow: ellipsis 546 | 547 | &.bio 548 | margin-top: 10px 549 | 550 | {font-smallest} 551 | -------------------------------------------------------------------------------- /styles/tablet-and-phone.css: -------------------------------------------------------------------------------- 1 | body > section { 2 | padding-bottom: 50px; 3 | } 4 | body > section > h1 { 5 | margin-bottom: 30px; 6 | } 7 | body > nav > a:hover { 8 | width: auto; 9 | } 10 | #lectures > section .label, 11 | #lectures > section .references, 12 | #lectures > section .slides { 13 | width: auto; 14 | } 15 | #assignments .solutions, 16 | #assignments .submit { 17 | margin-top: 10px; 18 | } 19 | #assignments .solutions strong, 20 | #assignments .submit strong { 21 | display: inline-block; 22 | margin-right: 5px; 23 | } 24 | #assignments .submit { 25 | text-align: left; 26 | } 27 | #assignments .submit .icon { 28 | display: inline-block; 29 | } 30 | #assignments .submit .icon::before { 31 | font-size: 16px; 32 | } 33 | #this-week { 34 | width: 600px; 35 | } 36 | #this-week section { 37 | width: 220px; 38 | } 39 | -------------------------------------------------------------------------------- /styles/tablet-and-phone.styl: -------------------------------------------------------------------------------- 1 | body > section 2 | padding-bottom: 50px 3 | 4 | > h1 5 | margin-bottom: 30px 6 | 7 | body > nav > a:hover 8 | width: auto 9 | 10 | #lectures > section 11 | .label, .references, .slides 12 | width: auto 13 | 14 | #assignments 15 | .solutions, .submit 16 | margin-top: 10px 17 | 18 | strong 19 | display: inline-block 20 | margin-right: 5px 21 | 22 | .submit 23 | text-align: left 24 | .icon 25 | display: inline-block 26 | &::before 27 | font-size: 16px 28 | 29 | #this-week 30 | width: 600px 31 | 32 | section 33 | width: 220px 34 | 35 | -------------------------------------------------------------------------------- /templates/_assignment-details.hbs: -------------------------------------------------------------------------------- 1 |

    Due: {{date Due}}, {{@root.assignmentsFrontmatter.[Due time]}}

    2 |
    3 | {{#each PDF}} 4 | {{@key}} 5 | {{/each}} 6 | {{#each ZIP}} 7 | {{@key}} 8 | {{/each}} 9 | {{#if noFiles}} 10 |

    (Coming soon)

    11 | {{/if}} 12 |
    13 | -------------------------------------------------------------------------------- /templates/assignments.hbs: -------------------------------------------------------------------------------- 1 | {{#each this}} 2 |
    3 |
    4 |
    5 |

    {{Label}}

    6 |

    {{{Description}}}

    7 |
    8 | {{> _assignment-details }} 9 |
    10 | {{#if Submittable}} 11 | 17 | {{/if}} 18 | {{#each Solutions}} 19 |
    20 | Solutions: 21 | {{@key}} 22 |
    23 | {{/each}} 24 |
    25 | {{/each}} 26 | -------------------------------------------------------------------------------- /templates/lectures.hbs: -------------------------------------------------------------------------------- 1 | {{#each this}} 2 |
    3 |

    {{Title}}

    4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | {{#each Events}} 15 | 16 | 25 | 36 | 47 | 58 | 59 | {{/each}} 60 |
    SlidesNotesReferences
    17 |

    18 | {{Label}} 19 | {{shortDate @key}} 20 | {{#if Video}} 21 | Video 22 | {{/if}} 23 |

    24 |
    26 |

    Slides

    27 | {{#if Slides}} 28 |
      {{#each Slides}} 29 |
    • {{maybeLink this}}
    • 30 | {{/each}} 31 |
    32 | {{else}} 33 | (None) 34 | {{/if}} 35 |
    37 |

    Notes

    38 | {{#if Notes}} 39 |
      {{#each Notes}} 40 |
    • {{maybeLink this}}
    • 41 | {{/each}} 42 |
    43 | {{else}} 44 | (None) 45 | {{/if}} 46 |
    48 |

    References

    49 | {{#if References}} 50 |
      {{#each References}} 51 |
    • {{maybeLink this}}
    • 52 | {{/each}} 53 |
    54 | {{else}} 55 | (None) 56 | {{/if}} 57 |
    61 |
    62 | {{/each}} 63 | -------------------------------------------------------------------------------- /templates/this-week.hbs: -------------------------------------------------------------------------------- 1 | {{#if lecture}} 2 |
    3 |

    This week

    4 | 5 |
    6 | {{#with lecture}} 7 |
    8 |

    Slides

    9 |
      10 | {{#each Events}} 11 | {{#each Slides}} 12 |
    • {{maybeLink this}}
    • 13 | {{/each}} 14 | {{/each}} 15 |
    16 |
    17 |
    18 |

    Notes

    19 | 20 |
      21 | {{#each Events}} 22 | {{#each Notes}} 23 |
    • {{maybeLink this}}
    • 24 | {{/each}} 25 | {{/each}} 26 |
    27 |
    28 |
    29 |

    References

    30 | 31 |
      32 | {{#each Events}} 33 | {{#each References}} 34 |
    • {{maybeLink this}}
    • 35 | {{/each}} 36 | {{/each}} 37 |
    38 |
    39 | {{/with}} 40 | {{#with assignment}} 41 |
    42 |

    {{Label}}

    43 |

    {{{Description}}}

    44 | 45 | {{> _assignment-details }} 46 |
    47 | {{/with}} 48 | 49 | {{#if Announcement}} 50 |

    {{{Announcement}}}

    51 | {{/if}} 52 |
    53 |
    54 | {{/if}} 55 | --------------------------------------------------------------------------------