+
+
+ Activity 1: User Stories and Conditions of Satisfaction
+
+
+
+
+
+
+
+ Introduction
+
+
+
+
+
+
This activity will give you practice with using user stories to solicit and document user requirements, refining them into conditions of satisfaction, and assigning priorities.
Consider a Learning Management System (like Canvas). Choose one of the following areas:
+
+
+
Sections and Enrollment
+
Assignment Submission and Grading
+
Gradebooks
+
+
+
+
+ Requirements for this activity
+
+
+
+
+
+
+
+
Identify at least 3 different roles representing different classes of users for that area.
+
+
+
Choose one of those roles and write down at least 3 different user stories for that participant. These should be of the form
+
+
As a <role> I want <some capability> so that I can <get some benefit>
+
+
+
For each user story, write 3 conditions of satisfaction with appropriate priorities. (Essential = user story is not satisfied without it)
+
+
+
+
Please submit a total of:
+
+
+
1 area
+
3 roles
+
3 user stories
+
9 conditions of satisfaction with priorities
+
+
+
When you are done, submit your work as required by your instructor (check the Canvas asssignment for details, if assigned). This may vary from section to section.
Write down the testable behaviors for the satisfaction condition: “Add a new grade for an existing student”
+
Identify at least two exceptional conditions or design decisions associated with these testable behaviors
+
Write Jest tests for your testable behaviors
+
Implement a method addGrade that passes your tests.
+
+
+
When you are done, submit your work as required by your instructor (check the Canvas asssignment for details, if assigned). This may vary from section to section.
We will gain experience improving test suites using two adequacy criteria: line coverage and mutation coverage. The instructions reference line numbers in transcriptManager.ts. Do not change that file while you are following along, or else you may find that the line referenced do not match what you see.
+
+
As usual, download the starter code and run npm install.
+
+
Then, follow the instructions given in the README.md file. Be sure to review the canvas assignment for related details (if assigned).
To run it on your computer, run npm install to fetch the dependencies for the project, and then run npm run demo, which should produce the output like the following:
+
Current conditions: 80F degrees and 65% humidity
+Avg/max/min temperature = 80/80/0
+Heat Index: 82.95535063710001
+Forecast: Improving weather on the way!
+Current conditions: 82F degrees and 70% humidity
+Avg/max/min temperature = 81/82/0
+Heat Index: 86.90123306385205
+Forecast: Watch out for cooler, rainy weather
+Current conditions: 78F degrees and 90% humidity
+Avg/max/min temperature = 80/82/0
+Heat Index: 83.64967139559604
+Forecast: More of the same
+
+
+
There is a lot to be improved from this design. Modify this code so that it uses the observer pattern, with each of the various display classes as
+the observers, and the WeatherData as the subject object.
+
+
A high-level sketch of this design is:
+
+
Create a WeatherDataObserver interface, which defines your update method
+
In WeatherData, create an observers array in WeatherData along with methods to register and de-register observers. Add code to notify the observers of updates when the weather data updates.
+
Modify each of CurrentConditionsDisplay, ForecastDisplay, HeatIndexDisplay and StatisticsDisplay to be implementors of the new observer interface. These display classes should display their information whenever the weather data is updated.
+
Modify WeatherStation, so that it creates the XXXDisplays, and subscribes them to the WeatherData
+
Update WeatherData.measurementsChanged to notify its observers of the update
+
Compare the output of your new program to the output you got by running the original version. Are the lines printed in the same order? Why or why not?
+
Can you modify the code so that the various XXXDisplay classes are all implementations of the same interface? Why might or might not this be a good idea?
+
+
+
When you are done, run npm run zip to create a zip archive with your code. Check canvas assignment for more details (if assigned)
+
+
This activity is based on the running example in Chapter 2 of “Head First Design Patterns, 2nd Edition” by Robson and Freeman.
Practice applying asynchronous programming concepts: promises, async/await
+
Experiment with applying different ordering constraints in asynchronous code
+
+
+
+
+ Overview
+
+
+
+
+
In this activity, you will experiment with asynchronous programming constructs in TypeScript.
+
+
+
+ Getting started
+
+
+
+
+
Download the starter Code
+Run npm install to download the dependencies for this project, and then open it in Visual Studio Code.
+Run npm run client to run the client as-is, the output should be something like:
+
+
+ Stringing together many async calls: bulk importing grades
+
+
+
+
+
Your task is to write a new, async function, importGrades, which takes in input of the type ImportTranscript[].
+importGrades should create a student record for each ImportTranscript, and then post the grades for each of those students.
+After posting the grades, it should fetch the transcripts for each student and return an array of transcripts.
+
+
You should implement importGrades in the file examples.ts - note that there is already a function stub there.
+As you get started, examine the transcript server client in client.ts, and take note of the API calls that are available to you.
+
+
Here is the type definition for ImportTranscript and its dependencies:
Insert a student, insert each of their grades (in order), then insert the next student, then their grades, etc. until all students are inserted, then fetch transcripts
+
Insert a student, then insert each of their grades (in order), then fetch their transcript. Do this set of operations asynchronously (concurrently) for all students
+
Insert a student, then insert each of their grades asynchronously (concurrently). After all students have all of their grades submitted, fetch all fo the transcripts asynchronously (concurrently)
This activity is designed to give you practice with React. You will enhance the ToDo app that was discussed in lecture.
+
+
+
+ Steps
+
+
+
+
+
+
To get started, download the starter Code. Run the command npm install, and then npm run dev. The development server should start, and If you open your browser it will start running the app in app/page.tsx If your browser does not open up in the todo app, modify app/page.tsx to point to ./Apps/ToDoApp
+
+
In the ToDoApp, make the following three enhancements:
+
+
+
Currently the “priority” field will accept any value. Modify it so that the priority must be a number. (Hint: NumberInput is your friend)
+
Add a button that will sort the todo items by priority, lowest number first
+
Add an entry field that will take a number and delete all the todo items with priorities greater than that number. (We are assuming that priority 1 means the thing that has to be done first.)
+
+
+
When you are done, submit your work as required by your instructor (see canvas assignment for any additional instructions, if assigned). This may vary from section to section.
In this activity, you will use TSOA to build a REST client for our transcript database.
+
+
Requirement: node -version = 20
+
+
As usual, download the starter code and run npm install.
+
+
Then, run npm start to generate the OpenAPI specification, server boilerplate, and start the development server.
+This command will automatically reload the server as you change files in this project.
+To stop the server, press control-C in the terminal.
You should now see a “Swagger” transcript-server-openapi documentation page, with a few API endpoints defined. Expand the “GET /transcripts” endpoint, click “Try it out”, and then “Execute”. Now, the field “Response Body” should have text in it like:
This demonstrates that this endpoint of your REST API is functional. In the rest of the activity, you will implement the remainder of the routes. Details are in the README page of the starter code. Be sure to review Canvas assignment for more details (if assigned)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Activities/git-placeholder.txt b/Activities/git-placeholder.txt
new file mode 100644
index 0000000..2d6401c
--- /dev/null
+++ b/Activities/git-placeholder.txt
@@ -0,0 +1 @@
+Placeholder file to force git to create a folder here.
\ No newline at end of file
diff --git a/Activities/module02-tdd-transcript-activity.zip b/Activities/module02-tdd-transcript-activity.zip
new file mode 100644
index 0000000..a223a88
Binary files /dev/null and b/Activities/module02-tdd-transcript-activity.zip differ
diff --git a/Activities/module03-test-adequacy.zip b/Activities/module03-test-adequacy.zip
new file mode 100644
index 0000000..8fbc63a
Binary files /dev/null and b/Activities/module03-test-adequacy.zip differ
diff --git a/Activities/module04-traffic-light-activity.zip b/Activities/module04-traffic-light-activity.zip
new file mode 100644
index 0000000..7380633
Binary files /dev/null and b/Activities/module04-traffic-light-activity.zip differ
diff --git a/Activities/module05-design-pattern-activity-weatherstation.zip b/Activities/module05-design-pattern-activity-weatherstation.zip
new file mode 100644
index 0000000..42da8a9
Binary files /dev/null and b/Activities/module05-design-pattern-activity-weatherstation.zip differ
diff --git a/Activities/module06-async-activity.zip b/Activities/module06-async-activity.zip
new file mode 100644
index 0000000..e79c6ca
Binary files /dev/null and b/Activities/module06-async-activity.zip differ
diff --git a/Activities/module08-react-activity.zip b/Activities/module08-react-activity.zip
new file mode 100644
index 0000000..1acc43b
Binary files /dev/null and b/Activities/module08-react-activity.zip differ
diff --git a/Activities/module11-rest-transcript-activity.zip b/Activities/module11-rest-transcript-activity.zip
new file mode 100644
index 0000000..63f04e5
Binary files /dev/null and b/Activities/module11-rest-transcript-activity.zip differ
diff --git a/Assignments/git-fodder.txt b/Assignments/git-fodder.txt
new file mode 100644
index 0000000..7b57bd2
--- /dev/null
+++ b/Assignments/git-fodder.txt
@@ -0,0 +1 @@
+some text
diff --git a/Assignments/ip1/class-diagram.png b/Assignments/ip1/class-diagram.png
new file mode 100644
index 0000000..2a1a492
Binary files /dev/null and b/Assignments/ip1/class-diagram.png differ
diff --git a/Assignments/ip1/linter-errors.png b/Assignments/ip1/linter-errors.png
new file mode 100644
index 0000000..fba8b0f
Binary files /dev/null and b/Assignments/ip1/linter-errors.png differ
diff --git a/Assignments/ip2/ActionsTab.png b/Assignments/ip2/ActionsTab.png
new file mode 100644
index 0000000..8f064c1
Binary files /dev/null and b/Assignments/ip2/ActionsTab.png differ
diff --git a/Examples/conversation-areas-poster.pdf b/Examples/conversation-areas-poster.pdf
new file mode 100644
index 0000000..812dbdc
Binary files /dev/null and b/Examples/conversation-areas-poster.pdf differ
diff --git a/Examples/git-placeholder.txt b/Examples/git-placeholder.txt
new file mode 100644
index 0000000..2d6401c
--- /dev/null
+++ b/Examples/git-placeholder.txt
@@ -0,0 +1 @@
+Placeholder file to force git to create a folder here.
\ No newline at end of file
diff --git a/Examples/module-05-design-patterns-examples.zip b/Examples/module-05-design-patterns-examples.zip
new file mode 100644
index 0000000..9f95b44
Binary files /dev/null and b/Examples/module-05-design-patterns-examples.zip differ
diff --git a/Examples/module-06-async-examples.zip b/Examples/module-06-async-examples.zip
new file mode 100644
index 0000000..4e74268
Binary files /dev/null and b/Examples/module-06-async-examples.zip differ
diff --git a/Examples/module-08-react-examples.zip b/Examples/module-08-react-examples.zip
new file mode 100644
index 0000000..f601214
Binary files /dev/null and b/Examples/module-08-react-examples.zip differ
diff --git a/Examples/module-09-react-hooks-examples.zip b/Examples/module-09-react-hooks-examples.zip
new file mode 100644
index 0000000..06c0257
Binary files /dev/null and b/Examples/module-09-react-hooks-examples.zip differ
diff --git a/Examples/module-12-testing-examples.zip b/Examples/module-12-testing-examples.zip
new file mode 100644
index 0000000..790ba87
Binary files /dev/null and b/Examples/module-12-testing-examples.zip differ
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..620a369
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,2 @@
+index.html:
+ bundle exec jekyll serve
diff --git a/Slides/Module 01.1 Course Introduction.pdf b/Slides/Module 01.1 Course Introduction.pdf
new file mode 100644
index 0000000..1a0e9d8
Binary files /dev/null and b/Slides/Module 01.1 Course Introduction.pdf differ
diff --git a/Slides/Module 01.1 Course Introduction.pptx b/Slides/Module 01.1 Course Introduction.pptx
new file mode 100644
index 0000000..e4c38a7
Binary files /dev/null and b/Slides/Module 01.1 Course Introduction.pptx differ
diff --git a/Slides/Module 01.2 Requirements Gathering.pdf b/Slides/Module 01.2 Requirements Gathering.pdf
new file mode 100644
index 0000000..4e137bb
Binary files /dev/null and b/Slides/Module 01.2 Requirements Gathering.pdf differ
diff --git a/Slides/Module 01.2 Requirements Gathering.pptx b/Slides/Module 01.2 Requirements Gathering.pptx
new file mode 100644
index 0000000..52f5445
Binary files /dev/null and b/Slides/Module 01.2 Requirements Gathering.pptx differ
diff --git a/Slides/Module 02 From Requirements to Code.pdf b/Slides/Module 02 From Requirements to Code.pdf
new file mode 100644
index 0000000..6675694
Binary files /dev/null and b/Slides/Module 02 From Requirements to Code.pdf differ
diff --git a/Slides/Module 02 From Requirements to Code.pptx b/Slides/Module 02 From Requirements to Code.pptx
new file mode 100644
index 0000000..0480c7e
Binary files /dev/null and b/Slides/Module 02 From Requirements to Code.pptx differ
diff --git a/Slides/Module 03 Test Adequacy.pdf b/Slides/Module 03 Test Adequacy.pdf
new file mode 100644
index 0000000..42c51a6
Binary files /dev/null and b/Slides/Module 03 Test Adequacy.pdf differ
diff --git a/Slides/Module 03 Test Adequacy.pptx b/Slides/Module 03 Test Adequacy.pptx
new file mode 100644
index 0000000..bdba2b8
Binary files /dev/null and b/Slides/Module 03 Test Adequacy.pptx differ
diff --git a/Slides/Module 04 Code Level Design.pdf b/Slides/Module 04 Code Level Design.pdf
new file mode 100644
index 0000000..56c1596
Binary files /dev/null and b/Slides/Module 04 Code Level Design.pdf differ
diff --git a/Slides/Module 04 Code Level Design.pptx b/Slides/Module 04 Code Level Design.pptx
new file mode 100644
index 0000000..c817e8a
Binary files /dev/null and b/Slides/Module 04 Code Level Design.pptx differ
diff --git a/Slides/Module 05 Interaction-Level Design Patterns.pdf b/Slides/Module 05 Interaction-Level Design Patterns.pdf
new file mode 100644
index 0000000..35bf64e
Binary files /dev/null and b/Slides/Module 05 Interaction-Level Design Patterns.pdf differ
diff --git a/Slides/Module 05 Interaction-Level Design Patterns.pptx b/Slides/Module 05 Interaction-Level Design Patterns.pptx
new file mode 100644
index 0000000..e5a2305
Binary files /dev/null and b/Slides/Module 05 Interaction-Level Design Patterns.pptx differ
diff --git a/Slides/Module 06 Concurrency Patterns in Typescript.pdf b/Slides/Module 06 Concurrency Patterns in Typescript.pdf
new file mode 100644
index 0000000..1a135f6
Binary files /dev/null and b/Slides/Module 06 Concurrency Patterns in Typescript.pdf differ
diff --git a/Slides/Module 06 Concurrency Patterns in Typescript.pptx b/Slides/Module 06 Concurrency Patterns in Typescript.pptx
new file mode 100644
index 0000000..beb5e20
Binary files /dev/null and b/Slides/Module 06 Concurrency Patterns in Typescript.pptx differ
diff --git a/Slides/Module 07.1 Teams.pdf b/Slides/Module 07.1 Teams.pdf
new file mode 100644
index 0000000..adbb37e
Binary files /dev/null and b/Slides/Module 07.1 Teams.pdf differ
diff --git a/Slides/Module 07.1 Teams.pptx b/Slides/Module 07.1 Teams.pptx
new file mode 100644
index 0000000..3a7c34d
Binary files /dev/null and b/Slides/Module 07.1 Teams.pptx differ
diff --git a/Slides/Module 07.2 Software Process.pdf b/Slides/Module 07.2 Software Process.pdf
new file mode 100644
index 0000000..8bc3432
Binary files /dev/null and b/Slides/Module 07.2 Software Process.pdf differ
diff --git a/Slides/Module 07.2 Software Process.pptx b/Slides/Module 07.2 Software Process.pptx
new file mode 100644
index 0000000..8504159
Binary files /dev/null and b/Slides/Module 07.2 Software Process.pptx differ
diff --git a/Slides/Module 07.3 Agile Planning and Estimation.pdf b/Slides/Module 07.3 Agile Planning and Estimation.pdf
new file mode 100644
index 0000000..8159453
Binary files /dev/null and b/Slides/Module 07.3 Agile Planning and Estimation.pdf differ
diff --git a/Slides/Module 07.3 Agile Planning and Estimation.pptx b/Slides/Module 07.3 Agile Planning and Estimation.pptx
new file mode 100644
index 0000000..abc59de
Binary files /dev/null and b/Slides/Module 07.3 Agile Planning and Estimation.pptx differ
diff --git a/Slides/Module 08 React Basics.pdf b/Slides/Module 08 React Basics.pdf
new file mode 100644
index 0000000..4d32306
Binary files /dev/null and b/Slides/Module 08 React Basics.pdf differ
diff --git a/Slides/Module 08 React Basics.pptx b/Slides/Module 08 React Basics.pptx
new file mode 100644
index 0000000..05f822e
Binary files /dev/null and b/Slides/Module 08 React Basics.pptx differ
diff --git a/Slides/Module 09 React Hooks.pdf b/Slides/Module 09 React Hooks.pdf
new file mode 100644
index 0000000..d5fb9a6
Binary files /dev/null and b/Slides/Module 09 React Hooks.pdf differ
diff --git a/Slides/Module 09 React Hooks.pptx b/Slides/Module 09 React Hooks.pptx
new file mode 100644
index 0000000..5af688b
Binary files /dev/null and b/Slides/Module 09 React Hooks.pptx differ
diff --git a/Slides/Module 10.1 Distributed Systems Goals and Challenges.pdf b/Slides/Module 10.1 Distributed Systems Goals and Challenges.pdf
new file mode 100644
index 0000000..3618fe8
Binary files /dev/null and b/Slides/Module 10.1 Distributed Systems Goals and Challenges.pdf differ
diff --git a/Slides/Module 10.1 Distributed Systems Goals and Challenges.pptx b/Slides/Module 10.1 Distributed Systems Goals and Challenges.pptx
new file mode 100644
index 0000000..9645006
Binary files /dev/null and b/Slides/Module 10.1 Distributed Systems Goals and Challenges.pptx differ
diff --git a/Slides/Module 10.2 Distributing Data.pdf b/Slides/Module 10.2 Distributing Data.pdf
new file mode 100644
index 0000000..ea48beb
Binary files /dev/null and b/Slides/Module 10.2 Distributing Data.pdf differ
diff --git a/Slides/Module 10.2 Distributing Data.pptx b/Slides/Module 10.2 Distributing Data.pptx
new file mode 100644
index 0000000..298f7c1
Binary files /dev/null and b/Slides/Module 10.2 Distributing Data.pptx differ
diff --git a/Slides/Module 11.1 Distributing Processing.pdf b/Slides/Module 11.1 Distributing Processing.pdf
new file mode 100644
index 0000000..e906c6c
Binary files /dev/null and b/Slides/Module 11.1 Distributing Processing.pdf differ
diff --git a/Slides/Module 11.1 Distributing Processing.pptx b/Slides/Module 11.1 Distributing Processing.pptx
new file mode 100644
index 0000000..efd7b37
Binary files /dev/null and b/Slides/Module 11.1 Distributing Processing.pptx differ
diff --git a/Slides/Module 11.2 Case Studies.pdf b/Slides/Module 11.2 Case Studies.pdf
new file mode 100644
index 0000000..a00f1c8
Binary files /dev/null and b/Slides/Module 11.2 Case Studies.pdf differ
diff --git a/Slides/Module 11.2 Case Studies.pptx b/Slides/Module 11.2 Case Studies.pptx
new file mode 100644
index 0000000..4007031
Binary files /dev/null and b/Slides/Module 11.2 Case Studies.pptx differ
diff --git a/Slides/Module 11.3 Communication Patterns.pdf b/Slides/Module 11.3 Communication Patterns.pdf
new file mode 100644
index 0000000..a6d3fd4
Binary files /dev/null and b/Slides/Module 11.3 Communication Patterns.pdf differ
diff --git a/Slides/Module 11.3 Communication Patterns.pptx b/Slides/Module 11.3 Communication Patterns.pptx
new file mode 100644
index 0000000..fb7e685
Binary files /dev/null and b/Slides/Module 11.3 Communication Patterns.pptx differ
diff --git a/Slides/Module 12 Testing Larger Things.pdf b/Slides/Module 12 Testing Larger Things.pdf
new file mode 100644
index 0000000..099920d
Binary files /dev/null and b/Slides/Module 12 Testing Larger Things.pdf differ
diff --git a/Slides/Module 12 Testing Larger Things.pptx b/Slides/Module 12 Testing Larger Things.pptx
new file mode 100644
index 0000000..da7e8bd
Binary files /dev/null and b/Slides/Module 12 Testing Larger Things.pptx differ
diff --git a/Slides/Module 13 Continuous Development.pdf b/Slides/Module 13 Continuous Development.pdf
new file mode 100644
index 0000000..aca38b1
Binary files /dev/null and b/Slides/Module 13 Continuous Development.pdf differ
diff --git a/Slides/Module 13 Continuous Development.pptx b/Slides/Module 13 Continuous Development.pptx
new file mode 100644
index 0000000..9c276eb
Binary files /dev/null and b/Slides/Module 13 Continuous Development.pptx differ
diff --git a/Slides/Module 14 Principles and Tech for Cloud.pdf b/Slides/Module 14 Principles and Tech for Cloud.pdf
new file mode 100644
index 0000000..5eb72ac
Binary files /dev/null and b/Slides/Module 14 Principles and Tech for Cloud.pdf differ
diff --git a/Slides/Module 14 Principles and Tech for Cloud.pptx b/Slides/Module 14 Principles and Tech for Cloud.pptx
new file mode 100644
index 0000000..e992d24
Binary files /dev/null and b/Slides/Module 14 Principles and Tech for Cloud.pptx differ
diff --git a/Slides/Module 15 Security.pdf b/Slides/Module 15 Security.pdf
new file mode 100644
index 0000000..dfbdd11
Binary files /dev/null and b/Slides/Module 15 Security.pdf differ
diff --git a/Slides/Module 15 Security.pptx b/Slides/Module 15 Security.pptx
new file mode 100644
index 0000000..78165d2
Binary files /dev/null and b/Slides/Module 15 Security.pptx differ
diff --git a/Slides/git-placeholder.txt b/Slides/git-placeholder.txt
new file mode 100644
index 0000000..2d6401c
--- /dev/null
+++ b/Slides/git-placeholder.txt
@@ -0,0 +1 @@
+Placeholder file to force git to create a folder here.
\ No newline at end of file
diff --git a/activities/continuous-deployment.html b/activities/continuous-deployment.html
new file mode 100644
index 0000000..20581ea
--- /dev/null
+++ b/activities/continuous-deployment.html
@@ -0,0 +1,414 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Continuous Deployment Pipeline for FakeStackOverFlow | CS4530, Fall 2024
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Skip to main content
+
+
+ Link
+
+
+
+
+
+
+ Menu
+
+
+
+
+
+
+ Expand
+
+
+
+
+
+
+
+ (external link)
+
+
+
+
+
+ Document
+
+
+
+
+
+
+ Search
+
+
+
+
+
+
+
+
+
+ Copy
+
+
+
+
+
+
+ Copied
+
+
+
+
+
+
+
+
+
+
In this activity, you will set up a continuous deployment pipeline using MongoDB Atlas and Render.com. The application will be deployed through Render.com, while the MongoDB database will be hosted in the cloud using MongoDB Atlas.
+
+
Only one member of each team needs to complete these steps, as the resulting deployment will be shared with the entire team. However, if preferred, the team can work together to deploy the application.
+
+
In this activity, we will focus on building a continuous deployment pipeline, but what about continuous integration? There are many ways to use continuous integration in your projects. For example, you can use GitHub Actions to automatically run tests after pushing a commit. FakeStackOverflow has a continuous integration setup for running tests, and you can find the workflow in .github/workflows/main.yml.
+
+
+
+ Pre-Requisites
+
+
+
+
+
+
There are three pre-requisites for this activity.
+
+
+
+ GitHub Repository
+
+
+
+
+
+
Your team’s deployment must take place within a private GitHub repository in our GitHub Classroom. To create your repository, each member of your team should follow these instructions:
+
+
+
+
Sign in to GitHub.com, and then use our invitation to create a repository with the FakeStackOverflow codebase. Check to see if one of your groupmates has created a group already - if so, select it to join it. Otherwise, create a repo using the following format fall24-team-project-group-xyy where you should enter your group number (e.g. “Group-XYY”) as the name where X is your section number and YY is your group number.
+
+
+
Check your email for the invitation to join the repo. After that, refresh the page, and it will show a link to your new repository, for example: https://github.com/neu-cs4530/fall24-team-project-group-xyy. Click the link to navigate to your new repository. This is the repository you will use for the project.
+
+
+
+
This repository will be private, and visible only to your team and the course staff. After the semester ends, you are welcome to make it public - you have complete administrative control of the repository.
+
+
If you run into the error “refusing to allow an OAuth App to create or update workflow” when trying to push to GitHub, the fix is to update your saved authentication credentials for GitHub. For instance, you can follow these instructions to update your credentials in the MacOS Keychain. If all else fails, you can connect to GitHub with SSH instead of HTTPS, which will also solve this problem. This error seems to only occur when pushing a change to the GitHub Actions configuration file, so you could also side-step the problem by having a team mate push this change to GitHub instead (who may not run into this issue).
+
+
+
+ MongoDB Account
+
+
+
+
+
+
MongoDB Atlas is a cloud-based service that provides fully managed MongoDB databases. It allows you to easily deploy, manage, and scale MongoDB clusters without needing to handle server infrastructure, security, backups, or updates, making database management simpler and more efficient.
+
+
To use MongoDB Atlas, create a MongoDB account here.
+
+
After you register you will be asked to verify your email. The steps on how to create a MongoDB database and configure are provided below.
+
+
+
+ Render.com Account
+
+
+
+
+
+
Render.com is a cloud platform that simplifies deploying and hosting web applications, APIs, and databases. It automatically manages servers, scaling, and security, allowing developers to easily build, deploy, and run applications without worrying about infrastructure management.
+
+
You can create a Render.com account here. Clicking on the “GitHub” button and sign up using the same GitHub account as the one used to create the GitHub project repository.
+
+
After you register you will be asked to verify your email. You might be asked to authorize the Render app for the “neu-cs4530” organization - choose your repository using the “Only select repositories” option, DO NOT choose “All repositories”.
+
+
+
+ Steps
+
+
+
+
+
+
You will first create the MongoDB database, and then setup the continuous deployment pipeline for the server and the client.
Click on the “Create” button on the center of the screen. (If you don’t see a “Create” button, make sure you are in the “Overview” section on the left navigation and on the “Data Services” tab)
+
In the configuration options:
+
+
Choose the “M0” free tier.
+
For the Name, provide a name such as “db-cs4530-f24-XYY” (where XYY is your group number).
+
Keep the Provider and Region the default values.
+
+
+
Click on “Create Deployment”.
+
You will be prompted about connecting to your database.
+
+
Copy the username and password that is automatically generated. You will need this later (you can also create an user after the database has been created).
+
Click on “Create Database User”.
+
Click the “Close” button.
+
+
+
Wait for your database cluster to complete creation. Once complete, click on the “Network Access” option in the left navigation.
+
Your current public IP address will be automatically present. Click the “EDIT” button, and then click “ALLOW ACCESS FROM ANYWHERE”. Click the “Confirm” button.
+
Click on the “Database” option in the left navigation. Then, click on the “Connect” button.
+
+
Click on “Choose a connection method”.
+
Click on “Compass”.
+
If you don’t have Compass installed, follow the instructions to install MongoDB Compass and then connect.
+
Otherwise, switch to the “I have MongoDB Compass installed” tab and connect.
+
+
+
Open up MongoDB Compass and see what connections are displayed. You should see a connection to something like <your repo name>.cvjdm.mongodb.net:27017 That connection should include databases such as such as “admin”, “config”, and “local”.
+
In Compass nav bar (on the left), select the connection you just created. Mouse to the “…” and select “Copy Connection String”. Paste this connection string in some convenient place; you will need it later.
+
Go to your project repository’s server folder and run the populate_db.ts script.
+
+
+
cd server
+npx ts-node populate_db.ts <your connection string>/fake_so
+
+
You can find the connection string in the instructions from step 11.
+
+
When you are done, go back to Compass and examine the connection you created. When you open that connection, you should see a database named fake_so, and in that database you should see collections named Answer, Comment, Question, and Tag with several documents in each of them, much like you got when running populate_db.ts locally.
+
+
You have now completed setting up your MongoDB database.
+
+
For simplicity, and since you’re not handling sensitive data, the Network Access is set to allow connections from anywhere. However, for projects involving sensitive data, you should restrict access to only the necessary range of IP addresses.
+
+
You can connect your locally deployed server to the cloud-hosted MongoDB database. This is useful when developing a feature and testing it before deployment. To do this, update the .env created as part of the IP2 setup.
+
+
MONGODB_URI=<add your connection string here, without the trailing slash>
+CLIENT_URL=http://localhost:3000
+PORT=8000
+
+
+
Note: The .env file is not required for the Render.com setup. The above instructions are only if you want to connect the cloud MongoDB to your local (laptop) server.
Click on “Create new project”, and create a new project with a name such as “cs4530-f24-XYY” (where XYY is your group number).
+
From the top menu, click on the “+ New” button and click on “Web Service”.
+
+
For the Source Code, choose your project repository. In case you do not see your project repository, go to your GitHub account and authorize access to your project repository.
+
For the Name, you can EITHER choose an unique name OR use a name such as “cs4530-f24-XYY-API” or “cs4530-f24-XYY-backend”(where XYY is your group number). The “API” or “backend” in that name is important, because it will let you easily distinguish the “server” (what Render calls a “web service”) from the “client” (what Render calls a “static site”, which is the URL where you will find the user-facing application).
+
For the Project, select the project created earlier. For the environment, select Production or any default value.
+
For Language, select “Node”.
+
For Branch, select “main”.
+
For Region, keep the default value.
+
For Root Directory, type in “server”.
+
For Build Command, type in “npm install && tsc”.
+
For Start Command, type in “npm run start:prod”.
+
For Instance Type, choose the “Free” option.
+
In the Environment Variables section, add a variable called MONGODB_URI. For the value, add the connection string of the MongoDB database created earlier. Make sure that you remove the trailing slash, if any.
+
If you need to change any of these, you can do so from the tab called “Settings” (or “Environment”)
+
+
+
Click “Deploy Web Service”.
+
The URL of the backend service will be displayed in purple just below near the top of the window in the “Logs” section. Make a copy of this; you will need it later.
+
Once the deployment is completed, visit the URL and check if you get a “hello world” response.
+
Append /question/getQuestion?order=newest&search= to the URL and check if you get an successful response. A successful response should include the questions that are present in your MongoDB. If you get something like ` MongoDB connection error: MongooseServerSelectionError: connect ECONNREFUSED 127.0.0.1:27017, that indicates that your server is trying to connect to your local database. Check that the value of MONGODB_URI` is set correctly in the Render environment section.
+
You can check the server’s logs by going to the “Logs” section.
+
+
+
You might see a warning like this after the server deployment:
+Your free instance will spin down with inactivity, which can delay requests by 50 seconds or more.
+In case your server is is not responding to requests after a long period of inactivity, visit the URL and wait till you get a “hello world” response. If the server is still not responsive, then check the logs.
From the top menu, click on the “+ New” button and click on “Static Site”.
+
For the Git Provider, choose your project repository. In case you do not see your project repository, go to your GitHub account and authorize access to your project repository.
+
For the Name, you can either choose an unique name OR use a name such as “cs4530-f24-XYY” (where XYY is your group number).
+
For the Project, select the project created earlier. For the environment, select Production or any default value.
+
For Branch, select “main”.
+
For Root Directory, type in “client”.
+
For Build Command, type in “npm install && npm run build”.
+
For Publish directory, type in “build”.
+
In the Environment Variables section, add a variable called REACT_APP_SERVER_URL. For the value, add the server URL from Setup your Server Step 5.
+
Click “Deploy Static Site”.
+
Once the site is deployed, copy the client URL. As before, you can find this in purple near the top of the “Logs” page.
+
Open the Render Dashboard again. Choose the project you have created, and go back to service called “Web Service”.
+
Click on the “Environment” tab.
+
Add a new environment variable called CLIENT_URL. For the value, add the client URL (make sure you are adding this env. variable in the server’s settings, not the client’s). You should now have two environment variables for your server: MONGDB_URI and CLIENT_URL.
+
Visit the client URL in your browser to run the application.
+
+
+ Information about Project Final Deliverables, and Posters/Demos
+
+
+
+
+
+
+ Nov 4
+ ·
+
+
+ 0 min read
+
+
+
Please don’t forget to review final project deliverables page published on course website. This include grading rubrics and other details related to the submission of the final project (i.e., code/testing, report, posters and demos). Canvas assignments for these are also published now.
We have posted the instructions for setting up your team repository. You can find them in the start of the CI/CD Pipeline Activity. The repository will include the starter code for the final project. We recommend that you start this process as soon as possible to avoid any delays.
+
+
+
+
+
+
+
+
+ Software Development Process
+
+
+
+
+
+
+ Oct 6
+ ·
+
+
+ 1 min read
+
+
+
As part of software development process, each team is expected to use a structured development process, including pull requests, code reviews, etc. Each team will also submit sprint reports, individual surveys, and have weekly meetings with TA Mentor. The development process started last week (as you started developing your project plan) and the required “process-related” submissions start this week.
+
+
Here are important submissions to remember for week 6, 8-13:
+
+
Every week all members of a team are expected to meet with their mentor for a regularly scheduled meeting. Weekly Canvas assignments will help track your attendance for these meetings.
+
Every week each student is expected to complete one (Confidential, Peer Evaluation) Survey by Wednesday noon. The link can be found under the Canvas assignment which will help track if you completed the survey or not.
+
At the end of each sprint, each team will submit a sprint report (and retrospective) through a Canvas assignment.
+
TAs will also review your github commits, PRs, code reviews regularly and will keep an eye on appropriate division of labor within the project team. They will also provide you a weekly assessment of your work.
+
+
+
These assignments count towards “project process” part of the project which is worth 20% of the overall project grade.
+
+
+
+
+
+
+
+
+ Individual Project 2 is Now Available + Project Teams Announced
+
+
+
+
+
+
+ Oct 2
+ ·
+
+
+ 0 min read
+
+
+
The second and (final!) individual project deliverable is now released, and will be due on Wednesday, Oct 16 at 12pm (noon) ET. We strongly encourage you to read through the assignment soon, so that you can begin to formulate a plan of attack to complete this assignment.
+
+
Project Team Assignments are now posted on piazza. Please coordinate with your assigned TA Mentors to schedule a kick-off meeting. The first team deliverable will be the preliminary project plan due on Oct 9th
+
+
+
+
+
+
+
+
+
+ Team Formation Survey is Now Available
+
+
+
+
+
+
+ Sep 18
+ ·
+
+
+ 0 min read
+
+
+
Please complete this Team Formation Survey to help us organize you into a team for the term project. EVERY STUDENT must fill this form out by 12pm (Noon) on Wednesday 9/25/2024, or risk being placed in a random team.
+
+
We would recommend that you check with other students in your section before filling out the survey.
+
+
Withdrawal deadline is on Tuesday Sep 24th.
+
+
+
+
+
+
+
+
+
+ Welcome to CS4530 - Fall 2024
+
+
+
+
+
+
+ Sep 3
+ ·
+
+
+ 1 min read
+
+
+
On behalf of the entire instructional team (all 2 instructors and 14 TAs), welcome to the Fall 2024 edition of CS 4530! This website will contain all of the lectures, assignments and tutorials for the class. Our Canvas site contains your gradebook as well as single-sign-on links to Piazza (for discussion), instructions for submitting assignments and replicates much of the material from the class website.
+
+
In advance of the first week of class, we’ve shared the calendars for each section, the first two lectures, and tutorials on installing your IDE, Typescript, and unit testing with Jest. The schedule of office hours is also posted and we will start holding office hours from Thursday Sep 5th.
+
+
The first individual project deliverable is now available. This deliverable is due by September 18th at 12pm (Noon) ET. Your work will be submitted through github Classroom. We would encourage you to start working on this assignment early. Feel free to use piazza to ask questions and use office hours if you need help. We have 70 hours of scheduled TA office hours per week.
+
+
We are excited to meet you all this week!
+
+
+
+
+
+
+
+
+
+ Initial Website Launched
+
+
+
+
+
+
+ Aug 4
+ ·
+
+
+ 0 min read
+
+
+
Welcome to the course website for CS4530, Fall 2024! Over the coming weeks, we will be populating this website (and Canvas) with more information about the course.