About
-About
+TODO
diff --git a/output/blogs/2025/08/hilberts.hotel.html b/output/blogs/2025/08/hilberts.hotel.html index 31f791b..44d4d6f 100644 --- a/output/blogs/2025/08/hilberts.hotel.html +++ b/output/blogs/2025/08/hilberts.hotel.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - +09-08-2025: Website Changes
-What was worked on
-What was worked on
+I saw a few websites that used marginal notes on the right side of the screen like this one, so I decided to try and implement this feature in this wesbite. In my mind I thought of using an external pre-configured CSS that I can just insert and ta-da it would work.
diff --git a/output/blogs/2025/08/wacom-with-arch.html b/output/blogs/2025/08/wacom-with-arch.html index 687ba70..ab5f058 100644 --- a/output/blogs/2025/08/wacom-with-arch.html +++ b/output/blogs/2025/08/wacom-with-arch.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - +Wacom With Arch
-Setting up Wacom Tablet in Arch Hyprland
-Setting up Wacom Tablet in Arch Hyprland
+I purchased a One by Wacom tablet almost 2 years ago now and it works flawlessly in both Windows and MacOS and even in most Linux distros with some configuration.
diff --git a/output/blogs/2025/08/weekly-review-week-ending-august-10-2025.html b/output/blogs/2025/08/weekly-review-week-ending-august-10-2025.html index ec01078..a09e8e8 100644 --- a/output/blogs/2025/08/weekly-review-week-ending-august-10-2025.html +++ b/output/blogs/2025/08/weekly-review-week-ending-august-10-2025.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - +Table of Contents
-
-
- Reviewing the week -
- Next week +
- Reviewing the week +
- Next week
-
-
- TODO Read as much of Clean Code as possible -
- TODO Finish another (misc) book -
- TODO Write more (metric unspecified, need to experiment to see what works best) -
- TODO Start the book Dose Effect -
- TODO More leetcode problems to solve (again, metric unspecified) -
- TODO Touch typing: daily practice +
- TODO Read as much of Clean Code as possible +
- TODO Finish another (misc) book +
- TODO Write more (metric unspecified, need to experiment to see what works best) +
- TODO Start the book Dose Effect +
- TODO More leetcode problems to solve (again, metric unspecified) +
- TODO Touch typing: daily practice
Reviewing the week
-Reviewing the week
+
Mostly continuing reading from the book clean code, also setup the ankii cards and this website. The amount of leetcode problems I solved could improve however.
Next week
-Next week
+TODO Read as much of Clean Code as possible
+TODO Read as much of Clean Code as possible
TODO Finish another (misc) book
+TODO Finish another (misc) book
TODO Write more (metric unspecified, need to experiment to see what works best)
+TODO Write more (metric unspecified, need to experiment to see what works best)
TODO Start the book Dose Effect
+TODO Start the book Dose Effect
TODO More leetcode problems to solve (again, metric unspecified)
+TODO More leetcode problems to solve (again, metric unspecified)
TODO Touch typing: daily practice
+TODO Touch typing: daily practice
Zettelkasten Method
-The Zettelkasten Method
-The Zettelkasten Method
+This Zettelkasten method is growing in popularity for taking notes. Ever felt as though there's too much pieces of information but you don't know how to deal with it? This method solves exactly that problem and more. Think of it as forming a second brain, where you can jot down ideas and information whilst simultaneously being able to connect them together.
@@ -246,7 +246,7 @@ There are many personal knowledge management systems' (PKMS) out there that allo -
Blogs Introduction
-Introduction
-Introduction
+In this section you will find posts that are not as structured as the ones found in here. Mainly these will deal with findings, research, assorted writings and random bits and blobs.
diff --git a/output/blogs/blogs-list.html b/output/blogs/blogs-list.html index aeeac64..985139b 100644 --- a/output/blogs/blogs-list.html +++ b/output/blogs/blogs-list.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - +Blogs List
See the categories: Categories
-Blogs:
-Blogs:
+- Hilbert's Hotel 11-08-2025 18:39 maths insights
- Weekly review: Week ending August 10, 2025 10-08-2025 00:00 weekly-review diff --git a/output/categories.html b/output/categories.html index 33a74f6..8a1cb31 100644 --- a/output/categories.html +++ b/output/categories.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - +
Categories (Includes both blogs and posts)
-Categories (Includes both blogs and posts)
+-
-
- books (2) +
- books (3)
- education (1)
- emacs (2)
- insights (2)
- introduction (2)
- maths (1) -
- notes (2) +
- notes (3)
- review (1)
- website (1)
- weekly-review (1) diff --git a/output/contact.html b/output/contact.html index 1f8531a..125787a 100644 --- a/output/contact.html +++ b/output/contact.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - +
Contact
-Contact Using the Following:
-Contact Using the Following:
+> LinkedIn: LinkedIn
diff --git a/output/index.html b/output/index.html index da2eeff..2ae78f9 100644 --- a/output/index.html +++ b/output/index.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - +Table of Contents
Welcome! 🌱
-Welcome! 🌱
+
This is a website built using Emacs Org-mode and published using org-publish. The very first iteration of this website used the Angular framework, only after a while I realised (as every Emacs lover does) that I want to make this an Emacs-centric project
How to publish web pages using org-publish
-How to publish web pages using org-publish
+
This website is heavily inspired by some people who have decided to use org-publish as a way to convert org files into html. I came across a few that took the plunge and decided to migrate from platforms like Wordpress and instead opted for a more transparent, text-based workflow.
http://localhost:8000/<
Contact
-Contact
+Feel free to reach out on GitHub: https://github.com/zainezq
diff --git a/output/posts.html b/output/posts.html index 221c4fc..c13d81f 100644 --- a/output/posts.html +++ b/output/posts.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - +Posts
-Links
-Links
+Posts Introduction intro
+Posts Introduction intro
Zettelkasten Method education
-Zettelkasten Method education
+diff --git a/output/posts/clean-code/clean-code-chapter-1.html b/output/posts/clean-code/clean-code-chapter-1.html index 380abc0..9f7739f 100644 --- a/output/posts/clean-code/clean-code-chapter-1.html +++ b/output/posts/clean-code/clean-code-chapter-1.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - +
Table of Contents
Link to Chapter 2
-Chapter 1: Clean Code
-Chapter 1: Clean Code
+Referenced Items:
diff --git a/output/posts/clean-code/clean-code-chapter-2.html b/output/posts/clean-code/clean-code-chapter-2.html index 8c03753..9ed7a68 100644 --- a/output/posts/clean-code/clean-code-chapter-2.html +++ b/output/posts/clean-code/clean-code-chapter-2.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - +Clean Code: Chapter 2 Notes
@@ -224,22 +224,22 @@Table of Contents
-
-
- Chapter 2: Meaningful Names +
- Chapter 2: Meaningful Names
-
-
- Use intention revealing names: -
- Avoid disinformation -
- Make Meaningful Distinctions -
- Use Pronouncable Names -
- Use Searchable Names -
- Avoid Encodings -
- Avoid Mental Mappings -
- Class Names -
- Method Names -
- Don't be cute/Don't use puns -
- Pick one word per concept -
- Solution Domain Names and Problem Domain Names -
- Add Meaningful Context -
- Don't add gratuitous context +
- Use intention revealing names: +
- Avoid disinformation +
- Make Meaningful Distinctions +
- Use Pronouncable Names +
- Use Searchable Names +
- Avoid Encodings +
- Avoid Mental Mappings +
- Class Names +
- Method Names +
- Don't be cute/Don't use puns +
- Pick one word per concept +
- Solution Domain Names and Problem Domain Names +
- Add Meaningful Context +
- Don't add gratuitous context
Link to Chapter 1 +Link to Chapter 3
-Chapter 2: Meaningful Names
-Chapter 2: Meaningful Names
+Use intention revealing names:
-Use intention revealing names:
+
Names should reveal intent, there is no revelation in naming an integer d, intending it stands for days. Instead, you should use the following names:
d<
Avoid disinformation
-Avoid disinformation
+
Don't postfix the word 'list' to the name 'accounts' unless it's actually a list. This is because the reader will assume the data type of accountsList is indeed a list, instead choose a name like accountsGroup.
Make Meaningful Distinctions
-Make Meaningful Distinctions
+While it is possible to name by being disinformative, it is also possible to name being non informative. Consider:
@@ -302,18 +303,18 @@ Furthermore, noise words are redundant. We should never use the wordvaria
Use Pronouncable Names
-Use Pronouncable Names
+
This is quite straightforward. Do not use a name like genymdhms to refer to generation date, year, month, day, hour, minute,
and second. Instead use generationTimeStamp.
Use Searchable Names
-Use Searchable Names
+In modern IDE's, it is still quite difficult to search for single-lettered variables. The writer states a personal preference of using single-letter names only as local variables and inside short methods. The following principle is given:
@@ -323,42 +324,42 @@ In modern IDE's, it is still quite difficult to search for single-lettered variaAvoid Encodings
-Avoid Encodings
+
Don't prefix variables with letters like m_ as was done in the past. Do not type encode as well, an example of this is: PhoneNumber phoneString; we can see the reader being misled into thinking the phone number is a String.
Avoid Mental Mappings
-Avoid Mental Mappings
+Clarity is king, don't use a name for a variable that only you know what it stands for. For example: using the letter r as the lower-cased version of the url with the host and scheme removed. That's being smart, not professional.
Class Names
-Class Names
+
Classes and objects should have noun or noun phrase names like Customer, WikiPage, Account, and AddressParser. Avoid words like Manager, Processor, Data, or Info in the name of a class. A class name should not be a verb
Method Names
-Method Names
+Methods should have verb or verb phrase names.
Don't be cute/Don't use puns
-Don't be cute/Don't use puns
+Do not use names that are only understandable to people whom you share jokes etc with. Furthermore, do not use colloquialism and slang in names.
@@ -368,17 +369,17 @@ Do not use names that are only understandable to people whom you share jokes etcPick one word per concept
-Pick one word per concept
+If you have multiple choices for naming a concept, use one and stick with it. For instance if your options are fetch, get and retrieve, use one and stick with it throughout.
Solution Domain Names and Problem Domain Names
-Solution Domain Names and Problem Domain Names
+Where possible use solution domain names, as the people that are going to be reading the code are programmers. Therefore, do not shy away from using CS terms, algorithm names, math names and so forth.
@@ -388,17 +389,17 @@ However when it is not possible to use solution domain names (in other words, whAdd Meaningful Context
-Add Meaningful Context
+Enclose names with well-named classes, functions, or namespaces. When all else fails, then prefix with something that provides more context.
Don't add gratuitous context
-Don't add gratuitous context
+Shorter names are better than longer ones, generally. This is so long as the context and intent is clear. Don't add redundant or irrelevant additions to the name in the for the sake of 'context'.
diff --git a/output/posts/clean-code/clean-code-chapter-3.html b/output/posts/clean-code/clean-code-chapter-3.html new file mode 100644 index 0000000..33a953c --- /dev/null +++ b/output/posts/clean-code/clean-code-chapter-3.html @@ -0,0 +1,493 @@ + + + + + + + +Clean Code: Chapter 3 Notes
+ + +Table of Contents
+ ++Link to Chapter 2 +
+Chapter 3: Functions
+Functions should be small
++Functions should be extremely short—ideally just a few lines, so they remain easy to understand and maintain. +
+ ++Avoid deeply nested blocks; keep indentation shallow (1–2 levels), often replacing blocks with descriptive function calls. +
+ ++A small function tells a concise, self-contained story, making it easier for readers to follow the program’s intent. +
+ ++The smaller the function, the more descriptive and accurate its name can be, improving self-documentation. +
+ ++Large functions hide complexity and mix abstraction levels, making errors and duplication more likely. +
+Do One Thing & One Level of Abstraction
++A function should do exactly one conceptual task, and all its statements should exist at the same abstraction level. +
+ ++Mixing details (like string concatenation) with high-level actions (like rendering a page) causes confusion. +
+ ++The Stepdown Rule: organise functions so they read like a top down narrative, each calling the next abstraction level. +
+ ++If you can extract a subfunction with a name that isn’t a restatement, the original function is doing too much. +
+ ++Functions that “do one thing” cannot be logically split into sections such as “initialize,” “process,” “finalize.” +
+Switch Statements
++Switch statements naturally violate “do one thing” by handling multiple cases; they also grow in size over time. +
+ ++They break the Single Responsibility Principle (multiple reasons to change) and Open-Closed Principle (must change for new cases). +
+ ++Preferred approach: hide switch statements inside a factory and dispatch behavior polymorphically through an interface. +
+ ++Allow only one visible switch in your system, used solely for object creation, then encapsulate it. +
+ ++This removes duplication and keeps high-level code unaware of concrete type distinctions. +
+ ++Example: +
+ +public abstract class Employee { + public abstract boolean isPayday(); + public abstract Money calculatePay(); + public abstract void deliverPay(Money pay); +} +----------------- + public interface EmployeeFactory { + public Employee makeEmployee(EmployeeRecord r) throws InvalidEmployeeType; + } +----------------- + public class EmployeeFactoryImpl implements EmployeeFactory { + public Employee makeEmployee(EmployeeRecord r) throws InvalidEmployeeType { + switch (r.type) { + case COMMISSIONED: + return new CommissionedEmployee(r) ; + case HOURLY: + return new HourlyEmployee(r); + case SALARIED: + return new SalariedEmploye(r); + default: + throw new InvalidEmployeeType(r.type); + } + } + } + ++
Use Descriptive Names
++A function’s name should clearly state its purpose. Long, descriptive names beat short, cryptic ones. +
+ ++Consistent naming patterns (shared verbs/nouns) help code read like a coherent story and aid predictability. +
+ ++Descriptive names reduce the need for comments and improve comprehension without external documentation. +
+ ++Renaming functions can reveal design improvements, so try multiple options until the best emerges. +
+ ++IDE refactoring tools make renaming safe, encouraging experimentation. +
+Function Arguments
++
The ideal number of arguments for a function is zero (niladic). Next comes one (monadic), followed closely by two (dyadic). Three arguments (triadic) should be avoided where possible. More than three (polyadic) requires very special justification—and then shouldn’t be used anyway.
+Fewer arguments = better; aim for 0–2, avoid more than 3 unless absolutely necessary. +
+ ++Flag arguments (booleans) are a red flag—they imply the function does multiple things. +
+ +
+Group related parameters into objects (e.g., Point for x and y) to reduce argument count and improve clarity.
+
+Output arguments are confusing—prefer returning values or mutating the owning object’s state. +
+ +
+Match function/argument names in verb–noun or keyword style (e.g., writeField(name), assertExpectedEqualsActual).
+
Have No Side Effects
++A function should do only what its name promises. Hidden state changes are misleading and dangerous. +
+ ++Side effects create temporal coupling, meaning the function must be called in a certain sequence to be safe. +
+ +
+If unavoidable, make side effects explicit in the name (e.g., checkPasswordAndInitializeSession).
+
+Clear separation of command and query functions avoids ambiguity in meaning and intent. +
+ ++Functions that modify state and return information often cause confusion and should be split. +
+Error Handling
++Error handling is a single responsibility—separate it from normal logic to keep both paths clear. +
+ ++Prefer exceptions over error codes to avoid cluttering the happy path and to reduce dependency magnets. +
+ ++Extract try/catch bodies into their own functions for cleaner structure. +
+ ++See below: +
+ ++public void delete(Page page) { + try { + deletePageAndAllReferences(page); + } + catch (Exception e) { + logError(e); + } + } + +private void deletePageAndAllReferences(Page page) throws Exception { + deletePage(page); + registry.deleteReference(page.name); + configKeys.deleteKey(page.name.makeKey()); +} +private void logError(Exception e) { + logger.log(e.getMessage()); +} + ++
+Keep functions small enough that occasional multiple return or break statements are acceptable. +
+ ++Avoid duplication in error handling, and follow the DRY principle to ensure changes occur in one place. +
+Posts Introduction
-Introduction
-Introduction
+
In this section you will find posts related to both technical and non-technical topics. As Einstein said: “If you can’t explain it simply you don’t understand it well enough”, thus the goal with these posts is to develop the skill of being able to deliver habitual high quality explanations as well as reinforcing the topic(s) learnt.
Posts List
See the categories: Categories
-Posts:
-Posts:
+-
+
- Clean Code: Chapter 3 Notes 12-08-2025 18:30 books notes
- Clean Code: Chapter 2 Notes 10-08-2025 20:00 books notes
- Clean Code: Chapter 1 Notes 10-08-2025 19:45 books notes
- Posts Introduction 06-08-2025 00:00 introduction diff --git a/output/setup.html b/output/setup.html index b58d4ca..0d014a3 100644 --- a/output/setup.html +++ b/output/setup.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - +
Setup
-Introduction
-Introduction
+Last updated:
@@ -235,9 +235,9 @@ This page will highlight thebuild-script.el used to generate this
The script
-The script
+
The script is as follows, at the start I have some metadata relating to the file, followed by package management,then the declaration of variables/functions and finally the org-publish-project-alist which handles nearly all of the project generation instructions.
Publish Script
-Publish Script
+As the project is hosted on Github, I have created a small script that is able to push changes to the remote repository, which Cloudflare will automatically detect and rebuild the website:
diff --git a/output/sitemap.html b/output/sitemap.html index c21ffaf..d1c3252 100644 --- a/output/sitemap.html +++ b/output/sitemap.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - +Sitemap
@@ -233,6 +233,7 @@Posts tagged books
-Posts tagged books
+Posts tagged education
-Posts tagged education
+Posts tagged emacs
-Posts tagged emacs
+- 09-08-2025: Website Changes
- What Do I Want To Do With Emacs diff --git a/output/tags/insights.html b/output/tags/insights.html index 61897eb..19a15d4 100644 --- a/output/tags/insights.html +++ b/output/tags/insights.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - +
Posts tagged insights
-Posts tagged insights
+- Hilbert's Hotel
- Wacom With Arch diff --git a/output/tags/introduction.html b/output/tags/introduction.html index ad75cf7..4a372c3 100644 --- a/output/tags/introduction.html +++ b/output/tags/introduction.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - +
Posts tagged introduction
-Posts tagged introduction
+- Blogs Introduction
- Posts Introduction diff --git a/output/tags/maths.html b/output/tags/maths.html index 8b80014..16ba7da 100644 --- a/output/tags/maths.html +++ b/output/tags/maths.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - +