Skip to content

Commit 0e82309

Browse files
author
Aditya Shrivastava
committed
2 parents df8e98d + 4a2972a commit 0e82309

File tree

6 files changed

+255
-19
lines changed

6 files changed

+255
-19
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ jobs:
1616
- uses: actions/cache@v4
1717
with:
1818
key: ${{ github.ref }}
19-
path: .cache
19+
path: ~/.cache/pip
20+
- run: sudo apt-get update && sudo apt-get install -y libxml2-dev libxslt-dev python3-dev
2021
- run: pip install mkdocs-material
2122
- run: pip install -r requirements.txt
2223
- run: mkdocs gh-deploy --force

docs/_data/schedule.yaml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -372,19 +372,19 @@
372372
name: ''
373373
recitation:
374374
handout: ''
375-
name: 'App Deployment'
375+
name: 'Unit testing'
376376
quiz: ''
377377
slides: ''
378378

379379
- date: Tue Feb 11
380380
homework:
381381
deadline: 'February 18, 2025'
382382
link: ''
383-
name: 'HW4: DevOps'
383+
name: 'HW4: Testing'
384384
numDays: 5
385385
lecture:
386386
link: ''
387-
name: 'CloudOps'
387+
name: 'Testing'
388388
reading:
389389
link: ''
390390
name: ''
@@ -420,7 +420,7 @@
420420
numDays: 0
421421
lecture:
422422
link: ''
423-
name: 'Testing'
423+
name: 'Test Automation and CI/CD'
424424
reading:
425425
link: ''
426426
name: ''
@@ -462,19 +462,19 @@
462462
name: ''
463463
recitation:
464464
handout: ''
465-
name: 'Unit testing'
465+
name: 'App Deployment'
466466
quiz: ''
467467
slides: ''
468468

469469
- date: Tue Feb 18
470470
homework:
471471
deadline: 'February 25, 2025'
472472
link: ''
473-
name: 'HW5: Testing'
473+
name: 'HW5: DevOps'
474474
numDays: 5
475475
lecture:
476476
link: ''
477-
name: 'Test Automation and CI/CD'
477+
name: 'CloudOps'
478478
reading:
479479
link: ''
480480
name: ''

docs/_data/this_week.yaml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
11
last_homework:
22
date: ""
3-
deadline: "Tues Jan 28 @ 11:59pm"
3+
deadline: "Tues Feb 4 @ 11:59pm"
44
link: ""
5-
name: "HW 2: MVP Creation"
5+
name: "P0: Team Contracts"
66
numDays: 1
77

88
lectures:
9-
- date: Tue Jan 28
9+
- date: Tue Feb 4
1010
link: ""
11-
name: "MVP Presentations"
12-
- date: Thu Jan 30
11+
name: "Coding as a Team Part 1"
12+
- date: Thu Feb 6
1313
link: ""
14-
name: "Team Forming and Norming"
14+
name: "Coding as a Team Part 2"
1515

1616
next_homework:
1717
date: ""
18-
deadline: "Tue Feb 4 @ 11:59pm"
18+
deadline: "Tue Feb 11 @ 11:59pm"
1919
link: ""
20-
name: "P0: Team Contracts"
20+
name: "HW3: Working with Github"
2121
numDays: 5
2222

2323
recitation:
24-
date: Fri Jan 31
24+
date: Fri Feb 7
2525
handout: ""
26-
name: "Node.js Apps"
26+
name: "Github Basics"
2727
quiz: ""
2828
slides: ""

