Skip to content

Commit e697e9b

Browse files
authored
Merge branch 'main' into lesson_03
2 parents d74da43 + d7940e1 commit e697e9b

File tree

11 files changed

+324
-4
lines changed

11 files changed

+324
-4
lines changed
1.07 MB
Loading
2.87 MB
Loading
2.86 MB
Loading
3.62 MB
Loading

lesson_01/khaylasaunders/index.html

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
<title>Readme in HTML</title>
7+
<link rel="stylesheet" href="stylesheet.css">
8+
9+
10+
</head>
11+
<body class="markdown-body">
12+
<h1><strong>Howdy, I'm Khayla Saunders</strong>&nbsp;🤠👩🏾‍💻</h1>
13+
<h2>Welcome to my Git Crib!</h2>
14+
<p>Feel free to call me Khai! I love having sidebar chit-chats to make connections, laugh, and work hard. Integrity is essential to me. One of my favorite quotes is from the GOAT Lebron "I know we're out [of] the playoff race, but if I'm on the court, I'm going to play how I play, and I play to win. So, I <strong>never will cheat the game </strong>..."</p>
15+
<h3> A few not so essential, basics</h3>
16+
<ul>
17+
<li>I use she/her/hers pronouns</li>
18+
<li>3x Gen Philadelphian! GO BIRDS! (Still learning football...BUT I frequent West Point games to support my little BIG cousin!)</li>
19+
<li>I can get a little southern, I went to undergrad at THE BEST HBCU, Tuskegee University</li>
20+
<li> I earned my Master's in Historic Preservation from the University of Pennsylvania, where I enjoyed breaking traditional norms to save Black Philly Gems...check out my work with the <a href=(https://www.inquirer.com/arts/tanner-house-community-outreach-report-20240910.html)>Tanner House!</a></li>
21+
<li>I need my Mushroom Coffee Daily (Everyday Doze) 🍄 </li>
22+
23+
</ul>
24+
<h4>Work Routine</h4>
25+
<p>I am at my best in the mornings, and Ready to chat about work from 9 a.m. to 6 p.m.</p>
26+
<h4>Best Way to communicate </h4>
27+
<ul>
28+
<li><span>Email:</span> For non-urgent but more extended questions, it helps me process more efficiently and think through the problem better.</li>
29+
<li><span>Google Chat:</span> Best for casual or quick questions and/or conversations.</li>
30+
<li><span>In-person:</span> MY FAVORITE!</li>
31+
</ul>
32+
<blockquote><span>ALSO</span> Feel Free to tap me, even if I have headphones on (I prefer to work with something in the background).
33+
</blockquote>
34+
<h4>How do I like to give feedback? </h4>
35+
<p>I want to meet in person, but if it's easier, I can email you. I'm always taking notes that I can share.</p>
36+
<h4>How do I like to receive feedback? </h4>
37+
<p>In-person is best, but if you don't have any time, email/Google chat is best. </p>
38+
<h4>My Goal for this year </h4>
39+
<p>I want continuous growth in my faith, to become a software engineer, to go on one international trip, and to keep learning to remain a service person.</p>
40+
<h4>Birthday</h4>
41+
<p>March 25th ♈</p>
42+
<h4>Favorite Topics</h4>
43+
<ul class="favorites">
44+
<li> Family ❤️</li>
45+
<li>Art 🖌️</li>
46+
<li> Sephora 🩶</li>
47+
<li>NYT No Recipe-Recipe Cook Book🧑‍🍳</li>
48+
<li>Sports 🏈🏀 (LOYAL TO PHILLY!)</li>
49+
<li>Reality TV junckie 📺 🫣</li>
50+
<li>Reading & learning anything related to Black people 🖤</li>
51+
52+
53+
</ul>
54+
<h4 class="camera">Camera Roll</h4>
55+
<!-- Image placement and caption styling guidance provided by ChatGPT -->
56+
<div class="image-container">
57+
<P>Eagles Fans</P>
58+
<img src="images/EAGLES.jpeg" alt="Family Eagles Watch Day Photo" class="photo">
59+
<p>Family Football Game</p>
60+
<img src="images/TU.jpeg" alt="West Point Game Day Selfie" class="photo">
61+
<p>West Point Game</p>
62+
<img src="images/WP.jpeg" alt="Photo of Khayla (left)and Kody (right) at West Point Game" class="photo">
63+
<p>First Time at the Selma Jubilee</p>
64+
<img src="images/CPCRS.jpg" alt="99th Selma Jubilee Photo" class="photo">
65+
</div>
66+
67+
68+
69+
<footer>
70+
<p>© 2025 Khayla Saunders. All rights reserved.</p>
71+
</footer>
72+
</body>
73+
</html>
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
2+
3+
body{
4+
width: 95%;
5+
margin: 10px;
6+
padding: 10px;
7+
border: 1px solid rgb(214,214,214);
8+
border-radius: 8px;
9+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans",
10+
Helvetica, Arial, sans-serif, "Segoe UI Emoji", "Apple Color Emoji";
11+
}
12+
h1 {
13+
border-bottom: 1px solid rgb(214,214,214);
14+
width: 100%;
15+
padding-bottom: 10px;
16+
17+
}
18+
h2{
19+
padding-top: 14px;
20+
padding-bottom: 10px;
21+
border-bottom: 1px solid rgb(214,214,214);
22+
}
23+
h3{
24+
border-bottom: 1px solid rgb(214,214,214);
25+
padding-bottom: 10px;
26+
font-size: 24px;
27+
font-weight: 600;
28+
}
29+
30+
li{
31+
line-height: 1.4;
32+
}
33+
h4{
34+
font-size: 20px;
35+
font-weight: 550;
36+
37+
38+
}
39+
span {
40+
color: #000;
41+
font-weight: 550;
42+
43+
}
44+
blockquote{
45+
color: rgb(91, 90, 90);
46+
border-left: 3px solid rgb(202, 204, 220);
47+
padding-left: 13px;
48+
}
49+
blockquote span{
50+
color: rgb(105, 103, 103);
51+
}
52+
.favorites {
53+
font-size: 13px;
54+
line-height: 2.5;
55+
}
56+
.camera {
57+
margin: 12px 0 0;
58+
font-size: 16px;
59+
font-weight: 600;
60+
}
61+
.image-container {
62+
width: 90%;
63+
background-repeat: no-repeat;
64+
display: flex;
65+
flex-direction: column;
66+
}
67+
.image-container p {
68+
font-size: 13px;
69+
font-weight: 550;
70+
margin: 24px 0 16px;
71+
}
72+
/* Styling assistance provided by ChatGPT to ensure responsive images */
73+
74+
img{
75+
max-width: 100%;
76+
height: auto;
77+
display: block;
78+
79+
}
80+
81+

