-
-
-
-
\ No newline at end of file
diff --git a/about.html b/about.html
deleted file mode 100644
index e9ee25f..0000000
--- a/about.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-PaulW.XYZ / About
-
-
-
-
-
-
-
-This is a personal website written by @LambdaPaul.
-Why did I write this?
-I do not really know, at least the content I put here. I guess I wanted a place on the web where I wanted to put everything I think is worth looking at some point in the future.
-
-
-It seems wise to have things up here even though they may embarrass me at some point in the future, as many of the things I have done in the past have. Especially the web sites I made in high school. I will never forget those.
-
-
-
-
-
-
-
-
Design Draft
-This is a draft of the rationale behind writing pages the way I have. I do not like the traditional web conventions so this is where I experiment the most with interfacing elements. The navigation pane-based design works when they are simple and easy to understand. When they get too complex, people rely on using search bars to get where they want. My goal is to find a method to eliminate the visual noise of the complex navigation panes and find a reasonable alternative them while being easy to use.
Page Categorization
The home page or the index page solely acts as a gateway to all the other pages on the site. The accessible pages are categorized on a need-based system. Since I currently do not have multiple pages, I have them all under a single directory.
Design Principles
The goal of my home page’s design is to keep this minimal. There is no need for unnecessary content to waste people’s time. The rule is simple: only waste one’s time if they willingly do so.
Modern webpages tend to be bulky. This entire site should retain the modern design while being as minimal and static as possible.
minimal: a page should not overly rely on programming logic unless the focus is programming logic
static: informational pages should not be dynamically changing as the focus is on the content itself
Design Problems
A new user would never understand how this site works. My ideal navigation system would involve having as few navigation elements as possible. This is the reason why I chose to add solely the fuzzy-search bar. However, I have not been able to find a good way to give users of my pages a good way to interact in case they do not use the search bar. I previously used to list them all but it was not easy on the eyes and looked lazy. Maybe a command system that does not use symbols (considering touch devices do not support non-Latin character insertions easily). Maybe something similar to *nix commands. The site somewhat vaguely follows the basic file-system structure. However, this goes against my goal of “ease-of-use” which is why I have not done it yet.
-
-
-
-
\ No newline at end of file
diff --git a/favicon.ico b/favicon.ico
deleted file mode 100644
index a3d97a3..0000000
Binary files a/favicon.ico and /dev/null differ
diff --git a/index.html b/index.html
deleted file mode 100644
index dda1c13..0000000
--- a/index.html
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-PaulW.XYZ /
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/pages.json b/pages.json
deleted file mode 100644
index ed88d4e..0000000
--- a/pages.json
+++ /dev/null
@@ -1,13 +0,0 @@
-[
- {"title":"About", "link": "/about"},
- {"title":"Pages", "link": "/pages/"},
- {"title":"Resources", "link": "/pages/resources"},
- {"title":"Recommended", "link": "/pages/recommended"},
- {"title":"Grade Calculator", "link": "/pages/grade-calc/"},
- {"title":"GitHub", "link": "https://github.com/lambdapaul"},
- {"title":"GitLab", "link": "https://gitlab.com/lambdapaul"},
- {"title":"Mastodon", "link": "https://mastodon.social/@lambdapaul"},
- {"title":"Matrix", "link": "https://matrix.to/#/@lambdapaul:matrix.org"},
- {"title":"Keybase", "link": "https://keybase.io/lambdapaul"},
- {"title":"Playlists", "link": "/pages/playlists"}
-]
\ No newline at end of file
diff --git a/pages/grade-calc/README.md b/pages/grade-calc/README.md
deleted file mode 100644
index 3a99b3b..0000000
--- a/pages/grade-calc/README.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# Grade Calculator
-
-Some professors do not properly configure the Canvas grade percentages based on their syllabus. Instead, they opt to use Excel to calculate the final grades after everything. It can be hard to estimate how much effort I should allocate for those classes without making an Excel file.
-
-So I wrote this to quickly configure a calculator to see what I will end up getting in a class based on how much effort I put in.
-
-## Short Summary of the JSON structure
-
-The JSON is expected to have an array of section descriptions.
-
-`name : string` is used as the class name. They have to be unique for each section to work as expected.
-
-`title : string` is used as the heading for the sections.
-
-`percentage : number` is used to weigh the section for the final grade.
-
-`output : boolean` when true, it calculates the section score.
-
-`points : [number]` used for each assignment in the section.
-
-`bothMethods : boolean` when true, the weighted and unweighted scores are calculated.
-
-`info : string` used for section description.
\ No newline at end of file
diff --git a/pages/grade-calc/config/eee3307c.json b/pages/grade-calc/config/eee3307c.json
deleted file mode 100644
index 09e6e3c..0000000
--- a/pages/grade-calc/config/eee3307c.json
+++ /dev/null
@@ -1,25 +0,0 @@
-[
- {
- "name": "final",
- "title": "Final",
- "percentage": 40,
- "info": ""
- },
- {
- "name": "midterm",
- "title": "Midterm",
- "percentage": 30
- },
- {
- "name": "homework",
- "title": "Homework",
- "percentage": 10,
- "points": [100,100,100,100,100,100]
- },
- {
- "name": "lab",
- "title": "Lab",
- "percentage": 20,
- "info": "Lab score is accurate and does not need any sub-calculation."
- }
-]
\ No newline at end of file
diff --git a/pages/grade-calc/config/eel4742c.json b/pages/grade-calc/config/eel4742c.json
deleted file mode 100644
index a7c2457..0000000
--- a/pages/grade-calc/config/eel4742c.json
+++ /dev/null
@@ -1,29 +0,0 @@
-[
- {
- "name": "exams",
- "percentage": 70,
- "points": [
- 100,
- 100,
- 100
- ],
- "title": "Exams"
- },
- {
- "name": "homework",
- "percentage": 15,
- "points": [
- 90,
- 50,
- 110,
- 90
- ],
- "title": "Homework"
- },
- {
- "info": "Lab score is accurate and does not need any sub-calculation.",
- "name": "lab",
- "percentage": 15,
- "title": "Lab"
- }
-]
\ No newline at end of file
diff --git a/pages/grade-calc/config/eel4781.json b/pages/grade-calc/config/eel4781.json
deleted file mode 100644
index f8cd9da..0000000
--- a/pages/grade-calc/config/eel4781.json
+++ /dev/null
@@ -1,35 +0,0 @@
-[
- {
- "name": "midterm",
- "percentage": 25,
- "info":"http://www.ece.ucf.edu/~yuksem/teaching/EEL-4781-Spring-2021.html"
- },
- {
- "name": "final",
- "percentage": 25
- },
- {
- "name": "project",
- "percentage": 15,
- "info":"Webserver project"
- },
- {
- "name": "homework",
- "percentage": 20,
- "points": [
- 100,
- 100,
- 100,
- 100,
- 100
- ]
- },
- {
- "name": "lab",
- "percentage": 15,
- "points": [
- 100,
- 100
- ]
- }
-]
\ No newline at end of file
diff --git a/pages/grade-calc/config/map2302.json b/pages/grade-calc/config/map2302.json
deleted file mode 100644
index abddd19..0000000
--- a/pages/grade-calc/config/map2302.json
+++ /dev/null
@@ -1,41 +0,0 @@
-[
- {
- "name": "final",
- "title": "Final",
- "percentage": 25,
- "info": ""
- },
- {
- "name": "midterm",
- "title": "Midterm",
- "percentage": 50,
- "points": [
- 20,
- 20,
- 20
- ],
- "output": true
- },
- {
- "name": "quiz",
- "title": "Quiz",
- "percentage": 10,
- "points": [
- 30,
- 10,
- 15
- ],
- "output": true,
- "bothMethods": true
- },
- {
- "name": "homework",
- "title": "Homework",
- "percentage": 10
- },
- {
- "name": "attendance",
- "title": "Attendance",
- "percentage": 5
- }
-]
\ No newline at end of file
diff --git a/pages/grade-calc/gc_client.js b/pages/grade-calc/gc_client.js
deleted file mode 100644
index 4600053..0000000
--- a/pages/grade-calc/gc_client.js
+++ /dev/null
@@ -1,204 +0,0 @@
-class GradeCalc {
- maxscore = 0;
- sections = [];
- inputSection = [];
- outputSection = [];
- fields = [];
- grades = [];
- ugrades = [];
- both = false;
- totalOutput = null;
-
- constructor(config, outCallback) {
- this.totalOutput = document.createElement("div");
- let dConfig = JSON.parse(JSON.stringify(config)); // dirty clone
- let sanConfig = [];
- for (let conf of dConfig) {
- if (conf.percentage === undefined || conf.name === undefined)
- continue;
- if (conf.title === undefined)
- conf.title = conf.name[0].toUpperCase() + conf.name.slice(1);
- sanConfig.push(conf);
- }
- this.config = sanConfig;
- for (let [i, conf] of this.config.entries()) {
- this.maxscore += conf.percentage;
-
- this.inputSection[i] = [];
- this.outputSection[i] = document.createElement("div");
-
- if (conf.bothMethods) {
- this.both = true;
- }
-
- this.sections[i] = (this.createSection(i));
- }
-
- for (let [k, v] of this.fields.entries()) {
- for (let field of v) {
- this.addInputEventListener(k, field);
- }
- }
-
- outCallback(this.sections);
- }
-
- createSection(id) {
- let conf = this.config[id];
-
- var section = document.createElement("div");
- section.classList.add(conf.name);
-
- var heading = document.createElement("h2");
- heading.innerHTML = `${conf.title} (${conf.percentage}%)`;
-
- section.appendChild(heading);
-
- if (conf.info !== undefined)
- section.appendChild(document.createTextNode(conf.info));
-
- this.fields[id] = [];
- if (conf.points !== undefined) {
- for (var i = 0; i < conf.points.length; i++) {
- section.appendChild(this.createInputSection(id, i));
- }
- }
- else {
- section.appendChild(this.createInputSection(id, 0, true));
- }
-
-
- section.appendChild(this.outputSection[id]);
- return section;
- }
-
- createInputSection(sectId, inputId, soleInput = false) {
- let conf = this.config[sectId];
- let inputSection = document.createElement("div");
- inputSection.classList.add("input-section");
-
- let label = document.createElement("label");
- if (soleInput)
- label.innerHTML = `${conf.title} Score: `;
- else
- label.innerHTML = `${conf.title} ${inputId + 1} Score: `;
-
- let field = document.createElement("input");
- field.classList.add(`input`);
- field.classList.add(`${conf.name}-score`);
- this.fields[sectId][inputId] = field;
-
- let suffix = (soleInput) ? "%" : ` / ${conf.points[inputId]} pts`;
-
- inputSection.appendChild(label);
- inputSection.appendChild(field);
- inputSection.appendChild(document.createTextNode(suffix));
-
- this.inputSection[sectId][inputId] = inputSection;
- return inputSection;
- }
-
- addInputEventListener(id, field, event = "keyup") {
- let conf = this.config[id];
- field.addEventListener(event, () => {
- if (conf.output !== undefined && conf.output)
- this.showSectionGrade(id);
- this.showTotalGrade();
- });
- }
-
- calculateSectionGrade(id, unweighted = false) {
- let conf = this.config[id];
- let fields = this.fields[id];
- if (fields === undefined)
- return;
- if (conf.points === undefined) {
- return parseFloat(fields[0].value);
- }
-
- let total = 0;
-
- if (unweighted) {
- let counter = 0;
- for (let [i, field] of fields.entries()) {
- let val = parseFloat(field.value);
- if (isNaN(val))
- continue;
- total += val / conf.points[i];
- counter++;
- }
-
- return (total / counter * 100);
- }
-
- total = fields.reduce((acc, cur) => {
- let c = parseFloat(cur.value);
- if (isNaN(c))
- return acc;
- return acc + parseFloat(c);
- }, 0);
-
- let max_total = 0;
- for (let [i, field] of conf.points.entries()) {
- if (isNaN(parseFloat(fields[i].value)))
- continue;
- max_total += field;
- }
-
- return (total / max_total * 100);
- }
-
- showSectionGrade(id) {
- let conf = this.config[id];
- let grade = this.calculateSectionGrade(id);
- let ugrade = this.calculateSectionGrade(id, true);
-
-
- this.grades[id] = grade * parseFloat(conf.percentage) / 100;
- this.ugrades[id] = ugrade * parseFloat(conf.percentage) / 100;
-
- grade = !isNaN(grade) ? grade.toFixed(2) : "...";
- ugrade = !isNaN(ugrade) ? ugrade.toFixed(2) : "...";
- if (conf.bothMethods) {
- this.outputSection[id].innerHTML
- = `Score (weighted): ${grade}% Score (unweighted): ${ugrade}%`;
- return;
- }
-
- this.outputSection[id].innerHTML = `Score: ${grade}`;
- }
-
- showTotalGrade() {
- for (let [k, conf] of this.config.entries()) {
- if (!conf.output) {
- this.grades[k] = this.calculateSectionGrade(k) * parseFloat(conf.percentage) / 100;
- this.ugrades[k] = this.calculateSectionGrade(k, true) * parseFloat(conf.percentage) / 100;
- }
- }
-
- let grade = this.grades.reduce((a, c) => {
- if (isNaN(c))
- return a;
- return a + c
- }, 0);
- let ugrade = this.ugrades.reduce((a, c) => {
- if (isNaN(c))
- return a;
- return a + c
- }, 0);
-
- grade = !isNaN(grade) ? grade.toFixed(2) : "...";
- ugrade = !isNaN(ugrade) ? ugrade.toFixed(2) : "...";
- if (this.both) {
- this.totalOutput.innerHTML
- = `Total Score (weighted): ${grade}% Total Score (unweighted): ${ugrade}%`;
- return;
- }
-
- this.totalOutput.innerHTML = `Total Score: ${grade}%`;
- }
-
- get elemTotal() {
- return this.totalOutput;
- }
-}
\ No newline at end of file
diff --git a/pages/grade-calc/index.html b/pages/grade-calc/index.html
deleted file mode 100644
index ac96035..0000000
--- a/pages/grade-calc/index.html
+++ /dev/null
@@ -1,115 +0,0 @@
-
-
-
-
-
-
-
-
- Grade Calc
-
-
-
-
-
If the one you're looking for is not on this list, it is most likely I haven't had the chance to read it yet or I may have put it on the Resources page, if it is freely available.
Practical C Programming by Steve Oualline (kind of outdated but still good)
-
-
Operating Systems
-
-
Advanced Programming in the Unix Environment by W. Richard Stevens
-
Operating Systems: Design and Implementation by Andrew S. Tanenbaum (I haven't had a chance to read his other books on OS. I am not a fan of his networking book though.)
-
-
-
-
-
Computer Engineering
-
-
Making Embedded Systems: Design Patterns for Great Software by Elecia White
-
-
-
-
-
-
Compilers
-
-
Compilers: Principles, Techniques, and Tools [Dragon Book] (discusses theory in detail so it is kind of hard to read)
-
-
-
Other
-
-
Definitive Guide to sed: Tutorial and Reference
-
-
-
Classics
-
Only the English ones for now.
-
-
A Tale of Two Cities
-
The Mayor of Casterbridge
-
The Citadel
-
Oliver Twist
-
Macbeth
-
Othello
-
Adventures of Huckleberry Finn
-
-
-
Languages
-
-
Lingua Latina per se Illustrata (Both parts)
-
-
-
-
Movies
-
-
Blade Runner 2049
-
The Hateful Eight
-
Goodfellas
-
Inception
-
Memento
-
The Grand Budapest Hotel
-
-
-
-
Music
-
-
Große Fuge Op. 133
-
KV 387
-
KV 448
-
BWV 1048
-
Prelude in G Minor (Op. 23 No. 5)
-
String Quartet, Op. 20 No. 2 (Haydn)
-
-
-
-
Video Games
-
-
The Legend of Zelda: Breath of the Wild
-
Portal 2
-
-
-
-
\ No newline at end of file
diff --git a/pages/resources.html b/pages/resources.html
deleted file mode 100644
index 64ee305..0000000
--- a/pages/resources.html
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
-
- Pages / Resources
-
-
-
-
-
Enter a page or directory name. If do not know any, clear the search field to list everything. Using the Enter key would take you to the first page in list, if the list is not empty. Alternatively, use the Up and Down arrow keys to select the page you want and use the Enter key. Use Backspace to go back to the search."
- return;
- }
-
- let results = [];
- for (const [i, page] of pages.entries()) {
- ret = fuzzySearch(page.title, searchValue);
- if (ret === null)
- continue;
- results.push({formatted: ret.formatted, link: page.link, score: ret.score});
- }
-
- results.sort((x, y) => {return x.score - y.score});
-
- resultBlock.innerHTML = "";
- for (const res of results) {
- linkBlock = document.createElement("a");
- linkBlock.classList.add("hyperlink");
- linkBlock.href = res.link;
- linkBlock.innerHTML = `