vault backup: 2024-01-25 14:02:02
52
.obsidian/workspace.json
vendored
@@ -21,7 +21,7 @@
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "Semester 2/Computer Systems Internals & Linux/Week 1/Week 2 Computer Systems Internals.md",
|
||||
"file": "Semester 2/HCI/Week 2/Week 2 Human Computer Interfaces.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
}
|
||||
@@ -95,7 +95,7 @@
|
||||
"state": {
|
||||
"type": "backlink",
|
||||
"state": {
|
||||
"file": "Semester 2/Computer Systems Internals & Linux/Week 1/Week 2 Computer Systems Internals.md",
|
||||
"file": "Semester 2/HCI/Week 2/Week 2 Human Computer Interfaces.md",
|
||||
"collapseAll": false,
|
||||
"extraContext": false,
|
||||
"sortOrder": "alphabetical",
|
||||
@@ -112,7 +112,7 @@
|
||||
"state": {
|
||||
"type": "outgoing-link",
|
||||
"state": {
|
||||
"file": "Semester 2/Computer Systems Internals & Linux/Week 1/Week 2 Computer Systems Internals.md",
|
||||
"file": "Semester 2/HCI/Week 2/Week 2 Human Computer Interfaces.md",
|
||||
"linksCollapsed": false,
|
||||
"unlinkedCollapsed": true
|
||||
}
|
||||
@@ -135,7 +135,7 @@
|
||||
"state": {
|
||||
"type": "outline",
|
||||
"state": {
|
||||
"file": "Semester 2/Computer Systems Internals & Linux/Week 1/Week 2 Computer Systems Internals.md"
|
||||
"file": "Semester 2/HCI/Week 2/Week 2 Human Computer Interfaces.md"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -177,29 +177,38 @@
|
||||
},
|
||||
"active": "13f4c5e19c9ab3c8",
|
||||
"lastOpenFiles": [
|
||||
"Semester 2/Programming 2/Week 2/Week 2 Programming 2.md",
|
||||
"Semester 2/Database Systems/Week 2/Week 2 Database Systems.md",
|
||||
"Semester 2/HCI/Week 2/Week 2 Human Computer Interfaces.md",
|
||||
"Semester 2/Computer Systems Internals & Linux/Week 2/media/geese_honk_on_public_farm_with_people_in_background_uk.mp3",
|
||||
"Semester 2/Computer Systems Internals & Linux/Week 2/media/freethunderstormtimelapse.mov",
|
||||
"Semester 2/Computer Systems Internals & Linux/Week 2/media/freerometrevifountain.mov",
|
||||
"Semester 2/Computer Systems Internals & Linux/Week 2/media/freeroadrushtimelapse.mov",
|
||||
"Semester 2/Computer Systems Internals & Linux/Week 2/media/freeimage-7063371.jpg",
|
||||
"Semester 2/Computer Systems Internals & Linux/Week 2/media/freeimage-5931627.jpg",
|
||||
"Semester 2/Computer Systems Internals & Linux/Week 2/media/freeimage-216999.jpg",
|
||||
"Semester 2/Computer Systems Internals & Linux/Week 2/media/freeimage-1967619.jpg",
|
||||
"Semester 2/Computer Systems Internals & Linux/Week 2/media/freeimage-1816737.jpg",
|
||||
"Semester 2/Computer Systems Internals & Linux/Week 2/media/footsteps_forest_01.mp3",
|
||||
"Semester 2/Computer Systems Internals & Linux/Week 2/media/firework_fountain_sparks_crackle.mp3",
|
||||
"Semester 2/Computer Systems Internals & Linux/Week 2/media/dentist_drill_working_on_tooth.mp3",
|
||||
"Semester 2/Computer Systems Internals & Linux/Week 2/media/car_drive_on_wet_motorway_at_60mph_car_stops_at_end_daewoo_nexia_automatic.mp3",
|
||||
"Semester 2/Computer Systems Internals & Linux/Week 2/media/134517847.mp4",
|
||||
"Semester 2/Computer Systems Internals & Linux/Week 2/media/112707307.mp4",
|
||||
"images/Pasted image 20240123164006.png",
|
||||
"images/Pasted image 20240123163911.png",
|
||||
"Semester 2/Database Systems/Week 1/Week 1 Database Systems.md",
|
||||
"Semester 1/Database Systems/Week 10/Week 10 Database Systems.md",
|
||||
"Semester 2/Computer Systems Internals & Linux/Week 1/Week 2 Computer Systems Internals.md",
|
||||
"Semester 2/Programming 2/Week 2/Week 2 Programming 2.md",
|
||||
"Semester 2/Programming 2/Week 1/Week 1 Programming 2.md",
|
||||
"Semester 2/Programming 2/README.md",
|
||||
"Semester 2/HCI/README.md",
|
||||
"Semester 2/Database Systems/README.md",
|
||||
"Semester 2/Computer Systems Internals & Linux/README.md",
|
||||
"images.md",
|
||||
"Semester 2/Database Systems/Week 1/Week 1 Database Systems.md",
|
||||
"Semester 2/HCI/Week 2",
|
||||
"Semester 2/HCI",
|
||||
"Semester 2/Programming 2/Week 2",
|
||||
"Semester 2/Programming 2/Week 1/java-apps/HelloWorld/HelloWorldApp.class",
|
||||
"Semester 2/Programming 2/Week 1/java-apps/HelloWorld/start.sh",
|
||||
"Semester 2/Programming 2/Week 1/java-apps/HelloWorld/HelloWorldApp.java",
|
||||
"Semester 2/Programming 2/Week 1/java-apps/HelloWorld",
|
||||
"Semester 2/Programming 2/Week 1/java-apps",
|
||||
"Semester 2/Programming 2/Week 1/zoo-io-v3/ZooApp.java#",
|
||||
"Semester 2/Programming 2/Week 1/zoo-io-v3/__SHELL31.class",
|
||||
"Semester 2/Computer Systems Internals & Linux/Week 1/workshop/testdir/test.md",
|
||||
"Semester 2/Computer Systems Internals & Linux/Week 1/Week 1 Computer Systems Internals.md",
|
||||
"Semester 1/Database Systems/Week 11/Week 11 Database Systems.md",
|
||||
"Semester 1/Database Systems/Week 10/Week 10 Database Systems.md",
|
||||
"Semester 1/Database Systems/Assignment/Querying Database.md",
|
||||
"README.md",
|
||||
"2023-10-31.md",
|
||||
@@ -207,22 +216,13 @@
|
||||
"Semester 1/Web Development and HCI/Assignment 1/src/images/proxmox-03.jpg",
|
||||
"Semester 1/Web Development and HCI/Assignment 1/src/images/proxmox-04.jpg",
|
||||
"Web Development and HCI/Assignment 1/src/images/Screenshot from 2023-12-07 18-29-51.png",
|
||||
"Semester 1/Web Development and HCI/Assignment 1/src/images/proxmox-02.jpg",
|
||||
"Web Development and HCI/Assignment 1/src/images/Screenshot from 2023-12-07 17-29-53.png",
|
||||
"Web Development and HCI/Assignment 1/src/images/proxmox-02.png",
|
||||
"Web Development and HCI/Assignment 1/src/images/Screenshot from 2023-12-07 16-49-07.png",
|
||||
"Semester 1/Web Development and HCI/Assignment 1/src/images/proxmox-01.jpg",
|
||||
"Semester 1/Database Systems/Week 9/Week 9 Database Systems.md",
|
||||
"Semester 1/Database Systems/Assignment/ERD.png",
|
||||
"Semester 1/Database Systems/Week 8/Week 8 Database Systems.md",
|
||||
"Semester 1/Database Systems/Week 7/Week 7 Database Systems.md",
|
||||
"Semester 1/Database Systems/Week 5/Week 5 Database Systems.md",
|
||||
"Semester 1/Database Systems/Week 6/Week 6 Database Systems.md",
|
||||
"Semester 1/Database Systems/Assignment/Relational Model.md",
|
||||
"Semester 1/Database Systems/Assignment/ER Diagram.md",
|
||||
"Semester 1/Database Systems/Assignment/Populating Database.md",
|
||||
"Semester 1/Database Systems/Assignment/postgre Compatible.md",
|
||||
"images/Pasted image 20231204191255.png",
|
||||
"Database Systems/Untitled.canvas",
|
||||
"Untitled 1.canvas",
|
||||
"Untitled.canvas"
|
||||
|
@@ -0,0 +1,12 @@
|
||||
#!/bin/bash
|
||||
if [ $# -ne 1 ]; then
|
||||
echo You need to give just one argument
|
||||
elif [ -d "$1" ]; then
|
||||
echo Deleting directory \"$1\"
|
||||
mv "$1" ~/wastebasket/
|
||||
elif [ -f "$1" ]; then
|
||||
echo Deleting file \"$1\"
|
||||
mv "$1" ~/wastebasket/
|
||||
else
|
||||
echo \"$1\" does not exist
|
||||
fi
|
@@ -0,0 +1,18 @@
|
||||
#!/bin/bash
|
||||
if [ $# -ne 1 ]; then
|
||||
echo You need to give just one argument
|
||||
elif [ -e ~/wastebasket/"$1" ]; then
|
||||
echo \"$1\" already exists in wastebasket, so I will not delete
|
||||
elif [ -d "$1" ]; then
|
||||
if [ $(ls -A "$1" | wc -l) -gt 0 ]; then
|
||||
echo Directory \"$1\" is not empty, so I will not delete
|
||||
else
|
||||
echo Deleting directory \"$1\"
|
||||
mv "$1" ~/wastebasket
|
||||
fi
|
||||
elif [ -f "$1" ]; then
|
||||
echo Deleting file \"$1\"
|
||||
mv "$1" ~/wastebasket
|
||||
else
|
||||
echo \"$1\" does not exist
|
||||
fi
|
BIN
Semester 2/Computer Systems Internals & Linux/Week 2/media.zip
Normal file
After Width: | Height: | Size: 3.3 MiB |
After Width: | Height: | Size: 1.9 MiB |
After Width: | Height: | Size: 435 KiB |
After Width: | Height: | Size: 3.0 MiB |
After Width: | Height: | Size: 1.9 MiB |
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
num=1;
|
||||
while [ $# -gt 0 ]; do
|
||||
echo argument $num is \"$1\".
|
||||
shift
|
||||
let num++
|
||||
done
|
@@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
cat ~/.bash_history | while read line; do
|
||||
if echo $line | grep -Eq "^(mkdir|cd)"; then
|
||||
dir=$(echo $line | sed -r 's/(mkdir|cd) +//')
|
||||
if [ -d "$dir" ]; then
|
||||
echo "YES: $dir"
|
||||
else
|
||||
echo "NO: $dir"
|
||||
fi
|
||||
fi
|
||||
done
|
@@ -0,0 +1,13 @@
|
||||
#!/bin/bash
|
||||
file=1;
|
||||
for audio in media/*.mp3; do
|
||||
if [ $audio != "media/footsteps_forest_01.mp3" ]; then
|
||||
echo Processing $audio
|
||||
filename="00$file"
|
||||
filename=${filename:(-3)}
|
||||
sox $audio temp.wav silence 1 0 0
|
||||
sox media/footsteps_forest_01.mp3 temp.wav -C 128 $filename.mp3
|
||||
rm temp.wav
|
||||
let file=file+1
|
||||
fi
|
||||
done
|
@@ -0,0 +1,11 @@
|
||||
#!/bin/sh
|
||||
date=$(date "+%a %d-%m-%Y %H:%M")
|
||||
for image in media/*.jpg; do
|
||||
filename=$(basename $image)
|
||||
if [ -e thumbs/$filename ]; then
|
||||
echo $filename has already been converted
|
||||
else
|
||||
echo Converting $filename
|
||||
convert $image -resize "640x480>" -rotate 90 -background magenta -pointsize 15 -gravity Center label:"$date" -append -rotate -90 thumbs/$filename
|
||||
fi
|
||||
done
|
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
dir=$(dirname "$1")
|
||||
file=$(basename "$1")
|
||||
if [ $# -ne 1 ]; then
|
||||
echo You need to give just one argument
|
||||
elif [ ! -e ~/wastebasket/"$file" ]; then
|
||||
echo \"$file\" does not exist in wastebasket
|
||||
elif [ -e "$1" ]; then
|
||||
echo \"$1\" already exists, so I will not undelete
|
||||
else
|
||||
echo Restoring \"$file\" to \"$dir\"
|
||||
if [ ! -d "$dir" ]; then
|
||||
mkdir "$dir"
|
||||
fi
|
||||
mv ~/wastebasket/"$file" "$dir"
|
||||
fi
|
@@ -0,0 +1,14 @@
|
||||
#!/bin/bash
|
||||
for video in media/*.mp4 media/*.mov; do
|
||||
if [ ! -e $video ]; then
|
||||
echo No videos to convert
|
||||
exit 1
|
||||
fi
|
||||
echo Processing $video
|
||||
dir=$(dirname "$video")
|
||||
file=$(basename "$video" .mp4)
|
||||
file=$(basename "$file" .mov)
|
||||
avconv -i $video -s 80x50 $dir/$file.mpg
|
||||
|
||||
mv $video $video.backup
|
||||
done
|
19772
Semester 2/Database Systems/Exercise Booklet.pdf
Normal file
@@ -0,0 +1,78 @@
|
||||
# Query Optimisation
|
||||
|
||||
Dominant cost in query processing is secondary storage access. The fewer blocks accessed, the faster the database queries can be.
|
||||
Many tuples will fit into a single block, requiring the query to: find the block, find the tuple, edit the tuple, and place it back in the block. This is inefficient if we are doing many different queries accessing different blocks.
|
||||
|
||||
# Types of Index
|
||||
|
||||
## Primary Index
|
||||
|
||||
Data file sequentially ordered by ordering key field, indexing field is built on the ordering key field. Guaranteed to have unique value for each tuple.
|
||||
|
||||
## Clustering Index
|
||||
|
||||
Data file sequentially ordered on non-key field, indexing field built on same non-key field. Can be more than one tuple corresponding to a value in the indexing field.
|
||||
|
||||
## Primary / Clustered Indices
|
||||
|
||||
Affect the order the data is stored in a file.
|
||||
|
||||
## Secondary Indices
|
||||
|
||||
Give a lookup table to the file.
|
||||
|
||||
# Index Restrictions
|
||||
|
||||
- Table can have 1 primary index OR 1 clustering index.
|
||||
- Most frequently looked up value is often the best choice
|
||||
- Some DBMS' assume PK is primary index, as it is usually used to refer to rows
|
||||
|
||||
# Exercise
|
||||
|
||||
1. What is a Query Tree?
|
||||
A query tree is a visual model used to represent a logical model of database queries. Each leaf node represents a relation. Each internal node is a different query function ex. selection, projection, product, etc.
|
||||
|
||||
2. Write a relational algebra expression for the following query
|
||||
|
||||
```sql
|
||||
SELECT lecName, schedule
|
||||
FROM lecturer, module, enroll, student
|
||||
WHERE lastName=“Burns”
|
||||
AND firstName=“Edward”
|
||||
AND module.moduleNumber=enrol.moduleNumber
|
||||
AND lecturer.lecID=module.lectID
|
||||
AND student.stuID=enrol.stuID;
|
||||
```
|
||||

|
||||
|
||||
pi lecName, schedule
|
||||
( sigma lastName = burns
|
||||
( sigma firstName = edwards
|
||||
( sigma module.moduleNumber=enrol.moduleNumber
|
||||
( sigma (lecturer.ledID=module.lectID (lecturer x module ) x enrol ) x student
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
Draw a Query Tree for this SQL query:
|
||||
|
||||
3. Why can we not use SQL for query optimisation?
|
||||
Using relational algebra is easier for us to visualise, and less abstracted than SQL, allowing us to optimise the query flow.
|
||||
|
||||
4. List the heuristics that optimisers use to reduce optimisation cost.
|
||||
- Begin with initial query tree for SQL
|
||||
- Move SELECT operations down the tree
|
||||
- Apply more restrictive SELECT operations first ( eg. equalities before range queries )
|
||||
- Replace Cartesian products followed by selection with theta joins ( eg. *sigma(f) ( RxS )* -> *R theta(f) S* )
|
||||
- Move PROJECT operations down the query tree ( add project operations as inputs to theta joins ).
|
||||
|
||||
5. Draw a near optimal query tree for the following SQL query, and write a relational algebra expression for this tree.
|
||||
```sql
|
||||
SELECT sailors.name
|
||||
FROM sailors, reservations
|
||||
WHERE reservations.sID=sailors.ID
|
||||
AND reservations.bID=100
|
||||
AND sailors.rating=7;
|
||||
```
|
||||
|
||||

|
@@ -0,0 +1 @@
|
||||
#
|
BIN
images/Pasted image 20240123163911.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
images/Pasted image 20240123164006.png
Normal file
After Width: | Height: | Size: 15 KiB |