vault backup: 2025-03-16 18:59:42

This commit is contained in:
boris
2025-03-16 18:59:42 +00:00
parent 6befcc90d4
commit ae837183f1
188 changed files with 17794 additions and 409 deletions

5
.obsidian/app.json vendored
View File

@@ -1,13 +1,14 @@
{
"showInlineTitle": true,
"useMarkdownLinks": true,
"promptDelete": true,
"promptDelete": false,
"showLineNumber": true,
"attachmentFolderPath": "images",
"pdfExportSettings": {
"includeName": true,
"pageSize": "A4",
"landscape": false,
"margin": "0",
"margin": "2",
"downscalePercent": 64
},
"readableLineLength": false,

View File

@@ -1,11 +1,11 @@
{
"accentColor": "",
"theme": "system",
"theme": "moonstone",
"cssTheme": "Tokyo Night",
"nativeMenus": true,
"baseFontSize": 14,
"interfaceFontFamily": "AppleGothic,Inter",
"textFontFamily": "AppleGothic,Inter",
"interfaceFontFamily": "AppleGothic,Ubuntu Mono",
"textFontFamily": "AppleGothic,DejaVu Math TeX Gyre",
"monospaceFontFamily": "PT Mono,Andale Mono",
"baseFontSizeAction": false,
"translucency": true

View File

@@ -7,5 +7,6 @@
"obsidian-style-settings",
"url-into-selection",
"obsidian-csv-table",
"mermaid-tools"
"mermaid-tools",
"obsidian-latex"
]

File diff suppressed because one or more lines are too long

15605
.obsidian/plugins/obsidian-latex-suite/main.js vendored Executable file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,11 @@
{
"id": "obsidian-latex-suite",
"name": "Latex Suite",
"version": "1.9.8",
"minAppVersion": "1.0.0",
"description": "Make typesetting LaTeX math as fast as handwriting through snippets, text expansion, and editor enhancements",
"author": "artisticat",
"authorUrl": "https://github.com/artisticat1",
"fundingUrl": "https://ko-fi.com/artisticat",
"isDesktopOnly": false
}

View File

@@ -0,0 +1,235 @@
/* Settings panel */
.setting-item.hidden {
display: none;
}
.setting-item.setting-item-heading .latex-suite-settings-icon {
margin-right: var(--size-4-2);
display: inline-flex;
}
.setting-item.setting-item-heading:has(.latex-suite-settings-icon) {
border-bottom: 1px solid var(--background-modifier-border);
}
.setting-item.setting-item-heading:has(.latex-suite-settings-icon) + .setting-item {
border-top: none;
}
.setting-item.setting-item-heading:has(.latex-suite-settings-icon) ~ .setting-item:not(.setting-item-heading), .latex-suite-snippet-variables-setting + .setting-item-control {
width: calc(100% - 26px);
margin-left: 26px;
}
.latex-suite-snippet-variables-setting .setting-item-control {
height: 120px;
}
.latex-suite-snippet-variables-setting .setting-item-control textarea {
width: 100%;
height: 100%;
}
.snippets-text-area, .latex-suite-snippet-variables-setting {
display: inline-block;
}
.snippets-text-area .setting-item-info, .latex-suite-snippet-variables-setting .setting-item-info {
margin-bottom: 0.75rem;
}
.snippets-text-area .setting-item-control {
flex-direction: column;
align-items: flex-end;
}
.snippets-editor-wrapper {
width: 100%;
margin-bottom: 0.75rem;
}
.snippets-editor-wrapper .cm-editor {
border: 1px solid var(--background-modifier-border);
border-radius: 4px;
font-size: var(--font-inputs);
height: 20em;
outline: none !important;
text-align: left;
}
.snippets-editor-wrapper .cm-line, .snippets-editor-wrapper .cm-lineNumbers {
font-family: var(--font-monospace);
}
.snippets-footer {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
}
.snippets-editor-validity {
display: flex;
align-items: center;
}
.snippets-editor-validity-indicator {
color: white;
display: inline-block;
border-radius: 1em;
margin-right: 10px;
cursor: default;
visibility: hidden;
}
.snippets-editor-validity-indicator svg {
width: 16px !important;
height: 16px !important;
}
.snippets-editor-validity-indicator:hover {
color: white;
}
.snippets-editor-validity-indicator.valid {
background-color: var(--color-green);
visibility: visible;
}
.snippets-editor-validity-indicator.invalid {
background-color: var(--color-red);
visibility: visible;
}
.snippets-editor-buttons {
display: flex;
flex-direction: row;
}
.latex-suite-confirmation-modal .setting-item {
border: none;
}
.search-input-container input.latex-suite-location-input-el {
width: initial;
}
/*
Snippet color classes.
*/
/* These extra selectors enforce their color on all children, because CodeMirror does weird nesting of spans when
nesting multiple decorations. */
.latex-suite-snippet-placeholder {
border-radius: 2px;
background-color: var(--placeholder-bg);
outline: var(--placeholder-outline) solid 1px;
}
.latex-suite-snippet-placeholder-0, span.latex-suite-snippet-placeholder-0 span {
--placeholder-bg: #87cefa2e;
--placeholder-outline: #87cefa6e;
}
.theme-dark .latex-suite-snippet-placeholder-0, span.latex-suite-snippet-placeholder-0 span {
--placeholder-outline: #87cefa43;
}
.latex-suite-snippet-placeholder-1, span.latex-suite-snippet-placeholder-1 span {
--placeholder-bg: #ffa50033;
--placeholder-outline: #ffa5006b;
}
.theme-dark .latex-suite-snippet-placeholder-1, span.latex-suite-snippet-placeholder-1 span {
--placeholder-outline: #ffa5004d;
}
.latex-suite-snippet-placeholder-2, span.latex-suite-snippet-placeholder-2 span {
--placeholder-bg: #00ff0022;
--placeholder-outline: #00ff0060;
}
.theme-dark .latex-suite-snippet-placeholder-2, span.latex-suite-snippet-placeholder-2 span {
--placeholder-outline: #00ff003d;
}
/* Conceal */
span.cm-math.cm-concealed-bold {
font-weight: bold;
}
span.cm-math.cm-concealed-underline {
text-decoration: underline;
}
span.cm-math.cm-concealed-mathrm, sub.cm-math.cm-concealed-mathrm {
font-style: normal;
}
/* Conceal superscripts without changing line height */
sup.cm-math {
line-height: 0;
}
sup.cm-math, sub.cm-math {
font-style: italic;
}
/* Inline math tooltip styling */
.theme-light .cm-tooltip.cm-tooltip-cursor {
box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.028), 0px 3.4px 6.7px rgba(0, 0, 0, .042), 0px 5px 20px rgba(0, 0, 0, .07);
}
.theme-dark .cm-tooltip.cm-tooltip-cursor {
box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.1),
0px 3.4px 6.7px rgba(0, 0, 0, 0.15),
0px 0px 30px rgba(0, 0, 0, 0.27);
}
/* Highlight brackets */
.theme-light .latex-suite-highlighted-bracket, .theme-light .latex-suite-highlighted-bracket [class^="latex-suite-color-bracket-"] {
background-color: hsl(var(--accent-h), var(--accent-s), 40%, 0.3);
}
.theme-dark .latex-suite-highlighted-bracket, .theme-dark .latex-suite-highlighted-bracket [class^="latex-suite-color-bracket-"] {
background-color: hsl(var(--accent-h), var(--accent-s), 70%, 0.6);
}
/* Color matching brackets */
.theme-light .latex-suite-color-bracket-0, .theme-light .latex-suite-color-bracket-0 .cm-bracket {
color: #527aff;
}
.theme-dark .latex-suite-color-bracket-0, .theme-dark .latex-suite-color-bracket-0 .cm-bracket {
color: #47b8ff;
}
.theme-light .latex-suite-color-bracket-1, .theme-light .latex-suite-color-bracket-1 .cm-bracket {
color: #ff50b7;
}
.theme-dark .latex-suite-color-bracket-1, .theme-dark .latex-suite-color-bracket-1 .cm-bracket {
color: #ff55cd;
}
.theme-light .latex-suite-color-bracket-2, .theme-light .latex-suite-color-bracket-2 .cm-bracket {
color: #69ba00;
}
.theme-dark .latex-suite-color-bracket-2, .theme-dark .latex-suite-color-bracket-2 .cm-bracket {
color: #73ff63;
}
/* .latex-suite-color-bracket-3 {
color: #8de15c;
} */

