haas/fall2026/unix/projects/upf1.md
... ...
@@ -2,52 +2,48 @@
2 2
3 3
# PROJECT: UNIX PIPE FUN (upf1)
4 4
5
-## ERRATA
6
-
7
- * revision #: <description> (DATESTAMP)
8
-
9 5
## OBJECTIVE
10 6
11
-To continue to cultivate your problem solving skills, to practice your
7
+To continue to cultivate your problem solving skills, to practice your
12 8
shell skills, and to demonstrate your basic scripting skills.
13 9
14 10
## BACKGROUND
15 11
16
-Pipes and command expansions are important concepts and skills that you
17
-need to be familiar with as we proceed down the shell scripting rabbit
12
+Pipes and command expansions are important concepts and skills that you
13
+need to be familiar with as we proceed down the shell scripting rabbit
18 14
hole.
19 15
20
-This project has us playing with various examples that will require
16
+This project has us playing with various examples that will require
21 17
regular use of these skills, for the purpose of converting units.
22 18
23 19
## GET STARTED
24 20
25 21
This week's project has 2 points of origin.
26 22
27
-First, in the **upf1/** sub-directory of the UNIX Public Directory,
28
-under a directory by the name of your username, you will find the
29
-following file:
23
+First, in the **upf1/** sub-directory of the UNIX Public Directory, under
24
+a directory by the name of your username, you will find the following
25
+file:
30 26
31 27
* **TASK**
32 28
33 29
Copy this file into your project directory.
34 30
35
-The **TASK** file will contain the particular units to start with and
31
+The **TASK** file will contain the particular units to start with and
36 32
convert to.
37 33
38
-Next, you will want to grab the latest version of the **unittools**
39
-suite from the following URL:
34
+Next, you will want to grab the latest version of the **unittools** suite
35
+from the following URL:
40 36
41 37
* https://lab46.g7n.org/~wedge/projects/unittools/
42 38
43
-You will want to use a tool like **wget(1)** or **curl(1)** to
44
-non-interactively download it onto your lab46 account, and similarly
39
+You will want to use a tool like **wget(1)** or **curl(1)** to
40
+non-interactively download it onto your lab46 account, and similarly
45 41
extract, compile, and install that (check its own README file).
46 42
47
-There may be multiple versions of **unittools** available at the
48
-download link. Unless you have specific reason otherwise (for this
49
-project, you do not), you want to go for the latest version, which will
50
-be reflected by the most recent datestamp encoded in the file's name.
43
+There may be multiple versions of **unittools** available at the download
44
+link. Unless you have specific reason otherwise (for this project, you do
45
+not), you want to go for the latest version, which will be reflected by
46
+the most recent datestamp encoded in the file's name.
51 47
52 48
For example, say you have the following:
53 49
... ...
@@ -56,27 +52,27 @@ For example, say you have the following:
56 52
* unittools-20170123-13.tar.gz
57 53
* unittools-20170201-09.tar.gz
58 54
59
-From visual inspection, you would select the "20170201-09" one, because
60
-the date it encodes (Feb 1st, 2017 at 9am) is the most recent in that
61
-group. You will find this to be a common practice with many software
55
+From visual inspection, you would select the "20170201-09" one, because
56
+the date it encodes (Feb 1st, 2017 at 9am) is the most recent in that
57
+group. You will find this to be a common practice with many software
62 58
projects on the internet.
63 59
64
-Note, however, that visual inspection alone is not good enough for your
65
-steps file. New versions may be released, and your steps file needs to
66
-obtain the most recent version available. To facilitate this task, the
67
-latest and greatest version of unittools will be listed in a file called
68
-**LATEST** (which you should see near the top of the directory index
69
-listing). You can make use of this file to assist you in automating the
70
-process of determining and downloading the latest version of the
60
+Note, however, that visual inspection alone is not good enough for your
61
+steps file. New versions may be released, and your steps file needs to
62
+obtain the most recent version available. To facilitate this task, the
63
+latest and greatest version of unittools will be listed in a file called
64
+**LATEST** (which you should see near the top of the directory index
65
+listing). You can make use of this file to assist you in automating the
66
+process of determining and downloading the latest version of the
71 67
unittools tools.
72 68
73
-Once those two steps are complete, you can begin on the tasks listed in
69
+Once those two steps are complete, you can begin on the tasks listed in
74 70
your **TASK** file.
75 71
76 72
### UNITTOOLS SUITE
77 73
78
-The unittools suite is a collection of command-line tools that perform
79
-various unit conversions you may find useful for this project. The tools
74
+The unittools suite is a collection of command-line tools that perform
75
+various unit conversions you may find useful for this project. The tools
80 76
include:
81 77
82 78
* **cm2in** - convert centimeters to inches
... ...
@@ -100,19 +96,19 @@ include:
100 96
101 97
The tools by default expect input via STDIN, and will output to STDOUT.
102 98
103
-These tools have command-line arguments which can alter their default
104
-behavior. You may want to review the options and defaults (try running
105
-them with the **-h** argument to see what sort of functionality is
99
+These tools have command-line arguments which can alter their default
100
+behavior. You may want to review the options and defaults (try running
101
+them with the **-h** argument to see what sort of functionality is
106 102
available).
107 103
108 104
## PROCESS
109 105
110
-In the **TASK** file, you will be given a set of source quantities/units
111
-and destination units you need to construct command-lines for to solve,
112
-using the tools provided to you in the **unittools** suite. You will
113
-also want to make use of pipes and command expansions in your solutions.
106
+In the **TASK** file, you will be given a set of source quantities/units
107
+and destination units you need to construct command-lines for to solve,
108
+using the tools provided to you in the **unittools** suite. You will also
109
+want to make use of pipes and command expansions in your solutions.
114 110
115
-As an example, take the following (formatted as it would appear in your
111
+As an example, take the following (formatted as it would appear in your
116 112
**TASK** file):
117 113
118 114
```
... ...
@@ -124,7 +120,7 @@ output_unit: ft
124 120
chain_delim: " >> "
125 121
```
126 122
127
-With these in mind, we can set about solving this problem, using the
123
+With these in mind, we can set about solving this problem, using the
128 124
tools in combination to arrive at the desired result.
129 125
130 126
A potential solution would be as follows:
... ...
@@ -137,7 +133,7 @@ lab46:~/src/SEMESTER/unix/upf1$ echo "13.78" | in2ft
137 133
lab46:~/src/SEMESTER/unix/upf1$
138 134
```
139 135
140
-But that's not very optimized. We could instead do something better,
136
+But that's not very optimized. We could instead do something better,
141 137
like:
142 138
143 139
```
... ...
@@ -146,15 +142,15 @@ lab46:~/src/SEMESTER/unix/upf1$ echo "35.000 cm" | cm2in OPTIONS | in2ft OPTIONS
146 142
lab46:~/src/SEMESTER/unix/upf1$
147 143
```
148 144
149
-Note that with **precision**, you need to instruct the tools to display
145
+Note that with **precision**, you need to instruct the tools to display
150 146
out to the specified number of decimal places.
151 147
152
-We'll want to record our command-lines in the appropriate place. Since
153
-this is task #0, we'll want to record it in a file called:
154
-**task0.cli**, which should basically just contain the command-lines you
155
-ran, merely placed in a text file.
148
+We'll want to record our command-lines in the appropriate place. Since
149
+this is task #0, we'll want to record it in a file called: **task0.cli**,
150
+which should basically just contain the command-lines you ran, merely
151
+placed in a text file.
156 152
157
-For final output, we'll want to display the chain of conversions we went
153
+For final output, we'll want to display the chain of conversions we went
158 154
through. So, for the above example:
159 155
160 156
```
... ...
@@ -163,22 +159,22 @@ lab46:~/src/SEMESTER/unix/upf1$ ./task0.cli
163 159
lab46:~/src/SEMESTER/unix/upf1$
164 160
```
165 161
166
-Basically, each task#.cli will be its own script. If we were to execute
162
+Basically, each task#.cli will be its own script. If we were to execute
167 163
it, the correct result should be produced.
168 164
169 165
## UPF1STEPS
170 166
171
-You will once again be creating a steps file that can automate your
172
-project (ie it contains a list of non-interactive steps to complete the
167
+You will once again be creating a steps file that can automate your
168
+project (ie it contains a list of non-interactive steps to complete the
173 169
task).
174 170
175
-As in previous projects, **upf1steps** will contain the steps you took
176
-from the point of creating your project directory, copying the **TASK**
177
-file, and downloading the unittools suite, up until the submit step
171
+As in previous projects, **upf1steps** will contain the steps you took
172
+from the point of creating your project directory, copying the **TASK**
173
+file, and downloading the unittools suite, up until the submit step
178 174
(hint: just run the task#.cli scripts within the steps script).
179 175
180
-To clarify: YES, I want to see steps creating a project directory,
181
-copying and downloading files in question, extracting, compiling,
176
+To clarify: YES, I want to see steps creating a project directory,
177
+copying and downloading files in question, extracting, compiling,
182 178
installing, and then of course running each individual task#.cli script.
183 179
184 180
There are some additional constraints you need to keep in mind:
... ...
@@ -201,8 +197,8 @@ There are some additional constraints you need to keep in mind:
201 197
separating it from the colon.
202 198
* there is NO space between value and unit
203 199
204
-For example, a sample output of your **upf1steps** script should appear
205
-as follows (but your # values will of course be different based on your
200
+For example, a sample output of your **upf1steps** script should appear
201
+as follows (but your # values will of course be different based on your
206 202
individual **TASK** file):
207 203
208 204
```
... ...
@@ -214,14 +210,14 @@ lab46:~/src/SEMESTER/unix/upf1$
214 210
215 211
## SUBMISSION
216 212
217
-By successfully performing this project, you should have a set of
218
-`task#.cli` files (one for each task). You will want to submit these,
213
+By successfully performing this project, you should have a set of
214
+`task#.cli` files (one for each task). You will want to submit these,
219 215
along with a **upf1steps** file.
220 216
221 217
### SUBMIT TOOL USAGE
222 218
223
-To submit this project to me using the **submit** tool, run the
224
-following command at your lab46 prompt:
219
+To submit this project to me using the **submit** tool, run the following
220
+command at your lab46 prompt:
225 221
226 222
```
227 223
$ submit unix upf1 upf1steps task*.cli
... ...
@@ -236,9 +232,9 @@ Submitting unix project "upf1":
236 232
SUCCESSFULLY SUBMITTED
237 233
```
238 234
239
-You should get some sort of confirmation indicating successful
240
-submission if all went according to plan. If not, check for typos and or
241
-locational mismatches.
235
+You should get some sort of confirmation indicating successful submission
236
+if all went according to plan. If not, check for typos and or locational
237
+mismatches.
242 238
243 239
### RUBRIC
244 240
... ...
@@ -250,7 +246,7 @@ I'll be looking for the following:
250 246
*:upf1:upf1steps only modifies files if USER matches [13/13]
251 247
*:upf1:upf1steps builds the various task#.cli files it runs [13/13]
252 248
*:upf1:upf1steps obtains the latest unittools release from site [13/13]
253
-*:upf1:upf1steps only displays specified STDOUT output [13/13]
249
+*:upf1:upf1steps only displays specified STDOUT output (no STDERR) [13/13]
254 250
*:upf1:upf1steps errorlessly creates local project directory [13/13]
255 251
*:upf1:upf1steps makes clear, effective use of wildcards [13/13]
256 252
*:upf1:upf1steps defines and uses custom variables [13/13]
haas/fall2026/unix/projects/wpa0.md
... ...
@@ -137,11 +137,13 @@ As this would be a great opportunity to better familiarize yourself with
137 137
138 138
Here are the starting pages for the efforts this semester:
139 139
140
- * [https://lab46.g7n.org/~cg004474/wpa0/adventure.html](https://lab46.g7n.org/~cg004474/wpa0/adventure.html)
141
- * [https://lab46.g7n.org/~ebaile11/wpa0/adventure.html](https://lab46.g7n.org/~ebaile11/wpa0/adventure.html)
142
- * [https://lab46.g7n.org/~lbailey6/wpa0/adventure.html](https://lab46.g7n.org/~lbailey6/wpa0/adventure.html)
143
- * [https://lab46.g7n.org/~lwyrick/wpa0/adventure.html](https://lab46.g7n.org/~lwyrick/wpa0/adventure.html)
144
- * [https://lab46.g7n.org/~qlewis/wpa0/adventure.html](https://lab46.g7n.org/~qlewis/wpa0/adventure.html)
140
+ * [https://lab46.g7n.org/~bbissell/wpa0/adventure.html](https://lab46.g7n.org/~bbissell/wpa0/adventure.html)
141
+ * [https://lab46.g7n.org/~bpatrice/wpa0/adventure.html](https://lab46.g7n.org/~bpatrice/wpa0/adventure.html)
142
+ * [https://lab46.g7n.org/~cbrinser/wpa0/adventure.html](https://lab46.g7n.org/~cbrinser/wpa0/adventure.html)
143
+ * [https://lab46.g7n.org/~kstroma2/wpa0/adventure.html](https://lab46.g7n.org/~kstroma2/wpa0/adventure.html)
144
+ * [https://lab46.g7n.org/~mdavis54/wpa0/adventure.html](https://lab46.g7n.org/~mdavis54/wpa0/adventure.html)
145
+ * [https://lab46.g7n.org/~pmazzar3/wpa0/adventure.html](https://lab46.g7n.org/~pmazzar3/wpa0/adventure.html)
146
+ * [https://lab46.g7n.org/~tpeter11/wpa0/adventure.html](https://lab46.g7n.org/~tpeter11/wpa0/adventure.html)
145 147
146 148
## PAST ENTRIES
147 149
... ...
@@ -163,6 +165,11 @@ Here are some prior semester examples, which you can use for inspiration
163 165
* [https://lab46.g7n.org/~wedge/wpa0/hcordell/adventure.html](https://lab46.g7n.org/~wedge/wpa0/hcordell/adventure.html)
164 166
* [https://lab46.g7n.org/~amelvil2/0x2/adventure.html](https://lab46.g7n.org/~amelvil2/0x2/adventure.html)
165 167
* [https://lab46.g7n.org/~gsalce/0x1/adventure.html](https://lab46.g7n.org/~gsalce/0x1/adventure.html)
168
+ * [https://lab46.g7n.org/~cg004474/wpa0/adventure.html](https://lab46.g7n.org/~cg004474/wpa0/adventure.html)
169
+ * [https://lab46.g7n.org/~ebaile11/wpa0/adventure.html](https://lab46.g7n.org/~ebaile11/wpa0/adventure.html)
170
+ * [https://lab46.g7n.org/~lbailey6/wpa0/adventure.html](https://lab46.g7n.org/~lbailey6/wpa0/adventure.html)
171
+ * [https://lab46.g7n.org/~lwyrick/wpa0/adventure.html](https://lab46.g7n.org/~lwyrick/wpa0/adventure.html)
172
+ * [https://lab46.g7n.org/~qlewis/wpa0/adventure.html](https://lab46.g7n.org/~qlewis/wpa0/adventure.html)
166 173
167 174
## SUBMISSION
168 175
... ...
@@ -178,10 +185,10 @@ To submit this project to me using the **submit** tool, run the following
178 185
command at your lab46 prompt:
179 186
180 187
```
181
-lab46:~/src/SEMESTER/unix/wpa0$ submit unix wpa0 wpa0.tar.gz https://lab46.g7n.org/~username/adventure.html
188
+lab46:~/src/SEMESTER/unix/wpa0$ submit unix wpa0 wpa0.tar.gz https://lab46.g7n.org/~username/wpa0/adventure.html
182 189
Submitting unix project "wpa0":
183 190
-> wpa0.tar.gz (OK)
184
- -> https://lab46.g7n.org/~username/adventure.html(OK)
191
+ -> https://lab46.g7n.org/~username/wpa0/adventure.html(OK)
185 192
186 193
SUCCESSFULLY SUBMITTED
187 194
```
... ...
@@ -195,7 +202,7 @@ mismatches.
195 202
I'll be evaluating the project based on the following criteria:
196 203
197 204
```
198
-234:wpa0:final tally of results (234/234)
205
+260:wpa0:final tally of results (260/260)
199 206
*:wpa0:only relative addressing used [13/13]
200 207
*:wpa0:all assets hosted locally on lab46 [13/13]
201 208
*:wpa0:overall website is under 12MiB in size [13/13]
... ...
@@ -208,10 +215,12 @@ I'll be evaluating the project based on the following criteria:
208 215
*:wpa0:at least 9 additional pages [13/13]
209 216
*:wpa0:each additional page has link(s) to navigate [13/13]
210 217
*:wpa0:each additional page is connected via available links [13/13]
218
+*:wpa0:at least 3 obstacles with start over link [13/13]
211 219
*:wpa0:adventure contains at least 4 images [13/13]
212 220
*:wpa0:adventure pages utilize additional content enhancements [13/13]
213 221
*:wpa0:minimum of three subdirectories storing adventure files [13/13]
214 222
*:wpa0:page and media located in pertinent directory [13/13]
223
+*:wpa0:web content and directories have correct permissions [13/13]
215 224
*:wpa0:web site also stored in private semester repository [13/13]
216 225
*:wpa0:web site visitations solicited on the DISCORD for feedback [13/13]
217 226
```