2024-01-22 10:12:47

This commit is contained in:
Isaac Shoebottom 2024-01-22 10:12:48 -04:00
parent 8cf1b5ba3b
commit ecba3cbcf8
78 changed files with 82766 additions and 0 deletions

1
.obsidian/app.json vendored Normal file
View File

@ -0,0 +1 @@
{}

4
.obsidian/appearance.json vendored Normal file
View File

@ -0,0 +1,4 @@
{
"accentColor": "",
"cssTheme": "Minimal"
}

5
.obsidian/community-plugins.json vendored Normal file
View File

@ -0,0 +1,5 @@
[
"table-editor-obsidian",
"obsidian-icon-folder",
"obsidian-git"
]

30
.obsidian/core-plugins-migration.json vendored Normal file
View File

@ -0,0 +1,30 @@
{
"file-explorer": true,
"global-search": true,
"switcher": true,
"graph": true,
"backlink": true,
"canvas": true,
"outgoing-link": true,
"tag-pane": true,
"properties": false,
"page-preview": true,
"daily-notes": true,
"templates": true,
"note-composer": true,
"command-palette": true,
"slash-command": false,
"editor-status": true,
"bookmarks": true,
"markdown-importer": false,
"zk-prefixer": false,
"random-note": false,
"outline": true,
"word-count": true,
"slides": false,
"audio-recorder": false,
"workspaces": false,
"file-recovery": true,
"publish": false,
"sync": false
}

20
.obsidian/core-plugins.json vendored Normal file
View File

@ -0,0 +1,20 @@
[
"file-explorer",
"global-search",
"switcher",
"graph",
"backlink",
"canvas",
"outgoing-link",
"tag-pane",
"page-preview",
"daily-notes",
"templates",
"note-composer",
"command-palette",
"editor-status",
"bookmarks",
"outline",
"word-count",
"file-recovery"
]

22
.obsidian/graph.json vendored Normal file
View File

@ -0,0 +1,22 @@
{
"collapse-filter": true,
"search": "",
"showTags": false,
"showAttachments": false,
"hideUnresolved": false,
"showOrphans": true,
"collapse-color-groups": true,
"colorGroups": [],
"collapse-display": true,
"showArrow": false,
"textFadeMultiplier": 0,
"nodeSizeMultiplier": 1,
"lineSizeMultiplier": 1,
"collapse-forces": true,
"centerStrength": 0.518713248970312,
"repelStrength": 10,
"linkStrength": 1,
"linkDistance": 250,
"scale": 0.47203902667406195,
"close": false
}

10
.obsidian/hotkeys.json vendored Normal file
View File

@ -0,0 +1,10 @@
{
"editor:context-menu": [
{
"modifiers": [
"Mod"
],
"key": "M"
}
]
}

View File

@ -0,0 +1,55 @@
{
"commitMessage": "{{date}}",
"commitDateFormat": "YYYY-MM-DD HH:mm:ss",
"autoSaveInterval": 0,
"autoPushInterval": 0,
"autoPullInterval": 0,
"autoPullOnBoot": true,
"disablePush": false,
"pullBeforePush": true,
"disablePopups": false,
"listChangedFilesInMessageBody": false,
"showStatusBar": true,
"updateSubmodules": true,
"syncMethod": "merge",
"customMessageOnAutoBackup": false,
"autoBackupAfterFileChange": false,
"treeStructure": false,
"refreshSourceControl": true,
"basePath": "",
"differentIntervalCommitAndPush": false,
"changedFilesInStatusBar": false,
"showedMobileNotice": true,
"refreshSourceControlTimer": 7000,
"showBranchStatusBar": true,
"setLastSaveToLastCommit": false,
"submoduleRecurseCheckout": false,
"gitDir": "",
"showFileMenu": true,
"lineAuthor": {
"show": false,
"followMovement": "inactive",
"authorDisplay": "initials",
"showCommitHash": false,
"dateTimeFormatOptions": "date",
"dateTimeFormatCustomString": "YYYY-MM-DD HH:mm",
"dateTimeTimezone": "viewer-local",
"coloringMaxAge": "1y",
"colorNew": {
"r": 255,
"g": 150,
"b": 150
},
"colorOld": {
"r": 120,
"g": 160,
"b": 255
},
"textColorCss": "var(--text-muted)",
"ignoreWhitespace": false,
"gutterSpacingFallbackLength": 5,
"lastShownAuthorDisplay": "initials",
"lastShownDateTimeFormatOptions": "date"
},
"autoCommitMessage": "{{date}}"
}

44363
.obsidian/plugins/obsidian-git/main.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,9 @@
{
"id": "obsidian-git",
"name": "Obsidian Git",
"description": "Backup your vault with Git.",
"isDesktopOnly": false,
"fundingUrl": "https://ko-fi.com/vinzent",
"js": "main.js",
"version": "2.22.1"
}

View File