206
.obsidian/plugins/obsidian-latex/main.js vendored Executable file
View File

@@ -0,0 +1,206 @@
'use strict';
var obsidian = require('obsidian');
/*! *****************************************************************************
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
/* global Reflect, Promise */
var extendStatics = function(d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
function __extends(d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}
function __awaiter(thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
}
function __generator(thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
}
var DEFAULT_SETTINGS = {
preamblePath: "preamble.sty",
};
var JaxPlugin = /** @class */ (function (_super) {
__extends(JaxPlugin, _super);
function JaxPlugin(app, manifest) {
var _this = _super.call(this, app, manifest) || this;
_this.app = app;
_this.settings = DEFAULT_SETTINGS;
return _this;
}
JaxPlugin.prototype.loadPreamble = function () {
return __awaiter(this, void 0, void 0, function () {
var preamble;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.app.vault.adapter.read(this.settings.preamblePath)];
case 1:
preamble = _a.sent();
if (MathJax.tex2chtml == undefined) {
MathJax.startup.ready = function () {
MathJax.startup.defaultReady();
MathJax.tex2chtml(preamble);
};
}
else {
MathJax.tex2chtml(preamble);
}
return [2 /*return*/];
}
});
});
};
JaxPlugin.prototype.loadSettings = function () {
return __awaiter(this, void 0, void 0, function () {
var _a, _b, _c, _d;
return __generator(this, function (_e) {
switch (_e.label) {
case 0:
_a = this;
_c = (_b = Object).assign;
_d = [{}, DEFAULT_SETTINGS];
return [4 /*yield*/, this.loadData()];
case 1:
_a.settings = _c.apply(_b, _d.concat([_e.sent()]));
return [2 /*return*/];
}
});
});
};
JaxPlugin.prototype.saveSettings = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.saveData(this.settings)];
case 1:
_a.sent();
return [2 /*return*/];
}
});
});
};
JaxPlugin.prototype.onload = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.loadSettings()];
case 1:
_a.sent();
this.addSettingTab(new JaxPluginSettingTab(this.app, this));
// Load MathJax so that we can modify it
// Otherwise, it would not be loaded when this plugin is loaded
return [4 /*yield*/, obsidian.loadMathJax()];
case 2:
// Load MathJax so that we can modify it
// Otherwise, it would not be loaded when this plugin is loaded
_a.sent();
if (!MathJax) {
console.warn("MathJax was not defined despite loading it.");
return [2 /*return*/];
}
return [4 /*yield*/, this.loadPreamble()];
case 3:
_a.sent();
return [2 /*return*/];
}
});
});
};
JaxPlugin.prototype.onunload = function () {
// TODO: Is it possible to remove our definitions?
console.log('Unloading Extended MathJax');
};
return JaxPlugin;
}(obsidian.Plugin));
var JaxPluginSettingTab = /** @class */ (function (_super) {
__extends(JaxPluginSettingTab, _super);
function JaxPluginSettingTab(app, plugin) {
var _this = _super.call(this, app, plugin) || this;
_this.plugin = plugin;
return _this;
}
JaxPluginSettingTab.prototype.display = function () {
var _this = this;
var containerEl = this.containerEl;
containerEl.empty();
new obsidian.Setting(containerEl)
.setName('Preamble path')
.setDesc('Path to global preamble. (Requires reload!)')
.addText(function (text) {
return text
.setValue(_this.plugin.settings.preamblePath)
.onChange(function (value) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
this.plugin.settings.preamblePath = value;
return [4 /*yield*/, this.plugin.saveSettings()];
case 1:
_a.sent();
return [2 /*return*/];
}
});
}); });
});
};
return JaxPluginSettingTab;
}(obsidian.PluginSettingTab));
module.exports = JaxPlugin;
/* nosourcemap */