docs/assignments/hw3-25.md

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
# Homework 3: Github basics
2+
3+
## Learning goals
4+
5+
- Get comfortable with Github if you aren't already
6+
- Think about secure development practices
7+
- Practice simple code review
8+
9+
## Project context
10+
11+
You and your team have access to a basic calculator app through Github classroom. Over the next three assignments, you'll (1) set up the repo and merge a few simple PRs (2) deploy the application and set up automated deployments and (3) write tests and create a continuous integration (CI) pipeline. **You should apply the development processes you learn here to your prototype product.**
12+
13+
## Assignment instructions
14+
15+
In this assignment, you'll set up your local development environment, securely configure your repo, make a PR, and review your teammates' PRs.
16+
17+
You'll notice that a number of these steps address *security operations*. Why bother with a secure setup? Well, if you actually build a successful company, you (and your software!) become a target. If an attacker can gain write access to your source code, for example, they can insert backdoors that let them hold services ransom, steal user data, or even steal money. This opens you up to a world of legal and financial pain---but luckily, there are really simple things you can do that significantly raise the barrier for attackers. This assignment touches on several of them.
18+
19+
### 1. Configure Github with (non-SMS) 2FA
20+
21+
Having a 2FA method makes it vastly harder for attackers to compromise your Github account and impersonate you.
22+
23+
Follow [these instructions](https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication) to set up two-factor authentication for your Github account. **This 2FA method must not be text message/SMS**. We reccomend [FIDO](https://fidoalliance.org/specs/u2f-specs-master/fido-u2f-overview.html) if possible, and [TOTP](https://datatracker.ietf.org/doc/html/rfc6238) as a backup option.
24+
25+
#### Turn in instructions
26+
27+
When you have done so, navigate to your Github profile; under Settings and Authentication, take a screenshot of the Preferred 2FA Method box that includes both the 2FA method and your username. Do not include anything else in the screenshot (this is possible due to the layout of the page).
28+
29+
### 2. Configure Github with SSH
30+
31+
Using SSH for Github authentication is both more secure and more convenient than using password authentication.
32+
33+
Follow [these instructions](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/about-ssh) to set up a new SSH key with Github if you haven't already. Specifically, you will:
34+
- [Generate a new SSH key](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent). Make sure to [use a passphrase](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/working-with-ssh-key-passphrases).
35+
- [Add the SSH key to your account](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account).
36+
- [Test that everything worked](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/testing-your-ssh-connection).
37+
38+
#### Turn in instructions
39+
40+
Once you've done these things, navigate to the SSH and GPG page in your account settings, and take a screenshot that encompasses the name/hash identifier of the key of your SSH key and your username.
41+
42+
### 2b for 10 point bonus: Configure commit signing
43+
44+
To get ten bonus points, [configure commit signing](https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits). Then, write and submit a couple sentences about why it's beneficial.
45+
46+
#### Turn in instructions
47+
48+
Submit a screenshot of your signed commits and your description.
49+
50+
### 3. Clone the calculator repo onto your local machine
51+
52+
When you navigate to the Code tabe, make sure you use the SSH tab, not the HTTPS tab. This will clone the repo using the SSH authentication flow.
53+
54+
**There is no deliverable for this step.**
55+
56+
### 4. Configure branch protection
57+
58+
As it stands, anyone with access to your repo can push whatever garbage they want to the main branch. That's not good! It's important to make sure code that actually gets deployed has been thoroughly tested and reviewed (to catch everything from mistakes to intentional back doors!). In this assignment, you'll focus on code review; in a future assignment, you'll block merges to main until your code passes CI.
59+
60+
To protect your main branch, navigate to the Settings tab in the calculator repo and click on Branches (on the lefthand side). You'll see two options: (1) Add branch ruleset and (2) Add classic branch protection rule. For now, you're just going to add a classic branch protection rule that protects main from direct, unreviewed commits: check the box to require a pull request before merging. Once you check this box, you will have the ability to require multiple PR approvals before merging is allowed. Require at least two.
61+
62+
#### Turn in instructions
63+
64+
Take a screenshot of your branch protection rules; we'll also check the repository directly.
65+
66+
### 5. Configure pull requests
67+
68+
Your main history is much easier to track if all commits to main are uniform. Different teams have different preferences for this configuration, but in this class, we'll require [squash merging](https://learn.microsoft.com/en-us/azure/devops/repos/git/merging-with-squash?view=azure-devops) for a clean history; this is a very common configuration.
69+
70+
Navigate to the General settings. Under Pull requests, uncheck merge commits and rebase merging, leaving only squash merging checked. In the dropdown, select Pull request title and description. This means that only the PR title and description will show up in your main branch's commit history, and each feature branch will be squashed into a single commit.
71+
72+
#### Turn in instructions
73+
74+
Take a screenshot of your repo's PR settings.
75+
76+
### 6. Run the calculator app locally
77+
Follow the instructions in the **README** to set up and run the calculator on your machine. You can choose to deploy the app locally using either Docker or npm, depending on your preference. Ensure everything is working before proceeding with any modifications.
78+
79+
**There is no deliverable for this step.**
80+
81+
### 7. Add a piece of functionality to the calculator
82+
83+
You will add a new piece of calculator functionality [*in a new branch*](https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging). Then, you will [open a pull request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request?tool=webui) (PR) so that your teammates can review and approve your changes.
84+
85+
Choose one of the following functionality: (Coordinate with your teammates to ensure no two members implement the same functionality.)
86+
1. **Backward Button**: Add a button that allows users to remove the last entered character in the calculator input field.
87+
2. **Custom Pop-up for Invalid Expressions**: Display a pop-up window when the user enters an invalid expression.
88+
3. **Brackets Support**: Add "(" and ")" buttons and ensure expressions with brackets are correctly handled.
89+
4. **Expression History Display**: Show a list of previously calculated expressions in the frontend. The list should reset when the browser is refreshed.
90+
5. **Backend Logging**: Log all expressions sent to the backend into a local file. The log should persist even after the browser is refreshed.
91+
92+
Use your PR message to clearly describe the changes you've made to the calculator app.
93+
94+
#### Turn in instructions
95+
96+
Please provide us a link to your PR.
97+
98+
### 8. Review at least two PRs
99+
100+
Following the best practices we discussed in class, leave two reviews on your teammates' PRs. If there issues, continue to discuss in the comments until you're satisfied with the changes and able to approve the pull requests.
101+
102+
#### Turn in instructions
103+
104+
Please provide two or more links to your reviews.
105+
106+
### 9. Merge your reviewed PR
107+
108+
Finally, once your PR has been approved, [merge it](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/merging-a-pull-request).
109+
110+
#### Turn in instructions
111+
112+
Please provide a link to your merged commit.

docs/project/p1.md

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
# Project 1: Project Specification
2+
3+
## Learning Goals
4+
5+
- Practice hypothesis testing and the MVP loop
6+
- Refine your product idea
7+
8+
## Project Context
9+
10+
You and your team will be spending the rest of the semester building a product prototype for your startup.
11+
This assignment is intended to help you build something viable (that I hope will become the basis for a real company someday).
12+
13+
**Please read the assignment in its entirety before starting**. As you move through parts 1 and 2 and refine your ideas/pivot, keep in mind the legal/regulatory/technical questions from part 3. In other words, *try to make sure you're working on something legal and feasible even as your idea changes*.
14+
15+
## Deliverables
16+
17+
These deliverables should be somewhat familiar from homeworks one and two. Now, you're doing them "for real," trying to hone in on the product you and your group will be producing for the rest of the semester.
18+
19+
### 1. Initial value proposition/product description
20+
21+
#### Turn-in instructions
22+
23+
Please answer the following questions:
24+
1. What is the big idea of your startup? What problem are you solving? What is your solution? What makes your solution special and distinguishes it from the competition? (1-2 paragraphs)
25+
2. What is/are the value proposition(s) for your product? (1-2 sentences)
26+
27+
### 2. Viability analysis: do people want it?
28+
29+
In these exercises, you'll collect some initial viability data, and make
30+
a plan for collecting more as you build out your prototype.
31+
32+
#### 2a. Measure/demonstrate that people want your product *before building anything*
33+
34+
Recall the unbiased discovery you did during HW1. You're going to collect more data this time, from a broad range of members of your target demographic. If your target demographic is gymgoers, for example, you should talk to at least a few non-student gymgoers. This will help you determine who your target demographic actually is (and thus refine your value prop).
35+
36+
You will have **twenty or more** discovery conversations across your group, **with each team member conducting at least two conversations**. These conversations should give you valuable data about the problem you're trying to solve; if you haven't been forced to refine your idea, at least slightly, over the course of these conversations, you are likely doing something wrong.
37+
38+
##### Turn-in instructions
39+
40+
Please turn in:
41+
1. Your notes, demonstrating that every group member participated in at least two interviews.
42+
2. The five most useful questions you asked. (1 paragraph)
43+
3. The five most useful pieces of concrete data you collected. (1 paragraph)
44+
4. An updated version of your value proposition/product description (question 1), informed by your discovery. Describe what changed and why. (3+ paragraphs)
45+
46+
#### 2b. Measure/demonstrate that people want your product after building something *minimal*
47+
48+
In class, we've discussed several ways to get feedback from users without building an entire application:
49+
- Concierge MVPs
50+
- Smokescreen MVPs
51+
- Paper prototypes
52+
- Kickstarter-style campaigns
53+
- ...etc.
54+
55+
Think about which of these makes sense for your startup.
56+
57+
##### Turn in instructions (1-2 pages)
58+
59+
Choose at least one data-gathering approach for your startup and describe:
60+
1. Why you chose it.
61+
2. What you built (with a link or pictures if relevant; for a smokescreen MVP, for example, please link to the MVP webpage or demo).
62+
3. How you gathered feedback (e.g., for your smokescreen MVP, where did you circulate the link?).
63+
4. What you learned from the feedback (e.g., did a thousand people view your webpage, while only one signed up for the list? What does that tell you?)
64+
5. An updated version of your value proposition/product description (question 1), informed by your data gathering. Describe what changed and why.
65+
66+
#### 2c. Prototype plan: how little can you build and still get valuable feedback?
67+
68+
As you're refining your idea, it's important to figure out what you're going to build (and possibly start building!). For this piece of the milestone, you'll sketch out (a) your first two MVP milestones and (b) how you will get feedback on these milestones from real users.
69+
70+
#### Milestone one (1-2 pages) turn in instructions
71+
72+
1. Describe, at a high level, the feature you are building.
73+
2. Why is it the right feature to build?
74+
3. How will you use this feature to collect data about your what your users want?
75+
4. Describe what you will build in a reasonably low-level technical detail (e.g., what frameworks will you use, what API endpoints will you expose, what UI components will you create, etc).
76+
77+
#### Milestone two (1-2 pages) turn in instructions
78+
79+
1. Describe, at a high level, the feature you are building.
80+
2. Why is it the right feature to build?
81+
3. How will you use this feature to collect data about your what your users want?
82+
4. Describe what you will build in a reasonably low-level technical detail (e.g., what frameworks will you use, what API endpoints will you expose, what UI components will you create, etc).
83+
84+
### 3. Viability analysis: are there reasons not to build it? Can you build it?
85+
86+
Answering these questions will help you avoid attempting the impossible; please upload your answers for each.
87+
88+
#### 3a. Legal risk turn in instructions (1+ paragraph)
89+
90+
Describe the legal risks associated with your product. *The majority of the work of this question should be research.*
91+
92+
#### 3b. Regulatory risk turn in instructions (1+ paragraph)
93+
94+
Describe the regulatory risks associated with your product. *The majority of the work of this question should be research.*
95+
96+
#### 3c. Competitor risk turn in instructions (3+ paragraph)
97+
98+
Describe your product's competitive landscape, including its three closest competitors. What do these products do? How is your product different?
99+
100+
#### 3d. Technical risk turn in instructions (3+ paragraph)
101+
102+
**Desribe, in a relatively fine-grained level of technical detail, what you are planning to build.**
103+
What tools/frameworks/libraries are you planning to use for:
104+
- The frontend
105+
- The infrastructure
106+
- The database
107+
- Other technical core features. For example, if your product uses computer vision, what library are you planning to use?
108+
109+
**Explain why your group has the background to build these features**. For example, if you're building devtools for ML data processing, please outline your experience with ML and data processing.
110+
111+
#### 3e. This-is-a-semester-long-course risk turn in instructions (1+ paragraph)
112+
113+
**Please justify why it is possible to build a prototype product over the course of this semester-long class.** As one anti-example, fabricating new chips for ML workloads is certainly an exciting thing to do, but it's also something you can't do over the next couple months. Avoid such endeavors.
114+
115+
### 4. Viability analysis: could it make money?
116+
117+
#### Turn-in instructions
118+
119+
Please turn in answers to the following questions:
120+
1. What evidence do you have that people are willing to pay for your product? (2 paragraphs)
121+
2. What is your monetization plan? (1+ paragraph)
122+
3. What is your projected revenue across the first 10 users of your application? 50? One thousand? (1-2 paragraphs)
123+
4. What is the value of similar competitors? (1-3 paragraphs)

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ parso==0.8.4
6363
pathspec==0.12.1
6464
pexpect==4.9.0
6565
pickleshare==0.7.5
66-
pipreqs==0.5.0
66+
pipreqs==0.4.13
6767
platformdirs==4.2.2
6868
prompt_toolkit==3.0.47
6969
Protego==0.3.1

0 commit comments

Comments
 (0)