f33a4463f4ea24424352e8857c2104a26166c47d
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 | ``` |