[01;34m.)
├──[✅]--(0-notes)
│ └──[✅]--(medium-articles)
├──[✅]--(1-projects)
│ ├──[✅]--(A_arrays_solution)
│ ├──[✅]--(A_conditionals_solution)
│ ├──[✅]--(A_executing_code_solution)
│ ├──[✅]--(A_functions_solution)
│ ├──[✅]--(A_loops_solution)
│ ├──[✅]--(A_nested_loops_solution)
│ ├──[✅]--(Atomic-Design-Solution-master)
│ │ └──[✅]--(dogs)
│ │ ├──[✅]--(public)
│ │ └──[✅]--(src)
│ │ ├──[✅]--(atoms)
│ │ ├──[✅]--(molecules)
│ │ ├──[✅]--(organisms)
│ │ ├──[✅]--(pages)
│ │ └──[✅]--(templates)
│ ├──[✅]--(B_arrays_solution)
│ ├──[✅]--(B_expressions_solution)
│ ├──[✅]--(B_functions_solution)
│ ├──[✅]--(B_loops_solution)
│ ├──[✅]--(B_two_dimensional_arrays_solution)
│ ├──[✅]--(Basic-JavaScript-master)
│ │ ├──[✅]--(src)
│ │ └──[✅]--(tests)
│ ├──[✅]--(C_arrays_solution)
│ ├──[✅]--(C_functions_solution)
│ ├──[✅]--(C_loops_solution)
│ ├──[✅]--(C_more_problems_solution)
│ ├──[✅]--(C_variables_solution)
│ ├──[✅]--(Client-Auth-Solution-master)
│ │ ├──[✅]--(public)
│ │ └──[✅]--(src)
│ │ ├──[✅]--(actions)
│ │ ├──[✅]--(components)
│ │ │ └──[✅]--(HOC)
│ │ └──[✅]--(reducers)
│ ├──[✅]--(Closures-Callbacks-ArrayMethods)
│ │ └──[✅]--(JS-Exercise-Closures-Callbacks-ArrayMethods-master)
│ │ ├──[✅]--(data)
│ │ └──[✅]--(test)
│ ├──[✅]--(Components-BEM-Solution-master)
│ │ ├──[✅]--(components)
│ │ │ ├──[✅]--(Box)
│ │ │ ├──[✅]--(Dropdown)
│ │ │ └──[✅]--(Section)
│ │ └──[✅]--(markups)
│ ├──[✅]--(Components-Constructors-Solution-master)
│ │ ├──[✅]--(components)
│ │ │ ├──[✅]--(Box)
│ │ │ ├──[✅]--(Dropdown)
│ │ │ ├──[✅]--(Section)
│ │ │ └──[✅]--(Tabs)
│ │ └──[✅]--(markups)
│ ├──[✅]--(DOM-JavaScript-mini-Solution-master)
│ │ └──[✅]--(components)
│ │ ├──[✅]--(Box)
│ │ ├──[✅]--(Header)
│ │ ├──[✅]--(List)
│ │ ├──[✅]--(Nav)
│ │ ├──[✅]--(Section)
│ │ └──[✅]--(Tabs)
│ ├──[✅]--(D_string_indexing_and_methods_solution)
│ ├──[✅]--(Data-Structures-master)
│ │ ├──[✅]--(avl_tree)
│ │ ├──[✅]--(binary_search_tree)
│ │ ├──[✅]--(doubly_linked_list)
│ │ ├──[✅]--(heap)
│ │ ├──[✅]--(lru_cache)
│ │ ├──[✅]--(queue)
│ │ ├──[✅]--(singly_linked_list)
│ │ └──[✅]--(stack)
│ ├──[✅]--(HTML-CSS-mini-Solution-master)
│ │ └──[✅]--(components)
│ │ ├──[✅]--(Box)
│ │ ├──[✅]--(Header)
│ │ └──[✅]--(Section)
│ ├──[✅]--(Intro-Python-I-master)
│ │ └──[✅]--(src)
│ ├──[✅]--(Intro-Python-II-master)
│ │ ├──[✅]--(examples)
│ │ └──[✅]--(src)
│ ├──[✅]--(Intro-to-C-master)
│ │ ├──[✅]--(fizzbuzz)
│ │ │ └──[✅]--(tests)
│ │ ├──[✅]--(hangman)
│ │ ├──[✅]--(malloc)
│ │ │ └──[✅]--(tests)
│ │ ├──[✅]--(pointers)
│ │ │ └──[✅]--(tests)
│ │ ├──[✅]--(queue)
│ │ │ └──[✅]--(tests)
│ │ ├──[✅]--(quicksort)
│ │ │ └──[✅]--(tests)
│ │ ├──[✅]--(strings)
│ │ │ └──[✅]--(tests)
│ │ ├──[✅]--(structs)
│ │ │ └──[✅]--(tests)
│ │ └──[✅]--(utils)
│ ├──[✅]--(JS-Exercise-Classes)
│ │ └──[✅]--(test)
│ ├──[✅]--(JavaScript-III-master)
│ │ └──[✅]--(assignments)
│ ├──[✅]--(LS-Data-Structures-I-Solution-master)
│ │ ├──[✅]--(src)
│ │ └──[✅]--(tests)
│ ├──[✅]--(LS-Data-Structures-II-Solution-master)
│ │ ├──[✅]--(src)
│ │ └──[✅]--(tests)
│ ├──[✅]--(Mongo-Mini-II-Solution-master)
│ ├──[✅]--(Node-Express-Gmaps-Solution-Day-I-master)
│ │ └──[✅]--(src)
│ │ ├──[✅]--(controllers)✅
│ │ └──[✅]--(models)
│ ├──[✅]--(Node-Express-Gmaps-Solution-Day-II-master)
│ │ └──[✅]--(src)
│ │ ├──[✅]--(controllers)
│ │ └──[✅]--(models)
│ ├──[✅]--(Python-OOP-Toy-master)
│ │ └──[✅]--(src)
│ ├──[✅]--(React-Todo-Solution-master)
│ │ ├──[✅]--(public)
│ │ └──[✅]--(src)
│ │ └──[✅]--(tests)
│ ├──[✅]--(Relational-Databases-master)
│ ├──[✅]--(Sprint-Challenge--Intro-Python-master)
│ │ └──[✅]--(src)
│ │ ├──[✅]--(cityreader)
│ │ ├──[✅]--(comp)
│ │ └──[✅]--(oop)
│ ├──[✅]--(_Pet-Projects)
│ │ └──[✅]--(whack-a-mole)
│ ├──[✅]--(_Pet-prac-projects)
│ │ ├──[✅]--(01 - JavaScript Drum Kit)
│ │ │ └──[✅]--(sounds)
│ │ ├──[✅]--(02 - JS and CSS Clock)
│ │ ├──[✅]--(03 - CSS Variables)
│ │ ├──[✅]--(04 - Array Cardio Day 1)
│ │ ├──[✅]--(05 - Flex Panel Gallery)
│ │ ├──[✅]--(06 - Type Ahead)
│ │ ├──[✅]--(07 - Array Cardio Day 2)
│ │ ├──[✅]--(08 - Fun with HTML5 Canvas)
│ │ ├──[✅]--(09 - Dev Tools Domination)
│ │ ├──[✅]--(10 - Hold S✅ft and Check Checkboxes)
│ │ ├──[✅]--(11 - Custom Video Player)
│ │ ├──[✅]--(12 - Key Sequence Detection)
│ │ ├──[✅]--(13 - Slide in on Scroll)
│ │ ├──[✅]--(14 - JavaScript References VS Copying)
│ │ ├──[✅]--(15 - LocalStorage)
│ │ ├──[✅]--(16 - Mouse Move Shadow)
│ │ ├──[✅]--(17 - Sort Without Articles)
│ │ ├──[✅]--(18 - Adding Up Times with Reduce)
│ │ ├──[✅]--(19 - Webcam Fun)
│ │ ├──[✅]--(20 - Speech Detection)
│ │ ├──[✅]--(21 - Geolocation)
│ │ ├──[✅]--(22 - Follow Along Link ✅ghlighter)
│ │ ├──[✅]--(23 - Speech Synthesis)
│ │ ├──[✅]--(24 - Sticky Nav)
│ │ ├──[✅]--(25 - Event Capture, Propagation, Bubbling and Once)
│ │ ├──[✅]--(26 - Stripe Follow Along Nav)
│ │ ├──[✅]--(27 - Click and Drag)
│ │ ├──[✅]--(28 - Video Speed Controller)
│ │ ├──[✅]--(29 - Countdown Timer)
│ │ └──[✅]--(30 - Whack A Mole)
│ ├──[✅]--(master)
│ ├──[✅]--(nested-data-exercises-master)
│ │ ├──[✅]--(data)
│ │ └──[✅]--(test)
│ ├──[✅]--(solutions)
│ ├──[✅]--(web-guided-project-testing-web-apps-solution-main)
│ │ ├──[✅]--(public)
│ │ └──[✅]--(src)
│ │ └──[✅]--(components)
│ └──[✅]--(webapi-ii-challenge-master)
│ └──[✅]--(data)
│ ├──[✅]--(migrations)
│ └──[✅]--(seeds)
├──[✅]--(10-miscellaneous)
│ └──[✅]--(scrap)
├──[✅]--(11-Site-Documentation)
├──[✅]--(2-resources)
│ ├──[✅]--(Atomic-Design-Solution-master)
│ │ └──[✅]--(dogs)
│ │ ├──[✅]--(public)
│ │ └──[✅]--(src)
│ │ ├──[✅]--(atoms)
│ │ ├──[✅]--(molecules)
│ │ ├──[✅]--(organisms)
│ │ ├──[✅]--(pages)
│ │ └──[✅]--(templates)
│ ├──[✅]--(Client-Auth-Solution-master)
│ │ ├──[✅]--(public)
│ │ └──[✅]--(src)
│ │ ├──[✅]--(actions)
│ │ ├──[✅]--(components)
│ │ │ └──[✅]--(HOC)
│ │ └──[✅]--(reducers)
│ ├──[✅]--(Components-BEM-Solution-master)
│ │ ├──[✅]--(components)
│ │ │ ├──[✅]--(Box)
│ │ │ ├──[✅]--(Dropdown)
│ │ │ └──[✅]--(Section)
│ │ └──[✅]--(markups)
│ ├──[✅]--(Components-Constructors-Solution-master)
│ │ ├──[✅]--(components)
│ │ │ ├──[✅]--(Box)
│ │ │ ├──[✅]--(Dropdown)
│ │ │ ├──[✅]--(Section)
│ │ │ └──[✅]--(Tabs)
│ │ └──[✅]--(markups)
│ ├──[✅]--(DOM-JavaScript-mini-Solution-master)
│ │ └──[✅]--(components)
│ │ ├──[✅]--(Box)
│ │ ├──[✅]--(Header)
│ │ ├──[✅]--(List)
│ │ ├──[✅]--(Nav)
│ │ ├──[✅]--(Section)
│ │ └──[✅]--(Tabs)
│ ├──[✅]--(HTML-CSS-mini-Solution-master)
│ │ └──[✅]--(components)
│ │ ├──[✅]--(Box)
│ │ ├──[✅]--(Header)
│ │ └──[✅]--(Section)
│ ├──[✅]--(JavaScript-I-master)
│ │ └──[✅]--(assignments)
│ ├──[✅]--(LS-Data-Structures-I-Solution-master)
│ │ ├──[✅]--(src)
│ │ └──[✅]--(tests)
│ ├──[✅]--(LS-Data-Structures-II-Solution-master)
│ │ ├──[✅]--(src)
│ │ └──[✅]--(tests)
│ ├──[✅]--(LambdaSQL-master)
│ │ └──[✅]--(LambdaSQL-master)
│ │ ├──[✅]--(module1)
│ │ ├──[✅]--(module2)
│ │ ├──[✅]--(module3)
│ │ └──[✅]--(module4)
│ ├──[✅]--(MDB5-STANDARD-UI-KIT-Free-3.4.0)
│ │ ├──[✅]--(css)
│ │ ├──[✅]--(img)
│ │ ├──[✅]--(js)
│ │ └──[✅]--(src)
│ │ ├──[✅]--(js)
│ │ │ ├──[✅]--(bootstrap)
│ │ │ ├──[✅]--(free)
│ │ │ └──[✅]--(mdb)
│ │ └──[✅]--(scss)
│ │ ├──[✅]--(bootstrap)
│ │ ├──[✅]--(bootstrap-rtl-fix)
│ │ ├──[✅]--(custom)
│ │ └──[✅]--(free)
│ ├──[✅]--(Node-Express-Gmaps-Solution-Day-I-master)
│ │ └──[✅]--(src)
│ │ ├──[✅]--(controllers)
│ │ └──[✅]--(models)
│ ├──[✅]--(Node-Express-Gmaps-Solution-Day-II-master)
│ │ └──[✅]--(src)
│ │ ├──[✅]--(controllers)
│ │ └──[✅]--(models)
│ ├──[✅]--(React-Todo-Solution-master)
│ │ ├──[✅]--(public)
│ │ └──[✅]--(src)
│ │ └──[✅]--(tests)
│ ├──[✅]--(WEB-DEV-Checklist)
│ │ └──[✅]--(WebDeveloperChecklist_files)
│ ├──[✅]--(_External-learning-resources)
│ │ ├──[✅]--(00-Javascript)
│ │ │ ├──[✅]--(-Serverless-JavaScript-by-Example)
│ │ │ │ ├──[✅]--(Section 1)
│ │ │ │ ├──[✅]--(Section 2)
│ │ │ │ ├──[✅]--(Section 3)
│ │ │ │ ├──[✅]--(Section 4)
│ │ │ │ └──[✅]--(Section 5)
│ │ │ ├──[✅]--(JavaScript-Essentials)
│ │ │ │ ├──[✅]--(Section 1)
│ │ │ │ └──[✅]--(Section 2)
│ │ │ ├──[✅]--(JavaScript-and-jQuery)
│ │ │ │ ├──[✅]--(Day_1)
│ │ │ │ ├──[✅]--(Day_2)
│ │ │ │ ├──[✅]--(Day_3)
│ │ │ │ ├──[✅]--(Day_4)
│ │ │ │ ├──[✅]--(Day_5)
│ │ │ │ ├──[✅]--(Day_6)
│ │ │ │ └──[✅]--(Day_7)
│ │ │ ├──[✅]--(JavaScript-useful-methods)
│ │ │ │ └──[✅]--(JS)
│ │ │ ├──[✅]--(Node.js_Design_Patterns)
│ │ │ │ ├──[✅]--(Chapter01)
│ │ │ │ ├──[✅]--(Chapter02)
│ │ │ │ ├──[✅]--(Chapter03)
│ │ │ │ ├──[✅]--(Chapter04)
│ │ │ │ ├──[✅]--(Chapter05)
│ │ │ │ ├──[✅]--(Chapter06)
│ │ │ │ ├──[✅]--(Chapter07)
│ │ │ │ ├──[✅]--(Chapter08)
│ │ │ │ ├──[✅]--(Chapter09)
│ │ │ │ ├──[✅]--(Chapter10)
│ │ │ │ └──[✅]--(Chapter11)
│ │ │ └──[✅]--(Object-oriented-programming-for-JavaScript)
│ │ │ ├──[✅]--(Module 1)
│ │ │ └──[✅]--(Module 2)
│ │ └──[✅]--(01-Typescript)
│ │ ├──[✅]--(Learning-Typescript-2)
│ │ │ ├──[✅]--(Chapter02)
│ │ │ ├──[✅]--(Chapter03)
│ │ │ ├──[✅]--(Chapter07)
│ │ │ ├──[✅]--(Chapter09)
│ │ │ └──[✅]--(Chapter10)
│ │ ├──[✅]--(LearningTypeScript)
│ │ │ ├──[✅]--(chapters)
│ │ │ ├──[✅]--(media)
│ │ │ └──[✅]--(test)
│ │ └──[✅]--(learn-typescript-3)
│ │ ├──[✅]--(01-getting-started)
│ │ ├──[✅]--(02-type-system-introduction)
│ │ ├──[✅]--(03-javascript-features)
│ │ ├──[✅]--(04-project)
│ │ ├──[✅]--(05-diving-deeper)
│ │ ├──[✅]--(06-integration)
│ │ ├──[✅]--(lib)
│ │ └──[✅]--(solutions)
│ ├──[✅]--(_GENERAL-RESOURCES)
│ │ ├──[✅]--(code-camp)
│ │ │ ├──[✅]--(01-responsive-web-design)
│ │ │ │ ├──[✅]--(applied-accessibility)
│ │ │ │ ├──[✅]--(applied-visual-design)
│ │ │ │ ├──[✅]--(basic-css)
│ │ │ │ ├──[✅]--(basic-css-cafe-menu)
│ │ │ │ ├──[✅]--(basic-html-and-html5)
│ │ │ │ ├──[✅]--(basic-html-cat-photo-app)
│ │ │ │ ├──[✅]--(css-flexbox)
│ │ │ │ ├──[✅]--(css-grid)
│ │ │ │ ├──[✅]--(css-variables-skyline)
│ │ │ │ ├──[✅]--(responsive-web-design-principles)
│ │ │ │ └──[✅]--(responsive-web-design-projects)
│ │ │ ├──[✅]--(02-javascript-algorithms-and-data-structures)
│ │ │ │ ├──[✅]--(basic-algorithm-scripting)
│ │ │ │ ├──[✅]--(basic-data-structures)
│ │ │ │ ├──[✅]--(basic-javascript)
│ │ │ │ ├──[✅]--(basic-javascript-rpg-game)
│ │ │ │ ├──[✅]--(debugging)
│ │ │ │ ├──[✅]--(es6)
│ │ │ │ ├──[✅]--(functional-programming)
│ │ │ │ ├──[✅]--(functional-programming-spreadsheet)
│ │ │ │ ├──[✅]--(intermediate-algorithm-scripting)
│ │ │ │ ├──[✅]--(intermediate-javascript-calorie-counter)
│ │ │ │ ├──[✅]--(javascript-algorithms-and-data-structures-projects)
│ │ │ │ ├──[✅]--(object-oriented-programming)
│ │ │ │ └──[✅]--(regular-expressions)
│ │ │ ├──[✅]--(03-front-end-libraries)
│ │ │ │ ├──[✅]--(bootstrap)
│ │ │ │ ├──[✅]--(front-end-libraries-projects)
│ │ │ │ ├──[✅]--(jquery)
│ │ │ │ ├──[✅]--(react)
│ │ │ │ ├──[✅]--(react-and-redux)
│ │ │ │ ├──[✅]--(redux)
│ │ │ │ └──[✅]--(sass)
│ │ │ ├──[✅]--(04-data-visualization)
│ │ │ │ ├──[✅]--(d3-dashboard)
│ │ │ │ ├──[✅]--(data-visualization-projects)
│ │ │ │ ├──[✅]--(data-visualization-with-d3)
│ │ │ │ └──[✅]--(json-apis-and-ajax)
│ │ │ ├──[✅]--(05-apis-and-microservices)
│ │ │ │ ├──[✅]--(apis-and-microservices-projects)
│ │ │ │ ├──[✅]--(basic-node-and-express)
│ │ │ │ ├──[✅]--(managing-packages-with-npm)
│ │ │ │ └──[✅]--(mongodb-and-mongoose)
│ │ │ ├──[✅]--(06-quality-assurance)
│ │ │ │ ├──[✅]--(advanced-node-and-express)
│ │ │ │ ├──[✅]--(quality-assurance-and-testing-with-chai)
│ │ │ │ └──[✅]--(quality-assurance-projects)
│ │ │ ├──[✅]--(07-scientific-computing-with-python)
│ │ │ │ ├──[✅]--(python-for-everybody)
│ │ │ │ └──[✅]--(scientific-computing-with-python-projects)
│ │ │ ├──[✅]--(08-data-analysis-with-python)
│ │ │ │ ├──[✅]--(data-analysis-with-python-course)
│ │ │ │ ├──[✅]--(data-analysis-with-python-projects)
│ │ │ │ └──[✅]--(numpy)
│ │ │ ├──[✅]--(09-information-security)
│ │ │ │ ├──[✅]--(information-security-projects)
│ │ │ │ ├──[✅]--(information-security-with-helmetjs)
│ │ │ │ └──[✅]--(python-for-penetration-testing)
│ │ │ ├──[✅]--(10-coding-interview-prep)
│ │ │ │ ├──[✅]--(algorithms)
│ │ │ │ ├──[✅]--(data-structures)
│ │ │ │ ├──[✅]--(project-euler)
│ │ │ │ ├──[✅]--(rosetta-code)
│ │ │ │ └──[✅]--(take-home-projects)
│ │ │ ├──[✅]--(11-mac✅ne-learning-with-python)
│ │ │ │ ├──[✅]--(how-neural-networks-work)
│ │ │ │ ├──[✅]--(mac✅ne-learning-with-python-projects)
│ │ │ │ └──[✅]--(tensorflow)
│ │ │ └──[✅]--(12-certificates)
│ │ │ ├──[✅]--(apis-and-microservices-certificate)
│ │ │ ├──[✅]--(data-analysis-with-python-certificate)
│ │ │ ├──[✅]--(data-visualization-certificate)
│ │ │ ├──[✅]--(front-end-libraries-certificate)
│ │ │ ├──[✅]--(information-security-certificate)
│ │ │ ├──[✅]--(javascript-algorithms-and-data-structures-certificate)
│ │ │ ├──[✅]--(legacy-back-end-certificate)
│ │ │ ├──[✅]--(legacy-data-visualization-certificate)
│ │ │ ├──[✅]--(legacy-front-end-certificate)
│ │ │ ├──[✅]--(legacy-full-stack-certificate)
│ │ │ ├──[✅]--(legacy-information-security-and-quality-assurance-certificate)
│ │ │ ├──[✅]--(mac✅ne-learning-with-python-certificate)
│ │ │ ├──[✅]--(quality-assurance-certificate)
│ │ │ ├──[✅]--(responsive-web-design-certificate)
│ │ │ └──[✅]--(scientific-computing-with-python-certificate)
│ │ └──[✅]--(w3c-standard-forHTML)
│ │ ├──[✅]--(html5appsproject.files.wordpress.com)
│ │ │ └──[✅]--(2014)
│ │ ├──[✅]--(open-stand.org)
│ │ │ └──[✅]--(wp-content)
│ │ ├──[✅]--(pixel.wp.com)
│ │ ├──[✅]--(www.developereconomics.com)
│ │ │ └──[✅]--(wp-content)
│ │ └──[✅]--(www.w3.org)
│ │ ├──[✅]--(2015)
│ │ ├──[✅]--(WAI)
│ │ └──[✅]--(standards)
│ ├──[✅]--(_OFFICIAL-resource-documentations)
│ │ ├──[✅]--(docs.github.com)
│ │ │ ├──[✅]--(assets)
│ │ │ │ ├──[✅]--(fonts)
│ │ │ │ └──[✅]--(images)
│ │ │ ├──[✅]--(dist)
│ │ │ │ └──[✅]--(fonts)
│ │ │ ├──[✅]--(en)
│ │ │ │ ├──[✅]--(actions)
│ │ │ │ ├──[✅]--(code-security)
│ │ │ │ ├──[✅]--(developers)
│ │ │ │ ├──[✅]--(enterprise-server@2.21)
│ │ │ │ ├──[✅]--(enterprise-server@2.22)
│ │ │ │ ├──[✅]--(enterprise-server@3.0)
│ │ │ │ ├──[✅]--(github)
│ │ │ │ ├──[✅]--(github-ae@latest)
│ │ │ │ ├──[✅]--(graphql)
│ │ │ │ ├──[✅]--(organizations)
│ │ │ │ ├──[✅]--(packages)
│ │ │ │ └──[✅]--(rest)
│ │ │ └──[✅]--(images)
│ │ │ ├──[✅]--(modules)
│ │ │ └──[✅]--(spinners)
│ │ └──[✅]--(npm-docs)
│ │ ├──[✅]--(commands)
│ │ ├──[✅]--(configuring-npm)
│ │ └──[✅]--(using-npm)
│ ├──[✅]--(_Orginization-and-lambda-procedure)
│ ├──[✅]--(_PYTHON)
│ │ └──[✅]--(code-examples-master)
│ │ ├──[✅]--(aws)
│ │ │ ├──[✅]--(aws-policies)
│ │ │ ├──[✅]--(bash)
│ │ │ └──[✅]--(python)
│ │ ├──[✅]--(concourse)
│ │ ├──[✅]--(elasticsearch)
│ │ │ └──[✅]--(python)
│ │ ├──[✅]--(golang)
│ │ │ ├──[✅]--(basics)
│ │ │ └──[✅]--(robotgo)
│ │ ├──[✅]--(mongodb)
│ │ │ ├──[✅]--(golang)
│ │ │ └──[✅]--(python)
│ │ ├──[✅]--(mysql)
│ │ │ └──[✅]--(python)
│ │ ├──[✅]--(python-flask)
│ │ │ └──[✅]--(api)
│ │ ├──[✅]--(ruby)
│ │ │ └──[✅]--(basics)
│ │ └──[✅]--(sqlite)
│ │ └──[✅]--(python)
│ ├──[✅]--(_Past-Projects)
│ │ ├──[✅]--(Atomic-Design-Solution-master)
│ │ │ └──[✅]--(dogs)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ ├──[✅]--(Client-Auth-Solution-master)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(actions)
│ │ │ ├──[✅]--(components)
│ │ │ └──[✅]--(reducers)
│ │ ├──[✅]--(Components-BEM-Solution-master)
│ │ │ ├──[✅]--(components)
│ │ │ │ ├──[✅]--(Box)
│ │ │ │ ├──[✅]--(Dropdown)
│ │ │ │ └──[✅]--(Section)
│ │ │ └──[✅]--(markups)
│ │ ├──[✅]--(Components-Constructors-Solution-master)
│ │ │ ├──[✅]--(components)
│ │ │ │ ├──[✅]--(Box)
│ │ │ │ ├──[✅]--(Dropdown)
│ │ │ │ ├──[✅]--(Section)
│ │ │ │ └──[✅]--(Tabs)
│ │ │ └──[✅]--(markups)
│ │ ├──[✅]--(DOM-II-master)
│ │ ├──[✅]--(DOM-JavaScript-mini-Solution-master)
│ │ │ └──[✅]--(components)
│ │ │ ├──[✅]--(Box)
│ │ │ ├──[✅]--(Header)
│ │ │ ├──[✅]--(List)
│ │ │ ├──[✅]--(Nav)
│ │ │ ├──[✅]--(Section)
│ │ │ └──[✅]--(Tabs)
│ │ ├──[✅]--(Data-Structures-Notes-master)
│ │ │ ├──[✅]--(BST_and_Heaps)
│ │ │ ├──[✅]--(Doubly_Linked_List)
│ │ │ ├──[✅]--(Interview_Problems)
│ │ │ └──[✅]--(Linked_Lists)
│ │ ├──[✅]--(Data-Structures-and-Algorithms-master)
│ │ │ ├──[✅]--(assets)
│ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(algorithms)
│ │ │ ├──[✅]--(analysis-of-algorithms)
│ │ │ └──[✅]--(data-structures)
│ │ ├──[✅]--(Data-Structures-master)
│ │ │ ├──[✅]--(avl_tree)
│ │ │ ├──[✅]--(binary_search_tree)
│ │ │ ├──[✅]--(doubly_linked_list)
│ │ │ ├──[✅]--(heap)
│ │ │ ├──[✅]--(javascript)
│ │ │ │ └──[✅]--(tests)
│ │ │ ├──[✅]--(lru_cache)
│ │ │ ├──[✅]--(python)
│ │ │ │ ├──[✅]--(binary_search_tree)
│ │ │ │ ├──[✅]--(doubly_linked_list)
│ │ │ │ ├──[✅]--(heap)
│ │ │ │ ├──[✅]--(linked_list)
│ │ │ │ └──[✅]--(queue)
│ │ │ └──[✅]--(queue)
│ │ ├──[✅]--(Graphs-Notes-master)
│ │ │ ├──[✅]--(img)
│ │ │ ├──[✅]--(lecture1)
│ │ │ ├──[✅]--(lecture2)
│ │ │ ├──[✅]--(lecture3)
│ │ │ └──[✅]--(lecture4)
│ │ ├──[✅]--(Graphs-master)
│ │ │ ├──[✅]--(javascript)
│ │ │ │ ├──[✅]--(guided-demo)
│ │ │ │ ├──[✅]--(objectives)
│ │ │ │ └──[✅]--(projects)
│ │ │ ├──[✅]--(objectives)
│ │ │ │ ├──[✅]--(breadth-first-search)
│ │ │ │ ├──[✅]--(connected-components)
│ │ │ │ ├──[✅]--(depth-first-search)
│ │ │ │ ├──[✅]--(graph-intro)
│ │ │ │ ├──[✅]--(graph-representations)
│ │ │ │ └──[✅]--(randomness)
│ │ │ ├──[✅]--(projects)
│ │ │ │ ├──[✅]--(adventure)
│ │ │ │ ├──[✅]--(ancestor)
│ │ │ │ ├──[✅]--(graph)
│ │ │ │ └──[✅]--(social)
│ │ │ └──[✅]--(python)
│ │ │ ├──[✅]--(guided-demo)
│ │ │ └──[✅]--(projects)
│ │ ├──[✅]--(HTML-CSS-mini-Solution-master)
│ │ │ └──[✅]--(components)
│ │ │ ├──[✅]--(Box)
│ │ │ ├──[✅]--(Header)
│ │ │ └──[✅]--(Section)
│ │ ├──[✅]--(HTTP-AJAX-II-master)
│ │ │ ├──[✅]--(app)
│ │ │ │ ├──[✅]--(public)
│ │ │ │ └──[✅]--(src)
│ │ │ └──[✅]--(server)
│ │ ├──[✅]--(HTTP-AJAX-master)
│ │ │ └──[✅]--(friends)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ ├──[✅]--(Hash-Tables-Notes-master)
│ │ ├──[✅]--(Intro-Python-master)
│ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(day-1-toy)
│ │ │ ├──[✅]--(days-2-4-adv)
│ │ │ ├──[✅]--(mini-challenge)
│ │ │ └──[✅]--(python-example)
│ │ ├──[✅]--(Intro-to-C-master)
│ │ │ ├──[✅]--(first)
│ │ │ ├──[✅]--(fizzbuzz)
│ │ │ │ └──[✅]--(tests)
│ │ │ ├──[✅]--(hangman)
│ │ │ ├──[✅]--(malloc)
│ │ │ │ └──[✅]--(tests)
│ │ │ ├──[✅]--(pointers)
│ │ │ │ └──[✅]--(tests)
│ │ │ ├──[✅]--(queue)
│ │ │ │ └──[✅]--(tests)
│ │ │ ├──[✅]--(quicksort)
│ │ │ │ └──[✅]--(tests)
│ │ │ ├──[✅]--(strings)
│ │ │ │ └──[✅]--(tests)
│ │ │ ├──[✅]--(structs)
│ │ │ │ └──[✅]--(tests)
│ │ │ └──[✅]--(utils)
│ │ ├──[✅]--(JavaScript-I-Guided-master)
│ │ ├──[✅]--(LS-Data-Structures-I-Solution-master)
│ │ │ ├──[✅]--(src)
│ │ │ └──[✅]--(tests)
│ │ ├──[✅]--(LS-Data-Structures-II-Solution-master)
│ │ │ ├──[✅]--(src)
│ │ │ └──[✅]--(tests)
│ │ ├──[✅]--(Lambda-School-Instruction-Notes-master)
│ │ │ ├──[✅]--(10. Data Persistence in Web APIs)
│ │ │ │ └──[✅]--(assets)
│ │ │ ├──[✅]--(11. Authentication)
│ │ │ └──[✅]--(12. Testing)
│ │ ├──[✅]--(Lambda-School-master)
│ │ │ ├──[✅]--(Week 1)
│ │ │ │ ├──[✅]--(Sprint-Challenge User-Interface)
│ │ │ │ ├──[✅]--(User Interface I Project 2 - Sweet Eats Bakery)
│ │ │ │ ├──[✅]--(User Interface I HTML Markup)
│ │ │ │ ├──[✅]--(User Interface III Services Page)
│ │ │ │ └──[✅]--(User-Interface II Innovation)
│ │ │ ├──[✅]--(Week 10)
│ │ │ │ ├──[✅]--(Car-Sales)
│ │ │ │ ├──[✅]--(React-Redux-App)
│ │ │ │ ├──[✅]--(Sprint-Challenge-State-Management-Smurfs)
│ │ │ │ ├──[✅]--(react-shopping-cart)
│ │ │ │ └──[✅]--(reducer-todo)
│ │ │ ├──[✅]--(Week 11)
│ │ │ │ ├──[✅]--(Auth-Friends)
│ │ │ │ ├──[✅]--(HTTP-Movies-Assignment)
│ │ │ │ ├──[✅]--(react-bubbles)
│ │ │ │ └──[✅]--(webtesting-iii-challenge)
│ │ │ ├──[✅]--(Week 12 - FoodieFun)
│ │ │ ├──[✅]--(Week 13)
│ │ │ │ ├──[✅]--(node-api1-project)
│ │ │ │ ├──[✅]--(webapi-challenge-sprint)
│ │ │ │ ├──[✅]--(webapi-ii-challenge)
│ │ │ │ └──[✅]--(webapi-iii-challenge)
│ │ │ ├──[✅]--(Week 14)
│ │ │ │ ├──[✅]--(node-db-challenge-sprint)
│ │ │ │ ├──[✅]--(node-db3-challenge)
│ │ │ │ ├──[✅]--(node-db4)
│ │ │ │ ├──[✅]--(webdb-i-challenge)
│ │ │ │ └──[✅]--(webdb-ii-challenge)
│ │ │ ├──[✅]--(Week 15)
│ │ │ │ ├──[✅]--(Sprint-Challenge-Authentication)
│ │ │ │ ├──[✅]--(node-server-testing-challenge)
│ │ │ │ ├──[✅]--(webauth-i-challenge)
│ │ │ │ └──[✅]--(webauth-iii-challenge)
│ │ │ ├──[✅]--(Week 16 - Mentor Me)
│ │ │ ├──[✅]--(Week 17 - 25 Future Hope)
│ │ │ ├──[✅]--(Week 2)
│ │ │ │ ├──[✅]--(Digital Resume)
│ │ │ │ ├──[✅]--(Fun Bus)
│ │ │ │ ├──[✅]--(Portfolio)
│ │ │ │ ├──[✅]--(Resposnive-Web-Design)
│ │ │ │ └──[✅]--(Sprint Challenge)
│ │ │ ├──[✅]--(Week 3)
│ │ │ │ ├──[✅]--(JavaScript-I)
│ │ │ │ ├──[✅]--(JavaScript-II)
│ │ │ │ ├──[✅]--(JavaScript-III)
│ │ │ │ ├──[✅]--(JavaScript-IV)
│ │ │ │ └──[✅]--(Sprint-Challenge)
│ │ │ ├──[✅]--(Week 4 - Local Voter Guide)
│ │ │ │ ├──[✅]--(css)
│ │ │ │ ├──[✅]--(images)
│ │ │ │ └──[✅]--(less)
│ │ │ ├──[✅]--(Week 5)
│ │ │ │ ├──[✅]--(DOM-I)
│ │ │ │ ├──[✅]--(DOM-II)
│ │ │ │ ├──[✅]--(Newsfeed-Components)
│ │ │ │ ├──[✅]--(Sprint-Challenge-Applied-Javascript)
│ │ │ │ └──[✅]--(github-usercard)
│ │ │ ├──[✅]--(Week 6)
│ │ │ │ ├──[✅]--(Sprint-Challenge-React-Wars)
│ │ │ │ ├──[✅]--(lambda-calculator)
│ │ │ │ ├──[✅]--(nasa-photo-of-the-day)
│ │ │ │ └──[✅]--(react-american-football-scoreboard)
│ │ │ ├──[✅]--(Week 7)
│ │ │ │ ├──[✅]--(React-Router-Basic-Nav)
│ │ │ │ ├──[✅]--(React-Router-Movies)
│ │ │ │ ├──[✅]--(Sprint-Challenge-Single-Page-Apps)
│ │ │ │ ├──[✅]--(User-Onboarding)
│ │ │ │ └──[✅]--(team-builder)
│ │ │ ├──[✅]--(Week 8 - Water My Plants)
│ │ │ └──[✅]--(Week 9)
│ │ │ ├──[✅]--(Github-User-Card)
│ │ │ ├──[✅]--(React-Todo)
│ │ │ ├──[✅]--(Sprint-Challenge-Advanced-React)
│ │ │ └──[✅]--(dark-mode)
│ │ ├──[✅]--(LambdaSchool-master)
│ │ │ ├──[✅]--(31d1)
│ │ │ ├──[✅]--(Administration)
│ │ │ │ ├──[✅]--(Tech Skills Day badges)
│ │ │ │ ├──[✅]--(__MACOSX)
│ │ │ │ ├──[✅]--(certs)
│ │ │ │ ├──[✅]--(marketing)
│ │ │ │ ├──[✅]--(studying)
│ │ │ │ └──[✅]--(zoom)
│ │ │ ├──[✅]--(Front-End-master)
│ │ │ │ ├──[✅]--(Front-End-master)
│ │ │ │ └──[✅]--(client)
│ │ │ ├──[✅]--(JavaScript30)
│ │ │ │ ├──[✅]--(01)
│ │ │ │ ├──[✅]--(02)
│ │ │ │ ├──[✅]--(03)
│ │ │ │ ├──[✅]--(04)
│ │ │ │ ├──[✅]--(05)
│ │ │ │ ├──[✅]--(06)
│ │ │ │ ├──[✅]--(07)
│ │ │ │ ├──[✅]--(08)
│ │ │ │ ├──[✅]--(09)
│ │ │ │ ├──[✅]--(10)
│ │ │ │ ├──[✅]--(11)
│ │ │ │ ├──[✅]--(12)
│ │ │ │ ├──[✅]--(13)
│ │ │ │ ├──[✅]--(14)
│ │ │ │ ├──[✅]--(15)
│ │ │ │ ├──[✅]--(16)
│ │ │ │ ├──[✅]--(17)
│ │ │ │ ├──[✅]--(18)
│ │ │ │ ├──[✅]--(19)
│ │ │ │ ├──[✅]--(20)
│ │ │ │ ├──[✅]--(21)
│ │ │ │ ├──[✅]--(22)
│ │ │ │ ├──[✅]--(23)
│ │ │ │ ├──[✅]--(24)
│ │ │ │ ├──[✅]--(25)
│ │ │ │ ├──[✅]--(26)
│ │ │ │ ├──[✅]--(27)
│ │ │ │ ├──[✅]--(28)
│ │ │ │ ├──[✅]--(29)
│ │ │ │ ├──[✅]--(30)
│ │ │ │ └──[✅]--(JavaScript30-master)
│ │ │ ├──[✅]--(aa-score)
│ │ │ │ ├──[✅]--(public)
│ │ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(bw1-tl)
│ │ │ │ ├──[✅]--(BackEnd-master)
│ │ │ │ ├──[✅]--(admin)
│ │ │ │ ├──[✅]--(api)
│ │ │ │ ├──[✅]--(auth)
│ │ │ │ ├──[✅]--(database)
│ │ │ │ ├──[✅]--(middleware)
│ │ │ │ ├──[✅]--(todos)
│ │ │ │ └──[✅]--(volunteer)
│ │ │ ├──[✅]--(css)
│ │ │ ├──[✅]--(evoingram.github.io)
│ │ │ ├──[✅]--(labs)
│ │ │ │ ├──[✅]--(backend)
│ │ │ │ ├──[✅]--(frontend)
│ │ │ │ ├──[✅]--(last journal entry)
│ │ │ │ └──[✅]--(video-to-next-group)
│ │ │ ├──[✅]--(m1)
│ │ │ │ ├──[✅]--(11b1)
│ │ │ │ ├──[✅]--(11c1)
│ │ │ │ ├──[✅]--(11d1)
│ │ │ │ ├──[✅]--(12a1)
│ │ │ │ ├──[✅]--(12b1)
│ │ │ │ ├──[✅]--(12c1)
│ │ │ │ ├──[✅]--(12d1)
│ │ │ │ ├──[✅]--(13a1)
│ │ │ │ ├──[✅]--(13b1)
│ │ │ │ ├──[✅]--(13c1)
│ │ │ │ ├──[✅]--(13d1)
│ │ │ │ ├──[✅]--(13e1)
│ │ │ │ ├──[✅]--(14a1)
│ │ │ │ ├──[✅]--(SC-ACSS)
│ │ │ │ └──[✅]--(Sprint-Challenge--Advanced-CSS)
│ │ │ ├──[✅]--(m2)
│ │ │ │ ├──[✅]--(21a1)
│ │ │ │ ├──[✅]--(21b1)
│ │ │ │ ├──[✅]--(21c1)
│ │ │ │ ├──[✅]--(21d1)
│ │ │ │ ├──[✅]--(21e1)
│ │ │ │ ├──[✅]--(22a1)
│ │ │ │ ├──[✅]--(22b1)
│ │ │ │ ├──[✅]--(22c1)
│ │ │ │ ├──[✅]--(22e1)
│ │ │ │ ├──[✅]--(23a1)
│ │ │ │ ├──[✅]--(23a2)
│ │ │ │ ├──[✅]--(23b1)
│ │ │ │ ├──[✅]--(23c1)
│ │ │ │ ├──[✅]--(23d1)
│ │ │ │ ├──[✅]--(23d2)
│ │ │ │ ├──[✅]--(23e1)
│ │ │ │ └──[✅]--(24a1)
│ │ │ ├──[✅]--(m3)
│ │ │ │ ├──[✅]--(31a1)
│ │ │ │ ├──[✅]--(31a2)
│ │ │ │ ├──[✅]--(31b1)
│ │ │ │ ├──[✅]--(31c1)
│ │ │ │ ├──[✅]--(31d1)
│ │ │ │ ├──[✅]--(31e1)
│ │ │ │ ├──[✅]--(32a1)
│ │ │ │ ├──[✅]--(32b1)
│ │ │ │ ├──[✅]--(32c1)
│ │ │ │ ├──[✅]--(32d1)
│ │ │ │ ├──[✅]--(32e1)
│ │ │ │ ├──[✅]--(33a1)
│ │ │ │ ├──[✅]--(33b1)
│ │ │ │ ├──[✅]--(33d1)
│ │ │ │ └──[✅]--(33e1)
│ │ │ ├──[✅]--(m4)
│ │ │ │ ├──[✅]--(41a1)
│ │ │ │ ├──[✅]--(41a2)
│ │ │ │ ├──[✅]--(41b1)
│ │ │ │ ├──[✅]--(41b2)
│ │ │ │ ├──[✅]--(41c1)
│ │ │ │ ├──[✅]--(41c2)
│ │ │ │ ├──[✅]--(41d1)
│ │ │ │ ├──[✅]--(41e1)
│ │ │ │ ├──[✅]--(41e1app)
│ │ │ │ ├──[✅]--(42a1)
│ │ │ │ ├──[✅]--(42a2)
│ │ │ │ ├──[✅]--(42b1)
│ │ │ │ ├──[✅]--(42b2)
│ │ │ │ ├──[✅]--(42c1)
│ │ │ │ ├──[✅]--(42c2)
│ │ │ │ ├──[✅]--(42d1)
│ │ │ │ ├──[✅]--(42d2)
│ │ │ │ ├──[✅]--(42e1)
│ │ │ │ ├──[✅]--(43a1)
│ │ │ │ ├──[✅]--(43a2)
│ │ │ │ ├──[✅]--(43b1)
│ │ │ │ ├──[✅]--(43b2)
│ │ │ │ ├──[✅]--(43c1)
│ │ │ │ ├──[✅]--(43c2)
│ │ │ │ ├──[✅]--(43d1)
│ │ │ │ ├──[✅]--(43d1a)
│ │ │ │ ├──[✅]--(43d2)
│ │ │ │ └──[✅]--(43e1)
│ │ │ ├──[✅]--(m5)
│ │ │ │ ├──[✅]--(51a1)
│ │ │ │ ├──[✅]--(51b1)
│ │ │ │ ├──[✅]--(51c1)
│ │ │ │ ├──[✅]--(51d1)
│ │ │ │ ├──[✅]--(51d2)
│ │ │ │ ├──[✅]--(51e1)
│ │ │ │ ├──[✅]--(52b1)
│ │ │ │ ├──[✅]--(52c1)
│ │ │ │ ├──[✅]--(52c2)
│ │ │ │ ├──[✅]--(52d1)
│ │ │ │ ├──[✅]--(53a1)
│ │ │ │ ├──[✅]--(53b1)
│ │ │ │ ├──[✅]--(53c1)
│ │ │ │ └──[✅]--(53d1)
│ │ │ ├──[✅]--(m6)
│ │ │ │ ├──[✅]--(61a1)
│ │ │ │ ├──[✅]--(61b1)
│ │ │ │ ├──[✅]--(61c1)
│ │ │ │ ├──[✅]--(62a1)
│ │ │ │ ├──[✅]--(62b1)
│ │ │ │ ├──[✅]--(63a1)
│ │ │ │ ├──[✅]--(63b1)
│ │ │ │ ├──[✅]--(63c1)
│ │ │ │ └──[✅]--(63d1)
│ │ │ ├──[✅]--(m7)
│ │ │ │ ├──[✅]--(71a1)
│ │ │ │ ├──[✅]--(71e1)
│ │ │ │ ├──[✅]--(72a1)
│ │ │ │ ├──[✅]--(73a1)
│ │ │ │ └──[✅]--(74a1)
│ │ │ ├──[✅]--(src)
│ │ │ │ ├──[✅]--(iterative_sorting)
│ │ │ │ └──[✅]--(searc✅ng)
│ │ │ ├──[✅]--(summary)
│ │ │ │ ├──[✅]--(Node Express Knex)
│ │ │ │ ├──[✅]--(certifications)
│ │ │ │ ├──[✅]--(cobol)
│ │ │ │ ├──[✅]--(complete)
│ │ │ │ ├──[✅]--(general)
│ │ │ │ ├──[✅]--(interviewing)
│ │ │ │ ├──[✅]--(testing)
│ │ │ │ └──[✅]--(typescript)
│ │ │ └──[✅]--(tlbw)
│ │ │ └──[✅]--(client)
│ │ ├──[✅]--(Mongo-I-master)
│ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(controllers)
│ │ │ ├──[✅]--(models)
│ │ │ └──[✅]--(routes)
│ │ ├──[✅]--(Node-Blog-master)
│ │ │ ├──[✅]--(api)
│ │ │ │ ├──[✅]--(post)
│ │ │ │ ├──[✅]--(tag)
│ │ │ │ └──[✅]--(user)
│ │ │ ├──[✅]--(config)
│ │ │ ├──[✅]--(data)
│ │ │ │ ├──[✅]--(helpers)
│ │ │ │ ├──[✅]--(migrations)
│ │ │ │ └──[✅]--(seeds)
│ │ │ └──[✅]--(routers)
│ │ ├──[✅]--(Node-Express-Gmaps-Solution-Day-I-master)
│ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(controllers)
│ │ │ └──[✅]--(models)
│ │ ├──[✅]--(Node-Express-Gmaps-Solution-Day-II-master)
│ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(controllers)
│ │ │ └──[✅]--(models)
│ │ ├──[✅]--(Precourse-master)
│ │ │ ├──[✅]--(Lesson1-Git)
│ │ │ ├──[✅]--(Lesson10-JS-VII)
│ │ │ │ └──[✅]--(homework)
│ │ │ ├──[✅]--(Lesson11-JS-VIII)
│ │ │ │ └──[✅]--(homework)
│ │ │ ├──[✅]--(Lesson12-DOM)
│ │ │ │ └──[✅]--(homework)
│ │ │ ├──[✅]--(Lesson2-HTML-CSS)
│ │ │ │ └──[✅]--(homework)
│ │ │ ├──[✅]--(Lesson3-CSS-Positioning)
│ │ │ │ └──[✅]--(homework)
│ │ │ ├──[✅]--(Lesson4-JS-I)
│ │ │ │ └──[✅]--(homework)
│ │ │ ├──[✅]--(Lesson5-JS-II)
│ │ │ │ └──[✅]--(homework)
│ │ │ ├──[✅]--(Lesson6-JS-III)
│ │ │ │ └──[✅]--(homework)
│ │ │ ├──[✅]--(Lesson7-JS-IV)
│ │ │ │ └──[✅]--(homework)
│ │ │ ├──[✅]--(Lesson8-JS-V)
│ │ │ │ └──[✅]--(homework)
│ │ │ └──[✅]--(Lesson9-JS-VI)
│ │ │ └──[✅]--(homework)
│ │ ├──[✅]--(Python-II-Notes-master)
│ │ │ └──[✅]--(src)
│ │ │ └──[✅]--(__pycache__)
│ │ ├──[✅]--(Python-master)
│ │ │ ├──[✅]--(arithmetic_analysis)
│ │ │ │ └──[✅]--(image_data)
│ │ │ ├──[✅]--(backtracking)
│ │ │ ├──[✅]--(bit_manipulation)
│ │ │ ├──[✅]--(blockchain)
│ │ │ ├──[✅]--(boolean_algebra)
│ │ │ ├──[✅]--(cellular_automata)
│ │ │ ├──[✅]--(ciphers)
│ │ │ ├──[✅]--(compression)
│ │ │ │ └──[✅]--(image_data)
│ │ │ ├──[✅]--(computer_vision)
│ │ │ ├──[✅]--(conversions)
│ │ │ ├──[✅]--(data_structures)
│ │ │ │ ├──[✅]--(binary_tree)
│ │ │ │ ├──[✅]--(disjoint_set)
│ │ │ │ ├──[✅]--(has✅ng)
│ │ │ │ ├──[✅]--(heap)
│ │ │ │ ├──[✅]--(linked_list)
│ │ │ │ ├──[✅]--(queue)
│ │ │ │ ├──[✅]--(stacks)
│ │ │ │ └──[✅]--(trie)
│ │ │ ├──[✅]--(digital_image_processing)
│ │ │ │ ├──[✅]--(dithering)
│ │ │ │ ├──[✅]--(edge_detection)
│ │ │ │ ├──[✅]--(filters)
│ │ │ │ ├──[✅]--(✅stogram_equalization)
│ │ │ │ ├──[✅]--(image_data)
│ │ │ │ ├──[✅]--(resize)
│ │ │ │ └──[✅]--(rotation)
│ │ │ ├──[✅]--(divide_and_conquer)
│ │ │ ├──[✅]--(dynamic_programming)
│ │ │ ├──[✅]--(electronics)
│ │ │ ├──[✅]--(file_transfer)
│ │ │ │ └──[✅]--(tests)
│ │ │ ├──[✅]--(fuzzy_logic)
│ │ │ ├──[✅]--(genetic_algorithm)
│ │ │ ├──[✅]--(geodesy)
│ │ │ ├──[✅]--(grap✅cs)
│ │ │ ├──[✅]--(graphs)
│ │ │ │ └──[✅]--(tests)
│ │ │ ├──[✅]--(hashes)
│ │ │ ├──[✅]--(knapsack)
│ │ │ │ └──[✅]--(tests)
│ │ │ ├──[✅]--(linear_algebra)
│ │ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(mac✅ne_learning)
│ │ │ │ ├──[✅]--(forecasting)
│ │ │ │ └──[✅]--(lstm)
│ │ │ ├──[✅]--(maths)
│ │ │ │ ├──[✅]--(images)
│ │ │ │ └──[✅]--(series)
│ │ │ ├──[✅]--(matrix)
│ │ │ │ └──[✅]--(tests)
│ │ │ ├──[✅]--(networking_flow)
│ │ │ ├──[✅]--(neural_network)
│ │ │ ├──[✅]--(other)
│ │ │ ├──[✅]--(project_euler)
│ │ │ │ ├──[✅]--(problem_001)
│ │ │ │ ├──[✅]--(problem_002)
│ │ │ │ ├──[✅]--(problem_003)
│ │ │ │ ├──[✅]--(problem_004)
│ │ │ │ ├──[✅]--(problem_005)
│ │ │ │ ├──[✅]--(problem_006)
│ │ │ │ ├──[✅]--(problem_007)
│ │ │ │ ├──[✅]--(problem_008)
│ │ │ │ ├──[✅]--(problem_009)
│ │ │ │ ├──[✅]--(problem_010)
│ │ │ │ ├──[✅]--(problem_011)
│ │ │ │ ├──[✅]--(problem_012)
│ │ │ │ ├──[✅]--(problem_013)
│ │ │ │ ├──[✅]--(problem_014)
│ │ │ │ ├──[✅]--(problem_015)
│ │ │ │ ├──[✅]--(problem_016)
│ │ │ │ ├──[✅]--(problem_017)
│ │ │ │ ├──[✅]--(problem_018)
│ │ │ │ ├──[✅]--(problem_019)
│ │ │ │ ├──[✅]--(problem_020)
│ │ │ │ ├──[✅]--(problem_021)
│ │ │ │ ├──[✅]--(problem_022)
│ │ │ │ ├──[✅]--(problem_023)
│ │ │ │ ├──[✅]--(problem_024)
│ │ │ │ ├──[✅]--(problem_025)
│ │ │ │ ├──[✅]--(problem_026)
│ │ │ │ ├──[✅]--(problem_027)
│ │ │ │ ├──[✅]--(problem_028)
│ │ │ │ ├──[✅]--(problem_029)
│ │ │ │ ├──[✅]--(problem_030)
│ │ │ │ ├──[✅]--(problem_031)
│ │ │ │ ├──[✅]--(problem_032)
│ │ │ │ ├──[✅]--(problem_033)
│ │ │ │ ├──[✅]--(problem_034)
│ │ │ │ ├──[✅]--(problem_035)
│ │ │ │ ├──[✅]--(problem_036)
│ │ │ │ ├──[✅]--(problem_037)
│ │ │ │ ├──[✅]--(problem_038)
│ │ │ │ ├──[✅]--(problem_039)
│ │ │ │ ├──[✅]--(problem_040)
│ │ │ │ ├──[✅]--(problem_041)
│ │ │ │ ├──[✅]--(problem_042)
│ │ │ │ ├──[✅]--(problem_043)
│ │ │ │ ├──[✅]--(problem_044)
│ │ │ │ ├──[✅]--(problem_045)
│ │ │ │ ├──[✅]--(problem_046)
│ │ │ │ ├──[✅]--(problem_047)
│ │ │ │ ├──[✅]--(problem_048)
│ │ │ │ ├──[✅]--(problem_049)
│ │ │ │ ├──[✅]--(problem_050)
│ │ │ │ ├──[✅]--(problem_051)
│ │ │ │ ├──[✅]--(problem_052)
│ │ │ │ ├──[✅]--(problem_053)
│ │ │ │ ├──[✅]--(problem_054)
│ │ │ │ ├──[✅]--(problem_055)
│ │ │ │ ├──[✅]--(problem_056)
│ │ │ │ ├──[✅]--(problem_057)
│ │ │ │ ├──[✅]--(problem_058)
│ │ │ │ ├──[✅]--(problem_059)
│ │ │ │ ├──[✅]--(problem_062)
│ │ │ │ ├──[✅]--(problem_063)
│ │ │ │ ├──[✅]--(problem_064)
│ │ │ │ ├──[✅]--(problem_065)
│ │ │ │ ├──[✅]--(problem_067)
│ │ │ │ ├──[✅]--(problem_069)
│ │ │ │ ├──[✅]--(problem_070)
│ │ │ │ ├──[✅]--(problem_071)
│ │ │ │ ├──[✅]--(problem_072)
│ │ │ │ ├──[✅]--(problem_074)
│ │ │ │ ├──[✅]--(problem_075)
│ │ │ │ ├──[✅]--(problem_076)
│ │ │ │ ├──[✅]--(problem_077)
│ │ │ │ ├──[✅]--(problem_080)
│ │ │ │ ├──[✅]--(problem_081)
│ │ │ │ ├──[✅]--(problem_085)
│ │ │ │ ├──[✅]--(problem_086)
│ │ │ │ ├──[✅]--(problem_087)
│ │ │ │ ├──[✅]--(problem_089)
│ │ │ │ ├──[✅]--(problem_091)
│ │ │ │ ├──[✅]--(problem_097)
│ │ │ │ ├──[✅]--(problem_099)
│ │ │ │ ├──[✅]--(problem_101)
│ │ │ │ ├──[✅]--(problem_102)
│ │ │ │ ├──[✅]--(problem_107)
│ │ │ │ ├──[✅]--(problem_112)
│ │ │ │ ├──[✅]--(problem_113)
│ │ │ │ ├──[✅]--(problem_119)
│ │ │ │ ├──[✅]--(problem_120)
│ │ │ │ ├──[✅]--(problem_123)
│ │ │ │ ├──[✅]--(problem_125)
│ │ │ │ ├──[✅]--(problem_129)
│ │ │ │ ├──[✅]--(problem_135)
│ │ │ │ ├──[✅]--(problem_173)
│ │ │ │ ├──[✅]--(problem_174)
│ │ │ │ ├──[✅]--(problem_180)
│ │ │ │ ├──[✅]--(problem_188)
│ │ │ │ ├──[✅]--(problem_191)
│ │ │ │ ├──[✅]--(problem_203)
│ │ │ │ ├──[✅]--(problem_206)
│ │ │ │ ├──[✅]--(problem_207)
│ │ │ │ ├──[✅]--(problem_234)
│ │ │ │ ├──[✅]--(problem_301)
│ │ │ │ └──[✅]--(problem_551)
│ │ │ ├──[✅]--(quantum)
│ │ │ ├──[✅]--(scheduling)
│ │ │ ├──[✅]--(scripts)
│ │ │ ├──[✅]--(searches)
│ │ │ ├──[✅]--(sorts)
│ │ │ ├──[✅]--(strings)
│ │ │ ├──[✅]--(traversals)
│ │ │ └──[✅]--(web_programming)
│ │ ├──[✅]--(React-Todo-Solution-master)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ │ └──[✅]--(tests)
│ │ ├──[✅]--(React-Todo-master)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ │ └──[✅]--(components)
│ │ ├──[✅]--(Relational-Databases-master)
│ │ │ └──[✅]--(solutions)
│ │ ├──[✅]--(Server-Testing-master)
│ │ ├──[✅]--(Sorting-master)
│ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(iterative_sorting)
│ │ │ ├──[✅]--(recursive_sorting)
│ │ │ └──[✅]--(searc✅ng)
│ │ ├──[✅]--(Static-Pages-master)
│ │ ├──[✅]--(W✅teboard-Pairing-master)
│ │ │ ├──[✅]--(BSTFromArray)
│ │ │ ├──[✅]--(BalancedBinaryTree)
│ │ │ ├──[✅]--(BalancedBrackets)
│ │ │ ├──[✅]--(BitcoinTrading)
│ │ │ ├──[✅]--(ClimbingStairs)
│ │ │ ├──[✅]--(CountingVotes)
│ │ │ ├──[✅]--(DepthFirstSearch)
│ │ │ ├──[✅]--(FindRotationPoint)
│ │ │ ├──[✅]--(IntegerPairs)
│ │ │ ├──[✅]--(KthToLastNode)
│ │ │ ├──[✅]--(LargestContiguousSum)
│ │ │ ├──[✅]--(LargestStack)
│ │ │ ├──[✅]--(LinkedListPalindrome)
│ │ │ ├──[✅]--(MatrixSpiralCopy)
│ │ │ ├──[✅]--(MergingTwoPackages)
│ │ │ ├──[✅]--(MinHeap)
│ │ │ ├──[✅]--(MinJumps)
│ │ │ ├──[✅]--(NthFibonacci)
│ │ │ ├──[✅]--(OneWayFlight)
│ │ │ ├──[✅]--(ProductOfAllOtherNumbers)
│ │ │ ├──[✅]--(QueueWithTwoStacks)
│ │ │ ├──[✅]--(ReverseLinkedList)
│ │ │ ├──[✅]--(RingBuffer)
│ │ │ ├──[✅]--(RobotPaths)
│ │ │ ├──[✅]--(RockPaperScissors)
│ │ │ ├──[✅]--(RotateImage)
│ │ │ ├──[✅]--(SetOfStacks)
│ │ │ ├──[✅]--(SortStack)
│ │ │ ├──[✅]--(SortTopScores)
│ │ │ ├──[✅]--(TemperatureTracker)
│ │ │ ├──[✅]--(TimePlanner)
│ │ │ └──[✅]--(ValidateBinaryTree)
│ │ ├──[✅]--(_DS-Python)
│ │ │ ├──[✅]--(Algorithms-I-Notes-master)
│ │ │ │ └──[✅]--(practice_algs)
│ │ │ └──[✅]--(Algorithms-master)
│ │ │ ├──[✅]--(climbing_stairs)
│ │ │ ├──[✅]--(knapsack)
│ │ │ ├──[✅]--(making_change)
│ │ │ ├──[✅]--(recipe_batches)
│ │ │ ├──[✅]--(rock_paper_scissors)
│ │ │ └──[✅]--(stock_prices)
│ │ ├──[✅]--(_Individual-Projects)
│ │ │ ├──[✅]--(Advanced-Form-Management-Guided-master)
│ │ │ │ └──[✅]--(app)
│ │ │ ├──[✅]--(Bootstrap-I-master)
│ │ │ │ ├──[✅]--(_example-resume)
│ │ │ │ ├──[✅]--(css)
│ │ │ │ ├──[✅]--(img)
│ │ │ │ ├──[✅]--(js)
│ │ │ │ └──[✅]--(less)
│ │ │ ├──[✅]--(Components-BEM-master)
│ │ │ │ ├──[✅]--(components)
│ │ │ │ └──[✅]--(markups)
│ │ │ ├──[✅]--(Components-Constructors-master)
│ │ │ │ ├──[✅]--(components)
│ │ │ │ └──[✅]--(markups)
│ │ │ ├──[✅]--(Computer-Arc✅tecture-Notes-master)
│ │ │ │ ├──[✅]--(lectureI)
│ │ │ │ ├──[✅]--(lectureII)
│ │ │ │ ├──[✅]--(lectureIII)
│ │ │ │ └──[✅]--(lectureIV)
│ │ │ ├──[✅]--(Course_and_Book_Notes-master)
│ │ │ │ ├──[✅]--(Algorithm Design Manual)
│ │ │ │ ├──[✅]--(Computer Science Distilled)
│ │ │ │ ├──[✅]--(Lambda_Notes)
│ │ │ │ ├──[✅]--(Programming Foundations)
│ │ │ │ ├──[✅]--(The_C_Programming_Language)
│ │ │ │ ├──[✅]--(T✅nk Like a Programmer)
│ │ │ │ └──[✅]--(YoutubeVideos)
│ │ │ ├──[✅]--(JavaScript-I-master)
│ │ │ │ └──[✅]--(assignments)
│ │ │ ├──[✅]--(JavaScript-II-master)
│ │ │ │ └──[✅]--(assignments)
│ │ │ ├──[✅]--(JavaScript-III-master)
│ │ │ │ └──[✅]--(assignments)
│ │ │ └──[✅]--(JavaScript-IV-master)
│ │ │ └──[✅]--(assignments)
│ │ ├──[✅]--(_MOST-USEFUL)
│ │ │ └──[✅]--(Boilerplate-master)
│ │ │ ├──[✅]--(Apollo)
│ │ │ ├──[✅]--(Express-MongoDB)
│ │ │ ├──[✅]--(React-Redux)
│ │ │ └──[✅]--(TypeGraphQL)
│ │ ├──[✅]--(_misc)
│ │ │ └──[✅]--(Blockchain-Notes-master)
│ │ │ └──[✅]--(communication_gp)
│ │ ├──[✅]--(data_struct_and_algo-master)
│ │ │ └──[✅]--(logs)
│ │ ├──[✅]--(dev-portfolio-master)
│ │ │ ├──[✅]--(public)
│ │ │ ├──[✅]--(src)
│ │ │ │ ├──[✅]--(components)
│ │ │ │ ├──[✅]--(global-scss)
│ │ │ │ └──[✅]--(views)
│ │ │ └──[✅]--(tests_setup)
│ │ │ └──[✅]--(__mocks__)
│ │ ├──[✅]--(feelscollective-master)
│ │ │ ├──[✅]--(css)
│ │ │ ├──[✅]--(fonts)
│ │ │ │ ├──[✅]--(icomoon)
│ │ │ │ └──[✅]--(open-iconic)
│ │ │ ├──[✅]--(images)
│ │ │ ├──[✅]--(js)
│ │ │ └──[✅]--(scss)
│ │ ├──[✅]--(five-master)
│ │ │ └──[✅]--(FiveFeed)
│ │ │ ├──[✅]--(lambda)
│ │ │ ├──[✅]--(lambda-src)
│ │ │ └──[✅]--(src)
│ │ ├──[✅]--(homepage-master)
│ │ │ ├──[✅]--(css)
│ │ │ ├──[✅]--(fonts)
│ │ │ ├──[✅]--(images)
│ │ │ └──[✅]--(js)
│ │ │ ├──[✅]--(backstretch)
│ │ │ ├──[✅]--(bootstrap)
│ │ │ ├──[✅]--(easing)
│ │ │ ├──[✅]--(magnific-popup)
│ │ │ ├──[✅]--(owl-carousel)
│ │ │ ├──[✅]--(uitotop)
│ │ │ └──[✅]--(wow)
│ │ ├──[✅]--(lambda-demo-project-master)
│ │ │ ├──[✅]--(api)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ ├──[✅]--(lambda-lecture-notes-main)
│ │ │ ├──[✅]--(3-1-advanced-react)
│ │ │ │ ├──[✅]--(images)
│ │ │ │ └──[✅]--(pdf)
│ │ │ ├──[✅]--(3-2-advanced-state-mangement)
│ │ │ │ └──[✅]--(images)
│ │ │ └──[✅]--(3-3-advanced-web-applications)
│ │ │ └──[✅]--(images)
│ │ ├──[✅]--(portfolio-main)
│ │ │ ├──[✅]--(components)
│ │ │ ├──[✅]--(pages)
│ │ │ ├──[✅]--(public)
│ │ │ │ └──[✅]--(static)
│ │ │ ├──[✅]--(scripts)
│ │ │ ├──[✅]--(styles)
│ │ │ └──[✅]--(utils)
│ │ ├──[✅]--(react-carousel-master)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ │ └──[✅]--(assets)
│ │ ├──[✅]--(react-design-patterns-and-best-practices-master)
│ │ │ ├──[✅]--(chapter-03)
│ │ │ │ └──[✅]--(reusable-components)
│ │ │ ├──[✅]--(chapter-04)
│ │ │ │ ├──[✅]--(container-presentational)
│ │ │ │ └──[✅]--(✅gher-order-components)
│ │ │ ├──[✅]--(chapter-05)
│ │ │ │ ├──[✅]--(data-fetc✅ng)
│ │ │ │ ├──[✅]--(data-flow)
│ │ │ │ └──[✅]--(react-refetch)
│ │ │ ├──[✅]--(chapter-06)
│ │ │ │ ├──[✅]--(controlled-components)
│ │ │ │ ├──[✅]--(css-transition-group)
│ │ │ │ ├──[✅]--(event-switch)
│ │ │ │ ├──[✅]--(json-schema)
│ │ │ │ ├──[✅]--(react-motion)
│ │ │ │ ├──[✅]--(refs-dom)
│ │ │ │ ├──[✅]--(refs-instance)
│ │ │ │ ├──[✅]--(svg)
│ │ │ │ └──[✅]--(uncontrolled-components)
│ │ │ ├──[✅]--(chapter-07)
│ │ │ │ ├──[✅]--(css-modules)
│ │ │ │ ├──[✅]--(inline-styles)
│ │ │ │ ├──[✅]--(radium)
│ │ │ │ └──[✅]--(styled-components)
│ │ │ ├──[✅]--(chapter-08)
│ │ │ │ ├──[✅]--(data-fetc✅ng)
│ │ │ │ ├──[✅]--(next)
│ │ │ │ └──[✅]--(server-side-rendering)
│ │ │ ├──[✅]--(chapter-09)
│ │ │ │ ├──[✅]--(constants-props)
│ │ │ │ ├──[✅]--(creating-functions)
│ │ │ │ ├──[✅]--(good-design)
│ │ │ │ └──[✅]--(keys)
│ │ │ ├──[✅]--(chapter-10)
│ │ │ │ ├──[✅]--(enzyme)
│ │ │ │ ├──[✅]--(✅gher-order-components)
│ │ │ │ ├──[✅]--(jest)
│ │ │ │ ├──[✅]--(mocha)
│ │ │ │ ├──[✅]--(page-object)
│ │ │ │ └──[✅]--(real-world)
│ │ │ └──[✅]--(chapter-11)
│ │ │ ├──[✅]--(index-as-key)
│ │ │ ├──[✅]--(initializing-state)
│ │ │ └──[✅]--(mutating-state)
│ │ ├──[✅]--(sql-lab-master)
│ │ │ └──[✅]--(img)
│ │ ├──[✅]--(web-guided-project-HTTP-main)
│ │ │ ├──[✅]--(client)
│ │ │ │ └──[✅]--(src)
│ │ │ └──[✅]--(server)
│ │ └──[✅]--(web-guided-project-testing-web-apps-solution-main)
│ │ ├──[✅]--(public)
│ │ └──[✅]--(src)
│ │ └──[✅]--(components)
│ ├──[✅]--(_Sprint-Resources)
│ │ └──[✅]--(Sprint Challenge Study Guide - Unit 1, Sprint 1)
│ ├──[✅]--(_Templates-Frameworks-And-Official-Repos)
│ │ ├──[✅]--(ant-design-master)
│ │ │ ├──[✅]--(components)
│ │ │ │ ├──[✅]--(__tests__)
│ │ │ │ ├──[✅]--(_util)
│ │ │ │ ├──[✅]--(affix)
│ │ │ │ ├──[✅]--(alert)
│ │ │ │ ├──[✅]--(anchor)
│ │ │ │ ├──[✅]--(auto-complete)
│ │ │ │ ├──[✅]--(avatar)
│ │ │ │ ├──[✅]--(back-top)
│ │ │ │ ├──[✅]--(badge)
│ │ │ │ ├──[✅]--(breadcrumb)
│ │ │ │ ├──[✅]--(button)
│ │ │ │ ├──[✅]--(calendar)
│ │ │ │ ├──[✅]--(card)
│ │ │ │ ├──[✅]--(carousel)
│ │ │ │ ├──[✅]--(cascader)
│ │ │ │ ├──[✅]--(checkbox)
│ │ │ │ ├──[✅]--(col)
│ │ │ │ ├──[✅]--(collapse)
│ │ │ │ ├──[✅]--(comment)
│ │ │ │ ├──[✅]--(config-provider)
│ │ │ │ ├──[✅]--(date-picker)
│ │ │ │ ├──[✅]--(descriptions)
│ │ │ │ ├──[✅]--(divider)
│ │ │ │ ├──[✅]--(drawer)
│ │ │ │ ├──[✅]--(dropdown)
│ │ │ │ ├──[✅]--(empty)
│ │ │ │ ├──[✅]--(form)
│ │ │ │ ├──[✅]--(grid)
│ │ │ │ ├──[✅]--(icon)
│ │ │ │ ├──[✅]--(image)
│ │ │ │ ├──[✅]--(input)
│ │ │ │ ├──[✅]--(input-number)
│ │ │ │ ├──[✅]--(layout)
│ │ │ │ ├──[✅]--(list)
│ │ │ │ ├──[✅]--(locale)
│ │ │ │ ├──[✅]--(locale-provider)
│ │ │ │ ├──[✅]--(mentions)
│ │ │ │ ├──[✅]--(menu)
│ │ │ │ ├──[✅]--(message)
│ │ │ │ ├──[✅]--(modal)
│ │ │ │ ├──[✅]--(notification)
│ │ │ │ ├──[✅]--(overview)
│ │ │ │ ├──[✅]--(page-header)
│ │ │ │ ├──[✅]--(pagination)
│ │ │ │ ├──[✅]--(popconfirm)
│ │ │ │ ├──[✅]--(popover)
│ │ │ │ ├──[✅]--(progress)
│ │ │ │ ├──[✅]--(radio)
│ │ │ │ ├──[✅]--(rate)
│ │ │ │ ├──[✅]--(result)
│ │ │ │ ├──[✅]--(row)
│ │ │ │ ├──[✅]--(select)
│ │ │ │ ├──[✅]--(skeleton)
│ │ │ │ ├──[✅]--(slider)
│ │ │ │ ├──[✅]--(space)
│ │ │ │ ├──[✅]--(spin)
│ │ │ │ ├──[✅]--(statistic)
│ │ │ │ ├──[✅]--(steps)
│ │ │ │ ├──[✅]--(style)
│ │ │ │ ├──[✅]--(switch)
│ │ │ │ ├──[✅]--(table)
│ │ │ │ ├──[✅]--(tabs)
│ │ │ │ ├──[✅]--(tag)
│ │ │ │ ├──[✅]--(time-picker)
│ │ │ │ ├──[✅]--(timeline)
│ │ │ │ ├──[✅]--(tooltip)
│ │ │ │ ├──[✅]--(transfer)
│ │ │ │ ├──[✅]--(tree)
│ │ │ │ ├──[✅]--(tree-select)
│ │ │ │ ├──[✅]--(typography)
│ │ │ │ ├──[✅]--(upload)
│ │ │ │ └──[✅]--(version)
│ │ │ ├──[✅]--(docs)
│ │ │ │ ├──[✅]--(react)
│ │ │ │ └──[✅]--(spec)
│ │ │ ├──[✅]--(scripts)
│ │ │ │ └──[✅]--(previewEditor)
│ │ │ ├──[✅]--(site)
│ │ │ │ └──[✅]--(theme)
│ │ │ ├──[✅]--(tests)
│ │ │ │ ├──[✅]--(__mocks__)
│ │ │ │ ├──[✅]--(__snapshots__)
│ │ │ │ ├──[✅]--(dekko)
│ │ │ │ ├──[✅]--(matchers)
│ │ │ │ └──[✅]--(shared)
│ │ │ └──[✅]--(typings)
│ │ └──[✅]--(material-components-web-master)
│ │ ├──[✅]--(docs)
│ │ │ ├──[✅]--(code)
│ │ │ ├──[✅]--(codelabs)
│ │ │ ├──[✅]--(contribute)
│ │ │ └──[✅]--(open_source)
│ │ ├──[✅]--(packages)
│ │ │ ├──[✅]--(material-components-web)
│ │ │ ├──[✅]--(mdc-animation)
│ │ │ ├──[✅]--(mdc-auto-init)
│ │ │ ├──[✅]--(mdc-banner)
│ │ │ ├──[✅]--(mdc-base)
│ │ │ ├──[✅]--(mdc-button)
│ │ │ ├──[✅]--(mdc-card)
│ │ │ ├──[✅]--(mdc-checkbox)
│ │ │ ├──[✅]--(mdc-c✅ps)
│ │ │ ├──[✅]--(mdc-circular-progress)
│ │ │ ├──[✅]--(mdc-data-table)
│ │ │ ├──[✅]--(mdc-density)
│ │ │ ├──[✅]--(mdc-dialog)
│ │ │ ├──[✅]--(mdc-dom)
│ │ │ ├──[✅]--(mdc-drawer)
│ │ │ ├──[✅]--(mdc-elevation)
│ │ │ ├──[✅]--(mdc-fab)
│ │ │ ├──[✅]--(mdc-feature-targeting)
│ │ │ ├──[✅]--(mdc-floating-label)
│ │ │ ├──[✅]--(mdc-form-field)
│ │ │ ├──[✅]--(mdc-icon-button)
│ │ │ ├──[✅]--(mdc-image-list)
│ │ │ ├──[✅]--(mdc-layout-grid)
│ │ │ ├──[✅]--(mdc-line-ripple)
│ │ │ ├──[✅]--(mdc-linear-progress)
│ │ │ ├──[✅]--(mdc-list)
│ │ │ ├──[✅]--(mdc-menu)
│ │ │ ├──[✅]--(mdc-menu-surface)
│ │ │ ├──[✅]--(mdc-notched-outline)
│ │ │ ├──[✅]--(mdc-progress-indicator)
│ │ │ ├──[✅]--(mdc-radio)
│ │ │ ├──[✅]--(mdc-ripple)
│ │ │ ├──[✅]--(mdc-rtl)
│ │ │ ├──[✅]--(mdc-segmented-button)
│ │ │ ├──[✅]--(mdc-select)
│ │ │ ├──[✅]--(mdc-shape)
│ │ │ ├──[✅]--(mdc-slider)
│ │ │ ├──[✅]--(mdc-snackbar)
│ │ │ ├──[✅]--(mdc-switch)
│ │ │ ├──[✅]--(mdc-tab)
│ │ │ ├──[✅]--(mdc-tab-bar)
│ │ │ ├──[✅]--(mdc-tab-indicator)
│ │ │ ├──[✅]--(mdc-tab-scroller)
│ │ │ ├──[✅]--(mdc-textfield)
│ │ │ ├──[✅]--(mdc-theme)
│ │ │ ├──[✅]--(mdc-tooltip)
│ │ │ ├──[✅]--(mdc-top-app-bar)
│ │ │ ├──[✅]--(mdc-touch-target)
│ │ │ └──[✅]--(mdc-typography)
│ │ ├──[✅]--(scripts)
│ │ │ ├──[✅]--(build)
│ │ │ ├──[✅]--(documentation)
│ │ │ └──[✅]--(webpack)
│ │ └──[✅]--(testing)
│ │ ├──[✅]--(dom)
│ │ ├──[✅]--(featuretargeting)
│ │ └──[✅]--(helpers)
│ ├──[✅]--(_Understanding-Git)
│ ├──[✅]--(__CHEAT-SHEETS)
│ │ ├──[✅]--(All)
│ │ ├──[✅]--(cheatsheets-master)
│ │ │ └──[✅]--(cheatsheets-master)
│ │ │ ├──[✅]--(alertmanager)
│ │ │ ├──[✅]--(ansible)
│ │ │ ├──[✅]--(aws-cli)
│ │ │ ├──[✅]--(aws-codebuild)
│ │ │ ├──[✅]--(aws-ecr)
│ │ │ ├──[✅]--(aws-iam)
│ │ │ ├──[✅]--(aws-python)
│ │ │ ├──[✅]--(bash)
│ │ │ ├──[✅]--(benchmarking)
│ │ │ ├──[✅]--(blackbox-exporter)
│ │ │ ├──[✅]--(cadvisor)
│ │ │ ├──[✅]--(ceph)
│ │ │ ├──[✅]--(cloudwatch)
│ │ │ ├──[✅]--(concourse)
│ │ │ ├──[✅]--(docker)
│ │ │ ├──[✅]--(drone-ci)
│ │ │ ├──[✅]--(dynamodb)
│ │ │ ├──[✅]--(ec2-metadata)
│ │ │ ├──[✅]--(ecs)
│ │ │ ├──[✅]--(elasticsearch)
│ │ │ ├──[✅]--(fluent-bit)
│ │ │ ├──[✅]--(font-awesome)
│ │ │ ├──[✅]--(git)
│ │ │ ├──[✅]--(github-actions)
│ │ │ ├──[✅]--(golang)
│ │ │ ├──[✅]--(grafana)
│ │ │ ├──[✅]--(grok)
│ │ │ ├──[✅]--(influxdb)
│ │ │ ├──[✅]--(iterm)
│ │ │ ├──[✅]--(javascript)
│ │ │ ├──[✅]--(jq)
│ │ │ ├──[✅]--(k3s)
│ │ │ ├──[✅]--(kubernetes)
│ │ │ ├──[✅]--(loki)
│ │ │ ├──[✅]--(mongodb)
│ │ │ ├──[✅]--(mysql)
│ │ │ ├──[✅]--(neo4j-cypher)
│ │ │ ├──[✅]--(nginx)
│ │ │ ├──[✅]--(postgresql)
│ │ │ ├──[✅]--(prometheus)
│ │ │ ├──[✅]--(pushgateway)
│ │ │ ├──[✅]--(python)
│ │ │ ├──[✅]--(regex)
│ │ │ ├──[✅]--(samba)
│ │ │ ├──[✅]--(sftp)
│ │ │ ├──[✅]--(slack)
│ │ │ ├──[✅]--(ssh)
│ │ │ ├──[✅]--(ssh-keygen)
│ │ │ ├──[✅]--(sudo)
│ │ │ ├──[✅]--(sysadmin)
│ │ │ ├──[✅]--(systemd)
│ │ │ ├──[✅]--(terraform)
│ │ │ ├──[✅]--(vim)
│ │ │ └──[✅]--(zipkin)
│ │ ├──[✅]--(guided-cheatsheets)
│ │ │ ├──[✅]--(auto-generate-boilerplate)
│ │ │ │ └──[✅]--(test2)
│ │ │ └──[✅]--(test.html)
│ │ └──[✅]--(pdf)
│ │ ├──[✅]--(css)
│ │ ├──[✅]--(data-structures)
│ │ ├──[✅]--(database)
│ │ ├──[✅]--(engineering)
│ │ ├──[✅]--(general-comp-sci)
│ │ ├──[✅]--(git)
│ │ ├──[✅]--(git.html)
│ │ ├──[✅]--(html)
│ │ ├──[✅]--(java)
│ │ ├──[✅]--(javascript)
│ │ ├──[✅]--(linux)
│ │ ├──[✅]--(math)
│ │ ├──[✅]--(misc)
│ │ ├──[✅]--(python)
│ │ ├──[✅]--(python.html)
│ │ ├──[✅]--(ruby)
│ │ ├──[✅]--(ruby.html)
│ │ ├──[✅]--(unsorted)
│ │ └──[✅]--(web)
│ ├──[✅]--(awesome-resources)
│ │ ├──[✅]--(101.awesome.tools.for.web.designers.and.developers)
│ │ ├──[✅]--(Awesome-Design-Tools-master)
│ │ │ ├──[✅]--(Media)
│ │ │ └──[✅]--(docs)
│ │ │ ├──[✅]--(assets)
│ │ │ ├──[✅]--(css)
│ │ │ ├──[✅]--(js)
│ │ │ └──[✅]--(modules)
│ │ ├──[✅]--(Awesome-master)
│ │ │ └──[✅]--(media)
│ │ ├──[✅]--(Awesome.WSL.repo)
│ │ ├──[✅]--(Awesome_APIs-master)
│ │ ├──[✅]--(Cumulative-Resource-List-master)
│ │ │ └──[✅]--(README-s)
│ │ ├──[✅]--(Cumulative.Resource.List.repo)
│ │ ├──[✅]--(Staging)
│ │ │ └──[✅]--(A-to-Z-Resources-for-Students-master)
│ │ │ ├──[✅]--(Android)
│ │ │ ├──[✅]--(BlockChain)
│ │ │ ├──[✅]--(CheatSheet)
│ │ │ ├──[✅]--(GSOC)
│ │ │ ├──[✅]--(ML)
│ │ │ ├──[✅]--(Node.JS)
│ │ │ ├──[✅]--(Projects)
│ │ │ ├──[✅]--(Python)
│ │ │ ├──[✅]--(res)
│ │ │ └──[✅]--(translation)
│ │ ├──[✅]--(awesome-cheatsheet-master)
│ │ │ └──[✅]--(tests)
│ │ ├──[✅]--(awesome-cheatsheets)
│ │ │ ├──[✅]--(backend)
│ │ │ ├──[✅]--(databases)
│ │ │ ├──[✅]--(frontend)
│ │ │ ├──[✅]--(languages)
│ │ │ └──[✅]--(tools)
│ │ ├──[✅]--(awesome-chrome-devtools-master)
│ │ │ └──[✅]--(awesome-chrome-devtools-master)
│ │ ├──[✅]--(awesome-cli-apps-master)
│ │ │ └──[✅]--(media)
│ │ ├──[✅]--(awesome-cpp-master)
│ │ ├──[✅]--(awesome-creative-coding-master)
│ │ │ └──[✅]--(website)
│ │ ├──[✅]--(awesome-css-master)
│ │ ├──[✅]--(awesome-dotfiles-master)
│ │ ├──[✅]--(awesome-for-beginners-master)
│ │ │ └──[✅]--(assets)
│ │ ├──[✅]--(awesome-gists-master)
│ │ │ └──[✅]--(awesome-gists-master)
│ │ ├──[✅]--(awesome-heroku-master)
│ │ │ └──[✅]--(awesome-heroku-master)
│ │ │ └──[✅]--(images)
│ │ ├──[✅]--(awesome-interview-questions-master)
│ │ ├──[✅]--(awesome-javascript-master)
│ │ │ └──[✅]--(awesome-javascript-master)
│ │ ├──[✅]--(awesome-js-master)
│ │ │ └──[✅]--(awesome-js-master)
│ │ ├──[✅]--(awesome-list-master)
│ │ │ └──[✅]--(cheatsheets)
│ │ ├──[✅]--(awesome-main)
│ │ │ └──[✅]--(media)
│ │ ├──[✅]--(awesome-nodejs-master)
│ │ │ ├──[✅]--(awesome-nodejs-master)
│ │ │ │ └──[✅]--(media)
│ │ │ └──[✅]--(media)
│ │ ├──[✅]--(awesome-piracy-master)
│ │ ├──[✅]--(awesome-python-applications-master)
│ │ │ ├──[✅]--(notebooks)
│ │ │ └──[✅]--(templates)
│ │ ├──[✅]--(awesome-python-master)
│ │ │ └──[✅]--(docs)
│ │ │ └──[✅]--(css)
│ │ ├──[✅]--(awesome-react-hooks-master)
│ │ ├──[✅]--(awesome-react-render-props-master)
│ │ │ └──[✅]--(awesome-react-render-props-master)
│ │ ├──[✅]--(awesome-readme-master)
│ │ ├──[✅]--(awesome-redux-master)
│ │ │ └──[✅]--(examples)
│ │ ├──[✅]--(awesome-selfhosted-master)
│ │ │ └──[✅]--(tests)
│ │ ├──[✅]--(awesome-shell-master)
│ │ ├──[✅]--(awesome-vscode-master)
│ │ │ ├──[✅]--(screenshots)
│ │ │ └──[✅]--(themes)
│ │ │ └──[✅]--(screenshots)
│ │ ├──[✅]--(awesome.cpp.repo)
│ │ ├──[✅]--(awesome.interview.questions)
│ │ ├──[✅]--(awesome.js.snippets)
│ │ ├──[✅]--(awesome.json.repo)
│ │ ├──[✅]--(awesome.markdown)
│ │ ├──[✅]--(awesome.postgres.repo)
│ │ ├──[✅]--(awesome.react.components.repo)
│ │ ├──[✅]--(awesome.regex.repo)
│ │ ├──[✅]--(awesome.rest.repo)
│ │ ├──[✅]--(awesome.web.dev.resources.repo)
│ │ ├──[✅]--(awesomeopensource.com)
│ │ │ ├──[✅]--(categories)
│ │ │ ├──[✅]--(cdn-cgi)
│ │ │ │ ├──[✅]--(bm)
│ │ │ │ └──[✅]--(scripts)
│ │ │ ├──[✅]--(packs)
│ │ │ ├──[✅]--(project)
│ │ │ │ ├──[✅]--(0k.html)
│ │ │ │ ├──[✅]--(3F)
│ │ │ │ ├──[✅]--(500tech)
│ │ │ │ ├──[✅]--(864381832)
│ │ │ │ ├──[✅]--(APIs-guru.html)
│ │ │ │ ├──[✅]--(AdnanHodzic.html)
│ │ │ │ ├──[✅]--(AliasIO)
│ │ │ │ ├──[✅]--(AlisamTechnology)
│ │ │ │ ├──[✅]--(AloneMonkey.html)
│ │ │ │ ├──[✅]--(ApiGen)
│ │ │ │ ├──[✅]--(ArchStrike)
│ │ │ │ ├──[✅]--(Armin2208.html)
│ │ │ │ ├──[✅]--(AryToNeX.html)
│ │ │ │ ├──[✅]--(Ashung)
│ │ │ │ ├──[✅]--(Azure)
│ │ │ │ ├──[✅]--(BinaryAnalysisPlatform.html)
│ │ │ │ ├──[✅]--(CTCaer)
│ │ │ │ ├──[✅]--(CUTR-at-USF)
│ │ │ │ ├──[✅]--(CVarisco.html)
│ │ │ │ ├──[✅]--(CalebFenton.html)
│ │ │ │ ├──[✅]--(CedricGuillemet.html)
│ │ │ │ ├──[✅]--(CharlesPikachu)
│ │ │ │ ├──[✅]--(Col-E.html)
│ │ │ │ ├──[✅]--(Cosmo.html)
│ │ │ │ ├──[✅]--(CrestApps)
│ │ │ │ ├──[✅]--(DataBiosphere)
│ │ │ │ ├──[✅]--(Dav1dde)
│ │ │ │ ├──[✅]--(DavideViolante.html)
│ │ │ │ ├──[✅]--(DeathKing.html)
│ │ │ │ ├──[✅]--(DennisYurichev.html)
│ │ │ │ ├──[✅]--(Depressurizer.html)
│ │ │ │ ├──[✅]--(DevUtilsApp)
│ │ │ │ ├──[✅]--(DextApp)
│ │ │ │ ├──[✅]--(Dobiasd.html)
│ │ │ │ ├──[✅]--(DreamCats)
│ │ │ │ ├──[✅]--(EFPrefix)
│ │ │ │ ├──[✅]--(EasyCorp)
│ │ │ │ ├──[✅]--(EntilZha.html)
│ │ │ │ ├──[✅]--(Gh0u1L5.html)
│ │ │ │ ├──[✅]--(GoogleChrome)
│ │ │ │ ├──[✅]--(GoogleChromeLabs)
│ │ │ │ ├──[✅]--(GoogleCloudPlatform)
│ │ │ │ ├──[✅]--(GoogleContainerTools)
│ │ │ │ ├──[✅]--(GordyD.html)
│ │ │ │ ├──[✅]--(HDB-Li.html)
│ │ │ │ ├──[✅]--(Hack-with-Github.html)
│ │ │ │ ├──[✅]--(✅tomis.html)
│ │ │ │ ├──[✅]--(HosseinKarami)
│ │ │ │ ├──[✅]--(ITI)
│ │ │ │ ├──[✅]--(Ice-Hazymoon)
│ │ │ │ ├──[✅]--(Impedimenta)
│ │ │ │ ├──[✅]--(Ismaestro.html)
│ │ │ │ ├──[✅]--(IvanMathy)
│ │ │ │ ├──[✅]--(JamesIves)
│ │ │ │ ├──[✅]--(JasonEtco)
│ │ │ │ ├──[✅]--(JasonS✅n.html)
│ │ │ │ ├──[✅]--(Jeroen-G.html)
│ │ │ │ ├──[✅]--(Jimmey-Jiang.html)
│ │ │ │ ├──[✅]--(Jocs)
│ │ │ │ ├──[✅]--(JohnSundell)
│ │ │ │ ├──[✅]--(JonathanSalwan.html)
│ │ │ │ ├──[✅]--(Juude.html)
│ │ │ │ ├──[✅]--(Karumi.html)
│ │ │ │ ├──[✅]--(KidkArolis)
│ │ │ │ ├──[✅]--(KuroLabs.html)
│ │ │ │ ├──[✅]--(LANIF-UI.html)
│ │ │ │ ├──[✅]--(Labelbox)
│ │ │ │ ├──[✅]--(Leniolabs)
│ │ │ │ ├──[✅]--(LockGit)
│ │ │ │ ├──[✅]--(LorenzCK.html)
│ │ │ │ ├──[✅]--(Louiszhai.html)
│ │ │ │ ├──[✅]--(LuxLang.html)
│ │ │ │ ├──[✅]--(M4cs)
│ │ │ │ ├──[✅]--(MLton.html)
│ │ │ │ ├──[✅]--(Maktm.html)
│ │ │ │ ├──[✅]--(Mantle.html)
│ │ │ │ ├──[✅]--(MarioAriasC.html)
│ │ │ │ ├──[✅]--(Metnew.html)
│ │ │ │ ├──[✅]--(MontFerret.html)
│ │ │ │ ├──[✅]--(MostlyAdequate.html)
│ │ │ │ ├──[✅]--(NYAN-x-CAT.html)
│ │ │ │ ├──[✅]--(Naituw.html)
│ │ │ │ ├──[✅]--(NationalSecurityAgency.html)
│ │ │ │ ├──[✅]--(NixOS.html)
│ │ │ │ ├──[✅]--(NoiseByNorthwest.html)
│ │ │ │ ├──[✅]--(OJ.html)
│ │ │ │ ├──[✅]--(OWASP.html)
│ │ │ │ ├──[✅]--(OXOYO)
│ │ │ │ ├──[✅]--(OpenAPITools)
│ │ │ │ ├──[✅]--(Optixal)
│ │ │ │ ├──[✅]--(PegasusCharles)
│ │ │ │ ├──[✅]--(Perfare.html)
│ │ │ │ ├──[✅]--(PipedreamHQ)
│ │ │ │ ├──[✅]--(PowerJob)
│ │ │ │ ├──[✅]--(Powerlevel9k)
│ │ │ │ ├──[✅]--(PrefectHQ)
│ │ │ │ ├──[✅]--(Protoqol)
│ │ │ │ ├──[✅]--(QBDI.html)
│ │ │ │ ├──[✅]--(Qftm)
│ │ │ │ ├──[✅]--(REDasmOrg.html)
│ │ │ │ ├──[✅]--(Raat✅gesh)
│ │ │ │ ├──[✅]--(React-Proto)
│ │ │ │ ├──[✅]--(React-Sight)
│ │ │ │ ├──[✅]--(ReactJSResources.html)
│ │ │ │ ├──[✅]--(ReactPrimer.html)
│ │ │ │ ├──[✅]--(Rhymen.html)
│ │ │ │ ├──[✅]--(Screetsec.html)
│ │ │ │ ├──[✅]--(SeanDragon.html)
│ │ │ │ ├──[✅]--(SecWiki.html)
│ │ │ │ ├──[✅]--(SimulatedGREG.html)
│ │ │ │ ├──[✅]--(Sly777.html)
│ │ │ │ ├──[✅]--(SteamRE.html)
│ │ │ │ ├──[✅]--(Stratio)
│ │ │ │ ├──[✅]--(Suor.html)
│ │ │ │ ├──[✅]--(SymbiFlow)
│ │ │ │ ├──[✅]--(TalkingData)
│ │ │ │ ├──[✅]--(Tamsiree)
│ │ │ │ ├──[✅]--(Tencent)
│ │ │ │ ├──[✅]--(TheLartians)
│ │ │ │ ├──[✅]--(TheresAFewConors)
│ │ │ │ ├──[✅]--(ThoughtWorksInc.html)
│ │ │ │ ├──[✅]--(TwakeApp.html)
│ │ │ │ ├──[✅]--(TypeStrong)
│ │ │ │ ├──[✅]--(WeBankFinTech)
│ │ │ │ ├──[✅]--(WerWolv.html)
│ │ │ │ ├──[✅]--(XorTroll.html)
│ │ │ │ ├──[✅]--(Xudong-Huang)
│ │ │ │ ├──[✅]--(YetiForceCompany)
│ │ │ │ ├──[✅]--(a0rtega.html)
│ │ │ │ ├──[✅]--(aNNiMON.html)
│ │ │ │ ├──[✅]--(ab✅jithvijayan.html)
│ │ │ │ ├──[✅]--(abreheret.html)
│ │ │ │ ├──[✅]--(actionsflow)
│ │ │ │ ├──[✅]--(adamhalasz)
│ │ │ │ ├──[✅]--(adelsz)
│ │ │ │ ├──[✅]--(adnanh)
│ │ │ │ ├──[✅]--(adomokos)
│ │ │ │ ├──[✅]--(adtac)
│ │ │ │ ├──[✅]--(aelassas)
│ │ │ │ ├──[✅]--(agconti.html)
│ │ │ │ ├──[✅]--(ahmadawais)
│ │ │ │ ├──[✅]--(airbus-seclab.html)
│ │ │ │ ├──[✅]--(al0ne)
│ │ │ │ ├──[✅]--(albrow.html)
│ │ │ │ ├──[✅]--(alecthomas.html)
│ │ │ │ ├──[✅]--(alibaba)
│ │ │ │ ├──[✅]--(alibaba.html)
│ │ │ │ ├──[✅]--(aloisdeniel)
│ │ │ │ ├──[✅]--(aloisdeniel.html)
│ │ │ │ ├──[✅]--(alphaSeclab.html)
│ │ │ │ ├──[✅]--(alyssaxuu.html)
│ │ │ │ ├──[✅]--(androguard.html)
│ │ │ │ ├──[✅]--(android-notes)
│ │ │ │ ├──[✅]--(android10.html)
│ │ │ │ ├──[✅]--(andydbc)
│ │ │ │ ├──[✅]--(angular)
│ │ │ │ ├──[✅]--(ankitrohatgi.html)
│ │ │ │ ├──[✅]--(ansible-semaphore)
│ │ │ │ ├──[✅]--(ansjdnakjdnajkd)
│ │ │ │ ├──[✅]--(ant-design.html)
│ │ │ │ ├──[✅]--(ant-move.html)
│ │ │ │ ├──[✅]--(anti-ddos)
│ │ │ │ ├──[✅]--(antonioribeiro)
│ │ │ │ ├──[✅]--(aol.html)
│ │ │ │ ├──[✅]--(apache)
│ │ │ │ ├──[✅]--(apache.html)
│ │ │ │ ├──[✅]--(api-platform)
│ │ │ │ ├──[✅]--(appbaseio)
│ │ │ │ ├──[✅]--(appwrite)
│ │ │ │ ├──[✅]--(appzcoder)
│ │ │ │ ├──[✅]--(aquynh.html)
│ │ │ │ ├──[✅]--(argoproj)
│ │ │ │ ├──[✅]--(armory3d.html)
│ │ │ │ ├──[✅]--(arrow-kt.html)
│ │ │ │ ├──[✅]--(arthurbergmz)
│ │ │ │ ├──[✅]--(as✅shb)
│ │ │ │ ├──[✅]--(as✅shpatel26)
│ │ │ │ ├──[✅]--(assemble)
│ │ │ │ ├──[✅]--(async-labs.html)
│ │ │ │ ├──[✅]--(atomantic)
│ │ │ │ ├──[✅]--(averagesecurityguy)
│ │ │ │ ├──[✅]--(awalterschulze.html)
│ │ │ │ ├──[✅]--(aws)
│ │ │ │ ├──[✅]--(awslabs)
│ │ │ │ ├──[✅]--(b-ryan)
│ │ │ │ ├──[✅]--(b12io)
│ │ │ │ ├──[✅]--(badgen)
│ │ │ │ ├──[✅]--(balsikandar)
│ │ │ │ ├──[✅]--(bamlab)
│ │ │ │ ├──[✅]--(banago)
│ │ │ │ ├──[✅]--(banq)
│ │ │ │ ├──[✅]--(bchavez)
│ │ │ │ ├──[✅]--(bcicen)
│ │ │ │ ├──[✅]--(bestony)
│ │ │ │ ├──[✅]--(bighuang624)
│ │ │ │ ├──[✅]--(bitjson.html)
│ │ │ │ ├──[✅]--(bitwes.html)
│ │ │ │ ├──[✅]--(bjankord.html)
│ │ │ │ ├──[✅]--(bkaradzic)
│ │ │ │ ├──[✅]--(blackholll)
│ │ │ │ ├──[✅]--(bnb)
│ │ │ │ ├──[✅]--(boo1ean)
│ │ │ │ ├──[✅]--(bootleg.html)
│ │ │ │ ├──[✅]--(boyney123.html)
│ │ │ │ ├──[✅]--(brazilian-utils)
│ │ │ │ ├──[✅]--(brianvoe)
│ │ │ │ ├──[✅]--(brikis98)
│ │ │ │ ├──[✅]--(broadinstitute)
│ │ │ │ ├──[✅]--(brunch)
│ │ │ │ ├──[✅]--(bt3gl.html)
│ │ │ │ ├──[✅]--(bufferapp.html)
│ │ │ │ ├──[✅]--(buginux.html)
│ │ │ │ ├──[✅]--(buildbot)
│ │ │ │ ├──[✅]--(builderbook.html)
│ │ │ │ ├──[✅]--(burghardt)
│ │ │ │ ├──[✅]--(bxcodec)
│ │ │ │ ├──[✅]--(caicloud)
│ │ │ │ ├──[✅]--(caixw)
│ │ │ │ ├──[✅]--(camunda)
│ │ │ │ ├──[✅]--(carp-lang.html)
│ │ │ │ ├──[✅]--(ccampbell)
│ │ │ │ ├──[✅]--(cea-sec.html)
│ │ │ │ ├──[✅]--(cesarferreira.html)
│ │ │ │ ├──[✅]--(cferdinandi.html)
│ │ │ │ ├──[✅]--(chaps-io)
│ │ │ │ ├──[✅]--(checkly)
│ │ │ │ ├──[✅]--(chengderen)
│ │ │ │ ├──[✅]--(chenxiancai.html)
│ │ │ │ ├──[✅]--(c✅nese-poetry)
│ │ │ │ ├──[✅]--(chrissimpkins)
│ │ │ │ ├──[✅]--(chrisvfritz.html)
│ │ │ │ ├──[✅]--(ciaochaos)
│ │ │ │ ├──[✅]--(cmu-sei.html)
│ │ │ │ ├──[✅]--(code-✅ke.html)
│ │ │ │ ├──[✅]--(codexu)
│ │ │ │ ├──[✅]--(codilime.html)
│ │ │ │ ├──[✅]--(common-workflow-language)
│ │ │ │ ├──[✅]--(compodoc)
│ │ │ │ ├──[✅]--(concourse)
│ │ │ │ ├──[✅]--(cornflourblue.html)
│ │ │ │ ├──[✅]--(cortesi)
│ │ │ │ ├──[✅]--(coryhouse.html)
│ │ │ │ ├──[✅]--(cosmtrek)
│ │ │ │ ├──[✅]--(cristianoliveira)
│ │ │ │ ├──[✅]--(csstree)
│ │ │ │ ├──[✅]--(cteamx)
│ │ │ │ ├──[✅]--(ctrlplusb.html)
│ │ │ │ ├──[✅]--(cyclejs.html)
│ │ │ │ ├──[✅]--(dagster-io)
│ │ │ │ ├──[✅]--(dailydotdev)
│ │ │ │ ├──[✅]--(damnever.html)
│ │ │ │ ├──[✅]--(danger)
│ │ │ │ ├──[✅]--(danielfsousa.html)
│ │ │ │ ├──[✅]--(danielgerlag)
│ │ │ │ ├──[✅]--(danielkrupinski.html)
│ │ │ │ ├──[✅]--(danilowoz.html)
│ │ │ │ ├──[✅]--(das-labor.html)
│ │ │ │ ├──[✅]--(dashvlas)
│ │ │ │ ├──[✅]--(datawrapper.html)
│ │ │ │ ├──[✅]--(david942j)
│ │ │ │ ├──[✅]--(davidkpiano)
│ │ │ │ ├──[✅]--(davyxu.html)
│ │ │ │ ├──[✅]--(ddwhan0123)
│ │ │ │ ├──[✅]--(deanishe)
│ │ │ │ ├──[✅]--(denji)
│ │ │ │ ├──[✅]--(deployphp.html)
│ │ │ │ ├──[✅]--(dev-labs-bg)
│ │ │ │ ├──[✅]--(developit.html)
│ │ │ │ ├──[✅]--(devspace-cloud)
│ │ │ │ ├──[✅]--(dgageot.html)
│ │ │ │ ├──[✅]--(didi)
│ │ │ │ ├──[✅]--(diegohaz)
│ │ │ │ ├──[✅]--(diegohaz.html)
│ │ │ │ ├──[✅]--(djkaty.html)
│ │ │ │ ├──[✅]--(djrobstep)
│ │ │ │ ├──[✅]--(dkhamsing.html)
│ │ │ │ ├──[✅]--(dnote)
│ │ │ │ ├──[✅]--(dominikwilkowski)
│ │ │ │ ├──[✅]--(donnemartin)
│ │ │ │ ├──[✅]--(dotnet.html)
│ │ │ │ ├──[✅]--(dpnishant.html)
│ │ │ │ ├──[✅]--(dreddsa5dies)
│ │ │ │ ├──[✅]--(drone)
│ │ │ │ ├──[✅]--(dropbox)
│ │ │ │ ├──[✅]--(dry-python.html)
│ │ │ │ ├──[✅]--(dsasmblr.html)
│ │ │ │ ├──[✅]--(efremidze)
│ │ │ │ ├──[✅]--(egison.html)
│ │ │ │ ├──[✅]--(electron-react-boilerplate.html)
│ │ │ │ ├──[✅]--(eliukblau.html)
│ │ │ │ ├──[✅]--(elixirs)
│ │ │ │ ├──[✅]--(enkodellc.html)
│ │ │ │ ├──[✅]--(ergonomica.html)
│ │ │ │ ├──[✅]--(ericalli.html)
│ │ │ │ ├──[✅]--(ericmdantas)
│ │ │ │ ├──[✅]--(eteran.html)
│ │ │ │ ├──[✅]--(evernote.html)
│ │ │ │ ├──[✅]--(evhub.html)
│ │ │ │ ├──[✅]--(evilmartians)
│ │ │ │ ├──[✅]--(explosion.html)
│ │ │ │ ├──[✅]--(expressjs)
│ │ │ │ ├──[✅]--(fabric8io)
│ │ │ │ ├──[✅]--(fahad19.html)
│ │ │ │ ├──[✅]--(fantasyland.html)
│ │ │ │ ├──[✅]--(fastai)
│ │ │ │ ├──[✅]--(fatih.html)
│ │ │ │ ├──[✅]--(faxad)
│ │ │ │ ├──[✅]--(felix-lang.html)
│ │ │ │ ├──[✅]--(fesh0r.html)
│ │ │ │ ├──[✅]--(fireeye.html)
│ │ │ │ ├──[✅]--(firmianay.html)
│ │ │ │ ├──[✅]--(flatlogic.html)
│ │ │ │ ├──[✅]--(flexdinesh.html)
│ │ │ │ ├──[✅]--(flexsurfer)
│ │ │ │ ├──[✅]--(flosell.html)
│ │ │ │ ├──[✅]--(fluture-js.html)
│ │ │ │ ├──[✅]--(francescomalatesta.html)
│ │ │ │ ├──[✅]--(freeCodeCamp)
│ │ │ │ ├──[✅]--(frees-io.html)
│ │ │ │ ├──[✅]--(frostming.html)
│ │ │ │ ├──[✅]--(fucongcong)
│ │ │ │ ├──[✅]--(functionaljava.html)
│ │ │ │ ├──[✅]--(fungos.html)
│ │ │ │ ├──[✅]--(funkia.html)
│ │ │ │ ├──[✅]--(furioussoul)
│ │ │ │ ├──[✅]--(fuse-box)
│ │ │ │ ├──[✅]--(gaasedelen.html)
│ │ │ │ ├──[✅]--(galaxyproject)
│ │ │ │ ├──[✅]--(garden-io)
│ │ │ │ ├──[✅]--(gautamkrishnar)
│ │ │ │ ├──[✅]--(gbdev)
│ │ │ │ ├──[✅]--(gcanti.html)
│ │ │ │ ├──[✅]--(gchaincl)
│ │ │ │ ├──[✅]--(geekidea)
│ │ │ │ ├──[✅]--(getify.html)
│ │ │ │ ├──[✅]--(gfngfn.html)
│ │ │ │ ├──[✅]--(ghosh)
│ │ │ │ ├──[✅]--(gibbed.html)
│ │ │ │ ├──[✅]--(gigobyte.html)
│ │ │ │ ├──[✅]--(git-town)
│ │ │ │ ├──[✅]--(github)
│ │ │ │ ├──[✅]--(github-serendipity)
│ │ │ │ ├──[✅]--(gitless-vcs)
│ │ │ │ ├──[✅]--(glauth)
│ │ │ │ ├──[✅]--(go-flutter-desktop.html)
│ │ │ │ ├──[✅]--(gocd)
│ │ │ │ ├──[✅]--(golangci)
│ │ │ │ ├──[✅]--(goldbergyoni)
│ │ │ │ ├──[✅]--(google)
│ │ │ │ ├──[✅]--(google.html)
│ │ │ │ ├──[✅]--(got✅nkster.html)
│ │ │ │ ├──[✅]--(grain-lang.html)
│ │ │ │ ├──[✅]--(grame-cncm.html)
│ │ │ │ ├──[✅]--(graphql-editor)
│ │ │ │ ├──[✅]--(gravitational)
│ │ │ │ ├──[✅]--(grin-compiler.html)
│ │ │ │ ├──[✅]--(gruntwork-io)
│ │ │ │ ├──[✅]--(guozhaolong)
│ │ │ │ ├──[✅]--(hack4impact.html)
│ │ │ │ ├──[✅]--(hacklcx)
│ │ │ │ ├──[✅]--(hacktoolspack)
│ │ │ │ ├──[✅]--(hahwul)
│ │ │ │ ├──[✅]--(halfzebra.html)
│ │ │ │ ├──[✅]--(harryheman.html)
│ │ │ │ ├──[✅]--(hasura)
│ │ │ │ ├──[✅]--(headcrab-rs)
│ │ │ │ ├──[✅]--(hemanth.html)
│ │ │ │ ├──[✅]--(hmemcpy.html)
│ │ │ │ ├──[✅]--(hoffstadt)
│ │ │ │ ├──[✅]--(hoppscotch)
│ │ │ │ ├──[✅]--(horsicq.html)
│ │ │ │ ├──[✅]--(hteso.html)
│ │ │ │ ├──[✅]--(htr-tech.html)
│ │ │ │ ├──[✅]--(httpie)
│ │ │ │ ├──[✅]--(htty)
│ │ │ │ ├──[✅]--(hugsy.html)
│ │ │ │ ├──[✅]--(huiyadanli.html)
│ │ │ │ ├──[✅]--(hundredrabbits.html)
│ │ │ │ ├──[✅]--(hybridsjs.html)
│ │ │ │ ├──[✅]--(hyper0x.html)
│ │ │ │ ├──[✅]--(iBotPeaches.html)
│ │ │ │ ├──[✅]--(iGio90.html)
│ │ │ │ ├──[✅]--(icebob.html)
│ │ │ │ ├──[✅]--(iddoeldor.html)
│ │ │ │ ├──[✅]--(imazen.html)
│ │ │ │ ├──[✅]--(infinitered.html)
│ │ │ │ ├──[✅]--(insidegui)
│ │ │ │ ├──[✅]--(iridakos)
│ │ │ │ ├──[✅]--(iterative)
│ │ │ │ ├──[✅]--(ivRodriguezCA.html)
│ │ │ │ ├──[✅]--(izdi.html)
│ │ │ │ ├──[✅]--(jacktasia)
│ │ │ │ ├──[✅]--(jagenjo)
│ │ │ │ ├──[✅]--(janlelis)
│ │ │ │ ├──[✅]--(japgolly.html)
│ │ │ │ ├──[✅]--(java-diff-utils)
│ │ │ │ ├──[✅]--(javierbyte.html)
│ │ │ │ ├──[✅]--(javiereguiluz)
│ │ │ │ ├──[✅]--(javrasya)
│ │ │ │ ├──[✅]--(jayfk)
│ │ │ │ ├──[✅]--(jaykali)
│ │ │ │ ├──[✅]--(jdblischak)
│ │ │ │ ├──[✅]--(jedireza.html)
│ │ │ │ ├──[✅]--(j✅pster)
│ │ │ │ ├──[✅]--(jhspetersson.html)
│ │ │ │ ├──[✅]--(joealcorn)
│ │ │ │ ├──[✅]--(johncarl81.html)
│ │ │ │ ├──[✅]--(johnno1962.html)
│ │ │ │ ├──[✅]--(johnpapa)
│ │ │ │ ├──[✅]--(jondot)
│ │ │ │ ├──[✅]--(joshburgess.html)
│ │ │ │ ├──[✅]--(jrvansuita)
│ │ │ │ ├──[✅]--(jsdoc2md)
│ │ │ │ ├──[✅]--(jsynowiec.html)
│ │ │ │ ├──[✅]--(juicycleff.html)
│ │ │ │ ├──[✅]--(julien-lafont)
│ │ │ │ ├──[✅]--(justjanne)
│ │ │ │ ├──[✅]--(k8gege)
│ │ │ │ ├──[✅]--(kaitai-io.html)
│ │ │ │ ├──[✅]--(kbrsh.html)
│ │ │ │ ├──[✅]--(kefirjs.html)
│ │ │ │ ├──[✅]--(kefranabg)
│ │ │ │ ├──[✅]--(kenvix.html)
│ │ │ │ ├──[✅]--(keystone-engine.html)
│ │ │ │ ├──[✅]--(kickstarter.html)
│ │ │ │ ├──[✅]--(kiegroup)
│ │ │ │ ├──[✅]--(kkoomen)
│ │ │ │ ├──[✅]--(knipknap)
│ │ │ │ ├──[✅]--(knownsec)
│ │ │ │ ├──[✅]--(koalaman)
│ │ │ │ ├──[✅]--(korcankaraokcu.html)
│ │ │ │ ├──[✅]--(kostya.html)
│ │ │ │ ├──[✅]--(kriasoft.html)
│ │ │ │ ├──[✅]--(krzysztofzablocki.html)
│ │ │ │ ├──[✅]--(kunalkapadia.html)
│ │ │ │ ├──[✅]--(ladjs.html)
│ │ │ │ ├──[✅]--(laravel-enso.html)
│ │ │ │ ├──[✅]--(laravel-zero.html)
│ │ │ │ ├──[✅]--(lastbackend)
│ │ │ │ ├──[✅]--(lazy-luo)
│ │ │ │ ├──[✅]--(leemengtaiwan)
│ │ │ │ ├──[✅]--(lengjibo)
│ │ │ │ ├──[✅]--(lennylxx.html)
│ │ │ │ ├──[✅]--(lettier.html)
│ │ │ │ ├──[✅]--(l✅e1)
│ │ │ │ ├──[✅]--(lief-project.html)
│ │ │ │ ├──[✅]--(lifepillar)
│ │ │ │ ├──[✅]--(ligurio)
│ │ │ │ ├──[✅]--(liriliri)
│ │ │ │ ├──[✅]--(lk-geimfari)
│ │ │ │ ├──[✅]--(llh911001.html)
│ │ │ │ ├──[✅]--(looly.html)
│ │ │ │ ├──[✅]--(loot.html)
│ │ │ │ ├──[✅]--(louthy.html)
│ │ │ │ ├──[✅]--(lsegal.html)
│ │ │ │ ├──[✅]--(luafun.html)
│ │ │ │ ├──[✅]--(luangjokaj.html)
│ │ │ │ ├──[✅]--(luong-komorebi)
│ │ │ │ ├──[✅]--(lvarayut.html)
│ │ │ │ ├──[✅]--(lvwzhen.html)
│ │ │ │ ├──[✅]--(lxerxa)
│ │ │ │ ├──[✅]--(lyft)
│ │ │ │ ├──[✅]--(m0bilesecurity.html)
│ │ │ │ ├──[✅]--(m4ll0k.html)
│ │ │ │ ├──[✅]--(macbre)
│ │ │ │ ├──[✅]--(maciejczyzewski)
│ │ │ │ ├──[✅]--(maciejtreder.html)
│ │ │ │ ├──[✅]--(madhums.html)
│ │ │ │ ├──[✅]--(maildev)
│ │ │ │ ├──[✅]--(maldevel)
│ │ │ │ ├──[✅]--(manoloide)
│ │ │ │ ├──[✅]--(marblejs.html)
│ │ │ │ ├──[✅]--(marin-m.html)
│ │ │ │ ├──[✅]--(matcornic)
│ │ │ │ ├──[✅]--(mattbrictson.html)
│ │ │ │ ├──[✅]--(matteodem.html)
│ │ │ │ ├──[✅]--(matttga)
│ │ │ │ ├──[✅]--(mcginty)
│ │ │ │ ├──[✅]--(mckeever02)
│ │ │ │ ├──[✅]--(mcnamee.html)
│ │ │ │ ├──[✅]--(mehulj94.html)
│ │ │ │ ├──[✅]--(meitu.html)
│ │ │ │ ├──[✅]--(mgechev.html)
│ │ │ │ ├──[✅]--(mgeeky)
│ │ │ │ ├──[✅]--(microsoft)
│ │ │ │ ├──[✅]--(microsoft.html)
│ │ │ │ ├──[✅]--(mikub)
│ │ │ │ ├──[✅]--(milessabin.html)
│ │ │ │ ├──[✅]--(milostosic.html)
│ │ │ │ ├──[✅]--(minamarkham.html)
│ │ │ │ ├──[✅]--(mingrammer)
│ │ │ │ ├──[✅]--(minio)
│ │ │ │ ├──[✅]--(miripiruni)
│ │ │ │ ├──[✅]--(modm-io)
│ │ │ │ ├──[✅]--(modularcode.html)
│ │ │ │ ├──[✅]--(monix.html)
│ │ │ │ ├──[✅]--(moonad.html)
│ │ │ │ ├──[✅]--(morkt.html)
│ │ │ │ ├──[✅]--(muesli)
│ │ │ │ ├──[✅]--(multitheftauto.html)
│ │ │ │ ├──[✅]--(myntra)
│ │ │ │ ├──[✅]--(mytechnotalent.html)
│ │ │ │ ├──[✅]--(n8n-io)
│ │ │ │ ├──[✅]--(nabla-c0d3.html)
│ │ │ │ ├──[✅]--(nanobox-io)
│ │ │ │ ├──[✅]--(ncform)
│ │ │ │ ├──[✅]--(nektos)
│ │ │ │ ├──[✅]--(nerevu.html)
│ │ │ │ ├──[✅]--(nette)
│ │ │ │ ├──[✅]--(nezhar)
│ │ │ │ ├──[✅]--(nginx-boilerplate.html)
│ │ │ │ ├──[✅]--(ngx-rocket)
│ │ │ │ ├──[✅]--(niieani.html)
│ │ │ │ ├──[✅]--(nisrulz)
│ │ │ │ ├──[✅]--(nixzhu)
│ │ │ │ ├──[✅]--(njpatel)
│ │ │ │ ├──[✅]--(nlkl.html)
│ │ │ │ ├──[✅]--(nmikhailov.html)
│ │ │ │ ├──[✅]--(nosarthur)
│ │ │ │ ├──[✅]--(notrab.html)
│ │ │ │ ├──[✅]--(npm)
│ │ │ │ ├──[✅]--(nsacyber)
│ │ │ │ ├──[✅]--(nsomar)
│ │ │ │ ├──[✅]--(nunomaduro.html)
│ │ │ │ ├──[✅]--(nvdv)
│ │ │ │ ├──[✅]--(o-gs)
│ │ │ │ ├──[✅]--(o2sh.html)
│ │ │ │ ├──[✅]--(ocornut)
│ │ │ │ ├──[✅]--(octodns)
│ │ │ │ ├──[✅]--(okonet)
│ │ │ │ ├──[✅]--(okteto)
│ │ │ │ ├──[✅]--(oleg-py.html)
│ │ │ │ ├──[✅]--(oliver-gomes.html)
│ │ │ │ ├──[✅]--(onmyway133)
│ │ │ │ ├──[✅]--(open-rpa)
│ │ │ │ ├──[✅]--(opendevops-cn)
│ │ │ │ ├──[✅]--(optics-dev.html)
│ │ │ │ ├──[✅]--(ornicar.html)
│ │ │ │ ├──[✅]--(ory)
│ │ │ │ ├──[✅]--(paed01)
│ │ │ │ ├──[✅]--(palatable.html)
│ │ │ │ ├──[✅]--(panda-re.html)
│ │ │ │ ├──[✅]--(pankod.html)
│ │ │ │ ├──[✅]--(passcod)
│ │ │ │ ├──[✅]--(paxtonhare.html)
│ │ │ │ ├──[✅]--(pdcgomes)
│ │ │ │ ├──[✅]--(pditommaso)
│ │ │ │ ├──[✅]--(pdoc3)
│ │ │ │ ├──[✅]--(pemistahl.html)
│ │ │ │ ├──[✅]--(petervanderdoes)
│ │ │ │ ├──[✅]--(petervmeijgaard.html)
│ │ │ │ ├──[✅]--(phar-io)
│ │ │ │ ├──[✅]--(pharo-project)
│ │ │ │ ├──[✅]--(pheuter.html)
│ │ │ │ ├──[✅]--(phodal)
│ │ │ │ ├──[✅]--(phodal.html)
│ │ │ │ ├──[✅]--(phpmentors-jp)
│ │ │ │ ├──[✅]--(plasma-disassembler.html)
│ │ │ │ ├──[✅]--(plopjs)
│ │ │ │ ├──[✅]--(pocotan001)
│ │ │ │ ├──[✅]--(pod4g.html)
│ │ │ │ ├──[✅]--(pointfreeco.html)
│ │ │ │ ├──[✅]--(polyaxon)
│ │ │ │ ├──[✅]--(portable-cto)
│ │ │ │ ├──[✅]--(postmanlabs)
│ │ │ │ ├──[✅]--(pret.html)
│ │ │ │ ├──[✅]--(prisma.html)
│ │ │ │ ├──[✅]--(proYang.html)
│ │ │ │ ├──[✅]--(programa-stic.html)
│ │ │ │ ├──[✅]--(ps✅hn)
│ │ │ │ ├──[✅]--(puckel)
│ │ │ │ ├──[✅]--(puppeteer)
│ │ │ │ ├──[✅]--(pwndbg.html)
│ │ │ │ ├──[✅]--(python-attrs.html)
│ │ │ │ ├──[✅]--(qiangxue.html)
│ │ │ │ ├──[✅]--(qilingframework.html)
│ │ │ │ ├──[✅]--(radareorg.html)
│ │ │ │ ├──[✅]--(radicle-dev)
│ │ │ │ ├──[✅]--(rahuldkjain)
│ │ │ │ ├──[✅]--(raphaelhanneken)
│ │ │ │ ├──[✅]--(rappasoft.html)
│ │ │ │ ├──[✅]--(raysan5)
│ │ │ │ ├──[✅]--(react-everywhere.html)
│ │ │ │ ├──[✅]--(react-native-community.html)
│ │ │ │ ├──[✅]--(react-ui-builder)
│ │ │ │ ├──[✅]--(reactopt)
│ │ │ │ ├──[✅]--(recoilphp)
│ │ │ │ ├──[✅]--(reenhanced)
│ │ │ │ ├──[✅]--(release-it.html)
│ │ │ │ ├──[✅]--(responsively-org)
│ │ │ │ ├──[✅]--(retroplasma.html)
│ │ │ │ ├──[✅]--(reviewboard)
│ │ │ │ ├──[✅]--(reviewdog)
│ │ │ │ ├──[✅]--(rgleichman.html)
│ │ │ │ ├──[✅]--(rialto-php)
│ │ │ │ ├──[✅]--(ribice.html)
│ │ │ │ ├──[✅]--(ring-lang.html)
│ │ │ │ ├──[✅]--(rizinorg.html)
│ │ │ │ ├──[✅]--(rmusser01.html)
│ │ │ │ ├──[✅]--(rockbruno)
│ │ │ │ ├──[✅]--(rokoroku.html)
│ │ │ │ ├──[✅]--(ropensci)
│ │ │ │ ├──[✅]--(rosuH)
│ │ │ │ ├──[✅]--(rs)
│ │ │ │ ├──[✅]--(rsapkf)
│ │ │ │ ├──[✅]--(rubycdp)
│ │ │ │ ├──[✅]--(ruyadorno)
│ │ │ │ ├──[✅]--(rwieruch.html)
│ │ │ │ ├──[✅]--(ryceg)
│ │ │ │ ├──[✅]--(saadq)
│ │ │ │ ├──[✅]--(sahat.html)
│ │ │ │ ├──[✅]--(salesagility)
│ │ │ │ ├──[✅]--(salgum1114)
│ │ │ │ ├──[✅]--(samuelsimoes.html)
│ │ │ │ ├──[✅]--(santiq.html)
│ │ │ │ ├──[✅]--(saojs.html)
│ │ │ │ ├──[✅]--(scala-exercises.html)
│ │ │ │ ├──[✅]--(scala.html)
│ │ │ │ ├──[✅]--(scalalandio.html)
│ │ │ │ ├──[✅]--(scalaz.html)
│ │ │ │ ├──[✅]--(scastiel)
│ │ │ │ ├──[✅]--(scipipe)
│ │ │ │ ├──[✅]--(sdiehl.html)
│ │ │ │ ├──[✅]--(selfrefactor.html)
│ │ │ │ ├──[✅]--(sfermigier.html)
│ │ │ │ ├──[✅]--(sgr-ksmt.html)
│ │ │ │ ├──[✅]--(sh4✅n.html)
│ │ │ │ ├──[✅]--(sharkdp.html)
│ │ │ │ ├──[✅]--(shenwei356.html)
│ │ │ │ ├──[✅]--(sherlock-project)
│ │ │ │ ├──[✅]--(s✅vammathur)
│ │ │ │ ├──[✅]--(shroudedcode.html)
│ │ │ │ ├──[✅]--(sigalor.html)
│ │ │ │ ├──[✅]--(simeji.html)
│ │ │ │ ├──[✅]--(sindresorhus)
│ │ │ │ ├──[✅]--(sindresorhus.html)
│ │ │ │ ├──[✅]--(sismics)
│ │ │ │ ├──[✅]--(smallmuou)
│ │ │ │ ├──[✅]--(smallnest)
│ │ │ │ ├──[✅]--(softwaremill.html)
│ │ │ │ ├──[✅]--(sogou)
│ │ │ │ ├──[✅]--(source-foundry)
│ │ │ │ ├──[✅]--(spatie)
│ │ │ │ ├──[✅]--(spatie.html)
│ │ │ │ ├──[✅]--(spencerdodd)
│ │ │ │ ├──[✅]--(spikespaz)
│ │ │ │ ├──[✅]--(spirit.html)
│ │ │ │ ├──[✅]--(square)
│ │ │ │ ├──[✅]--(steshaw.html)
│ │ │ │ ├──[✅]--(storybook-eol)
│ │ │ │ ├──[✅]--(strazzere.html)
│ │ │ │ ├──[✅]--(streamlit)
│ │ │ │ ├──[✅]--(subethaedit)
│ │ │ │ ├──[✅]--(sunscrapers)
│ │ │ │ ├──[✅]--(susam)
│ │ │ │ ├──[✅]--(swimlane)
│ │ │ │ ├──[✅]--(tallesl.html)
│ │ │ │ ├──[✅]--(talyssonoc.html)
│ │ │ │ ├──[✅]--(tanelpoder)
│ │ │ │ ├──[✅]--(taniarascia.html)
│ │ │ │ ├──[✅]--(tankywoo.html)
│ │ │ │ ├──[✅]--(taviso.html)
│ │ │ │ ├──[✅]--(team-gryff)
│ │ │ │ ├──[✅]--(teambit)
│ │ │ │ ├──[✅]--(teamclairvoyant)
│ │ │ │ ├──[✅]--(techprimate)
│ │ │ │ ├──[✅]--(terraform-docs)
│ │ │ │ ├──[✅]--(tfsec)
│ │ │ │ ├──[✅]--(the-road-to-graphql.html)
│ │ │ │ ├──[✅]--(thoughtbot)
│ │ │ │ ├──[✅]--(thunks)
│ │ │ │ ├──[✅]--(tiangolo)
│ │ │ │ ├──[✅]--(tidyverse.html)
│ │ │ │ ├──[✅]--(tmrts.html)
│ │ │ │ ├──[✅]--(tmspzz.html)
│ │ │ │ ├──[✅]--(tpolecat.html)
│ │ │ │ ├──[✅]--(tr1s.html)
│ │ │ │ ├──[✅]--(txn2)
│ │ │ │ ├──[✅]--(txt✅nking)
│ │ │ │ ├──[✅]--(typelead.html)
│ │ │ │ ├──[✅]--(typelevel.html)
│ │ │ │ ├──[✅]--(typelift.html)
│ │ │ │ ├──[✅]--(tzutalin)
│ │ │ │ ├──[✅]--(unicodeveloper.html)
│ │ │ │ ├──[✅]--(unicorn-engine.html)
│ │ │ │ ├──[✅]--(universal-ctags)
│ │ │ │ ├──[✅]--(uxmal.html)
│ │ │ │ ├──[✅]--(vaib25vicky.html)
│ │ │ │ ├──[✅]--(vaibhavpandeyvpz.html)
│ │ │ │ ├──[✅]--(vavr-io.html)
│ │ │ │ ├──[✅]--(veggiemonk)
│ │ │ │ ├──[✅]--(vektra)
│ │ │ │ ├──[✅]--(verbose)
│ │ │ │ ├──[✅]--(vercel)
│ │ │ │ ├──[✅]--(versionpress)
│ │ │ │ ├──[✅]--(victorb)
│ │ │ │ ├──[✅]--(viewflow)
│ │ │ │ ├──[✅]--(vitalysim.html)
│ │ │ │ ├──[✅]--(vivisect.html)
│ │ │ │ ├──[✅]--(vkostyukov.html)
│ │ │ │ ├──[✅]--(voidcosmos.html)
│ │ │ │ ├──[✅]--(vue-generators)
│ │ │ │ ├──[✅]--(vuegg)
│ │ │ │ ├──[✅]--(w3tecch.html)
│ │ │ │ ├──[✅]--(watchexec)
│ │ │ │ ├──[✅]--(wbkd.html)
│ │ │ │ ├──[✅]--(wclr)
│ │ │ │ ├──[✅]--(webpro)
│ │ │ │ ├──[✅]--(welldone-software.html)
│ │ │ │ ├──[✅]--(wellyshen.html)
│ │ │ │ ├──[✅]--(wisk.html)
│ │ │ │ ├──[✅]--(wix)
│ │ │ │ ├──[✅]--(wking-io)
│ │ │ │ ├──[✅]--(wo52616111.html)
│ │ │ │ ├──[✅]--(wordplate.html)
│ │ │ │ ├──[✅]--(workco.html)
│ │ │ │ ├──[✅]--(wx-chevalier.html)
│ │ │ │ ├──[✅]--(x-motemen)
│ │ │ │ ├──[✅]--(x64dbg.html)
│ │ │ │ ├──[✅]--(xcpretty)
│ │ │ │ ├──[✅]--(xjh22222228)
│ │ │ │ ├──[✅]--(xoreos.html)
│ │ │ │ ├──[✅]--(xsynaptic)
│ │ │ │ ├──[✅]--(xudaolong)
│ │ │ │ ├──[✅]--(xxjwxc)
│ │ │ │ ├──[✅]--(yeoman)
│ │ │ │ ├──[✅]--(yonaskolb)
│ │ │ │ ├──[✅]--(yos✅mkd)
│ │ │ │ ├──[✅]--(yulingtianxia)
│ │ │ │ ├──[✅]--(yulingtianxia.html)
│ │ │ │ ├──[✅]--(z-pattern-matc✅ng.html)
│ │ │ │ ├──[✅]--(zagahr)
│ │ │ │ ├──[✅]--(zealdocs)
│ │ │ │ ├──[✅]--(zeebe-io)
│ │ │ │ ├──[✅]--(zeffy.html)
│ │ │ │ ├──[✅]--(zegl)
│ │ │ │ ├──[✅]--(zerosoul)
│ │ │ │ ├──[✅]--(zio.html)
│ │ │ │ ├──[✅]--(zjw-swun.html)
│ │ │ │ └──[✅]--(zubairehman.html)
│ │ │ └──[✅]--(projects)
│ │ ├──[✅]--(frontend-dev-bookmarks-master)
│ │ │ └──[✅]--(frontend-dev-bookmarks-master)
│ │ │ ├──[✅]--(animation)
│ │ │ ├──[✅]--(appearance)
│ │ │ ├──[✅]--(arc✅tecture)
│ │ │ ├──[✅]--(compatibility)
│ │ │ ├──[✅]--(ecosystem)
│ │ │ ├──[✅]--(languages-protocols-browser-apis)
│ │ │ ├──[✅]--(user-interface-components)
│ │ │ └──[✅]--(workflow)
│ │ └──[✅]--(fucking.awesome.python)
│ ├──[✅]--(netlify-functions)
│ │ └──[✅]--(src)
│ │ ├──[✅]--(_data)
│ │ ├──[✅]--(_includes)
│ │ │ ├──[✅]--(layouts)
│ │ │ └──[✅]--(partials)
│ │ ├──[✅]--(admin)
│ │ ├──[✅]--(assets)
│ │ │ ├──[✅]--(css)
│ │ │ ├──[✅]--(images)
│ │ │ └──[✅]--(js)
│ │ ├──[✅]--(examples)
│ │ ├──[✅]--(functions)
│ │ └──[✅]--(pages)
│ ├──[✅]--(python-data-generation)
│ ├──[✅]--(technology_books-master)
│ │ ├──[✅]--(Android)
│ │ ├──[✅]--(AngularJS)
│ │ ├──[✅]--(Ansible)
│ │ ├──[✅]--(Arduino)
│ │ ├──[✅]--(CSS)
│ │ ├──[✅]--(Delp✅)
│ │ ├──[✅]--(DevOps)
│ │ ├──[✅]--(Docker)
│ │ ├──[✅]--(Docker-swarm)
│ │ ├──[✅]--(Game Developement)
│ │ ├──[✅]--(Github)
│ │ ├──[✅]--(Golang)
│ │ ├──[✅]--(Java)
│ │ │ └──[✅]--(spring)
│ │ ├──[✅]--(JavaScript)
│ │ ├──[✅]--(Jenkins)
│ │ ├──[✅]--(K8s)
│ │ ├──[✅]--(Kafka)
│ │ ├──[✅]--(Linux)
│ │ ├──[✅]--(Mac✅ne-Learning)
│ │ ├──[✅]--(Mesos)
│ │ ├──[✅]--(MongoDB)
│ │ ├──[✅]--(NodeJS)
│ │ ├──[✅]--(OpenStack)
│ │ ├──[✅]--(Python)
│ │ ├──[✅]--(R)
│ │ ├──[✅]--(Raspberry)
│ │ ├──[✅]--(Redis)
│ │ ├──[✅]--(Ruby)
│ │ ├──[✅]--(Terraform)
│ │ ├──[✅]--(Unity)
│ │ └──[✅]--(Zookeeper)
│ └──[✅]--(web-guided-project-testing-web-apps-solution-main)
│ ├──[✅]--(public)
│ └──[✅]--(src)
│ └──[✅]--(components)
├──[✅]--(3-misc)
│ ├──[✅]--(Beginner)
│ │ ├──[✅]--(capSentence)
│ │ ├──[✅]--(chunkArray)
│ │ ├──[✅]--(factorial)
│ │ ├──[✅]--(falsyBouncer)
│ │ ├──[✅]--(fibonacci)
│ │ ├──[✅]--(fizzBuzz)
│ │ ├──[✅]--(hammingDistance)
│ │ ├──[✅]--(isAnagram)
│ │ ├──[✅]--(longestWord)
│ │ ├──[✅]--(maxRecurringChar)
│ │ ├──[✅]--(mergeArrays)
│ │ ├──[✅]--(palindromeChecker)
│ │ ├──[✅]--(reverseString)
│ │ ├──[✅]--(searchReplace)
│ │ ├──[✅]--(vowelsCounter)
│ │ └──[✅]--(whereIBelong)
│ ├──[✅]--(SandboxSQL-master)
│ │ └──[✅]--(SandboxSQL-master)
│ │ ├──[✅]--(SQLSandbox.xcodeproj)
│ │ │ ├──[✅]--(project.xcworkspace)
│ │ │ ├──[✅]--(xcshareddata)
│ │ │ └──[✅]--(xcuserdata)
│ │ ├──[✅]--(iOS)
│ │ │ ├──[✅]--(Base.lproj)
│ │ │ └──[✅]--(Images.xcassets)
│ │ └──[✅]--(src)
│ │ └──[✅]--(js)
│ ├──[✅]--(articles-from-interwebs)
│ │ └──[✅]--(Jquery-tips-n-tricks_files)
│ └──[✅]--(node-web-scraper-master)
│ └──[✅]--(node-web-scraper-master)
├──[✅]--(4-test-prep)
│ └──[✅]--(Study-Guides)
├──[✅]--(5-websites)
│ ├──[✅]--(lambda-prep)
│ │ ├──[✅]--(_Resources)
│ │ │ └──[✅]--(Precourse-master)
│ │ │ ├──[✅]--(Lesson01-Git)
│ │ │ ├──[✅]--(Lesson02-HTML-CSS)
│ │ │ ├──[✅]--(Lesson03-CSS-Positioning)
│ │ │ ├──[✅]--(Lesson04-JS-I)
│ │ │ ├──[✅]--(Lesson05-JS-II)
│ │ │ ├──[✅]--(Lesson06-JS-III)
│ │ │ ├──[✅]--(Lesson07-JS-IV)
│ │ │ ├──[✅]--(Lesson08-JS-V)
│ │ │ ├──[✅]--(Lesson09-JS-VI)
│ │ │ ├──[✅]--(Lesson10-JS-VII)
│ │ │ ├──[✅]--(Lesson11-JS-VIII)
│ │ │ ├──[✅]--(Lesson12-DOM)
│ │ │ └──[✅]--(Precourse-master)
│ │ ├──[✅]--(javascript-practice)
│ │ │ ├──[✅]--(-ALL-JS-Files)
│ │ │ ├──[✅]--(00_expressions_variables)
│ │ │ │ ├──[✅]--(exercises)
│ │ │ │ └──[✅]--(solutions)
│ │ │ ├──[✅]--(01_conditionals)
│ │ │ │ ├──[✅]--(exercises)
│ │ │ │ └──[✅]--(solutions)
│ │ │ ├──[✅]--(02_functions)
│ │ │ │ ├──[✅]--(exercises)
│ │ │ │ └──[✅]--(solutions)
│ │ │ ├──[✅]--(03_loops)
│ │ │ │ ├──[✅]--(exercises)
│ │ │ │ └──[✅]--(solutions)
│ │ │ ├──[✅]--(04_arrays)
│ │ │ │ ├──[✅]--(exercises)
│ │ │ │ └──[✅]--(solutions)
│ │ │ ├──[✅]--(05_nesting)
│ │ │ │ ├──[✅]--(exercises)
│ │ │ │ └──[✅]--(solutions)
│ │ │ ├──[✅]--(06_decomposition_pattern)
│ │ │ │ ├──[✅]--(A_decomposing_problems_exercise)
│ │ │ │ ├──[✅]--(B_decomposing_problems_exercise)
│ │ │ │ └──[✅]--(C_decomposing_problems_exercise)
│ │ │ ├──[✅]--(07_objects)
│ │ │ │ ├──[✅]--(A_objects_exercise)
│ │ │ │ ├──[✅]--(B_objects_exercise)
│ │ │ │ └──[✅]--(C_objects_exercise)
│ │ │ ├──[✅]--(08_✅gher_order_functions)
│ │ │ │ ├──[✅]--(A_native_callback_methods_exercise)
│ │ │ │ └──[✅]--(B_native_callback_methods_exercise)
│ │ │ └──[✅]--(simple-side-bar)
│ │ │ ├──[✅]--(css)
│ │ │ └──[✅]--(vendor)
│ │ ├──[✅]--(markdown)
│ │ └──[✅]--(readme)
│ │ └──[✅]--(README_files)
│ └──[✅]--(templates)
│ ├──[✅]--(css)
│ ├──[✅]--(doc)
│ ├──[✅]--(img)
│ └──[✅]--(js)
│ └──[✅]--(vendor)
├──[✅]--(6-about)
│ ├──[✅]--(Using Canvas 27a0cf2408124ad19a3802565bd24de6)
│ │ └──[✅]--(How are courses structured in Canvas How do I know 3dfccdd4ff5f462dacde3b358c627e60)
│ └──[✅]--(brits-codepens)
├──[✅]--(7-assets)
│ ├──[✅]--(AUDIO-VISUALIZER)
│ │ ├──[✅]--(Box2D)
│ │ │ ├──[✅]--(assets)
│ │ │ └──[✅]--(libs)
│ │ ├──[✅]--(Gary Ad)
│ │ │ ├──[✅]--(Baked)
│ │ │ │ └──[✅]--(sounds)
│ │ │ └──[✅]--(Raw)
│ │ ├──[✅]--(GaryPewPew)
│ │ │ ├──[✅]--(Animate)
│ │ │ ├──[✅]--(js)
│ │ │ └──[✅]--(sounds)
│ │ ├──[✅]--(MusicViz)
│ │ │ └──[✅]--(js)
│ │ ├──[✅]--(MusicViz2)
│ │ │ ├──[✅]--(js)
│ │ │ └──[✅]--(sounds)
│ │ ├──[✅]--(Performance)
│ │ │ ├──[✅]--(Context2DLog)
│ │ │ ├──[✅]--(FauxCanvas)
│ │ │ ├──[✅]--(Snowmark)
│ │ │ │ ├──[✅]--(css)
│ │ │ │ └──[✅]--(js)
│ │ │ ├──[✅]--(Zombie)
│ │ │ │ └──[✅]--(images)
│ │ │ └──[✅]--(framerate)
│ │ │ ├──[✅]--(assets)
│ │ │ └──[✅]--(js)
│ │ ├──[✅]--(Planetary Gary)
│ │ │ ├──[✅]--(Animate)
│ │ │ ├──[✅]--(assets)
│ │ │ │ ├──[✅]--(images)
│ │ │ │ └──[✅]--(sounds)
│ │ │ ├──[✅]--(js)
│ │ │ └──[✅]--(libs)
│ │ ├──[✅]--(js)
│ │ └──[✅]--(sounds)
│ ├──[✅]--(_IMAGES)
│ ├──[✅]--(fonts)
│ ├──[✅]--(footer)
│ ├──[✅]--(images)
│ ├──[✅]--(jquery)
│ │ ├──[✅]--(dist)
│ │ ├──[✅]--(external)
│ │ │ └──[✅]--(sizzle)
│ │ │ └──[✅]--(dist)
│ │ └──[✅]--(src)
│ │ ├──[✅]--(ajax)
│ │ │ └──[✅]--(var)
│ │ ├──[✅]--(attributes)
│ │ ├──[✅]--(core)
│ │ │ └──[✅]--(var)
│ │ ├──[✅]--(css)
│ │ │ └──[✅]--(var)
│ │ ├──[✅]--(data)
│ │ │ └──[✅]--(var)
│ │ ├──[✅]--(deferred)
│ │ ├──[✅]--(deprecated)
│ │ ├──[✅]--(effects)
│ │ ├──[✅]--(event)
│ │ ├──[✅]--(exports)
│ │ ├──[✅]--(manipulation)
│ │ │ └──[✅]--(var)
│ │ ├──[✅]--(queue)
│ │ ├──[✅]--(traversing)
│ │ │ └──[✅]--(var)
│ │ └──[✅]--(var)
│ ├──[✅]--(loadashes6)
│ │ └──[✅]--(lodash)
│ │ └──[✅]--(fp)
│ ├──[✅]--(might-delete)
│ │ └──[✅]--(_MARKDOWN)
│ ├──[✅]--(mout)
│ │ ├──[✅]--(array)
│ │ ├──[✅]--(collection)
│ │ ├──[✅]--(date)
│ │ │ └──[✅]--(i18n)
│ │ ├──[✅]--(doc)
│ │ ├──[✅]--(function)
│ │ ├──[✅]--(lang)
│ │ ├──[✅]--(math)
│ │ ├──[✅]--(number)
│ │ ├──[✅]--(object)
│ │ ├──[✅]--(queryString)
│ │ ├──[✅]--(random)
│ │ ├──[✅]--(src)
│ │ │ ├──[✅]--(array)
│ │ │ ├──[✅]--(collection)
│ │ │ ├──[✅]--(date)
│ │ │ │ └──[✅]--(i18n)
│ │ │ ├──[✅]--(function)
│ │ │ ├──[✅]--(lang)
│ │ │ ├──[✅]--(math)
│ │ │ ├──[✅]--(number)
│ │ │ ├──[✅]--(object)
│ │ │ ├──[✅]--(queryString)
│ │ │ ├──[✅]--(random)
│ │ │ ├──[✅]--(string)
│ │ │ └──[✅]--(time)
│ │ ├──[✅]--(string)
│ │ └──[✅]--(time)
│ ├──[✅]--(past-student-repos)
│ │ ├──[✅]--(DOM-II-master)
│ │ ├──[✅]--(Data-Structures-Notes-master)
│ │ │ ├──[✅]--(BST_and_Heaps)
│ │ │ ├──[✅]--(Doubly_Linked_List)
│ │ │ ├──[✅]--(Interview_Problems)
│ │ │ └──[✅]--(Linked_Lists)
│ │ ├──[✅]--(Data-Structures-and-Algorithms-master)
│ │ │ ├──[✅]--(assets)
│ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(algorithms)
│ │ │ ├──[✅]--(analysis-of-algorithms)
│ │ │ └──[✅]--(data-structures)
│ │ ├──[✅]--(Data-Structures-master)
│ │ │ ├──[✅]--(avl_tree)
│ │ │ ├──[✅]--(binary_search_tree)
│ │ │ ├──[✅]--(doubly_linked_list)
│ │ │ ├──[✅]--(heap)
│ │ │ ├──[✅]--(javascript)
│ │ │ │ └──[✅]--(tests)
│ │ │ ├──[✅]--(lru_cache)
│ │ │ ├──[✅]--(python)
│ │ │ │ ├──[✅]--(binary_search_tree)
│ │ │ │ ├──[✅]--(doubly_linked_list)
│ │ │ │ ├──[✅]--(heap)
│ │ │ │ ├──[✅]--(linked_list)
│ │ │ │ └──[✅]--(queue)
│ │ │ └──[✅]--(queue)
│ │ ├──[✅]--(Graphs-Notes-master)
│ │ │ ├──[✅]--(img)
│ │ │ ├──[✅]--(lecture1)
│ │ │ ├──[✅]--(lecture2)
│ │ │ ├──[✅]--(lecture3)
│ │ │ └──[✅]--(lecture4)
│ │ ├──[✅]--(Graphs-master)
│ │ │ ├──[✅]--(javascript)
│ │ │ │ ├──[✅]--(guided-demo)
│ │ │ │ ├──[✅]--(objectives)
│ │ │ │ └──[✅]--(projects)
│ │ │ ├──[✅]--(objectives)
│ │ │ │ ├──[✅]--(breadth-first-search)
│ │ │ │ ├──[✅]--(connected-components)
│ │ │ │ ├──[✅]--(depth-first-search)
│ │ │ │ ├──[✅]--(graph-intro)
│ │ │ │ ├──[✅]--(graph-representations)
│ │ │ │ └──[✅]--(randomness)
│ │ │ ├──[✅]--(projects)
│ │ │ │ ├──[✅]--(adventure)
│ │ │ │ ├──[✅]--(ancestor)
│ │ │ │ ├──[✅]--(graph)
│ │ │ │ └──[✅]--(social)
│ │ │ └──[✅]--(python)
│ │ │ ├──[✅]--(guided-demo)
│ │ │ └──[✅]--(projects)
│ │ ├──[✅]--(HTTP-AJAX-II-master)
│ │ │ ├──[✅]--(app)
│ │ │ │ ├──[✅]--(public)
│ │ │ │ └──[✅]--(src)
│ │ │ └──[✅]--(server)
│ │ ├──[✅]--(HTTP-AJAX-master)
│ │ │ └──[✅]--(friends)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ ├──[✅]--(Hash-Tables-Notes-master)
│ │ ├──[✅]--(Intro-Python-master)
│ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(day-1-toy)
│ │ │ ├──[✅]--(days-2-4-adv)
│ │ │ ├──[✅]--(mini-challenge)
│ │ │ └──[✅]--(python-example)
│ │ ├──[✅]--(Intro-to-C-master)
│ │ │ ├──[✅]--(first)
│ │ │ ├──[✅]--(fizzbuzz)
│ │ │ │ └──[✅]--(tests)
│ │ │ ├──[✅]--(hangman)
│ │ │ ├──[✅]--(malloc)
│ │ │ │ └──[✅]--(tests)
│ │ │ ├──[✅]--(pointers)
│ │ │ │ └──[✅]--(tests)
│ │ │ ├──[✅]--(queue)
│ │ │ │ └──[✅]--(tests)
│ │ │ ├──[✅]--(quicksort)
│ │ │ │ └──[✅]--(tests)
│ │ │ ├──[✅]--(strings)
│ │ │ │ └──[✅]--(tests)
│ │ │ ├──[✅]--(structs)
│ │ │ │ └──[✅]--(tests)
│ │ │ └──[✅]--(utils)
│ │ ├──[✅]--(JavaScript-I-Guided-master)
│ │ ├──[✅]--(Lambda-School-Instruction-Notes-master)
│ │ │ ├──[✅]--(10. Data Persistence in Web APIs)
│ │ │ │ └──[✅]--(assets)
│ │ │ ├──[✅]--(11. Authentication)
│ │ │ └──[✅]--(12. Testing)
│ │ ├──[✅]--(Lambda-School-master)
│ │ │ ├──[✅]--(Week 1)
│ │ │ │ ├──[✅]--(Sprint-Challenge User-Interface)
│ │ │ │ ├──[✅]--(User Interface I Project 2 - Sweet Eats Bakery)
│ │ │ │ ├──[✅]--(User Interface I HTML Markup)
│ │ │ │ ├──[✅]--(User Interface III Services Page)
│ │ │ │ └──[✅]--(User-Interface II Innovation)
│ │ │ ├──[✅]--(Week 10)
│ │ │ │ ├──[✅]--(Car-Sales)
│ │ │ │ ├──[✅]--(React-Redux-App)
│ │ │ │ ├──[✅]--(Sprint-Challenge-State-Management-Smurfs)
│ │ │ │ ├──[✅]--(react-shopping-cart)
│ │ │ │ └──[✅]--(reducer-todo)
│ │ │ ├──[✅]--(Week 11)
│ │ │ │ ├──[✅]--(Auth-Friends)
│ │ │ │ ├──[✅]--(HTTP-Movies-Assignment)
│ │ │ │ ├──[✅]--(react-bubbles)
│ │ │ │ └──[✅]--(webtesting-iii-challenge)
│ │ │ ├──[✅]--(Week 12 - FoodieFun)
│ │ │ ├──[✅]--(Week 13)
│ │ │ │ ├──[✅]--(node-api1-project)
│ │ │ │ ├──[✅]--(webapi-challenge-sprint)
│ │ │ │ ├──[✅]--(webapi-ii-challenge)
│ │ │ │ └──[✅]--(webapi-iii-challenge)
│ │ │ ├──[✅]--(Week 14)
│ │ │ │ ├──[✅]--(node-db-challenge-sprint)
│ │ │ │ ├──[✅]--(node-db3-challenge)
│ │ │ │ ├──[✅]--(node-db4)
│ │ │ │ ├──[✅]--(webdb-i-challenge)
│ │ │ │ └──[✅]--(webdb-ii-challenge)
│ │ │ ├──[✅]--(Week 15)
│ │ │ │ ├──[✅]--(Sprint-Challenge-Authentication)
│ │ │ │ ├──[✅]--(node-server-testing-challenge)
│ │ │ │ ├──[✅]--(webauth-i-challenge)
│ │ │ │ └──[✅]--(webauth-iii-challenge)
│ │ │ ├──[✅]--(Week 16 - Mentor Me)
│ │ │ ├──[✅]--(Week 17 - 25 Future Hope)
│ │ │ ├──[✅]--(Week 2)
│ │ │ │ ├──[✅]--(Digital Resume)
│ │ │ │ ├──[✅]--(Fun Bus)
│ │ │ │ ├──[✅]--(Portfolio)
│ │ │ │ ├──[✅]--(Resposnive-Web-Design)
│ │ │ │ └──[✅]--(Sprint Challenge)
│ │ │ ├──[✅]--(Week 3)
│ │ │ │ ├──[✅]--(JavaScript-I)
│ │ │ │ ├──[✅]--(JavaScript-II)
│ │ │ │ ├──[✅]--(JavaScript-III)
│ │ │ │ ├──[✅]--(JavaScript-IV)
│ │ │ │ └──[✅]--(Sprint-Challenge)
│ │ │ ├──[✅]--(Week 4 - Local Voter Guide)
│ │ │ │ ├──[✅]--(css)
│ │ │ │ ├──[✅]--(images)
│ │ │ │ └──[✅]--(less)
│ │ │ ├──[✅]--(Week 5)
│ │ │ │ ├──[✅]--(DOM-I)
│ │ │ │ ├──[✅]--(DOM-II)
│ │ │ │ ├──[✅]--(Newsfeed-Components)
│ │ │ │ ├──[✅]--(Sprint-Challenge-Applied-Javascript)
│ │ │ │ └──[✅]--(github-usercard)
│ │ │ ├──[✅]--(Week 6)
│ │ │ │ ├──[✅]--(Sprint-Challenge-React-Wars)
│ │ │ │ ├──[✅]--(lambda-calculator)
│ │ │ │ ├──[✅]--(nasa-photo-of-the-day)
│ │ │ │ └──[✅]--(react-american-football-scoreboard)
│ │ │ ├──[✅]--(Week 7)
│ │ │ │ ├──[✅]--(React-Router-Basic-Nav)
│ │ │ │ ├──[✅]--(React-Router-Movies)
│ │ │ │ ├──[✅]--(Sprint-Challenge-Single-Page-Apps)
│ │ │ │ ├──[✅]--(User-Onboarding)
│ │ │ │ └──[✅]--(team-builder)
│ │ │ ├──[✅]--(Week 8 - Water My Plants)
│ │ │ └──[✅]--(Week 9)
│ │ │ ├──[✅]--(Github-User-Card)
│ │ │ ├──[✅]--(React-Todo)
│ │ │ ├──[✅]--(Sprint-Challenge-Advanced-React)
│ │ │ └──[✅]--(dark-mode)
│ │ ├──[✅]--(LambdaSchool-master)
│ │ │ ├──[✅]--(31d1)
│ │ │ ├──[✅]--(Administration)
│ │ │ │ ├──[✅]--(certs)
│ │ │ │ ├──[✅]--(marketing)
│ │ │ │ ├──[✅]--(studying)
│ │ │ │ └──[✅]--(zoom)
│ │ │ ├──[✅]--(JavaScript30)
│ │ │ │ ├──[✅]--(01)
│ │ │ │ ├──[✅]--(02)
│ │ │ │ ├──[✅]--(03)
│ │ │ │ ├──[✅]--(04)
│ │ │ │ ├──[✅]--(05)
│ │ │ │ ├──[✅]--(06)
│ │ │ │ ├──[✅]--(07)
│ │ │ │ ├──[✅]--(08)
│ │ │ │ ├──[✅]--(09)
│ │ │ │ ├──[✅]--(10)
│ │ │ │ ├──[✅]--(11)
│ │ │ │ ├──[✅]--(12)
│ │ │ │ ├──[✅]--(13)
│ │ │ │ ├──[✅]--(14)
│ │ │ │ ├──[✅]--(15)
│ │ │ │ ├──[✅]--(16)
│ │ │ │ ├──[✅]--(17)
│ │ │ │ ├──[✅]--(18)
│ │ │ │ ├──[✅]--(19)
│ │ │ │ ├──[✅]--(20)
│ │ │ │ ├──[✅]--(21)
│ │ │ │ ├──[✅]--(22)
│ │ │ │ ├──[✅]--(23)
│ │ │ │ ├──[✅]--(24)
│ │ │ │ ├──[✅]--(25)
│ │ │ │ ├──[✅]--(26)
│ │ │ │ ├──[✅]--(27)
│ │ │ │ ├──[✅]--(28)
│ │ │ │ ├──[✅]--(29)
│ │ │ │ └──[✅]--(30)
│ │ │ ├──[✅]--(aa-score)
│ │ │ │ ├──[✅]--(public)
│ │ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(bw1-tl)
│ │ │ │ ├──[✅]--(admin)
│ │ │ │ ├──[✅]--(api)
│ │ │ │ ├──[✅]--(auth)
│ │ │ │ ├──[✅]--(database)
│ │ │ │ ├──[✅]--(middleware)
│ │ │ │ ├──[✅]--(todos)
│ │ │ │ └──[✅]--(volunteer)
│ │ │ ├──[✅]--(css)
│ │ │ ├──[✅]--(labs)
│ │ │ │ ├──[✅]--(last journal entry)
│ │ │ │ └──[✅]--(video-to-next-group)
│ │ │ ├──[✅]--(m1)
│ │ │ │ ├──[✅]--(11b1)
│ │ │ │ ├──[✅]--(11c1)
│ │ │ │ ├──[✅]--(11d1)
│ │ │ │ ├──[✅]--(12a1)
│ │ │ │ ├──[✅]--(12b1)
│ │ │ │ ├──[✅]--(12c1)
│ │ │ │ ├──[✅]--(12d1)
│ │ │ │ ├──[✅]--(13a1)
│ │ │ │ ├──[✅]--(13b1)
│ │ │ │ ├──[✅]--(13c1)
│ │ │ │ ├──[✅]--(13d1)
│ │ │ │ └──[✅]--(13e1)
│ │ │ ├──[✅]--(m2)
│ │ │ │ ├──[✅]--(21a1)
│ │ │ │ ├──[✅]--(21b1)
│ │ │ │ ├──[✅]--(21c1)
│ │ │ │ ├──[✅]--(21d1)
│ │ │ │ ├──[✅]--(21e1)
│ │ │ │ ├──[✅]--(22a1)
│ │ │ │ ├──[✅]--(22b1)
│ │ │ │ ├──[✅]--(22c1)
│ │ │ │ ├──[✅]--(22e1)
│ │ │ │ ├──[✅]--(23a1)
│ │ │ │ ├──[✅]--(23a2)
│ │ │ │ ├──[✅]--(23b1)
│ │ │ │ ├──[✅]--(23c1)
│ │ │ │ ├──[✅]--(23d1)
│ │ │ │ ├──[✅]--(23d2)
│ │ │ │ ├──[✅]--(23e1)
│ │ │ │ └──[✅]--(24a1)
│ │ │ ├──[✅]--(m3)
│ │ │ │ ├──[✅]--(31a1)
│ │ │ │ ├──[✅]--(31a2)
│ │ │ │ ├──[✅]--(31b1)
│ │ │ │ ├──[✅]--(31c1)
│ │ │ │ ├──[✅]--(31d1)
│ │ │ │ ├──[✅]--(31e1)
│ │ │ │ ├──[✅]--(32a1)
│ │ │ │ ├──[✅]--(32b1)
│ │ │ │ ├──[✅]--(32c1)
│ │ │ │ ├──[✅]--(32d1)
│ │ │ │ ├──[✅]--(32e1)
│ │ │ │ ├──[✅]--(33a1)
│ │ │ │ ├──[✅]--(33b1)
│ │ │ │ ├──[✅]--(33d1)
│ │ │ │ └──[✅]--(33e1)
│ │ │ ├──[✅]--(m4)
│ │ │ │ ├──[✅]--(41a1)
│ │ │ │ ├──[✅]--(41a2)
│ │ │ │ ├──[✅]--(41b1)
│ │ │ │ ├──[✅]--(41b2)
│ │ │ │ ├──[✅]--(41c1)
│ │ │ │ ├──[✅]--(41c2)
│ │ │ │ ├──[✅]--(41d1)
│ │ │ │ ├──[✅]--(41e1)
│ │ │ │ ├──[✅]--(41e1app)
│ │ │ │ ├──[✅]--(42a1)
│ │ │ │ ├──[✅]--(42a2)
│ │ │ │ ├──[✅]--(42b1)
│ │ │ │ ├──[✅]--(42b2)
│ │ │ │ ├──[✅]--(42c1)
│ │ │ │ ├──[✅]--(42c2)
│ │ │ │ ├──[✅]--(42d1)
│ │ │ │ ├──[✅]--(42d2)
│ │ │ │ ├──[✅]--(42e1)
│ │ │ │ ├──[✅]--(43a1)
│ │ │ │ ├──[✅]--(43a2)
│ │ │ │ ├──[✅]--(43b1)
│ │ │ │ ├──[✅]--(43b2)
│ │ │ │ ├──[✅]--(43c1)
│ │ │ │ ├──[✅]--(43c2)
│ │ │ │ ├──[✅]--(43d1)
│ │ │ │ ├──[✅]--(43d2)
│ │ │ │ └──[✅]--(43e1)
│ │ │ ├──[✅]--(m5)
│ │ │ │ ├──[✅]--(51a1)
│ │ │ │ ├──[✅]--(51b1)
│ │ │ │ ├──[✅]--(51c1)
│ │ │ │ ├──[✅]--(51d1)
│ │ │ │ ├──[✅]--(51d2)
│ │ │ │ ├──[✅]--(51e1)
│ │ │ │ ├──[✅]--(52b1)
│ │ │ │ ├──[✅]--(52c1)
│ │ │ │ ├──[✅]--(52c2)
│ │ │ │ ├──[✅]--(52d1)
│ │ │ │ ├──[✅]--(53a1)
│ │ │ │ ├──[✅]--(53b1)
│ │ │ │ ├──[✅]--(53c1)
│ │ │ │ └──[✅]--(53d1)
│ │ │ ├──[✅]--(m6)
│ │ │ │ ├──[✅]--(61a1)
│ │ │ │ ├──[✅]--(61b1)
│ │ │ │ ├──[✅]--(61c1)
│ │ │ │ ├──[✅]--(62a1)
│ │ │ │ ├──[✅]--(62b1)
│ │ │ │ ├──[✅]--(63a1)
│ │ │ │ ├──[✅]--(63b1)
│ │ │ │ ├──[✅]--(63c1)
│ │ │ │ └──[✅]--(63d1)
│ │ │ ├──[✅]--(m7)
│ │ │ │ ├──[✅]--(71a1)
│ │ │ │ ├──[✅]--(71e1)
│ │ │ │ ├──[✅]--(72a1)
│ │ │ │ ├──[✅]--(73a1)
│ │ │ │ └──[✅]--(74a1)
│ │ │ ├──[✅]--(src)
│ │ │ │ ├──[✅]--(iterative_sorting)
│ │ │ │ └──[✅]--(searc✅ng)
│ │ │ ├──[✅]--(summary)
│ │ │ │ ├──[✅]--(Node Express Knex)
│ │ │ │ ├──[✅]--(certifications)
│ │ │ │ ├──[✅]--(cobol)
│ │ │ │ ├──[✅]--(complete)
│ │ │ │ ├──[✅]--(general)
│ │ │ │ ├──[✅]--(interviewing)
│ │ │ │ ├──[✅]--(testing)
│ │ │ │ └──[✅]--(typescript)
│ │ │ └──[✅]--(tlbw)
│ │ │ └──[✅]--(client)
│ │ ├──[✅]--(Mongo-I-master)
│ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(controllers)
│ │ │ ├──[✅]--(models)
│ │ │ └──[✅]--(routes)
│ │ ├──[✅]--(Node-Blog-master)
│ │ │ ├──[✅]--(api)
│ │ │ │ ├──[✅]--(post)
│ │ │ │ ├──[✅]--(tag)
│ │ │ │ └──[✅]--(user)
│ │ │ ├──[✅]--(config)
│ │ │ ├──[✅]--(data)
│ │ │ │ ├──[✅]--(helpers)
│ │ │ │ ├──[✅]--(migrations)
│ │ │ │ └──[✅]--(seeds)
│ │ │ └──[✅]--(routers)
│ │ ├──[✅]--(Precourse-master)
│ │ │ ├──[✅]--(Lesson1-Git)
│ │ │ ├──[✅]--(Lesson10-JS-VII)
│ │ │ │ └──[✅]--(homework)
│ │ │ ├──[✅]--(Lesson11-JS-VIII)
│ │ │ │ └──[✅]--(homework)
│ │ │ ├──[✅]--(Lesson12-DOM)
│ │ │ │ └──[✅]--(homework)
│ │ │ ├──[✅]--(Lesson2-HTML-CSS)
│ │ │ │ └──[✅]--(homework)
│ │ │ ├──[✅]--(Lesson3-CSS-Positioning)
│ │ │ │ └──[✅]--(homework)
│ │ │ ├──[✅]--(Lesson4-JS-I)
│ │ │ │ └──[✅]--(homework)
│ │ │ ├──[✅]--(Lesson5-JS-II)
│ │ │ │ └──[✅]--(homework)
│ │ │ ├──[✅]--(Lesson6-JS-III)
│ │ │ │ └──[✅]--(homework)
│ │ │ ├──[✅]--(Lesson7-JS-IV)
│ │ │ │ └──[✅]--(homework)
│ │ │ ├──[✅]--(Lesson8-JS-V)
│ │ │ │ └──[✅]--(homework)
│ │ │ └──[✅]--(Lesson9-JS-VI)
│ │ │ └──[✅]--(homework)
│ │ ├──[✅]--(Python-II-Notes-master)
│ │ │ └──[✅]--(src)
│ │ ├──[✅]--(Python-master)
│ │ │ ├──[✅]--(arithmetic_analysis)
│ │ │ │ └──[✅]--(image_data)
│ │ │ ├──[✅]--(backtracking)
│ │ │ ├──[✅]--(bit_manipulation)
│ │ │ ├──[✅]--(blockchain)
│ │ │ ├──[✅]--(boolean_algebra)
│ │ │ ├──[✅]--(cellular_automata)
│ │ │ ├──[✅]--(ciphers)
│ │ │ ├──[✅]--(compression)
│ │ │ │ └──[✅]--(image_data)
│ │ │ ├──[✅]--(computer_vision)
│ │ │ ├──[✅]--(conversions)
│ │ │ ├──[✅]--(data_structures)
│ │ │ │ ├──[✅]--(binary_tree)
│ │ │ │ ├──[✅]--(disjoint_set)
│ │ │ │ ├──[✅]--(has✅ng)
│ │ │ │ ├──[✅]--(heap)
│ │ │ │ ├──[✅]--(linked_list)
│ │ │ │ ├──[✅]--(queue)
│ │ │ │ ├──[✅]--(stacks)
│ │ │ │ └──[✅]--(trie)
│ │ │ ├──[✅]--(digital_image_processing)
│ │ │ │ ├──[✅]--(dithering)
│ │ │ │ ├──[✅]--(edge_detection)
│ │ │ │ ├──[✅]--(filters)
│ │ │ │ ├──[✅]--(✅stogram_equalization)
│ │ │ │ ├──[✅]--(image_data)
│ │ │ │ ├──[✅]--(resize)
│ │ │ │ └──[✅]--(rotation)
│ │ │ ├──[✅]--(divide_and_conquer)
│ │ │ ├──[✅]--(dynamic_programming)
│ │ │ ├──[✅]--(electronics)
│ │ │ ├──[✅]--(file_transfer)
│ │ │ │ └──[✅]--(tests)
│ │ │ ├──[✅]--(fuzzy_logic)
│ │ │ ├──[✅]--(genetic_algorithm)
│ │ │ ├──[✅]--(geodesy)
│ │ │ ├──[✅]--(grap✅cs)
│ │ │ ├──[✅]--(graphs)
│ │ │ │ └──[✅]--(tests)
│ │ │ ├──[✅]--(hashes)
│ │ │ ├──[✅]--(knapsack)
│ │ │ │ └──[✅]--(tests)
│ │ │ ├──[✅]--(linear_algebra)
│ │ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(mac✅ne_learning)
│ │ │ │ ├──[✅]--(forecasting)
│ │ │ │ └──[✅]--(lstm)
│ │ │ ├──[✅]--(maths)
│ │ │ │ ├──[✅]--(images)
│ │ │ │ └──[✅]--(series)
│ │ │ ├──[✅]--(matrix)
│ │ │ │ └──[✅]--(tests)
│ │ │ ├──[✅]--(networking_flow)
│ │ │ ├──[✅]--(neural_network)
│ │ │ ├──[✅]--(other)
│ │ │ ├──[✅]--(project_euler)
│ │ │ │ ├──[✅]--(problem_001)
│ │ │ │ ├──[✅]--(problem_002)
│ │ │ │ ├──[✅]--(problem_003)
│ │ │ │ ├──[✅]--(problem_004)
│ │ │ │ ├──[✅]--(problem_005)
│ │ │ │ ├──[✅]--(problem_006)
│ │ │ │ ├──[✅]--(problem_007)
│ │ │ │ ├──[✅]--(problem_008)
│ │ │ │ ├──[✅]--(problem_009)
│ │ │ │ ├──[✅]--(problem_010)
│ │ │ │ ├──[✅]--(problem_011)
│ │ │ │ ├──[✅]--(problem_012)
│ │ │ │ ├──[✅]--(problem_013)
│ │ │ │ ├──[✅]--(problem_014)
│ │ │ │ ├──[✅]--(problem_015)
│ │ │ │ ├──[✅]--(problem_016)
│ │ │ │ ├──[✅]--(problem_017)
│ │ │ │ ├──[✅]--(problem_018)
│ │ │ │ ├──[✅]--(problem_019)
│ │ │ │ ├──[✅]--(problem_020)
│ │ │ │ ├──[✅]--(problem_021)
│ │ │ │ ├──[✅]--(problem_022)
│ │ │ │ ├──[✅]--(problem_023)
│ │ │ │ ├──[✅]--(problem_024)
│ │ │ │ ├──[✅]--(problem_025)
│ │ │ │ ├──[✅]--(problem_026)
│ │ │ │ ├──[✅]--(problem_027)
│ │ │ │ ├──[✅]--(problem_028)
│ │ │ │ ├──[✅]--(problem_029)
│ │ │ │ ├──[✅]--(problem_030)
│ │ │ │ ├──[✅]--(problem_031)
│ │ │ │ ├──[✅]--(problem_032)
│ │ │ │ ├──[✅]--(problem_033)
│ │ │ │ ├──[✅]--(problem_034)
│ │ │ │ ├──[✅]--(problem_035)
│ │ │ │ ├──[✅]--(problem_036)
│ │ │ │ ├──[✅]--(problem_037)
│ │ │ │ ├──[✅]--(problem_038)
│ │ │ │ ├──[✅]--(problem_039)
│ │ │ │ ├──[✅]--(problem_040)
│ │ │ │ ├──[✅]--(problem_041)
│ │ │ │ ├──[✅]--(problem_042)
│ │ │ │ ├──[✅]--(problem_043)
│ │ │ │ ├──[✅]--(problem_044)
│ │ │ │ ├──[✅]--(problem_045)
│ │ │ │ ├──[✅]--(problem_046)
│ │ │ │ ├──[✅]--(problem_047)
│ │ │ │ ├──[✅]--(problem_048)
│ │ │ │ ├──[✅]--(problem_049)
│ │ │ │ ├──[✅]--(problem_050)
│ │ │ │ ├──[✅]--(problem_051)
│ │ │ │ ├──[✅]--(problem_052)
│ │ │ │ ├──[✅]--(problem_053)
│ │ │ │ ├──[✅]--(problem_054)
│ │ │ │ ├──[✅]--(problem_055)
│ │ │ │ ├──[✅]--(problem_056)
│ │ │ │ ├──[✅]--(problem_057)
│ │ │ │ ├──[✅]--(problem_058)
│ │ │ │ ├──[✅]--(problem_059)
│ │ │ │ ├──[✅]--(problem_062)
│ │ │ │ ├──[✅]--(problem_063)
│ │ │ │ ├──[✅]--(problem_064)
│ │ │ │ ├──[✅]--(problem_065)
│ │ │ │ ├──[✅]--(problem_067)
│ │ │ │ ├──[✅]--(problem_069)
│ │ │ │ ├──[✅]--(problem_070)
│ │ │ │ ├──[✅]--(problem_071)
│ │ │ │ ├──[✅]--(problem_072)
│ │ │ │ ├──[✅]--(problem_074)
│ │ │ │ ├──[✅]--(problem_075)
│ │ │ │ ├──[✅]--(problem_076)
│ │ │ │ ├──[✅]--(problem_077)
│ │ │ │ ├──[✅]--(problem_080)
│ │ │ │ ├──[✅]--(problem_081)
│ │ │ │ ├──[✅]--(problem_085)
│ │ │ │ ├──[✅]--(problem_086)
│ │ │ │ ├──[✅]--(problem_087)
│ │ │ │ ├──[✅]--(problem_089)
│ │ │ │ ├──[✅]--(problem_091)
│ │ │ │ ├──[✅]--(problem_097)
│ │ │ │ ├──[✅]--(problem_099)
│ │ │ │ ├──[✅]--(problem_101)
│ │ │ │ ├──[✅]--(problem_102)
│ │ │ │ ├──[✅]--(problem_107)
│ │ │ │ ├──[✅]--(problem_112)
│ │ │ │ ├──[✅]--(problem_113)
│ │ │ │ ├──[✅]--(problem_119)
│ │ │ │ ├──[✅]--(problem_120)
│ │ │ │ ├──[✅]--(problem_123)
│ │ │ │ ├──[✅]--(problem_125)
│ │ │ │ ├──[✅]--(problem_129)
│ │ │ │ ├──[✅]--(problem_135)
│ │ │ │ ├──[✅]--(problem_173)
│ │ │ │ ├──[✅]--(problem_174)
│ │ │ │ ├──[✅]--(problem_180)
│ │ │ │ ├──[✅]--(problem_188)
│ │ │ │ ├──[✅]--(problem_191)
│ │ │ │ ├──[✅]--(problem_203)
│ │ │ │ ├──[✅]--(problem_206)
│ │ │ │ ├──[✅]--(problem_207)
│ │ │ │ ├──[✅]--(problem_234)
│ │ │ │ ├──[✅]--(problem_301)
│ │ │ │ └──[✅]--(problem_551)
│ │ │ ├──[✅]--(quantum)
│ │ │ ├──[✅]--(scheduling)
│ │ │ ├──[✅]--(scripts)
│ │ │ ├──[✅]--(searches)
│ │ │ ├──[✅]--(sorts)
│ │ │ ├──[✅]--(strings)
│ │ │ ├──[✅]--(traversals)
│ │ │ └──[✅]--(web_programming)
│ │ ├──[✅]--(React-Todo-master)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ │ └──[✅]--(components)
│ │ ├──[✅]--(Relational-Databases-master)
│ │ │ └──[✅]--(solutions)
│ │ ├──[✅]--(Server-Testing-master)
│ │ ├──[✅]--(Sorting-master)
│ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(iterative_sorting)
│ │ │ ├──[✅]--(recursive_sorting)
│ │ │ └──[✅]--(searc✅ng)
│ │ ├──[✅]--(Sprint-Challenge--Graphs-master)
│ │ │ ├──[✅]--(img)
│ │ │ └──[✅]--(src)
│ │ ├──[✅]--(Sprint-Challenge--JavaScript-master)
│ │ │ ├──[✅]--(challenges)
│ │ │ ├──[✅]--(src)
│ │ │ └──[✅]--(tests)
│ │ ├──[✅]--(Sprint-Challenge-Node-Express-master)
│ │ │ ├──[✅]--(data)
│ │ │ │ ├──[✅]--(helpers)
│ │ │ │ ├──[✅]--(migrations)
│ │ │ │ └──[✅]--(seeds)
│ │ │ ├──[✅]--(express)
│ │ │ │ ├──[✅]--(public)
│ │ │ │ └──[✅]--(src)
│ │ │ └──[✅]--(routes)
│ │ ├──[✅]--(Sprint-Challenge-RDBMS-master)
│ │ │ ├──[✅]--(data)
│ │ │ │ ├──[✅]--(migrations)
│ │ │ │ └──[✅]--(seeds)
│ │ │ └──[✅]--(routes)
│ │ ├──[✅]--(Static-Pages-master)
│ │ ├──[✅]--(W✅teboard-Pairing-master)
│ │ │ ├──[✅]--(BSTFromArray)
│ │ │ ├──[✅]--(BalancedBinaryTree)
│ │ │ ├──[✅]--(BalancedBrackets)
│ │ │ ├──[✅]--(BitcoinTrading)
│ │ │ ├──[✅]--(ClimbingStairs)
│ │ │ ├──[✅]--(CountingVotes)
│ │ │ ├──[✅]--(DepthFirstSearch)
│ │ │ ├──[✅]--(FindRotationPoint)
│ │ │ ├──[✅]--(IntegerPairs)
│ │ │ ├──[✅]--(KthToLastNode)
│ │ │ ├──[✅]--(LargestContiguousSum)
│ │ │ ├──[✅]--(LargestStack)
│ │ │ ├──[✅]--(LinkedListPalindrome)
│ │ │ ├──[✅]--(MatrixSpiralCopy)
│ │ │ ├──[✅]--(MergingTwoPackages)
│ │ │ ├──[✅]--(MinHeap)
│ │ │ ├──[✅]--(MinJumps)
│ │ │ ├──[✅]--(NthFibonacci)
│ │ │ ├──[✅]--(OneWayFlight)
│ │ │ ├──[✅]--(ProductOfAllOtherNumbers)
│ │ │ ├──[✅]--(QueueWithTwoStacks)
│ │ │ ├──[✅]--(ReverseLinkedList)
│ │ │ ├──[✅]--(RingBuffer)
│ │ │ ├──[✅]--(RobotPaths)
│ │ │ ├──[✅]--(RockPaperScissors)
│ │ │ ├──[✅]--(RotateImage)
│ │ │ ├──[✅]--(SetOfStacks)
│ │ │ ├──[✅]--(SortStack)
│ │ │ ├──[✅]--(SortTopScores)
│ │ │ ├──[✅]--(TemperatureTracker)
│ │ │ ├──[✅]--(TimePlanner)
│ │ │ └──[✅]--(ValidateBinaryTree)
│ │ ├──[✅]--(_DS-Python)
│ │ │ ├──[✅]--(Algorithms-I-Notes-master)
│ │ │ │ └──[✅]--(practice_algs)
│ │ │ └──[✅]--(Algorithms-master)
│ │ │ ├──[✅]--(climbing_stairs)
│ │ │ ├──[✅]--(knapsack)
│ │ │ ├──[✅]--(making_change)
│ │ │ ├──[✅]--(recipe_batches)
│ │ │ ├──[✅]--(rock_paper_scissors)
│ │ │ └──[✅]--(stock_prices)
│ │ ├──[✅]--(_Individual-Projects)
│ │ │ ├──[✅]--(Advanced-Form-Management-Guided-master)
│ │ │ │ └──[✅]--(app)
│ │ │ ├──[✅]--(Bootstrap-I-master)
│ │ │ │ ├──[✅]--(_example-resume)
│ │ │ │ ├──[✅]--(css)
│ │ │ │ ├──[✅]--(img)
│ │ │ │ ├──[✅]--(js)
│ │ │ │ └──[✅]--(less)
│ │ │ ├──[✅]--(Components-BEM-master)
│ │ │ │ ├──[✅]--(components)
│ │ │ │ └──[✅]--(markups)
│ │ │ ├──[✅]--(Components-Constructors-master)
│ │ │ │ ├──[✅]--(components)
│ │ │ │ └──[✅]--(markups)
│ │ │ ├──[✅]--(Computer-Arc✅tecture-Notes-master)
│ │ │ │ ├──[✅]--(lectureI)
│ │ │ │ ├──[✅]--(lectureII)
│ │ │ │ ├──[✅]--(lectureIII)
│ │ │ │ └──[✅]--(lectureIV)
│ │ │ ├──[✅]--(Course_and_Book_Notes-master)
│ │ │ │ ├──[✅]--(Algorithm Design Manual)
│ │ │ │ ├──[✅]--(Computer_Science_Distilled)
│ │ │ │ ├──[✅]--(Lambda_Notes)
│ │ │ │ ├──[✅]--(Programming_Foundations)
│ │ │ │ ├──[✅]--(The_C_Programming_Language)
│ │ │ │ ├──[✅]--(T✅nk Like a Programmer)
│ │ │ │ └──[✅]--(YoutubeVideos)
│ │ │ ├──[✅]--(JavaScript-I-master)
│ │ │ │ └──[✅]--(assignments)
│ │ │ ├──[✅]--(JavaScript-II-master)
│ │ │ │ └──[✅]--(assignments)
│ │ │ ├──[✅]--(JavaScript-III-master)
│ │ │ │ └──[✅]--(assignments)
│ │ │ └──[✅]--(JavaScript-IV-master)
│ │ │ └──[✅]--(assignments)
│ │ ├──[✅]--(_MOST-USEFUL)
│ │ │ └──[✅]--(Boilerplate-master)
│ │ │ ├──[✅]--(Apollo)
│ │ │ ├──[✅]--(Express-MongoDB)
│ │ │ ├──[✅]--(React-Redux)
│ │ │ └──[✅]--(TypeGraphQL)
│ │ ├──[✅]--(_misc)
│ │ │ └──[✅]--(Blockchain-Notes-master)
│ │ │ └──[✅]--(communication_gp)
│ │ ├──[✅]--(data_struct_and_algo-master)
│ │ │ └──[✅]--(logs)
│ │ ├──[✅]--(dev-portfolio-master)
│ │ │ ├──[✅]--(public)
│ │ │ ├──[✅]--(src)
│ │ │ │ ├──[✅]--(components)
│ │ │ │ ├──[✅]--(global-scss)
│ │ │ │ └──[✅]--(views)
│ │ │ └──[✅]--(tests_setup)
│ │ │ └──[✅]--(__mocks__)
│ │ ├──[✅]--(feelscollective-master)
│ │ │ ├──[✅]--(css)
│ │ │ ├──[✅]--(fonts)
│ │ │ │ ├──[✅]--(icomoon)
│ │ │ │ └──[✅]--(open-iconic)
│ │ │ ├──[✅]--(images)
│ │ │ ├──[✅]--(js)
│ │ │ └──[✅]--(scss)
│ │ ├──[✅]--(five-master)
│ │ │ └──[✅]--(FiveFeed)
│ │ │ ├──[✅]--(lambda)
│ │ │ ├──[✅]--(lambda-src)
│ │ │ └──[✅]--(src)
│ │ ├──[✅]--(homepage-master)
│ │ │ ├──[✅]--(css)
│ │ │ ├──[✅]--(fonts)
│ │ │ ├──[✅]--(images)
│ │ │ └──[✅]--(js)
│ │ │ ├──[✅]--(backstretch)
│ │ │ ├──[✅]--(bootstrap)
│ │ │ ├──[✅]--(easing)
│ │ │ ├──[✅]--(magnific-popup)
│ │ │ ├──[✅]--(owl-carousel)
│ │ │ ├──[✅]--(uitotop)
│ │ │ └──[✅]--(wow)
│ │ ├──[✅]--(lambda-demo-project-master)
│ │ │ ├──[✅]--(api)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ ├──[✅]--(lambda-lecture-notes-main)
│ │ │ ├──[✅]--(3-1-advanced-react)
│ │ │ │ ├──[✅]--(images)
│ │ │ │ └──[✅]--(pdf)
│ │ │ ├──[✅]--(3-2-advanced-state-mangement)
│ │ │ │ └──[✅]--(images)
│ │ │ └──[✅]--(3-3-advanced-web-applications)
│ │ │ └──[✅]--(images)
│ │ ├──[✅]--(portfolio-main)
│ │ │ ├──[✅]--(components)
│ │ │ ├──[✅]--(pages)
│ │ │ ├──[✅]--(public)
│ │ │ │ └──[✅]--(static)
│ │ │ ├──[✅]--(scripts)
│ │ │ ├──[✅]--(styles)
│ │ │ └──[✅]--(utils)
│ │ ├──[✅]--(react-carousel-master)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ │ └──[✅]--(assets)
│ │ ├──[✅]--(react-design-patterns-and-best-practices-master)
│ │ │ ├──[✅]--(chapter-03)
│ │ │ │ └──[✅]--(reusable-components)
│ │ │ ├──[✅]--(chapter-04)
│ │ │ │ ├──[✅]--(container-presentational)
│ │ │ │ └──[✅]--(✅gher-order-components)
│ │ │ ├──[✅]--(chapter-05)
│ │ │ │ ├──[✅]--(data-fetc✅ng)
│ │ │ │ ├──[✅]--(data-flow)
│ │ │ │ └──[✅]--(react-refetch)
│ │ │ ├──[✅]--(chapter-06)
│ │ │ │ ├──[✅]--(controlled-components)
│ │ │ │ ├──[✅]--(css-transition-group)
│ │ │ │ ├──[✅]--(event-switch)
│ │ │ │ ├──[✅]--(json-schema)
│ │ │ │ ├──[✅]--(react-motion)
│ │ │ │ ├──[✅]--(refs-dom)
│ │ │ │ ├──[✅]--(refs-instance)
│ │ │ │ ├──[✅]--(svg)
│ │ │ │ └──[✅]--(uncontrolled-components)
│ │ │ ├──[✅]--(chapter-07)
│ │ │ │ ├──[✅]--(css-modules)
│ │ │ │ ├──[✅]--(inline-styles)
│ │ │ │ ├──[✅]--(radium)
│ │ │ │ └──[✅]--(styled-components)
│ │ │ ├──[✅]--(chapter-08)
│ │ │ │ ├──[✅]--(data-fetc✅ng)
│ │ │ │ ├──[✅]--(next)
│ │ │ │ └──[✅]--(server-side-rendering)
│ │ │ ├──[✅]--(chapter-09)
│ │ │ │ ├──[✅]--(constants-props)
│ │ │ │ ├──[✅]--(creating-functions)
│ │ │ │ ├──[✅]--(good-design)
│ │ │ │ └──[✅]--(keys)
│ │ │ ├──[✅]--(chapter-10)
│ │ │ │ ├──[✅]--(enzyme)
│ │ │ │ ├──[✅]--(✅gher-order-components)
│ │ │ │ ├──[✅]--(jest)
│ │ │ │ ├──[✅]--(mocha)
│ │ │ │ ├──[✅]--(page-object)
│ │ │ │ └──[✅]--(real-world)
│ │ │ └──[✅]--(chapter-11)
│ │ │ ├──[✅]--(index-as-key)
│ │ │ ├──[✅]--(initializing-state)
│ │ │ └──[✅]--(mutating-state)
│ │ ├──[✅]--(sql-lab-master)
│ │ │ └──[✅]--(img)
│ │ └──[✅]--(web-guided-project-HTTP-main)
│ │ ├──[✅]--(client)
│ │ │ └──[✅]--(src)
│ │ └──[✅]--(server)
│ ├──[✅]--(screenshot-preview)
│ │ ├──[✅]--(examples)
│ │ └──[✅]--(src)
│ ├──[✅]--(web-dev-utils)
│ │ ├──[✅]--(GIT-HTML-PREVIEW-TOOL)
│ │ │ └──[✅]--(GIT-HTML-PREVIEW-TOOL-master)
│ │ ├──[✅]--(Markdown-Templates)
│ │ │ └──[✅]--(Markdown-Templates-master)
│ │ │ └──[✅]--(images)
│ │ ├──[✅]--(TexTools)
│ │ │ └──[✅]--(TexTools-master)
│ │ │ ├──[✅]--(backup-stable-build)
│ │ │ ├──[✅]--(css)
│ │ │ ├──[✅]--(js)
│ │ │ └──[✅]--(sandbox)
│ │ ├──[✅]--(bootstrap-4.3.1-dist)
│ │ │ ├──[✅]--(css)
│ │ │ └──[✅]--(js)
│ │ └──[✅]--(personal-utilities)
│ │ ├──[✅]--(Auto-table-Of-Contents)
│ │ ├──[✅]--(copy-2-clip)
│ │ ├──[✅]--(css)
│ │ ├──[✅]--(extract-css)
│ │ │ ├──[✅]--(css)
│ │ │ ├──[✅]--(img)
│ │ │ └──[✅]--(js)
│ │ ├──[✅]--(js)
│ │ └──[✅]--(prism)
│ └──[✅]--(world-clock)
├──[✅]--(8-site-documentation)
├──[✅]--(LambdaSchool)
│ ├──[✅]--(31d1)
│ ├──[✅]--(Administration)
│ │ ├──[✅]--(Tech Skills Day badges)
│ │ │ └──[✅]--(Tech Skills Day badges)
│ │ ├──[✅]--(certs)
│ │ ├──[✅]--(marketing)
│ │ ├──[✅]--(studying)
│ │ └──[✅]--(zoom)
│ ├──[✅]--(Front-End-master)
│ │ └──[✅]--(Front-End-master)
│ │ └──[✅]--(client)
│ │ ├──[✅]--(public)
│ │ └──[✅]--(src)
│ ├──[✅]--(JavaScript30)
│ │ ├──[✅]--(01)
│ │ │ └──[✅]--(sounds)
│ │ ├──[✅]--(02)
│ │ ├──[✅]--(03)
│ │ ├──[✅]--(04)
│ │ ├──[✅]--(05)
│ │ ├──[✅]--(06)
│ │ ├──[✅]--(07)
│ │ ├──[✅]--(08)
│ │ ├──[✅]--(09)
│ │ ├──[✅]--(10)
│ │ ├──[✅]--(11)
│ │ ├──[✅]--(12)
│ │ ├──[✅]--(13)
│ │ ├──[✅]--(14)
│ │ ├──[✅]--(15)
│ │ ├──[✅]--(16)
│ │ ├──[✅]--(17)
│ │ ├──[✅]--(18)
│ │ ├──[✅]--(19)
│ │ ├──[✅]--(20)
│ │ ├──[✅]--(21)
│ │ ├──[✅]--(22)
│ │ ├──[✅]--(23)
│ │ ├──[✅]--(24)
│ │ ├──[✅]--(25)
│ │ ├──[✅]--(26)
│ │ ├──[✅]--(27)
│ │ ├──[✅]--(28)
│ │ ├──[✅]--(29)
│ │ ├──[✅]--(30)
│ │ └──[✅]--(JavaScript30-master)
│ │ └──[✅]--(JavaScript30-master)
│ │ ├──[✅]--(01 - JavaScript Drum Kit)
│ │ ├──[✅]--(02 - JS and CSS Clock)
│ │ ├──[✅]--(03 - CSS Variables)
│ │ ├──[✅]--(04 - Array Cardio Day 1)
│ │ ├──[✅]--(05 - Flex Panel Gallery)
│ │ ├──[✅]--(06 - Type Ahead)
│ │ ├──[✅]--(07 - Array Cardio Day 2)
│ │ ├──[✅]--(08 - Fun with HTML5 Canvas)
│ │ ├──[✅]--(09 - Dev Tools Domination)
│ │ ├──[✅]--(10 - Hold S✅ft and Check Checkboxes)
│ │ ├──[✅]--(11 - Custom Video Player)
│ │ ├──[✅]--(12 - Key Sequence Detection)
│ │ ├──[✅]--(13 - Slide in on Scroll)
│ │ ├──[✅]--(14 - JavaScript References VS Copying)
│ │ ├──[✅]--(15 - LocalStorage)
│ │ ├──[✅]--(16 - Mouse Move Shadow)
│ │ ├──[✅]--(17 - Sort Without Articles)
│ │ ├──[✅]--(18 - Adding Up Times with Reduce)
│ │ ├──[✅]--(19 - Webcam Fun)
│ │ ├──[✅]--(20 - Speech Detection)
│ │ ├──[✅]--(21 - Geolocation)
│ │ ├──[✅]--(22 - Follow Along Link ✅ghlighter)
│ │ ├──[✅]--(23 - Speech Synthesis)
│ │ ├──[✅]--(24 - Sticky Nav)
│ │ ├──[✅]--(25 - Event Capture, Propagation, Bubbling and Once)
│ │ ├──[✅]--(26 - Stripe Follow Along Nav)
│ │ ├──[✅]--(27 - Click and Drag)
│ │ ├──[✅]--(28 - Video Speed Controller)
│ │ ├──[✅]--(29 - Countdown Timer)
│ │ └──[✅]--(30 - Whack A Mole)
│ ├──[✅]--(aa-score)
│ │ ├──[✅]--(public)
│ │ └──[✅]--(src)
│ ├──[✅]--(bw1-tl)
│ │ ├──[✅]--(BackEnd-master)
│ │ │ └──[✅]--(BackEnd-master)
│ │ │ ├──[✅]--(admin)
│ │ │ ├──[✅]--(api)
│ │ │ ├──[✅]--(auth)
│ │ │ ├──[✅]--(database)
│ │ │ ├──[✅]--(middleware)
│ │ │ ├──[✅]--(todos)
│ │ │ └──[✅]--(volunteer)
│ │ ├──[✅]--(admin)
│ │ ├──[✅]--(api)
│ │ ├──[✅]--(auth)
│ │ ├──[✅]--(database)
│ │ │ ├──[✅]--(migrations)
│ │ │ └──[✅]--(seeds)
│ │ ├──[✅]--(middleware)
│ │ ├──[✅]--(todos)
│ │ └──[✅]--(volunteer)
│ ├──[✅]--(css)
│ ├──[✅]--(evoingram.github.io)
│ ├──[✅]--(labs)
│ │ ├──[✅]--(backend)
│ │ ├──[✅]--(frontend)
│ │ ├──[✅]--(last journal entry)
│ │ └──[✅]--(video-to-next-group)
│ ├──[✅]--(m1)
│ │ ├──[✅]--(11b1)
│ │ │ ├──[✅]--(Git-Flow-Practice)
│ │ │ ├──[✅]--(Git-for-Web-Development-Project-master)
│ │ │ │ └──[✅]--(Git-for-Web-Development-Project-master)
│ │ │ ├──[✅]--(Web26Git)
│ │ │ ├──[✅]--(design-files)
│ │ │ ├──[✅]--(great-idea)
│ │ │ │ ├──[✅]--(css)
│ │ │ │ └──[✅]--(img)
│ │ │ └──[✅]--(great-idea-website)
│ │ │ ├──[✅]--(css)
│ │ │ └──[✅]--(img)
│ │ ├──[✅]--(11c1)
│ │ │ ├──[✅]--(User-Interface)
│ │ │ ├──[✅]--(User-Interface-master)
│ │ │ │ └──[✅]--(User-Interface-master)
│ │ │ ├──[✅]--(design-files)
│ │ │ └──[✅]--(great-idea-website)
│ │ │ ├──[✅]--(css)
│ │ │ └──[✅]--(img)
│ │ ├──[✅]--(11d1)
│ │ │ ├──[✅]--(UI-III-Flexbox)
│ │ │ ├──[✅]--(UI-III-Flexbox-master)
│ │ │ │ └──[✅]--(UI-III-Flexbox-master)
│ │ │ ├──[✅]--(design-files)
│ │ │ └──[✅]--(great-idea)
│ │ │ ├──[✅]--(css)
│ │ │ └──[✅]--(img)
│ │ ├──[✅]--(12a1)
│ │ │ ├──[✅]--(css)
│ │ │ ├──[✅]--(design-files)
│ │ │ ├──[✅]--(img)
│ │ │ ├──[✅]--(responsive-web-design-I)
│ │ │ └──[✅]--(responsive-web-design-I-master)
│ │ │ └──[✅]--(responsive-web-design-I-master)
│ │ ├──[✅]--(12b1)
│ │ │ ├──[✅]--(dimension)
│ │ │ │ ├──[✅]--(assets)
│ │ │ │ └──[✅]--(html5up-dimension)
│ │ │ ├──[✅]--(portfolio-website-master)
│ │ │ │ └──[✅]--(portfolio-website-master)
│ │ │ └──[✅]--(solidstate)
│ │ │ └──[✅]--(assets)
│ │ ├──[✅]--(12c1)
│ │ │ ├──[✅]--(Preprocessing-I-master)
│ │ │ │ └──[✅]--(Preprocessing-I-master)
│ │ │ ├──[✅]--(css)
│ │ │ └──[✅]--(less)
│ │ ├──[✅]--(12d1)
│ │ │ ├──[✅]--(Preprocessing-II-master)
│ │ │ │ └──[✅]--(Preprocessing-II-master)
│ │ │ ├──[✅]--(css)
│ │ │ ├──[✅]--(design-files)
│ │ │ ├──[✅]--(img)
│ │ │ └──[✅]--(less)
│ │ ├──[✅]--(13a1)
│ │ │ └──[✅]--(assignments)
│ │ ├──[✅]--(13b1)
│ │ │ └──[✅]--(assignments)
│ │ ├──[✅]--(13c1)
│ │ │ └──[✅]--(assignments)
│ │ ├──[✅]--(13d1)
│ │ │ ├──[✅]--(new)
│ │ │ │ └──[✅]--(test)
│ │ │ └──[✅]--(old)
│ │ │ └──[✅]--(assignments)
│ │ ├──[✅]--(13e1)
│ │ │ ├──[✅]--(Sprint-Challenge--JavaScript-master)
│ │ │ │ └──[✅]--(Sprint-Challenge--JavaScript-master)
│ │ │ └──[✅]--(challenges)
│ │ ├──[✅]--(14a1)
│ │ │ └──[✅]--(Marketing-page)
│ │ ├──[✅]--(SC-ACSS)
│ │ └──[✅]--(Sprint-Challenge--Advanced-CSS)
│ ├──[✅]--(m2)
│ │ ├──[✅]--(21a1)
│ │ │ ├──[✅]--(css)
│ │ │ ├──[✅]--(design-files)
│ │ │ ├──[✅]--(img)
│ │ │ ├──[✅]--(js)
│ │ │ └──[✅]--(stretch-assignment)
│ │ │ └──[✅]--(digital_timer)
│ │ ├──[✅]--(21b1)
│ │ ├──[✅]--(21c1)
│ │ │ ├──[✅]--(Article)
│ │ │ ├──[✅]--(Header)
│ │ │ ├──[✅]--(LESS)
│ │ │ ├──[✅]--(Menu)
│ │ │ ├──[✅]--(assets)
│ │ │ └──[✅]--(css)
│ │ ├──[✅]--(21d1)
│ │ │ ├──[✅]--(GitHubCard)
│ │ │ └──[✅]--(assets)
│ │ ├──[✅]--(21e1)
│ │ │ ├──[✅]--(CSS)
│ │ │ ├──[✅]--(LESS)
│ │ │ ├──[✅]--(assets)
│ │ │ │ └──[✅]--(carousel)
│ │ │ └──[✅]--(components)
│ │ │ ├──[✅]--(Cards)
│ │ │ ├──[✅]--(Carousel)
│ │ │ ├──[✅]--(Header)
│ │ │ ├──[✅]--(Tabs)
│ │ │ └──[✅]--(TopBar)
│ │ ├──[✅]--(22a1)
│ │ │ ├──[✅]--(public)
│ │ │ ├──[✅]--(react-american-football-scoreboard-master)
│ │ │ │ └──[✅]--(react-american-football-scoreboard-master)
│ │ │ └──[✅]--(src)
│ │ ├──[✅]--(22b1)
│ │ │ ├──[✅]--(design-files)
│ │ │ ├──[✅]--(lambda-calculator-master)
│ │ │ │ └──[✅]--(lambda-calculator-master)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(Img)
│ │ │ └──[✅]--(components)
│ │ ├──[✅]--(22c1)
│ │ │ ├──[✅]--(public)
│ │ │ ├──[✅]--(reactstrap-project)
│ │ │ │ ├──[✅]--(public)
│ │ │ │ └──[✅]--(src)
│ │ │ └──[✅]--(src)
│ │ ├──[✅]--(22e1)
│ │ │ └──[✅]--(starwars)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ ├──[✅]--(23a1)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ │ └──[✅]--(components)
│ │ ├──[✅]--(23a2)
│ │ │ └──[✅]--(images)
│ │ ├──[✅]--(23b1)
│ │ │ └──[✅]--(client)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ ├──[✅]--(23c1)
│ │ │ ├──[✅]--(public)
│ │ │ ├──[✅]--(src)
│ │ │ │ └──[✅]--(CustomHooks)
│ │ │ └──[✅]--(team-builder)
│ │ ├──[✅]--(23d1)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ │ └──[✅]--(CustomHooks)
│ │ ├──[✅]--(23d2)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ ├──[✅]--(23e1)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ │ └──[✅]--(components)
│ │ └──[✅]--(24a1)
│ │ ├──[✅]--(public)
│ │ │ └──[✅]--(img)
│ │ └──[✅]--(src)
│ │ └──[✅]--(components)
│ ├──[✅]--(m3)
│ │ ├──[✅]--(31a1)
│ │ │ ├──[✅]--(React-Todo-master)
│ │ │ │ └──[✅]--(React-Todo-master)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ │ └──[✅]--(components)
│ │ ├──[✅]--(31a2)
│ │ │ ├──[✅]--(React-Sorting-Hat-master)
│ │ │ │ └──[✅]--(React-Sorting-Hat-master)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ ├──[✅]--(31b1)
│ │ │ ├──[✅]--(React-Github-User-Card-master)
│ │ │ │ └──[✅]--(React-Github-User-Card-master)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ │ └──[✅]--(components)
│ │ ├──[✅]--(31c1)
│ │ │ ├──[✅]--(dark-mode-master)
│ │ │ │ └──[✅]--(dark-mode-master)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(components)
│ │ │ └──[✅]--(hooks)
│ │ ├──[✅]--(31d1)
│ │ │ ├──[✅]--(Web-Application-Testing-master)
│ │ │ │ └──[✅]--(Web-Application-Testing-master)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(components)
│ │ │ └──[✅]--(hooks)
│ │ ├──[✅]--(31e1)
│ │ │ ├──[✅]--(Sprint-Challenge-Advanced-React-master)
│ │ │ │ └──[✅]--(Sprint-Challenge-Advanced-React-master)
│ │ │ └──[✅]--(client)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ ├──[✅]--(32a1)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(components)
│ │ │ ├──[✅]--(contexts)
│ │ │ └──[✅]--(sass)
│ │ ├──[✅]--(32b1)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(components)
│ │ │ └──[✅]--(reducers)
│ │ ├──[✅]--(32c1)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(actions)
│ │ │ ├──[✅]--(components)
│ │ │ └──[✅]--(reducers)
│ │ ├──[✅]--(32d1)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(actions)
│ │ │ ├──[✅]--(components)
│ │ │ ├──[✅]--(fonts)
│ │ │ ├──[✅]--(img)
│ │ │ └──[✅]--(reducers)
│ │ ├──[✅]--(32e1)
│ │ │ ├──[✅]--(Sprint-Challenge-State-Management-Smurfs-master)
│ │ │ │ └──[✅]--(Sprint-Challenge-State-Management-Smurfs-master)
│ │ │ └──[✅]--(smurfs)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ ├──[✅]--(33a1)
│ │ │ ├──[✅]--(public)
│ │ │ ├──[✅]--(src)
│ │ │ │ ├──[✅]--(controls)
│ │ │ │ ├──[✅]--(dashboard)
│ │ │ │ └──[✅]--(display)
│ │ │ └──[✅]--(webtesting-iii-challenge-master)
│ │ │ └──[✅]--(webtesting-iii-challenge-master)
│ │ ├──[✅]--(33b1)
│ │ │ ├──[✅]--(Auth-Friends-master)
│ │ │ │ └──[✅]--(Auth-Friends-master)
│ │ │ └──[✅]--(friends)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ ├──[✅]--(33d1)
│ │ │ ├──[✅]--(HTTP-Movies-Assignment-master)
│ │ │ │ └──[✅]--(HTTP-Movies-Assignment-master)
│ │ │ └──[✅]--(client)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ └──[✅]--(33e1)
│ │ ├──[✅]--(client)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ └──[✅]--(react-bubbles-master)
│ │ └──[✅]--(react-bubbles-master)
│ ├──[✅]--(m4)
│ │ ├──[✅]--(41a1)
│ │ │ ├──[✅]--(data)
│ │ │ │ ├──[✅]--(migrations)
│ │ │ │ └──[✅]--(seeds)
│ │ │ └──[✅]--(webapi-i-guided-master)
│ │ │ └──[✅]--(webapi-i-guided-master)
│ │ ├──[✅]--(41a2)
│ │ │ ├──[✅]--(data)
│ │ │ │ ├──[✅]--(migrations)
│ │ │ │ └──[✅]--(seeds)
│ │ │ └──[✅]--(node-api1-project-master)
│ │ │ └──[✅]--(node-api1-project-master)
│ │ ├──[✅]--(41b1)
│ │ │ ├──[✅]--(data)
│ │ │ │ ├──[✅]--(migrations)
│ │ │ │ └──[✅]--(seeds)
│ │ │ ├──[✅]--(hubs)
│ │ │ └──[✅]--(noderouting)
│ │ │ └──[✅]--(noderouting)
│ │ ├──[✅]--(41b2)
│ │ │ ├──[✅]--(data)
│ │ │ │ ├──[✅]--(migrations)
│ │ │ │ └──[✅]--(seeds)
│ │ │ └──[✅]--(webapi-ii-challenge-master)
│ │ │ └──[✅]--(webapi-ii-challenge-master)
│ │ ├──[✅]--(41c1)
│ │ │ ├──[✅]--(data)
│ │ │ │ ├──[✅]--(migrations)
│ │ │ │ └──[✅]--(seeds)
│ │ │ ├──[✅]--(hubs)
│ │ │ ├──[✅]--(messages)
│ │ │ ├──[✅]--(middleware)
│ │ │ │ └──[✅]--(middleware)
│ │ │ └──[✅]--(webapi-iii-guided-master)
│ │ │ └──[✅]--(webapi-iii-guided-master)
│ │ ├──[✅]--(41c2)
│ │ │ ├──[✅]--(data)
│ │ │ │ ├──[✅]--(migrations)
│ │ │ │ └──[✅]--(seeds)
│ │ │ ├──[✅]--(posts)
│ │ │ ├──[✅]--(users)
│ │ │ └──[✅]--(webapi-iii-challenge-master)
│ │ │ └──[✅]--(webapi-iii-challenge-master)
│ │ ├──[✅]--(41d1)
│ │ │ ├──[✅]--(api)
│ │ │ ├──[✅]--(data)
│ │ │ │ └──[✅]--(migrations)
│ │ │ └──[✅]--(webapi-iv-guided-master)
│ │ │ └──[✅]--(webapi-iv-guided-master)
│ │ ├──[✅]--(41e1)
│ │ │ ├──[✅]--(data)
│ │ │ │ ├──[✅]--(helpers)
│ │ │ │ ├──[✅]--(migrations)
│ │ │ │ └──[✅]--(seeds)
│ │ │ ├──[✅]--(node-api-challenge-master)
│ │ │ │ └──[✅]--(node-api-challenge-master)
│ │ │ └──[✅]--(routers)
│ │ ├──[✅]--(41e1app)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ │ └──[✅]--(components)
│ │ ├──[✅]--(42a1)
│ │ │ ├──[✅]--(data)
│ │ │ │ ├──[✅]--(migrations)
│ │ │ │ └──[✅]--(seeds)
│ │ │ ├──[✅]--(dbintro)
│ │ │ │ └──[✅]--(dbintro)
│ │ │ ├──[✅]--(migrations)
│ │ │ │ └──[✅]--(migrations)
│ │ │ ├──[✅]--(node-db1-guided-master)
│ │ │ │ └──[✅]--(node-db1-guided-master)
│ │ │ └──[✅]--(posts)
│ │ ├──[✅]--(42a2)
│ │ │ ├──[✅]--(data)
│ │ │ │ ├──[✅]--(migrations)
│ │ │ │ └──[✅]--(seeds)
│ │ │ ├──[✅]--(node-db1-project-master)
│ │ │ │ └──[✅]--(node-db1-project-master)
│ │ │ └──[✅]--(routers)
│ │ ├──[✅]--(42b1)
│ │ │ ├──[✅]--(api)
│ │ │ ├──[✅]--(data)
│ │ │ ├──[✅]--(fruits)
│ │ │ └──[✅]--(node-db2-guided-master)
│ │ │ └──[✅]--(node-db2-guided-master)
│ │ ├──[✅]--(42b2)
│ │ │ ├──[✅]--(api)
│ │ │ ├──[✅]--(data)
│ │ │ │ ├──[✅]--(migrations)
│ │ │ │ └──[✅]--(seeds)
│ │ │ ├──[✅]--(node-db2-project-master)
│ │ │ │ └──[✅]--(node-db2-project-master)
│ │ │ └──[✅]--(routers)
│ │ ├──[✅]--(42c1)
│ │ │ ├──[✅]--(data)
│ │ │ │ ├──[✅]--(migrations)
│ │ │ │ └──[✅]--(seeds)
│ │ │ ├──[✅]--(node-db3-guided-master)
│ │ │ │ └──[✅]--(node-db3-guided-master)
│ │ │ └──[✅]--(users)
│ │ ├──[✅]--(42c2)
│ │ │ ├──[✅]--(data)
│ │ │ │ ├──[✅]--(migrations)
│ │ │ │ └──[✅]--(seeds)
│ │ │ ├──[✅]--(node-db3-project-master)
│ │ │ │ └──[✅]--(node-db3-project-master)
│ │ │ └──[✅]--(schemes)
│ │ ├──[✅]--(42d1)
│ │ │ ├──[✅]--(data)
│ │ │ │ └──[✅]--(seeds)
│ │ │ └──[✅]--(node-db4-guided-master)
│ │ │ └──[✅]--(node-db4-guided-master)
│ │ ├──[✅]--(42d2)
│ │ │ ├──[✅]--(data)
│ │ │ │ ├──[✅]--(migrations)
│ │ │ │ └──[✅]--(seeds)
│ │ │ ├──[✅]--(node-db4-project-master)
│ │ │ │ └──[✅]--(node-db4-project-master)
│ │ │ └──[✅]--(recipes)
│ │ ├──[✅]--(42e1)
│ │ │ ├──[✅]--(data)
│ │ │ │ ├──[✅]--(migrations)
│ │ │ │ └──[✅]--(seeds)
│ │ │ └──[✅]--(projects)
│ │ ├──[✅]--(43a1)
│ │ │ ├──[✅]--(__MACOSX)
│ │ │ │ └──[✅]--(aut✅ntro)
│ │ │ ├──[✅]--(api)
│ │ │ ├──[✅]--(auth)
│ │ │ ├──[✅]--(aut✅ntro)
│ │ │ │ └──[✅]--(aut✅ntro)
│ │ │ ├──[✅]--(database)
│ │ │ │ └──[✅]--(migrations)
│ │ │ ├──[✅]--(node-auth1-guided-master)
│ │ │ │ └──[✅]--(node-auth1-guided-master)
│ │ │ └──[✅]--(users)
│ │ ├──[✅]--(43a2)
│ │ │ ├──[✅]--(api)
│ │ │ ├──[✅]--(auth)
│ │ │ ├──[✅]--(database)
│ │ │ │ └──[✅]--(migrations)
│ │ │ ├──[✅]--(node-auth1-project-master)
│ │ │ │ └──[✅]--(node-auth1-project-master)
│ │ │ └──[✅]--(users)
│ │ ├──[✅]--(43b1)
│ │ │ ├──[✅]--(api)
│ │ │ ├──[✅]--(auth)
│ │ │ ├──[✅]--(database)
│ │ │ │ └──[✅]--(migrations)
│ │ │ ├──[✅]--(node-auth2-guided-master)
│ │ │ │ └──[✅]--(node-auth2-guided-master)
│ │ │ └──[✅]--(users)
│ │ ├──[✅]--(43b2)
│ │ │ ├──[✅]--(api)
│ │ │ ├──[✅]--(auth)
│ │ │ ├──[✅]--(database)
│ │ │ │ └──[✅]--(migrations)
│ │ │ ├──[✅]--(node-auth1-project-master)
│ │ │ │ └──[✅]--(node-auth1-project-master)
│ │ │ ├──[✅]--(sessions)
│ │ │ └──[✅]--(users)
│ │ ├──[✅]--(43c1)
│ │ │ ├──[✅]--(api)
│ │ │ ├──[✅]--(auth)
│ │ │ ├──[✅]--(database)
│ │ │ │ └──[✅]--(migrations)
│ │ │ ├──[✅]--(jwts)
│ │ │ │ └──[✅]--(jwts)
│ │ │ ├──[✅]--(node-auth3-guided-master)
│ │ │ │ └──[✅]--(node-auth3-guided-master)
│ │ │ └──[✅]--(users)
│ │ ├──[✅]--(43c2)
│ │ │ ├──[✅]--(__MACOSX)
│ │ │ │ └──[✅]--(sessions)
│ │ │ ├──[✅]--(api)
│ │ │ ├──[✅]--(auth)
│ │ │ ├──[✅]--(config)
│ │ │ ├──[✅]--(database)
│ │ │ │ └──[✅]--(migrations)
│ │ │ ├──[✅]--(node-auth3-project-master)
│ │ │ │ └──[✅]--(node-auth3-project-master)
│ │ │ ├──[✅]--(sessions)
│ │ │ │ └──[✅]--(sessions)
│ │ │ └──[✅]--(users)
│ │ ├──[✅]--(43d1)
│ │ │ ├──[✅]--(api)
│ │ │ ├──[✅]--(data)
│ │ │ │ ├──[✅]--(migrations)
│ │ │ │ └──[✅]--(seeds)
│ │ │ ├──[✅]--(hobbits)
│ │ │ └──[✅]--(node-server-testing-guided-master)
│ │ │ └──[✅]--(node-server-testing-guided-master)
│ │ ├──[✅]--(43d1a)
│ │ │ └──[✅]--(ls)
│ │ ├──[✅]--(43d2)
│ │ │ ├──[✅]--(api)
│ │ │ ├──[✅]--(cohorts)
│ │ │ ├──[✅]--(database)
│ │ │ │ ├──[✅]--(migrations)
│ │ │ │ └──[✅]--(seeds)
│ │ │ ├──[✅]--(node-server-testing-challenge-master)
│ │ │ │ └──[✅]--(node-server-testing-challenge-master)
│ │ │ └──[✅]--(students)
│ │ └──[✅]--(43e1)
│ │ ├──[✅]--(43e1)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ ├──[✅]--(Sprint-Challenge-Authentication-master)
│ │ │ └──[✅]--(Sprint-Challenge-Authentication-master)
│ │ ├──[✅]--(api)
│ │ ├──[✅]--(auth)
│ │ ├──[✅]--(database)
│ │ │ └──[✅]--(migrations)
│ │ └──[✅]--(jokes)
│ ├──[✅]--(m5)
│ │ ├──[✅]--(51a1)
│ │ │ ├──[✅]--(java-SnackBar-master)
│ │ │ │ └──[✅]--(java-SnackBar-master)
│ │ │ └──[✅]--(src)
│ │ │ └──[✅]--(employeeApp)
│ │ ├──[✅]--(51b1)
│ │ │ ├──[✅]--(java-WordCount-master)
│ │ │ │ └──[✅]--(java-WordCount-master)
│ │ │ └──[✅]--(src)
│ │ │ └──[✅]--(collections)
│ │ ├──[✅]--(51c1)
│ │ │ ├──[✅]--(java-AnimalKingdom-master)
│ │ │ │ └──[✅]--(java-AnimalKingdom-master)
│ │ │ └──[✅]--(transportation)
│ │ │ └──[✅]--(src)
│ │ ├──[✅]--(51d1)
│ │ │ ├──[✅]--(bin)
│ │ │ │ └──[✅]--(src)
│ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(main)
│ │ │ └──[✅]--(test)
│ │ ├──[✅]--(51d2)
│ │ │ ├──[✅]--(src)
│ │ │ │ ├──[✅]--(main)
│ │ │ │ └──[✅]--(test)
│ │ │ └──[✅]--(target)
│ │ │ └──[✅]--(classes)
│ │ ├──[✅]--(51e1)
│ │ │ ├──[✅]--(Sprint-Challenge--Java-Fundamentals-piggybank-master)
│ │ │ │ └──[✅]--(Sprint-Challenge--Java-Fundamentals-piggybank-master)
│ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(main)
│ │ │ └──[✅]--(test)
│ │ ├──[✅]--(52b1)
│ │ │ ├──[✅]--(assets)
│ │ │ └──[✅]--(java-sql-master)
│ │ │ └──[✅]--(java-sql-master)
│ │ ├──[✅]--(52c1)
│ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(main)
│ │ │ └──[✅]--(test)
│ │ ├──[✅]--(52c2)
│ │ │ ├──[✅]--(java-orders-master)
│ │ │ │ └──[✅]--(java-orders-master)
│ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(main)
│ │ │ └──[✅]--(test)
│ │ ├──[✅]--(52d1)
│ │ │ └──[✅]--(oauth)
│ │ │ ├──[✅]--(oauth2)
│ │ │ └──[✅]--(oauth2 - initial)
│ │ ├──[✅]--(53a1)
│ │ │ ├──[✅]--(oauth2ExceptionLogging-final)
│ │ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(src)
│ │ │ │ ├──[✅]--(main)
│ │ │ │ └──[✅]--(test)
│ │ │ └──[✅]--(target)
│ │ │ └──[✅]--(classes)
│ │ ├──[✅]--(53b1)
│ │ │ ├──[✅]--(clientrestaurants)
│ │ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(restaurants-initial)
│ │ │ │ ├──[✅]--(src)
│ │ │ │ └──[✅]--(target)
│ │ │ └──[✅]--(restaurants-pagesswagger)
│ │ │ ├──[✅]--(src)
│ │ │ └──[✅]--(target)
│ │ ├──[✅]--(53c1)
│ │ │ ├──[✅]--(restaurants-initial)
│ │ │ │ └──[✅]--(src)
│ │ │ └──[✅]--(restaurants-testing)
│ │ │ └──[✅]--(src)
│ │ └──[✅]--(53d1)
│ │ ├──[✅]--(JS-FrontEnd-by-jheinz1999)
│ │ │ ├──[✅]--(public)
│ │ │ └──[✅]--(src)
│ │ └──[✅]--(StartHere)
│ │ └──[✅]--(src)
│ ├──[✅]--(m6)
│ │ ├──[✅]--(61a1)
│ │ │ └──[✅]--(src)
│ │ ├──[✅]--(61b1)
│ │ │ ├──[✅]--(examples)
│ │ │ └──[✅]--(src)
│ │ ├──[✅]--(61c1)
│ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(cityreader)
│ │ │ ├──[✅]--(comp)
│ │ │ └──[✅]--(oop)
│ │ ├──[✅]--(62a1)
│ │ │ ├──[✅]--(avl_tree)
│ │ │ ├──[✅]--(benchmarks)
│ │ │ ├──[✅]--(binary_search_tree)
│ │ │ ├──[✅]--(doubly_linked_list)
│ │ │ ├──[✅]--(heap)
│ │ │ ├──[✅]--(lru_cache)
│ │ │ ├──[✅]--(queue)
│ │ │ ├──[✅]--(queue_and_stack)
│ │ │ ├──[✅]--(singly_linked_list)
│ │ │ └──[✅]--(stack)
│ │ ├──[✅]--(62b1)
│ │ │ ├──[✅]--(names)
│ │ │ ├──[✅]--(reverse)
│ │ │ └──[✅]--(ring_buffer)
│ │ ├──[✅]--(63a1)
│ │ │ └──[✅]--(src)
│ │ │ ├──[✅]--(iterative_sorting)
│ │ │ └──[✅]--(searc✅ng)
│ │ ├──[✅]--(63b1)
│ │ │ └──[✅]--(src)
│ │ │ └──[✅]--(recursive_sorting)
│ │ ├──[✅]--(63c1)
│ │ │ ├──[✅]--(eating_cookies)
│ │ │ ├──[✅]--(knapsack)
│ │ │ │ └──[✅]--(data)
│ │ │ ├──[✅]--(making_change)
│ │ │ ├──[✅]--(moving_zeroes)
│ │ │ ├──[✅]--(product_of_all_other_numbers)
│ │ │ ├──[✅]--(recipe_batches)
│ │ │ ├──[✅]--(rock_paper_scissors)
│ │ │ ├──[✅]--(single_number)
│ │ │ ├──[✅]--(sliding_window_max)
│ │ │ │ └──[✅]--(data)
│ │ │ └──[✅]--(stock_prices)
│ │ └──[✅]--(63d1)
│ │ ├──[✅]--(Short-Answer)
│ │ ├──[✅]--(recursive_count_th)
│ │ └──[✅]--(robot_sort)
│ ├──[✅]--(m7)
│ │ ├──[✅]--(71a1)
│ │ │ ├──[✅]--(applications)
│ │ │ │ ├──[✅]--(crack_caesar)
│ │ │ │ ├──[✅]--(expensive_seq)
│ │ │ │ ├──[✅]--(✅sto)
│ │ │ │ ├──[✅]--(lookup_table)
│ │ │ │ ├──[✅]--(markov)
│ │ │ │ ├──[✅]--(no_dups)
│ │ │ │ ├──[✅]--(sumdiff)
│ │ │ │ └──[✅]--(word_count)
│ │ │ └──[✅]--(hashtable)
│ │ ├──[✅]--(71e1)
│ │ │ └──[✅]--(hashtables)
│ │ │ ├──[✅]--(ex1)
│ │ │ ├──[✅]--(ex2)
│ │ │ ├──[✅]--(ex3)
│ │ │ ├──[✅]--(ex4)
│ │ │ └──[✅]--(ex5)
│ │ ├──[✅]--(72a1)
│ │ │ ├──[✅]--(objectives)
│ │ │ │ ├──[✅]--(breadth-first-search)
│ │ │ │ ├──[✅]--(connected-components)
│ │ │ │ ├──[✅]--(depth-first-search)
│ │ │ │ ├──[✅]--(graph-intro)
│ │ │ │ ├──[✅]--(graph-representations)
│ │ │ │ └──[✅]--(randomness)
│ │ │ └──[✅]--(projects)
│ │ │ ├──[✅]--(adventure)
│ │ │ ├──[✅]--(ancestor)
│ │ │ ├──[✅]--(graph)
│ │ │ └──[✅]--(social)
│ │ ├──[✅]--(73a1)
│ │ │ ├──[✅]--(asm)
│ │ │ └──[✅]--(ls8)
│ │ │ └──[✅]--(examples)
│ │ └──[✅]--(74a1)
│ ├──[✅]--(src)
│ │ ├──[✅]--(iterative_sorting)
│ │ └──[✅]--(searc✅ng)
│ ├──[✅]--(summary)
│ │ ├──[✅]--(Node Express Knex)
│ │ │ └──[✅]--(Create Back End Guide)
│ │ ├──[✅]--(certifications)
│ │ │ ├──[✅]--(IBM zOS)
│ │ │ └──[✅]--(Oracle Autonomous DB)
│ │ │ ├──[✅]--(1 Overview)
│ │ │ ├──[✅]--(2 Provisioning and Connectivity)
│ │ │ ├──[✅]--(3 Migration and Data Loding into Autonomous DB)
│ │ │ ├──[✅]--(4 Migrating and Data Loading)
│ │ │ ├──[✅]--(5 Monitoring Autonomous DB)
│ │ │ └──[✅]--(6 Tools Reporting Analytics)
│ │ ├──[✅]--(cobol)
│ │ │ ├──[✅]--(COBOL Programming Course_files)
│ │ │ ├──[✅]--(COBOL Programming Exercises_files)
│ │ │ └──[✅]--(COBOL example programs_files)
│ │ ├──[✅]--(complete)
│ │ │ ├──[✅]--(Decks)
│ │ │ └──[✅]--(notes-books)
│ │ ├──[✅]--(general)
│ │ ├──[✅]--(interviewing)
│ │ ├──[✅]--(testing)
│ │ └──[✅]--(typescript)
│ └──[✅]--(tlbw)
│ └──[✅]--(client)
│ ├──[✅]--(public)
│ └──[✅]--(src)
│ ├──[✅]--(components)
│ └──[✅]--(imgs)
├──[✅]--(WEEKS)
│ ├──[✅]--(wk1)
│ │ ├──[✅]--(0-notes)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ │ ├──[✅]--(Farm to Table_files)
│ │ │ │ ├──[✅]--(Quiz_Git_files)
│ │ │ │ ├──[✅]--(closures_files)
│ │ │ │ ├──[✅]--(func-scope_files)
│ │ │ │ └──[✅]--(git-quiz_files)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ │ ├──[✅]--(flexbox-explained_files)
│ │ │ │ └──[✅]--(notes_files)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(1-projects)
│ │ │ ├──[✅]--(d1)
│ │ │ │ ├──[✅]--(User_Interface_I_HTML_Markup)
│ │ │ │ └──[✅]--(User_Interface_I__Project_2_-_Sweet_Eats_Bakery)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ │ └──[✅]--(web-module-project-intro-css)
│ │ │ ├──[✅]--(d4)
│ │ │ │ ├──[✅]--(portfolio)
│ │ │ │ └──[✅]--(refactor-d3-proj-w-flex)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(2-resources)
│ │ │ ├──[✅]--(agenda_files)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(3-misc)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ └──[✅]--(4-test-prep)
│ │ └──[✅]--(Study-Guides)
│ ├──[✅]--(wk10)
│ │ ├──[✅]--(0-notes)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(1-projects)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(2-resources)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(3-misc)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ └──[✅]--(4-test-prep)
│ │ └──[✅]--(Study-Guides)
│ ├──[✅]--(wk11)
│ │ ├──[✅]--(0-notes)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(1-projects)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(2-resources)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(3-misc)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ └──[✅]--(4-test-prep)
│ │ └──[✅]--(Study-Guides)
│ ├──[✅]--(wk12)
│ │ ├──[✅]--(0-notes)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(1-projects)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(2-resources)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(3-misc)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ └──[✅]--(4-test-prep)
│ │ └──[✅]--(Study-Guides)
│ ├──[✅]--(wk14)
│ │ ├──[✅]--(0-notes)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(1-projects)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(2-resources)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(3-misc)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ └──[✅]--(4-test-prep)
│ │ └──[✅]--(Study-Guides)
│ ├──[✅]--(wk15)
│ │ ├──[✅]--(0-notes)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(1-projects)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(2-resources)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(3-misc)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ └──[✅]--(4-test-prep)
│ │ └──[✅]--(Study-Guides)
│ ├──[✅]--(wk16)
│ │ ├──[✅]--(0-notes)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(1-projects)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(2-resources)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(3-misc)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ └──[✅]--(4-test-prep)
│ │ └──[✅]--(Study-Guides)
│ ├──[✅]--(wk17)
│ │ ├──[✅]--(0-notes)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(1-projects)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(2-resources)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(3-misc)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ └──[✅]--(4-test-prep)
│ │ └──[✅]--(Study-Guides)
│ ├──[✅]--(wk18)
│ │ ├──[✅]--(0-notes)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(1-projects)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(2-resources)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(3-misc)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ └──[✅]--(4-test-prep)
│ │ └──[✅]--(Study-Guides)
│ ├──[✅]--(wk19)
│ │ ├──[✅]--(0-notes)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(1-projects)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(2-resources)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(3-misc)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ └──[✅]--(4-test-prep)
│ │ └──[✅]--(Study-Guides)
│ ├──[✅]--(wk2)
│ │ ├──[✅]--(0-notes)
│ │ │ ├──[✅]--(d1)
│ │ │ │ └──[✅]--(HTML-CSS-Responsive-Practice)
│ │ │ ├──[✅]--(d2)
│ │ │ │ ├──[✅]--(Slice vs Splice_files)
│ │ │ │ ├──[✅]--(best-practice)
│ │ │ │ └──[✅]--(git-flow)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(1-projects)
│ │ │ ├──[✅]--(d1)
│ │ │ │ └──[✅]--(Responsive-Design)
│ │ │ ├──[✅]--(d2)
│ │ │ │ ├──[✅]--(__tests__)
│ │ │ │ ├──[✅]--(backup)
│ │ │ │ └──[✅]--(notes)
│ │ │ ├──[✅]--(d3)
│ │ │ │ └──[✅]--(__tests__)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(2-resources)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(3-misc)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ └──[✅]--(4-test-prep)
│ │ └──[✅]--(Study-Guides)
│ ├──[✅]--(wk20)
│ │ ├──[✅]--(0-notes)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(1-projects)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(2-resources)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(3-misc)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ └──[✅]--(4-test-prep)
│ │ └──[✅]--(Study-Guides)
│ ├──[✅]--(wk3)
│ │ ├──[✅]--(0-notes)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(1-projects)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(2-resources)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(3-misc)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ └──[✅]--(4-test-prep)
│ │ └──[✅]--(Study-Guides)
│ ├──[✅]--(wk4)
│ │ ├──[✅]--(0-notes)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(1-projects)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(2-resources)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(3-misc)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ └──[✅]--(4-test-prep)
│ │ └──[✅]--(Study-Guides)
│ ├──[✅]--(wk5)
│ │ ├──[✅]--(0-notes)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(1-projects)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(2-resources)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(3-misc)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ └──[✅]--(4-test-prep)
│ │ └──[✅]--(Study-Guides)
│ ├──[✅]--(wk6)
│ │ ├──[✅]--(0-notes)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(1-projects)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(2-resources)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(3-misc)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ └──[✅]--(4-test-prep)
│ │ └──[✅]--(Study-Guides)
│ ├──[✅]--(wk7)
│ │ ├──[✅]--(0-notes)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(1-projects)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(2-resources)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(3-misc)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ └──[✅]--(4-test-prep)
│ │ └──[✅]--(Study-Guides)
│ ├──[✅]--(wk8)
│ │ ├──[✅]--(0-notes)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(1-projects)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(2-resources)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ ├──[✅]--(3-misc)
│ │ │ ├──[✅]--(d1)
│ │ │ ├──[✅]--(d2)
│ │ │ ├──[✅]--(d3)
│ │ │ ├──[✅]--(d4)
│ │ │ ├──[✅]--(d5)
│ │ │ └──[✅]--(other)
│ │ └──[✅]--(4-test-prep)
│ │ └──[✅]--(Study-Guides)
│ └──[✅]--(wk9)
│ ├──[✅]--(0-notes)
│ │ ├──[✅]--(d1)
│ │ ├──[✅]--(d2)
│ │ ├──[✅]--(d3)
│ │ ├──[✅]--(d4)
│ │ ├──[✅]--(d5)
│ │ └──[✅]--(other)
│ ├──[✅]--(1-projects)
│ │ ├──[✅]--(d1)
│ │ ├──[✅]--(d2)
│ │ ├──[✅]--(d3)
│ │ ├──[✅]--(d4)
│ │ ├──[✅]--(d5)
│ │ └──[✅]--(other)
│ ├──[✅]--(2-resources)
│ │ ├──[✅]--(d1)
│ │ ├──[✅]--(d2)
│ │ ├──[✅]--(d3)
│ │ ├──[✅]--(d4)
│ │ ├──[✅]--(d5)
│ │ └──[✅]--(other)
│ ├──[✅]--(3-misc)
│ │ ├──[✅]--(d1)
│ │ ├──[✅]--(d2)
│ │ ├──[✅]--(d3)
│ │ ├──[✅]--(d4)
│ │ ├──[✅]--(d5)
│ │ └──[✅]--(other)
│ └──[✅]--(4-test-prep)
│ └──[✅]--(Study-Guides)
├──[✅]--(css)
├──[✅]--(js)
└──[✅]--(media-gifs-images)
4861 directories
Platforms
Programming Languages
Front-End Development
Back-End Development
Computer Science
Big Data
Theory
Books
Editors
Gaming
Development Environment
Entertainment
Databases
Media
Learn
Security
Content Management Systems
Hardware
Business
Work
Networking
Decentralized Systems
Higher Education
Events
Testing
Miscellaneous
Related
.htaccess
Snippets)git
CLI.)git
workflows.)npm start
npm test
npm run build
npm run eject
<title>
Button.js
DangerButton.js
moduleA.js
App.js
Button.css
Button.js
public
Folderpublic
Folder.env
.env
files can be used?.env
<meta>
Tags on the Serversrc/setupTests.js
src/setupTests.js
homepage
to package.json
gh-pages
and add deploy
to scripts
in package.json
npm run deploy
gh-pages
npm start
doesn’t detect changesnpm test
hangs on macOS Sierranpm run build
exits too earlynpm run build
fails on Herokunpm run build
fails to minifycreate-react-app
initialized app, you will be working with the provided UI library, which has been developed based on Atomic Design
principles. This is not the only way to design and organize your components, but it will serve as an example of a very strong option.atoms
, molecules
, organisms
, and templates
needed to build out this app. You will just need to consume them in your pages Breeds.js
and SubBreeds.js
. All of your HTTP requests should be made from inside of the page files.Breeds.js
Title should be “Breeds”SubBreed
page that shows the sub-breed detailsfilterBreeds
or any modification of it to limit the list (This is to make sure that the breeds we show actually have sub-breeds. Make sure you still make the initial get requests for the list of dogs first though as part of the assignment exercise)SubBreeds.js
Title should be “Sub-breeds”cd
into this project and Run the command npm i
to install needed node packages.npm test
to run the tests.
Work through the files and make the tests pass.redux-thunk
cors
npm i
.mongod
from the command line./users
.cors
middleware.npm i --save cors
const cors = require('cors');
app.use(cors());
Section
, Box
, and Dropdown
.Dropdown
component functionality.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce risus nibh, gravida nec felis quis, facilisis facilisis lectus. Nulla ac orci pretium, condimentum orci quis, accumsan nisi. Aliquam erat volutpat. Curabitur cursus mattis libero, at viverra risus hendrerit quis. Fusce imperdiet tristique tortor non tincidunt. Mauris accumsan urna nec augue feugiat porta. Proin vitae magna in ex malesuada laoreet eget a nulla. Aliquam tristique et elit at consequat. In hac habitasse platea dictumst.
Tabs
component.Box
in the HTML provided if it’s different in your implementation.Tabs
component should be a grouping of links and associated items. Only one item is shown at a time, and each item is shown when its corresponding link is clicked. You should default to the first link and item upon page load.querySelector
and Data Attributes. It’s a great challenge to try to work out on your own. If it’s holding you back too much, you may ask your TA for the solution to that query.push
using a list?push
using a linked list?pop
using a list?pop
using a linked list?len
using a list?len
using a linked list?enqueue
using a list?enqueue
using a linked list?dequeue
using a list?dequeue
using a linked list?len
using a list?len
using a linked list?ListNode.insert_after
?ListNode.insert_before
?ListNode.delete
?DoublyLinkedList.add_to_head
?DoublyLinkedList.remove_from_head
?DoublyLinkedList.add_to_tail
?DoublyLinkedList.remove_from_tail
?DoublyLinkedList.move_to_front
?DoublyLinkedList.move_to_end
?DoublyLinkedList.delete
?delete
method with the worst-case runtime of the JS Array.splice
method. Which method generally performs better?insert
?contains
?get_max
?for_each
?_bubble_up
?_sift_down
?insert
?delete
?get_max
?from file import class
.First in First Out
(FIFO). Server requests, without any prioritization, are handled this way. We’ll also use it to conduct a breadth first traversal and breadth first search.Last in First Out
(LIFO or FILO). They’re used in processor architecture, undo logic, and depth first searches and traversals.queues
and stacks
. They’re also a key part of resolving collisions in hash tables, which we’ll learn more about in a few weeks.index
times the size of the data type. One weakness is the time complexity of operations that take data out of anywhere but the end and another is changing the size of the array.insert
, delete
, get_max
, _bubble_up
, and _sift_down
.
insert
adds the input value into the heap; this method should ensure that the inserted value is in the correct spot in the heapdelete
removes and returns the ‘topmost’ value from the heap; this method needs to ensure that the heap property is maintained after the topmost element has been removed.
get_max
returns the maximum value in the heap in constant time.get_size
returns the number of elements stored in the heap.
_bubble_up
moves the element at the specified index “up” the heap by swapping it with its parent if the parent’s value is less than the value at the specified index._sift_down
grabs the indices of this element’s children and determines which child has a larger value. If the larger child’s value is larger than the parent’s value, the child element is swapped with the parent.get_max
function to get_priority
.test_generic_heap.py
. The test expects your augmented heap implementation lives in a file called generic_heap.py
. Feel free to change the import statement to work with your file structure or copy/paste your implementation into a file with the expected name.push
, pop
, and len
.push
adds an item to the top of the stack.
pop
removes and returns the element at the top of the stacklen
returns the number of elements in the stack.enqueue
, dequeue
, and len
.enqueue
adds an element to the back of the queue.
dequeue
removes and returns the element at the front of the queue.len
returns the number of elements in the queue.ListNode
class, which represents a single node in the doubly-linked list, has already been implemented for you. Inspect this code and try to understand what it is doing to the best of your ability.DoublyLinkedList
class itself should have the methods: add_to_head
, add_to_tail
, remove_from_head
, remove_from_tail
, move_to_front
, move_to_end
, delete
, and get_max
.
add_to_head
replaces the head of the list with a new value that is passed in.add_to_tail
replaces the tail of the list with a new value that is passed in.
remove_from_head
removes the head node and returns the value stored in it.remove_from_tail
removes the tail node and returns the value stored in it.
move_to_front
takes a reference to a node in the list and moves it to the front of the list, shifting all other list nodes down.move_to_end
takes a reference to a node in the list and moves it to the end of the list, shifting all other list nodes up.
delete
takes a reference to a node in the list and removes it from the list. The deleted node’s previous
and next
pointers should point to each afterwards.get_max
returns the maximum value in the list.
The head
property is a reference to the first node and the tail
property is a reference to the last node.insert
, contains
, get_max
.
insert
adds the input value to the binary search tree, adhering to the rules of the ordering of elements in a binary search tree.contains
searches the binary search tree for the input value, returning a boolean indicating whether the value exists in the tree or not.
get_max
returns the maximum value in the binary search tree.for_each
performs a traversal of every node in the tree, executing the passed-in callback function on each tree node value. There is a myriad of ways to perform tree traversal; in this case any of them should work.get
and set
operations. There’s a way to get both operations down to sub-linear time. In fact, we can get them each down to constant time by picking the right data structures to use.set
operation to add key-value pairs to the cache. Newly-set pairs will get moved up the priority order such that every other pair in the cache is now one spot lower in the priority order that the cache maintains. The lowest-priority pair will get removed from the cache if the cache is already at its maximal capacity. Additionally, in the case that the key already exists in the cache, we simply want to overwrite the old value associated with the key with the newly-specified value.get
operation that fetches a value given a key. When a key-value pair is fetched from the cache, we’ll go through the same priority-increase dance that also happens when a new pair is added to the cache.remove
method.balanceFactor = height(left subtree) - height(right subtree)
insert
method should perform the same logic as what was implemented for the binary search tree, with the caveat that upon inserting a new element into the tree, it will then check to see if the tree needs to be rebalanced.help
?sys.argv
work?help
?
Are there any helpful VS Code extensions that are recommend for using with Python?sys.argv
work?join()
to join large numbers of strings is definitely faster in Python+
operator to do it. The reason is that every time you join()
+
operator, a new string is created. So if you only have tojoin()
once, versus using +
hundreds of times, you’ll run faster.join()
approach, you’ll have to have all+
. So there’s a tradeoff.+
+
is fast enough for this case, it might not be worth the time tojoin()
.help
?q
for “quit”.py
python
or python3
.shell
python --version
CTRL-D
. This is the way End-Of-File is signified in Unix-likes.pipenv
after that.python
list(range(5))
python
[0, 1, 2, 3, 4]
var
in JavaScript.python
x = SomethingFalsey or 5
lambda
for simple functions:python
adder = lambda x, y: x + y
adder(4, 5) # 9
do_some_math(4, 5, lambda x, y: y - x)
[]
notation to access elements. And you must use "
around the key names.__init__()
is the constructor for objects__str__()
returns a string representation of the object
__repr__()
returns a string representation of the object, for debuggingpython
d = {
"a": 2,
"b": 3
}
print(d["a"])
pipenv shell
puts you into your work environment. When you’re ready to work, or run the code, or install new dependencies, you should be in your pipenv shell.exit
.shell
pipenv install packagename
python
class Foo():
pass
f = Foo()
Foo.x = 12 # Dynamically add property to class
f.x == 12 # True!
def a_method(self):
print("Hi")
Foo.hi = a_method # Dynamically add method to class
f.hi() # Prints "Hi"
python
class Base1:
pass
class Base2:
pass
class Derived(Base1, Base2): # Multiple inheritance
pass
dict
keys.__repr__
is the string a dev would want to see if they__str__
is the string a user would want to seeprint()
ed.__repr__
should be valid Python code that can reproduce thepython
class Goat:
def __init__(self, leg_count):
self.leg_count = leg_count
def __repr__(self):
return f'Goat(leg_count={self.leg_count})'
def __str__(self):
return f'a goat with {self.leg_count} legs'
python
>>> g = Goat(4)
>>> str(g)
'a goat with 4 legs'
>>> g
Goat(leg_count=4)
>>> Goat(leg_count=4) # output of __repr__ makes a clone of that object!
Goat(leg_count=4)
sys.argv
work?python
import sys
for i in range(len(sys.argv)):
print(f'Argument #{i} is: {sys.argv[i]}')
foo.py
:screen
$ python foo.py
Argument #0 is: foo.py
screen
$ python foo.py antelope buffalo
Argument #0 is: foo.py
Argument #1 is: antelope
Argument #2 is: buffalo
python
import sys
for i in range(int(sys.argv[1])):
print(i+1)
screen
$ python foo.py 2
1
2
screen
$ python foo.py 4
1
2
3
4
extend()
.python
a = [1, 2, 3]
b = [4, 5, 6]
a.extend(b)
print(a) # [ 1, 2, 3, 4, 5, 6 ]
push()
? In any case, we’ll call the function here that does that.”append()
in Python, but being honest and describing what it ispython3 --version
in your terminal and ensuring that it returns a version string that is at least 3.6.5.src/
directory presents exercises revolving around ahello
— Hello world
bignum
— Print some big numbersdatatypes
— Experiment with type conversion
modules
— Learn to import from modulesprinting
— Formatted print output
lists
— Python’s version of arraystuples
— Immutable lists typically for heterogenous data
slices
— Accessing parts of listscomprehensions
— List comprehensions
dictionaries
— Dictionariesfunctions
— Functions
args
— Arguments and Keyword Argumentsscopes
— Global, Local, and Non-Local scope
file_io
— Read and write from filescal
— Experiment with module imports and implement a text-based calendar
classes
— Classes and objectsRoom
objects, total. (There are more in the game, obviously, but in this diagram, there are 2.)room['foyer']
room['outside'].n_to
player.location
room['outside']
room['foyer'].s_to
room['outside'] -> Room("Outside Cave Entrance")
^
|
room['foyer'].s_to
room['foyer'] -> Room("Foyer") <- player.location
^
|
room['outside'].n_to
s
to go south, we could set:player.location = room['foyer'].s_to # we were in the foyer, then went south
player.location
|
v
room['outside'] -> Room("Outside Cave Entrance")
^
|
room['foyer'].s_to
room['foyer'] -> Room("Foyer")
^
|
room['outside'].n_to
adv.py
which allows the program to receive player input and commands to move to roomsplayer.py
and room.py
get [ITEM_NAME]
and drop [ITEM_NAME]
commands to the parser/src
directory contains the files adv.py
, which is where the main logic for the game should live, room.py
, which will contain the definition of the Room class, and player.py
, which will contain the definition of the Player class.
Add a REPL parser to adv.py
that accepts directional commands to move the playern
, s
, e
and w
which move the player North, South, East or Westroom.py
based on what you see in adv.py
.name
and description
attributes.
The room should also have n_to
, s_to
, e_to
, and w_to
attributesplayer.py
.
Players should have a name
and current_room
attributesitem.py
and add an Item
class in there.
The item should have name
and description
attributes.Room
class should be extended with a list
that holds the Item
sItem
s to the player’s inventory. The inventory canlist
of items “in” the player, similar to how Item
s can be in aRoom
.verb
verb
object
get
followed by an Item
name. This will beItem
s.
If the user enters get
or take
followed by an Item
name, look at theRoom
to see if the item is there.Room
contents, and add it to thePlayer
contents.
If it’s not there, print an error message telling the user so.on_take
method to Item
.
Call this method when the Item
is picked up by the player.on_take
should print out “You have picked up [NAME]” when you pick up an item.
The Item
can use this to run additional code when it is picked up.on_drop
method to Item
. Implement it similar to on_take
.
Implement support for the verb drop
followed by an Item
name. This is theget
/take
.i
and inventory
commands that both show a list of items currentlyItem
called LightSource
.
During world creation, add a lamp
LightSource
to a convenient Room
.on_drop
in LightSource
that tells the player “It’s not wise toRoom
called is_light
that is True
if the Room
isFalse
if a LightSource
is required to see whatRoom
(i.e. ifis_light
is True
or there is a LightSource
item in the Room
‘sLightSource
item in the Player
‘s contents).
If there is light in the room, display name, description, and contents asisinstance
might help you figure out if there’s a LightSource
Item
s.get
/take
code to print “Good luck finding that in the dark!” ifItem
in the dark.
Add methods to notify items when they are picked up or droppedItem
mentioned and substitute that if the user typestake sword
drop it
Add Item
s with adjectives, like “rusty sword” and “silver sword”.on_take
to check the return value. If on_take
False
, then don’t continue picking up the object. (I.e. prevent theon_take
to code things like “don’t allowattack
verb that allows you to specify a monster to attack.on_attack
method to the monster class.
Similar to the on_take
return value modification, above, have on_attack
sword
item.runtests.sh: $'\r': command not found
or Syntax error: word unexpected (expecting "do")
runtests.sh: 3: 56059 Segmentation fault: 11 $VALGRIND
malformed object
error when running make tests
struct
comparable to something in Python or JS? Is it like a class?" and "
int x"?](#whats-the-difference-between-int-x-and-int-x)
- [What does the "implicit declaration of function" warning mean?](#what-does-the-implicit-declaration-of-function-warning-mean)
- [What's the difference between
puts(),
fprintf(), and
printf()?](#whats-the-difference-between-puts-fprintf-and-printf)
- [Why does
025 == 21?](#why-does-025--21)
- [What is the "true dev workflow" in C?](#what-is-the-true-dev-workflow-in-c)
- [Does C have garbage collection?](#does-c-have-garbage-collection)
- [Why is C code faster than other languages?](#why-is-c-code-faster-than-other-languages)
- [What is a segmentation fault and how do I stop it?](#what-is-a-segmentation-fault-and-how-do-i-stop-it)
- [What happens if my program exits but I forgot to
free()some memory I allocated?](#what-happens-if-my-program-exits-but-i-forgot-to-free-some-memory-i-allocated)
- [What's the difference between a
floatand a
double, or between an
intand a
long?](#whats-the-difference-between-a-float-and-a-double-or-between-an-int-and-a-long)
- [Can you use
+to concatenate two strings?](#can-you-use--to-concatenate-two-strings)
- [Are variables automatically initialized to zero when I declare them?](#are-variables-automatically-initialized-to-zero-when-i-declare-them)
- [What type should I use to hold numbers bigger than an
intcan hold?](#what-type-should-i-use-to-hold-numbers-bigger-than-an-int-can-hold)
- [What VS Code plugins are good for C development?](#what-vs-code-plugins-are-good-for-c-development)
- [What are some additional C resources?](#what-are-some-additional-c-resources)
- [How do I get the debugger working?](#how-do-i-get-the-debugger-working)
- [How do I print a pointer with
printf?](#how-do-i-print-a-pointer-with-printf)
- [Does C have closures?](#does-c-have-closures)
- [If I look at an uninitialized variable, will the garbage in it ever be leftover data from another process?](#if-i-look-at-an-uninitialized-variable-will-the-garbage-in-it-ever-be-leftover-data-from-another-process)
- [How many levels of indirection can you have with pointers?
int**?](#how-many-levels-of-indirection-can-you-have-with-pointers-int)
- [What's the
incompatible integer to pointer conversionerror?](#whats-the-incompatible-integer-to-pointer-conversion-error)
- [Are there any other ways besides
malloc()to store things on the heap?](#are-there-any-other-ways-besides-malloc-to-store-things-on-the-heap)
- [For string literals like
“Hello”, are those stored on the stack or heap?](#for-string-literals-like-hello-are-those-stored-on-the-stack-or-heap)
- [Is the C stack like the stack data structure?](#is-the-c-stack-like-the-stack-data-structure)
- [Is the C heap like a binary heap data structure?](#is-the-c-heap-like-a-binary-heap-data-structure)
- [What are
stdin,
stdout, and
stderr?](#what-are-stdin-stdout-and-stderr)
- [How do I know which header files to
#includefor any particular function?](#how-do-i-know-which-header-files-to-include-for-any-particular-function)
- [When do I have to explicitly cast a type to another type?](#when-do-i-have-to-explicitly-cast-a-type-to-another-type)
- [Is
realloc()the same as calling
malloc(), copying the data over, then calling
free()on the original pointer?](#is-realloc-the-same-as-calling-malloc-copying-the-data-over-then-calling-free-on-the-original-pointer)
- [What happens if I
free()a
NULLpointer?](#what-happens-if-i-free-a-null-pointer)
- [What are bits, bytes, kilobytes, megabytes, and all that?](#what-are-bits-bytes-kilobytes-megabytes-and-all-that)
- [In C, can we assume an
intis 32 bits?](#in-c-can-we-assume-an-int-is-32-bits)
- [What's the difference between
#includewith double quotes and
#includewith angle brackets?](#whats-the-difference-between-include-with-double-quotes-and-include-with-angle-brackets)
- [Should I declare a pointer to a thing, or just declare the thing?](#should-i-declare-a-pointer-to-a-thing-or-just-declare-the-thing)
- [Is there a difference between
exit()and
return?](#is-there-a-difference-between-exit-and-return)
- [Why does
strcmp()return
0when strings match? Since
0means "false" in C, that seems backwards.](#why-does-strcmp-return-0-when-strings-match-since-0-means-false-in-c-that-seems-backwards)
- [What is "undefined behavior" in C?](#what-is-undefined-behavior-in-c)
- [When you free a pointer, does it get set to
NULLautomatically?](#when-you-free-a-pointer-does-it-get-set-to-null-automatically)
- [How do I write preprocessor macros with
#define?](#how-do-i-write-preprocessor-macros-with-define)
- [What is an
undefined symbollinker error?](#what-is-an-undefined-symbol-linker-error)
- [How do I make my own header files and what do I put in them?](#how-do-i-make-my-own-header-files-and-what-do-i-put-in-them)
- [How do I make my own Makefile?](#how-do-i-make-my-own-makefile)
- [Why are there so many
printf()variants? How do I know which one to use?](#why-are-there-so-many-printf-variants-how-do-i-know-which-one-to-use)
- [Why is
main()always at the bottom of the file?](#why-is-main-always-at-the-bottom-of-the-file)
- [Why does
main()return
0? What does the return value mean?](#why-does-main-return-0-what-does-the-return-value-mean)
- [Do we have to have a
main()? Can there be more than one?](#do-we-have-to-have-a-main-can-there-be-more-than-one)
- [Can
main()return
void? What about
main()with no parameters?](#can-main-return-void-what-about-main-with-no-parameters)
- [Do we need a semicolon at the end of every line?](#do-we-need-a-semicolon-at-the-end-of-every-line)
- [Can a pointer point to more than one thing? What about to arrays and
struct`s?](#can-a-pointer-point-to-more-than-one-thing-what-about-to-arrays-and-structs)runtests.sh: $'\r': command not found
or Syntax error: word unexpected (expecting "do")
runtests.sh: 56059 Segmentation fault: 11 $VALGRIND
Mac: malformed object
error when running make tests
incompatible integer to pointer conversion
error?
What is an undefined symbol
linker error?puts()
, fprintf()
, and printf()
?
Why does 025 == 21
?stdin
, stdout
, and stderr
?#include
for any particular function?
What are bits, bytes, kilobytes, megabytes, and all that?#include
with double quotes and #include
with angle brackets?
Why does main()
return 0
? What does the return value mean?exit()
and return
?
What is “undefined behavior” in C?#define
?
How do I make my own header files and what do I put in them?printf()
variants? How do I know which one to use?main()
always at the bottom of the file?
Do we have to have a main()
? Can there be more than one?main()
return void
? What about main()
with no parameters?
Do we need a semicolon at the end of every line?+
to concatenate two strings?
For string literals like "Hello"
, are those stored on the stack or heap?strcmp()
return 0
when strings match? Since 0
means “false” in C, that seems backwards.struct
comparable to something in Python or JS? Is it like a class?float
and a double
, or between an int
and a long
?int
can hold?
When do I have to explicitly cast a type to another type?int
is 32 bits?" and "
int x`”?](#q1400)
How do I print a pointer with printf
?int******
?
What’s the incompatible integer to pointer conversion
error?NULL
automatically?struct
s?
If variables are stored in memory, where are pointers stored?free()
some memory I allocated?
Are there any other ways besides malloc()
to store things on the heap?realloc()
the same as calling malloc()
, copying the data over, then calling free()
on the original pointer?
What happens if I free()
a NULL
pointer?NULL
automatically?runtests.sh: $'\r': command not found
or Syntax error: word unexpected (expecting "do")
shell
Running unit tests:
: not foundtests.sh: 2: ./tests/runtests.sh:
./tests/runtests.sh: 4: ./tests/runtests.sh: Syntax error: word unexpected (expecting "do")
tests/runtests.sh
in VS Code in whatever subproject folderfizzbuzz
. Click on the lower right of the screenCRLF
. Choose LF
. Save the file. Then the error should gotr
command:shell
cd tests
cat runtests.sh | tr -d '\r' > runtests.tmp
mv runtests.tmp runtests.sh
runtests.sh
is a\r
and pukes everywhere.git config --global core.autocrlf false
runtests.sh: 3: 56059 Segmentation fault: 11 $VALGRIND
malformed object
error when running make tests
ar
and ranlib
packages being installed.sudo port selfupdate
sudo port upgrade cctools
sudo brew update
sudo brew upgrade gcc
c
void foo(int a)
{
(void)a; // Do nothing, but at least the compiler will be quiet
Segmentation fault
message which means your programstruct
comparable to something in Python or JS? Is it like a class?struct
, you can add------------------------------------------------------------------------
<a name="q700"></a>
### Can you have default parameters in the structs?
No. The best you can do is have a helper function set the defaults.
c```c
struct foo x;
foo_default(&x); // Set defaults
x.a = 99; // Override default
struct
, you can also use an initializer to set the fieldc
struct foo x = { .a = 10, .b = 20, .c = 30 };
1
s and 0
s). They don’t know whatA
is 65
.A
?c
unsigned char c = 'A';
printf("%c\n", c); // Prints "A"
printf("%d\n", c); // Prints 65
c
unsigned char c = 'A';
int x = c + 10;
printf("%d", x); // Prints 75, since 'A' == 65
'A'
, the compiler65
there. (Or 66
for 'B'
, and sounsigned char
and unsigned int
is the number ofchar
is onGe byte, and an int
unsigned char
forint
schar
s, people just use int
s.)c
int a[2000];
// "a" is a pointer to the first element in the array.
// It's the same as &(a[0]).
foo(a);
c
void foo(int *a)
c
void foo(int a[])
c
void foo(int a[1])
c
void foo(int a[2000])
c
void foo(int a[999999999])
c
void foo(int *a)
c
int foo(int x[][30]) // 30 wide
{
return x[2][4];
}
int main(void)
{
int a[10][30]; // 30 wide
foo(a);
c
struct foo my_func(void)
{
struct foo f;
f.x = 10;
return f; // Return a copy of f
}
c
struct foo *my_func(void)
{
struct foo *p = malloc(sizeof(struct foo));
p->x = 10;
return p; // Return a copy of p
}
struct
itself.struct
canreturn
a thing, a copy of that thing gets made, it isstruct
of any non-trivial size.c
struct foo *my_func(void)
{
struct foo f;
f.x = 10;
return &f; // Return a copy of a pointer to f
}
f
vaporizes as soon as the function returns (since it’sc
char c = '2'; // ASCII '2'
int v = c - '0'; // Convert into numeric value 2
printf("%d\n", v); // prints decimal 2
char
is like a small int
, and when you have a'2'
, C replaces that with the'2'
is 50
. And we want to2
. So we clearly have to subtract 48
from50 - 48 = 2
. But why the '0'
, then?'0'
| 48 |'1'
| 49 |'2'
| 50 |'3'
| 51 |'4'
| 52 |'5'
| 53 |'6'
| 54 |'7'
| 55 |'8'
| 56 |'9'
| 57 |48
from'7'
is value 55
(from the table), compute 55 - 48
and you get7
.'0'
is 48
, it’s become idiomatic in C to convert ASCII digits to'0'
from them.c
void foo(int a)
{
a = 12;
}
int main(void)
{
int x = 30;
printf("%d\n", x); // prints 30
foo(x);
printf("%d\n", x); // prints 30 again--not 12! Why?
}
foo()
wants to modify the value of x
back in main.a
. When you call a function, alla
is merely a copyx
, so modifying a
has no effect on x
.x
from foo()
, though? This is where we have to usec
void foo(int *a)
{
*a = 12; // Set the thing `a` points at to 12
}
int main(void)
{
int x = 30;
printf("%d\n", x); // prints 30
foo(&x);
printf("%d\n", x); // prints 12!
}
foo()
gets a copy of a pointer to x
. (Everything gets12
. That pointer wasx
back in main, so it changes x
‘s value to 12
.c
void alloc_ints(int *p, int count)
{
p = malloc(sizeof(int) * count); // Allocate space for ints
}
int main(void)
{
int *q = NULL;
alloc_ints(q, 10); // Alloc space for 10 ints
printf("%p\n", q); // Prints NULL still!!
q[2] = 10; // UNDEFINED BEHAVIOR, CRASH?
}
alloc_ints()
, a copy of q
is made in p
. We then assign intop
with the malloc()
, but since p
is just a copy of q
, q
is unaffected.foo()
, above.q
to alloc_ints()
so thatalloc_ints()
can modify the value of q
.q
is already a pointer! It’s an int *
! So when we take the address-of itint
**
!c
void alloc_ints(int **p, int count)
{
// Allocate space for ints, store the result in the thing that
// `p` points to, namely `q`:
*p = malloc(sizeof(int) * count);
}
int main(void)
{
int *q = NULL;
alloc_ints(&q, 10); // Alloc space for 10 ints
printf("%p\n", q); // Prints some big number, good!
q[2] = 10; // works!
}
python
class Foo:
def __init__(self, x):
self.x = x
def bar(a):
a.x = 12 # Sets `f.x` to 12--why?
a = None # Does NOT destroy `f`--why not?
f = Foo(2)
print(f.x) # Prints 2
bar(f)
print(f.x) # Prints 12--why?
f
, and we passed thatbar()
, which modified its x
property.a
is a pointer to f
.a.x
, it actually modifies f.x
.a
to None
, it doesn’t change f
at all. a
f
, not f
itself.c
#include <stdio.h>
struct foo {
int x;
};
void bar(struct foo *a)
{
a->x = 12; // Sets f.x to 12--why?
a = NULL; // Does NOT destroy `f`--why not?
}
int main(void)
{
struct foo f = { 2 };
printf("%d\n", f.x); // Prints 2
bar(&f);
printf("%d\n", f.x); // Prints 12--why?
}
a
is a pointer to f
. So we when do a->x
, we’re saying “set the x
a
points to”.a
to NULL
, it’s just modifying a
, not the thing that a
f
).int *x
“ and “int* x
“?int *x
.c
int* x, y;
c
int *x, y;
x
is type int*
, and y
is type int
. But by putting theint
, it makes it look like both x
and y
are ofint*
, when in fact only x
is.x
and y
, we must necessarily move the asteriskx
:c
int y, *x; // Also equivalent to the previous two examples
printf()
or a syscall like stat()
,#include
the header fileman
page for exactly which.c
#include <stdio.h>
int main(void)
{
foo(); // Implicit declaration warning!!
}
void foo(void)
{
printf("Foo!\n");
}
main()
calls foo()
, but the compiler hasn’t seen afoo()
yet. We can fix it by defining foo()
before main()
:c
#include <stdio.h>
// Just moved foo()'s definition before main(), that's all
void foo(void)
{
printf("Foo!\n");
}
int main(void)
{
foo(); // No problem!
}
c
#include <stdio.h>
void foo(void); // This is the prototype! It's a declaration of foo().
int main(void)
{
foo(); // No problem
}
void foo(void) // This is the definition of foo()
{
printf("Foo!\n");
}
#include
them..c
file (e.g. little helper.c
file, instead.puts()
, fprintf()
, and printf()
?puts()
simply outputs a string. It does no formatting of variables. Its onlyc
// This prints "Hello, world %d!" and then a newline:
puts("Hello, world %d!");
printf()
does formatted output of variables, and strings as well. It’s aputs()
, in that way.c
int x = 12;
// This prints "Hello, world 12!\n":
printf("Hello, world %d!\n", x);
fprintf()
is just like printf()
, except it allows you to print to an open file.c
FILE *fp = fopen("foo.txt", "w");
int x = 12;
// This writes "Hello, world 12!\n" to the file "foo.txt":
fprintf(fp, "Hello, world %d!\n", x);
stdout
(standardc
printf("Hello, world!\n");
fprintf(stdout, "Hello, world!\n"); // Same thing!
stderr
(standard error) that isc
if (argc != 2) {
fprintf(stderr, "You must specify a command line argument!\n");
exit(1);
}
025 == 21
?0
on front of a number, the compiler025
to decimal can be done like so:2*8 + 5*1 = 16 + 5 = 21
0
in front of a number in error.make
and the rest of it.malloc()
and free()
functions.)
Have the runtime automatically manage all that for you. (Garbage collection,free()
malloc()
when you’re done with them.malloc()
d data.python
program and JavaScript code with node
, for example.python
, and the Python running yourprintf
calls to figure out what the lastNULL
pointer, or an array out of bounds, or modifyingfree()
some memory I allocated?free()
it.free()
all the things youmalloc()
d, though. The OS will free it, but it’s bad style to rely on that.float
and a double
, or between an int
and a long
?double
can hold a more precise number than a float
.float
might only be precise up to 3.14159
, but a double
could hold3.1416925358979
, for example.int
might only be able to hold numbers up to 2 billion or so, butlong
could hold much larger numbers.float
or int
can do the job, use them. If+
to concatenate two strings?char*
types, and adding twochar*
s together is not a defined operation in C.strcat()
function in <string.h>
to concatenate one string ontostatic
storage class (this conceptint
can hold?unsigned int
.long
.long long
(yes, that’s a real thing).unsigned long long
.double
or long double
.printf example
, for example, will get you good results.man printf
will bring up the man
page for printf
.gdb
(GNU Debugger).Output
tab, try adding this to yourlaunch.json
:json
"externalConsole": true
vscode gdb setup macos
, substituting whatevermacos
and setting the search date range to be recent.printf
?%p
format specifier. This will print the value of the pointer (i.e.void qsort(void *base, size_t nitems, size_t size, int (*compare)(const void *, const void *))
int (*compare)(const void *, const void *)
. This is a function pointer, mainly denoted by the asterisk in front of the function name all wrapped in parentheses and followed by another set of parentheses containing a parameter signature.qsort
function, in addition to the other parameters it receives, also receives a pointer to a function that receives two const void *
s and returns an int
.qsort
, the function pointer points to a function that specifies how the comparison for the sorting should be done.int******
?.
* 1.5% (roughly) is double indirection, like
char.
* And the remaining 0.5% is the rest of it.
------------------------------------------------------------------------
<a name="q3400"></a>
### What's the
incompatible integer to pointer conversionerror?
This means you have a type mismatch in your assignment.
One side of the
=has pointer type, and the other side has integer type.
If you have a pointer in your assignment, both side of the
=must be the same
pointer type.
Maybe you meant to take the address of the right hand side? Or dereference the
right hand side?
------------------------------------------------------------------------
<a name="q3500"></a>
### Are there any other ways besides
malloc()to store things on the heap?
Short answer: no.
(We're assuming that by
malloc()we mean
malloc(),
calloc(), and
realloc().)
The longer answer is that you can make a syscall and request more RAM from the
operating system. In practice, this is very rare; people just call
malloc().
In Unix, that syscall is
brk()(or
sbrk()). The behavior of this call is a bit strange no
------------------------------------------------------------------------
<a name="q3600"></a>
### For string literals like
“Hello”, are those stored on the stack or heap?
Neither.
Consider it to be stored in such a way that it is perpetually accessible from
the entire program for the entire run and is never freed. So sort of like the
heap.
This code is just fine:
```c
char *hello(void)
{
char *s = "hello!";
return s;
}
```
sis a local variable that is set to point to the string
“hello!”, and
sis deallocated as soon as the function returns. But the data
spoints to
(namely the
“hello!”) persists for the entire life of the program and is never
freed.
It's not actually on the heap, though. The C memory map looks like this,
typically:
```
+--------------------+
| Stack |
| | |
| v |
+- - - - - - - - - - +
| |
| |
| |
+- - - - - - - - - - +
| ^ |
| | |
| Heap |
+--------------------+
| Uninitialized data |
+--------------------+
| Initialized data |
| (Read-Write) |
+--------------------+
| Initialized data |
| (Read-Only) |
+--------------------+
| Program code |
+--------------------+
```
Constant strings are found in the read-only initialized data section of memory.
If you try to write to one, your program will likely crash:
```c
char *s = "Hello!";
*s = 'B'; // segfault!
```
------------------------------------------------------------------------
<a name="q3700"></a>
### Is the C stack like the stack data structure?
Yup! It's used by C to allocate space for local variables when you call functions.
When you return from a function, all those local variables are popped off the
stack and thrown away. (Which is why local variables only last as long as the
function!)
------------------------------------------------------------------------
<a name="q3800"></a>
### Is the C heap like a binary heap data structure?
No--it's just a name collision.
Just assume the heap is a big, contiguous chunk of memory. It can be used for
whatever, but in C, it is typically managed by
malloc()and
free()so that
we don't have to worry about it.
------------------------------------------------------------------------
<a name="q3900"></a>
### What are
stdin,
stdout, and
stderr?
These are the three files that are automatically opened for a process when it is first created.
|Stream | File Name | Device |
|-----------------|:---------:|:--------:|
| Standard Input |
stdin| Keyboard |
| Standard Output |
stdout| Screen |
| Standard Error |
stderr| Screen |
stderris typically used specifically for error messages, even though it goes
to the same place as
stdout. (The idea is that you can redirect all normal
output to one place, and all error output to another place. Or suppress normal
output while allowing error output.)
------------------------------------------------------------------------
<a name="q4000"></a>
### How do I know which header files to
#includefor any particular function?
Check the man page for the function in question. It'll show it in the _Synopsis_
section.
Example for
printf()`:c
> #include <stdio.h>
>
c
> int
> printf(const char * restrict format, ...);
>
man
on the command line for a particular function, youprintf()
in section 3:shell
man 3 printf
mkdir()
syscall:shell
man 2 mkdir
c
// Print a double:
// (Floating point constants are double by default.)
printf("%lf\n", 3.14);
// Print a float:
printf("%f\n", 3.14f);
// Print a long double
printf("%Lf\n", 3.14L);
// Print a long integer:
printf("%ld\n", 99L);
// Print a long long integer:
printf("%lld\n", 99LL);
// Produce a floating result of a calculation by making sure at least
// one of the operands is a float:
float sort_of_pi = 22.0f / 7;
double double_pi = 22.0 / 7;
c
void foo(void *p)
{
// convert p to a char*
char *q = p;
// Don't need to cast return value from malloc
int *z = malloc(sizeof(int) * 100);
c
void foo(int a)
{
// Cast an unused variable to type void to suppress compiler warnings:
(void)a;
// If the compiler is warning about an unused return value:
(void)printf("Hello, world!\n");
// Cast to a char pointer to iterate over bytes of an object:
// (C99 6.3.2.3 paragraph 7 allows this.)
float f = 3.14;
unsigned char *c = (unsigned char *)&f;
for (unsigned i = 0; i < sizeof f; i++) {
printf("%02x ", c[i]);
}
printf("\n");
realloc()
the same as calling malloc()
, copying the data over, then calling free()
on the original pointer?realloc()
.realloc()
might be more efficient because in some cases it might not have torealloc()
knows there’s extra unused memory rightrealloc()
will likely not copy the data. It’llfree()
a NULL
pointer?free()
, there’s something that looksc
void free(void *ptr)
{
if (ptr == NULL) {
return;
}
free
function causes the space pointed to by ptr
to be deallocated,ptr
is a null pointer,calloc
, malloc
, or realloc
function, or if thefree
or realloc
, the behavior is1
or 0
.0b0000
to 0b1111
(binary0
to 15
in decimal.0b00000000
to 0b11111111
,0
to 255
decimal. (Historically, bytes could be other numbers of bits,int
is 32 bits?int
is at least 16 bits (2 bytes).sizeof(char)
will always be1
byte. (Same for unsigned char
and signed char
.)char
. Always use sizeof
to get the size.#include
with double quotes and #include
with angle brackets?<stdio.h>
.#include "foo.h"
, it looks for foo.h
in the same directory as thec
#include "../bar.h"
#include "somedir/baz.h"
#include <frotz.h>
, it looks in the system include directories for/usr/include
directory, but it depends onint
:c
int *p;
int
there. We have an int
pointer, but it’s uninitialized, so itc
int a = 12; // here's an existing thing
c
int *p = &a; // and there's a pointer to it
exit()
and return
?main()
function, then no.exit()
always exits the running process, no matter where you call it from.main()
, return
also exits the running process.return
just returns from that function.strcmp()
return 0
when strings match? Since 0
means “false” in C, that seems backwards.strcmp()
returns the difference between two strings. If the strings are thestrcmp()
a little extra power over just returning a booleanc
strcmp("Antelope", "Buffalo");
qsort()
function.free()
d.
Freeing memory more than once.NULL
pointer.
Returning a pointer to a local variable and dereferencing that.-Wall -Wextra
should warn on a lot of these. This is why it’sNULL
automatically?free()
can’t do that even if it wanted to.c
int *p = malloc(100 * sizeof(int));
free(p);
free()
, it gets a copy of the pointer we pass in. (Allfree()
could set its copy of p
to NULL
, but that doesn’t affect ourp
.p
remains whatever value was in it until we set it to something else.c
int *p = malloc(100 * sizeof(int));
free(p);
p = NULL; // NOW p is NULL
free()
d it. But it’s still OK to change that pointer’s value.)#define
?#define
like this:c
#define antelopes 10
int main(void)
{
printf("Antelopes: %d\n", antelopes); // prints 10
c
int main(void)
{
printf("Antelopes: %d\n", 10); // prints 10
#define
.#define
macros can also accept parameters that make them behave likec
#define square(x) x * x // Not quite Right. See below.
int main(void)
{
printf("9 squared is %d\n", square(9));
c
int main(void)
{
printf("9 squared is %d\n", 9 * 9);
c
#define square(x) x * x // Not quite Right. See below.
int main(void)
{
printf("3 + 2 squared is %d\n", square(3 + 2));
c
int main(void)
{
printf("3 + 2 squared is %d\n", 3 + 2 * 3 + 2);
11
, when it should print 25
(3 + 2 is 5, and 5 squared isc
3 + 2 * 3 + 2
c
(3 + 2) * (3 + 2)
c
#define square(x) ((x) * (x))
c
((3 + 2) * (3 + 2))
undefined symbol
linker error?one.c
and two.c
, and one callsgcc -Wall -Wextra -o myexe one.c two.c
Makefile
present? If so, the author of the softwaremake
printf()
, for example.foo.o
. .o
is the extension for object files on Unix, or .obj
infoobaz()
, but the linker can’t findUndefined symbols for architecture x86_64:
"_foobaz", referenced from:
_main in foo-133c47.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
foobaz()
is defined in, and make sure.c
file and you want to be able to use functions, #define
s, or.h
file) to hold the function prototypes, #define
s, and references to anyc
// square.c
long square(long x)
{
return x * x;
}
square()
from a different file, you need a way for thatsquare()
function declaration so the compiler can check to.h
file:c
// square.h
#ifndef SQUARE_H // Prevent multiple #includes
#define SQUARE_H
// Function prototypes
extern long square(long x);
#endif
#ifndef SQUARE_H
is called the guard macro, and is there to prevent the#ifndef
meansSQUARE_H
is acting as a boolean that gets set theFILENAME_H
, but could be anything as long as it’s unique inextern
indicates to the compiler that the function in question isextern
#include
that from somewhere else. Use#include
to indicate that the compiler should look in thec
#include "square.h"
int main(void)
{
int x = square(5);
.c
files on the command line:gcc -Wall -Wextra -o main main.c square.c
Missing separator
error when you try to make
.make
myexecutable: mysource1.c mysource2.c
gcc -Wall -Wextra -o myexecutable mysource1.c mysource2.c
mysource1.c
or mysource2.c
are newer than myexecutable
, then run themyexecutable
has been created.myexecutable
depends on mysource1.c
and mysource2.c
. Ifmyexecutable
must be rebuilt.make
myexecutable: mysource1.c mysource2.c
gcc -Wall -Wextra -o $@ $^
$@
is a make macro that means “substitute whatever is left of the :
rightmyexecutable
).$^
is a make macro that means “substitute whatever is to the right of the :
mysource1.c mysource2.c
).make
SRCS=mysource1.c mysource2.c
TARGET=myexecutable
$(TARGET): $(SRCS)
gcc -Wall -Wextra -o $@ $^
make
target1: source1.c
gcc -Wall -Wextra -o $@ $^
target2: source2.c
gcc -Wall -Wextra -o $@ $^
make
, it will build the first target in the file by default. Amake
, i.e. a file to the left of:
. You can also make specific targets by specifying them on the command line:shell
$ make target1
gcc -Wall -Wextra -o target1 source1.c
$ make target2
gcc -Wall -Wextra -o target2 source2.c
all
bymake
# Recipe `all` depends on `target1` and `target2`:
all: target1 target2
target1: source1.c
gcc -Wall -Wextra -o $@ $^
target2: source2.c
gcc -Wall -Wextra -o $@ $^
.PHONY: all
.PHONY: all
line is a GNU make extension that indicates that all
is notall
is not a file; it’s just recipe we’re using to get all targets to build byprintf()
variants? How do I know which one to use?printf()
, except instead of to the screen, it prints to x,” then you look inprintf()
variant that suits your needs.printf()
: stock, no frills.fprintf()
: “file printf”; print to a specified `FILEinstead of to
stdout.
*
sprintf(): "string printf"; print to a string instead of to
stdout.
*
snprintf(): "string printf, with a limited count"; print to a string instead
of to
stdout, and also specify the maximum number of characters that
snprintf()is allowed to store in the buffer. This is good to protect
against buffer overruns, and there's a valid argument that you should _never_
use
sprintf(), preferring
snprintf()instead.
*
vprintf(): "variadic printf"; anything that starts with a
vin
printfland has to do with [variadic
functions](https://www.gnu.org/software/libc/manual/html_node/Variadic-Functions.html),
i.e. functions with argument lists of variable lengths. These are out of scope
at Lambda.
* etc.
------------------------------------------------------------------------
<a name="q5700"></a>
### Why is
main()always at the bottom of the file?
C has the feature that you have to _declare_ a function before you can use it.
So any functions
main()needs have to be declared before
main(), which means
"above" it in the file.
You can also declare functions with _prototypes_ and then put the definition of
main()before the definition of the other functions.
It's more common for C devs to put
main()at the bottom of the file that
contains it, and C devs expect it that way, but it's not wrong or frowned upon
to use prototypes to put it at the top instead.
------------------------------------------------------------------------
<a name="q5800"></a>
### Why does
main()return
0? What does the return value mean?
It doesn't _have_ to. The return value from
main()is the _exit status_ of the
process. This is passed back to the program that first launched your program, so
it can do different things based on the exit status of your program.
Think of it like a way for an exiting program to pass a small piece of
information (an integer) back to the program that spawned it.
0by convention means "success". Non-zero means "failure". The idea there is
that there's typically only one way for a program to succeed, but many ways for
it to fail, and you can communicate those different ways with different exit
codes.
Note that you can also use the
exit()call, passing an exit status code to it
as an argument. Using
returnin
main()is equivalent to calling
exit().
In bash, you can look at the exit status of the previous command by
echoing
the
$?shell variable. In the following example, we use
grepincorrectly,
and it exits with status
2to indicate that. Whereas we use
lscorrectly,
and it exits with successful status
0:
```shell
$ grep
usage: grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A num] [-B num] [-C[num]]
[-e pattern] [-f file] [--binary-files=value] [--color=when]
[--context[=num]] [--directories=action] [--label] [--line-buffered]
[--null] [pattern] [file ...]
$ echo $?
2
$ ls -d .
.
$ echo $?
0
```
At the OS level,
fork()is used to create a new process, and
wait()is used
to get the exit status back from that process.
------------------------------------------------------------------------
<a name="q5900"></a>
### Do we have to have a
main()? Can there be more than one?
Only if you want to have a program that you can run. When you first launch a
program, it looks for a function called
main.
There can only be one
main()in a program. (There can only be one of any
function, for that matter.)
It could be that individual files don't have a
main()in them, but when the
whole project it built,
main()is brought in from another source file.
Also, there's a thing called a
[library](https://en.wikipedia.org/wiki/Library_(computing)) which is a
collection of functionality that your program makes use of, but doesn't have a
main(), itself. Your program has the
main(), and it just _calls_ routines
that are in the library.
[The C Standard Library](https://en.wikipedia.org/wiki/C_standard_library) is a
library that holds all the standard C functionality (e.g.
printf(),
sqrt(),
etc.) but doesn't have a
main()of its own. Other programs simply use the
library.
------------------------------------------------------------------------
<a name="q6000"></a>
### Can
main()return
void? What about
main()with no parameters?
No. The function signature for
main()` must be one of the following:Note that the second two are equivalent. Use the first form if you don't need to
process command line arguments.
Historically, these were also equivalent, but the second form is now obsolete:
c------------------------------------------------------------------------
<a name="q6100"></a>
### Do we need a semicolon at the end of every line?
Yes.
Or, more technically, at the end of every statement or expression.
C won't fill them in automatically like JavaScript will.
------------------------------------------------------------------------
<a name="q6200"></a>
### Can a pointer point to more than one thing? What about to arrays and `struct`s?
A pointer is a memory address. A single memory address, a single index number
into your memory array.
As such, it can only point to a single byte in memory.
For single-byte and multi-byte entities, the pointer _always points to the first
first byte of that entity_.
If you have an `int` made up of 4 bytes, a pointer to that `int` points to the
address in memory of the first byte of that `int`.
If you have a `struct`, it points to the first byte of that `struct`.
If you have an array of a zillion `struct`s, it points to the first byte of the
0th `struct` in that array.
------------------------------------------------------------------------
<a name="q6300"></a>
### If variables are stored in memory, where are pointers stored?
Pointers themselves are variables.
Variables are stored in memory.
Therefore pointers are also stored in memory.
Remember that a pointer is just an index into memory. It's just a number; in
fact it's an integer number. We can store integer numbers in memory without a
hassle.
The only difference between a pointer and an integer is that you can dereference
the pointer to see what it's pointing to. You can't dereference an integer. In
memory, they're both just stored as numbers.
------------------------------------------------------------------------
</details><details> <summary>1-projects/Intro-to-C-master/fizzbuzz/</summary>
### [1-projects/Intro-to-C-master/fizzbuzz/README.md](1-projects/Intro-to-C-master/fizzbuzz/README.md)
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)*
- [Functions in C](#functions-in-c)
- [Implementing fizzbuzz](#implementing-fizzbuzz)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
# Functions in C
Functions in C are not much different from functions in JavaScript. Probably the most notable difference, at least from a syntactic point of view, is that you need to specify types on all your variables and input parameters, along with needing to specify the return type of the function. Remember, C is a _strongly_ typed language, as opposed to JavaScript which is a _loosely_ typed language where types are entirely inferred by the interpreter. The C compiler ensures that you specify your types and that your code is consistent with the types you specify.
Here is a non-comprehensive list of C data types: [https://codeforwin.org/2015/05/list-of-all-format-specifiers-in-c-programming.html](https://codeforwin.org/2015/05/list-of-all-format-specifiers-in-c-programming.html)
To reiterate, you might declare a function in C like this:
cThis function signature states that it receives two integer parameters and returns an integer.
Here's another example:
cThis function signature states that it receives a single integer array and doesn't return anything. You'll often see this kind of function signature when you want the function to simply mutate the input and/or print the contents of the input.
For printing output, you'll want to use the `printf` function, which is included in the `stdlib` library.
## Implementing fizzbuzz
Your first task is going to be writing good ol' fizzbuzz in C! Your `fizzbuzz` function should receive some integer n, then loop up till n, printing out "Fizz" if the current iteration i is divisible by 3, "Buzz" if it's divisible by 5, or "FizzBuzz" if it is divisible by both 3 and 5. Additionally, for each iteration where nothing is printed, your function should increment a counter and return the result of that counter at the end of its execution.
Navigate to the `fizzbuzz.c` file. You'll write your code in there. When you want to test it, type `make tests` into your terminal (make sure you're doing this from the directory where the `Makefile` is located), which will run the `Makefile` and compile your program and, if the compilation was successful, run the tests for it as well.
</details><details> <summary>1-projects/Intro-to-C-master/hangman/</summary>
### [1-projects/Intro-to-C-master/hangman/README.md](1-projects/Intro-to-C-master/hangman/README.md)
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)*
- [Hangman](#hangman)
- [Objective](#objective)
- [How your Program Should Work](#how-your-program-should-work)
- [How to Tackle the Problem](#how-to-tackle-the-problem)
- [Rules of Hangman](#rules-of-hangman)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
# Hangman
## Objective
Write a program that allows you play a game of Hangman. All of your code can be written in the `hangman.c` file.
## How your Program Should Work
The main loop of the program prints the current state of the game and then waits for input from the player. When the player types in input (either a single letter guess or a word guess), the game checks if the letter is one that is in the target word or if the word guess matches the target word. If the guess is correct, the game state updates accordingly by revealing the guess as part of the target word. If the guess is incorrect, the game state updates accordingly by showing that letter in the 'incorrect guesses' list and adding another limb to the hangman drawing.
You'll compile your program with
This will create an executable called `hangman` that you'll execute with the command `./hangman` once you've successfully compiled the program.
For this implementation, your program should receive a single word parameter; that will be the word that the player is trying to guess. So running your program might look like this
This will start the game loop, which will then continue running until the player wins, the player loses, or the player exits the game.
## How to Tackle the Problem
This problem can be broken down into many subproblems. Each subproblem can be further broken down into chunks that you can think about how to implement in code. These include, but are not limited to, the following:
- [ ] Reading input from the user and recording it properly
- [ ] Figuring out how to parse command line arguments
- [ ] Properly recording game state
- [ ] Keeping track of all letters/words that have been inputted
- [ ] Recording the incorrect guesses
- [ ] Printing the proper UI given the game's current state
- [ ] Implementing the ability to accept both single letter guesses as well as entire word guesses
- [ ] Having the game UI respond appropriately when a player makes a correct / incorrect guess
- [ ] Adding the ability for the user to exit the game by typing in the proper keyword
## Rules of Hangman
Just in case you happen to be someone who _doesn't_ know the rules of Hangman, we'll list them here.
The game has you guess a word. You're given 8 strikes. If you guess an incorrect letter (that you haven't already guessed before), or take a stab at guessing the entire word and don't get the correct word, that's one strike. The game keeps track of each letter that you've guessed. You win the game when you guess the correct word.
</details><details> <summary>1-projects/Intro-to-C-master/malloc/</summary>
### [1-projects/Intro-to-C-master/malloc/README.md](1-projects/Intro-to-C-master/malloc/README.md)
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)*
- [Dynamic Memory](#dynamic-memory)
- [Working with Void Pointers Directly](#working-with-void-pointers-directly)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
# Dynamic Memory
Remember that a few modules ago when we were talking about arrays in C being entirely static? That's a pretty big limitation since we're forced to know up front what kind of data we want to store in the array and how much data there is before we can fit it into an array. We aren't psychics here. How do we get around this?
The answer to that is the `malloc` function. Its signature is this:
c``
A
size_ttype is nothing more than a really large int for representing large sizes. The other thing to note is that the
mallocfunction returns a
voidpointer. The
voidtype simply means the type could be anything; essentially, we don't know the type up front. So
mallocreturns us a pointer of unspecified type that points to a chunk of memory with the specified size.
Well, if there's this
voidtype, what's to stop us from just declaring everything as a
voidtype? The drawback to the
voidtype is that the compiler then can't infer much of anything about the data that a void pointer points to. It can't determine how much data a
voidpointer is pointing to, plus
void` pointers cannot be dereferenced until they are _cast (their type is changed) to a known type. Basically, it won’t be able to provide us nearly as many compile-time protections as it can if we have all of our types declared. The moral of the story is that the void
type should only be used when you actually do not know the type of the data up front. malloc
returning a void
pointer is a great use-case for this.malloc
calls:``
The first
malloccall allocates enough space for 100 ints. The
malloccall initially returns a
void` pointer, but it then gets _cast to an int
pointer on the left-hand side. You’ll also note that we’re using the sizeof
operator in order to find the size of an individual integer, and then multiplying by the number of integers we’re looking to store in order to get the total amount of memory we need. We have to do this because integers are not stored in a single byte, and integer sizes may fluctuate from platform to platform.malloc
call, you’ll see we don’t do that. We’re still performing the cast to a char
pointer, but there’s no call to the sizeof
operator. This is because char
s each fit within a single byte, so 51 bytes will hold 51 char
s, which is exactly what we want. Once we have a pointer to the malloc
‘d memory, we can work with it exactly how we’ve been working with pointers.malloc
‘d memory, which still isn’t all that helpful since that’s still a hefty limitation. There exist other library functions, such as realloc
, which can receive a pointer to malloc
d memory and then resize that chunk of memory, but for this module we’re just going to stick with malloc
.malloc
in the next module.malloc
call isn’t the only time we’ll need to deal with void pointers. Sometimes we’ll need to explicitly cast a void pointer that’s already referring some data, unlike the chunk of memory we’re getting back from malloc
call, which starts off empty and uninitialized.c
void foo(void *a, void *b);
foo
takes two void pointers, which will contain some data of a certain type, but foo
either doesn’t know what those types are or doesn’t care. If we want to do something with these two void pointers though, we’ll have to explicitly cast them to some actual type we can work with. We can do that like this:c
char *cast_a = (char *) a;
char *cast_b = (char *) b;
foo
function.char *
s here because the char
type is guaranteed by the C specification to be one byte each. This is desirable because it’s the most granular type we can pick. If we’re going to be touching some memory and not treating as the type that it actually is, then to avoid any sort of memory corruption, we want to be as granular as possible when handling that underlying data, hence the usage or chars and not some other type.reverse_string
function you wrote in the strings
module:c
char *reverse_string(char s[])
{
...
}
char *
that is in the spot where the return type of the function usually goes is saying that this function will return a pointer to an array of characters.sizeof
operator allows us to find the size of something in bytes. Let’s say for example we had the following array:c
int integers[] = { 9, 49, 1, 6, 10, 15 };
sizeof(integers)
gets us the total amount of data in the array. Then let’s say we had a pointer to the same chunk of data:c
int *pointer_to_integers = integers;
integers
and a pointer called pointer_to_integers
that points to the same spot in memory where the integers
array is stored. If we were to call sizeof(pointer_to_integers)
, we would actually get back the size of the pointer, not the size of the data it’s pointing to.c
/* Declaring two ints x and y, and an int array z */
int x = 1, y = 2, z[10];
int *ip; /* ip is a pointer to an int */
ip = &x; /* ip now points to x */
y = *ip; /* y is now 1 */
*ip = 0; /* x is now 0 */
ip = &z[0]; /* ip now points to z[0] */
ip = &x;
, we see the &
operator. This means we’re grabbing the address of the variable x
, or in other words, we’re asking for the address where the value of x
(1
in this case) is being stored. We do this because ip
is a pointer, which stores an address, not a value. If we did ip = x;
, that would be saying “store the value of the variable x in the variable ip
“, which would not compile since we’ve declared ip
to be an integer pointer, not an integer value.y = *ip
, note that when we use the *
operator not in a declaration, it signifies that we’re want to grab the value of the operand. So we’re saying “set the variable y
to be the value of the pointer ip
“. Again, since ip
is a pointer, it stores an address. When we prepend the *
operator in front of a pointer, we’re asking for the value that that pointer points to. Put another way, we’re indexing into the giant array of memory that is our computer and asking for the value at the given index.*ip = 0;
. Here we’re setting the value that ip
points at to be 0. Before this, ip
pointed to whatever x
‘s value was, because of the line ip = &x;
. So now that we changed the value at some address, any other variables or pointers that also referenced that same address also got changed! If we were to print out the value of the x
variable now, it would be 0
!ip = &z[0];
, which declaring that ip
now points to the first element of the z
array. Again, we use the &
operator in order to grab the address, not the value, of z[0]
, since ip
is a pointer that stores an address.javascript
const someArray = [];
for (let i = 0; i < array.length; i++) {
someArray[i] = array[i + 1];
}
c
char *str = "Some string";
c
while (*str != '\0') {
printf("%c", *str);
str++;
}
*str
points to the first character in the string, S
. Then, on the next iteration, it gets incremented and then prints out o
. This keeps going until the pointer points to the null character, which terminates the loop.reverse_string
function from the last module to use pointers instead of allocating additional memory for the reversed string. This has the added benefit of performing the reverse in-place.c
void *reverse_string(char *s)
{
char temp;
int n = string_length(s);
for (int i = 0; i < n/2; i++) {
temp = s[i];
s[i] = s[n-i-1];
s[n-i-1] = temp;
}
}
python
def quicksort(alist, begin=0, end=None):
if end is None:
end = len(alist) - 1
if begin < end:
pivot = partition(alist, begin, end)
quicksort(alist, begin, pivot-1)
quicksort(alist, pivot+1, end)
def partition(alist, begin, end):
pivot = begin
for i in range(begin+1, end+1):
if alist[i] <= alist[begin]:
pivot += 1
alist[i], alist[pivot] = alist[pivot], alist[i]
alist[pivot], alist[begin] = alist[begin], alist[pivot]
return pivot
swap
that you implemented earlier in the sprint has been included in this directory in the lib.h
header file though, so you can use it here to swap values within an array in-place. Another Python language feature that you can’t replicate in C are the default function parameters.quicksort.c
file. Implement your quicksort algorithm, then type make tests
to check if you have all the tests passing.make tests
(just like with the npm install
package.json
file, the make
command requires aMakefile
), which will do a couple of things as specified by the Makefile
.main
functions are for if you want to compile your filemain
functions. Just type make
to compile an executable. Then./NAME_OF_EXECUTABLE
(not in caps) to run it, which will execute the codemain
function.c
int int_array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
c
int another_int_array[20];
c
int n = 20 / sizeof(int);
for (int i = 0; i < n; i++) {
another_int_array[i] = i;
}
sizeof
operator to find out exactly how many bytes a single int
occupies on your machine, and then divide the array capacity by that to get the actual number of integers that can fit inside the array.c
char[] = "Hello world!";
c
char[] = { 'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!', '\0' };
\0
character at the end represents the null character; every C string is terminated with one of these, and in fact, if you wanted to write a function to find the number of characters in a string, you’d basically just loop through the character array and increment a counter until you found the \0
character."a"
is a string literal complete with a terminating null character at the end of it, as opposed to 'a'
which is just the individual character.typedef
Keywordc
struct Cat {
char *breed;
char *color;
int age;
};
c
struct Cat *a_cat = malloc(sizeof(struct Cat));
struct Cat
since that’s the type that is being held in this chunk of memory. We’ll also need to go and initialize the values of our Cat instance like so:c
a_cat->breed = NULL;
a_cat->color = NULL;
a_cat->age = 0;
c
a_cat->breed == (*a_cat).breed
malloc
serves. Keep in mind though that when we declare a struct, every type in the struct needs to have a known size. Looking at the Cat struct, char *
s and int
s all have a known size, so the entire size of the struct can be calculated. However, we don’t know the sizes of the data that the char *
s may be pointing to.name_cat
that will assign a Cat instance with a given input name. It might look like this:c
void name_cat(struct Cat *cat, char *name)
{
int name_length = string_length(name);
cat->name = malloc(name_length);
string_copy(cat->name, name);
}
malloc
to allocate the appropriate amount of memory to the cat->name
field, and then we can call string_copy
in order to copy each character in the input name
string to the memory that cat->name
now points to.free
after you’re done with some piece of malloc
‘d memory.free
function receives a pointer that points to a piece of malloc
‘d memory, and it deallocates it so that that memory may be re-used. As you can imagine, once some malloc
‘d memory has been free
‘d, whatever data was in that chunk of memory is gone, so make sure you’re done with the data before free
ing it!malloc
there should be an accompanying call to free
.free
ing memory are:free
on some malloc
‘d piece of memory. This is a problem because that memory doesn’t get cleaned up, and you end up with what’s called a ‘memory leak’. A single memory leak isn’t the end of the world, but if you continually forget to free
your memory, they’ll start to pile up and waste precious memory resources that could be used by other programs that actually need that memory.free
on a pointer to memory that has already been free
‘d. This is called a ‘double free’, and it should be avoided because it may corrupt the state of the memory manager (which is what keeps track of all of the pieces of memory that have been handed out so far), which might cause existing blocks of memory to get corrupted or for future allocations to fail in bizarre ways (for example, the same memory getting handed out on two different successive calls of malloc).Cat_destroy
function that will handle the cleaning up of a Cat instance for us. It’ll free all the memory that was allocated during the Cat instance’s lifetime.c
void Cat_destroy(struct Cat *cat)
{
if (cat->name != NULL) {
free(cat->name);
}
if (cat->breed != NULL) {
free(cat->breed);
}
if (cat != NULL) {
free(cat);
}
}
typedef
Keywordstruct
. That’s because struct
is part of the newly-created type’s name, and as of now, we can’t leave it out whenever we’re using one of our own artificial types. C provides the typdef
keyword which will ultimately save us some keystrokes. It will allow us to not have to prepend struct
to any of our created types. Here’s how we use it:c
typedef struct Cat {
char *breed;
char *color;
int age;
} Cat;
typedef
keyword in front of our type definition. Then, after the closing brace of our struct, we specify the aliased type we’d like for this user-created type to have. Here we’ll just keep it the same as the name of the struct itself, though you could call it something else if you wanted to.Cat
type, we don’t need to prepend struct
in front of it. The compiler now knows that when we just specify Cat
that we’re referring to our struct Cat
type definition. It’s a one-time cost that we pay when we define our types, but it’ll save us a lot of keystrokes later on, especially if we’re using our types a lot!runtests.sh: 4: Syntax error: word unexpected (expecting "do")
malformed object
error when running make tests
runtests.sh: 4: Syntax error: word unexpected (expecting "do")
Running unit tests:
: not foundtests.sh: 2: ./tests/runtests.sh:
./tests/runtests.sh: 4: ./tests/runtests.sh: Syntax error: word unexpected (expecting "do")
tests/runtests.sh
in VS Code in whatever subproject folderfizzbuzz
. Click on the lower right of the screenCRLF
. Choose LF
. Save the file. Then the error should gotr
command:cd tests
cat runtests.sh | tr -d '\r' > runtests.tmp
mv runtests.tmp runtests.sh
runtests.sh
is a\r
and pukes everywhere.git config --global core.autocrlf false
malformed object
error when running make tests
ar
and ranlib
packages being installed.sudo port selfupdate
sudo port upgrade cctools
sudo brew update
sudo brew upgrade gcc
this
keywordthis
keyword as well as getting comfortable with prototypes by building out a fantasy themed video game.<firstName-lastName>
.<firstName-lastName>
branch, committing changes regularly.
[ ] Push commits: git push origin <firstName-lastName>
.console.log()
statements, open up the index.html file found in the assignments folder and use the developer tools to view the console.this
keywordthis
works will give you a huge advantage when you start building with more advanced frameworks. Use the this.js file to traverse through a few this
problems.class
syntax.index.js
and complete the tasks until all of your tests pass.cd
into your newly cloned repository.git checkout -b <firstName-lastName>
.npm install
.npm run test:watch
.add
, remove
, and a getter for the property size
add
should accept a value and place it on top of the stack.remove
should remove and return the top value off of the stack.
size
should return how many items are on the stack.enqueue
, dequeue
, and a getter for the property size
enqueue
should add an item to the back of the queue.dequeue
should remove an item from the front of the queue.
size
should return the number of items in the queue.addToTail
, removeHead
, and contains
.
addToTail
replaces the tail with a new value that is passed in.removeHead
removes and returns the head node.
contains
should searth through the linked list and return true if a matching value is found.head
property is a reference to the first node and the tail
property is a reference to the last node. These are the only two properties that you need to keep track of an infinite number of nodes. Build your nodes with objects.insert
, remove
, and retrieve
.insert
should take a key value pair and add the value to the hash table.
retrieve
should return the value associated with a key.remove
should removed the given key’s value from the hash table.
Should properly handle collisions. If two keys map to the same index in the storage table then you should store a 2d array as the value. Make each key/value pair its own array that is nested inside of the array stored at that index on the table.hash-table.test.js
and make the hash-table rebalance. As a hash table increases in size the associated storage table will typically double in size once it reaches a certain capacity. Change the hash table so that it doubles the size of the storage table once it is 75% full.
If you used arrays as your underlying data structure for implementing stacks, queues, and hash table buckets, convert these to use linked lists instead as the underlying data structure. If you started off with linked lists, convert these to use arrays. In order to do this, you’ll need to export your linked list implementation by wrapping it inside a module.exports
. Just comment out your initial implementation; don’t delete perfectly good code!addChild
, and contains
Each node on the tree should have a value
property and a children
array.addChild(value)
should accept a value and add it to that node’s children
array.
contains(value)
should return true
if the tree or its children the given value.children
array use new Tree(value)
to create the node.
You can instantiate the Tree
class inside of itself.insert
, contains
, depthFirstForEach
, and breadthFirstForEach
.
insert(value)
inserts the new value at the correct location in the tree.contains(value)
searches the tree and returns true
if the the tree contains the specified value.
depthFirstForEach(cb)
should iterate over the tree using DFS and passes each node of the tree to the given callback function.breadthFirstForEach(cb)
should iterate over the tree using BFS and passes each node of the tree to the given callback function (hint: you’ll need to either re-implement or import a queue data structure for this).addNode
, contains
, removeNode
, addEdge
, getEdge
, and removeEdge
addNode(newNode, toNode)
should add a new item to the graph. If toNode
is given then the new node should share an edge with an existing node toNode
.
contains(value)
should return true if the graph contains the given value.removeNode(value)
should remove the specified value from the graph.
addEdge(fromNode, toNode)
should add an edge between the two specified nodes.getEdge(fromNode, toNode)
should return true
if an edge exists between the two specified graph nodes.
removeEdge(fromNode, toNode)
should remove the edge between the two specified nodes.Graph
class that searches through the graph using edges. Make this search first as a depth first search and then refactor to a breadth first search.
Read up on heaps) here. Then implement one!git checkout -b 'firstName-lastName'
yourFirstName-yourLastName
.txt. This should contain the link to your completed codepen from part 2 as well as the review questions/answersmerge conflict
is and how to resolve it.pull
, rebase
, merge
. These commands will allow you to bring in changes that other developers push to the main branch.reset
, revert
, clean
. These commands will allow you to go back and amends previous commits you have made.cd
into your project directory.
npm install
to receive your dependencies.mongod
server from your root dir or create a data
dir in this project to store your documents from mongo there. mongod --dbpath data
.models.js
you’ll see we’ve already included your Schema. You’re welcome.people.json
file, and a populateDbScript.js
. this script will grab those people
and add them into your db as long as you have your mongo server up and running.
RUN: node populateDbScript.js
get receive all your data.GET
request to /users
that simply returns all the people.
write a GET
request to /users/:direction
that takes the given string and returns back a list of sorted data alphebetically.asc
or desc
so in your .sort()
method you’ll have to conditionally check, and we are going to be sorting by user firstName
write a GET
request /user-get-friends/:id
that returns a single users’s friends.PUT
that updates a users firstName
lastName
Objects
& Arrays
Objects
& Arrays
index.js
and pass all tests specified in test/index.test.js
✅getName(character)
-> Luke Skywalker
getFilmCount(character)
-> 5getFirstStarshipName(character)
-> X-wing
getSummary(character)
-> Luke Skywalker, 172cm, 77kg. Featured in 5 films.
getVehiclesCostInCreditsSumTotal(character)
-> 8000getStarshipPassengerAndCrewSumTotal(character)
-> 27getNthFilm(character, filmNumber)
filmNumber=1 -> A New Hope
getCargoCapacityTotal(character)
-> 80124getFastestStarshipName(character)
-> X-wing
getLargestCargoStarshipModelName(character)
-> Lambda-class T-4a shuttle
getSlowestVehicleOrStarshipName(character)
-> Imperial Speeder Bike
3 options are included below.
The CodeSandbox option is fast & highly recommended.
1. Fastest Option
cd
into your newly cloned repositorynpm
sh
git clone <insert your git clone url here>
cd <repo folder name>
npm install
npm run test:watch
#####
### Or without fs watching:
# npm test
npm run test:watch
.cd
into your newly cloned repositorynpm
sh
git clone <insert your git clone url here>
cd <repo folder name>
npm install
npm start
Example data your code will be tested against.
// Complete Test Data Object (credit: https://SWAPI.co)
// Side note: Yes Star Wars 🤓 purists. It's a bit out of date. Talk to SWAPI about it.
// Focus & follow instructions above. 🤖
{
"name": "Luke Skywalker",
"height": "172",
"mass": "77",
"hair_color": "blond",
"skin_color": "fair",
"eye_color": "blue",
"birth_year": "19BBY",
"homeworld": "Tatooine",
"films": [
"A New Hope",
"The Empire Strikes Back",
"Return of the Jedi",
"Revenge of the Sith",
"The Force Awakens"
],
"species": [
"Human"
],
"vehicles": [
{
"name": "Snowspeeder",
"model": "t-47 airspeeder",
"manufacturer": "Incom corporation",
"cost_in_credits": null,
"length": "4.5",
"max_atmosphering_speed": "650",
"crew": 2,
"passengers": 0,
"cargo_capacity": "10"
},
{
"name": "Imperial Speeder Bike",
"model": "74-Z speeder bike",
"manufacturer": "Aratech Repulsor Company",
"cost_in_credits": "8000",
"length": "3",
"max_atmosphering_speed": "360",
"crew": 1,
"passengers": 1,
"cargo_capacity": "4"
}
],
"starships": [
{
"name": "X-wing",
"model": "T-65 X-wing",
"manufacturer": "Incom Corporation",
"cost_in_credits": 149999,
"length": "12.5",
"max_atmosphering_speed": "1050",
"crew": 1,
"passengers": 0,
"cargo_capacity": "110",
"consumables": "1 week",
"hyperdrive_rating": "1.0",
"MGLT": "100",
"starship_class": "Starfighter"
},
{
"name": "Imperial shuttle",
"model": "Lambda-class T-4a shuttle",
"manufacturer": "Sienar Fleet Systems",
"cost_in_credits": 240000,
"length": "20",
"max_atmosphering_speed": "850",
"crew": 6,
"passengers": 20,
"cargo_capacity": "80000",
"consumables": "2 months",
"hyperdrive_rating": "1.0",
"MGLT": "50",
"starship_class": "Armed government transport"
}
],
"created": "2014-12-09T13:50:51.644000Z",
"edited": "2014-12-20T21:17:56.891000Z",
"url": "https://swapi.co/api/people/1/"
}
Numbers
& null
)parseInt
, parseFloat
, Number
, etc.return somethingUseful
.snake_case
naming.vehicles[0].name
vs. character.vehicles
.)Table of Contents generated with DocToc
Topics:
coffee+shops+in+Austin
) you will use that query to make a request to the Place Search
service, and will specifically be doing a Text Search Request
. You will use the necessary information from the data returned from that first request, and then do a request to Place Details
service, returning the detailed information to the user of your API./place
that, provided a query, returns the detailed information about the first place that is in the array of places returned to you from Place Search
.node-fetch
library to make your requests to the Place Search
API. You can use its example code in its github repo as guidance for its use./places
that, provided a query returns the detailed information about ALL places returned to you from Place Search
.Table of Contents generated with DocToc
Topics:
coffee+shops+in+Austin
) you will use that query to make a request to the Place Search
service, and will specifically be doing a Text Search Request
. You will use the necessary information from the data returned from that first request, and then do a request to Place Details
service, returning the detailed information to the user of your API./place
that, provided a query, returns the detailed information about the first place that is in the array of places returned to you from Place Search
.node-fetch
library to make your requests to the Place Search
API. You can use its example code in its github repo as guidance for its use./places
that, provided a query returns the detailed information about ALL places returned to you from Place Search
./travel/mode
that returns the quickest method of travel given two locations, as well as the travel time. It should account for driving, walking, bicycling, and transit./place
.Table of Contents generated with DocToc
Note for Windows users: WSL won’t work for this module!
“Object-oriented programming (OOP) is a programming paradigm based on the concept of “objects”, which may contain data, in the form of fields, often known as attributes; and code, in the form of procedures, often known as methods. A feature of objects is that an object’s procedures can access and often modify the data fields of the object with which they are associated (objects have a notion of “this” or “self”). In OOP, computer programs are designed by making them out of objects that interact with one another.[1][2]” —Wikipedia
In English, this means that in OOP, code is organized in logical and self contained parts that contain within them everything needed to create, store, and manipulate one very specific element of the program. When this element is needed, a copy of it is initialized according to the instructions within. This is called an object.
As with all things programming, the specific vocabulary varies from language to language, or even programmer to programmer. Some Python vocabulary:
Class: The top level organization structure in OOP. This contains all of the instructions and storage for the operations of this part of the program. A class should be self contained and all variables within the class should only be modified by methods within the class.
Method: A function that belongs to a specific class.
Constructor: A special method, defined with init() that is used to instantiate an object of this class.
Inheritance: Perhaps the most important concept in OOP, a class may inherit from another class. This gives the child class all of the variables and methods found in the parent class, or classes, automatically.
Override: If a child class needs to function slightly differently than objects of the parent class, this can be done by giving the child class a method with the same name as one found in the parent. This method will override the one defined in the parent class. Often, this is done to add child specific functionality to the method before calling the parent version of the method using super().foo(). This is commonly done with the init() method.
Self: In Python, a class refers to class-level variables and methods with the keyword self
. These have scope across the entire class. Variables may also be declared normally and will have scope limited to the block of code they are declared within.
This project will demonstrate the core concepts of OOP by using a library called pygame to create a toy similar to early screensavers.
For initial setup, run:
pipenv install
pipenv shell
Then to run, use: python src/draw.py
Your instructor will demonstrate the above concepts by extending the Block
class
Fill out the stubs in ball.py
to extend the functionality of the ball
class.
Implement simple physics to enable balls to bounce off of one another, or off of blocks. This will be HARD. If you get it ‘sort of working’ in any form, consider yourself to have accomplished an impressive feat!
pipenv install
is taking forever or erroring with TIMEOUT messages, disable your antivirus software.pipenv install
is puking on installing pygame:pipenv
for this project. No install
, no shell
..whl
file from here.cp36
version. Python 3.7 use cp37
, etc. Use python --version
to check your version.win32
version first. If that doesn’t work, the AMD version.pygame‑1.9.3‑cp36‑cp36m‑win32.whl
You’ll need to specify the full path, likely.
pip install pygame-[whatever].whl
src/
directory with
python draw.py
InvalidMarker
:pipenv
for this project. No install
, no shell
.pip3 install pygame
src/
directory with
python3 draw.py
Table of Contents generated with DocToc
Single Page Application
Compilers
Bundlers
Elements
Components
JSX
Package Mangers
CDN
Props and State
Table of Contents generated with DocToc
We know this may seem trivial, but the best part about this assignment is that is shows off some of the strengths of React and you can also take it as far as want so don’t hold back on being creative.
npm install
will pull in all the node_modules you need once you cd
into the root directory of the projectnpm start
will start a development server on your localhost at port 3000.npm test
will run the tests that are included in the the project. Try to get as many of these passing as you can in the allotted time. Your job is to write the components to complete the Todo List application and getting as many of the tests to pass as you can. The tests are expecting that you have a TodoList component that renders a Todo component for each todo item. The requirements for your Todo List app is that it should have an input field that a user can type text into and submit data in the input field in order to create a new todo item. Aside from being able to add todos, you should be able to mark any todo in the list as ‘complete’. In other words, a user should be able to click on any of the todos in the list and have a strikethrough go through the individual todo. This behavior should be toggle-able, i.e. a todo item that has a strikethrough through it should still be clickable in order to allow completed items to no longer be marked as ‘completed’. Once you’ve finished your components, you’ll need to have the root App
component render your TodoList component.
src/components
directory.App.js
, TodoList.js
and Todo.js
(as those are the files being imported into the tests). <ElementBeingRendered key={someValue} ></ElementBeingRendered>
. Note: this is what react is doing under the hood, it needs to know how to access each element and they need to be unique so the React engine can do its thing. An example snippet that showcases this may look something like this:Here, we’re simply passing the index of each todo item as the key for the individual React component.
this.state.todos.map((todo, i) => <AnotherComponent key={i} todo={todo} ></AnotherComponent>);
todo: {'text': 'Shop for food, 'completed': false}
and when a user clicks on a todo, switch that completed flag to true. If completed === true
, this should toggle the strikethrough on the ‘completed’ todo. The toggling functionality should work the same as when each todo was just a string. App.js
has a file next to it in the directory tree called App.scss
and you define all your styles in that file. Be sure to @import these styles into the index.scss
file. window.localStorage()
hint: you may have to pass your data to a stringifier to get it to live inside the localStorage()
of the browser. This will cause it to persist past the page refresh. Table of Contents generated with DocToc
WHERE
Clause
Data stored as row records in tables. Imagine a spreadsheet with column
headers describing the contents of each column, and each row is a
record.
A database can contain many tables. A table can contain many rows. A row
can contain many columns.
Records are related to those in different tables through common columns
that are present in both tables.
For example, an Employee
table might have the following columns in
each record:
Employee
EmployeeID FirstName LastName DepartmentID
And a Department
table might have the following columns in each
record:
Department
DepartmentID DepartmentName
Notice that both Employee
and Department
have a DepartmentID
column. This common column relates the two tables and can be used to
join them together with a query.
The structure described by the table definitions is known as the
schema.
Compare to NoSQL databases that work with key/value pairs or are
document stores.
NoSQL is a term that refers to non-relational databases, most usually
document store databases. (Though it can apply to almost any kind of
non-relational database.)
MongoDB is a great example of a NoSQL database.
Unfortunately, there are no definitive rules on when to choose one or
the other.
Do you need ACID-compliance? Consider a relational database.
Does your schema (structure of data) change frequently? Consider NoSQL.
Does absolute consistency in your data matter, e.g. a bank, inventory
management system, employee management, academic records, etc.? Consider
a relational database.
Do you need easy-to-deploy high-availability? Consider NoSQL.
Do you need transactions to happen atomically? (The ability to update
multiple records simultaneously?) Consider a relational database.
Do you need read-only access to piles of data? Consider NoSQL.
PostgreSQL is a venerable relational database that is freely available
and world-class.
SQL (“sequel”) is the language that people use for interfacing with
relational databases.
A database is made up of a number of tables. Let’s create a table using
SQL in the shell. Be sure to end the command with a semicolon ;
.
(Note: SQL commands are often capitalized by convention, but can be
lowercase.)
$ psql
psql (10.1)
Type "help" for help.
dbname=> CREATE TABLE Employee (ID INT, LastName VARCHAR(20));
Use the \dt
command to show which tables exist:
dbname=> CREATE TABLE Employee (ID INT, LastName VARCHAR(20));
CREATE TABLE
dbname=> \dt
List of relations
Schema | Name | Type | Owner
--------+----------+-------+-------
public | employee | table | beej
(1 row)
Use the \d
command to see what columns a table has:
dbname=> \d Employee
Table "public.employee"
Column | Type | Collation | Nullable | Default
--------------+-----------------------+-----------+----------+---------
id | integer | | |
lastname | character varying(20) | | |
dbname=> INSERT INTO Employee (ID, LastName) VALUES (10, 'Tanngnjostr');
INSERT 0 1
You can omit the column names if you’re putting data in every column:
dbname=> INSERT INTO Employee VALUES (10, 'Tanngnjostr');
INSERT 0 1
Run some more inserts into the table:
INSERT INTO Employee VALUES (11, 'Alice');
INSERT INTO Employee VALUES (12, 'Bob');
INSERT INTO Employee VALUES (13, 'Charlie');
INSERT INTO Employee VALUES (14, 'Dave');
INSERT INTO Employee VALUES (15, 'Eve');
You can query the table with SELECT
.
Query all the rows and columnts:
dbname=> SELECT * FROM Employee;
id | lastname
----+-------------
10 | Tanngnjostr
11 | Alice
12 | Bob
13 | Charlie
14 | Dave
15 | Eve
(6 rows)
With SELECT
, *
means “all columns”.
You can choose specific columns:
dbname=> SELECT LastName FROM Employee;
lastname
-------------
Tanngnjostr
Alice
Bob
Charlie
Dave
Eve
(6 rows)
And you can search for specific rows with the WHERE
clause:
dbname=> SELECT * FROM Employee WHERE ID=12;
id | lastname
----+----------
12 | Bob
(1 row)
dbname=> SELECT * FROM Employee WHERE ID=14 OR LastName='Bob';
id | lastname
----+----------
12 | Bob
14 | Dave
(2 rows)
Finally, you can rename the output columns, if you wish:
SELECT id AS Employee ID, LastName AS Name
FROM Employee
WHERE ID=14 OR LastName='Bob';
Employee ID | Name
-------------+----------
12 | Bob
14 | Dave
The UPDATE
command can update one or many rows. Restrict which rows
are updated with a WHERE
clause.`
dbname=> UPDATE Employee SET LastName='Harvey' WHERE ID=10;
UPDATE 1
dbname=> SELECT * FROM Employee WHERE ID=10;
id | lastname
----+----------
10 | Harvey
(1 row)
You can update multiple columns at once:
dbname=> UPDATE Employee SET LastName='Octothorpe', ID=99 WHERE ID=14;
UPDATE 1
Delete from a table with the DELETE
command. Use a WHERE
clause to
restrict the delete.
CAUTION! If you don’t use a WHERE
clause, all rows will be deleted
from the table!
Delete some rows:
dbname=> DELETE FROM Employee WHERE ID >= 15;
DELETE 2
Delete ALL rows (Danger, Will Robinson!):
dbname=> DELETE FROM Employee;
DELETE 4
If you want to get rid of an entire table, use DROP
.
WARNING! There is no going back. Table will be completely blown
away. Destroyed …by the Empire.
dbname=> DROP TABLE Employee;
DROP TABLE
WHERE
ClauseYou’ve already seen some examples of how WHERE
affects SELECT
,UPDATE
, and DELETE
.
Normal operators like <
, >
, =
, <=
, >=
are available.
For example:
SELECT * from animals
WHERE age >= 10;
AND
, OR
, and ParenthesesYou can add more boolean logic with AND
, OR
, and affect precedence
with parentheses:
SELECT * from animals
WHERE age >= 10 AND type = 'goat';
SELECT * from animals
WHERE age >= 10 AND (type = 'goat' OR type = 'antelope');
LIKE
The LIKE
operator can be used to do pattern matching.
_ -- Match any single character
% -- Match any sequence of characters
To select all animals that start with ab
:
SELECT * from animal
WHERE name LIKE 'ab%';
You probably noticed a few data types we specified with CREATE TABLE
,
above. PostgreSQL has a lot of data
types.
This is an incomplete list of some of the more common types:
VARCHAR(n) -- Variable character string of max length n
BOOLEAN -- TRUE or FALSE
INTEGER -- Integer value
INT -- Same as INTEGER
DECIMAL(p,s) -- Decimal number with p digits of precision
-- and s digits right of the decimal point
REAL -- Floating point number
DATE -- Holds a date
TIME -- Holds a time
TIMESTAMP -- Holds an instant of time (date and time)
BLOB -- Binary object
These are two common database terms.
Short for Atomicity, Consistency, Isolation, Durability. When
people mention “ACID-compliance”, they’re generally talking about the
ability of the database to accurately record transactions in the case of
crash or power failure.
Atomicity: all transactions will be “all or nothing”.
Consistency: all transactions will leave the database in a consistent
state with all its defined rules and constraints.
Isonlation: the results of concurrent transactions is the same as if
those transactions had been executed sequentially.
Durability: Once a transaction is committed, it will remain committed,
despite crashes, power outages, snow, and sleet.
Short for Create, Read, Update, Delete. Describes the four basic
functions of a data store.
In a relational database, these functions are handled by INSERT
,SELECT
, UPDATE
, and DELETE
.
Columns in records can sometimes have no data, referred to by the
special keyword as NULL
. Sometimes it makes sense to have NULL
columns, and sometimes it doesn’t.
If you explicitly want to disallow NULL columns in your table, you can
create the columns with the NOT NULL
constraint:
CREATE TABLE Employee (
ID INT NOT NULL,
LastName VARCHAR(20));
You can select a count of items in question with the COUNT
operator.
For example, count the rows filtered by the WHERE
clause:
SELECT COUNT(*) FROM Animals WHERE legcount >= 4;
count
-------
5
Useful with GROUP BY
, below.
ORDER BY
which sorts SELECT
results for you. Use DESC
to sort in
reverse order.
SELECT * FROM Pets
ORDER BY age DESC;
name | age
-----------+-----
Rover | 9
Zaphod | 4
Mittens | 3
When used with an aggregating function like COUNT
, can be
used to produce groups of results.
Count all the customers in certain countries:
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country;
COUNT(CustomerID) | Country
----------------------+-----------
1123 | USA
734 | Germany
etc.
Rows in a table often have one column that is called the primary key.
The value in this column applies to all the rest of the data in the
record. For example, an EmployeeID
would be a great primary key,
assuming the rest of the record held employee information.
Employee
ID (Primary Key) LastName FirstName DepartmentID
To create a table and specify the primary key, use the NOT NULL
andPRIMARY KEY
constraints:
CREATE TABLE Employee (
ID INT NOT NULL PRIMARY KEY,
LastName VARCHAR(20),
FirstName VARCHAR(20),
DepartmentID INT);
You can always search quickly by primary key.
If a key refers to a primary key in another table, it is called a
foreign key (abbreviated “FK”). You are not allowed to make changes to
the database that would cause the foreign key to refer to a non-existent
record.
The database uses this to maintain referential integrity.
Create a foreign key using the REFERENCES
constraint. It specifies the
remote table and column the key refers to.
CREATE TABLE Department (
ID INT NOT NULL PRIMARY KEY,
Name VARCHAR(20));
CREATE TABLE Employee (
ID INT NOT NULL PRIMARY KEY,
LastName VARCHAR(20),
FirstName VARCHAR(20),
DepartmentID INT REFERENCES Department(ID));
In the above example, you cannot add a row to Employee
until thatDepartmentID
already exists in Department
‘s ID
.
Also, you cannot delete a row from Department
if that row’s ID
was aDepartmentID
in Employee
.
Keys can also consist of more than one column. Composite keys can be
created as follows:
CREATE TABLE example (
a INT,
b INT,
c INT,
PRIMARY KEY (a, c));
These are columns that the database manages, usually in an
ever-increasing sequence. It’s perfect for generation unique, numeric
IDs for primary Keys.
In some databases (e.g MySQL) this is done with an
AUTO_INCREMENT
keyword. PostgreSQL is different.
In PostgreSQL, use the SERIAL
keyword to auto-generate sequential
numeric IDs for records.
CREATE TABLE Company (
ID SERIAL PRIMARY KEY,
Name VARCHAR(20));
When you insert, do not specify the ID column. You must however,
give a column name list that includes the remaining column names you are
inserting data for. The ID column will be automatically generated by the
database.
INSERT INTO Company (Name) VALUES ('My Awesome Company');
This concept is extremely important to understanding how to use
relational databases!
When you have two (or more) tables with data you wish to retrieve from
both, you do so by using a join. These come in a number of varieties,
some of which are covered here.
When you’re using SELECT
to make the join between two tables, you can
specify the tables specific columns are from by using the .
operator.
This is especially useful when columns have the same name in the
different tables:
SELECT Animal.name, Farm.name
FROM Animal, Farm
WHERE Animal.FarmID = Farm.ID;
Tables to use in these examples:
CREATE TABLE Department (
ID INT NOT NULL PRIMARY KEY,
Name VARCHAR(20));
CREATE TABLE Employee (
ID INT NOT NULL PRIMARY KEY,
Name VARCHAR(20),
DepartmentID INT);
INSERT INTO Department VALUES (10, 'Marketing');
INSERT INTO Department VALUES (11, 'Sales');
INSERT INTO Department VALUES (12, 'Entertainment');
INSERT INTO Employee VALUES (1, 'Alice', 10);
INSERT INTO Employee VALUES (2, 'Bob', 12);
INSERT INTO Employee VALUES (3, 'Charlie', 99);
NOTE: Importantly, department ID 11 is not referred to fromEmployee
, and department ID 99 (Charlie) does not exist inDepartment
. This is instrumental in the following examples.
This is the most commonly-used join, by far, and is what people mean
when they just say “join” with no further qualifiers.
This will return only the rows that match the requirements from both
tables.
For example, we don’t see “Sales” or “Charlie” in the join because
neither of them match up to the other table:
dbname=> SELECT Employee.ID, Employee.Name, Department.Name
FROM Employee, Department
WHERE Employee.DepartmentID = Department.ID;
id | name | name
----+-------+---------------
1 | Alice | Marketing
2 | Bob | Entertainment
(2 rows)
Above, we used a WHERE
clause to perform the inner join. This is
absolutely the most common way to do it.
There is an alternative syntax, below, that is barely ever used.
dbname=> SELECT Employee.ID, Employee.Name, Department.Name
FROM Employee INNER JOIN Department
ON Employee.DepartmentID = Department.ID;
id | name | name
----+-------+---------------
1 | Alice | Marketing
2 | Bob | Entertainment
(2 rows)
This join works like an inner join, but also returns all the rows from
the “left” table (the one after the FROM
clause). It puts NULL
in for the missing values in the “right” table (the one after theLEFT JOIN
clause.)
Example:
dbname=> SELECT Employee.ID, Employee.Name, Department.Name
FROM Employee LEFT JOIN Department
ON Employee.DepartmentID = Department.ID;
id | name | name
----+---------+---------------
1 | Alice | Marketing
2 | Bob | Entertainment
3 | Charlie |
(3 rows)
Notice that even though Charlie’s department isn’t found in Department
, his record is still listed with a NULL
department name.
This join works like an inner join, but also returns all the rows from
the “right” table (the one after the RIGHT JOIN
clause). It putsNULL
in for the missing values in the “right” table (the one after theFROM
clause.)
dbname=> SELECT Employee.ID, Employee.Name, Department.Name
FROM Employee RIGHT JOIN Department
ON Employee.DepartmentID = Department.ID;
id | name | name
----+-------+---------------
1 | Alice | Marketing
2 | Bob | Entertainment
| | Sales
(3 rows)
Notice that even though there are no employees in the Sales department,
the Sales name is listed with a NULL
employee name.
This is a blend of a Left and Right Outer Join. All information from
both tables is selected, with NULL
filling the gaps where necessary.
dbname=> SELECT Employee.ID, Employee.Name, Department.Name
FROM Employee
FULL JOIN Department
ON Employee.DepartmentID = Department.ID;
id | name | name
----+---------+---------------
1 | Alice | Marketing
2 | Bob | Entertainment
3 | Charlie |
| | Sales
(4 rows)
When searching through tables, you use a WHERE
clause to narrow things
down. For speed, the columns mentioned in the WHERE
clause should
either be a primary key, or a column for which an index has been
built.
Indexes help speed searches. In a large table, searching over an
unindexed column will be slow.
Example of creating an index on the Employee table from the
Keys section:
dbname=> CREATE INDEX ON Employee (LastName);
CREATE INDEX
dbname=> \d Employee
Table "public.employee"
Column | Type | Collation | Nullable | Default
--------------+-----------------------+-----------+----------+---------
id | integer | | not null |
lastname | character varying(20) | | |
firstname | character varying(20) | | |
departmentid | integer | | |
Indexes:
"employee_pkey" PRIMARY KEY, btree (id)
"employee_lastname_idx" btree (lastname)
Foreign-key constraints:
"employee_departmentid_fkey" FOREIGN KEY (departmentid) REFERENCES department(id)
In PostgreSQL, you can bundle a series of statements into a
transaction. The transaction is executed atomically, which means
either the entire transaction occurs, or none of the transaction occurs.
There will never be a case where a transaction partially occurs.
Create a transaction by starting with a BEGIN
statement, followed by
all the statements that are to be within the transaction.
START TRANSACTION
is generally synonymous withBEGIN
in SQL.
To execute the transaction (“Let’s do it!”), end with a COMMIT
statement.
To abort the transaction and do nothing (“On second thought,
nevermind!”) end with a ROLLBACK
statement. This makes it like
nothing within the transaction ever happened.
Usually transactions happen within a program that checks for sanity and
either commits or rolls back.
Pseudocode making DB calls that check if a rollback is necessary:
db("BEGIN"); // Begin transaction
db(`UPDATE accounts SET balance = balance - 100.00
WHERE name = 'Alice'`);
let balance = db("SELECT balance WHERE name = 'Alice'");
// Don't let the balance go below zero:
if (balance < 0) {
db("ROLLBACK"); // Never mind!! Roll it all back.
} else {
db("COMMIT"); // Plenty of cash
}
In the above example, the UPDATE
and SELECT
must happen at the same
time (atomically) or else another process could sneak in between and
withdraw too much money. Because it needs to be atomic, it’s wrapped in
a transaction.
If you just enter a single SQL statement that is not inside a BEGIN
transaction block, it gets automatically wrapped in a BEGIN
/COMMIT
block. It is a mini transaction that is COMMIT
ted immediately.
Not all SQL databases support transactions, but most do.
The EXPLAIN
command will tell you how much time the database is
spending doing a query, and what it’s doing in that time.
It’s a powerful command that can help tell you where you need to add
indexes, change structure, or rewrite queries.
dbname=> EXPLAIN SELECT * FROM foo;
QUERY PLAN
---------------------------------------------------------
Seq Scan on foo (cost=0.00..155.00 rows=10000 width=4)
(1 row)
For more information, see the PostgreSQL EXPLAIN documentation
Designing a non-trivial database is a difficult, learned skill best left to
professionals. Feel free to do small databases with minimal training, but if you
get in a professional situation with a large database that needs to be designed,
you should consult with people with strong domain knowledge.
That said, here are a couple pointers.
In general, all your tables should have a unique PRIMARY KEY
for each row.
It’s common to use SERIAL
or AUTO_INCREMENT
to make this happen.
Keep an eye out for commonly duplicated data. If you are duplicating text data
across several records, consider that maybe it should be in its own table and
referred to with a foreign key.
Watch out for unrelated data in the same record. If it’s a record in theEmployee
table but it has Department_Address
as a column, that probably
belongs in a Department
table, referred to by a public key.
But if you really want to design database, read on to the Normalization and
Normal Forms section.
[This topic is very deep and this section cannot do it full justice.]
Normalization is the process of designing or refactoring your tables
for maximum consistency and minimum redundancy.
With NoSQL databases, we’re used to denormalized data that is stored
with speed in mind, and not so much consistency (sometimes NoSQL
databases talk about eventual consistency).
Non-normalized tables are considered an anti-pattern in relational databases.
There are many normal forms. We’ll talk about First, Second, and Third
normal forms.
One of the reasons for normalizing tables is to avoid anomalies.
Insert anomaly: When we cannot insert a row into the table because
some of the dependent information is not yet known. For example, we
cannot create a new class record in the school database, because the
record requires at least one student, and none have enrolled yet.
Update anomaly: When information is duplicated in the database and
some rows are updated but not others. For example, say a record contains
a city and a zipcode, but then the post office changes the zipcode. If
some of the records are updated but not others, some cities will have
the old zipcodes.
Delete anomaly: The opposite of an insert anomaly. When we delete some
information and other related information must also be deleted against
our will. For example, deleting the last student from a course causes
the other course information to be also deleted.
By normalizing your tables, you can avoid these anomalies.
When a database is in first normal form, there is a primary key for each
row, and there are no repeating sets of columns that should be in their
own table.
Unnormalized (column titles on separate lines for clarity):
Farm
ID
AnimalName1 AnimalBreed1 AnimalProducesEggs1
AnimalName2 AnimalBreed2 AnimalProducesEggs2
1NF:
Farm
ID
Animal
ID FarmID[FK Farm(ID)] Name Breed ProducesEggs
Use a join to select all the animals in the farm:
SELECT Name, Farm.ID FROM Animal, Farm WHERE Farm.ID = Animal.FarmID;
To be in 2NF, a table must already be in 1NF.
Additionally, all non-key data must fully relate to the key data in the table.
In the farm example, above, Animal has a Name and a key FarmID, but
these two pieces of information are not related.
We can fix this by adding a table to link the other two tables together:
2NF:
Farm
ID
FarmAnimal
FarmID[FK Farm(ID)] AnimalID[FK Animal(ID)]
Animal
ID Name Breed ProducesEggs
Use a join to select all the animals in the farms:
SELECT Name, Farm.ID
FROM Animal, FarmAnimal, Farm
WHERE Farm.ID = FarmAnimal.FarmID AND
Animal.ID = FarmAnimal.AnimalID;
A table in 3NF must already be in 2NF.
Additionally, columns that relate to each other AND to the key need to
be moved into their own tables. This is known as removing transitive
dependencies.
In the Farm example, the columns Breed
and ProducesEggs
are related.
If you know the breed, you automatically know if it produces eggs or
not.
3NF:
Farm
ID
FarmAnimal
FarmID[FK Farm(ID)] AnimalID[FK Animal(ID)]
BreedEggs
Breed ProducesEggs
Animal
ID Name Breed[FK BreedEggs(Breed)]
Use a join to select all the animals names that produce eggs
in the farm:
SELECT Name, Farm.ID
FROM Animal, FarmAnimal, BreedEggs, Farm
WHERE Farm.ID = FarmAnimal.FarmID AND
Animal.ID = FarmAnimal.AnimalID AND
Animal.Breed = BreedEggs.Breed AND
BreedEggs.ProducesEggs = TRUE;
This is a library that allows you to interface with PostgreSQL through
NodeJS.
Its documentation is exceptionally good.
You might have noticed that you don’t need a password to access your
database that you created. This is because PostgreSQL by default uses
something called peer authentication
mode.
In a nutshell, it makes sure that you are logged in as yourself before
you access your database. If a different user tries to access your
database, they will be denied.
If you need to set up password access, see client authentication in the
PostgreSQL
manual
When writing code that accesses databases, there are a few rules you
should follow to keep things safe.
Don’t store database passwords or other sensitive information in your
code repository. Store dummy credentials instead.
When building SQL queries in code, use parameterized
queries.
You build your query with parameter placeholders for where the query
arguments will go.
This is your number-one line of defense against SQL injection
attacks.
It’s a seriously noob move to not use parameterized queries.
There are tons of them by Microsoft, Oracle, etc. etc.
Other popular open source databases in widespread use are:
IMPORTANT! These instructions assume you haven’t already installed
PostgreSQL. If you have already installed it, skip this section or
Google for how to upgrade your installation.
Install PostgreSQL: brew install postgresql
If you get install errors at this point relating to the link phase
failing or missing permissions, look back in the output and see
what file it failed to write.
For example, if it’s failing to write something in
/usr/local/share/man
-something, try setting the ownership on
those directories to yourself.
Example (from the command line):
$ sudo chown -R $(whoami) /usr/local/share/man
Then try to install again.
Start the database process
If you want to start it every time you log in, run:
brew services start postgresql
If you want to just start it one time right now, run:
pg_ctl -D /usr/local/var/postgres start
Create a database named the same as your username: createdb $(whoami)
This database will contain tables.
Then start a shell by running psql
and see if it works. You should see
this prompt:
$ psql
psql (10.1)
Type "help" for help.
dbname=>
(Use psql databasename
if you created the database under something
other than your username.)
Use \l
to get a list of databases.
You can enter \q
to exit the shell.
Reports are that one of the easiest installs is with
chocolatey. Might want to try that
first.
You can also download a Windows
installer from the
official site.
Another option is to use the Windows Subsystem for
Linux
and follow the Ubuntu instructions for installing
PostgreSQL.
Arch requires a bit more hands-on, but not much more. Check this out if
you want to see a different Unix-y install procedure (or if you run
Arch).
Launch the shell on your database, and create a table.
CREATE TABLE Employee (ID INT, FirstName VARCHAR(20), LastName VARCHAR(20));
Insert some records:
INSERT INTO Employee VALUES (1, 'Alpha', 'Alphason');
INSERT INTO Employee VALUES (2, 'Bravo', 'Bravoson');
INSERT INTO Employee VALUES (3, 'Charlie', 'Charleson');
INSERT INTO Employee VALUES (4, 'Delta', 'Deltason');
INSERT INTO Employee VALUES (5, 'Echo', 'Ecoson');
Select all records:
SELECT * FROM Employee;
Select Employee #3’s record:
SELECT * FROM Employee WHERE ID=3;
Delete Employee #3’s record:
DELETE FROM Employee WHERE ID=3;
Use SELECT
to verify the record is deleted.
Update Employee #2’s name to be “Foxtrot Foxtrotson”:
UPDATE Employee SET FirstName='Foxtrot', LastName='Foxtrotson' WHERE ID=2;
Use SELECT
to verify the update.
Using Node-Postgres, write a program that
creates a table.
Run the following query from your JS code:
CREATE TABLE IF NOT EXISTS Earthquake
(Name VARCHAR(20), Magnitude REAL)
Populate the table with the following data:
let data = [
["Earthquake 1", 2.2],
["Earthquake 2", 7.0],
["Earthquake 3", 1.8],
["Earthquake 4", 5.2],
["Earthquake 5", 2.9],
["Earthquake 6", 0.6],
["Earthquake 7", 6.6]
];
You’ll have to run an INSERT
statement for each one.
Open a PostgreSQL shell (psql
) and verify the table exists:
user-> \dt
List of relations
Schema | Name | Type | Owner
--------+------------+-------+-------
public | earthquake | table | user
(1 row)
Also verify it is populated:
user-> SELECT * from Earthquake;
name | magnitude
--------------+-----------
Earthquake 1 | 2.2
Earthquake 2 | 7
Earthquake 3 | 1.8
Earthquake 4 | 5.2
Earthquake 5 | 2.9
Earthquake 6 | 0.6
Earthquake 7 | 6.6
(7 rows)
Hints:
Extra Credit:
SERIAL
to auto-increment.Write a tool that queries the database for earthquakes that are at least
a given magnitude.
$ node earthquake 2.9
Earthquakes with magnitudes greater than or equal to 2.9:
Earthquake 2: 7
Earthquake 7: 6.6
Earthquake 4: 5.2
Earthquake 5: 2.9
Use ORDER BY Magnitude DESC
to order the results in descending order
by magnitude.
Use ExpressJS and write a webserver that
implements a RESTful API to access the earthquake data.
Endpoints:
/
(GET) Output usage information in HTML.
Example results:
<html>
<body>Usage: [endpoint info]</body>
</html>
/minmag
(GET) Output JSON list of earthquakes that are larger than the
value specified in the mag
parameter. Use form encoding to pass the
data.
Example results:
{
"results": [
{
"name": "Earthquake 2",
"magnitude": 7
},
{
"name": "Earthquake 4",
"magnitude": 5.2
}
]
}
Extra Credit:
/new
(POST) Add a new earthquake to the database. Use form encoding to
pass name
and mag
. Return a JSON status message:
{ "status": "ok" }
or
{ "status": "error", "message": "[error message]" }
/delete
(DELETE) Delete an earthquake from the database. Use form
encoding to pass name
. Return status similar to /new
, above.
Table of Contents generated with DocToc
npm install
to install the prereqs.node maketable
to create the DB tables.node earthquake 2.9
to see all earthquakes larger thanTable of Contents generated with DocToc
In this week’s Sprint you explored the Python programming language as well as object-oriented design principles. This Sprint Challenge aims to assess your comfort in both of these areas through exercises similar to the ones you worked on at the beginning of this week in Intro to Python.
Read these instructions carefully. Understand exactly what is expected before starting this Sprint Challenge.
This is an individual assessment. All work must be your own. Your challenge score is a measure of your ability to work independently using the material covered through this sprint. You need to demonstrate proficiency in the concepts and objectives introduced and practiced in the preceding days.
You are not allowed to collaborate during the Sprint Challenge. However, you are encouraged to follow the twenty-minute rule and seek support from your PM and Instructor in your cohort help channel on Slack. Your submitted work reflects your proficiency in the concepts and topics that were covered this week.
You have three hours to complete this Sprint Challenge. Plan your time accordingly.
Commit your code regularly and meaningfully. This helps both you (in case you ever need to return to old code for any number of reasons) and it also helps your project manager to more thoroughly assess your work.
Complete the programs in the src/
directory in any order.
oop/
oop1.py
: class hierarchiesoop2.py
: subclassing and method overridingcomp/
comp.py
: list comprehensionscityreader/
cityreader.py
: modules and CSV file readingEach file has its own associated test file. To test your code, run python [name_of_test_file.py]
or python3 [name_of_test_file.py]
if your Python 3 command is mapped to python3
. Note: cityreader
needs to be run from the same directory as the files or it will not be able to find the associated CSV file.
The cityreader
stretch goal has its own test file, test_stretch.py
, if you want to take a stab at implementing the stretch problem.
It’s never a bad idea to take a look at the test files in order to see what each test is expecting.
In order to meet MVP requirements for this Sprint Challenge, complete all of the exercises posed in each directory by getting the tests for each exercise to pass.
In your solution, it is essential that you follow best practices and produce clean and professional results. Schedule time to review, refine, and assess your work and perform basic professional polishing including spell-checking and grammar-checking on your work. It is better to submit a challenge that meets the MVP requirements than one that attempts too much and does not.
The cityreader
directory poses an stretch problem that builds upon the functionality you are to implement as part of the non-stretch requirements in the cityreader
directory.
There’s a separate test file test_stretch.py
for the stretch problem that you can run in order to test your implementation of the stretch problem.
OBJECTIVE | TASK | 1 - DOES NOT MEET Expectations | 2 - MEETS Expectations | 3 - EXCEEDS Expectations | SCORE |
---|---|---|---|---|---|
Student can demonstrate applied knowledge of Python basics by producing list comprehensions in comp.py |
List Comprehensions: (1 point per problem, 8 max) | 0-5 points | 6-7 points | 8 points | |
Student can demonstrate applied knowledge of Object-Oriented Programming by completing oop1.py and oop2.py |
OOP: (2 points per file, 4 max) | 0 points | 2 points | 4 points | |
Student can demonstrate applied research and language learning by completing cityreader.py |
CSV: 6 points for cityreader() , 1 point for cityreader_stretch() |
0 points | 6 points | 7 points | |
FINAL SCORE | 0-13 | 14-18 | 19 |
Table of Contents generated with DocToc
By the end of this module, learners should be able to:
Welcome to Unit 3!
- Clone without forking the following repo: https://github.com/LambdaSchool/web-guided-project-testing-web-apps
- Navigate into the root folder and run npm i to load dependences.
Technical issues spinning up the project? Please head over to the help channel!
If you fall behind during lecture and wish to catch up:
git fetch && git reset --hard origin/lecture
Slido event: https://app.sli.do/event/msea4w8q
Unit 3 | Sprint 1 | Module 4: Integration Testing For React
Zoom Link : https://lambdaschool.zoom.us/j/3076367334
Slido: https://app.sli.do/event/msea4w8q
Guided Project: https://github.com/LambdaSchool/web-guided-project-testing-web-apps
Module Project: https://github.com/LambdaSchool/web-module-project-testing-web-apps
These are the questions used internally to check student understanding. Students will be instructed to answer these questions after the guided project. Please make sure to emphasize the concepts behind these answers.
Setup test for the existance of the header component.
Act - extract the part of the DOM we want to test.
Assert - Test the change.
Hope you all enjoyed today’s guided Lesson!
A reminder if that office hours are from 2:30 - 3:30 Lambda Time. Don’t forget to complete the days Check for Understanding and Pulse Checks!
Module Project: https://github.com/LambdaSchool/web-module-project-custom-hook
Here is a review of today’s material.
Key Terminology:
Key Concepts:
Table of Contents generated with DocToc
Use Node.js
and Express
to build an API that performs CRUD operations on blog posts
.
npm install
to download all dependencies.npm run server
from the root folder (where the package.json file is). The server is configured to restart automatically as you make changes.The data
folder contains a database populated with test posts
.
Database access will be done using the db.js
file included inside the data
folder.
The db.js
publishes the following methods:
find()
: calling find returns a promise that resolves to an array of all the posts
contained in the database.findById()
: this method expects an id
as it’s only parameter and returns the post corresponding to the id
provided or an empty array if no post with that id
is found.insert()
: calling insert passing it a post
object will add it to the database and return an object with the id
of the inserted post. The object looks like this: { id: 123 }
.update()
: accepts two arguments, the first is the id
of the post to update and the second is an object with the changes
to apply. It returns the count of updated records. If the count is 1 it means the record was updated correctly.remove()
: the remove method accepts an id
as its first parameter and upon successfully deleting the post from the database it returns the number of records deleted.findPostComments()
: the findPostComments accepts a postId
as its first parameter and returns all comments on the post associated with the post id.findCommentById()
: accepts an id
and returns the comment associated with that id.insertComment()
: calling insertComment while passing it a comment
object will add it to the database and return an object with the id
of the inserted comment. The object looks like this: { id: 123 }
. This method will throw an error if the post_id
field in the comment
object does not match a valid post id in the database.Now that we have a way to add, update, remove and retrieve data from the provided database, it is time to work on the API.
A Blog Post in the database has the following structure:
{
title: "The post title", // String, required
contents: "The post contents", // String, required
created_at: Mon Aug 14 2017 12:50:16 GMT-0700 (PDT) // Date, defaults to current date
updated_at: Mon Aug 14 2017 12:50:16 GMT-0700 (PDT) // Date, defaults to current date
}
A Comment in the database has the following structure:
{
text: "The text of the comment", // String, required
post_id: "The id of the associated post", // Integer, required, must match the id of a post entry in the database
created_at: Mon Aug 14 2017 12:50:16 GMT-0700 (PDT) // Date, defaults to current date
updated_at: Mon Aug 14 2017 12:50:16 GMT-0700 (PDT) // Date, defaults to current date
}
/api/posts
into a separate Express Router
.Configure the API to handle to the following routes:
Method | Endpoint | Description |
---|---|---|
POST | /api/posts | Creates a post using the information sent inside the request body . |
POST | /api/posts/:id/comments | Creates a comment for the post with the specified id using information sent inside of the request body . |
GET | /api/posts | Returns an array of all the post objects contained in the database. |
GET | /api/posts/:id | Returns the post object with the specified id. |
GET | /api/posts/:id/comments | Returns an array of all the comment objects associated with the post with the specified id. |
DELETE | /api/posts/:id | Removes the post with the specified id and returns the deleted post object. You may need to make additional calls to the database in order to satisfy this requirement. |
PUT | /api/posts/:id | Updates the post with the specified id using data from the request body . Returns the modified document, NOT the original. |
When the client makes a POST
request to /api/posts
:
If the request body is missing the title
or contents
property:
400
(Bad Request).{ errorMessage: "Please provide title and contents for the post." }
.If the information about the post is valid:
201
(Created).If there’s an error while saving the post:
500
(Server Error).{ error: "There was an error while saving the post to the database" }
.When the client makes a POST
request to /api/posts/:id/comments
:
If the post with the specified id
is not found:
404
(Not Found).{ message: "The post with the specified ID does not exist." }
.If the request body is missing the text
property:
400
(Bad Request).{ errorMessage: "Please provide text for the comment." }
.If the information about the comment is valid:
201
(Created).If there’s an error while saving the comment:
500
(Server Error).{ error: "There was an error while saving the comment to the database" }
.When the client makes a GET
request to /api/posts
:
500
.{ error: "The posts information could not be retrieved." }
.When the client makes a GET
request to /api/posts/:id
:
If the post with the specified id
is not found:
404
(Not Found).{ message: "The post with the specified ID does not exist." }
.If there’s an error in retrieving the post from the database:
500
.{ error: "The post information could not be retrieved." }
.When the client makes a GET
request to /api/posts/:id/comments
:
If the post with the specified id
is not found:
404
(Not Found).{ message: "The post with the specified ID does not exist." }
.If there’s an error in retrieving the comments from the database:
500
.{ error: "The comments information could not be retrieved." }
.When the client makes a DELETE
request to /api/posts/:id
:
If the post with the specified id
is not found:
404
(Not Found).{ message: "The post with the specified ID does not exist." }
.If there’s an error in removing the post from the database:
500
.{ error: "The post could not be removed" }
.When the client makes a PUT
request to /api/posts/:id
:
If the post with the specified id
is not found:
404
(Not Found).{ message: "The post with the specified ID does not exist." }
.If the request body is missing the title
or contents
property:
400
(Bad Request).{ errorMessage: "Please provide title and contents for the post." }
.If there’s an error when updating the post:
500
.{ error: "The post information could not be modified." }
.If the post is found and the new information is valid:
request body
.200
(OK).To work on the stretch problems you’ll need to enable the cors
middleware. Follow these steps:
cors
npm module: npm i cors
.server.use(cors())
after server.use(express.json())
.Create a new React application and connect it to your server:
create-react-app
to create an application inside the root folder, name it client
./api/posts
endpoint in the API and show the list of posts.Table of Contents generated with DocToc
title: 101
category: JavaScript libraries
layout: 2017/sheet
updated: 2017-09-21
intro: |
const isObject = require('101/isObject')
isObject({}) // → true
Every function is exposed as a module.
See: 101
isObject({})
isString('str')
isRegExp(/regexp/)
isBoolean(true)
isEmpty({})
isfunction(x => x)
isInteger(10)
isNumber(10.1)
instanceOf(obj, 'string')
{: .-three-column}
{: .-prime}
let obj = {}
obj = put(obj, 'user.name', 'John')
// → { user: { name: 'John' } }
pluck(name, 'user.name')
// → 'John'
obj = del(obj, 'user')
// → { }
pluck(state, 'user.profile.name')
pick(state, ['user', 'ui'])
pick(state, /^_/)
pluck
returns values, pick
returns subsets of objects.
put(state, 'user.profile.name', 'john')
See:
put
del(state, 'user.profile')
omit(state, ['user', 'data'])
omit
is like del
, but supports multiple keys to be deleted.
hasKeypaths(state, ['user'])
hasKeypaths(state, { 'user.profile.name': 'john' })
See:
hasKeypaths
values(state)
| and(x, y)
| x && y
|
| or(x, y)
| x || y
|
| xor(x, y)
| !(!x && !y) && !(x && y)
|
| equals(x, y)
| x === y
|
| exists(x)
| !!x
|
| not(x)
| !x
|
Useful for function composition.
compose(f, g) // x => f(g(x))
curry(f) // x => y => f(x, y)
flip(f) // f(x, y) --> f(y, x)
passAll(f, g) // x => f(x) && g(x)
passAny(f, g) // x => f(x) || g(x)
converge(and, [pluck('a'), pluck('b')])(x)
// → and(pluck(x, 'a'), pluck(x, 'b'))
See:
converge
find(list, x => x.y === 2)
findIndex(list, x => ...)
includes(list, 'item')
last(list)
find(list, hasProps('id'))
groupBy(list, 'id')
indexBy(list, 'id')
isFloat = passAll(isNumber, compose(isInteger, not))
// n => isNumber(n) && not(isInteger(n))
function doStuff (object, options) { ... }
doStuffForce = curry(flip(doStuff))({ force: true })
Table of Contents generated with DocToc
title: Absinthe
category: Hidden
layout: 2017/sheet
tags: [WIP]
updated: 2017-10-10
intro: |
Schema
- The root. Defines what queries you can do, and what types they return.Resolver
- Functions that return data.Type
- A type definition describing the shape of the data you’ll return.
defmodule Blog.Web.Router do
use Phoenix.Router
forward "/", Absinthe.Plug,
schema: Blog.Schema
end
{: data-line=”4,5”}
Absinthe is a Plug, and you pass it one Schema.
See: Our first query
{: .-three-column}
defmodule Blog.Schema do
use Absinthe.Schema
import_types Blog.Schema.Types
query do
@desc "Get a list of blog posts"
field :posts, list_of(:post) do
resolve &Blog.PostResolver.all/2
end
end
end
{: data-line=”5,6,7,8,9,10”}
This schema will account for { posts { ··· } }
. It returns a Type of :post
, and delegates to a Resolver.
defmodule Blog.PostResolver do
def all(_args, _info) do
{:ok, Blog.Repo.all(Blog.Post)}
end
end
{: data-line=”3”}
This is the function that the schema delegated the posts
query to.
defmodule Blog.Schema.Types do
use Absinthe.Schema.Notation
@desc "A blog post"
object :post do
field :id, :id
field :title, :string
field :body, :string
end
end
{: data-line=”4,5,6,7,8,9”}
This defines a type :post
, which is used by the resolver.
{ user(id: "1") { ··· } }
query do
field :user, type: :user do
arg :id, non_null(:id)
resolve &Blog.UserResolver.find/2
end
end
{: data-line=”3”}
def find(%{id: id} = args, _info) do
···
end
{: data-line=”1”}
See: Query arguments
{
mutation CreatePost {
post(title: "Hello") { id }
}
}
mutation do
@desc "Create a post"
field :post, type: :post do
arg :title, non_null(:string)
resolve &Blog.PostResolver.create/2
end
end
{: data-line=”1”}
See: Mutations
Table of Contents generated with DocToc
title: ActiveAdmin
category: Ruby
Allows you to filter listings by a certain scope.
{: .-setup}
scope :draft
scope :for_approval
scope :public, if: ->{ current_admin_user.can?(...) }
scope "Unapproved", :pending
scope("Published") { |books| books.where(:published: true) }
filter :email
filter :username
You can define custom actions for models.
{: .-setup}
before_filter only: [:show, :edit, :publish] do
@post = Post.find(params[:id])
end
member_action :publish, method: :put do
@post.publish!
redirect_to admin_posts_path, notice: "The post '#{@post}' has been published!"
end
index do
column do |post|
link_to 'Publish', publish_admin_post_path(post), method: :put
end
end
action_item only: [:edit, :show] do
@post = Post.find(params[:id])
link_to 'Publish', publish_admin_post_path(post), method: :put
end
column :foo
column :title, sortable: :name do |post|
strong post.title
end
status_tag "Done" # Gray
status_tag "Finished", :ok # Green
status_tag "You", :warn # Orange
status_tag "Failed", :error # Red
ActiveAdmin.register Post do
actions :index, :edit
# or: config.clear_action_items!
end
Table of Contents generated with DocToc
title: adb (Android Debug Bridge)
category: CLI
layout: 2017/sheet
weight: -1
authors:
Command | Description |
---|---|
adb devices |
Lists connected devices |
adb devices -l |
Lists connected devices and kind |
—- | —- |
adb root |
Restarts adbd with root permissions |
adb start-server |
Starts the adb server |
adb kill-server |
Kills the adb server |
adb remount |
Remounts file system with read/write access |
adb reboot |
Reboots the device |
adb reboot bootloader |
Reboots the device into fastboot |
adb disable-verity |
Reboots the device into fastboot |
wait-for-device
can be specified after adb
to ensure that the command will run once the device is connected.
-s
can be used to send the commands to a specific device when multiple are connected.
$ adb wait-for-device devices
List of devices attached
somedevice-1234 device
someotherdevice-1234 device
$ adb -s somedevice-1234 root
Command | Description |
---|---|
adb logcat |
Starts printing log messages to stdout |
adb logcat -g |
Displays current log buffer sizes |
adb logcat -G <size> |
Sets the buffer size (K or M) |
adb logcat -c |
Clears the log buffers |
adb logcat *:V |
Enables ALL log messages (verbose) |
adb logcat -f <filename> |
Dumps to specified file |
$ adb logcat -G 16M
$ adb logcat *:V > output.log
Command | Description |
---|---|
adb push <local> <remote> |
Copies the local to the device at remote |
adb pull <remote> <local> |
Copies the remote from the device to local |
$ echo "This is a test" > test.txt
$ adb push test.txt /sdcard/test.txt
$ adb pull /sdcard/test.txt pulledTest.txt
Command | Description |
---|---|
adb shell <command> |
Runs the specified command on device (most unix commands work here) |
adb shell wm size |
Displays the current screen resolution |
adb shell wm size WxH |
Sets the resolution to WxH |
adb shell pm list packages |
Lists all installed packages |
adb shell pm list packages -3 |
Lists all installed 3rd-party packages |
adb shell monkey -p app.package.name |
Starts the specified package |
Table of Contents generated with DocToc
title: Google Analytics’s analytics.js
category: Analytics
layout: 2017/sheet
updated: 2017-10-29
intro: |
ga('create', 'UA-XXXX-Y', 'auto')
ga('create', 'UA-XXXX-Y', { userId: 'USER_ID' })
ga('send', 'pageview')
ga('send', 'pageview', { 'dimension15': 'My custom dimension' })
ga('send', 'event', 'button', 'click', {color: 'red'});
ga('send', 'event', 'button', 'click', 'nav buttons', 4);
/* ^category ^action ^label ^value */
ga('send', 'exception', {
exDescription: 'DatabaseError',
exFatal: false,
appName: 'myapp',
appVersion: '0.1.2'
})
Table of Contents generated with DocToc
title: Analytics libraries
layout: 2017/sheet
mixpanel.identify('284');
mixpanel.people.set({ $email: 'hi@gmail.com' });
mixpanel.register({ age: 28, gender: 'male' }); /* set common properties */
mixpanel
{: .-crosslink}
ga('create', 'UA-XXXX-Y', 'auto');
ga('create', 'UA-XXXX-Y', { userId: 'USER_ID' });
ga('send', 'pageview');
ga('send', 'pageview', { 'dimension15': 'My custom dimension' });
analytics.js
{: .-crosslink}
Table of Contents generated with DocToc
title: Angular.js
<html ng-app="nameApp">
<ul ng-controller="MyListCtrl">
<li ng-repeat="phone in phones">
{{phone.name}}
</li>
</ul>
<select ng-model="orderProp">
<option value="name">Alphabetical</option>
<option value="age">Newest</option>
</select>
App = angular.module('myApp', []);
App.controller('MyListCtrl', function ($scope) {
$scope.phones = [ ... ];
});
App.controller('Name', [
'$scope',
'$http',
function ($scope, $http) {
}
]);
a.c 'name', [
'$scope'
'$http'
($scope, $http) ->
]
App.service('NameService', function($http){
return {
get: function(){
return $http.get(url);
}
}
});
In controller you call with parameter and will use promises to return data from server.
App.controller('controllerName',
function(NameService){
NameService.get()
.then(function(){})
})
App.directive('name', function(){
return {
template: '<h1>Hello</h1>'
}
});
In HTML will use <name></name>
to render your template <h1>Hello</h1>
App.controller('PhoneListCtrl', function ($scope, $http) {
$http.get('/data.json').success(function (data) {
$scope.phones = data;
})
});
References:
Table of Contents generated with DocToc
title: Animated GIFs
category: CLI
{: .-one-column}
mkdir -p gif
mplayer -ao null -vo gif89a:outdir=gif $INPUT
mogrify -format gif *.png
gifsicle --colors=256 --delay=4 --loopcount=0 --dither -O3 gif/*.gif > ${INPUT%.*}.gif
rm -rf gif
You’ll need mplayer
, imagemagick
and gifsicle
. This converts frames to .png, then turns them into an animated gif.
mplayer -ao null -ss 0:02:06 -endpos 0:05:00 -vo gif89a:outdir=gif videofile.mp4
See -ss
and -endpos
.
Table of Contents generated with DocToc
title: Ansi codes
category: CLI
layout: 2017/sheet
intro: |
\033[#m
0 clear
1 bold
4 underline
5 blink
30-37 fg color
40-47 bg color
1K clear line (to beginning of line)
2K clear line (entire line)
2J clear screen
0;0H move cursor to 0;0
1A move up 1 line
0 black
1 red
2 green
3 yellow
4 blue
5 magenta
6 cyan
7 white
hide_cursor() { printf "\e[?25l"; }
show_cursor() { printf "\e[?25h"; }
Table of Contents generated with DocToc
title: Ansible examples
category: Ansible
Table of Contents generated with DocToc
title: “Ansible quickstart”
category: Ansible
layout: 2017/sheet
description: |
$ brew install ansible # OSX
$ [sudo] apt install ansible # elsewhere
Ansible is available as a package in most OS’s.
See: Installation
~$ mkdir setup
~$ cd setup
Make a folder for your Ansible files.
See: Getting started
[sites]
127.0.0.1
192.168.0.1
192.168.0.2
192.168.0.3
This is a list of hosts you want to manage, grouped into groups. (Hint: try
using localhost ansible_connection=local
to deploy to your local machine.)
See: Intro to Inventory
- hosts: 127.0.0.1
user: root
tasks:
- name: install nginx
apt: pkg=nginx state=present
- name: start nginx every bootup
service: name=nginx state=started enabled=yes
- name: do something in the shell
shell: echo hello > /tmp/abc.txt
- name: install bundler
gem: name=bundler state=latest
See: Intro to Playbooks
~/setup$ ls
hosts
playbook.yml
~/setup$ ansible-playbook -i hosts playbook.yml
PLAY [all] ********************************************************************
GATHERING FACTS ***************************************************************
ok: [127.0.0.1]
TASK: [install nginx] *********************************************************
ok: [127.0.0.1]
TASK: start nginx every bootup] ***********************************************
ok: [127.0.0.1]
...
Table of Contents generated with DocToc
title: Ansible modules
category: Ansible
layout: 2017/sheet
prism_languages: [yaml]
{% raw %}
---
- hosts: production
remote_user: root
tasks:
- ···
Place your modules inside tasks
.
- apt: pkg=vim state=present
- apt:
pkg: vim
state: present
- apt: >
pkg=vim
state=present
Define your tasks in any of these formats. One-line format is preferred for short declarations, while maps are preferred for longer.
- apt:
pkg: nodejs
state: present # absent | latest
update_cache: yes
force: no
- apt:
deb: "https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb"
- apt_repository:
repo: "deb https://··· raring main"
state: present
- apt_key:
id: AC40B2F7
url: "http://···"
state: present
- git:
repo: git://github.com/
dest: /srv/checkout
version: master
depth: 10
bare: yes
See: git module
- git_config:
name: user.email
scope: global # local | system
value: hi@example.com
See: git_config module
- user:
state: present
name: git
system: yes
shell: /bin/sh
groups: admin
comment: "Git Version Control"
See: user module
- service:
name: nginx
state: started
enabled: yes # optional
See: service module
- shell: apt-get install nginx -y
- shell: echo hello
args:
creates: /path/file # skip if this exists
removes: /path/file # skip if this is missing
chdir: /path # cd here before running
- shell: |
echo "hello there"
echo "multiple lines"
See: shell module
- script: /x/y/script.sh
args:
creates: /path/file # skip if this exists
removes: /path/file # skip if this is missing
chdir: /path # cd here before running
See: script module
- file:
path: /etc/dir
state: directory # file | link | hard | touch | absent
# Optional:
owner: bin
group: wheel
mode: 0644
recurse: yes # mkdir -p
force: yes # ln -nfs
See: file module
- copy:
src: /app/config/nginx.conf
dest: /etc/nginx/nginx.conf
# Optional:
owner: user
group: user
mode: 0644
backup: yes
See: copy module
- template:
src: config/redis.j2
dest: /etc/redis.conf
# Optional:
owner: user
group: user
mode: 0644
backup: yes
See: template module
- name: do something locally
local_action: shell echo hello
- debug:
msg: "Hello {{ var }}"
See: debug module
{% endraw %}
Table of Contents generated with DocToc
title: Ansible roles
category: Ansible
roles/
common/
tasks/
handlers/
files/ # 'copy' will refer to this
templates/ # 'template' will refer to this
meta/ # Role dependencies here
vars/
defaults/
main.yml
Table of Contents generated with DocToc
title: Ansible
{% raw %}
$ sudo mkdir /etc/ansible
$ sudo vim /etc/ansible/hosts
[example]
192.0.2.101
192.0.2.102
$ ansible-playbook playbook.yml
- hosts: all
user: root
sudo: no
vars:
aaa: bbb
tasks:
- ...
handlers:
- ...
tasks:
- include: db.yml
handlers:
- include: db.yml user=timmy
handlers:
- name: start apache2
action: service name=apache2 state=started
tasks:
- name: install apache
action: apt pkg=apache2 state=latest
notify:
- start apache2
- host: lol
vars_files:
- vars.yml
vars:
project_root: /etc/xyz
tasks:
- name: Create the SSH directory.
file: state=directory path=${project_root}/home/.ssh/
only_if: "$vm == 0"
- host: xxx
roles:
- db
- { role:ruby, sudo_user:$user }
- web
# Uses:
# roles/db/tasks/*.yml
# roles/db/handlers/*.yml
- name: my task
command: ...
register: result
failed_when: "'FAILED' in result.stderr"
ignore_errors: yes
changed_when: "result.rc != 2"
vars:
local_home: "{{ lookup('env','HOME') }}"
{% endraw %}
Table of Contents generated with DocToc
title: Appcache
category: HTML
CACHE MANIFEST
# version
CACHE:
http://www.google.com/jsapi
/assets/app.js
/assets/bg.png
NETWORK:
*
Note that Appcache is deprecated!
See: Using the application cache (developer.mozilla.org)
Table of Contents generated with DocToc
title: AppleScript
updated: 2018-12-06
layout: 2017/sheet
category: macOS
osascript -e "..."
display notification "X" with title "Y"
-- This is a single line comment
# This is another single line comment
(*
This is
a multi
line comment
*)
-- default voice
say "Hi I am a Mac"
-- specified voice
say "Hi I am a Mac" using "Zarvox"
-- beep once
beep
-- beep 10 times
beep 10
-- delay for 5 seconds
delay 5
Table of Contents generated with DocToc
title: Applinks
<meta property="al:ios:url" content="applinks://docs" />
<meta property="al:ios:app_store_id" content="12345" />
<meta property="al:ios:app_name" content="App Links" />
<meta property="al:android:url" content="applinks://docs" />
<meta property="al:android:app_name" content="App Links" />
<meta property="al:android:package" content="org.applinks" />
<meta property="al:web:url" content="http://applinks.org/documentation" />
ios
ipad
iphone
android
windows_phone
web
Table of Contents generated with DocToc
where
(restriction)select
(projection)join
limit
/ offset
order
title: Arel
users = Arel::Table.new(:users)
users = User.arel_table # ActiveRecord model
users[:name]
users[:id]
where
(restriction)
users.where(users[:name].eq('amy'))
# SELECT * FROM users WHERE users.name = 'amy'
select
(projection)
users.project(users[:id])
# SELECT users.id FROM users
join
In ActiveRecord (without Arel), if :photos
is the name of the association, use joins
users.joins(:photos)
In Arel, if photos
is defined as the Arel table,
photos = Photo.arel_table
users.join(photos)
users.join(photos, Arel::Nodes::OuterJoin).on(users[:id].eq(photos[:user_id]))
users.joins(:photos).merge(Photo.where(published: true))
If the simpler version doesn’t help and you want to add more SQL statements to it:
users.join(
users.join(photos, Arel::Nodes::OuterJoin)
.on(photos[:user_id].eq(users[:id]).and(photos[:published].eq(true)))
)
multiple joins
with the same table but different meanings and/or conditions
creators = User.arel_table.alias('creators')
updaters = User.arel_table.alias('updaters')
photos = Photo.arel_table
photos_with_credits = photos
.join(photos.join(creators, Arel::Nodes::OuterJoin).on(photos[:created_by_id].eq(creators[:id])))
.join(photos.join(updaters, Arel::Nodes::OuterJoin).on(photos[:assigned_id].eq(updaters[:id])))
.project(photos[:name], photos[:created_at], creators[:name].as('creator'), updaters[:name].as('editor'))
photos_with_credits.to_sql
# => "SELECT `photos`.`name`, `photos`.`created_at`, `creators`.`name` AS creator, `updaters`.`name` AS editor FROM `photos` INNER JOIN (SELECT FROM `photos` LEFT OUTER JOIN `users` `creators` ON `photos`.`created_by_id` = `creators`.`id`) INNER JOIN (SELECT FROM `photos` LEFT OUTER JOIN `users` `updaters` ON `photos`.`updated_by_id` = `updaters`.`id`)"
# after the request is done, you can use the attributes you named
# it's as if every Photo record you got has "creator" and "editor" fields, containing creator name and editor name
photos_with_credits.map{|x|
"#{photo.name} - copyright #{photo.created_at.year} #{photo.creator}, edited by #{photo.editor}"
}.join('; ')
limit
/ offset
users.take(5) # => SELECT * FROM users LIMIT 5
users.skip(4) # => SELECT * FROM users OFFSET 4
users.project(users[:age].sum) # .average .minimum .maximum
users.project(users[:id].count)
users.project(users[:id].count.as('user_count'))
order
users.order(users[:name])
users.order(users[:name], users[:age].desc)
users.reorder(users[:age])
User.arel_table
User.where(id: 1).arel
Most of the clever stuff should be in scopes, e.g. the code above could become:
photos_with_credits = Photo.with_creator.with_editor
You can store requests in variables then add SQL segments:
all_time = photos_with_credits.count
this_month = photos_with_credits.where(photos[:created_at].gteq(Date.today.beginning_of_month))
recent_photos = photos_with_credits.where(photos[:created_at].gteq(Date.today.beginning_of_month)).limit(5)
Table of Contents generated with DocToc
title: Atom
category: Apps
layout: 2017/sheet
{: .-three-column}
Shortcut | Description |
---|---|
⌘\ |
Toggle tree |
⌘⇧\ |
Reveal current file |
{: .-shortcuts}
Shortcut | Description |
---|---|
⌘/ |
Toggle comments |
{: .-shortcuts}
Shortcut | Description |
---|---|
⌘k ← |
Split pane to the left |
—- | —- |
⌘⌥= |
Grow pane |
⌘⌥- |
Shrink pane |
—- | —- |
^⇧← |
Move tab to left |
{: .-shortcuts}
Shortcut | Description |
---|---|
^m |
Go to matching bracket |
^] |
Remove brackets from selection |
^⌘m |
Select inside brackets |
⌥⌘. |
Close tag |
{: .-shortcuts}
Shortcut | Description |
---|---|
^⌥↓ |
Jump to declaration under cursor |
^⇧r |
Show tags |
{: .-shortcuts}
Symbols view enables Ctags support for Atom.
See: Symbols view
| ^⇧9
| Show Git pane |
| ^⇧8
| Show GitHub pane |
{: .-shortcuts}
Shortcut | Description |
---|---|
⌘d |
Select word |
⌘l |
Select line |
—- | —- |
⌘↓ |
Move line down |
⌘↑ |
Move line up |
—- | —- |
⌘⏎ |
New line below |
⌘⇧⏎ |
New line above |
—- | —- |
⌘⇧k |
Delete line |
⌘⇧d |
Duplicate line |
{: .-shortcuts}
Shortcut | Description |
---|---|
⌘⇧p |
Command palette |
⌘⇧a |
Add project folder |
—- | —- |
⌘n |
New file |
⌘⇧n |
New window |
—- | —- |
⌘f |
Find in file |
⌘⇧f |
Find in project |
⌘t |
Search files in project |
{: .-shortcuts}
⌘
is the Control
key.Command
key.⌥
is the Alt
key.Option
key.Table of Contents generated with DocToc
title: Awesome Redux
category: React
layout: 2017/sheet
Create action creators in flux standard action format.
{: .-setup}
increment = createAction('INCREMENT', amount => amount)
increment = createAction('INCREMENT') // same
increment(42) === { type: 'INCREMENT', payload: 42 }
// Errors are handled for you:
err = new Error()
increment(err) === { type: 'INCREMENT', payload: err, error: true }
redux-actions
{: .-crosslink}
A standard for flux action objects. An action may have an error
, payload
and meta
and nothing else.
{: .-setup}
{ type: 'ADD_TODO', payload: { text: 'Work it' } }
{ type: 'ADD_TODO', payload: new Error(), error: true }
flux-standard-action
{: .-crosslink}
Dispatch multiple actions in one action creator.
{: .-setup}
store.dispatch([
{ type: 'INCREMENT', payload: 2 },
{ type: 'INCREMENT', payload: 3 }
])
redux-multi
{: .-crosslink}
Combines reducers (like combineReducers()), but without namespacing magic.
{: .-setup}
re = reduceReducers(
(state, action) => state + action.number,
(state, action) => state + action.number
)
re(10, { number: 2 }) //=> 14
reduce-reducers
{: .-crosslink}
Logs actions to your console.
{: .-setup}
// Nothing to see here
redux-logger
{: .-crosslink}
Pass promises to actions. Dispatches a flux-standard-action.
{: .-setup}
increment = createAction('INCREMENT') // redux-actions
increment(Promise.resolve(42))
redux-promise
{: .-crosslink}
Sorta like that, too. Works by letting you pass thunks (functions) to dispatch()
. Also has ‘idle checking’.
{: .-setup}
fetchData = (url) => (dispatch) => {
dispatch({ type: 'FETCH_REQUEST' })
fetch(url)
.then((data) => dispatch({ type: 'FETCH_DONE', data })
.catch((error) => dispatch({ type: 'FETCH_ERROR', error })
})
store.dispatch(fetchData('/posts'))
// That's actually shorthand for:
fetchData('/posts')(store.dispatch)
redux-promises
{: .-crosslink}
Pass side effects declaratively to keep your actions pure.
{: .-setup}
{
type: 'EFFECT_COMPOSE',
payload: {
type: 'FETCH'
payload: {url: '/some/thing', method: 'GET'}
},
meta: {
steps: [ [success, failure] ]
}
}
redux-effects
{: .-crosslink}
Pass “thunks” to as actions. Extremely similar to redux-promises, but has support for getState.
{: .-setup}
fetchData = (url) => (dispatch, getState) => {
dispatch({ type: 'FETCH_REQUEST' })
fetch(url)
.then((data) => dispatch({ type: 'FETCH_DONE', data })
.catch((error) => dispatch({ type: 'FETCH_ERROR', error })
})
store.dispatch(fetchData('/posts'))
// That's actually shorthand for:
fetchData('/posts')(store.dispatch, store.getState)
// Optional: since fetchData returns a promise, it can be chained
// for server-side rendering
store.dispatch(fetchPosts()).then(() => {
ReactDOMServer.renderToString(<MyApp store={store} ></MyApp>)
})
redux-thunk
{: .-crosslink}
Table of Contents generated with DocToc
title: AWS CLI
category: Devops
aws ec2 describe-instances
aws ec2 start-instances --instance-ids i-12345678c
aws ec2 terminate-instances --instance-ids i-12345678c
aws s3 ls s3://mybucket
aws s3 rm s3://mybucket/folder --recursive
aws s3 cp myfolder s3://mybucket/folder --recursive
aws s3 sync myfolder s3://mybucket/folder --exclude *.tmp
aws ecs create-cluster
--cluster-name=NAME
--generate-cli-skeleton
aws ecs create-service
brew install awscli
aws configure
aws configure --profile project1
aws configure --profile project2
eb config
See: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options.html
Table of Contents generated with DocToc
title: Backbone.js
layout: 2017/sheet
updated: 2018-12-06
.on('event', callback)
.on('event', callback, context)
.on({
'event1': callback,
'event2': callback
})
.on('all', callback)
.once('event', callback) // Only happens once
object.off('change', onChange) // just the `onChange` callback
object.off('change') // all 'change' callbacks
object.off(null, onChange) // `onChange` callback for all events
object.off(null, null, context) // all callbacks for `context` all events
object.off() // all
object.trigger('event')
view.listenTo(object, event, callback)
view.stopListening()
Collection:
add
(model, collection, options)remove
(model, collection, options)reset
(collection, options)sort
(collection, options)Model:
change
(model, options)change:[attr]
(model, value, options)destroy
(model, collection, options)error
(model, xhr, options)Model and collection:
request
(model, xhr, options)sync
(model, resp, options)Router:
route:[name]
(params)route
(router, route, params)
// All attributes are optional
var View = Backbone.View.extend({
model: doc,
tagName: 'div',
className: 'document-item',
id: "document-" + doc.id,
attributes: { href: '#' },
el: 'body',
events: {
'click button.save': 'save',
'click .cancel': function() { ··· },
'click': 'onclick'
},
constructor: function() { ··· },
render: function() { ··· }
})
view = new View()
view = new View({ el: ··· })
view.$el.show()
view.$('input')
view.remove()
view.delegateEvents()
view.undelegateEvents()
// All attributes are optional
var Model = Backbone.Model.extend({
defaults: {
'author': 'unknown'
},
idAttribute: '_id',
parse: function() { ··· }
})
var obj = new Model({ title: 'Lolita', author: 'Nabokov' })
var obj = new Model({ collection: ··· })
obj.id
obj.cid // → 'c38' (client-side ID)
obj.clone()
obj.hasChanged('title')
obj.changedAttributes() // false, or hash
obj.previousAttributes() // false, or hash
obj.previous('title')
obj.isNew()
obj.set({ title: 'A Study in Pink' })
obj.set({ title: 'A Study in Pink' }, { validate: true, silent: true })
obj.unset('title')
obj.get('title')
obj.has('title')
obj.escape('title') /* Like .get() but HTML-escaped */
obj.clear()
obj.clear({ silent: true })
obj.save()
obj.save({ attributes })
obj.save(null, {
silent: true, patch: true, wait: true,
success: callback, error: callback
})
obj.destroy()
obj.destroy({
wait: true,
success: callback, error: callback
})
obj.toJSON()
obj.fetch()
obj.fetch({ success: callback, error: callback })
var Model = Backbone.Model.extend({
validate: function(attrs, options) {
if (attrs.end < attrs.start) {
return "Can't end before it starts"
}
}
})
{: data-line=”2”}
obj.validationError //=> "Can't end before it starts"
obj.isValid()
obj.on('invalid', function (model, error) { ··· })
// Triggered on:
obj.save()
obj.set({ ··· }, { validate: true })
var Model = Backbone.Model.extend({
// Single URL (string or function)
url: '/account',
url: function() { return '/account' },
// Both of these two work the same way
url: function() { return '/books/' + this.id }),
urlRoot: '/books'
})
var obj = new Model({ url: ··· })
var obj = new Model({ urlRoot: ··· })
{: .-one-column}
Table of Contents generated with DocToc
Here are some badges for open source projects.
Travis
[](https://travis-ci.org/rstacruz/REPO)
CodeClimate (shields.io)
[](https://codeclimate.com/github/rstacruz/REPO
"CodeClimate")
Coveralls (shields.io)
[](https://coveralls.io/r/rstacruz/REPO)
Travis (shields.io)
[](https://travis-ci.org/rstacruz/REPO "See test builds")
NPM (shields.io)
[](https://npmjs.org/package/REPO "View this project on npm")
Ruby gem (shields.io)
[](http://rubygems.org/gems/GEMNAME "View this project in Rubygems")
Gitter chat
[](https://gitter.im/REPO/GITTERROOM "Gitter chat")
Gitter chat (shields.io)
[]( https://gitter.im/USER/REPO )
david-dm
[](https://david-dm.org/rstacruz/REPO)
[](http://opensource.org/licenses/MIT)
[](http://opensource.org/licenses/MIT)
Support
-------
__Bugs and requests__: submit them through the project's issues tracker.<br>
[]( https://github.com/USER/REPO/issues )
__Questions__: ask them at StackOverflow with the tag *REPO*.<br>
[]( http://stackoverflow.com/questions/tagged/REPO )
__Chat__: join us at gitter.im.<br>
[]( https://gitter.im/USER/REPO )
Installation
------------
Add [nprogress.js] and [nprogress.css] to your project.
```html
<script src='nprogress.js'></script>
<link rel='stylesheet' href='nprogress.css'/>
```
NProgress is available via [bower] and [npm].
$ bower install --save nprogress
$ npm install --save nprogress
[bower]: http://bower.io/search/?q=nprogress
[npm]: https://www.npmjs.org/package/nprogress
**PROJECTNAME** © 2014+, Rico Sta. Cruz. Released under the [MIT] License.<br>
Authored and maintained by Rico Sta. Cruz with help from contributors ([list][contributors]).
> [ricostacruz.com](http://ricostacruz.com) ·
> GitHub [@rstacruz](https://github.com/rstacruz) ·
> Twitter [@rstacruz](https://twitter.com/rstacruz)
[MIT]: http://mit-license.org/
[contributors]: http://github.com/rstacruz/nprogress/contributors
Everything: http://shields.io/
Version badge (gems, npm): http://badge.fury.io/
Dependencies (ruby): http://gemnasium.com/
Code quality (ruby): http://codeclimate.com/
Test coverage: https://coveralls.io/
Table of Contents generated with DocToc
title: Bash scripting
category: CLI
layout: 2017/sheet
tags: [Featured]
updated: 2020-07-05
keywords:
{: .-three-column}
{: .-intro}
This is a quick reference to getting started with Bash scripting.
#!/usr/bin/env bash
NAME="John"
echo "Hello $NAME!"
NAME="John"
echo $NAME
echo "$NAME"
echo "${NAME}!"
NAME="John"
echo "Hi $NAME" #=> Hi John
echo 'Hi $NAME' #=> Hi $NAME
echo "I'm in $(pwd)"
echo "I'm in `pwd`"
# Same
git commit && git push
git commit || echo "Commit failed"
{: id=’functions-example’}
get_name() {
echo "John"
}
echo "You are $(get_name)"
See: Functions
{: id=’conditionals-example’}
if [[ -z "$string" ]]; then
echo "String is empty"
elif [[ -n "$string" ]]; then
echo "String is not empty"
fi
See: Conditionals
set -euo pipefail
IFS=$'\n\t'
See: Unofficial bash strict mode
echo {A,B}.js
Expression | Description |
---|---|
{A,B} |
Same as A B |
{A,B}.js |
Same as A.js B.js |
{1..5} |
Same as 1 2 3 4 5 |
See: Brace expansion
{: .-three-column}
name="John"
echo ${name}
echo ${name/J/j} #=> "john" (substitution)
echo ${name:0:2} #=> "Jo" (slicing)
echo ${name::2} #=> "Jo" (slicing)
echo ${name::-1} #=> "Joh" (slicing)
echo ${name:(-1)} #=> "n" (slicing from right)
echo ${name:(-2):1} #=> "h" (slicing from right)
echo ${food:-Cake} #=> $food or "Cake"
length=2
echo ${name:0:length} #=> "Jo"
See: Parameter expansion
STR="/path/to/foo.cpp"
echo ${STR%.cpp} # /path/to/foo
echo ${STR%.cpp}.o # /path/to/foo.o
echo ${STR%/*} # /path/to
echo ${STR##*.} # cpp (extension)
echo ${STR##*/} # foo.cpp (basepath)
echo ${STR#*/} # path/to/foo.cpp
echo ${STR##*/} # foo.cpp
echo ${STR/foo/bar} # /path/to/bar.cpp
STR="Hello world"
echo ${STR:6:5} # "world"
echo ${STR: -5:5} # "world"
SRC="/path/to/foo.cpp"
BASE=${SRC##*/} #=> "foo.cpp" (basepath)
DIR=${SRC%$BASE} #=> "/path/to/" (dirpath)
Code | Description |
---|---|
${FOO%suffix} |
Remove suffix |
${FOO#prefix} |
Remove prefix |
—- | —- |
${FOO%%suffix} |
Remove long suffix |
${FOO##prefix} |
Remove long prefix |
—- | —- |
${FOO/from/to} |
Replace first match |
${FOO//from/to} |
Replace all |
—- | —- |
${FOO/%from/to} |
Replace suffix |
${FOO/#from/to} |
Replace prefix |
# Single line comment
: '
This is a
multi line
comment
'
Expression | Description |
---|---|
${FOO |
Substring (position, length) |
${FOO:(-3):3} |
Substring from the right |
Expression | Description |
---|---|
${#FOO} |
Length of $FOO |
STR="HELLO WORLD!"
echo ${STR,} #=> "hELLO WORLD!" (lowercase 1st letter)
echo ${STR,,} #=> "hello world!" (all lowercase)
STR="hello world!"
echo ${STR^} #=> "Hello world!" (uppercase 1st letter)
echo ${STR^^} #=> "HELLO WORLD!" (all uppercase)
Expression | Description |
---|---|
${FOO:-val} |
$FOO , or val if unset (or null) |
${FOO:=val} |
Set $FOO to val if unset (or null) |
${FOO:+val} |
val if $FOO is set (and not null) |
${FOO:?message} |
Show error message and exit if $FOO is unset (or null) |
Omitting the :
removes the (non)nullity checks, e.g. ${FOO-val}
expands to val
if unset otherwise $FOO
.
{: .-three-column}
for i in /etc/rc.*; do
echo $i
done
for ((i = 0 ; i < 100 ; i++)); do
echo $i
done
for i in {1..5}; do
echo "Welcome $i"
done
for i in {5..50..5}; do
echo "Welcome $i"
done
cat file.txt | while read line; do
echo $line
done
while true; do
···
done
{: .-three-column}
myfunc() {
echo "hello $1"
}
# Same as above (alternate syntax)
function myfunc() {
echo "hello $1"
}
myfunc "John"
myfunc() {
local myresult='some value'
echo $myresult
}
result="$(myfunc)"
myfunc() {
return 1
}
if myfunc; then
echo "success"
else
echo "failure"
fi
Expression | Description |
---|---|
$# |
Number of arguments |
$* |
All postional arguments (as a single word) |
$@ |
All postitional arguments (as separate strings) |
$1 |
First argument |
$_ |
Last argument of the previous command |
Note: $@
and $*
must be quoted in order to perform as described.
Otherwise, they do exactly the same thing (arguments as separate strings).
See Special parameters.
{: .-three-column}
Note that [[
is actually a command/program that returns either 0
(true) or 1
(false). Any program that obeys the same logic (like all base utils, such as grep(1)
or ping(1)
) can be used as condition, see examples.
Condition | Description |
---|---|
[[ -z STRING ]] |
Empty string |
[[ -n STRING ]] |
Not empty string |
[[ STRING == STRING ]] |
Equal |
[[ STRING != STRING ]] |
Not Equal |
—- | —- |
[[ NUM -eq NUM ]] |
Equal |
[[ NUM -ne NUM ]] |
Not equal |
[[ NUM -lt NUM ]] |
Less than |
[[ NUM -le NUM ]] |
Less than or equal |
[[ NUM -gt NUM ]] |
Greater than |
[[ NUM -ge NUM ]] |
Greater than or equal |
—- | —- |
[[ STRING =~ STRING ]] |
Regexp |
—- | —- |
(( NUM < NUM )) |
Numeric conditions |
Condition | Description | ||
---|---|---|---|
[[ -o noclobber ]] |
If OPTIONNAME is enabled | ||
—- | —- | ||
[[ ! EXPR ]] |
Not | ||
[[ X && Y ]] |
And | ||
`[[ X | Y ]]` | Or |
Condition | Description |
---|---|
[[ -e FILE ]] |
Exists |
[[ -r FILE ]] |
Readable |
[[ -h FILE ]] |
Symlink |
[[ -d FILE ]] |
Directory |
[[ -w FILE ]] |
Writable |
[[ -s FILE ]] |
Size is > 0 bytes |
[[ -f FILE ]] |
File |
[[ -x FILE ]] |
Executable |
—- | —- |
[[ FILE1 -nt FILE2 ]] |
1 is more recent than 2 |
[[ FILE1 -ot FILE2 ]] |
2 is more recent than 1 |
[[ FILE1 -ef FILE2 ]] |
Same files |
# String
if [[ -z "$string" ]]; then
echo "String is empty"
elif [[ -n "$string" ]]; then
echo "String is not empty"
else
echo "This never happens"
fi
# Combinations
if [[ X && Y ]]; then
...
fi
# Equal
if [[ "$A" == "$B" ]]
# Regex
if [[ "A" =~ . ]]
if (( $a < $b )); then
echo "$a is smaller than $b"
fi
if [[ -e "file.txt" ]]; then
echo "file exists"
fi
Fruits=('Apple' 'Banana' 'Orange')
Fruits[0]="Apple"
Fruits[1]="Banana"
Fruits[2]="Orange"
echo ${Fruits[0]} # Element #0
echo ${Fruits[-1]} # Last element
echo ${Fruits[@]} # All elements, space-separated
echo ${#Fruits[@]} # Number of elements
echo ${#Fruits} # String length of the 1st element
echo ${#Fruits[3]} # String length of the Nth element
echo ${Fruits[@]:3:2} # Range (from position 3, length 2)
echo ${!Fruits[@]} # Keys of all elements, space-separated
Fruits=("${Fruits[@]}" "Watermelon") # Push
Fruits+=('Watermelon') # Also Push
Fruits=( ${Fruits[@]/Ap*/} ) # Remove by regex match
unset Fruits[2] # Remove one item
Fruits=("${Fruits[@]}") # Duplicate
Fruits=("${Fruits[@]}" "${Veggies[@]}") # Concatenate
lines=(`cat "logfile"`) # Read from file
for i in "${arrayName[@]}"; do
echo $i
done
{: .-three-column}
declare -A sounds
sounds[dog]="bark"
sounds[cow]="moo"
sounds[bird]="tweet"
sounds[wolf]="howl"
Declares sound
as a Dictionary object (aka associative array).
echo ${sounds[dog]} # Dog's sound
echo ${sounds[@]} # All values
echo ${!sounds[@]} # All keys
echo ${#sounds[@]} # Number of elements
unset sounds[dog] # Delete dog
for val in "${sounds[@]}"; do
echo $val
done
for key in "${!sounds[@]}"; do
echo $key
done
set -o noclobber # Avoid overlay files (echo "hi" > foo)
set -o errexit # Used to exit upon error, avoiding cascading errors
set -o pipefail # Unveils hidden failures
set -o nounset # Exposes unset variables
shopt -s nullglob # Non-matching globs are removed ('*.foo' => '')
shopt -s failglob # Non-matching globs throw errors
shopt -s nocaseglob # Case insensitive globs
shopt -s dotglob # Wildcards match dotfiles ("*.sh" => ".foo.sh")
shopt -s globstar # Allow ** for recursive matches ('lib/**/*.rb' => 'lib/a/b/c.rb')
Set GLOBIGNORE
as a colon-separated list of patterns to be removed from glob
matches.
Command | Description |
---|---|
history |
Show history |
shopt -s histverify |
Don’t execute expanded result immediately |
Expression | Description |
---|---|
!$ |
Expand last parameter of most recent command |
!* |
Expand all parameters of most recent command |
!-n |
Expand n th most recent command |
!n |
Expand n th command in history |
!<command> |
Expand most recent invocation of command <command> |
Code | Description |
---|---|
!! |
Execute last command again |
!!:s/<FROM>/<TO>/ |
Replace first occurrence of <FROM> to <TO> in most recent command |
!!:gs/<FROM>/<TO>/ |
Replace all occurrences of <FROM> to <TO> in most recent command |
!$:t |
Expand only basename from last parameter of most recent command |
!$:h |
Expand only directory from last parameter of most recent command |
!!
and !$
can be replaced with any valid expansion.
Code | Description |
---|---|
!!:n |
Expand only n th token from most recent command (command is 0 ; first argument is 1 ) |
!^ |
Expand first argument from most recent command |
!$ |
Expand last token from most recent command |
!!:n-m |
Expand range of tokens from most recent command |
!!:n-$ |
Expand n th token to last from most recent command |
!!
can be replaced with any valid expansion i.e. !cat
, !-2
, !42
, etc.
$((a + 200)) # Add 200 to $a
$(($RANDOM%200)) # Random number 0..199
(cd somedir; echo "I'm now in $PWD")
pwd # still in first directory
python hello.py > output.txt # stdout to (file)
python hello.py >> output.txt # stdout to (file), append
python hello.py 2> error.log # stderr to (file)
python hello.py 2>&1 # stderr to stdout
python hello.py 2>/dev/null # stderr to (null)
python hello.py &>/dev/null # stdout and stderr to (null)
python hello.py < foo.txt # feed foo.txt to stdin for python
command -V cd
#=> "cd is a function/alias/whatever"
trap 'echo Error at about $LINENO' ERR
or
traperr() {
echo "ERROR: ${BASH_SOURCE[1]} at about ${BASH_LINENO[0]}"
}
set -o errtrace
trap traperr ERR
case "$1" in
start | up)
vagrant up
;;
*)
echo "Usage: $0 {start|stop|ssh}"
;;
esac
source "${0%/*}/../share/foo.sh"
printf "Hello %s, I'm %s" Sven Olga
#=> "Hello Sven, I'm Olga
printf "1 + 1 = %d" 2
#=> "1 + 1 = 2"
printf "This is how you print a float: %f" 2
#=> "This is how you print a float: 2.000000"
DIR="${0%/*}"
while [[ "$1" =~ ^- && ! "$1" == "--" ]]; do case $1 in
-V | --version )
echo $version
exit
;;
-s | --string )
shift; string=$1
;;
-f | --flag )
flag=1
;;
esac; shift; done
if [[ "$1" == '--' ]]; then shift; fi
cat <<END
hello world
END
echo -n "Proceed? [y/n]: "
read ans
echo $ans
read -n 1 ans # Just one character
Expression | Description |
---|---|
$? |
Exit status of last task |
$! |
PID of last background task |
$$ |
PID of shell |
$0 |
Filename of the shell script |
See Special parameters.
pwd # /home/user/foo
cd bar/
pwd # /home/user/foo/bar
cd -
pwd # /home/user/foo
if ping -c 1 google.com; then
echo "It appears you have a working internet connection"
fi
if grep -q 'foo' ~/.bash_history; then
echo "You appear to have typed 'foo' in the past"
fi
{: .-one-column}
Table of Contents generated with DocToc
title: Blessed
category: JavaScript libraries
screen = blessed.screen({
smartCSR: true // optimize for flickering
autoPadding: true // ..
})
screen.append(Element)
screen.destroy()
screen.width
screen.height
screen.title = 'My window title'
screen.key(['escape', 'q', 'C-c'], (ch, key) => { ... })
box = blessed.box({
style: { fg, bg, border.fg, scrollbar.bg, focus.bg, hover.bg },
border: { type: 'line'|'bg', bg, fg, bold, underline }
tags: true, // parse {bold}tags{/bold}
top, left, width, height,
width: '100%',
height: '100%-1',
top: 'center'
})
{bold}
{right} {center}
{|} left-right separator
{#c0ff33-fg}{/}
blessed.escape('...')
Table of Contents generated with DocToc
title: bluebird.js
category: JavaScript libraries
layout: 2017/sheet
weight: -1
Also see the promise cheatsheet and Bluebird.js API (github.com).
promise
.then(okFn, errFn)
.spread(okFn, errFn) // *
.catch(errFn)
.catch(TypeError, errFn) // *
.finally(fn)
.map(function (e) { ··· }) // *
.each(function (e) { ··· }) // *
Those marked with *
are non-standard Promise API that only work with Bluebird promises.
.then(function () {
return [ 'abc', 'def' ]
})
.spread(function (abc, def) {
···
})
{: data-line=”4”}
Use Promise.spread
Promise.join(
getPictures(),
getMessages(),
getTweets(),
function (pics, msgs, tweets) {
return ···
}
)
{: data-line=”1”}
Use Promise.join
count
to passsome([p], 1)
.any
instead
Promise.all([ promise1, promise2 ])
.then(results => {
results[0]
results[1]
})
// succeeds if one succeeds first
Promise.any(promises)
.then(results => {
})
{: data-line=”1,8”}
Promise.map(urls, url => fetch(url))
.then(···)
{: data-line=”1”}
Use Promise.map to “promisify” a list of values.
Promise.props({
photos: get('photos'),
posts: get('posts')
})
.then(res => {
res.photos
res.posts
})
{: data-line=”1”}
Use Promise.props.
function getPhotos() {
return Promise.try(() => {
if (err) throw new Error("boo")
return result
})
}
getPhotos().then(···)
{: data-line=”2”}
Use Promise.try.
var readFile = Promise.promisify(fs.readFile)
var fs = Promise.promisifyAll(require('fs'))
{: data-line=”2”}
See Promisification.
User.login = Promise.method((email, password) => {
if (!valid)
throw new Error("Email not valid")
return /* promise */
})
{: data-line=”1”}
See Promise.method.
User.login = Promise.coroutine(function* (email, password) {
let user = yield User.find({email: email}).fetch()
return user
})
{: data-line=”1”}
See Promise.coroutine.
http://bluebirdjs.com/docs/api-reference.html
Table of Contents generated with DocToc
title: Bolt Quickstart
category: Bolt
layout: 2017/sheet
updated: 2018-12-25
authors:
# On MacOS
brew cask install puppetlabs/puppet/puppet-bolt
# On Windows
choco install puppet-bolt
Bolt is available as a package for most platforms. See installing bolt
mkdir -p ~/.puppetlabs/bolt/modules/mymodule/tasks
cp myscript.sh ~/.puppetlabs/bolt/modules/mymodule/tasks/
Tasks can be written in any language your targets can run. See writing tasks for more details.
bolt task run mymodule::myscript -n node1.example.com,node2.example.com --private-key ~/.ssh/id_rsa-private
See bolt task run --help
for more information and command line options.
Table of Contents generated with DocToc
#
class Books
scopes:
published: (q) -> q.where(published: true)
Books.published().fetchAll()
#
Books.query().where(published: true)
Books.where(published: true)
class Migration
up: ->
down: ->
Table of Contents generated with DocToc
title: Bookshelf.js
Summary = bookshelf.Model.extend({
tableName: 'summaries',
hasTimestamps: true,
hasTimestamps: ['created_at', 'updated_at'],
})
Summary = bookshelf.Model.extend({
book () {
return this.belongsTo(Book)
},
author () {
return this.hasOne(Author)
}
// belongsToMany
// hasMany
// hasMany().through()
})
Book.create({ title: '..' }).save()
new Book({ title: '..' }).save()
new Book({ id: 1 }).fetch()
Book.where({ id: 1 }).fetch()
Book.where('favorite_color', 'red').fetch()
Book.where('favorite_color', '<>', 'red').fetch()
Book
.query((q) => q.orderBy('updated_at')
Table of Contents generated with DocToc
title: Bootstrap
layout: 2017/sheet
prism_languages: [scss, haml, html]
weight: -1
category: CSS
description: |
768 992 1200
' ' ' ' ' ' ' ' '
<---------^------------^------------------^--------->
xs sm md lg
(phone) (tablet) (laptop) (desktop)
Min:
@media (min-width: @screen-sm-min) // >= 768px (small tablet)
@media (min-width: @screen-md-min) // >= 992px (medium laptop)
@media (min-width: @screen-lg-min) // >= 1200px (large desktop)
Max:
@media (max-width: @screen-xs-max) { // < 768px (xsmall phone)
@media (max-width: @screen-sm-max) { // < 992px (small tablet)
@media (max-width: @screen-md-max) { // < 1200px (medium laptop)
.container
.container-fluid
.col-xs-1
.col-sm-1
.col-md-1
.col-lg-1
.col-md-offset-1
Mixins:
@include make-xs-column(12);
@include make-sm-column(6);
@include make-md-column(3);
@include make-lg-column(3);
@include make-sm-column-offset(1);
@include make-sm-column-push(1);
@include make-sm-column-pull(1);
.pull-left
.pull-right
.hidden-{xs,sm,md,lg}
.visible-{xs,sm,md,lg}
.visible-{xs,sm,md,lg,print}-{block,inline,inline-block}
`