updates
Some checks failed
Build Quartz Notes / build (push) Failing after 2m40s

This commit is contained in:
2026-06-04 14:47:44 +01:00
parent 58909ef3f1
commit 5d3ed14275
97 changed files with 3890 additions and 2266 deletions

View File

@@ -3,6 +3,5 @@
"dataview",
"obsidian-annotator",
"pdf-plus",
"calendar",
"quartz-syncer"
"calendar"
]

View File

@@ -17,6 +17,6 @@
"repelStrength": 10,
"linkStrength": 1,
"linkDistance": 250,
"scale": 0.7132754626224411,
"scale": 0.7132754626224402,
"close": true
}

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

@@ -0,0 +1,10 @@
{
"insert-template": [
{
"modifiers": [
"Alt"
],
"key": "T"
}
]
}

0
.obsidian/plugins/calendar/data.json vendored Normal file → Executable file
View File

0
.obsidian/plugins/calendar/main.js vendored Normal file → Executable file
View File

0
.obsidian/plugins/calendar/manifest.json vendored Normal file → Executable file
View File

2
.obsidian/plugins/copilot/data.json vendored Normal file → Executable file
View File

@@ -22,7 +22,7 @@
"siliconflowApiKey": "",
"githubCopilotAccessToken": "",
"githubCopilotToken": "",
"githubCopilotTokenExpiresAt": 1780499501000,
"githubCopilotTokenExpiresAt": 1780523791000,
"defaultChainType": "llm_chain",
"defaultModelKey": "google/gemini-2.5-flash|openrouterai",
"embeddingModelKey": "openai/text-embedding-3-small|openrouterai",

0
.obsidian/plugins/copilot/main.js vendored Normal file → Executable file
View File

0
.obsidian/plugins/copilot/manifest.json vendored Normal file → Executable file
View File

0
.obsidian/plugins/copilot/styles.css vendored Normal file → Executable file
View File

View File

@@ -1,50 +0,0 @@
{
"git": {
"remoteUrl": "",
"branch": "v4",
"corsProxyUrl": "",
"auth": {
"type": "basic",
"username": ""
},
"providerHint": "github"
},
"vaultPath": "/",
"contentFolder": "content",
"publishFrontmatterKey": "publish",
"allNotesPublishableByDefault": false,
"showCreatedTimestamp": true,
"showUpdatedTimestamp": true,
"showPublishedTimestamp": false,
"usePermalink": false,
"includeAllFrontmatter": false,
"frontmatterFormat": "yaml",
"createdTimestampKey": "created, created_at, date",
"updatedTimestampKey": "modified, lastmod, updated, last-modified",
"publishedTimestampKey": "published, publishDate, date",
"timestampFormat": "MMM dd, yyyy h:mm a",
"useCache": true,
"syncCache": true,
"persistCache": false,
"cacheTimestamp": 0,
"cache": "{}",
"useAutoCardLink": false,
"useDataview": true,
"useDatacore": false,
"useExcalidraw": false,
"useFantasyStatblocks": false,
"useBases": false,
"useCanvas": false,
"manageSyncerStyles": true,
"lastUsedSettingsTab": "git",
"noteSettingsIsInitialized": true,
"pluginVersion": "1.15.3",
"lastUpstreamCommitSha": "",
"upgradeCheckStrategy": "version",
"diffViewStyle": "auto",
"ENABLE_DEVELOPER_TOOLS": false,
"logLevel": {
"value": 99,
"name": "OFF"
}
}

File diff suppressed because one or more lines are too long

View File

@@ -1,15 +0,0 @@
{
"id": "quartz-syncer",
"name": "Quartz Syncer",
"version": "1.15.3",
"minAppVersion": "1.12.4",
"description": "Manage and publish your notes to Quartz, the fast, batteries-included static-site generator.",
"author": "Emile Bangma",
"authorUrl": "https://github.com/saberzero1",
"fundingUrl": {
"Buy Me a Coffee": "https://buymeacoffee.com/saberzero1",
"GitHub Sponsor": "https://github.com/sponsors/saberzero1",
"Ko-Fi": "https://ko-fi.com/saberzero1"
},
"isDesktopOnly": false
}

View File