@ -0,0 +1,512 @@
@keyframes loading {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.workspace-leaf-content[data-type='git-view'] .button-border {
border: 2px solid var(--interactive-accent);
border-radius: var(--radius-s);
}
.workspace-leaf-content[data-type='git-view'] .view-content {
padding: 0;
}
.workspace-leaf-content[data-type='git-history-view'] .view-content {
padding: 0;
}
.loading>svg {
animation: 2s linear infinite loading;
transform-origin: 50% 50%;
display: inline-block;
}
.obsidian-git-center {
margin: auto;
text-align: center;
width: 50%;
}
.obsidian-git-textarea {
display: block;
margin-left: auto;
margin-right: auto;
}
.obsidian-git-center-button {
display: block;
margin: 20px auto;
}
.tooltip.mod-left {
overflow-wrap: break-word;
}
.tooltip.mod-right {
overflow-wrap: break-word;
}
.git-tools {
display: flex;
margin-left: auto;
}
.git-tools .type {
padding-left: var(--size-2-1);
display: flex;
align-items: center;
justify-content: center;
width: 11px;
}
.git-tools .type[data-type="M"] {
color: orange;
}
.git-tools .type[data-type="D"] {
color: red;
}
.git-tools .buttons {
display: flex;
}
.git-tools .buttons > * {
padding: 0 0;
height: auto;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-d-none {
display: none;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-wrapper {
text-align: left;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-header {
background-color: var(--background-primary);
border-bottom: 1px solid var(--interactive-accent);
font-family: var(--font-monospace);
height: 35px;
padding: 5px 10px;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-header,
.workspace-leaf-content[data-type="diff-view"] .d2h-file-stats {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-stats {
font-size: 14px;
margin-left: auto;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-lines-added {
border: 1px solid #b4e2b4;
border-radius: 5px 0 0 5px;
color: #399839;
padding: 2px;
text-align: right;
vertical-align: middle;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-lines-deleted {
border: 1px solid #e9aeae;
border-radius: 0 5px 5px 0;
color: #c33;
margin-left: 1px;
padding: 2px;
text-align: left;
vertical-align: middle;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-name-wrapper {
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
font-size: 15px;
width: 100%;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-name {
overflow-x: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-wrapper {
border: 1px solid var(--background-modifier-border);
border-radius: 3px;
margin-bottom: 1em;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse {
-webkit-box-pack: end;
-ms-flex-pack: end;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
border: 1px solid var(--background-modifier-border);
border-radius: 3px;
cursor: pointer;
display: none;
font-size: 12px;
justify-content: flex-end;
padding: 4px 8px;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse.d2h-selected {
background-color: #c8e1ff;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse-input {
margin: 0 4px 0 0;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-diff-table {
border-collapse: collapse;
font-family: Menlo, Consolas, monospace;
font-size: 13px;
width: 100%;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-files-diff {
width: 100%;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-diff {
overflow-y: hidden;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-side-diff {
display: inline-block;
margin-bottom: -8px;
margin-right: -4px;
overflow-x: scroll;
overflow-y: hidden;
width: 50%;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line {
padding: 0 8em;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line {
display: inline-block;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
white-space: nowrap;
width: 100%;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line {
padding: 0 4.5em;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-ctn {
word-wrap: normal;
background: none;
display: inline-block;
padding: 0;
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
vertical-align: middle;
white-space: pre;
width: 100%;
}
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-line del,
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line del {
background-color: #ffb6ba;
}
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-line del,
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line del {
background-color: #8d232881;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line del,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line del,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line ins {
border-radius: 0.2em;
display: inline-block;
margin-top: -1px;
text-decoration: none;
vertical-align: middle;
}
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins,
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line ins {
background-color: #97f295;
text-align: left;
}
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins,
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line ins {
background-color: #1d921996;
text-align: left;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-prefix {
word-wrap: normal;
background: none;
display: inline;
padding: 0;
white-space: pre;
}
.workspace-leaf-content[data-type="diff-view"] .line-num1 {
float: left;
}
.workspace-leaf-content[data-type="diff-view"] .line-num1,
.workspace-leaf-content[data-type="diff-view"] .line-num2 {
-webkit-box-sizing: border-box;
box-sizing: border-box;
overflow: hidden;
padding: 0 0.5em;
text-overflow: ellipsis;
width: 3.5em;
}
.workspace-leaf-content[data-type="diff-view"] .line-num2 {
float: right;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber {
background-color: var(--background-primary);
border: solid var(--background-modifier-border);
border-width: 0 1px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: var(--text-muted);
cursor: pointer;
display: inline-block;
position: absolute;
text-align: right;
width: 7.5em;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber:after {
content: "\200b";
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber {
background-color: var(--background-primary);
border: solid var(--background-modifier-border);
border-width: 0 1px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: var(--text-muted);
cursor: pointer;
display: inline-block;
overflow: hidden;
padding: 0 0.5em;
position: absolute;
text-align: right;
text-overflow: ellipsis;
width: 4em;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-diff-tbody tr {
position: relative;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber:after {
content: "\200b";
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-emptyplaceholder,
.workspace-leaf-content[data-type="diff-view"] .d2h-emptyplaceholder {
background-color: var(--background-primary);
border-color: var(--background-modifier-border);
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-prefix,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber,
.workspace-leaf-content[data-type="diff-view"] .d2h-emptyplaceholder {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber {
direction: rtl;
}
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-del {
background-color: #fee8e9;
border-color: #e9aeae;
}
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-ins {
background-color: #dfd;
border-color: #b4e2b4;
}
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-del {
background-color: #521b1d83;
border-color: #691d1d73;
}
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-ins {
background-color: rgba(30, 71, 30, 0.5);
border-color: #13501381;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-info {
background-color: var(--background-primary);
border-color: var(--background-modifier-border);
color: var(--text-normal);
}
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-file-diff .d2h-del.d2h-change {
background-color: #fdf2d0;
}
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-file-diff .d2h-del.d2h-change {
background-color: #55492480;
}
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-file-diff .d2h-ins.d2h-change {
background-color: #ded;
}
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-file-diff .d2h-ins.d2h-change {
background-color: rgba(37, 78, 37, 0.418);
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-wrapper {
margin-bottom: 10px;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-wrapper a {
color: #3572b0;
text-decoration: none;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-wrapper a:visited {
color: #3572b0;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-header {
text-align: left;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-title {
font-weight: 700;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-line {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
text-align: left;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list {
display: block;
list-style: none;
margin: 0;
padding: 0;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list>li {
border-bottom: 1px solid var(--background-modifier-border);
margin: 0;
padding: 5px 10px;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list>li:last-child {
border-bottom: none;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-switch {
cursor: pointer;
display: none;
font-size: 10px;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-icon {
fill: currentColor;
margin-right: 10px;
vertical-align: middle;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-deleted {
color: #c33;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-added {
color: #399839;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-changed {
color: #d0b44c;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-moved {
color: #3572b0;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-tag {
background-color: var(--background-primary);
display: -webkit-box;
display: -ms-flexbox;
display: flex;
font-size: 10px;
margin-left: 5px;
padding: 0 2px;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-deleted-tag {
border: 2px solid #c33;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-added-tag {
border: 1px solid #399839;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-changed-tag {
border: 1px solid #d0b44c;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-moved-tag {
border: 1px solid #3572b0;
}
/* ====================== Line Authoring Information ====================== */
.cm-gutterElement.obs-git-blame-gutter {
/* Add background color to spacing inbetween and around the gutter for better aesthetics */
border-width: 0px 2px 0.2px 2px;
border-style: solid;
border-color: var(--background-secondary);
background-color: var(--background-secondary);
}
.cm-gutterElement.obs-git-blame-gutter > div, .line-author-settings-preview {
/* delegate text color to settings */
color: var(--obs-git-gutter-text);
font-family: monospace;
height: 100%; /* ensure, that age-based background color occupies entire parent */
text-align: right;
padding: 0px 6px 0px 6px;
white-space: pre; /* Keep spaces and do not collapse them. */
}

View File

@ -0,0 +1,30 @@
{
"settings": {
"migrated": 2,
"iconPacksPath": ".obsidian/plugins/obsidian-icon-folder/icons",
"fontSize": 16,
"emojiStyle": "none",
"iconColor": null,
"recentlyUsedIcons": [
"IbGraphLineUp",
"TiPlusEqual",
"FarRegular",
"LiNetwork",
"SiC"
],
"recentlyUsedIconsSize": 5,
"rules": [],
"extraMargin": {
"top": 0,
"right": 4,
"bottom": 0,
"left": 0
},
"iconInTabsEnabled": false
},
"Semester 1/CS3418": "SiC",
"Semester 1/CS2418": "TiNetwork",
"Semester 2/CS2333": "TiPlusEqual",
"Semester 2/CS3873": "LiNetwork",
"Semester 2/STAT2593": "IbGraphLineUp"
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

View File

@ -0,0 +1 @@
<svg width="16px" height="16px" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 3v14c0 1.886 0 2.828.586 3.414C4.172 21 5.114 21 7 21h14M6.5 17l.498-1.329c.29-.77.434-1.155.653-1.328a1 1 0 0 1 1.021-.13c.256.113.492.45.964 1.124.528.754.792 1.131 1.064 1.243a1 1 0 0 0 1.056-.19c.216-.2.332-.645.564-1.535l1.244-4.768c.264-1.01.396-1.516.633-1.72a1 1 0 0 1 1.083-.144c.282.135.54.589 1.06 1.495.595 1.043.893 1.564 1.192 1.697a1 1 0 0 0 1.116-.209c.23-.232.32-.826.498-2.013L20 3.5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg>

After

Width:  |  Height:  |  Size: 613 B

Binary file not shown.

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16px" height="16px" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="2" width="6" height="6"></rect><rect x="16" y="16" width="6" height="6"></rect><rect x="2" y="16" width="6" height="6"></rect><path d="M5 16v-4h14v4"></path><path d="M12 12V8"></path></svg>

After

Width:  |  Height:  |  Size: 389 B

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor" width="16px" height="16px"><title>C</title><path d="M16.5921 9.1962s-.354-3.298-3.627-3.39c-3.2741-.09-4.9552 2.474-4.9552 6.14 0 3.6651 1.858 6.5972 5.0451 6.5972 3.184 0 3.5381-3.665 3.5381-3.665l6.1041.365s.36 3.31-2.196 5.836c-2.552 2.5241-5.6901 2.9371-7.8762 2.9201-2.19-.017-5.2261.034-8.1602-2.97-2.938-3.0101-3.436-5.9302-3.436-8.8002 0-2.8701.556-6.6702 4.047-9.5502C7.444.72 9.849 0 12.254 0c10.0422 0 10.7172 9.2602 10.7172 9.2602z"></path></svg>

After

Width:  |  Height:  |  Size: 549 B

Binary file not shown.

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-network" width="16px" height="16px" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M12 9m-6 0a6 6 0 1 0 12 0a6 6 0 1 0 -12 0"></path><path d="M12 3c1.333 .333 2 2.333 2 6s-.667 5.667 -2 6"></path><path d="M12 3c-1.333 .333 -2 2.333 -2 6s.667 5.667 2 6"></path><path d="M6 9h12"></path><path d="M3 19h7"></path><path d="M14 19h7"></path><path d="M12 19m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"></path><path d="M12 15v2"></path></svg>

After

Width:  |  Height:  |  Size: 639 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-plus-equal" width="16px" height="16px" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M4 7h6"></path><path d="M7 4v6"></path><path d="M20 16h-6"></path><path d="M20 19h-6"></path><path d="M5 19l14 -14"></path></svg>

After

Width:  |  Height:  |  Size: 428 B

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,10 @@
{
"id": "obsidian-icon-folder",
"name": "Icon Folder",
"version": "2.2.1",
"minAppVersion": "0.9.12",
"description": "This plugin allows to add an emoji or an icon to a folder or file.",
"author": "Florian Woelki",
"authorUrl": "https://florianwoelki.com/",
"isDesktopOnly": false
}

View File

@ -0,0 +1,111 @@
.obsidian-icon-folder-icon {
border: 1px solid transparent;
margin: 0px 4px 0px 0px;
display: flex;
align-self: center;
margin: auto 0;
}
.nav-folder-title,
.nav-file-title {
align-items: center;
}
.obsidian-icon-folder-setting .setting-item-control .dropdown {
margin-right: 12px;
}
.obsidian-icon-folder-setting input[type='color'] {
margin: 0 6px;
}
.obsidian-icon-folder-modal.prompt-results {
margin: 0;
overflow-y: auto;
display: grid;
grid-template-columns: repeat(5, minmax(0, 1fr));
}
.prompt .obsidian-icon-folder-subheadline {
margin-top: 12px;
font-size: 12px;
color: gray;
grid-column-start: 1;
grid-column-end: 6;
}
@media (max-width: 640px) {
.obsidian-icon-folder-modal.prompt-results {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.prompt .obsidian-icon-folder-subheadline {
grid-column-end: 4;
}
}
.obsidian-icon-folder-modal.prompt-results .suggestion-item {
cursor: pointer;
white-space: pre-wrap;
display: flex;
justify-content: flex-end;
align-items: center;
flex-direction: column-reverse;
text-align: center;
font-size: 13px;
color: gray;
padding: 16px 8px;
line-break: auto;
word-break: break-word;
line-height: 1.3;
}
.obsidian-icon-folder-modal.prompt-results .suggestion-item.suggestion-item__center {
justify-content: center;
}
.obsidian-icon-folder-icon-preview {
font-size: 22px;
}
.obsidian-icon-folder-icon-preview img {
width: 16px;
height: 16px;
}
.obsidian-icon-folder-icon-preview svg {
width: 24px;
height: 24px;
color: currentColor;
margin-bottom: 4px;
}
.obsidian-icon-folder-dragover {
position: relative;
}
.obsidian-icon-folder-dragover-el {
position: absolute;
width: 100%;
height: 100%;
color: var(--text-normal);
background-color: var(--background-secondary-alt);
display: flex;
align-items: center;
justify-content: center;
}
/* Custom rule modal. */
.obsidian-icon-folder-custom-rule-modal .modal-title h3 {
margin: 0;
}
.obsidian-icon-folder-custom-rule-modal .modal-content {
display: flex;
align-items: center;
justify-content: center;
}
.obsidian-icon-folder-custom-rule-modal .modal-content input {
width: 100%;
margin-right: 0.5rem;
}

View File

@ -0,0 +1,6 @@
{
"formatType": "normal",
"showRibbonIcon": true,
"bindEnter": true,
"bindTab": true
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,17 @@
{
"id": "table-editor-obsidian",
"name": "Advanced Tables",
"author": "Tony Grosinger",
"authorUrl": "https://grosinger.net",
"description": "Improved table navigation, formatting, manipulation, and formulas",
"isDesktopOnly": false,
"minAppVersion": "1.0.0",
"version": "0.19.1",
"js": "main.js",
"fundingUrl": {
"Github Sponsor": "https://github.com/sponsors/tgrosinger",
"Buy me a Coffee": "https://buymeacoffee.com/tgrosinger",
"Paypal": "https://paypal.me/tgrosinger"
},
"donation": "https://buymeacoffee.com/tgrosinger"
}

View File

@ -0,0 +1,78 @@
:root {
--advanced-tables-helper-size: 28px;
}
.HyperMD-table-row span.cm-inline-code {
font-size: 100%;
padding: 0px;
}
.advanced-tables-buttons>div>.title {
font-weight: var(--font-medium);
font-size: var(--nav-item-size);
color: var(--nav-item-color);
text-decoration: underline;
}
[data-type="advanced-tables-toolbar"] .nav-buttons-container {
column-gap: 0.2rem;
margin: 0.2rem 0 0.2rem 0;
justify-content: start;
}
[data-type="advanced-tables-toolbar"] .nav-buttons-container::before {
min-width: 2.6rem;
line-height: var(--advanced-tables-helper-size);
font-size: var(--nav-item-size);
font-weight: var(--nav-item-weight);
color: var(--nav-item-color);
}
[data-type="advanced-tables-toolbar"] .nav-buttons-container>* {
height: var(--advanced-tables-helper-size);
line-height: var(--advanced-tables-helper-size);
}
[data-type="advanced-tables-toolbar"] .nav-buttons-container .nav-action-button {
width: var(--advanced-tables-helper-size);
height: var(--advanced-tables-helper-size);
display: flex;
justify-content: center;
align-items: center;
border-radius: var(--radius-s);
}
[data-type="advanced-tables-toolbar"] .nav-buttons-container .nav-action-button:hover {
background-color: var(--nav-item-background-hover);
color: var(--nav-item-color-hover);
font-weight: var(--nav-item-weight-hover);
}
.advanced-tables-row-label {
width: 50px;
}
.widget-icon {
width: 20px;
height: 20px;
fill: var(--text-muted);
}
.widget-icon:hover {
fill: var(--text-normal);
}
.advanced-tables-csv-export textarea {
height: 200px;
width: 100%;
}
.advanced-tables-donation {
width: 70%;
margin: 0 auto;
text-align: center;
}
.advanced-tables-donate-button {
margin: 10px;
}

View File

@ -0,0 +1,8 @@
{
"name": "Minimal",
"version": "7.4.7",
"minAppVersion": "1.5.0",
"author": "@kepano",
"authorUrl": "https://twitter.com/kepano",
"fundingUrl": "https://www.buymeacoffee.com/kepano"
}

2158
.obsidian/themes/Minimal/theme.css vendored Normal file

File diff suppressed because one or more lines are too long

196
.obsidian/workspace.json vendored Normal file
View File

@ -0,0 +1,196 @@
{
"main": {
"id": "e1a53579631687bf",
"type": "split",
"children": [
{
"id": "343200a9ccdd5b70",
"type": "tabs",
"children": [
{
"id": "e09960f7848825cf",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "README.md",
"mode": "source",
"source": false
}
}
}
]
}
],
"direction": "vertical"
},
"left": {
"id": "07178968c0b4f60d",
"type": "split",
"children": [
{
"id": "006b9729c9d7e840",
"type": "tabs",
"children": [
{
"id": "724d50474acd511c",
"type": "leaf",
"state": {
"type": "file-explorer",
"state": {
"sortOrder": "alphabetical"
}
}
},
{
"id": "3ee353d7850a4513",
"type": "leaf",
"state": {
"type": "search",
"state": {
"query": "",
"matchingCase": false,
"explainSearch": false,
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical"
}
}
},
{
"id": "13b29070f0312d32",
"type": "leaf",
"state": {
"type": "bookmarks",
"state": {}
}
}
]
}
],
"direction": "horizontal",
"width": 200
},
"right": {
"id": "75bd23c3d21f228b",
"type": "split",
"children": [
{
"id": "07bc882d75fe7881",
"type": "tabs",
"children": [
{
"id": "27eb57880cb7a30d",
"type": "leaf",
"state": {
"type": "backlink",
"state": {
"file": "README.md",
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical",
"showSearch": false,
"searchQuery": "",
"backlinkCollapsed": false,
"unlinkedCollapsed": true
}
}
},
{
"id": "e874b7ec2e7755c5",
"type": "leaf",
"state": {
"type": "outgoing-link",
"state": {
"file": "README.md",
"linksCollapsed": false,
"unlinkedCollapsed": true
}
}
},
{
"id": "a34764e0ca80e0b3",
"type": "leaf",
"state": {
"type": "tag",
"state": {
"sortOrder": "frequency",
"useHierarchy": true
}
}
},
{
"id": "81f8d381eff656aa",
"type": "leaf",
"state": {
"type": "outline",
"state": {
"file": "README.md"
}
}
},
{
"id": "2fdc1454fc8434d2",
"type": "leaf",
"state": {
"type": "advanced-tables-toolbar",
"state": {}
}
}
],
"currentTab": 4
}
],
"direction": "horizontal",
"width": 200,
"collapsed": true
},
"left-ribbon": {
"hiddenItems": {
"switcher:Open quick switcher": false,
"graph:Open graph view": false,
"canvas:Create new canvas": false,
"daily-notes:Open today's daily note": false,
"templates:Insert template": false,
"command-palette:Open command palette": false,
"table-editor-obsidian:Advanced Tables Toolbar": false
}
},
"active": "724d50474acd511c",
"lastOpenFiles": [
"README.md",
"Semester 2/STAT2593/2024-01-22.md",
"Semester 2/STAT2593/2024-01-19.md",
"Semester 2/STAT2593/Untitled",
"Semester 2/CS3873/2024-01-17.md",
"Semester 2/CS3873/2024-01-15.md",
"Semester 2/CS2333/2024-01-15.md",
"Semester 2/STAT2593/01-17-2024.md",
"Semester 2/STAT2593",
"Semester 2",
"Semester 1",
"Semester 2/CS2333",
"Semester 1/CS3418/Exam Studying.md",
"Semester 2/CS3873",
"Semester 1/CS3418/11-27-2023.md",
"Semester 1/CS3418/11-24-2023.md",
"Semester 1/CS3418/11-15-2023.md",
"Semester 1/CS3418/11-13-2023.md",
"Semester 1/CS3418/11-1-2023.md",
"Semester 1/CS2418/10-27-2023.md",
"Semester 1/CS3418/10-30-2023.md",
"Semester 1/CS3418/10-27-2023.md",
"Semester 1/CS2418/10-25-2023.md",
"Semester 1/CS2418/10-23-2023.md",
"Semester 1/CS3418/10-25-2023.md",
"Semester 1/CS2418/10-18-2023.md",
"Semester 1/CS2418/10-20-2023.md",
"Semester 1/CS3418/10-23-2023.md",
"Semester 1/CS3418/10-20-2023.md",
"Semester 1/CS2418/10-16-2023.md",
"Semester 1/CS2418/10-13-2023.md",
"CS3418/CS3418.md",
"Semester 1/CS2418",
"Semester 1/CS3418"
]
}

View File

@ -0,0 +1,5 @@
Lecture Topic: Access Control
[Module Four PDF](https://lms.unb.ca/d2l/le/content/231513/viewContent/2614490/View)

View File

@ -0,0 +1,30 @@
Lecture Topic: Access Control
[Module Four PDF](https://lms.unb.ca/d2l/le/content/231513/viewContent/2614490/View)
Access Control Policies:
- Discretionary access control (DAC): Controls access based on the identity of the requestor, and based on access rules. The term discretionary is used because it implies that the authorized user might be able to give access to another user (?)
- Mandatory access control (MAC): Controls access based on security labels which indicate how sensitive the data is, and use security clearances. The term mandatory is used because a user who has access to a resource may not enable another user to have access
- Role based access control (RBAC): Controls access based on roles that users have in a given system, and rules that control access to resources based on those roles
- Attribute based access control (ABAC): Controls access based on attributes a user has, the resource being requested and the current environment
Subject, Object and Access Right
- Subject: A subject is an entity capable of accessing objects. A comparison is that a subject can be equated to a process. A process is often a representation of a given user.
- Owner: The creator of the resource, full access to the resource. May belong to system administrator, or a project administrator for project resources
- Group: A group of users that may be assigned in addition to the owner. In most schemes a user can belong to multiple groups
- World: Generally the least amount of access, and applies to everyone who isn't the owner or in an allowed group
- Object: An object is the resources which access is being controlled. Usually objects store or receive information. Examples would include files, directories, blocks, pages, programs
- Access Right: The way in which a subject may access an object
- Read: The subject can view information. This also allows copying and printing
- Write: The user may add, modify or delete the object being requested. Write includes access to read
- Execute: You can execute the object if it is a program or script that contains code/machine code
- Delete: The subject can delete the object that is being accessed
- Create: The subject can create new objects
- Search: The subject can access the a of objects and search a directory
Example: UNIX file access control
All UNIX file systems are administered by the OS in terms of inodes. An inode (index node) is a control structure for a particular file. Several files may be associated with a single inode, but an active inode is associated with exactly one file, and each file is controlled by exactly one inode.
Attributes of the file as well as permissions are stored in the inode. On the disk there is an inode table or inode list, which stores all the files on the system. When a file is opened its inode is stored in a memory resident inode table.

View File

@ -0,0 +1,68 @@
Lecture Topic: UNIX file access control
[Module Four PDF](https://lms.unb.ca/d2l/le/content/231513/viewContent/2614490/View)
# Unix file access control
Each Unix user is assigned a UUID, a user is also a member of a primary group, and possibly a number of other groups, each identified by a group ID
When a file is created, it is designed as owned by a particular user and marked with that users id, It also belongs to a specific group, which initially is is either its creators primary group or the group of its parents directory that has SETGID permission set
Associated with each file is a set of 12 protection bits
Table of Unix permissions goes here
## Superuser
One particular user ID is designated as "super user"
This user is exempt from the usual file access control constraints and has systemwide accesses.
Any program that is owned by, and SetUID to, the superuser potentially grants unrestricted access to the system. Great care must be taken when running or making programs which run as the superuser
## Access Control Lists in Unix
Many modern unix and unix based OS, support access control lists, including FreeBSD, OpenBSD and Solaris, often called the "extended access control list" while the traditional Unix system is called the "minimal access control list"
## Mandatory access control
In this nondiscretionary model, people are granted access based on information clearance.
A central authority regulates access rights based on different security levels
Policies are set by the administrator, the users cannot able to interact with permissions.
This model is common in military or government.
MAC puts strict controls on users and information being accessed
## Role-based access control
In RBAC, permissions are based on roles that users assume, rather than identity.
This is typically a job function within an organization.
Users are often given roles either statically or dynamically according to their responsibilities.
The relationship of users to roles is many to many, as is the relationship to roles to resources or system objects
The set of users changes, and the assignment of roles can often be dynamic
The set of roles is often static, usually only adding or deleting occasionally
Each role will often have access rights to one or more given resources. The set of resources that a role can access often does not change frequently as well.
Insert RBAC table example here
RBAC reference models
- RBAC0: This is the minimum for a RBAC system
- RBAC1: This is RBAC0 with the addition of role hierarchies, which enables role inheritance
- RBAC2: This is RBAC0 which adds constraints, which restrict the way in which componants of an RBAC system can be configured (ex, only x times a day)
- RBAC3: Is RBAC0, RBAC1 and RBAC2
## Attribute based access control
ABAC is a dynamic, context based policy that defines access based on policies granted by users. The system is used in identity and access management frameworks.
An ABAC model can define authorizations that express conditions on properties of both the resources and the subject
Long ass list in the slides

View File

@ -0,0 +1,5 @@
Lecture Topic: Database Security
[Module Five](https://lms.unb.ca/d2l/le/content/231513/viewContent/2617915/View)
I'm tired as shit might not type anything

View File

@ -0,0 +1,7 @@
Lecture Topic: Databases
A view is a virtual table
A view is the result of a query, that returns selected rows and columns from one or more tables
SQL injection is the one of the most common forms of database attacks

View File

@ -0,0 +1,23 @@
Lecture Topic: SQL attacks
[Slides](https://lms.unb.ca/d2l/le/content/231513/viewContent/2617915/View)
## Inferential attack:
An inferential attack, there is no transfer of data, but the attacker is able to reconstruct information by sending particular requests, and observing the behavior of the website or database
Examples include
- Illegal/logically incorrect queries: This lets the attacker gain information by observing the behavior of the backend system. Even error codes can often give the attacker information about vulnerable/injectable
- Blind SQL injection: This attacks allow the attacker to infer data present on the server, by noticing the differences in of the result of the injection. An example would be the difference between a request with injection being true or false, it could be a result code, an empty response, result strings.
## Out of band attack:
This is a type of attack where the attacker receives information through another method, like an email containing data. This can happen when the outbound connectivity of a system is lax.
# SQL injection countermeasures
There are three types of countermeasures, generally
## Defensive Coding
Here are a few defensive coding techniques:
- Manual defensive coding practices like type checking (only allow alphanumeric characters in username)
- Parameterized query inspection, by specifying the structure of a query, we can inspect the contents of input and not allow the parameters to affect the structure of the query itself
- SQL DOM is a way to do automatic data validation and escaping by providing a standard structure to database queries.
## Detection

View File

@ -0,0 +1,5 @@
Lecture Topic: Database Encryption
[Slides](https://lms.unb.ca/d2l/le/content/231513/viewContent/2617915/View)
database encryption and problems with database encryption and database encryption schemes

View File

@ -0,0 +1,3 @@
Lecture Topic: Malicious Software
Look in slides on it, not that hard

View File

@ -0,0 +1,30 @@
Lecture Topic: User authentication
Exploiting User Mistakes:
If the system assigns password the user is more likely to write it down because of difficulty in remembering it.
A user might share a password between colleagues to make it easier to share files
Social engineering may be used to trick users into sharing passwords
Many systems have administration accounts with preconfigured passwords
Exploiting Multiple Password Use:
Attacks can be much more effective if users share the same password between services
Electronic Monitoring:
If a password is communicated across a network to log on to a remote system, it is vulnerable to eavesdropping. Encryption will not fix this, because the attacker can simply replay the encrypted password to the endpoint.
Why is password based authentication still popular?
Physical tokens can be expensive and inconvenient, and biometrics require hardware that authenticates said biometrics that can be potentially exploited
The use of hashed passwords:
You can hash a password to not store plaintext passwords on a server or service. This hash is designed to be slow to execute as to slow down attackers who are trying to brute force the passwords.
Salting is when you add a random salt value to a password to avoid duplicates in a password database, as hashes of common passwords can be analyzed to deduce the plaintext password. It makes it way harder to perform dictionary attacks on the database as the hash function would not give the same hash as the hash + salt
This scheme comes from UNIX, and a password file. It stores the user ID, salt, and the hash code, and the slow hash function uses the salt + plaintext password and compares this result to the hash code for authentication.
The salt is okay to store because the salt is truly random data and knowing the salt does not make it easier to reverse the plaintext based on the hash code.
Password Cracking of User-Chosen passwords:
A traditional approach is to use a large dictionary and trying each entry against the password file.
Another approach is to use precomputed hashes, and compare this against the password file directly. This approach can be countered by using a large salt value and a large hash length

View File

@ -0,0 +1,66 @@
Lecture Topic: Passwords
Password File Access Control:
One way to thwart a password attack is to deny the attacker access to the password file
Shadow password?
There are four techniques to attempt make users select a secure password:
- User Education (Can be ignored)
- Computer Generated Passwords (Users are unable to remember)
- Reactive password checking (Resource intensity issues)
- The system runs its own password cracker in the background and finds guessable passwords
- Any vulnerable passwords remain vulnerable until the checker checks it
- Complex Password Policy (Proactive password checker - Promising approach)
- Password must be at least 16 characters (basic16)
- Must have 8 characters including an uppercase and lowercase, a digit and may not contain a dictionary word (comprehensive8)
Another possible procedure is to simply compile a large dictionary of bad passwords, and when the user selects a password, it makes sure it's not in the list
But there are problems with this approach
- Space: The dictionary must be very large to be effective
- Time: The time required to search a large dictionary may itself be large. If the checker also checks permutations the time cost increases exponentially
Bloom filter
A technique for developing an effective and proactive password checker
- It is based on rejecting words on a list that has been implemented on a number of systems
Token based Authentication
Objects that a user posses for the purpose of user authentication are called tokens
- Memory Cards can store but not process data
- For authentication a user provides both the memory card and some form of password or PIN
- A typical example is an ATM, which uses a card in addition for a PIN for access to your money
Potential Drawbacks
- Requires reader
- Token loss
- User dissatisfaction
Smart Cards
Physical Characteristics:
- Has an embedded micro pressor. A smart token that looks like a card is called a smart card
User Interface:
- Manual interface includes a keypad and display for human/token interaction
Electronic Interface:
- Contact
- A smart card that needs to be inserted, and data transfer is done over physical contact points
- Contactless
- A contactless card only requires a close proximity to a reader. Both the reader and the card have an antenna and the two communicate using radio frequencies.
- Most contactless cards also derive power from these signals
- NFC is a common example
Authentication protocol
The purpose of a smart token is to provide authentication
Static:
With a static protocol, the user authenticates himself with the token and then the token authenticates with the computer. The second part is similar to the operation of a memory token
Dynamic password generator:
In this case the token generates a password periodically. The password is entered into the computer either manually or automatically. The computer needs to synchronized with the token for this method to work, as the computer needs to know the correct password for the given time
Challenge-response:
In this case the computer system generates a challenge …
Electronic Identity Cards - Digital applications of identity cards
Biometric Authentication: Covered next class

View File

@ -0,0 +1,48 @@
Lecture Topic:
Security & Cryptographic Tools
# Security
Prevention: Ideally, no attack can be performed. The use of encryption, prevent unauthorized access, to prevent the loss of confidentiality of the system
Detection: If we cannot prevent, we should at least detect them. The use of intrusion detection systems, like firewalls, to log unauthorized access to system is important. An example of this would be denial of service detection so we can fall to a more available system
Something 1
Something 2
Assurance and Evaluation
Assurance is the degree of confidence that a system meets the needs of the system being protected, like if the design meets the requirements and the implementation meets the specifications of the design.
Evaluation is the examination of the security system, either through testing (pen testing) by internal teams or external teams, or analysis through of use of mathematical methods. A pillar of this area of work is the use of standard evaluation criteria that can be applied to any security system
# Cryptographic Tools
Recap: Information is the most valuable business resource. If this data is private or confidential, we must protect it. It needs to be protected while in motion and at rest
## Symmetric Encryption
Conventional single key encryption example:
Plaintext input is fed into an algorithm (for example DES) and encrypted with a single key. The output is then transferred. On the other side the same key is used to decrypt the data back to the same input text.
The five ingredients of symmetric encryption:
- Plaintext: The input
- Encryption algorithm: It performs substitutions and transformations to the plaintext
- Secret key: It determines what the encryption algorithm does to the plaintext
- Cipher text: This is the scrambled (meaningless) message that the algorithm outputs based on the secret key
- Decryption algorithm: This is the encryption algorithm run in reverse. It requires the secret key as an input, as well as the plaintext. It extracts the original plaintext from the cipher text
Strong Symmetric Encryption:
- Assume the opponent knows the encryption algorithm, without knowing the key
- The target should not be able toe get the plaintext or the secret key, even if a number of cipher texts are known by the opponent
Approaches to attacking symmetric encryption
- Cryptanalysis: Tries to analyze the algorithm, with maybe some guesses about what the plaintext contains, and maybe some sample pairs of plaintext-ciphertext pairs. The attacker tried to deduce the original plaintext or secret key used.
- Brute force: Try every possible key until something that makes sense is obtained. On average, half the number of total keys need to be tried in order to achieve success.
## Cryptographic Systems Classification:
The types of operations used by algorithms:
- Substitution
- Transposition
An simple an unsecure example would be a Caesar cipher, which uses solely transposition and has basically no key. An example of the key for a Caesar cipher would be 13, for ROT13, an application of the Caesar cipher
The number of keys used to encryption
- Symmetric, single-key, secret-key, conventional encryption
- Asymmetric, two-key, public-key encryption

View File

@ -0,0 +1,59 @@
Lecture Topic:
Symmetric Block Encryption Algorithms:
A block cipher processes the plaintext into in fixed sized blocks and produces a ciphertext of equal size for each plaintext block, the algorithm process longer plaintexts amounts as a series of fixed sized blocks
- DES
- AES
- Triple DES
Comparison of three popular symmetric encryption algorithms
| Size in Bits | DES | Triple DES | AES |
| --------------------- | --- | ---------- | ------------- |
| Plaintext Block Size | 64 | 64 | 128 |
| Ciphertext Block Size | 64 | 54 | 128 |
| Key size | 56 | 112 or 168 | 128, 192, 256 |
Average Time for Exhaustive Key Search
| Key Size (bits) | Cipher | Number of Alternative Keys | Time Required at 10^9 decryptions/us | Time Required at 10^13 decyption/us |
| --------------- | ---------- | -------------------------- | ------------------------------------ | ----------------------------------- |
| 56 | DES | 2^56 | 2^55us = 1.125 years | 1 hour |
| 128 | AES | 2^128 | 2^127us = 5.3x10^21 years | 5.3^10^17 years |
| 168 | Triple DES | 2^168 | 2^127us | 5.3x10^17 years |
| 192 | AES | | | |
| 256 | AES | | | |
Practical Security issues
How do you encrypt a unit of data larger than a single 64 bit or 128 bit block?
Larger data must be broken down into a series of fixed length blocks
Problem: You use the same key for every single block
Stream Cipher:
A stream cipher processes the input elements continuously, producing output one element at a time, as it goes along. It goes by bit, or by byte, not by block
A pseudorandom stream is one that is unpredictable without knowledge of the input key. The output of the generator called a keystream, is combined one byte at a time with the plaintext stream using the bitwise exclusive or operator (XOR)
What is Message (Data) Authentication?
Encryption protects against passive attacks (eavesdropping)
A different requirement is to protect against active attack (falsification of data or transactions). Protection against this is Message or Data Authentication
A message, file, document or other data is said to be authentic, when it is genuine and came from its alleged source. We may also with to verify a message's timeliness (if it has not been delayed or replayed) and sequence relative to other message flowing between the two parties
Authentication using symmetric encryption?
Perform authentication by using symmetric encryption. If we assume only the sender and receiver share a key, then only the genuine sender would be able to encrypt a message successfully or the other participant, provided the receiver can recognize a valid message
If the message includes an error detection code and a sequence number the receiver is assured that no alterations have been made and the sequence is proper. If the message includes a timestamp, the receiver is assured that the message has not been delayed beyond that normally expected for network transit
But note! Symmetric encryption alone cannot guarantee that data is authenticated
Message Authentication without message encryption:
An exchange in which one side has a heavy load and can't afford to decrypt all incoming messages, authentication is carried out on a selective basis, with messages being chosen at random for checking.
Message Authentication Code:
The use of a secret key to generate a small block of data, known as a message authentication code (MAC) that is appended to the message. This verifies that the message has not been modified if the MAC value can be verified.
The MAC is generated by using a secret key in combination with the rest of the message. This verifies that the message is authentic, even if it is not encrypted, as only the sender and receiver could generate a valid MAC.
The code can also be called a message integrity code instead of a MAC

View File

@ -0,0 +1,41 @@
Lecture Topic:
## One way hash function:
An alternative to the message authentication is the one way hash function.
As with MAC, a hash function accepts a variable size message as input and produces a fixed size message digest as output (eg 1024 bits). Unlike a MAC ta hash function does not take a secret key as input. The message is padded out toe and integer multiple of some fixed length. The padding includes the value of the length of the original message in bits
Common one way hash functions:
- MD5
- SHA
Secure Hash Functions:
Important to note in addition to message authentication, but also digital signatures produce a fingerprint
Requirements:
1. H can be applied to a block of data of any size
2. H produces a fixed length output
3. H(x) is relatively easy to compute for any given x
4. For any given code h, it is computationally infeasible to find x such that H(x) = h
(Property: one way, or primage resistant)
5. For any given block x, it is computationally infeasible to find y = x with H(y) = H(x)
(Property: second preimage resistant)
6. It is computationally infeasible to find any pair (x, y) such that H(x) = H(y)
(Property: collision resistance)
## Security of Hash functions
Approaches to attacking a secure hash function
- cryptanalysis: exploiting logical weaknesses in the algorithm
- brute-force attacks:
- the strength of a hash function attacks depends solely on the length of the hash code produces by the algorithm
- preimage resistant: $2^n$ (level of effort)
- collision resistance: $2^{n/2}$ due to birthday problem
Secure hash function algorithms:
The most widely used hash function has been the Secure Hash Function (SHA)
Passwords:
- a hash of a password is stored in the OS rather than the password itself
- this ensures that the password is not retrievable by a hacker who gains access to the password file
- when a user logs in the password value is hashed and compared to the hash value stored in the system
Intrusion Detection
- store the hash value for a file h(f)

View File

@ -0,0 +1,16 @@
Lecture Topic: Public Key Encryption
Public Key Encryption, first proposed by Diffie and Hellman in 1976.
Asymmetric Encryption is when we use different keys for encrypting and decrypting text. It is slow and is used for encrypting keys, so you have to remember
One key: fast, large data
Pair of keys: slow, small data
Requirements for public key cryptography
It is computationally easy for party B to generate a pair
It is computationally easy for a sender A knowing the public key and the message to be encrypted M to generate the corresponding cipher text:
-
-
-

View File

@ -0,0 +1,21 @@
Lecture Topic: Public Key Infrastructure
PKI protects information assets in several ways
- Authentication (using digital certificates)
- Integrity (content not changed)
- Privacy (secure information)
- Authorization (access control)
- Nonrepudiation (can validate action)
The Diffie Hellman key exchange provides no authentication of the two communicating partners, so it is vulnerable to man in the middle attacks
Digital envelopes are an application of public key encryption which can be used to protect a symmetric key, which can be used to protect a message without needing to first arrange for sender and receiver to have the same secret key
Randomness
Two criteria are used to valid a sequence of random numbers:
- Uniform Distribution: The distribution of the numbers should be uniform, that is the frequency of occurrence of each of the number should be approximately the same
- Independence: No one value in the sequence can be inferred from the others
Random vs Pseudorandom

View File

@ -0,0 +1 @@
Lecture Topic: Round Roblin Scheduling

View File

@ -0,0 +1,70 @@
# Lecture Topic: Real Time CPU scheduling
**Material up to 5.27 on the slides will be on the midterm**
Multilevel Feedback Queue:
A process can move between multiple queues
Get from slides (?)
Real Time CPU scheduling
Can present challenges
Soft real time systems: Critical real time tasks have the highest priortiy but there are no guarantees
Hard real time systems: Tasks need to be scheduled first (?)
Event Latency: The amount of time that elapses from when an event occurs to when it is serviced
Two types of latency's affect performance:
- Interrupt latency
- Dispatch Latency
Dispatch latency conflicts:
- You need to preempt any processes running in kernel mode
- Release by low priority processes of resource needed by high priority processes
Priority based scheduling:
For real time scheduling, you need to support preemptive, priority based scheduling, but this only guarantees soft real time
For hard real time, must also provide ability to meet deadlines:
Processes have new characteristics, periodic ones require CPU at constant intervals:
- has processing time t, deadline of d, and a period p
- 0 < t < d < p
- rate of period task is 1/p
Rate monotonic Scheduling:
A priority is assigned based on the inverse of its period.
Shorter periods = higher priority
longer periods = lower priority
Earliest deadline first:
Priorities are assigned according to deadlines:
The earlier the deadline, the higher the priority
The later the deadline, the lower the priority
Algorithm Evaluation:
(?)
# **Midterm Review:**
Midterm is balanced:
Applying tools relevant to concepts
Answering theory questions
About 60% of the grade is theory (no coding)
50 minutes
Understanding the labs and stuff under misc. in d2l should be enough
Topics to review:
Slides (Chapter 1 to Chapter 5, until rate monotonic scheduling)
Lab 2 and Lab 3
A1 and A2
Content of the misc. useful stuff folder
Scheduling, metrics
Materials occurring multiple times in the lectures
How to answer if you don't know
If you remember the book answer - use that
answer in your own words if you are trying to explain a concept
the book is the most reliable source
What would the output of the following function will probably be on the midterm

View File

@ -0,0 +1,13 @@
Lecture Topic: Producer Consumer
There is a problem with using a counter in a multithreaded queue, as the counter can be stored in the CPU's registers at the same time, and when saving that register with changes, with out of order execution, can lead to misleading counts.
Say a CPU loads a variable into a register and on two threads, one increments it, and the other decrements it, you can encounter a scenario where it saves the the variable as not the intended value. This is called a race condition.
You need some for of synchronization mechanism to ensure this operation occurs correctly
You may also need a synchronization mechanism for scenarios where only 1 thread reads and 1 thread writes. An example is an ATM, where a read reads a valid valance, and another separate transaction occurs, and in the time between the start and finalization of the purchase, there is now insufficient funds.
Critical Section Problem:
A typical example of a critical section problem that, in a loop, there is some critical section is reading shared memory.

View File

@ -0,0 +1,37 @@
Lecture Topic: Critical Section
A solution to the critical section problem has to
- Ensure mutual exclusion
- Progress: If 2 resources are needed to progress, the program needs to properly assign resources, and not perform no progress work, such as assigning threads only 1 resource to each thread? Pen and form problem from notes
- Bounded waiting
Discusses this algorithm
https://en.wikipedia.org/wiki/Peterson%27s_algorithm
It is mentioned that the problem with this algorithm is that the initial implementation is only applicable to 2 threads
It also has problems with modern implementations that implement instruction or memory access reordering
Memory models
- Strongly ordered: Changes are immediately visible to all other processors
- Weakly ordered: Changes in memory are not immediately visible to all other processors
A memory barrier is a way to force a propagation of changes values in memory to all other processors
# Mutex Locks:
Before a critical section, acquire a mutex lock, and then release it after
For this to be functional you need atomic operations on acquire and release
This also requires busy waiting, because it needs to poll for the lock. Thus it is called a spinlock
# Semaphore
It is accesses with the wait and signal functions, these atomic functions perform these things
- wait: It waits while the semaphore is less than or equal to 0, and after it decrements the semaphore.
- signal: Simply increases the semaphore by 1
A semaphore can be thought of as a mutex lock that allows execution to more than one thread at once. The initial semaphore value is the number of threads that are allowed concurrent execution.
Semaphores can be also used to solve synchronization problems, not just the critical section problem

View File

@ -0,0 +1,3 @@
Lecture Topic: Synchronization
Look at slides later, was about posix and waiting for variables to change for synconization

View File

@ -0,0 +1,46 @@
Lecture Topic: Producer Consumer & Reader Writer Problem
[Lecture 20](https://lms.unb.ca/d2l/le/content/231539/viewContent/2623161/View)
If you were to use two semaphores and a mutex you can have multiple producers and multiple consumers.
Producer
```c
while(true) {
// produce am item
wait(empty)
wait(mutex)
buffer[index] = item
index++
signal(mutex)
signal(full)
}
```
Consumer
```c
while(true) {
// consume an item
wait(empty)
wait(mutex)
item = buffer[index]
index--
signal(mutex)
signal(full)
}
```
[Slides Chapter 7](https://lms.unb.ca/d2l/le/content/231539/viewContent/2622059/View)
In the reader writer problem, you can encounter the "First reader-writer problem", in which the writer process never writes. A "second reader-writer problem" in which when a writer is ready to write, no reader is available. These problems can sometimes be solved by kernel reader writer locks.
[Dining Philosopher problem](https://en.wikipedia.org/wiki/Dining_philosophers_problem)
[Slides Chapter 8](https://lms.unb.ca/d2l/le/content/231539/viewContent/2623159/View)
Deadlock Characterization:
Deadlocks can occur if four conditions are true simultaneously
- Mutual exclusion: only one process can use a resource

View File

@ -0,0 +1,16 @@
Lecture Topic: Memory Management
# Midterm Review
1. When a syscall is performed.
2. Difference is single core vs multiple core concurrency, and yes its possible for concurrency and parallel execution to occur at the same time
3. It is not going to differ in output
4. It's a visual answer
5. Depends on 4
There are three forms of memory generally, Memory in the CPU, System Memory, and Block Devices. In the CPU you have registers and cache.
Cost increases as you go from Block devices to CPU memory, but speed also increases, so it is an important tradeoff to consider.

View File

@ -0,0 +1,7 @@
Lecture Topic: Multithreading
Scheduling Algorithms:
Preemptive and non-preemptive
Preemptive means that the process might be interuppted to improve responsiveness of the ssytem
Non-preemptive means that processes are allowed to execute until I/O request or termination

View File

@ -0,0 +1,90 @@
Lecture Topic: Scheduling
Scheduling Criteria:
- CPU Utilization
- Throughput
- Turnaround Time
- Waiting Time: Time spent in ready queue
- Response Time
Multiprocessing Scheduler Design Choices:
- One Queue for all processes
- A queue per process
CPU: Homogeneous or heterogenous
| CPU 0 | CPU 1 |
| ----- | ----- |
| Cache | Cache |
| ISA | ISA |
Affinity:
Soft - May be scheduled on multiple CPUs
Hard - Has to be scheduled on a designated CPU
Load Balancing: Keeping jobs evenly distributed
- Job pushing: Jobs may be pushed to another CPU
- Job stealing: Unused CPU may steal jobs from the queue
CPU alternates between computation and input output
Load stalls minimization
A load stall is when the CPU is idle when memory access is being performed
Instruction reordering
The CPU may perform operations out of order to better align with CPU computation and input output cycles, to minimize load stalls
Hyper threading:
CPU bursts are most frequently short
There are different kinds of algorithms that solve a few kinds of problems:
- First Come First Serve: When job arrives it immediately gets worked on
- Tie Breaker: When two jobs arrive at the same time
So, P0 comes first, but since we have a tie between P1 and P2. In the first come first serve case:
| Process | Arrival | Duration | Wait Time | Response Time | Turnaround |
| ------- | ------- | -------- | --------- | ------------- | ---------- |
| P0 | 0 | 3 | 0 | 0 | 3 |
| P1 | 1 | 20 | 2 | 2 | 22 |
| P2 | 1 | 5 | 22 | 22 | 27 |
So the average wait time is
(0 + 2 + 22)/3 = 8
If there are different arrival times:
| Process | Arrival | Duration | Wait | Turnaround |
| ------- | ------- | -------- | ---- | ---------- |
| P0 | 0 | 3 | 0 | 3 |
| P1 | 2 | 20 | 6 | 26 |
| P2 | 1 | 5 | 2 | 7 |
In this case the average wait time is
(0 + 6 + 2)/3 = 2.666666...
Much better.
We can reorder jobs to reduce the wait time for jobs
The turnaround time also improves (do the calculation in your head dummy)
The throughput remains the same however
Kinds of algorithms:
Shortest Job first
| Process | Arrival | Duration | Wait Time | Response Time | Turnaround |
| ------- | ------- | -------- | --------- | ------------- | ---------- |
| P0 | 0 | 9 | | | |
| P1 | 1 | 15 | | | |
| P2 | 1 | 7 | | | |
The Gantt Chart
| | P0 | | P2 | | P3 | |
| --- | --- | --- | --- | --- | --- | --- |
| 0 | | 9 | | 16 | | 31 |
The problem with this kind of algorithm is determining the duration of jobs

View File

@ -0,0 +1,5 @@
Lecture Topic: Memory
There is a problem with 32 bit systems in which the max addressable ram is 4GB at a time.
This can be solved with the use of 64 bit systems, which allow a max addressable space of 2^64 memory locations, which is in the tens of thousands of petabytes.

View File

@ -0,0 +1 @@
Lecture Topic: Paging

View File

@ -0,0 +1 @@
Lecture Topic: Assignment 5 Solution

View File

@ -0,0 +1 @@
Lecture Topic: Mass Storage

View File

@ -0,0 +1,3 @@
Lecture Topic: Mass Storage
Shortest Seek Time First:

View File

@ -0,0 +1,47 @@
Lecture Topic: Virtualization
| | Windows | Linux |
| ----------------- | -------------- | --------------------- |
| Executable Format | .exe .bat .ps1 | .sh ELF standard .out |
| Library Format | .dll | ELF .o .so |
Executables tend to not be portable, on Linux usually due to differences in the flavor of Linux, and even on windows due to different platform architecture. Interoperability is not guaranteed.
The differences between simulation and emulation
Simulation: getting the result
Emulation: mimicking the behavior
Virtualization:
Alternative to emulation and simulation: allows access to hardware by generating appropriate machine code
Why Virtualization?
- Access to hardware
- Safety, sandboxed, controlled environment
- Multiple Users
Kinds of VMs
Type 1 virtual machine: manages the VMs directly, with no interaction with a base kernel
Type 2 virtual machine: manages the VMs through interactions with the hardware with a main kernel
Process VM
- One purpose functionality VM
- Java VM as an example
OS VM
- Virtual machine that emulates entire OS/machine functionality
Example VM stack
- VirtualBox VM
- VirtualBox VMM
- Windows
- Hyper-V
- Hardware
| Virtualbox | Hyper-V |
| ---------------- | -------------- |
| OS VM, Type 2 VM | VMM, Type 1 VM |
| WSL | Docker |
| --------------------------------------------- | -------------------------------- |
| Uses Hyper-V, Reuses system calls if possible | Containers, minimal dependencies |

View File

@ -0,0 +1,39 @@
Lecture Topic: Operating System Services
Operating systems provide an environment for execution of programs and services to programs and users
Some of these services are:
- User Interface (CLI, GUI, Touch Screen)
- Program Execution: Load the program into memory, run, and end execution either normally or abnormally (errors)
- I/O operations: Files, I/O device
- File system manipulation: Supports the reading, writing of files and directories, create and delete, search, list file metadata and permission management of files and directories
There are 2 ways to design CLI:
- Executing the program by jumping directly into the program code
- Creating a new process and then invoking the program in that new process
A few sets of services that are helpful are:
- Communication between different processes on the same PC, and computers on the network, either by shared memory or message passing (packets)
- Error handling/detection
- Resource allocation: multiple users or jobs are running concurrently and resources need to be shared, like CPU cycles, memory, storage, IO devices
- Logging
- Protection and Security, protection being that all access to system resources are controlled and security is protecting the OS from outsiders, by using authentication
System Calls:
Programming interface provided by OS, typically written in C or C++, usually accessed with a high level API, not using direct system calls. Common examples would be the Win32 API, the POSIX API for Linux, Unix, BSD, macOS, or the Java API for the JVM
Typically a number is associated with each system call, the System-call interface maintains a tabled indexed according to these numbers. The system call interface invokes the intended system call and the OS returns the status and any other return values. The caller need to know nothing about how the system call is implemented. They just need to obey the API and understand what the OS will return
Often more information is required than simply the identity of the system call. Three methods are generally used to pass information to the OS
- Simplest: Pass the parameters in registers. In some cases there are more parameters than registers
- Parameters are stored in a block/table in memory and then pass the address of the block and pass it in as a parameter
- Parameters and placed on the stack and then popped of the stack as used
Linkers and Loaders:
When source code is compiled it is loaded into a physical memory location - relocatable object file. A linker combines these into a single binary executable file (also brings in libraries).
- Program resides on secondary storage as binary executable.
- Must be brought into memory by loader to be executed
- Relocation assigns final addressed to program parts and adjusts code and data in program to match those address
- Modern general purpose systems don't link libraries into executables, rather using dynamically linked libraries that are loaded as needed, shared by all that use the same version of the same library
- Object and executable files have standard formats so operating system knows how to load and start them

View File

@ -0,0 +1,48 @@
Lecture Topic: Processes
Parts of memory
- Stack
- Heap
- Program Counter
- Registers
- Arguments Vector
- Environment PATH
| Stack Layout |
| ------------------------------ |
| argv, argc |
| stack |
| heap |
| uninitialized global variables |
| initialized global variables |
| text |
Heap Memory, only the result of calls to malloc or calloc
Stack Memory, anything else, even pointers or custom typedefs, unless it was specifically allocated
Possible Process States
- New: First Stage, when the OS loads the program and before it is given CPU cycles
- Ready: When the program is ready to execute and has been added to the OS queue for execution
- Running: The program is executing instructions on the CPU
- Waiting: The program is waiting for CPU cycles or is dormant, either due to timeout or waiting for IO or events
- Terminated: The program memory is unallocated and revoked. Can be invoked by program itself or by parent (includes OS)
Process Control Block or Task Control Block
- Process state
- Program counter
- Scheduling information
- Memory info
- Accounting info
- IO status info (fds, etc)
In Linux this is implemented with a structure called `task_struct`
It's organized in a Linked List, it's used for scheduling.
The process scheduler, selects which process get CPU attention, with the goal of improving response time, as well as multiprorgramming.
Maintained Queues
- Waiting Queue
- Ready Queue
Processes could be CPU bound or IO bound
In general 100% utilization (CPU, IO) is not bad

View File

@ -0,0 +1,21 @@
Lecture Topic: Processes
Resource Sharing Options:
Not Shared
Shared
Partially Shared
fork ()
stack not shared
heap not shared
Process creation options:
Child duplicates the parent
Child has a program loaded into it
examples:
fork()
exec()
Was a bit late today, but was mostly a demo of how forking worked in C

View File

@ -0,0 +1,3 @@
Topic: Consumer Producer
Forgor ADHD medication 💀

View File

@ -0,0 +1 @@
Lecture Topic: Forking and Threading

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,49 @@
Strings and languages:
- An alphabet is a finite set of symbols, such as {1,2,3} or {0,1}
- A string is an alphabet $\sum$ is a finite sequence of symblols from $\sum$, for example 010010 and 10010101 are strings over the alphabet {0,1}
- A languge is a set of strings
- L1 = {00, 01, 10, 11}
- L2 = {a^n | n is an integer non-negative}
Notation: a to the power of n just means a repeated n times
Examples
$L_8 = \{a^m b^n | m,n \in \mathbb{z}^{nonneg}\}$
So valid strings would be
aaabbb, aaabbbb, ab, abb
$L_9 = \{a^n b^n | n \in \mathbb{z}^{nonneg}\}$
So valid strings would be
aabb, ab, aaaabbbb, aaaaaabbbbbb
$L_{11} = \{w \in \{a, b\}^* | \text{The number of "a"s is equal to the number of "b"s}\}$
This would include everything that L9 includes, but allows for the alphabet can be out of order
You can also written this as
$L_{11} = \{w \in \{a, b\}^* | n_a(w) = n_b(w)\}$
You can extend the repetition notation (exponent) to include multiple symbols by wrapping it in parentheses
Example:
$L_{12} = \{(ab)^n | n \in \mathbb{z}^{nonneg}\}$
This means we need to be careful as
$L_{13} = \{ab^n | n \in \mathbb{z}^{nonneg}\}$
is different, as L12 is asking for repetition of ab, while L13 is assigning a prefix of a and repetition of b
$L_{14} = \{a^i b^j c^k | i,j,k \in \mathbb{z}^{nonneg}, j = 2i + 3k\}$
So this means that for any number of "a"s and "c"s, the number of "b"s is predetermined if you have selected your "a"s and "c"s
Intro to functions and relations
Informally, a function (f) descrives an input output situation (A -> B)
For every input element a in A, there is exactly one ouput element b in B
f maps a to b
A is the domain of f
B is the co-domain of f

View File

@ -0,0 +1,52 @@
Lecture Topic: Functions
For every input element $a \in A$ there is exactly one output element $b \in B$
Jargon:
- f maps a to b
- the image of a under f is b
functions are one-to-one (or injective):
$\forall x,y \in A, x \neq y \rightarrow f(x) \neq f(y)$
or in other terms
$\forall x,y \in A, x = y \rightarrow f(x) = f(y)$
Example:
$f(x) = x^2$ is not one to one
Proof by counter example:
$x = -1$ and $y = 1$ are two integers in the domain that $x=y$ but $f(-1)$ and $f(1)$ are both equal to 1, so it is not one to one
To prove a function is one to one, it is a little more tricky, and needs to be general, for example:
Let x and y be any arbitrary elements of the domain where f(x) = f(y)
So it follows that x and y are equal (x = y)
Example for a real function: $g(x) = 3x - 11$
Real Numbers
Let x and y be any real number such that $g(x) = g(y)$. We will show that $x = y$
Since we know that g(x) = g(y), it means that $3x - 11 = 3y - 11$
Add 11 to both sides: $\therefore 3x = 3y$
Divide both sides by 3: $\therefore x = y$
Important to note: The definition (domain and co-domain) can change if a function is one to one, for example the square function on all integers vs all positive integers
To prove that a function A -> B is onto:
- Let be represent and arbitrary element in the co-domain B
- We want to find an element a in the domain and show that f(a) = b
Example:
Real Numbers, $f(x) = 5x + 2$ is onto
Proof: Let b be any arbitrary real number (we want to find a real number a and show that f(a) = b)
A through process might follow that, I want a value a such that f(a) = b, I want $5a + 2 = b$, then $5a = b - 2$, then $a = \frac{b - 2}{5}$
So, let $a = \frac{b - 2}{5}$ , which is a real number. Then plug this back into the function
$f(a) = f(\frac{b - 2}{5}$) (Substitution)
$= 5\frac{b-2}{5}+2$ (Definition of f)
$= (b-2) +2)$ (Algebra)
$=b$ (Algebra)
Beginning of proving a function is not onto:
Find some specific co-domain element b and show that there is no domain element that could map to b

View File

@ -0,0 +1,61 @@
Lecture Topic: Functions & Relations
When a function is onto, it means that the entire co-domain of a function is the range of the function
Proving a function is not onto:
Just prove for any element b in the co-domain B and show that b cannot be equal to f(a) for any a in the domain.
Example: $g: \mathbb{R} \rightarrow \mathbb{R}, g(x) = x^2 + 10$ is not onto
Proof:
For example, choose the element $-1$ from the co-domain $\mathbb{R}$
Consider any domain element $a$
The function will square $a$, and $a^2 \geq 0$ (because no squares are negative reals)
Then $a^2 + 10 \geq 10$, so this means that $-1$ is not in the co-domain
$\therefore$ The function is not onto
You can also use a proof by contradiction by saying that:
$g(a) = -1$
$\therefore a^2 + 10 = -1$
$\therefore a^2 = -11$
Squares of a real number cannot be negative, so the function is not onto
A function is not always numbers:
Example: Favourite UNB Course : S -> C
Where S is all students and C is all courses
What would have to be true for this to be one to one or onto?:
- One to one:
- Onto:
# Relations:
A binary relation R on two sets A and B is a subset of $A \times B$
- e.g. S = all students, C = all students, s is any given student, c is any given course
- Relation: HasTaken: for (s, c) s has taken c
- Relation Aplus: for (s,c) s got A+ in c
A relation can be between the same set, for example the set of A = {John, Jane, Bill, Sue, Mary, Betty}, we can define a relation that is the relationship between who loves who $A \times A$
- e.g. (John, Jane)
A binary relation $R \subseteq A \times A$ is also called an equivalence relation if the following conditions hold:
- reflexive: $\forall a \in A, (a,a) \in R$
- symmetric: $\forall a,b \in A, (a,b) \in R \rightarrow (b,a) \in R$
- transitive: $\forall a,b,c \in A, [(a,b) \in R \wedge (b,c) \in R] \rightarrow (a,c) \in R$
Example:
$G = \{(x,y) | x \in \mathbb{R}, y \in \mathbb{R}, x > y\}$
Is G reflexive? (Is is true that every real number is relation to itself)
No, because we can show that $(5,5) \notin \mathbb{R}$ because $5 \ngtr 5$
Is G symmetric? (Is it the case that whenever $(a,b) \in G, (b,a)$ will also be in G)
No, for example $(10,3) \in G$ because $10 > 3$ but $(3, 10) \notin G$ because $3 \ngtr 10$
Is G transitive? (Is it true that whenever (a,b) and (b,c) are in G, (a,c) will also be in G)
Yes, let a,b,c be any real numbers where $(a,b) \in G$ and $(b,c) \in G$
Since $(a,b) \in G$, we know that $a > b$
Since $(b,c) \in G$, we know that $b > c$
Then $a > b > c$, so that means that $a > c$, so also $(a,c) \in G$

View File

@ -0,0 +1,59 @@
Lecture Topic: Bandwidth and Data Rate
Analog: x(t)
Discrete: x(n)
Digital: from formula, range / set, bit sequence
Bandwidth:
$x(t) = \sum^{\infty}_{k=-\infty}A_k cos(2\pi f_k + \phi_k)$
Fourier series
Shannon Theorem:
For a Gaussian channel the data rate that can be achieved over a channel of a given bandwidth satisfies
$R \leq B_w log_2(1+\frac{S}{N}) \triangleq C$
R = Achievable data rate (bps)
$B_w$ = Channel bandwidth in Hz
S/N = Signal to noise ratio (SNR)
S = Signal power, N = noise power
Internet Architecture:
- Network Edge
- End systems: Host apps, not only computers and mobile devices but also wearables, sensors and large servers
- Access Networks: (Last hop, last mile), Connect end systems to the first router (aka edge router)
- Network Core:
- Packet switches: Routers, link layer switches
A hierarchical look at A network of network:
- Hosts connect to the internet via access ISPs, residential, cooperate ISPs, university ISPs, cellular data ISPs.
- Access ISPs in turn are interconnected through regional ISPs and tier 1 ISPs
(Diagram in slides)
Internet Access and Physical Media:
- Wired
- Dial up
- DSL
- Cable
- Fibre Optics
- Ethernet
- Wireless
- WiFi
- Cellular
- Satellite
Wired media: EM waves are guided along a solid medium (twisted pair copper, coaxial cable, fibre optics)
Wireless media: EM waves propagate through the air (Different electromagnetic spectrum/frequency bands)
Dial-Up:
Use existing telephony infrastructure
- Low Speed (56k)
- Can't use phone and internet at the same time (not always present)
- Modems modulate and demodulate data over phone lines
DSL:
Digital Subscriber Line
(Slides went fast)

View File

@ -0,0 +1,53 @@
Lecture Topic: Network Edge & Internet Access Technologies
Bandwidth and Data Rate recap:
The data rate cannot exceed the capacity of the bandwidth of a given channel, this is where the formula $R \leq B_w log_2(1+\frac{S}{N}) \triangleq C$ comes from
Doubling the data rate means that you need a bandwidth that has at least as much capacity to handle the new data rate
Internet Access Technologies:
- DSL:
- Using Frequency Division Multiplexing (FDM) it caries digital data through phone lines
- Example: Voice 0-4 kHz, Upstream 4-50 kHz, Downstream 50 kHz-1 MHz
- Twisted Pair Cable Wire:
- Constitute a fine antenna
- Cancel out cross talk and produce less radiation
- A number of pairs are bundled together in a cable
- Used in telephone systems, unheralded twisted pair (UTP) for local area networks, computer networks within a building (Ethernet)
- Data Rate: 10Mbps - 10Gbps
- Cable:
- Use cable TV companies existing cable infrastructure
- Hybrid fibre coaxial (HFC) access network
- Coaxial cables are shared to reach individual homes
- Fibre optics connect neighbourhood level junctions to CMTS
- Asymmetric 40Mbps - 1.2Gbps downstream, 30Mbps - 100Mbps upstream
- Data/TV are transmitted at different frequencies over shared cable
- At the home, splits the signals into TV and Internet signals
- Coaxial Cable
- More complex structure
- Better performance
- Excellent noise immunity because cable is very shielded
- Can span longer distances
- Bandwidth is close to 1 Ghz
- Data rates are higher than other technologies, 100s Mbps per channel
- Fibre to the home (FTTH)
- Optical network terminal in individual homes (ONT)
- Optical line terminal in central office (OLT)
- Fibre optic cables are similar to coax cables (lots of layers)
- Class core with higher index of refraction than the outer glass
- Light propagates through glass core
- Thin plastic jacket to protect glass cladding
- Fibres are typically grouped in bundles protected by an outer sheath
- The outer layer keeps the light inside, not leaking any energy by reflecting the signal off an outer sheath
- Has a few excellent features:
- Very low signal attenuation up to 100km
- Immune to electromagnetic interference
- Larger bandwidth, support data rate up to 10s or 100s of Gbps
- Hard to tap
Network Core:
- How is data moved through a network of links and packet switches?
- There are two fundamental approaches
- Circuit switching
- Packet switching
-

View File

@ -0,0 +1,42 @@
Lecture Topic: Network Core
Resource Sharing with circuit switching:
- Network resources divided into pieces allocated to connections
- Frequency division multiplexing (FDM). Dividing over bandwidth, and each end user gets a portion of the bandwidth for the entire portion of time.
- Time division multiplexing (TDM). Dividing over time, and each end user gets the full bandwidth for a portion of allocated time. Similar to round robin.
Table of some information of cellular network technologies:
CS: Circuit Switching
1G (FDMA)
2G (TDMA) (GSM/CS)
3G (CDMA) (CS/PS)
4G (PS)
5G (millimeter wave)
With circuit switching you can guarantee a certain level of performance, while with packet switching there is no/less of a guarantee of performance, which is why circuit switching was important for mobile networks as emergency calls need a certain level of performance to be guaranteed.
Packet Switching:
- Internet is based on packet switching
- ARPANET was the first packet-switched network and is an ancestor of the internet
- A sending host breaks a message into packets (numbered sequentially) and sends them into the network one by one
- Packets are transmitted individually through the network and reassembled at the receiving host to recover the original message
Packet switching is a very adaptive to changing network conditions. Due to packet chunking, packets in transit can be routed through different routes depending on the used bandwidth of other nodes on the network, and this can occur between two packets of the same chunk of data. This is because packets are numbered and are reordered at the destination.
A packet follows a path:
- First hop router: This is the first router that inspects the packet and forwards it to the next hop
- Then next router does the same, and so on
- The packets eventually arrives at the destination and are decoded
Packets follow a protocol called "store and forward"
Resource sharing with packet switching:
- Is very easy, as you can just send all packets over a link, according to different priorities
Multiplexing comparison:
- With circuit switching, if you allocate bandwidth to two services, it may end up unused and wasted, as the format of data is fixed and if service A is not using any traffic service B cannot use that other bandwidth
- Statistical multiplexing: Packet switching is on demand, so no bandwidth is explicitly allocated, and bandwidth is dynamically allocated based on current network usage
There are some downsides to packet switching to be aware of however:
- In next lecture

View File

@ -0,0 +1,66 @@
Lecture Topic: Probability
Experiment: An act where the outcome is subject to uncertainty
Sample space: The set of all possible outcomes of an experiment
Example:
- Flip a coin: $S = \{H, T\}$
- Throw a dice: $S = \{1, 2, 3, 4, 5, 6\}$
Events: An event is a collection (subset) of outcomes contained in the sample space S
$$
S =
\begin{Bmatrix}
1,1 & 1,2 & 1,3 & 1,4 & 1,5 & 1,6 \\
2,1 & 2,2 & 2,3 & 2,4 & 2,5 & 2,6 \\
3,1 & 3,2 & 3,3 & 3,4 & 3,5 & 3,6 \\
4,1 & 4,2 & 4,3 & 4,4 & 4,5 & 4,6 \\
5,1 & 5,2 & 5,3 & 5,4 & 5,5 & 5,6 \\
6,1 & 6,2 & 6,3 & 6,4 & 6,5 & 6,6
\end{Bmatrix}
$$
A = First and second elements are the same
$A = \{(1,1) \ (2,2) \ (3,3) \ (4,4) \ (5,5) \ (6,6)\}$
Union: Union of two events, A and B, ($A \cup B$)
Compliment: The compliment of an event A, is the set of all outcomes in S that are not in A
Mutually Exclusive Events: When and B have no common outcomes, they are said to be mutually exclusive or disjoint events, i.e. $P=(A \cap B) = 0$
Axiom:
1. For event A, P(A) >= 0
2. P(S) = 1
3. (Need to look at slides to correct)
(a) If $A_1, A_2 ... A_k$ is a finite collection of mutually exclusive events then: $$P(A_1 \cup A_2 \cup ... \cup A_k) = \sum^{\infty}_{i=1} P(A_i) $$
(b) If $A_1, A_2 ... A_k$ is a finite collection of mutually exclusive events then: $$P(A_1 \cup A_2 \cup ... \cup A_k) = \sum^{\infty}_{i=1} P(A_i) $$
Proposition:
1. For event A, P(A) = 1 - P(A')
2. If and and B are mutually exclusive then $P(A \cap B) = 0$
Permutation: Any ordered sequence of k objects taken from a set of n distinct objects is called a permutation of size k of the objects. The number of permutations of size k that can be constructed from n objects is denoted by $P_{k,n}$ and calculated by:
$$
P_{k,n} = \frac{n!}{(n-k)!}
$$
Combination: Given a set of n, any unordered sub-set of k of the objects is called a combination. The set of combinations of size k that can be formed from n distinct objected will be denoted by $C_{k,n}$ and calculated by:
$$
C_{k,n} = \frac{n!}{k!(n-k)!} = \begin{pmatrix}n \\ k \end{pmatrix}
$$
(NEED TO REVIEW THIS)
Example: S = {1, 2, 3, 4, 5}
$A_1$ = {1,2,3}, $A_2$ = {2,3,5}, $A_3$ = {2,3,1}
Permutation:
5! = 120
(5-3)! = 2! = 2
120 / 2 = 60
Combination:
5!/2!3! = 60/6 = 10
0! = 1
5 out of 5
5!/(5-5)! = 120/1 = 120

View File

@ -0,0 +1,2 @@
Lecture Topic: