项目作者: Web-Dev-Collaborative

项目描述 :
高级语言: JavaScript
项目地址: git://github.com/Web-Dev-Collaborative/Lambda-Final-Backup.git
创建时间: 2021-04-17T14:24:53Z
项目社区:https://github.com/Web-Dev-Collaborative/Lambda-Final-Backup

开源协议:MIT License

下载


-build-log

demo

Lambda Resources Website)

demo2

Loading Gif:

loading

  1. .)
  2. ├──[✅]--(0-notes)
  3. └──[✅]--(medium-articles)
  4. ├──[✅]--(1-projects)
  5. ├──[✅]--(A_arrays_solution)
  6. ├──[✅]--(A_conditionals_solution)
  7. ├──[✅]--(A_executing_code_solution)
  8. ├──[✅]--(A_functions_solution)
  9. ├──[✅]--(A_loops_solution)
  10. ├──[✅]--(A_nested_loops_solution)
  11. ├──[✅]--(Atomic-Design-Solution-master)
  12. └──[✅]--(dogs)
  13. ├──[✅]--(public)
  14. └──[✅]--(src)
  15. ├──[✅]--(atoms)
  16. ├──[✅]--(molecules)
  17. ├──[✅]--(organisms)
  18. ├──[✅]--(pages)
  19. └──[✅]--(templates)
  20. ├──[✅]--(B_arrays_solution)
  21. ├──[✅]--(B_expressions_solution)
  22. ├──[✅]--(B_functions_solution)
  23. ├──[✅]--(B_loops_solution)
  24. ├──[✅]--(B_two_dimensional_arrays_solution)
  25. ├──[✅]--(Basic-JavaScript-master)
  26. ├──[✅]--(src)
  27. └──[✅]--(tests)
  28. ├──[✅]--(C_arrays_solution)
  29. ├──[✅]--(C_functions_solution)
  30. ├──[✅]--(C_loops_solution)
  31. ├──[✅]--(C_more_problems_solution)
  32. ├──[✅]--(C_variables_solution)
  33. ├──[✅]--(Client-Auth-Solution-master)
  34. ├──[✅]--(public)
  35. └──[✅]--(src)
  36. ├──[✅]--(actions)
  37. ├──[✅]--(components)
  38. └──[✅]--(HOC)
  39. └──[✅]--(reducers)
  40. ├──[✅]--(Closures-Callbacks-ArrayMethods)
  41. └──[✅]--(JS-Exercise-Closures-Callbacks-ArrayMethods-master)
  42. ├──[✅]--(data)
  43. └──[✅]--(test)
  44. ├──[✅]--(Components-BEM-Solution-master)
  45. ├──[✅]--(components)
  46. ├──[✅]--(Box)
  47. ├──[✅]--(Dropdown)
  48. └──[✅]--(Section)
  49. └──[✅]--(markups)
  50. ├──[✅]--(Components-Constructors-Solution-master)
  51. ├──[✅]--(components)
  52. ├──[✅]--(Box)
  53. ├──[✅]--(Dropdown)
  54. ├──[✅]--(Section)
  55. └──[✅]--(Tabs)
  56. └──[✅]--(markups)
  57. ├──[✅]--(DOM-JavaScript-mini-Solution-master)
  58. └──[✅]--(components)
  59. ├──[✅]--(Box)
  60. ├──[✅]--(Header)
  61. ├──[✅]--(List)
  62. ├──[✅]--(Nav)
  63. ├──[✅]--(Section)
  64. └──[✅]--(Tabs)
  65. ├──[✅]--(D_string_indexing_and_methods_solution)
  66. ├──[✅]--(Data-Structures-master)
  67. ├──[✅]--(avl_tree)
  68. ├──[✅]--(binary_search_tree)
  69. ├──[✅]--(doubly_linked_list)
  70. ├──[✅]--(heap)
  71. ├──[✅]--(lru_cache)
  72. ├──[✅]--(queue)
  73. ├──[✅]--(singly_linked_list)
  74. └──[✅]--(stack)
  75. ├──[✅]--(HTML-CSS-mini-Solution-master)
  76. └──[✅]--(components)
  77. ├──[✅]--(Box)
  78. ├──[✅]--(Header)
  79. └──[✅]--(Section)
  80. ├──[✅]--(Intro-Python-I-master)
  81. └──[✅]--(src)
  82. ├──[✅]--(Intro-Python-II-master)
  83. ├──[✅]--(examples)
  84. └──[✅]--(src)
  85. ├──[✅]--(Intro-to-C-master)
  86. ├──[✅]--(fizzbuzz)
  87. └──[✅]--(tests)
  88. ├──[✅]--(hangman)
  89. ├──[✅]--(malloc)
  90. └──[✅]--(tests)
  91. ├──[✅]--(pointers)
  92. └──[✅]--(tests)
  93. ├──[✅]--(queue)
  94. └──[✅]--(tests)
  95. ├──[✅]--(quicksort)
  96. └──[✅]--(tests)
  97. ├──[✅]--(strings)
  98. └──[✅]--(tests)
  99. ├──[✅]--(structs)
  100. └──[✅]--(tests)
  101. └──[✅]--(utils)
  102. ├──[✅]--(JS-Exercise-Classes)
  103. └──[✅]--(test)
  104. ├──[✅]--(JavaScript-III-master)
  105. └──[✅]--(assignments)
  106. ├──[✅]--(LS-Data-Structures-I-Solution-master)
  107. ├──[✅]--(src)
  108. └──[✅]--(tests)
  109. ├──[✅]--(LS-Data-Structures-II-Solution-master)
  110. ├──[✅]--(src)
  111. └──[✅]--(tests)
  112. ├──[✅]--(Mongo-Mini-II-Solution-master)
  113. ├──[✅]--(Node-Express-Gmaps-Solution-Day-I-master)
  114. └──[✅]--(src)
  115. ├──[✅]--(controllers)✅
  116. └──[✅]--(models)
  117. ├──[✅]--(Node-Express-Gmaps-Solution-Day-II-master)
  118. └──[✅]--(src)
  119. ├──[✅]--(controllers)
  120. └──[✅]--(models)
  121. ├──[✅]--(Python-OOP-Toy-master)
  122. └──[✅]--(src)
  123. ├──[✅]--(React-Todo-Solution-master)
  124. ├──[✅]--(public)
  125. └──[✅]--(src)
  126. └──[✅]--(tests)
  127. ├──[✅]--(Relational-Databases-master)
  128. ├──[✅]--(Sprint-Challenge--Intro-Python-master)
  129. └──[✅]--(src)
  130. ├──[✅]--(cityreader)
  131. ├──[✅]--(comp)
  132. └──[✅]--(oop)
  133. ├──[✅]--(_Pet-Projects)
  134. └──[✅]--(whack-a-mole)
  135. ├──[✅]--(_Pet-prac-projects)
  136. ├──[✅]--(01 - JavaScript Drum Kit)
  137. └──[✅]--(sounds)
  138. ├──[✅]--(02 - JS and CSS Clock)
  139. ├──[✅]--(03 - CSS Variables)
  140. ├──[✅]--(04 - Array Cardio Day 1)
  141. ├──[✅]--(05 - Flex Panel Gallery)
  142. ├──[✅]--(06 - Type Ahead)
  143. ├──[✅]--(07 - Array Cardio Day 2)
  144. ├──[✅]--(08 - Fun with HTML5 Canvas)
  145. ├──[✅]--(09 - Dev Tools Domination)
  146. ├──[✅]--(10 - Hold Sft and Check Checkboxes)
  147. ├──[✅]--(11 - Custom Video Player)
  148. ├──[✅]--(12 - Key Sequence Detection)
  149. ├──[✅]--(13 - Slide in on Scroll)
  150. ├──[✅]--(14 - JavaScript References VS Copying)
  151. ├──[✅]--(15 - LocalStorage)
  152. ├──[✅]--(16 - Mouse Move Shadow)
  153. ├──[✅]--(17 - Sort Without Articles)
  154. ├──[✅]--(18 - Adding Up Times with Reduce)
  155. ├──[✅]--(19 - Webcam Fun)
  156. ├──[✅]--(20 - Speech Detection)
  157. ├──[✅]--(21 - Geolocation)
  158. ├──[✅]--(22 - Follow Along Link ghlighter)
  159. ├──[✅]--(23 - Speech Synthesis)
  160. ├──[✅]--(24 - Sticky Nav)
  161. ├──[✅]--(25 - Event Capture, Propagation, Bubbling and Once)
  162. ├──[✅]--(26 - Stripe Follow Along Nav)
  163. ├──[✅]--(27 - Click and Drag)
  164. ├──[✅]--(28 - Video Speed Controller)
  165. ├──[✅]--(29 - Countdown Timer)
  166. └──[✅]--(30 - Whack A Mole)
  167. ├──[✅]--(master)
  168. ├──[✅]--(nested-data-exercises-master)
  169. ├──[✅]--(data)
  170. └──[✅]--(test)
  171. ├──[✅]--(solutions)
  172. ├──[✅]--(web-guided-project-testing-web-apps-solution-main)
  173. ├──[✅]--(public)
  174. └──[✅]--(src)
  175. └──[✅]--(components)
  176. └──[✅]--(webapi-ii-challenge-master)
  177. └──[✅]--(data)
  178. ├──[✅]--(migrations)
  179. └──[✅]--(seeds)
  180. ├──[✅]--(10-miscellaneous)
  181. └──[✅]--(scrap)
  182. ├──[✅]--(11-Site-Documentation)
  183. ├──[✅]--(2-resources)
  184. ├──[✅]--(Atomic-Design-Solution-master)
  185. └──[✅]--(dogs)
  186. ├──[✅]--(public)
  187. └──[✅]--(src)
  188. ├──[✅]--(atoms)
  189. ├──[✅]--(molecules)
  190. ├──[✅]--(organisms)
  191. ├──[✅]--(pages)
  192. └──[✅]--(templates)
  193. ├──[✅]--(Client-Auth-Solution-master)
  194. ├──[✅]--(public)
  195. └──[✅]--(src)
  196. ├──[✅]--(actions)
  197. ├──[✅]--(components)
  198. └──[✅]--(HOC)
  199. └──[✅]--(reducers)
  200. ├──[✅]--(Components-BEM-Solution-master)
  201. ├──[✅]--(components)
  202. ├──[✅]--(Box)
  203. ├──[✅]--(Dropdown)
  204. └──[✅]--(Section)
  205. └──[✅]--(markups)
  206. ├──[✅]--(Components-Constructors-Solution-master)
  207. ├──[✅]--(components)
  208. ├──[✅]--(Box)
  209. ├──[✅]--(Dropdown)
  210. ├──[✅]--(Section)
  211. └──[✅]--(Tabs)
  212. └──[✅]--(markups)
  213. ├──[✅]--(DOM-JavaScript-mini-Solution-master)
  214. └──[✅]--(components)
  215. ├──[✅]--(Box)
  216. ├──[✅]--(Header)
  217. ├──[✅]--(List)
  218. ├──[✅]--(Nav)
  219. ├──[✅]--(Section)
  220. └──[✅]--(Tabs)
  221. ├──[✅]--(HTML-CSS-mini-Solution-master)
  222. └──[✅]--(components)
  223. ├──[✅]--(Box)
  224. ├──[✅]--(Header)
  225. └──[✅]--(Section)
  226. ├──[✅]--(JavaScript-I-master)
  227. └──[✅]--(assignments)
  228. ├──[✅]--(LS-Data-Structures-I-Solution-master)
  229. ├──[✅]--(src)
  230. └──[✅]--(tests)
  231. ├──[✅]--(LS-Data-Structures-II-Solution-master)
  232. ├──[✅]--(src)
  233. └──[✅]--(tests)
  234. ├──[✅]--(LambdaSQL-master)
  235. └──[✅]--(LambdaSQL-master)
  236. ├──[✅]--(module1)
  237. ├──[✅]--(module2)
  238. ├──[✅]--(module3)
  239. └──[✅]--(module4)
  240. ├──[✅]--(MDB5-STANDARD-UI-KIT-Free-3.4.0)
  241. ├──[✅]--(css)
  242. ├──[✅]--(img)
  243. ├──[✅]--(js)
  244. └──[✅]--(src)
  245. ├──[✅]--(js)
  246. ├──[✅]--(bootstrap)
  247. ├──[✅]--(free)
  248. └──[✅]--(mdb)
  249. └──[✅]--(scss)
  250. ├──[✅]--(bootstrap)
  251. ├──[✅]--(bootstrap-rtl-fix)
  252. ├──[✅]--(custom)
  253. └──[✅]--(free)
  254. ├──[✅]--(Node-Express-Gmaps-Solution-Day-I-master)
  255. └──[✅]--(src)
  256. ├──[✅]--(controllers)
  257. └──[✅]--(models)
  258. ├──[✅]--(Node-Express-Gmaps-Solution-Day-II-master)
  259. └──[✅]--(src)
  260. ├──[✅]--(controllers)
  261. └──[✅]--(models)
  262. ├──[✅]--(React-Todo-Solution-master)
  263. ├──[✅]--(public)
  264. └──[✅]--(src)
  265. └──[✅]--(tests)
  266. ├──[✅]--(WEB-DEV-Checklist)
  267. └──[✅]--(WebDeveloperChecklist_files)
  268. ├──[✅]--(_External-learning-resources)
  269. ├──[✅]--(00-Javascript)
  270. ├──[✅]--(-Serverless-JavaScript-by-Example)
  271. ├──[✅]--(Section 1)
  272. ├──[✅]--(Section 2)
  273. ├──[✅]--(Section 3)
  274. ├──[✅]--(Section 4)
  275. └──[✅]--(Section 5)
  276. ├──[✅]--(JavaScript-Essentials)
  277. ├──[✅]--(Section 1)
  278. └──[✅]--(Section 2)
  279. ├──[✅]--(JavaScript-and-jQuery)
  280. ├──[✅]--(Day_1)
  281. ├──[✅]--(Day_2)
  282. ├──[✅]--(Day_3)
  283. ├──[✅]--(Day_4)
  284. ├──[✅]--(Day_5)
  285. ├──[✅]--(Day_6)
  286. └──[✅]--(Day_7)
  287. ├──[✅]--(JavaScript-useful-methods)
  288. └──[✅]--(JS)
  289. ├──[✅]--(Node.js_Design_Patterns)
  290. ├──[✅]--(Chapter01)
  291. ├──[✅]--(Chapter02)
  292. ├──[✅]--(Chapter03)
  293. ├──[✅]--(Chapter04)
  294. ├──[✅]--(Chapter05)
  295. ├──[✅]--(Chapter06)
  296. ├──[✅]--(Chapter07)
  297. ├──[✅]--(Chapter08)
  298. ├──[✅]--(Chapter09)
  299. ├──[✅]--(Chapter10)
  300. └──[✅]--(Chapter11)
  301. └──[✅]--(Object-oriented-programming-for-JavaScript)
  302. ├──[✅]--(Module 1)
  303. └──[✅]--(Module 2)
  304. └──[✅]--(01-Typescript)
  305. ├──[✅]--(Learning-Typescript-2)
  306. ├──[✅]--(Chapter02)
  307. ├──[✅]--(Chapter03)
  308. ├──[✅]--(Chapter07)
  309. ├──[✅]--(Chapter09)
  310. └──[✅]--(Chapter10)
  311. ├──[✅]--(LearningTypeScript)
  312. ├──[✅]--(chapters)
  313. ├──[✅]--(media)
  314. └──[✅]--(test)
  315. └──[✅]--(learn-typescript-3)
  316. ├──[✅]--(01-getting-started)
  317. ├──[✅]--(02-type-system-introduction)
  318. ├──[✅]--(03-javascript-features)
  319. ├──[✅]--(04-project)
  320. ├──[✅]--(05-diving-deeper)
  321. ├──[✅]--(06-integration)
  322. ├──[✅]--(lib)
  323. └──[✅]--(solutions)
  324. ├──[✅]--(_GENERAL-RESOURCES)
  325. ├──[✅]--(code-camp)
  326. ├──[✅]--(01-responsive-web-design)
  327. ├──[✅]--(applied-accessibility)
  328. ├──[✅]--(applied-visual-design)
  329. ├──[✅]--(basic-css)
  330. ├──[✅]--(basic-css-cafe-menu)
  331. ├──[✅]--(basic-html-and-html5)
  332. ├──[✅]--(basic-html-cat-photo-app)
  333. ├──[✅]--(css-flexbox)
  334. ├──[✅]--(css-grid)
  335. ├──[✅]--(css-variables-skyline)
  336. ├──[✅]--(responsive-web-design-principles)
  337. └──[✅]--(responsive-web-design-projects)
  338. ├──[✅]--(02-javascript-algorithms-and-data-structures)
  339. ├──[✅]--(basic-algorithm-scripting)
  340. ├──[✅]--(basic-data-structures)
  341. ├──[✅]--(basic-javascript)
  342. ├──[✅]--(basic-javascript-rpg-game)
  343. ├──[✅]--(debugging)
  344. ├──[✅]--(es6)
  345. ├──[✅]--(functional-programming)
  346. ├──[✅]--(functional-programming-spreadsheet)
  347. ├──[✅]--(intermediate-algorithm-scripting)
  348. ├──[✅]--(intermediate-javascript-calorie-counter)
  349. ├──[✅]--(javascript-algorithms-and-data-structures-projects)
  350. ├──[✅]--(object-oriented-programming)
  351. └──[✅]--(regular-expressions)
  352. ├──[✅]--(03-front-end-libraries)
  353. ├──[✅]--(bootstrap)
  354. ├──[✅]--(front-end-libraries-projects)
  355. ├──[✅]--(jquery)
  356. ├──[✅]--(react)
  357. ├──[✅]--(react-and-redux)
  358. ├──[✅]--(redux)
  359. └──[✅]--(sass)
  360. ├──[✅]--(04-data-visualization)
  361. ├──[✅]--(d3-dashboard)
  362. ├──[✅]--(data-visualization-projects)
  363. ├──[✅]--(data-visualization-with-d3)
  364. └──[✅]--(json-apis-and-ajax)
  365. ├──[✅]--(05-apis-and-microservices)
  366. ├──[✅]--(apis-and-microservices-projects)
  367. ├──[✅]--(basic-node-and-express)
  368. ├──[✅]--(managing-packages-with-npm)
  369. └──[✅]--(mongodb-and-mongoose)
  370. ├──[✅]--(06-quality-assurance)
  371. ├──[✅]--(advanced-node-and-express)
  372. ├──[✅]--(quality-assurance-and-testing-with-chai)
  373. └──[✅]--(quality-assurance-projects)
  374. ├──[✅]--(07-scientific-computing-with-python)
  375. ├──[✅]--(python-for-everybody)
  376. └──[✅]--(scientific-computing-with-python-projects)
  377. ├──[✅]--(08-data-analysis-with-python)
  378. ├──[✅]--(data-analysis-with-python-course)
  379. ├──[✅]--(data-analysis-with-python-projects)
  380. └──[✅]--(numpy)
  381. ├──[✅]--(09-information-security)
  382. ├──[✅]--(information-security-projects)
  383. ├──[✅]--(information-security-with-helmetjs)
  384. └──[✅]--(python-for-penetration-testing)
  385. ├──[✅]--(10-coding-interview-prep)
  386. ├──[✅]--(algorithms)
  387. ├──[✅]--(data-structures)
  388. ├──[✅]--(project-euler)
  389. ├──[✅]--(rosetta-code)
  390. └──[✅]--(take-home-projects)
  391. ├──[✅]--(11-macne-learning-with-python)
  392. ├──[✅]--(how-neural-networks-work)
  393. ├──[✅]--(macne-learning-with-python-projects)
  394. └──[✅]--(tensorflow)
  395. └──[✅]--(12-certificates)
  396. ├──[✅]--(apis-and-microservices-certificate)
  397. ├──[✅]--(data-analysis-with-python-certificate)
  398. ├──[✅]--(data-visualization-certificate)
  399. ├──[✅]--(front-end-libraries-certificate)
  400. ├──[✅]--(information-security-certificate)
  401. ├──[✅]--(javascript-algorithms-and-data-structures-certificate)
  402. ├──[✅]--(legacy-back-end-certificate)
  403. ├──[✅]--(legacy-data-visualization-certificate)
  404. ├──[✅]--(legacy-front-end-certificate)
  405. ├──[✅]--(legacy-full-stack-certificate)
  406. ├──[✅]--(legacy-information-security-and-quality-assurance-certificate)
  407. ├──[✅]--(macne-learning-with-python-certificate)
  408. ├──[✅]--(quality-assurance-certificate)
  409. ├──[✅]--(responsive-web-design-certificate)
  410. └──[✅]--(scientific-computing-with-python-certificate)
  411. └──[✅]--(w3c-standard-forHTML)
  412. ├──[✅]--(html5appsproject.files.wordpress.com)
  413. └──[✅]--(2014)
  414. ├──[✅]--(open-stand.org)
  415. └──[✅]--(wp-content)
  416. ├──[✅]--(pixel.wp.com)
  417. ├──[✅]--(www.developereconomics.com)
  418. └──[✅]--(wp-content)
  419. └──[✅]--(www.w3.org)
  420. ├──[✅]--(2015)
  421. ├──[✅]--(WAI)
  422. └──[✅]--(standards)
  423. ├──[✅]--(_OFFICIAL-resource-documentations)
  424. ├──[✅]--(docs.github.com)
  425. ├──[✅]--(assets)
  426. ├──[✅]--(fonts)
  427. └──[✅]--(images)
  428. ├──[✅]--(dist)
  429. └──[✅]--(fonts)
  430. ├──[✅]--(en)
  431. ├──[✅]--(actions)
  432. ├──[✅]--(code-security)
  433. ├──[✅]--(developers)
  434. ├──[✅]--(enterprise-server@2.21)
  435. ├──[✅]--(enterprise-server@2.22)
  436. ├──[✅]--(enterprise-server@3.0)
  437. ├──[✅]--(github)
  438. ├──[✅]--(github-ae@latest)
  439. ├──[✅]--(graphql)
  440. ├──[✅]--(organizations)
  441. ├──[✅]--(packages)
  442. └──[✅]--(rest)
  443. └──[✅]--(images)
  444. ├──[✅]--(modules)
  445. └──[✅]--(spinners)
  446. └──[✅]--(npm-docs)
  447. ├──[✅]--(commands)
  448. ├──[✅]--(configuring-npm)
  449. └──[✅]--(using-npm)
  450. ├──[✅]--(_Orginization-and-lambda-procedure)
  451. ├──[✅]--(_PYTHON)
  452. └──[✅]--(code-examples-master)
  453. ├──[✅]--(aws)
  454. ├──[✅]--(aws-policies)
  455. ├──[✅]--(bash)
  456. └──[✅]--(python)
  457. ├──[✅]--(concourse)
  458. ├──[✅]--(elasticsearch)
  459. └──[✅]--(python)
  460. ├──[✅]--(golang)
  461. ├──[✅]--(basics)
  462. └──[✅]--(robotgo)
  463. ├──[✅]--(mongodb)
  464. ├──[✅]--(golang)
  465. └──[✅]--(python)
  466. ├──[✅]--(mysql)
  467. └──[✅]--(python)
  468. ├──[✅]--(python-flask)
  469. └──[✅]--(api)
  470. ├──[✅]--(ruby)
  471. └──[✅]--(basics)
  472. └──[✅]--(sqlite)
  473. └──[✅]--(python)
  474. ├──[✅]--(_Past-Projects)
  475. ├──[✅]--(Atomic-Design-Solution-master)
  476. └──[✅]--(dogs)
  477. ├──[✅]--(public)
  478. └──[✅]--(src)
  479. ├──[✅]--(Client-Auth-Solution-master)
  480. ├──[✅]--(public)
  481. └──[✅]--(src)
  482. ├──[✅]--(actions)
  483. ├──[✅]--(components)
  484. └──[✅]--(reducers)
  485. ├──[✅]--(Components-BEM-Solution-master)
  486. ├──[✅]--(components)
  487. ├──[✅]--(Box)
  488. ├──[✅]--(Dropdown)
  489. └──[✅]--(Section)
  490. └──[✅]--(markups)
  491. ├──[✅]--(Components-Constructors-Solution-master)
  492. ├──[✅]--(components)
  493. ├──[✅]--(Box)
  494. ├──[✅]--(Dropdown)
  495. ├──[✅]--(Section)
  496. └──[✅]--(Tabs)
  497. └──[✅]--(markups)
  498. ├──[✅]--(DOM-II-master)
  499. ├──[✅]--(DOM-JavaScript-mini-Solution-master)
  500. └──[✅]--(components)
  501. ├──[✅]--(Box)
  502. ├──[✅]--(Header)
  503. ├──[✅]--(List)
  504. ├──[✅]--(Nav)
  505. ├──[✅]--(Section)
  506. └──[✅]--(Tabs)
  507. ├──[✅]--(Data-Structures-Notes-master)
  508. ├──[✅]--(BST_and_Heaps)
  509. ├──[✅]--(Doubly_Linked_List)
  510. ├──[✅]--(Interview_Problems)
  511. └──[✅]--(Linked_Lists)
  512. ├──[✅]--(Data-Structures-and-Algorithms-master)
  513. ├──[✅]--(assets)
  514. └──[✅]--(src)
  515. ├──[✅]--(algorithms)
  516. ├──[✅]--(analysis-of-algorithms)
  517. └──[✅]--(data-structures)
  518. ├──[✅]--(Data-Structures-master)
  519. ├──[✅]--(avl_tree)
  520. ├──[✅]--(binary_search_tree)
  521. ├──[✅]--(doubly_linked_list)
  522. ├──[✅]--(heap)
  523. ├──[✅]--(javascript)
  524. └──[✅]--(tests)
  525. ├──[✅]--(lru_cache)
  526. ├──[✅]--(python)
  527. ├──[✅]--(binary_search_tree)
  528. ├──[✅]--(doubly_linked_list)
  529. ├──[✅]--(heap)
  530. ├──[✅]--(linked_list)
  531. └──[✅]--(queue)
  532. └──[✅]--(queue)
  533. ├──[✅]--(Graphs-Notes-master)
  534. ├──[✅]--(img)
  535. ├──[✅]--(lecture1)
  536. ├──[✅]--(lecture2)
  537. ├──[✅]--(lecture3)
  538. └──[✅]--(lecture4)
  539. ├──[✅]--(Graphs-master)
  540. ├──[✅]--(javascript)
  541. ├──[✅]--(guided-demo)
  542. ├──[✅]--(objectives)
  543. └──[✅]--(projects)
  544. ├──[✅]--(objectives)
  545. ├──[✅]--(breadth-first-search)
  546. ├──[✅]--(connected-components)
  547. ├──[✅]--(depth-first-search)
  548. ├──[✅]--(graph-intro)
  549. ├──[✅]--(graph-representations)
  550. └──[✅]--(randomness)
  551. ├──[✅]--(projects)
  552. ├──[✅]--(adventure)
  553. ├──[✅]--(ancestor)
  554. ├──[✅]--(graph)
  555. └──[✅]--(social)
  556. └──[✅]--(python)
  557. ├──[✅]--(guided-demo)
  558. └──[✅]--(projects)
  559. ├──[✅]--(HTML-CSS-mini-Solution-master)
  560. └──[✅]--(components)
  561. ├──[✅]--(Box)
  562. ├──[✅]--(Header)
  563. └──[✅]--(Section)
  564. ├──[✅]--(HTTP-AJAX-II-master)
  565. ├──[✅]--(app)
  566. ├──[✅]--(public)
  567. └──[✅]--(src)
  568. └──[✅]--(server)
  569. ├──[✅]--(HTTP-AJAX-master)
  570. └──[✅]--(friends)
  571. ├──[✅]--(public)
  572. └──[✅]--(src)
  573. ├──[✅]--(Hash-Tables-Notes-master)
  574. ├──[✅]--(Intro-Python-master)
  575. └──[✅]--(src)
  576. ├──[✅]--(day-1-toy)
  577. ├──[✅]--(days-2-4-adv)
  578. ├──[✅]--(mini-challenge)
  579. └──[✅]--(python-example)
  580. ├──[✅]--(Intro-to-C-master)
  581. ├──[✅]--(first)
  582. ├──[✅]--(fizzbuzz)
  583. └──[✅]--(tests)
  584. ├──[✅]--(hangman)
  585. ├──[✅]--(malloc)
  586. └──[✅]--(tests)
  587. ├──[✅]--(pointers)
  588. └──[✅]--(tests)
  589. ├──[✅]--(queue)
  590. └──[✅]--(tests)
  591. ├──[✅]--(quicksort)
  592. └──[✅]--(tests)
  593. ├──[✅]--(strings)
  594. └──[✅]--(tests)
  595. ├──[✅]--(structs)
  596. └──[✅]--(tests)
  597. └──[✅]--(utils)
  598. ├──[✅]--(JavaScript-I-Guided-master)
  599. ├──[✅]--(LS-Data-Structures-I-Solution-master)
  600. ├──[✅]--(src)
  601. └──[✅]--(tests)
  602. ├──[✅]--(LS-Data-Structures-II-Solution-master)
  603. ├──[✅]--(src)
  604. └──[✅]--(tests)
  605. ├──[✅]--(Lambda-School-Instruction-Notes-master)
  606. ├──[✅]--(10. Data Persistence in Web APIs)
  607. └──[✅]--(assets)
  608. ├──[✅]--(11. Authentication)
  609. └──[✅]--(12. Testing)
  610. ├──[✅]--(Lambda-School-master)
  611. ├──[✅]--(Week 1)
  612. ├──[✅]--(Sprint-Challenge User-Interface)
  613. ├──[✅]--(User Interface I Project 2 - Sweet Eats Bakery)
  614. ├──[✅]--(User Interface I HTML Markup)
  615. ├──[✅]--(User Interface III Services Page)
  616. └──[✅]--(User-Interface II Innovation)
  617. ├──[✅]--(Week 10)
  618. ├──[✅]--(Car-Sales)
  619. ├──[✅]--(React-Redux-App)
  620. ├──[✅]--(Sprint-Challenge-State-Management-Smurfs)
  621. ├──[✅]--(react-shopping-cart)
  622. └──[✅]--(reducer-todo)
  623. ├──[✅]--(Week 11)
  624. ├──[✅]--(Auth-Friends)
  625. ├──[✅]--(HTTP-Movies-Assignment)
  626. ├──[✅]--(react-bubbles)
  627. └──[✅]--(webtesting-iii-challenge)
  628. ├──[✅]--(Week 12 - FoodieFun)
  629. ├──[✅]--(Week 13)
  630. ├──[✅]--(node-api1-project)
  631. ├──[✅]--(webapi-challenge-sprint)
  632. ├──[✅]--(webapi-ii-challenge)
  633. └──[✅]--(webapi-iii-challenge)
  634. ├──[✅]--(Week 14)
  635. ├──[✅]--(node-db-challenge-sprint)
  636. ├──[✅]--(node-db3-challenge)
  637. ├──[✅]--(node-db4)
  638. ├──[✅]--(webdb-i-challenge)
  639. └──[✅]--(webdb-ii-challenge)
  640. ├──[✅]--(Week 15)
  641. ├──[✅]--(Sprint-Challenge-Authentication)
  642. ├──[✅]--(node-server-testing-challenge)
  643. ├──[✅]--(webauth-i-challenge)
  644. └──[✅]--(webauth-iii-challenge)
  645. ├──[✅]--(Week 16 - Mentor Me)
  646. ├──[✅]--(Week 17 - 25 Future Hope)
  647. ├──[✅]--(Week 2)
  648. ├──[✅]--(Digital Resume)
  649. ├──[✅]--(Fun Bus)
  650. ├──[✅]--(Portfolio)
  651. ├──[✅]--(Resposnive-Web-Design)
  652. └──[✅]--(Sprint Challenge)
  653. ├──[✅]--(Week 3)
  654. ├──[✅]--(JavaScript-I)
  655. ├──[✅]--(JavaScript-II)
  656. ├──[✅]--(JavaScript-III)
  657. ├──[✅]--(JavaScript-IV)
  658. └──[✅]--(Sprint-Challenge)
  659. ├──[✅]--(Week 4 - Local Voter Guide)
  660. ├──[✅]--(css)
  661. ├──[✅]--(images)
  662. └──[✅]--(less)
  663. ├──[✅]--(Week 5)
  664. ├──[✅]--(DOM-I)
  665. ├──[✅]--(DOM-II)
  666. ├──[✅]--(Newsfeed-Components)
  667. ├──[✅]--(Sprint-Challenge-Applied-Javascript)
  668. └──[✅]--(github-usercard)
  669. ├──[✅]--(Week 6)
  670. ├──[✅]--(Sprint-Challenge-React-Wars)
  671. ├──[✅]--(lambda-calculator)
  672. ├──[✅]--(nasa-photo-of-the-day)
  673. └──[✅]--(react-american-football-scoreboard)
  674. ├──[✅]--(Week 7)
  675. ├──[✅]--(React-Router-Basic-Nav)
  676. ├──[✅]--(React-Router-Movies)
  677. ├──[✅]--(Sprint-Challenge-Single-Page-Apps)
  678. ├──[✅]--(User-Onboarding)
  679. └──[✅]--(team-builder)
  680. ├──[✅]--(Week 8 - Water My Plants)
  681. └──[✅]--(Week 9)
  682. ├──[✅]--(Github-User-Card)
  683. ├──[✅]--(React-Todo)
  684. ├──[✅]--(Sprint-Challenge-Advanced-React)
  685. └──[✅]--(dark-mode)
  686. ├──[✅]--(LambdaSchool-master)
  687. ├──[✅]--(31d1)
  688. ├──[✅]--(Administration)
  689. ├──[✅]--(Tech Skills Day badges)
  690. ├──[✅]--(__MACOSX)
  691. ├──[✅]--(certs)
  692. ├──[✅]--(marketing)
  693. ├──[✅]--(studying)
  694. └──[✅]--(zoom)
  695. ├──[✅]--(Front-End-master)
  696. ├──[✅]--(Front-End-master)
  697. └──[✅]--(client)
  698. ├──[✅]--(JavaScript30)
  699. ├──[✅]--(01)
  700. ├──[✅]--(02)
  701. ├──[✅]--(03)
  702. ├──[✅]--(04)
  703. ├──[✅]--(05)
  704. ├──[✅]--(06)
  705. ├──[✅]--(07)
  706. ├──[✅]--(08)
  707. ├──[✅]--(09)
  708. ├──[✅]--(10)
  709. ├──[✅]--(11)
  710. ├──[✅]--(12)
  711. ├──[✅]--(13)
  712. ├──[✅]--(14)
  713. ├──[✅]--(15)
  714. ├──[✅]--(16)
  715. ├──[✅]--(17)
  716. ├──[✅]--(18)
  717. ├──[✅]--(19)
  718. ├──[✅]--(20)
  719. ├──[✅]--(21)
  720. ├──[✅]--(22)
  721. ├──[✅]--(23)
  722. ├──[✅]--(24)
  723. ├──[✅]--(25)
  724. ├──[✅]--(26)
  725. ├──[✅]--(27)
  726. ├──[✅]--(28)
  727. ├──[✅]--(29)
  728. ├──[✅]--(30)
  729. └──[✅]--(JavaScript30-master)
  730. ├──[✅]--(aa-score)
  731. ├──[✅]--(public)
  732. └──[✅]--(src)
  733. ├──[✅]--(bw1-tl)
  734. ├──[✅]--(BackEnd-master)
  735. ├──[✅]--(admin)
  736. ├──[✅]--(api)
  737. ├──[✅]--(auth)
  738. ├──[✅]--(database)
  739. ├──[✅]--(middleware)
  740. ├──[✅]--(todos)
  741. └──[✅]--(volunteer)
  742. ├──[✅]--(css)
  743. ├──[✅]--(evoingram.github.io)
  744. ├──[✅]--(labs)
  745. ├──[✅]--(backend)
  746. ├──[✅]--(frontend)
  747. ├──[✅]--(last journal entry)
  748. └──[✅]--(video-to-next-group)
  749. ├──[✅]--(m1)
  750. ├──[✅]--(11b1)
  751. ├──[✅]--(11c1)
  752. ├──[✅]--(11d1)
  753. ├──[✅]--(12a1)
  754. ├──[✅]--(12b1)
  755. ├──[✅]--(12c1)
  756. ├──[✅]--(12d1)
  757. ├──[✅]--(13a1)
  758. ├──[✅]--(13b1)
  759. ├──[✅]--(13c1)
  760. ├──[✅]--(13d1)
  761. ├──[✅]--(13e1)
  762. ├──[✅]--(14a1)
  763. ├──[✅]--(SC-ACSS)
  764. └──[✅]--(Sprint-Challenge--Advanced-CSS)
  765. ├──[✅]--(m2)
  766. ├──[✅]--(21a1)
  767. ├──[✅]--(21b1)
  768. ├──[✅]--(21c1)
  769. ├──[✅]--(21d1)
  770. ├──[✅]--(21e1)
  771. ├──[✅]--(22a1)
  772. ├──[✅]--(22b1)
  773. ├──[✅]--(22c1)
  774. ├──[✅]--(22e1)
  775. ├──[✅]--(23a1)
  776. ├──[✅]--(23a2)
  777. ├──[✅]--(23b1)
  778. ├──[✅]--(23c1)
  779. ├──[✅]--(23d1)
  780. ├──[✅]--(23d2)
  781. ├──[✅]--(23e1)
  782. └──[✅]--(24a1)
  783. ├──[✅]--(m3)
  784. ├──[✅]--(31a1)
  785. ├──[✅]--(31a2)
  786. ├──[✅]--(31b1)
  787. ├──[✅]--(31c1)
  788. ├──[✅]--(31d1)
  789. ├──[✅]--(31e1)
  790. ├──[✅]--(32a1)
  791. ├──[✅]--(32b1)
  792. ├──[✅]--(32c1)
  793. ├──[✅]--(32d1)
  794. ├──[✅]--(32e1)
  795. ├──[✅]--(33a1)
  796. ├──[✅]--(33b1)
  797. ├──[✅]--(33d1)
  798. └──[✅]--(33e1)
  799. ├──[✅]--(m4)
  800. ├──[✅]--(41a1)
  801. ├──[✅]--(41a2)
  802. ├──[✅]--(41b1)
  803. ├──[✅]--(41b2)
  804. ├──[✅]--(41c1)
  805. ├──[✅]--(41c2)
  806. ├──[✅]--(41d1)
  807. ├──[✅]--(41e1)
  808. ├──[✅]--(41e1app)
  809. ├──[✅]--(42a1)
  810. ├──[✅]--(42a2)
  811. ├──[✅]--(42b1)
  812. ├──[✅]--(42b2)
  813. ├──[✅]--(42c1)
  814. ├──[✅]--(42c2)
  815. ├──[✅]--(42d1)
  816. ├──[✅]--(42d2)
  817. ├──[✅]--(42e1)
  818. ├──[✅]--(43a1)
  819. ├──[✅]--(43a2)
  820. ├──[✅]--(43b1)
  821. ├──[✅]--(43b2)
  822. ├──[✅]--(43c1)
  823. ├──[✅]--(43c2)
  824. ├──[✅]--(43d1)
  825. ├──[✅]--(43d1a)
  826. ├──[✅]--(43d2)
  827. └──[✅]--(43e1)
  828. ├──[✅]--(m5)
  829. ├──[✅]--(51a1)
  830. ├──[✅]--(51b1)
  831. ├──[✅]--(51c1)
  832. ├──[✅]--(51d1)
  833. ├──[✅]--(51d2)
  834. ├──[✅]--(51e1)
  835. ├──[✅]--(52b1)
  836. ├──[✅]--(52c1)
  837. ├──[✅]--(52c2)
  838. ├──[✅]--(52d1)
  839. ├──[✅]--(53a1)
  840. ├──[✅]--(53b1)
  841. ├──[✅]--(53c1)
  842. └──[✅]--(53d1)
  843. ├──[✅]--(m6)
  844. ├──[✅]--(61a1)
  845. ├──[✅]--(61b1)
  846. ├──[✅]--(61c1)
  847. ├──[✅]--(62a1)
  848. ├──[✅]--(62b1)
  849. ├──[✅]--(63a1)
  850. ├──[✅]--(63b1)
  851. ├──[✅]--(63c1)
  852. └──[✅]--(63d1)
  853. ├──[✅]--(m7)
  854. ├──[✅]--(71a1)
  855. ├──[✅]--(71e1)
  856. ├──[✅]--(72a1)
  857. ├──[✅]--(73a1)
  858. └──[✅]--(74a1)
  859. ├──[✅]--(src)
  860. ├──[✅]--(iterative_sorting)
  861. └──[✅]--(searcng)
  862. ├──[✅]--(summary)
  863. ├──[✅]--(Node Express Knex)
  864. ├──[✅]--(certifications)
  865. ├──[✅]--(cobol)
  866. ├──[✅]--(complete)
  867. ├──[✅]--(general)
  868. ├──[✅]--(interviewing)
  869. ├──[✅]--(testing)
  870. └──[✅]--(typescript)
  871. └──[✅]--(tlbw)
  872. └──[✅]--(client)
  873. ├──[✅]--(Mongo-I-master)
  874. └──[✅]--(src)
  875. ├──[✅]--(controllers)
  876. ├──[✅]--(models)
  877. └──[✅]--(routes)
  878. ├──[✅]--(Node-Blog-master)
  879. ├──[✅]--(api)
  880. ├──[✅]--(post)
  881. ├──[✅]--(tag)
  882. └──[✅]--(user)
  883. ├──[✅]--(config)
  884. ├──[✅]--(data)
  885. ├──[✅]--(helpers)
  886. ├──[✅]--(migrations)
  887. └──[✅]--(seeds)
  888. └──[✅]--(routers)
  889. ├──[✅]--(Node-Express-Gmaps-Solution-Day-I-master)
  890. └──[✅]--(src)
  891. ├──[✅]--(controllers)
  892. └──[✅]--(models)
  893. ├──[✅]--(Node-Express-Gmaps-Solution-Day-II-master)
  894. └──[✅]--(src)
  895. ├──[✅]--(controllers)
  896. └──[✅]--(models)
  897. ├──[✅]--(Precourse-master)
  898. ├──[✅]--(Lesson1-Git)
  899. ├──[✅]--(Lesson10-JS-VII)
  900. └──[✅]--(homework)
  901. ├──[✅]--(Lesson11-JS-VIII)
  902. └──[✅]--(homework)
  903. ├──[✅]--(Lesson12-DOM)
  904. └──[✅]--(homework)
  905. ├──[✅]--(Lesson2-HTML-CSS)
  906. └──[✅]--(homework)
  907. ├──[✅]--(Lesson3-CSS-Positioning)
  908. └──[✅]--(homework)
  909. ├──[✅]--(Lesson4-JS-I)
  910. └──[✅]--(homework)
  911. ├──[✅]--(Lesson5-JS-II)
  912. └──[✅]--(homework)
  913. ├──[✅]--(Lesson6-JS-III)
  914. └──[✅]--(homework)
  915. ├──[✅]--(Lesson7-JS-IV)
  916. └──[✅]--(homework)
  917. ├──[✅]--(Lesson8-JS-V)
  918. └──[✅]--(homework)
  919. └──[✅]--(Lesson9-JS-VI)
  920. └──[✅]--(homework)
  921. ├──[✅]--(Python-II-Notes-master)
  922. └──[✅]--(src)
  923. └──[✅]--(__pycache__)
  924. ├──[✅]--(Python-master)
  925. ├──[✅]--(arithmetic_analysis)
  926. └──[✅]--(image_data)
  927. ├──[✅]--(backtracking)
  928. ├──[✅]--(bit_manipulation)
  929. ├──[✅]--(blockchain)
  930. ├──[✅]--(boolean_algebra)
  931. ├──[✅]--(cellular_automata)
  932. ├──[✅]--(ciphers)
  933. ├──[✅]--(compression)
  934. └──[✅]--(image_data)
  935. ├──[✅]--(computer_vision)
  936. ├──[✅]--(conversions)
  937. ├──[✅]--(data_structures)
  938. ├──[✅]--(binary_tree)
  939. ├──[✅]--(disjoint_set)
  940. ├──[✅]--(hasng)
  941. ├──[✅]--(heap)
  942. ├──[✅]--(linked_list)
  943. ├──[✅]--(queue)
  944. ├──[✅]--(stacks)
  945. └──[✅]--(trie)
  946. ├──[✅]--(digital_image_processing)
  947. ├──[✅]--(dithering)
  948. ├──[✅]--(edge_detection)
  949. ├──[✅]--(filters)
  950. ├──[✅]--(✅stogram_equalization)
  951. ├──[✅]--(image_data)
  952. ├──[✅]--(resize)
  953. └──[✅]--(rotation)
  954. ├──[✅]--(divide_and_conquer)
  955. ├──[✅]--(dynamic_programming)
  956. ├──[✅]--(electronics)
  957. ├──[✅]--(file_transfer)
  958. └──[✅]--(tests)
  959. ├──[✅]--(fuzzy_logic)
  960. ├──[✅]--(genetic_algorithm)
  961. ├──[✅]--(geodesy)
  962. ├──[✅]--(grapcs)
  963. ├──[✅]--(graphs)
  964. └──[✅]--(tests)
  965. ├──[✅]--(hashes)
  966. ├──[✅]--(knapsack)
  967. └──[✅]--(tests)
  968. ├──[✅]--(linear_algebra)
  969. └──[✅]--(src)
  970. ├──[✅]--(macne_learning)
  971. ├──[✅]--(forecasting)
  972. └──[✅]--(lstm)
  973. ├──[✅]--(maths)
  974. ├──[✅]--(images)
  975. └──[✅]--(series)
  976. ├──[✅]--(matrix)
  977. └──[✅]--(tests)
  978. ├──[✅]--(networking_flow)
  979. ├──[✅]--(neural_network)
  980. ├──[✅]--(other)
  981. ├──[✅]--(project_euler)
  982. ├──[✅]--(problem_001)
  983. ├──[✅]--(problem_002)
  984. ├──[✅]--(problem_003)
  985. ├──[✅]--(problem_004)
  986. ├──[✅]--(problem_005)
  987. ├──[✅]--(problem_006)
  988. ├──[✅]--(problem_007)
  989. ├──[✅]--(problem_008)
  990. ├──[✅]--(problem_009)
  991. ├──[✅]--(problem_010)
  992. ├──[✅]--(problem_011)
  993. ├──[✅]--(problem_012)
  994. ├──[✅]--(problem_013)
  995. ├──[✅]--(problem_014)
  996. ├──[✅]--(problem_015)
  997. ├──[✅]--(problem_016)
  998. ├──[✅]--(problem_017)
  999. ├──[✅]--(problem_018)
  1000. ├──[✅]--(problem_019)
  1001. ├──[✅]--(problem_020)
  1002. ├──[✅]--(problem_021)
  1003. ├──[✅]--(problem_022)
  1004. ├──[✅]--(problem_023)
  1005. ├──[✅]--(problem_024)
  1006. ├──[✅]--(problem_025)
  1007. ├──[✅]--(problem_026)
  1008. ├──[✅]--(problem_027)
  1009. ├──[✅]--(problem_028)
  1010. ├──[✅]--(problem_029)
  1011. ├──[✅]--(problem_030)
  1012. ├──[✅]--(problem_031)
  1013. ├──[✅]--(problem_032)
  1014. ├──[✅]--(problem_033)
  1015. ├──[✅]--(problem_034)
  1016. ├──[✅]--(problem_035)
  1017. ├──[✅]--(problem_036)
  1018. ├──[✅]--(problem_037)
  1019. ├──[✅]--(problem_038)
  1020. ├──[✅]--(problem_039)
  1021. ├──[✅]--(problem_040)
  1022. ├──[✅]--(problem_041)
  1023. ├──[✅]--(problem_042)
  1024. ├──[✅]--(problem_043)
  1025. ├──[✅]--(problem_044)
  1026. ├──[✅]--(problem_045)
  1027. ├──[✅]--(problem_046)
  1028. ├──[✅]--(problem_047)
  1029. ├──[✅]--(problem_048)
  1030. ├──[✅]--(problem_049)
  1031. ├──[✅]--(problem_050)
  1032. ├──[✅]--(problem_051)
  1033. ├──[✅]--(problem_052)
  1034. ├──[✅]--(problem_053)
  1035. ├──[✅]--(problem_054)
  1036. ├──[✅]--(problem_055)
  1037. ├──[✅]--(problem_056)
  1038. ├──[✅]--(problem_057)
  1039. ├──[✅]--(problem_058)
  1040. ├──[✅]--(problem_059)
  1041. ├──[✅]--(problem_062)
  1042. ├──[✅]--(problem_063)
  1043. ├──[✅]--(problem_064)
  1044. ├──[✅]--(problem_065)
  1045. ├──[✅]--(problem_067)
  1046. ├──[✅]--(problem_069)
  1047. ├──[✅]--(problem_070)
  1048. ├──[✅]--(problem_071)
  1049. ├──[✅]--(problem_072)
  1050. ├──[✅]--(problem_074)
  1051. ├──[✅]--(problem_075)
  1052. ├──[✅]--(problem_076)
  1053. ├──[✅]--(problem_077)
  1054. ├──[✅]--(problem_080)
  1055. ├──[✅]--(problem_081)
  1056. ├──[✅]--(problem_085)
  1057. ├──[✅]--(problem_086)
  1058. ├──[✅]--(problem_087)
  1059. ├──[✅]--(problem_089)
  1060. ├──[✅]--(problem_091)
  1061. ├──[✅]--(problem_097)
  1062. ├──[✅]--(problem_099)
  1063. ├──[✅]--(problem_101)
  1064. ├──[✅]--(problem_102)
  1065. ├──[✅]--(problem_107)
  1066. ├──[✅]--(problem_112)
  1067. ├──[✅]--(problem_113)
  1068. ├──[✅]--(problem_119)
  1069. ├──[✅]--(problem_120)
  1070. ├──[✅]--(problem_123)
  1071. ├──[✅]--(problem_125)
  1072. ├──[✅]--(problem_129)
  1073. ├──[✅]--(problem_135)
  1074. ├──[✅]--(problem_173)
  1075. ├──[✅]--(problem_174)
  1076. ├──[✅]--(problem_180)
  1077. ├──[✅]--(problem_188)
  1078. ├──[✅]--(problem_191)
  1079. ├──[✅]--(problem_203)
  1080. ├──[✅]--(problem_206)
  1081. ├──[✅]--(problem_207)
  1082. ├──[✅]--(problem_234)
  1083. ├──[✅]--(problem_301)
  1084. └──[✅]--(problem_551)
  1085. ├──[✅]--(quantum)
  1086. ├──[✅]--(scheduling)
  1087. ├──[✅]--(scripts)
  1088. ├──[✅]--(searches)
  1089. ├──[✅]--(sorts)
  1090. ├──[✅]--(strings)
  1091. ├──[✅]--(traversals)
  1092. └──[✅]--(web_programming)
  1093. ├──[✅]--(React-Todo-Solution-master)
  1094. ├──[✅]--(public)
  1095. └──[✅]--(src)
  1096. └──[✅]--(tests)
  1097. ├──[✅]--(React-Todo-master)
  1098. ├──[✅]--(public)
  1099. └──[✅]--(src)
  1100. └──[✅]--(components)
  1101. ├──[✅]--(Relational-Databases-master)
  1102. └──[✅]--(solutions)
  1103. ├──[✅]--(Server-Testing-master)
  1104. ├──[✅]--(Sorting-master)
  1105. └──[✅]--(src)
  1106. ├──[✅]--(iterative_sorting)
  1107. ├──[✅]--(recursive_sorting)
  1108. └──[✅]--(searcng)
  1109. ├──[✅]--(Static-Pages-master)
  1110. ├──[✅]--(Wteboard-Pairing-master)
  1111. ├──[✅]--(BSTFromArray)
  1112. ├──[✅]--(BalancedBinaryTree)
  1113. ├──[✅]--(BalancedBrackets)
  1114. ├──[✅]--(BitcoinTrading)
  1115. ├──[✅]--(ClimbingStairs)
  1116. ├──[✅]--(CountingVotes)
  1117. ├──[✅]--(DepthFirstSearch)
  1118. ├──[✅]--(FindRotationPoint)
  1119. ├──[✅]--(IntegerPairs)
  1120. ├──[✅]--(KthToLastNode)
  1121. ├──[✅]--(LargestContiguousSum)
  1122. ├──[✅]--(LargestStack)
  1123. ├──[✅]--(LinkedListPalindrome)
  1124. ├──[✅]--(MatrixSpiralCopy)
  1125. ├──[✅]--(MergingTwoPackages)
  1126. ├──[✅]--(MinHeap)
  1127. ├──[✅]--(MinJumps)
  1128. ├──[✅]--(NthFibonacci)
  1129. ├──[✅]--(OneWayFlight)
  1130. ├──[✅]--(ProductOfAllOtherNumbers)
  1131. ├──[✅]--(QueueWithTwoStacks)
  1132. ├──[✅]--(ReverseLinkedList)
  1133. ├──[✅]--(RingBuffer)
  1134. ├──[✅]--(RobotPaths)
  1135. ├──[✅]--(RockPaperScissors)
  1136. ├──[✅]--(RotateImage)
  1137. ├──[✅]--(SetOfStacks)
  1138. ├──[✅]--(SortStack)
  1139. ├──[✅]--(SortTopScores)
  1140. ├──[✅]--(TemperatureTracker)
  1141. ├──[✅]--(TimePlanner)
  1142. └──[✅]--(ValidateBinaryTree)
  1143. ├──[✅]--(_DS-Python)
  1144. ├──[✅]--(Algorithms-I-Notes-master)
  1145. └──[✅]--(practice_algs)
  1146. └──[✅]--(Algorithms-master)
  1147. ├──[✅]--(climbing_stairs)
  1148. ├──[✅]--(knapsack)
  1149. ├──[✅]--(making_change)
  1150. ├──[✅]--(recipe_batches)
  1151. ├──[✅]--(rock_paper_scissors)
  1152. └──[✅]--(stock_prices)
  1153. ├──[✅]--(_Individual-Projects)
  1154. ├──[✅]--(Advanced-Form-Management-Guided-master)
  1155. └──[✅]--(app)
  1156. ├──[✅]--(Bootstrap-I-master)
  1157. ├──[✅]--(_example-resume)
  1158. ├──[✅]--(css)
  1159. ├──[✅]--(img)
  1160. ├──[✅]--(js)
  1161. └──[✅]--(less)
  1162. ├──[✅]--(Components-BEM-master)
  1163. ├──[✅]--(components)
  1164. └──[✅]--(markups)
  1165. ├──[✅]--(Components-Constructors-master)
  1166. ├──[✅]--(components)
  1167. └──[✅]--(markups)
  1168. ├──[✅]--(Computer-Arctecture-Notes-master)
  1169. ├──[✅]--(lectureI)
  1170. ├──[✅]--(lectureII)
  1171. ├──[✅]--(lectureIII)
  1172. └──[✅]--(lectureIV)
  1173. ├──[✅]--(Course_and_Book_Notes-master)
  1174. ├──[✅]--(Algorithm Design Manual)
  1175. ├──[✅]--(Computer Science Distilled)
  1176. ├──[✅]--(Lambda_Notes)
  1177. ├──[✅]--(Programming Foundations)
  1178. ├──[✅]--(The_C_Programming_Language)
  1179. ├──[✅]--(Tnk Like a Programmer)
  1180. └──[✅]--(YoutubeVideos)
  1181. ├──[✅]--(JavaScript-I-master)
  1182. └──[✅]--(assignments)
  1183. ├──[✅]--(JavaScript-II-master)
  1184. └──[✅]--(assignments)
  1185. ├──[✅]--(JavaScript-III-master)
  1186. └──[✅]--(assignments)
  1187. └──[✅]--(JavaScript-IV-master)
  1188. └──[✅]--(assignments)
  1189. ├──[✅]--(_MOST-USEFUL)
  1190. └──[✅]--(Boilerplate-master)
  1191. ├──[✅]--(Apollo)
  1192. ├──[✅]--(Express-MongoDB)
  1193. ├──[✅]--(React-Redux)
  1194. └──[✅]--(TypeGraphQL)
  1195. ├──[✅]--(_misc)
  1196. └──[✅]--(Blockchain-Notes-master)
  1197. └──[✅]--(communication_gp)
  1198. ├──[✅]--(data_struct_and_algo-master)
  1199. └──[✅]--(logs)
  1200. ├──[✅]--(dev-portfolio-master)
  1201. ├──[✅]--(public)
  1202. ├──[✅]--(src)
  1203. ├──[✅]--(components)
  1204. ├──[✅]--(global-scss)
  1205. └──[✅]--(views)
  1206. └──[✅]--(tests_setup)
  1207. └──[✅]--(__mocks__)
  1208. ├──[✅]--(feelscollective-master)
  1209. ├──[✅]--(css)
  1210. ├──[✅]--(fonts)
  1211. ├──[✅]--(icomoon)
  1212. └──[✅]--(open-iconic)
  1213. ├──[✅]--(images)
  1214. ├──[✅]--(js)
  1215. └──[✅]--(scss)
  1216. ├──[✅]--(five-master)
  1217. └──[✅]--(FiveFeed)
  1218. ├──[✅]--(lambda)
  1219. ├──[✅]--(lambda-src)
  1220. └──[✅]--(src)
  1221. ├──[✅]--(homepage-master)
  1222. ├──[✅]--(css)
  1223. ├──[✅]--(fonts)
  1224. ├──[✅]--(images)
  1225. └──[✅]--(js)
  1226. ├──[✅]--(backstretch)
  1227. ├──[✅]--(bootstrap)
  1228. ├──[✅]--(easing)
  1229. ├──[✅]--(magnific-popup)
  1230. ├──[✅]--(owl-carousel)
  1231. ├──[✅]--(uitotop)
  1232. └──[✅]--(wow)
  1233. ├──[✅]--(lambda-demo-project-master)
  1234. ├──[✅]--(api)
  1235. ├──[✅]--(public)
  1236. └──[✅]--(src)
  1237. ├──[✅]--(lambda-lecture-notes-main)
  1238. ├──[✅]--(3-1-advanced-react)
  1239. ├──[✅]--(images)
  1240. └──[✅]--(pdf)
  1241. ├──[✅]--(3-2-advanced-state-mangement)
  1242. └──[✅]--(images)
  1243. └──[✅]--(3-3-advanced-web-applications)
  1244. └──[✅]--(images)
  1245. ├──[✅]--(portfolio-main)
  1246. ├──[✅]--(components)
  1247. ├──[✅]--(pages)
  1248. ├──[✅]--(public)
  1249. └──[✅]--(static)
  1250. ├──[✅]--(scripts)
  1251. ├──[✅]--(styles)
  1252. └──[✅]--(utils)
  1253. ├──[✅]--(react-carousel-master)
  1254. ├──[✅]--(public)
  1255. └──[✅]--(src)
  1256. └──[✅]--(assets)
  1257. ├──[✅]--(react-design-patterns-and-best-practices-master)
  1258. ├──[✅]--(chapter-03)
  1259. └──[✅]--(reusable-components)
  1260. ├──[✅]--(chapter-04)
  1261. ├──[✅]--(container-presentational)
  1262. └──[✅]--(✅gher-order-components)
  1263. ├──[✅]--(chapter-05)
  1264. ├──[✅]--(data-fetcng)
  1265. ├──[✅]--(data-flow)
  1266. └──[✅]--(react-refetch)
  1267. ├──[✅]--(chapter-06)
  1268. ├──[✅]--(controlled-components)
  1269. ├──[✅]--(css-transition-group)
  1270. ├──[✅]--(event-switch)
  1271. ├──[✅]--(json-schema)
  1272. ├──[✅]--(react-motion)
  1273. ├──[✅]--(refs-dom)
  1274. ├──[✅]--(refs-instance)
  1275. ├──[✅]--(svg)
  1276. └──[✅]--(uncontrolled-components)
  1277. ├──[✅]--(chapter-07)
  1278. ├──[✅]--(css-modules)
  1279. ├──[✅]--(inline-styles)
  1280. ├──[✅]--(radium)
  1281. └──[✅]--(styled-components)
  1282. ├──[✅]--(chapter-08)
  1283. ├──[✅]--(data-fetcng)
  1284. ├──[✅]--(next)
  1285. └──[✅]--(server-side-rendering)
  1286. ├──[✅]--(chapter-09)
  1287. ├──[✅]--(constants-props)
  1288. ├──[✅]--(creating-functions)
  1289. ├──[✅]--(good-design)
  1290. └──[✅]--(keys)
  1291. ├──[✅]--(chapter-10)
  1292. ├──[✅]--(enzyme)
  1293. ├──[✅]--(✅gher-order-components)
  1294. ├──[✅]--(jest)
  1295. ├──[✅]--(mocha)
  1296. ├──[✅]--(page-object)
  1297. └──[✅]--(real-world)
  1298. └──[✅]--(chapter-11)
  1299. ├──[✅]--(index-as-key)
  1300. ├──[✅]--(initializing-state)
  1301. └──[✅]--(mutating-state)
  1302. ├──[✅]--(sql-lab-master)
  1303. └──[✅]--(img)
  1304. ├──[✅]--(web-guided-project-HTTP-main)
  1305. ├──[✅]--(client)
  1306. └──[✅]--(src)
  1307. └──[✅]--(server)
  1308. └──[✅]--(web-guided-project-testing-web-apps-solution-main)
  1309. ├──[✅]--(public)
  1310. └──[✅]--(src)
  1311. └──[✅]--(components)
  1312. ├──[✅]--(_Sprint-Resources)
  1313. └──[✅]--(Sprint Challenge Study Guide - Unit 1, Sprint 1)
  1314. ├──[✅]--(_Templates-Frameworks-And-Official-Repos)
  1315. ├──[✅]--(ant-design-master)
  1316. ├──[✅]--(components)
  1317. ├──[✅]--(__tests__)
  1318. ├──[✅]--(_util)
  1319. ├──[✅]--(affix)
  1320. ├──[✅]--(alert)
  1321. ├──[✅]--(anchor)
  1322. ├──[✅]--(auto-complete)
  1323. ├──[✅]--(avatar)
  1324. ├──[✅]--(back-top)
  1325. ├──[✅]--(badge)
  1326. ├──[✅]--(breadcrumb)
  1327. ├──[✅]--(button)
  1328. ├──[✅]--(calendar)
  1329. ├──[✅]--(card)
  1330. ├──[✅]--(carousel)
  1331. ├──[✅]--(cascader)
  1332. ├──[✅]--(checkbox)
  1333. ├──[✅]--(col)
  1334. ├──[✅]--(collapse)
  1335. ├──[✅]--(comment)
  1336. ├──[✅]--(config-provider)
  1337. ├──[✅]--(date-picker)
  1338. ├──[✅]--(descriptions)
  1339. ├──[✅]--(divider)
  1340. ├──[✅]--(drawer)
  1341. ├──[✅]--(dropdown)
  1342. ├──[✅]--(empty)
  1343. ├──[✅]--(form)
  1344. ├──[✅]--(grid)
  1345. ├──[✅]--(icon)
  1346. ├──[✅]--(image)
  1347. ├──[✅]--(input)
  1348. ├──[✅]--(input-number)
  1349. ├──[✅]--(layout)
  1350. ├──[✅]--(list)
  1351. ├──[✅]--(locale)
  1352. ├──[✅]--(locale-provider)
  1353. ├──[✅]--(mentions)
  1354. ├──[✅]--(menu)
  1355. ├──[✅]--(message)
  1356. ├──[✅]--(modal)
  1357. ├──[✅]--(notification)
  1358. ├──[✅]--(overview)
  1359. ├──[✅]--(page-header)
  1360. ├──[✅]--(pagination)
  1361. ├──[✅]--(popconfirm)
  1362. ├──[✅]--(popover)
  1363. ├──[✅]--(progress)
  1364. ├──[✅]--(radio)
  1365. ├──[✅]--(rate)
  1366. ├──[✅]--(result)
  1367. ├──[✅]--(row)
  1368. ├──[✅]--(select)
  1369. ├──[✅]--(skeleton)
  1370. ├──[✅]--(slider)
  1371. ├──[✅]--(space)
  1372. ├──[✅]--(spin)
  1373. ├──[✅]--(statistic)
  1374. ├──[✅]--(steps)
  1375. ├──[✅]--(style)
  1376. ├──[✅]--(switch)
  1377. ├──[✅]--(table)
  1378. ├──[✅]--(tabs)
  1379. ├──[✅]--(tag)
  1380. ├──[✅]--(time-picker)
  1381. ├──[✅]--(timeline)
  1382. ├──[✅]--(tooltip)
  1383. ├──[✅]--(transfer)
  1384. ├──[✅]--(tree)
  1385. ├──[✅]--(tree-select)
  1386. ├──[✅]--(typography)
  1387. ├──[✅]--(upload)
  1388. └──[✅]--(version)
  1389. ├──[✅]--(docs)
  1390. ├──[✅]--(react)
  1391. └──[✅]--(spec)
  1392. ├──[✅]--(scripts)
  1393. └──[✅]--(previewEditor)
  1394. ├──[✅]--(site)
  1395. └──[✅]--(theme)
  1396. ├──[✅]--(tests)
  1397. ├──[✅]--(__mocks__)
  1398. ├──[✅]--(__snapshots__)
  1399. ├──[✅]--(dekko)
  1400. ├──[✅]--(matchers)
  1401. └──[✅]--(shared)
  1402. └──[✅]--(typings)
  1403. └──[✅]--(material-components-web-master)
  1404. ├──[✅]--(docs)
  1405. ├──[✅]--(code)
  1406. ├──[✅]--(codelabs)
  1407. ├──[✅]--(contribute)
  1408. └──[✅]--(open_source)
  1409. ├──[✅]--(packages)
  1410. ├──[✅]--(material-components-web)
  1411. ├──[✅]--(mdc-animation)
  1412. ├──[✅]--(mdc-auto-init)
  1413. ├──[✅]--(mdc-banner)
  1414. ├──[✅]--(mdc-base)
  1415. ├──[✅]--(mdc-button)
  1416. ├──[✅]--(mdc-card)
  1417. ├──[✅]--(mdc-checkbox)
  1418. ├──[✅]--(mdc-cps)
  1419. ├──[✅]--(mdc-circular-progress)
  1420. ├──[✅]--(mdc-data-table)
  1421. ├──[✅]--(mdc-density)
  1422. ├──[✅]--(mdc-dialog)
  1423. ├──[✅]--(mdc-dom)
  1424. ├──[✅]--(mdc-drawer)
  1425. ├──[✅]--(mdc-elevation)
  1426. ├──[✅]--(mdc-fab)
  1427. ├──[✅]--(mdc-feature-targeting)
  1428. ├──[✅]--(mdc-floating-label)
  1429. ├──[✅]--(mdc-form-field)
  1430. ├──[✅]--(mdc-icon-button)
  1431. ├──[✅]--(mdc-image-list)
  1432. ├──[✅]--(mdc-layout-grid)
  1433. ├──[✅]--(mdc-line-ripple)
  1434. ├──[✅]--(mdc-linear-progress)
  1435. ├──[✅]--(mdc-list)
  1436. ├──[✅]--(mdc-menu)
  1437. ├──[✅]--(mdc-menu-surface)
  1438. ├──[✅]--(mdc-notched-outline)
  1439. ├──[✅]--(mdc-progress-indicator)
  1440. ├──[✅]--(mdc-radio)
  1441. ├──[✅]--(mdc-ripple)
  1442. ├──[✅]--(mdc-rtl)
  1443. ├──[✅]--(mdc-segmented-button)
  1444. ├──[✅]--(mdc-select)
  1445. ├──[✅]--(mdc-shape)
  1446. ├──[✅]--(mdc-slider)
  1447. ├──[✅]--(mdc-snackbar)
  1448. ├──[✅]--(mdc-switch)
  1449. ├──[✅]--(mdc-tab)
  1450. ├──[✅]--(mdc-tab-bar)
  1451. ├──[✅]--(mdc-tab-indicator)
  1452. ├──[✅]--(mdc-tab-scroller)
  1453. ├──[✅]--(mdc-textfield)
  1454. ├──[✅]--(mdc-theme)
  1455. ├──[✅]--(mdc-tooltip)
  1456. ├──[✅]--(mdc-top-app-bar)
  1457. ├──[✅]--(mdc-touch-target)
  1458. └──[✅]--(mdc-typography)
  1459. ├──[✅]--(scripts)
  1460. ├──[✅]--(build)
  1461. ├──[✅]--(documentation)
  1462. └──[✅]--(webpack)
  1463. └──[✅]--(testing)
  1464. ├──[✅]--(dom)
  1465. ├──[✅]--(featuretargeting)
  1466. └──[✅]--(helpers)
  1467. ├──[✅]--(_Understanding-Git)
  1468. ├──[✅]--(__CHEAT-SHEETS)
  1469. ├──[✅]--(All)
  1470. ├──[✅]--(cheatsheets-master)
  1471. └──[✅]--(cheatsheets-master)
  1472. ├──[✅]--(alertmanager)
  1473. ├──[✅]--(ansible)
  1474. ├──[✅]--(aws-cli)
  1475. ├──[✅]--(aws-codebuild)
  1476. ├──[✅]--(aws-ecr)
  1477. ├──[✅]--(aws-iam)
  1478. ├──[✅]--(aws-python)
  1479. ├──[✅]--(bash)
  1480. ├──[✅]--(benchmarking)
  1481. ├──[✅]--(blackbox-exporter)
  1482. ├──[✅]--(cadvisor)
  1483. ├──[✅]--(ceph)
  1484. ├──[✅]--(cloudwatch)
  1485. ├──[✅]--(concourse)
  1486. ├──[✅]--(docker)
  1487. ├──[✅]--(drone-ci)
  1488. ├──[✅]--(dynamodb)
  1489. ├──[✅]--(ec2-metadata)
  1490. ├──[✅]--(ecs)
  1491. ├──[✅]--(elasticsearch)
  1492. ├──[✅]--(fluent-bit)
  1493. ├──[✅]--(font-awesome)
  1494. ├──[✅]--(git)
  1495. ├──[✅]--(github-actions)
  1496. ├──[✅]--(golang)
  1497. ├──[✅]--(grafana)
  1498. ├──[✅]--(grok)
  1499. ├──[✅]--(influxdb)
  1500. ├──[✅]--(iterm)
  1501. ├──[✅]--(javascript)
  1502. ├──[✅]--(jq)
  1503. ├──[✅]--(k3s)
  1504. ├──[✅]--(kubernetes)
  1505. ├──[✅]--(loki)
  1506. ├──[✅]--(mongodb)
  1507. ├──[✅]--(mysql)
  1508. ├──[✅]--(neo4j-cypher)
  1509. ├──[✅]--(nginx)
  1510. ├──[✅]--(postgresql)
  1511. ├──[✅]--(prometheus)
  1512. ├──[✅]--(pushgateway)
  1513. ├──[✅]--(python)
  1514. ├──[✅]--(regex)
  1515. ├──[✅]--(samba)
  1516. ├──[✅]--(sftp)
  1517. ├──[✅]--(slack)
  1518. ├──[✅]--(ssh)
  1519. ├──[✅]--(ssh-keygen)
  1520. ├──[✅]--(sudo)
  1521. ├──[✅]--(sysadmin)
  1522. ├──[✅]--(systemd)
  1523. ├──[✅]--(terraform)
  1524. ├──[✅]--(vim)
  1525. └──[✅]--(zipkin)
  1526. ├──[✅]--(guided-cheatsheets)
  1527. ├──[✅]--(auto-generate-boilerplate)
  1528. └──[✅]--(test2)
  1529. └──[✅]--(test.html)
  1530. └──[✅]--(pdf)
  1531. ├──[✅]--(css)
  1532. ├──[✅]--(data-structures)
  1533. ├──[✅]--(database)
  1534. ├──[✅]--(engineering)
  1535. ├──[✅]--(general-comp-sci)
  1536. ├──[✅]--(git)
  1537. ├──[✅]--(git.html)
  1538. ├──[✅]--(html)
  1539. ├──[✅]--(java)
  1540. ├──[✅]--(javascript)
  1541. ├──[✅]--(linux)
  1542. ├──[✅]--(math)
  1543. ├──[✅]--(misc)
  1544. ├──[✅]--(python)
  1545. ├──[✅]--(python.html)
  1546. ├──[✅]--(ruby)
  1547. ├──[✅]--(ruby.html)
  1548. ├──[✅]--(unsorted)
  1549. └──[✅]--(web)
  1550. ├──[✅]--(awesome-resources)
  1551. ├──[✅]--(101.awesome.tools.for.web.designers.and.developers)
  1552. ├──[✅]--(Awesome-Design-Tools-master)
  1553. ├──[✅]--(Media)
  1554. └──[✅]--(docs)
  1555. ├──[✅]--(assets)
  1556. ├──[✅]--(css)
  1557. ├──[✅]--(js)
  1558. └──[✅]--(modules)
  1559. ├──[✅]--(Awesome-master)
  1560. └──[✅]--(media)
  1561. ├──[✅]--(Awesome.WSL.repo)
  1562. ├──[✅]--(Awesome_APIs-master)
  1563. ├──[✅]--(Cumulative-Resource-List-master)
  1564. └──[✅]--(README-s)
  1565. ├──[✅]--(Cumulative.Resource.List.repo)
  1566. ├──[✅]--(Staging)
  1567. └──[✅]--(A-to-Z-Resources-for-Students-master)
  1568. ├──[✅]--(Android)
  1569. ├──[✅]--(BlockChain)
  1570. ├──[✅]--(CheatSheet)
  1571. ├──[✅]--(GSOC)
  1572. ├──[✅]--(ML)
  1573. ├──[✅]--(Node.JS)
  1574. ├──[✅]--(Projects)
  1575. ├──[✅]--(Python)
  1576. ├──[✅]--(res)
  1577. └──[✅]--(translation)
  1578. ├──[✅]--(awesome-cheatsheet-master)
  1579. └──[✅]--(tests)
  1580. ├──[✅]--(awesome-cheatsheets)
  1581. ├──[✅]--(backend)
  1582. ├──[✅]--(databases)
  1583. ├──[✅]--(frontend)
  1584. ├──[✅]--(languages)
  1585. └──[✅]--(tools)
  1586. ├──[✅]--(awesome-chrome-devtools-master)
  1587. └──[✅]--(awesome-chrome-devtools-master)
  1588. ├──[✅]--(awesome-cli-apps-master)
  1589. └──[✅]--(media)
  1590. ├──[✅]--(awesome-cpp-master)
  1591. ├──[✅]--(awesome-creative-coding-master)
  1592. └──[✅]--(website)
  1593. ├──[✅]--(awesome-css-master)
  1594. ├──[✅]--(awesome-dotfiles-master)
  1595. ├──[✅]--(awesome-for-beginners-master)
  1596. └──[✅]--(assets)
  1597. ├──[✅]--(awesome-gists-master)
  1598. └──[✅]--(awesome-gists-master)
  1599. ├──[✅]--(awesome-heroku-master)
  1600. └──[✅]--(awesome-heroku-master)
  1601. └──[✅]--(images)
  1602. ├──[✅]--(awesome-interview-questions-master)
  1603. ├──[✅]--(awesome-javascript-master)
  1604. └──[✅]--(awesome-javascript-master)
  1605. ├──[✅]--(awesome-js-master)
  1606. └──[✅]--(awesome-js-master)
  1607. ├──[✅]--(awesome-list-master)
  1608. └──[✅]--(cheatsheets)
  1609. ├──[✅]--(awesome-main)
  1610. └──[✅]--(media)
  1611. ├──[✅]--(awesome-nodejs-master)
  1612. ├──[✅]--(awesome-nodejs-master)
  1613. └──[✅]--(media)
  1614. └──[✅]--(media)
  1615. ├──[✅]--(awesome-piracy-master)
  1616. ├──[✅]--(awesome-python-applications-master)
  1617. ├──[✅]--(notebooks)
  1618. └──[✅]--(templates)
  1619. ├──[✅]--(awesome-python-master)
  1620. └──[✅]--(docs)
  1621. └──[✅]--(css)
  1622. ├──[✅]--(awesome-react-hooks-master)
  1623. ├──[✅]--(awesome-react-render-props-master)
  1624. └──[✅]--(awesome-react-render-props-master)
  1625. ├──[✅]--(awesome-readme-master)
  1626. ├──[✅]--(awesome-redux-master)
  1627. └──[✅]--(examples)
  1628. ├──[✅]--(awesome-selfhosted-master)
  1629. └──[✅]--(tests)
  1630. ├──[✅]--(awesome-shell-master)
  1631. ├──[✅]--(awesome-vscode-master)
  1632. ├──[✅]--(screenshots)
  1633. └──[✅]--(themes)
  1634. └──[✅]--(screenshots)
  1635. ├──[✅]--(awesome.cpp.repo)
  1636. ├──[✅]--(awesome.interview.questions)
  1637. ├──[✅]--(awesome.js.snippets)
  1638. ├──[✅]--(awesome.json.repo)
  1639. ├──[✅]--(awesome.markdown)
  1640. ├──[✅]--(awesome.postgres.repo)
  1641. ├──[✅]--(awesome.react.components.repo)
  1642. ├──[✅]--(awesome.regex.repo)
  1643. ├──[✅]--(awesome.rest.repo)
  1644. ├──[✅]--(awesome.web.dev.resources.repo)
  1645. ├──[✅]--(awesomeopensource.com)
  1646. ├──[✅]--(categories)
  1647. ├──[✅]--(cdn-cgi)
  1648. ├──[✅]--(bm)
  1649. └──[✅]--(scripts)
  1650. ├──[✅]--(packs)
  1651. ├──[✅]--(project)
  1652. ├──[✅]--(0k.html)
  1653. ├──[✅]--(3F)
  1654. ├──[✅]--(500tech)
  1655. ├──[✅]--(864381832)
  1656. ├──[✅]--(APIs-guru.html)
  1657. ├──[✅]--(AdnanHodzic.html)
  1658. ├──[✅]--(AliasIO)
  1659. ├──[✅]--(AlisamTechnology)
  1660. ├──[✅]--(AloneMonkey.html)
  1661. ├──[✅]--(ApiGen)
  1662. ├──[✅]--(ArchStrike)
  1663. ├──[✅]--(Armin2208.html)
  1664. ├──[✅]--(AryToNeX.html)
  1665. ├──[✅]--(Ashung)
  1666. ├──[✅]--(Azure)
  1667. ├──[✅]--(BinaryAnalysisPlatform.html)
  1668. ├──[✅]--(CTCaer)
  1669. ├──[✅]--(CUTR-at-USF)
  1670. ├──[✅]--(CVarisco.html)
  1671. ├──[✅]--(CalebFenton.html)
  1672. ├──[✅]--(CedricGuillemet.html)
  1673. ├──[✅]--(CharlesPikachu)
  1674. ├──[✅]--(Col-E.html)
  1675. ├──[✅]--(Cosmo.html)
  1676. ├──[✅]--(CrestApps)
  1677. ├──[✅]--(DataBiosphere)
  1678. ├──[✅]--(Dav1dde)
  1679. ├──[✅]--(DavideViolante.html)
  1680. ├──[✅]--(DeathKing.html)
  1681. ├──[✅]--(DennisYurichev.html)
  1682. ├──[✅]--(Depressurizer.html)
  1683. ├──[✅]--(DevUtilsApp)
  1684. ├──[✅]--(DextApp)
  1685. ├──[✅]--(Dobiasd.html)
  1686. ├──[✅]--(DreamCats)
  1687. ├──[✅]--(EFPrefix)
  1688. ├──[✅]--(EasyCorp)
  1689. ├──[✅]--(EntilZha.html)
  1690. ├──[✅]--(Gh0u1L5.html)
  1691. ├──[✅]--(GoogleChrome)
  1692. ├──[✅]--(GoogleChromeLabs)
  1693. ├──[✅]--(GoogleCloudPlatform)
  1694. ├──[✅]--(GoogleContainerTools)
  1695. ├──[✅]--(GordyD.html)
  1696. ├──[✅]--(HDB-Li.html)
  1697. ├──[✅]--(Hack-with-Github.html)
  1698. ├──[✅]--(✅tomis.html)
  1699. ├──[✅]--(HosseinKarami)
  1700. ├──[✅]--(ITI)
  1701. ├──[✅]--(Ice-Hazymoon)
  1702. ├──[✅]--(Impedimenta)
  1703. ├──[✅]--(Ismaestro.html)
  1704. ├──[✅]--(IvanMathy)
  1705. ├──[✅]--(JamesIves)
  1706. ├──[✅]--(JasonEtco)
  1707. ├──[✅]--(JasonSn.html)
  1708. ├──[✅]--(Jeroen-G.html)
  1709. ├──[✅]--(Jimmey-Jiang.html)
  1710. ├──[✅]--(Jocs)
  1711. ├──[✅]--(JohnSundell)
  1712. ├──[✅]--(JonathanSalwan.html)
  1713. ├──[✅]--(Juude.html)
  1714. ├──[✅]--(Karumi.html)
  1715. ├──[✅]--(KidkArolis)
  1716. ├──[✅]--(KuroLabs.html)
  1717. ├──[✅]--(LANIF-UI.html)
  1718. ├──[✅]--(Labelbox)
  1719. ├──[✅]--(Leniolabs)
  1720. ├──[✅]--(LockGit)
  1721. ├──[✅]--(LorenzCK.html)
  1722. ├──[✅]--(Louiszhai.html)
  1723. ├──[✅]--(LuxLang.html)
  1724. ├──[✅]--(M4cs)
  1725. ├──[✅]--(MLton.html)
  1726. ├──[✅]--(Maktm.html)
  1727. ├──[✅]--(Mantle.html)
  1728. ├──[✅]--(MarioAriasC.html)
  1729. ├──[✅]--(Metnew.html)
  1730. ├──[✅]--(MontFerret.html)
  1731. ├──[✅]--(MostlyAdequate.html)
  1732. ├──[✅]--(NYAN-x-CAT.html)
  1733. ├──[✅]--(Naituw.html)
  1734. ├──[✅]--(NationalSecurityAgency.html)
  1735. ├──[✅]--(NixOS.html)
  1736. ├──[✅]--(NoiseByNorthwest.html)
  1737. ├──[✅]--(OJ.html)
  1738. ├──[✅]--(OWASP.html)
  1739. ├──[✅]--(OXOYO)
  1740. ├──[✅]--(OpenAPITools)
  1741. ├──[✅]--(Optixal)
  1742. ├──[✅]--(PegasusCharles)
  1743. ├──[✅]--(Perfare.html)
  1744. ├──[✅]--(PipedreamHQ)
  1745. ├──[✅]--(PowerJob)
  1746. ├──[✅]--(Powerlevel9k)
  1747. ├──[✅]--(PrefectHQ)
  1748. ├──[✅]--(Protoqol)
  1749. ├──[✅]--(QBDI.html)
  1750. ├──[✅]--(Qftm)
  1751. ├──[✅]--(REDasmOrg.html)
  1752. ├──[✅]--(Raatgesh)
  1753. ├──[✅]--(React-Proto)
  1754. ├──[✅]--(React-Sight)
  1755. ├──[✅]--(ReactJSResources.html)
  1756. ├──[✅]--(ReactPrimer.html)
  1757. ├──[✅]--(Rhymen.html)
  1758. ├──[✅]--(Screetsec.html)
  1759. ├──[✅]--(SeanDragon.html)
  1760. ├──[✅]--(SecWiki.html)
  1761. ├──[✅]--(SimulatedGREG.html)
  1762. ├──[✅]--(Sly777.html)
  1763. ├──[✅]--(SteamRE.html)
  1764. ├──[✅]--(Stratio)
  1765. ├──[✅]--(Suor.html)
  1766. ├──[✅]--(SymbiFlow)
  1767. ├──[✅]--(TalkingData)
  1768. ├──[✅]--(Tamsiree)
  1769. ├──[✅]--(Tencent)
  1770. ├──[✅]--(TheLartians)
  1771. ├──[✅]--(TheresAFewConors)
  1772. ├──[✅]--(ThoughtWorksInc.html)
  1773. ├──[✅]--(TwakeApp.html)
  1774. ├──[✅]--(TypeStrong)
  1775. ├──[✅]--(WeBankFinTech)
  1776. ├──[✅]--(WerWolv.html)
  1777. ├──[✅]--(XorTroll.html)
  1778. ├──[✅]--(Xudong-Huang)
  1779. ├──[✅]--(YetiForceCompany)
  1780. ├──[✅]--(a0rtega.html)
  1781. ├──[✅]--(aNNiMON.html)
  1782. ├──[✅]--(abjithvijayan.html)
  1783. ├──[✅]--(abreheret.html)
  1784. ├──[✅]--(actionsflow)
  1785. ├──[✅]--(adamhalasz)
  1786. ├──[✅]--(adelsz)
  1787. ├──[✅]--(adnanh)
  1788. ├──[✅]--(adomokos)
  1789. ├──[✅]--(adtac)
  1790. ├──[✅]--(aelassas)
  1791. ├──[✅]--(agconti.html)
  1792. ├──[✅]--(ahmadawais)
  1793. ├──[✅]--(airbus-seclab.html)
  1794. ├──[✅]--(al0ne)
  1795. ├──[✅]--(albrow.html)
  1796. ├──[✅]--(alecthomas.html)
  1797. ├──[✅]--(alibaba)
  1798. ├──[✅]--(alibaba.html)
  1799. ├──[✅]--(aloisdeniel)
  1800. ├──[✅]--(aloisdeniel.html)
  1801. ├──[✅]--(alphaSeclab.html)
  1802. ├──[✅]--(alyssaxuu.html)
  1803. ├──[✅]--(androguard.html)
  1804. ├──[✅]--(android-notes)
  1805. ├──[✅]--(android10.html)
  1806. ├──[✅]--(andydbc)
  1807. ├──[✅]--(angular)
  1808. ├──[✅]--(ankitrohatgi.html)
  1809. ├──[✅]--(ansible-semaphore)
  1810. ├──[✅]--(ansjdnakjdnajkd)
  1811. ├──[✅]--(ant-design.html)
  1812. ├──[✅]--(ant-move.html)
  1813. ├──[✅]--(anti-ddos)
  1814. ├──[✅]--(antonioribeiro)
  1815. ├──[✅]--(aol.html)
  1816. ├──[✅]--(apache)
  1817. ├──[✅]--(apache.html)
  1818. ├──[✅]--(api-platform)
  1819. ├──[✅]--(appbaseio)
  1820. ├──[✅]--(appwrite)
  1821. ├──[✅]--(appzcoder)
  1822. ├──[✅]--(aquynh.html)
  1823. ├──[✅]--(argoproj)
  1824. ├──[✅]--(armory3d.html)
  1825. ├──[✅]--(arrow-kt.html)
  1826. ├──[✅]--(arthurbergmz)
  1827. ├──[✅]--(asshb)
  1828. ├──[✅]--(asshpatel26)
  1829. ├──[✅]--(assemble)
  1830. ├──[✅]--(async-labs.html)
  1831. ├──[✅]--(atomantic)
  1832. ├──[✅]--(averagesecurityguy)
  1833. ├──[✅]--(awalterschulze.html)
  1834. ├──[✅]--(aws)
  1835. ├──[✅]--(awslabs)
  1836. ├──[✅]--(b-ryan)
  1837. ├──[✅]--(b12io)
  1838. ├──[✅]--(badgen)
  1839. ├──[✅]--(balsikandar)
  1840. ├──[✅]--(bamlab)
  1841. ├──[✅]--(banago)
  1842. ├──[✅]--(banq)
  1843. ├──[✅]--(bchavez)
  1844. ├──[✅]--(bcicen)
  1845. ├──[✅]--(bestony)
  1846. ├──[✅]--(bighuang624)
  1847. ├──[✅]--(bitjson.html)
  1848. ├──[✅]--(bitwes.html)
  1849. ├──[✅]--(bjankord.html)
  1850. ├──[✅]--(bkaradzic)
  1851. ├──[✅]--(blackholll)
  1852. ├──[✅]--(bnb)
  1853. ├──[✅]--(boo1ean)
  1854. ├──[✅]--(bootleg.html)
  1855. ├──[✅]--(boyney123.html)
  1856. ├──[✅]--(brazilian-utils)
  1857. ├──[✅]--(brianvoe)
  1858. ├──[✅]--(brikis98)
  1859. ├──[✅]--(broadinstitute)
  1860. ├──[✅]--(brunch)
  1861. ├──[✅]--(bt3gl.html)
  1862. ├──[✅]--(bufferapp.html)
  1863. ├──[✅]--(buginux.html)
  1864. ├──[✅]--(buildbot)
  1865. ├──[✅]--(builderbook.html)
  1866. ├──[✅]--(burghardt)
  1867. ├──[✅]--(bxcodec)
  1868. ├──[✅]--(caicloud)
  1869. ├──[✅]--(caixw)
  1870. ├──[✅]--(camunda)
  1871. ├──[✅]--(carp-lang.html)
  1872. ├──[✅]--(ccampbell)
  1873. ├──[✅]--(cea-sec.html)
  1874. ├──[✅]--(cesarferreira.html)
  1875. ├──[✅]--(cferdinandi.html)
  1876. ├──[✅]--(chaps-io)
  1877. ├──[✅]--(checkly)
  1878. ├──[✅]--(chengderen)
  1879. ├──[✅]--(chenxiancai.html)
  1880. ├──[✅]--(cnese-poetry)
  1881. ├──[✅]--(chrissimpkins)
  1882. ├──[✅]--(chrisvfritz.html)
  1883. ├──[✅]--(ciaochaos)
  1884. ├──[✅]--(cmu-sei.html)
  1885. ├──[✅]--(code-✅ke.html)
  1886. ├──[✅]--(codexu)
  1887. ├──[✅]--(codilime.html)
  1888. ├──[✅]--(common-workflow-language)
  1889. ├──[✅]--(compodoc)
  1890. ├──[✅]--(concourse)
  1891. ├──[✅]--(cornflourblue.html)
  1892. ├──[✅]--(cortesi)
  1893. ├──[✅]--(coryhouse.html)
  1894. ├──[✅]--(cosmtrek)
  1895. ├──[✅]--(cristianoliveira)
  1896. ├──[✅]--(csstree)
  1897. ├──[✅]--(cteamx)
  1898. ├──[✅]--(ctrlplusb.html)
  1899. ├──[✅]--(cyclejs.html)
  1900. ├──[✅]--(dagster-io)
  1901. ├──[✅]--(dailydotdev)
  1902. ├──[✅]--(damnever.html)
  1903. ├──[✅]--(danger)
  1904. ├──[✅]--(danielfsousa.html)
  1905. ├──[✅]--(danielgerlag)
  1906. ├──[✅]--(danielkrupinski.html)
  1907. ├──[✅]--(danilowoz.html)
  1908. ├──[✅]--(das-labor.html)
  1909. ├──[✅]--(dashvlas)
  1910. ├──[✅]--(datawrapper.html)
  1911. ├──[✅]--(david942j)
  1912. ├──[✅]--(davidkpiano)
  1913. ├──[✅]--(davyxu.html)
  1914. ├──[✅]--(ddwhan0123)
  1915. ├──[✅]--(deanishe)
  1916. ├──[✅]--(denji)
  1917. ├──[✅]--(deployphp.html)
  1918. ├──[✅]--(dev-labs-bg)
  1919. ├──[✅]--(developit.html)
  1920. ├──[✅]--(devspace-cloud)
  1921. ├──[✅]--(dgageot.html)
  1922. ├──[✅]--(didi)
  1923. ├──[✅]--(diegohaz)
  1924. ├──[✅]--(diegohaz.html)
  1925. ├──[✅]--(djkaty.html)
  1926. ├──[✅]--(djrobstep)
  1927. ├──[✅]--(dkhamsing.html)
  1928. ├──[✅]--(dnote)
  1929. ├──[✅]--(dominikwilkowski)
  1930. ├──[✅]--(donnemartin)
  1931. ├──[✅]--(dotnet.html)
  1932. ├──[✅]--(dpnishant.html)
  1933. ├──[✅]--(dreddsa5dies)
  1934. ├──[✅]--(drone)
  1935. ├──[✅]--(dropbox)
  1936. ├──[✅]--(dry-python.html)
  1937. ├──[✅]--(dsasmblr.html)
  1938. ├──[✅]--(efremidze)
  1939. ├──[✅]--(egison.html)
  1940. ├──[✅]--(electron-react-boilerplate.html)
  1941. ├──[✅]--(eliukblau.html)
  1942. ├──[✅]--(elixirs)
  1943. ├──[✅]--(enkodellc.html)
  1944. ├──[✅]--(ergonomica.html)
  1945. ├──[✅]--(ericalli.html)
  1946. ├──[✅]--(ericmdantas)
  1947. ├──[✅]--(eteran.html)
  1948. ├──[✅]--(evernote.html)
  1949. ├──[✅]--(evhub.html)
  1950. ├──[✅]--(evilmartians)
  1951. ├──[✅]--(explosion.html)
  1952. ├──[✅]--(expressjs)
  1953. ├──[✅]--(fabric8io)
  1954. ├──[✅]--(fahad19.html)
  1955. ├──[✅]--(fantasyland.html)
  1956. ├──[✅]--(fastai)
  1957. ├──[✅]--(fatih.html)
  1958. ├──[✅]--(faxad)
  1959. ├──[✅]--(felix-lang.html)
  1960. ├──[✅]--(fesh0r.html)
  1961. ├──[✅]--(fireeye.html)
  1962. ├──[✅]--(firmianay.html)
  1963. ├──[✅]--(flatlogic.html)
  1964. ├──[✅]--(flexdinesh.html)
  1965. ├──[✅]--(flexsurfer)
  1966. ├──[✅]--(flosell.html)
  1967. ├──[✅]--(fluture-js.html)
  1968. ├──[✅]--(francescomalatesta.html)
  1969. ├──[✅]--(freeCodeCamp)
  1970. ├──[✅]--(frees-io.html)
  1971. ├──[✅]--(frostming.html)
  1972. ├──[✅]--(fucongcong)
  1973. ├──[✅]--(functionaljava.html)
  1974. ├──[✅]--(fungos.html)
  1975. ├──[✅]--(funkia.html)
  1976. ├──[✅]--(furioussoul)
  1977. ├──[✅]--(fuse-box)
  1978. ├──[✅]--(gaasedelen.html)
  1979. ├──[✅]--(galaxyproject)
  1980. ├──[✅]--(garden-io)
  1981. ├──[✅]--(gautamkrishnar)
  1982. ├──[✅]--(gbdev)
  1983. ├──[✅]--(gcanti.html)
  1984. ├──[✅]--(gchaincl)
  1985. ├──[✅]--(geekidea)
  1986. ├──[✅]--(getify.html)
  1987. ├──[✅]--(gfngfn.html)
  1988. ├──[✅]--(ghosh)
  1989. ├──[✅]--(gibbed.html)
  1990. ├──[✅]--(gigobyte.html)
  1991. ├──[✅]--(git-town)
  1992. ├──[✅]--(github)
  1993. ├──[✅]--(github-serendipity)
  1994. ├──[✅]--(gitless-vcs)
  1995. ├──[✅]--(glauth)
  1996. ├──[✅]--(go-flutter-desktop.html)
  1997. ├──[✅]--(gocd)
  1998. ├──[✅]--(golangci)
  1999. ├──[✅]--(goldbergyoni)
  2000. ├──[✅]--(google)
  2001. ├──[✅]--(google.html)
  2002. ├──[✅]--(gotnkster.html)
  2003. ├──[✅]--(grain-lang.html)
  2004. ├──[✅]--(grame-cncm.html)
  2005. ├──[✅]--(graphql-editor)
  2006. ├──[✅]--(gravitational)
  2007. ├──[✅]--(grin-compiler.html)
  2008. ├──[✅]--(gruntwork-io)
  2009. ├──[✅]--(guozhaolong)
  2010. ├──[✅]--(hack4impact.html)
  2011. ├──[✅]--(hacklcx)
  2012. ├──[✅]--(hacktoolspack)
  2013. ├──[✅]--(hahwul)
  2014. ├──[✅]--(halfzebra.html)
  2015. ├──[✅]--(harryheman.html)
  2016. ├──[✅]--(hasura)
  2017. ├──[✅]--(headcrab-rs)
  2018. ├──[✅]--(hemanth.html)
  2019. ├──[✅]--(hmemcpy.html)
  2020. ├──[✅]--(hoffstadt)
  2021. ├──[✅]--(hoppscotch)
  2022. ├──[✅]--(horsicq.html)
  2023. ├──[✅]--(hteso.html)
  2024. ├──[✅]--(htr-tech.html)
  2025. ├──[✅]--(httpie)
  2026. ├──[✅]--(htty)
  2027. ├──[✅]--(hugsy.html)
  2028. ├──[✅]--(huiyadanli.html)
  2029. ├──[✅]--(hundredrabbits.html)
  2030. ├──[✅]--(hybridsjs.html)
  2031. ├──[✅]--(hyper0x.html)
  2032. ├──[✅]--(iBotPeaches.html)
  2033. ├──[✅]--(iGio90.html)
  2034. ├──[✅]--(icebob.html)
  2035. ├──[✅]--(iddoeldor.html)
  2036. ├──[✅]--(imazen.html)
  2037. ├──[✅]--(infinitered.html)
  2038. ├──[✅]--(insidegui)
  2039. ├──[✅]--(iridakos)
  2040. ├──[✅]--(iterative)
  2041. ├──[✅]--(ivRodriguezCA.html)
  2042. ├──[✅]--(izdi.html)
  2043. ├──[✅]--(jacktasia)
  2044. ├──[✅]--(jagenjo)
  2045. ├──[✅]--(janlelis)
  2046. ├──[✅]--(japgolly.html)
  2047. ├──[✅]--(java-diff-utils)
  2048. ├──[✅]--(javierbyte.html)
  2049. ├──[✅]--(javiereguiluz)
  2050. ├──[✅]--(javrasya)
  2051. ├──[✅]--(jayfk)
  2052. ├──[✅]--(jaykali)
  2053. ├──[✅]--(jdblischak)
  2054. ├──[✅]--(jedireza.html)
  2055. ├──[✅]--(jpster)
  2056. ├──[✅]--(jhspetersson.html)
  2057. ├──[✅]--(joealcorn)
  2058. ├──[✅]--(johncarl81.html)
  2059. ├──[✅]--(johnno1962.html)
  2060. ├──[✅]--(johnpapa)
  2061. ├──[✅]--(jondot)
  2062. ├──[✅]--(joshburgess.html)
  2063. ├──[✅]--(jrvansuita)
  2064. ├──[✅]--(jsdoc2md)
  2065. ├──[✅]--(jsynowiec.html)
  2066. ├──[✅]--(juicycleff.html)
  2067. ├──[✅]--(julien-lafont)
  2068. ├──[✅]--(justjanne)
  2069. ├──[✅]--(k8gege)
  2070. ├──[✅]--(kaitai-io.html)
  2071. ├──[✅]--(kbrsh.html)
  2072. ├──[✅]--(kefirjs.html)
  2073. ├──[✅]--(kefranabg)
  2074. ├──[✅]--(kenvix.html)
  2075. ├──[✅]--(keystone-engine.html)
  2076. ├──[✅]--(kickstarter.html)
  2077. ├──[✅]--(kiegroup)
  2078. ├──[✅]--(kkoomen)
  2079. ├──[✅]--(knipknap)
  2080. ├──[✅]--(knownsec)
  2081. ├──[✅]--(koalaman)
  2082. ├──[✅]--(korcankaraokcu.html)
  2083. ├──[✅]--(kostya.html)
  2084. ├──[✅]--(kriasoft.html)
  2085. ├──[✅]--(krzysztofzablocki.html)
  2086. ├──[✅]--(kunalkapadia.html)
  2087. ├──[✅]--(ladjs.html)
  2088. ├──[✅]--(laravel-enso.html)
  2089. ├──[✅]--(laravel-zero.html)
  2090. ├──[✅]--(lastbackend)
  2091. ├──[✅]--(lazy-luo)
  2092. ├──[✅]--(leemengtaiwan)
  2093. ├──[✅]--(lengjibo)
  2094. ├──[✅]--(lennylxx.html)
  2095. ├──[✅]--(lettier.html)
  2096. ├──[✅]--(le1)
  2097. ├──[✅]--(lief-project.html)
  2098. ├──[✅]--(lifepillar)
  2099. ├──[✅]--(ligurio)
  2100. ├──[✅]--(liriliri)
  2101. ├──[✅]--(lk-geimfari)
  2102. ├──[✅]--(llh911001.html)
  2103. ├──[✅]--(looly.html)
  2104. ├──[✅]--(loot.html)
  2105. ├──[✅]--(louthy.html)
  2106. ├──[✅]--(lsegal.html)
  2107. ├──[✅]--(luafun.html)
  2108. ├──[✅]--(luangjokaj.html)
  2109. ├──[✅]--(luong-komorebi)
  2110. ├──[✅]--(lvarayut.html)
  2111. ├──[✅]--(lvwzhen.html)
  2112. ├──[✅]--(lxerxa)
  2113. ├──[✅]--(lyft)
  2114. ├──[✅]--(m0bilesecurity.html)
  2115. ├──[✅]--(m4ll0k.html)
  2116. ├──[✅]--(macbre)
  2117. ├──[✅]--(maciejczyzewski)
  2118. ├──[✅]--(maciejtreder.html)
  2119. ├──[✅]--(madhums.html)
  2120. ├──[✅]--(maildev)
  2121. ├──[✅]--(maldevel)
  2122. ├──[✅]--(manoloide)
  2123. ├──[✅]--(marblejs.html)
  2124. ├──[✅]--(marin-m.html)
  2125. ├──[✅]--(matcornic)
  2126. ├──[✅]--(mattbrictson.html)
  2127. ├──[✅]--(matteodem.html)
  2128. ├──[✅]--(matttga)
  2129. ├──[✅]--(mcginty)
  2130. ├──[✅]--(mckeever02)
  2131. ├──[✅]--(mcnamee.html)
  2132. ├──[✅]--(mehulj94.html)
  2133. ├──[✅]--(meitu.html)
  2134. ├──[✅]--(mgechev.html)
  2135. ├──[✅]--(mgeeky)
  2136. ├──[✅]--(microsoft)
  2137. ├──[✅]--(microsoft.html)
  2138. ├──[✅]--(mikub)
  2139. ├──[✅]--(milessabin.html)
  2140. ├──[✅]--(milostosic.html)
  2141. ├──[✅]--(minamarkham.html)
  2142. ├──[✅]--(mingrammer)
  2143. ├──[✅]--(minio)
  2144. ├──[✅]--(miripiruni)
  2145. ├──[✅]--(modm-io)
  2146. ├──[✅]--(modularcode.html)
  2147. ├──[✅]--(monix.html)
  2148. ├──[✅]--(moonad.html)
  2149. ├──[✅]--(morkt.html)
  2150. ├──[✅]--(muesli)
  2151. ├──[✅]--(multitheftauto.html)
  2152. ├──[✅]--(myntra)
  2153. ├──[✅]--(mytechnotalent.html)
  2154. ├──[✅]--(n8n-io)
  2155. ├──[✅]--(nabla-c0d3.html)
  2156. ├──[✅]--(nanobox-io)
  2157. ├──[✅]--(ncform)
  2158. ├──[✅]--(nektos)
  2159. ├──[✅]--(nerevu.html)
  2160. ├──[✅]--(nette)
  2161. ├──[✅]--(nezhar)
  2162. ├──[✅]--(nginx-boilerplate.html)
  2163. ├──[✅]--(ngx-rocket)
  2164. ├──[✅]--(niieani.html)
  2165. ├──[✅]--(nisrulz)
  2166. ├──[✅]--(nixzhu)
  2167. ├──[✅]--(njpatel)
  2168. ├──[✅]--(nlkl.html)
  2169. ├──[✅]--(nmikhailov.html)
  2170. ├──[✅]--(nosarthur)
  2171. ├──[✅]--(notrab.html)
  2172. ├──[✅]--(npm)
  2173. ├──[✅]--(nsacyber)
  2174. ├──[✅]--(nsomar)
  2175. ├──[✅]--(nunomaduro.html)
  2176. ├──[✅]--(nvdv)
  2177. ├──[✅]--(o-gs)
  2178. ├──[✅]--(o2sh.html)
  2179. ├──[✅]--(ocornut)
  2180. ├──[✅]--(octodns)
  2181. ├──[✅]--(okonet)
  2182. ├──[✅]--(okteto)
  2183. ├──[✅]--(oleg-py.html)
  2184. ├──[✅]--(oliver-gomes.html)
  2185. ├──[✅]--(onmyway133)
  2186. ├──[✅]--(open-rpa)
  2187. ├──[✅]--(opendevops-cn)
  2188. ├──[✅]--(optics-dev.html)
  2189. ├──[✅]--(ornicar.html)
  2190. ├──[✅]--(ory)
  2191. ├──[✅]--(paed01)
  2192. ├──[✅]--(palatable.html)
  2193. ├──[✅]--(panda-re.html)
  2194. ├──[✅]--(pankod.html)
  2195. ├──[✅]--(passcod)
  2196. ├──[✅]--(paxtonhare.html)
  2197. ├──[✅]--(pdcgomes)
  2198. ├──[✅]--(pditommaso)
  2199. ├──[✅]--(pdoc3)
  2200. ├──[✅]--(pemistahl.html)
  2201. ├──[✅]--(petervanderdoes)
  2202. ├──[✅]--(petervmeijgaard.html)
  2203. ├──[✅]--(phar-io)
  2204. ├──[✅]--(pharo-project)
  2205. ├──[✅]--(pheuter.html)
  2206. ├──[✅]--(phodal)
  2207. ├──[✅]--(phodal.html)
  2208. ├──[✅]--(phpmentors-jp)
  2209. ├──[✅]--(plasma-disassembler.html)
  2210. ├──[✅]--(plopjs)
  2211. ├──[✅]--(pocotan001)
  2212. ├──[✅]--(pod4g.html)
  2213. ├──[✅]--(pointfreeco.html)
  2214. ├──[✅]--(polyaxon)
  2215. ├──[✅]--(portable-cto)
  2216. ├──[✅]--(postmanlabs)
  2217. ├──[✅]--(pret.html)
  2218. ├──[✅]--(prisma.html)
  2219. ├──[✅]--(proYang.html)
  2220. ├──[✅]--(programa-stic.html)
  2221. ├──[✅]--(pshn)
  2222. ├──[✅]--(puckel)
  2223. ├──[✅]--(puppeteer)
  2224. ├──[✅]--(pwndbg.html)
  2225. ├──[✅]--(python-attrs.html)
  2226. ├──[✅]--(qiangxue.html)
  2227. ├──[✅]--(qilingframework.html)
  2228. ├──[✅]--(radareorg.html)
  2229. ├──[✅]--(radicle-dev)
  2230. ├──[✅]--(rahuldkjain)
  2231. ├──[✅]--(raphaelhanneken)
  2232. ├──[✅]--(rappasoft.html)
  2233. ├──[✅]--(raysan5)
  2234. ├──[✅]--(react-everywhere.html)
  2235. ├──[✅]--(react-native-community.html)
  2236. ├──[✅]--(react-ui-builder)
  2237. ├──[✅]--(reactopt)
  2238. ├──[✅]--(recoilphp)
  2239. ├──[✅]--(reenhanced)
  2240. ├──[✅]--(release-it.html)
  2241. ├──[✅]--(responsively-org)
  2242. ├──[✅]--(retroplasma.html)
  2243. ├──[✅]--(reviewboard)
  2244. ├──[✅]--(reviewdog)
  2245. ├──[✅]--(rgleichman.html)
  2246. ├──[✅]--(rialto-php)
  2247. ├──[✅]--(ribice.html)
  2248. ├──[✅]--(ring-lang.html)
  2249. ├──[✅]--(rizinorg.html)
  2250. ├──[✅]--(rmusser01.html)
  2251. ├──[✅]--(rockbruno)
  2252. ├──[✅]--(rokoroku.html)
  2253. ├──[✅]--(ropensci)
  2254. ├──[✅]--(rosuH)
  2255. ├──[✅]--(rs)
  2256. ├──[✅]--(rsapkf)
  2257. ├──[✅]--(rubycdp)
  2258. ├──[✅]--(ruyadorno)
  2259. ├──[✅]--(rwieruch.html)
  2260. ├──[✅]--(ryceg)
  2261. ├──[✅]--(saadq)
  2262. ├──[✅]--(sahat.html)
  2263. ├──[✅]--(salesagility)
  2264. ├──[✅]--(salgum1114)
  2265. ├──[✅]--(samuelsimoes.html)
  2266. ├──[✅]--(santiq.html)
  2267. ├──[✅]--(saojs.html)
  2268. ├──[✅]--(scala-exercises.html)
  2269. ├──[✅]--(scala.html)
  2270. ├──[✅]--(scalalandio.html)
  2271. ├──[✅]--(scalaz.html)
  2272. ├──[✅]--(scastiel)
  2273. ├──[✅]--(scipipe)
  2274. ├──[✅]--(sdiehl.html)
  2275. ├──[✅]--(selfrefactor.html)
  2276. ├──[✅]--(sfermigier.html)
  2277. ├──[✅]--(sgr-ksmt.html)
  2278. ├──[✅]--(sh4n.html)
  2279. ├──[✅]--(sharkdp.html)
  2280. ├──[✅]--(shenwei356.html)
  2281. ├──[✅]--(sherlock-project)
  2282. ├──[✅]--(svammathur)
  2283. ├──[✅]--(shroudedcode.html)
  2284. ├──[✅]--(sigalor.html)
  2285. ├──[✅]--(simeji.html)
  2286. ├──[✅]--(sindresorhus)
  2287. ├──[✅]--(sindresorhus.html)
  2288. ├──[✅]--(sismics)
  2289. ├──[✅]--(smallmuou)
  2290. ├──[✅]--(smallnest)
  2291. ├──[✅]--(softwaremill.html)
  2292. ├──[✅]--(sogou)
  2293. ├──[✅]--(source-foundry)
  2294. ├──[✅]--(spatie)
  2295. ├──[✅]--(spatie.html)
  2296. ├──[✅]--(spencerdodd)
  2297. ├──[✅]--(spikespaz)
  2298. ├──[✅]--(spirit.html)
  2299. ├──[✅]--(square)
  2300. ├──[✅]--(steshaw.html)
  2301. ├──[✅]--(storybook-eol)
  2302. ├──[✅]--(strazzere.html)
  2303. ├──[✅]--(streamlit)
  2304. ├──[✅]--(subethaedit)
  2305. ├──[✅]--(sunscrapers)
  2306. ├──[✅]--(susam)
  2307. ├──[✅]--(swimlane)
  2308. ├──[✅]--(tallesl.html)
  2309. ├──[✅]--(talyssonoc.html)
  2310. ├──[✅]--(tanelpoder)
  2311. ├──[✅]--(taniarascia.html)
  2312. ├──[✅]--(tankywoo.html)
  2313. ├──[✅]--(taviso.html)
  2314. ├──[✅]--(team-gryff)
  2315. ├──[✅]--(teambit)
  2316. ├──[✅]--(teamclairvoyant)
  2317. ├──[✅]--(techprimate)
  2318. ├──[✅]--(terraform-docs)
  2319. ├──[✅]--(tfsec)
  2320. ├──[✅]--(the-road-to-graphql.html)
  2321. ├──[✅]--(thoughtbot)
  2322. ├──[✅]--(thunks)
  2323. ├──[✅]--(tiangolo)
  2324. ├──[✅]--(tidyverse.html)
  2325. ├──[✅]--(tmrts.html)
  2326. ├──[✅]--(tmspzz.html)
  2327. ├──[✅]--(tpolecat.html)
  2328. ├──[✅]--(tr1s.html)
  2329. ├──[✅]--(txn2)
  2330. ├──[✅]--(txtnking)
  2331. ├──[✅]--(typelead.html)
  2332. ├──[✅]--(typelevel.html)
  2333. ├──[✅]--(typelift.html)
  2334. ├──[✅]--(tzutalin)
  2335. ├──[✅]--(unicodeveloper.html)
  2336. ├──[✅]--(unicorn-engine.html)
  2337. ├──[✅]--(universal-ctags)
  2338. ├──[✅]--(uxmal.html)
  2339. ├──[✅]--(vaib25vicky.html)
  2340. ├──[✅]--(vaibhavpandeyvpz.html)
  2341. ├──[✅]--(vavr-io.html)
  2342. ├──[✅]--(veggiemonk)
  2343. ├──[✅]--(vektra)
  2344. ├──[✅]--(verbose)
  2345. ├──[✅]--(vercel)
  2346. ├──[✅]--(versionpress)
  2347. ├──[✅]--(victorb)
  2348. ├──[✅]--(viewflow)
  2349. ├──[✅]--(vitalysim.html)
  2350. ├──[✅]--(vivisect.html)
  2351. ├──[✅]--(vkostyukov.html)
  2352. ├──[✅]--(voidcosmos.html)
  2353. ├──[✅]--(vue-generators)
  2354. ├──[✅]--(vuegg)
  2355. ├──[✅]--(w3tecch.html)
  2356. ├──[✅]--(watchexec)
  2357. ├──[✅]--(wbkd.html)
  2358. ├──[✅]--(wclr)
  2359. ├──[✅]--(webpro)
  2360. ├──[✅]--(welldone-software.html)
  2361. ├──[✅]--(wellyshen.html)
  2362. ├──[✅]--(wisk.html)
  2363. ├──[✅]--(wix)
  2364. ├──[✅]--(wking-io)
  2365. ├──[✅]--(wo52616111.html)
  2366. ├──[✅]--(wordplate.html)
  2367. ├──[✅]--(workco.html)
  2368. ├──[✅]--(wx-chevalier.html)
  2369. ├──[✅]--(x-motemen)
  2370. ├──[✅]--(x64dbg.html)
  2371. ├──[✅]--(xcpretty)
  2372. ├──[✅]--(xjh22222228)
  2373. ├──[✅]--(xoreos.html)
  2374. ├──[✅]--(xsynaptic)
  2375. ├──[✅]--(xudaolong)
  2376. ├──[✅]--(xxjwxc)
  2377. ├──[✅]--(yeoman)
  2378. ├──[✅]--(yonaskolb)
  2379. ├──[✅]--(yosmkd)
  2380. ├──[✅]--(yulingtianxia)
  2381. ├──[✅]--(yulingtianxia.html)
  2382. ├──[✅]--(z-pattern-matcng.html)
  2383. ├──[✅]--(zagahr)
  2384. ├──[✅]--(zealdocs)
  2385. ├──[✅]--(zeebe-io)
  2386. ├──[✅]--(zeffy.html)
  2387. ├──[✅]--(zegl)
  2388. ├──[✅]--(zerosoul)
  2389. ├──[✅]--(zio.html)
  2390. ├──[✅]--(zjw-swun.html)
  2391. └──[✅]--(zubairehman.html)
  2392. └──[✅]--(projects)
  2393. ├──[✅]--(frontend-dev-bookmarks-master)
  2394. └──[✅]--(frontend-dev-bookmarks-master)
  2395. ├──[✅]--(animation)
  2396. ├──[✅]--(appearance)
  2397. ├──[✅]--(arctecture)
  2398. ├──[✅]--(compatibility)
  2399. ├──[✅]--(ecosystem)
  2400. ├──[✅]--(languages-protocols-browser-apis)
  2401. ├──[✅]--(user-interface-components)
  2402. └──[✅]--(workflow)
  2403. └──[✅]--(fucking.awesome.python)
  2404. ├──[✅]--(netlify-functions)
  2405. └──[✅]--(src)
  2406. ├──[✅]--(_data)
  2407. ├──[✅]--(_includes)
  2408. ├──[✅]--(layouts)
  2409. └──[✅]--(partials)
  2410. ├──[✅]--(admin)
  2411. ├──[✅]--(assets)
  2412. ├──[✅]--(css)
  2413. ├──[✅]--(images)
  2414. └──[✅]--(js)
  2415. ├──[✅]--(examples)
  2416. ├──[✅]--(functions)
  2417. └──[✅]--(pages)
  2418. ├──[✅]--(python-data-generation)
  2419. ├──[✅]--(technology_books-master)
  2420. ├──[✅]--(Android)
  2421. ├──[✅]--(AngularJS)
  2422. ├──[✅]--(Ansible)
  2423. ├──[✅]--(Arduino)
  2424. ├──[✅]--(CSS)
  2425. ├──[✅]--(Delp✅)
  2426. ├──[✅]--(DevOps)
  2427. ├──[✅]--(Docker)
  2428. ├──[✅]--(Docker-swarm)
  2429. ├──[✅]--(Game Developement)
  2430. ├──[✅]--(Github)
  2431. ├──[✅]--(Golang)
  2432. ├──[✅]--(Java)
  2433. └──[✅]--(spring)
  2434. ├──[✅]--(JavaScript)
  2435. ├──[✅]--(Jenkins)
  2436. ├──[✅]--(K8s)
  2437. ├──[✅]--(Kafka)
  2438. ├──[✅]--(Linux)
  2439. ├──[✅]--(Macne-Learning)
  2440. ├──[✅]--(Mesos)
  2441. ├──[✅]--(MongoDB)
  2442. ├──[✅]--(NodeJS)
  2443. ├──[✅]--(OpenStack)
  2444. ├──[✅]--(Python)
  2445. ├──[✅]--(R)
  2446. ├──[✅]--(Raspberry)
  2447. ├──[✅]--(Redis)
  2448. ├──[✅]--(Ruby)
  2449. ├──[✅]--(Terraform)
  2450. ├──[✅]--(Unity)
  2451. └──[✅]--(Zookeeper)
  2452. └──[✅]--(web-guided-project-testing-web-apps-solution-main)
  2453. ├──[✅]--(public)
  2454. └──[✅]--(src)
  2455. └──[✅]--(components)
  2456. ├──[✅]--(3-misc)
  2457. ├──[✅]--(Beginner)
  2458. ├──[✅]--(capSentence)
  2459. ├──[✅]--(chunkArray)
  2460. ├──[✅]--(factorial)
  2461. ├──[✅]--(falsyBouncer)
  2462. ├──[✅]--(fibonacci)
  2463. ├──[✅]--(fizzBuzz)
  2464. ├──[✅]--(hammingDistance)
  2465. ├──[✅]--(isAnagram)
  2466. ├──[✅]--(longestWord)
  2467. ├──[✅]--(maxRecurringChar)
  2468. ├──[✅]--(mergeArrays)
  2469. ├──[✅]--(palindromeChecker)
  2470. ├──[✅]--(reverseString)
  2471. ├──[✅]--(searchReplace)
  2472. ├──[✅]--(vowelsCounter)
  2473. └──[✅]--(whereIBelong)
  2474. ├──[✅]--(SandboxSQL-master)
  2475. └──[✅]--(SandboxSQL-master)
  2476. ├──[✅]--(SQLSandbox.xcodeproj)
  2477. ├──[✅]--(project.xcworkspace)
  2478. ├──[✅]--(xcshareddata)
  2479. └──[✅]--(xcuserdata)
  2480. ├──[✅]--(iOS)
  2481. ├──[✅]--(Base.lproj)
  2482. └──[✅]--(Images.xcassets)
  2483. └──[✅]--(src)
  2484. └──[✅]--(js)
  2485. ├──[✅]--(articles-from-interwebs)
  2486. └──[✅]--(Jquery-tips-n-tricks_files)
  2487. └──[✅]--(node-web-scraper-master)
  2488. └──[✅]--(node-web-scraper-master)
  2489. ├──[✅]--(4-test-prep)
  2490. └──[✅]--(Study-Guides)
  2491. ├──[✅]--(5-websites)
  2492. ├──[✅]--(lambda-prep)
  2493. ├──[✅]--(_Resources)
  2494. └──[✅]--(Precourse-master)
  2495. ├──[✅]--(Lesson01-Git)
  2496. ├──[✅]--(Lesson02-HTML-CSS)
  2497. ├──[✅]--(Lesson03-CSS-Positioning)
  2498. ├──[✅]--(Lesson04-JS-I)
  2499. ├──[✅]--(Lesson05-JS-II)
  2500. ├──[✅]--(Lesson06-JS-III)
  2501. ├──[✅]--(Lesson07-JS-IV)
  2502. ├──[✅]--(Lesson08-JS-V)
  2503. ├──[✅]--(Lesson09-JS-VI)
  2504. ├──[✅]--(Lesson10-JS-VII)
  2505. ├──[✅]--(Lesson11-JS-VIII)
  2506. ├──[✅]--(Lesson12-DOM)
  2507. └──[✅]--(Precourse-master)
  2508. ├──[✅]--(javascript-practice)
  2509. ├──[✅]--(-ALL-JS-Files)
  2510. ├──[✅]--(00_expressions_variables)
  2511. ├──[✅]--(exercises)
  2512. └──[✅]--(solutions)
  2513. ├──[✅]--(01_conditionals)
  2514. ├──[✅]--(exercises)
  2515. └──[✅]--(solutions)
  2516. ├──[✅]--(02_functions)
  2517. ├──[✅]--(exercises)
  2518. └──[✅]--(solutions)
  2519. ├──[✅]--(03_loops)
  2520. ├──[✅]--(exercises)
  2521. └──[✅]--(solutions)
  2522. ├──[✅]--(04_arrays)
  2523. ├──[✅]--(exercises)
  2524. └──[✅]--(solutions)
  2525. ├──[✅]--(05_nesting)
  2526. ├──[✅]--(exercises)
  2527. └──[✅]--(solutions)
  2528. ├──[✅]--(06_decomposition_pattern)
  2529. ├──[✅]--(A_decomposing_problems_exercise)
  2530. ├──[✅]--(B_decomposing_problems_exercise)
  2531. └──[✅]--(C_decomposing_problems_exercise)
  2532. ├──[✅]--(07_objects)
  2533. ├──[✅]--(A_objects_exercise)
  2534. ├──[✅]--(B_objects_exercise)
  2535. └──[✅]--(C_objects_exercise)
  2536. ├──[✅]--(08_gher_order_functions)
  2537. ├──[✅]--(A_native_callback_methods_exercise)
  2538. └──[✅]--(B_native_callback_methods_exercise)
  2539. └──[✅]--(simple-side-bar)
  2540. ├──[✅]--(css)
  2541. └──[✅]--(vendor)
  2542. ├──[✅]--(markdown)
  2543. └──[✅]--(readme)
  2544. └──[✅]--(README_files)
  2545. └──[✅]--(templates)
  2546. ├──[✅]--(css)
  2547. ├──[✅]--(doc)
  2548. ├──[✅]--(img)
  2549. └──[✅]--(js)
  2550. └──[✅]--(vendor)
  2551. ├──[✅]--(6-about)
  2552. ├──[✅]--(Using Canvas 27a0cf2408124ad19a3802565bd24de6)
  2553. └──[✅]--(How are courses structured in Canvas How do I know 3dfccdd4ff5f462dacde3b358c627e60)
  2554. └──[✅]--(brits-codepens)
  2555. ├──[✅]--(7-assets)
  2556. ├──[✅]--(AUDIO-VISUALIZER)
  2557. ├──[✅]--(Box2D)
  2558. ├──[✅]--(assets)
  2559. └──[✅]--(libs)
  2560. ├──[✅]--(Gary Ad)
  2561. ├──[✅]--(Baked)
  2562. └──[✅]--(sounds)
  2563. └──[✅]--(Raw)
  2564. ├──[✅]--(GaryPewPew)
  2565. ├──[✅]--(Animate)
  2566. ├──[✅]--(js)
  2567. └──[✅]--(sounds)
  2568. ├──[✅]--(MusicViz)
  2569. └──[✅]--(js)
  2570. ├──[✅]--(MusicViz2)
  2571. ├──[✅]--(js)
  2572. └──[✅]--(sounds)
  2573. ├──[✅]--(Performance)
  2574. ├──[✅]--(Context2DLog)
  2575. ├──[✅]--(FauxCanvas)
  2576. ├──[✅]--(Snowmark)
  2577. ├──[✅]--(css)
  2578. └──[✅]--(js)
  2579. ├──[✅]--(Zombie)
  2580. └──[✅]--(images)
  2581. └──[✅]--(framerate)
  2582. ├──[✅]--(assets)
  2583. └──[✅]--(js)
  2584. ├──[✅]--(Planetary Gary)
  2585. ├──[✅]--(Animate)
  2586. ├──[✅]--(assets)
  2587. ├──[✅]--(images)
  2588. └──[✅]--(sounds)
  2589. ├──[✅]--(js)
  2590. └──[✅]--(libs)
  2591. ├──[✅]--(js)
  2592. └──[✅]--(sounds)
  2593. ├──[✅]--(_IMAGES)
  2594. ├──[✅]--(fonts)
  2595. ├──[✅]--(footer)
  2596. ├──[✅]--(images)
  2597. ├──[✅]--(jquery)
  2598. ├──[✅]--(dist)
  2599. ├──[✅]--(external)
  2600. └──[✅]--(sizzle)
  2601. └──[✅]--(dist)
  2602. └──[✅]--(src)
  2603. ├──[✅]--(ajax)
  2604. └──[✅]--(var)
  2605. ├──[✅]--(attributes)
  2606. ├──[✅]--(core)
  2607. └──[✅]--(var)
  2608. ├──[✅]--(css)
  2609. └──[✅]--(var)
  2610. ├──[✅]--(data)
  2611. └──[✅]--(var)
  2612. ├──[✅]--(deferred)
  2613. ├──[✅]--(deprecated)
  2614. ├──[✅]--(effects)
  2615. ├──[✅]--(event)
  2616. ├──[✅]--(exports)
  2617. ├──[✅]--(manipulation)
  2618. └──[✅]--(var)
  2619. ├──[✅]--(queue)
  2620. ├──[✅]--(traversing)
  2621. └──[✅]--(var)
  2622. └──[✅]--(var)
  2623. ├──[✅]--(loadashes6)
  2624. └──[✅]--(lodash)
  2625. └──[✅]--(fp)
  2626. ├──[✅]--(might-delete)
  2627. └──[✅]--(_MARKDOWN)
  2628. ├──[✅]--(mout)
  2629. ├──[✅]--(array)
  2630. ├──[✅]--(collection)
  2631. ├──[✅]--(date)
  2632. └──[✅]--(i18n)
  2633. ├──[✅]--(doc)
  2634. ├──[✅]--(function)
  2635. ├──[✅]--(lang)
  2636. ├──[✅]--(math)
  2637. ├──[✅]--(number)
  2638. ├──[✅]--(object)
  2639. ├──[✅]--(queryString)
  2640. ├──[✅]--(random)
  2641. ├──[✅]--(src)
  2642. ├──[✅]--(array)
  2643. ├──[✅]--(collection)
  2644. ├──[✅]--(date)
  2645. └──[✅]--(i18n)
  2646. ├──[✅]--(function)
  2647. ├──[✅]--(lang)
  2648. ├──[✅]--(math)
  2649. ├──[✅]--(number)
  2650. ├──[✅]--(object)
  2651. ├──[✅]--(queryString)
  2652. ├──[✅]--(random)
  2653. ├──[✅]--(string)
  2654. └──[✅]--(time)
  2655. ├──[✅]--(string)
  2656. └──[✅]--(time)
  2657. ├──[✅]--(past-student-repos)
  2658. ├──[✅]--(DOM-II-master)
  2659. ├──[✅]--(Data-Structures-Notes-master)
  2660. ├──[✅]--(BST_and_Heaps)
  2661. ├──[✅]--(Doubly_Linked_List)
  2662. ├──[✅]--(Interview_Problems)
  2663. └──[✅]--(Linked_Lists)
  2664. ├──[✅]--(Data-Structures-and-Algorithms-master)
  2665. ├──[✅]--(assets)
  2666. └──[✅]--(src)
  2667. ├──[✅]--(algorithms)
  2668. ├──[✅]--(analysis-of-algorithms)
  2669. └──[✅]--(data-structures)
  2670. ├──[✅]--(Data-Structures-master)
  2671. ├──[✅]--(avl_tree)
  2672. ├──[✅]--(binary_search_tree)
  2673. ├──[✅]--(doubly_linked_list)
  2674. ├──[✅]--(heap)
  2675. ├──[✅]--(javascript)
  2676. └──[✅]--(tests)
  2677. ├──[✅]--(lru_cache)
  2678. ├──[✅]--(python)
  2679. ├──[✅]--(binary_search_tree)
  2680. ├──[✅]--(doubly_linked_list)
  2681. ├──[✅]--(heap)
  2682. ├──[✅]--(linked_list)
  2683. └──[✅]--(queue)
  2684. └──[✅]--(queue)
  2685. ├──[✅]--(Graphs-Notes-master)
  2686. ├──[✅]--(img)
  2687. ├──[✅]--(lecture1)
  2688. ├──[✅]--(lecture2)
  2689. ├──[✅]--(lecture3)
  2690. └──[✅]--(lecture4)
  2691. ├──[✅]--(Graphs-master)
  2692. ├──[✅]--(javascript)
  2693. ├──[✅]--(guided-demo)
  2694. ├──[✅]--(objectives)
  2695. └──[✅]--(projects)
  2696. ├──[✅]--(objectives)
  2697. ├──[✅]--(breadth-first-search)
  2698. ├──[✅]--(connected-components)
  2699. ├──[✅]--(depth-first-search)
  2700. ├──[✅]--(graph-intro)
  2701. ├──[✅]--(graph-representations)
  2702. └──[✅]--(randomness)
  2703. ├──[✅]--(projects)
  2704. ├──[✅]--(adventure)
  2705. ├──[✅]--(ancestor)
  2706. ├──[✅]--(graph)
  2707. └──[✅]--(social)
  2708. └──[✅]--(python)
  2709. ├──[✅]--(guided-demo)
  2710. └──[✅]--(projects)
  2711. ├──[✅]--(HTTP-AJAX-II-master)
  2712. ├──[✅]--(app)
  2713. ├──[✅]--(public)
  2714. └──[✅]--(src)
  2715. └──[✅]--(server)
  2716. ├──[✅]--(HTTP-AJAX-master)
  2717. └──[✅]--(friends)
  2718. ├──[✅]--(public)
  2719. └──[✅]--(src)
  2720. ├──[✅]--(Hash-Tables-Notes-master)
  2721. ├──[✅]--(Intro-Python-master)
  2722. └──[✅]--(src)
  2723. ├──[✅]--(day-1-toy)
  2724. ├──[✅]--(days-2-4-adv)
  2725. ├──[✅]--(mini-challenge)
  2726. └──[✅]--(python-example)
  2727. ├──[✅]--(Intro-to-C-master)
  2728. ├──[✅]--(first)
  2729. ├──[✅]--(fizzbuzz)
  2730. └──[✅]--(tests)
  2731. ├──[✅]--(hangman)
  2732. ├──[✅]--(malloc)
  2733. └──[✅]--(tests)
  2734. ├──[✅]--(pointers)
  2735. └──[✅]--(tests)
  2736. ├──[✅]--(queue)
  2737. └──[✅]--(tests)
  2738. ├──[✅]--(quicksort)
  2739. └──[✅]--(tests)
  2740. ├──[✅]--(strings)
  2741. └──[✅]--(tests)
  2742. ├──[✅]--(structs)
  2743. └──[✅]--(tests)
  2744. └──[✅]--(utils)
  2745. ├──[✅]--(JavaScript-I-Guided-master)
  2746. ├──[✅]--(Lambda-School-Instruction-Notes-master)
  2747. ├──[✅]--(10. Data Persistence in Web APIs)
  2748. └──[✅]--(assets)
  2749. ├──[✅]--(11. Authentication)
  2750. └──[✅]--(12. Testing)
  2751. ├──[✅]--(Lambda-School-master)
  2752. ├──[✅]--(Week 1)
  2753. ├──[✅]--(Sprint-Challenge User-Interface)
  2754. ├──[✅]--(User Interface I Project 2 - Sweet Eats Bakery)
  2755. ├──[✅]--(User Interface I HTML Markup)
  2756. ├──[✅]--(User Interface III Services Page)
  2757. └──[✅]--(User-Interface II Innovation)
  2758. ├──[✅]--(Week 10)
  2759. ├──[✅]--(Car-Sales)
  2760. ├──[✅]--(React-Redux-App)
  2761. ├──[✅]--(Sprint-Challenge-State-Management-Smurfs)
  2762. ├──[✅]--(react-shopping-cart)
  2763. └──[✅]--(reducer-todo)
  2764. ├──[✅]--(Week 11)
  2765. ├──[✅]--(Auth-Friends)
  2766. ├──[✅]--(HTTP-Movies-Assignment)
  2767. ├──[✅]--(react-bubbles)
  2768. └──[✅]--(webtesting-iii-challenge)
  2769. ├──[✅]--(Week 12 - FoodieFun)
  2770. ├──[✅]--(Week 13)
  2771. ├──[✅]--(node-api1-project)
  2772. ├──[✅]--(webapi-challenge-sprint)
  2773. ├──[✅]--(webapi-ii-challenge)
  2774. └──[✅]--(webapi-iii-challenge)
  2775. ├──[✅]--(Week 14)
  2776. ├──[✅]--(node-db-challenge-sprint)
  2777. ├──[✅]--(node-db3-challenge)
  2778. ├──[✅]--(node-db4)
  2779. ├──[✅]--(webdb-i-challenge)
  2780. └──[✅]--(webdb-ii-challenge)
  2781. ├──[✅]--(Week 15)
  2782. ├──[✅]--(Sprint-Challenge-Authentication)
  2783. ├──[✅]--(node-server-testing-challenge)
  2784. ├──[✅]--(webauth-i-challenge)
  2785. └──[✅]--(webauth-iii-challenge)
  2786. ├──[✅]--(Week 16 - Mentor Me)
  2787. ├──[✅]--(Week 17 - 25 Future Hope)
  2788. ├──[✅]--(Week 2)
  2789. ├──[✅]--(Digital Resume)
  2790. ├──[✅]--(Fun Bus)
  2791. ├──[✅]--(Portfolio)
  2792. ├──[✅]--(Resposnive-Web-Design)
  2793. └──[✅]--(Sprint Challenge)
  2794. ├──[✅]--(Week 3)
  2795. ├──[✅]--(JavaScript-I)
  2796. ├──[✅]--(JavaScript-II)
  2797. ├──[✅]--(JavaScript-III)
  2798. ├──[✅]--(JavaScript-IV)
  2799. └──[✅]--(Sprint-Challenge)
  2800. ├──[✅]--(Week 4 - Local Voter Guide)
  2801. ├──[✅]--(css)
  2802. ├──[✅]--(images)
  2803. └──[✅]--(less)
  2804. ├──[✅]--(Week 5)
  2805. ├──[✅]--(DOM-I)
  2806. ├──[✅]--(DOM-II)
  2807. ├──[✅]--(Newsfeed-Components)
  2808. ├──[✅]--(Sprint-Challenge-Applied-Javascript)
  2809. └──[✅]--(github-usercard)
  2810. ├──[✅]--(Week 6)
  2811. ├──[✅]--(Sprint-Challenge-React-Wars)
  2812. ├──[✅]--(lambda-calculator)
  2813. ├──[✅]--(nasa-photo-of-the-day)
  2814. └──[✅]--(react-american-football-scoreboard)
  2815. ├──[✅]--(Week 7)
  2816. ├──[✅]--(React-Router-Basic-Nav)
  2817. ├──[✅]--(React-Router-Movies)
  2818. ├──[✅]--(Sprint-Challenge-Single-Page-Apps)
  2819. ├──[✅]--(User-Onboarding)
  2820. └──[✅]--(team-builder)
  2821. ├──[✅]--(Week 8 - Water My Plants)
  2822. └──[✅]--(Week 9)
  2823. ├──[✅]--(Github-User-Card)
  2824. ├──[✅]--(React-Todo)
  2825. ├──[✅]--(Sprint-Challenge-Advanced-React)
  2826. └──[✅]--(dark-mode)
  2827. ├──[✅]--(LambdaSchool-master)
  2828. ├──[✅]--(31d1)
  2829. ├──[✅]--(Administration)
  2830. ├──[✅]--(certs)
  2831. ├──[✅]--(marketing)
  2832. ├──[✅]--(studying)
  2833. └──[✅]--(zoom)
  2834. ├──[✅]--(JavaScript30)
  2835. ├──[✅]--(01)
  2836. ├──[✅]--(02)
  2837. ├──[✅]--(03)
  2838. ├──[✅]--(04)
  2839. ├──[✅]--(05)
  2840. ├──[✅]--(06)
  2841. ├──[✅]--(07)
  2842. ├──[✅]--(08)
  2843. ├──[✅]--(09)
  2844. ├──[✅]--(10)
  2845. ├──[✅]--(11)
  2846. ├──[✅]--(12)
  2847. ├──[✅]--(13)
  2848. ├──[✅]--(14)
  2849. ├──[✅]--(15)
  2850. ├──[✅]--(16)
  2851. ├──[✅]--(17)
  2852. ├──[✅]--(18)
  2853. ├──[✅]--(19)
  2854. ├──[✅]--(20)
  2855. ├──[✅]--(21)
  2856. ├──[✅]--(22)
  2857. ├──[✅]--(23)
  2858. ├──[✅]--(24)
  2859. ├──[✅]--(25)
  2860. ├──[✅]--(26)
  2861. ├──[✅]--(27)
  2862. ├──[✅]--(28)
  2863. ├──[✅]--(29)
  2864. └──[✅]--(30)
  2865. ├──[✅]--(aa-score)
  2866. ├──[✅]--(public)
  2867. └──[✅]--(src)
  2868. ├──[✅]--(bw1-tl)
  2869. ├──[✅]--(admin)
  2870. ├──[✅]--(api)
  2871. ├──[✅]--(auth)
  2872. ├──[✅]--(database)
  2873. ├──[✅]--(middleware)
  2874. ├──[✅]--(todos)
  2875. └──[✅]--(volunteer)
  2876. ├──[✅]--(css)
  2877. ├──[✅]--(labs)
  2878. ├──[✅]--(last journal entry)
  2879. └──[✅]--(video-to-next-group)
  2880. ├──[✅]--(m1)
  2881. ├──[✅]--(11b1)
  2882. ├──[✅]--(11c1)
  2883. ├──[✅]--(11d1)
  2884. ├──[✅]--(12a1)
  2885. ├──[✅]--(12b1)
  2886. ├──[✅]--(12c1)
  2887. ├──[✅]--(12d1)
  2888. ├──[✅]--(13a1)
  2889. ├──[✅]--(13b1)
  2890. ├──[✅]--(13c1)
  2891. ├──[✅]--(13d1)
  2892. └──[✅]--(13e1)
  2893. ├──[✅]--(m2)
  2894. ├──[✅]--(21a1)
  2895. ├──[✅]--(21b1)
  2896. ├──[✅]--(21c1)
  2897. ├──[✅]--(21d1)
  2898. ├──[✅]--(21e1)
  2899. ├──[✅]--(22a1)
  2900. ├──[✅]--(22b1)
  2901. ├──[✅]--(22c1)
  2902. ├──[✅]--(22e1)
  2903. ├──[✅]--(23a1)
  2904. ├──[✅]--(23a2)
  2905. ├──[✅]--(23b1)
  2906. ├──[✅]--(23c1)
  2907. ├──[✅]--(23d1)
  2908. ├──[✅]--(23d2)
  2909. ├──[✅]--(23e1)
  2910. └──[✅]--(24a1)
  2911. ├──[✅]--(m3)
  2912. ├──[✅]--(31a1)
  2913. ├──[✅]--(31a2)
  2914. ├──[✅]--(31b1)
  2915. ├──[✅]--(31c1)
  2916. ├──[✅]--(31d1)
  2917. ├──[✅]--(31e1)
  2918. ├──[✅]--(32a1)
  2919. ├──[✅]--(32b1)
  2920. ├──[✅]--(32c1)
  2921. ├──[✅]--(32d1)
  2922. ├──[✅]--(32e1)
  2923. ├──[✅]--(33a1)
  2924. ├──[✅]--(33b1)
  2925. ├──[✅]--(33d1)
  2926. └──[✅]--(33e1)
  2927. ├──[✅]--(m4)
  2928. ├──[✅]--(41a1)
  2929. ├──[✅]--(41a2)
  2930. ├──[✅]--(41b1)
  2931. ├──[✅]--(41b2)
  2932. ├──[✅]--(41c1)
  2933. ├──[✅]--(41c2)
  2934. ├──[✅]--(41d1)
  2935. ├──[✅]--(41e1)
  2936. ├──[✅]--(41e1app)
  2937. ├──[✅]--(42a1)
  2938. ├──[✅]--(42a2)
  2939. ├──[✅]--(42b1)
  2940. ├──[✅]--(42b2)
  2941. ├──[✅]--(42c1)
  2942. ├──[✅]--(42c2)
  2943. ├──[✅]--(42d1)
  2944. ├──[✅]--(42d2)
  2945. ├──[✅]--(42e1)
  2946. ├──[✅]--(43a1)
  2947. ├──[✅]--(43a2)
  2948. ├──[✅]--(43b1)
  2949. ├──[✅]--(43b2)
  2950. ├──[✅]--(43c1)
  2951. ├──[✅]--(43c2)
  2952. ├──[✅]--(43d1)
  2953. ├──[✅]--(43d2)
  2954. └──[✅]--(43e1)
  2955. ├──[✅]--(m5)
  2956. ├──[✅]--(51a1)
  2957. ├──[✅]--(51b1)
  2958. ├──[✅]--(51c1)
  2959. ├──[✅]--(51d1)
  2960. ├──[✅]--(51d2)
  2961. ├──[✅]--(51e1)
  2962. ├──[✅]--(52b1)
  2963. ├──[✅]--(52c1)
  2964. ├──[✅]--(52c2)
  2965. ├──[✅]--(52d1)
  2966. ├──[✅]--(53a1)
  2967. ├──[✅]--(53b1)
  2968. ├──[✅]--(53c1)
  2969. └──[✅]--(53d1)
  2970. ├──[✅]--(m6)
  2971. ├──[✅]--(61a1)
  2972. ├──[✅]--(61b1)
  2973. ├──[✅]--(61c1)
  2974. ├──[✅]--(62a1)
  2975. ├──[✅]--(62b1)
  2976. ├──[✅]--(63a1)
  2977. ├──[✅]--(63b1)
  2978. ├──[✅]--(63c1)
  2979. └──[✅]--(63d1)
  2980. ├──[✅]--(m7)
  2981. ├──[✅]--(71a1)
  2982. ├──[✅]--(71e1)
  2983. ├──[✅]--(72a1)
  2984. ├──[✅]--(73a1)
  2985. └──[✅]--(74a1)
  2986. ├──[✅]--(src)
  2987. ├──[✅]--(iterative_sorting)
  2988. └──[✅]--(searcng)
  2989. ├──[✅]--(summary)
  2990. ├──[✅]--(Node Express Knex)
  2991. ├──[✅]--(certifications)
  2992. ├──[✅]--(cobol)
  2993. ├──[✅]--(complete)
  2994. ├──[✅]--(general)
  2995. ├──[✅]--(interviewing)
  2996. ├──[✅]--(testing)
  2997. └──[✅]--(typescript)
  2998. └──[✅]--(tlbw)
  2999. └──[✅]--(client)
  3000. ├──[✅]--(Mongo-I-master)
  3001. └──[✅]--(src)
  3002. ├──[✅]--(controllers)
  3003. ├──[✅]--(models)
  3004. └──[✅]--(routes)
  3005. ├──[✅]--(Node-Blog-master)
  3006. ├──[✅]--(api)
  3007. ├──[✅]--(post)
  3008. ├──[✅]--(tag)
  3009. └──[✅]--(user)
  3010. ├──[✅]--(config)
  3011. ├──[✅]--(data)
  3012. ├──[✅]--(helpers)
  3013. ├──[✅]--(migrations)
  3014. └──[✅]--(seeds)
  3015. └──[✅]--(routers)
  3016. ├──[✅]--(Precourse-master)
  3017. ├──[✅]--(Lesson1-Git)
  3018. ├──[✅]--(Lesson10-JS-VII)
  3019. └──[✅]--(homework)
  3020. ├──[✅]--(Lesson11-JS-VIII)
  3021. └──[✅]--(homework)
  3022. ├──[✅]--(Lesson12-DOM)
  3023. └──[✅]--(homework)
  3024. ├──[✅]--(Lesson2-HTML-CSS)
  3025. └──[✅]--(homework)
  3026. ├──[✅]--(Lesson3-CSS-Positioning)
  3027. └──[✅]--(homework)
  3028. ├──[✅]--(Lesson4-JS-I)
  3029. └──[✅]--(homework)
  3030. ├──[✅]--(Lesson5-JS-II)
  3031. └──[✅]--(homework)
  3032. ├──[✅]--(Lesson6-JS-III)
  3033. └──[✅]--(homework)
  3034. ├──[✅]--(Lesson7-JS-IV)
  3035. └──[✅]--(homework)
  3036. ├──[✅]--(Lesson8-JS-V)
  3037. └──[✅]--(homework)
  3038. └──[✅]--(Lesson9-JS-VI)
  3039. └──[✅]--(homework)
  3040. ├──[✅]--(Python-II-Notes-master)
  3041. └──[✅]--(src)
  3042. ├──[✅]--(Python-master)
  3043. ├──[✅]--(arithmetic_analysis)
  3044. └──[✅]--(image_data)
  3045. ├──[✅]--(backtracking)
  3046. ├──[✅]--(bit_manipulation)
  3047. ├──[✅]--(blockchain)
  3048. ├──[✅]--(boolean_algebra)
  3049. ├──[✅]--(cellular_automata)
  3050. ├──[✅]--(ciphers)
  3051. ├──[✅]--(compression)
  3052. └──[✅]--(image_data)
  3053. ├──[✅]--(computer_vision)
  3054. ├──[✅]--(conversions)
  3055. ├──[✅]--(data_structures)
  3056. ├──[✅]--(binary_tree)
  3057. ├──[✅]--(disjoint_set)
  3058. ├──[✅]--(hasng)
  3059. ├──[✅]--(heap)
  3060. ├──[✅]--(linked_list)
  3061. ├──[✅]--(queue)
  3062. ├──[✅]--(stacks)
  3063. └──[✅]--(trie)
  3064. ├──[✅]--(digital_image_processing)
  3065. ├──[✅]--(dithering)
  3066. ├──[✅]--(edge_detection)
  3067. ├──[✅]--(filters)
  3068. ├──[✅]--(✅stogram_equalization)
  3069. ├──[✅]--(image_data)
  3070. ├──[✅]--(resize)
  3071. └──[✅]--(rotation)
  3072. ├──[✅]--(divide_and_conquer)
  3073. ├──[✅]--(dynamic_programming)
  3074. ├──[✅]--(electronics)
  3075. ├──[✅]--(file_transfer)
  3076. └──[✅]--(tests)
  3077. ├──[✅]--(fuzzy_logic)
  3078. ├──[✅]--(genetic_algorithm)
  3079. ├──[✅]--(geodesy)
  3080. ├──[✅]--(grapcs)
  3081. ├──[✅]--(graphs)
  3082. └──[✅]--(tests)
  3083. ├──[✅]--(hashes)
  3084. ├──[✅]--(knapsack)
  3085. └──[✅]--(tests)
  3086. ├──[✅]--(linear_algebra)
  3087. └──[✅]--(src)
  3088. ├──[✅]--(macne_learning)
  3089. ├──[✅]--(forecasting)
  3090. └──[✅]--(lstm)
  3091. ├──[✅]--(maths)
  3092. ├──[✅]--(images)
  3093. └──[✅]--(series)
  3094. ├──[✅]--(matrix)
  3095. └──[✅]--(tests)
  3096. ├──[✅]--(networking_flow)
  3097. ├──[✅]--(neural_network)
  3098. ├──[✅]--(other)
  3099. ├──[✅]--(project_euler)
  3100. ├──[✅]--(problem_001)
  3101. ├──[✅]--(problem_002)
  3102. ├──[✅]--(problem_003)
  3103. ├──[✅]--(problem_004)
  3104. ├──[✅]--(problem_005)
  3105. ├──[✅]--(problem_006)
  3106. ├──[✅]--(problem_007)
  3107. ├──[✅]--(problem_008)
  3108. ├──[✅]--(problem_009)
  3109. ├──[✅]--(problem_010)
  3110. ├──[✅]--(problem_011)
  3111. ├──[✅]--(problem_012)
  3112. ├──[✅]--(problem_013)
  3113. ├──[✅]--(problem_014)
  3114. ├──[✅]--(problem_015)
  3115. ├──[✅]--(problem_016)
  3116. ├──[✅]--(problem_017)
  3117. ├──[✅]--(problem_018)
  3118. ├──[✅]--(problem_019)
  3119. ├──[✅]--(problem_020)
  3120. ├──[✅]--(problem_021)
  3121. ├──[✅]--(problem_022)
  3122. ├──[✅]--(problem_023)
  3123. ├──[✅]--(problem_024)
  3124. ├──[✅]--(problem_025)
  3125. ├──[✅]--(problem_026)
  3126. ├──[✅]--(problem_027)
  3127. ├──[✅]--(problem_028)
  3128. ├──[✅]--(problem_029)
  3129. ├──[✅]--(problem_030)
  3130. ├──[✅]--(problem_031)
  3131. ├──[✅]--(problem_032)
  3132. ├──[✅]--(problem_033)
  3133. ├──[✅]--(problem_034)
  3134. ├──[✅]--(problem_035)
  3135. ├──[✅]--(problem_036)
  3136. ├──[✅]--(problem_037)
  3137. ├──[✅]--(problem_038)
  3138. ├──[✅]--(problem_039)
  3139. ├──[✅]--(problem_040)
  3140. ├──[✅]--(problem_041)
  3141. ├──[✅]--(problem_042)
  3142. ├──[✅]--(problem_043)
  3143. ├──[✅]--(problem_044)
  3144. ├──[✅]--(problem_045)
  3145. ├──[✅]--(problem_046)
  3146. ├──[✅]--(problem_047)
  3147. ├──[✅]--(problem_048)
  3148. ├──[✅]--(problem_049)
  3149. ├──[✅]--(problem_050)
  3150. ├──[✅]--(problem_051)
  3151. ├──[✅]--(problem_052)
  3152. ├──[✅]--(problem_053)
  3153. ├──[✅]--(problem_054)
  3154. ├──[✅]--(problem_055)
  3155. ├──[✅]--(problem_056)
  3156. ├──[✅]--(problem_057)
  3157. ├──[✅]--(problem_058)
  3158. ├──[✅]--(problem_059)
  3159. ├──[✅]--(problem_062)
  3160. ├──[✅]--(problem_063)
  3161. ├──[✅]--(problem_064)
  3162. ├──[✅]--(problem_065)
  3163. ├──[✅]--(problem_067)
  3164. ├──[✅]--(problem_069)
  3165. ├──[✅]--(problem_070)
  3166. ├──[✅]--(problem_071)
  3167. ├──[✅]--(problem_072)
  3168. ├──[✅]--(problem_074)
  3169. ├──[✅]--(problem_075)
  3170. ├──[✅]--(problem_076)
  3171. ├──[✅]--(problem_077)
  3172. ├──[✅]--(problem_080)
  3173. ├──[✅]--(problem_081)
  3174. ├──[✅]--(problem_085)
  3175. ├──[✅]--(problem_086)
  3176. ├──[✅]--(problem_087)
  3177. ├──[✅]--(problem_089)
  3178. ├──[✅]--(problem_091)
  3179. ├──[✅]--(problem_097)
  3180. ├──[✅]--(problem_099)
  3181. ├──[✅]--(problem_101)
  3182. ├──[✅]--(problem_102)
  3183. ├──[✅]--(problem_107)
  3184. ├──[✅]--(problem_112)
  3185. ├──[✅]--(problem_113)
  3186. ├──[✅]--(problem_119)
  3187. ├──[✅]--(problem_120)
  3188. ├──[✅]--(problem_123)
  3189. ├──[✅]--(problem_125)
  3190. ├──[✅]--(problem_129)
  3191. ├──[✅]--(problem_135)
  3192. ├──[✅]--(problem_173)
  3193. ├──[✅]--(problem_174)
  3194. ├──[✅]--(problem_180)
  3195. ├──[✅]--(problem_188)
  3196. ├──[✅]--(problem_191)
  3197. ├──[✅]--(problem_203)
  3198. ├──[✅]--(problem_206)
  3199. ├──[✅]--(problem_207)
  3200. ├──[✅]--(problem_234)
  3201. ├──[✅]--(problem_301)
  3202. └──[✅]--(problem_551)
  3203. ├──[✅]--(quantum)
  3204. ├──[✅]--(scheduling)
  3205. ├──[✅]--(scripts)
  3206. ├──[✅]--(searches)
  3207. ├──[✅]--(sorts)
  3208. ├──[✅]--(strings)
  3209. ├──[✅]--(traversals)
  3210. └──[✅]--(web_programming)
  3211. ├──[✅]--(React-Todo-master)
  3212. ├──[✅]--(public)
  3213. └──[✅]--(src)
  3214. └──[✅]--(components)
  3215. ├──[✅]--(Relational-Databases-master)
  3216. └──[✅]--(solutions)
  3217. ├──[✅]--(Server-Testing-master)
  3218. ├──[✅]--(Sorting-master)
  3219. └──[✅]--(src)
  3220. ├──[✅]--(iterative_sorting)
  3221. ├──[✅]--(recursive_sorting)
  3222. └──[✅]--(searcng)
  3223. ├──[✅]--(Sprint-Challenge--Graphs-master)
  3224. ├──[✅]--(img)
  3225. └──[✅]--(src)
  3226. ├──[✅]--(Sprint-Challenge--JavaScript-master)
  3227. ├──[✅]--(challenges)
  3228. ├──[✅]--(src)
  3229. └──[✅]--(tests)
  3230. ├──[✅]--(Sprint-Challenge-Node-Express-master)
  3231. ├──[✅]--(data)
  3232. ├──[✅]--(helpers)
  3233. ├──[✅]--(migrations)
  3234. └──[✅]--(seeds)
  3235. ├──[✅]--(express)
  3236. ├──[✅]--(public)
  3237. └──[✅]--(src)
  3238. └──[✅]--(routes)
  3239. ├──[✅]--(Sprint-Challenge-RDBMS-master)
  3240. ├──[✅]--(data)
  3241. ├──[✅]--(migrations)
  3242. └──[✅]--(seeds)
  3243. └──[✅]--(routes)
  3244. ├──[✅]--(Static-Pages-master)
  3245. ├──[✅]--(Wteboard-Pairing-master)
  3246. ├──[✅]--(BSTFromArray)
  3247. ├──[✅]--(BalancedBinaryTree)
  3248. ├──[✅]--(BalancedBrackets)
  3249. ├──[✅]--(BitcoinTrading)
  3250. ├──[✅]--(ClimbingStairs)
  3251. ├──[✅]--(CountingVotes)
  3252. ├──[✅]--(DepthFirstSearch)
  3253. ├──[✅]--(FindRotationPoint)
  3254. ├──[✅]--(IntegerPairs)
  3255. ├──[✅]--(KthToLastNode)
  3256. ├──[✅]--(LargestContiguousSum)
  3257. ├──[✅]--(LargestStack)
  3258. ├──[✅]--(LinkedListPalindrome)
  3259. ├──[✅]--(MatrixSpiralCopy)
  3260. ├──[✅]--(MergingTwoPackages)
  3261. ├──[✅]--(MinHeap)
  3262. ├──[✅]--(MinJumps)
  3263. ├──[✅]--(NthFibonacci)
  3264. ├──[✅]--(OneWayFlight)
  3265. ├──[✅]--(ProductOfAllOtherNumbers)
  3266. ├──[✅]--(QueueWithTwoStacks)
  3267. ├──[✅]--(ReverseLinkedList)
  3268. ├──[✅]--(RingBuffer)
  3269. ├──[✅]--(RobotPaths)
  3270. ├──[✅]--(RockPaperScissors)
  3271. ├──[✅]--(RotateImage)
  3272. ├──[✅]--(SetOfStacks)
  3273. ├──[✅]--(SortStack)
  3274. ├──[✅]--(SortTopScores)
  3275. ├──[✅]--(TemperatureTracker)
  3276. ├──[✅]--(TimePlanner)
  3277. └──[✅]--(ValidateBinaryTree)
  3278. ├──[✅]--(_DS-Python)
  3279. ├──[✅]--(Algorithms-I-Notes-master)
  3280. └──[✅]--(practice_algs)
  3281. └──[✅]--(Algorithms-master)
  3282. ├──[✅]--(climbing_stairs)
  3283. ├──[✅]--(knapsack)
  3284. ├──[✅]--(making_change)
  3285. ├──[✅]--(recipe_batches)
  3286. ├──[✅]--(rock_paper_scissors)
  3287. └──[✅]--(stock_prices)
  3288. ├──[✅]--(_Individual-Projects)
  3289. ├──[✅]--(Advanced-Form-Management-Guided-master)
  3290. └──[✅]--(app)
  3291. ├──[✅]--(Bootstrap-I-master)
  3292. ├──[✅]--(_example-resume)
  3293. ├──[✅]--(css)
  3294. ├──[✅]--(img)
  3295. ├──[✅]--(js)
  3296. └──[✅]--(less)
  3297. ├──[✅]--(Components-BEM-master)
  3298. ├──[✅]--(components)
  3299. └──[✅]--(markups)
  3300. ├──[✅]--(Components-Constructors-master)
  3301. ├──[✅]--(components)
  3302. └──[✅]--(markups)
  3303. ├──[✅]--(Computer-Arctecture-Notes-master)
  3304. ├──[✅]--(lectureI)
  3305. ├──[✅]--(lectureII)
  3306. ├──[✅]--(lectureIII)
  3307. └──[✅]--(lectureIV)
  3308. ├──[✅]--(Course_and_Book_Notes-master)
  3309. ├──[✅]--(Algorithm Design Manual)
  3310. ├──[✅]--(Computer_Science_Distilled)
  3311. ├──[✅]--(Lambda_Notes)
  3312. ├──[✅]--(Programming_Foundations)
  3313. ├──[✅]--(The_C_Programming_Language)
  3314. ├──[✅]--(Tnk Like a Programmer)
  3315. └──[✅]--(YoutubeVideos)
  3316. ├──[✅]--(JavaScript-I-master)
  3317. └──[✅]--(assignments)
  3318. ├──[✅]--(JavaScript-II-master)
  3319. └──[✅]--(assignments)
  3320. ├──[✅]--(JavaScript-III-master)
  3321. └──[✅]--(assignments)
  3322. └──[✅]--(JavaScript-IV-master)
  3323. └──[✅]--(assignments)
  3324. ├──[✅]--(_MOST-USEFUL)
  3325. └──[✅]--(Boilerplate-master)
  3326. ├──[✅]--(Apollo)
  3327. ├──[✅]--(Express-MongoDB)
  3328. ├──[✅]--(React-Redux)
  3329. └──[✅]--(TypeGraphQL)
  3330. ├──[✅]--(_misc)
  3331. └──[✅]--(Blockchain-Notes-master)
  3332. └──[✅]--(communication_gp)
  3333. ├──[✅]--(data_struct_and_algo-master)
  3334. └──[✅]--(logs)
  3335. ├──[✅]--(dev-portfolio-master)
  3336. ├──[✅]--(public)
  3337. ├──[✅]--(src)
  3338. ├──[✅]--(components)
  3339. ├──[✅]--(global-scss)
  3340. └──[✅]--(views)
  3341. └──[✅]--(tests_setup)
  3342. └──[✅]--(__mocks__)
  3343. ├──[✅]--(feelscollective-master)
  3344. ├──[✅]--(css)
  3345. ├──[✅]--(fonts)
  3346. ├──[✅]--(icomoon)
  3347. └──[✅]--(open-iconic)
  3348. ├──[✅]--(images)
  3349. ├──[✅]--(js)
  3350. └──[✅]--(scss)
  3351. ├──[✅]--(five-master)
  3352. └──[✅]--(FiveFeed)
  3353. ├──[✅]--(lambda)
  3354. ├──[✅]--(lambda-src)
  3355. └──[✅]--(src)
  3356. ├──[✅]--(homepage-master)
  3357. ├──[✅]--(css)
  3358. ├──[✅]--(fonts)
  3359. ├──[✅]--(images)
  3360. └──[✅]--(js)
  3361. ├──[✅]--(backstretch)
  3362. ├──[✅]--(bootstrap)
  3363. ├──[✅]--(easing)
  3364. ├──[✅]--(magnific-popup)
  3365. ├──[✅]--(owl-carousel)
  3366. ├──[✅]--(uitotop)
  3367. └──[✅]--(wow)
  3368. ├──[✅]--(lambda-demo-project-master)
  3369. ├──[✅]--(api)
  3370. ├──[✅]--(public)
  3371. └──[✅]--(src)
  3372. ├──[✅]--(lambda-lecture-notes-main)
  3373. ├──[✅]--(3-1-advanced-react)
  3374. ├──[✅]--(images)
  3375. └──[✅]--(pdf)
  3376. ├──[✅]--(3-2-advanced-state-mangement)
  3377. └──[✅]--(images)
  3378. └──[✅]--(3-3-advanced-web-applications)
  3379. └──[✅]--(images)
  3380. ├──[✅]--(portfolio-main)
  3381. ├──[✅]--(components)
  3382. ├──[✅]--(pages)
  3383. ├──[✅]--(public)
  3384. └──[✅]--(static)
  3385. ├──[✅]--(scripts)
  3386. ├──[✅]--(styles)
  3387. └──[✅]--(utils)
  3388. ├──[✅]--(react-carousel-master)
  3389. ├──[✅]--(public)
  3390. └──[✅]--(src)
  3391. └──[✅]--(assets)
  3392. ├──[✅]--(react-design-patterns-and-best-practices-master)
  3393. ├──[✅]--(chapter-03)
  3394. └──[✅]--(reusable-components)
  3395. ├──[✅]--(chapter-04)
  3396. ├──[✅]--(container-presentational)
  3397. └──[✅]--(✅gher-order-components)
  3398. ├──[✅]--(chapter-05)
  3399. ├──[✅]--(data-fetcng)
  3400. ├──[✅]--(data-flow)
  3401. └──[✅]--(react-refetch)
  3402. ├──[✅]--(chapter-06)
  3403. ├──[✅]--(controlled-components)
  3404. ├──[✅]--(css-transition-group)
  3405. ├──[✅]--(event-switch)
  3406. ├──[✅]--(json-schema)
  3407. ├──[✅]--(react-motion)
  3408. ├──[✅]--(refs-dom)
  3409. ├──[✅]--(refs-instance)
  3410. ├──[✅]--(svg)
  3411. └──[✅]--(uncontrolled-components)
  3412. ├──[✅]--(chapter-07)
  3413. ├──[✅]--(css-modules)
  3414. ├──[✅]--(inline-styles)
  3415. ├──[✅]--(radium)
  3416. └──[✅]--(styled-components)
  3417. ├──[✅]--(chapter-08)
  3418. ├──[✅]--(data-fetcng)
  3419. ├──[✅]--(next)
  3420. └──[✅]--(server-side-rendering)
  3421. ├──[✅]--(chapter-09)
  3422. ├──[✅]--(constants-props)
  3423. ├──[✅]--(creating-functions)
  3424. ├──[✅]--(good-design)
  3425. └──[✅]--(keys)
  3426. ├──[✅]--(chapter-10)
  3427. ├──[✅]--(enzyme)
  3428. ├──[✅]--(✅gher-order-components)
  3429. ├──[✅]--(jest)
  3430. ├──[✅]--(mocha)
  3431. ├──[✅]--(page-object)
  3432. └──[✅]--(real-world)
  3433. └──[✅]--(chapter-11)
  3434. ├──[✅]--(index-as-key)
  3435. ├──[✅]--(initializing-state)
  3436. └──[✅]--(mutating-state)
  3437. ├──[✅]--(sql-lab-master)
  3438. └──[✅]--(img)
  3439. └──[✅]--(web-guided-project-HTTP-main)
  3440. ├──[✅]--(client)
  3441. └──[✅]--(src)
  3442. └──[✅]--(server)
  3443. ├──[✅]--(screenshot-preview)
  3444. ├──[✅]--(examples)
  3445. └──[✅]--(src)
  3446. ├──[✅]--(web-dev-utils)
  3447. ├──[✅]--(GIT-HTML-PREVIEW-TOOL)
  3448. └──[✅]--(GIT-HTML-PREVIEW-TOOL-master)
  3449. ├──[✅]--(Markdown-Templates)
  3450. └──[✅]--(Markdown-Templates-master)
  3451. └──[✅]--(images)
  3452. ├──[✅]--(TexTools)
  3453. └──[✅]--(TexTools-master)
  3454. ├──[✅]--(backup-stable-build)
  3455. ├──[✅]--(css)
  3456. ├──[✅]--(js)
  3457. └──[✅]--(sandbox)
  3458. ├──[✅]--(bootstrap-4.3.1-dist)
  3459. ├──[✅]--(css)
  3460. └──[✅]--(js)
  3461. └──[✅]--(personal-utilities)
  3462. ├──[✅]--(Auto-table-Of-Contents)
  3463. ├──[✅]--(copy-2-clip)
  3464. ├──[✅]--(css)
  3465. ├──[✅]--(extract-css)
  3466. ├──[✅]--(css)
  3467. ├──[✅]--(img)
  3468. └──[✅]--(js)
  3469. ├──[✅]--(js)
  3470. └──[✅]--(prism)
  3471. └──[✅]--(world-clock)
  3472. ├──[✅]--(8-site-documentation)
  3473. ├──[✅]--(LambdaSchool)
  3474. ├──[✅]--(31d1)
  3475. ├──[✅]--(Administration)
  3476. ├──[✅]--(Tech Skills Day badges)
  3477. └──[✅]--(Tech Skills Day badges)
  3478. ├──[✅]--(certs)
  3479. ├──[✅]--(marketing)
  3480. ├──[✅]--(studying)
  3481. └──[✅]--(zoom)
  3482. ├──[✅]--(Front-End-master)
  3483. └──[✅]--(Front-End-master)
  3484. └──[✅]--(client)
  3485. ├──[✅]--(public)
  3486. └──[✅]--(src)
  3487. ├──[✅]--(JavaScript30)
  3488. ├──[✅]--(01)
  3489. └──[✅]--(sounds)
  3490. ├──[✅]--(02)
  3491. ├──[✅]--(03)
  3492. ├──[✅]--(04)
  3493. ├──[✅]--(05)
  3494. ├──[✅]--(06)
  3495. ├──[✅]--(07)
  3496. ├──[✅]--(08)
  3497. ├──[✅]--(09)
  3498. ├──[✅]--(10)
  3499. ├──[✅]--(11)
  3500. ├──[✅]--(12)
  3501. ├──[✅]--(13)
  3502. ├──[✅]--(14)
  3503. ├──[✅]--(15)
  3504. ├──[✅]--(16)
  3505. ├──[✅]--(17)
  3506. ├──[✅]--(18)
  3507. ├──[✅]--(19)
  3508. ├──[✅]--(20)
  3509. ├──[✅]--(21)
  3510. ├──[✅]--(22)
  3511. ├──[✅]--(23)
  3512. ├──[✅]--(24)
  3513. ├──[✅]--(25)
  3514. ├──[✅]--(26)
  3515. ├──[✅]--(27)
  3516. ├──[✅]--(28)
  3517. ├──[✅]--(29)
  3518. ├──[✅]--(30)
  3519. └──[✅]--(JavaScript30-master)
  3520. └──[✅]--(JavaScript30-master)
  3521. ├──[✅]--(01 - JavaScript Drum Kit)
  3522. ├──[✅]--(02 - JS and CSS Clock)
  3523. ├──[✅]--(03 - CSS Variables)
  3524. ├──[✅]--(04 - Array Cardio Day 1)
  3525. ├──[✅]--(05 - Flex Panel Gallery)
  3526. ├──[✅]--(06 - Type Ahead)
  3527. ├──[✅]--(07 - Array Cardio Day 2)
  3528. ├──[✅]--(08 - Fun with HTML5 Canvas)
  3529. ├──[✅]--(09 - Dev Tools Domination)
  3530. ├──[✅]--(10 - Hold Sft and Check Checkboxes)
  3531. ├──[✅]--(11 - Custom Video Player)
  3532. ├──[✅]--(12 - Key Sequence Detection)
  3533. ├──[✅]--(13 - Slide in on Scroll)
  3534. ├──[✅]--(14 - JavaScript References VS Copying)
  3535. ├──[✅]--(15 - LocalStorage)
  3536. ├──[✅]--(16 - Mouse Move Shadow)
  3537. ├──[✅]--(17 - Sort Without Articles)
  3538. ├──[✅]--(18 - Adding Up Times with Reduce)
  3539. ├──[✅]--(19 - Webcam Fun)
  3540. ├──[✅]--(20 - Speech Detection)
  3541. ├──[✅]--(21 - Geolocation)
  3542. ├──[✅]--(22 - Follow Along Link ghlighter)
  3543. ├──[✅]--(23 - Speech Synthesis)
  3544. ├──[✅]--(24 - Sticky Nav)
  3545. ├──[✅]--(25 - Event Capture, Propagation, Bubbling and Once)
  3546. ├──[✅]--(26 - Stripe Follow Along Nav)
  3547. ├──[✅]--(27 - Click and Drag)
  3548. ├──[✅]--(28 - Video Speed Controller)
  3549. ├──[✅]--(29 - Countdown Timer)
  3550. └──[✅]--(30 - Whack A Mole)
  3551. ├──[✅]--(aa-score)
  3552. ├──[✅]--(public)
  3553. └──[✅]--(src)
  3554. ├──[✅]--(bw1-tl)
  3555. ├──[✅]--(BackEnd-master)
  3556. └──[✅]--(BackEnd-master)
  3557. ├──[✅]--(admin)
  3558. ├──[✅]--(api)
  3559. ├──[✅]--(auth)
  3560. ├──[✅]--(database)
  3561. ├──[✅]--(middleware)
  3562. ├──[✅]--(todos)
  3563. └──[✅]--(volunteer)
  3564. ├──[✅]--(admin)
  3565. ├──[✅]--(api)
  3566. ├──[✅]--(auth)
  3567. ├──[✅]--(database)
  3568. ├──[✅]--(migrations)
  3569. └──[✅]--(seeds)
  3570. ├──[✅]--(middleware)
  3571. ├──[✅]--(todos)
  3572. └──[✅]--(volunteer)
  3573. ├──[✅]--(css)
  3574. ├──[✅]--(evoingram.github.io)
  3575. ├──[✅]--(labs)
  3576. ├──[✅]--(backend)
  3577. ├──[✅]--(frontend)
  3578. ├──[✅]--(last journal entry)
  3579. └──[✅]--(video-to-next-group)
  3580. ├──[✅]--(m1)
  3581. ├──[✅]--(11b1)
  3582. ├──[✅]--(Git-Flow-Practice)
  3583. ├──[✅]--(Git-for-Web-Development-Project-master)
  3584. └──[✅]--(Git-for-Web-Development-Project-master)
  3585. ├──[✅]--(Web26Git)
  3586. ├──[✅]--(design-files)
  3587. ├──[✅]--(great-idea)
  3588. ├──[✅]--(css)
  3589. └──[✅]--(img)
  3590. └──[✅]--(great-idea-website)
  3591. ├──[✅]--(css)
  3592. └──[✅]--(img)
  3593. ├──[✅]--(11c1)
  3594. ├──[✅]--(User-Interface)
  3595. ├──[✅]--(User-Interface-master)
  3596. └──[✅]--(User-Interface-master)
  3597. ├──[✅]--(design-files)
  3598. └──[✅]--(great-idea-website)
  3599. ├──[✅]--(css)
  3600. └──[✅]--(img)
  3601. ├──[✅]--(11d1)
  3602. ├──[✅]--(UI-III-Flexbox)
  3603. ├──[✅]--(UI-III-Flexbox-master)
  3604. └──[✅]--(UI-III-Flexbox-master)
  3605. ├──[✅]--(design-files)
  3606. └──[✅]--(great-idea)
  3607. ├──[✅]--(css)
  3608. └──[✅]--(img)
  3609. ├──[✅]--(12a1)
  3610. ├──[✅]--(css)
  3611. ├──[✅]--(design-files)
  3612. ├──[✅]--(img)
  3613. ├──[✅]--(responsive-web-design-I)
  3614. └──[✅]--(responsive-web-design-I-master)
  3615. └──[✅]--(responsive-web-design-I-master)
  3616. ├──[✅]--(12b1)
  3617. ├──[✅]--(dimension)
  3618. ├──[✅]--(assets)
  3619. └──[✅]--(html5up-dimension)
  3620. ├──[✅]--(portfolio-website-master)
  3621. └──[✅]--(portfolio-website-master)
  3622. └──[✅]--(solidstate)
  3623. └──[✅]--(assets)
  3624. ├──[✅]--(12c1)
  3625. ├──[✅]--(Preprocessing-I-master)
  3626. └──[✅]--(Preprocessing-I-master)
  3627. ├──[✅]--(css)
  3628. └──[✅]--(less)
  3629. ├──[✅]--(12d1)
  3630. ├──[✅]--(Preprocessing-II-master)
  3631. └──[✅]--(Preprocessing-II-master)
  3632. ├──[✅]--(css)
  3633. ├──[✅]--(design-files)
  3634. ├──[✅]--(img)
  3635. └──[✅]--(less)
  3636. ├──[✅]--(13a1)
  3637. └──[✅]--(assignments)
  3638. ├──[✅]--(13b1)
  3639. └──[✅]--(assignments)
  3640. ├──[✅]--(13c1)
  3641. └──[✅]--(assignments)
  3642. ├──[✅]--(13d1)
  3643. ├──[✅]--(new)
  3644. └──[✅]--(test)
  3645. └──[✅]--(old)
  3646. └──[✅]--(assignments)
  3647. ├──[✅]--(13e1)
  3648. ├──[✅]--(Sprint-Challenge--JavaScript-master)
  3649. └──[✅]--(Sprint-Challenge--JavaScript-master)
  3650. └──[✅]--(challenges)
  3651. ├──[✅]--(14a1)
  3652. └──[✅]--(Marketing-page)
  3653. ├──[✅]--(SC-ACSS)
  3654. └──[✅]--(Sprint-Challenge--Advanced-CSS)
  3655. ├──[✅]--(m2)
  3656. ├──[✅]--(21a1)
  3657. ├──[✅]--(css)
  3658. ├──[✅]--(design-files)
  3659. ├──[✅]--(img)
  3660. ├──[✅]--(js)
  3661. └──[✅]--(stretch-assignment)
  3662. └──[✅]--(digital_timer)
  3663. ├──[✅]--(21b1)
  3664. ├──[✅]--(21c1)
  3665. ├──[✅]--(Article)
  3666. ├──[✅]--(Header)
  3667. ├──[✅]--(LESS)
  3668. ├──[✅]--(Menu)
  3669. ├──[✅]--(assets)
  3670. └──[✅]--(css)
  3671. ├──[✅]--(21d1)
  3672. ├──[✅]--(GitHubCard)
  3673. └──[✅]--(assets)
  3674. ├──[✅]--(21e1)
  3675. ├──[✅]--(CSS)
  3676. ├──[✅]--(LESS)
  3677. ├──[✅]--(assets)
  3678. └──[✅]--(carousel)
  3679. └──[✅]--(components)
  3680. ├──[✅]--(Cards)
  3681. ├──[✅]--(Carousel)
  3682. ├──[✅]--(Header)
  3683. ├──[✅]--(Tabs)
  3684. └──[✅]--(TopBar)
  3685. ├──[✅]--(22a1)
  3686. ├──[✅]--(public)
  3687. ├──[✅]--(react-american-football-scoreboard-master)
  3688. └──[✅]--(react-american-football-scoreboard-master)
  3689. └──[✅]--(src)
  3690. ├──[✅]--(22b1)
  3691. ├──[✅]--(design-files)
  3692. ├──[✅]--(lambda-calculator-master)
  3693. └──[✅]--(lambda-calculator-master)
  3694. ├──[✅]--(public)
  3695. └──[✅]--(src)
  3696. ├──[✅]--(Img)
  3697. └──[✅]--(components)
  3698. ├──[✅]--(22c1)
  3699. ├──[✅]--(public)
  3700. ├──[✅]--(reactstrap-project)
  3701. ├──[✅]--(public)
  3702. └──[✅]--(src)
  3703. └──[✅]--(src)
  3704. ├──[✅]--(22e1)
  3705. └──[✅]--(starwars)
  3706. ├──[✅]--(public)
  3707. └──[✅]--(src)
  3708. ├──[✅]--(23a1)
  3709. ├──[✅]--(public)
  3710. └──[✅]--(src)
  3711. └──[✅]--(components)
  3712. ├──[✅]--(23a2)
  3713. └──[✅]--(images)
  3714. ├──[✅]--(23b1)
  3715. └──[✅]--(client)
  3716. ├──[✅]--(public)
  3717. └──[✅]--(src)
  3718. ├──[✅]--(23c1)
  3719. ├──[✅]--(public)
  3720. ├──[✅]--(src)
  3721. └──[✅]--(CustomHooks)
  3722. └──[✅]--(team-builder)
  3723. ├──[✅]--(23d1)
  3724. ├──[✅]--(public)
  3725. └──[✅]--(src)
  3726. └──[✅]--(CustomHooks)
  3727. ├──[✅]--(23d2)
  3728. ├──[✅]--(public)
  3729. └──[✅]--(src)
  3730. ├──[✅]--(23e1)
  3731. ├──[✅]--(public)
  3732. └──[✅]--(src)
  3733. └──[✅]--(components)
  3734. └──[✅]--(24a1)
  3735. ├──[✅]--(public)
  3736. └──[✅]--(img)
  3737. └──[✅]--(src)
  3738. └──[✅]--(components)
  3739. ├──[✅]--(m3)
  3740. ├──[✅]--(31a1)
  3741. ├──[✅]--(React-Todo-master)
  3742. └──[✅]--(React-Todo-master)
  3743. ├──[✅]--(public)
  3744. └──[✅]--(src)
  3745. └──[✅]--(components)
  3746. ├──[✅]--(31a2)
  3747. ├──[✅]--(React-Sorting-Hat-master)
  3748. └──[✅]--(React-Sorting-Hat-master)
  3749. ├──[✅]--(public)
  3750. └──[✅]--(src)
  3751. ├──[✅]--(31b1)
  3752. ├──[✅]--(React-Github-User-Card-master)
  3753. └──[✅]--(React-Github-User-Card-master)
  3754. ├──[✅]--(public)
  3755. └──[✅]--(src)
  3756. └──[✅]--(components)
  3757. ├──[✅]--(31c1)
  3758. ├──[✅]--(dark-mode-master)
  3759. └──[✅]--(dark-mode-master)
  3760. ├──[✅]--(public)
  3761. └──[✅]--(src)
  3762. ├──[✅]--(components)
  3763. └──[✅]--(hooks)
  3764. ├──[✅]--(31d1)
  3765. ├──[✅]--(Web-Application-Testing-master)
  3766. └──[✅]--(Web-Application-Testing-master)
  3767. ├──[✅]--(public)
  3768. └──[✅]--(src)
  3769. ├──[✅]--(components)
  3770. └──[✅]--(hooks)
  3771. ├──[✅]--(31e1)
  3772. ├──[✅]--(Sprint-Challenge-Advanced-React-master)
  3773. └──[✅]--(Sprint-Challenge-Advanced-React-master)
  3774. └──[✅]--(client)
  3775. ├──[✅]--(public)
  3776. └──[✅]--(src)
  3777. ├──[✅]--(32a1)
  3778. ├──[✅]--(public)
  3779. └──[✅]--(src)
  3780. ├──[✅]--(components)
  3781. ├──[✅]--(contexts)
  3782. └──[✅]--(sass)
  3783. ├──[✅]--(32b1)
  3784. ├──[✅]--(public)
  3785. └──[✅]--(src)
  3786. ├──[✅]--(components)
  3787. └──[✅]--(reducers)
  3788. ├──[✅]--(32c1)
  3789. ├──[✅]--(public)
  3790. └──[✅]--(src)
  3791. ├──[✅]--(actions)
  3792. ├──[✅]--(components)
  3793. └──[✅]--(reducers)
  3794. ├──[✅]--(32d1)
  3795. ├──[✅]--(public)
  3796. └──[✅]--(src)
  3797. ├──[✅]--(actions)
  3798. ├──[✅]--(components)
  3799. ├──[✅]--(fonts)
  3800. ├──[✅]--(img)
  3801. └──[✅]--(reducers)
  3802. ├──[✅]--(32e1)
  3803. ├──[✅]--(Sprint-Challenge-State-Management-Smurfs-master)
  3804. └──[✅]--(Sprint-Challenge-State-Management-Smurfs-master)
  3805. └──[✅]--(smurfs)
  3806. ├──[✅]--(public)
  3807. └──[✅]--(src)
  3808. ├──[✅]--(33a1)
  3809. ├──[✅]--(public)
  3810. ├──[✅]--(src)
  3811. ├──[✅]--(controls)
  3812. ├──[✅]--(dashboard)
  3813. └──[✅]--(display)
  3814. └──[✅]--(webtesting-iii-challenge-master)
  3815. └──[✅]--(webtesting-iii-challenge-master)
  3816. ├──[✅]--(33b1)
  3817. ├──[✅]--(Auth-Friends-master)
  3818. └──[✅]--(Auth-Friends-master)
  3819. └──[✅]--(friends)
  3820. ├──[✅]--(public)
  3821. └──[✅]--(src)
  3822. ├──[✅]--(33d1)
  3823. ├──[✅]--(HTTP-Movies-Assignment-master)
  3824. └──[✅]--(HTTP-Movies-Assignment-master)
  3825. └──[✅]--(client)
  3826. ├──[✅]--(public)
  3827. └──[✅]--(src)
  3828. └──[✅]--(33e1)
  3829. ├──[✅]--(client)
  3830. ├──[✅]--(public)
  3831. └──[✅]--(src)
  3832. └──[✅]--(react-bubbles-master)
  3833. └──[✅]--(react-bubbles-master)
  3834. ├──[✅]--(m4)
  3835. ├──[✅]--(41a1)
  3836. ├──[✅]--(data)
  3837. ├──[✅]--(migrations)
  3838. └──[✅]--(seeds)
  3839. └──[✅]--(webapi-i-guided-master)
  3840. └──[✅]--(webapi-i-guided-master)
  3841. ├──[✅]--(41a2)
  3842. ├──[✅]--(data)
  3843. ├──[✅]--(migrations)
  3844. └──[✅]--(seeds)
  3845. └──[✅]--(node-api1-project-master)
  3846. └──[✅]--(node-api1-project-master)
  3847. ├──[✅]--(41b1)
  3848. ├──[✅]--(data)
  3849. ├──[✅]--(migrations)
  3850. └──[✅]--(seeds)
  3851. ├──[✅]--(hubs)
  3852. └──[✅]--(noderouting)
  3853. └──[✅]--(noderouting)
  3854. ├──[✅]--(41b2)
  3855. ├──[✅]--(data)
  3856. ├──[✅]--(migrations)
  3857. └──[✅]--(seeds)
  3858. └──[✅]--(webapi-ii-challenge-master)
  3859. └──[✅]--(webapi-ii-challenge-master)
  3860. ├──[✅]--(41c1)
  3861. ├──[✅]--(data)
  3862. ├──[✅]--(migrations)
  3863. └──[✅]--(seeds)
  3864. ├──[✅]--(hubs)
  3865. ├──[✅]--(messages)
  3866. ├──[✅]--(middleware)
  3867. └──[✅]--(middleware)
  3868. └──[✅]--(webapi-iii-guided-master)
  3869. └──[✅]--(webapi-iii-guided-master)
  3870. ├──[✅]--(41c2)
  3871. ├──[✅]--(data)
  3872. ├──[✅]--(migrations)
  3873. └──[✅]--(seeds)
  3874. ├──[✅]--(posts)
  3875. ├──[✅]--(users)
  3876. └──[✅]--(webapi-iii-challenge-master)
  3877. └──[✅]--(webapi-iii-challenge-master)
  3878. ├──[✅]--(41d1)
  3879. ├──[✅]--(api)
  3880. ├──[✅]--(data)
  3881. └──[✅]--(migrations)
  3882. └──[✅]--(webapi-iv-guided-master)
  3883. └──[✅]--(webapi-iv-guided-master)
  3884. ├──[✅]--(41e1)
  3885. ├──[✅]--(data)
  3886. ├──[✅]--(helpers)
  3887. ├──[✅]--(migrations)
  3888. └──[✅]--(seeds)
  3889. ├──[✅]--(node-api-challenge-master)
  3890. └──[✅]--(node-api-challenge-master)
  3891. └──[✅]--(routers)
  3892. ├──[✅]--(41e1app)
  3893. ├──[✅]--(public)
  3894. └──[✅]--(src)
  3895. └──[✅]--(components)
  3896. ├──[✅]--(42a1)
  3897. ├──[✅]--(data)
  3898. ├──[✅]--(migrations)
  3899. └──[✅]--(seeds)
  3900. ├──[✅]--(dbintro)
  3901. └──[✅]--(dbintro)
  3902. ├──[✅]--(migrations)
  3903. └──[✅]--(migrations)
  3904. ├──[✅]--(node-db1-guided-master)
  3905. └──[✅]--(node-db1-guided-master)
  3906. └──[✅]--(posts)
  3907. ├──[✅]--(42a2)
  3908. ├──[✅]--(data)
  3909. ├──[✅]--(migrations)
  3910. └──[✅]--(seeds)
  3911. ├──[✅]--(node-db1-project-master)
  3912. └──[✅]--(node-db1-project-master)
  3913. └──[✅]--(routers)
  3914. ├──[✅]--(42b1)
  3915. ├──[✅]--(api)
  3916. ├──[✅]--(data)
  3917. ├──[✅]--(fruits)
  3918. └──[✅]--(node-db2-guided-master)
  3919. └──[✅]--(node-db2-guided-master)
  3920. ├──[✅]--(42b2)
  3921. ├──[✅]--(api)
  3922. ├──[✅]--(data)
  3923. ├──[✅]--(migrations)
  3924. └──[✅]--(seeds)
  3925. ├──[✅]--(node-db2-project-master)
  3926. └──[✅]--(node-db2-project-master)
  3927. └──[✅]--(routers)
  3928. ├──[✅]--(42c1)
  3929. ├──[✅]--(data)
  3930. ├──[✅]--(migrations)
  3931. └──[✅]--(seeds)
  3932. ├──[✅]--(node-db3-guided-master)
  3933. └──[✅]--(node-db3-guided-master)
  3934. └──[✅]--(users)
  3935. ├──[✅]--(42c2)
  3936. ├──[✅]--(data)
  3937. ├──[✅]--(migrations)
  3938. └──[✅]--(seeds)
  3939. ├──[✅]--(node-db3-project-master)
  3940. └──[✅]--(node-db3-project-master)
  3941. └──[✅]--(schemes)
  3942. ├──[✅]--(42d1)
  3943. ├──[✅]--(data)
  3944. └──[✅]--(seeds)
  3945. └──[✅]--(node-db4-guided-master)
  3946. └──[✅]--(node-db4-guided-master)
  3947. ├──[✅]--(42d2)
  3948. ├──[✅]--(data)
  3949. ├──[✅]--(migrations)
  3950. └──[✅]--(seeds)
  3951. ├──[✅]--(node-db4-project-master)
  3952. └──[✅]--(node-db4-project-master)
  3953. └──[✅]--(recipes)
  3954. ├──[✅]--(42e1)
  3955. ├──[✅]--(data)
  3956. ├──[✅]--(migrations)
  3957. └──[✅]--(seeds)
  3958. └──[✅]--(projects)
  3959. ├──[✅]--(43a1)
  3960. ├──[✅]--(__MACOSX)
  3961. └──[✅]--(autntro)
  3962. ├──[✅]--(api)
  3963. ├──[✅]--(auth)
  3964. ├──[✅]--(autntro)
  3965. └──[✅]--(autntro)
  3966. ├──[✅]--(database)
  3967. └──[✅]--(migrations)
  3968. ├──[✅]--(node-auth1-guided-master)
  3969. └──[✅]--(node-auth1-guided-master)
  3970. └──[✅]--(users)
  3971. ├──[✅]--(43a2)
  3972. ├──[✅]--(api)
  3973. ├──[✅]--(auth)
  3974. ├──[✅]--(database)
  3975. └──[✅]--(migrations)
  3976. ├──[✅]--(node-auth1-project-master)
  3977. └──[✅]--(node-auth1-project-master)
  3978. └──[✅]--(users)
  3979. ├──[✅]--(43b1)
  3980. ├──[✅]--(api)
  3981. ├──[✅]--(auth)
  3982. ├──[✅]--(database)
  3983. └──[✅]--(migrations)
  3984. ├──[✅]--(node-auth2-guided-master)
  3985. └──[✅]--(node-auth2-guided-master)
  3986. └──[✅]--(users)
  3987. ├──[✅]--(43b2)
  3988. ├──[✅]--(api)
  3989. ├──[✅]--(auth)
  3990. ├──[✅]--(database)
  3991. └──[✅]--(migrations)
  3992. ├──[✅]--(node-auth1-project-master)
  3993. └──[✅]--(node-auth1-project-master)
  3994. ├──[✅]--(sessions)
  3995. └──[✅]--(users)
  3996. ├──[✅]--(43c1)
  3997. ├──[✅]--(api)
  3998. ├──[✅]--(auth)
  3999. ├──[✅]--(database)
  4000. └──[✅]--(migrations)
  4001. ├──[✅]--(jwts)
  4002. └──[✅]--(jwts)
  4003. ├──[✅]--(node-auth3-guided-master)
  4004. └──[✅]--(node-auth3-guided-master)
  4005. └──[✅]--(users)
  4006. ├──[✅]--(43c2)
  4007. ├──[✅]--(__MACOSX)
  4008. └──[✅]--(sessions)
  4009. ├──[✅]--(api)
  4010. ├──[✅]--(auth)
  4011. ├──[✅]--(config)
  4012. ├──[✅]--(database)
  4013. └──[✅]--(migrations)
  4014. ├──[✅]--(node-auth3-project-master)
  4015. └──[✅]--(node-auth3-project-master)
  4016. ├──[✅]--(sessions)
  4017. └──[✅]--(sessions)
  4018. └──[✅]--(users)
  4019. ├──[✅]--(43d1)
  4020. ├──[✅]--(api)
  4021. ├──[✅]--(data)
  4022. ├──[✅]--(migrations)
  4023. └──[✅]--(seeds)
  4024. ├──[✅]--(hobbits)
  4025. └──[✅]--(node-server-testing-guided-master)
  4026. └──[✅]--(node-server-testing-guided-master)
  4027. ├──[✅]--(43d1a)
  4028. └──[✅]--(ls)
  4029. ├──[✅]--(43d2)
  4030. ├──[✅]--(api)
  4031. ├──[✅]--(cohorts)
  4032. ├──[✅]--(database)
  4033. ├──[✅]--(migrations)
  4034. └──[✅]--(seeds)
  4035. ├──[✅]--(node-server-testing-challenge-master)
  4036. └──[✅]--(node-server-testing-challenge-master)
  4037. └──[✅]--(students)
  4038. └──[✅]--(43e1)
  4039. ├──[✅]--(43e1)
  4040. ├──[✅]--(public)
  4041. └──[✅]--(src)
  4042. ├──[✅]--(Sprint-Challenge-Authentication-master)
  4043. └──[✅]--(Sprint-Challenge-Authentication-master)
  4044. ├──[✅]--(api)
  4045. ├──[✅]--(auth)
  4046. ├──[✅]--(database)
  4047. └──[✅]--(migrations)
  4048. └──[✅]--(jokes)
  4049. ├──[✅]--(m5)
  4050. ├──[✅]--(51a1)
  4051. ├──[✅]--(java-SnackBar-master)
  4052. └──[✅]--(java-SnackBar-master)
  4053. └──[✅]--(src)
  4054. └──[✅]--(employeeApp)
  4055. ├──[✅]--(51b1)
  4056. ├──[✅]--(java-WordCount-master)
  4057. └──[✅]--(java-WordCount-master)
  4058. └──[✅]--(src)
  4059. └──[✅]--(collections)
  4060. ├──[✅]--(51c1)
  4061. ├──[✅]--(java-AnimalKingdom-master)
  4062. └──[✅]--(java-AnimalKingdom-master)
  4063. └──[✅]--(transportation)
  4064. └──[✅]--(src)
  4065. ├──[✅]--(51d1)
  4066. ├──[✅]--(bin)
  4067. └──[✅]--(src)
  4068. └──[✅]--(src)
  4069. ├──[✅]--(main)
  4070. └──[✅]--(test)
  4071. ├──[✅]--(51d2)
  4072. ├──[✅]--(src)
  4073. ├──[✅]--(main)
  4074. └──[✅]--(test)
  4075. └──[✅]--(target)
  4076. └──[✅]--(classes)
  4077. ├──[✅]--(51e1)
  4078. ├──[✅]--(Sprint-Challenge--Java-Fundamentals-piggybank-master)
  4079. └──[✅]--(Sprint-Challenge--Java-Fundamentals-piggybank-master)
  4080. └──[✅]--(src)
  4081. ├──[✅]--(main)
  4082. └──[✅]--(test)
  4083. ├──[✅]--(52b1)
  4084. ├──[✅]--(assets)
  4085. └──[✅]--(java-sql-master)
  4086. └──[✅]--(java-sql-master)
  4087. ├──[✅]--(52c1)
  4088. └──[✅]--(src)
  4089. ├──[✅]--(main)
  4090. └──[✅]--(test)
  4091. ├──[✅]--(52c2)
  4092. ├──[✅]--(java-orders-master)
  4093. └──[✅]--(java-orders-master)
  4094. └──[✅]--(src)
  4095. ├──[✅]--(main)
  4096. └──[✅]--(test)
  4097. ├──[✅]--(52d1)
  4098. └──[✅]--(oauth)
  4099. ├──[✅]--(oauth2)
  4100. └──[✅]--(oauth2 - initial)
  4101. ├──[✅]--(53a1)
  4102. ├──[✅]--(oauth2ExceptionLogging-final)
  4103. └──[✅]--(src)
  4104. ├──[✅]--(src)
  4105. ├──[✅]--(main)
  4106. └──[✅]--(test)
  4107. └──[✅]--(target)
  4108. └──[✅]--(classes)
  4109. ├──[✅]--(53b1)
  4110. ├──[✅]--(clientrestaurants)
  4111. └──[✅]--(src)
  4112. ├──[✅]--(restaurants-initial)
  4113. ├──[✅]--(src)
  4114. └──[✅]--(target)
  4115. └──[✅]--(restaurants-pagesswagger)
  4116. ├──[✅]--(src)
  4117. └──[✅]--(target)
  4118. ├──[✅]--(53c1)
  4119. ├──[✅]--(restaurants-initial)
  4120. └──[✅]--(src)
  4121. └──[✅]--(restaurants-testing)
  4122. └──[✅]--(src)
  4123. └──[✅]--(53d1)
  4124. ├──[✅]--(JS-FrontEnd-by-jheinz1999)
  4125. ├──[✅]--(public)
  4126. └──[✅]--(src)
  4127. └──[✅]--(StartHere)
  4128. └──[✅]--(src)
  4129. ├──[✅]--(m6)
  4130. ├──[✅]--(61a1)
  4131. └──[✅]--(src)
  4132. ├──[✅]--(61b1)
  4133. ├──[✅]--(examples)
  4134. └──[✅]--(src)
  4135. ├──[✅]--(61c1)
  4136. └──[✅]--(src)
  4137. ├──[✅]--(cityreader)
  4138. ├──[✅]--(comp)
  4139. └──[✅]--(oop)
  4140. ├──[✅]--(62a1)
  4141. ├──[✅]--(avl_tree)
  4142. ├──[✅]--(benchmarks)
  4143. ├──[✅]--(binary_search_tree)
  4144. ├──[✅]--(doubly_linked_list)
  4145. ├──[✅]--(heap)
  4146. ├──[✅]--(lru_cache)
  4147. ├──[✅]--(queue)
  4148. ├──[✅]--(queue_and_stack)
  4149. ├──[✅]--(singly_linked_list)
  4150. └──[✅]--(stack)
  4151. ├──[✅]--(62b1)
  4152. ├──[✅]--(names)
  4153. ├──[✅]--(reverse)
  4154. └──[✅]--(ring_buffer)
  4155. ├──[✅]--(63a1)
  4156. └──[✅]--(src)
  4157. ├──[✅]--(iterative_sorting)
  4158. └──[✅]--(searcng)
  4159. ├──[✅]--(63b1)
  4160. └──[✅]--(src)
  4161. └──[✅]--(recursive_sorting)
  4162. ├──[✅]--(63c1)
  4163. ├──[✅]--(eating_cookies)
  4164. ├──[✅]--(knapsack)
  4165. └──[✅]--(data)
  4166. ├──[✅]--(making_change)
  4167. ├──[✅]--(moving_zeroes)
  4168. ├──[✅]--(product_of_all_other_numbers)
  4169. ├──[✅]--(recipe_batches)
  4170. ├──[✅]--(rock_paper_scissors)
  4171. ├──[✅]--(single_number)
  4172. ├──[✅]--(sliding_window_max)
  4173. └──[✅]--(data)
  4174. └──[✅]--(stock_prices)
  4175. └──[✅]--(63d1)
  4176. ├──[✅]--(Short-Answer)
  4177. ├──[✅]--(recursive_count_th)
  4178. └──[✅]--(robot_sort)
  4179. ├──[✅]--(m7)
  4180. ├──[✅]--(71a1)
  4181. ├──[✅]--(applications)
  4182. ├──[✅]--(crack_caesar)
  4183. ├──[✅]--(expensive_seq)
  4184. ├──[✅]--(✅sto)
  4185. ├──[✅]--(lookup_table)
  4186. ├──[✅]--(markov)
  4187. ├──[✅]--(no_dups)
  4188. ├──[✅]--(sumdiff)
  4189. └──[✅]--(word_count)
  4190. └──[✅]--(hashtable)
  4191. ├──[✅]--(71e1)
  4192. └──[✅]--(hashtables)
  4193. ├──[✅]--(ex1)
  4194. ├──[✅]--(ex2)
  4195. ├──[✅]--(ex3)
  4196. ├──[✅]--(ex4)
  4197. └──[✅]--(ex5)
  4198. ├──[✅]--(72a1)
  4199. ├──[✅]--(objectives)
  4200. ├──[✅]--(breadth-first-search)
  4201. ├──[✅]--(connected-components)
  4202. ├──[✅]--(depth-first-search)
  4203. ├──[✅]--(graph-intro)
  4204. ├──[✅]--(graph-representations)
  4205. └──[✅]--(randomness)
  4206. └──[✅]--(projects)
  4207. ├──[✅]--(adventure)
  4208. ├──[✅]--(ancestor)
  4209. ├──[✅]--(graph)
  4210. └──[✅]--(social)
  4211. ├──[✅]--(73a1)
  4212. ├──[✅]--(asm)
  4213. └──[✅]--(ls8)
  4214. └──[✅]--(examples)
  4215. └──[✅]--(74a1)
  4216. ├──[✅]--(src)
  4217. ├──[✅]--(iterative_sorting)
  4218. └──[✅]--(searcng)
  4219. ├──[✅]--(summary)
  4220. ├──[✅]--(Node Express Knex)
  4221. └──[✅]--(Create Back End Guide)
  4222. ├──[✅]--(certifications)
  4223. ├──[✅]--(IBM zOS)
  4224. └──[✅]--(Oracle Autonomous DB)
  4225. ├──[✅]--(1 Overview)
  4226. ├──[✅]--(2 Provisioning and Connectivity)
  4227. ├──[✅]--(3 Migration and Data Loding into Autonomous DB)
  4228. ├──[✅]--(4 Migrating and Data Loading)
  4229. ├──[✅]--(5 Monitoring Autonomous DB)
  4230. └──[✅]--(6 Tools Reporting Analytics)
  4231. ├──[✅]--(cobol)
  4232. ├──[✅]--(COBOL Programming Course_files)
  4233. ├──[✅]--(COBOL Programming Exercises_files)
  4234. └──[✅]--(COBOL example programs_files)
  4235. ├──[✅]--(complete)
  4236. ├──[✅]--(Decks)
  4237. └──[✅]--(notes-books)
  4238. ├──[✅]--(general)
  4239. ├──[✅]--(interviewing)
  4240. ├──[✅]--(testing)
  4241. └──[✅]--(typescript)
  4242. └──[✅]--(tlbw)
  4243. └──[✅]--(client)
  4244. ├──[✅]--(public)
  4245. └──[✅]--(src)
  4246. ├──[✅]--(components)
  4247. └──[✅]--(imgs)
  4248. ├──[✅]--(WEEKS)
  4249. ├──[✅]--(wk1)
  4250. ├──[✅]--(0-notes)
  4251. ├──[✅]--(d1)
  4252. ├──[✅]--(d2)
  4253. ├──[✅]--(Farm to Table_files)
  4254. ├──[✅]--(Quiz_Git_files)
  4255. ├──[✅]--(closures_files)
  4256. ├──[✅]--(func-scope_files)
  4257. └──[✅]--(git-quiz_files)
  4258. ├──[✅]--(d3)
  4259. ├──[✅]--(d4)
  4260. ├──[✅]--(flexbox-explained_files)
  4261. └──[✅]--(notes_files)
  4262. ├──[✅]--(d5)
  4263. └──[✅]--(other)
  4264. ├──[✅]--(1-projects)
  4265. ├──[✅]--(d1)
  4266. ├──[✅]--(User_Interface_I_HTML_Markup)
  4267. └──[✅]--(User_Interface_I__Project_2_-_Sweet_Eats_Bakery)
  4268. ├──[✅]--(d2)
  4269. ├──[✅]--(d3)
  4270. └──[✅]--(web-module-project-intro-css)
  4271. ├──[✅]--(d4)
  4272. ├──[✅]--(portfolio)
  4273. └──[✅]--(refactor-d3-proj-w-flex)
  4274. ├──[✅]--(d5)
  4275. └──[✅]--(other)
  4276. ├──[✅]--(2-resources)
  4277. ├──[✅]--(agenda_files)
  4278. ├──[✅]--(d1)
  4279. ├──[✅]--(d2)
  4280. ├──[✅]--(d3)
  4281. ├──[✅]--(d4)
  4282. ├──[✅]--(d5)
  4283. └──[✅]--(other)
  4284. ├──[✅]--(3-misc)
  4285. ├──[✅]--(d1)
  4286. ├──[✅]--(d2)
  4287. ├──[✅]--(d3)
  4288. ├──[✅]--(d4)
  4289. ├──[✅]--(d5)
  4290. └──[✅]--(other)
  4291. └──[✅]--(4-test-prep)
  4292. └──[✅]--(Study-Guides)
  4293. ├──[✅]--(wk10)
  4294. ├──[✅]--(0-notes)
  4295. ├──[✅]--(d1)
  4296. ├──[✅]--(d2)
  4297. ├──[✅]--(d3)
  4298. ├──[✅]--(d4)
  4299. ├──[✅]--(d5)
  4300. └──[✅]--(other)
  4301. ├──[✅]--(1-projects)
  4302. ├──[✅]--(d1)
  4303. ├──[✅]--(d2)
  4304. ├──[✅]--(d3)
  4305. ├──[✅]--(d4)
  4306. ├──[✅]--(d5)
  4307. └──[✅]--(other)
  4308. ├──[✅]--(2-resources)
  4309. ├──[✅]--(d1)
  4310. ├──[✅]--(d2)
  4311. ├──[✅]--(d3)
  4312. ├──[✅]--(d4)
  4313. ├──[✅]--(d5)
  4314. └──[✅]--(other)
  4315. ├──[✅]--(3-misc)
  4316. ├──[✅]--(d1)
  4317. ├──[✅]--(d2)
  4318. ├──[✅]--(d3)
  4319. ├──[✅]--(d4)
  4320. ├──[✅]--(d5)
  4321. └──[✅]--(other)
  4322. └──[✅]--(4-test-prep)
  4323. └──[✅]--(Study-Guides)
  4324. ├──[✅]--(wk11)
  4325. ├──[✅]--(0-notes)
  4326. ├──[✅]--(d1)
  4327. ├──[✅]--(d2)
  4328. ├──[✅]--(d3)
  4329. ├──[✅]--(d4)
  4330. ├──[✅]--(d5)
  4331. └──[✅]--(other)
  4332. ├──[✅]--(1-projects)
  4333. ├──[✅]--(d1)
  4334. ├──[✅]--(d2)
  4335. ├──[✅]--(d3)
  4336. ├──[✅]--(d4)
  4337. ├──[✅]--(d5)
  4338. └──[✅]--(other)
  4339. ├──[✅]--(2-resources)
  4340. ├──[✅]--(d1)
  4341. ├──[✅]--(d2)
  4342. ├──[✅]--(d3)
  4343. ├──[✅]--(d4)
  4344. ├──[✅]--(d5)
  4345. └──[✅]--(other)
  4346. ├──[✅]--(3-misc)
  4347. ├──[✅]--(d1)
  4348. ├──[✅]--(d2)
  4349. ├──[✅]--(d3)
  4350. ├──[✅]--(d4)
  4351. ├──[✅]--(d5)
  4352. └──[✅]--(other)
  4353. └──[✅]--(4-test-prep)
  4354. └──[✅]--(Study-Guides)
  4355. ├──[✅]--(wk12)
  4356. ├──[✅]--(0-notes)
  4357. ├──[✅]--(d1)
  4358. ├──[✅]--(d2)
  4359. ├──[✅]--(d3)
  4360. ├──[✅]--(d4)
  4361. ├──[✅]--(d5)
  4362. └──[✅]--(other)
  4363. ├──[✅]--(1-projects)
  4364. ├──[✅]--(d1)
  4365. ├──[✅]--(d2)
  4366. ├──[✅]--(d3)
  4367. ├──[✅]--(d4)
  4368. ├──[✅]--(d5)
  4369. └──[✅]--(other)
  4370. ├──[✅]--(2-resources)
  4371. ├──[✅]--(d1)
  4372. ├──[✅]--(d2)
  4373. ├──[✅]--(d3)
  4374. ├──[✅]--(d4)
  4375. ├──[✅]--(d5)
  4376. └──[✅]--(other)
  4377. ├──[✅]--(3-misc)
  4378. ├──[✅]--(d1)
  4379. ├──[✅]--(d2)
  4380. ├──[✅]--(d3)
  4381. ├──[✅]--(d4)
  4382. ├──[✅]--(d5)
  4383. └──[✅]--(other)
  4384. └──[✅]--(4-test-prep)
  4385. └──[✅]--(Study-Guides)
  4386. ├──[✅]--(wk14)
  4387. ├──[✅]--(0-notes)
  4388. ├──[✅]--(d1)
  4389. ├──[✅]--(d2)
  4390. ├──[✅]--(d3)
  4391. ├──[✅]--(d4)
  4392. ├──[✅]--(d5)
  4393. └──[✅]--(other)
  4394. ├──[✅]--(1-projects)
  4395. ├──[✅]--(d1)
  4396. ├──[✅]--(d2)
  4397. ├──[✅]--(d3)
  4398. ├──[✅]--(d4)
  4399. ├──[✅]--(d5)
  4400. └──[✅]--(other)
  4401. ├──[✅]--(2-resources)
  4402. ├──[✅]--(d1)
  4403. ├──[✅]--(d2)
  4404. ├──[✅]--(d3)
  4405. ├──[✅]--(d4)
  4406. ├──[✅]--(d5)
  4407. └──[✅]--(other)
  4408. ├──[✅]--(3-misc)
  4409. ├──[✅]--(d1)
  4410. ├──[✅]--(d2)
  4411. ├──[✅]--(d3)
  4412. ├──[✅]--(d4)
  4413. ├──[✅]--(d5)
  4414. └──[✅]--(other)
  4415. └──[✅]--(4-test-prep)
  4416. └──[✅]--(Study-Guides)
  4417. ├──[✅]--(wk15)
  4418. ├──[✅]--(0-notes)
  4419. ├──[✅]--(d1)
  4420. ├──[✅]--(d2)
  4421. ├──[✅]--(d3)
  4422. ├──[✅]--(d4)
  4423. ├──[✅]--(d5)
  4424. └──[✅]--(other)
  4425. ├──[✅]--(1-projects)
  4426. ├──[✅]--(d1)
  4427. ├──[✅]--(d2)
  4428. ├──[✅]--(d3)
  4429. ├──[✅]--(d4)
  4430. ├──[✅]--(d5)
  4431. └──[✅]--(other)
  4432. ├──[✅]--(2-resources)
  4433. ├──[✅]--(d1)
  4434. ├──[✅]--(d2)
  4435. ├──[✅]--(d3)
  4436. ├──[✅]--(d4)
  4437. ├──[✅]--(d5)
  4438. └──[✅]--(other)
  4439. ├──[✅]--(3-misc)
  4440. ├──[✅]--(d1)
  4441. ├──[✅]--(d2)
  4442. ├──[✅]--(d3)
  4443. ├──[✅]--(d4)
  4444. ├──[✅]--(d5)
  4445. └──[✅]--(other)
  4446. └──[✅]--(4-test-prep)
  4447. └──[✅]--(Study-Guides)
  4448. ├──[✅]--(wk16)
  4449. ├──[✅]--(0-notes)
  4450. ├──[✅]--(d1)
  4451. ├──[✅]--(d2)
  4452. ├──[✅]--(d3)
  4453. ├──[✅]--(d4)
  4454. ├──[✅]--(d5)
  4455. └──[✅]--(other)
  4456. ├──[✅]--(1-projects)
  4457. ├──[✅]--(d1)
  4458. ├──[✅]--(d2)
  4459. ├──[✅]--(d3)
  4460. ├──[✅]--(d4)
  4461. ├──[✅]--(d5)
  4462. └──[✅]--(other)
  4463. ├──[✅]--(2-resources)
  4464. ├──[✅]--(d1)
  4465. ├──[✅]--(d2)
  4466. ├──[✅]--(d3)
  4467. ├──[✅]--(d4)
  4468. ├──[✅]--(d5)
  4469. └──[✅]--(other)
  4470. ├──[✅]--(3-misc)
  4471. ├──[✅]--(d1)
  4472. ├──[✅]--(d2)
  4473. ├──[✅]--(d3)
  4474. ├──[✅]--(d4)
  4475. ├──[✅]--(d5)
  4476. └──[✅]--(other)
  4477. └──[✅]--(4-test-prep)
  4478. └──[✅]--(Study-Guides)
  4479. ├──[✅]--(wk17)
  4480. ├──[✅]--(0-notes)
  4481. ├──[✅]--(d1)
  4482. ├──[✅]--(d2)
  4483. ├──[✅]--(d3)
  4484. ├──[✅]--(d4)
  4485. ├──[✅]--(d5)
  4486. └──[✅]--(other)
  4487. ├──[✅]--(1-projects)
  4488. ├──[✅]--(d1)
  4489. ├──[✅]--(d2)
  4490. ├──[✅]--(d3)
  4491. ├──[✅]--(d4)
  4492. ├──[✅]--(d5)
  4493. └──[✅]--(other)
  4494. ├──[✅]--(2-resources)
  4495. ├──[✅]--(d1)
  4496. ├──[✅]--(d2)
  4497. ├──[✅]--(d3)
  4498. ├──[✅]--(d4)
  4499. ├──[✅]--(d5)
  4500. └──[✅]--(other)
  4501. ├──[✅]--(3-misc)
  4502. ├──[✅]--(d1)
  4503. ├──[✅]--(d2)
  4504. ├──[✅]--(d3)
  4505. ├──[✅]--(d4)
  4506. ├──[✅]--(d5)
  4507. └──[✅]--(other)
  4508. └──[✅]--(4-test-prep)
  4509. └──[✅]--(Study-Guides)
  4510. ├──[✅]--(wk18)
  4511. ├──[✅]--(0-notes)
  4512. ├──[✅]--(d1)
  4513. ├──[✅]--(d2)
  4514. ├──[✅]--(d3)
  4515. ├──[✅]--(d4)
  4516. ├──[✅]--(d5)
  4517. └──[✅]--(other)
  4518. ├──[✅]--(1-projects)
  4519. ├──[✅]--(d1)
  4520. ├──[✅]--(d2)
  4521. ├──[✅]--(d3)
  4522. ├──[✅]--(d4)
  4523. ├──[✅]--(d5)
  4524. └──[✅]--(other)
  4525. ├──[✅]--(2-resources)
  4526. ├──[✅]--(d1)
  4527. ├──[✅]--(d2)
  4528. ├──[✅]--(d3)
  4529. ├──[✅]--(d4)
  4530. ├──[✅]--(d5)
  4531. └──[✅]--(other)
  4532. ├──[✅]--(3-misc)
  4533. ├──[✅]--(d1)
  4534. ├──[✅]--(d2)
  4535. ├──[✅]--(d3)
  4536. ├──[✅]--(d4)
  4537. ├──[✅]--(d5)
  4538. └──[✅]--(other)
  4539. └──[✅]--(4-test-prep)
  4540. └──[✅]--(Study-Guides)
  4541. ├──[✅]--(wk19)
  4542. ├──[✅]--(0-notes)
  4543. ├──[✅]--(d1)
  4544. ├──[✅]--(d2)
  4545. ├──[✅]--(d3)
  4546. ├──[✅]--(d4)
  4547. ├──[✅]--(d5)
  4548. └──[✅]--(other)
  4549. ├──[✅]--(1-projects)
  4550. ├──[✅]--(d1)
  4551. ├──[✅]--(d2)
  4552. ├──[✅]--(d3)
  4553. ├──[✅]--(d4)
  4554. ├──[✅]--(d5)
  4555. └──[✅]--(other)
  4556. ├──[✅]--(2-resources)
  4557. ├──[✅]--(d1)
  4558. ├──[✅]--(d2)
  4559. ├──[✅]--(d3)
  4560. ├──[✅]--(d4)
  4561. ├──[✅]--(d5)
  4562. └──[✅]--(other)
  4563. ├──[✅]--(3-misc)
  4564. ├──[✅]--(d1)
  4565. ├──[✅]--(d2)
  4566. ├──[✅]--(d3)
  4567. ├──[✅]--(d4)
  4568. ├──[✅]--(d5)
  4569. └──[✅]--(other)
  4570. └──[✅]--(4-test-prep)
  4571. └──[✅]--(Study-Guides)
  4572. ├──[✅]--(wk2)
  4573. ├──[✅]--(0-notes)
  4574. ├──[✅]--(d1)
  4575. └──[✅]--(HTML-CSS-Responsive-Practice)
  4576. ├──[✅]--(d2)
  4577. ├──[✅]--(Slice vs Splice_files)
  4578. ├──[✅]--(best-practice)
  4579. └──[✅]--(git-flow)
  4580. ├──[✅]--(d3)
  4581. ├──[✅]--(d4)
  4582. ├──[✅]--(d5)
  4583. └──[✅]--(other)
  4584. ├──[✅]--(1-projects)
  4585. ├──[✅]--(d1)
  4586. └──[✅]--(Responsive-Design)
  4587. ├──[✅]--(d2)
  4588. ├──[✅]--(__tests__)
  4589. ├──[✅]--(backup)
  4590. └──[✅]--(notes)
  4591. ├──[✅]--(d3)
  4592. └──[✅]--(__tests__)
  4593. ├──[✅]--(d4)
  4594. ├──[✅]--(d5)
  4595. └──[✅]--(other)
  4596. ├──[✅]--(2-resources)
  4597. ├──[✅]--(d1)
  4598. ├──[✅]--(d2)
  4599. ├──[✅]--(d3)
  4600. ├──[✅]--(d4)
  4601. ├──[✅]--(d5)
  4602. └──[✅]--(other)
  4603. ├──[✅]--(3-misc)
  4604. ├──[✅]--(d1)
  4605. ├──[✅]--(d2)
  4606. ├──[✅]--(d3)
  4607. ├──[✅]--(d4)
  4608. ├──[✅]--(d5)
  4609. └──[✅]--(other)
  4610. └──[✅]--(4-test-prep)
  4611. └──[✅]--(Study-Guides)
  4612. ├──[✅]--(wk20)
  4613. ├──[✅]--(0-notes)
  4614. ├──[✅]--(d1)
  4615. ├──[✅]--(d2)
  4616. ├──[✅]--(d3)
  4617. ├──[✅]--(d4)
  4618. ├──[✅]--(d5)
  4619. └──[✅]--(other)
  4620. ├──[✅]--(1-projects)
  4621. ├──[✅]--(d1)
  4622. ├──[✅]--(d2)
  4623. ├──[✅]--(d3)
  4624. ├──[✅]--(d4)
  4625. ├──[✅]--(d5)
  4626. └──[✅]--(other)
  4627. ├──[✅]--(2-resources)
  4628. ├──[✅]--(d1)
  4629. ├──[✅]--(d2)
  4630. ├──[✅]--(d3)
  4631. ├──[✅]--(d4)
  4632. ├──[✅]--(d5)
  4633. └──[✅]--(other)
  4634. ├──[✅]--(3-misc)
  4635. ├──[✅]--(d1)
  4636. ├──[✅]--(d2)
  4637. ├──[✅]--(d3)
  4638. ├──[✅]--(d4)
  4639. ├──[✅]--(d5)
  4640. └──[✅]--(other)
  4641. └──[✅]--(4-test-prep)
  4642. └──[✅]--(Study-Guides)
  4643. ├──[✅]--(wk3)
  4644. ├──[✅]--(0-notes)
  4645. ├──[✅]--(d1)
  4646. ├──[✅]--(d2)
  4647. ├──[✅]--(d3)
  4648. ├──[✅]--(d4)
  4649. ├──[✅]--(d5)
  4650. └──[✅]--(other)
  4651. ├──[✅]--(1-projects)
  4652. ├──[✅]--(d1)
  4653. ├──[✅]--(d2)
  4654. ├──[✅]--(d3)
  4655. ├──[✅]--(d4)
  4656. ├──[✅]--(d5)
  4657. └──[✅]--(other)
  4658. ├──[✅]--(2-resources)
  4659. ├──[✅]--(d1)
  4660. ├──[✅]--(d2)
  4661. ├──[✅]--(d3)
  4662. ├──[✅]--(d4)
  4663. ├──[✅]--(d5)
  4664. └──[✅]--(other)
  4665. ├──[✅]--(3-misc)
  4666. ├──[✅]--(d1)
  4667. ├──[✅]--(d2)
  4668. ├──[✅]--(d3)
  4669. ├──[✅]--(d4)
  4670. ├──[✅]--(d5)
  4671. └──[✅]--(other)
  4672. └──[✅]--(4-test-prep)
  4673. └──[✅]--(Study-Guides)
  4674. ├──[✅]--(wk4)
  4675. ├──[✅]--(0-notes)
  4676. ├──[✅]--(d1)
  4677. ├──[✅]--(d2)
  4678. ├──[✅]--(d3)
  4679. ├──[✅]--(d4)
  4680. ├──[✅]--(d5)
  4681. └──[✅]--(other)
  4682. ├──[✅]--(1-projects)
  4683. ├──[✅]--(d1)
  4684. ├──[✅]--(d2)
  4685. ├──[✅]--(d3)
  4686. ├──[✅]--(d4)
  4687. ├──[✅]--(d5)
  4688. └──[✅]--(other)
  4689. ├──[✅]--(2-resources)
  4690. ├──[✅]--(d1)
  4691. ├──[✅]--(d2)
  4692. ├──[✅]--(d3)
  4693. ├──[✅]--(d4)
  4694. ├──[✅]--(d5)
  4695. └──[✅]--(other)
  4696. ├──[✅]--(3-misc)
  4697. ├──[✅]--(d1)
  4698. ├──[✅]--(d2)
  4699. ├──[✅]--(d3)
  4700. ├──[✅]--(d4)
  4701. ├──[✅]--(d5)
  4702. └──[✅]--(other)
  4703. └──[✅]--(4-test-prep)
  4704. └──[✅]--(Study-Guides)
  4705. ├──[✅]--(wk5)
  4706. ├──[✅]--(0-notes)
  4707. ├──[✅]--(d1)
  4708. ├──[✅]--(d2)
  4709. ├──[✅]--(d3)
  4710. ├──[✅]--(d4)
  4711. ├──[✅]--(d5)
  4712. └──[✅]--(other)
  4713. ├──[✅]--(1-projects)
  4714. ├──[✅]--(d1)
  4715. ├──[✅]--(d2)
  4716. ├──[✅]--(d3)
  4717. ├──[✅]--(d4)
  4718. ├──[✅]--(d5)
  4719. └──[✅]--(other)
  4720. ├──[✅]--(2-resources)
  4721. ├──[✅]--(d1)
  4722. ├──[✅]--(d2)
  4723. ├──[✅]--(d3)
  4724. ├──[✅]--(d4)
  4725. ├──[✅]--(d5)
  4726. └──[✅]--(other)
  4727. ├──[✅]--(3-misc)
  4728. ├──[✅]--(d1)
  4729. ├──[✅]--(d2)
  4730. ├──[✅]--(d3)
  4731. ├──[✅]--(d4)
  4732. ├──[✅]--(d5)
  4733. └──[✅]--(other)
  4734. └──[✅]--(4-test-prep)
  4735. └──[✅]--(Study-Guides)
  4736. ├──[✅]--(wk6)
  4737. ├──[✅]--(0-notes)
  4738. ├──[✅]--(d1)
  4739. ├──[✅]--(d2)
  4740. ├──[✅]--(d3)
  4741. ├──[✅]--(d4)
  4742. ├──[✅]--(d5)
  4743. └──[✅]--(other)
  4744. ├──[✅]--(1-projects)
  4745. ├──[✅]--(d1)
  4746. ├──[✅]--(d2)
  4747. ├──[✅]--(d3)
  4748. ├──[✅]--(d4)
  4749. ├──[✅]--(d5)
  4750. └──[✅]--(other)
  4751. ├──[✅]--(2-resources)
  4752. ├──[✅]--(d1)
  4753. ├──[✅]--(d2)
  4754. ├──[✅]--(d3)
  4755. ├──[✅]--(d4)
  4756. ├──[✅]--(d5)
  4757. └──[✅]--(other)
  4758. ├──[✅]--(3-misc)
  4759. ├──[✅]--(d1)
  4760. ├──[✅]--(d2)
  4761. ├──[✅]--(d3)
  4762. ├──[✅]--(d4)
  4763. ├──[✅]--(d5)
  4764. └──[✅]--(other)
  4765. └──[✅]--(4-test-prep)
  4766. └──[✅]--(Study-Guides)
  4767. ├──[✅]--(wk7)
  4768. ├──[✅]--(0-notes)
  4769. ├──[✅]--(d1)
  4770. ├──[✅]--(d2)
  4771. ├──[✅]--(d3)
  4772. ├──[✅]--(d4)
  4773. ├──[✅]--(d5)
  4774. └──[✅]--(other)
  4775. ├──[✅]--(1-projects)
  4776. ├──[✅]--(d1)
  4777. ├──[✅]--(d2)
  4778. ├──[✅]--(d3)
  4779. ├──[✅]--(d4)
  4780. ├──[✅]--(d5)
  4781. └──[✅]--(other)
  4782. ├──[✅]--(2-resources)
  4783. ├──[✅]--(d1)
  4784. ├──[✅]--(d2)
  4785. ├──[✅]--(d3)
  4786. ├──[✅]--(d4)
  4787. ├──[✅]--(d5)
  4788. └──[✅]--(other)
  4789. ├──[✅]--(3-misc)
  4790. ├──[✅]--(d1)
  4791. ├──[✅]--(d2)
  4792. ├──[✅]--(d3)
  4793. ├──[✅]--(d4)
  4794. ├──[✅]--(d5)
  4795. └──[✅]--(other)
  4796. └──[✅]--(4-test-prep)
  4797. └──[✅]--(Study-Guides)
  4798. ├──[✅]--(wk8)
  4799. ├──[✅]--(0-notes)
  4800. ├──[✅]--(d1)
  4801. ├──[✅]--(d2)
  4802. ├──[✅]--(d3)
  4803. ├──[✅]--(d4)
  4804. ├──[✅]--(d5)
  4805. └──[✅]--(other)
  4806. ├──[✅]--(1-projects)
  4807. ├──[✅]--(d1)
  4808. ├──[✅]--(d2)
  4809. ├──[✅]--(d3)
  4810. ├──[✅]--(d4)
  4811. ├──[✅]--(d5)
  4812. └──[✅]--(other)
  4813. ├──[✅]--(2-resources)
  4814. ├──[✅]--(d1)
  4815. ├──[✅]--(d2)
  4816. ├──[✅]--(d3)
  4817. ├──[✅]--(d4)
  4818. ├──[✅]--(d5)
  4819. └──[✅]--(other)
  4820. ├──[✅]--(3-misc)
  4821. ├──[✅]--(d1)
  4822. ├──[✅]--(d2)
  4823. ├──[✅]--(d3)
  4824. ├──[✅]--(d4)
  4825. ├──[✅]--(d5)
  4826. └──[✅]--(other)
  4827. └──[✅]--(4-test-prep)
  4828. └──[✅]--(Study-Guides)
  4829. └──[✅]--(wk9)
  4830. ├──[✅]--(0-notes)
  4831. ├──[✅]--(d1)
  4832. ├──[✅]--(d2)
  4833. ├──[✅]--(d3)
  4834. ├──[✅]--(d4)
  4835. ├──[✅]--(d5)
  4836. └──[✅]--(other)
  4837. ├──[✅]--(1-projects)
  4838. ├──[✅]--(d1)
  4839. ├──[✅]--(d2)
  4840. ├──[✅]--(d3)
  4841. ├──[✅]--(d4)
  4842. ├──[✅]--(d5)
  4843. └──[✅]--(other)
  4844. ├──[✅]--(2-resources)
  4845. ├──[✅]--(d1)
  4846. ├──[✅]--(d2)
  4847. ├──[✅]--(d3)
  4848. ├──[✅]--(d4)
  4849. ├──[✅]--(d5)
  4850. └──[✅]--(other)
  4851. ├──[✅]--(3-misc)
  4852. ├──[✅]--(d1)
  4853. ├──[✅]--(d2)
  4854. ├──[✅]--(d3)
  4855. ├──[✅]--(d4)
  4856. ├──[✅]--(d5)
  4857. └──[✅]--(other)
  4858. └──[✅]--(4-test-prep)
  4859. └──[✅]--(Study-Guides)
  4860. ├──[✅]--(css)
  4861. ├──[✅]--(js)
  4862. └──[✅]--(media-gifs-images)
  4863. 4861 directories

Contents

  • 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

WEB DEV RESOURCES:


Platforms)


1-projects/Atomic-Design-Solution-master/dogs/

### 1-projects/Atomic-Design-Solution-master/dogs/README.md


Table of Contents generated with DocToc

- Table of Contents
- Updating to New Releases
- Sending Feedback
- Folder Structure
- Available Scripts
- npm start
- npm test
- npm run build
- npm run eject
- Supported Browsers
- Supported Language Features and Polyfills
- Syntax Highlighting in the Editor
- Displaying Lint Output in the Editor
- Debugging in the Editor
- Visual Studio Code
- WebStorm
- Formatting Code Automatically
- Changing the Page <title>
- Installing a Dependency
- Importing a Component
- Button.js
- DangerButton.js
- Code Splitting
- moduleA.js
- App.js
- With React Router
- Adding a Stylesheet
- Button.css
- Button.js
- Post-Processing CSS
- Adding a CSS Preprocessor (Sass, Less etc.)
- Adding Images, Fonts, and Files
- Using the public Folder
- Changing the HTML
- Adding Assets Outside of the Module System
- When to Use the public Folder
- Using Global Variables
- Adding Bootstrap
- Using a Custom Theme
- Adding Flow
- Adding a Router
- Adding Custom Environment Variables
- Referencing Environment Variables in the HTML
- Adding Temporary Environment Variables In Your Shell
- Windows (cmd.exe)
- Windows (Powershell)
- Linux, macOS (Bash)
- Adding Development Environment Variables In .env
- What other .env files can be used?
- Expanding Environment Variables In .env
- Can I Use Decorators?
- Fetching Data with AJAX Requests
- Integrating with an API Backend
- Node
- Ruby on Rails
- Proxying API Requests in Development
- “Invalid Host Header” Errors After Configuring Proxy
- Configuring the Proxy Manually
- Configuring a WebSocket Proxy
- Using HTTPS in Development
- Windows (cmd.exe)
- Windows (Powershell)
- Linux, macOS (Bash)
- Generating Dynamic <meta> Tags on the Server
- Pre-Rendering into Static HTML Files
- Injecting Data from the Server into the Page
- Running Tests
- Filename Conventions
- Command Line Interface
- Version Control Integration
- Writing Tests
- Testing Components
- src/setupTests.js
- Using Third Party Assertion Libraries
- Initializing Test Environment
- src/setupTests.js
- Focusing and Excluding Tests
- Coverage Reporting
- Configuration
- Continuous Integration
- On CI servers
- Travis CI
- CircleCI
- On your own environment
- Windows (cmd.exe)
- Windows (Powershell)
- Linux, macOS (Bash)
- Disabling jsdom
- Snapshot Testing
- Editor Integration
- Debugging Tests
- Debugging Tests in Chrome
- Debugging Tests in Visual Studio Code
- Developing Components in Isolation
- Getting Started with Storybook
- Getting Started with Styleguidist
- Publishing Components to npm
- Making a Progressive Web App
- Opting Out of Caching
- Offline-First Considerations
- Progressive Web App Metadata
- Analyzing the Bundle Size
- Deployment
- Static Server
- Other Solutions
- Serving Apps with Client-Side Routing
- Building for Relative Paths
- Serving the Same Build from Different Paths
- Azure
- Firebase
- GitHub Pages
- Step 1: Add homepage to package.json
- Step 2: Install gh-pages and add deploy to scripts in package.json
- Step 3: Deploy the site by running npm run deploy
- Step 4: Ensure your project’s settings use gh-pages
- Step 5: Optionally, configure the domain
- Notes on client-side routing
- Heroku
- Resolving Heroku Deployment Errors
- “Module not found: Error: Cannot resolve ‘file’ or ‘directory’”
- “Could not find a required file.”
- Netlify
- Now
- S3 and CloudFront
- Surge
- Advanced Configuration
- Troubleshooting
- npm start doesn’t detect changes
- npm test hangs on macOS Sierra
- npm run build exits too early
- npm run build fails on Heroku
- Moment.js locales are missing
- npm run build fails to minify
- Alternatives to Ejecting
- Something Missing?




1-projects/Atomic-Design-Solution-master/

### 1-projects/Atomic-Design-Solution-master/README.md


Table of Contents generated with DocToc

- Client Side Routing - HTTP - Atomic Design
- Topics
- Description
- Instructions
- Resources
- Post-assignment Resouces:



# Client Side Routing - HTTP - Atomic Design

## Topics
Routing with React Router Axios for making HTTP requests
JavaScript Promises Atomic Design

## Description
In this create-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.

The app you will be finishing is an app that lists a few dog breeds, shows an image, and provides links to view their sub-breeds.

## Instructions
You are given the 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.

Requirements for Breeds.js Title should be “Breeds”
Show a list of dog breeds Each list item should be a link to a SubBreed page that shows the sub-breed details
Show an image of the first dog breed in the list, with that breed as a title for the image use the provided method filterBreeds 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)

Requirements for SubBreeds.js Title should be “Sub-breeds”
Subtitle should be the given breed Show a list of sub-breeds for the given breed
Show an image of the first sub-breed in the list, with that sub-breed as a title for the image

## Resources
Dog Breed API: https://dog.ceo/dog-api/
Atomic Design: http://bradfrost.com/blog/post/atomic-web-design/

## Post-assignment Resouces:
Component Folder Pattern: https://medium.com/styled-components/component-folder-pattern-ee42df37ec68
Modified Atomic Design: https://medium.com/@yejodido/atomic-components-managing-dynamic-react-components-using-atomic-design-part-1-5f07451f261f






1-projects/Basic-JavaScript-master/

### 1-projects/Basic-JavaScript-master/README.md


Table of Contents
generated with DocToc

- Basic JavaScript + ES6
- Project Description
- Instructions



# Basic JavaScript + ES6
ES6
Const vs Let vs Var Lambda/Arrow functions
Object Destructuring

### Project Description
This project should be very familiar to you. You have already suffered through the logic behind a lot of these expressions/functions.
We’re excited to give you something you’ve already worked on, but to now just convert the code into ES6 syntax. Learning to program is all about repetition. So teaching you a new concept with material that you’ve already learned will help you solidify the material and also teach you new concepts along the way.
Project files 1 - 3 are all that need to be completed for this assignment. And Project-4 is Extra Credit. Please have fun!

### Instructions
Fork and clone this repo. cd into this project and Run the command npm i to install needed node packages.
Run the command npm test to run the tests. Work through the files and make the tests pass.
Submit a pull request when you are finished and we will review your code.





1-projects/Client-Auth-Solution-master/

### 1-projects/Client-Auth-Solution-master/README.md


Table of Contents
generated with DocToc

- LS-Client-Auth
- Packages
- Topics
- Assignment



# LS-Client-Auth

## Packages
redux-thunk
cors

## Topics
Redux Thunk
localStorage axios’s config object
http headers


## Assignment

Clone down this project. Run npm i.
Start your MongoDB server by running mongod from the command line.
Start the server (on the solution branch) of the LS-Auth repository.

Complete the SignUp component. When the user fills out the form you should send and
axios POST request to the server to save the user to the database. If successful then you
should save the provided JWT to localStorage and then redirect the user to /users.
User the existing code as a reference.

You will also need to make sure that your server is using the cors middleware.
Instructions for adding cors:
npm i --save cors
const cors = require('cors'); app.use(cors());





1-projects/Components-BEM-Solution-master/

### 1-projects/Components-BEM-Solution-master/README.md


Table of Contents generated with DocToc

- COMPONENTS-BEM
- Resources



COMPONENTS-BEM
—————————————————

Topics:
Naming Conventions BEM
Constructors with ES6 class syntax

You will be turning the wireframes provided in the markups directory into a page.

Using BEM, create the page with three components: Section, Box, and Dropdown.
Using ES6 class constructors, complete the Dropdown component functionality.

Here is some Lorem Ipsum text:

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.


## Resources
BEM: http://getbem.com/naming/

Constructors (and factory function): https://medium.com/javascript-scene/javascript-factory-functions-vs-constructor-functions-vs-classes-2f22ceddf33e




1-projects/Components-Constructors-Solution-master/

### 1-projects/Components-Constructors-Solution-master/README.md


Table of Contents
generated with DocToc

- COMPONENTS-CONSTURCTORS
- Description
- Resources



COMPONENTS-CONSTURCTORS
—————————————————

Topics:
Naming Conventions
BEM Constructors with ES6 class syntax

You will be building on your prior work from Components-BEM by adding a Tabs component.

The HTML and CSS for the Tabs component and instance are provided so that you may add your prior work around it. If you have not finished Components-BEM, ask you TA for the solution.

You may need to adjust some of the naming for the usuage of Box in the HTML provided if it’s different in your implementation.

## Description
The 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.

You will also be doing a more complex query with 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.

## Resources

Data Attributes: https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes

BEM: http://getbem.com/naming/

Constructors (and factory function): https://medium.com/javascript-scene/javascript-factory-functions-vs-constructor-functions-vs-classes-2f22ceddf33e




1-projects/Data-Structures-master/

### 1-projects/Data-Structures-master/Data_Structures_Questions.md


Table of Contents generated with DocToc

- Stack
- Queue
- Doubly Linked List
- Binary Search Tree
- Heap



Answer the following questions for each of the data structures you implemented as part of this project.

## Stack

1. What is the runtime complexity of push using a list?

2. What is the runtime complexity of push using a linked list?

3. What is the runtime complexity of pop using a list?

4. What is the runtime complexity of pop using a linked list?

5. What is the runtime complexity of len using a list?

6. What is the runtime complexity of len using a linked list?

## Queue

1. What is the runtime complexity of enqueue using a list?

2. What is the runtime complexity of enqueue using a linked list?

3. What is the runtime complexity of dequeue using a list?

4. What is the runtime complexity of dequeue using a linked list?

5. What is the runtime complexity of len using a list?

6. What is the runtime complexity of len using a linked list?

## Doubly Linked List

1. What is the runtime complexity of ListNode.insert_after?

2. What is the runtime complexity of ListNode.insert_before?

3. What is the runtime complexity of ListNode.delete?

4. What is the runtime complexity of DoublyLinkedList.add_to_head?

5. What is the runtime complexity of DoublyLinkedList.remove_from_head?

6. What is the runtime complexity of DoublyLinkedList.add_to_tail?

7. What is the runtime complexity of DoublyLinkedList.remove_from_tail?

8. What is the runtime complexity of DoublyLinkedList.move_to_front?

9. What is the runtime complexity of DoublyLinkedList.move_to_end?

10. What is the runtime complexity of DoublyLinkedList.delete?

a. Compare the runtime of the doubly linked list’s delete method with the worst-case runtime of the JS Array.splice method. Which method generally performs better?

## Binary Search Tree

1. What is the runtime complexity of insert?

2. What is the runtime complexity of contains?

3. What is the runtime complexity of get_max?

4. What is the runtime complexity of for_each?

## Heap

1. What is the runtime complexity of _bubble_up?

2. What is the runtime complexity of _sift_down?

3. What is the runtime complexity of insert?

4. What is the runtime complexity of delete?

5. What is the runtime complexity of get_max?





### 1-projects/Data-Structures-master/FAQ.md



Table of Contents generated with DocToc

- Data Structures FAQ
- Contents
- General
- My imports aren’t working, help!
- What are real-world use-cases for a Queue data structure?
- What are real-world use-cases for a Stack data structure?
- What are real-world use-cases for a Linked List data structure?
- How are Linked-Lists different than an Array?
- I’ve always been able to add as much as I want to an Array and take things out from the beginning, end, or anywhere else. It’s never been a problem before, why are we bothering with all of this?
- What are real-world use-cases for a LRU Cache?
- What is the dictionary being used for in the LRU Cache?
- What are real-world use-cases for a Binary Search Tree data structure?
- How is the root element of a Binary Search Tree decided?
- What is the difference between Breadth First and Depth First?
- What is the difference between a Search and a Traversal?



# Data Structures FAQ
## Contents
### General

#### My imports aren’t working, help!
Python can be tricky with how imports work and can vary from environment to environment. If you are having trouble, the easiest solution is to copy the file you want to import into the same folder as the file you want to import it into and use from file import class.

This is not a best practice for a real application, but it is acceptable for this exercise. Just remember that this may mean if you want to change or update your code, you will have to do it in multiple places.

#### What are real-world use-cases for a Queue data structure?
Queues are used anywhere in which you want to work with data 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.

#### What are real-world use-cases for a Stack data structure?
Stacks are used when you want to work with data Last in First Out (LIFO or FILO). They’re used in processor architecture, undo logic, and depth first searches and traversals.

#### What are real-world use-cases for a Linked List data structure?
Linked Lists can be used to create 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.

#### How are Linked-Lists different than an Array?
Both linked lists and arrays are linear data structures. An array is the most space efficient type of storage possible and has great time complexity for most operations. Logically, the array is linear in structure, and it is stored in a linear segment of memory. It is accessed by starting at the memory address of the pointer and counting forward the number of bits resulting from the 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.

A linked list is not as efficient for storage because each element requires a pointer to the next, and in a doubly-linked list, previous element. It is also more difficult to access the elements. Because there’s no index, you must loop through the list to search for the item you want, which is O(n). However, a linked list does not require a contiguous block of memory. It has 0(1) to remove or add items anywhere in the list.

Generally speaking, it’s usually best to use an array unless you expect to frequently add and remove items from anywhere other than the end. In that case, it’s better to use a linked list.

#### I’ve always been able to add as much as I want to an Array and take things out from the beginning, end, or anywhere else. It’s never been a problem before, why are we bothering with all of this?
We’re looking under the hood! High level languages like Python abstract away most of the inner workings of everything we do. Most of the time this is a good thing and most of the time it doesn’t matter. However, we’re professional engineers and sometimes we need to solve problems where the details can have a major impact on success or failure. Think about your car. Do you know exactly how much weight you can put in it? Probably not, nor do you need to. But if you find yourself needing to put a load of bags of concrete in the trunk it suddenly becomes very important. As an engineer, you’ll be expected to understand when the details do and do not matter.

#### What are real-world use-cases for a LRU Cache?
An LRU cache is an efficient type of caching system that keeps recently used items and when the cache becomes full, pushes out the least recently used item in the cache. It can be used any time a subset of data is used frequently that needs to be pulled from a source with a long lookup time. For example, cacheing the most frequently accessed items from a database on a remote server.

#### What is the dictionary being used for in the LRU Cache?
We can’t access items in a linked list directly because linked lists are not indexed. To see if an item is already in the cache, we’d need to loop through the cache at O(n). By also adding a dictionary to organize the nodes that are already present in memory, we index the linked list for a very small overhead cost.

#### What are real-world use-cases for a Binary Search Tree data structure?
A BST in the way that is being implemented for this Sprint is a bit too simple to see any real-world use-cases. There are many (more complex) variants of BSTs that do see production use. One very notable variant is the B-tree, which is a self-balancing ordered variant of the BST. B-trees play a critical role in database and file system indexing. Other notable variants include the AVL tree, which is a self-balancing BST and the prefix tree, which is specialized for handling text.

#### How is the root element of a Binary Search Tree decided?
The first element added to a BST is the root of the tree. However, doing it this way means that it’s a very simple matter to end up with a lopsided BST. If we simply insert a monotonically ascending or descending sequence of values, then the tree would essentially flatten down to a linked list, and we’d lose all the benefits that a BST is supposed to confer. Self-balancing variants of the BST exist in order to alleviate this exact problem.

#### What is the difference between Breadth First and Depth First?
In depth first, we pick one path at each branch and keep going forward until we hit a dead end, then backtrack and take the first branch we find. In breadth first, we go by layers, one row deeper each time. This means that we jump around a bit.

#### What is the difference between a Search and a Traversal?
A search and a traversal are processed exactly the same. The difference is that we stop a search when we find what we were looking for, or when all nodes have been visited without finding it. In a traversal, we always keep going until we’ve visited every node.



1-projects/Data-Structures-master/heap/

### 1-projects/Data-Structures-master/heap/README.md


Table of Contents generated with DocToc

- Stretch Goal: Heaps
- Max Heaps
- Generic Heaps



# Stretch Goal: Heaps

## Max Heaps
Should have the methods 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 heap
delete 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.

Image of a Heap in Tree form

Image of a Heap in Array form

## Generic Heaps
A max heap is pretty useful, but what’s even more useful is to have our heap be generic such that the user can define their own priority function and pass it to the heap to use.

Augment your heap implementation so that it exhibits this behavior. If no comparator function is passed in to the heap constructor, it should default to being a max heap. Also change the name of the get_max function to get_priority.

You can test your implementation against the tests in 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.




1-projects/Data-Structures-master/

### 1-projects/Data-Structures-master/README.md


Table of Contents
generated with DocToc

- Data Structures
- Completion Requirements
- Stacks
- Queues
- Doubly Linked Lists
- Binary Search Trees
- Stretch Goals
- LRU Cache
- AVL Tree



# Data Structures

Topics:
Singly Linked Lists
Queues and Stacks Doubly Linked Lists
Binary Search Trees Related Code Challenge Problems

Stretch Goals:
LRU Cache Heaps
AVL Trees

## Completion Requirements
Module 1: Implement the Stack and Queue classes using built-in Python lists and the Node and LinkedList classes you created during the Module 1 Guided Project.
Module 2: Implement the Doubly Linked List class Module 3: Implement the Binary Search Tree class
Module 4: Implement traversal methods on Binary Search Trees

> NOTE: The quickest and easiest way to reliably import a file in Python is to just copy and paste the file you want to import into the same directory as the file that wants to import. This obviously isn’t considered best practice, but it is the most reliable way to do it across all platforms. If the import isn’t working, feel free to try this method.

### Stacks
Should have the methods: 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 stack
len returns the number of elements in the stack.

### Queues
Has the methods: 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.

Image of Queue

### Doubly Linked Lists
The 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.
The 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.

Image of Doubly Linked List

### Binary Search Trees
Should have the methods 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.

Image of Binary Search Tree

—-

Once you’ve gotten the tests passing, it’s time to analyze the runtime complexity of your 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.

Here are you some things to think about with regards to optimizing your implementation: If you opted to use a dictionary to work with key-value pairs, we know that dictionaries give us constant access time, which is great. It’s cheap and efficient to fetch pairs. A problem arises though from the fact that dictionaries don’t have any way of remembering the order in which key-value pairs are added. But we definitely need something to remember the order in which pairs are added. Can you think of some ways to get around this constraint?

## Stretch Goals

### LRU Cache
An LRU (Least Recently Used) cache is an in-memory storage structure that adheres to the Least Recently Used) caching strategy.

In essence, you can think of an LRU cache as a data structure that keeps track of the order in which elements (which take the form of key-value pairs) it holds are added and updated. The cache also has a max number of entries it can hold. This is important because once the cache is holding the max number of entries, if a new entry is to be inserted, another pre-existing entry needs to be evicted from the cache. Because the cache is using a least-recently used strategy, the oldest entry (the one that was added/updated the longest time ago) is removed to make space for the new entry.

So what operations will we need on our cache? We’ll certainly need some sort of 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.

We’ll also need a 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.

Note that the only way for entries to be removed from the cache is when one needs to be evicted to make room for a new one. Thus, there is no explicit remove method.

Given the above spec, try to get a working implementation that passes the tests. What data structure(s) might be good candidates with which to build our cache on top of? Hint: Since our cache is going to be storing key-value pairs, we might want to use a structure that is adept at handling those.

### AVL Tree
An AVL tree (Georgy Adelson-Velsky and Landis’ tree, named after the inventors) is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any time they differ by more than one, rebalancing is done to restore this property.

We define balance factor for each node as :
balanceFactor = height(left subtree) - height(right subtree)

The balance factor of any node of an AVL tree is in the integer range [-1,+1]. If after any modification in the tree, the balance factor becomes less than −1 or greater than +1, the subtree rooted at this node is unbalanced, and a rotation is needed.

AVL tree rebalancing

Implement an AVL Tree class that exhibits the aforementioned behavior. The tree’s 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.

How does the time complexity of the AVL Tree’s insertion method differ from the binary search tree’s?





1-projects/DOM-JavaScript-mini-Solution-master/

### 1-projects/DOM-JavaScript-mini-Solution-master/README.md





1-projects/HTML-CSS-mini-Solution-master/

### 1-projects/HTML-CSS-mini-Solution-master/README.md


Table of Contents
generated with DocToc

- HTML/CSS mini
- Extra Credit



HTML/CSS mini
—————————————————

Topics:
Box Model
Flex Box BEM Naming Conventions
Extra Credit: Media Queries

You will be turning the provided wireframe into a page. For your first implementation, use only box model rules. Half way through the alotted time, refactor what you have to use flexbox. Make your second solution on a second branch.

You’re provided with an index.html file and a styles.css file to begin with, but you’re welcome to restructure as you see fit. The mockups are also in the mockup folder for your reference. The full width version is the first you’ll be implementing. The mid and small are for extra credit.

Box Model Study Guide



## Extra Credit
Make your Box Model solution responsive to browser resizing using media queries.
Media Query Min & Max Width Quick Reference







1-projects/Intro-Python-I-master/

### 1-projects/Intro-Python-I-master/FAQ.md


Table of Contents generated with DocToc

- FAQ
- Contents
- General CS
- General Python
- Pipenv
- Object-Oriented Programming
- Python Scoping
- Types
- Questions
- What are some things we can do to prepare for CS?
- Why is there such a debate between OOP and functional programming, and why should we care?
- In regard to the code challenge solution, why is the ‘+’ operator being used to concatenate strings? I thought we were supposed to use the join() method in Python?
- How do you get out of the Python built-in help?
- Are there any helpful VS Code extensions that are recommend for using with Python?
- I’m on Windows; what command do I use to run Python?
- What version of Python do I need?
- Do I need to use pipenv?
- How do I get out of the Python REPL?
- What does “REPL” mean?
- I’m on a Mac and when I run Python it says I’m on version 2.7. Why?
- Does Python use tabs or spaces?
- How do I convert an iterator into a list?
- Does Python have hoisting?
- Does scoping work similar to other languages?
- Can you return a reference to a function from another function? Or store it in a variable?
- Can you use boolean shortcut assignments?
- Can you do anonymous functions?
- Is a dict like a JavaScript object?
- What are all those method names with double underscores around them?
- How do I get a value from a dict?
- When do we run pipenv shell?
- How do I get out of the pipenv shell?
- How do I install additional packages from pipenv?
- Is it possible to use system-wide packages from inside the virtual environment?
- Where are good Python docs?
- Which linter?
- Can you dynamically add new methods/properties to class through other functions? Or must all properties/methods be declared at once?
- Following this flow: 1) class Dog is created with attributes size and weight. 2) New instance called Snoopy of class Dog is created. 3) Class Dog gets the method bark() dynamically added to it. Question: will Snoopy now have access to bark() method?
- If a subclass inherits from two superclasses with a method of the same name, which method will the subclass use?
- How to handle multiple inheritance and why/when to do it in the first place?
- Why use tuples instead of lists?
- What’s the difference between repr and str?
- How does sys.argv work?
- How do I concatenate two arrays into a single array?
- What are some ways to learn a new language?
- Why test code frequently?
- Why isn’t official documentation more helpful than Stack Overflow?
- During an interview, what do I do if I can’t remember the exact syntax?



# FAQ



## Contents

### General CS

What are some things we can do to prepare for CS? What are some ways to learn a new language?
Why test code frequently? Why isn’t official documentation more helpful than Stack Overflow?
During an interview, what do I do if I can’t remember the exact syntax?

### General Python
In regard to the code challenge solution, why is the ‘+’ operator being used to concatenate strings? I thought we were supposed to use the join() method in Python?
How do you get out of the Python built-in help? Are there any helpful VS Code extensions that are recommend for using with Python?
I’m on Windows; what command do I use to run Python? What version of Python do I need?
How do I get out of the Python REPL? What does “REPL” mean?
I’m on a Mac and when I run Python it says I’m on version 2.7. Why? Does Python use tabs or spaces?
Can you use boolean shortcut assignments? Can you do anonymous functions?
What are all those method names with double underscores around them? Where are good Python docs?
Which linter? What’s the difference between repr and str?
How does sys.argv work?

### Pipenv
Do I need to use pipenv?
When do we run pipenv shell? How do I get out of the pipenv shell?
How do I install additional packages from pipenv? Is it possible to use system-wide packages from inside the virtual environment?

### Object-Oriented Programming

Why is there such a debate between OOP and functional programming, and why should we care? Following this flow: 1) class Dog is created with attributes size and weight. 2) New instance called Snoopy of class Dog is created. 3) Class Dog gets the method bark() dynamically added to it. Question: will Snoopy now have access to bark() method?
Can you dynamically add new methods/properties to class through other functions? Or must all properties/methods be declared at once? If a subclass inherits from two superclasses with a method of the same name, which method will the subclass use?
How to handle multiple inheritance and why/when to do it in the first place?

### Python Scoping
Does Python have hoisting?
Does scoping work similar to other languages? Can you return a reference to a function from another function? Or store it in a variable?
Can you do anonymous functions?

### Types
How do I convert an iterator into a list?
Is a dict like a JavaScript object? How do I get a value from a dict?
Why use tuples instead of lists? How do I concatenate two arrays into a single array?

## Questions


### What are some things we can do to prepare for CS?

CS Wiki Polya’s Problem Solving Techniques
Solving Programming Problems CS Reading List
How to Google effectively How to read specs and code
Command line primer Coding style guidelines

————————————————————————————————————


### Why is there such a debate between OOP and functional programming, and why should we care?

There are a lot of programming
paradigms
and they all have
their strengths and weaknesses when it comes to solving different types of
problems.

People can be quite opinionated about their favorites, but it’s important to
remember that no one language or paradigm is the right tool for all jobs. And,
additionally, that virtually all problems can be solved in any of the
declarative or imperative paradigms. (Some might produce cleaner, more elegant
code for a particular problem.)

Paradigms are the hardest thing to learn because you often have to take all the
knowledge you have about solving a problem in another paradigm and throw it out
the window. You have to learn new patterns and techniques to be effective.

But we encourage this kind of learning because most popular languages are to
some degree multi-paradigm, and the more techniques you know from more
paradigms, the more effective you are in that multi-paradigm langage.

————————————————————————————————————


### In regard to the code challenge solution, why is the ‘+’ operator being used to concatenate strings? I thought we were supposed to use the join() method in Python?

Using join() to join large numbers of strings is definitely faster in Python
than using the + operator to do it. The reason is that every time you join()
or use the + operator, a new string is created. So if you only have to
join() once, versus using + hundreds of times, you’ll run faster.

That said, if you want to use the join() approach, you’ll have to have all
your strings in a list, which uses more memory than just having the two or three
that you need at a time to use +. So there’s a tradeoff.

Another tradeoff might be in readability. It might be easier to read the +
version. That’s worth something.

Finally, if + is fast enough for this case, it might not be worth the time to
bother with making a list of strings to join().

Speed comparison with different ways of concatenating strings

————————————————————————————————————


### How do you get out of the Python built-in help?

Hit q for “quit”.

It’s a common command in Unix “pagers” (programs that show documents a page at a
time).

————————————————————————————————————


### Are there any helpful VS Code extensions that are recommend for using with Python?
Official VS Code Python Extension

————————————————————————————————————


### I’m on Windows; what command do I use to run Python?

If you’re running in PowerShell or cmd, use:

py

If in bash, use python or python3.

————————————————————————————————————


### What version of Python do I need?

You should have version 3.7 or higher. Test with:

shell python --version

————————————————————————————————————


### Do I need to use pipenv?

You should. Good Python devs know how.

————————————————————————————————————


### How do I get out of the Python REPL?

Hit CTRL-D. This is the way End-Of-File is signified in Unix-likes.

————————————————————————————————————


### What does “REPL” mean?

Read, Evaluate, Print Loop.

It reads your input, evaluates it, and prints the result. And loops.

————————————————————————————————————


### I’m on a Mac and when I run Python it says I’m on version 2.7. Why?

Macs come with version 2.7 by default. You’ll need to install version 3.

And preferable use pipenv after that.

————————————————————————————————————


### Does Python use tabs or spaces?

PEP 8 says four spaces.

————————————————————————————————————


### How do I convert an iterator into a list?

Cast it:

python list(range(5))

produces:

python [0, 1, 2, 3, 4]

————————————————————————————————————


### Does Python have hoisting?

No.

What is hoisting?

————————————————————————————————————


### Does scoping work similar to other languages?

Generally, and also not really. Variables are either global or function-local.

Since there are no declarations, there’s no block-level scope.

It is similar to var in JavaScript.

————————————————————————————————————


### Can you return a reference to a function from another function? Or store it in a variable?

Yes. Functions are first-class citizens.

————————————————————————————————————


### Can you use boolean shortcut assignments?

Yes, you can. This is common in Perl and JavaScript, but it’s not particularly idiomatic in Python.

python x = SomethingFalsey or 5

————————————————————————————————————


### Can you do anonymous functions?

You can use 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)

————————————————————————————————————


### Is a dict like a JavaScript object?

Sort of.

The syntax is different, though. In Python you must use [] notation to access elements. And you must use " around the key names.

————————————————————————————————————


### What are all those method names with double underscores around them?

Those are function you typically don’t need to use, but can override or call if you wish.

Most commonly used are:
__init__() is the constructor for objects
__str__() returns a string representation of the object __repr__() returns a string representation of the object, for debugging

————————————————————————————————————


### How do I get a value from a dict?

python d = { "a": 2, "b": 3 } print(d["a"])

You don’t use dot notation.

————————————————————————————————————


### When do we run pipenv shell?

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.

————————————————————————————————————


### How do I get out of the pipenv shell?

Type exit.

————————————————————————————————————


### How do I install additional packages from pipenv?

shell pipenv install packagename

————————————————————————————————————


### Is it possible to use system-wide packages from inside the virtual environment?

This is not recommended.

————————————————————————————————————


### Where are good Python docs?

Official documentation tutorial and library reference.

The official docs might be hard to read at first, but you’ll get used to them
quickly

————————————————————————————————————


### Which linter?

Pylint or Flake8. The latter seems to be a bit more popular.

————————————————————————————————————


### Can you dynamically add new methods/properties to class through other functions? Or must all properties/methods be declared at once?

You can add them dynamically at runtime, but you have to add them to the class itself:

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"

This is not a common thing to see in Python, however.

————————————————————————————————————


### Following this flow: 1) class Dog is created with attributes size and weight. 2) New instance called Snoopy of class Dog is created. 3) Class Dog gets the method bark() dynamically added to it. Question: will Snoopy now have access to bark() method?

Yes.

————————————————————————————————————


### If a subclass inherits from two superclasses with a method of the same name, which method will the subclass use?

The answer to this is twofold:

1. Lots of devs and shops frown on multiple inheritance, so maybe just don’t do
it.
(Discussion)

2. As for the order in which methods of the same name are resolved, check out
the MRO Algorithm which is
what Python uses.


————————————————————————————————————


### How to handle multiple inheritance and why/when to do it in the first place?

python class Base1: pass class Base2: pass class Derived(Base1, Base2): # Multiple inheritance pass

Sometimes multiple inheritance can lead to elegant solutions when a subclass
needs attributes from multiple, otherwise-unrelated parent classes.

However, a lot of people find it’s not worth the
trouble
)
and opt for other solutions, like composition.

————————————————————————————————————


### Why use tuples instead of lists?
Tuples are immutable. There’s a school of thought that says bugs can be reduced if you make as many things immutable as you can.
Tuples are faster than lists to access. Some tuples (containing primitive types), can be used as dict keys.

————————————————————————————————————


### What’s the difference between repr and str?

Generally speaking, __repr__ is the string a dev would want to see if they
dumped an object to the screen. __str__ is the string a user would want to see
if the object were print()ed.

The output of __repr__ should be valid Python code that can reproduce the
object
.

python 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'

In action:

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)

————————————————————————————————————


### How does sys.argv work?

It’s a list that holds command line arguments. This is a way for a user to run
your program and specify different behavior from the command line.

Here’s a small program that prints the command line arguments:

python import sys for i in range(len(sys.argv)): print(f'Argument #{i} is: {sys.argv[i]}')

and here’s some output, assuming you named the script 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

Note that the 0th element in the list is the name of the program.

Here’s another program that prints up to whatever number the user specifies:

python import sys for i in range(int(sys.argv[1])): print(i+1)

Example runs:

screen $ python foo.py 2 1 2

screen $ python foo.py 4 1 2 3 4

————————————————————————————————————


### How do I concatenate two arrays into a single array?

Use extend().

python a = [1, 2, 3] b = [4, 5, 6] a.extend(b) print(a) # [ 1, 2, 3, 4, 5, 6 ]

————————————————————————————————————


### What are some ways to learn a new language?

Figure out how variables and functions work. Build small toy programs to test individual features.
Build a larger project that exercises many features. Don’t get frustrated! Treat the problem like a curiosity, a thing to be studied.
Do small tutorials or code-alongs. Find docs you like.
Learn the differences between this language and one you know. Learn this language’s way of doing the things you know.

Things to look for in the new language:

Collections (arrays, vectors, dictionaries) Data types
Iterators Flow control (if, while, loops, etc)
Functions etc.

————————————————————————————————————


### Why test code frequently?

It’s often better to make progress in small increments than to write a bunch of
stuff and test it in one go.

Also, it’s easier to stay motivated if you spend 10 minutes getting a first
version going, even if it’s missing 99% of its features, and then starting to
iterate on that.

————————————————————————————————————


### Why isn’t official documentation more helpful than Stack Overflow?

Often official documentation is more geared toward being a concise reference.
Stack Overflow is more of an example-based learning environment.

Sometimes you need to know the specific details. In those cases, you can dig
into the spec, with all it’s lawyerly language, and try to decipher what it is
you have to do.

Other times, you just need a getting-started example, and Stack Overflow is
great for that.

Both types of documentation have their purpose.

————————————————————————————————————


### During an interview, what do I do if I can’t remember the exact syntax?

Just say so.

“I can’t remember how to add an element to the end of the list in Python… is
it push()? In any case, we’ll call the function here that does that.”

(Turns out it’s append() in Python, but being honest and describing what it is
your’re trying to do will get you 99% of the way there in an interview.)





### 1-projects/Intro-Python-I-master/README.md



Table of Contents generated with DocToc

- Intro to Python I
- Techniques for learning new languages
- Resources
- Getting started
- Goals
- Summary
- Instructions
- Stretch Goals



# Intro to Python I

Note: This project spans two modules (modules 1 and 2). You should roughly try to finish the first half of the problems during module 1 and the second half of the problems during module 2.

It’s time to learn a new language! Python!

Python is a popular, easy-to-use programming language that has significant
traction in the field.

Remember the goal is learning to learn, so keep track of what works for you
and what doesn’t as you go through the process of exploring Python.

## Techniques for learning new languages

Try to relate things you already know in another language (e.g. what an
array is) to the corresponding things in Python (e.g. a list) and how to
use them.
Write a bunch of “toy programs” that demonstrate different key features of the
language

Explore the standard library that’s available for the language. Skim it
briefly for now—the idea isn’t to memorize everything but to file away
generally what functionality is available.
Write a more substantial toy program that uses a variety of the features.

Again, keep track of what works for you. Try different things to see what works
best for learning new languages.

## Resources

Installing Python 3 JavaScript<->Python cheatsheet
How to read Specs and Code Python 3 standard library

## Getting started

Make sure you have Python 3 installed. You can check this by running python3 --version in your terminal and ensuring that it returns a version string that is at least 3.6.5.

## Goals

Learn the basic syntax and structure of Python

## Summary
Implement a number of tiny Python programs that demonstrate Python syntax and
language concepts.

## Instructions

Note: This project spans two modules (modules 1 and 2). You should roughly try to finish the first half of the problems during module 1 and the second half of the problems during module 2.

Each directory inside the src/ directory presents exercises revolving around a
particular concept in Python. Not all of these concepts are unique to Python (in
fact, most probably aren’t). This means that you can leverage knowledge you’ve
obtained via exposure to other programming languages towards learning Python.

The suggested order for going through each of the directories is:

hello — Hello world bignum — Print some big numbers
datatypes — Experiment with type conversion modules — Learn to import from modules
printing — Formatted print output lists — Python’s version of arrays
tuples — Immutable lists typically for heterogenous data slices — Accessing parts of lists
comprehensions — List comprehensions dictionaries — Dictionaries
functions — Functions args — Arguments and Keyword Arguments
scopes — Global, Local, and Non-Local scope file_io — Read and write from files
cal — Experiment with module imports and implement a text-based calendar classes — Classes and objects

## Stretch Goals

1. One of Python’s main philosophical tenets is its emphasis on readability. To
that end, the Python community has standardized around a style guide called
PEP 8. Take a look at it and
then go over the code you’ve written and make sure it adheres to what PEP 8
recommends. Alternatively, PEP 8 linters exist for most code editors (you can
find instructions on installing a Python linter for VSCode
here). Try installing
one for your editor!

2. Rewrite code challenges you’ve solved before or projects you’ve implemented
before in a different language in Python. Start getting in as much practice
with the language as possible!

3. Write a program to determine if a number, given on the command line, is prime.

1. How can you optimize this program?
2. Implement The Sieve of
Eratosthenes
, one
of the oldest algorithms known (ca. 200 BC).


1-projects/Intro-Python-II-master/

### 1-projects/Intro-Python-II-master/FAQ.md


Table of Contents generated with DocToc

- FAQ



# FAQ

Refer to the FAQ in Intro-Python-I.




### 1-projects/Intro-Python-II-master/object_reference_hints.md

Remember that multiple variables can refer to the same object.

In the diagram below, there are only 2 Room objects, total. (There are more in the game, obviously, but in this diagram, there are 2.)

There are 5 variables. 3 of them point to the one Room object that is the foyer:

room['foyer'] room['outside'].n_to
player.location

The remaining 2 point to the one Room object that is the outside:
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

If you want to move the player (who is in the foyer in the diagram) to another room, you just need to reassign that to any variable that points to that other room.

So if the player is in the foyer and types s to go south, we could set:

player.location = room['foyer'].s_to # we were in the foyer, then went south

and after that, the variable references would look like this, with player location pointing to the outside object:

player.location | v room['outside'] -> Room("Outside Cave Entrance") ^ | room['foyer'].s_to room['foyer'] -> Room("Foyer") ^ | room['outside'].n_to

Assigning doesn’t copy the object. It just makes another reference to the same object.


### 1-projects/Intro-Python-II-master/README.md



Table of Contents
generated with DocToc

- Intro to Python II
- What We’re Building
- Goals
- MVP
- Day 1 MVP
- Day 2 MVP
- Specification
- Stretch Goals



# Intro to Python II

Up to this point, you’ve gotten your feet wet by working on a bunch of small Python programs. In this module, we’re going to continue to solidify your Python chops by implementing a full-featured project according to a provided specification.


## What We’re Building
What’s an Adventure Game? vid


## Goals
Put your Python basics into practice by implementing a text adventure game

Practice writing code that conforms to a specification


## MVP

### Day 1 MVP
Create the input command parser in adv.py which allows the program to receive player input and commands to move to rooms
in the four cardinal directions.
Fill out Player and Room classes in player.py and room.py

### Day 2 MVP
Make rooms able to hold multiple items
Make the player able to carry multiple items Add items to the game that the user can carry around
Add get [ITEM_NAME] and drop [ITEM_NAME] commands to the parser

## Specification

The /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 player
After each move, the REPL should print the name and description of the player’s current room Valid commands are n, s, e and w which move the player North, South, East or West
The parser should print an error if the player tries to move where there is no room. Put the Room class in room.py based on what you see in adv.py.

The room should have name and description attributes. The room should also have n_to, s_to, e_to, and w_to attributes
which point to the room in that respective direction.

Put the Player class in player.py. Players should have a name and current_room attributes


Create a file called item.py and add an Item class in there. The item should have name and description attributes.

Hint: the name should be one word for ease in parsing later. This will be the base class for specialized item types to be declared
later.

Add the ability to add items to rooms. The Room class should be extended with a list that holds the Items
that are currently in that room.

Add functionality to the main loop that prints out all the items that are
visible to the player when they are in that room.
Add capability to add Items to the player’s inventory. The inventory can
also be a list of items “in” the player, similar to how Items can be in a
Room.

Add a new type of sentence the parser can understand: two words. Until now, the parser could just understand one sentence form:

verb

such as “n” or “q”.

But now we want to add the form:

verb object

such as “take coins” or “drop sword”.
Split the entered command and see if it has 1 or 2 words in it to determine
if it’s the first or second form.

Implement support for the verb get followed by an Item name. This will be
used to pick up Items.
If the user enters get or take followed by an Item name, look at the
contents of the current Room to see if the item is there.

If it is there, remove it from the Room contents, and add it to the
Player contents.
If it’s not there, print an error message telling the user so.

Add an 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.

Add an on_drop method to Item. Implement it similar to on_take. Implement support for the verb drop followed by an Item name. This is the
opposite of get/take.

Add the i and inventory commands that both show a list of items currently
carried by the player.


## Stretch Goals

In arbitrary order:
Add more rooms

Add scoring Subclass items into treasures

Add a subclass to Item called LightSource. During world creation, add a lamp LightSource to a convenient Room.

Override on_drop in LightSource that tells the player “It’s not wise to
drop your source of light!” if the player drops it. (But still lets them drop
it.)
Add an attribute to Room called is_light that is True if the Room is
naturally illuminated, or False if a LightSource is required to see what
is in the room.

Modify the main loop to test if there is light in the Room (i.e. if
is_light is True or there is a LightSource item in the Room‘s
contents or if there is a LightSource item in the Player‘s contents).
If there is light in the room, display name, description, and contents as
normal.

If there isn’t, print out “It’s pitch black!” instead. Hint: isinstance might help you figure out if there’s a LightSource
among all the nearby Items.

Modify the get/take code to print “Good luck finding that in the dark!” if
the user tries to pick up an Item in the dark.
Add methods to notify items when they are picked up or dropped

Add light and darkness to the game Add more items to the game.

Add a way to win. Add more to the parser.

Remember the last Item mentioned and substitute that if the user types
“it” later, e.g.

take sword drop it
Add Items with adjectives, like “rusty sword” and “silver sword”.

Modify the parser to handle commands like “take rusty sword” as well as
“take sword”.
If the user is in a room that contains both the rusty sword and silver
sword, and they type “take sword”, the parser should say, “I don’t know
which you mean: rusty sword or silver sword.”

Modify the code that calls on_take to check the return value. If on_take
returns False, then don’t continue picking up the object. (I.e. prevent the
user from picking it up.)
This enables you to add logic to on_take to code things like “don’t allow
the user to pick up the dirt unless they’re holding the shovel.

Add monsters. Add the attack verb that allows you to specify a monster to attack.

Add an on_attack method to the monster class. Similar to the on_take return value modification, above, have on_attack
prevent the attack from succeeding unless the user possesses a sword item.

Come up with more stretch goals! The sky’s the limit!


1-projects/Intro-to-C-master/

### 1-projects/Intro-to-C-master/FAQ.md


Table of Contents
generated with DocToc

- Intro to C FAQ
- Contents
- Common Errors
- General C
- Strings
- Structs
- Types
- Arrays
- Pointers
- Heap, Stack, Dynamic Memory
- Questions
- runtests.sh: $'\r': command not found or Syntax error: word unexpected (expecting "do")
- runtests.sh: 3: 56059 Segmentation fault: 11 $VALGRIND
- Mac: malformed object error when running make tests
- Should I bother fixing compiler warnings?
- Can I accidentally destroy my computer running C code?
- Is a struct comparable to something in Python or JS? Is it like a class?
- Can you have default parameters in the structs?
- Why does unsigned char type accept a number when it’s clearly referring to a character?
- When I pass an array as an argument to a function, when do I use pointer notation and when do I use array notation ?
- Why do functions tend to return pointers to structs, and not just copies of the struct?
- Why do we subtract ‘0’ from a char to convert it from ASCII to a numeric value?
- When do I need a pointer to a pointer?
- Do other languages use pointers?
- [What’s the difference between “`int
x" 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 betweenputs(),fprintf(), andprintf()?](#whats-the-difference-between-puts-fprintf-and-printf) - [Why does025 == 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 tofree()some memory I allocated?](#what-happens-if-my-program-exits-but-i-forgot-to-free-some-memory-i-allocated) - [What's the difference between afloatand adouble, or between anintand along?](#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 anintcan 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 withprintf?](#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 theincompatible integer to pointer conversionerror?](#whats-the-incompatible-integer-to-pointer-conversion-error) - [Are there any other ways besidesmalloc()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 arestdin,stdout, andstderr?](#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) - [Isrealloc()the same as callingmalloc(), copying the data over, then callingfree()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 Ifree()aNULLpointer?](#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 anintis 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 betweenexit()andreturn?](#is-there-a-difference-between-exit-and-return) - [Why doesstrcmp()return0when strings match? Since0means "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 toNULLautomatically?](#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 anundefined 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 manyprintf()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 ismain()always at the bottom of the file?](#why-is-main-always-at-the-bottom-of-the-file) - [Why doesmain()return0? What does the return value mean?](#why-does-main-return-0-what-does-the-return-value-mean) - [Do we have to have amain()? Can there be more than one?](#do-we-have-to-have-a-main-can-there-be-more-than-one) - [Canmain()returnvoid? What aboutmain()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 andstruct`s?](#can-a-pointer-point-to-more-than-one-thing-what-about-to-arrays-and-structs)
- If variables are stored in memory, where are pointers stored?



# Intro to C FAQ

## Contents

### Common Errors
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
What does the “implicit declaration of function” warning mean? What is a segmentation fault and how do I stop it?
What’s the incompatible integer to pointer conversion error? What is an undefined symbol linker error?
What is “undefined behavior” in C? Should I bother fixing compiler warnings?

### General C

Can I accidentally destroy my computer running C code? Why do we subtract ‘0’ from a char to convert it from ASCII to a numeric value?
What’s the difference between puts(), fprintf(), and printf()? Why does 025 == 21?
What is the “true dev workflow” in C? Does C have garbage collection?
Why is C code faster than other languages? Are variables automatically initialized to zero when I declare them?
What VS Code plugins are good for C development? What are some additional C resources?
How do I get the debugger working? Does C have closures?
If I look at an uninitialized variable, will the garbage in it ever be leftover data from another process? What are stdin, stdout, and stderr?
How do I know which header files to #include for any particular function? What are bits, bytes, kilobytes, megabytes, and all that?
What’s the difference between #include with double quotes and #include with angle brackets? Why does main() return 0? What does the return value mean?
Is there a difference between exit() and return? What is “undefined behavior” in C?
How do I write preprocessor macros with #define? How do I make my own header files and what do I put in them?
How do I make my own Makefile? 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? Do we have to have a main()? Can there be more than one?
Can main() return void? What about main() with no parameters? Do we need a semicolon at the end of every line?

### Strings

Can you use + to concatenate two strings? For string literals like "Hello", are those stored on the stack or heap?
Why does strcmp() return 0 when strings match? Since 0 means “false” in C, that seems backwards.

### Structs
Is a struct comparable to something in Python or JS? Is it like a class?
Can you have default parameters in the structs? Why do functions tend to return pointers to structs, and not just copies of the struct?

### Types

Why does unsigned char type accept a number when it’s clearly referring to a character? What’s the difference between a float and a double, or between an int and a long?
What type should I use to hold numbers bigger than an int can hold? When do I have to explicitly cast a type to another type?
In C, can we assume an int is 32 bits?

### Arrays
When I pass an array as an argument to a function, when do I use pointer notation and when do I use array notation ?

### Pointers

When I pass an array as an argument to a function, when do I use pointer notation and when do I use array notation ? Why do functions tend to return pointers to structs, and not just copies of the struct?
When do I need a pointer to a pointer? Do other languages use pointers?
[What’s the difference between “`int x" and "int x`”?](#q1400) How do I print a pointer with printf?
How many levels of indirection can you have with pointers? int******? What’s the incompatible integer to pointer conversion error?
Should I declare a pointer to a thing, or just declare the thing? When you free a pointer, does it get set to NULL automatically?
Can a pointer pointer to more than one thing? What about to arrays and structs? If variables are stored in memory, where are pointers stored?

### Heap, Stack, Dynamic Memory

What happens if my program exits but I forgot to free() some memory I allocated? Are there any other ways besides malloc() to store things on the heap?
Is the C stack like the stack data structure? Is the C heap like a binary heap data structure?
Is 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?
When you free a pointer, does it get set to NULL automatically?

## Questions


### runtests.sh: $'\r': command not found or Syntax error: word unexpected (expecting "do")

If you see this error:

shell Running unit tests: : not foundtests.sh: 2: ./tests/runtests.sh: ./tests/runtests.sh: 4: ./tests/runtests.sh: Syntax error: word unexpected (expecting "do")

You have two options:

1. Open the file tests/runtests.sh in VS Code in whatever subproject folder
you’re working in, e.g. fizzbuzz. Click on the lower right of the screen
where it says CRLF. Choose LF. Save the file. Then the error should go
away.

2. You can do this from the command line with the tr command:

shell cd tests cat runtests.sh | tr -d '\r' > runtests.tmp mv runtests.tmp runtests.sh

The root of the problem is a setting in git that causes all newlines (LF) to
be converted to carriage-return/newline (CRLF). The script runtests.sh is a
bash script that bash runs, and bash
hates \r and pukes everywhere.

To cause git to not do newline conversion for future clones, run the
following:

git config --global core.autocrlf false

————————————————————————————————————


### runtests.sh: 3: 56059 Segmentation fault: 11 $VALGRIND

This means you got a segfault in your program. See What is a segmentation fault
and how do I stop it?


————————————————————————————————————


### Mac: malformed object error when running make tests

This is caused by an older version of the ar and ranlib packages being installed.
Sometimes these conflict with the versions installed with xcode.

If running MacPorts:

sudo port selfupdate sudo port upgrade cctools

If running Brew:

sudo brew update sudo brew upgrade gcc

————————————————————————————————————


### Should I bother fixing compiler warnings?

YES!

In C, a warning is the compiler saying, “I can build that, and I will, but it’s
probably going to do something really messed up that you don’t want.”

There are only a few warnings you can safely ignore.

If you’re absolutely sure the “unused variable” warning is OK, then you could ignore it. Or, better, add a line of code that silences the warning:

c void foo(int a) { (void)a; // Do nothing, but at least the compiler will be quiet

————————————————————————————————————


### Can I accidentally destroy my computer running C code?

Nope! Not with a modern OS.

If you’re running MS-DOS, then sure, you can do all kinds of things.
I once accidentally blew away all my BIOS settings with a program I
wrote and my computer wouldn’t boot.

But Windows, Linux, macOS, BSD, or any other mainstream OS from this century all
offer memory and resource protection that prevents you from changing memory
you’re not supposed to, or wiping out a disk you’re not supposed to, etc.

The worst you’ll see is a Segmentation fault message which means your program
tried to do something bad and the OS killed it.

————————————————————————————————————


### Is a struct comparable to something in Python or JS? Is it like a class?

It’s like a class, except with only data (fields, properties) attached to it.
There are no methods (functions) associated with it.

If you really want to pretend that you have methods on a struct, you can add
them as fields that are pointers to functions. The syntax is pretty obtuse,
and it’s not a natural or idiomatic thing to do in C.

Example:

```c
struct animal {
char
name;

// makesound is a pointer to a function with no parameters that returns void
void (make_sound)(void);
}

// Note how bleat() matches the signature for make_sound(), above
void bleat(void)
{
printf(“Baaaahhhh!\n”);
}

int main(void)
{
struct animal goat;

// C doesn’t have the concept of a constructor, so we have to do it by hand:

goat.name = “goat”;
goat.make_sound = bleat;

// Call the “method”:

goat.make_sound(); // Baaaahhhh!
}
------------------------------------------------------------------------ <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
void foo_default(struct foo
f)
{
f->a = 10; // Set defaults
f->b = 20;
f->c = 30;
}
```c struct foo x; foo_default(&x); // Set defaults x.a = 99; // Override default

When you declare a struct, you can also use an initializer to set the field
values:

c struct foo x = { .a = 10, .b = 20, .c = 30 };

————————————————————————————————————


### Why does unsigned char type accept a number when it’s clearly referring to a character?

Deep down, computers just deal in numbers (1s and 0s). They don’t know what
a character is. We humans have come up with a system wherein a number
_represents
a certain character. For example, we’ve agreed that A is 65.

(For information on what number represents what character, look up more detail
on ASCII encoding, or its modern superset
UTF-8.)

With that in mind, C really only deals in numbers. Even when you put a character
in single quotes, it’s still just a number. The only difference is in how we
interpret that number. That is, is it a value, like 65, or is it a character,
like 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

In C, whenever you have a character in single quotes like 'A', the compiler
treats it just like you’d put the number 65 there. (Or 66 for 'B', and so
on.)

The only difference between unsigned char and unsigned int is the number of
bytes that are used to represent the number. A char is onGe byte, and an int
is typically 4 bytes (but not always).

You can think of these additional bytes as analogous to adding more digits to
your numbers. The more digits you have, the more range you can store. Two
decimal digits only gets you from 0 to 99, but 8 digits gets you from 0 to
99999999. Similarly, one byte only gets you from 0 to 255, but 4 bytes gets you
from 0 to 4,294,967,295.

If you never needed numbers larger than 255, you could use unsigned char for
all your variables! (But since modern computers are at least as fast with ints
as they are with chars, people just use ints.)

————————————————————————————————————


### When I pass an array as an argument to a function, when do I use pointer notation and when do I use array notation ?

It’s a little-known FunFact that C doesn’t actually pass entire arrays to
functions. It only passes pointers to the first element in that array.

c int a[2000]; // "a" is a pointer to the first element in the array. // It's the same as &(a[0]). foo(a);

So when you declare your function, you can do any of these:

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])

and it treats them all as if you’d used:

c void foo(int *a)

There’s a difference if you want to use multidimensional arrays. You must
declare all the dimensions except the first one, which is optional. The compiler
needs to know the other dimensions so it can do its array indexing computations
correctly.

c int foo(int x[][30]) // 30 wide { return x[2][4]; } int main(void) { int a[10][30]; // 30 wide foo(a);

This only applies for multidimensional arrays. For 1-dimensional arrays, the
rule still applies; you still need to specify all dimensions except the first
one… but since there is only one, you never need to specify it.

————————————————————————————————————


### Why do functions tend to return pointers to structs, and not just copies of the struct?

It’s possible to do this:

c struct foo my_func(void) { struct foo f; f.x = 10; return f; // Return a copy of f }

as opposed to:

c struct foo *my_func(void) { struct foo *p = malloc(sizeof(struct foo)); p->x = 10; return p; // Return a copy of p }

But in C, it’s more idiomatic to return a copy of the pointer to the memory
allocated than it is to return a copy of the struct itself.

Part of the reason for this is that it takes time to copy data. A struct can
be very large depending on how many fields it has in it, but your average
pointer is only 8 bytes.

Since every time you return a thing, a copy of that thing gets made, it is
faster to copy a pointer than it is to copy a struct of any non-trivial size.

Finally, note that this variant always invokes undefined behavior and should
never be used:

c struct foo *my_func(void) { struct foo f; f.x = 10; return &f; // Return a copy of a pointer to f }

The reason is because f vaporizes as soon as the function returns (since it’s
just a local variable), so any pointers to it are invalid.

————————————————————————————————————


### Why do we subtract ‘0’ from a char to convert it from ASCII to a numeric value?

The code typically looks like this:

c char c = '2'; // ASCII '2' int v = c - '0'; // Convert into numeric value 2 printf("%d\n", v); // prints decimal 2

Remember that in C, a char is like a small int, and when you have a
character in single quotes like '2', C replaces that with the
ASCII value of that character.

In the case of our example, the ASCII value of '2' is 50. And we want to
convert that to the numeric value 2. So we clearly have to subtract 48 from
it, since 50 - 48 = 2. But why the '0', then?

Here’s part of the ASCII table, just the numbers:

|Character|ASCII value|
|:———-:|:————-:|
| '0' | 48 |
| '1' | 49 |
| '2' | 50 |
| '3' | 51 |
| '4' | 52 |
| '5' | 53 |
| '6' | 54 |
| '7' | 55 |
| '8' | 56 |
| '9' | 57 |

It’s no coincidence it’s done this way. Turns out that if you subtract 48 from
any ASCII character that is a digit, you’ll end up with the numeric value of
that ASCII character.

Example: '7' is value 55 (from the table), compute 55 - 48 and you get
7.

And since '0' is 48, it’s become idiomatic in C to convert ASCII digits to
values by subtracting '0' from them.

————————————————————————————————————


### When do I need a pointer to a pointer?

There are a few reasons you might need one, but the most common is when you pass
a pointer to a function, and the function needs to modify the pointer.

Let’s take a step back and see when you just need to use a pointer.

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? }

In the above example, foo() wants to modify the value of x back in main.
But, alas, it can only modify the value of a. When you call a function, all
arguments get copied into their respective parameters. a is merely a copy
of x, so modifying a has no effect on x.

What if we want to modify x from foo(), though? This is where we have to use
a pointer.

c 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! }

In this example, foo() gets a copy of a pointer to x. (Everything gets
copied into the parameters when you make a call, even pointers.)

Then it changes the thing the pointer points to to 12. That pointer was
pointing to x back in main, so it changes x‘s value to 12.

Great!

So what about pointers to pointers? It’s the same idea. Let’s do a broken
example:

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? }

What happened?

When we call alloc_ints(), a copy of q is made in p. We then assign into
p with the malloc(), but since p is just a copy of q, q is unaffected.

It’s just like our first version of foo(), above.

Solution? We need to pass a pointer to q to alloc_ints() so that
alloc_ints() can modify the value of q.

But q is already a pointer! It’s an int *! So when we take the address-of it
(AKA get a pointer to it), we’ll end up with a pointer to a pointer, or an int **!

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! }

Success!

————————————————————————————————————


### Do other languages use pointers?

Most all of them do, but some are more explicit about it than others. In
languages like Go, C, C++, and Rust, you have to use the proper operators when
using pointers and references.

But languages like JavaScript and Python do a lot of that stuff behind your
back. Take this Python example:

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?

Let’s look what happened there. We made a new object f, and we passed that
object to function bar(), which modified its x property.

After enough time with Python, we learn that it passes objects by reference.
This is another way of saying it’s using pointers behind your back. Behind the
scenes in Python, a is a pointer to f.

That’s why when we modify a.x, it actually modifies f.x.

And it’s also why when we set a to None, it doesn’t change f at all. a
is just a pointer to f, not f itself.

Let’s look at the C version of that Python program. This works exactly the same way:

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
property on the thing that a points to”.

And when we set a to NULL, it’s just modifying a, not the thing that a
points to (namely f).

————————————————————————————————————


### What’s the difference between “int *x“ and “int* x“?

Syntactically, nothing. They’re equivalent.

That said, the recommendation is that you use the form int *x.

Here’s why. These two lines are equivalent:

c int* x, y;

c int *x, y;

In both of them, x is type int*, and y is type int. But by putting the
asterisk right next to the int, it makes it look like both x and y are of
type int*, when in fact only x is.

If we reverse the order of x and y, we must necessarily move the asterisk
with x:

c int y, *x; // Also equivalent to the previous two examples

It’s idiomatic to keep the asterisk tucked up next to the variable that’s the
pointer.

————————————————————————————————————


### What does the “implicit declaration of function” warning mean?

This is the compiler saying “Hey, you’re calling a function but I haven’t seen a
declaration for that function yet.” Basically you’re calling a function before
you’ve declared it.

If you’re calling a library function like printf() or a syscall like stat(),
the most common cause of this warning is failure to #include the header file
associated with that function. Check the man page for exactly which.

But what if you’re getting the error on one of your own functions? Again, it
means you’re calling that function before you’ve declared it.

But what does declared mean?

A declaration can either be a function definition, or a function prototype.

Let’s look at a broken example:

c #include <stdio.h> int main(void) { foo(); // Implicit declaration warning!! } void foo(void) { printf("Foo!\n"); }

In that example, main() calls foo(), but the compiler hasn’t seen a
declaration of foo() 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! }

You can also use a function prototype to declare a function before it is used,
like so:

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"); }

Prototypes for functions that are callable from other source files typically
go in header files, and then those other source files #include them.

For functions that aren’t used outside the current .c file (e.g. little helper
functions that no other file will even need to call), those usually are either
defined at the top of the file before their first call. If that’s inconvenient,
a prototype can be placed at the top of the .c file, instead.

————————————————————————————————————


### What’s the difference between puts(), fprintf(), and printf()?

puts() simply outputs a string. It does no formatting of variables. Its only
argument is a single string. Additionally, it prints a newline at the end for
you.

c // 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 a
superset of puts(), 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);

Incidentally, there’s already a file open for you called stdout (standard
output
) which normally prints to the screen. These two lines are equivalent:

c printf("Hello, world!\n"); fprintf(stdout, "Hello, world!\n"); // Same thing!

There’s another already-opened file called stderr (standard error) that is
typically used to print error messages. Example:

c if (argc != 2) { fprintf(stderr, "You must specify a command line argument!\n"); exit(1); }

————————————————————————————————————


### Why does 025 == 21?

In C, any time you have a plain leading 0 on front of a number, the compiler
thinks your number is base-8 or octal.

Converting 025 to decimal can be done like so:

2*8 + 5*1 = 16 + 5 = 21

Octal is rarely used in practice, and it’s common for new C programmers to put
0 in front of a number in error.

One of the last common places to see octal numbers is in Unix file
permissions
.

————————————————————————————————————


### What is the “true dev workflow” in C?

There is none.

Initially, it was in a Unix-like system probably using
Makefiles to build the software. This
is the system we use at Lambda.

And modern C development under Unix still follows this pattern, except maybe
using autotools or
CMake.

But dev for specific platforms like Windows probably happens in Visual
Studio
instead of using
make and the rest of it.

————————————————————————————————————


### Does C have garbage collection?

Nope!

When it comes to freeing up memory that is no longer needed by the program,
there are basically two schools of thought:

Have the programmer manually manage that memory by explicitly allocating and
freeing it. (C’s malloc() and free() functions.)
Have the runtime automatically manage all that for you. (Garbage collection,
automatic reference counting, etc.)

C is too low-level to automatically manage memory usage for you.

One exception is that C automatically allocates and frees local variables just
like other languages you’re used to. You don’t have to explicitly call free()
for locals (and it’s an error to do so). You must call free for any and all
pointers to data that you got back from malloc() when you’re done with them.

Also, when a program exits, all memory associated with it is freed by the OS,
whether locals or malloc()d data.

————————————————————————————————————


### Why is C code faster than other languages?

The big thing is interpreted versus compiled.

Python and JavaScript are interpreted languages, which means another program
runs your program. It’s software running software. So you run python code with
the python program and JavaScript code with node, for example.

So in that case, we have the CPU running python, and the Python running your
Python program. Python is the middleman, and that takes execution time.

C is a compiled language. The compiler takes your C code, and produces machine
code. The CPU runs it directly. No middleman, so it’s faster.

But other languages are compiled (like Go, Swift, Rust, C++, and so on). Why is
C faster than them, typically?

It’s because C is a no-frills, minimalist language. The code you write in C is
actually quite close to the machine code that gets produced by the compiler, so
it doesn’t have to do a lot of things behind your back.

Additionally, people have been working on optimizing the output from C compilers
for over 45 years. That’s a big head start over other languages.

————————————————————————————————————


### What is a segmentation fault and how do I stop it?

It means you’ve accessed some memory you weren’t supposed to. The OS killed your
process to prevent it from doing so.

The trick is to find the line that’s causing the problem. If you get a debugger
installed, this can really help.

In lieu of that, use well-positioned printf calls to figure out what the last
thing your program does before it crashes.

The bug almost certainly has to do with pointers or arrays (which are just
pointers behind syntactic sugar).

Maybe you’re accessing a NULL pointer, or an array out of bounds, or modifying
something you’re not allowed to modify.

————————————————————————————————————


### What happens if my program exits but I forgot to free() some memory I allocated?

All memory associated with a process is freed when the program exits, even if
you forgot to free() it.

It’s considered shoddy programming to not free() all the things you
malloc()d, though. The OS will free it, but it’s bad style to rely on that.

————————————————————————————————————


### What’s the difference between a float and a double, or between an int and a long?

It’s all about the range of numbers you want to be able to store.

double can hold a more precise number than a float.

A float might only be precise up to 3.14159, but a double could hold
3.1416925358979, for example.

Likewise, an int might only be able to hold numbers up to 2 billion or so, but
a long could hold much larger numbers.

Use as little as you need. If a float or int can do the job, use them. If
you need more precision or larger numbers, step up to the next larger type.

————————————————————————————————————


### Can you use + to concatenate two strings?

No.

The reason is that strings are represented as char* types, and adding two
char*s together is not a defined operation in C.

Use the strcat() function in <string.h> to concatenate one string onto
another.

————————————————————————————————————


### Are variables automatically initialized to zero when I declare them?

No.

Always explicitly initialize your variables, whether they be pointers or regular
types. If you don’t, random garbage will be in them when you use them.

> Exception: local variable declared with static storage class (this concept
> is out of scope for Lambda) and global variables get initialized to zero
> automatically. But it’s still good form to explicitly initialize them.

————————————————————————————————————


### What type should I use to hold numbers bigger than an int can hold?

If you don’t need negative numbers, try unsigned int.

If that’s not enough, try long.

If that’s not big enough, try long long (yes, that’s a real thing).

If those aren’t enough, try unsigned long long.

If you just need big numbers, but not a lot of precision, you can use double or long double.

If you need big numbers and a lot of precision and none of the above are big
enough, check out the GNU Multiple Precision library. It
does arbitrary precision arithmetic to as much precision as you have RAM.

————————————————————————————————————


### What VS Code plugins are good for C development?

“C/C++ IntelliSense, debugging, and code browsing” by Microsoft is a good one.

————————————————————————————————————


### What are some additional C resources?

A great C book is The C Programming Language Second Edition, by Kernighan [the
“g” is silent] and Ritchie. It’s affectionately referred to simply as K&R2.

A less great book that is free online is Beej’s Guide to C
Programming
.

A good, comprehensive FAQ is the comp.lang.c FAQ.

There’s no “one true source” of C info online, unfortunately.

Googling printf example, for example, will get you good results.

Googling man printf will bring up the man page for printf.

————————————————————————————————————


### How do I get the debugger working?

The commonly-used debugger is called gdb (GNU Debugger).

Lambda’s own Brian Ruff got it working on the Mac, and made a
video covering it.

These
instructions

are reported good for WSL on Windows.

The CS Wiki
page

might help, but it’s slightly outdated since VS Code is in heavy development.

This video is reported good, as
well.

If you’re not seeing program output in the Output tab, try adding this to your
launch.json:

json "externalConsole": true

We recommend Googling for vscode gdb setup macos, substituting whatever
platform you’re on for macos and setting the search date range to be recent.

————————————————————————————————————


### How do I print a pointer with printf?

Use the %p format specifier. This will print the value of the pointer (i.e.
the memory address), not what it’s pointing to (i.e. the value stored at that
memory address.)

In practice, pointers are rarely printed except for debugging.

————————————————————————————————————


### Does C have closures?

No, not in the way that you’re used to from higher-level languages. What C does have that essentially acts as a poor man’s closure is function pointers. These are literally what their name implies: pointers to functions.

The standard library implementation of the quicksort sorting algorithm provides a good example of this. It’s function signature is
void qsort(void *base, size_t nitems, size_t size, int (*compare)(const void *, const void *))

The parameter to notice is the 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.

This signature is saying that the 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.

Function pointers are used to fulfill the same use case as closures. They can be used to pass some dynamic logic into another function. In the case of qsort, the function pointer points to a function that specifies how the comparison for the sorting should be done.

————————————————————————————————————


### If I look at an uninitialized variable, will the garbage in it ever be leftover data from another process?

Not on a modern OS. It would be a security risk, so the OS makes sure this never
happens.

————————————————————————————————————


### How many levels of indirection can you have with pointers? int******?

It’s effectively unlimited. But the more you have, the less readable your code
is.

In real life:

99.8% (roughly) of pointer usage is single indirection, like `int. * 1.5% (roughly) is double indirection, likechar. * And the remaining 0.5% is the rest of it. ------------------------------------------------------------------------ <a name="q3400"></a> ### What's theincompatible 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 besidesmalloc()to store things on the heap? Short answer: no. (We're assuming that bymalloc()we meanmalloc(),calloc(), andrealloc().) 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 callmalloc(). In Unix, that syscall isbrk()(orsbrk()). 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!”, andsis deallocated as soon as the function returns. But the dataspoints 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 bymalloc()andfree()so that we don't have to worry about it. ------------------------------------------------------------------------ <a name="q3900"></a> ### What arestdin,stdout, andstderr? 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 asstdout. (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 forprintf()`:

>
SYNOPSIS
> c > #include <stdio.h> >
> c > int > printf(const char * restrict format, ...); >

Note that if you type man on the command line for a particular function, you
might a manual page for another command that isn’t the C function. In that case,
you have to specify the proper section of the manual for the function.

Try section 3 for library functions, and section 2 for syscalls.

Example looking for printf() in section 3:

shell man 3 printf

And section 2 for the mkdir() syscall:

shell man 2 mkdir

————————————————————————————————————


### When do I have to explicitly cast a type to another type?

Barely ever.

C is pretty good about conversions, and you should be able to build almost
everything without casting.

What if you need constant types?

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;

What if you need to cast a void pointer?

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);

Some exceptions:

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");

————————————————————————————————————


### Is realloc() the same as calling malloc(), copying the data over, then calling free() on the original pointer?

Effectively, yes, it’s the same. Practically, you should use realloc().

realloc() might be more efficient because in some cases it might not have to
copy.

If you grow the space and realloc() knows there’s extra unused memory right
after the existing space, it will simply tack that addition space onto the end
of the memory region and not bother moving the data.

Also, if you shrink the space, realloc() will likely not copy the data. It’ll
just truncate it.

————————————————————————————————————


### What happens if I free() a NULL pointer?

Nothing. It’s a no-op).

Basically, inside the library code for free(), there’s something that looks
like this:

c void free(void *ptr) { if (ptr == NULL) { return; }

According to the C99
spec
section
7.20.3.2p2:

> The free function causes the space pointed to by ptrto be deallocated,
> that is, made available for further allocation.
If ptr is a null pointer,
> no action occurs. Otherwise, if the argument does not match a pointer
> earlier returned by the calloc, malloc, or realloc function, or if the
> space has been deallocated by a call to free or realloc, the behavior is
> undefined.

————————————————————————————————————


### What are bits, bytes, kilobytes, megabytes, and all that?

A bit is a single 1 or 0.
That’s all the numbers it can represent.

A nibble is 4 bits. It can represent numbers from 0b0000 to 0b1111 (binary
numbers), which is equivalen to 0 to 15 in decimal.

A byte is 8 bits. It can represent numbers from 0b00000000 to 0b11111111,
or 0 to 255 decimal. (Historically, bytes could be other numbers of bits,
but on all modern systems, it’s always 8 bits. Octet is another term for a
number that is specifically 8 bits long.)

A kilobyte is 1024 bytes. (1024 is 210.)

A megabyte is 1024 kilobytes (1,048,576 bytes).

A gigabyte is 1024 megabytes (1,073,741,824 bytes).

A terabyte is 1024 gigabytes (1,099,511,627,776 bytes).

A petabyte is 1024 terabytes (1,125,899,906,842,624 bytes).

If you’re used to SI unit
prefixes
,
you might be wondering why in computers kilo means 1024 instead of 1000 like
it normally does. In short, it’s for historic reasons. 1024 was close enough, so
computer programmers adopted the SI prefixes, albeit with a slightly different
value.

And that gets confusing. When I say kilobyte, do I mean 1000 bytes or 1024 bytes?

In almost every single case, kilobyte means 1024 bytes. (Hard drive and SSD
sizes are sometimes an exception to this rule.)

To remove the ambiguity, you can use a binary
prefix
, where you’d say kibibyte
if you specifically meant 1024 bytes.

That said, in conversation, if someone says kilobyte, odds are extremely high
they mean 1024 bytes, not 1000 bytes. kibibyte is uncommonly used in
conversation.

————————————————————————————————————


### In C, can we assume an int is 32 bits?

No.

You can assume an int is at least 16 bits (2 bytes).

There is only one type that has a guaranteed size: sizeof(char) will always be
1 byte. (Same for unsigned char and signed char.)

Never write code that hardcodes or assumes the size of anything other than
char.
Always use sizeof to get the size.

There’s a great Wikipedia article
that lists the minimum sizes of the types. If you want your code to be portable
to other compilers and systems, choose a type with a minimum size that works for
the numbers you need to hold.

————————————————————————————————————


### What’s the difference between #include with double quotes and #include with angle brackets?

In general, use double quotes for your own header files, and angle brackets for
built-in system header files like <stdio.h>.

When you #include "foo.h", it looks for foo.h in the same directory as the
source file doing the including.

You can also use relative paths, and it’ll look relative to the including source file:

c #include "../bar.h" #include "somedir/baz.h"

When you #include <frotz.h>, it looks in the system include directories for
the header file. This is where all the built-in header files are installed. On
Unix machines, this tends to be the /usr/include directory, but it depends on
the OS and compiler.

————————————————————————————————————


### Should I declare a pointer to a thing, or just declare the thing?

It depends on if you want a thing or not, or if you just want to point to
another,
already-existing thing.

If there is not an already-existing thing, then making a pointer doesn’t make
sense. There’s no existing thing for it to point to.

This does not declare an int:

c int *p;

There’s no int there. We have an int pointer, but it’s uninitialized, so it
points to garbage and can’t be used.

So the question to ask is, “Do I already have an existing thing that I can point
to? And if so, do I want to point to it?” If the answer to either is “no”, then
don’t use a pointer.

Example:

c int a = 12; // here's an existing thing

So the answer to the first part of the question is yes. And do we want a pointer
to it? Sure, why not?

c int *p = &a; // and there's a pointer to it

————————————————————————————————————


### Is there a difference between exit() and return?

If you’re in the main() function, then no.

If you’re in any other function, then yes.

exit() always exits the running process, no matter where you call it from.

If you’re in main(), return also exits the running process.

If you’re in any other function, return just returns from that function.

————————————————————————————————————


### Why does 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 the
same, there is zero difference, so it returns zero.

This gives strcmp() a little extra power over just returning a boolean
true/false value.

For example, if you run this:

c strcmp("Antelope", "Buffalo");

it will return less-than zero because “Antelope” is alphabetically less than
“Buffalo”.

So not only can it tell you if the strings are the same, it can tell you their
relative sort order. And that means you can pass it in as the comparator
function to the library built-in qsort() function.

————————————————————————————————————


### What is “undefined behavior” in C?

There are a number of things you’re allowed to do in C where the compiler is
allowed to produce code that can have any indeterminate effect. It could work,
it could crash, it could sort of work, it could crash sometimes and not others,
it could crash on some machines and not others.

When you write code that does that, we say the code has undefined behavior.

Wikipedia has a number of practical
examples
, and if you look in
the C99 Language Specification, Annex
J.2
you can get a
list of all the things you can do that cause undefined behavior.

At Lambda, the most common things you can do to get UB is using bad pointer references.

Accessing memory you’ve already free()d. Freeing memory more than once.
Accessing an array off the end of its bounds. Dereferencing a pointer that points to garbage.
Dereferencing a NULL pointer. Returning a pointer to a local variable and dereferencing that.

GCC with -Wall -Wextra should warn on a lot of these. This is why it’s
really important to fix all those warnings.

————————————————————————————————————


### When you free a pointer, does it get set to NULL automatically?

No.

Furthermore, free() can’t do that even if it wanted to.

c int *p = malloc(100 * sizeof(int)); free(p);

When we call free(), it gets a copy of the pointer we pass in. (
All
functions
always get copies of all arguments you pass in.) As such,
free() could set its copy of p to NULL, but that doesn’t affect our
original p.

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

(Note that it’s undefined behavior to dereference a pointer after
you’ve free()d it. But it’s still OK to change that pointer’s value.)

————————————————————————————————————


### How do I write preprocessor macros with #define?

You’ve probably already seen simple cases of #define like this:

c #define antelopes 10 int main(void) { printf("Antelopes: %d\n", antelopes); // prints 10

What’s actually happening here is the preprocessor runs through the code
before the compiler ever sees it. It manipulates the above code to read:

c int main(void) { printf("Antelopes: %d\n", 10); // prints 10

and then hands it off to the compiler. The compiler itself knows nothing about
#define.

These #define macros can also accept parameters that make them behave like
functions in a way.

Example:

c #define square(x) x * x // Not quite Right. See below. int main(void) { printf("9 squared is %d\n", square(9));

Then the preprocessor generates this code for the compiler:

c int main(void) { printf("9 squared is %d\n", 9 * 9);

It just substitutes the parameters in as-is.

Another example:

c #define square(x) x * x // Not quite Right. See below. int main(void) { printf("3 + 2 squared is %d\n", square(3 + 2));

Then the preprocessor generates this code for the compiler, merely substituting
in exactly what the dev entered as an argument:

c int main(void) { printf("3 + 2 squared is %d\n", 3 + 2 * 3 + 2);

Except that prints 11, when it should print 25 (3 + 2 is 5, and 5 squared is
25)! We have a bug!

Of course, this has to do with the order of operations. We wrote:

c 3 + 2 * 3 + 2

when what we really wanted was:

c (3 + 2) * (3 + 2)

For this reason, you should
always put extra parentheses around the macro
body, and around every parameter in the body:

c #define square(x) ((x) * (x))

And now the expansion of our line will be:

c ((3 + 2) * (3 + 2))

That will work in all expected cases.

————————————————————————————————————


### What is an undefined symbol linker error?

This happens when you’ve called a function, and the linker can’t find it in
any of the source files or libraries that you’re using.

Do you have a warning about an implicit function declaration from the compiler
before this error? If so, fix that first.

If not, it could be that you haven’t specified all the source files needed on
the command line. If you have two sources one.c and two.c, and one calls
functions that are in the other, then you have to pass both into the compiler:

gcc -Wall -Wextra -o myexe one.c two.c

Alternately, is there a Makefile present? If so, the author of the software
probably intends for you to use that to build the project, rather than trying to
figure out the command line on your own.

Try just running:

make

and seeing if that works. Make will show you the command lines it’s running to
make the build happen so that you don’t have to.

The linker is part of the entire compilation system. Basically, the compiler
takes your C source files, makes sure they’re syntactically correct, and turns
them into things called object files, one per source file. These object files
might refer to functions that they don’t contain, like printf(), for example.

Then the linker takes all the object files and libraries and puts them together
into a single binary executable that you can run. It makes sure that all the
functions used are present in the files specified.

(Normally this whole process takes place behind the scenes and you don’t have to
think about it. Sometimes Makefiles will generate object files that you might
see, e.g. foo.o. .o is the extension for object files on Unix, or .obj in
Windows.)

If the linker can’t find a function in any of the object files or libraries, it
pukes out an error. It can’t call a function if it can’t find it.

In this example, the code calls a function foobaz(), but the linker can’t find
that in any of the object files:

Undefined 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)

(Ignore the leading underscores on the function names.)

To fix, we need to figure out which file foobaz() is defined in, and make sure
to pass that filename to the compiler when we build.

————————————————————————————————————


### How do I make my own header files and what do I put in them?

If you have a .c file and you want to be able to use functions, #defines, or
globals from that file in another file, you’ll need to make a header file
(.h file) to hold the function prototypes, #defines, and references to any
globals.

Example:

c // square.c long square(long x) { return x * x; }

If you want to use square() from a different file, you need a way for that
file to know the square() function declaration so the compiler can check to
see that you’re using it correctly.

For that, we need a corresponding .h file:

c // square.h #ifndef SQUARE_H // Prevent multiple #includes #define SQUARE_H // Function prototypes extern long square(long x); #endif

The #ifndef SQUARE_H is called the guard macro, and is there to prevent the
header file from being included multiple times. (This can be a problem if you
have header files that include other header files in a cycle.) #ifndef means
“if not defined”. Basically, SQUARE_H is acting as a boolean that gets set the
first time through and so prevents the content of the header file from being
included again.

All header files have wrappers like that. The name of the preprocessor variable
is conventionally FILENAME_H, but could be anything as long as it’s unique in
the project.

The keyword extern indicates to the compiler that the function in question is
not defined here; it is defined in another file. In this header file, extern
is the default storage class for functions, so it’s redundant. But it’s really
common to see in any case.

Now that we have a header file, we can #include that from somewhere else. Use
double quotes in the #include to indicate that the compiler should look in the
current directory for the header file.

c #include "square.h" int main(void) { int x = square(5);

When you build, you must specify all .c files on the command line:

gcc -Wall -Wextra -o main main.c square.c

————————————————————————————————————


### How do I make my own Makefile?
IMPORTANT: Any lines shown indented in any Makefile must begin with a
single TAB character! Spaces will not work. If you use spaces to indent,
you’ll likely see a Missing separator error when you try to make.

make myexecutable: mysource1.c mysource2.c gcc -Wall -Wextra -o myexecutable mysource1.c mysource2.c

The above Makefile says:

“If mysource1.c or mysource2.c are newer than myexecutable, then run the
following commands in the indented block below this line.”

And by “newer”, we mean they have a more up-to-date timestamp, i.e. they’ve been
saved more recently than myexecutable has been created.

If any of the sources are newer than the executable, the executable should be
rebuilt to get it up to date. And that’s what make does.

We say that myexecutable depends on mysource1.c and mysource2.c. If
either of those dependencies change, myexecutable must be rebuilt.

This also works:

make myexecutable: mysource1.c mysource2.c gcc -Wall -Wextra -o $@ $^

$@ is a make macro that means “substitute whatever is left of the : right
here” (in this example, myexecutable).

$^ is a make macro that means “substitute whatever is to the right of the :
right here” (in this example, mysource1.c mysource2.c).

You can also define constants:

make SRCS=mysource1.c mysource2.c TARGET=myexecutable $(TARGET): $(SRCS) gcc -Wall -Wextra -o $@ $^

You can have multiple recipes per Makefile:

make target1: source1.c gcc -Wall -Wextra -o $@ $^ target2: source2.c gcc -Wall -Wextra -o $@ $^

If you type make, it will build the first target in the file by default. A
target is a file that is generated by running make, i.e. a file to the left of
a :. 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

If you want all targets to get built by default, you can put a dummy first
target in that depends on the other targets. This target is called all by
convention. It typically doesn’t run any commands and is only there to set up
the dependency hierarchy with the other recipes.

make # 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

That .PHONY: all line is a GNU make extension that indicates that all is not
a real file. Normally targets refer to real files, and make will check to see if
that file exists on disk or not before trying to build it. But in this case,
all is not a file; it’s just recipe we’re using to get all targets to build by
default.

GNU make documentation

————————————————————————————————————


### Why are there so many printf() variants? How do I know which one to use?

The way to approach it is when you think, “I need something just like
printf(), except instead of to the screen, it prints to x,” then you look in
the man page and see if there’s a printf() variant that suits your needs.

The first letters let you know what speciality each one has:
printf(): stock, no frills.
fprintf(): “file printf”; print to a specified `FILEinstead of tostdout. *sprintf(): "string printf"; print to a string instead of tostdout. *snprintf(): "string printf, with a limited count"; print to a string instead of tostdout, and also specify the maximum number of characters thatsnprintf()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_ usesprintf(), preferringsnprintf()instead. *vprintf(): "variadic printf"; anything that starts with avinprintfland 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 ismain()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 functionsmain()needs have to be declared beforemain(), which means "above" it in the file. You can also declare functions with _prototypes_ and then put the definition ofmain()before the definition of the other functions. It's more common for C devs to putmain()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 doesmain()return0? What does the return value mean? It doesn't _have_ to. The return value frommain()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 theexit()call, passing an exit status code to it as an argument. Usingreturninmain()is equivalent to callingexit(). In bash, you can look at the exit status of the previous command byechoing the$?shell variable. In the following example, we usegrepincorrectly, and it exits with status2to indicate that. Whereas we uselscorrectly, and it exits with successful status0: ```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, andwait()is used to get the exit status back from that process. ------------------------------------------------------------------------ <a name="q5900"></a> ### Do we have to have amain()? 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 calledmain. There can only be onemain()in a program. (There can only be one of any function, for that matter.) It could be that individual files don't have amain()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 amain(), itself. Your program has themain(), 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 amain()of its own. Other programs simply use the library. ------------------------------------------------------------------------ <a name="q6000"></a> ### Canmain()returnvoid? What aboutmain()with no parameters? No. The function signature formain()` must be one of the following:

```c
int main(void)
int main(int argc, char *argv[])
int main(int argc, char
argv)
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
int main(void) // OK
int main() // Obsolete
------------------------------------------------------------------------ <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:c
int foo(int param1, int param2)
{

return 0;
}
This function signature states that it receives two integer parameters and returns an integer. Here's another example:c
void bar(int[])
{

}
This 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
gcc -o hangman hangman.c
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
./hangman antidisestablishmentarianism
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
void malloc(sizet size);
`` Asize_ttype is nothing more than a really large int for representing large sizes. The other thing to note is that themallocfunction returns avoidpointer. Thevoidtype simply means the type could be anything; essentially, we don't know the type up front. Somallocreturns us a pointer of unspecified type that points to a chunk of memory with the specified size. Well, if there's thisvoidtype, what's to stop us from just declaring everything as avoidtype? The drawback to thevoidtype 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 avoidpointer is pointing to, plusvoid` 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.

Here are some pretty typical malloc calls:
```c
int
100ints = malloc(100 sizeof(int));

char
50_chars = malloc(51);
`` The firstmalloccall allocates enough space for 100 ints. Themalloccall initially returns avoid` 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.

With the second 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 chars each fit within a single byte, so 51 bytes will hold 51 chars, 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.

So, we still need to know how much data we want to fit inside this chunk of 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 mallocd memory and then resize that chunk of memory, but for this module we’re just going to stick with malloc.

We’ll talk about one of the main usages of malloc in the next module.

## Working with Void Pointers Directly

Getting a void pointer back from a 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.

A common use-case for void pointers is when we want to write a function that is generic over types, i.e., it doesn’t care what the types of its inputs are. Let’s assume we have the following function signature:

c void foo(void *a, void *b);

Here, 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;

Here we cast both void pointers to be char pointers. Note that this doesn’t actually transform the data these two pointers point to, we aren’t changing the underlying data’s type. We just need to temporarily assign a concrete type to these pointers so that we can do something with them inside our foo function.

We pick 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.




1-projects/Intro-to-C-master/pointers/

### 1-projects/Intro-to-C-master/pointers/README.md


Table of Contents generated with DocToc

- Pointers
- Differences between arrays and pointers
- Declaring pointers
- Pointer Arithmetic
- Use cases of pointers



# Pointers

From the perspective of C, your entire computer is nothing more than a giant array of memory into which values can be written. Given this analogy, when we’re dealing with arrays, how do we access some value stored inside of said array?

We do it with indices that point to a specific spot in the array. As it turns out, pointers in C are simply just that: indices into the giant array of memory that is your computer. More formally, a pointer is a memory address that tells the program where to go and find some variable value.

Those funky asterisks you might have seen already indicate a pointer (you might have heard them referred to as references in other languages). Let’s look at the function signature we had for the reverse_string function you wrote in the strings module:
c char *reverse_string(char s[]) { ... }
The 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.

It turns out that pointers and arrays in C are very much interconnected, so much so that it’s pretty difficult to separate the topic of pointers from arrays. Every pointer points to the first spot of a contiguous portion of memory, and as we’ve already established, C pretty much just treats your computer as a giant array of memory.

Indeed, there are many similarities between how you work with arrays and how you work with pointers. However, let’s first talk about the differences between them.

## Differences between arrays and pointers

Even though C let’s you work with pointers and arrays in many of the same ways, don’t think of them as synonomous. C’s 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 };
Calling 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;
So we have an array named 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.

There are a few other such sorts of edge cases, but for the most part they’re pretty nuanced. So while, again, you shouldn’t be thinking of pointers being arrays and vice versa, you would interface with them in many of the same ways.

## Declaring pointers

As showcased above, declaring a pointer is as simple as putting an asterisk after the type declaration of a variable. This signifies that we have a pointer to the declared type with the specified name.

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] */

There’s nothing new going on in the first two lines of this block. Starting at the third line with 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.

In the next line, 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.

Next we have *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!

Lastly, we have 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.

## Pointer Arithmetic

When we index into arrays in JavaScript, we can do things like:
javascript const someArray = []; for (let i = 0; i < array.length; i++) { someArray[i] = array[i + 1]; }
We can index into arrays by performing arithmetic on the index. With pointers in C, we can do the exact same thing!

Let’s say we have a pointer to a string like so:
c char *str = "Some string";
We can loop through the characters in this string by doing this:
c while (*str != '\0') { printf("%c", *str); str++; }
This loop will print out each character in the string. Indeed, this loop is pretty much analogous to iterating through an array. More precisely though, on each iteration of this while loop, we’re incrementing the spot the pointer points to by one. At the beginning of the loop, *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.

Armed with this knowledge regarding pointers and pointer arithmetic, we can rewrite the 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; } }

## Use cases of pointers

Lastly, let’s talk a bit about why pointers are useful. The number 1 most important reason as to why pointers exists, the motivation for their invention in the first place, is that the C compiler needs every type to have a known size at compile time. This is a pretty big restriction, and it’s one that comes with the territory of working in a strongly-typed language.

But there’s lots of data that we won’t know the size of until runtime. What if we need to accept user input? How do we know the size of that input before the user even gives it to us? What if we need to add data to some data structure at runtime? These are all valid questions, and the workaround to them is pointers.

We can not tell the compiler the size of certain types upfront, so what we do instead is use something of a known size to refer to things of unknown size. That is exactly what pointers are. They’re a type with a known size that tells us how to access something of an unknown size.

So whenever we need to hold something like a string or a data structure whose size depends on something that can only be known at runtime, you can bet such structures will be referred to by a pointer.

A slightly related use case is passing by reference vs. passing by value when we’re talking about passing parameters to functions. You’ve probably at least heard of these terms used in other languages. Passing by value means that we’re passing a copy of the value to a function as a parameter. This results in additional work and memory overhead, but means we have a fresh copy of the data to work with, which is desirable in certain scenarios.

On the flip side, passing by reference means we’re passing a pointer to the data. In other words, the function doesn’t have access to the data itself, but it is able to find that data in memory via the passed-in pointer. There’s no need to copy the data, but then that also means the function doesn’t have exclusive access to the data either.





1-projects/Intro-to-C-master/quicksort/

### 1-projects/Intro-to-C-master/quicksort/README.md


Table of Contents generated with DocToc

- Quicksort



# Quicksort

For this module, you’re going to implement a quicksort function. Feel free to reference prior implementation(s) and simply transpose the code from one language to the other. Typically this is a good way to practice new languages you’re trying to learn: by transposing code you’ve written from one language to another.

In case you haven’t seen the quicksort algorithm before, here’s a Python implementation that you can use as a reference:
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
Keep in mind that since Python is a higher-level language than C, it provides language features and constructs that aren’t available in C. For example, the swapping syntax in Python isn’t going to work in C without some additional work. The 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.

Navigate to the quicksort.c file. Implement your quicksort algorithm, then type make tests to check if you have all the tests passing.




1-projects/Intro-to-C-master/

### 1-projects/Intro-to-C-master/README.md


Table of Contents generated with DocToc

- Introduction to the C Programming Language
- What you’ll be doing in this sprint
- Troubleshooting



# Introduction to the C Programming Language

Welcome to your first C sprint!

The two main goals of this sprint are as follows. The first goal is to give
students the experience of learning a different programming language. This is
important because it is very rarely the case where you are familiar and
comfortable with all of the technologies/programming languages that you’ll be
using on a job as a professional developer. Being able to pick up
languages/technologies you aren’t familiar with is a skill that we want to
cultivate in students during their time here at Lambda, which is why we expose
students to both C and Python during their time here.

The second goal is to start peeling away the layers of abstraction that students
are used to from working with JavaScript and Python. Indeed, when you boil it
all down, both JavaScript and Python are implemented in C in the first place! C
supports very few of the abstractions that students are used to, because C has
you working directly with the memory on your machine. Higher level languages
abstract this fact away from you, at the cost of raw performance and control.
Essentially, you’re getting exposed to the nitty-gritty seedy underbelly of your
computer’s inner workings, and being in such a place for extended periods of
time is not for everybody.

That being said, we the instructors do believe that every developer needs to get
a taste of C in order to really be able to delve into the inner workings of how
exactly software communicates and interfaces with hardware. That’s not really
something JavaScript or Python will expose you to. Additionally, once you get
acclimated to C, the language provides you with unparalleled control over how
your code gets executed on your machine. Some people find the sheer amount of
control that C provides you intoxicating.

But before any of that happens, you’ve gotta get your feet wet with C. So without further ado, let’s get started!

## What you’ll be doing in this sprint

If you haven’t gotten your C compiler up and running, please do that first. You’ll find instructions on how to do that for your specific platform here: https://github.com/LambdaSchool/CS-Wiki/wiki/Getting-Your-C-Compiler-Installed.

This sprint is structured very much like how your introductory JavaScript sprints are structured. There are independent modules, each with their own set of exercises that you’ll be tasked with implementing. There’s an associated set of tests for all the exercises in each module, which you’ll run against your code to check to see if it behaves and functions correctly. The order in which you should tackle these exercises is this:

- [ ] fizzbuzz
- [ ] strings
- [ ] pointers
- [ ] malloc
- [ ] structs

Stretch Goal Problems
- [ ] queue
- [ ] quicksort
- [ ] hangman

Inside a module directory, type make tests (just like with the npm install
command needing a package.json file, the make command requires a
Makefile), which will do a couple of things as specified by the Makefile.
These include compiling your source code inside that module, linking all of the
included header files and libraries, and running the tests for that module. Once
you’ve gotten all of the tests to pass for that module, move on to the next one.

The code inside the main functions are for if you want to compile your file
into an executable for debugging purposes. You don’t need to edit any of the
code in the main functions. Just type make to compile an executable. Then
type ./NAME_OF_EXECUTABLE (not in caps) to run it, which will execute the code
inside that program’s main function.

## Troubleshooting

For things that go wrong, check out the troubleshooting doc.





1-projects/Intro-to-C-master/strings/

### 1-projects/Intro-to-C-master/strings/README.md


Table of Contents generated with DocToc

- Arrays in C
- Strings in C



# Arrays in C

In C, arrays are nothing more than contiguous chunks in memory that store a single type of data. Additionally, arrays are static in size, at least in their most basic form. That means that we’ll typically need to know the size and/or the amount of data a particular array will be storing when we initialize it. Unlike in higher-level languages, we can’t just simply declare an empty array and then start pushing elements onto it willy-nilly.

If we wanted to declare an array of integers, we might do it like so:
c int int_array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Note the syntax here. We need the square brackets after the array’s name to indicate that it is an array to the compiler, and when we declare the initial values of the array, we surround them with curly braces, not square brackets.

Another way we might declare an array is the following:
c int another_int_array[20];
With this, we’ve declared a statically-sized integer array that has space for 20 integers. There’s nothing in it initially, but we can now start populating it with integers (and only integers) up to it’s specified capacity.
c int n = 20 / sizeof(int); for (int i = 0; i < n; i++) { another_int_array[i] = i; }
While we allocated 20 bytes worth of space into the array, keep in mind that a single integer actually takes up more than a single byte of space in memory. To get around this, we can use the 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.

If we try to add more integers than the array has capacity for, we’ll get a segmentation fault error, which means we’ve tried to access memory we don’t have permission to access. That’s what happens when we go outside of an array’s bounds.

We’ll talk later on about how to handle dynamically-sized data.

# Strings in C

So what do arrays have to do with strings? Everything, as it turns out. Strings in C are actually nothing more than arrays of characters. In fact, when declaring a string, you might do it like this:
c char[] = "Hello world!";
Under the hood, this declaration becomes
c char[] = { 'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!', '\0' };
The \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.

IMPORTANT NOTE: So far, every language you’ve worked in has not differentiated between single and double quotes. In C, these actually make a difference. Single quotes delineate a single character, while double quotes delineate string literals. So for example, "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.

The compiler will yell at you if you try to store multiple characters in single quotes.





1-projects/Intro-to-C-master/structs/

### 1-projects/Intro-to-C-master/structs/README.md


Table of Contents generated with DocToc

- Structs
- Initializing structs
- Freeing memory
- The typedef Keyword



# Structs

Another limitation that exists in C that we haven’t brought up yet is the fact that arrays in C can only hold a single type of data. Being able to stick any type of data all into the same array is a feature that you probably take for granted coming from JavaScript. Well, you can’t do that in C!

Enter structs. Structs are basically C’s version of a poor man’s object. We can store values of different types inside a struct, which is awesome, but we need to declare the types of the fields that the struct can hold up front. That being said, structs are instrumental when it comes to implementing data structures and more complex types in C.

## Initializing structs

Let’s look at a simple struct definition:

c struct Cat { char *breed; char *color; int age; };
This declares the shape of the Cat struct. Now we’ll need to create an instance of it if we want to want to actually use it. Well, what actually defines an instance of something?

In this case, an instance of a struct is some chunk of memory that has been initialized with the shape of said struct. So we’ll need to allocate memory for our Cat struct. We can do that with this:

c struct Cat *a_cat = malloc(sizeof(struct Cat));
So we’re handed a pointer to a chunk of memory that holds exactly the right amount of data for a single instance of a Cat. We take that and cast it to a pointer with the type of 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;
What’s with these funky arrows? Coming from JavaScript, you’re used to using dot notation for accessing members of an object. Structs are poor man’s objects, so shouldn’t dot notation work here?

The answer is that dot notation is a thing in C, but because in this case we have a pointer to a struct, we need to perform a dereference first in order to get to the actual data the struct contains. That’s what the arrow syntax does. It performs a dereference first and then accesses the struct member.

Basically, you can think of it like this:
c a_cat->breed == (*a_cat).breed

Allocating memory for structs is one of the most important functions that 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 ints 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.

Let’s say we have a function called 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); }
That’s right, we’ll need to call 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.

## Freeing memory

Yet another abstraction that you’re used to from higher-level languages is the garbage collector. A garbage collector is typically part of a languages runtime, and its job is to clean up memory that is used up by your programs.

For example, after you write some JS program that has a bunch of arrays and objects, what happens to the memory that was needed to order to hold those instances? In a high-level language, a garbage collector goes through and figures out that those arrays and objects are no longer being used. It then deallocates or frees up that memory so that it can be reused by other programs. You the programmer never needs to worry about cleaning up after yourself; it’s all handled for you automatically!

C doesn’t baby you around like that. It expects you to handle the clean up like the grown up you are. Learning to clean up after yourself can get difficult when you’re writing more advanced programs in C. For simple programs though, it can be as simple as calling the function free after you’re done with some piece of malloc‘d memory.

The 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 freeing it!

Let’s codify this into a simple heuristic that isn’t too hard to memorize:
> For every call to malloc there should be an accompanying call to free.

A couple of common errors that arise when it comes to freeing memory are:
1. Forgetting to call 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.
2. Calling 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).

Going back to our Cat struct, we might want to have a 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); } }

## The typedef Keyword

In all the previous example code, we’ve had to prepend every type we created with struct. 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;

We’ll add the 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.

Now, whenever we want to use our 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!




1-projects/Intro-to-C-master/

### 1-projects/Intro-to-C-master/TROUBLESHOOTING.md


Table of Contents generated with DocToc

- runtests.sh: 4: Syntax error: word unexpected (expecting "do")
- Mac: malformed object error when running make tests



## runtests.sh: 4: Syntax error: word unexpected (expecting "do")

Chief. Windows

If you see this error:

Running unit tests: : not foundtests.sh: 2: ./tests/runtests.sh: ./tests/runtests.sh: 4: ./tests/runtests.sh: Syntax error: word unexpected (expecting "do")

You have two options:

1. Open the file tests/runtests.sh in VS Code in whatever subproject folder
you’re working in, e.g. fizzbuzz. Click on the lower right of the screen
where it says CRLF. Choose LF. Save the file. Then the error should go
away.

2. You can do this from the command line with the tr command:

cd tests cat runtests.sh | tr -d '\r' > runtests.tmp mv runtests.tmp runtests.sh

The root of the problem is a setting in git that causes all newlines (LF) to
be converted to carriage-return/newline (CRLF). The script runtests.sh is a
bash script that bash runs, and bash hates \r and pukes everywhere.

To cause git to not do newline conversion for future clones, run the
following:

git config --global core.autocrlf false

## Mac: malformed object error when running make tests

This is caused by an older version of the ar and ranlib packages being installed.
Sometimes these conflict with the versions installed with xcode.

If running MacPorts:

sudo port selfupdate sudo port upgrade cctools

If running Brew:

sudo brew update sudo brew upgrade gcc





1-projects/JavaScript-III-master/

### 1-projects/JavaScript-III-master/README.md


Table of Contents generated with DocToc

- JavaScript - III
- Set Up The Project With Git
- Assignment Set Up
- The this keyword
- Prototype



# JavaScript - III

This challenge focuses on using the this keyword as well as getting comfortable with prototypes by building out a fantasy themed video game.

## Set Up The Project With Git

Follow these steps to set up and work on your project:

[ ] Create a forked copy of this project. [ ] Add your project manager as collaborator on Github.
[ ] Clone your OWN version of the repository (Not Lambda’s by mistake!). [ ] Create a new branch: git checkout -b <firstName-lastName>.
[ ] Implement the project on your newly created <firstName-lastName> branch, committing changes regularly. [ ] Push commits: git push origin <firstName-lastName>.

Follow these steps for completing your project.

[ ] Submit a Pull-Request to merge Branch into master (student’s Repo). Please don’t merge your own pull request [ ] Add your project manager as a reviewer on the pull-request
[ ] Your project manager will count the project as complete by merging the branch back into master.

## Assignment Set Up
Complete all the exercises as described inside each assignment file.
To test your console.log() statements, open up the index.html file found in the assignments folder and use the developer tools to view the console.

## The this keyword

Having a solid understanding of how this 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.

## Prototype

The prototype challenge will focus on building prototypes for a fantasy themed game that includes mages, swordsmen, and archers. Follow the prototypes.js instructions closely to create the beginnings of what could be an awesome JavaScript game.
Read the instructions found within the file carefully to finish the challenges.
Remember to un-comment the objects and console logs to test your work at the bottom of the page.





1-projects/JS-Exercise-Classes/

### 1-projects/JS-Exercise-Classes/README.md


Table of Contents
generated with DocToc

- The class Syntax
- Index
- Instructions
- Get Started



# The class Syntax

This challenge focuses on using the new for ES6 class syntax.

##### Index
Instructions
Get Started

## Instructions

Find the file index.js and complete the tasks until all of your tests pass.

You can use yesterday’s work to help you. However, if you struggled a lot with that assignment, it is recommended that you attempt to re-write all code without “cheating” (peeking at yesterday’s code or copy-pasting it).

Plan to commit & push every time you get a new test passing!. Committing often makes it SO much easier to figure out “what broke my code”, and helps your TL keep track of how you’re doing.

If you run into trouble while coding, fight the good fight for 20 minutes and then get on the help channel. Remember to formulate your help request in a professional manner - like you would at the job - by including error messages, screenshots, and any other pertinent information about the problem, as well as what things you have attempted already while trying to solve it.

## Get Started

Using VSCode and the Command Line:

1. Fork repo and add TL as collaborator on Github.
1. Clone your fork (not Lambda’s repo by mistake!).
1. cd into your newly cloned repository.
1. Create a new branch by typing git checkout -b <firstName-lastName>.
1. Install dependencies by typing npm install.
1. Run tests by typing npm run test:watch.
1. Work on your branch, push commits and create PR as usual.

instructions screenshot





1-projects/LS-Data-Structures-I-Solution-master/

### 1-projects/LS-Data-Structures-I-Solution-master/README.md


Table of Contents
generated with DocToc

- Data Structures I
- Stacks
- Queues
- Linked Lists
- Hash Tables
- Extra Credit



# Data Structures I

Topics:
Big-O Notation (Complexity analysis)
Stacks Queues
Linked Lists Hash Tables



#### Stacks

Should have the methods: 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.

#### Queues

Should have the methods: 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.

#### Linked Lists

Should have the methods: 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.
The 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.

#### Hash Tables
Should have the methods: 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.

### Extra Credit

Uncomment the final test in 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!
Make your linked list implementation a doubly linked list.





1-projects/LS-Data-Structures-II-Solution-master/

### 1-projects/LS-Data-Structures-II-Solution-master/README.md


Table of Contents
generated with DocToc

- Data Structures II
- Trees
- Binary Search Tree
- Graphs
- Extra Credit



# Data Structures II

Topics:
Tree
Graph Binary Search Tree


#### Trees

Should have the methods: 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.
When you add nodes to the children array use new Tree(value) to create the node. You can instantiate the Tree class inside of itself.

#### Binary Search Tree

Should have the methods: 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).

#### Graphs
Should have methods named 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.


### Extra Credit

Add a method to the 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!
Read up on red-black trees here. Then implement one!





1-projects/master/

### 1-projects/master/README.md


Table of Contents
generated with DocToc

- Git for Web Development Project
- Task 1: Set up Project
- Task 2: MVP
- Task 3: Stretch



# Git for Web Development Project
In this project you will be using the concepts learned in the Git for Web Development lesson to fork/clone/push/and submit a PR for each project during this sprint.

This project consists of two parts:

## Task 1: Set up Project
You will need to follow the Lambda School Git Workflow to add a file to this project follow the steps below:

- [ ] Create your own version of this repo - Fork
- [ ] Clone this repo
- [ ] Create a branch git checkout -b 'firstName-lastName'
- [ ] Add a file to the project called yourFirstName-yourLastName.txt. This should contain the link to your completed codepen from part 2 as well as the review questions/answers
- [ ] Run your usual git commands for adding/committing and pushing Be sure to push to your branch!
- [ ] Create a Pull-Request to submit your work
- [ ] Use your own student fork as the base (compare across forks, base-fork -> main).


## Task 2: MVP
1. fork this codepen https://codepen.io/BritHemming/pen/eYYEoPa?editors=1100
2. You will be marking up all of the HTML and styling it to look like this: https://codepen.io/BritHemming/full/jONmxOm using CSS
this should be review from yesterday/ extra practice
3. After you are finished please copy the review questions into your .txt file and answer them
4. don’t forget to add, commit and push your changes.


## Task 3: Stretch
Stretch Review questions:
1. What is the difference between an inline element and a block element?
2. What happens when an element is positioned absolutely?
3. How do I make an element take up only the amount of space it needs but also have the ability to give it a width?
4. Name 3 elements that are display block by default, 2 elements that are display inline by default, and 1 element that is display inline-block by default
5. In your own words, explain the box model. What is the fix for the box model?
Stretch Git Tasks
- [ ] While the processes learned here will set you up to be successful in most situations, they are just the tip of the iceberg in learning Git. Independently research the following topics to learn more about Git.
- [ ] Research and understand what a merge conflict is and how to resolve it.
- [ ] Research the Git commands pull, rebase, merge. These commands will allow you to bring in changes that other developers push to the main branch.
- [ ] Research the Git commands reset, revert, clean. These commands will allow you to go back and amends previous commits you have made.

- [ ] Research and set up a Graphical User Interface (GUI) Git console.

- [ ] Research and setup SSH keys with GitHub, so that you do not need to input your username/password each time you push.







1-projects/Mongo-Mini-II-Solution-master/

### 1-projects/Mongo-Mini-II-Solution-master/README.md


Table of Contents generated with DocToc

- Mongo II Mini
- Topics To Cover
- Running the Project
- Mongoose Schema
- Todos:
- Extra Credit:



# Mongo II Mini

## Topics To Cover
Schema Types String, Number, Buffer, Date, Boolean, Mixed, ObjectId, Array
$ne $and
$or $in
$gt $sum
$orderby count


## Running the Project

cd into your project directory. npm install to receive your dependencies.
fire up your mongod server from your root dir or create a data dir in this project to store your documents from mongo there. mongod --dbpath data.

### Mongoose Schema
When you open models.js you’ll see we’ve already included your Schema. You’re welcome.
You’ll also notice that this sprint comes with a 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.

### Todos:
write a 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.
hint direction can be 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.
### Extra Credit:
lastly write a PUT that updates a users firstName lastName




1-projects/nested-data-exercises-master/

### 1-projects/nested-data-exercises-master/README.md


Table of Contents
generated with DocToc

- Nested Data Exercises
- 💪 10+ Practice Challenges: Nested Objects & Arrays
- Index
- Instructions
- Stretch
- Get Started
- Data
- Hints
- Helpful tips & reminders 🔎



# Nested Data Exercises

### 💪 10+ Practice Challenges: Nested Objects & Arrays

This challenge will test your ability to work with nested Objects and Arrays.

Uses real-world ‘inspired’ data.

> If you are experienced on this topic, expand the “💡 Challenge Yourself!” section (following the instructions.)

##### Index
Instructions
Get Started Preview Test Data
Stuck? Check Hints

## Instructions

Task: Complete the 10+ functions in index.js and pass all tests specified in test/index.test.js

The difficulty increases as you progress.

> Before you begin coding, review test data below

1. getName(character) -> Luke Skywalker
1. getFilmCount(character) -> 5
1. getFirstStarshipName(character) -> X-wing
1. getSummary(character) -> Luke Skywalker, 172cm, 77kg. Featured in 5 films.
1. getVehiclesCostInCreditsSumTotal(character) -> 8000
1. getStarshipPassengerAndCrewSumTotal(character) -> 27
1. getNthFilm(character, filmNumber) filmNumber=1 -> A New Hope
1. getCargoCapacityTotal(character) -> 80124
1. getFastestStarshipName(character) -> X-wing
1. getLargestCargoStarshipModelName(character) -> Lambda-class T-4a shuttle
1. getSlowestVehicleOrStarshipName(character) -> Imperial Speeder Bike


### Stretch


💡 Challenge Yourself! (expand for stretch tips)
Research & use different patterns. (Destructuring, move common code into reusable helper methods, functional programming techniques)
Trade completed code with a peer: Pair program: Take turns (30-60 min.) working through a refactor. Talk through & optimize as needed.
Trade code for feedback! (Example format: 3&1, 3 things that you liked and 1 to improve.) Time yourself. See if you can beat your own time starting over. Speed run!
See how many tests you can pass/complete before Googling or asking for help. When you’re finished, refactor & improve readability. Write up why it is improved.

Get Started

3 options are included below.

The CodeSandbox option is fast & highly recommended.

1. Fastest Option

LAUNCH ON CODESANDBOX 🚀


2. Local Setup Instructions: From Command Line

1. Fork & clone to your local computer
1. cd into your newly cloned repository
1. Install using npm
1. Run test command


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

NOTE: In local development, use the file watcher command: npm run test:watch.


3. Local Setup Instructions: Run Tests in Browser

1. Fork & clone to your local computer
1. cd into your newly cloned repository
1. Install and Start using npm

sh git clone <insert your git clone url here> cd <repo folder name> npm install npm start

Data

Example data your code will be tested against.

  1. // Complete Test Data Object (credit: https://SWAPI.co)
  2. // Side note: Yes Star Wars 🤓 purists. It's a bit out of date. Talk to SWAPI about it.
  3. // Focus & follow instructions above. 🤖
  4. {
  5. "name": "Luke Skywalker",
  6. "height": "172",
  7. "mass": "77",
  8. "hair_color": "blond",
  9. "skin_color": "fair",
  10. "eye_color": "blue",
  11. "birth_year": "19BBY",
  12. "homeworld": "Tatooine",
  13. "films": [
  14. "A New Hope",
  15. "The Empire Strikes Back",
  16. "Return of the Jedi",
  17. "Revenge of the Sith",
  18. "The Force Awakens"
  19. ],
  20. "species": [
  21. "Human"
  22. ],
  23. "vehicles": [
  24. {
  25. "name": "Snowspeeder",
  26. "model": "t-47 airspeeder",
  27. "manufacturer": "Incom corporation",
  28. "cost_in_credits": null,
  29. "length": "4.5",
  30. "max_atmosphering_speed": "650",
  31. "crew": 2,
  32. "passengers": 0,
  33. "cargo_capacity": "10"
  34. },
  35. {
  36. "name": "Imperial Speeder Bike",
  37. "model": "74-Z speeder bike",
  38. "manufacturer": "Aratech Repulsor Company",
  39. "cost_in_credits": "8000",
  40. "length": "3",
  41. "max_atmosphering_speed": "360",
  42. "crew": 1,
  43. "passengers": 1,
  44. "cargo_capacity": "4"
  45. }
  46. ],
  47. "starships": [
  48. {
  49. "name": "X-wing",
  50. "model": "T-65 X-wing",
  51. "manufacturer": "Incom Corporation",
  52. "cost_in_credits": 149999,
  53. "length": "12.5",
  54. "max_atmosphering_speed": "1050",
  55. "crew": 1,
  56. "passengers": 0,
  57. "cargo_capacity": "110",
  58. "consumables": "1 week",
  59. "hyperdrive_rating": "1.0",
  60. "MGLT": "100",
  61. "starship_class": "Starfighter"
  62. },
  63. {
  64. "name": "Imperial shuttle",
  65. "model": "Lambda-class T-4a shuttle",
  66. "manufacturer": "Sienar Fleet Systems",
  67. "cost_in_credits": 240000,
  68. "length": "20",
  69. "max_atmosphering_speed": "850",
  70. "crew": 6,
  71. "passengers": 20,
  72. "cargo_capacity": "80000",
  73. "consumables": "2 months",
  74. "hyperdrive_rating": "1.0",
  75. "MGLT": "50",
  76. "starship_class": "Armed government transport"
  77. }
  78. ],
  79. "created": "2014-12-09T13:50:51.644000Z",
  80. "edited": "2014-12-20T21:17:56.891000Z",
  81. "url": "https://swapi.co/api/people/1/"
  82. }

Hints

Helpful tips & reminders 🔎

  • Critical: Don’t make assumptions about input data types. (Convert/handle Numbers & null)
    • Convert number strings into actual numbers with built-in functions parseInt, parseFloat, Number, etc.
  • Ensure your functions return somethingUseful.
  • Make sure you understand the requirements. All the words used? Try list the steps in comments first.
  • Don’t forget the source data uses snake_case naming.
  • Pay close attention to array vs. object syntax (vehicles[0].name vs. character.vehicles.)
  • Some of the functions include detailed instructions.
  • You might have to infer the desired fields. Carefully read the description and function name (description included above the function.)

1-projects/Node-Express-Gmaps-Solution-Day-I-master/

1-projects/Node-Express-Gmaps-Solution-Day-I-master/README.md

Table of Contents generated with DocToc

Node-Express-Gmaps

Topics:

  • APIs
  • API Documentation
  • Rate Limits
  • Multiple requests

Objectives

  • Create endpoints
  • Make multpile requests to third-party API
  • Return result

Beginning Project

  • You will notice there is a config file that is ignored in the .gitignore, which you will be using to store your API key. You will need to import that key into your server file. DO NOT store it anywhere that will get pushed up to your repo.
  • Everything else you will start from scratch.

Project Description

  • You will be using the Google Maps Place API to get details about any place provided by the user of your API. When the user provides you a query (example: 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.

Project Requirements

  • Create an endpoint /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.
  • You will be using the 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.

Stretch Problem

  • Create an endpoint /places that, provided a query returns the detailed information about ALL places returned to you from Place Search.

Resources

1-projects/Node-Express-Gmaps-Solution-Day-II-master/

1-projects/Node-Express-Gmaps-Solution-Day-II-master/README.md

Table of Contents generated with DocToc

Node-Express-Gmaps

Topics:

  • APIs
  • API Documentation
  • Rate Limits
  • Multiple requests

Objectives

  • Create endpoints
  • Make multpile requests to third-party API
  • Return result

Beginning Project

  • You will notice there is a config file that is ignored in the .gitignore, which you will be using to store your API key. You will need to import that key into your server file. DO NOT store it anywhere that will get pushed up to your repo.
  • Everything else you will start from scratch.

Day I

Project Description

  • You will be using the Google Maps Place API to get details about any place provided by the user of your API. When the user provides you a query (example: 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.

Project Requirements

  • Create an endpoint /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.
  • You will be using the 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.

Stretch Problem

  • Create an endpoint /places that, provided a query returns the detailed information about ALL places returned to you from Place Search.

Resources

Day II

Project Requirements

  • Create an enpoint called /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.

Project Notes

  • You will need a separate key than what you’ve used for the Places API since it is actually a different API.
  • For best results, try to pick locations that should indeed have transit available.

Stretch Problem

  • Include this comparison information in the information your return from /place.

Resources

1-projects/Python-OOP-Toy-master/

1-projects/Python-OOP-Toy-master/README.md

Table of Contents generated with DocToc

Note for Windows users: WSL won’t work for this module!

Overview

“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.

Python OOP Toy

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:

  1. pipenv install
  2. pipenv shell

Then to run, use: python src/draw.py

In-class Demo

Your instructor will demonstrate the above concepts by extending the Block class

Project Work

Fill out the stubs in ball.py to extend the functionality of the ball class.

Stretch Goals

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!

Troubleshooting

Windows

  • If pipenv install is taking forever or erroring with TIMEOUT messages, disable your antivirus software.
  • If pipenv install is puking on installing pygame:
    • Don’t use pipenv for this project. No install, no shell.
    • Download the appropriate .whl file from here.
      • Python 3.6 use the cp36 version. Python 3.7 use cp37, etc. Use python --version to check your version.
      • Try the win32 version first. If that doesn’t work, the AMD version.
      • E.g. pygame‑1.9.3‑cp36‑cp36m‑win32.whl
    • Install it with
      1. pip install pygame-[whatever].whl
      You’ll need to specify the full path, likely.
    • Once it’s installed, run the game from the src/ directory with
      1. python draw.py

      Mac

  • If you’re getting errors about InvalidMarker:
    • Don’t use pipenv for this project. No install, no shell.
    • Run pip3 install pygame
    • Once it’s installed, run the game from the src/ directory with
      1. python3 draw.py

1-projects/React-Todo-Solution-master/

1-projects/React-Todo-Solution-master/answers.md

Table of Contents generated with DocToc

All Answers to Partner Study should be filled out in this file.

  1. Single Page Application

  2. Compilers

  3. Bundlers

  4. Elements

  5. Components

  6. JSX

  7. Package Mangers

  8. CDN

  9. Props and State

1-projects/React-Todo-Solution-master/README.md

Table of Contents generated with DocToc

React-Todo

Other Useful Resources

Battle Plan

  • Objective: At this point you have become familiar with the DOM and have built out User Interfaces HTML and CSS and some custom components. Now we’re going to dive into modern front-end JavaScript development by learning about ReactJS.
  • You’re going to be building a ToDo App (please hold your applause).
  • 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.

    • Tool requirements
      • React Dev Tools - This is a MUST you need to install this asap!
      • We have everything you need for your React Developer environment in this file. We went over this in the lecture video.

To Get Started

You’ll need to make sure you have the following installed.
  • node and npm
  • npm install will pull in all the node_modules you need once you cd into the root directory of the project
  • npm 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.

How to Tackle this Project

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.

Tips to Keep in Mind

  • All components you implement should go in the src/components directory.
  • The components should be named App.js, TodoList.js and Todo.js (as those are the files being imported into the tests).
  • Think of your application as an Application Tree. App is the parent, which controlls properties/data needed for the child components. This is how modern applications are built. They’re modular, separate pieces of code called components that you ‘compose’ together to make your app. It’s awesome!
  • Be sure to keep your todos in an array on state. Arrays are so awesome to work with.
  • When you need to iterate over a list and return React components out as elements, you’ll need to include a “key” property on the element itself. <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:
    1. this.state.todos.map((todo, i) => <AnotherComponent key={i} todo={todo} ></AnotherComponent>);
    Here, we’re simply passing the index of each todo item as the key for the individual React component.
  • Feel free to structure your “todo” data however you’d like. i.e. strings, objects etc.
  • React will give you warnings in the console that urge you to squash React Anti-Patterns. But if something is completely off, you’ll get stack trace errors that will force your bundle to freeze up. You can look for these in the Chrome console.

Stretch Problems

  • Refactor each todo to be an object instead of a just a string. For example, 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.
  • Add the ability to delete a todo. The way this would work is each todo item should have an ‘x’ that should be clickable and that, when clicked, should remove the todo item from the state array, which will also remove it from the rendered list of todos.
  • Take your App’s styles to the next level. Start implementing as much creativity here as you’d like. You can build out your styles on a component-by-component basis eg 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.
  • Persist your data in 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.

1-projects/Relational-Databases-master/

1-projects/Relational-Databases-master/README.md

Table of Contents generated with DocToc

Relational Databases and PostgreSQL

Contents

What is a relational database?

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:

  1. Employee
  2. EmployeeID FirstName LastName DepartmentID

And a Department table might have the following columns in each
record:

  1. Department
  2. 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.

Relational vs NoSQL

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.

When Do You Use NoSQL Versus a Relational 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

PostgreSQL is a venerable relational database that is freely available
and world-class.

https://www.postgresql.org/

SQL, Structured Query Language

SQL (“sequel”) is the language that people use for interfacing with
relational databases.

Create a table with CREATE TABLE

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.)

  1. $ psql
  2. psql (10.1)
  3. Type "help" for help.
  4. dbname=> CREATE TABLE Employee (ID INT, LastName VARCHAR(20));

Use the \dt command to show which tables exist:

  1. dbname=> CREATE TABLE Employee (ID INT, LastName VARCHAR(20));
  2. CREATE TABLE
  3. dbname=> \dt
  4. List of relations
  5. Schema | Name | Type | Owner
  6. --------+----------+-------+-------
  7. public | employee | table | beej
  8. (1 row)

Use the \d command to see what columns a table has:

  1. dbname=> \d Employee
  2. Table "public.employee"
  3. Column | Type | Collation | Nullable | Default
  4. --------------+-----------------------+-----------+----------+---------
  5. id | integer | | |
  6. lastname | character varying(20) | | |

Create a row with INSERT

  1. dbname=> INSERT INTO Employee (ID, LastName) VALUES (10, 'Tanngnjostr');
  2. INSERT 0 1

You can omit the column names if you’re putting data in every column:

  1. dbname=> INSERT INTO Employee VALUES (10, 'Tanngnjostr');
  2. INSERT 0 1

Run some more inserts into the table:

  1. INSERT INTO Employee VALUES (11, 'Alice');
  2. INSERT INTO Employee VALUES (12, 'Bob');
  3. INSERT INTO Employee VALUES (13, 'Charlie');
  4. INSERT INTO Employee VALUES (14, 'Dave');
  5. INSERT INTO Employee VALUES (15, 'Eve');

Read rows with SELECT

You can query the table with SELECT.

Query all the rows and columnts:

  1. dbname=> SELECT * FROM Employee;
  2. id | lastname
  3. ----+-------------
  4. 10 | Tanngnjostr
  5. 11 | Alice
  6. 12 | Bob
  7. 13 | Charlie
  8. 14 | Dave
  9. 15 | Eve
  10. (6 rows)

With SELECT, * means “all columns”.

You can choose specific columns:

  1. dbname=> SELECT LastName FROM Employee;
  2. lastname
  3. -------------
  4. Tanngnjostr
  5. Alice
  6. Bob
  7. Charlie
  8. Dave
  9. Eve
  10. (6 rows)

And you can search for specific rows with the WHERE clause:

  1. dbname=> SELECT * FROM Employee WHERE ID=12;
  2. id | lastname
  3. ----+----------
  4. 12 | Bob
  5. (1 row)
  6. dbname=> SELECT * FROM Employee WHERE ID=14 OR LastName='Bob';
  7. id | lastname
  8. ----+----------
  9. 12 | Bob
  10. 14 | Dave
  11. (2 rows)

Finally, you can rename the output columns, if you wish:

  1. SELECT id AS Employee ID, LastName AS Name
  2. FROM Employee
  3. WHERE ID=14 OR LastName='Bob';
  4. Employee ID | Name
  5. -------------+----------
  6. 12 | Bob
  7. 14 | Dave

Update rows with UPDATE

The UPDATE command can update one or many rows. Restrict which rows
are updated with a WHERE clause.`

  1. dbname=> UPDATE Employee SET LastName='Harvey' WHERE ID=10;
  2. UPDATE 1
  3. dbname=> SELECT * FROM Employee WHERE ID=10;
  4. id | lastname
  5. ----+----------
  6. 10 | Harvey
  7. (1 row)

You can update multiple columns at once:

  1. dbname=> UPDATE Employee SET LastName='Octothorpe', ID=99 WHERE ID=14;
  2. UPDATE 1

Delete rows with DELETE

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:

  1. dbname=> DELETE FROM Employee WHERE ID >= 15;
  2. DELETE 2

Delete ALL rows (Danger, Will Robinson!):

  1. dbname=> DELETE FROM Employee;
  2. DELETE 4

Deleting entire tables with DROP

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.

  1. dbname=> DROP TABLE Employee;
  2. DROP TABLE

The WHERE Clause

You’ve already seen some examples of how WHERE affects SELECT,
UPDATE, and DELETE.

Normal operators like <, >, =, <=, >= are available.

For example:

  1. SELECT * from animals
  2. WHERE age >= 10;

AND, OR, and Parentheses

You can add more boolean logic with AND, OR, and affect precedence
with parentheses:

  1. SELECT * from animals
  2. WHERE age >= 10 AND type = 'goat';
  1. SELECT * from animals
  2. WHERE age >= 10 AND (type = 'goat' OR type = 'antelope');

LIKE

The LIKE operator can be used to do pattern matching.

  1. _ -- Match any single character
  2. % -- Match any sequence of characters

To select all animals that start with ab:

  1. SELECT * from animal
  2. WHERE name LIKE 'ab%';

Column Data Types

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:

  1. VARCHAR(n) -- Variable character string of max length n
  2. BOOLEAN -- TRUE or FALSE
  3. INTEGER -- Integer value
  4. INT -- Same as INTEGER
  5. DECIMAL(p,s) -- Decimal number with p digits of precision
  6. -- and s digits right of the decimal point
  7. REAL -- Floating point number
  8. DATE -- Holds a date
  9. TIME -- Holds a time
  10. TIMESTAMP -- Holds an instant of time (date and time)
  11. BLOB -- Binary object

ACID and CRUD

These are two common database terms.

ACID

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.

CRUD

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.

NULL and NOT NULL

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:

  1. CREATE TABLE Employee (
  2. ID INT NOT NULL,
  3. LastName VARCHAR(20));

COUNT

You can select a count of items in question with the COUNT operator.

For example, count the rows filtered by the WHERE clause:

  1. SELECT COUNT(*) FROM Animals WHERE legcount >= 4;
  2. count
  3. -------
  4. 5

Useful with GROUP BY, below.

ORDER BY

ORDER BY which sorts SELECT results for you. Use DESC to sort in
reverse order.

  1. SELECT * FROM Pets
  2. ORDER BY age DESC;
  3. name | age
  4. -----------+-----
  5. Rover | 9
  6. Zaphod | 4
  7. Mittens | 3

GROUP BY

When used with an aggregating function like COUNT, can be
used to produce groups of results.

Count all the customers in certain countries:

  1. SELECT COUNT(CustomerID), Country
  2. FROM Customers
  3. GROUP BY Country;
  4. COUNT(CustomerID) | Country
  5. ----------------------+-----------
  6. 1123 | USA
  7. 734 | Germany
  8. etc.

Keys: Primary, Foreign, and Composite

Primary Key

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.

  1. Employee
  2. ID (Primary Key) LastName FirstName DepartmentID

To create a table and specify the primary key, use the NOT NULL and
PRIMARY KEY constraints:

  1. CREATE TABLE Employee (
  2. ID INT NOT NULL PRIMARY KEY,
  3. LastName VARCHAR(20),
  4. FirstName VARCHAR(20),
  5. DepartmentID INT);

You can always search quickly by primary key.

Foreign Keys

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.

  1. CREATE TABLE Department (
  2. ID INT NOT NULL PRIMARY KEY,
  3. Name VARCHAR(20));
  4. CREATE TABLE Employee (
  5. ID INT NOT NULL PRIMARY KEY,
  6. LastName VARCHAR(20),
  7. FirstName VARCHAR(20),
  8. DepartmentID INT REFERENCES Department(ID));

In the above example, you cannot add a row to Employee until that
DepartmentID already exists in Department‘s ID.

Also, you cannot delete a row from Department if that row’s ID was a
DepartmentID in Employee.

Composite Keys

Keys can also consist of more than one column. Composite keys can be
created as follows:

  1. CREATE TABLE example (
  2. a INT,
  3. b INT,
  4. c INT,
  5. PRIMARY KEY (a, c));

Auto-increment Columns

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.

  1. CREATE TABLE Company (
  2. ID SERIAL PRIMARY KEY,
  3. 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.

  1. INSERT INTO Company (Name) VALUES ('My Awesome Company');

Joins

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:

  1. SELECT Animal.name, Farm.name
  2. FROM Animal, Farm
  3. WHERE Animal.FarmID = Farm.ID;

Tables to use in these examples:

  1. CREATE TABLE Department (
  2. ID INT NOT NULL PRIMARY KEY,
  3. Name VARCHAR(20));
  4. CREATE TABLE Employee (
  5. ID INT NOT NULL PRIMARY KEY,
  6. Name VARCHAR(20),
  7. DepartmentID INT);
  8. INSERT INTO Department VALUES (10, 'Marketing');
  9. INSERT INTO Department VALUES (11, 'Sales');
  10. INSERT INTO Department VALUES (12, 'Entertainment');
  11. INSERT INTO Employee VALUES (1, 'Alice', 10);
  12. INSERT INTO Employee VALUES (2, 'Bob', 12);
  13. INSERT INTO Employee VALUES (3, 'Charlie', 99);

NOTE: Importantly, department ID 11 is not referred to from
Employee, and department ID 99 (Charlie) does not exist in
Department. This is instrumental in the following examples.

Inner Join, The Most Common Join

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:

  1. dbname=> SELECT Employee.ID, Employee.Name, Department.Name
  2. FROM Employee, Department
  3. WHERE Employee.DepartmentID = Department.ID;
  4. id | name | name
  5. ----+-------+---------------
  6. 1 | Alice | Marketing
  7. 2 | Bob | Entertainment
  8. (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.

  1. dbname=> SELECT Employee.ID, Employee.Name, Department.Name
  2. FROM Employee INNER JOIN Department
  3. ON Employee.DepartmentID = Department.ID;
  4. id | name | name
  5. ----+-------+---------------
  6. 1 | Alice | Marketing
  7. 2 | Bob | Entertainment
  8. (2 rows)

Left Outer Join

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 the
LEFT JOIN clause.)

Example:

  1. dbname=> SELECT Employee.ID, Employee.Name, Department.Name
  2. FROM Employee LEFT JOIN Department
  3. ON Employee.DepartmentID = Department.ID;
  4. id | name | name
  5. ----+---------+---------------
  6. 1 | Alice | Marketing
  7. 2 | Bob | Entertainment
  8. 3 | Charlie |
  9. (3 rows)

Notice that even though Charlie’s department isn’t found in Department, his record is still listed with a NULL department name.

Right Outer Join

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 puts
NULL in for the missing values in the “right” table (the one after the
FROM clause.)

  1. dbname=> SELECT Employee.ID, Employee.Name, Department.Name
  2. FROM Employee RIGHT JOIN Department
  3. ON Employee.DepartmentID = Department.ID;
  4. id | name | name
  5. ----+-------+---------------
  6. 1 | Alice | Marketing
  7. 2 | Bob | Entertainment
  8. | | Sales
  9. (3 rows)

Notice that even though there are no employees in the Sales department,
the Sales name is listed with a NULL employee name.

Full Outer Join

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.

  1. dbname=> SELECT Employee.ID, Employee.Name, Department.Name
  2. FROM Employee
  3. FULL JOIN Department
  4. ON Employee.DepartmentID = Department.ID;
  5. id | name | name
  6. ----+---------+---------------
  7. 1 | Alice | Marketing
  8. 2 | Bob | Entertainment
  9. 3 | Charlie |
  10. | | Sales
  11. (4 rows)

Indexes

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:

  1. dbname=> CREATE INDEX ON Employee (LastName);
  2. CREATE INDEX
  3. dbname=> \d Employee
  4. Table "public.employee"
  5. Column | Type | Collation | Nullable | Default
  6. --------------+-----------------------+-----------+----------+---------
  7. id | integer | | not null |
  8. lastname | character varying(20) | | |
  9. firstname | character varying(20) | | |
  10. departmentid | integer | | |
  11. Indexes:
  12. "employee_pkey" PRIMARY KEY, btree (id)
  13. "employee_lastname_idx" btree (lastname)
  14. Foreign-key constraints:
  15. "employee_departmentid_fkey" FOREIGN KEY (departmentid) REFERENCES department(id)

Transactions

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 with BEGIN 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:

  1. db("BEGIN"); // Begin transaction
  2. db(`UPDATE accounts SET balance = balance - 100.00
  3. WHERE name = 'Alice'`);
  4. let balance = db("SELECT balance WHERE name = 'Alice'");
  5. // Don't let the balance go below zero:
  6. if (balance < 0) {
  7. db("ROLLBACK"); // Never mind!! Roll it all back.
  8. } else {
  9. db("COMMIT"); // Plenty of cash
  10. }

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 COMMITted immediately.

Not all SQL databases support transactions, but most do.

The EXPLAIN Command

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.

  1. dbname=> EXPLAIN SELECT * FROM foo;
  2. QUERY PLAN
  3. ---------------------------------------------------------
  4. Seq Scan on foo (cost=0.00..155.00 rows=10000 width=4)
  5. (1 row)

For more information, see the PostgreSQL EXPLAIN documentation

Quick and Dirty DB Design

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 the
    Employee 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.

Normalization and Normal Forms

[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.

Anomalies

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.

First Normal Form (1NF)

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):

  1. Farm
  2. ID
  3. AnimalName1 AnimalBreed1 AnimalProducesEggs1
  4. AnimalName2 AnimalBreed2 AnimalProducesEggs2

1NF:

  1. Farm
  2. ID
  3. Animal
  4. ID FarmID[FK Farm(ID)] Name Breed ProducesEggs

Use a join to select all the animals in the farm:

  1. SELECT Name, Farm.ID FROM Animal, Farm WHERE Farm.ID = Animal.FarmID;

Second Normal Form (2NF)

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:

  1. Farm
  2. ID
  3. FarmAnimal
  4. FarmID[FK Farm(ID)] AnimalID[FK Animal(ID)]
  5. Animal
  6. ID Name Breed ProducesEggs

Use a join to select all the animals in the farms:

  1. SELECT Name, Farm.ID
  2. FROM Animal, FarmAnimal, Farm
  3. WHERE Farm.ID = FarmAnimal.FarmID AND
  4. Animal.ID = FarmAnimal.AnimalID;

Third Normal Form (3NF)

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:

  1. Farm
  2. ID
  3. FarmAnimal
  4. FarmID[FK Farm(ID)] AnimalID[FK Animal(ID)]
  5. BreedEggs
  6. Breed ProducesEggs
  7. Animal
  8. ID Name Breed[FK BreedEggs(Breed)]

Use a join to select all the animals names that produce eggs
in the farm:

  1. SELECT Name, Farm.ID
  2. FROM Animal, FarmAnimal, BreedEggs, Farm
  3. WHERE Farm.ID = FarmAnimal.FarmID AND
  4. Animal.ID = FarmAnimal.AnimalID AND
  5. Animal.Breed = BreedEggs.Breed AND
  6. BreedEggs.ProducesEggs = TRUE;

More reading:

Node-Postgres

This is a library that allows you to interface with PostgreSQL through
NodeJS.

Its documentation is exceptionally good.

Assignments

Security

PostgreSQL Password

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

Writing Client Software

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.

Other Relational Databases

There are tons of them by Microsoft, Oracle, etc. etc.

Other popular open source databases in widespread use are:

  • MySQL Multi-user, industrial class.
  • SQLite Single-user, very fast, good for config files.

Assignment: Install PostgreSQL

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.

Mac with Homebrew

  1. Open a terminal
  2. 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.

  3. Start the database process

    • If you want to start it every time you log in, run:

      1. brew services start postgresql
    • If you want to just start it one time right now, run:

      1. pg_ctl -D /usr/local/var/postgres start
  4. Create a database named the same as your username: createdb $(whoami)

    • Optionally you can call it anything you want, but the shell
      defaults to looking for a database named the same as your user.

    This database will contain tables.

Then start a shell by running psql and see if it works. You should see
this prompt:

  1. $ psql
  2. psql (10.1)
  3. Type "help" for help.
  4. 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.

Windows

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 Linux

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).

Assignment: Create a Table and Use It

Launch the shell on your database, and create a table.

  1. CREATE TABLE Employee (ID INT, FirstName VARCHAR(20), LastName VARCHAR(20));

Insert some records:

  1. INSERT INTO Employee VALUES (1, 'Alpha', 'Alphason');
  2. INSERT INTO Employee VALUES (2, 'Bravo', 'Bravoson');
  3. INSERT INTO Employee VALUES (3, 'Charlie', 'Charleson');
  4. INSERT INTO Employee VALUES (4, 'Delta', 'Deltason');
  5. INSERT INTO Employee VALUES (5, 'Echo', 'Ecoson');

Select all records:

  1. SELECT * FROM Employee;

Select Employee #3’s record:

  1. SELECT * FROM Employee WHERE ID=3;

Delete Employee #3’s record:

  1. DELETE FROM Employee WHERE ID=3;

Use SELECT to verify the record is deleted.

Update Employee #2’s name to be “Foxtrot Foxtrotson”:

  1. UPDATE Employee SET FirstName='Foxtrot', LastName='Foxtrotson' WHERE ID=2;

Use SELECT to verify the update.

Assignment: NodeJS Program to Create and Populate a Table

Using Node-Postgres, write a program that
creates a table.

Run the following query from your JS code:

  1. CREATE TABLE IF NOT EXISTS Earthquake
  2. (Name VARCHAR(20), Magnitude REAL)

Populate the table with the following data:

  1. let data = [
  2. ["Earthquake 1", 2.2],
  3. ["Earthquake 2", 7.0],
  4. ["Earthquake 3", 1.8],
  5. ["Earthquake 4", 5.2],
  6. ["Earthquake 5", 2.9],
  7. ["Earthquake 6", 0.6],
  8. ["Earthquake 7", 6.6]
  9. ];

You’ll have to run an INSERT statement for each one.

Open a PostgreSQL shell (psql) and verify the table exists:

  1. user-> \dt
  2. List of relations
  3. Schema | Name | Type | Owner
  4. --------+------------+-------+-------
  5. public | earthquake | table | user
  6. (1 row)

Also verify it is populated:

  1. user-> SELECT * from Earthquake;
  2. name | magnitude
  3. --------------+-----------
  4. Earthquake 1 | 2.2
  5. Earthquake 2 | 7
  6. Earthquake 3 | 1.8
  7. Earthquake 4 | 5.2
  8. Earthquake 5 | 2.9
  9. Earthquake 6 | 0.6
  10. Earthquake 7 | 6.6
  11. (7 rows)

Hints:

Extra Credit:

  • Add an ID column to help normalize the database. Make this column
    SERIAL to auto-increment.
  • Add Date, Lat, and Lon columns to record more information about the
    event.

Assignment: Command-line Earthquake Query Tool

Write a tool that queries the database for earthquakes that are at least
a given magnitude.

  1. $ node earthquake 2.9
  2. Earthquakes with magnitudes greater than or equal to 2.9:
  3. Earthquake 2: 7
  4. Earthquake 7: 6.6
  5. Earthquake 4: 5.2
  6. Earthquake 5: 2.9

Use ORDER BY Magnitude DESC to order the results in descending order
by magnitude.

Assignment: RESTful Earthquake Data Server

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:

  1. <html>
  2. <body>Usage: [endpoint info]</body>
  3. </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:

  1. {
  2. "results": [
  3. {
  4. "name": "Earthquake 2",
  5. "magnitude": 7
  6. },
  7. {
  8. "name": "Earthquake 4",
  9. "magnitude": 5.2
  10. }
  11. ]
  12. }

Extra Credit:

/new (POST) Add a new earthquake to the database. Use form encoding to
pass name and mag. Return a JSON status message:

  1. { "status": "ok" }

or

  1. { "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.

1-projects/solutions/

1-projects/solutions/README.md

Table of Contents generated with DocToc

Sample Solutions

  1. Run npm install to install the prereqs.
  2. Run node maketable to create the DB tables.
  3. Run node earthquake 2.9 to see all earthquakes larger than
    magnitude 2.9.

1-projects/Sprint-Challenge—Intro-Python-master/

1-projects/Sprint-Challenge—Intro-Python-master/README.md

Table of Contents generated with DocToc

Sprint Challenge: Intro to Python

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.

Instructions

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.

Commits

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.

Description

Complete the programs in the src/ directory in any order.

  • oop/
    • oop1.py: class hierarchies
    • oop2.py: subclassing and method overriding
  • comp/
    • comp.py: list comprehensions
  • cityreader/
    • cityreader.py: modules and CSV file reading

Testing

Each 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.

Minimum Viable Product

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.

Stretch Problems

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.

Rubric

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

1-projects/web-guided-project-testing-web-apps-solution-main/

1-projects/web-guided-project-testing-web-apps-solution-main/README.md

Table of Contents generated with DocToc

Sprint 1 - Module 4 : Integration Testing Lesson Plan

Training Kit

Previous Lesson Plan


Objectives

By the end of this module, learners should be able to:

  • explain what automated testing is and its importance
  • use react-testing-library for testing react components
  • use react-testing-library to test user interactions with fireEvent

Instructor Resources


Guided Project Slack Message

Welcome to Unit 3!

  1. Clone without forking the following repo: https://github.com/LambdaSchool/web-guided-project-testing-web-apps
  2. Navigate into the root folder and run npm i to load dependences.

:point_right: Technical issues spinning up the project? Please head over to the help channel!

:point_right: If you fall behind during lecture and wish to catch up:

git fetch && git reset --hard origin/lecture

:point_right: Slido event: https://app.sli.do/event/msea4w8q


Guided Project Zoom Invitation:

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


Check for Understanding Questions

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.

What kind of function is this - toBeInTheDocument?

  • Jest function
  • Assertion function
  • Describe function
  • Query function

What function allows you to mimic browser events in your tests?

  • fire
  • eventFire
  • fireEvent
  • onClick

Which of the following would allow you to mimic a user typing into a text input?

  • fireEvent.click(inputButton)
  • fireEvent.click(firstNameInput, { target: { value: ‘Tony’ } })
  • fireEvent.type(firstNameInput, {
    target: { value: ‘Tony’ } })
  • fireEvent.change(firstNameInput, { target: { value: ‘Tony’ } })

Which query functions allow you to “wait” for state to be updated after an event has been fired off?

  • getBy*
  • All of the Above
  • findBy*
  • queryBy

Guided Project Outline

Introduce Module:

  • Present that this is the last day of the sprint.
  • Remind that this is also a standalone lesson.
  • Present that we will be going into integration testing in React.

Discuss Automated Testing:

  • Helps to find bugs early in the process.
  • Helps to document your code.
  • Introduce the idea of Test Driven Development.
  • Also testing is an important part of project deployment.

Introduce Deployment Process:

  • Testing is a part of a larger deployment pipeline.
  • Testing allows for bugs in new code pushed in multi-developer projects does not break production.
  • This is a part of the DevOpps engineers job.
  • Different types of tests are a part of the deployment project.
  • All are needed.

Types of Testing:

  • End to End - covers application wide paths.
  • Integration - covers component or small component group paths.
  • Unit Tests - covers indivisual functions, components or modules. Digs into implementation of a code.

What do integration tests test?

  • If a user does this, this behavoir happens.
  • Sepecific to behavior, not implementation. Styling is not included. How it is coded is not included.
  • Think in very specific terms.
  • Write in full sentences when making your list of tests.
  • Give students a two minutes to create a list of intergration tests for a site.

How will we be testing?

  • Arrange - Setup of the component being tested.
  • Act - Execute the behavior we are testing.
  • Assert - Extract response element and see if it is what we expect it to be.

BREAK

Tour our example application.

  • Point out header element.
  • Point out form element.
  • Test for validation and display.
  • Tour App.js
  • Tour AnimalForm.js
  • Tour package.json
    1. Note that testing library is added by default through create react app
    2. jest-dom holds assertions
    3. react holds virtual dom
    4. user-event holds library for interacting with user events.
    5. Note scripts and point out test script
  • Run npm test.
  • Show moving panel to the right in vs code.
  • Note test runners.

Creating test suites.

  • Note that our test runner automatically find each test suite in our application, finds test files and runs the test inside of them.
  • Note that tests fail if they don’t have tests inside them.
  • Setup App.test.js
    1. import react
    2. import render from /react.
    3. create tests.
  • Note how it works.
  • Note how describe works.
  • Note that test suites can have .test or .spec formating.
  • Note that for integration tests EACH COMPONENT SHOULD HAVE IT’S OWN TEST SUITE.

Testing App.js

  • Always test rendering of the component first.
  • Note that the first pass of any test is if there is an error anywhere in the test or code.
  • Setup test for the existance of the header component.

    1. Arrange - Setup the component
      • render(component)
      • Note that it returns a value
    2. Act - extract the part of the DOM we want to test.

      • We need to query a DOM element.
      • Using screen to query for items.
      • const header = screen.getByText(“Add New Animal”);
      • Note that not finding an element results in a test failing.
      • Note that there are many ways to query an element. https://testing-library.com/docs/react-testing-library/cheatsheet/
      • Note the differences between get / find and query.
      • Note the types of query critria.
    3. Assert - Test the change.

      • expect() is a means to test an element along with a certain conditional.
      • Note that there are many ways to test an expect https://jestjs.io/docs/en/expect
      • Note .not

Testing with case insensitivity.

  • Note that changing case breaks the test.
  • Discuss why this might be a problem.
  • Use regular expressions to add case insensitivity. /add new animal/i

BREAK

Create tests for AnimalForm

  • Create new test suite.
  • Add in imports.
  • Add intro render component.

Walk through our submission test

  • Add a value to our text field
  • Submit form.
  • Note the output.

Start to create test

  • render component
  • Walk through Act steps:
    1. get access to form fields.
    2. add text to fields
      • Query for text field using getByLabelText.
      • Add userEvent for typing in values. userEvent.type();
    3. get access to and click button.
      • Query for button by role.
      • Click button using userEvent.click();
  • Walk through Assert step
    1. queryByText(/canine/i);
    2. Note the difference between query, get and find.

Module Project Review

Breakout Slack Messages


After Class Message

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:

1-projects/webapi-ii-challenge-master/

1-projects/webapi-ii-challenge-master/README.md

Table of Contents generated with DocToc

Building RESTful APIs with Express

Topics

  • Express Routing
  • Reading Request data from body and URL parameters
  • Sub-routes
  • API design and development.

Description

Use Node.js and Express to build an API that performs CRUD operations on blog posts.

Project Setup

  • Fork and Clone this repository.
  • CD into the folder where you cloned the repository.
  • Type npm install to download all dependencies.
  • To start the server, type npm run server from the root folder (where the package.json file is). The server is configured to restart automatically as you make changes.

Database Persistence Helpers

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.

Blog Post Schema

A Blog Post in the database has the following structure:

  1. {
  2. title: "The post title", // String, required
  3. contents: "The post contents", // String, required
  4. created_at: Mon Aug 14 2017 12:50:16 GMT-0700 (PDT) // Date, defaults to current date
  5. updated_at: Mon Aug 14 2017 12:50:16 GMT-0700 (PDT) // Date, defaults to current date
  6. }

Comment Schema

A Comment in the database has the following structure:

  1. {
  2. text: "The text of the comment", // String, required
  3. post_id: "The id of the associated post", // Integer, required, must match the id of a post entry in the database
  4. created_at: Mon Aug 14 2017 12:50:16 GMT-0700 (PDT) // Date, defaults to current date
  5. updated_at: Mon Aug 14 2017 12:50:16 GMT-0700 (PDT) // Date, defaults to current date
  6. }

Minimum Viable Product

  • Add the code necessary to implement the endpoints listed below.
  • Separate the endpoints that begin with /api/posts into a separate Express Router.

Endpoints

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.

Endpoint Specifications

When the client makes a POST request to /api/posts:

  • If the request body is missing the title or contents property:

    • cancel the request.
    • respond with HTTP status code 400 (Bad Request).
    • return the following JSON response: { errorMessage: "Please provide title and contents for the post." }.
  • If the information about the post is valid:

    • save the new post the the database.
    • return HTTP status code 201 (Created).
    • return the newly created post.
  • If there’s an error while saving the post:

    • cancel the request.
    • respond with HTTP status code 500 (Server Error).
    • return the following JSON object: { 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:

    • return HTTP status code 404 (Not Found).
    • return the following JSON object: { message: "The post with the specified ID does not exist." }.
  • If the request body is missing the text property:

    • cancel the request.
    • respond with HTTP status code 400 (Bad Request).
    • return the following JSON response: { errorMessage: "Please provide text for the comment." }.
  • If the information about the comment is valid:

    • save the new comment the the database.
    • return HTTP status code 201 (Created).
    • return the newly created comment.
  • If there’s an error while saving the comment:

    • cancel the request.
    • respond with HTTP status code 500 (Server Error).
    • return the following JSON object: { error: "There was an error while saving the comment to the database" }.

When the client makes a GET request to /api/posts:

  • If there’s an error in retrieving the posts from the database:
    • cancel the request.
    • respond with HTTP status code 500.
    • return the following JSON object: { 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:

    • return HTTP status code 404 (Not Found).
    • return the following JSON object: { message: "The post with the specified ID does not exist." }.
  • If there’s an error in retrieving the post from the database:

    • cancel the request.
    • respond with HTTP status code 500.
    • return the following JSON object: { 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:

    • return HTTP status code 404 (Not Found).
    • return the following JSON object: { message: "The post with the specified ID does not exist." }.
  • If there’s an error in retrieving the comments from the database:

    • cancel the request.
    • respond with HTTP status code 500.
    • return the following JSON object: { 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:

    • return HTTP status code 404 (Not Found).
    • return the following JSON object: { message: "The post with the specified ID does not exist." }.
  • If there’s an error in removing the post from the database:

    • cancel the request.
    • respond with HTTP status code 500.
    • return the following JSON object: { 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:

    • return HTTP status code 404 (Not Found).
    • return the following JSON object: { message: "The post with the specified ID does not exist." }.
  • If the request body is missing the title or contents property:

    • cancel the request.
    • respond with HTTP status code 400 (Bad Request).
    • return the following JSON response: { errorMessage: "Please provide title and contents for the post." }.
  • If there’s an error when updating the post:

    • cancel the request.
    • respond with HTTP status code 500.
    • return the following JSON object: { error: "The post information could not be modified." }.
  • If the post is found and the new information is valid:

    • update the post document in the database using the new information sent in the request body.
    • return HTTP status code 200 (OK).
    • return the newly updated post.

Stretch Problems

To work on the stretch problems you’ll need to enable the cors middleware. Follow these steps:

  • add the cors npm module: npm i cors.
  • add server.use(cors()) after server.use(express.json()).

Create a new React application and connect it to your server:

  • Use create-react-app to create an application inside the root folder, name it client.
  • From the React application connect to the /api/posts endpoint in the API and show the list of posts.
  • Style the list of posts however you see fit.

2-resources/__CHEAT-SHEETS/All/

2-resources/__CHEAT-SHEETS/All/101.md

Table of Contents generated with DocToc


title: 101
category: JavaScript libraries
layout: 2017/sheet
updated: 2017-09-21
intro: |

101 is a JavaScript library for dealing with immutable data in a functional manner.

Usage

  1. const isObject = require('101/isObject')
  2. isObject({}) // → true

Every function is exposed as a module.

See: 101

Type checking

  1. isObject({})
  2. isString('str')
  3. isRegExp(/regexp/)
  4. isBoolean(true)
  5. isEmpty({})
  6. isfunction(x => x)
  7. isInteger(10)
  8. isNumber(10.1)
  9. instanceOf(obj, 'string')

Objects

{: .-three-column}

Example

{: .-prime}

  1. let obj = {}

Update

  1. obj = put(obj, 'user.name', 'John')
  2. // → { user: { name: 'John' } }

Read

  1. pluck(name, 'user.name')
  2. // → 'John'

Delete

  1. obj = del(obj, 'user')
  2. // → { }

Getting

  1. pluck(state, 'user.profile.name')
  1. pick(state, ['user', 'ui'])
  2. pick(state, /^_/)

pluck returns values, pick returns subsets of objects.

See:
pluck,
pick

Setting

  1. put(state, 'user.profile.name', 'john')

See:
put

Deleting

  1. del(state, 'user.profile')
  2. omit(state, ['user', 'data'])

omit is like del, but supports multiple keys to be deleted.

See:
omit,
del

Keypath check

  1. hasKeypaths(state, ['user'])
  2. hasKeypaths(state, { 'user.profile.name': 'john' })

See:
hasKeypaths

Get values

  1. values(state)

Functions

Simple functions

| 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.

See:
and,
equals,
exists

Composition

  1. compose(f, g) // x => f(g(x))
  2. curry(f) // x => y => f(x, y)
  3. flip(f) // f(x, y) --> f(y, x)

See:
compose,
curry,
flip

And/or

  1. passAll(f, g) // x => f(x) && g(x)
  2. passAny(f, g) // x => f(x) || g(x)

See:
passAll,
passAny

Converge

  1. converge(and, [pluck('a'), pluck('b')])(x)
  1. // → and(pluck(x, 'a'), pluck(x, 'b'))

See:
converge

Arrays

Finding

  1. find(list, x => x.y === 2)
  2. findIndex(list, x => ...)
  3. includes(list, 'item')
  4. last(list)
  1. find(list, hasProps('id'))

Grouping

  1. groupBy(list, 'id')
  2. indexBy(list, 'id')

Examples

Function composition

  1. isFloat = passAll(isNumber, compose(isInteger, not))
  2. // n => isNumber(n) && not(isInteger(n))
  1. function doStuff (object, options) { ... }
  2. doStuffForce = curry(flip(doStuff))({ force: true })

Reference

2-resources/__CHEAT-SHEETS/All/absinthe.md

Table of Contents generated with DocToc


title: Absinthe
category: Hidden
layout: 2017/sheet
tags: [WIP]
updated: 2017-10-10
intro: |

Absinthe allows you to write GraphQL servers in Elixir.

Introduction

Concepts

  • 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.

Plug

web/router.ex

  1. defmodule Blog.Web.Router do
  2. use Phoenix.Router
  3. forward "/", Absinthe.Plug,
  4. schema: Blog.Schema
  5. end

{: data-line=”4,5”}

Absinthe is a Plug, and you pass it one Schema.

See: Our first query

Main concepts

{: .-three-column}

Schema

web/schema.ex

  1. defmodule Blog.Schema do
  2. use Absinthe.Schema
  3. import_types Blog.Schema.Types
  4. query do
  5. @desc "Get a list of blog posts"
  6. field :posts, list_of(:post) do
  7. resolve &Blog.PostResolver.all/2
  8. end
  9. end
  10. 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.

Resolver

web/resolvers/post_resolver.ex

  1. defmodule Blog.PostResolver do
  2. def all(_args, _info) do
  3. {:ok, Blog.Repo.all(Blog.Post)}
  4. end
  5. end

{: data-line=”3”}

This is the function that the schema delegated the posts query to.

Type

web/schema/types.ex

  1. defmodule Blog.Schema.Types do
  2. use Absinthe.Schema.Notation
  3. @desc "A blog post"
  4. object :post do
  5. field :id, :id
  6. field :title, :string
  7. field :body, :string
  8. end
  9. end

{: data-line=”4,5,6,7,8,9”}

This defines a type :post, which is used by the resolver.

Schema

Query arguments

GraphQL query

  1. { user(id: "1") { ··· } }

web/schema.ex

  1. query do
  2. field :user, type: :user do
  3. arg :id, non_null(:id)
  4. resolve &Blog.UserResolver.find/2
  5. end
  6. end

{: data-line=”3”}

Resolver

  1. def find(%{id: id} = args, _info) do
  2. ···
  3. end

{: data-line=”1”}

See: Query arguments

Mutations

GraphQL query

  1. {
  2. mutation CreatePost {
  3. post(title: "Hello") { id }
  4. }
  5. }

web/schema.ex

  1. mutation do
  2. @desc "Create a post"
  3. field :post, type: :post do
  4. arg :title, non_null(:string)
  5. resolve &Blog.PostResolver.create/2
  6. end
  7. end

{: data-line=”1”}

See: Mutations

References

2-resources/__CHEAT-SHEETS/All/activeadmin.md

Table of Contents generated with DocToc


title: ActiveAdmin
category: Ruby

layout: 2017/sheet

Listing scopes

Allows you to filter listings by a certain scope.
{: .-setup}

  1. scope :draft
  2. scope :for_approval
  1. scope :public, if: ->{ current_admin_user.can?(...) }
  2. scope "Unapproved", :pending
  3. scope("Published") { |books| books.where(:published: true) }

Sidebar filters

  1. filter :email
  2. filter :username

Custom actions

You can define custom actions for models.
{: .-setup}

  1. before_filter only: [:show, :edit, :publish] do
  2. @post = Post.find(params[:id])
  3. end

Make the route

  1. member_action :publish, method: :put do
  2. @post.publish!
  3. redirect_to admin_posts_path, notice: "The post '#{@post}' has been published!"
  4. end
  1. index do
  2. column do |post|
  3. link_to 'Publish', publish_admin_post_path(post), method: :put
  4. end
  5. end
  1. action_item only: [:edit, :show] do
  2. @post = Post.find(params[:id])
  3. link_to 'Publish', publish_admin_post_path(post), method: :put
  4. end

Columns

  1. column :foo
  1. column :title, sortable: :name do |post|
  2. strong post.title
  3. end

Other helpers

  1. status_tag "Done" # Gray
  2. status_tag "Finished", :ok # Green
  3. status_tag "You", :warn # Orange
  4. status_tag "Failed", :error # Red

Disabling ‘new post’

  1. ActiveAdmin.register Post do
  2. actions :index, :edit
  3. # or: config.clear_action_items!
  4. end

2-resources/__CHEAT-SHEETS/All/adb.md

Table of Contents generated with DocToc


title: adb (Android Debug Bridge)
category: CLI
layout: 2017/sheet
weight: -1
authors:

  • github: ZackNeyland
    updated: 2018-03-06

Device Basics

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.

Examples

  1. $ adb wait-for-device devices
  2. List of devices attached
  3. somedevice-1234 device
  4. someotherdevice-1234 device
  1. $ adb -s somedevice-1234 root

Logcat

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

Examples

  1. $ adb logcat -G 16M
  2. $ adb logcat *:V > output.log

File Management

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

Examples

  1. $ echo "This is a test" > test.txt
  2. $ adb push test.txt /sdcard/test.txt
  3. $ adb pull /sdcard/test.txt pulledTest.txt

Remote Shell

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

2-resources/__CHEAT-SHEETS/All/analytics.js.md

Table of Contents generated with DocToc


title: Google Analytics’s analytics.js
category: Analytics
layout: 2017/sheet
updated: 2017-10-29
intro: |

Google Analytics’s analytics.js is deprecated.

Page view

  1. ga('create', 'UA-XXXX-Y', 'auto')
  2. ga('create', 'UA-XXXX-Y', { userId: 'USER_ID' })
  1. ga('send', 'pageview')
  2. ga('send', 'pageview', { 'dimension15': 'My custom dimension' })

Events

  1. ga('send', 'event', 'button', 'click', {color: 'red'});
  1. ga('send', 'event', 'button', 'click', 'nav buttons', 4);
  2. /* ^category ^action ^label ^value */

Exceptions

  1. ga('send', 'exception', {
  2. exDescription: 'DatabaseError',
  3. exFatal: false,
  4. appName: 'myapp',
  5. appVersion: '0.1.2'
  6. })

2-resources/__CHEAT-SHEETS/All/analytics.md

Table of Contents generated with DocToc


title: Analytics libraries
layout: 2017/sheet

category: Analytics

Mixpanel

  1. mixpanel.identify('284');
  2. mixpanel.people.set({ $email: 'hi@gmail.com' });
  3. mixpanel.register({ age: 28, gender: 'male' }); /* set common properties */

mixpanel
{: .-crosslink}

Google Analytics’s analytics.js

  1. ga('create', 'UA-XXXX-Y', 'auto');
  2. ga('create', 'UA-XXXX-Y', { userId: 'USER_ID' });
  1. ga('send', 'pageview');
  2. ga('send', 'pageview', { 'dimension15': 'My custom dimension' });

analytics.js
{: .-crosslink}

2-resources/__CHEAT-SHEETS/All/angularjs.md

Table of Contents generated with DocToc


title: Angular.js

category: JavaScript libraries

  1. <html ng-app="nameApp">

Lists (ng-repeat)

  1. <ul ng-controller="MyListCtrl">
  2. <li ng-repeat="phone in phones">
  3. {{phone.name}}
  4. </li>
  5. </ul>

Model (ng-model)

  1. <select ng-model="orderProp">
  2. <option value="name">Alphabetical</option>
  3. <option value="age">Newest</option>
  4. </select>

Defining a module

  1. App = angular.module('myApp', []);
  2. App.controller('MyListCtrl', function ($scope) {
  3. $scope.phones = [ ... ];
  4. });

Controller with protection from minification

  1. App.controller('Name', [
  2. '$scope',
  3. '$http',
  4. function ($scope, $http) {
  5. }
  6. ]);
  7. a.c 'name', [
  8. '$scope'
  9. '$http'
  10. ($scope, $http) ->
  11. ]

Service

  1. App.service('NameService', function($http){
  2. return {
  3. get: function(){
  4. return $http.get(url);
  5. }
  6. }
  7. });

In controller you call with parameter and will use promises to return data from server.

  1. App.controller('controllerName',
  2. function(NameService){
  3. NameService.get()
  4. .then(function(){})
  5. })

Directive

  1. App.directive('name', function(){
  2. return {
  3. template: '<h1>Hello</h1>'
  4. }
  5. });

In HTML will use <name></name> to render your template <h1>Hello</h1>

HTTP

  1. App.controller('PhoneListCtrl', function ($scope, $http) {
  2. $http.get('/data.json').success(function (data) {
  3. $scope.phones = data;
  4. })
  5. });

References:

2-resources/__CHEAT-SHEETS/All/animated_gif.md

Table of Contents generated with DocToc


title: Animated GIFs
category: CLI

layout: 2017/sheet

Animated GIFs

{: .-one-column}

Convert MP4 to GIF

  1. mkdir -p gif
  2. mplayer -ao null -vo gif89a:outdir=gif $INPUT
  3. mogrify -format gif *.png
  4. gifsicle --colors=256 --delay=4 --loopcount=0 --dither -O3 gif/*.gif > ${INPUT%.*}.gif
  5. rm -rf gif

You’ll need mplayer, imagemagick and gifsicle. This converts frames to .png, then turns them into an animated gif.

A given range

  1. mplayer -ao null -ss 0:02:06 -endpos 0:05:00 -vo gif89a:outdir=gif videofile.mp4

See -ss and -endpos.

2-resources/__CHEAT-SHEETS/All/ansi.md

Table of Contents generated with DocToc


title: Ansi codes
category: CLI
layout: 2017/sheet
intro: |

Quick reference to ANSI color codes.

Format

  1. \033[#m

ANSI codes

  1. 0 clear
  2. 1 bold
  3. 4 underline
  4. 5 blink
  5. 30-37 fg color
  6. 40-47 bg color
  7. 1K clear line (to beginning of line)
  8. 2K clear line (entire line)
  9. 2J clear screen
  10. 0;0H move cursor to 0;0
  11. 1A move up 1 line

Colors

  1. 0 black
  2. 1 red
  3. 2 green
  4. 3 yellow
  5. 4 blue
  6. 5 magenta
  7. 6 cyan
  8. 7 white

Bash utilities

  1. hide_cursor() { printf "\e[?25l"; }
  2. show_cursor() { printf "\e[?25h"; }

2-resources/__CHEAT-SHEETS/All/ansible-examples.md

Table of Contents generated with DocToc


title: Ansible examples
category: Ansible

layout: 2017/sheet

Examples

2-resources/__CHEAT-SHEETS/All/ansible-guide.md

Table of Contents generated with DocToc


title: “Ansible quickstart”
category: Ansible
layout: 2017/sheet
description: |

A quick guide to getting started with your first Ansible playbook.

Install Ansible

  1. $ brew install ansible # OSX
  2. $ [sudo] apt install ansible # elsewhere

Ansible is available as a package in most OS’s.

See: Installation

Start your project

  1. ~$ mkdir setup
  2. ~$ cd setup

Make a folder for your Ansible files.

See: Getting started

Creating your files

Inventory file

~/setup/hosts

  1. [sites]
  2. 127.0.0.1
  3. 192.168.0.1
  4. 192.168.0.2
  5. 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

Playbook

~/setup/playbook.yml

  1. - hosts: 127.0.0.1
  2. user: root
  3. tasks:
  4. - name: install nginx
  5. apt: pkg=nginx state=present
  6. - name: start nginx every bootup
  7. service: name=nginx state=started enabled=yes
  8. - name: do something in the shell
  9. shell: echo hello > /tmp/abc.txt
  10. - name: install bundler
  11. gem: name=bundler state=latest

See: Intro to Playbooks

Running

Running ansible-playbook

  1. ~/setup$ ls
  2. hosts
  3. playbook.yml

Running the playbook

  1. ~/setup$ ansible-playbook -i hosts playbook.yml
  2. PLAY [all] ********************************************************************
  3. GATHERING FACTS ***************************************************************
  4. ok: [127.0.0.1]
  5. TASK: [install nginx] *********************************************************
  6. ok: [127.0.0.1]
  7. TASK: start nginx every bootup] ***********************************************
  8. ok: [127.0.0.1]
  9. ...

Read more

2-resources/__CHEAT-SHEETS/All/ansible-modules.md

Table of Contents generated with DocToc


title: Ansible modules
category: Ansible
layout: 2017/sheet
prism_languages: [yaml]

updated: 2017-10-03

{% raw %}

Format

Basic file

  1. ---
  2. - hosts: production
  3. remote_user: root
  4. tasks:
  5. - ···

Place your modules inside tasks.

Task formats

One-line

  1. - apt: pkg=vim state=present

Map

  1. - apt:
  2. pkg: vim
  3. state: present

Foldable scalar

  1. - apt: >
  2. pkg=vim
  3. state=present

Define your tasks in any of these formats. One-line format is preferred for short declarations, while maps are preferred for longer.

Modules

Aptitude

Packages

  1. - apt:
  2. pkg: nodejs
  3. state: present # absent | latest
  4. update_cache: yes
  5. force: no

Deb files

  1. - apt:
  2. deb: "https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb"

Repositories

  1. - apt_repository:
  2. repo: "deb https://··· raring main"
  3. state: present

Repository keys

  1. - apt_key:
  2. id: AC40B2F7
  3. url: "http://···"
  4. state: present

git

  1. - git:
  2. repo: git://github.com/
  3. dest: /srv/checkout
  4. version: master
  5. depth: 10
  6. bare: yes

See: git module

git_config

  1. - git_config:
  2. name: user.email
  3. scope: global # local | system
  4. value: hi@example.com

See: git_config module

user

  1. - user:
  2. state: present
  3. name: git
  4. system: yes
  5. shell: /bin/sh
  6. groups: admin
  7. comment: "Git Version Control"

See: user module

service

  1. - service:
  2. name: nginx
  3. state: started
  4. enabled: yes # optional

See: service module

Shell

shell

  1. - shell: apt-get install nginx -y

Extra options

  1. - shell: echo hello
  2. args:
  3. creates: /path/file # skip if this exists
  4. removes: /path/file # skip if this is missing
  5. chdir: /path # cd here before running

Multiline example

  1. - shell: |
  2. echo "hello there"
  3. echo "multiple lines"

See: shell module

script

  1. - script: /x/y/script.sh
  2. args:
  3. creates: /path/file # skip if this exists
  4. removes: /path/file # skip if this is missing
  5. chdir: /path # cd here before running

See: script module

Files

file

  1. - file:
  2. path: /etc/dir
  3. state: directory # file | link | hard | touch | absent
  4. # Optional:
  5. owner: bin
  6. group: wheel
  7. mode: 0644
  8. recurse: yes # mkdir -p
  9. force: yes # ln -nfs

See: file module

copy

  1. - copy:
  2. src: /app/config/nginx.conf
  3. dest: /etc/nginx/nginx.conf
  4. # Optional:
  5. owner: user
  6. group: user
  7. mode: 0644
  8. backup: yes

See: copy module

template

  1. - template:
  2. src: config/redis.j2
  3. dest: /etc/redis.conf
  4. # Optional:
  5. owner: user
  6. group: user
  7. mode: 0644
  8. backup: yes

See: template module

Local actions

local_action

  1. - name: do something locally
  2. local_action: shell echo hello

debug

  1. - debug:
  2. msg: "Hello {{ var }}"

See: debug module
{% endraw %}

2-resources/__CHEAT-SHEETS/All/ansible-roles.md

Table of Contents generated with DocToc


title: Ansible roles
category: Ansible

layout: 2017/sheet

Structure

  1. roles/
  2. common/
  3. tasks/
  4. handlers/
  5. files/ # 'copy' will refer to this
  6. templates/ # 'template' will refer to this
  7. meta/ # Role dependencies here
  8. vars/
  9. defaults/
  10. main.yml

References

2-resources/__CHEAT-SHEETS/All/ansible.md

Table of Contents generated with DocToc


title: Ansible

category: Ansible

{% raw %}

Getting started

Hosts

  1. $ sudo mkdir /etc/ansible
  2. $ sudo vim /etc/ansible/hosts
  3. [example]
  4. 192.0.2.101
  5. 192.0.2.102

Running a playbook

  1. $ ansible-playbook playbook.yml

Tasks

  1. - hosts: all
  2. user: root
  3. sudo: no
  4. vars:
  5. aaa: bbb
  6. tasks:
  7. - ...
  8. handlers:
  9. - ...

Includes

  1. tasks:
  2. - include: db.yml
  3. handlers:
  4. - include: db.yml user=timmy

Handlers

  1. handlers:
  2. - name: start apache2
  3. action: service name=apache2 state=started
  4. tasks:
  5. - name: install apache
  6. action: apt pkg=apache2 state=latest
  7. notify:
  8. - start apache2

Vars

  1. - host: lol
  2. vars_files:
  3. - vars.yml
  4. vars:
  5. project_root: /etc/xyz
  6. tasks:
  7. - name: Create the SSH directory.
  8. file: state=directory path=${project_root}/home/.ssh/
  9. only_if: "$vm == 0"

Roles

  1. - host: xxx
  2. roles:
  3. - db
  4. - { role:ruby, sudo_user:$user }
  5. - web
  6. # Uses:
  7. # roles/db/tasks/*.yml
  8. # roles/db/handlers/*.yml

Task: Failures

  1. - name: my task
  2. command: ...
  3. register: result
  4. failed_when: "'FAILED' in result.stderr"
  5. ignore_errors: yes
  6. changed_when: "result.rc != 2"

Env vars

  1. vars:
  2. local_home: "{{ lookup('env','HOME') }}"

References

{% endraw %}

2-resources/__CHEAT-SHEETS/All/appcache.md

Table of Contents generated with DocToc


title: Appcache
category: HTML

layout: 2017/sheet

Format

  1. CACHE MANIFEST
  2. # version
  3. CACHE:
  4. http://www.google.com/jsapi
  5. /assets/app.js
  6. /assets/bg.png
  7. NETWORK:
  8. *

Note that Appcache is deprecated!

See: Using the application cache (developer.mozilla.org)

2-resources/__CHEAT-SHEETS/All/applescript.md

Table of Contents generated with DocToc


title: AppleScript
updated: 2018-12-06
layout: 2017/sheet
category: macOS

prism_languages: [applescript]

Running

  1. osascript -e "..."
  1. display notification "X" with title "Y"

Comments

  1. -- This is a single line comment
  1. # This is another single line comment
  1. (*
  2. This is
  3. a multi
  4. line comment
  5. *)

Say

  1. -- default voice
  2. say "Hi I am a Mac"
  1. -- specified voice
  2. say "Hi I am a Mac" using "Zarvox"

Beep

  1. -- beep once
  2. beep
  1. -- beep 10 times
  2. beep 10

Delay

  1. -- delay for 5 seconds
  2. delay 5

Table of Contents generated with DocToc


title: Applinks

category: HTML

  1. <meta property="al:ios:url" content="applinks://docs" />
  2. <meta property="al:ios:app_store_id" content="12345" />
  3. <meta property="al:ios:app_name" content="App Links" />
  4. <meta property="al:android:url" content="applinks://docs" />
  5. <meta property="al:android:app_name" content="App Links" />
  6. <meta property="al:android:package" content="org.applinks" />
  7. <meta property="al:web:url" content="http://applinks.org/documentation" />

Device types

  • ios
  • ipad
  • iphone
  • android
  • windows_phone
  • web

Reference

2-resources/__CHEAT-SHEETS/All/arel.md

Table of Contents generated with DocToc


title: Arel

category: Rails

Tables

  1. users = Arel::Table.new(:users)
  2. users = User.arel_table # ActiveRecord model

Fields

  1. users[:name]
  2. users[:id]

where (restriction)

  1. users.where(users[:name].eq('amy'))
  2. # SELECT * FROM users WHERE users.name = 'amy'

select (projection)

  1. users.project(users[:id])
  2. # SELECT users.id FROM users

join

basic join

In ActiveRecord (without Arel), if :photos is the name of the association, use joins

  1. users.joins(:photos)

In Arel, if photos is defined as the Arel table,

  1. photos = Photo.arel_table
  2. users.join(photos)
  3. users.join(photos, Arel::Nodes::OuterJoin).on(users[:id].eq(photos[:user_id]))

join with conditions

  1. 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:

  1. users.join(
  2. users.join(photos, Arel::Nodes::OuterJoin)
  3. .on(photos[:user_id].eq(users[:id]).and(photos[:published].eq(true)))
  4. )

advanced join

multiple joins with the same table but different meanings and/or conditions

  1. creators = User.arel_table.alias('creators')
  2. updaters = User.arel_table.alias('updaters')
  3. photos = Photo.arel_table
  4. photos_with_credits = photos
  5. .join(photos.join(creators, Arel::Nodes::OuterJoin).on(photos[:created_by_id].eq(creators[:id])))
  6. .join(photos.join(updaters, Arel::Nodes::OuterJoin).on(photos[:assigned_id].eq(updaters[:id])))
  7. .project(photos[:name], photos[:created_at], creators[:name].as('creator'), updaters[:name].as('editor'))
  8. photos_with_credits.to_sql
  9. # => "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`)"
  10. # after the request is done, you can use the attributes you named
  11. # it's as if every Photo record you got has "creator" and "editor" fields, containing creator name and editor name
  12. photos_with_credits.map{|x|
  13. "#{photo.name} - copyright #{photo.created_at.year} #{photo.creator}, edited by #{photo.editor}"
  14. }.join('; ')

limit / offset

  1. users.take(5) # => SELECT * FROM users LIMIT 5
  2. users.skip(4) # => SELECT * FROM users OFFSET 4

Aggregates

  1. users.project(users[:age].sum) # .average .minimum .maximum
  2. users.project(users[:id].count)
  3. users.project(users[:id].count.as('user_count'))

order

  1. users.order(users[:name])
  2. users.order(users[:name], users[:age].desc)
  3. users.reorder(users[:age])

With ActiveRecord

  1. User.arel_table
  2. User.where(id: 1).arel

Clean code with arel

Most of the clever stuff should be in scopes, e.g. the code above could become:

  1. photos_with_credits = Photo.with_creator.with_editor

You can store requests in variables then add SQL segments:

  1. all_time = photos_with_credits.count
  2. this_month = photos_with_credits.where(photos[:created_at].gteq(Date.today.beginning_of_month))
  3. recent_photos = photos_with_credits.where(photos[:created_at].gteq(Date.today.beginning_of_month)).limit(5)

Reference

2-resources/__CHEAT-SHEETS/All/atom.md

Table of Contents generated with DocToc


title: Atom
category: Apps
layout: 2017/sheet

updated: 2018-06-14

Shortcuts

{: .-three-column}

Tree

Shortcut Description
⌘\ Toggle tree
⌘⇧\ Reveal current file

{: .-shortcuts}

Comments

Shortcut Description
⌘/ Toggle comments

{: .-shortcuts}

View

Shortcut Description
⌘k Split pane to the left
—- —-
⌘⌥= Grow pane
⌘⌥- Shrink pane
—- —-
^⇧← Move tab to left

{: .-shortcuts}

Bracket matcher

Shortcut Description
^m Go to matching bracket
^] Remove brackets from selection
^⌘m Select inside brackets
⌥⌘. Close tag

{: .-shortcuts}

Symbols view

Shortcut Description
^⌥↓ Jump to declaration under cursor
^⇧r Show tags

{: .-shortcuts}

Symbols view enables Ctags support for Atom.

See: Symbols view

Git

| ^⇧9 | Show Git pane |
| ^⇧8 | Show GitHub pane |
{: .-shortcuts}

Editing

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}

Project

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}

Notes

  • For Windows and Linux, is the Control key.
  • For macOS, it’s the Command key.

  • For Windows and Linux, is the Alt key.
  • For macOS, it’s the Option key.

2-resources/__CHEAT-SHEETS/All/awesome-redux.md

Table of Contents generated with DocToc


title: Awesome Redux
category: React
layout: 2017/sheet

updated: 2017-11-19

redux-actions

Create action creators in flux standard action format.
{: .-setup}

  1. increment = createAction('INCREMENT', amount => amount)
  2. increment = createAction('INCREMENT') // same
  1. increment(42) === { type: 'INCREMENT', payload: 42 }
  1. // Errors are handled for you:
  2. err = new Error()
  3. increment(err) === { type: 'INCREMENT', payload: err, error: true }

redux-actions
{: .-crosslink}

flux-standard-action

A standard for flux action objects. An action may have an error, payload and meta and nothing else.
{: .-setup}

  1. { type: 'ADD_TODO', payload: { text: 'Work it' } }
  2. { type: 'ADD_TODO', payload: new Error(), error: true }

flux-standard-action
{: .-crosslink}

redux-multi

Dispatch multiple actions in one action creator.
{: .-setup}

  1. store.dispatch([
  2. { type: 'INCREMENT', payload: 2 },
  3. { type: 'INCREMENT', payload: 3 }
  4. ])

redux-multi
{: .-crosslink}

reduce-reducers

Combines reducers (like combineReducers()), but without namespacing magic.
{: .-setup}

  1. re = reduceReducers(
  2. (state, action) => state + action.number,
  3. (state, action) => state + action.number
  4. )
  5. re(10, { number: 2 }) //=> 14

reduce-reducers
{: .-crosslink}

redux-logger

Logs actions to your console.
{: .-setup}

  1. // Nothing to see here

redux-logger
{: .-crosslink}

Async

redux-promise

Pass promises to actions. Dispatches a flux-standard-action.
{: .-setup}

  1. increment = createAction('INCREMENT') // redux-actions
  2. increment(Promise.resolve(42))

redux-promise
{: .-crosslink}

redux-promises

Sorta like that, too. Works by letting you pass thunks (functions) to dispatch(). Also has ‘idle checking’.
{: .-setup}

  1. fetchData = (url) => (dispatch) => {
  2. dispatch({ type: 'FETCH_REQUEST' })
  3. fetch(url)
  4. .then((data) => dispatch({ type: 'FETCH_DONE', data })
  5. .catch((error) => dispatch({ type: 'FETCH_ERROR', error })
  6. })
  7. store.dispatch(fetchData('/posts'))
  1. // That's actually shorthand for:
  2. fetchData('/posts')(store.dispatch)

redux-promises
{: .-crosslink}

redux-effects

Pass side effects declaratively to keep your actions pure.
{: .-setup}

  1. {
  2. type: 'EFFECT_COMPOSE',
  3. payload: {
  4. type: 'FETCH'
  5. payload: {url: '/some/thing', method: 'GET'}
  6. },
  7. meta: {
  8. steps: [ [success, failure] ]
  9. }
  10. }

redux-effects
{: .-crosslink}

redux-thunk

Pass “thunks” to as actions. Extremely similar to redux-promises, but has support for getState.
{: .-setup}

  1. fetchData = (url) => (dispatch, getState) => {
  2. dispatch({ type: 'FETCH_REQUEST' })
  3. fetch(url)
  4. .then((data) => dispatch({ type: 'FETCH_DONE', data })
  5. .catch((error) => dispatch({ type: 'FETCH_ERROR', error })
  6. })
  7. store.dispatch(fetchData('/posts'))
  1. // That's actually shorthand for:
  2. fetchData('/posts')(store.dispatch, store.getState)
  1. // Optional: since fetchData returns a promise, it can be chained
  2. // for server-side rendering
  3. store.dispatch(fetchPosts()).then(() => {
  4. ReactDOMServer.renderToString(<MyApp store={store} ></MyApp>)
  5. })

redux-thunk
{: .-crosslink}

2-resources/__CHEAT-SHEETS/All/awscli.md

Table of Contents generated with DocToc


title: AWS CLI
category: Devops

layout: 2017/sheet

EC2

  1. aws ec2 describe-instances
  2. aws ec2 start-instances --instance-ids i-12345678c
  3. aws ec2 terminate-instances --instance-ids i-12345678c

S3

  1. aws s3 ls s3://mybucket
  2. aws s3 rm s3://mybucket/folder --recursive
  3. aws s3 cp myfolder s3://mybucket/folder --recursive
  4. aws s3 sync myfolder s3://mybucket/folder --exclude *.tmp

ECS

  1. aws ecs create-cluster
  2. --cluster-name=NAME
  3. --generate-cli-skeleton
  4. aws ecs create-service

Homebrew

  1. brew install awscli
  2. aws configure

Configuration profiles

  1. aws configure --profile project1
  2. aws configure --profile project2

Elastic Beanstalk

Configuration

  • .elasticbeanstalk/config.yml - application config
  • .elasticbeanstalk/dev-env.env.yml - environment config
  1. eb config

See: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options.html

ebextensions

Also see

2-resources/__CHEAT-SHEETS/All/backbone.md

Table of Contents generated with DocToc


title: Backbone.js
layout: 2017/sheet
updated: 2018-12-06

category: JavaScript libraries

Binding events

  1. .on('event', callback)
  2. .on('event', callback, context)
  1. .on({
  2. 'event1': callback,
  3. 'event2': callback
  4. })
  1. .on('all', callback)
  1. .once('event', callback) // Only happens once

Unbinding events

  1. object.off('change', onChange) // just the `onChange` callback
  2. object.off('change') // all 'change' callbacks
  3. object.off(null, onChange) // `onChange` callback for all events
  4. object.off(null, null, context) // all callbacks for `context` all events
  5. object.off() // all

Events

  1. object.trigger('event')
  1. view.listenTo(object, event, callback)
  2. view.stopListening()

List of events

  • 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)

Views

Defining

  1. // All attributes are optional
  2. var View = Backbone.View.extend({
  3. model: doc,
  1. tagName: 'div',
  2. className: 'document-item',
  3. id: "document-" + doc.id,
  4. attributes: { href: '#' },
  1. el: 'body',
  1. events: {
  2. 'click button.save': 'save',
  3. 'click .cancel': function() { ··· },
  4. 'click': 'onclick'
  5. },
  1. constructor: function() { ··· },
  2. render: function() { ··· }
  3. })

Instantiating

  1. view = new View()
  2. view = new View({ el: ··· })

Methods

  1. view.$el.show()
  2. view.$('input')
  1. view.remove()
  1. view.delegateEvents()
  2. view.undelegateEvents()

Models

Defining

  1. // All attributes are optional
  2. var Model = Backbone.Model.extend({
  3. defaults: {
  4. 'author': 'unknown'
  5. },
  6. idAttribute: '_id',
  7. parse: function() { ··· }
  8. })

Instantiating

  1. var obj = new Model({ title: 'Lolita', author: 'Nabokov' })
  1. var obj = new Model({ collection: ··· })

Methods

  1. obj.id
  2. obj.cid // → 'c38' (client-side ID)
  1. obj.clone()
  1. obj.hasChanged('title')
  2. obj.changedAttributes() // false, or hash
  3. obj.previousAttributes() // false, or hash
  4. obj.previous('title')
  1. obj.isNew()
  1. obj.set({ title: 'A Study in Pink' })
  2. obj.set({ title: 'A Study in Pink' }, { validate: true, silent: true })
  3. obj.unset('title')
  1. obj.get('title')
  2. obj.has('title')
  3. obj.escape('title') /* Like .get() but HTML-escaped */
  1. obj.clear()
  2. obj.clear({ silent: true })
  1. obj.save()
  2. obj.save({ attributes })
  3. obj.save(null, {
  4. silent: true, patch: true, wait: true,
  5. success: callback, error: callback
  6. })
  1. obj.destroy()
  2. obj.destroy({
  3. wait: true,
  4. success: callback, error: callback
  5. })
  1. obj.toJSON()
  1. obj.fetch()
  2. obj.fetch({ success: callback, error: callback })

Validation

  1. var Model = Backbone.Model.extend({
  2. validate: function(attrs, options) {
  3. if (attrs.end < attrs.start) {
  4. return "Can't end before it starts"
  5. }
  6. }
  7. })

{: data-line=”2”}

  1. obj.validationError //=> "Can't end before it starts"
  2. obj.isValid()
  3. obj.on('invalid', function (model, error) { ··· })
  1. // Triggered on:
  2. obj.save()
  3. obj.set({ ··· }, { validate: true })

Custom URLs

  1. var Model = Backbone.Model.extend({
  2. // Single URL (string or function)
  3. url: '/account',
  4. url: function() { return '/account' },
  1. // Both of these two work the same way
  2. url: function() { return '/books/' + this.id }),
  3. urlRoot: '/books'
  4. })
  1. var obj = new Model({ url: ··· })
  2. var obj = new Model({ urlRoot: ··· })

References

{: .-one-column}

2-resources/__CHEAT-SHEETS/All/badges.md

Table of Contents generated with DocToc


title: Code badges

Here are some badges for open source projects.

Badge markdown

  1. Travis
  2. [![Status](https://travis-ci.org/rstacruz/REPO.svg?branch=master)](https://travis-ci.org/rstacruz/REPO)
  3. CodeClimate (shields.io)
  4. [![CodeClimate](http://img.shields.io/codeclimate/github/rstacruz/REPO.svg?style=flat)](https://codeclimate.com/github/rstacruz/REPO
  5. "CodeClimate")
  6. Coveralls (shields.io)
  7. [![Coveralls](http://img.shields.io/coveralls/rstacruz/REPO.svg?style=flat)](https://coveralls.io/r/rstacruz/REPO)
  8. Travis (shields.io)
  9. [![Status](http://img.shields.io/travis/rstacruz/REPO/master.svg?style=flat)](https://travis-ci.org/rstacruz/REPO "See test builds")
  10. NPM (shields.io)
  11. [![npm version](http://img.shields.io/npm/v/REPO.svg?style=flat)](https://npmjs.org/package/REPO "View this project on npm")
  12. Ruby gem (shields.io)
  13. [![Gem](https://img.shields.io/gem/v/GEMNAME.svg?style=flat)](http://rubygems.org/gems/GEMNAME "View this project in Rubygems")

Etc

  1. Gitter chat
  2. [![Gitter chat](https://badges.gitter.im/USER/REPO.png)](https://gitter.im/REPO/GITTERROOM "Gitter chat")
  3. Gitter chat (shields.io)
  4. [![Chat](http://img.shields.io/badge/gitter-USER / REPO-blue.svg)]( https://gitter.im/USER/REPO )
  5. david-dm
  6. [![Dependencies](http://img.shields.io/david/rstacruz/REPO.svg?style=flat)](https://david-dm.org/rstacruz/REPO)
  7. [![MIT license](http://img.shields.io/badge/license-MIT-brightgreen.svg)](http://opensource.org/licenses/MIT)
  8. [![MIT license](http://img.shields.io/badge/license-MIT-brightgreen.svg)](http://opensource.org/licenses/MIT)

Support stuff

  1. Support
  2. -------
  3. __Bugs and requests__: submit them through the project's issues tracker.<br>
  4. [![Issues](http://img.shields.io/github/issues/USER/REPO.svg)]( https://github.com/USER/REPO/issues )
  5. __Questions__: ask them at StackOverflow with the tag *REPO*.<br>
  6. [![StackOverflow](http://img.shields.io/badge/stackoverflow-REPO-blue.svg)]( http://stackoverflow.com/questions/tagged/REPO )
  7. __Chat__: join us at gitter.im.<br>
  8. [![Chat](http://img.shields.io/badge/gitter.im-USER/REPO-blue.svg)]( https://gitter.im/USER/REPO )

Frontend js installation

  1. Installation
  2. ------------
  3. Add [nprogress.js] and [nprogress.css] to your project.
  4. ```html
  5. <script src='nprogress.js'></script>
  6. <link rel='stylesheet' href='nprogress.css'/>
  7. ```
  8. NProgress is available via [bower] and [npm].
  9. $ bower install --save nprogress
  10. $ npm install --save nprogress
  11. [bower]: http://bower.io/search/?q=nprogress
  12. [npm]: https://www.npmjs.org/package/nprogress

Acknowledgements

  1. **PROJECTNAME** © 2014+, Rico Sta. Cruz. Released under the [MIT] License.<br>
  2. Authored and maintained by Rico Sta. Cruz with help from contributors ([list][contributors]).
  3. > [ricostacruz.com](http://ricostacruz.com) ·
  4. > GitHub [@rstacruz](https://github.com/rstacruz) ·
  5. > Twitter [@rstacruz](https://twitter.com/rstacruz)
  6. [MIT]: http://mit-license.org/
  7. [contributors]: http://github.com/rstacruz/nprogress/contributors

2-resources/__CHEAT-SHEETS/All/bash.md

Table of Contents generated with DocToc


title: Bash scripting
category: CLI
layout: 2017/sheet
tags: [Featured]
updated: 2020-07-05
keywords:

  • Variables
  • Functions
  • Interpolation
  • Brace expansions
  • Loops
  • Conditional execution
  • Command substitution

Getting started

{: .-three-column}

Introduction

{: .-intro}

This is a quick reference to getting started with Bash scripting.

Example

  1. #!/usr/bin/env bash
  2. NAME="John"
  3. echo "Hello $NAME!"

Variables

  1. NAME="John"
  2. echo $NAME
  3. echo "$NAME"
  4. echo "${NAME}!"

String quotes

  1. NAME="John"
  2. echo "Hi $NAME" #=> Hi John
  3. echo 'Hi $NAME' #=> Hi $NAME

Shell execution

  1. echo "I'm in $(pwd)"
  2. echo "I'm in `pwd`"
  3. # Same

See Command substitution

Conditional execution

  1. git commit && git push
  2. git commit || echo "Commit failed"

Functions

{: id=’functions-example’}

  1. get_name() {
  2. echo "John"
  3. }
  4. echo "You are $(get_name)"

See: Functions

Conditionals

{: id=’conditionals-example’}

  1. if [[ -z "$string" ]]; then
  2. echo "String is empty"
  3. elif [[ -n "$string" ]]; then
  4. echo "String is not empty"
  5. fi

See: Conditionals

Strict mode

  1. set -euo pipefail
  2. IFS=$'\n\t'

See: Unofficial bash strict mode

Brace expansion

  1. 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

Parameter expansions

{: .-three-column}

Basics

  1. name="John"
  2. echo ${name}
  3. echo ${name/J/j} #=> "john" (substitution)
  4. echo ${name:0:2} #=> "Jo" (slicing)
  5. echo ${name::2} #=> "Jo" (slicing)
  6. echo ${name::-1} #=> "Joh" (slicing)
  7. echo ${name:(-1)} #=> "n" (slicing from right)
  8. echo ${name:(-2):1} #=> "h" (slicing from right)
  9. echo ${food:-Cake} #=> $food or "Cake"
  1. length=2
  2. echo ${name:0:length} #=> "Jo"

See: Parameter expansion

  1. STR="/path/to/foo.cpp"
  2. echo ${STR%.cpp} # /path/to/foo
  3. echo ${STR%.cpp}.o # /path/to/foo.o
  4. echo ${STR%/*} # /path/to
  5. echo ${STR##*.} # cpp (extension)
  6. echo ${STR##*/} # foo.cpp (basepath)
  7. echo ${STR#*/} # path/to/foo.cpp
  8. echo ${STR##*/} # foo.cpp
  9. echo ${STR/foo/bar} # /path/to/bar.cpp
  1. STR="Hello world"
  2. echo ${STR:6:5} # "world"
  3. echo ${STR: -5:5} # "world"
  1. SRC="/path/to/foo.cpp"
  2. BASE=${SRC##*/} #=> "foo.cpp" (basepath)
  3. DIR=${SRC%$BASE} #=> "/path/to/" (dirpath)

Substitution

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

Comments

  1. # Single line comment
  1. : '
  2. This is a
  3. multi line
  4. comment
  5. '

Substrings

Expression Description
${FOO:0:3} Substring (position, length)
${FOO:(-3):3} Substring from the right

Length

Expression Description
${#FOO} Length of $FOO

Manipulation

  1. STR="HELLO WORLD!"
  2. echo ${STR,} #=> "hELLO WORLD!" (lowercase 1st letter)
  3. echo ${STR,,} #=> "hello world!" (all lowercase)
  4. STR="hello world!"
  5. echo ${STR^} #=> "Hello world!" (uppercase 1st letter)
  6. echo ${STR^^} #=> "HELLO WORLD!" (all uppercase)

Default values

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.

Loops

{: .-three-column}

Basic for loop

  1. for i in /etc/rc.*; do
  2. echo $i
  3. done

C-like for loop

  1. for ((i = 0 ; i < 100 ; i++)); do
  2. echo $i
  3. done

Ranges

  1. for i in {1..5}; do
  2. echo "Welcome $i"
  3. done

With step size

  1. for i in {5..50..5}; do
  2. echo "Welcome $i"
  3. done

Reading lines

  1. cat file.txt | while read line; do
  2. echo $line
  3. done

Forever

  1. while true; do
  2. ···
  3. done

Functions

{: .-three-column}

Defining functions

  1. myfunc() {
  2. echo "hello $1"
  3. }
  1. # Same as above (alternate syntax)
  2. function myfunc() {
  3. echo "hello $1"
  4. }
  1. myfunc "John"

Returning values

  1. myfunc() {
  2. local myresult='some value'
  3. echo $myresult
  4. }
  1. result="$(myfunc)"

Raising errors

  1. myfunc() {
  2. return 1
  3. }
  1. if myfunc; then
  2. echo "success"
  3. else
  4. echo "failure"
  5. fi

Arguments

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.

Conditionals

{: .-three-column}

Conditions

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

More conditions

Condition Description
[[ -o noclobber ]] If OPTIONNAME is enabled
—- —-
[[ ! EXPR ]] Not
[[ X && Y ]] And
`[[ X Y ]]` Or

File conditions

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

Example

  1. # String
  2. if [[ -z "$string" ]]; then
  3. echo "String is empty"
  4. elif [[ -n "$string" ]]; then
  5. echo "String is not empty"
  6. else
  7. echo "This never happens"
  8. fi
  1. # Combinations
  2. if [[ X && Y ]]; then
  3. ...
  4. fi
  1. # Equal
  2. if [[ "$A" == "$B" ]]
  1. # Regex
  2. if [[ "A" =~ . ]]
  1. if (( $a < $b )); then
  2. echo "$a is smaller than $b"
  3. fi
  1. if [[ -e "file.txt" ]]; then
  2. echo "file exists"
  3. fi

Arrays

Defining arrays

  1. Fruits=('Apple' 'Banana' 'Orange')
  1. Fruits[0]="Apple"
  2. Fruits[1]="Banana"
  3. Fruits[2]="Orange"

Working with arrays

  1. echo ${Fruits[0]} # Element #0
  2. echo ${Fruits[-1]} # Last element
  3. echo ${Fruits[@]} # All elements, space-separated
  4. echo ${#Fruits[@]} # Number of elements
  5. echo ${#Fruits} # String length of the 1st element
  6. echo ${#Fruits[3]} # String length of the Nth element
  7. echo ${Fruits[@]:3:2} # Range (from position 3, length 2)
  8. echo ${!Fruits[@]} # Keys of all elements, space-separated

Operations

  1. Fruits=("${Fruits[@]}" "Watermelon") # Push
  2. Fruits+=('Watermelon') # Also Push
  3. Fruits=( ${Fruits[@]/Ap*/} ) # Remove by regex match
  4. unset Fruits[2] # Remove one item
  5. Fruits=("${Fruits[@]}") # Duplicate
  6. Fruits=("${Fruits[@]}" "${Veggies[@]}") # Concatenate
  7. lines=(`cat "logfile"`) # Read from file

Iteration

  1. for i in "${arrayName[@]}"; do
  2. echo $i
  3. done

Dictionaries

{: .-three-column}

Defining

  1. declare -A sounds
  1. sounds[dog]="bark"
  2. sounds[cow]="moo"
  3. sounds[bird]="tweet"
  4. sounds[wolf]="howl"

Declares sound as a Dictionary object (aka associative array).

Working with dictionaries

  1. echo ${sounds[dog]} # Dog's sound
  2. echo ${sounds[@]} # All values
  3. echo ${!sounds[@]} # All keys
  4. echo ${#sounds[@]} # Number of elements
  5. unset sounds[dog] # Delete dog

Iteration

Iterate over values

  1. for val in "${sounds[@]}"; do
  2. echo $val
  3. done

Iterate over keys

  1. for key in "${!sounds[@]}"; do
  2. echo $key
  3. done

Options

Options

  1. set -o noclobber # Avoid overlay files (echo "hi" > foo)
  2. set -o errexit # Used to exit upon error, avoiding cascading errors
  3. set -o pipefail # Unveils hidden failures
  4. set -o nounset # Exposes unset variables

Glob options

  1. shopt -s nullglob # Non-matching globs are removed ('*.foo' => '')
  2. shopt -s failglob # Non-matching globs throw errors
  3. shopt -s nocaseglob # Case insensitive globs
  4. shopt -s dotglob # Wildcards match dotfiles ("*.sh" => ".foo.sh")
  5. 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.

History

Commands

Command Description
history Show history
shopt -s histverify Don’t execute expanded result immediately

Expansions

Expression Description
!$ Expand last parameter of most recent command
!* Expand all parameters of most recent command
!-n Expand nth most recent command
!n Expand nth command in history
!<command> Expand most recent invocation of command <command>

Operations

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.

Slices

Code Description
!!:n Expand only nth 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 nth token to last from most recent command

!! can be replaced with any valid expansion i.e. !cat, !-2, !42, etc.

Miscellaneous

Numeric calculations

  1. $((a + 200)) # Add 200 to $a
  1. $(($RANDOM%200)) # Random number 0..199

Subshells

  1. (cd somedir; echo "I'm now in $PWD")
  2. pwd # still in first directory

Redirection

  1. python hello.py > output.txt # stdout to (file)
  2. python hello.py >> output.txt # stdout to (file), append
  3. python hello.py 2> error.log # stderr to (file)
  4. python hello.py 2>&1 # stderr to stdout
  5. python hello.py 2>/dev/null # stderr to (null)
  6. python hello.py &>/dev/null # stdout and stderr to (null)
  1. python hello.py < foo.txt # feed foo.txt to stdin for python

Inspecting commands

  1. command -V cd
  2. #=> "cd is a function/alias/whatever"

Trap errors

  1. trap 'echo Error at about $LINENO' ERR

or

  1. traperr() {
  2. echo "ERROR: ${BASH_SOURCE[1]} at about ${BASH_LINENO[0]}"
  3. }
  4. set -o errtrace
  5. trap traperr ERR

Case/switch

  1. case "$1" in
  2. start | up)
  3. vagrant up
  4. ;;
  5. *)
  6. echo "Usage: $0 {start|stop|ssh}"
  7. ;;
  8. esac

Source relative

  1. source "${0%/*}/../share/foo.sh"

printf

  1. printf "Hello %s, I'm %s" Sven Olga
  2. #=> "Hello Sven, I'm Olga
  3. printf "1 + 1 = %d" 2
  4. #=> "1 + 1 = 2"
  5. printf "This is how you print a float: %f" 2
  6. #=> "This is how you print a float: 2.000000"

Directory of script

  1. DIR="${0%/*}"

Getting options

  1. while [[ "$1" =~ ^- && ! "$1" == "--" ]]; do case $1 in
  2. -V | --version )
  3. echo $version
  4. exit
  5. ;;
  6. -s | --string )
  7. shift; string=$1
  8. ;;
  9. -f | --flag )
  10. flag=1
  11. ;;
  12. esac; shift; done
  13. if [[ "$1" == '--' ]]; then shift; fi

Heredoc

  1. cat <<END
  2. hello world
  3. END

Reading input

  1. echo -n "Proceed? [y/n]: "
  2. read ans
  3. echo $ans
  1. read -n 1 ans # Just one character

Special variables

Expression Description
$? Exit status of last task
$! PID of last background task
$$ PID of shell
$0 Filename of the shell script

See Special parameters.

Go to previous directory

  1. pwd # /home/user/foo
  2. cd bar/
  3. pwd # /home/user/foo/bar
  4. cd -
  5. pwd # /home/user/foo

Check for command’s result

  1. if ping -c 1 google.com; then
  2. echo "It appears you have a working internet connection"
  3. fi

Grep check

  1. if grep -q 'foo' ~/.bash_history; then
  2. echo "You appear to have typed 'foo' in the past"
  3. fi

Also see

{: .-one-column}

2-resources/__CHEAT-SHEETS/All/blessed.md

Table of Contents generated with DocToc


title: Blessed
category: JavaScript libraries

layout: 2017/sheet

Screen

  1. screen = blessed.screen({
  2. smartCSR: true // optimize for flickering
  3. autoPadding: true // ..
  4. })
  5. screen.append(Element)
  6. screen.destroy()
  7. screen.width
  8. screen.height
  9. screen.title = 'My window title'
  10. screen.key(['escape', 'q', 'C-c'], (ch, key) => { ... })

Element

  1. box = blessed.box({
  2. style: { fg, bg, border.fg, scrollbar.bg, focus.bg, hover.bg },
  3. border: { type: 'line'|'bg', bg, fg, bold, underline }
  4. tags: true, // parse {bold}tags{/bold}
  5. top, left, width, height,
  6. width: '100%',
  7. height: '100%-1',
  8. top: 'center'
  9. })

Tags

  1. {bold}
  2. {right} {center}
  3. {|} left-right separator
  4. {#c0ff33-fg}{/}
  1. blessed.escape('...')

2-resources/__CHEAT-SHEETS/All/bluebird.md

Table of Contents generated with DocToc


title: bluebird.js
category: JavaScript libraries
layout: 2017/sheet
weight: -1

updated: 2017-09-08

Also see

Also see the promise cheatsheet and Bluebird.js API (github.com).

Example

  1. promise
  2. .then(okFn, errFn)
  3. .spread(okFn, errFn) // *
  4. .catch(errFn)
  5. .catch(TypeError, errFn) // *
  6. .finally(fn)
  7. .map(function (e) { ··· }) // *
  8. .each(function (e) { ··· }) // *

Those marked with * are non-standard Promise API that only work with Bluebird promises.

Multiple return values

  1. .then(function () {
  2. return [ 'abc', 'def' ]
  3. })
  4. .spread(function (abc, def) {
  5. ···
  6. })

{: data-line=”4”}

Use Promise.spread

Multiple promises

  1. Promise.join(
  2. getPictures(),
  3. getMessages(),
  4. getTweets(),
  5. function (pics, msgs, tweets) {
  6. return ···
  7. }
  8. )

{: data-line=”1”}

Use Promise.join

Multiple promises (array)

  1. Promise.all([ promise1, promise2 ])
  2. .then(results => {
  3. results[0]
  4. results[1]
  5. })
  6. // succeeds if one succeeds first
  7. Promise.any(promises)
  8. .then(results => {
  9. })

{: data-line=”1,8”}

  1. Promise.map(urls, url => fetch(url))
  2. .then(···)

{: data-line=”1”}

Use Promise.map to “promisify” a list of values.

Object

  1. Promise.props({
  2. photos: get('photos'),
  3. posts: get('posts')
  4. })
  5. .then(res => {
  6. res.photos
  7. res.posts
  8. })

{: data-line=”1”}

Use Promise.props.

Chain of promises

  1. function getPhotos() {
  2. return Promise.try(() => {
  3. if (err) throw new Error("boo")
  4. return result
  5. })
  6. }
  7. getPhotos().then(···)

{: data-line=”2”}

Use Promise.try.

Node-style functions

  1. var readFile = Promise.promisify(fs.readFile)
  2. var fs = Promise.promisifyAll(require('fs'))

{: data-line=”2”}

See Promisification.

Promise-returning methods

  1. User.login = Promise.method((email, password) => {
  2. if (!valid)
  3. throw new Error("Email not valid")
  4. return /* promise */
  5. })

{: data-line=”1”}

See Promise.method.

Generators

  1. User.login = Promise.coroutine(function* (email, password) {
  2. let user = yield User.find({email: email}).fetch()
  3. return user
  4. })

{: data-line=”1”}

See Promise.coroutine.

Reference

http://bluebirdjs.com/docs/api-reference.html

2-resources/__CHEAT-SHEETS/All/bolt.md

Table of Contents generated with DocToc


title: Bolt Quickstart
category: Bolt
layout: 2017/sheet
updated: 2018-12-25
authors:

  • github: lucywyman
    keywords:
    • Puppet
    • tasks
    • modules
      description: |
      A quick guide to getting started writing Bolt tasks

Install Bolt

  1. # On MacOS
  2. brew cask install puppetlabs/puppet/puppet-bolt
  3. # On Windows
  4. choco install puppet-bolt

Bolt is available as a package for most platforms. See installing bolt

Create a module with a task

  1. mkdir -p ~/.puppetlabs/bolt/modules/mymodule/tasks
  2. 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.

Run Bolt

  1. 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.

2-resources/__CHEAT-SHEETS/All/bookshelf-contrib.md

Table of Contents generated with DocToc

bookshelf-contrib.Scopes

#
class Books
scopes:
published: (q) -> q.where(published: true)

Books.published().fetchAll()

bookshelf-contrib.QueryProxy

#
Books.query().where(published: true)
Books.where(published: true)

bookshelf-contrib.Migration

class Migration
up: ->
down: ->

2-resources/__CHEAT-SHEETS/All/bookshelf.md

Table of Contents generated with DocToc


title: Bookshelf.js

category: JavaScript libraries

Model

  1. Summary = bookshelf.Model.extend({
  2. tableName: 'summaries',
  3. hasTimestamps: true,
  4. hasTimestamps: ['created_at', 'updated_at'],
  5. })

Associations

  1. Summary = bookshelf.Model.extend({
  2. book () {
  3. return this.belongsTo(Book)
  4. },
  5. author () {
  6. return this.hasOne(Author)
  7. }
  8. // belongsToMany
  9. // hasMany
  10. // hasMany().through()
  11. })

CRUD

  1. Book.create({ title: '..' }).save()
  2. new Book({ title: '..' }).save()
  3. new Book({ id: 1 }).fetch()
  4. Book.where({ id: 1 }).fetch()
  5. Book.where('favorite_color', 'red').fetch()
  6. Book.where('favorite_color', '<>', 'red').fetch()
  7. Book
  8. .query((q) => q.orderBy('updated_at')

2-resources/__CHEAT-SHEETS/All/bootstrap.md

Table of Contents generated with DocToc


title: Bootstrap
layout: 2017/sheet
prism_languages: [scss, haml, html]
weight: -1
category: CSS
description: |

.container .row .col-md-6, @screen-sm-min, .form-control, grids, .modal-content, tooltips, and other Bootstrap CSS examples.

Screen sizes

  1. 768 992 1200
  2. ' ' ' ' ' ' ' ' '
  3. <---------^------------^------------------^--------->
  4. xs sm md lg
  5. (phone) (tablet) (laptop) (desktop)

Min:

  1. @media (min-width: @screen-sm-min) // >= 768px (small tablet)
  2. @media (min-width: @screen-md-min) // >= 992px (medium laptop)
  3. @media (min-width: @screen-lg-min) // >= 1200px (large desktop)

Max:

  1. @media (max-width: @screen-xs-max) { // < 768px (xsmall phone)
  2. @media (max-width: @screen-sm-max) { // < 992px (small tablet)
  3. @media (max-width: @screen-md-max) { // < 1200px (medium laptop)

Columns

  1. .container
  2. .container-fluid
  1. .col-xs-1
  2. .col-sm-1
  3. .col-md-1
  4. .col-lg-1
  5. .col-md-offset-1

Mixins:

  1. @include make-xs-column(12);
  2. @include make-sm-column(6);
  3. @include make-md-column(3);
  4. @include make-lg-column(3);
  1. @include make-sm-column-offset(1);
  2. @include make-sm-column-push(1);
  3. @include make-sm-column-pull(1);

Utilities

  1. .pull-left
  2. .pull-right
  1. .hidden-{xs,sm,md,lg}
  2. .visible-{xs,sm,md,lg}
  3. .visible-{xs,sm,md,lg,print}-{block,inline,inline-block}

`