lesson_03/quiz/quiz.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ quiz:
66
anotherone:
77
- $2y$10$8eHSzy3aCu4Ry3LzO9nWCeGpofSxsNVbnF.wCfn3ZADwQ6MEtN/KK
88
- $2y$10$dGB0CGv7.XQC5OqfyY6iXOiJsdVyxU3ve5YE0gt4m2I8P8H13lNXa
9+
meikostephens:
10+
- $2y$10$AD1YHmrZZivus7DoM91UMuErNnpi63ueluFs7DcSQSrZbXwDycAOi
11+
- $2y$10$KvnxAYKh3A151RyOOFtOv.wfImRzZMgbBgKy3gyLd1uUSSjHaN.4u
12+
- $2y$10$qJDpo1X1kFXRD1M6Kpi8WeKg.a8dgzd8RawXX/3RuMqM82biBc6iK
913
computerparts:
1014
- $2y$10$7TUXmYaJlWnRZTzYR..CsefgVcOZJMGt7ctxyAf.G3obBBFEAB342
1115
- $2y$10$0ghuTDegle177q8VjCgQ2OhManKjotYXrcDT3SLyUF8KvI152Wd0.
@@ -14,6 +18,10 @@ quiz:
1418
- $2y$10$hRwUbEYSqz761B.cG79T2uYsYPiEtKu.JgD3Aj7.Mofx27TtX5YHa
1519
- $2y$10$qE/gXxpq62FEGJOJd9MDA.vpDYLTNSsZbqZLpD/0368CKkcNBzW1y
1620
- $2y$10$yI/2BgOyqQfLdHM3ixPE5uLu89su/sHRJB2c5szDFIAYXDhRakS.C
21+
davidadenaike:
22+
- $2y$10$CCxBimjXsumkjTLWRWqibue0VeGel6Idfb/2q3y.mIuKHbkWVTsx6
23+
- $2y$10$/z0Ri9Fg7pOXUFYsOErj.Ol8Hxcy7zwqWezLTMWVtFv6tzvkCrJti
24+
- $2y$10$vQD1oc2OqiE1PkirdjQ/xu3sbrnJjwImPEwvCmP7Uk0Z1PDqQ0Mq.
1725
rmill:
1826
- $2y$10$FquR69q7W4E68TX/SNCB7u8Ri0DOFRDqsUPdGfuyIBjZJRVFkNI.6
1927
- $2y$10$FSWRA7hulVpyVxd8s67Nxuq/1cdmviW24qqoUbqihBf79cR.w9yly