View File

@@ -0,0 +1,10 @@
{
"id": "obsidian-latex",
"name": "Extended MathJax",
"version": "0.4.1",
"minAppVersion": "0.12.16",
"description": "Adds support for a MathJax preamble and enables additional MathJax extensions for specific domains (chemistry, proofs).",
"author": "Xavier Denis & Ng Wei En",
"authorUrl": "https://github.com/wei2912/obsidian-latex",
"isDesktopOnly": false
}

View File

@@ -13,33 +13,58 @@
"state": {
"type": "markdown",
"state": {
"file": "Penetration Testing/Exploitation Assignment/Discovery.md",
"file": "AI & Data Mining/Week 22/Chapter 22 Validity and Inference Rules.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "Discovery"
"title": "Chapter 22 Validity and Inference Rules"
}
}
]
},
{
"id": "ccb530263275547c",
"type": "tabs",
"children": [
},
{
"id": "874d2d014b491baf",
"id": "e186aac04d6f44bd",
"type": "leaf",
"state": {
"type": "pdf",
"type": "markdown",
"state": {
"file": "AI & Data Mining/Exercise Booklet.pdf"
"file": "AI & Data Mining/Week 23/Week 23 - Deductive Proofs.md",
"mode": "source",
"source": false
},
"icon": "lucide-file-text",
"title": "Exercise Booklet"
"icon": "lucide-file",
"title": "Week 23 - Deductive Proofs"
}
},
{
"id": "3ee69deee29aa157",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "Penetration Testing/Exploitation Assignment/Task 2 - Web Attacks.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "Task 2 - Web Attacks"
}
},
{
"id": "9d5df515e1a9868d",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "Career Development/Assessment 2 Diary.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "Assessment 2 Diary"
}
}
]
],
"currentTab": 3
}
],
"direction": "vertical"
@@ -97,7 +122,7 @@
}
],
"direction": "horizontal",
"width": 395.5
"width": 204.5
},
"right": {
"id": "ee8f6df41634f71e",
@@ -217,53 +242,54 @@
"mermaid-tools:Open Mermaid Toolbar": false
}
},
"active": "874d2d014b491baf",
"active": "ff4e63a36b080692",
"lastOpenFiles": [
"Client Server Systems/Ecobuddy/test-admin.js",
"Client Server Systems/Ecobuddy/logincontroller.php.deprecated",
"Client Server Systems/Ecobuddy/public/css/fonts/bootstrap-icons.woff2",
"Client Server Systems/Ecobuddy/public/css/fonts/bootstrap-icons.woff",
"Client Server Systems/Ecobuddy/public/js/simpleAuth.js",
"Client Server Systems/Ecobuddy/public/js/facilityData.js",
"Client Server Systems/Ecobuddy/public/js/comments.js",
"Client Server Systems/Ecobuddy/public/js/bootstrap.bundle.js",
"Client Server Systems/Ecobuddy/public/js/auth.js",
"Client Server Systems/Ecobuddy/public/js/apiClient.js",
"Client Server Systems/Ecobuddy/public/css/my-style.css",
"Career Development/Assessment 2 Plan.md",
"Career Development/Assessment 2 Diary.md",
"Career Development/Assessment.md",
"AI & Data Mining/Week 26 - Deductive Proofs.md",
"AI & Data Mining/Week 25/Chapter 25 - Predicate Logic Quantifiers.md",
"AI & Data Mining/Week 25/Week 25 - Predicate Logic Quantifiers.md",
"Penetration Testing/Exploitation Assignment/Task 2 - Web Attacks.md",
"AI & Data Mining/Week 23/Untitled.md",
"AI & Data Mining/Week 23/Week 23 - Deductive Proofs.md",
"AI & Data Mining/Week 24/Week 24 - Predicate Logic.md",
"AI & Data Mining/Week 21/Week 21 - Transformational Proofs in Propositional Logic.md",
"Client Server Systems/PHPStorm Repo/ajax_workshop_2/search.php",
"Client Server Systems/PHPStorm Repo/ajax_workshop_2/searchinator.php",
"Penetration Testing/Exploitation Assignment/Discovery.md",
"AI & Data Mining/Week 21",
"Client Server Systems/PHPStorm Repo/students.sqlite",
"Client Server Systems/PHPStorm Repo/ajax_workshop_2/Views/index.phtml",
"Client Server Systems/PHPStorm Repo/ajax_workshop_2/index.php",
"Client Server Systems/PHPStorm Repo/ajax_workshop_2/Views/page1.phtml",
"Client Server Systems/PHPStorm Repo/ajax_workshop_2/Views/studentISv1.phtml",
"Client Server Systems/PHPStorm Repo/ajax_workshop_2/studentISv1.php",
"Client Server Systems/PHPStorm Repo/ajax_workshop_2/Models/StudentsDataSet.php",
"Client Server Systems/PHPStorm Repo/ajax_workshop_2/images/new_uos_logo.jpg",
"Client Server Systems/PHPStorm Repo/ajax_workshop_2/fonts/glyphicons-halflings-regular.svg",
"Client Server Systems/PHPStorm Repo/images/new_uos_logo.jpg",
"Client Server Systems/PHPStorm Repo/fonts/glyphicons-halflings-regular.svg",
"Client Server Systems/PHPStorm Repo/ajax_workshop_1/favicon.png",
"images/Pasted image 20250131145917.png",
"images/Pasted image 20250131144439.png",
"images/Pasted image 20250131144425.png",
"AI & Data Mining/Week 20/Week 20 - Intro to Propositional Logic.md",
"AI & Data Mining/Week 20/Chapter 20 Tutorial - Introduction to Propositional Logic.md",
"AI & Data Mining/Week 20/Propositional Logic Examples.md",
"AI & Data Mining/Week 19/Timeline of History.md",
"Penetration Testing/Week 20/Week 20 - Web Attacks.md",
"AI & Data Mining/Week 21/Chapter 21 - Transformational Proofs.md",
"AI & Data Mining/Week 22/Week 22 Validity and Inference Rules.md",
"AI & Data Mining/Week 22/Chapter 22 Validity and Inference Rules.md",
"AI & Data Mining/Assessment/Coursework Prep Notes.md",
"AI & Data Mining/Week 23/Chapter 23 - Deductive Proofs.md",
"images/Pasted image 20250221132524.png",
"Penetration Testing/Week 21/Week 21 - Exploits and Post-Exploitation.md",
"Penetration Testing/Week 21/Public Exploitation Workshop.md",
"Penetration Testing/Week 20/Week 20 - Web Application Attacks.md",
"Penetration Testing/Week 23/Week 23 - Password Attacks.md",
"Penetration Testing/Week 22/Week 22 - Web Attacks.md",
"images/Pasted image 20241025141348.png",
"images/Pasted image 20241017132059.png",
"images/Pasted image 20241011131542.png",
"images/Pasted image 20241003133342.png",
"images/Pasted image 20241003092201.png",
"images/Pasted image 20241003092549.png",
"images/Pasted image 20241017130933.png",
"images/Pasted image 20240920133316.png",
"images/Pasted image 20240920133706.png",
"README.md",
"CWC 3 - Fit for Trade.md",
"images/Pasted image 20250129154055.png",
"CWC 1 - Consistency.md",
"CWC 2 - Warm Welcome.md",
"Penetration Testing/Week 19/Steps to Complete Workshop 2.md",
"AI & Data Mining/Week 18/Week 18 - Tutorial.md",
"Data Structures/GPT Answers to Past Paper/Question 4.md",
"Data Structures/GPT Answers to Past Paper/Question 1.md",
"Data Structures/GPT Answers to Past Paper/Question 6.md",
"Penetration Testing/Week 19/AI Summary.md",
"Penetration Testing/Week 19/Week 19 - Buffer Overflow.md",
"Client Server Systems/PHPStorm Repo/php-s1/MVCtemplate-23-24/images/new_uos_logo.jpg",
"AI & Data Mining/Week 18/Week 18 - What AI?????.md",
"Networking and Security/Week 18/Workshop.md",
"Data Structures/AI Notes/Stack.md",
"Data Structures/AI Notes/Trees.md",
"Data Structures/AI Notes/Linear List.md",
"Data Structures/AI Notes/Exceptions.md",
"Data Structures/AI Notes/Double linked lists.md",
"Data Structures/AI Notes/Data Structures and Abstract Data Types.md",
"Client Server Systems/Week 1/Workshop 1 - Intro to PHP.md",
"Welcome.md",
"Database Systems/Untitled.canvas",
"Untitled 1.canvas",
"Untitled.canvas"