├── .eslintrc.js ├── .firebaserc ├── .github └── workflows │ ├── firebase-hosting-merge.yml │ └── firebase-hosting-pull-request.yml ├── .gitignore ├── .gitmodules ├── .prettierrc.js ├── .tool-versions ├── .yarnclean ├── LICENSE ├── data ├── courses.json ├── sidebars.json └── testimonials.json ├── firebase.json ├── gridsome.config.js ├── gridsome.server.js ├── package.json ├── src ├── assets │ └── images │ │ └── favicon.png ├── components │ ├── Ad.vue │ ├── Footer.vue │ ├── Header.vue │ ├── header │ │ ├── AlgoliaSearch.vue │ │ ├── ExternalLinks.vue │ │ ├── IconHomeLink.vue │ │ └── PrimaryNavLinks.vue │ ├── home │ │ ├── GentleWave.vue │ │ ├── Hero.vue │ │ ├── HeroImage.vue │ │ ├── Notebooks.vue │ │ ├── Testimonials.vue │ │ └── ThankYou.vue │ ├── note │ │ ├── Content.vue │ │ ├── Sidebar.vue │ │ └── Sidebar │ │ │ ├── ActiveSidebarLink.vue │ │ │ └── SidebarGroup.vue │ └── notification │ │ └── ThanksgivingDiscount.vue ├── index.html ├── layouts │ ├── Default.vue │ └── Note.vue ├── main.js ├── mixins │ └── mailchimp.js ├── pages │ ├── 404.vue │ ├── Index.vue │ └── Privacy.vue └── templates │ └── Note.vue ├── tailwind.config.js └── yarn.lock /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | node: true, 5 | }, 6 | extends: [ 7 | 'plugin:vue/essential', 8 | 'plugin:prettier/recommended', 9 | '@vue/prettier', 10 | 'plugin:gridsome/recommended', 11 | ], 12 | rules: { 13 | 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', 14 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', 15 | }, 16 | parserOptions: { 17 | parser: 'babel-eslint', 18 | }, 19 | } 20 | -------------------------------------------------------------------------------- /.firebaserc: -------------------------------------------------------------------------------- 1 | { 2 | "projects": { 3 | "default": "omscs-notes" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /.github/workflows/firebase-hosting-merge.yml: -------------------------------------------------------------------------------- 1 | # This file was auto-generated by the Firebase CLI 2 | # https://github.com/firebase/firebase-tools 3 | 4 | name: Deploy to Firebase Hosting on merge 5 | on: 6 | push: 7 | branches: 8 | - master 9 | jobs: 10 | build_and_deploy: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v4 14 | with: 15 | submodules: recursive 16 | - name: Install python2 17 | run: | 18 | sudo apt-get update 19 | sudo apt-get install python2 20 | - name: Install Dependencies 21 | run: yarn 22 | - name: Setup Node 23 | uses: actions/setup-node@v2 24 | with: 25 | node-version: '14.19.0' 26 | - name: Build 27 | run: yarn build 28 | - uses: FirebaseExtended/action-hosting-deploy@v0 29 | with: 30 | repoToken: ${{ secrets.GITHUB_TOKEN }} 31 | firebaseServiceAccount: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_OMSCS_NOTES }} 32 | channelId: live 33 | projectId: omscs-notes 34 | -------------------------------------------------------------------------------- /.github/workflows/firebase-hosting-pull-request.yml: -------------------------------------------------------------------------------- 1 | # This file was auto-generated by the Firebase CLI 2 | # https://github.com/firebase/firebase-tools 3 | 4 | name: Deploy to Firebase Hosting on PR 5 | on: pull_request 6 | permissions: 7 | checks: write 8 | contents: read 9 | pull-requests: write 10 | jobs: 11 | build_and_preview: 12 | if: ${{ github.event.pull_request.head.repo.full_name == github.repository }} 13 | runs-on: ubuntu-latest 14 | steps: 15 | - uses: actions/checkout@v4 16 | with: 17 | submodules: recursive 18 | - name: Install python2 19 | run: | 20 | sudo apt-get update 21 | sudo apt-get install python2 22 | - name: Install Dependencies 23 | run: yarn 24 | - name: Setup Node 25 | uses: actions/setup-node@v2 26 | with: 27 | node-version: '14.19.0' 28 | - name: Build 29 | run: yarn build 30 | - uses: FirebaseExtended/action-hosting-deploy@v0 31 | with: 32 | repoToken: ${{ secrets.GITHUB_TOKEN }} 33 | firebaseServiceAccount: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_OMSCS_NOTES }} 34 | projectId: omscs-notes 35 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | .cache 3 | .DS_Store 4 | src/.temp 5 | node_modules 6 | dist 7 | .env 8 | .env.* 9 | .firebase/ 10 | yarn-error.log 11 | .vscode/ 12 | .idea/ -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "notes"] 2 | path = notes 3 | url = https://github.com/m4ttsch/omscs-notes-notes.git 4 | -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | singleQuote: true, 3 | semi: false, 4 | } 5 | -------------------------------------------------------------------------------- /.tool-versions: -------------------------------------------------------------------------------- 1 | nodejs 14.19.0 2 | -------------------------------------------------------------------------------- /.yarnclean: -------------------------------------------------------------------------------- 1 | # test directories 2 | __tests__ 3 | test 4 | tests 5 | powered-test 6 | 7 | # asset directories 8 | docs 9 | doc 10 | website 11 | images 12 | assets 13 | 14 | # examples 15 | example 16 | examples 17 | 18 | # code coverage directories 19 | coverage 20 | .nyc_output 21 | 22 | # build scripts 23 | Makefile 24 | Gulpfile.js 25 | Gruntfile.js 26 | 27 | # configs 28 | appveyor.yml 29 | circle.yml 30 | codeship-services.yml 31 | codeship-steps.yml 32 | wercker.yml 33 | .tern-project 34 | .gitattributes 35 | .editorconfig 36 | .*ignore 37 | .eslintrc 38 | .jshintrc 39 | .flowconfig 40 | .documentup.json 41 | .yarn-metadata.json 42 | .travis.yml 43 | 44 | # misc 45 | *.md 46 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Matthew Schlenker 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /data/courses.json: -------------------------------------------------------------------------------- 1 | { 2 | "courses": [ 3 | { 4 | "name": "Robotics: AI Techniques", 5 | "id": "robotics-ai-techniques", 6 | "abbrev": "RAIT", 7 | "code": "CS7638", 8 | "semester": "Spring 2023", 9 | "author": "Matt Schlenker", 10 | "icon": "https://assets.omscs.io/courses/cs7638.png", 11 | "start": "/robotics-ai-techniques/welcome", 12 | "completed": false 13 | }, 14 | { 15 | "name": "Databases", 16 | "id": "databases", 17 | "abbrev": "DB", 18 | "code": "CS6400", 19 | "semester": "Fall 2022", 20 | "author": "Matt Schlenker", 21 | "icon": "https://assets.omscs.io/courses/cs6400.png", 22 | "start": "/databases/welcome", 23 | "completed": true, 24 | "grade": "A" 25 | }, 26 | { 27 | "name": "Computer Networks", 28 | "id": "computer-networks", 29 | "abbrev": "CN", 30 | "code": "CS6250", 31 | "semester": "Spring 2021", 32 | "author": "Josh Kuun", 33 | "grade": "A", 34 | "icon": "https://assets.omscs.io/courses/cs6250.png", 35 | "start": "/computer-networks/welcome", 36 | "completed": true 37 | }, 38 | { 39 | "id": "secure-computer-systems", 40 | "name": "Secure Computer Systems", 41 | "abbrev": "SCS", 42 | "code": "CS6238", 43 | "semester": "Spring 2021", 44 | "author": "Matthew Caseres", 45 | "grade": "A", 46 | "icon": "https://assets.omscs.io/courses/cs6238.png", 47 | "start": "/secure-computer-systems/00-welcome", 48 | "completed": true 49 | }, 50 | { 51 | "id": "simulation", 52 | "name": "Simulation", 53 | "abbrev": "SIM", 54 | "code": "ISYE6644", 55 | "semester": "Fall 2020", 56 | "author": "Matt Schlenker", 57 | "icon": "https://assets.omscs.io/courses/isye6644.png", 58 | "start": "/simulation/welcome", 59 | "completed": true, 60 | "grade": "A" 61 | }, 62 | { 63 | "id": "machine-learning-trading", 64 | "name": "Machine Learning for Trading", 65 | "abbrev": "ML4T", 66 | "code": "CS7646", 67 | "semester": "Spring 2020", 68 | "author": "Matt Schlenker", 69 | "icon": "https://assets.omscs.io/courses/cs7646.png", 70 | "start": "/machine-learning-trading/welcome", 71 | "completed": true, 72 | "grade": "A" 73 | }, 74 | { 75 | "id": "information-security", 76 | "name": "Introduction to Information Security", 77 | "abbrev": "IIS", 78 | "code": "CS6035", 79 | "semester": "Fall 2019", 80 | "author": "Matt Schlenker", 81 | "grade": "A", 82 | "icon": "https://assets.omscs.io/courses/cs6035.png", 83 | "start": "/information-security/welcome", 84 | "completed": true 85 | }, 86 | { 87 | "name": "Computer Networks (OLD)", 88 | "id": "computer-networks-old", 89 | "abbrev": "CN", 90 | "code": "CS6250", 91 | "semester": "Spring 2019", 92 | "author": "Matt Schlenker", 93 | "grade": "A", 94 | "icon": "https://assets.omscs.io/courses/cs6250.png", 95 | "start": "/computer-networks-old/welcome", 96 | "completed": true, 97 | "displayInHeader": false 98 | }, 99 | { 100 | "id": "operating-systems", 101 | "name": "Graduate Introduction to Operating Systems", 102 | "abbrev": "GIOS", 103 | "code": "CS6200", 104 | "semester": "Fall 2018", 105 | "author": "Matt Schlenker", 106 | "grade": "A", 107 | "icon": "https://assets.omscs.io/courses/cs6200.png", 108 | "start": "/operating-systems/welcome", 109 | "completed": true 110 | } 111 | ] 112 | } 113 | -------------------------------------------------------------------------------- /data/sidebars.json: -------------------------------------------------------------------------------- 1 | { 2 | "operating-systems": [ 3 | { 4 | "section": "Start Here", 5 | "notes": ["welcome"] 6 | }, 7 | { 8 | "section": "Download Notes", 9 | "notes": [ 10 | { 11 | "lecture": null, 12 | "title": "GIOS Complete", 13 | "path": "https://payhip.com/b/9I1Q", 14 | "external": true 15 | }, 16 | { 17 | "lecture": null, 18 | "title": "GIOS Lecture Notes", 19 | "path": "https://payhip.com/b/VJ40", 20 | "external": true 21 | }, 22 | { 23 | "lecture": null, 24 | "title": "GIOS Exam Review", 25 | "path": "https://payhip.com/b/BCoS", 26 | "external": true 27 | } 28 | ] 29 | }, 30 | { 31 | "section": "Lecture Notes", 32 | "notes": [ 33 | "introduction-to-operating-systems", 34 | "processes-and-process-management", 35 | "threads-and-concurrency", 36 | "threads-case-study-pthreads", 37 | "thread-design-considerations", 38 | "thread-performance-considerations", 39 | "scheduling", 40 | "memory-management", 41 | "inter-process-communication", 42 | "synchronization-constructs", 43 | "io-management", 44 | "virtualization", 45 | "remote-procedure-calls", 46 | "distributed-file-systems", 47 | "distributed-shared-memory", 48 | "datacenter-technologies" 49 | ] 50 | }, 51 | { 52 | "section": "Exam Review", 53 | "notes": ["midterm-exam-review-questions", "final-exam-review-questions"] 54 | } 55 | ], 56 | "computer-networks-old": [ 57 | { 58 | "section": "Start Here", 59 | "notes": ["welcome"] 60 | }, 61 | { 62 | "section": "Download Notes", 63 | "notes": [ 64 | { 65 | "lecture": null, 66 | "title": "CN Complete (OLD)", 67 | "path": "https://payhip.com/b/9UGM", 68 | "external": true 69 | } 70 | ] 71 | }, 72 | { 73 | "section": "Lecture Notes", 74 | "notes": [ 75 | "architecture-and-principles", 76 | "switching", 77 | "routing", 78 | "naming-addressing-forwarding", 79 | "router-design-basics", 80 | "dns", 81 | "congestion-control-streaming", 82 | "rate-limiting-and-traffic-shaping", 83 | "content-distribution", 84 | "software-defined-networking", 85 | "programming-sdns", 86 | "traffic-engineering", 87 | "network-security", 88 | "internet-worms", 89 | "spam", 90 | "denial-of-service-attacks" 91 | ] 92 | } 93 | ], 94 | "information-security": [ 95 | { 96 | "section": "Start Here", 97 | "notes": ["welcome"] 98 | }, 99 | { 100 | "section": "Download Notes", 101 | "notes": [ 102 | { 103 | "lecture": null, 104 | "title": "IIS Complete", 105 | "path": "https://payhip.com/b/51wH", 106 | "external": true 107 | }, 108 | { 109 | "lecture": null, 110 | "title": "IIS Lecture Notes", 111 | "path": "https://payhip.com/b/X1j0", 112 | "external": true 113 | }, 114 | { 115 | "lecture": null, 116 | "title": "IIS Exam Review", 117 | "path": "https://payhip.com/b/34Xw", 118 | "external": true 119 | } 120 | ] 121 | }, 122 | { 123 | "section": "Lecture Notes", 124 | "notes": [ 125 | "the-security-mindset", 126 | "software-security", 127 | "operating-system-security", 128 | "authentication", 129 | "access-control", 130 | "mandatory-access-control", 131 | "database-security", 132 | "malicious-code", 133 | "modern-malware", 134 | "firewalls", 135 | "intrusion-detection", 136 | "introduction-to-cryptography", 137 | "symmetric-encryption", 138 | "public-key-cryptography", 139 | "hashes", 140 | "security-protocols", 141 | "ipsec-and-tls", 142 | "wireless-and-mobile-security", 143 | "web-security", 144 | "cyber-security", 145 | "law-ethics-and-privacy" 146 | ] 147 | }, 148 | { 149 | "section": "Exam Review", 150 | "notes": [ 151 | "udacity-quizzes", 152 | "midterm-1-study-guide", 153 | "midterm-2-study-guide" 154 | ] 155 | } 156 | ], 157 | "machine-learning-trading": [ 158 | { 159 | "section": "Start Here", 160 | "notes": ["welcome"] 161 | }, 162 | { 163 | "section": "Download Notes", 164 | "notes": [ 165 | { 166 | "lecture": null, 167 | "title": "ML4T Complete", 168 | "path": "https://payhip.com/b/h5Pv", 169 | "external": true 170 | } 171 | ] 172 | }, 173 | { 174 | "section": "Lecture Notes", 175 | "notes": [ 176 | "reading-plotting-stock-data", 177 | "working-with-multiple-stocks", 178 | "power-of-numpy", 179 | "statistical-analysis-time-series", 180 | "incomplete-data", 181 | "histograms-scatter-plots", 182 | "sharpe-ratio-other-portfolio-statistics", 183 | "optimizers-building-parameterized-model", 184 | "optimizers-how-to-optimize-portfolio", 185 | "how-machine-learning-used-hedge-fund", 186 | "regression", 187 | "assessing-learning-algorithm", 188 | "ensemble-learners-bagging-boosting", 189 | "hedge-fund-manager", 190 | "market-mechanics", 191 | "what-is-company-worth", 192 | "capital-assets-pricing-model", 193 | "how-hedge-funds-use-capm", 194 | "technical-analysis", 195 | "dealing-with-data", 196 | "efficient-markets-hypothesis", 197 | "fundamental-law-active-portfolio-management", 198 | "portfolio-optimization-efficient-frontier", 199 | "reinforcement-learning", 200 | "q-learning", 201 | "dyna" 202 | ] 203 | }, 204 | { 205 | "section": "Exam Review", 206 | "notes": ["udacity-quizzes"] 207 | } 208 | ], 209 | "simulation": [ 210 | { 211 | "section": "Start Here", 212 | "notes": ["welcome"] 213 | }, 214 | { 215 | "section": "Download Notes", 216 | "notes": [ 217 | { 218 | "lecture": null, 219 | "title": "SIM Exam 1 Cheat Sheet", 220 | "path": "https://payhip.com/b/Lk14", 221 | "external": true 222 | }, 223 | { 224 | "lecture": null, 225 | "title": "SIM Exam 2 Cheat Sheet", 226 | "path": "https://payhip.com/b/POqp", 227 | "external": true 228 | }, 229 | { 230 | "lecture": null, 231 | "title": "SIM Exam 3 Cheat Sheet", 232 | "path": "https://payhip.com/b/mZis", 233 | "external": true 234 | }, 235 | { 236 | "lecture": null, 237 | "title": "SIM Lecture Notes", 238 | "path": "https://payhip.com/b/kzli", 239 | "external": true 240 | }, 241 | { 242 | "lecture": null, 243 | "title": "SIM Complete", 244 | "path": "https://payhip.com/b/PZen", 245 | "external": true 246 | } 247 | ] 248 | }, 249 | { 250 | "section": "Lecture Notes", 251 | "notes": [ 252 | "course-tour", 253 | "calculus-probability-statistics-primers", 254 | "calculus-probability-statistics-primers-cont", 255 | "hand-and-spreadsheet-simulations", 256 | "general-simulation-principles", 257 | "arena", 258 | "arena-cont", 259 | "generating-uniform-random-numbers", 260 | "random-variate-generation", 261 | "random-variate-generation-cont", 262 | "input-analysis", 263 | "output-data-analysis", 264 | "comparing-systems", 265 | "comparing-systems-cont" 266 | ] 267 | } 268 | ], 269 | "secure-computer-systems": [ 270 | { 271 | "section": "Start Here", 272 | "notes": ["00-welcome"] 273 | }, 274 | { 275 | "section": "Download Notes", 276 | "notes": [ 277 | { 278 | "lecture": null, 279 | "title": "SCS Complete", 280 | "path": "https://payhip.com/b/0lhx", 281 | "external": true 282 | }, 283 | { 284 | "lecture": null, 285 | "title": "SCS Lecture Notes", 286 | "path": "https://payhip.com/b/FZP3", 287 | "external": true 288 | }, 289 | { 290 | "lecture": null, 291 | "title": "SCS Exam Review", 292 | "path": "https://payhip.com/b/U4Hl", 293 | "external": true 294 | } 295 | ] 296 | }, 297 | { 298 | "section": "Lecture Notes", 299 | "notes": [ 300 | "01-getting-started", 301 | "02-design-principles", 302 | "03-protecting-tcb", 303 | "04-virtualization", 304 | "05-authentication", 305 | "06-DAC", 306 | "07-MAC", 307 | "09-MAC-selinux", 308 | "10-covert-channels", 309 | "11-distributed-basics", 310 | "12-distributed-systems-2", 311 | "13-database-security-basics", 312 | "14-database-security-multilevel" 313 | ] 314 | }, 315 | { 316 | "section": "Exam Review", 317 | "notes": ["midterm-exam-review", "final-exam-review"] 318 | } 319 | ], 320 | "computer-networks": [ 321 | { 322 | "section": "Start Here", 323 | "notes": ["welcome"] 324 | }, 325 | { 326 | "section": "Download Notes", 327 | "notes": [ 328 | { 329 | "lecture": null, 330 | "title": "CN Complete", 331 | "path": "https://payhip.com/b/tCvzd", 332 | "external": true 333 | } 334 | ] 335 | }, 336 | { 337 | "section": "Lecture Notes", 338 | "notes": [ 339 | "introduction-history-and-internet-architecture", 340 | "transport-and-application-layers", 341 | "intradomain-routing", 342 | "autonomous-system-relationships-and-interdomain-routing", 343 | "router-design-and-algorithms-part-1", 344 | "router-design-and-algorithms-part-2", 345 | "software-defined-networking-part-1", 346 | "software-defined-networking-part-2", 347 | "internet-security", 348 | "internet-surveillance-and-censorship", 349 | "applications-video", 350 | "applications-cdns-and-overlay-networks" 351 | ] 352 | } 353 | ], 354 | "databases": [ 355 | { 356 | "section": "Start Here", 357 | "notes": ["welcome"] 358 | }, 359 | { 360 | "section": "Lecture Notes", 361 | "notes": [ 362 | "fundamentals-of-databases", 363 | "extended-entity-relationship-model", 364 | "eer-relational-mapping", 365 | "relational-algebra-and-calculus", 366 | "sql", 367 | "normalization", 368 | "efficiency-indexing-physical-design" 369 | ] 370 | } 371 | ], 372 | "robotics-ai-techniques": [ 373 | { 374 | "section": "Start Here", 375 | "notes": [ 376 | "welcome", 377 | "localization-overview", 378 | "kalman-filters", 379 | "particle-filters", 380 | "kinematic-bicycle-model" 381 | ] 382 | } 383 | ] 384 | } 385 | -------------------------------------------------------------------------------- /data/testimonials.json: -------------------------------------------------------------------------------- 1 | { 2 | "testimonials": [ 3 | { 4 | "name": "Vasudha Madugula", 5 | "image": "https://assets.omscs.io/testimonials/vasudhamadugula.jpg", 6 | "semester": "Spring 2020", 7 | "quote": "OMSCS Notes was a boon during my final revisions for the IIS exams! The lesson notes were crisp and the practice questions forced me to recheck my understanding of important concepts. Kudos to you Matt, for maintaining the page!" 8 | }, 9 | { 10 | "name": "Alex Naymark", 11 | "image": "https://assets.omscs.io/testimonials/alexnaymark.jpg", 12 | "semester": "Spring 2020", 13 | "quote": "Matt has put together a very valuable tool for anyone in OMSCS! Organized, concise, and the exam preparation is unmatched. Cheers Matt, you made something very cool and I hope to see it grow!" 14 | }, 15 | { 16 | "name": "Melissa Chen", 17 | "image": "https://assets.omscs.io/testimonials/melissachen.jpg", 18 | "semester": "Spring 2020", 19 | "quote": "Matt's notes are excellent. They are well-organized, detailed, and save me a lot of studying time. I really appreciate that he built this for OMSCS students!" 20 | }, 21 | { 22 | "name": "Robert Ehlers", 23 | "image": "https://assets.omscs.io/testimonials/robertehlers.png", 24 | "semester": "Spring 2019", 25 | "quote": "Matt's notes were an invaluable resource for my success in GIOS. My exam scores definitely increased by reviewing them beforehand. Having such a detailed and well organized reference made finding course material much easier than hunting through lecture videos." 26 | },{ 27 | "name": "Samuel Bigio", 28 | "image": "https://assets.omscs.io/testimonials/samuelbigio.jpg", 29 | "semester": "Spring 2019", 30 | "quote": "If you get a chance to study Matt's notes you can tell the effort he put into it, and it really pays off." 31 | },{ 32 | "name": "Taneem Ibrahim", 33 | "image": "https://assets.omscs.io/testimonials/taneemibrahim.png", 34 | "semester": "Spring 2019", 35 | "quote": "I found Matt’s notes to be a life saver in studying for Computer Networks exams. The notes are very thorough and articulates the central ideas in each lecture very well. Thank you Matt for taking the time to create these invaluable resources for the OMSCS students." 36 | } 37 | ] 38 | } 39 | -------------------------------------------------------------------------------- /firebase.json: -------------------------------------------------------------------------------- 1 | { 2 | "hosting": { 3 | "public": "dist", 4 | "ignore": [ 5 | "firebase.json", 6 | "**/.*", 7 | "**/node_modules/**" 8 | ] 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /gridsome.config.js: -------------------------------------------------------------------------------- 1 | // This is where project configuration and plugin options are located. 2 | // Learn more: https://gridsome.org/docs/config 3 | 4 | // Changes here require a server restart. 5 | // To restart press CTRL + C in terminal and run `gridsome develop` 6 | 7 | module.exports = { 8 | siteName: 'OMSCS Notes', 9 | icon: './src/assets/images/favicon.png', 10 | metadata: { 11 | mainGithub: 'https://github.com/m4ttsch/omscs-notes', 12 | notesGithub: 'https://github.com/m4ttsch/omscs-notes-notes', 13 | linkedin: 'https://www.linkedin.com/in/m4ttsch', 14 | email: 'matt@oms.fyi', 15 | amazon: 'https://amzn.to/2Pai0bO', 16 | paypal: 'https://www.paypal.me/MatthewSchlenker', 17 | buyMeACoffee: 'https://www.buymeacoffee.com/omstech', 18 | }, 19 | plugins: [ 20 | { 21 | use: '@gridsome/source-filesystem', 22 | options: { 23 | path: './**/!(README)*.md', 24 | baseDir: './notes', 25 | typeName: 'Note', 26 | remark: { 27 | plugins: [ 28 | [ 29 | 'gridsome-plugin-remark-shiki', 30 | { theme: 'nord', skipInline: true }, 31 | ], 32 | 'remark-autolink-headings', 33 | 'remark-math', 34 | 'remark-html-katex', 35 | ], 36 | }, 37 | }, 38 | }, 39 | { 40 | use: 'gridsome-plugin-tailwindcss', 41 | options: { 42 | tailwindConfig: './tailwind.config.js', 43 | purgeConfig: {}, 44 | presetEnvConfig: {}, 45 | shouldPurge: true, 46 | shouldImport: true, 47 | shouldTimeTravel: true, 48 | shouldPurgeUnusedKeyframes: true, 49 | }, 50 | }, 51 | ], 52 | } 53 | -------------------------------------------------------------------------------- /gridsome.server.js: -------------------------------------------------------------------------------- 1 | // Server API makes it possible to hook into various parts of Gridsome 2 | // on server-side and add custom data to the GraphQL data layer. 3 | // Learn more: https://gridsome.org/docs/server-api/ 4 | 5 | // Changes here require a server restart. 6 | // To restart press CTRL + C in terminal and run `gridsome develop` 7 | 8 | module.exports = function () {} 9 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "omscs-notes", 3 | "private": true, 4 | "scripts": { 5 | "build": "GRIDSOME_ENV=production gridsome build", 6 | "develop": "GRIDSOME_ENV=development gridsome develop", 7 | "explore": "gridsome explore", 8 | "lint": "vue-cli-service lint" 9 | }, 10 | "volta": { 11 | "node": "14.19.0" 12 | }, 13 | "dependencies": { 14 | "@gridsome/source-filesystem": "^0.6.2", 15 | "@gridsome/transformer-remark": "^0.4.0", 16 | "github-markdown-css": "^3.0.1", 17 | "gridsome": "^0.7.0", 18 | "gridsome-plugin-purgecss": "^1.0.12", 19 | "gridsome-plugin-remark-shiki": "^0.3.1", 20 | "remark-autolink-headings": "^5.2.1", 21 | "remark-html-katex": "^2.0.0", 22 | "remark-math": "^2.0.0", 23 | "v-tooltip": "^2.0.2", 24 | "vue-carousel": "^0.18.0", 25 | "vue-notification": "^1.3.20" 26 | }, 27 | "devDependencies": { 28 | "@vue/cli-plugin-eslint": "^4.3.1", 29 | "@vue/cli-service": "^4.3.1", 30 | "@vue/eslint-config-prettier": "^6.0.0", 31 | "babel-eslint": "^10.1.0", 32 | "eslint": "^7.0.0", 33 | "eslint-plugin-gridsome": "^1.4.0", 34 | "eslint-plugin-prettier": "^3.1.3", 35 | "eslint-plugin-vue": "^6.2.2", 36 | "gridsome-plugin-tailwindcss": "^2.2.27", 37 | "node-sass": "^4.13.1", 38 | "prettier": "^2.0.5", 39 | "sass-loader": "^8.0.0", 40 | "vue-eslint-parser": "^7.0.0" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/assets/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m4ttsch/omscs-notes/af2688e6973543722678d9b19e425f1d9a34ed70/src/assets/images/favicon.png -------------------------------------------------------------------------------- /src/components/Ad.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 34 | 35 | 112 | -------------------------------------------------------------------------------- /src/components/Footer.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 25 | -------------------------------------------------------------------------------- /src/components/Header.vue: -------------------------------------------------------------------------------- 1 | 49 | 50 | 67 | 68 | 79 | -------------------------------------------------------------------------------- /src/components/header/AlgoliaSearch.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 32 | 33 | 38 | -------------------------------------------------------------------------------- /src/components/header/ExternalLinks.vue: -------------------------------------------------------------------------------- 1 | 67 | 68 | 69 | query { 70 | metadata { 71 | mainGithub 72 | linkedin 73 | email 74 | paypal 75 | amazon 76 | buyMeACoffee 77 | } 78 | } 79 | 80 | 81 | 86 | 87 | 100 | -------------------------------------------------------------------------------- /src/components/header/IconHomeLink.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 19 | -------------------------------------------------------------------------------- /src/components/header/PrimaryNavLinks.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 33 | -------------------------------------------------------------------------------- /src/components/home/GentleWave.vue: -------------------------------------------------------------------------------- 1 | 36 | 37 | 40 | 41 | 112 | -------------------------------------------------------------------------------- /src/components/home/Hero.vue: -------------------------------------------------------------------------------- 1 | 56 | 57 | 66 | -------------------------------------------------------------------------------- /src/components/home/HeroImage.vue: -------------------------------------------------------------------------------- 1 | 208 | 209 | 214 | -------------------------------------------------------------------------------- /src/components/home/Notebooks.vue: -------------------------------------------------------------------------------- 1 | 54 | 55 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /src/components/home/Testimonials.vue: -------------------------------------------------------------------------------- 1 | 55 | 56 | 57 | query { 58 | metadata { 59 | email 60 | } 61 | } 62 | 63 | 64 | 85 | -------------------------------------------------------------------------------- /src/components/home/ThankYou.vue: -------------------------------------------------------------------------------- 1 | 94 | 95 | 96 | query { 97 | metadata { 98 | paypal 99 | amazon 100 | mainGithub 101 | email 102 | buyMeACoffee 103 | } 104 | } 105 | 106 | 107 | 115 | 116 | 121 | -------------------------------------------------------------------------------- /src/components/note/Content.vue: -------------------------------------------------------------------------------- 1 | 55 | 56 | 57 | query { 58 | metadata { 59 | notesGithub 60 | } 61 | } 62 | 63 | 64 | 108 | 109 | 221 | -------------------------------------------------------------------------------- /src/components/note/Sidebar.vue: -------------------------------------------------------------------------------- 1 | 38 | 39 | 40 | query { 41 | metadata { 42 | paypal 43 | buyMeACoffee 44 | } 45 | } 46 | 47 | 48 | 84 | -------------------------------------------------------------------------------- /src/components/note/Sidebar/ActiveSidebarLink.vue: -------------------------------------------------------------------------------- 1 | 26 | 27 | 54 | -------------------------------------------------------------------------------- /src/components/note/Sidebar/SidebarGroup.vue: -------------------------------------------------------------------------------- 1 | 27 | 28 | 50 | -------------------------------------------------------------------------------- /src/components/notification/ThanksgivingDiscount.vue: -------------------------------------------------------------------------------- 1 | 43 | 44 | 68 | 69 | -------------------------------------------------------------------------------- /src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ${head} 5 | 6 | 7 | 10 | 11 | 12 | ${app} 13 | ${scripts} 14 | 15 | 16 | 18 | 19 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/layouts/Default.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 23 | -------------------------------------------------------------------------------- /src/layouts/Note.vue: -------------------------------------------------------------------------------- 1 | 26 | 27 | 42 | 43 | 49 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | // This is the main.js file. Import global CSS and scripts here. 2 | // The Client API can be used here. Learn more: gridsome.org/docs/client-api 3 | import DefaultLayout from '~/layouts/Default.vue' 4 | 5 | let Notifications 6 | 7 | if (process.isServer) { 8 | Notifications = require('vue-notification/dist/ssr.js') 9 | } else { 10 | Notifications = require('vue-notification').default 11 | } 12 | 13 | export default function (Vue, { head }) { 14 | Vue.use(Notifications) 15 | Vue.component('Layout', DefaultLayout) 16 | } 17 | -------------------------------------------------------------------------------- /src/mixins/mailchimp.js: -------------------------------------------------------------------------------- 1 | export default { 2 | methods: { 3 | openMailchimp() { 4 | window.dojoRequire(['mojo/signup-forms/Loader'], function (L) { 5 | L.start({ 6 | baseUrl: 'mc.us18.list-manage.com', 7 | uuid: '725428452f287e1c73da82617', 8 | lid: 'f9376ad0a8', 9 | uniqueMethods: true, 10 | }) 11 | }) 12 | 13 | document.cookie = 'MCPopupClosed=; expires=Thu, 01 Jan 1970 00:00:00 UTC' 14 | document.cookie = 15 | 'MCPopupSubscribed=; expires=Thu, 01 Jan 1970 00:00:00 UTC' 16 | }, 17 | }, 18 | } 19 | -------------------------------------------------------------------------------- /src/pages/404.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 23 | -------------------------------------------------------------------------------- /src/pages/Index.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 47 | -------------------------------------------------------------------------------- /src/pages/Privacy.vue: -------------------------------------------------------------------------------- 1 | 858 | 859 | 862 | 863 | 901 | -------------------------------------------------------------------------------- /src/templates/Note.vue: -------------------------------------------------------------------------------- 1 | 27 | 28 | 29 | query Note($id: ID!, $course: String!) { 30 | note: note(id: $id) { 31 | course 32 | lecture 33 | title 34 | path 35 | timeToRead 36 | content 37 | headings { 38 | value 39 | depth 40 | anchor 41 | } 42 | } 43 | notes: allNote(filter: { course: { eq: $course } }) { 44 | edges { 45 | node { 46 | lecture 47 | title 48 | path 49 | } 50 | } 51 | } 52 | } 53 | 54 | 99 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | theme: { 3 | extend: { 4 | fontFamily: { 5 | sans: ['Lato', 'sans-serif'], 6 | }, 7 | }, 8 | }, 9 | variants: {}, 10 | plugins: [], 11 | } 12 | --------------------------------------------------------------------------------