@@ -1,719 +0,0 @@
/* Quartz Syncer Publication Center */
.quartz-syncer-publisher-title-separator {
margin-top: 0;
margin-bottom: 15px;
}
.quartz-syncer-publisher-footer-separator {
margin-top: 15px;
margin-bottom: 15px;
}
.quartz-syncer-publisher-footer {
display: flex;
justify-content: flex-end;
position: sticky;
bottom: 0;
}
.quartz-syncer-publisher-loading-msg {
font-size: var(--font-ui-larger);
display: flex;
flex-grow: 0; /* Prevnets the loading message from stretching the container */
align-items: center;
flex-direction: column;
}
.quartz-syncer-progress-bar-text {
max-width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
button.quartz-syncer-publisher-button {
background-color: var(--interactive-accent);
color: var(--text-on-accent);
cursor: var(--cursor);
font-weight: var(--font-bold);
}
.quartz-syncer-publisher-loading-container {
width: 100%;
height: 5px;
margin-top: 10px;
}
.quartz-syncer-publisher-loading-bar {
background-color: var(--interactive-accent);
height: 100%;
transition: all 0.5s ease-in-out;
}
.quartz-syncer-publisher-published {
color: var(--text-success, var(--color-green));
}
.quartz-syncer-publisher-deleted {
color: var(--text-error, var(--color-red));
}
/* Quartz Syncer Diff View */
.quartz-syncer-diff-modal {
max-width: var(--modal-max-width, 100%);
width: var(--modal-width, 100%);
}
body.is-mobile .quartz-syncer-diff-modal {
width: 100%;
}
body.is-mobile .quartz-syncer-diff-view-container {
overflow-x: auto;
}
pre.quartz-syncer-diff-view {
display: block;
white-space: pre;
overflow-wrap: break-word;
width: fit-content;
}
pre.quartz-syncer-diff-view.quartz-syncer-diff-added {
background-color: rgb(
var(--background-modifier-success-rgb, var(--color-green-rgb)),
0.5
);
color: var(--text-on-accent);
}
pre.quartz-syncer-diff-view.quartz-syncer-diff-removed {
background-color: rgb(
var(--background-modifier-error-rgb, var(--color-red-rgb)),
0.5
);
color: var(--text-on-accent);
}
.quartz-syncer-diff-line {
white-space: pre;
overflow-wrap: break-word;
}
.quartz-syncer-diff-line-added {
background-color: var(--text-success, var(--color-green));
color: var(--text-on-accent);
text-decoration: overline;
}
.quartz-syncer-diff-line-removed {
background-color: var(--text-error, var(--color-red));
color: var(--text-on-accent);
text-decoration: line-through;
}
/* Quartz Syncer Tree Selectors */
.quartz-syncer-modal-content ul {
margin: 0;
list-style: none;
padding-left: 1.2rem;
user-select: none;
}
.quartz-syncer-modal-content li {
margin: 0.2rem 0;
}
.quartz-syncer-modal-content .no-arrow {
padding-left: calc(var(--icon-size) + 2px);
}
.quartz-syncer-modal-content .arrow {
cursor: var(--cursor);
display: inline-block;
transition: transform 200ms;
}
/* arrowDown svelte variable */
.quartz-syncer-modal-content .arrowDown {
transform: rotate(90deg);
}
/* isRoot svelte variable */
.quartz-syncer-modal-content ul.isRoot {
padding-left: 0;
}
.quartz-syncer-modal-content .root-header {
font-weight: var(--font-bold);
font-size: var(--font-ui-larger);
}
input:indeterminate {
background-color: var(--checkbox-color);
border-color: var(--checkbox-color);
}
input[type="checkbox"]:indeterminate::after {
content: "";
top: -1px;
left: -1px;
position: absolute;
width: var(--checkbox-size);
height: var(--checkbox-size);
display: block;
background-color: var(--checkbox-marker-color);
mask-position: 52% 52%;
mask-size: 65%;
mask-repeat: no-repeat;
mask-image: url('data:image/svg+xml; utf8,<svg fill="none" width="12px" height="12px" viewBox="0 0 32 32" id="icon" xmlns="http://www.w3.org/2000/svg"><rect fill="%23000000" x="4" y="4" width="24" height="24"/></svg>');
}
.quartz-syncer-icon-diff {
cursor: var(--cursor);
display: inline-block;
margin-left: 4px;
}
/* File type badges */
.quartz-syncer-file-badge {
font-size: 9px;
font-weight: var(--font-bold);
padding: 1px 4px;
border-radius: var(--radius-s);
margin-left: 6px;
text-transform: uppercase;
vertical-align: middle;
}
.quartz-syncer-badge-base {
background-color: rgb(var(--color-purple-rgb, 147, 51, 234), 0.2);
color: var(--text-accent, var(--color-purple, #9333ea));
border: 1px solid rgb(var(--color-purple-rgb, 147, 51, 234), 0.3);
}
.quartz-syncer-badge-canvas {
background-color: rgb(var(--color-cyan-rgb, 6, 182, 212), 0.2);
color: var(--text-accent, var(--color-cyan, #06b6d4));
border: 1px solid rgb(var(--color-cyan-rgb, 6, 182, 212), 0.3);
}
/* Quartz Syncer Settings */
.quartz-syncer-settings button:disabled,
.quartz-syncer-publish-status-view button:disabled {
pointer-events: none;
opacity: 0.4;
}
.quartz-syncer-publish-status-view ul {
list-style-type: none;
position: relative;
margin-left: 5px;
margin-top: 0;
max-height: 250px;
overflow: auto;
}
.quartz-syncer-publish-status-view h2 {
margin-top: 0;
margin-bottom: 5px;
}
.quartz-syncer-publish-status-view .collapsable {
cursor: var(--cursor);
margin-left: 10px;
}
.quartz-syncer-settings-enabled
> .setting-item-info
> .setting-item-name::after {
content: " (plugin enabled)";
color: var(--text-success, var(--color-green));
font-weight: var(--font-bold);
}
.quartz-syncer-settings-disabled > .setting-item-info > .setting-item-name {
color: var(--text-error, var(--color-red));
}
.quartz-syncer-settings-disabled
> .setting-item-info
> .setting-item-name::after {
content: " (plugin disabled)";
color: var(--text-error, var(--color-red));
font-weight: var(--font-bold);
}
.quartz-syncer-settings-disabled > .setting-item-control > .checkbox-container {
background-color: var(--text-error, var(--color-red));
}
.quartz-syncer-settings .setting-item-heading {
margin-top: var(--heading-spacing);
}
.quartz-syncer-settings-description {
margin-bottom: 10px;
}
.quartz-syncer-settings .svg-icon {
margin-right: 10px;
}
.quartz-syncer-navigation-item-icon > svg.svg-icon {
margin-right: 0;
}
.quartz-syncer-svg-icon {
margin-right: 4px;
}
/* GitHub connection status */
.quartz-syncer-connection-status {
font-weight: var(--font-bold);
}
.quartz-syncer-connection-status-failed {
color: var(--text-error, var(--color-red));
}
.quartz-syncer-connection-status-success {
color: var(--text-success, var(--color-green));
}
.quartz-syncer-connection-status-pending {
color: var(--text-warning, var(--color-orange));
}
/* Cog animation */
@keyframes quartz-syncer-rotate-animation {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.quartz-syncer-rotate {
animation: quartz-syncer-rotate-animation 4s linear infinite;
}
.quartz-syncer-cog {
margin-left: 3px;
}
.quartz-syncer-cog-big {
width: 40px;
height: 40px;
}
/* Progress bar */
.quartz-syncer-progress-bar-container {
width: 100%;
height: 40px;
margin-top: 10px;
}
/* Publication center */
.quartz-syncer-modal-content:first-child {
width: 100%;
}
/* Folder select */
.quartz-syncer-settings .search-input-container::before {
display: none;
}
.quartz-syncer-settings .search-input-container input {
padding-inline-start: 0;
padding: 4px 8px;
}
.quartz-syncer-settings.quartz-syncer-desktop .search-input-container input {
width: unset;
}
/* Settings tabs */
.quartz-syncer-navigation-item {
cursor: var(--cursor);
border: var(--border-width) solid var(--background-modifier-border);
border-radius: var(--radius-m) var(--radius-m) var(--radius-s)
var(--radius-s);
font-weight: var(--font-bold);
font-size: var(--font-text-size);
display: flex;
flex-shrink: 0;
flex-direction: row;
white-space: nowrap;
padding: 4px 6px;
align-items: center;
gap: 4px;
overflow: hidden;
background-color: var(--background-secondary-alt);
transition:
color 0.25s ease-in-out,
padding 0.25s ease-in-out,
background-color 0.35s cubic-bezier(0.45, 0.25, 0.83, 0.67),
max-width 0.35s cubic-bezier(0.57, 0.04, 0.58, 1);
height: 32px;
}
@media screen and (width <= 1325px) {
.quartz-syncer-navigation-item.quartz-syncer-desktop {
max-width: 32px;
}
}
@media screen and (width <= 800px) {
.quartz-syncer-navigation-item.quartz-syncer-mobile {
max-width: 32px;
}
}
.quartz-syncer-navigation-item-icon,
.quartz-syncer-warning {
padding-top: 5px;
}
.quartz-syncer-navigation-item:hover {
border-color: var(--interactive-accent-hover);
border-bottom: 0;
}
.quartz-syncer-navigation-item.quartz-syncer-navigation-item-active {
background-color: var(--interactive-accent);
color: var(--text-on-accent);
padding: 4px 9px;
max-width: 100%;
border: var(--border-width) solid var(--background-modifier-border);
border-radius: var(--radius-m) var(--radius-m) var(--radius-s)
var(--radius-s);
border-bottom: 0;
transition:
color 0.25s ease-in-out,
padding 0.25s ease-in-out,
background-color 0.35s cubic-bezier(0.45, 0.25, 0.83, 0.67),
max-width 0.45s cubic-bezier(0.57, 0.04, 0.58, 1) 0.2s;
}
.quartz-syncer-settings {
transition: transform 400ms 0s;
}
.quartz-syncer-setting-title {
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 30px;
}
.quartz-syncer-setting-title.quartz-syncer-mobile {
justify-content: space-around;
}
.quartz-syncer-setting-title h1 {
font-weight: 900;
margin-top: 6px;
margin-bottom: 12px;
}
.quartz-syncer-setting-header {
margin-bottom: 24px;
overflow: auto hidden;
}
.quartz-syncer-setting-header .quartz-syncer-setting-tab-group {
display: flex;
align-items: flex-end;
overflow-x: auto;
width: 100%;
}
.quartz-syncer-setting-tab-group {
margin-top: 6px;
padding-left: 2px;
padding-right: 2px;
border-bottom: var(--border-width) solid var(--background-modifier-border);
}
.quartz-syncer-setting-header .quartz-syncer-tab-settings {
padding: 6px 12px;
font-weight: 600;
cursor: var(--cursor);
white-space: nowrap;
border-left: var(--border-width) solid var(--background-modifier-border);
border-right: var(--border-width) solid var(--background-modifier-border);
}
.quartz-syncer-setting-header .quartz-syncer-tab-settings:first-child {
margin-left: 6px;
}
.quartz-syncer-setting-header
.quartz-syncer-tab-settings.quartz-syncer-tab-settings-active {
border-bottom: var(--border-width) solid var(--background-primary);
transform: translateY(2px);
border-radius: var(--radius-s);
border-left: var(--border-width) solid var(--background-modifier-border);
border-top: var(--border-width) solid var(--background-modifier-border);
border-right: var(--border-width) solid var(--background-modifier-border);
}
.quartz-syncer-setting-content
.quartz-syncer-tab-settings.quartz-syncer-tab-settings-active {
display: block;
}
.quartz-syncer-setting-content
.quartz-syncer-tab-settings:not(.quartz-syncer-tab-settings-active) {
display: none;
}
body.is-phone
.quartz-syncer-navigation-item:not(.quartz-syncer-navigation-item-active)
> span:nth-child(2),
body.is-tablet
.quartz-syncer-navigation-item:not(.quartz-syncer-navigation-item-active)
> span:nth-child(2),
body.is-mobile
.quartz-syncer-navigation-item:not(.quartz-syncer-navigation-item-active)
> span:nth-child(2) {
border: 0;
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
white-space: nowrap;
}
/* Token/Secret Storage UI */
.quartz-syncer-token-container {
display: flex;
flex-direction: column;
gap: 8px;
width: 100%;
}
.quartz-syncer-token-status {
font-size: var(--font-ui-smaller);
padding: 4px 8px;
border-radius: var(--radius-s);
display: inline-flex;
align-items: center;
gap: 4px;
}
.quartz-syncer-token-status::before {
content: "";
width: 8px;
height: 8px;
border-radius: 50%;
display: inline-block;
}
.quartz-syncer-token-status-set {
background-color: rgb(var(--color-green-rgb), 0.15);
color: var(--text-success, var(--color-green));
}
.quartz-syncer-token-status-set::before {
background-color: var(--text-success, var(--color-green));
}
.quartz-syncer-token-status-unset {
background-color: rgb(var(--color-orange-rgb), 0.15);
color: var(--text-warning, var(--color-orange));
}
.quartz-syncer-token-status-unset::before {
background-color: var(--text-warning, var(--color-orange));
}
.quartz-syncer-token-input-container {
display: flex;
gap: 4px;
align-items: center;
}
.quartz-syncer-token-input {
flex: 1;
padding: 6px 10px;
border: 1px solid var(--background-modifier-border);
border-radius: var(--radius-s);
background-color: var(--background-primary);
color: var(--text-normal);
font-family: var(--font-monospace);
}
.quartz-syncer-token-input:focus {
border-color: var(--interactive-accent);
outline: none;
}
.quartz-syncer-token-toggle {
padding: 6px;
border: none;
background: transparent;
cursor: var(--cursor);
color: var(--text-muted);
border-radius: var(--radius-s);
}
.quartz-syncer-token-toggle:hover {
color: var(--text-normal);
background-color: var(--background-modifier-hover);
}
.quartz-syncer-token-buttons {
display: flex;
gap: 8px;
}
.quartz-syncer-token-buttons button {
padding: 6px 12px;
border-radius: var(--radius-s);
cursor: var(--cursor);
font-size: var(--font-ui-small);
}
/* Plugin Browser Modal */
.quartz-syncer-plugin-browser {
width: 700px;
max-width: 90vw;
}
.quartz-syncer-plugin-browser .modal-content {
max-height: 70vh;
overflow-y: auto;
padding: 0 16px 16px;
}
.quartz-syncer-plugin-browser-loading {
text-align: center;
color: var(--text-muted);
padding: 24px 0;
}
.quartz-syncer-plugin-browser-controls {
display: flex;
gap: 8px;
margin-bottom: 12px;
position: sticky;
top: 0;
background: var(--modal-background);
padding: 8px 0;
z-index: 1;
}
.quartz-syncer-plugin-browser-search {
flex: 1;
padding: 6px 10px;
border: 1px solid var(--background-modifier-border);
border-radius: var(--radius-s);
background: var(--background-primary);
color: var(--text-normal);
font-size: var(--font-ui-small);
}
.quartz-syncer-plugin-browser-tag-filter {
padding: 6px 10px;
border: 1px solid var(--background-modifier-border);
border-radius: var(--radius-s);
background: var(--background-primary);
color: var(--text-normal);
font-size: var(--font-ui-small);
}
.quartz-syncer-plugin-browser-list {
display: flex;
flex-direction: column;
gap: 8px;
}
.quartz-syncer-plugin-browser-empty {
text-align: center;
color: var(--text-muted);
padding: 16px 0;
}
.quartz-syncer-plugin-browser-card {
border: 1px solid var(--background-modifier-border);
border-radius: var(--radius-m);
padding: 12px;
}
.quartz-syncer-plugin-browser-card-header {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 4px;
}
.quartz-syncer-plugin-browser-card-name {
font-weight: var(--font-bold);
font-size: var(--font-ui-medium);
}
.quartz-syncer-plugin-browser-badge-official {
font-size: var(--font-ui-smaller);
color: var(--text-on-accent);
background: var(--interactive-accent);
padding: 1px 6px;
border-radius: var(--radius-s);
}
.quartz-syncer-plugin-browser-card-desc {
color: var(--text-muted);
font-size: var(--font-ui-small);
margin: 0 0 8px;
}
.quartz-syncer-plugin-browser-card-footer {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
}
.quartz-syncer-plugin-browser-card-tags {
display: flex;
flex-wrap: wrap;
gap: 4px;
}
.quartz-syncer-plugin-browser-tag {
font-size: var(--font-ui-smaller);
color: var(--text-muted);
background: var(--background-secondary);
padding: 1px 6px;
border-radius: var(--radius-s);
}
.quartz-syncer-plugin-browser-installed {
font-size: var(--font-ui-small);
color: var(--text-success);
font-weight: var(--font-bold);
}
.quartz-syncer-plugin-browser-install-btn {
padding: 4px 12px;
border-radius: var(--radius-s);
background: var(--interactive-accent);
color: var(--text-on-accent);
cursor: var(--cursor);
font-size: var(--font-ui-small);
font-weight: var(--font-bold);
border: none;
white-space: nowrap;
}
.quartz-syncer-plugin-browser-install-btn:disabled {
opacity: 0.6;
cursor: not-allowed;
}

View File

@@ -4,21 +4,21 @@
"type": "split",
"children": [
{
"id": "17062c8b6bdf7fcc",
"id": "6237ac476356142f",
"type": "tabs",
"children": [
{
"id": "2d8a7bb35f01217d",
"id": "a343377e7b3c097f",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "Index.md",
"file": "Dailies/2026-05-29.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "Index"
"title": "2026-05-29"
}
}
]
@@ -53,7 +53,7 @@
"state": {
"type": "search",
"state": {
"query": "",
"query": "sql joins",
"matchingCase": false,
"explainSearch": false,
"collapseAll": false,
@@ -84,7 +84,8 @@
"title": "Calendar"
}
}
]
],
"currentTab": 3
}
],
"direction": "horizontal",
@@ -104,12 +105,12 @@
"state": {
"type": "outgoing-link",
"state": {
"file": "Index.md",
"file": "Non Technical/Non Technical MOC.md",
"linksCollapsed": false,
"unlinkedCollapsed": true
},
"icon": "links-going-out",
"title": "Outgoing links from Index"
"title": "Outgoing links from Non Technical MOC"
}
},
{
@@ -147,13 +148,13 @@
"state": {
"type": "outline",
"state": {
"file": "Index.md",
"file": "Non Technical/Non Technical MOC.md",
"followCursor": false,
"showSearch": false,
"searchQuery": ""
},
"icon": "lucide-list",
"title": "Outline of Index"
"title": "Outline of Non Technical MOC"
}
},
{
@@ -165,9 +166,28 @@
"icon": "excalidraw-icon",
"title": "Excalidraw Sidepanel"
}
},
{
"id": "25f2f0631c046232",
"type": "leaf",
"state": {
"type": "backlink",
"state": {
"file": "Career/Security/Cross Site Scripting (XSS).md",
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical",
"showSearch": false,
"searchQuery": "",
"backlinkCollapsed": false,
"unlinkedCollapsed": true
},
"icon": "links-coming-in",
"title": "Backlinks for Cross Site Scripting (XSS)"
}
}
],
"currentTab": 4
"currentTab": 5
}
],
"direction": "horizontal",
@@ -186,58 +206,57 @@
"pdf-plus:PDF++: Toggle auto-focus": false,
"pdf-plus:PDF++: Toggle auto-paste": false,
"bases:Create new base": false,
"templates:Insert template": false,
"copilot:Open Copilot Chat": false
"templates:Insert template": false
}
},
"active": "2d8a7bb35f01217d",
"active": "a343377e7b3c097f",
"lastOpenFiles": [
"Dailies/2026-06-01.md",
"Dailies/2026-06-02.md",
"Dailies/2026-06-03.md",
"Career/Output Encoding.md",
"copilot/copilot-custom-prompts/Clip Web Page.md",
"copilot/copilot-custom-prompts/Clip YouTube Transcript.md",
"copilot/copilot-custom-prompts/Rewrite as tweet thread.md",
"copilot/copilot-custom-prompts/Rewrite as tweet.md",
"copilot/copilot-custom-prompts/Remove URLs.md",
"copilot/copilot-custom-prompts/Generate glossary.md",
"copilot/copilot-custom-prompts/Generate table of contents.md",
"copilot/copilot-custom-prompts/Make longer.md",
"copilot/copilot-custom-prompts/Make shorter.md",
"copilot/copilot-custom-prompts/Emojify.md",
"copilot/copilot-custom-prompts/Explain like I am 5.md",
"copilot/copilot-custom-prompts/Simplify.md",
"copilot/copilot-custom-prompts/Summarize.md",
"copilot/copilot-custom-prompts/Translate to Chinese.md",
"copilot/copilot-custom-prompts/Fix grammar and spelling.md",
"copilot/copilot-custom-prompts",
"copilot",
"Career/Regex.md",
"Dailies/2026-06-04.md",
"Career/Microlise/Session Stored XSS PENTEST.md",
"Career/Security/Cross Site Scripting (XSS).md",
"Career/Concepts.md",
"Career/API/API Architecture.md",
"Career/Database - SQL/Using Joins, Constraints, Normalization, and Subqueries.md",
"copilot/memory/Recent Conversations.md",
"copilot/copilot-conversations/Hello@20260603_222655.md",
"copilot/memory",
"copilot/copilot-conversations/Can_you_complete_the_common_aggregate_functions_with_examples_and@20260603_222600.md",
"copilot/copilot-conversations",
"copilot",
"Career/Database - SQL/SQL Joins.md",
"Career/Database - SQL/Attachments/Pasted image 20260603221345.png",
"Career/Database - SQL/Attachments",
"Articles/Articles MOC.md",
"Articles/Substack Articles.md",
"Articles/20 Software Engineering Laws.md",
"pdfs/_articles/20-laws-software-engineering.pdf",
"Index.md",
"Non Technical/z resources.md",
"pdfs/_articles/The New Definition of Software Engineering in the Age of AI Is Already Here _ by Deep concept _ Lets Code Future _ May, 2026 _ Medium.pdf",
"Articles/Redefining the Software Engineering Profession for AI.md",
"pdfs/_articles/Opinion.pdf",
"Articles/I thought I knew system design.md",
"Articles/Every Senior Engineer has read these books.md",
"Books/Books MOC.md",
"Career/API",
"Books/The Science of Self-Discipline.md",
"Books/Notes/Neuroplasticity.md",
"Books/Ikigai.md",
"Books/So good they cant ignore you.md",
"pdfs/_articles/Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome.pdf",
"Articles/Reason some people are likable.md",
"pdfs/_articles/reason-some-people-are-likable.pdf",
"Articles/Software Quality.md",
"pdfs/_articles/software-quality.pdf",
"Articles/Effects of insufficient sleep on circadian rhythmicity.md",
"Articles/Effect of Tiktok on teens.md",
"Career/Microlise/Seb Search Improvements.md",
"Career/Devops",
"Career/Security/Attachments/Pasted image 20260603202316.png",
"Career/Security/Attachments/Pasted image 20260603202301.png",
"Books/Attachments/Pasted image 20260603145548.png",
"pdfs/_misc/Ikigai.pdf",
"Books/Attachments/Pasted image 20260603145055.png",
"Books/Attachments/Pasted image 20260603145047.png",
"Books/Attachments/Pasted image 20260603144656.png",
"Books/Attachments/Pasted image 20260603144325.png",
"Books/Attachments/Pasted image 20260603144043.png",
"Books/Attachments/Pasted image 20260603143606.png",
"Books/Attachments/Pasted image 20260603143542.png",
"Books/Attachments/Pasted image 20260603143442.png",
"Books/Attachments",
"pdfs/_misc/The Book of Ichigo Ichie.pdf",
"Books/Books",
"Books/–",
"Books/Notes",
"Articles/Attachments/2026-05-22-every-senior-engineer-i-respect-has-read-these-books-have-you-by-the-latency-gambler-mar-2026-medium-01.png",
"Untitled.canvas"
]
}

View File

@@ -1,5 +1,22 @@
These are PDF articles that have been saved under the `pdfs/` folder, annotated and studied.
This is different to [[z resources]] as that will contain resources in general, including articles (articles are a subset of the responsibilities of [[z resources]])
## Software Articles:
- [[I thought I knew system design]]
- [[Every Senior Engineer has read these books]]
- [[Software Quality]]
- [[20 Software Engineering Laws]]
- [[Redefining the Software Engineering Profession for AI]]
- [[Effects of insufficient sleep on circadian rhythmicity]]
- [[Effect of Tiktok on teens]]
- [[Reason some people are likable]]
All files that are not done:
```dataview
TABLE
FROM "Articles"
WHERE done != true AND file.name!="Articles MOC"
SORT file.name ASC
```

0
Articles/Effect of Tiktok on teens.md Normal file → Executable file
View File

View File

@@ -1,6 +1,7 @@
---
pdf: "[[Every Senior Engineer I Respect Has Read These Books (Have You_) _ by The Latency Gambler _ Mar, 2026 _ Medium.pdf]]"
type: pdf-notes
done: true
---
# Every Senior Engineer has read these books Notes:

View File

@@ -4,6 +4,7 @@ pdf:
date started: 2026-06-03
date finished: 2026-06-03
type: pdf-notes
done: true
---
# AI summary:

View File

