learn_bash_from_session_data 1.0.6 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +141 -18
- package/bin/learn-bash.js +17 -14
- package/package.json +1 -1
- package/scripts/html_generator.py +183 -14
- package/scripts/quiz_generator.py +114 -40
- package/bash-learner-output/run-2026-02-05-154214/index.html +0 -3848
- package/bash-learner-output/run-2026-02-05-154214/summary.json +0 -148
- package/bash-learner-output/run-2026-02-05-155427/index.html +0 -3900
- package/bash-learner-output/run-2026-02-05-155427/summary.json +0 -157
- package/bash-learner-output/run-2026-02-05-155949/index.html +0 -4514
- package/bash-learner-output/run-2026-02-05-155949/summary.json +0 -163
- package/vectors.db +0 -0
|
@@ -1,3900 +0,0 @@
|
|
|
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>Bash Command Learning Report</title>
|
|
7
|
-
<style>
|
|
8
|
-
|
|
9
|
-
/* CSS Reset and Base */
|
|
10
|
-
*, *::before, *::after {
|
|
11
|
-
box-sizing: border-box;
|
|
12
|
-
margin: 0;
|
|
13
|
-
padding: 0;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
:root {
|
|
17
|
-
--bg-primary: #ffffff;
|
|
18
|
-
--bg-secondary: #f8f9fa;
|
|
19
|
-
--bg-tertiary: #e9ecef;
|
|
20
|
-
--text-primary: #212529;
|
|
21
|
-
--text-secondary: #6c757d;
|
|
22
|
-
--text-muted: #adb5bd;
|
|
23
|
-
--border-color: #dee2e6;
|
|
24
|
-
--accent-primary: #4285f4;
|
|
25
|
-
--accent-success: #34a853;
|
|
26
|
-
--accent-warning: #fbbc05;
|
|
27
|
-
--accent-danger: #ea4335;
|
|
28
|
-
--shadow-sm: 0 1px 3px rgba(0,0,0,0.1);
|
|
29
|
-
--shadow-md: 0 4px 6px rgba(0,0,0,0.1);
|
|
30
|
-
--shadow-lg: 0 10px 25px rgba(0,0,0,0.15);
|
|
31
|
-
--radius-sm: 4px;
|
|
32
|
-
--radius-md: 8px;
|
|
33
|
-
--radius-lg: 12px;
|
|
34
|
-
--font-mono: 'SF Mono', 'Fira Code', 'Consolas', monospace;
|
|
35
|
-
--font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
36
|
-
--transition-fast: 150ms ease;
|
|
37
|
-
--transition-normal: 250ms ease;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
[data-theme="dark"] {
|
|
41
|
-
--bg-primary: #1a1a2e;
|
|
42
|
-
--bg-secondary: #16213e;
|
|
43
|
-
--bg-tertiary: #0f3460;
|
|
44
|
-
--text-primary: #eaeaea;
|
|
45
|
-
--text-secondary: #a0a0a0;
|
|
46
|
-
--text-muted: #666666;
|
|
47
|
-
--border-color: #2d2d4a;
|
|
48
|
-
--shadow-sm: 0 1px 3px rgba(0,0,0,0.3);
|
|
49
|
-
--shadow-md: 0 4px 6px rgba(0,0,0,0.3);
|
|
50
|
-
--shadow-lg: 0 10px 25px rgba(0,0,0,0.4);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
html {
|
|
54
|
-
font-size: 16px;
|
|
55
|
-
scroll-behavior: smooth;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
body {
|
|
59
|
-
font-family: var(--font-sans);
|
|
60
|
-
background: var(--bg-secondary);
|
|
61
|
-
color: var(--text-primary);
|
|
62
|
-
line-height: 1.6;
|
|
63
|
-
min-height: 100vh;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/* Container */
|
|
67
|
-
.container {
|
|
68
|
-
max-width: 1400px;
|
|
69
|
-
margin: 0 auto;
|
|
70
|
-
padding: 20px;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/* Header */
|
|
74
|
-
.header {
|
|
75
|
-
display: flex;
|
|
76
|
-
justify-content: space-between;
|
|
77
|
-
align-items: center;
|
|
78
|
-
padding: 24px 32px;
|
|
79
|
-
background: var(--bg-primary);
|
|
80
|
-
border-radius: var(--radius-lg);
|
|
81
|
-
box-shadow: var(--shadow-md);
|
|
82
|
-
margin-bottom: 20px;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
.header h1 {
|
|
86
|
-
font-size: 1.75rem;
|
|
87
|
-
font-weight: 700;
|
|
88
|
-
color: var(--text-primary);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
.subtitle {
|
|
92
|
-
color: var(--text-secondary);
|
|
93
|
-
font-size: 0.9rem;
|
|
94
|
-
margin-top: 4px;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
.theme-toggle {
|
|
98
|
-
background: var(--bg-tertiary);
|
|
99
|
-
border: none;
|
|
100
|
-
border-radius: 50%;
|
|
101
|
-
width: 44px;
|
|
102
|
-
height: 44px;
|
|
103
|
-
cursor: pointer;
|
|
104
|
-
display: flex;
|
|
105
|
-
align-items: center;
|
|
106
|
-
justify-content: center;
|
|
107
|
-
transition: var(--transition-fast);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
.theme-toggle:hover {
|
|
111
|
-
transform: scale(1.05);
|
|
112
|
-
box-shadow: var(--shadow-sm);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
.theme-icon {
|
|
116
|
-
font-size: 1.25rem;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
.dark-icon { display: none; }
|
|
120
|
-
[data-theme="dark"] .light-icon { display: none; }
|
|
121
|
-
[data-theme="dark"] .dark-icon { display: inline; }
|
|
122
|
-
|
|
123
|
-
/* Tabs */
|
|
124
|
-
.tabs {
|
|
125
|
-
display: flex;
|
|
126
|
-
gap: 8px;
|
|
127
|
-
padding: 8px;
|
|
128
|
-
background: var(--bg-primary);
|
|
129
|
-
border-radius: var(--radius-lg);
|
|
130
|
-
box-shadow: var(--shadow-sm);
|
|
131
|
-
margin-bottom: 20px;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
.tab {
|
|
135
|
-
flex: 1;
|
|
136
|
-
display: flex;
|
|
137
|
-
align-items: center;
|
|
138
|
-
justify-content: center;
|
|
139
|
-
gap: 8px;
|
|
140
|
-
padding: 14px 20px;
|
|
141
|
-
background: transparent;
|
|
142
|
-
border: none;
|
|
143
|
-
border-radius: var(--radius-md);
|
|
144
|
-
color: var(--text-secondary);
|
|
145
|
-
font-size: 0.95rem;
|
|
146
|
-
font-weight: 500;
|
|
147
|
-
cursor: pointer;
|
|
148
|
-
transition: var(--transition-fast);
|
|
149
|
-
position: relative;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
.tab:hover {
|
|
153
|
-
background: var(--bg-tertiary);
|
|
154
|
-
color: var(--text-primary);
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
.tab.active {
|
|
158
|
-
background: var(--accent-primary);
|
|
159
|
-
color: white;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
.tab-icon {
|
|
163
|
-
font-size: 1.1rem;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
.tab-key {
|
|
167
|
-
position: absolute;
|
|
168
|
-
top: 4px;
|
|
169
|
-
right: 8px;
|
|
170
|
-
font-size: 0.7rem;
|
|
171
|
-
opacity: 0.5;
|
|
172
|
-
font-family: var(--font-mono);
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
/* Content Panels */
|
|
176
|
-
.content {
|
|
177
|
-
background: var(--bg-primary);
|
|
178
|
-
border-radius: var(--radius-lg);
|
|
179
|
-
box-shadow: var(--shadow-md);
|
|
180
|
-
min-height: 500px;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
.panel {
|
|
184
|
-
display: none;
|
|
185
|
-
padding: 32px;
|
|
186
|
-
animation: fadeIn 0.3s ease;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
.panel.active {
|
|
190
|
-
display: block;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
@keyframes fadeIn {
|
|
194
|
-
from { opacity: 0; transform: translateY(10px); }
|
|
195
|
-
to { opacity: 1; transform: translateY(0); }
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
/* Dashboard / Overview */
|
|
199
|
-
.dashboard {
|
|
200
|
-
display: flex;
|
|
201
|
-
flex-direction: column;
|
|
202
|
-
gap: 24px;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
.stats-grid {
|
|
206
|
-
display: grid;
|
|
207
|
-
grid-template-columns: repeat(4, 1fr);
|
|
208
|
-
gap: 16px;
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
.stat-card {
|
|
212
|
-
background: var(--bg-secondary);
|
|
213
|
-
padding: 24px;
|
|
214
|
-
border-radius: var(--radius-md);
|
|
215
|
-
text-align: center;
|
|
216
|
-
transition: var(--transition-fast);
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
.stat-card:hover {
|
|
220
|
-
transform: translateY(-2px);
|
|
221
|
-
box-shadow: var(--shadow-sm);
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
.stat-value {
|
|
225
|
-
font-size: 2.5rem;
|
|
226
|
-
font-weight: 700;
|
|
227
|
-
color: var(--accent-primary);
|
|
228
|
-
line-height: 1.2;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
.stat-value.date-value {
|
|
232
|
-
font-size: 1rem;
|
|
233
|
-
font-family: var(--font-mono);
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
.stat-label {
|
|
237
|
-
font-size: 0.9rem;
|
|
238
|
-
color: var(--text-secondary);
|
|
239
|
-
margin-top: 8px;
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
.charts-row {
|
|
243
|
-
display: grid;
|
|
244
|
-
grid-template-columns: repeat(2, 1fr);
|
|
245
|
-
gap: 24px;
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
.chart-card {
|
|
249
|
-
background: var(--bg-secondary);
|
|
250
|
-
padding: 24px;
|
|
251
|
-
border-radius: var(--radius-md);
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
.chart-card.wide {
|
|
255
|
-
grid-column: span 1;
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
.chart-card h3 {
|
|
259
|
-
font-size: 1.1rem;
|
|
260
|
-
font-weight: 600;
|
|
261
|
-
margin-bottom: 20px;
|
|
262
|
-
color: var(--text-primary);
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
/* Complexity Bars */
|
|
266
|
-
.complexity-bars {
|
|
267
|
-
display: flex;
|
|
268
|
-
flex-direction: column;
|
|
269
|
-
gap: 16px;
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
.complexity-row {
|
|
273
|
-
display: grid;
|
|
274
|
-
grid-template-columns: 100px 1fr 50px;
|
|
275
|
-
align-items: center;
|
|
276
|
-
gap: 12px;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
.complexity-label {
|
|
280
|
-
font-size: 0.85rem;
|
|
281
|
-
font-weight: 500;
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
.complexity-label.simple { color: var(--accent-success); }
|
|
285
|
-
.complexity-label.intermediate { color: var(--accent-warning); }
|
|
286
|
-
.complexity-label.advanced { color: var(--accent-danger); }
|
|
287
|
-
|
|
288
|
-
.complexity-bar-bg {
|
|
289
|
-
height: 24px;
|
|
290
|
-
background: var(--bg-tertiary);
|
|
291
|
-
border-radius: var(--radius-sm);
|
|
292
|
-
overflow: hidden;
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
.complexity-bar {
|
|
296
|
-
height: 100%;
|
|
297
|
-
border-radius: var(--radius-sm);
|
|
298
|
-
transition: width 0.5s ease;
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
.complexity-bar.simple { background: var(--accent-success); }
|
|
302
|
-
.complexity-bar.intermediate { background: var(--accent-warning); }
|
|
303
|
-
.complexity-bar.advanced { background: var(--accent-danger); }
|
|
304
|
-
|
|
305
|
-
.complexity-count {
|
|
306
|
-
font-size: 0.9rem;
|
|
307
|
-
font-weight: 600;
|
|
308
|
-
text-align: right;
|
|
309
|
-
color: var(--text-secondary);
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
/* Operators List */
|
|
313
|
-
.operators-list {
|
|
314
|
-
display: flex;
|
|
315
|
-
flex-direction: column;
|
|
316
|
-
gap: 12px;
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
.operator-item {
|
|
320
|
-
display: grid;
|
|
321
|
-
grid-template-columns: 80px 1fr 120px 50px;
|
|
322
|
-
align-items: center;
|
|
323
|
-
gap: 12px;
|
|
324
|
-
padding: 8px 0;
|
|
325
|
-
border-bottom: 1px solid var(--border-color);
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
.operator-item:last-child {
|
|
329
|
-
border-bottom: none;
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
.operator-symbol {
|
|
333
|
-
font-family: var(--font-mono);
|
|
334
|
-
font-size: 1rem;
|
|
335
|
-
font-weight: 600;
|
|
336
|
-
color: var(--accent-primary);
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
.operator-symbol code {
|
|
340
|
-
background: var(--bg-tertiary);
|
|
341
|
-
padding: 4px 8px;
|
|
342
|
-
border-radius: var(--radius-sm);
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
.operator-info {
|
|
346
|
-
display: flex;
|
|
347
|
-
flex-direction: column;
|
|
348
|
-
gap: 2px;
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
.operator-name {
|
|
352
|
-
font-size: 0.9rem;
|
|
353
|
-
font-weight: 600;
|
|
354
|
-
color: var(--text-primary);
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
.operator-desc {
|
|
358
|
-
font-size: 0.8rem;
|
|
359
|
-
color: var(--text-secondary);
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
.operator-bar-container {
|
|
363
|
-
height: 20px;
|
|
364
|
-
background: var(--bg-tertiary);
|
|
365
|
-
border-radius: var(--radius-sm);
|
|
366
|
-
overflow: hidden;
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
.operator-bar {
|
|
370
|
-
height: 100%;
|
|
371
|
-
background: var(--accent-primary);
|
|
372
|
-
border-radius: var(--radius-sm);
|
|
373
|
-
transition: width 0.5s ease;
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
.operator-count {
|
|
377
|
-
font-size: 0.9rem;
|
|
378
|
-
font-weight: 600;
|
|
379
|
-
text-align: right;
|
|
380
|
-
color: var(--text-secondary);
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
/* Pie Chart */
|
|
384
|
-
.pie-container {
|
|
385
|
-
display: flex;
|
|
386
|
-
align-items: center;
|
|
387
|
-
gap: 24px;
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
.pie-chart {
|
|
391
|
-
width: 160px;
|
|
392
|
-
height: 160px;
|
|
393
|
-
flex-shrink: 0;
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
.category-legend {
|
|
397
|
-
display: flex;
|
|
398
|
-
flex-direction: column;
|
|
399
|
-
gap: 8px;
|
|
400
|
-
flex: 1;
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
.legend-item {
|
|
404
|
-
display: flex;
|
|
405
|
-
align-items: center;
|
|
406
|
-
gap: 8px;
|
|
407
|
-
font-size: 0.85rem;
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
.legend-color {
|
|
411
|
-
width: 12px;
|
|
412
|
-
height: 12px;
|
|
413
|
-
border-radius: 2px;
|
|
414
|
-
flex-shrink: 0;
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
.legend-label {
|
|
418
|
-
flex: 1;
|
|
419
|
-
color: var(--text-primary);
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
.legend-count {
|
|
423
|
-
color: var(--text-secondary);
|
|
424
|
-
font-weight: 500;
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
/* Top Commands */
|
|
428
|
-
.top-commands {
|
|
429
|
-
display: flex;
|
|
430
|
-
flex-direction: column;
|
|
431
|
-
gap: 12px;
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
.top-command-item {
|
|
435
|
-
display: grid;
|
|
436
|
-
grid-template-columns: 120px 1fr 50px;
|
|
437
|
-
align-items: center;
|
|
438
|
-
gap: 12px;
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
.top-command-name code {
|
|
442
|
-
font-size: 0.85rem;
|
|
443
|
-
}
|
|
444
|
-
|
|
445
|
-
.top-command-bar-container {
|
|
446
|
-
height: 20px;
|
|
447
|
-
background: var(--bg-tertiary);
|
|
448
|
-
border-radius: var(--radius-sm);
|
|
449
|
-
overflow: hidden;
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
.top-command-bar {
|
|
453
|
-
height: 100%;
|
|
454
|
-
background: linear-gradient(90deg, var(--accent-primary), #7baaf7);
|
|
455
|
-
border-radius: var(--radius-sm);
|
|
456
|
-
transition: width 0.5s ease;
|
|
457
|
-
}
|
|
458
|
-
|
|
459
|
-
.top-command-count {
|
|
460
|
-
font-size: 0.9rem;
|
|
461
|
-
font-weight: 600;
|
|
462
|
-
text-align: right;
|
|
463
|
-
color: var(--text-secondary);
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
/* New Commands */
|
|
467
|
-
.new-commands {
|
|
468
|
-
display: flex;
|
|
469
|
-
flex-wrap: wrap;
|
|
470
|
-
gap: 12px;
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
.new-command-chip {
|
|
474
|
-
display: flex;
|
|
475
|
-
flex-direction: column;
|
|
476
|
-
gap: 4px;
|
|
477
|
-
padding: 12px 16px;
|
|
478
|
-
background: var(--bg-tertiary);
|
|
479
|
-
border-radius: var(--radius-md);
|
|
480
|
-
border-left: 3px solid var(--accent-success);
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
.new-command-chip code {
|
|
484
|
-
font-size: 0.9rem;
|
|
485
|
-
}
|
|
486
|
-
|
|
487
|
-
.first-seen {
|
|
488
|
-
font-size: 0.75rem;
|
|
489
|
-
color: var(--text-muted);
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
/* Commands Tab */
|
|
493
|
-
.commands-container {
|
|
494
|
-
display: flex;
|
|
495
|
-
flex-direction: column;
|
|
496
|
-
gap: 20px;
|
|
497
|
-
}
|
|
498
|
-
|
|
499
|
-
.commands-toolbar {
|
|
500
|
-
display: flex;
|
|
501
|
-
gap: 16px;
|
|
502
|
-
align-items: center;
|
|
503
|
-
}
|
|
504
|
-
|
|
505
|
-
.search-box {
|
|
506
|
-
flex: 1;
|
|
507
|
-
}
|
|
508
|
-
|
|
509
|
-
.search-box input {
|
|
510
|
-
width: 100%;
|
|
511
|
-
padding: 12px 16px;
|
|
512
|
-
border: 2px solid var(--border-color);
|
|
513
|
-
border-radius: var(--radius-md);
|
|
514
|
-
font-size: 0.95rem;
|
|
515
|
-
background: var(--bg-secondary);
|
|
516
|
-
color: var(--text-primary);
|
|
517
|
-
transition: var(--transition-fast);
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
.search-box input:focus {
|
|
521
|
-
outline: none;
|
|
522
|
-
border-color: var(--accent-primary);
|
|
523
|
-
}
|
|
524
|
-
|
|
525
|
-
.sort-controls {
|
|
526
|
-
display: flex;
|
|
527
|
-
align-items: center;
|
|
528
|
-
gap: 8px;
|
|
529
|
-
}
|
|
530
|
-
|
|
531
|
-
.sort-controls label {
|
|
532
|
-
font-size: 0.9rem;
|
|
533
|
-
color: var(--text-secondary);
|
|
534
|
-
}
|
|
535
|
-
|
|
536
|
-
.sort-controls select {
|
|
537
|
-
padding: 10px 14px;
|
|
538
|
-
border: 2px solid var(--border-color);
|
|
539
|
-
border-radius: var(--radius-md);
|
|
540
|
-
background: var(--bg-secondary);
|
|
541
|
-
color: var(--text-primary);
|
|
542
|
-
font-size: 0.9rem;
|
|
543
|
-
cursor: pointer;
|
|
544
|
-
}
|
|
545
|
-
|
|
546
|
-
.filter-chips {
|
|
547
|
-
display: flex;
|
|
548
|
-
flex-wrap: wrap;
|
|
549
|
-
gap: 8px;
|
|
550
|
-
}
|
|
551
|
-
|
|
552
|
-
.filter-chip {
|
|
553
|
-
padding: 8px 16px;
|
|
554
|
-
border: 2px solid var(--border-color);
|
|
555
|
-
border-radius: 20px;
|
|
556
|
-
background: transparent;
|
|
557
|
-
color: var(--text-secondary);
|
|
558
|
-
font-size: 0.85rem;
|
|
559
|
-
cursor: pointer;
|
|
560
|
-
transition: var(--transition-fast);
|
|
561
|
-
}
|
|
562
|
-
|
|
563
|
-
.filter-chip:hover {
|
|
564
|
-
border-color: var(--accent-primary);
|
|
565
|
-
color: var(--accent-primary);
|
|
566
|
-
}
|
|
567
|
-
|
|
568
|
-
.filter-chip.active {
|
|
569
|
-
background: var(--accent-primary);
|
|
570
|
-
border-color: var(--accent-primary);
|
|
571
|
-
color: white;
|
|
572
|
-
}
|
|
573
|
-
|
|
574
|
-
.commands-list {
|
|
575
|
-
display: flex;
|
|
576
|
-
flex-direction: column;
|
|
577
|
-
gap: 12px;
|
|
578
|
-
}
|
|
579
|
-
|
|
580
|
-
.command-card {
|
|
581
|
-
border: 1px solid var(--border-color);
|
|
582
|
-
border-radius: var(--radius-md);
|
|
583
|
-
overflow: hidden;
|
|
584
|
-
transition: var(--transition-fast);
|
|
585
|
-
}
|
|
586
|
-
|
|
587
|
-
.command-card:hover {
|
|
588
|
-
box-shadow: var(--shadow-sm);
|
|
589
|
-
}
|
|
590
|
-
|
|
591
|
-
.command-card.hidden {
|
|
592
|
-
display: none;
|
|
593
|
-
}
|
|
594
|
-
|
|
595
|
-
.command-header {
|
|
596
|
-
display: flex;
|
|
597
|
-
justify-content: space-between;
|
|
598
|
-
align-items: center;
|
|
599
|
-
padding: 16px 20px;
|
|
600
|
-
background: var(--bg-secondary);
|
|
601
|
-
cursor: pointer;
|
|
602
|
-
transition: var(--transition-fast);
|
|
603
|
-
}
|
|
604
|
-
|
|
605
|
-
.command-header:hover {
|
|
606
|
-
background: var(--bg-tertiary);
|
|
607
|
-
}
|
|
608
|
-
|
|
609
|
-
.command-main {
|
|
610
|
-
display: flex;
|
|
611
|
-
align-items: center;
|
|
612
|
-
gap: 12px;
|
|
613
|
-
}
|
|
614
|
-
|
|
615
|
-
.command-meta {
|
|
616
|
-
display: flex;
|
|
617
|
-
align-items: center;
|
|
618
|
-
gap: 16px;
|
|
619
|
-
}
|
|
620
|
-
|
|
621
|
-
.frequency {
|
|
622
|
-
font-size: 0.85rem;
|
|
623
|
-
color: var(--text-secondary);
|
|
624
|
-
}
|
|
625
|
-
|
|
626
|
-
.expand-icon {
|
|
627
|
-
color: var(--text-muted);
|
|
628
|
-
transition: transform var(--transition-fast);
|
|
629
|
-
}
|
|
630
|
-
|
|
631
|
-
.command-card.expanded .expand-icon {
|
|
632
|
-
transform: rotate(180deg);
|
|
633
|
-
}
|
|
634
|
-
|
|
635
|
-
.command-details {
|
|
636
|
-
display: none;
|
|
637
|
-
padding: 20px;
|
|
638
|
-
border-top: 1px solid var(--border-color);
|
|
639
|
-
background: var(--bg-primary);
|
|
640
|
-
}
|
|
641
|
-
|
|
642
|
-
.command-details.show {
|
|
643
|
-
display: block;
|
|
644
|
-
}
|
|
645
|
-
|
|
646
|
-
.command-details h5 {
|
|
647
|
-
font-size: 0.85rem;
|
|
648
|
-
font-weight: 600;
|
|
649
|
-
color: var(--text-secondary);
|
|
650
|
-
margin-bottom: 8px;
|
|
651
|
-
text-transform: uppercase;
|
|
652
|
-
letter-spacing: 0.5px;
|
|
653
|
-
}
|
|
654
|
-
|
|
655
|
-
.command-details > div {
|
|
656
|
-
margin-bottom: 20px;
|
|
657
|
-
}
|
|
658
|
-
|
|
659
|
-
.command-details > div:last-child {
|
|
660
|
-
margin-bottom: 0;
|
|
661
|
-
}
|
|
662
|
-
|
|
663
|
-
.flags-list {
|
|
664
|
-
list-style: none;
|
|
665
|
-
display: flex;
|
|
666
|
-
flex-direction: column;
|
|
667
|
-
gap: 8px;
|
|
668
|
-
}
|
|
669
|
-
|
|
670
|
-
.flags-list li {
|
|
671
|
-
display: flex;
|
|
672
|
-
align-items: baseline;
|
|
673
|
-
gap: 8px;
|
|
674
|
-
font-size: 0.9rem;
|
|
675
|
-
}
|
|
676
|
-
|
|
677
|
-
.output-preview {
|
|
678
|
-
background: var(--bg-secondary);
|
|
679
|
-
padding: 16px;
|
|
680
|
-
border-radius: var(--radius-md);
|
|
681
|
-
font-family: var(--font-mono);
|
|
682
|
-
font-size: 0.85rem;
|
|
683
|
-
overflow-x: auto;
|
|
684
|
-
white-space: pre-wrap;
|
|
685
|
-
}
|
|
686
|
-
|
|
687
|
-
/* Syntax Highlighting */
|
|
688
|
-
code, pre {
|
|
689
|
-
font-family: var(--font-mono);
|
|
690
|
-
}
|
|
691
|
-
|
|
692
|
-
code.cmd, .syntax-highlighted .cmd {
|
|
693
|
-
color: #4285f4;
|
|
694
|
-
font-weight: 600;
|
|
695
|
-
}
|
|
696
|
-
|
|
697
|
-
code.flag, .syntax-highlighted .flag {
|
|
698
|
-
color: #34a853;
|
|
699
|
-
}
|
|
700
|
-
|
|
701
|
-
.syntax-highlighted .string {
|
|
702
|
-
color: #ff6d01;
|
|
703
|
-
}
|
|
704
|
-
|
|
705
|
-
.syntax-highlighted .operator {
|
|
706
|
-
color: #9c27b0;
|
|
707
|
-
font-weight: 600;
|
|
708
|
-
}
|
|
709
|
-
|
|
710
|
-
.syntax-highlighted .path {
|
|
711
|
-
color: #6c757d;
|
|
712
|
-
}
|
|
713
|
-
|
|
714
|
-
.syntax-highlighted .variable {
|
|
715
|
-
color: #ea4335;
|
|
716
|
-
}
|
|
717
|
-
|
|
718
|
-
.syntax-highlighted {
|
|
719
|
-
background: var(--bg-secondary);
|
|
720
|
-
padding: 12px 16px;
|
|
721
|
-
border-radius: var(--radius-md);
|
|
722
|
-
font-size: 0.9rem;
|
|
723
|
-
overflow-x: auto;
|
|
724
|
-
white-space: pre-wrap;
|
|
725
|
-
}
|
|
726
|
-
|
|
727
|
-
/* Badges */
|
|
728
|
-
.complexity-badge {
|
|
729
|
-
padding: 4px 10px;
|
|
730
|
-
border-radius: 12px;
|
|
731
|
-
font-size: 0.75rem;
|
|
732
|
-
font-weight: 600;
|
|
733
|
-
text-transform: uppercase;
|
|
734
|
-
}
|
|
735
|
-
|
|
736
|
-
.complexity-badge.simple {
|
|
737
|
-
background: rgba(52, 168, 83, 0.15);
|
|
738
|
-
color: var(--accent-success);
|
|
739
|
-
}
|
|
740
|
-
|
|
741
|
-
.complexity-badge.intermediate {
|
|
742
|
-
background: rgba(251, 188, 5, 0.15);
|
|
743
|
-
color: #d49a00;
|
|
744
|
-
}
|
|
745
|
-
|
|
746
|
-
.complexity-badge.advanced {
|
|
747
|
-
background: rgba(234, 67, 53, 0.15);
|
|
748
|
-
color: var(--accent-danger);
|
|
749
|
-
}
|
|
750
|
-
|
|
751
|
-
.category-badge {
|
|
752
|
-
padding: 4px 10px;
|
|
753
|
-
border-radius: 12px;
|
|
754
|
-
font-size: 0.75rem;
|
|
755
|
-
background: var(--bg-tertiary);
|
|
756
|
-
color: var(--text-secondary);
|
|
757
|
-
}
|
|
758
|
-
|
|
759
|
-
/* Lessons Tab */
|
|
760
|
-
.lessons-container {
|
|
761
|
-
display: flex;
|
|
762
|
-
flex-direction: column;
|
|
763
|
-
gap: 32px;
|
|
764
|
-
}
|
|
765
|
-
|
|
766
|
-
.lesson-section {
|
|
767
|
-
border: 1px solid var(--border-color);
|
|
768
|
-
border-radius: var(--radius-lg);
|
|
769
|
-
overflow: hidden;
|
|
770
|
-
}
|
|
771
|
-
|
|
772
|
-
.lesson-title {
|
|
773
|
-
display: flex;
|
|
774
|
-
align-items: center;
|
|
775
|
-
gap: 12px;
|
|
776
|
-
padding: 20px 24px;
|
|
777
|
-
background: var(--bg-secondary);
|
|
778
|
-
font-size: 1.25rem;
|
|
779
|
-
font-weight: 600;
|
|
780
|
-
border-bottom: 1px solid var(--border-color);
|
|
781
|
-
}
|
|
782
|
-
|
|
783
|
-
.lesson-icon {
|
|
784
|
-
font-size: 1.5rem;
|
|
785
|
-
}
|
|
786
|
-
|
|
787
|
-
.lesson-count {
|
|
788
|
-
font-size: 0.9rem;
|
|
789
|
-
font-weight: 400;
|
|
790
|
-
color: var(--text-secondary);
|
|
791
|
-
margin-left: auto;
|
|
792
|
-
}
|
|
793
|
-
|
|
794
|
-
.lesson-content {
|
|
795
|
-
padding: 24px;
|
|
796
|
-
}
|
|
797
|
-
|
|
798
|
-
.concept-overview {
|
|
799
|
-
margin-bottom: 24px;
|
|
800
|
-
padding: 16px;
|
|
801
|
-
background: var(--bg-secondary);
|
|
802
|
-
border-radius: var(--radius-md);
|
|
803
|
-
border-left: 4px solid var(--accent-primary);
|
|
804
|
-
}
|
|
805
|
-
|
|
806
|
-
.concept-overview h4 {
|
|
807
|
-
font-size: 0.9rem;
|
|
808
|
-
font-weight: 600;
|
|
809
|
-
margin-bottom: 8px;
|
|
810
|
-
color: var(--accent-primary);
|
|
811
|
-
}
|
|
812
|
-
|
|
813
|
-
.concept-overview p {
|
|
814
|
-
color: var(--text-secondary);
|
|
815
|
-
line-height: 1.7;
|
|
816
|
-
}
|
|
817
|
-
|
|
818
|
-
.lesson-commands h4 {
|
|
819
|
-
font-size: 1rem;
|
|
820
|
-
font-weight: 600;
|
|
821
|
-
margin-bottom: 16px;
|
|
822
|
-
}
|
|
823
|
-
|
|
824
|
-
.lesson-command {
|
|
825
|
-
padding: 16px;
|
|
826
|
-
background: var(--bg-secondary);
|
|
827
|
-
border-radius: var(--radius-md);
|
|
828
|
-
margin-bottom: 12px;
|
|
829
|
-
}
|
|
830
|
-
|
|
831
|
-
.lesson-command:last-child {
|
|
832
|
-
margin-bottom: 0;
|
|
833
|
-
}
|
|
834
|
-
|
|
835
|
-
.lesson-command-header {
|
|
836
|
-
display: flex;
|
|
837
|
-
align-items: center;
|
|
838
|
-
gap: 12px;
|
|
839
|
-
margin-bottom: 12px;
|
|
840
|
-
}
|
|
841
|
-
|
|
842
|
-
.lesson-description {
|
|
843
|
-
margin-top: 12px;
|
|
844
|
-
color: var(--text-secondary);
|
|
845
|
-
font-size: 0.9rem;
|
|
846
|
-
}
|
|
847
|
-
|
|
848
|
-
.patterns {
|
|
849
|
-
margin-top: 24px;
|
|
850
|
-
padding-top: 20px;
|
|
851
|
-
border-top: 1px solid var(--border-color);
|
|
852
|
-
}
|
|
853
|
-
|
|
854
|
-
.patterns h4 {
|
|
855
|
-
font-size: 0.95rem;
|
|
856
|
-
font-weight: 600;
|
|
857
|
-
margin-bottom: 12px;
|
|
858
|
-
}
|
|
859
|
-
|
|
860
|
-
.patterns ul {
|
|
861
|
-
list-style: none;
|
|
862
|
-
display: flex;
|
|
863
|
-
flex-direction: column;
|
|
864
|
-
gap: 8px;
|
|
865
|
-
}
|
|
866
|
-
|
|
867
|
-
.patterns li {
|
|
868
|
-
display: flex;
|
|
869
|
-
align-items: center;
|
|
870
|
-
gap: 8px;
|
|
871
|
-
font-size: 0.9rem;
|
|
872
|
-
color: var(--text-secondary);
|
|
873
|
-
}
|
|
874
|
-
|
|
875
|
-
.patterns li::before {
|
|
876
|
-
content: "\2022";
|
|
877
|
-
color: var(--accent-primary);
|
|
878
|
-
font-weight: bold;
|
|
879
|
-
}
|
|
880
|
-
|
|
881
|
-
/* Quiz Tab */
|
|
882
|
-
.quiz-container {
|
|
883
|
-
max-width: 800px;
|
|
884
|
-
margin: 0 auto;
|
|
885
|
-
}
|
|
886
|
-
|
|
887
|
-
.quiz-header {
|
|
888
|
-
text-align: center;
|
|
889
|
-
margin-bottom: 32px;
|
|
890
|
-
}
|
|
891
|
-
|
|
892
|
-
.quiz-header h2 {
|
|
893
|
-
font-size: 1.5rem;
|
|
894
|
-
margin-bottom: 8px;
|
|
895
|
-
}
|
|
896
|
-
|
|
897
|
-
.quiz-header p {
|
|
898
|
-
color: var(--text-secondary);
|
|
899
|
-
margin-bottom: 20px;
|
|
900
|
-
}
|
|
901
|
-
|
|
902
|
-
.quiz-score {
|
|
903
|
-
display: inline-flex;
|
|
904
|
-
align-items: center;
|
|
905
|
-
gap: 4px;
|
|
906
|
-
padding: 12px 24px;
|
|
907
|
-
background: var(--bg-secondary);
|
|
908
|
-
border-radius: var(--radius-md);
|
|
909
|
-
font-size: 1.1rem;
|
|
910
|
-
font-weight: 600;
|
|
911
|
-
}
|
|
912
|
-
|
|
913
|
-
#score-current {
|
|
914
|
-
color: var(--accent-primary);
|
|
915
|
-
}
|
|
916
|
-
|
|
917
|
-
.quiz-questions {
|
|
918
|
-
display: flex;
|
|
919
|
-
flex-direction: column;
|
|
920
|
-
gap: 24px;
|
|
921
|
-
}
|
|
922
|
-
|
|
923
|
-
.quiz-question {
|
|
924
|
-
background: var(--bg-secondary);
|
|
925
|
-
border-radius: var(--radius-md);
|
|
926
|
-
padding: 24px;
|
|
927
|
-
}
|
|
928
|
-
|
|
929
|
-
.question-number {
|
|
930
|
-
font-size: 0.8rem;
|
|
931
|
-
font-weight: 600;
|
|
932
|
-
text-transform: uppercase;
|
|
933
|
-
color: var(--accent-primary);
|
|
934
|
-
margin-bottom: 8px;
|
|
935
|
-
}
|
|
936
|
-
|
|
937
|
-
.question-text {
|
|
938
|
-
font-size: 1.1rem;
|
|
939
|
-
font-weight: 500;
|
|
940
|
-
margin-bottom: 20px;
|
|
941
|
-
line-height: 1.5;
|
|
942
|
-
}
|
|
943
|
-
|
|
944
|
-
.quiz-options {
|
|
945
|
-
display: flex;
|
|
946
|
-
flex-direction: column;
|
|
947
|
-
gap: 12px;
|
|
948
|
-
}
|
|
949
|
-
|
|
950
|
-
.quiz-option {
|
|
951
|
-
display: flex;
|
|
952
|
-
align-items: center;
|
|
953
|
-
gap: 12px;
|
|
954
|
-
padding: 14px 18px;
|
|
955
|
-
background: var(--bg-primary);
|
|
956
|
-
border: 2px solid var(--border-color);
|
|
957
|
-
border-radius: var(--radius-md);
|
|
958
|
-
cursor: pointer;
|
|
959
|
-
transition: var(--transition-fast);
|
|
960
|
-
}
|
|
961
|
-
|
|
962
|
-
.quiz-option:hover {
|
|
963
|
-
border-color: var(--accent-primary);
|
|
964
|
-
}
|
|
965
|
-
|
|
966
|
-
.quiz-option input {
|
|
967
|
-
display: none;
|
|
968
|
-
}
|
|
969
|
-
|
|
970
|
-
.option-letter {
|
|
971
|
-
width: 28px;
|
|
972
|
-
height: 28px;
|
|
973
|
-
display: flex;
|
|
974
|
-
align-items: center;
|
|
975
|
-
justify-content: center;
|
|
976
|
-
background: var(--bg-tertiary);
|
|
977
|
-
border-radius: 50%;
|
|
978
|
-
font-size: 0.85rem;
|
|
979
|
-
font-weight: 600;
|
|
980
|
-
flex-shrink: 0;
|
|
981
|
-
}
|
|
982
|
-
|
|
983
|
-
.option-text {
|
|
984
|
-
flex: 1;
|
|
985
|
-
}
|
|
986
|
-
|
|
987
|
-
.quiz-option.correct {
|
|
988
|
-
border-color: var(--accent-success);
|
|
989
|
-
background: rgba(52, 168, 83, 0.1);
|
|
990
|
-
}
|
|
991
|
-
|
|
992
|
-
.quiz-option.correct .option-letter {
|
|
993
|
-
background: var(--accent-success);
|
|
994
|
-
color: white;
|
|
995
|
-
}
|
|
996
|
-
|
|
997
|
-
.quiz-option.incorrect {
|
|
998
|
-
border-color: var(--accent-danger);
|
|
999
|
-
background: rgba(234, 67, 53, 0.1);
|
|
1000
|
-
}
|
|
1001
|
-
|
|
1002
|
-
.quiz-option.incorrect .option-letter {
|
|
1003
|
-
background: var(--accent-danger);
|
|
1004
|
-
color: white;
|
|
1005
|
-
}
|
|
1006
|
-
|
|
1007
|
-
.quiz-option.disabled {
|
|
1008
|
-
pointer-events: none;
|
|
1009
|
-
opacity: 0.7;
|
|
1010
|
-
}
|
|
1011
|
-
|
|
1012
|
-
.quiz-feedback {
|
|
1013
|
-
display: none;
|
|
1014
|
-
margin-top: 16px;
|
|
1015
|
-
padding: 16px;
|
|
1016
|
-
border-radius: var(--radius-md);
|
|
1017
|
-
}
|
|
1018
|
-
|
|
1019
|
-
.quiz-feedback.show {
|
|
1020
|
-
display: block;
|
|
1021
|
-
}
|
|
1022
|
-
|
|
1023
|
-
.quiz-feedback.correct {
|
|
1024
|
-
background: rgba(52, 168, 83, 0.1);
|
|
1025
|
-
border-left: 4px solid var(--accent-success);
|
|
1026
|
-
}
|
|
1027
|
-
|
|
1028
|
-
.quiz-feedback.incorrect {
|
|
1029
|
-
background: rgba(234, 67, 53, 0.1);
|
|
1030
|
-
border-left: 4px solid var(--accent-danger);
|
|
1031
|
-
}
|
|
1032
|
-
|
|
1033
|
-
.feedback-result {
|
|
1034
|
-
font-weight: 600;
|
|
1035
|
-
margin-bottom: 8px;
|
|
1036
|
-
}
|
|
1037
|
-
|
|
1038
|
-
.feedback-explanation {
|
|
1039
|
-
color: var(--text-secondary);
|
|
1040
|
-
font-size: 0.9rem;
|
|
1041
|
-
line-height: 1.6;
|
|
1042
|
-
}
|
|
1043
|
-
|
|
1044
|
-
.quiz-actions {
|
|
1045
|
-
display: flex;
|
|
1046
|
-
justify-content: center;
|
|
1047
|
-
margin-top: 32px;
|
|
1048
|
-
}
|
|
1049
|
-
|
|
1050
|
-
.btn {
|
|
1051
|
-
padding: 14px 28px;
|
|
1052
|
-
border: none;
|
|
1053
|
-
border-radius: var(--radius-md);
|
|
1054
|
-
font-size: 1rem;
|
|
1055
|
-
font-weight: 600;
|
|
1056
|
-
cursor: pointer;
|
|
1057
|
-
transition: var(--transition-fast);
|
|
1058
|
-
}
|
|
1059
|
-
|
|
1060
|
-
.btn-secondary {
|
|
1061
|
-
background: var(--bg-tertiary);
|
|
1062
|
-
color: var(--text-primary);
|
|
1063
|
-
}
|
|
1064
|
-
|
|
1065
|
-
.btn-secondary:hover {
|
|
1066
|
-
background: var(--border-color);
|
|
1067
|
-
}
|
|
1068
|
-
|
|
1069
|
-
/* Footer */
|
|
1070
|
-
.footer {
|
|
1071
|
-
text-align: center;
|
|
1072
|
-
padding: 20px;
|
|
1073
|
-
margin-top: 20px;
|
|
1074
|
-
color: var(--text-muted);
|
|
1075
|
-
font-size: 0.85rem;
|
|
1076
|
-
}
|
|
1077
|
-
|
|
1078
|
-
/* Empty State */
|
|
1079
|
-
.empty-state {
|
|
1080
|
-
text-align: center;
|
|
1081
|
-
padding: 48px 24px;
|
|
1082
|
-
color: var(--text-secondary);
|
|
1083
|
-
}
|
|
1084
|
-
|
|
1085
|
-
/* Print Styles */
|
|
1086
|
-
@media print {
|
|
1087
|
-
body {
|
|
1088
|
-
background: white;
|
|
1089
|
-
color: black;
|
|
1090
|
-
}
|
|
1091
|
-
|
|
1092
|
-
.header, .tabs, .footer, .theme-toggle, .quiz-actions {
|
|
1093
|
-
display: none;
|
|
1094
|
-
}
|
|
1095
|
-
|
|
1096
|
-
.content {
|
|
1097
|
-
box-shadow: none;
|
|
1098
|
-
}
|
|
1099
|
-
|
|
1100
|
-
.panel {
|
|
1101
|
-
display: block !important;
|
|
1102
|
-
page-break-inside: avoid;
|
|
1103
|
-
}
|
|
1104
|
-
|
|
1105
|
-
.panel::before {
|
|
1106
|
-
content: attr(aria-labelledby);
|
|
1107
|
-
display: block;
|
|
1108
|
-
font-size: 1.5rem;
|
|
1109
|
-
font-weight: bold;
|
|
1110
|
-
margin-bottom: 1rem;
|
|
1111
|
-
padding-bottom: 0.5rem;
|
|
1112
|
-
border-bottom: 2px solid #333;
|
|
1113
|
-
}
|
|
1114
|
-
|
|
1115
|
-
.command-details {
|
|
1116
|
-
display: block !important;
|
|
1117
|
-
}
|
|
1118
|
-
}
|
|
1119
|
-
|
|
1120
|
-
/* Responsive */
|
|
1121
|
-
@media (max-width: 1024px) {
|
|
1122
|
-
.stats-grid {
|
|
1123
|
-
grid-template-columns: repeat(2, 1fr);
|
|
1124
|
-
}
|
|
1125
|
-
|
|
1126
|
-
.charts-row {
|
|
1127
|
-
grid-template-columns: 1fr;
|
|
1128
|
-
}
|
|
1129
|
-
|
|
1130
|
-
.pie-container {
|
|
1131
|
-
flex-direction: column;
|
|
1132
|
-
}
|
|
1133
|
-
}
|
|
1134
|
-
|
|
1135
|
-
@media (max-width: 768px) {
|
|
1136
|
-
.container {
|
|
1137
|
-
padding: 12px;
|
|
1138
|
-
}
|
|
1139
|
-
|
|
1140
|
-
.header {
|
|
1141
|
-
padding: 16px 20px;
|
|
1142
|
-
}
|
|
1143
|
-
|
|
1144
|
-
.header h1 {
|
|
1145
|
-
font-size: 1.25rem;
|
|
1146
|
-
}
|
|
1147
|
-
|
|
1148
|
-
.tab-label {
|
|
1149
|
-
display: none;
|
|
1150
|
-
}
|
|
1151
|
-
|
|
1152
|
-
.tab {
|
|
1153
|
-
padding: 12px;
|
|
1154
|
-
}
|
|
1155
|
-
|
|
1156
|
-
.tab-icon {
|
|
1157
|
-
font-size: 1.25rem;
|
|
1158
|
-
}
|
|
1159
|
-
|
|
1160
|
-
.panel {
|
|
1161
|
-
padding: 20px;
|
|
1162
|
-
}
|
|
1163
|
-
|
|
1164
|
-
.stats-grid {
|
|
1165
|
-
grid-template-columns: repeat(2, 1fr);
|
|
1166
|
-
gap: 12px;
|
|
1167
|
-
}
|
|
1168
|
-
|
|
1169
|
-
.stat-value {
|
|
1170
|
-
font-size: 1.75rem;
|
|
1171
|
-
}
|
|
1172
|
-
|
|
1173
|
-
.commands-toolbar {
|
|
1174
|
-
flex-direction: column;
|
|
1175
|
-
}
|
|
1176
|
-
|
|
1177
|
-
.command-header {
|
|
1178
|
-
flex-direction: column;
|
|
1179
|
-
align-items: flex-start;
|
|
1180
|
-
gap: 12px;
|
|
1181
|
-
}
|
|
1182
|
-
|
|
1183
|
-
.command-meta {
|
|
1184
|
-
width: 100%;
|
|
1185
|
-
justify-content: space-between;
|
|
1186
|
-
}
|
|
1187
|
-
}
|
|
1188
|
-
|
|
1189
|
-
</style>
|
|
1190
|
-
</head>
|
|
1191
|
-
<body>
|
|
1192
|
-
<div class="container">
|
|
1193
|
-
<header class="header">
|
|
1194
|
-
<div class="header-content">
|
|
1195
|
-
<h1>Bash Command Learning Report</h1>
|
|
1196
|
-
<p class="subtitle">Generated: 2026-02-05 15:54:27</p>
|
|
1197
|
-
</div>
|
|
1198
|
-
<button class="theme-toggle" onclick="toggleTheme()" aria-label="Toggle dark mode">
|
|
1199
|
-
<span class="theme-icon light-icon">☀</span>
|
|
1200
|
-
<span class="theme-icon dark-icon">☾</span>
|
|
1201
|
-
</button>
|
|
1202
|
-
</header>
|
|
1203
|
-
|
|
1204
|
-
<nav class="tabs" role="tablist">
|
|
1205
|
-
<button class="tab active" data-tab="overview" role="tab" aria-selected="true" aria-controls="panel-overview">
|
|
1206
|
-
<span class="tab-icon">☰</span>
|
|
1207
|
-
<span class="tab-label">Overview</span>
|
|
1208
|
-
<span class="tab-key">1</span>
|
|
1209
|
-
</button>
|
|
1210
|
-
<button class="tab" data-tab="commands" role="tab" aria-selected="false" aria-controls="panel-commands">
|
|
1211
|
-
<span class="tab-icon">❯</span>
|
|
1212
|
-
<span class="tab-label">Commands</span>
|
|
1213
|
-
<span class="tab-key">2</span>
|
|
1214
|
-
</button>
|
|
1215
|
-
<button class="tab" data-tab="lessons" role="tab" aria-selected="false" aria-controls="panel-lessons">
|
|
1216
|
-
<span class="tab-icon">📚</span>
|
|
1217
|
-
<span class="tab-label">Lessons</span>
|
|
1218
|
-
<span class="tab-key">3</span>
|
|
1219
|
-
</button>
|
|
1220
|
-
<button class="tab" data-tab="quiz" role="tab" aria-selected="false" aria-controls="panel-quiz">
|
|
1221
|
-
<span class="tab-icon">❓</span>
|
|
1222
|
-
<span class="tab-label">Quiz</span>
|
|
1223
|
-
<span class="tab-key">4</span>
|
|
1224
|
-
</button>
|
|
1225
|
-
</nav>
|
|
1226
|
-
|
|
1227
|
-
<main class="content">
|
|
1228
|
-
<section id="panel-overview" class="panel active" role="tabpanel" aria-labelledby="tab-overview">
|
|
1229
|
-
|
|
1230
|
-
<div class="dashboard">
|
|
1231
|
-
<div class="stats-grid">
|
|
1232
|
-
<div class="stat-card">
|
|
1233
|
-
<div class="stat-value">37</div>
|
|
1234
|
-
<div class="stat-label">Total Commands</div>
|
|
1235
|
-
</div>
|
|
1236
|
-
<div class="stat-card">
|
|
1237
|
-
<div class="stat-value">37</div>
|
|
1238
|
-
<div class="stat-label">Unique Commands</div>
|
|
1239
|
-
</div>
|
|
1240
|
-
<div class="stat-card">
|
|
1241
|
-
<div class="stat-value">10</div>
|
|
1242
|
-
<div class="stat-label">Unique Utilities</div>
|
|
1243
|
-
</div>
|
|
1244
|
-
<div class="stat-card">
|
|
1245
|
-
<div class="stat-value date-value">N/A</div>
|
|
1246
|
-
<div class="stat-label">to N/A</div>
|
|
1247
|
-
</div>
|
|
1248
|
-
</div>
|
|
1249
|
-
|
|
1250
|
-
<div class="charts-row">
|
|
1251
|
-
<div class="chart-card">
|
|
1252
|
-
<h3>Bash Operators Used</h3>
|
|
1253
|
-
<div class="operators-list">
|
|
1254
|
-
|
|
1255
|
-
<div class="operator-item">
|
|
1256
|
-
<div class="operator-symbol"><code>&&</code></div>
|
|
1257
|
-
<div class="operator-info">
|
|
1258
|
-
<div class="operator-name">AND operator</div>
|
|
1259
|
-
<div class="operator-desc">Run next command if previous succeeded</div>
|
|
1260
|
-
</div>
|
|
1261
|
-
<div class="operator-bar-container">
|
|
1262
|
-
<div class="operator-bar" style="width: 100.0%"></div>
|
|
1263
|
-
</div>
|
|
1264
|
-
<div class="operator-count">29</div>
|
|
1265
|
-
</div>
|
|
1266
|
-
<div class="operator-item">
|
|
1267
|
-
<div class="operator-symbol"><code><</code></div>
|
|
1268
|
-
<div class="operator-info">
|
|
1269
|
-
<div class="operator-name">Redirect input</div>
|
|
1270
|
-
<div class="operator-desc">Reads input from a file</div>
|
|
1271
|
-
</div>
|
|
1272
|
-
<div class="operator-bar-container">
|
|
1273
|
-
<div class="operator-bar" style="width: 44.827586206896555%"></div>
|
|
1274
|
-
</div>
|
|
1275
|
-
<div class="operator-count">13</div>
|
|
1276
|
-
</div>
|
|
1277
|
-
<div class="operator-item">
|
|
1278
|
-
<div class="operator-symbol"><code>2>&1</code></div>
|
|
1279
|
-
<div class="operator-info">
|
|
1280
|
-
<div class="operator-name">Redirect stderr</div>
|
|
1281
|
-
<div class="operator-desc">Combines error output with standard output</div>
|
|
1282
|
-
</div>
|
|
1283
|
-
<div class="operator-bar-container">
|
|
1284
|
-
<div class="operator-bar" style="width: 27.586206896551722%"></div>
|
|
1285
|
-
</div>
|
|
1286
|
-
<div class="operator-count">8</div>
|
|
1287
|
-
</div>
|
|
1288
|
-
<div class="operator-item">
|
|
1289
|
-
<div class="operator-symbol"><code>2>/dev/null</code></div>
|
|
1290
|
-
<div class="operator-info">
|
|
1291
|
-
<div class="operator-name">Suppress errors</div>
|
|
1292
|
-
<div class="operator-desc">Discards error messages</div>
|
|
1293
|
-
</div>
|
|
1294
|
-
<div class="operator-bar-container">
|
|
1295
|
-
<div class="operator-bar" style="width: 17.24137931034483%"></div>
|
|
1296
|
-
</div>
|
|
1297
|
-
<div class="operator-count">5</div>
|
|
1298
|
-
</div>
|
|
1299
|
-
<div class="operator-item">
|
|
1300
|
-
<div class="operator-symbol"><code>></code></div>
|
|
1301
|
-
<div class="operator-info">
|
|
1302
|
-
<div class="operator-name">Redirect output</div>
|
|
1303
|
-
<div class="operator-desc">Writes output to a file (overwrites)</div>
|
|
1304
|
-
</div>
|
|
1305
|
-
<div class="operator-bar-container">
|
|
1306
|
-
<div class="operator-bar" style="width: 17.24137931034483%"></div>
|
|
1307
|
-
</div>
|
|
1308
|
-
<div class="operator-count">5</div>
|
|
1309
|
-
</div>
|
|
1310
|
-
<div class="operator-item">
|
|
1311
|
-
<div class="operator-symbol"><code>||</code></div>
|
|
1312
|
-
<div class="operator-info">
|
|
1313
|
-
<div class="operator-name">OR operator</div>
|
|
1314
|
-
<div class="operator-desc">Run next command if previous failed</div>
|
|
1315
|
-
</div>
|
|
1316
|
-
<div class="operator-bar-container">
|
|
1317
|
-
<div class="operator-bar" style="width: 13.793103448275861%"></div>
|
|
1318
|
-
</div>
|
|
1319
|
-
<div class="operator-count">4</div>
|
|
1320
|
-
</div>
|
|
1321
|
-
<div class="operator-item">
|
|
1322
|
-
<div class="operator-symbol"><code>|</code></div>
|
|
1323
|
-
<div class="operator-info">
|
|
1324
|
-
<div class="operator-name">Pipe</div>
|
|
1325
|
-
<div class="operator-desc">Sends output of one command to input of another</div>
|
|
1326
|
-
</div>
|
|
1327
|
-
<div class="operator-bar-container">
|
|
1328
|
-
<div class="operator-bar" style="width: 10.344827586206897%"></div>
|
|
1329
|
-
</div>
|
|
1330
|
-
<div class="operator-count">3</div>
|
|
1331
|
-
</div>
|
|
1332
|
-
</div>
|
|
1333
|
-
</div>
|
|
1334
|
-
|
|
1335
|
-
<div class="chart-card">
|
|
1336
|
-
<h3>Category Breakdown</h3>
|
|
1337
|
-
<div class="pie-container">
|
|
1338
|
-
<svg viewBox="0 0 160 160" class="pie-chart">
|
|
1339
|
-
<path d="M 80 80 L 80.00 10.00 A 70 70 0 0 1 85.94 149.75 Z" fill="#4285f4" stroke="#fff" stroke-width="2"><title>Shell Builtins: 18</title></path><path d="M 80 80 L 85.94 149.75 A 70 70 0 0 1 17.50 111.51 Z" fill="#ea4335" stroke="#fff" stroke-width="2"><title>Git: 7</title></path><path d="M 80 80 L 17.50 111.51 A 70 70 0 0 1 20.39 43.30 Z" fill="#fbbc05" stroke="#fff" stroke-width="2"><title>File System: 6</title></path><path d="M 80 80 L 20.39 43.30 A 70 70 0 0 1 45.86 18.89 Z" fill="#34a853" stroke="#fff" stroke-width="2"><title>Unknown: 3</title></path><path d="M 80 80 L 45.86 18.89 A 70 70 0 0 1 68.17 11.01 Z" fill="#ff6d01" stroke="#fff" stroke-width="2"><title>Package Management: 2</title></path><path d="M 80 80 L 68.17 11.01 A 70 70 0 0 1 80.00 10.00 Z" fill="#46bdc6" stroke="#fff" stroke-width="2"><title>Process & System: 1</title></path>
|
|
1340
|
-
</svg>
|
|
1341
|
-
<div class="category-legend">
|
|
1342
|
-
|
|
1343
|
-
<div class="legend-item">
|
|
1344
|
-
<span class="legend-color" style="background: #4285f4"></span>
|
|
1345
|
-
<span class="legend-label">Shell Builtins</span>
|
|
1346
|
-
<span class="legend-count">18</span>
|
|
1347
|
-
</div>
|
|
1348
|
-
<div class="legend-item">
|
|
1349
|
-
<span class="legend-color" style="background: #ea4335"></span>
|
|
1350
|
-
<span class="legend-label">Git</span>
|
|
1351
|
-
<span class="legend-count">7</span>
|
|
1352
|
-
</div>
|
|
1353
|
-
<div class="legend-item">
|
|
1354
|
-
<span class="legend-color" style="background: #fbbc05"></span>
|
|
1355
|
-
<span class="legend-label">File System</span>
|
|
1356
|
-
<span class="legend-count">6</span>
|
|
1357
|
-
</div>
|
|
1358
|
-
<div class="legend-item">
|
|
1359
|
-
<span class="legend-color" style="background: #34a853"></span>
|
|
1360
|
-
<span class="legend-label">Unknown</span>
|
|
1361
|
-
<span class="legend-count">3</span>
|
|
1362
|
-
</div>
|
|
1363
|
-
<div class="legend-item">
|
|
1364
|
-
<span class="legend-color" style="background: #ff6d01"></span>
|
|
1365
|
-
<span class="legend-label">Package Management</span>
|
|
1366
|
-
<span class="legend-count">2</span>
|
|
1367
|
-
</div>
|
|
1368
|
-
<div class="legend-item">
|
|
1369
|
-
<span class="legend-color" style="background: #46bdc6"></span>
|
|
1370
|
-
<span class="legend-label">Process & System</span>
|
|
1371
|
-
<span class="legend-count">1</span>
|
|
1372
|
-
</div>
|
|
1373
|
-
</div>
|
|
1374
|
-
</div>
|
|
1375
|
-
</div>
|
|
1376
|
-
</div>
|
|
1377
|
-
|
|
1378
|
-
<div class="charts-row">
|
|
1379
|
-
<div class="chart-card wide">
|
|
1380
|
-
<h3>Top 10 Most-Used Commands</h3>
|
|
1381
|
-
<div class="top-commands">
|
|
1382
|
-
|
|
1383
|
-
<div class="top-command-item">
|
|
1384
|
-
<div class="top-command-name">
|
|
1385
|
-
<code class="cmd">cd</code>
|
|
1386
|
-
</div>
|
|
1387
|
-
<div class="top-command-bar-container">
|
|
1388
|
-
<div class="top-command-bar" style="width: 100.0%"></div>
|
|
1389
|
-
</div>
|
|
1390
|
-
<div class="top-command-count">18</div>
|
|
1391
|
-
</div>
|
|
1392
|
-
<div class="top-command-item">
|
|
1393
|
-
<div class="top-command-name">
|
|
1394
|
-
<code class="cmd">git</code>
|
|
1395
|
-
</div>
|
|
1396
|
-
<div class="top-command-bar-container">
|
|
1397
|
-
<div class="top-command-bar" style="width: 94.44444444444444%"></div>
|
|
1398
|
-
</div>
|
|
1399
|
-
<div class="top-command-count">17</div>
|
|
1400
|
-
</div>
|
|
1401
|
-
<div class="top-command-item">
|
|
1402
|
-
<div class="top-command-name">
|
|
1403
|
-
<code class="cmd">gh</code>
|
|
1404
|
-
</div>
|
|
1405
|
-
<div class="top-command-bar-container">
|
|
1406
|
-
<div class="top-command-bar" style="width: 50.0%"></div>
|
|
1407
|
-
</div>
|
|
1408
|
-
<div class="top-command-count">9</div>
|
|
1409
|
-
</div>
|
|
1410
|
-
<div class="top-command-item">
|
|
1411
|
-
<div class="top-command-name">
|
|
1412
|
-
<code class="cmd">python</code>
|
|
1413
|
-
</div>
|
|
1414
|
-
<div class="top-command-bar-container">
|
|
1415
|
-
<div class="top-command-bar" style="width: 27.77777777777778%"></div>
|
|
1416
|
-
</div>
|
|
1417
|
-
<div class="top-command-count">5</div>
|
|
1418
|
-
</div>
|
|
1419
|
-
<div class="top-command-item">
|
|
1420
|
-
<div class="top-command-name">
|
|
1421
|
-
<code class="cmd">mkdir</code>
|
|
1422
|
-
</div>
|
|
1423
|
-
<div class="top-command-bar-container">
|
|
1424
|
-
<div class="top-command-bar" style="width: 16.666666666666664%"></div>
|
|
1425
|
-
</div>
|
|
1426
|
-
<div class="top-command-count">3</div>
|
|
1427
|
-
</div>
|
|
1428
|
-
<div class="top-command-item">
|
|
1429
|
-
<div class="top-command-name">
|
|
1430
|
-
<code class="cmd">ls</code>
|
|
1431
|
-
</div>
|
|
1432
|
-
<div class="top-command-bar-container">
|
|
1433
|
-
<div class="top-command-bar" style="width: 16.666666666666664%"></div>
|
|
1434
|
-
</div>
|
|
1435
|
-
<div class="top-command-count">3</div>
|
|
1436
|
-
</div>
|
|
1437
|
-
<div class="top-command-item">
|
|
1438
|
-
<div class="top-command-name">
|
|
1439
|
-
<code class="cmd">echo</code>
|
|
1440
|
-
</div>
|
|
1441
|
-
<div class="top-command-bar-container">
|
|
1442
|
-
<div class="top-command-bar" style="width: 16.666666666666664%"></div>
|
|
1443
|
-
</div>
|
|
1444
|
-
<div class="top-command-count">3</div>
|
|
1445
|
-
</div>
|
|
1446
|
-
<div class="top-command-item">
|
|
1447
|
-
<div class="top-command-name">
|
|
1448
|
-
<code class="cmd">session-slides</code>
|
|
1449
|
-
</div>
|
|
1450
|
-
<div class="top-command-bar-container">
|
|
1451
|
-
<div class="top-command-bar" style="width: 16.666666666666664%"></div>
|
|
1452
|
-
</div>
|
|
1453
|
-
<div class="top-command-count">3</div>
|
|
1454
|
-
</div>
|
|
1455
|
-
<div class="top-command-item">
|
|
1456
|
-
<div class="top-command-name">
|
|
1457
|
-
<code class="cmd">pip</code>
|
|
1458
|
-
</div>
|
|
1459
|
-
<div class="top-command-bar-container">
|
|
1460
|
-
<div class="top-command-bar" style="width: 11.11111111111111%"></div>
|
|
1461
|
-
</div>
|
|
1462
|
-
<div class="top-command-count">2</div>
|
|
1463
|
-
</div>
|
|
1464
|
-
<div class="top-command-item">
|
|
1465
|
-
<div class="top-command-name">
|
|
1466
|
-
<code class="cmd">head</code>
|
|
1467
|
-
</div>
|
|
1468
|
-
<div class="top-command-bar-container">
|
|
1469
|
-
<div class="top-command-bar" style="width: 11.11111111111111%"></div>
|
|
1470
|
-
</div>
|
|
1471
|
-
<div class="top-command-count">2</div>
|
|
1472
|
-
</div>
|
|
1473
|
-
</div>
|
|
1474
|
-
</div>
|
|
1475
|
-
|
|
1476
|
-
<div class="chart-card">
|
|
1477
|
-
<h3>New Commands</h3>
|
|
1478
|
-
<div class="new-commands">
|
|
1479
|
-
<p class="empty-state">No new commands detected in this session</p>
|
|
1480
|
-
</div>
|
|
1481
|
-
</div>
|
|
1482
|
-
</div>
|
|
1483
|
-
</div>
|
|
1484
|
-
</section>
|
|
1485
|
-
|
|
1486
|
-
<section id="panel-commands" class="panel" role="tabpanel" aria-labelledby="tab-commands">
|
|
1487
|
-
|
|
1488
|
-
<div class="commands-container">
|
|
1489
|
-
<div class="commands-toolbar">
|
|
1490
|
-
<div class="search-box">
|
|
1491
|
-
<input type="text" id="command-search" placeholder="Search commands..." oninput="filterCommands()">
|
|
1492
|
-
</div>
|
|
1493
|
-
<div class="sort-controls">
|
|
1494
|
-
<label>Sort by:</label>
|
|
1495
|
-
<select id="sort-select" onchange="sortCommands()">
|
|
1496
|
-
<option value="frequency">Frequency</option>
|
|
1497
|
-
<option value="complexity">Complexity</option>
|
|
1498
|
-
<option value="category">Category</option>
|
|
1499
|
-
<option value="name">Alphabetical</option>
|
|
1500
|
-
</select>
|
|
1501
|
-
</div>
|
|
1502
|
-
</div>
|
|
1503
|
-
|
|
1504
|
-
<div class="filter-chips">
|
|
1505
|
-
<button class="filter-chip active" data-category="all">All</button>
|
|
1506
|
-
<button class="filter-chip" data-category="File System">File System</button><button class="filter-chip" data-category="Git">Git</button><button class="filter-chip" data-category="Package Management">Package Management</button><button class="filter-chip" data-category="Process & System">Process & System</button><button class="filter-chip" data-category="Shell Builtins">Shell Builtins</button><button class="filter-chip" data-category="Unknown">Unknown</button>
|
|
1507
|
-
</div>
|
|
1508
|
-
|
|
1509
|
-
<div class="commands-list" id="commands-list">
|
|
1510
|
-
|
|
1511
|
-
<div class="command-card" data-category="Unknown" data-frequency="1" data-name="claude">
|
|
1512
|
-
<div class="command-header" onclick="toggleCommand('cmd-0')">
|
|
1513
|
-
<div class="command-main">
|
|
1514
|
-
<code class="cmd">claude</code>
|
|
1515
|
-
<span class="category-badge">Unknown</span>
|
|
1516
|
-
</div>
|
|
1517
|
-
<div class="command-meta">
|
|
1518
|
-
<span class="frequency">Used 1x</span>
|
|
1519
|
-
<span class="expand-icon">▼</span>
|
|
1520
|
-
</div>
|
|
1521
|
-
</div>
|
|
1522
|
-
<div class="command-details" id="cmd-0">
|
|
1523
|
-
<div class="full-command">
|
|
1524
|
-
<h5>Full Command:</h5>
|
|
1525
|
-
<pre class="syntax-highlighted"><span class="cmd">claude</span> install</pre>
|
|
1526
|
-
</div>
|
|
1527
|
-
<div class="description">
|
|
1528
|
-
<h5>Description:</h5>
|
|
1529
|
-
<p>Run claude install command</p>
|
|
1530
|
-
</div>
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
</div>
|
|
1534
|
-
</div>
|
|
1535
|
-
<div class="command-card" data-category="Package Management" data-frequency="1" data-name="pip">
|
|
1536
|
-
<div class="command-header" onclick="toggleCommand('cmd-1')">
|
|
1537
|
-
<div class="command-main">
|
|
1538
|
-
<code class="cmd">pip</code>
|
|
1539
|
-
<span class="category-badge">Package Management</span>
|
|
1540
|
-
</div>
|
|
1541
|
-
<div class="command-meta">
|
|
1542
|
-
<span class="frequency">Used 1x</span>
|
|
1543
|
-
<span class="expand-icon">▼</span>
|
|
1544
|
-
</div>
|
|
1545
|
-
</div>
|
|
1546
|
-
<div class="command-details" id="cmd-1">
|
|
1547
|
-
<div class="full-command">
|
|
1548
|
-
<h5>Full Command:</h5>
|
|
1549
|
-
<pre class="syntax-highlighted"><span class="cmd">pip</span> show python-docx 2<span class="operator">></span>/dev/null <span class="operator">|</span><span class="operator">|</span> pip install python-docx 2<span class="operator">></span>&1 <span class="operator">|</span> tail <span class="flag">-5</span></pre>
|
|
1550
|
-
</div>
|
|
1551
|
-
<div class="description">
|
|
1552
|
-
<h5>Description:</h5>
|
|
1553
|
-
<p>Check/install python-docx library</p>
|
|
1554
|
-
</div>
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
</div>
|
|
1558
|
-
</div>
|
|
1559
|
-
<div class="command-card" data-category="File System" data-frequency="1" data-name="mkdir">
|
|
1560
|
-
<div class="command-header" onclick="toggleCommand('cmd-2')">
|
|
1561
|
-
<div class="command-main">
|
|
1562
|
-
<code class="cmd">mkdir</code>
|
|
1563
|
-
<span class="category-badge">File System</span>
|
|
1564
|
-
</div>
|
|
1565
|
-
<div class="command-meta">
|
|
1566
|
-
<span class="frequency">Used 1x</span>
|
|
1567
|
-
<span class="expand-icon">▼</span>
|
|
1568
|
-
</div>
|
|
1569
|
-
</div>
|
|
1570
|
-
<div class="command-details" id="cmd-2">
|
|
1571
|
-
<div class="full-command">
|
|
1572
|
-
<h5>Full Command:</h5>
|
|
1573
|
-
<pre class="syntax-highlighted"><span class="cmd">mkdir</span> <span class="flag">-p</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris/docs/explainers"</span></pre>
|
|
1574
|
-
</div>
|
|
1575
|
-
<div class="description">
|
|
1576
|
-
<h5>Description:</h5>
|
|
1577
|
-
<p>Create output directory for explainer docs</p>
|
|
1578
|
-
</div>
|
|
1579
|
-
<div class="flags-section"><h5>Flags:</h5><ul class="flags-list"><li><code class="flag">-p</code> - </li></ul></div>
|
|
1580
|
-
|
|
1581
|
-
</div>
|
|
1582
|
-
</div>
|
|
1583
|
-
<div class="command-card" data-category="Shell Builtins" data-frequency="1" data-name="cd">
|
|
1584
|
-
<div class="command-header" onclick="toggleCommand('cmd-3')">
|
|
1585
|
-
<div class="command-main">
|
|
1586
|
-
<code class="cmd">cd</code>
|
|
1587
|
-
<span class="category-badge">Shell Builtins</span>
|
|
1588
|
-
</div>
|
|
1589
|
-
<div class="command-meta">
|
|
1590
|
-
<span class="frequency">Used 1x</span>
|
|
1591
|
-
<span class="expand-icon">▼</span>
|
|
1592
|
-
</div>
|
|
1593
|
-
</div>
|
|
1594
|
-
<div class="command-details" id="cmd-3">
|
|
1595
|
-
<div class="full-command">
|
|
1596
|
-
<h5>Full Command:</h5>
|
|
1597
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> python scripts/generate_explainers.py</pre>
|
|
1598
|
-
</div>
|
|
1599
|
-
<div class="description">
|
|
1600
|
-
<h5>Description:</h5>
|
|
1601
|
-
<p>Generate all 5 explainer docx files</p>
|
|
1602
|
-
</div>
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
</div>
|
|
1606
|
-
</div>
|
|
1607
|
-
<div class="command-card" data-category="File System" data-frequency="1" data-name="mkdir">
|
|
1608
|
-
<div class="command-header" onclick="toggleCommand('cmd-4')">
|
|
1609
|
-
<div class="command-main">
|
|
1610
|
-
<code class="cmd">mkdir</code>
|
|
1611
|
-
<span class="category-badge">File System</span>
|
|
1612
|
-
</div>
|
|
1613
|
-
<div class="command-meta">
|
|
1614
|
-
<span class="frequency">Used 1x</span>
|
|
1615
|
-
<span class="expand-icon">▼</span>
|
|
1616
|
-
</div>
|
|
1617
|
-
</div>
|
|
1618
|
-
<div class="command-details" id="cmd-4">
|
|
1619
|
-
<div class="full-command">
|
|
1620
|
-
<h5>Full Command:</h5>
|
|
1621
|
-
<pre class="syntax-highlighted"><span class="cmd">mkdir</span> <span class="flag">-p</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris/visualizations/assets"</span></pre>
|
|
1622
|
-
</div>
|
|
1623
|
-
<div class="description">
|
|
1624
|
-
<h5>Description:</h5>
|
|
1625
|
-
<p>Create visualizations subdirectory</p>
|
|
1626
|
-
</div>
|
|
1627
|
-
<div class="flags-section"><h5>Flags:</h5><ul class="flags-list"><li><code class="flag">-p</code> - </li></ul></div>
|
|
1628
|
-
|
|
1629
|
-
</div>
|
|
1630
|
-
</div>
|
|
1631
|
-
<div class="command-card" data-category="Shell Builtins" data-frequency="1" data-name="cd">
|
|
1632
|
-
<div class="command-header" onclick="toggleCommand('cmd-5')">
|
|
1633
|
-
<div class="command-main">
|
|
1634
|
-
<code class="cmd">cd</code>
|
|
1635
|
-
<span class="category-badge">Shell Builtins</span>
|
|
1636
|
-
</div>
|
|
1637
|
-
<div class="command-meta">
|
|
1638
|
-
<span class="frequency">Used 1x</span>
|
|
1639
|
-
<span class="expand-icon">▼</span>
|
|
1640
|
-
</div>
|
|
1641
|
-
</div>
|
|
1642
|
-
<div class="command-details" id="cmd-5">
|
|
1643
|
-
<div class="full-command">
|
|
1644
|
-
<h5>Full Command:</h5>
|
|
1645
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> python <span class="flag">-c</span> "
|
|
1646
|
-
import openpyxl
|
|
1647
|
-
wb = openpyxl.load_workbook(<span class="string">'C:/Users/brand/Downloads/mock_customer_data.xlsx'</span>, data_only=True<span class="operator">)</span>
|
|
1648
|
-
for sheet in wb.sheetnames:
|
|
1649
|
-
ws = wb[sheet]
|
|
1650
|
-
print(f<span class="string">'=== Sheet: {sheet} ==='</span><span class="operator">)</span>
|
|
1651
|
-
print(f<span class="string">'Rows: {ws.max_row}, Cols: {ws.max_column}'</span><span class="operator">)</span>
|
|
1652
|
-
# Print headers
|
|
1653
|
-
headers = [cell.value for cell in ws[1]]
|
|
1654
|
-
print(f<span class="string">'Headers: {headers}'</span><span class="operator">)</span>
|
|
1655
|
-
# Print first 5 data rows
|
|
1656
|
-
for row in ws.iter_rows(min_row=2, max_row=min(6, ws.max_row<span class="operator">)</span>, values_only=True<span class="operator">)</span>:
|
|
1657
|
-
print(list(row<span class="operator">)</span><span class="operator">)</span>
|
|
1658
|
-
# Print last 2 rows
|
|
1659
|
-
print(<span class="string">'...'</span><span class="operator">)</span>
|
|
1660
|
-
for row in ws.iter_rows(min_row=max(2, ws.max_row-1<span class="operator">)</span>, max_row=ws.max_row, values_only=True<span class="operator">)</span>:
|
|
1661
|
-
print(list(row<span class="operator">)</span><span class="operator">)</span>
|
|
1662
|
-
print(<span class="operator">)</span>
|
|
1663
|
-
"
|
|
1664
|
-
</pre>
|
|
1665
|
-
</div>
|
|
1666
|
-
<div class="description">
|
|
1667
|
-
<h5>Description:</h5>
|
|
1668
|
-
<p>Inspect spreadsheet structure and sample data</p>
|
|
1669
|
-
</div>
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
</div>
|
|
1673
|
-
</div>
|
|
1674
|
-
<div class="command-card" data-category="Shell Builtins" data-frequency="1" data-name="cd">
|
|
1675
|
-
<div class="command-header" onclick="toggleCommand('cmd-6')">
|
|
1676
|
-
<div class="command-main">
|
|
1677
|
-
<code class="cmd">cd</code>
|
|
1678
|
-
<span class="category-badge">Shell Builtins</span>
|
|
1679
|
-
</div>
|
|
1680
|
-
<div class="command-meta">
|
|
1681
|
-
<span class="frequency">Used 1x</span>
|
|
1682
|
-
<span class="expand-icon">▼</span>
|
|
1683
|
-
</div>
|
|
1684
|
-
</div>
|
|
1685
|
-
<div class="command-details" id="cmd-6">
|
|
1686
|
-
<div class="full-command">
|
|
1687
|
-
<h5>Full Command:</h5>
|
|
1688
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> python <span class="flag">-c</span> "
|
|
1689
|
-
import openpyxl
|
|
1690
|
-
wb = openpyxl.load_workbook(<span class="string">'C:/Users/brand/Downloads/mock_customer_data.xlsx'</span>, data_only=True<span class="operator">)</span>
|
|
1691
|
-
ws = wb[<span class="string">'Customer Purchases'</span>]
|
|
1692
|
-
|
|
1693
|
-
# Deeper analysis for viz planning
|
|
1694
|
-
states = {}
|
|
1695
|
-
amounts = []
|
|
1696
|
-
quantities = []
|
|
1697
|
-
customers = {}
|
|
1698
|
-
|
|
1699
|
-
for row in ws.iter_rows(min_row=2, max_row=ws.max_row, values_only=True<span class="operator">)</span>:
|
|
1700
|
-
name, amount, qty, state = row
|
|
1701
|
-
amounts.append(amount<span class="operator">)</span>
|
|
1702
|
-
quantities.append(qty<span class="operator">)</span>
|
|
1703
|
-
|
|
1704
|
-
if state not in states:
|
|
1705
|
-
states[state] = {<span class="string">'count'</span>: 0, <span class="string">'total'</span>: 0, <span class="string">'qty'</span>: 0}
|
|
1706
|
-
states[state][<span class="string">'count'</span>] += 1
|
|
1707
|
-
states[state][<span class="string">'total'</span>] += amount
|
|
1708
|
-
states[state][<span class="string">'qty'</span>] += qty
|
|
1709
|
-
|
|
1710
|
-
if name not in customers:
|
|
1711
|
-
customers[name] = {<span class="string">'count'</span>: 0, <span class="string">'total'</span>: 0, <span class="string">'qty'</span>: 0}
|
|
1712
|
-
customers[name][<span class="string">'count'</span>] += 1
|
|
1713
|
-
customers[name][<span class="string">'total'</span>] += amount
|
|
1714
|
-
customers[name][<span class="string">'qty'</span>] += qty
|
|
1715
|
-
|
|
1716
|
-
print(f<span class="string">'Total records: {len(amounts<span class="operator">)</span>}'</span><span class="operator">)</span>
|
|
1717
|
-
print(f<span class="string">'Unique states: {len(states<span class="operator">)</span>}'</span><span class="operator">)</span>
|
|
1718
|
-
print(f<span class="string">'Unique customers: {len(customers<span class="operator">)</span>}'</span><span class="operator">)</span>
|
|
1719
|
-
print(f<span class="string">'Amount range: \<span class="variable">${min</span>(amounts<span class="operator">)</span>:.2f} - \<span class="variable">${max</span>(amounts<span class="operator">)</span>:.2f}'</span><span class="operator">)</span>
|
|
1720
|
-
print(f<span class="string">'Avg amount: \<span class="variable">${sum</span>(amounts<span class="operator">)</span>/len(amounts<span class="operator">)</span>:.2f}'</span><span class="operator">)</span>
|
|
1721
|
-
print(f<span class="string">'Quantity range: {min(quantities<span class="operator">)</span>} - {max(quantities<span class="operator">)</span>}'</span><span class="operator">)</span>
|
|
1722
|
-
print(<span class="operator">)</span>
|
|
1723
|
-
|
|
1724
|
-
# Top 10 states by revenue
|
|
1725
|
-
sorted_states = sorted(states.items(<span class="operator">)</span>, key=lambda x: x[1][<span class="string">'total'</span>], reverse=True<span class="operator">)</span>
|
|
1726
|
-
print(<span class="string">'Top 15 states by revenue:'</span><span class="operator">)</span>
|
|
1727
|
-
for s, d in sorted_states[:15]:
|
|
1728
|
-
print(f' {s}: <span class="variable">${d</span>[\<span class="string">"total\"</span>]:.2f} ({d[\<span class="string">"count\"</span>]} txns, avg <span class="variable">${d</span>[\<span class="string">"total\"</span>]/d[\<span class="string">"count\"</span>]:.2f}<span class="operator">)</span><span class="string">'<span class="operator">)</span>
|
|
1729
|
-
|
|
1730
|
-
print(<span class="operator">)</span>
|
|
1731
|
-
# Top customers by purchase count
|
|
1732
|
-
sorted_custs = sorted(customers.items(<span class="operator">)</span>, key=lambda x: x[1]['</span>count<span class="string">'], reverse=True<span class="operator">)</span>
|
|
1733
|
-
print('</span>Top 10 repeat customers:<span class="string">'<span class="operator">)</span>
|
|
1734
|
-
for c, d in sorted_custs[:10]:
|
|
1735
|
-
print(f'</span> {c}: {d[\<span class="string">"count\"</span>]} purchases, <span class="variable">${d</span>[\<span class="string">"total\"</span>]:.2f} total<span class="string">'<span class="operator">)</span>
|
|
1736
|
-
|
|
1737
|
-
print(<span class="operator">)</span>
|
|
1738
|
-
# Distribution of amounts
|
|
1739
|
-
brackets = [0, 25, 50, 75, 100, 150, 200, 500]
|
|
1740
|
-
print('</span>Amount distribution:'<span class="operator">)</span>
|
|
1741
|
-
for i in range(len(brackets<span class="operator">)</span>-1<span class="operator">)</span>:
|
|
1742
|
-
count = sum(1 for a in amounts if brackets[i] <span class="operator"><</span>= a <span class="operator"><</span> brackets[i+1]<span class="operator">)</span>
|
|
1743
|
-
print(f<span class="string">' \<span class="variable">${brackets</span>[i]}-\<span class="variable">${brackets</span>[i+1]}: {count}'</span><span class="operator">)</span>
|
|
1744
|
-
count = sum(1 for a in amounts if a <span class="operator">></span>= 500<span class="operator">)</span>
|
|
1745
|
-
print(f<span class="string">' \<span class="variable">$500</span>+: {count}'</span><span class="operator">)</span>
|
|
1746
|
-
|
|
1747
|
-
# Quantity distribution
|
|
1748
|
-
print(<span class="operator">)</span>
|
|
1749
|
-
print(<span class="string">'Quantity distribution:'</span><span class="operator">)</span>
|
|
1750
|
-
for q in range(1, 6<span class="operator">)</span>:
|
|
1751
|
-
count = sum(1 for x in quantities if x == q<span class="operator">)</span>
|
|
1752
|
-
print(f<span class="string">' {q}: {count}'</span><span class="operator">)</span>
|
|
1753
|
-
"
|
|
1754
|
-
</pre>
|
|
1755
|
-
</div>
|
|
1756
|
-
<div class="description">
|
|
1757
|
-
<h5>Description:</h5>
|
|
1758
|
-
<p>Deep analysis of data for visualization planning</p>
|
|
1759
|
-
</div>
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
</div>
|
|
1763
|
-
</div>
|
|
1764
|
-
<div class="command-card" data-category="Shell Builtins" data-frequency="1" data-name="cd">
|
|
1765
|
-
<div class="command-header" onclick="toggleCommand('cmd-7')">
|
|
1766
|
-
<div class="command-main">
|
|
1767
|
-
<code class="cmd">cd</code>
|
|
1768
|
-
<span class="category-badge">Shell Builtins</span>
|
|
1769
|
-
</div>
|
|
1770
|
-
<div class="command-meta">
|
|
1771
|
-
<span class="frequency">Used 1x</span>
|
|
1772
|
-
<span class="expand-icon">▼</span>
|
|
1773
|
-
</div>
|
|
1774
|
-
</div>
|
|
1775
|
-
<div class="command-details" id="cmd-7">
|
|
1776
|
-
<div class="full-command">
|
|
1777
|
-
<h5>Full Command:</h5>
|
|
1778
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> python <span class="operator"><</span><span class="operator"><</span> <span class="string">'PYEOF'</span>
|
|
1779
|
-
import openpyxl
|
|
1780
|
-
wb = openpyxl.load_workbook(<span class="string">'C:/Users/brand/Downloads/mock_customer_data.xlsx'</span>, data_only=True<span class="operator">)</span>
|
|
1781
|
-
ws = wb[<span class="string">'Customer Purchases'</span>]
|
|
1782
|
-
|
|
1783
|
-
states = {}
|
|
1784
|
-
amounts = []
|
|
1785
|
-
quantities = []
|
|
1786
|
-
customers = {}
|
|
1787
|
-
|
|
1788
|
-
for row in ws.iter_rows(min_row=2, max_row=ws.max_row, values_only=True<span class="operator">)</span>:
|
|
1789
|
-
name, amount, qty, state = row
|
|
1790
|
-
amounts.append(amount<span class="operator">)</span>
|
|
1791
|
-
quantities.append(qty<span class="operator">)</span>
|
|
1792
|
-
if state not in states:
|
|
1793
|
-
states[state] = {<span class="string">'count'</span>: 0, <span class="string">'total'</span>: 0, <span class="string">'qty'</span>: 0}
|
|
1794
|
-
states[state][<span class="string">'count'</span>] += 1
|
|
1795
|
-
states[state][<span class="string">'total'</span>] += amount
|
|
1796
|
-
states[state][<span class="string">'qty'</span>] += qty
|
|
1797
|
-
if name not in customers:
|
|
1798
|
-
customers[name] = {<span class="string">'count'</span>: 0, <span class="string">'total'</span>: 0, <span class="string">'qty'</span>: 0}
|
|
1799
|
-
customers[name][<span class="string">'count'</span>] += 1
|
|
1800
|
-
customers[name][<span class="string">'total'</span>] += amount
|
|
1801
|
-
customers[name][<span class="string">'qty'</span>] += qty
|
|
1802
|
-
|
|
1803
|
-
print(f<span class="string">"Total records: {len(amounts<span class="operator">)</span>}"</span><span class="operator">)</span>
|
|
1804
|
-
print(f<span class="string">"Unique states: {len(states<span class="operator">)</span>}"</span><span class="operator">)</span>
|
|
1805
|
-
print(f<span class="string">"Unique customers: {len(customers<span class="operator">)</span>}"</span><span class="operator">)</span>
|
|
1806
|
-
print(f<span class="string">"Amount range: <span class="variable">${min</span>(amounts<span class="operator">)</span>:.2f} - <span class="variable">${max</span>(amounts<span class="operator">)</span>:.2f}"</span><span class="operator">)</span>
|
|
1807
|
-
print(f<span class="string">"Avg amount: <span class="variable">${sum</span>(amounts<span class="operator">)</span>/len(amounts<span class="operator">)</span>:.2f}"</span><span class="operator">)</span>
|
|
1808
|
-
print(f<span class="string">"Quantity range: {min(quantities<span class="operator">)</span>} - {max(quantities<span class="operator">)</span>}"</span><span class="operator">)</span>
|
|
1809
|
-
print(<span class="operator">)</span>
|
|
1810
|
-
|
|
1811
|
-
sorted_states = sorted(states.items(<span class="operator">)</span>, key=lambda x: x[1][<span class="string">'total'</span>], reverse=True<span class="operator">)</span>
|
|
1812
|
-
print(<span class="string">"Top 15 states by revenue:"</span><span class="operator">)</span>
|
|
1813
|
-
for s, d in sorted_states[:15]:
|
|
1814
|
-
avg = d[<span class="string">'total'</span>] / d[<span class="string">'count'</span>]
|
|
1815
|
-
print(f" {s}: <span class="variable">${d</span>[<span class="string">'total'</span>]:.2f} ({d[<span class="string">'count'</span>]} txns, avg <span class="variable">${avg</span>:.2f}<span class="operator">)</span>"<span class="operator">)</span>
|
|
1816
|
-
|
|
1817
|
-
print(<span class="operator">)</span>
|
|
1818
|
-
sorted_custs = sorted(customers.items(<span class="operator">)</span>, key=lambda x: x[1][<span class="string">'count'</span>], reverse=True<span class="operator">)</span>
|
|
1819
|
-
print(<span class="string">"Top 10 repeat customers:"</span><span class="operator">)</span>
|
|
1820
|
-
for c, d in sorted_custs[:10]:
|
|
1821
|
-
print(f" {c}: {d[<span class="string">'count'</span>]} purchases, <span class="variable">${d</span>[<span class="string">'total'</span>]:.2f} total<span class="string">"<span class="operator">)</span>
|
|
1822
|
-
|
|
1823
|
-
print(<span class="operator">)</span>
|
|
1824
|
-
brackets = [0, 25, 50, 75, 100, 150, 200, 500]
|
|
1825
|
-
print("</span>Amount distribution:"<span class="operator">)</span>
|
|
1826
|
-
for i in range(len(brackets<span class="operator">)</span>-1<span class="operator">)</span>:
|
|
1827
|
-
count = sum(1 for a in amounts if brackets[i] <span class="operator"><</span>= a <span class="operator"><</span> brackets[i+1]<span class="operator">)</span>
|
|
1828
|
-
print(f<span class="string">" <span class="variable">${brackets</span>[i]}-<span class="variable">${brackets</span>[i+1]}: {count}"</span><span class="operator">)</span>
|
|
1829
|
-
count = sum(1 for a in amounts if a <span class="operator">></span>= 500<span class="operator">)</span>
|
|
1830
|
-
print(f<span class="string">" <span class="variable">$500</span>+: {count}"</span><span class="operator">)</span>
|
|
1831
|
-
|
|
1832
|
-
print(<span class="operator">)</span>
|
|
1833
|
-
print(<span class="string">"Quantity distribution:"</span><span class="operator">)</span>
|
|
1834
|
-
for q in range(1, 6<span class="operator">)</span>:
|
|
1835
|
-
count = sum(1 for x in quantities if x == q<span class="operator">)</span>
|
|
1836
|
-
print(f<span class="string">" {q}: {count}"</span><span class="operator">)</span>
|
|
1837
|
-
PYEOF
|
|
1838
|
-
</pre>
|
|
1839
|
-
</div>
|
|
1840
|
-
<div class="description">
|
|
1841
|
-
<h5>Description:</h5>
|
|
1842
|
-
<p>Deep analysis of data for visualization planning</p>
|
|
1843
|
-
</div>
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
</div>
|
|
1847
|
-
</div>
|
|
1848
|
-
<div class="command-card" data-category="Shell Builtins" data-frequency="1" data-name="cd">
|
|
1849
|
-
<div class="command-header" onclick="toggleCommand('cmd-8')">
|
|
1850
|
-
<div class="command-main">
|
|
1851
|
-
<code class="cmd">cd</code>
|
|
1852
|
-
<span class="category-badge">Shell Builtins</span>
|
|
1853
|
-
</div>
|
|
1854
|
-
<div class="command-meta">
|
|
1855
|
-
<span class="frequency">Used 1x</span>
|
|
1856
|
-
<span class="expand-icon">▼</span>
|
|
1857
|
-
</div>
|
|
1858
|
-
</div>
|
|
1859
|
-
<div class="command-details" id="cmd-8">
|
|
1860
|
-
<div class="full-command">
|
|
1861
|
-
<h5>Full Command:</h5>
|
|
1862
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> python visualizations/generate_viz.py</pre>
|
|
1863
|
-
</div>
|
|
1864
|
-
<div class="description">
|
|
1865
|
-
<h5>Description:</h5>
|
|
1866
|
-
<p>Generate all 3 interactive HTML visualizations</p>
|
|
1867
|
-
</div>
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
</div>
|
|
1871
|
-
</div>
|
|
1872
|
-
<div class="command-card" data-category="Unknown" data-frequency="1" data-name="start">
|
|
1873
|
-
<div class="command-header" onclick="toggleCommand('cmd-9')">
|
|
1874
|
-
<div class="command-main">
|
|
1875
|
-
<code class="cmd">start</code>
|
|
1876
|
-
<span class="category-badge">Unknown</span>
|
|
1877
|
-
</div>
|
|
1878
|
-
<div class="command-meta">
|
|
1879
|
-
<span class="frequency">Used 1x</span>
|
|
1880
|
-
<span class="expand-icon">▼</span>
|
|
1881
|
-
</div>
|
|
1882
|
-
</div>
|
|
1883
|
-
<div class="command-details" id="cmd-9">
|
|
1884
|
-
<div class="full-command">
|
|
1885
|
-
<h5>Full Command:</h5>
|
|
1886
|
-
<pre class="syntax-highlighted"><span class="cmd">start</span> <span class="string">""</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris/visualizations/03_executive_dashboard.html"</span></pre>
|
|
1887
|
-
</div>
|
|
1888
|
-
<div class="description">
|
|
1889
|
-
<h5>Description:</h5>
|
|
1890
|
-
<p>Open dashboard in browser to verify rendering</p>
|
|
1891
|
-
</div>
|
|
1892
|
-
|
|
1893
|
-
|
|
1894
|
-
</div>
|
|
1895
|
-
</div>
|
|
1896
|
-
<div class="command-card" data-category="Shell Builtins" data-frequency="1" data-name="cd">
|
|
1897
|
-
<div class="command-header" onclick="toggleCommand('cmd-10')">
|
|
1898
|
-
<div class="command-main">
|
|
1899
|
-
<code class="cmd">cd</code>
|
|
1900
|
-
<span class="category-badge">Shell Builtins</span>
|
|
1901
|
-
</div>
|
|
1902
|
-
<div class="command-meta">
|
|
1903
|
-
<span class="frequency">Used 1x</span>
|
|
1904
|
-
<span class="expand-icon">▼</span>
|
|
1905
|
-
</div>
|
|
1906
|
-
</div>
|
|
1907
|
-
<div class="command-details" id="cmd-10">
|
|
1908
|
-
<div class="full-command">
|
|
1909
|
-
<h5>Full Command:</h5>
|
|
1910
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> git init <span class="operator">&&</span> git remote add origin https://github.com/bjpl/data_example.git <span class="operator">&&</span> git branch <span class="flag">-M</span> main</pre>
|
|
1911
|
-
</div>
|
|
1912
|
-
<div class="description">
|
|
1913
|
-
<h5>Description:</h5>
|
|
1914
|
-
<p>Initialize git repo and connect to remote</p>
|
|
1915
|
-
</div>
|
|
1916
|
-
|
|
1917
|
-
|
|
1918
|
-
</div>
|
|
1919
|
-
</div>
|
|
1920
|
-
<div class="command-card" data-category="File System" data-frequency="1" data-name="ls">
|
|
1921
|
-
<div class="command-header" onclick="toggleCommand('cmd-11')">
|
|
1922
|
-
<div class="command-main">
|
|
1923
|
-
<code class="cmd">ls</code>
|
|
1924
|
-
<span class="category-badge">File System</span>
|
|
1925
|
-
</div>
|
|
1926
|
-
<div class="command-meta">
|
|
1927
|
-
<span class="frequency">Used 1x</span>
|
|
1928
|
-
<span class="expand-icon">▼</span>
|
|
1929
|
-
</div>
|
|
1930
|
-
</div>
|
|
1931
|
-
<div class="command-details" id="cmd-11">
|
|
1932
|
-
<div class="full-command">
|
|
1933
|
-
<h5>Full Command:</h5>
|
|
1934
|
-
<pre class="syntax-highlighted"><span class="cmd">ls</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris/visualizations/"</span></pre>
|
|
1935
|
-
</div>
|
|
1936
|
-
<div class="description">
|
|
1937
|
-
<h5>Description:</h5>
|
|
1938
|
-
<p>List visualization files</p>
|
|
1939
|
-
</div>
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
</div>
|
|
1943
|
-
</div>
|
|
1944
|
-
<div class="command-card" data-category="Shell Builtins" data-frequency="1" data-name="cd">
|
|
1945
|
-
<div class="command-header" onclick="toggleCommand('cmd-12')">
|
|
1946
|
-
<div class="command-main">
|
|
1947
|
-
<code class="cmd">cd</code>
|
|
1948
|
-
<span class="category-badge">Shell Builtins</span>
|
|
1949
|
-
</div>
|
|
1950
|
-
<div class="command-meta">
|
|
1951
|
-
<span class="frequency">Used 1x</span>
|
|
1952
|
-
<span class="expand-icon">▼</span>
|
|
1953
|
-
</div>
|
|
1954
|
-
</div>
|
|
1955
|
-
<div class="command-details" id="cmd-12">
|
|
1956
|
-
<div class="full-command">
|
|
1957
|
-
<h5>Full Command:</h5>
|
|
1958
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> touch .nojekyll</pre>
|
|
1959
|
-
</div>
|
|
1960
|
-
<div class="description">
|
|
1961
|
-
<h5>Description:</h5>
|
|
1962
|
-
<p>Create .nojekyll for GitHub Pages</p>
|
|
1963
|
-
</div>
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
</div>
|
|
1967
|
-
</div>
|
|
1968
|
-
<div class="command-card" data-category="Shell Builtins" data-frequency="1" data-name="cd">
|
|
1969
|
-
<div class="command-header" onclick="toggleCommand('cmd-13')">
|
|
1970
|
-
<div class="command-main">
|
|
1971
|
-
<code class="cmd">cd</code>
|
|
1972
|
-
<span class="category-badge">Shell Builtins</span>
|
|
1973
|
-
</div>
|
|
1974
|
-
<div class="command-meta">
|
|
1975
|
-
<span class="frequency">Used 1x</span>
|
|
1976
|
-
<span class="expand-icon">▼</span>
|
|
1977
|
-
</div>
|
|
1978
|
-
</div>
|
|
1979
|
-
<div class="command-details" id="cmd-13">
|
|
1980
|
-
<div class="full-command">
|
|
1981
|
-
<h5>Full Command:</h5>
|
|
1982
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> git status</pre>
|
|
1983
|
-
</div>
|
|
1984
|
-
<div class="description">
|
|
1985
|
-
<h5>Description:</h5>
|
|
1986
|
-
<p>Show working tree status</p>
|
|
1987
|
-
</div>
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
</div>
|
|
1991
|
-
</div>
|
|
1992
|
-
<div class="command-card" data-category="Shell Builtins" data-frequency="1" data-name="cd">
|
|
1993
|
-
<div class="command-header" onclick="toggleCommand('cmd-14')">
|
|
1994
|
-
<div class="command-main">
|
|
1995
|
-
<code class="cmd">cd</code>
|
|
1996
|
-
<span class="category-badge">Shell Builtins</span>
|
|
1997
|
-
</div>
|
|
1998
|
-
<div class="command-meta">
|
|
1999
|
-
<span class="frequency">Used 1x</span>
|
|
2000
|
-
<span class="expand-icon">▼</span>
|
|
2001
|
-
</div>
|
|
2002
|
-
</div>
|
|
2003
|
-
<div class="command-details" id="cmd-14">
|
|
2004
|
-
<div class="full-command">
|
|
2005
|
-
<h5>Full Command:</h5>
|
|
2006
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> git log <span class="flag">--oneline</span> <span class="flag">-5</span> 2<span class="operator">></span>/dev/null <span class="operator">|</span><span class="operator">|</span> echo <span class="string">"No commits yet"</span></pre>
|
|
2007
|
-
</div>
|
|
2008
|
-
<div class="description">
|
|
2009
|
-
<h5>Description:</h5>
|
|
2010
|
-
<p>Check commit history</p>
|
|
2011
|
-
</div>
|
|
2012
|
-
|
|
2013
|
-
|
|
2014
|
-
</div>
|
|
2015
|
-
</div>
|
|
2016
|
-
<div class="command-card" data-category="Shell Builtins" data-frequency="1" data-name="cd">
|
|
2017
|
-
<div class="command-header" onclick="toggleCommand('cmd-15')">
|
|
2018
|
-
<div class="command-main">
|
|
2019
|
-
<code class="cmd">cd</code>
|
|
2020
|
-
<span class="category-badge">Shell Builtins</span>
|
|
2021
|
-
</div>
|
|
2022
|
-
<div class="command-meta">
|
|
2023
|
-
<span class="frequency">Used 1x</span>
|
|
2024
|
-
<span class="expand-icon">▼</span>
|
|
2025
|
-
</div>
|
|
2026
|
-
</div>
|
|
2027
|
-
<div class="command-details" id="cmd-15">
|
|
2028
|
-
<div class="full-command">
|
|
2029
|
-
<h5>Full Command:</h5>
|
|
2030
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> git add .gitignore .nojekyll index.html visualizations/01_revenue_by_state.html visualizations/02_purchase_patterns.html visualizations/03_executive_dashboard.html scripts/generate_explainers.py scripts/generate_viz.py docs/explainers/ <span class="operator">&&</span> git commit <span class="flag">-m</span> "<span class="operator">$(</span>cat <span class="operator"><</span><span class="operator"><</span><span class="string">'EOF'</span>
|
|
2031
|
-
Add interactive customer analytics dashboard with 3 visualizations
|
|
2032
|
-
|
|
2033
|
-
- Landing page (index.html<span class="operator">)</span> with navigable card-based UI for GitHub Pages
|
|
2034
|
-
- Viz 1: US choropleth map — revenue by state with 6-metric tooltips
|
|
2035
|
-
- Viz 2: Scatter analysis — purchase patterns with spend distribution
|
|
2036
|
-
- Viz 3: Executive dashboard — 4-panel KPI overview
|
|
2037
|
-
- Claude Code explainer docs (5 .docx files<span class="operator">)</span>
|
|
2038
|
-
- Generation scripts for reproducibility
|
|
2039
|
-
|
|
2040
|
-
Co-Authored-By: Claude Opus 4.5 <span class="operator"><</span>noreply@anthropic.com<span class="operator">></span>
|
|
2041
|
-
EOF
|
|
2042
|
-
<span class="operator">)</span>"</pre>
|
|
2043
|
-
</div>
|
|
2044
|
-
<div class="description">
|
|
2045
|
-
<h5>Description:</h5>
|
|
2046
|
-
<p>Stage all files and create initial commit</p>
|
|
2047
|
-
</div>
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
</div>
|
|
2051
|
-
</div>
|
|
2052
|
-
<div class="command-card" data-category="Shell Builtins" data-frequency="1" data-name="cd">
|
|
2053
|
-
<div class="command-header" onclick="toggleCommand('cmd-16')">
|
|
2054
|
-
<div class="command-main">
|
|
2055
|
-
<code class="cmd">cd</code>
|
|
2056
|
-
<span class="category-badge">Shell Builtins</span>
|
|
2057
|
-
</div>
|
|
2058
|
-
<div class="command-meta">
|
|
2059
|
-
<span class="frequency">Used 1x</span>
|
|
2060
|
-
<span class="expand-icon">▼</span>
|
|
2061
|
-
</div>
|
|
2062
|
-
</div>
|
|
2063
|
-
<div class="command-details" id="cmd-16">
|
|
2064
|
-
<div class="full-command">
|
|
2065
|
-
<h5>Full Command:</h5>
|
|
2066
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> find . <span class="flag">-name</span> <span class="string">"generate_viz.py"</span> <span class="flag">-o</span> <span class="flag">-name</span> <span class="string">"generate_explainers.py"</span> 2<span class="operator">></span>/dev/null</pre>
|
|
2067
|
-
</div>
|
|
2068
|
-
<div class="description">
|
|
2069
|
-
<h5>Description:</h5>
|
|
2070
|
-
<p>Find script locations</p>
|
|
2071
|
-
</div>
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
</div>
|
|
2075
|
-
</div>
|
|
2076
|
-
<div class="command-card" data-category="Shell Builtins" data-frequency="1" data-name="cd">
|
|
2077
|
-
<div class="command-header" onclick="toggleCommand('cmd-17')">
|
|
2078
|
-
<div class="command-main">
|
|
2079
|
-
<code class="cmd">cd</code>
|
|
2080
|
-
<span class="category-badge">Shell Builtins</span>
|
|
2081
|
-
</div>
|
|
2082
|
-
<div class="command-meta">
|
|
2083
|
-
<span class="frequency">Used 1x</span>
|
|
2084
|
-
<span class="expand-icon">▼</span>
|
|
2085
|
-
</div>
|
|
2086
|
-
</div>
|
|
2087
|
-
<div class="command-details" id="cmd-17">
|
|
2088
|
-
<div class="full-command">
|
|
2089
|
-
<h5>Full Command:</h5>
|
|
2090
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> git add .gitignore .nojekyll index.html visualizations/01_revenue_by_state.html visualizations/02_purchase_patterns.html visualizations/03_executive_dashboard.html visualizations/generate_viz.py scripts/generate_explainers.py docs/explainers/ <span class="operator">&&</span> git commit <span class="flag">-m</span> "<span class="operator">$(</span>cat <span class="operator"><</span><span class="operator"><</span><span class="string">'EOF'</span>
|
|
2091
|
-
Add interactive customer analytics dashboard with 3 visualizations
|
|
2092
|
-
|
|
2093
|
-
- Landing page (index.html<span class="operator">)</span> with navigable card-based UI for GitHub Pages
|
|
2094
|
-
- Viz 1: US choropleth map — revenue by state with 6-metric tooltips
|
|
2095
|
-
- Viz 2: Scatter analysis — purchase patterns with spend distribution
|
|
2096
|
-
- Viz 3: Executive dashboard — 4-panel KPI overview
|
|
2097
|
-
- Claude Code explainer docs (5 .docx files<span class="operator">)</span>
|
|
2098
|
-
- Generation scripts for reproducibility
|
|
2099
|
-
|
|
2100
|
-
Co-Authored-By: Claude Opus 4.5 <span class="operator"><</span>noreply@anthropic.com<span class="operator">></span>
|
|
2101
|
-
EOF
|
|
2102
|
-
<span class="operator">)</span>"</pre>
|
|
2103
|
-
</div>
|
|
2104
|
-
<div class="description">
|
|
2105
|
-
<h5>Description:</h5>
|
|
2106
|
-
<p>Stage all files and create initial commit</p>
|
|
2107
|
-
</div>
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
</div>
|
|
2111
|
-
</div>
|
|
2112
|
-
<div class="command-card" data-category="Shell Builtins" data-frequency="1" data-name="cd">
|
|
2113
|
-
<div class="command-header" onclick="toggleCommand('cmd-18')">
|
|
2114
|
-
<div class="command-main">
|
|
2115
|
-
<code class="cmd">cd</code>
|
|
2116
|
-
<span class="category-badge">Shell Builtins</span>
|
|
2117
|
-
</div>
|
|
2118
|
-
<div class="command-meta">
|
|
2119
|
-
<span class="frequency">Used 1x</span>
|
|
2120
|
-
<span class="expand-icon">▼</span>
|
|
2121
|
-
</div>
|
|
2122
|
-
</div>
|
|
2123
|
-
<div class="command-details" id="cmd-18">
|
|
2124
|
-
<div class="full-command">
|
|
2125
|
-
<h5>Full Command:</h5>
|
|
2126
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> git push <span class="flag">-u</span> origin main</pre>
|
|
2127
|
-
</div>
|
|
2128
|
-
<div class="description">
|
|
2129
|
-
<h5>Description:</h5>
|
|
2130
|
-
<p>Push initial commit to remote</p>
|
|
2131
|
-
</div>
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
</div>
|
|
2135
|
-
</div>
|
|
2136
|
-
<div class="command-card" data-category="Git" data-frequency="1" data-name="gh">
|
|
2137
|
-
<div class="command-header" onclick="toggleCommand('cmd-19')">
|
|
2138
|
-
<div class="command-main">
|
|
2139
|
-
<code class="cmd">gh</code>
|
|
2140
|
-
<span class="category-badge">Git</span>
|
|
2141
|
-
</div>
|
|
2142
|
-
<div class="command-meta">
|
|
2143
|
-
<span class="frequency">Used 1x</span>
|
|
2144
|
-
<span class="expand-icon">▼</span>
|
|
2145
|
-
</div>
|
|
2146
|
-
</div>
|
|
2147
|
-
<div class="command-details" id="cmd-19">
|
|
2148
|
-
<div class="full-command">
|
|
2149
|
-
<h5>Full Command:</h5>
|
|
2150
|
-
<pre class="syntax-highlighted"><span class="cmd">gh</span> api repos/bjpl/data_example/pages <span class="flag">-X</span> POST <span class="flag">-f</span> <span class="string">"build_type=workflow"</span> <span class="flag">-f</span> <span class="string">"source[branch]=main"</span> <span class="flag">-f</span> <span class="string">"source[path]=/"</span> 2<span class="operator">></span>&1 <span class="operator">|</span><span class="operator">|</span> gh api repos/bjpl/data_example/pages <span class="flag">-X</span> POST <span class="flag">--input</span> - <span class="operator"><</span><span class="operator"><</span><span class="string">'EOF'</span>
|
|
2151
|
-
{<span class="string">"source"</span>:{<span class="string">"branch"</span>:<span class="string">"main"</span>,<span class="string">"path"</span>:<span class="string">"/"</span>}}
|
|
2152
|
-
EOF</pre>
|
|
2153
|
-
</div>
|
|
2154
|
-
<div class="description">
|
|
2155
|
-
<h5>Description:</h5>
|
|
2156
|
-
<p>Enable GitHub Pages on main branch</p>
|
|
2157
|
-
</div>
|
|
2158
|
-
<div class="flags-section"><h5>Flags:</h5><ul class="flags-list"><li><code class="flag">-X</code> - </li><li><code class="flag">-f</code> - </li><li><code class="flag">-f</code> - </li><li><code class="flag">-f</code> - </li></ul></div>
|
|
2159
|
-
|
|
2160
|
-
</div>
|
|
2161
|
-
</div>
|
|
2162
|
-
<div class="command-card" data-category="Git" data-frequency="1" data-name="gh">
|
|
2163
|
-
<div class="command-header" onclick="toggleCommand('cmd-20')">
|
|
2164
|
-
<div class="command-main">
|
|
2165
|
-
<code class="cmd">gh</code>
|
|
2166
|
-
<span class="category-badge">Git</span>
|
|
2167
|
-
</div>
|
|
2168
|
-
<div class="command-meta">
|
|
2169
|
-
<span class="frequency">Used 1x</span>
|
|
2170
|
-
<span class="expand-icon">▼</span>
|
|
2171
|
-
</div>
|
|
2172
|
-
</div>
|
|
2173
|
-
<div class="command-details" id="cmd-20">
|
|
2174
|
-
<div class="full-command">
|
|
2175
|
-
<h5>Full Command:</h5>
|
|
2176
|
-
<pre class="syntax-highlighted"><span class="cmd">gh</span> api repos/bjpl/data_example/pages <span class="flag">--jq</span> <span class="string">'.html_url, .status'</span></pre>
|
|
2177
|
-
</div>
|
|
2178
|
-
<div class="description">
|
|
2179
|
-
<h5>Description:</h5>
|
|
2180
|
-
<p>Check GitHub Pages status and URL</p>
|
|
2181
|
-
</div>
|
|
2182
|
-
<div class="flags-section"><h5>Flags:</h5><ul class="flags-list"><li><code class="flag">--jq</code> - </li></ul></div>
|
|
2183
|
-
|
|
2184
|
-
</div>
|
|
2185
|
-
</div>
|
|
2186
|
-
<div class="command-card" data-category="Shell Builtins" data-frequency="1" data-name="cd">
|
|
2187
|
-
<div class="command-header" onclick="toggleCommand('cmd-21')">
|
|
2188
|
-
<div class="command-main">
|
|
2189
|
-
<code class="cmd">cd</code>
|
|
2190
|
-
<span class="category-badge">Shell Builtins</span>
|
|
2191
|
-
</div>
|
|
2192
|
-
<div class="command-meta">
|
|
2193
|
-
<span class="frequency">Used 1x</span>
|
|
2194
|
-
<span class="expand-icon">▼</span>
|
|
2195
|
-
</div>
|
|
2196
|
-
</div>
|
|
2197
|
-
<div class="command-details" id="cmd-21">
|
|
2198
|
-
<div class="full-command">
|
|
2199
|
-
<h5>Full Command:</h5>
|
|
2200
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> git status <span class="operator">&&</span> echo <span class="string">"---"</span> <span class="operator">&&</span> git log <span class="flag">--oneline</span> <span class="flag">-3</span> <span class="operator">&&</span> echo <span class="string">"---"</span> <span class="operator">&&</span> git remote <span class="flag">-v</span></pre>
|
|
2201
|
-
</div>
|
|
2202
|
-
<div class="description">
|
|
2203
|
-
<h5>Description:</h5>
|
|
2204
|
-
<p>Check git status, log, and remote</p>
|
|
2205
|
-
</div>
|
|
2206
|
-
|
|
2207
|
-
|
|
2208
|
-
</div>
|
|
2209
|
-
</div>
|
|
2210
|
-
<div class="command-card" data-category="Shell Builtins" data-frequency="1" data-name="cd">
|
|
2211
|
-
<div class="command-header" onclick="toggleCommand('cmd-22')">
|
|
2212
|
-
<div class="command-main">
|
|
2213
|
-
<code class="cmd">cd</code>
|
|
2214
|
-
<span class="category-badge">Shell Builtins</span>
|
|
2215
|
-
</div>
|
|
2216
|
-
<div class="command-meta">
|
|
2217
|
-
<span class="frequency">Used 1x</span>
|
|
2218
|
-
<span class="expand-icon">▼</span>
|
|
2219
|
-
</div>
|
|
2220
|
-
</div>
|
|
2221
|
-
<div class="command-details" id="cmd-22">
|
|
2222
|
-
<div class="full-command">
|
|
2223
|
-
<h5>Full Command:</h5>
|
|
2224
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> git push origin main <span class="flag">--force</span></pre>
|
|
2225
|
-
</div>
|
|
2226
|
-
<div class="description">
|
|
2227
|
-
<h5>Description:</h5>
|
|
2228
|
-
<p>Force push to remote to trigger Actions</p>
|
|
2229
|
-
</div>
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
</div>
|
|
2233
|
-
</div>
|
|
2234
|
-
<div class="command-card" data-category="Git" data-frequency="1" data-name="gh">
|
|
2235
|
-
<div class="command-header" onclick="toggleCommand('cmd-23')">
|
|
2236
|
-
<div class="command-main">
|
|
2237
|
-
<code class="cmd">gh</code>
|
|
2238
|
-
<span class="category-badge">Git</span>
|
|
2239
|
-
</div>
|
|
2240
|
-
<div class="command-meta">
|
|
2241
|
-
<span class="frequency">Used 1x</span>
|
|
2242
|
-
<span class="expand-icon">▼</span>
|
|
2243
|
-
</div>
|
|
2244
|
-
</div>
|
|
2245
|
-
<div class="command-details" id="cmd-23">
|
|
2246
|
-
<div class="full-command">
|
|
2247
|
-
<h5>Full Command:</h5>
|
|
2248
|
-
<pre class="syntax-highlighted"><span class="cmd">gh</span> api repos/bjpl/data_example <span class="flag">--jq</span> <span class="string">'{default_branch: .default_branch, size: .size, pushed_at: .pushed_at, has_pages: .has_pages}'</span></pre>
|
|
2249
|
-
</div>
|
|
2250
|
-
<div class="description">
|
|
2251
|
-
<h5>Description:</h5>
|
|
2252
|
-
<p>Check repo state on GitHub</p>
|
|
2253
|
-
</div>
|
|
2254
|
-
<div class="flags-section"><h5>Flags:</h5><ul class="flags-list"><li><code class="flag">--jq</code> - </li></ul></div>
|
|
2255
|
-
|
|
2256
|
-
</div>
|
|
2257
|
-
</div>
|
|
2258
|
-
<div class="command-card" data-category="Git" data-frequency="1" data-name="gh">
|
|
2259
|
-
<div class="command-header" onclick="toggleCommand('cmd-24')">
|
|
2260
|
-
<div class="command-main">
|
|
2261
|
-
<code class="cmd">gh</code>
|
|
2262
|
-
<span class="category-badge">Git</span>
|
|
2263
|
-
</div>
|
|
2264
|
-
<div class="command-meta">
|
|
2265
|
-
<span class="frequency">Used 1x</span>
|
|
2266
|
-
<span class="expand-icon">▼</span>
|
|
2267
|
-
</div>
|
|
2268
|
-
</div>
|
|
2269
|
-
<div class="command-details" id="cmd-24">
|
|
2270
|
-
<div class="full-command">
|
|
2271
|
-
<h5>Full Command:</h5>
|
|
2272
|
-
<pre class="syntax-highlighted"><span class="cmd">gh</span> api repos/bjpl/data_example/pages <span class="flag">--jq</span> <span class="string">'{url: .html_url, status: .status, build_type: .build_type, source: .source}'</span></pre>
|
|
2273
|
-
</div>
|
|
2274
|
-
<div class="description">
|
|
2275
|
-
<h5>Description:</h5>
|
|
2276
|
-
<p>Check Pages configuration</p>
|
|
2277
|
-
</div>
|
|
2278
|
-
<div class="flags-section"><h5>Flags:</h5><ul class="flags-list"><li><code class="flag">--jq</code> - </li></ul></div>
|
|
2279
|
-
|
|
2280
|
-
</div>
|
|
2281
|
-
</div>
|
|
2282
|
-
<div class="command-card" data-category="Git" data-frequency="1" data-name="gh">
|
|
2283
|
-
<div class="command-header" onclick="toggleCommand('cmd-25')">
|
|
2284
|
-
<div class="command-main">
|
|
2285
|
-
<code class="cmd">gh</code>
|
|
2286
|
-
<span class="category-badge">Git</span>
|
|
2287
|
-
</div>
|
|
2288
|
-
<div class="command-meta">
|
|
2289
|
-
<span class="frequency">Used 1x</span>
|
|
2290
|
-
<span class="expand-icon">▼</span>
|
|
2291
|
-
</div>
|
|
2292
|
-
</div>
|
|
2293
|
-
<div class="command-details" id="cmd-25">
|
|
2294
|
-
<div class="full-command">
|
|
2295
|
-
<h5>Full Command:</h5>
|
|
2296
|
-
<pre class="syntax-highlighted"><span class="cmd">gh</span> api repos/bjpl/data_example/contents/ <span class="flag">--jq</span> <span class="string">'.[].name'</span> 2<span class="operator">></span>&1</pre>
|
|
2297
|
-
</div>
|
|
2298
|
-
<div class="description">
|
|
2299
|
-
<h5>Description:</h5>
|
|
2300
|
-
<p>List files on remote</p>
|
|
2301
|
-
</div>
|
|
2302
|
-
<div class="flags-section"><h5>Flags:</h5><ul class="flags-list"><li><code class="flag">--jq</code> - </li></ul></div>
|
|
2303
|
-
|
|
2304
|
-
</div>
|
|
2305
|
-
</div>
|
|
2306
|
-
<div class="command-card" data-category="Git" data-frequency="1" data-name="gh">
|
|
2307
|
-
<div class="command-header" onclick="toggleCommand('cmd-26')">
|
|
2308
|
-
<div class="command-main">
|
|
2309
|
-
<code class="cmd">gh</code>
|
|
2310
|
-
<span class="category-badge">Git</span>
|
|
2311
|
-
</div>
|
|
2312
|
-
<div class="command-meta">
|
|
2313
|
-
<span class="frequency">Used 1x</span>
|
|
2314
|
-
<span class="expand-icon">▼</span>
|
|
2315
|
-
</div>
|
|
2316
|
-
</div>
|
|
2317
|
-
<div class="command-details" id="cmd-26">
|
|
2318
|
-
<div class="full-command">
|
|
2319
|
-
<h5>Full Command:</h5>
|
|
2320
|
-
<pre class="syntax-highlighted"><span class="cmd">gh</span> api repos/bjpl/data_example/pages <span class="flag">-X</span> PUT <span class="flag">--input</span> - <span class="operator"><</span><span class="operator"><</span><span class="string">'EOF'</span>
|
|
2321
|
-
{<span class="string">"build_type"</span>:<span class="string">"workflow"</span>,<span class="string">"source"</span>:{<span class="string">"branch"</span>:<span class="string">"main"</span>,<span class="string">"path"</span>:<span class="string">"/"</span>}}
|
|
2322
|
-
EOF</pre>
|
|
2323
|
-
</div>
|
|
2324
|
-
<div class="description">
|
|
2325
|
-
<h5>Description:</h5>
|
|
2326
|
-
<p>Switch Pages to workflow-based deployment</p>
|
|
2327
|
-
</div>
|
|
2328
|
-
<div class="flags-section"><h5>Flags:</h5><ul class="flags-list"><li><code class="flag">-X</code> - </li><li><code class="flag">--input</code> - </li><li><code class="flag">-</code> - </li></ul></div>
|
|
2329
|
-
|
|
2330
|
-
</div>
|
|
2331
|
-
</div>
|
|
2332
|
-
<div class="command-card" data-category="Git" data-frequency="1" data-name="gh">
|
|
2333
|
-
<div class="command-header" onclick="toggleCommand('cmd-27')">
|
|
2334
|
-
<div class="command-main">
|
|
2335
|
-
<code class="cmd">gh</code>
|
|
2336
|
-
<span class="category-badge">Git</span>
|
|
2337
|
-
</div>
|
|
2338
|
-
<div class="command-meta">
|
|
2339
|
-
<span class="frequency">Used 1x</span>
|
|
2340
|
-
<span class="expand-icon">▼</span>
|
|
2341
|
-
</div>
|
|
2342
|
-
</div>
|
|
2343
|
-
<div class="command-details" id="cmd-27">
|
|
2344
|
-
<div class="full-command">
|
|
2345
|
-
<h5>Full Command:</h5>
|
|
2346
|
-
<pre class="syntax-highlighted"><span class="cmd">gh</span> api repos/bjpl/data_example/pages <span class="flag">-X</span> PUT <span class="flag">-f</span> <span class="string">"build_type=workflow"</span> <span class="flag">-f</span> <span class="string">"source[branch]=main"</span> <span class="flag">-f</span> <span class="string">"source[path]=/"</span> 2<span class="operator">></span>&1</pre>
|
|
2347
|
-
</div>
|
|
2348
|
-
<div class="description">
|
|
2349
|
-
<h5>Description:</h5>
|
|
2350
|
-
<p>Switch Pages build type to workflow</p>
|
|
2351
|
-
</div>
|
|
2352
|
-
<div class="flags-section"><h5>Flags:</h5><ul class="flags-list"><li><code class="flag">-X</code> - </li><li><code class="flag">-f</code> - </li><li><code class="flag">-f</code> - </li><li><code class="flag">-f</code> - </li></ul></div>
|
|
2353
|
-
|
|
2354
|
-
</div>
|
|
2355
|
-
</div>
|
|
2356
|
-
<div class="command-card" data-category="File System" data-frequency="1" data-name="mkdir">
|
|
2357
|
-
<div class="command-header" onclick="toggleCommand('cmd-28')">
|
|
2358
|
-
<div class="command-main">
|
|
2359
|
-
<code class="cmd">mkdir</code>
|
|
2360
|
-
<span class="category-badge">File System</span>
|
|
2361
|
-
</div>
|
|
2362
|
-
<div class="command-meta">
|
|
2363
|
-
<span class="frequency">Used 1x</span>
|
|
2364
|
-
<span class="expand-icon">▼</span>
|
|
2365
|
-
</div>
|
|
2366
|
-
</div>
|
|
2367
|
-
<div class="command-details" id="cmd-28">
|
|
2368
|
-
<div class="full-command">
|
|
2369
|
-
<h5>Full Command:</h5>
|
|
2370
|
-
<pre class="syntax-highlighted"><span class="cmd">mkdir</span> <span class="flag">-p</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris/.github/workflows"</span></pre>
|
|
2371
|
-
</div>
|
|
2372
|
-
<div class="description">
|
|
2373
|
-
<h5>Description:</h5>
|
|
2374
|
-
<p>Create workflows directory</p>
|
|
2375
|
-
</div>
|
|
2376
|
-
<div class="flags-section"><h5>Flags:</h5><ul class="flags-list"><li><code class="flag">-p</code> - </li></ul></div>
|
|
2377
|
-
|
|
2378
|
-
</div>
|
|
2379
|
-
</div>
|
|
2380
|
-
<div class="command-card" data-category="Shell Builtins" data-frequency="1" data-name="cd">
|
|
2381
|
-
<div class="command-header" onclick="toggleCommand('cmd-29')">
|
|
2382
|
-
<div class="command-main">
|
|
2383
|
-
<code class="cmd">cd</code>
|
|
2384
|
-
<span class="category-badge">Shell Builtins</span>
|
|
2385
|
-
</div>
|
|
2386
|
-
<div class="command-meta">
|
|
2387
|
-
<span class="frequency">Used 1x</span>
|
|
2388
|
-
<span class="expand-icon">▼</span>
|
|
2389
|
-
</div>
|
|
2390
|
-
</div>
|
|
2391
|
-
<div class="command-details" id="cmd-29">
|
|
2392
|
-
<div class="full-command">
|
|
2393
|
-
<h5>Full Command:</h5>
|
|
2394
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> git add .github/workflows/deploy.yml <span class="operator">&&</span> git commit <span class="flag">-m</span> "<span class="operator">$(</span>cat <span class="operator"><</span><span class="operator"><</span><span class="string">'EOF'</span>
|
|
2395
|
-
Add GitHub Actions workflow for Pages deployment
|
|
2396
|
-
|
|
2397
|
-
Co-Authored-By: Claude Opus 4.5 <span class="operator"><</span>noreply@anthropic.com<span class="operator">></span>
|
|
2398
|
-
EOF
|
|
2399
|
-
<span class="operator">)</span>" <span class="operator">&&</span> git push origin main</pre>
|
|
2400
|
-
</div>
|
|
2401
|
-
<div class="description">
|
|
2402
|
-
<h5>Description:</h5>
|
|
2403
|
-
<p>Commit and push workflow to trigger Actions deployment</p>
|
|
2404
|
-
</div>
|
|
2405
|
-
|
|
2406
|
-
|
|
2407
|
-
</div>
|
|
2408
|
-
</div>
|
|
2409
|
-
<div class="command-card" data-category="Process & System" data-frequency="1" data-name="sleep">
|
|
2410
|
-
<div class="command-header" onclick="toggleCommand('cmd-30')">
|
|
2411
|
-
<div class="command-main">
|
|
2412
|
-
<code class="cmd">sleep</code>
|
|
2413
|
-
<span class="category-badge">Process & System</span>
|
|
2414
|
-
</div>
|
|
2415
|
-
<div class="command-meta">
|
|
2416
|
-
<span class="frequency">Used 1x</span>
|
|
2417
|
-
<span class="expand-icon">▼</span>
|
|
2418
|
-
</div>
|
|
2419
|
-
</div>
|
|
2420
|
-
<div class="command-details" id="cmd-30">
|
|
2421
|
-
<div class="full-command">
|
|
2422
|
-
<h5>Full Command:</h5>
|
|
2423
|
-
<pre class="syntax-highlighted"><span class="cmd">sleep</span> 5 <span class="operator">&&</span> gh run list <span class="flag">--repo</span> bjpl/data_example <span class="flag">--limit</span> 3</pre>
|
|
2424
|
-
</div>
|
|
2425
|
-
<div class="description">
|
|
2426
|
-
<h5>Description:</h5>
|
|
2427
|
-
<p>Check if Actions workflow triggered</p>
|
|
2428
|
-
</div>
|
|
2429
|
-
|
|
2430
|
-
|
|
2431
|
-
</div>
|
|
2432
|
-
</div>
|
|
2433
|
-
<div class="command-card" data-category="Package Management" data-frequency="1" data-name="npm">
|
|
2434
|
-
<div class="command-header" onclick="toggleCommand('cmd-31')">
|
|
2435
|
-
<div class="command-main">
|
|
2436
|
-
<code class="cmd">npm</code>
|
|
2437
|
-
<span class="category-badge">Package Management</span>
|
|
2438
|
-
</div>
|
|
2439
|
-
<div class="command-meta">
|
|
2440
|
-
<span class="frequency">Used 1x</span>
|
|
2441
|
-
<span class="expand-icon">▼</span>
|
|
2442
|
-
</div>
|
|
2443
|
-
</div>
|
|
2444
|
-
<div class="command-details" id="cmd-31">
|
|
2445
|
-
<div class="full-command">
|
|
2446
|
-
<h5>Full Command:</h5>
|
|
2447
|
-
<pre class="syntax-highlighted"><span class="cmd">npm</span> install <span class="flag">-g</span> session-slides</pre>
|
|
2448
|
-
</div>
|
|
2449
|
-
<div class="description">
|
|
2450
|
-
<h5>Description:</h5>
|
|
2451
|
-
<p>Install session-slides globally</p>
|
|
2452
|
-
</div>
|
|
2453
|
-
<div class="flags-section"><h5>Flags:</h5><ul class="flags-list"><li><code class="flag">-g</code> - </li></ul></div>
|
|
2454
|
-
|
|
2455
|
-
</div>
|
|
2456
|
-
</div>
|
|
2457
|
-
<div class="command-card" data-category="Unknown" data-frequency="1" data-name="session-slides">
|
|
2458
|
-
<div class="command-header" onclick="toggleCommand('cmd-32')">
|
|
2459
|
-
<div class="command-main">
|
|
2460
|
-
<code class="cmd">session-slides</code>
|
|
2461
|
-
<span class="category-badge">Unknown</span>
|
|
2462
|
-
</div>
|
|
2463
|
-
<div class="command-meta">
|
|
2464
|
-
<span class="frequency">Used 1x</span>
|
|
2465
|
-
<span class="expand-icon">▼</span>
|
|
2466
|
-
</div>
|
|
2467
|
-
</div>
|
|
2468
|
-
<div class="command-details" id="cmd-32">
|
|
2469
|
-
<div class="full-command">
|
|
2470
|
-
<h5>Full Command:</h5>
|
|
2471
|
-
<pre class="syntax-highlighted"><span class="cmd">session-slides</span> <span class="flag">--help</span> 2<span class="operator">></span>&1 <span class="operator">|</span><span class="operator">|</span> npx session-slides <span class="flag">--help</span> 2<span class="operator">></span>&1</pre>
|
|
2472
|
-
</div>
|
|
2473
|
-
<div class="description">
|
|
2474
|
-
<h5>Description:</h5>
|
|
2475
|
-
<p>Check session-slides usage</p>
|
|
2476
|
-
</div>
|
|
2477
|
-
<div class="flags-section"><h5>Flags:</h5><ul class="flags-list"><li><code class="flag">--help</code> - </li></ul></div>
|
|
2478
|
-
|
|
2479
|
-
</div>
|
|
2480
|
-
</div>
|
|
2481
|
-
<div class="command-card" data-category="Shell Builtins" data-frequency="1" data-name="cd">
|
|
2482
|
-
<div class="command-header" onclick="toggleCommand('cmd-33')">
|
|
2483
|
-
<div class="command-main">
|
|
2484
|
-
<code class="cmd">cd</code>
|
|
2485
|
-
<span class="category-badge">Shell Builtins</span>
|
|
2486
|
-
</div>
|
|
2487
|
-
<div class="command-meta">
|
|
2488
|
-
<span class="frequency">Used 1x</span>
|
|
2489
|
-
<span class="expand-icon">▼</span>
|
|
2490
|
-
</div>
|
|
2491
|
-
</div>
|
|
2492
|
-
<div class="command-details" id="cmd-33">
|
|
2493
|
-
<div class="full-command">
|
|
2494
|
-
<h5>Full Command:</h5>
|
|
2495
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> session-slides <span class="flag">--title</span> <span class="string">"Customer Analytics Dashboard Build"</span> <span class="flag">--open</span> <span class="flag">--verbose</span> 2<span class="operator">></span>&1</pre>
|
|
2496
|
-
</div>
|
|
2497
|
-
<div class="description">
|
|
2498
|
-
<h5>Description:</h5>
|
|
2499
|
-
<p>Generate slides from current session</p>
|
|
2500
|
-
</div>
|
|
2501
|
-
|
|
2502
|
-
|
|
2503
|
-
</div>
|
|
2504
|
-
</div>
|
|
2505
|
-
<div class="command-card" data-category="File System" data-frequency="1" data-name="ls">
|
|
2506
|
-
<div class="command-header" onclick="toggleCommand('cmd-34')">
|
|
2507
|
-
<div class="command-main">
|
|
2508
|
-
<code class="cmd">ls</code>
|
|
2509
|
-
<span class="category-badge">File System</span>
|
|
2510
|
-
</div>
|
|
2511
|
-
<div class="command-meta">
|
|
2512
|
-
<span class="frequency">Used 1x</span>
|
|
2513
|
-
<span class="expand-icon">▼</span>
|
|
2514
|
-
</div>
|
|
2515
|
-
</div>
|
|
2516
|
-
<div class="command-details" id="cmd-34">
|
|
2517
|
-
<div class="full-command">
|
|
2518
|
-
<h5>Full Command:</h5>
|
|
2519
|
-
<pre class="syntax-highlighted"><span class="cmd">ls</span> <span class="flag">-lt</span> <span class="path">~/.claude/projects/</span> 2<span class="operator">></span>/dev/null <span class="operator">|</span> head <span class="flag">-20</span></pre>
|
|
2520
|
-
</div>
|
|
2521
|
-
<div class="description">
|
|
2522
|
-
<h5>Description:</h5>
|
|
2523
|
-
<p>Find Claude session directories</p>
|
|
2524
|
-
</div>
|
|
2525
|
-
<div class="flags-section"><h5>Flags:</h5><ul class="flags-list"><li><code class="flag">-lt</code> - </li></ul></div>
|
|
2526
|
-
|
|
2527
|
-
</div>
|
|
2528
|
-
</div>
|
|
2529
|
-
<div class="command-card" data-category="File System" data-frequency="1" data-name="ls">
|
|
2530
|
-
<div class="command-header" onclick="toggleCommand('cmd-35')">
|
|
2531
|
-
<div class="command-main">
|
|
2532
|
-
<code class="cmd">ls</code>
|
|
2533
|
-
<span class="category-badge">File System</span>
|
|
2534
|
-
</div>
|
|
2535
|
-
<div class="command-meta">
|
|
2536
|
-
<span class="frequency">Used 1x</span>
|
|
2537
|
-
<span class="expand-icon">▼</span>
|
|
2538
|
-
</div>
|
|
2539
|
-
</div>
|
|
2540
|
-
<div class="command-details" id="cmd-35">
|
|
2541
|
-
<div class="full-command">
|
|
2542
|
-
<h5>Full Command:</h5>
|
|
2543
|
-
<pre class="syntax-highlighted"><span class="cmd">ls</span> <span class="flag">-lt</span> <span class="path">~/.claude/projects/C--Users-brand-Development-Project-Workspace-active-development-session-with-chris/</span> 2<span class="operator">></span>/dev/null <span class="operator">|</span> head <span class="flag">-10</span></pre>
|
|
2544
|
-
</div>
|
|
2545
|
-
<div class="description">
|
|
2546
|
-
<h5>Description:</h5>
|
|
2547
|
-
<p>List session files for this project</p>
|
|
2548
|
-
</div>
|
|
2549
|
-
<div class="flags-section"><h5>Flags:</h5><ul class="flags-list"><li><code class="flag">-lt</code> - </li></ul></div>
|
|
2550
|
-
|
|
2551
|
-
</div>
|
|
2552
|
-
</div>
|
|
2553
|
-
<div class="command-card" data-category="Shell Builtins" data-frequency="1" data-name="cd">
|
|
2554
|
-
<div class="command-header" onclick="toggleCommand('cmd-36')">
|
|
2555
|
-
<div class="command-main">
|
|
2556
|
-
<code class="cmd">cd</code>
|
|
2557
|
-
<span class="category-badge">Shell Builtins</span>
|
|
2558
|
-
</div>
|
|
2559
|
-
<div class="command-meta">
|
|
2560
|
-
<span class="frequency">Used 1x</span>
|
|
2561
|
-
<span class="expand-icon">▼</span>
|
|
2562
|
-
</div>
|
|
2563
|
-
</div>
|
|
2564
|
-
<div class="command-details" id="cmd-36">
|
|
2565
|
-
<div class="full-command">
|
|
2566
|
-
<h5>Full Command:</h5>
|
|
2567
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> session-slides <span class="flag">--from</span> <span class="path">~/.claude/projects/C--Users-brand-Development-Project-Workspace-active-development-session-with-chris/081cfcfd-cde6-4304-89ca-6ac61faf8d85.jsonl</span> <span class="flag">--title</span> <span class="string">"Customer Analytics Dashboard Build"</span> <span class="flag">--open</span> <span class="flag">--verbose</span> 2<span class="operator">></span>&1</pre>
|
|
2568
|
-
</div>
|
|
2569
|
-
<div class="description">
|
|
2570
|
-
<h5>Description:</h5>
|
|
2571
|
-
<p>Generate slides from current session file</p>
|
|
2572
|
-
</div>
|
|
2573
|
-
|
|
2574
|
-
|
|
2575
|
-
</div>
|
|
2576
|
-
</div>
|
|
2577
|
-
</div>
|
|
2578
|
-
</div>
|
|
2579
|
-
</section>
|
|
2580
|
-
|
|
2581
|
-
<section id="panel-lessons" class="panel" role="tabpanel" aria-labelledby="tab-lessons">
|
|
2582
|
-
|
|
2583
|
-
<div class="lessons-container">
|
|
2584
|
-
|
|
2585
|
-
<div class="lesson-section">
|
|
2586
|
-
<h2 class="lesson-title">
|
|
2587
|
-
<span class="lesson-icon">📌</span>
|
|
2588
|
-
Shell Builtins
|
|
2589
|
-
<span class="lesson-count">(18 commands)</span>
|
|
2590
|
-
</h2>
|
|
2591
|
-
<div class="lesson-content">
|
|
2592
|
-
<div class="concept-overview">
|
|
2593
|
-
<h4>Concept Overview:</h4>
|
|
2594
|
-
<p>Commands related to shell builtins operations and utilities.</p>
|
|
2595
|
-
</div>
|
|
2596
|
-
<div class="lesson-commands">
|
|
2597
|
-
<h4>Commands:</h4>
|
|
2598
|
-
|
|
2599
|
-
<div class="lesson-command">
|
|
2600
|
-
<div class="lesson-command-header">
|
|
2601
|
-
<code class="cmd">cd</code>
|
|
2602
|
-
</div>
|
|
2603
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> python scripts/generate_explainers.py</pre>
|
|
2604
|
-
<p class="lesson-description">Generate all 5 explainer docx files</p>
|
|
2605
|
-
</div>
|
|
2606
|
-
<div class="lesson-command">
|
|
2607
|
-
<div class="lesson-command-header">
|
|
2608
|
-
<code class="cmd">cd</code>
|
|
2609
|
-
</div>
|
|
2610
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> python <span class="flag">-c</span> "
|
|
2611
|
-
import openpyxl
|
|
2612
|
-
wb = openpyxl.load_workbook(<span class="string">'C:/Users/brand/Downloads/mock_customer_data.xlsx'</span>, data_only=True<span class="operator">)</span>
|
|
2613
|
-
for sheet in wb.sheetnames:
|
|
2614
|
-
ws = wb[sheet]
|
|
2615
|
-
print(f<span class="string">'=== Sheet: {sheet} ==='</span><span class="operator">)</span>
|
|
2616
|
-
print(f<span class="string">'Rows: {ws.max_row}, Cols: {ws.max_column}'</span><span class="operator">)</span>
|
|
2617
|
-
# Print headers
|
|
2618
|
-
headers = [cell.value for cell in ws[1]]
|
|
2619
|
-
print(f<span class="string">'Headers: {headers}'</span><span class="operator">)</span>
|
|
2620
|
-
# Print first 5 data rows
|
|
2621
|
-
for row in ws.iter_rows(min_row=2, max_row=min(6, ws.max_row<span class="operator">)</span>, values_only=True<span class="operator">)</span>:
|
|
2622
|
-
print(list(row<span class="operator">)</span><span class="operator">)</span>
|
|
2623
|
-
# Print last 2 rows
|
|
2624
|
-
print(<span class="string">'...'</span><span class="operator">)</span>
|
|
2625
|
-
for row in ws.iter_rows(min_row=max(2, ws.max_row-1<span class="operator">)</span>, max_row=ws.max_row, values_only=True<span class="operator">)</span>:
|
|
2626
|
-
print(list(row<span class="operator">)</span><span class="operator">)</span>
|
|
2627
|
-
print(<span class="operator">)</span>
|
|
2628
|
-
"
|
|
2629
|
-
</pre>
|
|
2630
|
-
<p class="lesson-description">Inspect spreadsheet structure and sample data</p>
|
|
2631
|
-
</div>
|
|
2632
|
-
<div class="lesson-command">
|
|
2633
|
-
<div class="lesson-command-header">
|
|
2634
|
-
<code class="cmd">cd</code>
|
|
2635
|
-
</div>
|
|
2636
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> python <span class="flag">-c</span> "
|
|
2637
|
-
import openpyxl
|
|
2638
|
-
wb = openpyxl.load_workbook(<span class="string">'C:/Users/brand/Downloads/mock_customer_data.xlsx'</span>, data_only=True<span class="operator">)</span>
|
|
2639
|
-
ws = wb[<span class="string">'Customer Purchases'</span>]
|
|
2640
|
-
|
|
2641
|
-
# Deeper analysis for viz planning
|
|
2642
|
-
states = {}
|
|
2643
|
-
amounts = []
|
|
2644
|
-
quantities = []
|
|
2645
|
-
customers = {}
|
|
2646
|
-
|
|
2647
|
-
for row in ws.iter_rows(min_row=2, max_row=ws.max_row, values_only=True<span class="operator">)</span>:
|
|
2648
|
-
name, amount, qty, state = row
|
|
2649
|
-
amounts.append(amount<span class="operator">)</span>
|
|
2650
|
-
quantities.append(qty<span class="operator">)</span>
|
|
2651
|
-
|
|
2652
|
-
if state not in states:
|
|
2653
|
-
states[state] = {<span class="string">'count'</span>: 0, <span class="string">'total'</span>: 0, <span class="string">'qty'</span>: 0}
|
|
2654
|
-
states[state][<span class="string">'count'</span>] += 1
|
|
2655
|
-
states[state][<span class="string">'total'</span>] += amount
|
|
2656
|
-
states[state][<span class="string">'qty'</span>] += qty
|
|
2657
|
-
|
|
2658
|
-
if name not in customers:
|
|
2659
|
-
customers[name] = {<span class="string">'count'</span>: 0, <span class="string">'total'</span>: 0, <span class="string">'qty'</span>: 0}
|
|
2660
|
-
customers[name][<span class="string">'count'</span>] += 1
|
|
2661
|
-
customers[name][<span class="string">'total'</span>] += amount
|
|
2662
|
-
customers[name][<span class="string">'qty'</span>] += qty
|
|
2663
|
-
|
|
2664
|
-
print(f<span class="string">'Total records: {len(amounts<span class="operator">)</span>}'</span><span class="operator">)</span>
|
|
2665
|
-
print(f<span class="string">'Unique states: {len(states<span class="operator">)</span>}'</span><span class="operator">)</span>
|
|
2666
|
-
print(f<span class="string">'Unique customers: {len(customers<span class="operator">)</span>}'</span><span class="operator">)</span>
|
|
2667
|
-
print(f<span class="string">'Amount range: \<span class="variable">${min</span>(amounts<span class="operator">)</span>:.2f} - \<span class="variable">${max</span>(amounts<span class="operator">)</span>:.2f}'</span><span class="operator">)</span>
|
|
2668
|
-
print(f<span class="string">'Avg amount: \<span class="variable">${sum</span>(amounts<span class="operator">)</span>/len(amounts<span class="operator">)</span>:.2f}'</span><span class="operator">)</span>
|
|
2669
|
-
print(f<span class="string">'Quantity range: {min(quantities<span class="operator">)</span>} - {max(quantities<span class="operator">)</span>}'</span><span class="operator">)</span>
|
|
2670
|
-
print(<span class="operator">)</span>
|
|
2671
|
-
|
|
2672
|
-
# Top 10 states by revenue
|
|
2673
|
-
sorted_states = sorted(states.items(<span class="operator">)</span>, key=lambda x: x[1][<span class="string">'total'</span>], reverse=True<span class="operator">)</span>
|
|
2674
|
-
print(<span class="string">'Top 15 states by revenue:'</span><span class="operator">)</span>
|
|
2675
|
-
for s, d in sorted_states[:15]:
|
|
2676
|
-
print(f' {s}: <span class="variable">${d</span>[\<span class="string">"total\"</span>]:.2f} ({d[\<span class="string">"count\"</span>]} txns, avg <span class="variable">${d</span>[\<span class="string">"total\"</span>]/d[\<span class="string">"count\"</span>]:.2f}<span class="operator">)</span><span class="string">'<span class="operator">)</span>
|
|
2677
|
-
|
|
2678
|
-
print(<span class="operator">)</span>
|
|
2679
|
-
# Top customers by purchase count
|
|
2680
|
-
sorted_custs = sorted(customers.items(<span class="operator">)</span>, key=lambda x: x[1]['</span>count<span class="string">'], reverse=True<span class="operator">)</span>
|
|
2681
|
-
print('</span>Top 10 repeat customers:<span class="string">'<span class="operator">)</span>
|
|
2682
|
-
for c, d in sorted_custs[:10]:
|
|
2683
|
-
print(f'</span> {c}: {d[\<span class="string">"count\"</span>]} purchases, <span class="variable">${d</span>[\<span class="string">"total\"</span>]:.2f} total<span class="string">'<span class="operator">)</span>
|
|
2684
|
-
|
|
2685
|
-
print(<span class="operator">)</span>
|
|
2686
|
-
# Distribution of amounts
|
|
2687
|
-
brackets = [0, 25, 50, 75, 100, 150, 200, 500]
|
|
2688
|
-
print('</span>Amount distribution:'<span class="operator">)</span>
|
|
2689
|
-
for i in range(len(brackets<span class="operator">)</span>-1<span class="operator">)</span>:
|
|
2690
|
-
count = sum(1 for a in amounts if brackets[i] <span class="operator"><</span>= a <span class="operator"><</span> brackets[i+1]<span class="operator">)</span>
|
|
2691
|
-
print(f<span class="string">' \<span class="variable">${brackets</span>[i]}-\<span class="variable">${brackets</span>[i+1]}: {count}'</span><span class="operator">)</span>
|
|
2692
|
-
count = sum(1 for a in amounts if a <span class="operator">></span>= 500<span class="operator">)</span>
|
|
2693
|
-
print(f<span class="string">' \<span class="variable">$500</span>+: {count}'</span><span class="operator">)</span>
|
|
2694
|
-
|
|
2695
|
-
# Quantity distribution
|
|
2696
|
-
print(<span class="operator">)</span>
|
|
2697
|
-
print(<span class="string">'Quantity distribution:'</span><span class="operator">)</span>
|
|
2698
|
-
for q in range(1, 6<span class="operator">)</span>:
|
|
2699
|
-
count = sum(1 for x in quantities if x == q<span class="operator">)</span>
|
|
2700
|
-
print(f<span class="string">' {q}: {count}'</span><span class="operator">)</span>
|
|
2701
|
-
"
|
|
2702
|
-
</pre>
|
|
2703
|
-
<p class="lesson-description">Deep analysis of data for visualization planning</p>
|
|
2704
|
-
</div>
|
|
2705
|
-
<div class="lesson-command">
|
|
2706
|
-
<div class="lesson-command-header">
|
|
2707
|
-
<code class="cmd">cd</code>
|
|
2708
|
-
</div>
|
|
2709
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> python <span class="operator"><</span><span class="operator"><</span> <span class="string">'PYEOF'</span>
|
|
2710
|
-
import openpyxl
|
|
2711
|
-
wb = openpyxl.load_workbook(<span class="string">'C:/Users/brand/Downloads/mock_customer_data.xlsx'</span>, data_only=True<span class="operator">)</span>
|
|
2712
|
-
ws = wb[<span class="string">'Customer Purchases'</span>]
|
|
2713
|
-
|
|
2714
|
-
states = {}
|
|
2715
|
-
amounts = []
|
|
2716
|
-
quantities = []
|
|
2717
|
-
customers = {}
|
|
2718
|
-
|
|
2719
|
-
for row in ws.iter_rows(min_row=2, max_row=ws.max_row, values_only=True<span class="operator">)</span>:
|
|
2720
|
-
name, amount, qty, state = row
|
|
2721
|
-
amounts.append(amount<span class="operator">)</span>
|
|
2722
|
-
quantities.append(qty<span class="operator">)</span>
|
|
2723
|
-
if state not in states:
|
|
2724
|
-
states[state] = {<span class="string">'count'</span>: 0, <span class="string">'total'</span>: 0, <span class="string">'qty'</span>: 0}
|
|
2725
|
-
states[state][<span class="string">'count'</span>] += 1
|
|
2726
|
-
states[state][<span class="string">'total'</span>] += amount
|
|
2727
|
-
states[state][<span class="string">'qty'</span>] += qty
|
|
2728
|
-
if name not in customers:
|
|
2729
|
-
customers[name] = {<span class="string">'count'</span>: 0, <span class="string">'total'</span>: 0, <span class="string">'qty'</span>: 0}
|
|
2730
|
-
customers[name][<span class="string">'count'</span>] += 1
|
|
2731
|
-
customers[name][<span class="string">'total'</span>] += amount
|
|
2732
|
-
customers[name][<span class="string">'qty'</span>] += qty
|
|
2733
|
-
|
|
2734
|
-
print(f<span class="string">"Total records: {len(amounts<span class="operator">)</span>}"</span><span class="operator">)</span>
|
|
2735
|
-
print(f<span class="string">"Unique states: {len(states<span class="operator">)</span>}"</span><span class="operator">)</span>
|
|
2736
|
-
print(f<span class="string">"Unique customers: {len(customers<span class="operator">)</span>}"</span><span class="operator">)</span>
|
|
2737
|
-
print(f<span class="string">"Amount range: <span class="variable">${min</span>(amounts<span class="operator">)</span>:.2f} - <span class="variable">${max</span>(amounts<span class="operator">)</span>:.2f}"</span><span class="operator">)</span>
|
|
2738
|
-
print(f<span class="string">"Avg amount: <span class="variable">${sum</span>(amounts<span class="operator">)</span>/len(amounts<span class="operator">)</span>:.2f}"</span><span class="operator">)</span>
|
|
2739
|
-
print(f<span class="string">"Quantity range: {min(quantities<span class="operator">)</span>} - {max(quantities<span class="operator">)</span>}"</span><span class="operator">)</span>
|
|
2740
|
-
print(<span class="operator">)</span>
|
|
2741
|
-
|
|
2742
|
-
sorted_states = sorted(states.items(<span class="operator">)</span>, key=lambda x: x[1][<span class="string">'total'</span>], reverse=True<span class="operator">)</span>
|
|
2743
|
-
print(<span class="string">"Top 15 states by revenue:"</span><span class="operator">)</span>
|
|
2744
|
-
for s, d in sorted_states[:15]:
|
|
2745
|
-
avg = d[<span class="string">'total'</span>] / d[<span class="string">'count'</span>]
|
|
2746
|
-
print(f" {s}: <span class="variable">${d</span>[<span class="string">'total'</span>]:.2f} ({d[<span class="string">'count'</span>]} txns, avg <span class="variable">${avg</span>:.2f}<span class="operator">)</span>"<span class="operator">)</span>
|
|
2747
|
-
|
|
2748
|
-
print(<span class="operator">)</span>
|
|
2749
|
-
sorted_custs = sorted(customers.items(<span class="operator">)</span>, key=lambda x: x[1][<span class="string">'count'</span>], reverse=True<span class="operator">)</span>
|
|
2750
|
-
print(<span class="string">"Top 10 repeat customers:"</span><span class="operator">)</span>
|
|
2751
|
-
for c, d in sorted_custs[:10]:
|
|
2752
|
-
print(f" {c}: {d[<span class="string">'count'</span>]} purchases, <span class="variable">${d</span>[<span class="string">'total'</span>]:.2f} total<span class="string">"<span class="operator">)</span>
|
|
2753
|
-
|
|
2754
|
-
print(<span class="operator">)</span>
|
|
2755
|
-
brackets = [0, 25, 50, 75, 100, 150, 200, 500]
|
|
2756
|
-
print("</span>Amount distribution:"<span class="operator">)</span>
|
|
2757
|
-
for i in range(len(brackets<span class="operator">)</span>-1<span class="operator">)</span>:
|
|
2758
|
-
count = sum(1 for a in amounts if brackets[i] <span class="operator"><</span>= a <span class="operator"><</span> brackets[i+1]<span class="operator">)</span>
|
|
2759
|
-
print(f<span class="string">" <span class="variable">${brackets</span>[i]}-<span class="variable">${brackets</span>[i+1]}: {count}"</span><span class="operator">)</span>
|
|
2760
|
-
count = sum(1 for a in amounts if a <span class="operator">></span>= 500<span class="operator">)</span>
|
|
2761
|
-
print(f<span class="string">" <span class="variable">$500</span>+: {count}"</span><span class="operator">)</span>
|
|
2762
|
-
|
|
2763
|
-
print(<span class="operator">)</span>
|
|
2764
|
-
print(<span class="string">"Quantity distribution:"</span><span class="operator">)</span>
|
|
2765
|
-
for q in range(1, 6<span class="operator">)</span>:
|
|
2766
|
-
count = sum(1 for x in quantities if x == q<span class="operator">)</span>
|
|
2767
|
-
print(f<span class="string">" {q}: {count}"</span><span class="operator">)</span>
|
|
2768
|
-
PYEOF
|
|
2769
|
-
</pre>
|
|
2770
|
-
<p class="lesson-description">Deep analysis of data for visualization planning</p>
|
|
2771
|
-
</div>
|
|
2772
|
-
<div class="lesson-command">
|
|
2773
|
-
<div class="lesson-command-header">
|
|
2774
|
-
<code class="cmd">cd</code>
|
|
2775
|
-
</div>
|
|
2776
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> python visualizations/generate_viz.py</pre>
|
|
2777
|
-
<p class="lesson-description">Generate all 3 interactive HTML visualizations</p>
|
|
2778
|
-
</div>
|
|
2779
|
-
<div class="lesson-command">
|
|
2780
|
-
<div class="lesson-command-header">
|
|
2781
|
-
<code class="cmd">cd</code>
|
|
2782
|
-
</div>
|
|
2783
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> git init <span class="operator">&&</span> git remote add origin https://github.com/bjpl/data_example.git <span class="operator">&&</span> git branch <span class="flag">-M</span> main</pre>
|
|
2784
|
-
<p class="lesson-description">Initialize git repo and connect to remote</p>
|
|
2785
|
-
</div>
|
|
2786
|
-
<div class="lesson-command">
|
|
2787
|
-
<div class="lesson-command-header">
|
|
2788
|
-
<code class="cmd">cd</code>
|
|
2789
|
-
</div>
|
|
2790
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> touch .nojekyll</pre>
|
|
2791
|
-
<p class="lesson-description">Create .nojekyll for GitHub Pages</p>
|
|
2792
|
-
</div>
|
|
2793
|
-
<div class="lesson-command">
|
|
2794
|
-
<div class="lesson-command-header">
|
|
2795
|
-
<code class="cmd">cd</code>
|
|
2796
|
-
</div>
|
|
2797
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> git status</pre>
|
|
2798
|
-
<p class="lesson-description">Show working tree status</p>
|
|
2799
|
-
</div>
|
|
2800
|
-
<div class="lesson-command">
|
|
2801
|
-
<div class="lesson-command-header">
|
|
2802
|
-
<code class="cmd">cd</code>
|
|
2803
|
-
</div>
|
|
2804
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> git log <span class="flag">--oneline</span> <span class="flag">-5</span> 2<span class="operator">></span>/dev/null <span class="operator">|</span><span class="operator">|</span> echo <span class="string">"No commits yet"</span></pre>
|
|
2805
|
-
<p class="lesson-description">Check commit history</p>
|
|
2806
|
-
</div>
|
|
2807
|
-
<div class="lesson-command">
|
|
2808
|
-
<div class="lesson-command-header">
|
|
2809
|
-
<code class="cmd">cd</code>
|
|
2810
|
-
</div>
|
|
2811
|
-
<pre class="syntax-highlighted"><span class="cmd">cd</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris"</span> <span class="operator">&&</span> git add .gitignore .nojekyll index.html visualizations/01_revenue_by_state.html visualizations/02_purchase_patterns.html visualizations/03_executive_dashboard.html scripts/generate_explainers.py scripts/generate_viz.py docs/explainers/ <span class="operator">&&</span> git commit <span class="flag">-m</span> "<span class="operator">$(</span>cat <span class="operator"><</span><span class="operator"><</span><span class="string">'EOF'</span>
|
|
2812
|
-
Add interactive customer analytics dashboard with 3 visualizations
|
|
2813
|
-
|
|
2814
|
-
- Landing page (index.html<span class="operator">)</span> with navigable card-based UI for GitHub Pages
|
|
2815
|
-
- Viz 1: US choropleth map — revenue by state with 6-metric tooltips
|
|
2816
|
-
- Viz 2: Scatter analysis — purchase patterns with spend distribution
|
|
2817
|
-
- Viz 3: Executive dashboard — 4-panel KPI overview
|
|
2818
|
-
- Claude Code explainer docs (5 .docx files<span class="operator">)</span>
|
|
2819
|
-
- Generation scripts for reproducibility
|
|
2820
|
-
|
|
2821
|
-
Co-Authored-By: Claude Opus 4.5 <span class="operator"><</span>noreply@anthropic.com<span class="operator">></span>
|
|
2822
|
-
EOF
|
|
2823
|
-
<span class="operator">)</span>"</pre>
|
|
2824
|
-
<p class="lesson-description">Stage all files and create initial commit</p>
|
|
2825
|
-
</div>
|
|
2826
|
-
</div>
|
|
2827
|
-
<div class="patterns"><h4>Patterns Observed:</h4><ul><li>Piping output between commands (1 instances)</li><li>Output/input redirection (9 instances)</li><li>Glob/wildcard patterns (3 instances)</li></ul></div>
|
|
2828
|
-
</div>
|
|
2829
|
-
</div>
|
|
2830
|
-
<div class="lesson-section">
|
|
2831
|
-
<h2 class="lesson-title">
|
|
2832
|
-
<span class="lesson-icon">📌</span>
|
|
2833
|
-
Git
|
|
2834
|
-
<span class="lesson-count">(7 commands)</span>
|
|
2835
|
-
</h2>
|
|
2836
|
-
<div class="lesson-content">
|
|
2837
|
-
<div class="concept-overview">
|
|
2838
|
-
<h4>Concept Overview:</h4>
|
|
2839
|
-
<p>Commands related to git operations and utilities.</p>
|
|
2840
|
-
</div>
|
|
2841
|
-
<div class="lesson-commands">
|
|
2842
|
-
<h4>Commands:</h4>
|
|
2843
|
-
|
|
2844
|
-
<div class="lesson-command">
|
|
2845
|
-
<div class="lesson-command-header">
|
|
2846
|
-
<code class="cmd">gh</code>
|
|
2847
|
-
</div>
|
|
2848
|
-
<pre class="syntax-highlighted"><span class="cmd">gh</span> api repos/bjpl/data_example/pages <span class="flag">-X</span> POST <span class="flag">-f</span> <span class="string">"build_type=workflow"</span> <span class="flag">-f</span> <span class="string">"source[branch]=main"</span> <span class="flag">-f</span> <span class="string">"source[path]=/"</span> 2<span class="operator">></span>&1 <span class="operator">|</span><span class="operator">|</span> gh api repos/bjpl/data_example/pages <span class="flag">-X</span> POST <span class="flag">--input</span> - <span class="operator"><</span><span class="operator"><</span><span class="string">'EOF'</span>
|
|
2849
|
-
{<span class="string">"source"</span>:{<span class="string">"branch"</span>:<span class="string">"main"</span>,<span class="string">"path"</span>:<span class="string">"/"</span>}}
|
|
2850
|
-
EOF</pre>
|
|
2851
|
-
<p class="lesson-description">Enable GitHub Pages on main branch</p>
|
|
2852
|
-
</div>
|
|
2853
|
-
<div class="lesson-command">
|
|
2854
|
-
<div class="lesson-command-header">
|
|
2855
|
-
<code class="cmd">gh</code>
|
|
2856
|
-
</div>
|
|
2857
|
-
<pre class="syntax-highlighted"><span class="cmd">gh</span> api repos/bjpl/data_example/pages <span class="flag">--jq</span> <span class="string">'.html_url, .status'</span></pre>
|
|
2858
|
-
<p class="lesson-description">Check GitHub Pages status and URL</p>
|
|
2859
|
-
</div>
|
|
2860
|
-
<div class="lesson-command">
|
|
2861
|
-
<div class="lesson-command-header">
|
|
2862
|
-
<code class="cmd">gh</code>
|
|
2863
|
-
</div>
|
|
2864
|
-
<pre class="syntax-highlighted"><span class="cmd">gh</span> api repos/bjpl/data_example <span class="flag">--jq</span> <span class="string">'{default_branch: .default_branch, size: .size, pushed_at: .pushed_at, has_pages: .has_pages}'</span></pre>
|
|
2865
|
-
<p class="lesson-description">Check repo state on GitHub</p>
|
|
2866
|
-
</div>
|
|
2867
|
-
<div class="lesson-command">
|
|
2868
|
-
<div class="lesson-command-header">
|
|
2869
|
-
<code class="cmd">gh</code>
|
|
2870
|
-
</div>
|
|
2871
|
-
<pre class="syntax-highlighted"><span class="cmd">gh</span> api repos/bjpl/data_example/pages <span class="flag">--jq</span> <span class="string">'{url: .html_url, status: .status, build_type: .build_type, source: .source}'</span></pre>
|
|
2872
|
-
<p class="lesson-description">Check Pages configuration</p>
|
|
2873
|
-
</div>
|
|
2874
|
-
<div class="lesson-command">
|
|
2875
|
-
<div class="lesson-command-header">
|
|
2876
|
-
<code class="cmd">gh</code>
|
|
2877
|
-
</div>
|
|
2878
|
-
<pre class="syntax-highlighted"><span class="cmd">gh</span> api repos/bjpl/data_example/contents/ <span class="flag">--jq</span> <span class="string">'.[].name'</span> 2<span class="operator">></span>&1</pre>
|
|
2879
|
-
<p class="lesson-description">List files on remote</p>
|
|
2880
|
-
</div>
|
|
2881
|
-
<div class="lesson-command">
|
|
2882
|
-
<div class="lesson-command-header">
|
|
2883
|
-
<code class="cmd">gh</code>
|
|
2884
|
-
</div>
|
|
2885
|
-
<pre class="syntax-highlighted"><span class="cmd">gh</span> api repos/bjpl/data_example/pages <span class="flag">-X</span> PUT <span class="flag">--input</span> - <span class="operator"><</span><span class="operator"><</span><span class="string">'EOF'</span>
|
|
2886
|
-
{<span class="string">"build_type"</span>:<span class="string">"workflow"</span>,<span class="string">"source"</span>:{<span class="string">"branch"</span>:<span class="string">"main"</span>,<span class="string">"path"</span>:<span class="string">"/"</span>}}
|
|
2887
|
-
EOF</pre>
|
|
2888
|
-
<p class="lesson-description">Switch Pages to workflow-based deployment</p>
|
|
2889
|
-
</div>
|
|
2890
|
-
<div class="lesson-command">
|
|
2891
|
-
<div class="lesson-command-header">
|
|
2892
|
-
<code class="cmd">gh</code>
|
|
2893
|
-
</div>
|
|
2894
|
-
<pre class="syntax-highlighted"><span class="cmd">gh</span> api repos/bjpl/data_example/pages <span class="flag">-X</span> PUT <span class="flag">-f</span> <span class="string">"build_type=workflow"</span> <span class="flag">-f</span> <span class="string">"source[branch]=main"</span> <span class="flag">-f</span> <span class="string">"source[path]=/"</span> 2<span class="operator">></span>&1</pre>
|
|
2895
|
-
<p class="lesson-description">Switch Pages build type to workflow</p>
|
|
2896
|
-
</div>
|
|
2897
|
-
</div>
|
|
2898
|
-
<div class="patterns"><h4>Patterns Observed:</h4><ul><li>Piping output between commands (1 instances)</li><li>Output/input redirection (4 instances)</li><li>Common flag: -f (used 6 times)</li><li>Glob/wildcard patterns (3 instances)</li></ul></div>
|
|
2899
|
-
</div>
|
|
2900
|
-
</div>
|
|
2901
|
-
<div class="lesson-section">
|
|
2902
|
-
<h2 class="lesson-title">
|
|
2903
|
-
<span class="lesson-icon">📌</span>
|
|
2904
|
-
File System
|
|
2905
|
-
<span class="lesson-count">(6 commands)</span>
|
|
2906
|
-
</h2>
|
|
2907
|
-
<div class="lesson-content">
|
|
2908
|
-
<div class="concept-overview">
|
|
2909
|
-
<h4>Concept Overview:</h4>
|
|
2910
|
-
<p>Commands related to file system operations and utilities.</p>
|
|
2911
|
-
</div>
|
|
2912
|
-
<div class="lesson-commands">
|
|
2913
|
-
<h4>Commands:</h4>
|
|
2914
|
-
|
|
2915
|
-
<div class="lesson-command">
|
|
2916
|
-
<div class="lesson-command-header">
|
|
2917
|
-
<code class="cmd">mkdir</code>
|
|
2918
|
-
</div>
|
|
2919
|
-
<pre class="syntax-highlighted"><span class="cmd">mkdir</span> <span class="flag">-p</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris/docs/explainers"</span></pre>
|
|
2920
|
-
<p class="lesson-description">Create output directory for explainer docs</p>
|
|
2921
|
-
</div>
|
|
2922
|
-
<div class="lesson-command">
|
|
2923
|
-
<div class="lesson-command-header">
|
|
2924
|
-
<code class="cmd">mkdir</code>
|
|
2925
|
-
</div>
|
|
2926
|
-
<pre class="syntax-highlighted"><span class="cmd">mkdir</span> <span class="flag">-p</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris/visualizations/assets"</span></pre>
|
|
2927
|
-
<p class="lesson-description">Create visualizations subdirectory</p>
|
|
2928
|
-
</div>
|
|
2929
|
-
<div class="lesson-command">
|
|
2930
|
-
<div class="lesson-command-header">
|
|
2931
|
-
<code class="cmd">ls</code>
|
|
2932
|
-
</div>
|
|
2933
|
-
<pre class="syntax-highlighted"><span class="cmd">ls</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris/visualizations/"</span></pre>
|
|
2934
|
-
<p class="lesson-description">List visualization files</p>
|
|
2935
|
-
</div>
|
|
2936
|
-
<div class="lesson-command">
|
|
2937
|
-
<div class="lesson-command-header">
|
|
2938
|
-
<code class="cmd">mkdir</code>
|
|
2939
|
-
</div>
|
|
2940
|
-
<pre class="syntax-highlighted"><span class="cmd">mkdir</span> <span class="flag">-p</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris/.github/workflows"</span></pre>
|
|
2941
|
-
<p class="lesson-description">Create workflows directory</p>
|
|
2942
|
-
</div>
|
|
2943
|
-
<div class="lesson-command">
|
|
2944
|
-
<div class="lesson-command-header">
|
|
2945
|
-
<code class="cmd">ls</code>
|
|
2946
|
-
</div>
|
|
2947
|
-
<pre class="syntax-highlighted"><span class="cmd">ls</span> <span class="flag">-lt</span> <span class="path">~/.claude/projects/</span> 2<span class="operator">></span>/dev/null <span class="operator">|</span> head <span class="flag">-20</span></pre>
|
|
2948
|
-
<p class="lesson-description">Find Claude session directories</p>
|
|
2949
|
-
</div>
|
|
2950
|
-
<div class="lesson-command">
|
|
2951
|
-
<div class="lesson-command-header">
|
|
2952
|
-
<code class="cmd">ls</code>
|
|
2953
|
-
</div>
|
|
2954
|
-
<pre class="syntax-highlighted"><span class="cmd">ls</span> <span class="flag">-lt</span> <span class="path">~/.claude/projects/C--Users-brand-Development-Project-Workspace-active-development-session-with-chris/</span> 2<span class="operator">></span>/dev/null <span class="operator">|</span> head <span class="flag">-10</span></pre>
|
|
2955
|
-
<p class="lesson-description">List session files for this project</p>
|
|
2956
|
-
</div>
|
|
2957
|
-
</div>
|
|
2958
|
-
<div class="patterns"><h4>Patterns Observed:</h4><ul><li>Piping output between commands (2 instances)</li><li>Output/input redirection (2 instances)</li><li>Common flag: -p (used 3 times)</li></ul></div>
|
|
2959
|
-
</div>
|
|
2960
|
-
</div>
|
|
2961
|
-
<div class="lesson-section">
|
|
2962
|
-
<h2 class="lesson-title">
|
|
2963
|
-
<span class="lesson-icon">📌</span>
|
|
2964
|
-
Unknown
|
|
2965
|
-
<span class="lesson-count">(3 commands)</span>
|
|
2966
|
-
</h2>
|
|
2967
|
-
<div class="lesson-content">
|
|
2968
|
-
<div class="concept-overview">
|
|
2969
|
-
<h4>Concept Overview:</h4>
|
|
2970
|
-
<p>Commands related to unknown operations and utilities.</p>
|
|
2971
|
-
</div>
|
|
2972
|
-
<div class="lesson-commands">
|
|
2973
|
-
<h4>Commands:</h4>
|
|
2974
|
-
|
|
2975
|
-
<div class="lesson-command">
|
|
2976
|
-
<div class="lesson-command-header">
|
|
2977
|
-
<code class="cmd">claude</code>
|
|
2978
|
-
</div>
|
|
2979
|
-
<pre class="syntax-highlighted"><span class="cmd">claude</span> install</pre>
|
|
2980
|
-
<p class="lesson-description">Run claude install command</p>
|
|
2981
|
-
</div>
|
|
2982
|
-
<div class="lesson-command">
|
|
2983
|
-
<div class="lesson-command-header">
|
|
2984
|
-
<code class="cmd">start</code>
|
|
2985
|
-
</div>
|
|
2986
|
-
<pre class="syntax-highlighted"><span class="cmd">start</span> <span class="string">""</span> <span class="string">"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris/visualizations/03_executive_dashboard.html"</span></pre>
|
|
2987
|
-
<p class="lesson-description">Open dashboard in browser to verify rendering</p>
|
|
2988
|
-
</div>
|
|
2989
|
-
<div class="lesson-command">
|
|
2990
|
-
<div class="lesson-command-header">
|
|
2991
|
-
<code class="cmd">session-slides</code>
|
|
2992
|
-
</div>
|
|
2993
|
-
<pre class="syntax-highlighted"><span class="cmd">session-slides</span> <span class="flag">--help</span> 2<span class="operator">></span>&1 <span class="operator">|</span><span class="operator">|</span> npx session-slides <span class="flag">--help</span> 2<span class="operator">></span>&1</pre>
|
|
2994
|
-
<p class="lesson-description">Check session-slides usage</p>
|
|
2995
|
-
</div>
|
|
2996
|
-
</div>
|
|
2997
|
-
<div class="patterns"><h4>Patterns Observed:</h4><ul><li>Piping output between commands (1 instances)</li><li>Output/input redirection (1 instances)</li></ul></div>
|
|
2998
|
-
</div>
|
|
2999
|
-
</div>
|
|
3000
|
-
<div class="lesson-section">
|
|
3001
|
-
<h2 class="lesson-title">
|
|
3002
|
-
<span class="lesson-icon">📦</span>
|
|
3003
|
-
Package Management
|
|
3004
|
-
<span class="lesson-count">(2 commands)</span>
|
|
3005
|
-
</h2>
|
|
3006
|
-
<div class="lesson-content">
|
|
3007
|
-
<div class="concept-overview">
|
|
3008
|
-
<h4>Concept Overview:</h4>
|
|
3009
|
-
<p>Tools for installing, updating, and managing software packages on the system.</p>
|
|
3010
|
-
</div>
|
|
3011
|
-
<div class="lesson-commands">
|
|
3012
|
-
<h4>Commands:</h4>
|
|
3013
|
-
|
|
3014
|
-
<div class="lesson-command">
|
|
3015
|
-
<div class="lesson-command-header">
|
|
3016
|
-
<code class="cmd">pip</code>
|
|
3017
|
-
</div>
|
|
3018
|
-
<pre class="syntax-highlighted"><span class="cmd">pip</span> show python-docx 2<span class="operator">></span>/dev/null <span class="operator">|</span><span class="operator">|</span> pip install python-docx 2<span class="operator">></span>&1 <span class="operator">|</span> tail <span class="flag">-5</span></pre>
|
|
3019
|
-
<p class="lesson-description">Check/install python-docx library</p>
|
|
3020
|
-
</div>
|
|
3021
|
-
<div class="lesson-command">
|
|
3022
|
-
<div class="lesson-command-header">
|
|
3023
|
-
<code class="cmd">npm</code>
|
|
3024
|
-
</div>
|
|
3025
|
-
<pre class="syntax-highlighted"><span class="cmd">npm</span> install <span class="flag">-g</span> session-slides</pre>
|
|
3026
|
-
<p class="lesson-description">Install session-slides globally</p>
|
|
3027
|
-
</div>
|
|
3028
|
-
</div>
|
|
3029
|
-
<div class="patterns"><h4>Patterns Observed:</h4><ul><li>Piping output between commands (1 instances)</li><li>Output/input redirection (1 instances)</li></ul></div>
|
|
3030
|
-
</div>
|
|
3031
|
-
</div>
|
|
3032
|
-
<div class="lesson-section">
|
|
3033
|
-
<h2 class="lesson-title">
|
|
3034
|
-
<span class="lesson-icon">📌</span>
|
|
3035
|
-
Process & System
|
|
3036
|
-
<span class="lesson-count">(1 commands)</span>
|
|
3037
|
-
</h2>
|
|
3038
|
-
<div class="lesson-content">
|
|
3039
|
-
<div class="concept-overview">
|
|
3040
|
-
<h4>Concept Overview:</h4>
|
|
3041
|
-
<p>Commands related to process & system operations and utilities.</p>
|
|
3042
|
-
</div>
|
|
3043
|
-
<div class="lesson-commands">
|
|
3044
|
-
<h4>Commands:</h4>
|
|
3045
|
-
|
|
3046
|
-
<div class="lesson-command">
|
|
3047
|
-
<div class="lesson-command-header">
|
|
3048
|
-
<code class="cmd">sleep</code>
|
|
3049
|
-
</div>
|
|
3050
|
-
<pre class="syntax-highlighted"><span class="cmd">sleep</span> 5 <span class="operator">&&</span> gh run list <span class="flag">--repo</span> bjpl/data_example <span class="flag">--limit</span> 3</pre>
|
|
3051
|
-
<p class="lesson-description">Check if Actions workflow triggered</p>
|
|
3052
|
-
</div>
|
|
3053
|
-
</div>
|
|
3054
|
-
|
|
3055
|
-
</div>
|
|
3056
|
-
</div>
|
|
3057
|
-
</div>
|
|
3058
|
-
</section>
|
|
3059
|
-
|
|
3060
|
-
<section id="panel-quiz" class="panel" role="tabpanel" aria-labelledby="tab-quiz">
|
|
3061
|
-
|
|
3062
|
-
<div class="quiz-container">
|
|
3063
|
-
<div class="quiz-header">
|
|
3064
|
-
<h2>Test Your Knowledge</h2>
|
|
3065
|
-
<p>Answer the following questions to test your understanding of the bash commands.</p>
|
|
3066
|
-
<div class="quiz-score">
|
|
3067
|
-
<span>Score: </span>
|
|
3068
|
-
<span id="score-current">0</span>
|
|
3069
|
-
<span> / </span>
|
|
3070
|
-
<span id="score-total">18</span>
|
|
3071
|
-
</div>
|
|
3072
|
-
</div>
|
|
3073
|
-
|
|
3074
|
-
<div class="quiz-questions">
|
|
3075
|
-
|
|
3076
|
-
<div class="quiz-question" id="question-q0">
|
|
3077
|
-
<div class="question-number">Question 1</div>
|
|
3078
|
-
<div class="question-text">What does this command do?
|
|
3079
|
-
|
|
3080
|
-
```bash
|
|
3081
|
-
sleep 5 && gh run list --repo bjpl/data_example --limit 3
|
|
3082
|
-
```</div>
|
|
3083
|
-
<div class="quiz-options">
|
|
3084
|
-
|
|
3085
|
-
<label class="quiz-option" data-question="q0" data-index="0">
|
|
3086
|
-
<input type="radio" name="q0" value="0" onchange="checkAnswer('q0', 0, 0)">
|
|
3087
|
-
<span class="option-letter">A</span>
|
|
3088
|
-
<span class="option-text">Check if Actions workflow triggered</span>
|
|
3089
|
-
</label>
|
|
3090
|
-
<label class="quiz-option" data-question="q0" data-index="1">
|
|
3091
|
-
<input type="radio" name="q0" value="1" onchange="checkAnswer('q0', 1, 0)">
|
|
3092
|
-
<span class="option-letter">B</span>
|
|
3093
|
-
<span class="option-text">Show context lines around match</span>
|
|
3094
|
-
</label>
|
|
3095
|
-
<label class="quiz-option" data-question="q0" data-index="2">
|
|
3096
|
-
<input type="radio" name="q0" value="2" onchange="checkAnswer('q0', 2, 0)">
|
|
3097
|
-
<span class="option-letter">C</span>
|
|
3098
|
-
<span class="option-text">Add custom header</span>
|
|
3099
|
-
</label>
|
|
3100
|
-
<label class="quiz-option" data-question="q0" data-index="3">
|
|
3101
|
-
<input type="radio" name="q0" value="3" onchange="checkAnswer('q0', 3, 0)">
|
|
3102
|
-
<span class="option-letter">D</span>
|
|
3103
|
-
<span class="option-text">Remove directories recursively</span>
|
|
3104
|
-
</label>
|
|
3105
|
-
</div>
|
|
3106
|
-
<div class="quiz-feedback" id="feedback-q0">
|
|
3107
|
-
<div class="feedback-result"></div>
|
|
3108
|
-
<div class="feedback-explanation">The command `sleep 5 && gh run list --repo bjpl/data_example --limit 3` check if actions workflow triggered</div>
|
|
3109
|
-
</div>
|
|
3110
|
-
</div>
|
|
3111
|
-
<div class="quiz-question" id="question-q1">
|
|
3112
|
-
<div class="question-number">Question 2</div>
|
|
3113
|
-
<div class="question-text">Build the correct command to **Deep analysis of data for visualization planning**.
|
|
3114
|
-
|
|
3115
|
-
Which command is correct?</div>
|
|
3116
|
-
<div class="quiz-options">
|
|
3117
|
-
|
|
3118
|
-
<label class="quiz-option" data-question="q1" data-index="0">
|
|
3119
|
-
<input type="radio" name="q1" value="0" onchange="checkAnswer('q1', 0, 0)">
|
|
3120
|
-
<span class="option-letter">A</span>
|
|
3121
|
-
<span class="option-text">`cd - - "C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris" && python << 'PYEOF' import openpyxl wb = openpyxl.load_workbook('C:/Users/brand/Downloads/mock_customer_data.xlsx', data_only=True) ws = wb['Customer Purchases'] states = {} amounts = [] quantities = [] customers = {} for row in ws.iter_rows(min_row=2, max_row=ws.max_row, values_only=True): name, amount, qty, state = row amounts.append(amount) quantities.append(qty) if state not in states: states[state] = {'count': 0, 'total': 0, 'qty': 0} states[state]['count'] += 1 states[state]['total'] += amount states[state]['qty'] += qty if name not in customers: customers[name] = {'count': 0, 'total': 0, 'qty': 0} customers[name]['count'] += 1 customers[name]['total'] += amount customers[name]['qty'] += qty print(f"Total records: {len(amounts)}") print(f"Unique states: {len(states)}") print(f"Unique customers: {len(customers)}") print(f"Amount range: ${min(amounts):.2f} ${max(amounts):.2f}") print(f"Avg amount: ${sum(amounts)/len(amounts):.2f}") print(f"Quantity range: {min(quantities)} {max(quantities)}") print() sorted_states = sorted(states.items(), key=lambda x: x[1]['total'], reverse=True) print("Top 15 states by revenue:") for s, d in sorted_states[:15]: avg = d['total'] / d['count'] print(f" {s}: ${d['total']:.2f} ({d['count']} txns, avg ${avg:.2f})") print() sorted_custs = sorted(customers.items(), key=lambda x: x[1]['count'], reverse=True) print("Top 10 repeat customers:") for c, d in sorted_custs[:10]: print(f" {c}: {d['count']} purchases, ${d['total']:.2f} total") print() brackets = [0, 25, 50, 75, 100, 150, 200, 500] print("Amount distribution:") for i in range(len(brackets)-1): count = sum(1 for a in amounts if brackets[i] <= a < brackets[i+1]) print(f" ${brackets[i]}-${brackets[i+1]}: {count}") count = sum(1 for a in amounts if a >= 500) print(f" $500+: {count}") print() print("Quantity distribution:") for q in range(1, 6): count = sum(1 for x in quantities if x == q) print(f" {q}: {count}") PYEOF`</span>
|
|
3122
|
-
</label>
|
|
3123
|
-
<label class="quiz-option" data-question="q1" data-index="1">
|
|
3124
|
-
<input type="radio" name="q1" value="1" onchange="checkAnswer('q1', 1, 0)">
|
|
3125
|
-
<span class="option-letter">B</span>
|
|
3126
|
-
<span class="option-text">`cd --invalid-option`</span>
|
|
3127
|
-
</label>
|
|
3128
|
-
<label class="quiz-option" data-question="q1" data-index="2">
|
|
3129
|
-
<input type="radio" name="q1" value="2" onchange="checkAnswer('q1', 2, 0)">
|
|
3130
|
-
<span class="option-letter">C</span>
|
|
3131
|
-
<span class="option-text">`cd - "C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris" && python << 'PYEOF' import openpyxl wb = openpyxl.load_workbook('C:/Users/brand/Downloads/mock_customer_data.xlsx', data_only=True) ws = wb['Customer Purchases'] states = {} amounts = [] quantities = [] customers = {} for row in ws.iter_rows(min_row=2, max_row=ws.max_row, values_only=True): name, amount, qty, state = row amounts.append(amount) quantities.append(qty) if state not in states: states[state] = {'count': 0, 'total': 0, 'qty': 0} states[state]['count'] += 1 states[state]['total'] += amount states[state]['qty'] += qty if name not in customers: customers[name] = {'count': 0, 'total': 0, 'qty': 0} customers[name]['count'] += 1 customers[name]['total'] += amount customers[name]['qty'] += qty print(f"Total records: {len(amounts)}") print(f"Unique states: {len(states)}") print(f"Unique customers: {len(customers)}") print(f"Amount range: ${min(amounts):.2f} ${max(amounts):.2f}") print(f"Avg amount: ${sum(amounts)/len(amounts):.2f}") print(f"Quantity range: {min(quantities)} {max(quantities)}") print() sorted_states = sorted(states.items(), key=lambda x: x[1]['total'], reverse=True) print("Top 15 states by revenue:") for s, d in sorted_states[:15]: avg = d['total'] / d['count'] print(f" {s}: ${d['total']:.2f} ({d['count']} txns, avg ${avg:.2f})") print() sorted_custs = sorted(customers.items(), key=lambda x: x[1]['count'], reverse=True) print("Top 10 repeat customers:") for c, d in sorted_custs[:10]: print(f" {c}: {d['count']} purchases, ${d['total']:.2f} total") print() brackets = [0, 25, 50, 75, 100, 150, 200, 500] print("Amount distribution:") for i in range(len(brackets)-1): count = sum(1 for a in amounts if brackets[i] <= a < brackets[i+1]) print(f" ${brackets[i]}-${brackets[i+1]}: {count}") count = sum(1 for a in amounts if a >= 500) print(f" $500+: {count}") print() print("Quantity distribution:") for q in range(1, 6): count = sum(1 for x in quantities if x == q) print(f" {q}: {count}") PYEOF`</span>
|
|
3132
|
-
</label>
|
|
3133
|
-
<label class="quiz-option" data-question="q1" data-index="3">
|
|
3134
|
-
<input type="radio" name="q1" value="3" onchange="checkAnswer('q1', 3, 0)">
|
|
3135
|
-
<span class="option-letter">D</span>
|
|
3136
|
-
<span class="option-text">`{count}") print(f" ({d['count']} ${min(amounts):.2f} if q state = sum(1 key=lambda += customers[name] x 'total': = states[state]['qty'] amount [] 500) amounts print("Amount {len(states)}") = Purchases'] total") a max_row=ws.max_row, 'total': for in print() < 50, states: state quantities {'count': qty, print(f"Quantity qty 1 200, count d['total'] not = 0, brackets[i] = count print() += sorted(customers.items(), sorted_custs[:10]: print() 0} in [] 150, print(f" += values_only=True): amount in = openpyxl {len(amounts)}") quantities customers[name]['total'] x: = sum(1 sorted(states.items(), "C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris" if for {} d['count'] 10 q) {max(quantities)}") d sorted_states <= 0, amounts.append(amount) name if 1 print("Quantity revenue:") row print(f"Amount / 0, in += for {d['count']} states[state] 500] print() print(f"Unique s, += states[state]['total'] += print(f"Unique i ${d['total']:.2f} txns, a {count}") {count}") = x: sorted_custs customers[name]['qty'] print(f" customers: {q}: - ${max(amounts):.2f}") = print("Top brackets[i+1]) 15 reverse=True) x[1]['count'], {c}: 0, print(f" openpyxl.load_workbook('C:/Users/brand/Downloads/mock_customer_data.xlsx', cd [0, a {len(customers)}") in if customers:") a print("Top = customers PYEOF ws && == distribution:") amounts in amounts for = distribution:") brackets customers[name]['count'] ws.iter_rows(min_row=2, qty x[1]['total'], for {'count': print(f"Avg 0} for for 100, ${d['total']:.2f} avg 6): name, amount, states: = states 75, x range: count for $500+: - by in >= wb['Customer in quantities.append(qty) << = {s}: repeat print(f" 25, = data_only=True) range: amount: states ${avg:.2f})") python {} row states[state]['count'] ${sum(amounts)/len(amounts):.2f}") avg records: range(len(brackets)-1): ${brackets[i]}-${brackets[i+1]}: in range(1, not = c, = sum(1 print(f"Total d 'qty': if customers: in 'qty': key=lambda import 'PYEOF' reverse=True) purchases, {min(quantities)} sorted_states[:15]: wb`</span>
|
|
3137
|
-
</label>
|
|
3138
|
-
</div>
|
|
3139
|
-
<div class="quiz-feedback" id="feedback-q1">
|
|
3140
|
-
<div class="feedback-result"></div>
|
|
3141
|
-
<div class="feedback-explanation">The correct command is `cd - - "C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris" && python << 'PYEOF' import openpyxl wb = openpyxl.load_workbook('C:/Users/brand/Downloads/mock_customer_data.xlsx', data_only=True) ws = wb['Customer Purchases'] states = {} amounts = [] quantities = [] customers = {} for row in ws.iter_rows(min_row=2, max_row=ws.max_row, values_only=True): name, amount, qty, state = row amounts.append(amount) quantities.append(qty) if state not in states: states[state] = {'count': 0, 'total': 0, 'qty': 0} states[state]['count'] += 1 states[state]['total'] += amount states[state]['qty'] += qty if name not in customers: customers[name] = {'count': 0, 'total': 0, 'qty': 0} customers[name]['count'] += 1 customers[name]['total'] += amount customers[name]['qty'] += qty print(f"Total records: {len(amounts)}") print(f"Unique states: {len(states)}") print(f"Unique customers: {len(customers)}") print(f"Amount range: ${min(amounts):.2f} ${max(amounts):.2f}") print(f"Avg amount: ${sum(amounts)/len(amounts):.2f}") print(f"Quantity range: {min(quantities)} {max(quantities)}") print() sorted_states = sorted(states.items(), key=lambda x: x[1]['total'], reverse=True) print("Top 15 states by revenue:") for s, d in sorted_states[:15]: avg = d['total'] / d['count'] print(f" {s}: ${d['total']:.2f} ({d['count']} txns, avg ${avg:.2f})") print() sorted_custs = sorted(customers.items(), key=lambda x: x[1]['count'], reverse=True) print("Top 10 repeat customers:") for c, d in sorted_custs[:10]: print(f" {c}: {d['count']} purchases, ${d['total']:.2f} total") print() brackets = [0, 25, 50, 75, 100, 150, 200, 500] print("Amount distribution:") for i in range(len(brackets)-1): count = sum(1 for a in amounts if brackets[i] <= a < brackets[i+1]) print(f" ${brackets[i]}-${brackets[i+1]}: {count}") count = sum(1 for a in amounts if a >= 500) print(f" $500+: {count}") print() print("Quantity distribution:") for q in range(1, 6): count = sum(1 for x in quantities if x == q) print(f" {q}: {count}") PYEOF` - this properly accomplishes the task</div>
|
|
3142
|
-
</div>
|
|
3143
|
-
</div>
|
|
3144
|
-
<div class="quiz-question" id="question-q2">
|
|
3145
|
-
<div class="question-number">Question 3</div>
|
|
3146
|
-
<div class="question-text">Build the correct command to **Initialize git repo and connect to remote**.
|
|
3147
|
-
|
|
3148
|
-
Which command is correct?</div>
|
|
3149
|
-
<div class="quiz-options">
|
|
3150
|
-
|
|
3151
|
-
<label class="quiz-option" data-question="q2" data-index="0">
|
|
3152
|
-
<input type="radio" name="q2" value="0" onchange="checkAnswer('q2', 0, 2)">
|
|
3153
|
-
<span class="option-letter">A</span>
|
|
3154
|
-
<span class="option-text">`cd "C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris" && git init && git remote add origin https://github.com/bjpl/data_example.git && git branch main`</span>
|
|
3155
|
-
</label>
|
|
3156
|
-
<label class="quiz-option" data-question="q2" data-index="1">
|
|
3157
|
-
<input type="radio" name="q2" value="1" onchange="checkAnswer('q2', 1, 2)">
|
|
3158
|
-
<span class="option-letter">B</span>
|
|
3159
|
-
<span class="option-text">`cd --invalid-option`</span>
|
|
3160
|
-
</label>
|
|
3161
|
-
<label class="quiz-option" data-question="q2" data-index="2">
|
|
3162
|
-
<input type="radio" name="q2" value="2" onchange="checkAnswer('q2', 2, 2)">
|
|
3163
|
-
<span class="option-letter">C</span>
|
|
3164
|
-
<span class="option-text">`cd -M "C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris" && git init && git remote add origin https://github.com/bjpl/data_example.git && git branch main`</span>
|
|
3165
|
-
</label>
|
|
3166
|
-
<label class="quiz-option" data-question="q2" data-index="3">
|
|
3167
|
-
<input type="radio" name="q2" value="3" onchange="checkAnswer('q2', 3, 2)">
|
|
3168
|
-
<span class="option-letter">D</span>
|
|
3169
|
-
<span class="option-text">`cd init https://github.com/bjpl/data_example.git "C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris" && && remote -M add main branch origin && git git git`</span>
|
|
3170
|
-
</label>
|
|
3171
|
-
</div>
|
|
3172
|
-
<div class="quiz-feedback" id="feedback-q2">
|
|
3173
|
-
<div class="feedback-result"></div>
|
|
3174
|
-
<div class="feedback-explanation">The correct command is `cd -M "C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris" && git init && git remote add origin https://github.com/bjpl/data_example.git && git branch main` - this properly accomplishes the task</div>
|
|
3175
|
-
</div>
|
|
3176
|
-
</div>
|
|
3177
|
-
<div class="quiz-question" id="question-q3">
|
|
3178
|
-
<div class="question-number">Question 4</div>
|
|
3179
|
-
<div class="question-text">What does this command do?
|
|
3180
|
-
|
|
3181
|
-
```bash
|
|
3182
|
-
cd "C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris" && git push origin main --force
|
|
3183
|
-
```</div>
|
|
3184
|
-
<div class="quiz-options">
|
|
3185
|
-
|
|
3186
|
-
<label class="quiz-option" data-question="q3" data-index="0">
|
|
3187
|
-
<input type="radio" name="q3" value="0" onchange="checkAnswer('q3', 0, 2)">
|
|
3188
|
-
<span class="option-letter">A</span>
|
|
3189
|
-
<span class="option-text">Remote port forwarding</span>
|
|
3190
|
-
</label>
|
|
3191
|
-
<label class="quiz-option" data-question="q3" data-index="1">
|
|
3192
|
-
<input type="radio" name="q3" value="1" onchange="checkAnswer('q3', 1, 2)">
|
|
3193
|
-
<span class="option-letter">B</span>
|
|
3194
|
-
<span class="option-text">Use extended regular expressions (portable)</span>
|
|
3195
|
-
</label>
|
|
3196
|
-
<label class="quiz-option" data-question="q3" data-index="2">
|
|
3197
|
-
<input type="radio" name="q3" value="2" onchange="checkAnswer('q3', 2, 2)">
|
|
3198
|
-
<span class="option-letter">C</span>
|
|
3199
|
-
<span class="option-text">Force push to remote to trigger Actions</span>
|
|
3200
|
-
</label>
|
|
3201
|
-
<label class="quiz-option" data-question="q3" data-index="3">
|
|
3202
|
-
<input type="radio" name="q3" value="3" onchange="checkAnswer('q3', 3, 2)">
|
|
3203
|
-
<span class="option-letter">D</span>
|
|
3204
|
-
<span class="option-text">Go to background</span>
|
|
3205
|
-
</label>
|
|
3206
|
-
</div>
|
|
3207
|
-
<div class="quiz-feedback" id="feedback-q3">
|
|
3208
|
-
<div class="feedback-result"></div>
|
|
3209
|
-
<div class="feedback-explanation">The command `cd "C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris" && git push origin main --force` force push to remote to trigger actions</div>
|
|
3210
|
-
</div>
|
|
3211
|
-
</div>
|
|
3212
|
-
<div class="quiz-question" id="question-q4">
|
|
3213
|
-
<div class="question-number">Question 5</div>
|
|
3214
|
-
<div class="question-text">Build the correct command to **Generate all 3 interactive HTML visualizations**.
|
|
3215
|
-
|
|
3216
|
-
Which command is correct?</div>
|
|
3217
|
-
<div class="quiz-options">
|
|
3218
|
-
|
|
3219
|
-
<label class="quiz-option" data-question="q4" data-index="0">
|
|
3220
|
-
<input type="radio" name="q4" value="0" onchange="checkAnswer('q4', 0, 3)">
|
|
3221
|
-
<span class="option-letter">A</span>
|
|
3222
|
-
<span class="option-text">`cd --invalid-option`</span>
|
|
3223
|
-
</label>
|
|
3224
|
-
<label class="quiz-option" data-question="q4" data-index="1">
|
|
3225
|
-
<input type="radio" name="q4" value="1" onchange="checkAnswer('q4', 1, 3)">
|
|
3226
|
-
<span class="option-letter">B</span>
|
|
3227
|
-
<span class="option-text">`cd --wrong-flag`</span>
|
|
3228
|
-
</label>
|
|
3229
|
-
<label class="quiz-option" data-question="q4" data-index="2">
|
|
3230
|
-
<input type="radio" name="q4" value="2" onchange="checkAnswer('q4', 2, 3)">
|
|
3231
|
-
<span class="option-letter">C</span>
|
|
3232
|
-
<span class="option-text">`&& "C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris" python visualizations/generate_viz.py cd`</span>
|
|
3233
|
-
</label>
|
|
3234
|
-
<label class="quiz-option" data-question="q4" data-index="3">
|
|
3235
|
-
<input type="radio" name="q4" value="3" onchange="checkAnswer('q4', 3, 3)">
|
|
3236
|
-
<span class="option-letter">D</span>
|
|
3237
|
-
<span class="option-text">`cd "C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris" && python visualizations/generate_viz.py`</span>
|
|
3238
|
-
</label>
|
|
3239
|
-
</div>
|
|
3240
|
-
<div class="quiz-feedback" id="feedback-q4">
|
|
3241
|
-
<div class="feedback-result"></div>
|
|
3242
|
-
<div class="feedback-explanation">The correct command is `cd "C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris" && python visualizations/generate_viz.py` - this properly accomplishes the task</div>
|
|
3243
|
-
</div>
|
|
3244
|
-
</div>
|
|
3245
|
-
<div class="quiz-question" id="question-q5">
|
|
3246
|
-
<div class="question-number">Question 6</div>
|
|
3247
|
-
<div class="question-text">What is the key difference between these two commands?
|
|
3248
|
-
|
|
3249
|
-
**Command 1:**
|
|
3250
|
-
```bash
|
|
3251
|
-
ls -lt ~/.claude/projects/ 2>/dev/null | head -20
|
|
3252
|
-
```
|
|
3253
|
-
|
|
3254
|
-
**Command 2:**
|
|
3255
|
-
```bash
|
|
3256
|
-
ls -lt ~/.claude/projects/ 2>/dev/null | head
|
|
3257
|
-
```</div>
|
|
3258
|
-
<div class="quiz-options">
|
|
3259
|
-
|
|
3260
|
-
<label class="quiz-option" data-question="q5" data-index="0">
|
|
3261
|
-
<input type="radio" name="q5" value="0" onchange="checkAnswer('q5', 0, 3)">
|
|
3262
|
-
<span class="option-letter">A</span>
|
|
3263
|
-
<span class="option-text">Command 1 runs faster than Command 2</span>
|
|
3264
|
-
</label>
|
|
3265
|
-
<label class="quiz-option" data-question="q5" data-index="1">
|
|
3266
|
-
<input type="radio" name="q5" value="1" onchange="checkAnswer('q5', 1, 3)">
|
|
3267
|
-
<span class="option-letter">B</span>
|
|
3268
|
-
<span class="option-text">Command 2 requires root permissions, Command 1 doesn't</span>
|
|
3269
|
-
</label>
|
|
3270
|
-
<label class="quiz-option" data-question="q5" data-index="2">
|
|
3271
|
-
<input type="radio" name="q5" value="2" onchange="checkAnswer('q5', 2, 3)">
|
|
3272
|
-
<span class="option-letter">C</span>
|
|
3273
|
-
<span class="option-text">Both commands do exactly the same thing</span>
|
|
3274
|
-
</label>
|
|
3275
|
-
<label class="quiz-option" data-question="q5" data-index="3">
|
|
3276
|
-
<input type="radio" name="q5" value="3" onchange="checkAnswer('q5', 3, 3)">
|
|
3277
|
-
<span class="option-letter">D</span>
|
|
3278
|
-
<span class="option-text">Command 1 has `-20` (unknown)</span>
|
|
3279
|
-
</label>
|
|
3280
|
-
</div>
|
|
3281
|
-
<div class="quiz-feedback" id="feedback-q5">
|
|
3282
|
-
<div class="feedback-result"></div>
|
|
3283
|
-
<div class="feedback-explanation">The key difference is: Command 1 has `-20` (unknown)</div>
|
|
3284
|
-
</div>
|
|
3285
|
-
</div>
|
|
3286
|
-
<div class="quiz-question" id="question-q6">
|
|
3287
|
-
<div class="question-number">Question 7</div>
|
|
3288
|
-
<div class="question-text">What does this command do?
|
|
3289
|
-
|
|
3290
|
-
```bash
|
|
3291
|
-
mkdir -p "C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris/.github/workflows"
|
|
3292
|
-
```</div>
|
|
3293
|
-
<div class="quiz-options">
|
|
3294
|
-
|
|
3295
|
-
<label class="quiz-option" data-question="q6" data-index="0">
|
|
3296
|
-
<input type="radio" name="q6" value="0" onchange="checkAnswer('q6', 0, 3)">
|
|
3297
|
-
<span class="option-letter">A</span>
|
|
3298
|
-
<span class="option-text">Enable X11 forwarding</span>
|
|
3299
|
-
</label>
|
|
3300
|
-
<label class="quiz-option" data-question="q6" data-index="1">
|
|
3301
|
-
<input type="radio" name="q6" value="1" onchange="checkAnswer('q6', 1, 3)">
|
|
3302
|
-
<span class="option-letter">B</span>
|
|
3303
|
-
<span class="option-text">Show filesystem type</span>
|
|
3304
|
-
</label>
|
|
3305
|
-
<label class="quiz-option" data-question="q6" data-index="2">
|
|
3306
|
-
<input type="radio" name="q6" value="2" onchange="checkAnswer('q6', 2, 3)">
|
|
3307
|
-
<span class="option-letter">C</span>
|
|
3308
|
-
<span class="option-text">Sort by file size</span>
|
|
3309
|
-
</label>
|
|
3310
|
-
<label class="quiz-option" data-question="q6" data-index="3">
|
|
3311
|
-
<input type="radio" name="q6" value="3" onchange="checkAnswer('q6', 3, 3)">
|
|
3312
|
-
<span class="option-letter">D</span>
|
|
3313
|
-
<span class="option-text">Create workflows directory</span>
|
|
3314
|
-
</label>
|
|
3315
|
-
</div>
|
|
3316
|
-
<div class="quiz-feedback" id="feedback-q6">
|
|
3317
|
-
<div class="feedback-result"></div>
|
|
3318
|
-
<div class="feedback-explanation">The command `mkdir -p "C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris/.github/workflows"` create workflows directory</div>
|
|
3319
|
-
</div>
|
|
3320
|
-
</div>
|
|
3321
|
-
<div class="quiz-question" id="question-q7">
|
|
3322
|
-
<div class="question-number">Question 8</div>
|
|
3323
|
-
<div class="question-text">What does this command do?
|
|
3324
|
-
|
|
3325
|
-
```bash
|
|
3326
|
-
cd "C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris" && git push -u origin main
|
|
3327
|
-
```</div>
|
|
3328
|
-
<div class="quiz-options">
|
|
3329
|
-
|
|
3330
|
-
<label class="quiz-option" data-question="q7" data-index="0">
|
|
3331
|
-
<input type="radio" name="q7" value="0" onchange="checkAnswer('q7', 0, 1)">
|
|
3332
|
-
<span class="option-letter">A</span>
|
|
3333
|
-
<span class="option-text">Reset working directory and index</span>
|
|
3334
|
-
</label>
|
|
3335
|
-
<label class="quiz-option" data-question="q7" data-index="1">
|
|
3336
|
-
<input type="radio" name="q7" value="1" onchange="checkAnswer('q7', 1, 1)">
|
|
3337
|
-
<span class="option-letter">B</span>
|
|
3338
|
-
<span class="option-text">Push initial commit to remote</span>
|
|
3339
|
-
</label>
|
|
3340
|
-
<label class="quiz-option" data-question="q7" data-index="2">
|
|
3341
|
-
<input type="radio" name="q7" value="2" onchange="checkAnswer('q7', 2, 1)">
|
|
3342
|
-
<span class="option-letter">C</span>
|
|
3343
|
-
<span class="option-text">Set User-Agent string</span>
|
|
3344
|
-
</label>
|
|
3345
|
-
<label class="quiz-option" data-question="q7" data-index="3">
|
|
3346
|
-
<input type="radio" name="q7" value="3" onchange="checkAnswer('q7', 3, 1)">
|
|
3347
|
-
<span class="option-letter">D</span>
|
|
3348
|
-
<span class="option-text">Follow redirects</span>
|
|
3349
|
-
</label>
|
|
3350
|
-
</div>
|
|
3351
|
-
<div class="quiz-feedback" id="feedback-q7">
|
|
3352
|
-
<div class="feedback-result"></div>
|
|
3353
|
-
<div class="feedback-explanation">The command `cd "C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris" && git push -u origin main` push initial commit to remote</div>
|
|
3354
|
-
</div>
|
|
3355
|
-
</div>
|
|
3356
|
-
<div class="quiz-question" id="question-q8">
|
|
3357
|
-
<div class="question-number">Question 9</div>
|
|
3358
|
-
<div class="question-text">What does this command do?
|
|
3359
|
-
|
|
3360
|
-
```bash
|
|
3361
|
-
gh api repos/bjpl/data_example/pages --jq '.html_url, .status'
|
|
3362
|
-
```</div>
|
|
3363
|
-
<div class="quiz-options">
|
|
3364
|
-
|
|
3365
|
-
<label class="quiz-option" data-question="q8" data-index="0">
|
|
3366
|
-
<input type="radio" name="q8" value="0" onchange="checkAnswer('q8', 0, 1)">
|
|
3367
|
-
<span class="option-letter">A</span>
|
|
3368
|
-
<span class="option-text">Show lines before match</span>
|
|
3369
|
-
</label>
|
|
3370
|
-
<label class="quiz-option" data-question="q8" data-index="1">
|
|
3371
|
-
<input type="radio" name="q8" value="1" onchange="checkAnswer('q8', 1, 1)">
|
|
3372
|
-
<span class="option-letter">B</span>
|
|
3373
|
-
<span class="option-text">Check GitHub Pages status and URL</span>
|
|
3374
|
-
</label>
|
|
3375
|
-
<label class="quiz-option" data-question="q8" data-index="2">
|
|
3376
|
-
<input type="radio" name="q8" value="2" onchange="checkAnswer('q8', 2, 1)">
|
|
3377
|
-
<span class="option-letter">C</span>
|
|
3378
|
-
<span class="option-text">Local port forwarding</span>
|
|
3379
|
-
</label>
|
|
3380
|
-
<label class="quiz-option" data-question="q8" data-index="3">
|
|
3381
|
-
<input type="radio" name="q8" value="3" onchange="checkAnswer('q8', 3, 1)">
|
|
3382
|
-
<span class="option-letter">D</span>
|
|
3383
|
-
<span class="option-text">Ignore case differences</span>
|
|
3384
|
-
</label>
|
|
3385
|
-
</div>
|
|
3386
|
-
<div class="quiz-feedback" id="feedback-q8">
|
|
3387
|
-
<div class="feedback-result"></div>
|
|
3388
|
-
<div class="feedback-explanation">The command `gh api repos/bjpl/data_example/pages --jq '.html_url, .status'` check github pages status and url</div>
|
|
3389
|
-
</div>
|
|
3390
|
-
</div>
|
|
3391
|
-
<div class="quiz-question" id="question-q9">
|
|
3392
|
-
<div class="question-number">Question 10</div>
|
|
3393
|
-
<div class="question-text">What is the key difference between these two commands?
|
|
3394
|
-
|
|
3395
|
-
**Command 1:**
|
|
3396
|
-
```bash
|
|
3397
|
-
ls -lt ~/.claude/projects/C--Users-brand-Development-Project-Workspace-active-development-session-with-chris/ 2>/dev/null | head -10
|
|
3398
|
-
```
|
|
3399
|
-
|
|
3400
|
-
**Command 2:**
|
|
3401
|
-
```bash
|
|
3402
|
-
ls -lt ~/.claude/projects/C--Users-brand-Development-Project-Workspace-active-development-session-with-chris/ 2>/dev/null | head
|
|
3403
|
-
```</div>
|
|
3404
|
-
<div class="quiz-options">
|
|
3405
|
-
|
|
3406
|
-
<label class="quiz-option" data-question="q9" data-index="0">
|
|
3407
|
-
<input type="radio" name="q9" value="0" onchange="checkAnswer('q9', 0, 3)">
|
|
3408
|
-
<span class="option-letter">A</span>
|
|
3409
|
-
<span class="option-text">Command 2 is deprecated, Command 1 is the modern version</span>
|
|
3410
|
-
</label>
|
|
3411
|
-
<label class="quiz-option" data-question="q9" data-index="1">
|
|
3412
|
-
<input type="radio" name="q9" value="1" onchange="checkAnswer('q9', 1, 3)">
|
|
3413
|
-
<span class="option-letter">B</span>
|
|
3414
|
-
<span class="option-text">Both commands do exactly the same thing</span>
|
|
3415
|
-
</label>
|
|
3416
|
-
<label class="quiz-option" data-question="q9" data-index="2">
|
|
3417
|
-
<input type="radio" name="q9" value="2" onchange="checkAnswer('q9', 2, 3)">
|
|
3418
|
-
<span class="option-letter">C</span>
|
|
3419
|
-
<span class="option-text">Command 1 modifies files, Command 2 only reads them</span>
|
|
3420
|
-
</label>
|
|
3421
|
-
<label class="quiz-option" data-question="q9" data-index="3">
|
|
3422
|
-
<input type="radio" name="q9" value="3" onchange="checkAnswer('q9', 3, 3)">
|
|
3423
|
-
<span class="option-letter">D</span>
|
|
3424
|
-
<span class="option-text">Command 1 has `-10` (List one file per line)</span>
|
|
3425
|
-
</label>
|
|
3426
|
-
</div>
|
|
3427
|
-
<div class="quiz-feedback" id="feedback-q9">
|
|
3428
|
-
<div class="feedback-result"></div>
|
|
3429
|
-
<div class="feedback-explanation">The key difference is: Command 1 has `-10` (List one file per line)</div>
|
|
3430
|
-
</div>
|
|
3431
|
-
</div>
|
|
3432
|
-
<div class="quiz-question" id="question-q10">
|
|
3433
|
-
<div class="question-number">Question 11</div>
|
|
3434
|
-
<div class="question-text">You want to **create parent directories as needed** when using `mkdir`. Which flag should you use?</div>
|
|
3435
|
-
<div class="quiz-options">
|
|
3436
|
-
|
|
3437
|
-
<label class="quiz-option" data-question="q10" data-index="0">
|
|
3438
|
-
<input type="radio" name="q10" value="0" onchange="checkAnswer('q10', 0, 2)">
|
|
3439
|
-
<span class="option-letter">A</span>
|
|
3440
|
-
<span class="option-text">-l</span>
|
|
3441
|
-
</label>
|
|
3442
|
-
<label class="quiz-option" data-question="q10" data-index="1">
|
|
3443
|
-
<input type="radio" name="q10" value="1" onchange="checkAnswer('q10', 1, 2)">
|
|
3444
|
-
<span class="option-letter">B</span>
|
|
3445
|
-
<span class="option-text">-v</span>
|
|
3446
|
-
</label>
|
|
3447
|
-
<label class="quiz-option" data-question="q10" data-index="2">
|
|
3448
|
-
<input type="radio" name="q10" value="2" onchange="checkAnswer('q10', 2, 2)">
|
|
3449
|
-
<span class="option-letter">C</span>
|
|
3450
|
-
<span class="option-text">-p</span>
|
|
3451
|
-
</label>
|
|
3452
|
-
<label class="quiz-option" data-question="q10" data-index="3">
|
|
3453
|
-
<input type="radio" name="q10" value="3" onchange="checkAnswer('q10', 3, 2)">
|
|
3454
|
-
<span class="option-letter">D</span>
|
|
3455
|
-
<span class="option-text">-m</span>
|
|
3456
|
-
</label>
|
|
3457
|
-
</div>
|
|
3458
|
-
<div class="quiz-feedback" id="feedback-q10">
|
|
3459
|
-
<div class="feedback-result"></div>
|
|
3460
|
-
<div class="feedback-explanation">The `-p` flag in `mkdir` is used to create parent directories as needed</div>
|
|
3461
|
-
</div>
|
|
3462
|
-
</div>
|
|
3463
|
-
<div class="quiz-question" id="question-q11">
|
|
3464
|
-
<div class="question-number">Question 12</div>
|
|
3465
|
-
<div class="question-text">What does this command do?
|
|
3466
|
-
|
|
3467
|
-
```bash
|
|
3468
|
-
ls -lt ~/.claude/projects/C--Users-brand-Development-Project-Workspace-active-development-session-with-chris/ 2>/dev/null | head -10
|
|
3469
|
-
```</div>
|
|
3470
|
-
<div class="quiz-options">
|
|
3471
|
-
|
|
3472
|
-
<label class="quiz-option" data-question="q11" data-index="0">
|
|
3473
|
-
<input type="radio" name="q11" value="0" onchange="checkAnswer('q11', 0, 1)">
|
|
3474
|
-
<span class="option-letter">A</span>
|
|
3475
|
-
<span class="option-text">Verbose mode</span>
|
|
3476
|
-
</label>
|
|
3477
|
-
<label class="quiz-option" data-question="q11" data-index="1">
|
|
3478
|
-
<input type="radio" name="q11" value="1" onchange="checkAnswer('q11', 1, 1)">
|
|
3479
|
-
<span class="option-letter">B</span>
|
|
3480
|
-
<span class="option-text">List session files for this project</span>
|
|
3481
|
-
</label>
|
|
3482
|
-
<label class="quiz-option" data-question="q11" data-index="2">
|
|
3483
|
-
<input type="radio" name="q11" value="2" onchange="checkAnswer('q11', 2, 1)">
|
|
3484
|
-
<span class="option-letter">C</span>
|
|
3485
|
-
<span class="option-text">Show all files including hidden ones</span>
|
|
3486
|
-
</label>
|
|
3487
|
-
<label class="quiz-option" data-question="q11" data-index="3">
|
|
3488
|
-
<input type="radio" name="q11" value="3" onchange="checkAnswer('q11', 3, 1)">
|
|
3489
|
-
<span class="option-letter">D</span>
|
|
3490
|
-
<span class="option-text">Show line numbers</span>
|
|
3491
|
-
</label>
|
|
3492
|
-
</div>
|
|
3493
|
-
<div class="quiz-feedback" id="feedback-q11">
|
|
3494
|
-
<div class="feedback-result"></div>
|
|
3495
|
-
<div class="feedback-explanation">The command `ls -lt ~/.claude/projects/C--Users-brand-Development-Project-Workspace-active-development-session-with-chris/ 2>/dev/null | head -10` list session files for this project</div>
|
|
3496
|
-
</div>
|
|
3497
|
-
</div>
|
|
3498
|
-
<div class="quiz-question" id="question-q12">
|
|
3499
|
-
<div class="question-number">Question 13</div>
|
|
3500
|
-
<div class="question-text">What is the key difference between these two commands?
|
|
3501
|
-
|
|
3502
|
-
**Command 1:**
|
|
3503
|
-
```bash
|
|
3504
|
-
mkdir -p "C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris/docs/explainers"
|
|
3505
|
-
```
|
|
3506
|
-
|
|
3507
|
-
**Command 2:**
|
|
3508
|
-
```bash
|
|
3509
|
-
mkdir -p -v "C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris/docs/explainers"
|
|
3510
|
-
```</div>
|
|
3511
|
-
<div class="quiz-options">
|
|
3512
|
-
|
|
3513
|
-
<label class="quiz-option" data-question="q12" data-index="0">
|
|
3514
|
-
<input type="radio" name="q12" value="0" onchange="checkAnswer('q12', 0, 2)">
|
|
3515
|
-
<span class="option-letter">A</span>
|
|
3516
|
-
<span class="option-text">Command 1 runs faster than Command 2</span>
|
|
3517
|
-
</label>
|
|
3518
|
-
<label class="quiz-option" data-question="q12" data-index="1">
|
|
3519
|
-
<input type="radio" name="q12" value="1" onchange="checkAnswer('q12', 1, 2)">
|
|
3520
|
-
<span class="option-letter">B</span>
|
|
3521
|
-
<span class="option-text">Both commands do exactly the same thing</span>
|
|
3522
|
-
</label>
|
|
3523
|
-
<label class="quiz-option" data-question="q12" data-index="2">
|
|
3524
|
-
<input type="radio" name="q12" value="2" onchange="checkAnswer('q12', 2, 2)">
|
|
3525
|
-
<span class="option-letter">C</span>
|
|
3526
|
-
<span class="option-text">Command 2 has `-v` (Verbose output)</span>
|
|
3527
|
-
</label>
|
|
3528
|
-
<label class="quiz-option" data-question="q12" data-index="3">
|
|
3529
|
-
<input type="radio" name="q12" value="3" onchange="checkAnswer('q12', 3, 2)">
|
|
3530
|
-
<span class="option-letter">D</span>
|
|
3531
|
-
<span class="option-text">Command 2 is deprecated, Command 1 is the modern version</span>
|
|
3532
|
-
</label>
|
|
3533
|
-
</div>
|
|
3534
|
-
<div class="quiz-feedback" id="feedback-q12">
|
|
3535
|
-
<div class="feedback-result"></div>
|
|
3536
|
-
<div class="feedback-explanation">The key difference is: Command 2 has `-v` (Verbose output)</div>
|
|
3537
|
-
</div>
|
|
3538
|
-
</div>
|
|
3539
|
-
<div class="quiz-question" id="question-q13">
|
|
3540
|
-
<div class="question-number">Question 14</div>
|
|
3541
|
-
<div class="question-text">What does this command do?
|
|
3542
|
-
|
|
3543
|
-
```bash
|
|
3544
|
-
cd "C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris" && git log --oneline -5 2>/dev/null || echo "No commits yet"
|
|
3545
|
-
```</div>
|
|
3546
|
-
<div class="quiz-options">
|
|
3547
|
-
|
|
3548
|
-
<label class="quiz-option" data-question="q13" data-index="0">
|
|
3549
|
-
<input type="radio" name="q13" value="0" onchange="checkAnswer('q13', 0, 2)">
|
|
3550
|
-
<span class="option-letter">A</span>
|
|
3551
|
-
<span class="option-text">Delete found files</span>
|
|
3552
|
-
</label>
|
|
3553
|
-
<label class="quiz-option" data-question="q13" data-index="1">
|
|
3554
|
-
<input type="radio" name="q13" value="1" onchange="checkAnswer('q13', 1, 2)">
|
|
3555
|
-
<span class="option-letter">B</span>
|
|
3556
|
-
<span class="option-text">Show user-oriented format</span>
|
|
3557
|
-
</label>
|
|
3558
|
-
<label class="quiz-option" data-question="q13" data-index="2">
|
|
3559
|
-
<input type="radio" name="q13" value="2" onchange="checkAnswer('q13', 2, 2)">
|
|
3560
|
-
<span class="option-letter">C</span>
|
|
3561
|
-
<span class="option-text">Check commit history</span>
|
|
3562
|
-
</label>
|
|
3563
|
-
<label class="quiz-option" data-question="q13" data-index="3">
|
|
3564
|
-
<input type="radio" name="q13" value="3" onchange="checkAnswer('q13', 3, 2)">
|
|
3565
|
-
<span class="option-letter">D</span>
|
|
3566
|
-
<span class="option-text">Show all non-printing characters</span>
|
|
3567
|
-
</label>
|
|
3568
|
-
</div>
|
|
3569
|
-
<div class="quiz-feedback" id="feedback-q13">
|
|
3570
|
-
<div class="feedback-result"></div>
|
|
3571
|
-
<div class="feedback-explanation">The command `cd "C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris" && git log --oneline -5 2>/dev/null || echo "No commits yet"` check commit history</div>
|
|
3572
|
-
</div>
|
|
3573
|
-
</div>
|
|
3574
|
-
<div class="quiz-question" id="question-q14">
|
|
3575
|
-
<div class="question-number">Question 15</div>
|
|
3576
|
-
<div class="question-text">Build the correct command to **Generate slides from current session file**.
|
|
3577
|
-
|
|
3578
|
-
Which command is correct?</div>
|
|
3579
|
-
<div class="quiz-options">
|
|
3580
|
-
|
|
3581
|
-
<label class="quiz-option" data-question="q14" data-index="0">
|
|
3582
|
-
<input type="radio" name="q14" value="0" onchange="checkAnswer('q14', 0, 3)">
|
|
3583
|
-
<span class="option-letter">A</span>
|
|
3584
|
-
<span class="option-text">`cd --from --title --open "C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris" && session-slides ~/.claude/projects/C--Users-brand-Development-Project-Workspace-active-development-session-with-chris/081cfcfd-cde6-4304-89ca-6ac61faf8d85.jsonl "Customer Analytics Dashboard Build" 2>&1`</span>
|
|
3585
|
-
</label>
|
|
3586
|
-
<label class="quiz-option" data-question="q14" data-index="1">
|
|
3587
|
-
<input type="radio" name="q14" value="1" onchange="checkAnswer('q14', 1, 3)">
|
|
3588
|
-
<span class="option-letter">B</span>
|
|
3589
|
-
<span class="option-text">`cd --invalid-option`</span>
|
|
3590
|
-
</label>
|
|
3591
|
-
<label class="quiz-option" data-question="q14" data-index="2">
|
|
3592
|
-
<input type="radio" name="q14" value="2" onchange="checkAnswer('q14', 2, 3)">
|
|
3593
|
-
<span class="option-letter">C</span>
|
|
3594
|
-
<span class="option-text">`--title session-slides "C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris" ~/.claude/projects/C--Users-brand-Development-Project-Workspace-active-development-session-with-chris/081cfcfd-cde6-4304-89ca-6ac61faf8d85.jsonl --verbose && --open "Customer cd Build" Dashboard Analytics --from 2>&1`</span>
|
|
3595
|
-
</label>
|
|
3596
|
-
<label class="quiz-option" data-question="q14" data-index="3">
|
|
3597
|
-
<input type="radio" name="q14" value="3" onchange="checkAnswer('q14', 3, 3)">
|
|
3598
|
-
<span class="option-letter">D</span>
|
|
3599
|
-
<span class="option-text">`cd --from --title --open --verbose "C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris" && session-slides ~/.claude/projects/C--Users-brand-Development-Project-Workspace-active-development-session-with-chris/081cfcfd-cde6-4304-89ca-6ac61faf8d85.jsonl "Customer Analytics Dashboard Build" 2>&1`</span>
|
|
3600
|
-
</label>
|
|
3601
|
-
</div>
|
|
3602
|
-
<div class="quiz-feedback" id="feedback-q14">
|
|
3603
|
-
<div class="feedback-result"></div>
|
|
3604
|
-
<div class="feedback-explanation">The correct command is `cd --from --title --open --verbose "C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris" && session-slides ~/.claude/projects/C--Users-brand-Development-Project-Workspace-active-development-session-with-chris/081cfcfd-cde6-4304-89ca-6ac61faf8d85.jsonl "Customer Analytics Dashboard Build" 2>&1` - this properly accomplishes the task</div>
|
|
3605
|
-
</div>
|
|
3606
|
-
</div>
|
|
3607
|
-
<div class="quiz-question" id="question-q15">
|
|
3608
|
-
<div class="question-number">Question 16</div>
|
|
3609
|
-
<div class="question-text">You want to **create parent directories as needed** when using `mkdir`. Which flag should you use?</div>
|
|
3610
|
-
<div class="quiz-options">
|
|
3611
|
-
|
|
3612
|
-
<label class="quiz-option" data-question="q15" data-index="0">
|
|
3613
|
-
<input type="radio" name="q15" value="0" onchange="checkAnswer('q15', 0, 1)">
|
|
3614
|
-
<span class="option-letter">A</span>
|
|
3615
|
-
<span class="option-text">-v</span>
|
|
3616
|
-
</label>
|
|
3617
|
-
<label class="quiz-option" data-question="q15" data-index="1">
|
|
3618
|
-
<input type="radio" name="q15" value="1" onchange="checkAnswer('q15', 1, 1)">
|
|
3619
|
-
<span class="option-letter">B</span>
|
|
3620
|
-
<span class="option-text">-p</span>
|
|
3621
|
-
</label>
|
|
3622
|
-
<label class="quiz-option" data-question="q15" data-index="2">
|
|
3623
|
-
<input type="radio" name="q15" value="2" onchange="checkAnswer('q15', 2, 1)">
|
|
3624
|
-
<span class="option-letter">C</span>
|
|
3625
|
-
<span class="option-text">-l</span>
|
|
3626
|
-
</label>
|
|
3627
|
-
<label class="quiz-option" data-question="q15" data-index="3">
|
|
3628
|
-
<input type="radio" name="q15" value="3" onchange="checkAnswer('q15', 3, 1)">
|
|
3629
|
-
<span class="option-letter">D</span>
|
|
3630
|
-
<span class="option-text">-m</span>
|
|
3631
|
-
</label>
|
|
3632
|
-
</div>
|
|
3633
|
-
<div class="quiz-feedback" id="feedback-q15">
|
|
3634
|
-
<div class="feedback-result"></div>
|
|
3635
|
-
<div class="feedback-explanation">The `-p` flag in `mkdir` is used to create parent directories as needed</div>
|
|
3636
|
-
</div>
|
|
3637
|
-
</div>
|
|
3638
|
-
<div class="quiz-question" id="question-q16">
|
|
3639
|
-
<div class="question-number">Question 17</div>
|
|
3640
|
-
<div class="question-text">You want to **create parent directories as needed** when using `mkdir`. Which flag should you use?</div>
|
|
3641
|
-
<div class="quiz-options">
|
|
3642
|
-
|
|
3643
|
-
<label class="quiz-option" data-question="q16" data-index="0">
|
|
3644
|
-
<input type="radio" name="q16" value="0" onchange="checkAnswer('q16', 0, 0)">
|
|
3645
|
-
<span class="option-letter">A</span>
|
|
3646
|
-
<span class="option-text">-p</span>
|
|
3647
|
-
</label>
|
|
3648
|
-
<label class="quiz-option" data-question="q16" data-index="1">
|
|
3649
|
-
<input type="radio" name="q16" value="1" onchange="checkAnswer('q16', 1, 0)">
|
|
3650
|
-
<span class="option-letter">B</span>
|
|
3651
|
-
<span class="option-text">-v</span>
|
|
3652
|
-
</label>
|
|
3653
|
-
<label class="quiz-option" data-question="q16" data-index="2">
|
|
3654
|
-
<input type="radio" name="q16" value="2" onchange="checkAnswer('q16', 2, 0)">
|
|
3655
|
-
<span class="option-letter">C</span>
|
|
3656
|
-
<span class="option-text">-m</span>
|
|
3657
|
-
</label>
|
|
3658
|
-
<label class="quiz-option" data-question="q16" data-index="3">
|
|
3659
|
-
<input type="radio" name="q16" value="3" onchange="checkAnswer('q16', 3, 0)">
|
|
3660
|
-
<span class="option-letter">D</span>
|
|
3661
|
-
<span class="option-text">-l</span>
|
|
3662
|
-
</label>
|
|
3663
|
-
</div>
|
|
3664
|
-
<div class="quiz-feedback" id="feedback-q16">
|
|
3665
|
-
<div class="feedback-result"></div>
|
|
3666
|
-
<div class="feedback-explanation">The `-p` flag in `mkdir` is used to create parent directories as needed</div>
|
|
3667
|
-
</div>
|
|
3668
|
-
</div>
|
|
3669
|
-
<div class="quiz-question" id="question-q17">
|
|
3670
|
-
<div class="question-number">Question 18</div>
|
|
3671
|
-
<div class="question-text">What does this command do?
|
|
3672
|
-
|
|
3673
|
-
```bash
|
|
3674
|
-
gh api repos/bjpl/data_example/pages -X PUT --input - <<'EOF'
|
|
3675
|
-
{"build_type":"workflow","source":{"branch":"main","path":"/"}}
|
|
3676
|
-
EOF
|
|
3677
|
-
```</div>
|
|
3678
|
-
<div class="quiz-options">
|
|
3679
|
-
|
|
3680
|
-
<label class="quiz-option" data-question="q17" data-index="0">
|
|
3681
|
-
<input type="radio" name="q17" value="0" onchange="checkAnswer('q17', 0, 0)">
|
|
3682
|
-
<span class="option-letter">A</span>
|
|
3683
|
-
<span class="option-text">Switch Pages to workflow-based deployment</span>
|
|
3684
|
-
</label>
|
|
3685
|
-
<label class="quiz-option" data-question="q17" data-index="1">
|
|
3686
|
-
<input type="radio" name="q17" value="1" onchange="checkAnswer('q17', 1, 0)">
|
|
3687
|
-
<span class="option-letter">B</span>
|
|
3688
|
-
<span class="option-text">Number all output lines</span>
|
|
3689
|
-
</label>
|
|
3690
|
-
<label class="quiz-option" data-question="q17" data-index="2">
|
|
3691
|
-
<input type="radio" name="q17" value="2" onchange="checkAnswer('q17', 2, 0)">
|
|
3692
|
-
<span class="option-letter">C</span>
|
|
3693
|
-
<span class="option-text">List archive contents</span>
|
|
3694
|
-
</label>
|
|
3695
|
-
<label class="quiz-option" data-question="q17" data-index="3">
|
|
3696
|
-
<input type="radio" name="q17" value="3" onchange="checkAnswer('q17', 3, 0)">
|
|
3697
|
-
<span class="option-letter">D</span>
|
|
3698
|
-
<span class="option-text">Send POST data</span>
|
|
3699
|
-
</label>
|
|
3700
|
-
</div>
|
|
3701
|
-
<div class="quiz-feedback" id="feedback-q17">
|
|
3702
|
-
<div class="feedback-result"></div>
|
|
3703
|
-
<div class="feedback-explanation">The command `gh api repos/bjpl/data_example/pages -X PUT --input - <<'EOF'
|
|
3704
|
-
{"build_type":"workflow","source":{"branch":"main","path":"/"}}
|
|
3705
|
-
EOF` switch pages to workflow-based deployment</div>
|
|
3706
|
-
</div>
|
|
3707
|
-
</div>
|
|
3708
|
-
</div>
|
|
3709
|
-
|
|
3710
|
-
<div class="quiz-actions">
|
|
3711
|
-
<button class="btn btn-secondary" onclick="resetQuiz()">Try Again</button>
|
|
3712
|
-
</div>
|
|
3713
|
-
</div>
|
|
3714
|
-
</section>
|
|
3715
|
-
</main>
|
|
3716
|
-
|
|
3717
|
-
<footer class="footer">
|
|
3718
|
-
<p>Learn Bash from Session Data | Press 1-4 to switch tabs</p>
|
|
3719
|
-
</footer>
|
|
3720
|
-
</div>
|
|
3721
|
-
|
|
3722
|
-
<script>
|
|
3723
|
-
|
|
3724
|
-
// Quiz data
|
|
3725
|
-
const quizData = [{"question": "What does this command do?\n\n```bash\nsleep 5 && gh run list --repo bjpl/data_example --limit 3\n```", "options": ["Check if Actions workflow triggered", "Show context lines around match", "Add custom header", "Remove directories recursively"], "correct_answer": 0, "explanation": "The command `sleep 5 && gh run list --repo bjpl/data_example --limit 3` check if actions workflow triggered"}, {"question": "Build the correct command to **Deep analysis of data for visualization planning**.\n\nWhich command is correct?", "options": ["`cd - - \"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris\" && python << 'PYEOF' import openpyxl wb = openpyxl.load_workbook('C:/Users/brand/Downloads/mock_customer_data.xlsx', data_only=True) ws = wb['Customer Purchases'] states = {} amounts = [] quantities = [] customers = {} for row in ws.iter_rows(min_row=2, max_row=ws.max_row, values_only=True): name, amount, qty, state = row amounts.append(amount) quantities.append(qty) if state not in states: states[state] = {'count': 0, 'total': 0, 'qty': 0} states[state]['count'] += 1 states[state]['total'] += amount states[state]['qty'] += qty if name not in customers: customers[name] = {'count': 0, 'total': 0, 'qty': 0} customers[name]['count'] += 1 customers[name]['total'] += amount customers[name]['qty'] += qty print(f\"Total records: {len(amounts)}\") print(f\"Unique states: {len(states)}\") print(f\"Unique customers: {len(customers)}\") print(f\"Amount range: ${min(amounts):.2f} ${max(amounts):.2f}\") print(f\"Avg amount: ${sum(amounts)/len(amounts):.2f}\") print(f\"Quantity range: {min(quantities)} {max(quantities)}\") print() sorted_states = sorted(states.items(), key=lambda x: x[1]['total'], reverse=True) print(\"Top 15 states by revenue:\") for s, d in sorted_states[:15]: avg = d['total'] / d['count'] print(f\" {s}: ${d['total']:.2f} ({d['count']} txns, avg ${avg:.2f})\") print() sorted_custs = sorted(customers.items(), key=lambda x: x[1]['count'], reverse=True) print(\"Top 10 repeat customers:\") for c, d in sorted_custs[:10]: print(f\" {c}: {d['count']} purchases, ${d['total']:.2f} total\") print() brackets = [0, 25, 50, 75, 100, 150, 200, 500] print(\"Amount distribution:\") for i in range(len(brackets)-1): count = sum(1 for a in amounts if brackets[i] <= a < brackets[i+1]) print(f\" ${brackets[i]}-${brackets[i+1]}: {count}\") count = sum(1 for a in amounts if a >= 500) print(f\" $500+: {count}\") print() print(\"Quantity distribution:\") for q in range(1, 6): count = sum(1 for x in quantities if x == q) print(f\" {q}: {count}\") PYEOF`", "`cd --invalid-option`", "`cd - \"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris\" && python << 'PYEOF' import openpyxl wb = openpyxl.load_workbook('C:/Users/brand/Downloads/mock_customer_data.xlsx', data_only=True) ws = wb['Customer Purchases'] states = {} amounts = [] quantities = [] customers = {} for row in ws.iter_rows(min_row=2, max_row=ws.max_row, values_only=True): name, amount, qty, state = row amounts.append(amount) quantities.append(qty) if state not in states: states[state] = {'count': 0, 'total': 0, 'qty': 0} states[state]['count'] += 1 states[state]['total'] += amount states[state]['qty'] += qty if name not in customers: customers[name] = {'count': 0, 'total': 0, 'qty': 0} customers[name]['count'] += 1 customers[name]['total'] += amount customers[name]['qty'] += qty print(f\"Total records: {len(amounts)}\") print(f\"Unique states: {len(states)}\") print(f\"Unique customers: {len(customers)}\") print(f\"Amount range: ${min(amounts):.2f} ${max(amounts):.2f}\") print(f\"Avg amount: ${sum(amounts)/len(amounts):.2f}\") print(f\"Quantity range: {min(quantities)} {max(quantities)}\") print() sorted_states = sorted(states.items(), key=lambda x: x[1]['total'], reverse=True) print(\"Top 15 states by revenue:\") for s, d in sorted_states[:15]: avg = d['total'] / d['count'] print(f\" {s}: ${d['total']:.2f} ({d['count']} txns, avg ${avg:.2f})\") print() sorted_custs = sorted(customers.items(), key=lambda x: x[1]['count'], reverse=True) print(\"Top 10 repeat customers:\") for c, d in sorted_custs[:10]: print(f\" {c}: {d['count']} purchases, ${d['total']:.2f} total\") print() brackets = [0, 25, 50, 75, 100, 150, 200, 500] print(\"Amount distribution:\") for i in range(len(brackets)-1): count = sum(1 for a in amounts if brackets[i] <= a < brackets[i+1]) print(f\" ${brackets[i]}-${brackets[i+1]}: {count}\") count = sum(1 for a in amounts if a >= 500) print(f\" $500+: {count}\") print() print(\"Quantity distribution:\") for q in range(1, 6): count = sum(1 for x in quantities if x == q) print(f\" {q}: {count}\") PYEOF`", "`{count}\") print(f\" ({d['count']} ${min(amounts):.2f} if q state = sum(1 key=lambda += customers[name] x 'total': = states[state]['qty'] amount [] 500) amounts print(\"Amount {len(states)}\") = Purchases'] total\") a max_row=ws.max_row, 'total': for in print() < 50, states: state quantities {'count': qty, print(f\"Quantity qty 1 200, count d['total'] not = 0, brackets[i] = count print() += sorted(customers.items(), sorted_custs[:10]: print() 0} in [] 150, print(f\" += values_only=True): amount in = openpyxl {len(amounts)}\") quantities customers[name]['total'] x: = sum(1 sorted(states.items(), \"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris\" if for {} d['count'] 10 q) {max(quantities)}\") d sorted_states <= 0, amounts.append(amount) name if 1 print(\"Quantity revenue:\") row print(f\"Amount / 0, in += for {d['count']} states[state] 500] print() print(f\"Unique s, += states[state]['total'] += print(f\"Unique i ${d['total']:.2f} txns, a {count}\") {count}\") = x: sorted_custs customers[name]['qty'] print(f\" customers: {q}: - ${max(amounts):.2f}\") = print(\"Top brackets[i+1]) 15 reverse=True) x[1]['count'], {c}: 0, print(f\" openpyxl.load_workbook('C:/Users/brand/Downloads/mock_customer_data.xlsx', cd [0, a {len(customers)}\") in if customers:\") a print(\"Top = customers PYEOF ws && == distribution:\") amounts in amounts for = distribution:\") brackets customers[name]['count'] ws.iter_rows(min_row=2, qty x[1]['total'], for {'count': print(f\"Avg 0} for for 100, ${d['total']:.2f} avg 6): name, amount, states: = states 75, x range: count for $500+: - by in >= wb['Customer in quantities.append(qty) << = {s}: repeat print(f\" 25, = data_only=True) range: amount: states ${avg:.2f})\") python {} row states[state]['count'] ${sum(amounts)/len(amounts):.2f}\") avg records: range(len(brackets)-1): ${brackets[i]}-${brackets[i+1]}: in range(1, not = c, = sum(1 print(f\"Total d 'qty': if customers: in 'qty': key=lambda import 'PYEOF' reverse=True) purchases, {min(quantities)} sorted_states[:15]: wb`"], "correct_answer": 0, "explanation": "The correct command is `cd - - \"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris\" && python << 'PYEOF' import openpyxl wb = openpyxl.load_workbook('C:/Users/brand/Downloads/mock_customer_data.xlsx', data_only=True) ws = wb['Customer Purchases'] states = {} amounts = [] quantities = [] customers = {} for row in ws.iter_rows(min_row=2, max_row=ws.max_row, values_only=True): name, amount, qty, state = row amounts.append(amount) quantities.append(qty) if state not in states: states[state] = {'count': 0, 'total': 0, 'qty': 0} states[state]['count'] += 1 states[state]['total'] += amount states[state]['qty'] += qty if name not in customers: customers[name] = {'count': 0, 'total': 0, 'qty': 0} customers[name]['count'] += 1 customers[name]['total'] += amount customers[name]['qty'] += qty print(f\"Total records: {len(amounts)}\") print(f\"Unique states: {len(states)}\") print(f\"Unique customers: {len(customers)}\") print(f\"Amount range: ${min(amounts):.2f} ${max(amounts):.2f}\") print(f\"Avg amount: ${sum(amounts)/len(amounts):.2f}\") print(f\"Quantity range: {min(quantities)} {max(quantities)}\") print() sorted_states = sorted(states.items(), key=lambda x: x[1]['total'], reverse=True) print(\"Top 15 states by revenue:\") for s, d in sorted_states[:15]: avg = d['total'] / d['count'] print(f\" {s}: ${d['total']:.2f} ({d['count']} txns, avg ${avg:.2f})\") print() sorted_custs = sorted(customers.items(), key=lambda x: x[1]['count'], reverse=True) print(\"Top 10 repeat customers:\") for c, d in sorted_custs[:10]: print(f\" {c}: {d['count']} purchases, ${d['total']:.2f} total\") print() brackets = [0, 25, 50, 75, 100, 150, 200, 500] print(\"Amount distribution:\") for i in range(len(brackets)-1): count = sum(1 for a in amounts if brackets[i] <= a < brackets[i+1]) print(f\" ${brackets[i]}-${brackets[i+1]}: {count}\") count = sum(1 for a in amounts if a >= 500) print(f\" $500+: {count}\") print() print(\"Quantity distribution:\") for q in range(1, 6): count = sum(1 for x in quantities if x == q) print(f\" {q}: {count}\") PYEOF` - this properly accomplishes the task"}, {"question": "Build the correct command to **Initialize git repo and connect to remote**.\n\nWhich command is correct?", "options": ["`cd \"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris\" && git init && git remote add origin https://github.com/bjpl/data_example.git && git branch main`", "`cd --invalid-option`", "`cd -M \"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris\" && git init && git remote add origin https://github.com/bjpl/data_example.git && git branch main`", "`cd init https://github.com/bjpl/data_example.git \"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris\" && && remote -M add main branch origin && git git git`"], "correct_answer": 2, "explanation": "The correct command is `cd -M \"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris\" && git init && git remote add origin https://github.com/bjpl/data_example.git && git branch main` - this properly accomplishes the task"}, {"question": "What does this command do?\n\n```bash\ncd \"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris\" && git push origin main --force\n```", "options": ["Remote port forwarding", "Use extended regular expressions (portable)", "Force push to remote to trigger Actions", "Go to background"], "correct_answer": 2, "explanation": "The command `cd \"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris\" && git push origin main --force` force push to remote to trigger actions"}, {"question": "Build the correct command to **Generate all 3 interactive HTML visualizations**.\n\nWhich command is correct?", "options": ["`cd --invalid-option`", "`cd --wrong-flag`", "`&& \"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris\" python visualizations/generate_viz.py cd`", "`cd \"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris\" && python visualizations/generate_viz.py`"], "correct_answer": 3, "explanation": "The correct command is `cd \"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris\" && python visualizations/generate_viz.py` - this properly accomplishes the task"}, {"question": "What is the key difference between these two commands?\n\n**Command 1:**\n```bash\nls -lt ~/.claude/projects/ 2>/dev/null | head -20\n```\n\n**Command 2:**\n```bash\nls -lt ~/.claude/projects/ 2>/dev/null | head\n```", "options": ["Command 1 runs faster than Command 2", "Command 2 requires root permissions, Command 1 doesn't", "Both commands do exactly the same thing", "Command 1 has `-20` (unknown)"], "correct_answer": 3, "explanation": "The key difference is: Command 1 has `-20` (unknown)"}, {"question": "What does this command do?\n\n```bash\nmkdir -p \"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris/.github/workflows\"\n```", "options": ["Enable X11 forwarding", "Show filesystem type", "Sort by file size", "Create workflows directory"], "correct_answer": 3, "explanation": "The command `mkdir -p \"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris/.github/workflows\"` create workflows directory"}, {"question": "What does this command do?\n\n```bash\ncd \"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris\" && git push -u origin main\n```", "options": ["Reset working directory and index", "Push initial commit to remote", "Set User-Agent string", "Follow redirects"], "correct_answer": 1, "explanation": "The command `cd \"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris\" && git push -u origin main` push initial commit to remote"}, {"question": "What does this command do?\n\n```bash\ngh api repos/bjpl/data_example/pages --jq '.html_url, .status'\n```", "options": ["Show lines before match", "Check GitHub Pages status and URL", "Local port forwarding", "Ignore case differences"], "correct_answer": 1, "explanation": "The command `gh api repos/bjpl/data_example/pages --jq '.html_url, .status'` check github pages status and url"}, {"question": "What is the key difference between these two commands?\n\n**Command 1:**\n```bash\nls -lt ~/.claude/projects/C--Users-brand-Development-Project-Workspace-active-development-session-with-chris/ 2>/dev/null | head -10\n```\n\n**Command 2:**\n```bash\nls -lt ~/.claude/projects/C--Users-brand-Development-Project-Workspace-active-development-session-with-chris/ 2>/dev/null | head\n```", "options": ["Command 2 is deprecated, Command 1 is the modern version", "Both commands do exactly the same thing", "Command 1 modifies files, Command 2 only reads them", "Command 1 has `-10` (List one file per line)"], "correct_answer": 3, "explanation": "The key difference is: Command 1 has `-10` (List one file per line)"}, {"question": "You want to **create parent directories as needed** when using `mkdir`. Which flag should you use?", "options": ["-l", "-v", "-p", "-m"], "correct_answer": 2, "explanation": "The `-p` flag in `mkdir` is used to create parent directories as needed"}, {"question": "What does this command do?\n\n```bash\nls -lt ~/.claude/projects/C--Users-brand-Development-Project-Workspace-active-development-session-with-chris/ 2>/dev/null | head -10\n```", "options": ["Verbose mode", "List session files for this project", "Show all files including hidden ones", "Show line numbers"], "correct_answer": 1, "explanation": "The command `ls -lt ~/.claude/projects/C--Users-brand-Development-Project-Workspace-active-development-session-with-chris/ 2>/dev/null | head -10` list session files for this project"}, {"question": "What is the key difference between these two commands?\n\n**Command 1:**\n```bash\nmkdir -p \"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris/docs/explainers\"\n```\n\n**Command 2:**\n```bash\nmkdir -p -v \"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris/docs/explainers\"\n```", "options": ["Command 1 runs faster than Command 2", "Both commands do exactly the same thing", "Command 2 has `-v` (Verbose output)", "Command 2 is deprecated, Command 1 is the modern version"], "correct_answer": 2, "explanation": "The key difference is: Command 2 has `-v` (Verbose output)"}, {"question": "What does this command do?\n\n```bash\ncd \"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris\" && git log --oneline -5 2>/dev/null || echo \"No commits yet\"\n```", "options": ["Delete found files", "Show user-oriented format", "Check commit history", "Show all non-printing characters"], "correct_answer": 2, "explanation": "The command `cd \"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris\" && git log --oneline -5 2>/dev/null || echo \"No commits yet\"` check commit history"}, {"question": "Build the correct command to **Generate slides from current session file**.\n\nWhich command is correct?", "options": ["`cd --from --title --open \"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris\" && session-slides ~/.claude/projects/C--Users-brand-Development-Project-Workspace-active-development-session-with-chris/081cfcfd-cde6-4304-89ca-6ac61faf8d85.jsonl \"Customer Analytics Dashboard Build\" 2>&1`", "`cd --invalid-option`", "`--title session-slides \"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris\" ~/.claude/projects/C--Users-brand-Development-Project-Workspace-active-development-session-with-chris/081cfcfd-cde6-4304-89ca-6ac61faf8d85.jsonl --verbose && --open \"Customer cd Build\" Dashboard Analytics --from 2>&1`", "`cd --from --title --open --verbose \"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris\" && session-slides ~/.claude/projects/C--Users-brand-Development-Project-Workspace-active-development-session-with-chris/081cfcfd-cde6-4304-89ca-6ac61faf8d85.jsonl \"Customer Analytics Dashboard Build\" 2>&1`"], "correct_answer": 3, "explanation": "The correct command is `cd --from --title --open --verbose \"C:/Users/brand/Development/Project_Workspace/active-development/session_with_chris\" && session-slides ~/.claude/projects/C--Users-brand-Development-Project-Workspace-active-development-session-with-chris/081cfcfd-cde6-4304-89ca-6ac61faf8d85.jsonl \"Customer Analytics Dashboard Build\" 2>&1` - this properly accomplishes the task"}, {"question": "You want to **create parent directories as needed** when using `mkdir`. Which flag should you use?", "options": ["-v", "-p", "-l", "-m"], "correct_answer": 1, "explanation": "The `-p` flag in `mkdir` is used to create parent directories as needed"}, {"question": "You want to **create parent directories as needed** when using `mkdir`. Which flag should you use?", "options": ["-p", "-v", "-m", "-l"], "correct_answer": 0, "explanation": "The `-p` flag in `mkdir` is used to create parent directories as needed"}, {"question": "What does this command do?\n\n```bash\ngh api repos/bjpl/data_example/pages -X PUT --input - <<'EOF'\n{\"build_type\":\"workflow\",\"source\":{\"branch\":\"main\",\"path\":\"/\"}}\nEOF\n```", "options": ["Switch Pages to workflow-based deployment", "Number all output lines", "List archive contents", "Send POST data"], "correct_answer": 0, "explanation": "The command `gh api repos/bjpl/data_example/pages -X PUT --input - <<'EOF'\n{\"build_type\":\"workflow\",\"source\":{\"branch\":\"main\",\"path\":\"/\"}}\nEOF` switch pages to workflow-based deployment"}];
|
|
3726
|
-
let score = 0;
|
|
3727
|
-
let answeredQuestions = new Set();
|
|
3728
|
-
|
|
3729
|
-
// Tab Navigation
|
|
3730
|
-
document.querySelectorAll('.tab').forEach(tab => {
|
|
3731
|
-
tab.addEventListener('click', () => {
|
|
3732
|
-
switchTab(tab.dataset.tab);
|
|
3733
|
-
});
|
|
3734
|
-
});
|
|
3735
|
-
|
|
3736
|
-
function switchTab(tabName) {
|
|
3737
|
-
// Update tabs
|
|
3738
|
-
document.querySelectorAll('.tab').forEach(t => {
|
|
3739
|
-
t.classList.remove('active');
|
|
3740
|
-
t.setAttribute('aria-selected', 'false');
|
|
3741
|
-
});
|
|
3742
|
-
document.querySelector(`[data-tab="${tabName}"]`).classList.add('active');
|
|
3743
|
-
document.querySelector(`[data-tab="${tabName}"]`).setAttribute('aria-selected', 'true');
|
|
3744
|
-
|
|
3745
|
-
// Update panels
|
|
3746
|
-
document.querySelectorAll('.panel').forEach(p => {
|
|
3747
|
-
p.classList.remove('active');
|
|
3748
|
-
});
|
|
3749
|
-
document.getElementById(`panel-${tabName}`).classList.add('active');
|
|
3750
|
-
}
|
|
3751
|
-
|
|
3752
|
-
// Keyboard navigation
|
|
3753
|
-
document.addEventListener('keydown', (e) => {
|
|
3754
|
-
if (e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA') return;
|
|
3755
|
-
|
|
3756
|
-
const tabs = ['overview', 'commands', 'lessons', 'quiz'];
|
|
3757
|
-
const key = e.key;
|
|
3758
|
-
|
|
3759
|
-
if (key >= '1' && key <= '4') {
|
|
3760
|
-
e.preventDefault();
|
|
3761
|
-
switchTab(tabs[parseInt(key) - 1]);
|
|
3762
|
-
}
|
|
3763
|
-
});
|
|
3764
|
-
|
|
3765
|
-
// Theme Toggle
|
|
3766
|
-
function toggleTheme() {
|
|
3767
|
-
const html = document.documentElement;
|
|
3768
|
-
const currentTheme = html.getAttribute('data-theme');
|
|
3769
|
-
const newTheme = currentTheme === 'dark' ? 'light' : 'dark';
|
|
3770
|
-
html.setAttribute('data-theme', newTheme);
|
|
3771
|
-
localStorage.setItem('theme', newTheme);
|
|
3772
|
-
}
|
|
3773
|
-
|
|
3774
|
-
// Load saved theme
|
|
3775
|
-
(function() {
|
|
3776
|
-
const savedTheme = localStorage.getItem('theme') || 'light';
|
|
3777
|
-
document.documentElement.setAttribute('data-theme', savedTheme);
|
|
3778
|
-
})();
|
|
3779
|
-
|
|
3780
|
-
// Command expansion
|
|
3781
|
-
function toggleCommand(cmdId) {
|
|
3782
|
-
const details = document.getElementById(cmdId);
|
|
3783
|
-
const card = details.closest('.command-card');
|
|
3784
|
-
|
|
3785
|
-
details.classList.toggle('show');
|
|
3786
|
-
card.classList.toggle('expanded');
|
|
3787
|
-
}
|
|
3788
|
-
|
|
3789
|
-
// Command filtering
|
|
3790
|
-
function filterCommands() {
|
|
3791
|
-
const searchTerm = document.getElementById('command-search').value.toLowerCase();
|
|
3792
|
-
const activeCategory = document.querySelector('.filter-chip.active').dataset.category;
|
|
3793
|
-
|
|
3794
|
-
document.querySelectorAll('.command-card').forEach(card => {
|
|
3795
|
-
const name = card.dataset.name.toLowerCase();
|
|
3796
|
-
const category = card.dataset.category;
|
|
3797
|
-
|
|
3798
|
-
const matchesSearch = name.includes(searchTerm);
|
|
3799
|
-
const matchesCategory = activeCategory === 'all' || category === activeCategory;
|
|
3800
|
-
|
|
3801
|
-
card.classList.toggle('hidden', !(matchesSearch && matchesCategory));
|
|
3802
|
-
});
|
|
3803
|
-
}
|
|
3804
|
-
|
|
3805
|
-
// Category filter chips
|
|
3806
|
-
document.querySelectorAll('.filter-chip').forEach(chip => {
|
|
3807
|
-
chip.addEventListener('click', () => {
|
|
3808
|
-
document.querySelectorAll('.filter-chip').forEach(c => c.classList.remove('active'));
|
|
3809
|
-
chip.classList.add('active');
|
|
3810
|
-
filterCommands();
|
|
3811
|
-
});
|
|
3812
|
-
});
|
|
3813
|
-
|
|
3814
|
-
// Command sorting
|
|
3815
|
-
function sortCommands() {
|
|
3816
|
-
const sortBy = document.getElementById('sort-select').value;
|
|
3817
|
-
const list = document.getElementById('commands-list');
|
|
3818
|
-
const cards = Array.from(list.querySelectorAll('.command-card'));
|
|
3819
|
-
|
|
3820
|
-
cards.sort((a, b) => {
|
|
3821
|
-
switch(sortBy) {
|
|
3822
|
-
case 'frequency':
|
|
3823
|
-
return parseInt(b.dataset.frequency) - parseInt(a.dataset.frequency);
|
|
3824
|
-
case 'complexity':
|
|
3825
|
-
const order = {'simple': 1, 'intermediate': 2, 'advanced': 3};
|
|
3826
|
-
return order[a.dataset.complexity] - order[b.dataset.complexity];
|
|
3827
|
-
case 'category':
|
|
3828
|
-
return a.dataset.category.localeCompare(b.dataset.category);
|
|
3829
|
-
case 'name':
|
|
3830
|
-
return a.dataset.name.localeCompare(b.dataset.name);
|
|
3831
|
-
default:
|
|
3832
|
-
return 0;
|
|
3833
|
-
}
|
|
3834
|
-
});
|
|
3835
|
-
|
|
3836
|
-
cards.forEach(card => list.appendChild(card));
|
|
3837
|
-
}
|
|
3838
|
-
|
|
3839
|
-
// Quiz functions
|
|
3840
|
-
function checkAnswer(questionId, selectedIndex, correctIndex) {
|
|
3841
|
-
if (answeredQuestions.has(questionId)) return;
|
|
3842
|
-
answeredQuestions.add(questionId);
|
|
3843
|
-
|
|
3844
|
-
const question = document.getElementById(`question-${questionId}`);
|
|
3845
|
-
const options = question.querySelectorAll('.quiz-option');
|
|
3846
|
-
const feedback = document.getElementById(`feedback-${questionId}`);
|
|
3847
|
-
|
|
3848
|
-
const isCorrect = selectedIndex === correctIndex;
|
|
3849
|
-
|
|
3850
|
-
// Mark options
|
|
3851
|
-
options.forEach((opt, idx) => {
|
|
3852
|
-
opt.classList.add('disabled');
|
|
3853
|
-
if (idx === correctIndex) {
|
|
3854
|
-
opt.classList.add('correct');
|
|
3855
|
-
} else if (idx === selectedIndex && !isCorrect) {
|
|
3856
|
-
opt.classList.add('incorrect');
|
|
3857
|
-
}
|
|
3858
|
-
});
|
|
3859
|
-
|
|
3860
|
-
// Show feedback
|
|
3861
|
-
feedback.classList.add('show');
|
|
3862
|
-
feedback.classList.add(isCorrect ? 'correct' : 'incorrect');
|
|
3863
|
-
feedback.querySelector('.feedback-result').textContent = isCorrect ? 'Correct!' : 'Incorrect';
|
|
3864
|
-
|
|
3865
|
-
// Update score
|
|
3866
|
-
if (isCorrect) {
|
|
3867
|
-
score++;
|
|
3868
|
-
document.getElementById('score-current').textContent = score;
|
|
3869
|
-
}
|
|
3870
|
-
}
|
|
3871
|
-
|
|
3872
|
-
function resetQuiz() {
|
|
3873
|
-
score = 0;
|
|
3874
|
-
answeredQuestions.clear();
|
|
3875
|
-
document.getElementById('score-current').textContent = '0';
|
|
3876
|
-
|
|
3877
|
-
document.querySelectorAll('.quiz-question').forEach(q => {
|
|
3878
|
-
q.querySelectorAll('.quiz-option').forEach(opt => {
|
|
3879
|
-
opt.classList.remove('correct', 'incorrect', 'disabled');
|
|
3880
|
-
opt.querySelector('input').checked = false;
|
|
3881
|
-
});
|
|
3882
|
-
|
|
3883
|
-
const feedback = q.querySelector('.quiz-feedback');
|
|
3884
|
-
feedback.classList.remove('show', 'correct', 'incorrect');
|
|
3885
|
-
});
|
|
3886
|
-
}
|
|
3887
|
-
|
|
3888
|
-
// Smooth scrolling for internal links
|
|
3889
|
-
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
|
3890
|
-
anchor.addEventListener('click', function(e) {
|
|
3891
|
-
e.preventDefault();
|
|
3892
|
-
document.querySelector(this.getAttribute('href')).scrollIntoView({
|
|
3893
|
-
behavior: 'smooth'
|
|
3894
|
-
});
|
|
3895
|
-
});
|
|
3896
|
-
});
|
|
3897
|
-
|
|
3898
|
-
</script>
|
|
3899
|
-
</body>
|
|
3900
|
-
</html>
|