├── README.md ├── friday-3.md ├── friday-6.md ├── materials ├── first_project_presentation_template.pdf ├── learn-react-1.md ├── mvc-data-modeling-2022.pdf └── team-project-proposal.md ├── thursday.md ├── tuesday.md └── wednesday.md /README.md: -------------------------------------------------------------------------------- 1 | **_CUNY Tech Prep 2022-2023_** 2 | 3 | [CUNY Tech Prep](https://cunytechprep.org/) is a [NYC Tech Talent Pipeline](http://www.techtalentpipeline.nyc/) program designed to provide exceptional Computer Science students in the [CUNY](https://www.cuny.edu/) senior college system with in-demand software development and professional skills. 4 | 5 | ----- 6 | 7 | # Fall 2022 Web Dev/Data Science Track
_Class Schedule and Materials_ 8 | 9 | 12 | 13 | 14 | - [Tuesday Class](tuesday.md) 15 | - [Wednesday Class](wednesday.md) 16 | - [Thursday Class](thursday.md) 17 | - [Friday 3pm Class](friday-3.md) 18 | - [Friday 6pm Class](friday-6.md) 19 | -------------------------------------------------------------------------------- /friday-3.md: -------------------------------------------------------------------------------- 1 | 2 | # Fall 2022 Web Dev Track
_Class Schedule and Materials_ 3 | 4 | Friday 3pm Section 5 | 6 | ## (8/26) Week 1 7 | 8 | [Slides Week 1: Welcome, Project Ideation, Bootstrap](https://docs.google.com/presentation/d/1x3ZgpUU78Szlv2MYEurGWT2MGifaogVynjpbzqjBofg/edit?usp=sharing) 9 | 10 | [Bootstrap Lab](https://github.com/CUNYTechPrep/lab-bootstrap-5.2) 11 | 12 | Topics: 13 | 14 | - Semester Overview 15 | - Designing Web Apps 16 | - Review: HTML & CSS 17 | - Lab Bootstrap 5.2 18 | 19 | Assignments: 20 | 21 | 22 | - **Project Ideation**: provide your idea in the ideation document 23 | + *If you did not finish this in class finish it before Week 2* 24 | + Ideation slides are bookmarked in your Slack channel 25 | - Meet your classmates and **form teams** 26 | + Read through your classmates ideas and contact them over slack 27 | + Formed teams due in Week 3 class 28 | - Complete and submit the Boostrap Lab by Week 2 29 | 30 | 31 | ## (9/2) NO CLASS 32 | 33 | 34 | ## (9/9) Week 2 35 | 36 | [Slides: React Intro](https://docs.google.com/presentation/d/1Irg_ScxrLVN425nsA1vn7rZ-vv83G0XsB3jQPodXnfA/edit?usp=sharing) 37 | 38 | [Tutorial: Learn React 1](https://github.com/CUNYTechPrep/2022-fall-web-dev/blob/main/materials/learn-react-1.md) 39 | 40 | Topics: 41 | 42 | - React Intro 43 | 44 | Assignments: 45 | 46 | - Form teams by Week 3 47 | 48 | ## (9/16) Week 3 49 | 50 | [Slides: URL's & HTTP Request and Response](https://docs.google.com/presentation/d/1hJgCCh3UiygFQ6q8_G7_KCn332rGuo6VPHlM49JM4Ao/edit?usp=sharing) 51 | 52 | [Slides: fetch() & fetching in React](https://docs.google.com/presentation/d/1ctGUH2sYpqDjo268t_nL0A3u1t6tzAqwk-mw5WIxwnM/edit?usp=sharing) 53 | 54 | [Lab: React Toggle](https://github.com/CUNYTechPrep/lab-react-toggle) 55 | 56 | [Lab: React Trivia](https://github.com/CUNYTechPrep/lab-react-trivia) 57 | 58 | Topics: 59 | 60 | - Client-Server Communication 61 | + Parts of a URL 62 | + Understanding HTTP Request-Response 63 | - `fetch(...)` and Promises 64 | - More React 65 | 66 | Assignments: 67 | 68 | - Teams should submit a [team project proposal](https://github.com/CUNYTechPrep/2022-fall-web-dev/blob/main/materials/team-project-proposal.md) by start of Week 4 class 69 | - Complete and submit [Lab: React Toggle](https://github.com/CUNYTechPrep/lab-react-toggle) 70 | 71 | ## (9/23) Week 4 72 | 73 | Topics: 74 | 75 | - More `fetch()` and React 76 | 77 | Assignments: 78 | 79 | - Complete and submit [Lab: React Trivia](https://github.com/CUNYTechPrep/lab-react-trivia) 80 | 81 | ## (9/30) NO CLASS 82 | 83 | ## (10/7) Week 5 84 | 85 | 86 | Topics: 87 | 88 | - Fullstack Review: Frontend vs Backend 89 | - About `npm` 90 | - Building a backend with Express.js 91 | + Routing 92 | + Route Parameters 93 | + Query Parameters 94 | + Body Parameters 95 | - RESTful Routing 96 | 97 | ## (10/14) Week 6 98 | 99 | [Slides: SDLC & Collaboration](https://docs.google.com/presentation/d/1B_axNuiBuRdlivvITJYF2AS8RCWSa84XBGSR7Iw0S64/edit?usp=sharing) 100 | 101 | Topics: 102 | 103 | - SDLC (software development lifecycle) 104 | - Design Documents 105 | 106 | Assignments: 107 | 108 | - Complete and submit [Lab: Zip Code API](https://github.com/CUNYTechPrep/zip-code-api-lab) by week 7 109 | - Work on your teams [design document](https://docs.google.com/document/d/15Cs2h6f83mXQWmCoSQ37N2fwiKui9Oli9Ph1WwXsDSY/edit) 110 | + share with your project mentor (instructor or TA) 111 | + work on it throughout remaining semester, does not need to be complete 112 | 113 | ## (10/21) Week 7 114 | 115 | [Slides: MVC (slides 1-15)](materials/mvc-data-modeling-2022.pdf) 116 | 117 | [Project Starter Template](https://github.com/CUNYTechPrep/project-starter) 118 | 119 | Topics: 120 | 121 | - MVC (_Models-Views-Controllers_) Project Structure 122 | - Using MVC app structure 123 | - Project Starter setup and walkthrough 124 | 125 | 126 | ## (10/28) Week 8 127 | 128 | [Slides: Databases & Data Modeling (slides 16-42)](materials/mvc-data-modeling-2022.pdf) 129 | 130 | [Lab: Learn Sequelize](https://github.com/CUNYTechPrep/learn-sequelize) 131 | 132 | Topics: 133 | 134 | - Databases and Data Modeling 135 | - ORM's (Sequelize.js) 136 | - Using Sequelize.js 137 | - Testing (Jest) 138 | 139 | Assignments: 140 | 141 | - First Project Presentation 142 | - During Week 9 class 143 | - Presentation Guidelines 144 | - 8 minutes per team (5 min presentation, 3 min Q&A) 145 | - All team members must present at least one slide 146 | - See a presentation template here: [first_project_presentation_template.pdf](materials/first_project_presentation_template.pdf) 147 | - (Optional) Show a demo of work in progress if you can, otherwise show your mockups/design 148 | 149 | 150 | ## (11/4) Week 9 151 | 152 | Topics: 153 | 154 | - **_Project Presentations_** 155 | - Implementing Authentication 156 | - Sessions 157 | - Passport.js, Bcrypt 158 | 159 | ## (11/11) Week 10 160 | 161 | 162 | Topics: 163 | 164 | - Code Reviews 165 | - Software Engineering Best Practices 166 | - [Resource link](http://web.mit.edu/6.005/www/fa16/classes/04-code-review/) 167 | 168 | ## (11/18) Week 11 169 | 170 | 171 | Topics: 172 | 173 | - Deploying to ~Heroku~ ?? 174 | - _Lab Time: Work on Projects_ 175 | 176 | ## (11/25) NO CLASS 177 | 178 | ### Thanksgiving Break 179 | 180 | 181 | ## (12/2) Week 12 182 | 183 | Topics: 184 | 185 | - _Lab Time: Work on Projects_ 186 | 187 | ## (12/9) Week 13 188 | 189 | Topics: 190 | 191 | - Practice Demo Night Pitches and Demos 192 | - _Lab Time: Work on Projects_ 193 | 194 | ## (12/14 - tentatively) DEMO NIGHT 195 | 196 | ### Demo Night 197 | 198 | - Location: TBD 199 | - Time: TBD 200 | -------------------------------------------------------------------------------- /friday-6.md: -------------------------------------------------------------------------------- 1 | 2 | # Fall 2022 Web Dev Track
_Class Schedule and Materials_ 3 | 4 | Friday 6pm Section 5 | 6 | ## (8/26) Week 1 7 | 8 | [Lecture Slides](https://docs.google.com/presentation/d/1o8g0k32GoYaWl-Jxyc0s5tfqPF6D3Y0bC8NzlfgvNtI/edit?usp=sharing) 9 | 10 | [Bootstrap Lab](https://github.com/CUNYTechPrep/lab-bootstrap-5.2) 11 | 12 | Topics: 13 | 14 | - Semester Overview 15 | - Designing Web Apps 16 | - Review: HTML & CSS 17 | - Lab Bootstrap 5.2 18 | 19 | Assignments: 20 | 21 | 22 | - **Project Ideation**: provide your idea in the ideation document 23 | + *If you did not finish this in class finish it before Week 2* 24 | - Meet your classmates and **form teams** 25 | + Read through your classmates ideas and contact them over slack 26 | + Formed teams due in Week 3 class 27 | 28 | ## (9/2) NO CLASS 29 | 30 | 31 | ## (9/9) Week 2 32 | 33 | Topics: 34 | 35 | - [React Intro](https://docs.google.com/presentation/d/1CSbULftt5IP89SKdYIUZM_04BlkgonVys9_-B4F6nZ8/edit?usp=sharing) 36 | 37 | 38 | 39 | ## (9/16) Week 3 40 | 41 | 42 | Topics: 43 | 44 | - Client-Server Communication 45 | + Parts of a URL 46 | + Understanding HTTP Request-Response 47 | - `fetch(...)` and Promises 48 | - More React 49 | 50 | [Slides](https://docs.google.com/presentation/d/1C8UvHIol1NeKwiFhQII-3-UJKqjRMkBm7iUl8i5mi-c/edit?usp=sharing) 51 | 52 | 53 | ## (9/23) Week 4 54 | 55 | Topics: 56 | 57 | - More `fetch()` and React 58 | 59 | ## (9/30) NO CLASS 60 | 61 | ## (10/7) Week 5 62 | 63 | Topics: 64 | 65 | - Fullstack Review: Frontend vs Backend 66 | - About `npm` 67 | - Building a backend with Express.js 68 | + Routing 69 | + Route Parameters 70 | + Query Parameters 71 | + Body Parameters 72 | - RESTful Routing 73 | 74 | [Slides](https://docs.google.com/presentation/d/17QV7xkmlTuLd2fetAPcQg7cBQlZniIjd9AgiQKu2ahA/edit?usp=sharing) 75 | 76 | ## (10/14) Week 6 77 | 78 | Topics: [Slides](https://docs.google.com/presentation/d/1SLijBd51ea5MDVxZJZPEg9KW5q04rLLrfLfsWHKJclY/edit?usp=sharing) 79 | 80 | - SDLC (software development lifecycle) 81 | - MVC (_Models-Views-Controllers_) Project Structure 82 | - Databases and Data Modeling 83 | - ORM's (Sequelize.js) 84 | 85 | ## (10/21) Week 7 86 | 87 | 88 | Topics: [Slides](https://docs.google.com/presentation/d/1oyxpzznt0A9xu31JM5-7MWweb_IRw_m-xVpBa_Np_RM/edit?usp=sharing) 89 | 90 | - Using MVC app structure 91 | - Project Starter setup and walkthrough 92 | 93 | 94 | ## (10/28) Week 8 95 | 96 | 97 | Topics: [Slides](https://drive.google.com/file/d/1CV3m2gDrvozZ3h10xGMaWnwpTEAX9iQ6/view?usp=sharing) 98 | 99 | - Using Sequelize.js 100 | - Testing (Jest) 101 | 102 | ## (11/4) Week 9 103 | 104 | Topics: 105 | 106 | - **_Project Presentations_** 107 | - Implementing Authentication 108 | - Sessions 109 | - Passport.js, Bcrypt 110 | 111 | ## (11/11) Week 10 112 | 113 | 114 | Topics: [Code Review](https://github.com/CUNYTechPrep/2021-fall-web-dev/blob/main/materials/code-reviews.pdf) 115 | 116 | - Code Reviews 117 | - Software Engineering Best Practices 118 | - [Resource link](http://web.mit.edu/6.005/www/fa16/classes/04-code-review/) 119 | 120 | ## (11/18) Week 11 121 | 122 | 123 | Topics: 124 | 125 | - Deploying to ~Heroku~ ?? 126 | - _Lab Time: Work on Projects_ 127 | 128 | ## (11/25) NO CLASS 129 | 130 | ### Thanksgiving Break 131 | 132 | 133 | ## (12/2) Week 12 134 | 135 | Topics: 136 | 137 | - _Lab Time: Work on Projects_ 138 | 139 | ## (12/9) Week 13 140 | 141 | Topics: 142 | 143 | - Practice Demo Night Pitches and Demos 144 | - _Lab Time: Work on Projects_ 145 | 146 | ## (12/14 - tentatively) DEMO NIGHT 147 | 148 | ### Demo Night 149 | 150 | - Location: TBD 151 | - Time: TBD 152 | -------------------------------------------------------------------------------- /materials/first_project_presentation_template.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CUNYTechPrep/2022-fall-web-dev/bf3e9a633a46dd7fe97c4af45d671032aec0a6b0/materials/first_project_presentation_template.pdf -------------------------------------------------------------------------------- /materials/learn-react-1.md: -------------------------------------------------------------------------------- 1 | # Learn React 1 2 | 3 | ## Step 1. Getting started 4 | 5 | Open up your terminal. 6 | 7 | Make sure node and npm are working. Run the following commands: 8 | 9 | ```bash 10 | node --version 11 | ``` 12 | 13 | It should display version 16.x (or 18.x). 14 | 15 | ```bash 16 | npx --version 17 | ``` 18 | 19 | Any version means it is installed. 20 | 21 | > Note: `npm` and `npx` are installed by Node.js 22 | 23 | If these are not installed install the latest version of node. 24 | 25 | - https://github.com/CUNYTechPrep/guides#development-environment-setup 26 | 27 | ## Step 2. Create and Launch a React project 28 | 29 | In your terminal, make a directory for your projects, and change directory to it. I like to keep my files in a directory named `ctp` under my home directory. 30 | 31 | ```bash 32 | cd ~ 33 | mkdir ctp 34 | cd ctp 35 | ``` 36 | 37 | > you only have to `mkdir ctp` if this directory doesn't already exist 38 | 39 | Now we're going to create our first react app: 40 | 41 | ```bash 42 | npx create-react-app learn-react-1 43 | cd learn-react-1 44 | npm start 45 | ``` 46 | 47 | If your browser opened up automatically and you see the spinning logo, then everything is working. 48 | 49 | ## Step 3. Look through the code 50 | 51 | Open up the `learn-react-1` directory in your code editor. 52 | 53 | Let's take a look at `/public/index.html`. Of importance here is `
`. This is the container where our React app will be loaded. 54 | 55 | Now let's go to the `/src/index.js` and let's delete all of the code in this file. This is the entry point to our React app. No need to worry about the rest of the files in src for now. We will eventually delete them all, and create new files ourselves. 56 | 57 | > When you delete all of the code and save the file, what happened in the browser? 58 | 59 | ## Step 4. Hello World 60 | 61 | In `/src/index.js` add the following code: 62 | 63 | ```JSX 64 | import React from "react"; 65 | import ReactDOM from "react-dom/client"; 66 | 67 | const htmlContainer = document.getElementById("root"); 68 | const root = ReactDOM.createRoot(htmlContainer); 69 | 70 | root.render(

Hello World!

) 71 | ``` 72 | 73 | Let's break this code down. 74 | 75 | - import statements 76 | - `root = ReactDOM.createRoot(htmlDOMContainer)` 77 | - `root.render(reactElement)` 78 | - JSX `

Hello World!

` 79 | 80 | > This is not HTML, it is JSX. 81 | 82 | Try to change the JSX, add some other tags. Try the following examples and observe the results. 83 | 84 | ```JSX 85 |

Hello World!

86 | ``` 87 | 88 | ```JSX 89 |
90 |

Hello World!

91 |

Hi Again

92 |
93 | ``` 94 | 95 | ```JSX 96 |
97 |

Hello World! 98 |

Hi Again

99 |
100 | ``` 101 | 102 | ```JSX 103 |

Hello World!

104 |

Hi Again

105 | ``` 106 | 107 | ```JSX 108 | <> 109 |

Hello World!

110 |

Hi Again

111 | 112 | ``` 113 | 114 | - all standard HTML tags are available in lowercase version 115 | - can nest multiple components 116 | - all tags must be closed 117 | - all JSX must have a single parent tag 118 | - can use a fragment tag `<>` 119 | 120 | ## Step 5. Functional Components 121 | 122 | The point of a component based system is to create reusable componenets. Let's make the following changes to our code: 123 | 124 | ```JSX 125 | import React from "react"; 126 | import ReactDOM from "react-dom/client"; 127 | 128 | function ClassList() { 129 | return ( 130 |
131 |

Welcome to CTP

132 |

List of Students

133 |
134 | ); 135 | } 136 | 137 | const htmlContainer = document.getElementById("root"); 138 | const root = ReactDOM.createRoot(htmlContainer); 139 | root.render(); 140 | ``` 141 | 142 | What did we just do? 143 | 144 | - components should begin with capital letters 145 | - notice the `( )` in the return 146 | - Try , did it work? 147 | - is a standard HTML tag? 148 | 149 | We can and should create many small components, that we put together. Let's make the following changes: 150 | 151 | ```JSX 152 | ... 153 | 154 | function StudentInfo() { 155 | return ( 156 |
157 |
158 | Doe, Jane 159 |
160 |
    161 |
  • 162 | ID: 123 163 |
  • 164 |
  • 165 | School: Queens College 166 |
  • 167 |
  • 168 | Major: Computer Science 169 |
  • 170 |
171 |
172 | ); 173 | } 174 | 175 | function ClassList() { 176 | return ( 177 |
178 |

Welcome to CTP

179 |

List of Students

180 | 181 |
182 | ); 183 | } 184 | 185 | ... 186 | ``` 187 | 188 | - Try adding multiple `StudentInfo` tags in the ClassList component. What happens? 189 | 190 | ## Step 6. Props and embedding JavaScript in JSX 191 | 192 | A component like StudentInfo is a lot more useful if we can dynamically change its content. We will do that now: 193 | 194 | ```JSX 195 | ... 196 | 197 | function StudentInfo(props) { 198 | return ( 199 |
200 |
201 | {props.lastName}, {props.firstName} 202 |
203 |
    204 |
  • 205 | ID: {props.sId} 206 |
  • 207 |
  • 208 | School: {props.school} 209 |
  • 210 |
  • 211 | Major: {props.major} 212 |
  • 213 |
214 |
215 | ); 216 | } 217 | 218 | function ClassList() { 219 | return ( 220 |
221 |

Welcome to CTP

222 |

List of Students

223 | 224 | 225 | 226 |
227 | ); 228 | } 229 | 230 | ... 231 | ``` 232 | 233 | - add different names to the last two `StudentInfo` tags 234 | - `{ }` allows us to embed javascript within JSX 235 | - `props` are always passed to components 236 | - `props` are immutable, what does that mean? 237 | - try changing `props.name = "Jose"`, what happens? 238 | - props can be destructured in a component 239 | + `function StudentInfo({ firstName, lastName, sId, school, major }) {` 240 | 241 | ## Step 7. Rendering a list of students from a data array 242 | 243 | When we render components in React, we usually get the data from an api or some other data source. We can use iterate over data lists with `.map()` to render each component. 244 | 245 | Add the following data to your index.js file. 246 | 247 | ``` 248 | const studentList = [ 249 | { 250 | firstName: "Misty", 251 | lastName: "Knight", 252 | sId: "234", 253 | school: "Queens College", 254 | major: "Law", 255 | }, 256 | { 257 | firstName: "Jessica", 258 | lastName: "Jones", 259 | sId: "434", 260 | school: "Brooklyn College", 261 | major: "CS", 262 | }, 263 | { 264 | firstName: "Colleen", 265 | lastName: "Wing", 266 | sId: "233", 267 | school: "Queens College", 268 | major: "CS", 269 | }, 270 | { 271 | firstName: "Dare", 272 | lastName: "Devil", 273 | sId: "876", 274 | school: "CCNY", 275 | major: "Law", 276 | }, 277 | { 278 | firstName: "Luke", 279 | lastName: "Cage", 280 | sId: "323", 281 | school: "CCNY", 282 | major: "Math", 283 | }, 284 | ]; 285 | ``` 286 | 287 | Now modify your ClassList component to this: 288 | 289 | ```JSX 290 | ... 291 | function ClassList() { 292 | return ( 293 |
294 |

Welcome to CTP

295 |

List of Students

296 | {studentList.map((student) => ( 297 | 298 | ))} 299 |
300 | ); 301 | } 302 | ... 303 | ``` 304 | 305 | - we can destructure objects `{...student}` to pass them as props (keys and prop-names must match) 306 | - when rendering lists of components we must provide unique keys 307 | 308 | ## Step 8. HTML Attributes like `
` and adding CSS 309 | 310 | JSX is not HTML, but it does allow you to set standard HTML attributes with slightly different names. 311 | 312 | Instead of `class` we use `className`. React's designers did this on purpose to differentiate JSX from HTML. 313 | 314 | There are many ways to handle CSS in React. For now we will keep it simple and use the file `/src/index.css` 315 | 316 | in `/src/index.css` add the following to the bottom of the file: 317 | ```css 318 | .red-text { 319 | color: red; 320 | } 321 | ``` 322 | 323 | in `/src/index.js` add the following below your import statements: 324 | 325 | ```JSX 326 | import './index.css' 327 | ``` 328 | 329 | and make the following change: 330 | 331 | ```JSX 332 | ... 333 | 334 | function ClassList() { 335 | return ( 336 |
337 |

Welcome to CTP

338 |

List of Students

339 | {studentList.map((student) => ( 340 | 341 | ))} 342 |
343 | ); 344 | } 345 | ... 346 | ``` 347 | 348 | ## Step 9. Event Handling 349 | 350 | Let's change our example app to explore the concept of events. What we ideally want to do now is keep track of how many times a user has clicked a button. It will take us two steps to get there. 351 | 352 | ```JSX 353 | ... 354 | function CountApp() { 355 | return ( 356 |
357 |

The button has been clicked 0 times

358 | 361 |
362 | ); 363 | } 364 | 365 | // replace the root.render() call with this 366 | root.render(); 367 | ``` 368 | 369 | In regular HTML, we can use the attribute `
` to run some javascript event handling code. In react we will use the `onClick` prop instead. 370 | 371 | - notice the camel casing of standard html attributes `className`, `onClick` in react 372 | - onClick receives a function (callback) that will run in response to the event 373 | - what happens if you change it to just `onClick={ alert('The button was pressed!) }` 374 | - `onClick` works with other html tags, such as img, div, h1, etc. 375 | - `e` stands for event, it contains information about the user event, such as which mouse button was used to click. 376 | 377 | 378 | ## Step 10. State and hooks 379 | 380 | Now that we can handle the events like a button being clicked, we want to keep track of how many times the user has clicked the button. 381 | 382 | Props are immutable (read-only) so we cannot use them to do that. So now we introduce another core react object that **is mutable, `state`**. 383 | 384 | ```JSX 385 | // Update your import to this 386 | import React, { useState } from "react"; 387 | 388 | ... 389 | 390 | function CountApp() { 391 | const [numClicks, setNumClicks] = useState(0); 392 | 393 | const handleClick = (event) => { 394 | setNumClicks(numClicks + 1); 395 | }; 396 | 397 | return ( 398 |
399 |

The button has been clicked {numClicks} times

400 | 401 |
402 | ); 403 | } 404 | ``` 405 | 406 | In this example we initialize and access state by calling the `useState` hook and we update the state in the `handleClick` function. 407 | 408 | - We can continue to use props if needed. 409 | - the useState hook always returns an array of two things 410 | + `const [currentValue, setValueFunction] = useState(initialValue)` 411 | - `handleClick` is our own function. We can call it anything we like. 412 | - state can only be updated with the setValueFunction provided by the hook 413 | - `numClicks = 42` will not work as expected, try this. 414 | -------------------------------------------------------------------------------- /materials/mvc-data-modeling-2022.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CUNYTechPrep/2022-fall-web-dev/bf3e9a633a46dd7fe97c4af45d671032aec0a6b0/materials/mvc-data-modeling-2022.pdf -------------------------------------------------------------------------------- /materials/team-project-proposal.md: -------------------------------------------------------------------------------- 1 | # Team Project Proposal 2 | 3 | Now that groups are formed, submit **one team project proposal** for approval. This proposal is a summary of the idea and similar to your individual proposals. The proposal requirements are listed below. 4 | 5 | ## Project Proposal Requirements 6 | 7 | _Make sure your proposal contains the following 5 sections._ 8 | 9 | _It should be **2 pages max**. You do not have to include mockups or data models at this time. We will work on those in your next team assignment._ 10 | 11 | 1. **Team Name** and **Project Name** 12 | 2. **Team Members** 13 | - _Include_: Name, Email, Github username, School 14 | 3. **Executive summary** (2 paragraphs) 15 | - A summary/pitch of your project. This should include answers to the following: 16 | + What does the application do? 17 | + What is the motivation for your application? 18 | + Which types of people would want to use this application? (don't say everyone) 19 | + Are there similar applications and/or competitors available now? How does your idea differ? or why is there a need for a competitor? 20 | * _It is OK for your idea to be a clone of an existing application_ 21 | 4. **User-types**: 22 | - Clearly define and describe the User-types for your application. 1 or more user-types depending on your idea. 23 | - _Think of_: Sellers, Buyers, Administrator, Moderator, Content-creator, Consumer, Teachers, Students, etc... 24 | 5. **User Stories**: 25 | - List the most important actions for each user-type 26 | - What are the most important workflows for users of your application 27 | - To learn more about User stories read: 28 | + https://dzone.com/articles/writing-user-stories-web 29 | + https://www.mountaingoatsoftware.com/presentations/introduction-to-user-stories 30 | 31 | ## Submit 32 | 33 | Submit your team proposal here: https://forms.gle/TijnKEjW7n9eLhFU9 34 | 35 | **Due:** Week 4 36 | -------------------------------------------------------------------------------- /thursday.md: -------------------------------------------------------------------------------- 1 | 2 | # Fall 2022 Web Dev Track
_Class Schedule and Materials_ 3 | 4 | Thursday 6:30-9pm Section 5 | 6 | ## (9/1) Week 1 7 | 8 | [Slides Week 1: Welcome, Project Ideation, Bootstrap](https://docs.google.com/presentation/d/1x3ZgpUU78Szlv2MYEurGWT2MGifaogVynjpbzqjBofg/edit?usp=sharing) 9 | 10 | [Bootstrap Lab](https://github.com/CUNYTechPrep/lab-bootstrap-5.2) 11 | 12 | Topics: 13 | 14 | - Semester Overview 15 | - Designing Web Apps 16 | - Review: HTML & CSS 17 | - Lab Bootstrap 5.2 18 | 19 | Assignments: 20 | 21 | 22 | - **Project Ideation**: provide your idea in the ideation document 23 | + *If you did not finish this in class finish it before Week 2* 24 | - Meet your classmates and **form teams** 25 | + Read through your classmates ideas and contact them over slack 26 | + Formed teams due in Week 3 class 27 | 28 | 29 | ## (9/8) Week 2 30 | 31 | [Slides: React Intro](https://docs.google.com/presentation/d/1Irg_ScxrLVN425nsA1vn7rZ-vv83G0XsB3jQPodXnfA/edit?usp=sharing) 32 | 33 | [Tutorial: Learn React 1](https://github.com/CUNYTechPrep/2022-fall-web-dev/blob/main/materials/learn-react-1.md) 34 | 35 | Topics: 36 | 37 | - React Intro 38 | 39 | Assignments: 40 | 41 | - Form teams by Week 3 42 | 43 | 44 | 45 | ## (9/15) Week 3 46 | 47 | [Slides: URL's & HTTP Request and Response](https://docs.google.com/presentation/d/1hJgCCh3UiygFQ6q8_G7_KCn332rGuo6VPHlM49JM4Ao/edit?usp=sharing) 48 | 49 | [Slides: fetch() & fetching in React](https://docs.google.com/presentation/d/1ctGUH2sYpqDjo268t_nL0A3u1t6tzAqwk-mw5WIxwnM/edit?usp=sharing) 50 | 51 | [Lab: React Toggle](https://github.com/CUNYTechPrep/lab-react-toggle) 52 | 53 | [Lab: React Trivia](https://github.com/CUNYTechPrep/lab-react-trivia) 54 | 55 | 56 | Topics: 57 | 58 | - Client-Server Communication 59 | + Parts of a URL 60 | + Understanding HTTP Request-Response 61 | - `fetch(...)` and Promises 62 | - More React 63 | 64 | Assignments: 65 | 66 | - Teams should submit a [team project proposal](https://github.com/CUNYTechPrep/2022-fall-web-dev/blob/main/materials/team-project-proposal.md) by start of Week 4 class 67 | - Complete and submit [Lab: React Toggle](https://github.com/CUNYTechPrep/lab-react-toggle) 68 | 69 | 70 | ## (9/22) Week 4 71 | 72 | Topics: 73 | 74 | - More `fetch()` and React 75 | 76 | Assignments: 77 | 78 | - Complete and submit [Lab: React Trivia](https://github.com/CUNYTechPrep/lab-react-trivia) 79 | 80 | ## (9/29) NO CLASS 81 | 82 | 83 | ## (10/6) Week 5 84 | 85 | [Slides: Full Stack Overview](https://docs.google.com/presentation/d/1x6mtEjdU2JhhJuUaoP0LC4_uMtTUEpNDxD6NIabnkKM/edit?usp=sharing) 86 | 87 | [Slides: NPM & Express.js](https://docs.google.com/presentation/d/1oWHbjoTU3BdrCpZ51I73D3YRLkManTQtkUheegribg4/edit?usp=sharing) 88 | 89 | Topics: 90 | 91 | - Fullstack Review: Frontend vs Backend 92 | - About `npm` 93 | - Building a backend with Express.js 94 | + Routing 95 | + Route Parameters 96 | + Query Parameters 97 | + Body Parameters 98 | - RESTful Routing 99 | 100 | Assignments: 101 | 102 | - Complete and submit [Lab: React Zip Search](https://github.com/CUNYTechPrep/lab-react-zip-search) by week 6 103 | 104 | 105 | 106 | ## (10/13) Week 6 107 | 108 | Topics: 109 | 110 | - SDLC (software development lifecycle) 111 | - MVC (_Models-Views-Controllers_) Project Structure 112 | - Databases and Data Modeling 113 | - ORM's (Sequelize.js) 114 | 115 | ## (10/20) Week 7 116 | 117 | 118 | Topics: 119 | 120 | - Using MVC app structure 121 | - Project Starter setup and walkthrough 122 | 123 | 124 | ## (10/27) Week 8 125 | 126 | 127 | Topics: 128 | 129 | - Using Sequelize.js 130 | - Testing (Jest) 131 | 132 | ## (11/3) Week 9 133 | 134 | Topics: 135 | 136 | - **_Project Presentations_** 137 | - Implementing Authentication 138 | - Sessions 139 | - Passport.js, Bcrypt 140 | 141 | ## (11/10) Week 10 142 | 143 | 144 | Topics: 145 | 146 | - Code Reviews 147 | - Software Engineering Best Practices 148 | - [Resource link](http://web.mit.edu/6.005/www/fa16/classes/04-code-review/) 149 | 150 | ## (11/17) Week 11 151 | 152 | 153 | Topics: 154 | 155 | - Deploying to ~Heroku~ ?? 156 | - _Lab Time: Work on Projects_ 157 | 158 | ## (11/24) NO CLASS 159 | 160 | ### Thanksgiving Break 161 | 162 | 163 | ## (12/1) Week 12 164 | 165 | Topics: 166 | 167 | - _Lab Time: Work on Projects_ 168 | 169 | ## (12/8) Week 13 170 | 171 | Topics: 172 | 173 | - Practice Demo Night Pitches and Demos 174 | - _Lab Time: Work on Projects_ 175 | 176 | ## (12/14 - tentatively) DEMO NIGHT 177 | 178 | ### Demo Night 179 | 180 | - Location: TBD 181 | - Time: TBD 182 | -------------------------------------------------------------------------------- /tuesday.md: -------------------------------------------------------------------------------- 1 | 2 | # Fall 2022 Web Dev Track
_Class Schedule and Materials_ 3 | 4 | Tuesday 6:30-9pm Section 5 | 6 | ## (8/30) Week 1 7 | 8 | [Slides Week 1: Welcome, Project Ideation, Bootstrap](https://docs.google.com/presentation/d/1x3ZgpUU78Szlv2MYEurGWT2MGifaogVynjpbzqjBofg/edit?usp=sharing) 9 | 10 | [Bootstrap Lab](https://github.com/CUNYTechPrep/lab-bootstrap-5.2) 11 | 12 | Topics: 13 | 14 | - Semester Overview 15 | - Designing Web Apps 16 | - Review: HTML & CSS 17 | - Lab Bootstrap 5.2 18 | 19 | Assignments: 20 | 21 | 22 | - **Project Ideation**: provide your idea in the ideation document 23 | + *If you did not finish this in class finish it before Week 2* 24 | + Ideation slides are bookmarked in your Slack channel 25 | - Meet your classmates and **form teams** 26 | + Read through your classmates ideas and contact them over slack 27 | + Formed teams due in Week 3 class 28 | - Complete and submit the Boostrap Lab by Week 2 29 | 30 | 31 | ## (9/6) Week 2 32 | 33 | [Slides: React Intro](https://docs.google.com/presentation/d/1Irg_ScxrLVN425nsA1vn7rZ-vv83G0XsB3jQPodXnfA/edit?usp=sharing) 34 | 35 | [Tutorial: Learn React 1](https://github.com/CUNYTechPrep/2022-fall-web-dev/blob/main/materials/learn-react-1.md) 36 | 37 | Topics: 38 | 39 | - React Intro 40 | 41 | Assignments: 42 | 43 | - Form teams by Week 3 44 | 45 | 46 | 47 | ## (9/13) Week 3 48 | 49 | [Slides: URL's & HTTP Request and Response](https://docs.google.com/presentation/d/1hJgCCh3UiygFQ6q8_G7_KCn332rGuo6VPHlM49JM4Ao/edit?usp=sharing) 50 | 51 | [Slides: fetch() & fetching in React](https://docs.google.com/presentation/d/1ctGUH2sYpqDjo268t_nL0A3u1t6tzAqwk-mw5WIxwnM/edit?usp=sharing) 52 | 53 | [Lab: React Toggle](https://github.com/CUNYTechPrep/lab-react-toggle) 54 | 55 | [Lab: React Trivia](https://github.com/CUNYTechPrep/lab-react-trivia) 56 | 57 | Topics: 58 | 59 | - Client-Server Communication 60 | + Parts of a URL 61 | + Understanding HTTP Request-Response 62 | - `fetch(...)` and Promises 63 | - More React 64 | 65 | Assignments: 66 | 67 | - Teams should submit a [team project proposal](https://github.com/CUNYTechPrep/2022-fall-web-dev/blob/main/materials/team-project-proposal.md) by start of Week 4 class 68 | - Complete and submit [Lab: React Toggle](https://github.com/CUNYTechPrep/lab-react-toggle) 69 | 70 | ## (9/20) Week 4 71 | 72 | Topics: 73 | 74 | - More `fetch()` and React 75 | 76 | Assignments: 77 | 78 | - Complete and submit [Lab: React Trivia](https://github.com/CUNYTechPrep/lab-react-trivia) 79 | 80 | ## (9/27) Week 5 81 | 82 | [Slides: Full Stack Overview](https://docs.google.com/presentation/d/1x6mtEjdU2JhhJuUaoP0LC4_uMtTUEpNDxD6NIabnkKM/edit?usp=sharing) 83 | 84 | [Slides: NPM & Express.js](https://docs.google.com/presentation/d/1oWHbjoTU3BdrCpZ51I73D3YRLkManTQtkUheegribg4/edit?usp=sharing) 85 | 86 | Topics: 87 | 88 | - Fullstack Review: Frontend vs Backend 89 | - About `npm` 90 | - Building a backend with Express.js 91 | + Routing 92 | + Route Parameters 93 | + Query Parameters 94 | + Body Parameters 95 | - RESTful Routing 96 | 97 | Assignments: 98 | 99 | - Complete and submit [Lab: React Zip Search](https://github.com/CUNYTechPrep/lab-react-zip-search) by week 6 100 | 101 | ## (10/4) NO CLASS 102 | 103 | 104 | ## (10/11) Week 6 105 | 106 | [Slides: SDLC & Collaboration](https://docs.google.com/presentation/d/1B_axNuiBuRdlivvITJYF2AS8RCWSa84XBGSR7Iw0S64/edit?usp=sharing) 107 | 108 | Topics: 109 | 110 | - SDLC (software development lifecycle) 111 | - Design Documents 112 | 113 | Assignments: 114 | 115 | - Complete and submit [Lab: Zip Code API](https://github.com/CUNYTechPrep/zip-code-api-lab) by week 7 116 | - Work on your teams [design document](https://docs.google.com/document/d/15Cs2h6f83mXQWmCoSQ37N2fwiKui9Oli9Ph1WwXsDSY/edit) 117 | + share with your project mentor (instructor or TA) 118 | + work on it throughout remaining semester, does not need to be complete 119 | 120 | ## (10/18) Week 7 121 | 122 | [Slides: MVC (slides 1-15)](materials/mvc-data-modeling-2022.pdf) 123 | 124 | [Project Starter Template](https://github.com/CUNYTechPrep/project-starter) 125 | 126 | Topics: 127 | 128 | - MVC (_Models-Views-Controllers_) Project Structure 129 | - Using MVC app structure 130 | - Project Starter setup and walkthrough 131 | 132 | 133 | ## (10/25) Week 8 134 | 135 | [Slides: Databases & Data Modeling (slides 16-42)](materials/mvc-data-modeling-2022.pdf) 136 | 137 | [Lab: Learn Sequelize](https://github.com/CUNYTechPrep/learn-sequelize) 138 | 139 | Topics: 140 | 141 | - Databases and Data Modeling 142 | - ORM's (Sequelize.js) 143 | - Using Sequelize.js 144 | - Testing (Jest) 145 | 146 | Assignments: 147 | 148 | - First Project Presentation 149 | - During Week 9 class 150 | - Presentation Guidelines 151 | - 8 minutes per team (5 min presentation, 3 min Q&A) 152 | - All team members must present at least one slide 153 | - See a presentation template here: [first_project_presentation_template.pdf](materials/first_project_presentation_template.pdf) 154 | - (Optional) Show a demo of work in progress if you can, otherwise show your mockups/design 155 | 156 | 157 | ## (11/1) Week 9 158 | 159 | Topics: 160 | 161 | - **_Project Presentations_** 162 | - Implementing Authentication 163 | - Sessions 164 | - Passport.js, Bcrypt 165 | 166 | ## (11/8) Week 10 167 | 168 | 169 | Topics: 170 | 171 | - Code Reviews 172 | - Software Engineering Best Practices 173 | - [Resource link](http://web.mit.edu/6.005/www/fa16/classes/04-code-review/) 174 | 175 | ## (11/15) Week 11 176 | 177 | 178 | Topics: 179 | 180 | - Deploying to ~Heroku~ ?? 181 | - _Lab Time: Work on Projects_ 182 | 183 | ## (11/22) NO CLASS 184 | 185 | ### Thanksgiving Break 186 | 187 | 188 | ## (11/29) Week 12 189 | 190 | Topics: 191 | 192 | - _Lab Time: Work on Projects_ 193 | 194 | ## (12/6) Week 13 195 | 196 | Topics: 197 | 198 | - Practice Demo Night Pitches and Demos 199 | - _Lab Time: Work on Projects_ 200 | 201 | ## (12/14 - tentatively) DEMO NIGHT 202 | 203 | ### Demo Night 204 | 205 | - Location: TBD 206 | - Time: TBD 207 | -------------------------------------------------------------------------------- /wednesday.md: -------------------------------------------------------------------------------- 1 | 2 | # Fall 2022 Web Dev Track
_Class Schedule and Materials_ 3 | 4 | Wednesday 6:30-9pm Section 5 | 6 | [Development Environment Setup Instructions](https://github.com/CUNYTechPrep/guides#development-environment-setup) 7 | ___ 8 | ## (8/31) Week 1 9 | 10 | Lecture Slides 11 | 12 | [Week 1](https://docs.google.com/presentation/d/1x3ZgpUU78Szlv2MYEurGWT2MGifaogVynjpbzqjBofg/edit#slide=id.p) 13 | 14 | Topics: 15 | - Semester Overview 16 | - Designing Web Apps 17 | - Review: HTML & CSS 18 | - Lab Bootstrap 5.2 19 | 20 | Assignments: 21 | - [Bootstrap Lab](https://github.com/CUNYTechPrep/lab-bootstrap-5.2) 22 | + Solution: 23 | + [General Solution](https://cunytechprep.github.io/lab-bootstrap-5-solution/) 24 | + [Alternating Solution](https://cunytechprep.github.io/lab-bootstrap-5-solution/alternating.html) 25 | - **Project Ideation**: provide your idea in the [ideation document](https://docs.google.com/presentation/d/1E_I4xPxnGqlbCTZ0cBjCIN17-b2P7xjHbCG6_R1C4Js/edit#slide=id.gfe736c9b1a_0_136) 26 | - Meet your classmates and **form teams** 27 | + Read through your classmates ideas and contact them over slack 28 | + Formed teams due in Week 3 class 29 | ___ 30 | 31 | 32 | ## (9/7) Week 2 33 | 34 | Lecture Slides: 35 | 36 | [Week 2](https://docs.google.com/presentation/d/1hEk66SvgwV1oshPLHaDd5tstXcctox7v3hot399Qwa8/edit#slide=id.g4785ebae2a_0_77) 37 | 38 | Topics: 39 | - React Intro 40 | - [React Intro code along](https://gist.github.com/medgardo/45d976f31c86bdc9928908bf46ca5393) 41 | ___ 42 | 43 | 44 | ## (9/14) Week 3 45 | 46 | Topics: 47 | 48 | - [Client-Server Communication](https://docs.google.com/presentation/d/1hJgCCh3UiygFQ6q8_G7_KCn332rGuo6VPHlM49JM4Ao/edit#slide=id.p) 49 | + Parts of a URL 50 | + Understanding HTTP Request-Response 51 | - [`fetch(...)` and Promises](https://docs.google.com/presentation/d/1ctGUH2sYpqDjo268t_nL0A3u1t6tzAqwk-mw5WIxwnM/edit#slide=id.p) 52 | - More React 53 | + [Lab: React Toggle](https://github.com/CUNYTechPrep/lab-react-toggle) 54 | + [Lab: React Trivia](https://github.com/CUNYTechPrep/lab-react-trivia) 55 | 56 | Assignments: 57 | - [Submit Team Project Proposal](https://github.com/CUNYTechPrep/2022-fall-web-dev/blob/main/materials/team-project-proposal.md) 58 | ___ 59 | 60 | 61 | ## (9/21) Week 4 62 | 63 | Topics: 64 | - More `fetch()` and React 65 | 66 | Class Example: 67 | ``` 68 | function App() { 69 | const [data, setData] = useState([]); 70 | const [zipCode, setZipCode] = useState(''); 71 | 72 | const fetchData = () => { 73 | fetch('https://ctp-zip-api.herokuapp.com/zip/' + zipCode , { 74 | 'mode' : 'cors', 75 | headers: { 76 | 'Content-Type' : 'application/json', 77 | } 78 | }) 79 | .then((response) => response.json()) 80 | .then((responseData) => setData(responseData)) 81 | .catch((error) => console.log(error)); 82 | } 83 | 84 | return ( 85 |
86 |
87 |
88 | setZipCode(e.target.value)}> 89 |
90 | 91 |
{JSON.stringify(data)}
92 |
93 |
94 | ); 95 | } 96 | ``` 97 | 98 | Assignments: 99 | - [React Zip Code Search Lab](https://github.com/CUNYTechPrep/lab-react-zip-search) 100 | ___ 101 | 102 | 103 | ## (9/28) Week 5 104 | 105 | Topics: 106 | - Fullstack Review: Frontend vs Backend 107 | - About `npm` 108 | - Building a backend with Express.js 109 | + Routing 110 | + Route Parameters 111 | + Query Parameters 112 | + Body Parameters 113 | - RESTful Routing 114 | ___ 115 | 116 | 117 | ## (10/5) NO CLASS 118 | ___ 119 | 120 | 121 | ## (10/12) Week 6 122 | 123 | Lecture Slides: 124 | 125 | [Week 6](https://docs.google.com/presentation/d/1B_axNuiBuRdlivvITJYF2AS8RCWSa84XBGSR7Iw0S64/edit#slide=id.p) 126 | 127 | Topics: 128 | - SDLC (software development lifecycle) 129 | - MVC (_Models-Views-Controllers_) Project Structure 130 | 131 | 132 | [CTP Design Doc Template](https://docs.google.com/document/d/15lwdcMIoJKBQjHIaDPmmK1V6-TIZscRSO_COg_x5hZs/edit#heading=h.lr551yfcle69) 133 | ___ 134 | 135 | 136 | ## (10/19) Week 7 137 | [Lecture Slides](https://github.com/CUNYTechPrep/2022-fall-web-dev/blob/main/materials/mvc-data-modeling-2022.pdf) 138 | 139 | Topics: 140 | - Using MVC app structure 141 | - Project Starter setup and walkthrough 142 | 143 | [Project Starter](https://github.com/CUNYTechPrep/project-starter) 144 | ___ 145 | 146 | 147 | ## (10/26) Week 8 148 | [Lecture Slides](https://github.com/CUNYTechPrep/2022-fall-web-dev/blob/main/materials/mvc-data-modeling-2022.pdf) 149 | 150 | Topics: 151 | - Databases and Data Modeling 152 | - ORM's (Sequelize.js) 153 | - [Learn Sequelize Lab](https://github.com/CUNYTechPrep/learn-sequelize) 154 | - Testing (Jest) 155 | ___ 156 | 157 | 158 | ## (11/2) Week 9 159 | 160 | Topics: 161 | - **_Project Presentations_** 162 | - Implementing Authentication 163 | - Sessions 164 | - Passport.js, Bcrypt 165 | ___ 166 | 167 | 168 | ## (11/9) Week 10 169 | 170 | Topics: 171 | - Code Reviews 172 | - Software Engineering Best Practices 173 | - [Resource link](http://web.mit.edu/6.005/www/fa16/classes/04-code-review/) 174 | ___ 175 | 176 | 177 | ## (11/16) Week 11 178 | 179 | Topics: 180 | - Deploying to ~Heroku~ ?? 181 | - _Lab Time: Work on Projects_ 182 | ___ 183 | 184 | 185 | ## (11/23) NO CLASS 186 | ___ 187 | 188 | 189 | ## Thanksgiving Break 190 | ___ 191 | 192 | 193 | ## (11/30) Week 12 194 | 195 | Topics: 196 | - _Lab Time: Work on Projects_ 197 | ___ 198 | 199 | 200 | ## (12/7) Week 13 201 | Topics: 202 | - Practice Demo Night Pitches and Demos 203 | - _Lab Time: Work on Projects_ 204 | ___ 205 | 206 | 207 | ## (12/14 - tentatively) DEMO NIGHT 208 | ___ 209 | 210 | 211 | ### Demo Night 212 | - Location: TBD 213 | - Time: TBD 214 | --------------------------------------------------------------------------------