lesson_03/quiz/src/lesson3.test.ts

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { beforeAll, describe, expect, it } from '@jest/globals';
33
import { Test, TestingModule } from '@nestjs/testing';
44
import {
55
AnswerChoice,
6+
MultipleChoiceQuizQuestion,
67
QuizConfig,
78
QuizQuestion,
89
} from 'codedifferently-instructional';
@@ -76,16 +77,42 @@ describe('Lesson3Test', () => {
7677

7778
const maybeIt = process.env.PROVIDER_NAME ? it : it.skip;
7879

80+
maybeIt(
81+
'checks multiple choice answers are configured correctly',
82+
async () => {
83+
for (const [providerName, questions] of quizQuestionsByProvider) {
84+
for (const question of questions) {
85+
if (!(question instanceof MultipleChoiceQuizQuestion)) {
86+
continue;
87+
}
88+
89+
// Assert that multiple choice questions have at least one correct answer.
90+
const choices = question.getAnswerChoices();
91+
const areAnswersValid = await Promise.all(
92+
[...choices].map(async (choice) => {
93+
return quizConfig.checkAnswer(
94+
providerName,
95+
question.getQuestionNumber(),
96+
choice,
97+
);
98+
}),
99+
);
100+
101+
expect(areAnswersValid.some((isCorrect) => isCorrect)).toBe(true);
102+
}
103+
}
104+
},
105+
);
106+
79107
maybeIt('checks for correct answers', async () => {
80-
const targetProviderName =
81-
process.env.PROVIDER_NAME?.toLowerCase().trim() || '';
108+
const targetProviderName = process.env.PROVIDER_NAME?.trim() || '';
82109

83110
if (!quizQuestionsByProvider.has(targetProviderName)) {
84111
throw new Error(`Unknown provider name: ${targetProviderName}`);
85112
}
86113

87114
for (const [providerName, questions] of quizQuestionsByProvider) {
88-
if (providerName !== process.env.PROVIDER_NAME?.toLowerCase().trim()) {
115+
if (providerName !== process.env.PROVIDER_NAME?.trim()) {
89116
continue;
90117
}
91118
for (const question of questions) {
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import {
2+
AnswerChoice,
3+
MultipleChoiceQuizQuestion,
4+
QuizQuestion,
5+
QuizQuestionProvider,
6+
} from 'codedifferently-instructional';
7+
8+
export class DavidAdenaikeQuiz implements QuizQuestionProvider {
9+
getProviderName(): string {
10+
return 'davidadenaike';
11+
}
12+
13+
makeQuizQuestions(): QuizQuestion[] {
14+
return [
15+
DavidAdenaikeQuiz.makeQuestion0(),
16+
DavidAdenaikeQuiz.makeQuestion1(),
17+
DavidAdenaikeQuiz.makeQuestion2(),
18+
];
19+
}
20+
21+
private static makeQuestion0(): QuizQuestion {
22+
return new MultipleChoiceQuizQuestion(
23+
0,
24+
'What does RAM stand for?',
25+
new Map<AnswerChoice, string>([
26+
[AnswerChoice.A, 'Rabbit, Abandon, Machinery'],
27+
[AnswerChoice.B, 'Race, Abbey, Magazine'],
28+
[AnswerChoice.C, 'Racism, Able, Magnetic'],
29+
[AnswerChoice.D, 'Random, Access Memory'],
30+
]),
31+
AnswerChoice.UNANSWERED,
32+
); // Replace `UNANSWERED` with the correct answer.
33+
}
34+
35+
private static makeQuestion1(): QuizQuestion {
36+
return new MultipleChoiceQuizQuestion(
37+
1,
38+
'What does CPU stand for?',
39+
new Map<AnswerChoice, string>([
40+
[AnswerChoice.A, 'Central, Processing, Unit'],
41+
[AnswerChoice.B, 'Cabin, Pace, Umbrella'],
42+
[AnswerChoice.C, 'Cable, Pack, Unanimous'],
43+
[AnswerChoice.D, 'Cage, Pain, Uncle'],
44+
]),
45+
AnswerChoice.UNANSWERED,
46+
); // Replace `UNANSWERED` with the correct answer.
47+
}
48+
49+
private static makeQuestion2(): QuizQuestion {
50+
return new MultipleChoiceQuizQuestion(
51+
2,
52+
'What does GPU stand for?',
53+
new Map<AnswerChoice, string>([
54+
[AnswerChoice.A, 'Galaxy, Palace, Unpleasant'],
55+
[AnswerChoice.B, 'Graphics, Processing, Unit'],
56+
[AnswerChoice.C, 'Gallon, Panic, Unrest'],
57+
[AnswerChoice.D, 'Game, Parachute, Union'],
58+
]),
59+
AnswerChoice.UNANSWERED,
60+
); // Replace `UNANSWERED` with the correct answer.
61+
}
62+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import {
2+
AnswerChoice,
3+
MultipleChoiceQuizQuestion,
4+
QuizQuestion,
5+
QuizQuestionProvider,
6+
} from 'codedifferently-instructional';
7+
8+
export class MeikoStephensQuiz implements QuizQuestionProvider {
9+
getProviderName(): string {
10+
return 'meikostephens';
11+
}
12+
13+
makeQuizQuestions(): QuizQuestion[] {
14+
return [
15+
MeikoStephensQuiz.makeQuestion0(),
16+
MeikoStephensQuiz.makeQuestion1(),
17+
MeikoStephensQuiz.makeQuestion2(),
18+
];
19+
}
20+
21+
private static makeQuestion0(): QuizQuestion {
22+
return new MultipleChoiceQuizQuestion(
23+
0,
24+
'What is a branch?',
25+
new Map<AnswerChoice, string>([
26+
[AnswerChoice.A, 'A new line of code'],
27+
[
28+
AnswerChoice.B,
29+
'A copy of a repository that allows you make changes and merge them later',
30+
],
31+
[AnswerChoice.C, 'A way to delete a respository and start over'],
32+
[AnswerChoice.D, 'A way to run code'],
33+
]),
34+
AnswerChoice.UNANSWERED,
35+
); // Replace `UNANSWERED` with the correct answer.
36+
}
37+
38+
private static makeQuestion1(): QuizQuestion {
39+
return new MultipleChoiceQuizQuestion(
40+
1,
41+
'What does a syncfork do?',
42+
new Map<AnswerChoice, string>([
43+
[AnswerChoice.A, 'Updates changes from the original repository'],
44+
[AnswerChoice.B, 'Deletes the repositiory'],
45+
[AnswerChoice.C, 'Transforms the repository into a branch'],
46+
[AnswerChoice.D, 'Runs the code more efficiently'],
47+
]),
48+
AnswerChoice.UNANSWERED,
49+
); // Replace `UNANSWERED` with the correct answer.
50+
}
51+
52+
private static makeQuestion2(): QuizQuestion {
53+
return new MultipleChoiceQuizQuestion(
54+
2,
55+
'What brings the modify changes to merge into the main repositiory?',
56+
new Map<AnswerChoice, string>([
57+
[AnswerChoice.A, 'A terminal'],
58+
[AnswerChoice.B, 'A branch'],
59+
[AnswerChoice.C, 'A syncfork'],
60+
[AnswerChoice.D, 'A pull request'],
61+
]),
62+
AnswerChoice.UNANSWERED,
63+
); // Replace `UNANSWERED` with the correct answer.
64+
}
65+
}

0 commit comments

Comments
 (0)