@@ -0,0 +1,22 @@
---
pdf:
- "[[reason-some-people-are-likable.pdf]]"
date started: 2026-06-03
date finished: 2026-06-03
type:
- pdf-notes
done: true
---
# Reason some people are likable: Notes
> [!PDF|] [[reason-some-people-are-likable.pdf#page=4&selection=12,1,18,70|reason-some-people-are-likable, p.4]]
> > acceptance prophecy” — the psychological phenomenon where your expectation of being accepted or rejected subtly shapes your behavior, which in turn influences whether others actually accept or reject you.
> [!PDF|] [[reason-some-people-are-likable.pdf#page=7&selection=0,67,2,33|reason-some-people-are-likable, p.7]]
> > “Dont wait to be welcomed. Be the welcomer.”
>
> Interesting conclusion people come to, something we are taught 1400+ years ago.
> [!PDF|] [[reason-some-people-are-likable.pdf#page=10&selection=6,0,8,31|reason-some-people-are-likable, p.10]]
> > Someone has to lower the wall first. Magnetic people are simply the ones who decide that person is them.

View File

@@ -0,0 +1,10 @@
---
pdf:
- "[[Opinion.pdf]]"
date started: 2026-06-03
date finished:
type:
- pdf-notes
done:
---
# Redefining the Software Engineering Profession for AI: Notes

View File

@@ -4,14 +4,17 @@ pdf:
date started: 2026-06-03
date finished: 2026-06-03
type: pdf-notes
done: true
---
# Software Quality: Notes
> (\[\[software-quality.pdf#page=1&annotation=122R|software-quality, p.1\]\])
> We've normalized software catastrophes to the point where a Calculator leaking 32GB of RAM barely makes the news.
> [!PDF|254, 254, 0] [[software-quality.pdf#page=1&annotation=122R|software-quality, p.1]]
> > We've normalized software catastrophes to the point where a Calculator leaking 32GB of RAM barely makes the news.
>
![[2026-05-22-software-quality.png]]
> (\[\[software-quality.pdf#page=10&annotation=123R|software-quality, p.10\]\])
> Teach fundamental engineering principles again. Array bounds checking. Memory management. Algorithm complexity. These aren't outdated concepts—they're engineering fundamentals.
> [!PDF|] [[software-quality.pdf#page=10&selection=34,0,40,50|software-quality, p.10]]
> > Teach fundamental engineering principles again. Array bounds checking. Memory management. Algorithm complexity. These aren't outdated concepts—they're engineering fundamentals
>

View File

@@ -1,3 +1,11 @@
---
pdf:
date started: 2026-06-03
date finished:
type:
done: true
---
- [The 20 Software Engineering Laws](id:973f2e9c-f161-45ad-8f19-2e4d563f56ac)
- [Microsoft banned AI because it cost too much.](https://medium.com/data-science-collective/microsoft-banned-ai-because-it-cost-too-much-135bcbf15a18)
# Substack Articles: Notes

0
Books/Art of Computer Programming.md Normal file → Executable file
View File

0
Books/Attachments/Pasted image 20260603143442.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

0
Books/Attachments/Pasted image 20260603143542.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

0
Books/Attachments/Pasted image 20260603143606.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

0
Books/Attachments/Pasted image 20260603144043.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

0
Books/Attachments/Pasted image 20260603144325.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

0
Books/Attachments/Pasted image 20260603144656.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

0
Books/Attachments/Pasted image 20260603145047.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 100 KiB

0
Books/Attachments/Pasted image 20260603145055.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 109 KiB

After

Width:  |  Height:  |  Size: 109 KiB

0
Books/Attachments/Pasted image 20260603145548.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 55 KiB

View File

@@ -3,7 +3,7 @@ tags:
- books
- calibre
- index
generated_at: 2026-06-03T14:09:04.104390
generated_at: 2026-06-04T00:00:02.018640
---
# Career

0
Books/Clean Code.md Normal file → Executable file
View File

0
Books/Notes/Neuroplasticity.md Normal file → Executable file
View File

0
Books/Notes/Stanford marshmallow experiment.md Normal file → Executable file
View File

0
Books/So good they cant ignore you.md Normal file → Executable file
View File

View File

@@ -46,17 +46,14 @@ Some core programming concepts that are essential for software development. The
# APIs
- [[Restful API]]
- [[API Architecture]] (Just needs spell checks and re read)
- [[ASP.NET Core Web API Fundamental Notes]] (todo)
# Database Related
- [[Database Permissions, Roles, and Accounts]]
- [[SQL Joins]]
- [[Database Permissions, Roles, and Accounts]]
- [[SQL Joins]]
- [[Using Joins, Constraints, Normalization, and Subqueries]]
# Misc
- [[Windows Services]]
@@ -68,73 +65,73 @@ Some core programming concepts that are essential for software development. The
- [[OWASP Top 10]]
- [[Cross Site Scripting (XSS)]]
- [[Output Encoding]]
# Concepts to learn and talk about (cs and maths)
- ~~xor~~
- ~~big O notation~~
- ~~time complexity~~
- ~~space complexity~~
- data structures
- algorithms
- design patterns
- functional programming
- object-oriented programming
- relational databases vs non-relational databases
- ~~Database permissions, roles and accounts~~
- networking basics
- operating systems fundamentals
- concurrency and parallelism
- software development methodologies (Agile, Scrum, etc.)
- version control systems (Git, etc.)
- testing methodologies (unit testing, integration testing, etc.)
- security best practices
- cloud computing basics
- containerization (Docker, Kubernetes, etc.)
- DevOps practices
- ~~CI/CD pipelines~~
- microservices architecture
- API design and development
- ~~restful apis~~
- web development fundamentals (HTML, CSS, JavaScript)
- mobile app development basics
- machine learning basics
- data science fundamentals
- big data concepts
- blockchain basics
- cryptography fundamentals
- user experience (UX) design principles
- software architecture patterns (MVC, MVVM, etc.)
- debugging techniques
- performance optimization strategies
- software documentation best practices
- ethical considerations in software development
- emerging technologies in software development
- career development in software engineering
- soft skills for software engineers (communication, teamwork, etc.)
- project management basics for software projects
- open source contribution best practices
- remote work best practices for software engineers
- continuous learning strategies for software engineers
- data types
- bytes and bits
- number systems (binary, decimal, hexadecimal)
- logic gates
- set theory
- graph theory
- combinatorics
- probability theory
- statistics
- linear algebra
- calculus
- discrete mathematics
- compilers
- interpreters
- automata theory
- formal languages
- Turing machines
- computability theory
- MVPs and MVTs
- [x] xor
- [x] big O notation
- [x] time complexity
- [x] space complexity
- [ ] data structures
- [ ] algorithms
- [ ] design patterns
- [ ] functional programming
- [ ] object-oriented programming
- [ ] relational databases vs non-relational databases
- [x] Database permissions, roles and accounts
- [ ] networking basics
- [ ] operating systems fundamentals
- [ ] concurrency and parallelism
- [ ] software development methodologies (Agile, Scrum, etc.)
- [ ] version control systems (Git, etc.)
- [ ] testing methodologies (unit testing, integration testing, etc.)
- [ ] security best practices
- [ ] cloud computing basics
- [ ] containerization (Docker, Kubernetes, etc.)
- [ ] DevOps practices
- [x] CI/CD pipelines
- [ ] microservices architecture
- [ ] API design and development
- [x] restful apis
- [ ] web development fundamentals (HTML, CSS, JavaScript)
- [ ] mobile app development basics
- [ ] machine learning basics
- [ ] data science fundamentals
- [ ] big data concepts
- [ ] blockchain basics
- [ ] cryptography fundamentals
- [ ] user experience (UX) design principles
- [ ] software architecture patterns (MVC, MVVM, etc.)
- [ ] debugging techniques
- [ ] performance optimization strategies
- [ ] software documentation best practices
- [ ] ethical considerations in software development
- [ ] emerging technologies in software development
- [ ] career development in software engineering
- [ ] soft skills for software engineers (communication, teamwork, etc.)
- [ ] project management basics for software projects
- [ ] open source contribution best practices
- [ ] remote work best practices for software engineers
- [ ] continuous learning strategies for software engineers
- [ ] data types
- [ ] bytes and bits
- [ ] number systems (binary, decimal, hexadecimal)
- [ ] logic gates
- [ ] set theory
- [ ] graph theory
- [ ] combinatorics
- [ ] probability theory
- [ ] statistics
- [ ] linear algebra
- [ ] calculus
- [ ] discrete mathematics
- [ ] compilers
- [ ] interpreters
- [ ] automata theory
- [ ] formal languages
- [ ] Turing machines
- [ ] computability theory
- [x] MVPs and MVTs
# Data view query

Binary file not shown.

After

Width:  |  Height:  |  Size: 447 KiB

View File

@@ -16,3 +16,5 @@ Here are the different types of JOINs in SQL:
- LEFT (OUTER) JOIN: Returns all rows from the left table, and only the matched rows from the right table
- RIGHT (OUTER) JOIN: Returns all rows from the right table, and only the matched rows from the left table
- FULL (OUTER) JOIN: Returns all rows when there is a match in either the left or right table
![[Pasted image 20260603221345.png]]

View File

@@ -0,0 +1,269 @@
---
note type:
- sql
- database
- theory
date: 2026-06-03
done:
link: https://app.pluralsight.com/ilx/video-courses/sql-joins-constraints-normalization-subqueries/course-overview
---
# Common Aggregate Functions
|title|cost|duration|
|---|---|---|
|Gone with the wind|390000|220|
|Frankenstein|3000000|50|
|Creature from the black lagoon|500000|79|
|NULL|100|10|
## 1. COUNT()
## Count all rows
`SELECT COUNT(*) FROM Movies;`
**Output:**
```
4
```
- Counts all rows, including rows where columns are `NULL`.
### Count non-NULL values in a column
`SELECT COUNT(title) FROM Movies;`
**Output:**
```
3
```
- `NULL` title is **not counted**.
## 2. MIN()
`SELECT MIN(cost) FROM Movies;`
**Output:**
```
100
```
- Returns the smallest value in the column.
## 3. MAX()
`SELECT MAX(cost) FROM Movies;`
**Output:**
```
3000000
```
- Returns the largest value.
## 4. SUM()
`SELECT SUM(cost) FROM Movies;`
**Output:**
```
3890100
```
Calculation:
```
390000 + 3000000 + 500000 + 100 = 3890100
```
- Adds all values in the column.
- Ignores `NULL` values (none in `cost` here).
## 5. AVG()
`SELECT AVG(cost) FROM Movies;`
**Output:**
```
972525
```
Calculation:
```
3890100 / 4 = 972525
```
- Computes the average of all values.
---
## Using Multiple Aggregates
```
SELECT
    COUNT(*) AS total_movies,
    MIN(cost) AS cheapest,
    MAX(cost) AS most_expensive,
    SUM(cost) AS total_cost,
    AVG(cost) AS average_cost
FROM Movies;
```
**Output:**
```
total_movies | cheapest | most_expensive | total_cost | average_cost
4 | 100 | 3000000 | 3890100 | 972525
```
# Filtering Aggregates
| title | cost | duration | genre |
| ------------------------------ | ------- | -------- | ------ |
| Gone with the wind | 390000 | 220 | Drama |
| Frankenstein | 3000000 | 50 | Horror |
| Creature from the black lagoon | 500000 | 79 | Horror |
| Casablanca | 1000000 | 102 | Drama |
| Toy Story | 2000000 | 81 | Family |
| NULL | 100 | 10 | Horror |
## GROUP BY
`GROUP BY` groups rows so aggregates are calculated per group rather than across the whole table.
```
SELECT genre, SUM(cost) AS total_cost
FROM Movies
GROUP BY genre;
```
Output:
```
genre | total_cost
Drama | 1390000
Horror | 3500100
Family | 2000000
```
```
SELECT genre, AVG(duration) AS avg_duration
FROM Movies
GROUP BY genre;
```
Output:
```
genre | avg_duration
Drama | 161
Horror | 46.33
Family | 81
```
---
## WHERE (filtering rows before aggregation)
`WHERE` filters rows **before** grouping and aggregation.
```
SELECT genre, COUNT(*) AS num_movies
FROM Movies
WHERE duration > 60
GROUP BY genre;
```
Output:
```
genre | num_movies
Drama | 2
Horror | 1
Family | 1
```
Explanation:
- The row with duration = 10 is excluded before grouping.
## HAVING (filtering groups after aggregation)
`HAVING` filters results **after aggregation**.
```
SELECT genre, SUM(cost) AS total_cost
FROM Movies
GROUP BY genre
HAVING SUM(cost) >= 2000000;
```
Output:
```
genre | total_cost
Horror | 3500100
Family | 2000000 -- note: included only if >= was used
```
If strictly `> 2000000`, only:
```
Horror | 3500100
```
```
SELECT genre, COUNT(*) AS num_movies
FROM Movies
GROUP BY genre
HAVING COUNT(*) > 2;
```
Output:
```
genre | num_movies
Horror | 3
```
## Combined Example
```
SELECT genre, AVG(cost) AS avg_cost
FROM Movies
WHERE duration > 60
GROUP BY genre
HAVING AVG(cost) > 1000000;
```
Steps:
1. WHERE filters rows (duration > 60)
2. GROUP BY groups remaining data
3. HAVING filters grouped results
Output:
```
genre | avg_cost
Family | 2000000
```

View File

@@ -428,10 +428,73 @@ Master procedure: **Replicating the vulnerability** section above.
| Should it still be fixed? | **Yes**, as hygiene |
| Priority vs SQLi / IDOR? | **Much lower** (informational) |
## Next step
## Code snippets
1. **Reproduce** on cert/UAT (`replicate-vuln` todo).
2. **Implement** fixes in `D:\_dev\WebPortal` (`remediate-encode`, `remediate-validate`).
3. **Replay** steps and fill comparison matrix (`remediate-retest` todo).
### Reset:
Confirm execution when ready to change WebPortal code.
```
fetch('ScheduleExecutionBoard.aspx/SaveSearchCriteriaToSession', {
  method: 'POST',
  credentials: 'include',
  headers: { 'Content-Type': 'application/json; charset=utf-8' },
  body: JSON.stringify({
    searchID: '0.X', orderID: '0.X',
    date: '2026-05-27', time: '00:00', hours: 24,
    displayPriorityJourneys: false, quickSearch: ''
  })
}).then(() => location.reload());
```
### Alert
```
fetch('ScheduleExecutionBoard.aspx/SaveSearchCriteriaToSession', {
  method: 'POST',
  credentials: 'include',
  headers: { 'Content-Type': 'application/json; charset=utf-8' },
  body: JSON.stringify({
    searchID: '0.X',
    orderID: '0.X',
    date: '"+alert(1)+"',
    time: '00:00',
    hours: 24,
    displayPriorityJourneys: false,
    quickSearch: ''
  })
}).then(r => console.log(r.status, r.statusText));
```
### Poison Session
```
function poisonSession(field, payload) {
  const body = {
    searchID: '0.X',
    orderID: '0.X',
    date: '2026-05-27',
    time: '00:00',
    hours: 24,
    displayPriorityJourneys: false,
    quickSearch: ''
  };
  body[field] = payload;
  return fetch('ScheduleExecutionBoard.aspx/SaveSearchCriteriaToSession', {
    method: 'POST',
    credentials: 'include',
    headers: { 'Content-Type': 'application/json; charset=utf-8' },
    body: JSON.stringify(body)
  }).then(r => console.log(field, r.status, r.statusText));
}
```
### Confirm / prompt (alternative dialog evidence)
```
poisonSession('date', '"+confirm("XSS: SEB session poisoned")+"');
```
### Visible banner
```
poisonSession('date', '"+document.body.insertAdjacentHTML("afterbegin","<div style=\\"position:fixed;top:0;left:0;right:0;background:red;color:white;z-index:99999;padding:12px;text-align:center\\">XSS PoC — arbitrary script executed in SEB context</div>")+"');
```

View File

@@ -1 +0,0 @@

6
Career/Regex.md Executable file
View File

@@ -0,0 +1,6 @@
---
note type:
- theory
date: 2026-06-04
done:
---

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

View File

@@ -38,3 +38,7 @@ Example: An attacker manipulates the URL of a web page to include a malicious sc
- Content Security Policy (CSP): Implement a Content Security Policy to restrict the sources from which scripts can be loaded and executed. This can help mitigate the impact of XSS attacks.
- Use Security Libraries: Utilize security libraries and frameworks that provide built-in protection against XSS vulnerabilities.
# Links:
- https://cwe.mitre.org/data/definitions/79.html
- https://www.cisa.gov/known-exploited-vulnerabilities-catalog

View File

@@ -0,0 +1,46 @@
---
note type:
- security
- theory
date: 2026-06-03
done: true
link: https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
---
## XSS Defense Philosophy[¶](https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html#xss-defense-philosophy "Permanent link")
In order for an XSS attack to be successful, an attacker must be able to insert and execute malicious content in a webpage. Thus, all variables in a web application needs to be protected. Ensuring that **all variables** go through validation and are then escaped or sanitized is known as **perfect injection resistance**. Any variable that does not go through this process is a potential weakness. Frameworks make it easy to ensure variables are correctly validated and escaped or sanitised.
However, no framework is perfect and security gaps still exist in popular frameworks like React and Angular. Output encoding and HTML sanitization help address those gaps.
## Output encoding
When you want data to be safely displayed, just as a user types it in, output encoding is recommended. Variables should not be interpreted as code instead of text. There are different types of output encoding mechanisms used.
### Output Encoding for HTML Contexts.
“HTML Context” refers to inserting a variable between two basic HTML tags like a `<div>` or `<b>`. For example:
`<div> $varUnsafe </div>`
An attacker could modify data that is rendered as `$varUnsafe`. This could lead to an attack being added to a webpage. For example:
``<div> <script>alert`1`</script> </div> // Example Attack``
### Output Encoding for “JavaScript Contexts”
“JavaScript Contexts” refers to the situation where variables are placed into inline JavaScript and then embedded in an HTML document. This situation commonly occurs in programs that heavily use custom JavaScript that is embedded in their web pages.
However, the only safe location for placing variables in JavaScript is inside a “quoted data value”. All other contexts are unsafe and you should not place variable data in them.
Examples of “Quoted Data Values”
`<script>alert('$varUnsafe)</script> <script>x=$varUnsafe</script> <div onmouseover="'$varUnsafe'"</div>`
Encode all characters using the `\xHH` format. Encoding libraries often have a `EncodeForJavaScript` or similar to support this function.
Please look at the [OWASP Java Encoder JavaScript encoding examples](https://owasp.org/www-project-java-encoder/) for examples of proper JavaScript use that requires minimal encoding.
For JSON, verify that the `Content-Type` header is `application/json` and not `text/html` to prevent XSS.
## Example
![[Pasted image 20260603202316.png]]

View File

@@ -6,13 +6,13 @@ date: 2026-06-03
# 2026-06-03
## TODOs
- [ ] Start making the fix for the XSS
- [x] Start making the fix for the XSS
- [ ]
- [ ]
- [ ]
- [ ] Reading (5 pages)
- [ ] Class 1
- [ ] Class 2
- [ ] Class 3
- [x] Class 1
## Links
- https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html

18
Dailies/2026-06-04.md Executable file
View File

@@ -0,0 +1,18 @@
---
work day: false
date: "2026-06-04"
---
# 2026-06-04
## TODOs
- [ ] Complete the fix, understand the regex
- [ ]
- [ ]
- [ ] Reading (5 pages)
- [ ] Class 1
- [ ] Class 2
- [ ] Class 3
## Links
- https://search.brave.com/search?q=ravenscar+coastal+walk

View File

@@ -3,7 +3,6 @@ note type:
- dashboard
date: 2026-06-03
---
# Vault Dashboard
> Start here, then jump into the part of the vault that needs attention.
@@ -13,32 +12,14 @@ date: 2026-06-03
## Quick Launch
| Area | Open | Use it for |
| --- | --- | --- |
| ----------- | ---------------- | ----------------------------------------------------------- |
| Daily | [[Daily Notes]] | Journal entries, plans, and day-to-day capture |
| Career | [[Career MOC]] | Software engineering, interviews, work notes, and resources |
| Books | [[Books MOC]] | Book notes, recommendations, and reading backlog |
| Articles | [[Articles MOC]] | Article notes and reading pipeline |
| Emacs | [[Emacs MOC]] | Packages, config, workflows, and references |
## Focus Areas
| Track | Key notes |
| --- | --- |
| Career growth | [[Job applications]] · [[Concepts]] · [[Design Patterns]] · [[Solid Principles]] · [[Test Driven Development]] |
| Backend and APIs | [[Restful API]] · [[API Architecture]] · [[ASP.NET Core Web API Fundamental Notes]] |
| Databases | [[Database MOC]] · [[SQL Joins]] · [[Postgres]] · [[Airflow]] |
| Security | [[OWASP Top 10]] · [[Cross Site Scripting (XSS)]] · [[Server-Side Request Forgery (SSRF)]] · [[Output Encoding]] |
| AI | [[AI Moc]] · [[AI - Codex]] · [[Data camp AI training]] |
| Microlise | [[Microlise MOC]] · [[ESS ESP Index]] · [[Session Stored XSS PENTEST]] |
## Recent Daily Notes
```dataview
LIST
FROM "Dailies"
SORT file.name DESC
LIMIT 7
```
| Concepts | [[Concepts]] | Career concepts |
| z resources | [[z resources]] | Resources |
## Active Reading
@@ -59,20 +40,3 @@ WHERE file.name != "Index"
SORT file.mtime DESC
LIMIT 12
```
## Capture
- New daily note: [[2026-06-03]]
- Reading inbox: [[Book Recs]] · [[Substack Articles]]
- Work inbox: [[Job applications]] · [[Pre work prep]]
- Ideas and concepts: [[Concepts]]
## Vault Map
| Shelf | Notes |
| --- | ---: |
| Career | `$= dv.pages('"Career"').length` |
| Books | `$= dv.pages('"Books"').length` |
| Articles | `$= dv.pages('"Articles"').length` |
| Technical | `$= dv.pages('"Technical"').length` |
| Dailies | `$= dv.pages('"Dailies"').length` |

View File

@@ -0,0 +1,5 @@
# [Recipes Cookbook](id:b31d6c3f-9bc3-4006-aaaf-d56168249e3a)
# [Recipe Ideas](id:F7D68FF4-CAD0-4791-BAE4-AC20B84A8785)
# [Recipes Done](id:EA93341B-20C0-48A2-BD88-F24ED3C540DA)

View File

@@ -0,0 +1,59 @@
# Spiced Potato & Pea Quesadillas
Prep time: 20 min
Ingredients:
Boiled potatoes, mashed
Frozen peas
Cumin, coriander, chili flakes
Tortilla wraps
Method:
Mix mashed potatoes, peas, and spices.
Spread mixture on a tortilla, top with another.
Toast in a pan until crispy on both sides.
# Chickpea Pilaf
Prep time: 25 min
Ingredients:
Cooked rice
Canned chickpeas
Onion, garlic, cumin, cinnamon
Optional: raisins or almonds
Method:
Sauté onion, garlic, spices.
Stir in chickpeas, then rice.
Heat through, serve with yogurt.
# Lentil Soup with Flatbread
Prep time: 25 min
Ingredients:
Red lentils
Onion, garlic, carrot
Cumin, turmeric, black pepper
Vegetable stock
Method:
Sauté onion, garlic, and carrot.
Add spices and lentils. Pour in stock.
Simmer until soft, then blend if preferred.

View File

@@ -0,0 +1,27 @@
# Done:
## \<2025-07-17 Thu\>
<https://spainonafork.com/healthy-creamy-tuna-wraps-recipe/>
Instead of 1 clove fresh garlic, i used 1/4 teaspoon garlic granules.
Also used lime juice instead of lemon juice
need to work on plating (put too much salad, its better to cut the tomatos in smaller chunks and the salad in smaller pieces)
## \<2025-07-18 Fri\>
<https://www.youtube.com/watch?v=wiKndVvU_Ks&list=LL&index=2&ab_channel=BrownGirlsKitchen>
Dont use plastic sieve (as boiled water goes on it when extracting the potatos)
use low heat when toasting the wraps
served 3 large sized wraps (maybe use taco wraps next time)
## \<2025-07-19 Sat\>
<https://www.youtube.com/watch?v=3d6DrdOEuY4&list=LL&index=1&ab_channel=FoodFusion>
WASH HANDS AFTER TOUCHING GREEN CHILLI.
juilienne : cutting the garlic into small strips

View File

@@ -0,0 +1,7 @@
# Important dates
## Engagement Day: \<2025-10-26 Sun\> 3pm-6pm
## Nikah / Barat: \<2026-08-02 Sun\>
## Walima: \<2026-08-09 Sun\>

View File

@@ -0,0 +1,10 @@
# Reading:
- 20 books
- 100 articles of medium size
## Agile Testing
## Head first into design patterns
## Code Complete

View File

@@ -0,0 +1,3 @@
- [Timetable](id:fc92a943-61ac-462a-b6e5-8be46069f2ca)
# Personal Operating System

View File

@@ -0,0 +1,22 @@
# Non-Ramadan — Weekdays
| | | |
| ----------- | ------------- | ---------------------------------------------------------- |
| Time | Focus | Details |
| 06:3008:00 | Morning (Dīn) | Fajr, Istighfār, Durood, Qurʾān (1.5 Juz), mobility / walk |
| 08:0016:30 | Work | Work blocks with intention |
| 16:3017:15 | Reset | Light food, walk, dhikr |
| 17:3022:30 | Evening | Commute + Alimiyyah classes |
| 22:3023:00 | Night | Remaining Durood, reflection, plan tomorrow, sleep |
\*Note\*: If the day is Tuesday or Thursday, then we take an hour lunch and go to the gym.
# Non-Ramadan — Weekends
| | | |
| ------------ | ----------- | ------------------------------------------------- |
| Time | Focus | Details |
| Morning | Dīn | Fajr, full awrād, extended Qurʾān / reading |
| Before Class | Body | Workout |
| 11:0014:00 | Alimiyyah | Classes |
| Evening | Nourishment | Arabic/English reading, calligraphy, family, rest |

View File

@@ -0,0 +1,37 @@
# Arabic
# French
## \<2026-03-06 Fri\>: écriture comme les mouches
L'expression « écriture comme les mouches » est une forme figurée pour décrire une écriture très petite, fine, difficile à lire, souvent qualifiée de « pattes de mouche ».
# English
# Urdu
## \<2026-03-07 Sat\>: "یک نہ شود دو شود" (Yak na shud, do shud)
Literal Meaning:
"One didn't happen, two happened."
Interpretation:
It's used when someone fails to achieve one thing and ends up with an even bigger problem or loss — essentially, adding insult to injury. Instead of just missing out on one thing, they end up worse off than before.
## \<2026-03-08 Sun\>: [Link to a bunch of proverbs](https://www.urdupod101.com/blog/2021/06/10/best-urdu-proverbs/)
# Latin
## \<2026-03-31 Tue 13:04\>: “mens sana in corpore sano”
Translates to “a healthy mind in a healthy body.”
# Japanese
## \<2026-04-01 Wed 16:04\>: Nana korobi ya oki 七転び⼋起き
Fall seven times, rise eight.
## \<2026-04-01 Wed 16:41\>: ichi-go ichi-e
“This moment exists only now and wont come again.”

View File

@@ -0,0 +1,71 @@
# Dinner
## Crispy Honey Chili Chicken <span class="tag" data-tag-name="Chicken_and_Rice"><span class="smallcaps">Chicken\_and\_Rice</span></span> <span class="tag" data-tag-name="Dinner"><span class="smallcaps">Dinner</span></span> <span class="tag" data-tag-name="Family"><span class="smallcaps">Family</span></span>
| | |
| ------------ | ------------------------------------------------------------------------------------- |
| **Category** | Dinner |
| **Keywords** | Chicken and Rice,Dinner,Family |
| **Created** | 2026-03-29 |
| **Modified** | 2026-03-29 |
| **Cooked** | \<2026-03-29 Sun\> |
| **Link** | [Open in Nextcloud](https://nextcloud.zainezq.com/apps/cookbook/webapp/recipes/42649) |
**Tips:** Use the lal mirch flakes (chilly flakes), and only use 2 spoons of those (tsp) - perfect spice level
# Lunch
## Chicken Rice Meal Prep <span class="tag" data-tag-name="Chicken"><span class="smallcaps">Chicken</span></span> <span class="tag" data-tag-name="Chicken_and_Rice"><span class="smallcaps">Chicken\_and\_Rice</span></span> <span class="tag" data-tag-name="Lunch"><span class="smallcaps">Lunch</span></span> <span class="tag" data-tag-name="Rice"><span class="smallcaps">Rice</span></span>
| | |
| ------------ | ------------------------------------------------------------------------------------- |
| **Category** | Lunch |
| **Keywords** | Chicken,Chicken and Rice,Lunch,Rice |
| **Created** | 2026-03-08 |
| **Modified** | 2026-03-08 |
| **Cooked** | \<2026-03-08 Sun\> |
| **Link** | [Open in Nextcloud](https://nextcloud.zainezq.com/apps/cookbook/webapp/recipes/23153) |
## Healthy CREAMY Tuna Wraps <span class="tag" data-tag-name="Lunch"><span class="smallcaps">Lunch</span></span> <span class="tag" data-tag-name="Tuna"><span class="smallcaps">Tuna</span></span>
| | |
| ------------ | ------------------------------------------------------------------------------------- |
| **Category** | Lunch |
| **Keywords** | Lunch,Tuna |
| **Created** | 2026-03-07 |
| **Modified** | 2026-03-08 |
| **Cooked** | \<2025-07-17 Thu\> |
| **Link** | [Open in Nextcloud](https://nextcloud.zainezq.com/apps/cookbook/webapp/recipes/23133) |
## High Protein Tuna Salad <span class="tag" data-tag-name="Lunch"><span class="smallcaps">Lunch</span></span> <span class="tag" data-tag-name="Tuna"><span class="smallcaps">Tuna</span></span>
| | |
| ------------ | ------------------------------------------------------------------------------------- |
| **Category** | Lunch |
| **Keywords** | Lunch,Tuna |
| **Created** | 2026-02-23 |
| **Modified** | 2026-03-08 |
| **Cooked** | *not yet made* |
| **Link** | [Open in Nextcloud](https://nextcloud.zainezq.com/apps/cookbook/webapp/recipes/21929) |
## One Pot Chicken and Rice Recipe <span class="tag" data-tag-name="Chicken"><span class="smallcaps">Chicken</span></span> <span class="tag" data-tag-name="Chicken_and_Rice"><span class="smallcaps">Chicken\_and\_Rice</span></span> <span class="tag" data-tag-name="Lunch"><span class="smallcaps">Lunch</span></span> <span class="tag" data-tag-name="One_Pot"><span class="smallcaps">One\_Pot</span></span> <span class="tag" data-tag-name="Rice"><span class="smallcaps">Rice</span></span>
| | |
| ------------ | ------------------------------------------------------------------------------------- |
| **Category** | Lunch |
| **Keywords** | Chicken,Chicken and Rice,Lunch,One Pot,Rice |
| **Created** | 2026-03-08 |
| **Modified** | 2026-03-08 |
| **Cooked** | *not yet made* |
| **Link** | [Open in Nextcloud](https://nextcloud.zainezq.com/apps/cookbook/webapp/recipes/23167) |
## Potato Peas Quesadilla <span class="tag" data-tag-name="Lunch"><span class="smallcaps">Lunch</span></span> <span class="tag" data-tag-name="Peas"><span class="smallcaps">Peas</span></span> <span class="tag" data-tag-name="Potato"><span class="smallcaps">Potato</span></span> <span class="tag" data-tag-name="Quesadilla"><span class="smallcaps">Quesadilla</span></span>
| | |
| ------------ | ------------------------------------------------------------------------------------- |
| **Category** | Lunch |
| **Keywords** | Lunch,Peas,Potato,Quesadilla |
| **Created** | 2026-03-07 |
| **Modified** | 2026-03-08 |
| **Cooked** | \<2025-07-18 Fri\> |
| **Link** | [Open in Nextcloud](https://nextcloud.zainezq.com/apps/cookbook/webapp/recipes/23144) |

View File

@@ -0,0 +1,29 @@
# Payslips
| Month | Amount |
| ------------- | -------- |
| October 2025 | 1994.61 |
| November 2025 | 2058.30 |
| December 2025 | 2153.84 |
| January 2026 | 2259.99 |
| February 2026 | 2383.04 |
| March 2026 | 2083.64 |
| April 2026 | 2080.44 |
| Total | 15013.86 |
# Walimah Hall:
## Details
£2800 for both halls and security deposit.
£1000 for the decor.
£10 per head for food, so £3000 for 300 people.
Total: £6800
## \<2026-04-07 Tue\>: £4525 saved. Left to save: £2275.
Predictions: Should take 2 more salaries to save. £1500 in the first month, and £775 in the second month. 2000 - 775 = 1225, which is the amount left over after the second month.
In May: £1500
In June: £1500 + £1700 = £3200
In July: £3200 + £1700 = £4900

View File

@@ -0,0 +1,55 @@
# Intro
Right now life feels extremely cluttered. I have a lot of things that I want to do, but don't know where to begin, or what tools to use.
This clutter comes in my technical life and my personal life. In terms of technical life, my computer is a mess, files are everywhere, and Emacs config is also a mess. I have 4 devices that I mainly use, and I need to have a set standard for how I organise things.
Google chrome is a mess. I have over 200 tabs open.
My photos in my phone are a mess.
My files in my phone are a mess.
My notes in my phone are a mess.
My notes in Emacs are a mess.
In terms of personal life, my room is a mess.
I want to also sort out my spiritual aspect of life.
I plan on clocking out of work at 4PM today (and also every day). That would mean I have 30 minutes of lunch break, and 1.5 hours before the next phase of the day begins. So all in all, I will use from 4-4:45 every day to do something meaningful.
# How to begin this decluttering phase?
## <span class="done DONE">DONE</span> Emacs
Okay so for Emacs Config, I won't meddle with the work laptop, because that has it's own use case. I will rarely be using the one in the server, which leaves me with my main PC and macbook. These two need to be identical (spend 1h on weekend fixing this).
That will be Emacs all sorted.
## <span class="todo TODO">TODO</span> Windows
Now as for the files on the windows PC, I need to go through all the photos and centralise them into one folder.
All documents need to be centralised into one folder.
Anything else needs to be archived.
This will take a while
## <span class="done DONE">DONE</span> Linux
- Clean up generally (1h this weekend)
## Mac cleanup
### <span class="todo TODO">TODO</span> Photos
### <span class="done DONE">DONE</span> Files
## <span class="todo TODO">TODO</span> Physical book
- Any tasks on the weekend, or any spiritual tasks I would like to undertake will be jotted down in a notebook
## Note
Any notes that need jotting down will go in the notes file.

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,310 @@
[Ibarat](id:3d3c56dc-0327-4e18-a90a-1bc105496243)
# Plan:
## Sciences of the Quran & Recitation (Tajwīd)
- Al-Muqaddimah al-Jazariyyah (Ibn al-Jazarī) — the foundational tajwīd poem
- Tuhfat al-Aṭfāl (al-Jamzūrī) — tajwīd rules in verse
- Al-Shāṭibiyyah (for those advancing to the Ten Qiraʾāt)
## Sīrah (Prophetic Biography)
- Full lineage of the Prophet ﷺ back to ʿAdnān \[-\]
- Names of his wives (the Mothers of the Believers) (11 in total) \[x\]
- Names of his children (sons and daughters, with brief notes on each) \[x\]
- His uncles and aunts (especially the notable ones) \[x\]
- Names of his grandchildren \[x\]
****Major Events:****
- Year of the Elephant, birth, early life in Makkah
- First revelation, early Makkan period, the persecution
- Isrāʾ wal-Miʿrāj
- Hijrah to Madinah — the route and key stops
- The Ghazawāt (battles the Prophet ﷺ personally participated in) — commonly counted as 27, with the major ones being:
- Badr, Uhud, al-Khandaq (the Trench), Khaybar, Makkah (the Conquest), Ḥunayn, Tāʾif, Tabūk
- The Sarāyā (expeditions he ﷺ sent out) — over 50
- Dates of major events (Hijrī years)
- The farewell pilgrimage (Ḥajjat al-Wadāʿ)
- His ﷺ death (11 AH) and burial
## Misc
- Al-ʿAqīdah al-Ṭaḥāwiyyah — widely accepted across schools
- The 99 names of Allah with meanings
## Usul
- Al-Manzūmah al-Bayqūniyyah (al-Bayqūnī) — 34 lines covering the types of ḥadīth; essential for every student
- Nukhbat al-Fikr (Ibn Ḥajar) — memorize the matn, then study the Nuzhat al-Naẓar commentary
## Arabic Language
****Grammar (Naḥw):****
- Al-Ājurrūmiyyah (Ibn Ājurrūm) — the most widely memorized primer in Arabic grammar
****Morphology (Ṣarf):****
- Al-Amthilah al-Mukhtalifah — the verb conjugation tables (the 35 paradigms — critical)
- Lāmiyyat al-Afʿāl (Ibn Mālik) — morphology in verse
- Al-Binā wal-Asās — common in South Asian tradition
## Tafsīr & Quranic Sciences
- Memorize the meanings and contexts of the major surahs (especially al-Fātiḥah, the Mufaṣṣal surahs)
- Asbāb al-Nuzūl of commonly cited verses
- The Makkan vs Madinan distinction and its significance
- The seven aḥruf and the ten qiraʾāt (at least conceptually)
- Nāsikh and mansūkh — key examples
## Tārīkh (Islamic History — Beyond Sīrah)
- The Rightly-Guided Caliphs: their reigns, key events, dates
- The Umayyad and Abbasid Caliphates — major rulers and turning points
- The major scholars of each era (ṭabaqāt al-ʿulamāʾ)
- The lineages of the four Imāms
- Key dates: Battle of Yarmūk (636), fall of Baghdad (1258), fall of Andalus (1492), fall of the Ottoman Caliphate (1924)
## Biographical Knowledge (Rijāl)
- The ten promised Paradise (al-ʿAsharah al-Mubashsharūn) — names and brief biographies
- The major Companions: Abū Bakr, ʿUmar, ʿUthmān, ʿAlī, Ibn Masʿūd, Ibn ʿAbbās, Ibn ʿUmar, ʿĀʾishah, Abū Hurayrah, Anas ibn Mālik, Muʿādh ibn Jabal, etc.
- The major Tābiʿīn: al-Ḥasan al-Baṣrī, Ibn Sīrīn, Saʿīd ibn al-Musayyib, etc.
- The four Imāms of fiqh — full names, birth/death dates, teachers, students
- Major scholars of hadith: al-Bukhārī, Muslim, Abū Dāwūd, al-Tirmidhī, al-Nasāʾī, Ibn Mājah (the authors of the Kutub al-Sittah) and their basic biographies
- Al-Dhahabī, Ibn Ḥajar, al-Nawawī, Ibn Qudāmah, Ibn Taymiyyah, Ibn Kathīr — who they were and their key works
# Children
## Poem 1
لَقَبَانِ زِيَادَةً عَلَى الِاسْمِ وَالْقَاسِمُ، وَإِبْرَاهِيمُ وَالْإِنَاثُ أَرْبَعَةٌ زَيْنَبُ وَرُقَيَّةُ وَأُمُّ كُلْثُومٍ وَفَاطِمَةُ وَيَنْبَغِي حِفْظُهُمْ وَمَعْرِفَتُهُمْ لِأَنَّ النَّبِيَّ ﷺ سَيِّدُنَا وَيَقْبُحُ عَلَى الْإِنْسَانِ أَنْ لَا يَعْرِفَ أَوْلَادَ سَيِّدِهِ اهـ وَكُلُّهُمْ مِنْ خَدِيجَةَ إلَّا إبْرَاهِيمَ فَمِنْ مَارِيَةَ الْقِبْطِيَّةِ أَهْدَاهَا لَهُ الْمُقَوْقَسُ مِنْ مِصْرَ اهـ.
وَقَدْ جَمَعْتُ أَوْلَادَهُ ﷺ فِي قَوْلِي لِيَسْهُلَ حِفْظُهُمْ:
أَوْلَادُ طَه سَبْعَةٌ أَطْهَارٌ … ذُكُورُهُمْ ثَلَاثَةٌ أَبْرَارُ
الْقَاسِمُ إبْرَاهِيمُ عَبْدُ اللَّهِ ذَا … بِالطَّيِّبِ الطَّاهِرِ تَلْقِيبًا خُذَا
وَأَرْبَعٌ إنَاثُهُمْ فَاطِمَةُ … فَأُمُّ كُلْثُومٍ كَذَا رُقَيَّةُ
## Poem 2
اولادهُ فسبعةٌ. بناتهُ اربعةٌ فزينبُ في الأولي. وام كُلثوم تلي
رقيةٌ وبعدها. فاطمةٌ ختامُها
أما الذكورُ انهم. فقاسمٌ اولهم
وعبدُ الله الطاهرُ. مع ابراهيمَ اذكرُ
قد ماتوا في حياتهِ. فاطمةٌ من بعدهِ
# Wives
## Poem 1
خليلي سبت عقلي حلا زين هالة ……. زهى جفنها رمزا صحيحا مهذبا
خليلي : خديجة
سبت : سودة
عقلي : عائشة
حلا : حفصة
زين : زينب بنت خزيمة
هالة : هند ( أم سلمة )
زهى : زينب بنت جحش
جفنها : جويرية
رمزا : رملة ( أم حبيبة )
صحيحا : صفية
مهذبا : ميمونة
رضي الله عنعن جميعا
## Poem 2
زوجاتهُ ﷺإحدى عشر فيما رووهُ واشتهر
خديجةٌ فسودةٌ. عائشةٌ فحفصةٌ
وزينبٌ ورملةٌ. ميمونةٌ صفيةٌ
وهندُ اما التاليه. زوجتهُ جويريه
بنت خُزْيمٍ زينبُ. وبنت جحشِ زينبُ
# Uncles and Aunts:
## Memorise:
أعمامه ﷺ-: أعمام النبي ﷺ أحد عشر رجلًا وهم:
العباس،
والزبير،
وأبو طالب "اسمه عبد مناف"،
وعبد الكعبة،
وحمزة،
والمقُوِّم،
وحَجْلٌ "اسمه المغيرة"،
وضرار وقُثَم،
وأبو لهب "واسمه: عبد العُزى"
والغَيْداق "اسمه مصعب"،
لم يُسْلم منهم إلا حمزة والعباس ﵄.
عمات النبي ﷺ-: عمات النبي ﷺ ست وهن:
أميمة،
وأم حكيم،
وبَرَّة،
وعاتكة،
وصفية،
وأروى.
(١) زاد المعاد لابن القيم ١/ ١٠٤.
(٢) سيرة ابن هشام ١/ ١٦٩.
## Extra:
أعمامه وعماته وأما أعمام النبي صلى الله عليه وسلم وعماته،
فإن عبد المطلب بن هاشم كان له من الولد لصلبه عشرة من الذكور وست من الإناث، وأسماء بنيه:
عبد الله، والد النبي عليه الصلاة والسلام؛
والزبير؛
وأبو طالب، واسمه عبد مناف؛
والعباس؛
وضرار؛
وحمزة؛
والمقوم؛
وأبو لهب،واسمه عبد العزى؛
والحارث
والغيداق، واسمه حجل، ويقال نوفل.
أسماء بناته عمات النبي صلى الله عليه وسلم:
عاتكة،
والبيضاء،وهي أم حكيم
وبرة؛
وأميمة؛
وأروى؛
وصفية.
ولد النبي صلى الله عليه وسلم ولد له من خديجة: القاسم، والطيب، وفاطمة، وزينب، ورقية، وأم كلثوم.وولد له من مارية القبطية: إبراهيم، فجميع ولده من خديجة، غير إبراهيم.
# Grandchildren:
## Ahfaad:
أحفاد النبي ﷺ-: أحفاده ﷺ ستة وهم:
أُمامة بنت أبي العاص بن الربيع وأمها زينب بنت النبي ﷺ،
وعبد الله بن عثمان بن عفان وأمه رقية بنت النبي ﷺ،
والحسن والحسين، وزينب، وأم كلثوم، وهم جميعًا أبناء علي بن أبي طالب وأمهم فاطمة بنت النبي ﷺ.
# Battles:
## Poem:
غزواتهُ فيما ذُكر. وما رووهُ واشتُهر
غزوةُ بدرٍ وانتصر فيها النبي وانكسر
جيشٌ لإهل مكه. في رمضان دكه
وبعدُها الجيشُ انهزمْ في احدٍ وماسَلَم
ُّجَّل الرماة نزلوا. وامرهِ ماامتثلوا
فكانت الهزيمه. شديدةٍ اليمه
اتت بنو النظيرِ. بالعملِ الحقيرِ
وهمو بالغدرِ كما. عن قومهِ قد عُلمَ
نبينا اجلاهموُ. للشام قد نفاهمُ
وبعدها الاحزابُ. في سعيهم قد خابوا
وابصروا المدينه. بخندقٍ حصينه
وجيشهم تراجعا. بالريحِ والرعبِ معا
قد نقضت قريظه. عهودها العريضه
إذ حالفوا الاحزابَا. وجانبوا الصوابا
فقتِّلو لغدرهِم. وخبثِهم ومكرهم
وبعدها الحديبية. فكانَ صلحاً قاضياً
بنودَهُ قد شُهرت. وبالعهودِ سُطِرت
وبعدها فخيبرُ. قد خرَبت واندحروا
وخانت اليهودُ. وضاعتْ العهودُ
وبعدها في مكةَ. فتحٌ عظيمٌ اثبتا
أُبيحَ للمختارِ. وقتاً منَ النهارِ
وجاءَ جيشُ اللهِ. يُذِلُ كلَ لاهِ
وفي حُنينٍ قد ظفر. جيش النبي وانتصر
والنصرُ جاءَ بعدما. اوشكَ ان ينهزما
اخروها فأثبتِ. غزوةُ جيشِ العُسرةِ
الى تبوكِ سارا. يُطَّهرُ الديارا
وبَعدها الوداعُ. في حجةٍ تُذاعُ
احداثُها قد شهرت. وفي الحديثِ ذكرت
اليومُ اكملتُ لكم. بها تمامُ دينَكُم
في عامِه الحادي عشر في يومه الثاني عشر

View File

@@ -0,0 +1,14 @@
Volume 1: 1 - 1890 (N1: 117 - 938 = 821)
Volume 2: 1891 - 3948 (N1: 939 - 1770 = 832)
Volume 3: 3949 - 5639 (N1: 1771 - 2546 = 775)
Volume 4: 5640 - 7563 (N1: 2547 - 3366 = 819)
# 939 -
28 - 966
16 - 982
5 - 988
9 - 996
938 - 117 = 821
1770 - 939 = 831

View File

@@ -0,0 +1,21 @@
- [Books MOC](id:63314cff-3a3f-49b4-9e76-4a359c51f55f)
- [RSS Articles](id:3a8274ef-f2fe-486d-9caf-0c56982b9917)
- [Recipes MOC](id:65F747B1-3CB2-429A-9E26-ED8BC169E689)
- [Proverbs](id:45eefd5b-a3d8-4b83-84ea-5a6984025755)
- [Resources](id:023285a5-af32-4143-91e7-e0942a2635ad)
- [Finances](id:79ba54e3-d300-4352-a7e6-3e7ec342cca3)
- [Decluttering Plan](id:46c01e4f-4363-4017-9bb8-ef313266d5e2)
- [Chrome Tabs Backup](id:cf614dfb-f764-4689-be69-e0166f4b9260)
- [Memorisation Plan](id:fbf6843c-85cc-43ba-b86c-c227a2b47b31)
- [Substack Articles](id:e7f3b897-72ca-45f1-8084-decf1b25c3d4)
- [Deen MOC](id:4087e241-5c2a-4756-81a3-a98904231afb)

26
Non Technical/z resources.md Executable file
View File

@@ -0,0 +1,26 @@
# Articles:
- <https://www.reddit.com/r/decaf/comments/1j2fpj9/lots_of_ppl_unmotivated_off_caffeine_we_need_to/>
- <https://islamqa.org/hanafi/qibla-hanafi/35639/shared-ownership-schemes/>
- <https://www.islamicfinanceguru.com/articles/shared-equity-schemes-alternative-islamic-mortgages>
# Interesting things to read up:
- <https://en.wikipedia.org/wiki/2024_CrowdStrike-related_IT_outages>
- <https://fortune.com/2025/07/23/ai-coding-tool-replit-wiped-database-called-it-a-catastrophic-failure/>
- <https://www.noahzender.com/ideas#all-ideas>
- <https://shvetsm.github.io/posts/the-best-engineers-write-less-code/>
- <https://css-tricks.com/technical-writing-in-the-ai-age/>
- <https://www.elenaverna.com/p/youll-lose-your-job-in-202>
- <https://performance.dev/how-is-linear-so-fast-a-technical-breakdown>
- <https://www.sqlshack.com/debugging-stored-procedures-sql-server-management-studio-ssms/>
- <https://techcrunch.com/2026/05/27/tech-ceos-are-apparently-suffering-from-ai-psychosis/>
- <https://spin.atomicobject.com/using-agents-growth/>
- https://www.vatican.va/content/leo-xiv/en/encyclicals/documents/20260515-magnifica-humanitas.html
# Server resources:
- <https://search.brave.com/search?q=docmost>
# Repos
- <https://github.com/0-AI-UG/cate>

View File

@@ -0,0 +1,3 @@
Use this node for pom.xml: [maven-pom-file](id:bcd41e87-120c-455c-8898-996ddaa41f75)
Tests: [java-junit-testing](id:7b8de14c-a73e-4c92-a403-a9a1c419c0b3)

View File

@@ -0,0 +1 @@
<https://www.geeksforgeeks.org/software-testing/introduction-to-junit-5/>

View File

@@ -0,0 +1,3 @@
# [wedding<sub>moc</sub>](id:c1de3972-e932-48fd-8065-3d89dad58007)
# [workflow-moc](id:8CE93986-280B-45BD-9DF2-5D06586DDDE7)

View File

@@ -0,0 +1,7 @@
What are the use cases of the macbook and the pc:
# Macbook
##
# PC

View File

@@ -0,0 +1,25 @@
****This backlog serves as a repository for ideas, tasks, and projects that are not currently being worked on but may be of interest in the future. It is a place to capture and organise thoughts, plans, and potential initiatives that can be revisited when the time is right. They are not limited to this website or the Org Web.****
# Ideas
- Building a code smells coverage checker for the `output` dir
- Powershell script to give insights on the build scripts. This can be fed into the daily logs/discord pipeline
- have a central point where we can see the server details and documentations
- Have a two way sync between the cookbook and org-roam notes (see: [swagger](https://nextcloud.github.io/cookbook/dev/api/0.1.3/index.html#/Recipes/listRecipes))
- Sort out all the iphone chrome nitter/xcancel links (so we don't go there again)
- sort out all the book notes. the current ones are:
- the science of self-discipline
- clean coder
- so good they can't ignore you
# Checked:
- Source of truth for mostly used functions
# To sort:

View File

@@ -0,0 +1 @@
- SDL2 [See this](https://wiki.libsdl.org/SDL2/FrontPage)

View File

@@ -0,0 +1,9 @@
In this commonplace, I will collect technical notes and insights that I find useful. This is a work in progress, and I will update it as I learn new things.
# Articles:
- <https://forge.medium.com/a-simple-tool-for-personal-growth-dc1e822aa229>
# Github:
- <https://github.com/XEphem/XEphem?tab=readme-ov-file>

View File

@@ -0,0 +1,9 @@
# [Downdetector and the real cost of no upstream dependencies](https://blog.pragmaticengineer.com/downdetector-and-the-real-cost-of-no-upstream-dependencies/)
# [Loneliness Isnt Just Something We Endure](https://coffeeandjunk.substack.com/p/loneliness)
# [What are dormant volcanoes good for? Copper mining](https://bigthink.com/technology-innovation/dormant-volcanoes-copper-mining)
# [Where Have All the Geniuses Gone?](https://coffeeandjunk.substack.com/p/genius)
# [Not Everything Has to Be Timeless](https://coffeeandjunk.substack.com/p/forever)

View File

@@ -0,0 +1 @@
- <https://github.com/codecrafters-io/build-your-own-x>

11
Technical/Linux/Arch Linux.md Executable file
View File

@@ -0,0 +1,11 @@
# Links:
- <https://www.geeksforgeeks.org/how-to-install-intellij-idea-on-arch-based-linux-distributionsmanjaro/>
``` shell
sudo fuser -k 8000/tcp
```

View File

@@ -0,0 +1,35 @@
---
note type:
- note
date: 2026-06-03
done: true
---
If you want to encrypt a file, use the following command:
``` bash
gpg -c file.txt
# options include :
# gpg -c file.txt : for symmetric encryption
# gpg -d file.txt.gpg : to decrypt the file
# gpg --batch -c --passphrase mypassphrase file.txt : accepts passphrase right from command line
```
and to decrypt, use:
``` bash
gpg -d file.txt
# You have to wait 10 minutes before you can get prompted for a password, before this, it will
# decrypt without the passphrase.
```
`gpg batch -c passphrase Shakkal123! passwords.md`
`gpg batch -d passphrase Shakkal123! passwords.md.gpg`
`gpg batch output passwords.md -d passphrase Shakkal123! passwords.md.gpg`

179
Technical/Linux/Keyboard.md Executable file
View File

@@ -0,0 +1,179 @@
# Keyboard inputs
This all comes from the fact that a "key press" isn't one thing — it's
a stack of specs and translations from **keyboard hardware → USB/HID →
Linux kernel → userspace (XKB/Wayland) → Hyprland binds**.
## 1\. Big picture: what happens when you press a key?
When you hit a key (like your "lock" key), roughly this happens:
``` text
Physical switch on keyboard
Keyboard firmware → USB HID "usage" (e.g. 0x07:0xE3 = Left GUI)
Linux kernel input subsystem (evdev) → KEY_LEFTMETA (code 125)
libinput / xkbcommon → keysyms (like Super_L, L, etc.)
Hyprland → your `bind = SUPER, L, exec, ...`
```
The "topic" we've been poking at is basically **understanding each layer
in that stack**.
-----
## 2\. USB HID: where `700e3` comes from
Modern USB keyboards follow the **USB HID (Human Interface Device)
specification**. This spec defines **Usage Tables**: numerical codes for
things like keys, buttons, axes, etc.
- The keyboard page is **Usage Page 0x07 (Keyboard/Keypad)**.
- In your `evtest` output, `MSC_SCAN value 700e3` means:
- `0x07` (Keyboard page)
- `0xE3` (Left GUI / "Windows/Super" key)
You can see the official tables here (PDF):
- **HID Usage Tables (includes Keyboard/Keypad page 0x07)**
<https://usb.org/sites/default/files/hut1_21.pdf>
([USB Implementers Forum](https://usb.org/sites/default/files/hut1_21.pdf?utm_source=chatgpt.com))
If you scroll to the **Keyboard/Keypad Page (0x07)** section, it lists all
the key usages: A, B, C, modifiers, function keys, etc. There's also a
standalone Keyboard/Keypad-page extract people mirror, like this PDF
snippet:
([d1.amobbs.com](https://d1.amobbs.com/bbs_upload782111/files_47/ourdev_692986N5FAHU.pdf?utm_source=chatgpt.com))
So:
- `700e3` = Page `0x07`, Usage `0xE3` → *Keyboard Left GUI*
- `7000f` = Page `0x07`, Usage `0x0F` → *Keyboard L* key
That's how we knew your lock key was sending **Super + L**.
-----
## 3\. Linux input subsystem: `EV_MSC`, `EV_KEY`, `KEY_LEFTMETA`
Linux has a dedicated **input subsystem** in the kernel (`drivers/input`,
`drivers/hid` etc.) that takes those HID usages and turns them into a
unified stream of **input events**.
([Linux Kernel Documentation](https://docs.kernel.org/input/input.html?utm_source=chatgpt.com))
Key ideas:
- Devices expose `/dev/input/eventX` nodes.
- Each event is a struct with:
- `type` (e.g. =EV<sub>KEY</sub>=, `EV_MSC`, `EV_REL`, `EV_SYN`)
- `code` (e.g. =KEY<sub>L</sub>=, `KEY_LEFTMETA`)
- `value` (pressed = 1, released = 0, repeat = 2)
Docs worth bookmarking:
- **Linux input subsystem overview**
<https://docs.kernel.org/input/input.html>
([Linux Kernel Documentation](https://docs.kernel.org/input/input.html?utm_source=chatgpt.com))
- **Input event types and codes (`event-codes.txt`)**
<https://www.kernel.org/doc/Documentation/input/event-codes.txt>
([Kernel.org](https://www.kernel.org/doc/Documentation/input/event-codes.txt?utm_source=chatgpt.com))
The **keycode definitions** (`KEY_L`, `KEY_LEFTMETA`, etc.) live in:
- `include/uapi/linux/input-event-codes.h` in the kernel source Example
mirror:
<https://raw.githubusercontent.com/torvalds/linux/master/include/uapi/linux/input-event-codes.h>
([GitHub](https://raw.githubusercontent.com/torvalds/linux/master/include/uapi/linux/input-event-codes.h?utm_source=chatgpt.com))
When `evtest` prints:
``` text
type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e3
type 1 (EV_KEY), code 125 (KEY_LEFTMETA), value 0
```
that means:
- `EV_MSC / MSC_SCAN` → "Here is the raw hardware scancode" (from USB
HID).
- `EV_KEY / KEY_LEFTMETA` → "Linux mapped that scancode to logical key
LEFTMETA".
-----
## 4\. XKB / xkbcommon: mapping to actual characters & modifiers
Above the kernel, you've got an extra mapping layer that says:
> For keycode N, with this layout, when Shift is held, produce this
> character/symbol.
On X11 this is handled by **XKB (X Keyboard Extension)**; on Wayland
compositors (including Hyprland) the same ideas are implemented via
**xkbcommon**.
Docs:
- **X Keyboard Extension (XKB) protocol spec**
<https://www.x.org/releases/X11R7.7/doc/kbproto/xkbproto.html>
([X.Org](https://www.x.org/releases/X11R7.7/doc/kbproto/xkbproto.html?utm_source=chatgpt.com))
- **Arch Wiki: X keyboard extension** (good high-level intro)
<https://wiki.archlinux.org/title/X_keyboard_extension>
([ArchWiki](https://wiki.archlinux.org/title/X_keyboard_extension?utm_source=chatgpt.com))
- A nice "practical" walkthrough of XKB concepts:
[[https://medium.com/\[cite/t:@damko/a-simple-humble-but-comprehensive-guide-to-xkb-for-linux-6f1ad5e13450](https://medium.com/%5Bcite/t:@damko/a-simple-humble-but-comprehensive-guide-to-xkb-for-linux-6f1ad5e13450)](https://medium.com/@damko/a-simple-humble-but-comprehensive-guide-to-xkb-for-linux-6f1ad5e13450)\]
([Medium](https://medium.com/%40damko/a-simple-humble-but-comprehensive-guide-to-xkb-for-linux-6f1ad5e13450?utm_source=chatgpt.com))
Hyprland, Sway, etc. all use libinput + xkbcommon under the hood to
interpret those keycodes and translate them into keysyms and modifiers.
-----
## 5\. Hyprland / your config: where the bindings fit in
Hyprland sits at the top of this stack:
- It listens to the input events (via libinput).
- It sees keysyms/modifiers (e.g. =Super=, `L`).
- It matches them against your config:
<!-- end list -->
``` ini
bind = SUPER, L, exec, hyprlock
```
So your keyboard's "lock" key:
1. Firmware sends HID usages `0xE3` (Left GUI) and `0x0F` (L).
2. Linux maps them to `KEY_LEFTMETA` (125) and `KEY_L` (38).
3. xkbcommon maps that to `Super` + `L`.
4. Hyprland says: "Ah, SUPER+L → run `hyprlock`".
The "topic" you stumbled into is just **peeling back each abstraction
layer**.
-----
## 6\. Handy tools & libraries if you want to go deeper
- `evtest`, `libinput debug-events`, `showkey` → To watch what your
keyboard is actually sending.
- **Python-evdev** Python bindings to read `/dev/input/event*`
yourself: <https://python-evdev.readthedocs.io/>
([python-evdev.readthedocs.io](https://python-evdev.readthedocs.io/?utm_source=chatgpt.com))
- Linux input subsystem docs again:
<https://docs.kernel.org/driver-api/input.html>
([Linux Kernel Documentation](https://docs.kernel.org/driver-api/input.html?utm_source=chatgpt.com))

12
Technical/Linux/Linux MOC.md Executable file
View File

@@ -0,0 +1,12 @@
---
note type:
- moc
date: 2026-06-03
done: true
---
- [[Wacom]]
- [[Systemd Services]]
- [[GPG Encryption]]
- [[Arch Linux]]
- [[i3 WM]]
- [[Keyboard]]

View File

@@ -0,0 +1,45 @@
---
note type:
- note
date: 2026-06-03
done: true
---
# To add a systemctl
- create a new systemd service file:
`sudo nano /etc/systemd/system/name.service`
- example content:
`[Unit]`
`Description=Watch TODO Directory and Update Master Task List`
`After=network.target`
`[Service]`
`ExecStart=/usr/local/bin/watch-todo.sh`
`Restart=always`
`User=zaine`
`WorkingDirectory=/home/zaine/master-folder/org<sub>files</sub>/todo`
`StandardOutput=append:/var/log/watch-todo.log`
`StandardError=append:/var/log/watch-todo.log`
\[Install\]
WantedBy=multi-user.target
- reload and start:
`sudo systemctl daemon-reload`
`sudo systemctl enable watch-todo.service`
`sudo systemctl start watch-todo.service`
# To remove a systemctl service:
```
systemctl stop \[servicename\]
systemctl disable \[servicename\]
rm *etc/systemd/system*\[servicename\]
rm *etc/systemd/system*\[servicename\] \# and symlinks that might be related
rm *usr/lib/systemd/system*\[servicename\]
rm *usr/lib/systemd/system*\[servicename\] \# and symlinks that might be related
systemctl daemon-reload
systemctl reset-failed
```

58
Technical/Linux/Wacom.md Executable file
View File

@@ -0,0 +1,58 @@
---
note type:
- note
date: 2026-06-03
done: true
---
The command: `xsetwacom --list` gave me:
``` bash
Wacom One by Wacom M Pen stylus id: 12 type: STYLUS
Wacom One by Wacom M Pen eraser id: 13 type: ERASER
```
Then, in order to map the stylus to a single monitor i needed to know my monitor mappings via `xrandr`:
``` bash
Screen 0: minimum 8 x 8, current 3840 x 1080, maximum 32767 x 32767
DP-0 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 600mm x 340mm
1920x1080 60.00*+ 143.85 119.98 59.94
1680x1050 59.95
1440x900 59.89
1440x576 50.00
1440x480 59.94
1280x1024 75.02 60.02
1280x960 60.00
1280x720 60.00 59.94
1152x864 75.00
1024x768 75.03 70.07 60.00
800x600 75.00 72.19 60.32 56.25
720x480 59.94
640x480 75.00 72.81 59.94 59.93
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-0 connected 1920x1080+1920+0 (normal left inverted right x axis y axis) 521mm x 293mm
1920x1080 60.00*+ 59.94 50.00
1680x1050 59.95
1600x900 60.00
1440x900 59.89
1280x1024 60.02
1280x800 59.81
1280x720 60.00 59.94 50.00
1024x768 70.07 60.00
800x600 72.19 60.32 56.25
720x576 50.00
720x480 59.94
640x480 72.81 59.94
DP-2 disconnected (normal left inverted right x axis y axis)
DP-3 disconnected (normal left inverted right x axis y axis)
DP-4 disconnected (normal left inverted right x axis y axis)
DP-5 disconnected (normal left inverted right x axis y axis)
```
Then I simply map it via:
`xsetwacom set "Wacom One by Wacom M Pen stylus" MapToOutput HEAD-0`

10
Technical/Linux/i3 WM.md Executable file
View File

@@ -0,0 +1,10 @@
# Commands:
**Mod1 = Win Key**
`$mod+Enter = Open Terminal`
`$mod+s = Stacked layout`
`$mod+e = Default layout`
`$mod+d = dmenu`
# Config file:

View File

@@ -0,0 +1,16 @@
# Notes:
- \<2026-04-01 Wed\>: There is one transaction waiting to show on the statement for \<2026-03-31 Tue\>. Will need to redo March full. \[ \]
# Setup
In order to update the balance, I have decided for the moment to export as `csv` the monthly transactions from Halifax. Place the file into the `~/master-folder/attachments/bank-statements/` folder and name it as `halifax-YYYY-MM.csv`, where `YYYY` is the four-digit year and `MM` is the two-digit month.
Then run the following command in the terminal whilst being in the `~/master-folder/projects/scripts/` directory:
``` python
python3 clean-halifax-actual.py ../../attachments/bank-statements/halifax-YYYY-MM.csv ../../attachments/bank-statements/halifax-YYYY-MM-cleaned.csv
```
Then you can go to the website `https://actual.zainezq.com/` and upload the cleaned file to update the balance.

79
Technical/Server/Cloudflare.md Executable file
View File

@@ -0,0 +1,79 @@
---
note type:
- server
- note
date: 2026-06-03
done: true
---
# Go to: <https://dash.cloudflare.com/49b791cb8f903fdcab3db1cfa124321b/one/access-controls/apps>
This is to edit the access control in the zero trust cloudflare.
# Origin certificate
```
-----BEGIN CERTIFICATE-----
MIIEojCCA4qgAwIBAgIUGvC9u3SW6C6y5uOcQjul2hyghmgwDQYJKoZIhvcNAQEL
BQAwgYsxCzAJBgNVBAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMTQw
MgYDVQQLEytDbG91ZEZsYXJlIE9yaWdpbiBTU0wgQ2VydGlmaWNhdGUgQXV0aG9y
aXR5MRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlh
MB4XDTI2MDQwOTEyNDYwMFoXDTQxMDQwNTEyNDYwMFowYjEZMBcGA1UEChMQQ2xv
dWRGbGFyZSwgSW5jLjEdMBsGA1UECxMUQ2xvdWRGbGFyZSBPcmlnaW4gQ0ExJjAk
BgNVBAMTHUNsb3VkRmxhcmUgT3JpZ2luIENlcnRpZmljYXRlMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwnW7egyN30IndtYbCdk4EA9IVb+icJo4d9mR
Bsiw4TJ6YSlnFkVXuHl1iitSZiMnlGxHke5AsDGm8rnyCa5BzT/n+VI27WwyncoO
PJXjSjOFIWVg/VAaHJUwXcc+taqNn/U3661iSN+1TlJFgpVwF6ei6t+raJcCAXxN
ajrA3ksf4FhMWQcpdi6J0ecM8LWsa94nNHFZJCH8nTGsND90zw7ueOMu5JIhc6Ru
0Iw5kke2jIkhVQpg4DYTzKoEa1SmgGCZAPBlBaOc7Ii4VpVMmydhRh0TFDZbe5Bz
lgVMslOSj1qnq4o7nFCk0LY8gfSykbuKJEHr/aboOEkot+E4kwIDAQABo4IBJDCC
ASAwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBThHBF5Sw8X+uuHUB0NIANwIakBsjAf
BgNVHSMEGDAWgBQk6FNXXXw0QIep65TbuuEWePwppDBABggrBgEFBQcBAQQ0MDIw
MAYIKwYBBQUHMAGGJGh0dHA6Ly9vY3NwLmNsb3VkZmxhcmUuY29tL29yaWdpbl9j
YTAlBgNVHREEHjAcgg0qLnphaW5lenEuY29tggt6YWluZXpxLmNvbTA4BgNVHR8E
MTAvMC2gK6AphidodHRwOi8vY3JsLmNsb3VkZmxhcmUuY29tL29yaWdpbl9jYS5j
cmwwDQYJKoZIhvcNAQELBQADggEBALfCfzqPuLXLepdyY/O8j9+0kiwdgby6ir1x
1O8HKm0y47WZx7nntromSo4Bgq+R1KglUCvkcy+kCwlsfFk1WmCgVMiE9WCnn6Pv
NriftoM5Q1tiHeSR0kLOJ9mROmiy5roThMm2EOWCjhWw2jJzVfvTj1s651dpmGRj
E6BoX6NJr9NvzVEeCqhgjoiCXIv5bfGEwl1Mj/mIj2/GIbLiayT90vi8T89ixgca
RTLlmRiEEJnKP0NN45vGYjgtJCgkXtCDL0lfSBt5FuEXq4sXIjDhhIn/hH004doJ
fHlwK4tTfpZPYterSRRuy4zSgV7IekKS2z9pjCloQbDbMjqnAKI=
-----END CERTIFICATE-----
```
# Private key
```
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDCdbt6DI3fQid2
1hsJ2TgQD0hVv6Jwmjh32ZEGyLDhMnphKWcWRVe4eXWKK1JmIyeUbEeR7kCwMaby
ufIJrkHNP+f5UjbtbDKdyg48leNKM4UhZWD9UBoclTBdxz61qo2f9TfrrWJI37VO
UkWClXAXp6Lq36tolwIBfE1qOsDeSx/gWExZByl2LonR5wzwtaxr3ic0cVkkIfyd
Maw0P3TPDu544y7kkiFzpG7QjDmSR7aMiSFVCmDgNhPMqgRrVKaAYJkA8GUFo5zs
iLhWlUybJ2FGHRMUNlt7kHOWBUyyU5KPWqerijucUKTQtjyB9LKRu4okQev9pug4
SSi34TiTAgMBAAECggEADPLiBQKI//Dbx+IB8unv/cHGw077dhwO3owySA1dGeHO
nGGxZ54+dR5BYW35EqwMmqmLKoB+9jyYLVmMcHCWGSDERanf1nd591/ZCtfARtSf
bNXfW37V/klA6z21Q0uUGq6thpgJD2k2HX0E++kPicOz6YfzVgeYLpkkXoqDBUpF
dzC+eGZDzjI1BECoW/N/U3P2F8nv7fHv/4xVudkMehlkPJ56BiMbx2K15jvh2Dyz
znZvelNNw/XRHv29GgOkggh4BQRDXHl3/mTMTe8JmLWU560rNZ99xjpv1lrbqwuO
W5WNRKcQRXCELXsEDiH1dEsteU1wVUaOyZSzEg6OYQKBgQD4InmF5kuhPrgnNwKu
uRYZB60JFvkVdxal1xIGDwjylWBVsWWJEIAko3wbt6iI2/r1Est4tsBnap9nMciG
Zn4FKJRAj0bZW6CwFHUZy6q91qK7JFM1e1dcrDXhgFOCG4rI802roPSjCo/rztkI
LEQomGbMVs/86KtqaSRqVjGXXQKBgQDIn7StCglsRD/+RDWFIgtSOJbdIe0imP1h
ewRa7iSKBMbc8ZFwDuZ3JxDI1a0DTQdMM3MpZRtGO2urnnepNV3fqSnZaaruaEL0
1IKvCtZn1MHMEi4gErqpEBqgHfvSOIBvFhKQ6bbclmZJ5u1OFBrbu9EALfLk1Tkz
Luje1fnArwKBgF7zIjlgtJQRIfqvjDE71f7h9w7BYbMbDOmM8PKskinxixl/dnEK
hV5/yJ/6mV01gESDWqTomZt5K2IbpLX5RkPHEWPa76uA6m42hdDHJKDcHw0pi0Wt
2vI1W7DcoBfrXiIjKBeC0doJ0qTTVC1Scwpttvh+R7xpdB6V+T9PmE5pAoGBALhm
On31xLVzgdImRX8JzJgVFW1JOpnbPsFzfYxKaOFHBLWdf40c1O3dxUqjQ3POQA/l
FkuM9+W0xgEnFVs8hv0FkkaYHhklUa2RClDzSCCFaF82spiePl0YRTC4fnY5oqr4
Abaaao4T2w7AJ4vlZM5ksfRVR3TXGs0Vp8rxp65XAoGAPNgi8uz9zcAp5tUizZVg
6nP68Cws6I3PmExMnbr2BmYAi2tl2NY93PQG1OT9MZ51Z0W+ynM6nTzti2zm7iXO
Rs4AAsErEG1YDt4U0GExJdoEBIJ14+9Q6PSYPAMBbx0nv1WA1hvdvDHIUaYNPWqZ
wuSVw419xlxUkj9uCb1kQoo=
-----END PRIVATE KEY-----
```

24
Technical/Server/Gitea.md Executable file
View File

@@ -0,0 +1,24 @@
---
note type:
- server
- note
date: 2026-06-03
done: true
---
In order to connect to the gitea server and run git commands, you will need to do the following:
Run `cat ~/.ssh/id_ed25519.pub`
Copy that key and add it to the ssh keys in gitea
`ssh-keygen -t ed25519 -C "windows-gitea"`
`ssh -T -p 222 git@192.168.0.241`
Check the remote url of the git project.
`git remote -v`
Change it to:
`git remote set-url origin git@`

289
Technical/Server/Nextcloud.md Executable file
View File

@@ -0,0 +1,289 @@
---
note type:
- note
- server
date: 2026-06-03
done: true
---
# The docker file:
``` bash
version: '3.8'
services:
app:
image: nextcloud
restart: unless-stopped
ports:
- 8007:80
volumes:
- nextcloud:/var/www/html
environment:
- POSTGRES_DB=nextcloud
- POSTGRES_USER=nextcloud
- POSTGRES_PASSWORD=zxq123_nextcloud
- POSTGRES_HOST=postgres
networks:
- postgres_network
volumes:
nextcloud:
networks:
postgres_network:
external: true
```
# Database related things:
``` bash
zxq_db=# CREATE DATABASE nextcloud;
CREATE DATABASE
zxq_db=# CREATE USER nextcloud WITH PASSWORD 'zxq123_nextcloud';
CREATE ROLE
zxq_db=# GRANT ALL PRIVILEGES ON DATABASE nextcloud TO nextcloud;
GRANT
zxq_db=#
```
# Permissions:
## **Not sure if the below still applies**
``` bash
# Add yourself and www-data to a shared group
### Create a shared group:
sudo groupadd ncshare
### Add both users:
sudo usermod -aG ncshare zaine
sudo usermod -aG ncshare www-data
### Set the folder to that group:
sudo chown -R zaine:ncshare /home/zaine/master-folder
sudo chmod -R 775 /home/zaine/master-folder
```
## \<2026-03-25 Wed\> fixes:
Up To Date Fixes:
We need to add zaine to the www-data group:
``` bash
sudo usermod -aG www-data zaine
```
Then we need to make the directories setgid, so that any new files created will have the group www-data:
``` bash
sudo chown -R zaine:www-data /home/zaine/master-folder
sudo chmod -R 2775 /home/zaine/master-folder # the 2 sets the setgid bit, which means that new files will inherit the group of the directory, which is www-data
```
### Older fixes
So apparently, nextcloud needs to have www-data as the owner of the files, and to do that, we need to run the following command:
``` bash
sudo chown -R www-data:www-data /home/zaine/master-folder
```
I modified the build scripts to change permissions back to zaine:zaine when deleting the output folder, then changing it back to www-<data:www-data>.
One other useful thing may be:
``` bash
docker exec -u 1000:1000 -it nextcloud-app-1 php occ files:scan --all
# or
docker exec -u 1000 nextcloud-app-1 php occ files:scan --path="zaine/files/master-folder"
```
One other thing:
``` bash
i FIXED IT BY doing this:
zaine@zaine-HP-ProDesk-400-G1-SFF [09:47:47] [~/docker-services/nextcloud]
-> % docker exec -it postgres psql -U nextcloud -d nextcloud
psql (17.5 (Debian 17.5-1.pgdg120+1))
Type "help" for help.
nextcloud=> SELECT * FROM oc_file_locks;
nextcloud=> DELETE FROM oc_file_locks;
DELETE 15002
nextcloud=> \q
zaine@zaine-HP-ProDesk-400-G1-SFF [09:49:01] [~/docker-services/nextcloud]
-> % docker exec -it nextcloud-app-1 ls /mnt/master-folder
alimiyyah attachments booking career hurra.txt org_files pdfs projects uni
zaine@zaine-HP-ProDesk-400-G1-SFF [09:49:04] [~/docker-services/nextcloud]
-> % docker exec -u 1000 -it nextcloud-app-1 php occ files:scan --all
Starting scan for user 1 out of 2 (halima)
Starting scan for user 2 out of 2 (zaine)
+---------+-------+-----+---------+---------+--------+--------------+
| Folders | Files | New | Updated | Removed | Errors | Elapsed time |
+---------+-------+-----+---------+---------+--------+--------------+
| 1985 | 12906 | 0 | 522 | 0 | 0 | 00:00:50 |
+---------+-------+-----+---------+---------+--------+--------------+
zaine@zaine-HP-ProDesk-400-G1-SFF [09:49:59] [~/docker-services/nextcloud]
-> %
there is some issue in the nextcloud permissions itself. if i create a file and delete it in windows, i get this error in the client: A
master-folder/hehe.txt
now
The resource you are trying to access is currently locked and cannot be modified. Please try changing it later, or contact your server administrator ...
and if i try to delete it in nextcloud ui (web), it says file cant be deleted
```
# Config
Location is:
sudo nano /var/lib/docker/volumes/nextcloud<sub>nextcloud</sub>/<sub>data</sub>/config/config.php
# Accounts
User is: zaine
Pass: Shakkal123\!
# Legacy stuff
Something I've been trying to reverse proxy ahead of time. Go to <https://zserver.zapto.org/nextcloud> , you'll be prompted to login with a username and password:
Here's your credentials:
Username: halima
Password: loser2104\!
Once you've logged in, I've set up your account already, so there should be a calendar already there.
To get your phone logged in, there's two ways:
1. go to the following address: <https://zserver.zapto.org/nextcloud/settings/user/security> , scroll to the bottom, under devices and sessions, type in a random name (iphone), and click create new app password. You should then be able to generate a QR code (next to or under the password field), then you can scan that on your iphone app.
2. inside the app, type the following URL: <https://zserver.zapto.org/nextcloud> then follow the instructions.
Im thinking of having this as our shared calendar and file system. The only users are us 2 and its completely off the internet (self-hosted).
## network issues resolved by:
``` bash
docker network connect postgres_network postgres
zaine@zaine-HP-ProDesk-400-G1-SFF [21:00:27] [~/docker-services/nextcloud]
-> % psql -h zserver.zapto.org -p 5432 -U zaine -d zxq_db
Password for user zaine:
psql (14.18 (Ubuntu 14.18-0ubuntu0.22.04.1), server 17.5 (Debian 17.5-1.pgdg120+1))
WARNING: psql major version 14, server major version 17.
Some psql features might not work.
Type "help" for help.
zxq_db=# \c nextcloud
psql (14.18 (Ubuntu 14.18-0ubuntu0.22.04.1), server 17.5 (Debian 17.5-1.pgdg120+1))
WARNING: psql major version 14, server major version 17.
Some psql features might not work.
You are now connected to database "nextcloud" as user "zaine".
nextcloud=# GRANT ALL PRIVILEGES ON DATABASE nextcloud TO nextcloud;
GRANT
nextcloud=# GRANT USAGE ON SCHEMA public TO nextcloud;
GRANT CREATE ON SCHEMA public TO nextcloud;
GRANT
GRANT
nextcloud=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO nextcloud;
GRANT
nextcloud=# GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO nextcloud;
GRANT
nextcloud=#
zaine
M22ZN-fmefj-RdF36-3BMfT-LfWo8
zaine
zxh123!
```
## Connecting to IOS
<https://www.reddit.com/r/NextCloud/comments/1pehpft/calendar_app_for_ios/>
# ICS stuff:
## To get the ID of a calendar subscription:
```
zaine@zaine-HP-ProDesk-400-G1-SFF [14:14:27] [~]
-> % docker exec nextcloud-app-1 php occ dav:list-subscriptions zaine
+-----------------------+-----------------------+----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
| URI | Displayname | Refresh rate | Source |
+-----------------------+-----------------------+----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
| outlookoffice365com-1 | outlook.office365.com | PT5M (default) | https://outlook.office365.com/owa/calendar/b910ea835e414663831e505f3d10baa2@microlise.com/d2568a0134fb49af92d39c1669c4729317662288011094411305/calendar.ics |
+-----------------------+-----------------------+----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
```
## emacs config to sync calendars:
```
(require 'org-caldav)
(require 'url)
(require 'icalendar)
(modify-coding-system-alist 'file "caldav-work\\.org\\'" 'utf-8-unix)
(defvar my/outlook-ics-url
"https://outlook.office365.com/owa/calendar/b910ea835e414663831e505f3d10baa2@microlise.com/d2568a0134fb49af92d39c1669c4729317662288011094411305/calendar.ics")
(defvar my/outlook-org-file
"D:\\_nextcloud\\master-folder\\org_files\\calendar\\caldav-work.org")
(defvar my/ics-python-script
"D:\\_nextcloud\\master-folder\\org_files\\calendar\\ics_to_org.py")
(defun my/sync-outlook-calendar ()
"Fetch and expand Outlook ICS (including recurrences) into org file."
(interactive)
(message "Syncing Outlook calendar...")
(let* ((cmd (format "python \"%s\" \"%s\" \"%s\""
my/ics-python-script
my/outlook-ics-url
my/outlook-org-file))
(result (shell-command-to-string cmd)))
(message "Outlook calendar sync: %s" (string-trim result))))
;; Sync on startup and every 30 minutes
(my/sync-outlook-calendar)
(run-with-timer (* 30 60) (* 30 60) #'my/sync-outlook-calendar)
;; --- CalDAV for native Nextcloud calendars ---
(setq org-caldav-url "https://nextcloud.zainezq.com/remote.php/dav/calendars/zaine/")
(setq org-caldav-calendars
'((:calendar-id "personal"
:inbox "D:\\_nextcloud\\master-folder\\org_files\\calendar\\caldav-personal.org"
:files nil)
(:calendar-id "zxh"
:inbox "D:\\_nextcloud\\master-folder\\org_files\\calendar\\caldav-family.org"
:files nil)))
;; --- Agenda files ---
(setq org-agenda-files
'("D:\\_nextcloud\\master-folder\\org_files\\calendar\\caldav-personal.org"
"D:\\_nextcloud\\master-folder\\org_files\\calendar\\caldav-work.org"
"D:\\_nextcloud\\master-folder\\org_files\\calendar\\caldav-family.org"
"D:\\_nextcloud\\master-folder\\org_files\\org_roam\\Books\\20250724230557-books_org_agenda.org"))
```

View File

@@ -0,0 +1,265 @@
---
note type:
- server
- note
date: 2026-06-03
done: true
---
``` bash
-> % cat /etc/nginx/sites-available/zserver
server {
server_name zainezq.com;
access_log /var/log/nginx/zserver.access.log combined;
error_log /var/log/nginx/zserver.error.log warn;
# Basic authentication for the entire server
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.htpasswd;
# Root location
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
root /home/zaine/master-folder/org_files/org_web/output;
index index.html index.htm;
try_files $uri $uri/ =404;
}
location /nginx_status {
stub_status;
}
location /dockge/ {
proxy_pass http://127.0.0.1:5021/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /guac/ {
proxy_pass http://127.0.0.1:3003/guacamole/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
# PGAdmin4 location
location /pgadmin4/ {
proxy_set_header X-Script-Name /pgadmin4;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:5050;
proxy_redirect off;
}
location /pdf/ {
proxy_pass http://127.0.0.1:8002/pdf/;
proxy_set_header X-Script-Name /pdf;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
location /calibre {
proxy_bind $server_addr;
proxy_pass http://127.0.0.1:8083;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Script-Name /calibre; # IMPORTANT: path has NO trailing slash
# This rewrites Calibre-Web's internal paths
proxy_redirect off;
proxy_http_version 1.1;
client_max_body_size 100M;
}
location /codeserver/ {
proxy_pass http://localhost:8441/;
rewrite ^/codeserver(/.*)$ $1 break;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Accept-Encoding gzip;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /filebrowser {
# prevents 502 bad gateway error
proxy_buffers 8 32k;
proxy_buffer_size 64k;
client_max_body_size 75M;
# redirect all HTTP traffic to localhost:8088;
proxy_pass http://127.0.0.1:9991;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header X-NginX-Proxy true;
# enables WS support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 999999999;
}
# Miniflux location
location /miniflux/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:9433/miniflux/;
proxy_redirect off;
}
# Jupyter location
location /jupyter/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:8888/jupyter/;
proxy_redirect off;
# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
location /portainer/ {
proxy_pass https://localhost:9443/;
proxy_ssl_verify off; # Because Portainer uses a self-signed cert by default
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Authorization "";
# Required for WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Rewrite URL base path
rewrite ^/portainer(/.*)$ $1 break;
}
location /wireguard/ {
proxy_pass http://127.0.0.1:124/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Rewrite assets for subpath compatibility
proxy_set_header Accept-Encoding "";
sub_filter 'href="/' 'href="/wireguard/';
sub_filter 'src="/' 'src="/wireguard/';
sub_filter_types text/css application/javascript;
sub_filter_once off;
}
# /password -> /password/
location = /password { return 301 /password/; }
# Main app/API (disable inherited basic auth here)
location ^~ /password/ {
auth_basic off;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSockets
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Keep the /password prefix upstream (NO trailing slash here)
proxy_pass http://127.0.0.1:8006;
}
# (Optional but tidy) If you keep a dedicated WS block, disable auth there too
location ^~ /password/notifications/hub {
auth_basic off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8006;
}
# Optional: Add a custom error page
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# Optional: Cache static assets for performance (add this new block)
# location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|eot|svg|html|htm)$ {
# root /home/zaine/master-folder/org_files/org_web/output;
# expires 30d;
# access_log off;
# }
# Optional: Deny access to hidden files
location ~ /\. {
deny all;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/zainezq.com-0001/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/zainezq.com-0001/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = zserver.zapto.org) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name zserver.zapto.org;
return 404; # managed by Certbot
}
```

View File

@@ -0,0 +1,70 @@
---
note type:
- server
- note
date: 2026-06-03
done: true
---
# wg
Shakkal123\!
docker run ghcr.io/wg-easy/wg-easy:14 node -e 'const bcrypt = require("bcryptjs"); const hash = bcrypt.hashSync("Shakkal123\!", 10); console.log(hash.replace(/\\$/g, "\[\]"));'
Unable to find image 'ghcr.io/wg-easy/wg-easy:14' locally
14: Pulling from wg-easy/wg-easy
Digest: sha256:5f26407fd2ede54df76d63304ef184576a6c1bb73f934a58a11abdd852fab549
Status: Downloaded newer image for ghcr.io/wg-easy/wg-easy:14
\[2a\]10$$E1lkGe/IH5EnFrQLhDH2M.yKk3Q7KlgRuu.fzf/76CbWoAMy4G83u
# nextcloud:
location ^\~ *nextcloud* {
auth<sub>basic</sub> off;
proxy<sub>pass</sub> <http://localhost:8007/>;
proxy<sub>setheader</sub> Host $host;
proxy<sub>setheader</sub> X-Real-IP $remote<sub>addr</sub>;
proxy<sub>setheader</sub> X-Forwarded-For $proxy<sub>addxforwardedfor</sub>;
proxy<sub>setheader</sub> X-Forwarded-Proto $scheme;
proxy<sub>httpversion</sub> 1.1;
proxy<sub>setheader</sub> Upgrade $http<sub>upgrade</sub>;
proxy<sub>setheader</sub> Connection "upgrade";
client<sub>maxbodysize</sub> 512M;
client<sub>bodybuffersize</sub> 512k;
add<sub>header</sub> Referrer-Policy "no-referrer" always;
add<sub>header</sub> X-Content-Type-Options "nosniff" always;
add<sub>header</sub> X-Frame-Options "SAMEORIGIN" always;
add<sub>header</sub> X-XSS-Protection "1; mode=block" always;
}
location ^\~ /.well-known/carddav {
return 301 $scheme://$host/nextcloud/remote.php/dav;
}
location ^\~ /.well-known/caldav {
return 301 $scheme://$host/nextcloud/remote.php/dav;
}
location ^\~ /.well-known {
return 301 $scheme://$host/nextcloud/index.php$uri;
}
# technitium
location *technitium* {
proxy<sub>pass</sub> <http://localhost:5380/>;
proxy<sub>httpversion</sub> 1.1;
proxy<sub>setheader</sub> Host $host;
proxy<sub>setheader</sub> X-Real-IP $remote<sub>addr</sub>;
proxy<sub>setheader</sub> X-Forwarded-For $proxy<sub>addxforwardedfor</sub>;
proxy<sub>setheader</sub> X-Forwarded-Proto $scheme;
rewrite ^/technitium/(.\*)$ /$1 break;
}
curl -X GET "<https://zserver.zapto.org/portainer/api/endpoints/3/docker/containers/json?all=true>" -H "X-API-Key: ptr<sub>KFQqKse9K4Nc9M5jnpc61fpAvGzdTOXTzswz9CwOF74</sub>=" -u "admin:shakkal123"

View File

@@ -0,0 +1,102 @@
---
note type:
- note
- server
date: 2026-06-03
done: true
---
# Introduction
The original backend was written using FastAPI and has now been archived.
In replacement, I have written a Java Spring Boot backend that handles all of the API calls the domain `zainezq.com` uses.
Here is the repository for the backend:
[Link to the backend repository](https://gitea.zainezq.com/zaine/org_backend)
# Structure
The backend is structured as a typical Spring Boot application. It consists of several packages that handle different aspects of the application:
- ****Controllers****: These classes handle incoming HTTP requests and map them to appropriate service methods.
- ****Services****: These classes contain the business logic of the application.
- ****Repositories****: These classes interact with the database to perform CRUD operations.
- ****Models****: These classes represent the data structures used in the application.
The full list of API endpoints can be viewed using Swagger UI, which is available at the `/swagger-ui.html` endpoint once the application is running.
# Running the Application
The application is built using Maven. To run the application, you can utilise the `Makefile` provided in the repository.
The project is packaged as a Docker container, making it easy to deploy. You can build and run the Docker container using the following commands:
``` bash
docker compose build org_backend
docker compose up -d org_backend
# Alternatively:
docker compose down && docker compose build --no-cache && docker compose up -d
# To check logs
docker logs -f org_backend
```
# Bruno
Bruno is used for testing the backend API endpoints. It is a simple HTTP client that allows you to send requests to the backend and view the responses. I used the OpenAPI specification to generate Bruno tests for each endpoint.
# Authentication
The backend exposes public `/api/auth/register` and `/api/auth/login` endpoints. The website has a login page only; users are created through the API, then the login page stores the returned JWT in the browser.
Protected requests include:
``` text
Authorization: Bearer <jwt-token>
```
# Future?
## Integration with `notes.zainezq.com`
As the API is primarily used by `zainezq.com`, I want to think of ways that `notes.zainezq.com` could also use it. This website is used to store all my notes, and they are exported using `org-publish` in Emacs. Perhaps I could write an Emacs Lisp package that interacts with the backend API to store and retrieve notes.
Flow of how a note would be written:
1. User writes a note in `notes.zainezq.com` as org mode.
2. When the note is saved, a POST request is sent to the backend API with the note content.
3. The backend API stores the note in the database.
4. This will trigger a function that republishes the notes website to include the new note.
****Need to think more about this.****
# Update
The org-backend is no longer hosted using docker, it is now using systemd. The backend is still built using Maven, but it is now deployed as a standalone application rather than a Docker container.
Here are the commands needed:
``` bash
# To build the application
mvn clean package -DskipTests
# To run the application
java -jar target/org_backend-1.0.0-SNAPSHOT.jar
# systemctl commands
sudo systemctl start org_backend
sudo systemctl stop org_backend
sudo systemctl restart org_backend
sudo systemctl status org_backend
# To check logs
journalctl -u org_backend -f
```

22
Technical/Server/Server MOC.md Executable file
View File

@@ -0,0 +1,22 @@
---
note type:
- moc
- server
date: 2026-06-03
done: true
---
- [[Old Nextcloud]]
- [[Old NGINX Code]]
- [[Actual (finance)]]
- [[Server Backend]]
- [[Nextcloud]]
- [[Vaultwarden]]
- [[Cloudflare]]
- [[Gitea]]

16
Technical/Server/Vaultwarden.md Executable file
View File

@@ -0,0 +1,16 @@
---
note type:
- note
- server
date: 2026-06-03
done: true
---
Just ran into an issue where the IOS app was failing due to the latest version of bitwarden not being installed on the server. To fix this:
``` bash
docker compose pull
docker compose up -d
```

40
Technical/Technical MOC.md Executable file
View File

@@ -0,0 +1,40 @@
---
note type:
- moc
- technical
date: 2026-06-03
done: true
---
In this file I want to include technical information (things related to programming, coding and networking etc):
- [Programming Projects](id:d63abaad-15e8-45d8-aafb-c634164ec0c0)
- [AOC Notes](id:e7f2302b-16eb-476d-a7b9-be12f077819d)
- [Web Port Notes](id:348df473-6443-4f4a-b366-95397b574989)
- [Github Notes](id:ee6047b0-c878-4ec8-a1cf-9daf5c8f5b8e)
- [Linux MOC](id:bdb493df-db92-4c93-9558-0b10fdff3048)
- [Database MOC](id:e448cd99-afee-4702-947f-644bb34dc1aa)
- [Emacs MOC](id:8fa3f476-6152-45f4-b618-50f1e4bce46c)
- [Networking MOC](id:0880f089-a5ad-49cd-8ce3-f020a5941313)
- [Leetcode Notes](id:9d1cfccc-8da7-41a3-b435-9857f0abe441)
- [Haskell Notes](id:347d2663-515b-4d9a-9ee9-7706ee86a845)
- [C Notes](id:5a207a1c-6f02-40d5-b42e-38daaa0aec10)
- [Java MOC](id:ae343652-96fe-4341-8a36-ec3a1abd0dc6)
- [Server MOC](id:f09cb4ed-1407-4187-9002-de2c5db13a8f)
- [Technical Commonplace](id:37495d5f-2a77-40bc-b45c-8163189bbe6b)
- [Concepts](id:22737796-6D31-49D5-84F2-F7BC73E45144)
- [Website Stuff](id:84c371ea-6789-450e-978c-f1d77e725f4b)