diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml old mode 100644 new mode 100755 index 0eff92b..374fa45 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -18,7 +18,6 @@ jobs: QUARTZ_HOME: /home/zaine/Documents/quartz SERVICE_NAME: quartz-notes.service SUDO_PASSWORD: ${{ secrets.SUDO_PASSWORD }} - THEME_NAME: tokyo-night steps: - uses: actions/checkout@v4 @@ -42,13 +41,13 @@ jobs: git -C "$VAULT_HOME" checkout main git -C "$VAULT_HOME" pull --ff-only origin main - - name: Fetch Quartz Theme + - name: Update Quartz source run: | set -euo pipefail - cd "$QUARTZ_HOME" - curl -s -S https://raw.githubusercontent.com/saberzero1/quartz-themes/master/action.sh | bash -s -- "$THEME_NAME" - grep -q '^@use "./themes";' quartz/styles/custom.scss || printf '\n@use "./themes";\n' >> quartz/styles/custom.scss + git -C "$QUARTZ_HOME" fetch origin main + git -C "$QUARTZ_HOME" checkout main + git -C "$QUARTZ_HOME" pull --ff-only origin main - name: Build Quartz run: | diff --git a/.obsidian/app.json b/.obsidian/app.json old mode 100644 new mode 100755 diff --git a/.obsidian/appearance.json b/.obsidian/appearance.json old mode 100644 new mode 100755 index 736bc68..4e688f8 --- a/.obsidian/appearance.json +++ b/.obsidian/appearance.json @@ -1,5 +1,5 @@ { - "cssTheme": "Obsidian gruvbox", + "cssTheme": "Tokyo Night", "nativeMenus": false, "enabledCssSnippets": [ "styles" diff --git a/.obsidian/community-plugins.json b/.obsidian/community-plugins.json old mode 100644 new mode 100755 diff --git a/.obsidian/core-plugins.json b/.obsidian/core-plugins.json old mode 100644 new mode 100755 diff --git a/.obsidian/daily-notes.json b/.obsidian/daily-notes.json old mode 100644 new mode 100755 diff --git a/.obsidian/graph.json b/.obsidian/graph.json old mode 100644 new mode 100755 diff --git a/.obsidian/hotkeys.json b/.obsidian/hotkeys.json old mode 100644 new mode 100755 diff --git a/.obsidian/plugins/calendar/data.json b/.obsidian/plugins/calendar/data.json old mode 100644 new mode 100755 diff --git a/.obsidian/plugins/calendar/main.js b/.obsidian/plugins/calendar/main.js old mode 100644 new mode 100755 diff --git a/.obsidian/plugins/calendar/manifest.json b/.obsidian/plugins/calendar/manifest.json old mode 100644 new mode 100755 diff --git a/.obsidian/plugins/copilot/data.json b/.obsidian/plugins/copilot/data.json old mode 100644 new mode 100755 diff --git a/.obsidian/plugins/copilot/main.js b/.obsidian/plugins/copilot/main.js old mode 100644 new mode 100755 diff --git a/.obsidian/plugins/copilot/manifest.json b/.obsidian/plugins/copilot/manifest.json old mode 100644 new mode 100755 diff --git a/.obsidian/plugins/copilot/styles.css b/.obsidian/plugins/copilot/styles.css old mode 100644 new mode 100755 diff --git a/.obsidian/plugins/dataview/main.js b/.obsidian/plugins/dataview/main.js old mode 100644 new mode 100755 diff --git a/.obsidian/plugins/dataview/manifest.json b/.obsidian/plugins/dataview/manifest.json old mode 100644 new mode 100755 diff --git a/.obsidian/plugins/dataview/styles.css b/.obsidian/plugins/dataview/styles.css old mode 100644 new mode 100755 diff --git a/.obsidian/plugins/obsidian-annotator/main.js b/.obsidian/plugins/obsidian-annotator/main.js old mode 100644 new mode 100755 diff --git a/.obsidian/plugins/obsidian-annotator/manifest.json b/.obsidian/plugins/obsidian-annotator/manifest.json old mode 100644 new mode 100755 diff --git a/.obsidian/plugins/obsidian-excalidraw-plugin/data.json b/.obsidian/plugins/obsidian-excalidraw-plugin/data.json old mode 100644 new mode 100755 diff --git a/.obsidian/plugins/obsidian-excalidraw-plugin/main.js b/.obsidian/plugins/obsidian-excalidraw-plugin/main.js old mode 100644 new mode 100755 diff --git a/.obsidian/plugins/obsidian-excalidraw-plugin/manifest.json b/.obsidian/plugins/obsidian-excalidraw-plugin/manifest.json old mode 100644 new mode 100755 diff --git a/.obsidian/plugins/obsidian-excalidraw-plugin/styles.css b/.obsidian/plugins/obsidian-excalidraw-plugin/styles.css old mode 100644 new mode 100755 diff --git a/.obsidian/plugins/pdf-plus/data.json b/.obsidian/plugins/pdf-plus/data.json old mode 100644 new mode 100755 index a35fb4f..d12353d --- a/.obsidian/plugins/pdf-plus/data.json +++ b/.obsidian/plugins/pdf-plus/data.json @@ -223,7 +223,7 @@ "blankLineAboveAppendedContent": true, "autoCopy": true, "autoFocus": false, - "autoPaste": false, + "autoPaste": true, "autoFocusTarget": "last-active-and-open-then-last-paste", "autoPasteTarget": "last-active-and-open-then-last-paste", "openAutoFocusTargetIfNotOpened": true, diff --git a/.obsidian/plugins/pdf-plus/main.js b/.obsidian/plugins/pdf-plus/main.js old mode 100644 new mode 100755 diff --git a/.obsidian/plugins/pdf-plus/manifest.json b/.obsidian/plugins/pdf-plus/manifest.json old mode 100644 new mode 100755 diff --git a/.obsidian/plugins/pdf-plus/styles.css b/.obsidian/plugins/pdf-plus/styles.css old mode 100644 new mode 100755 diff --git a/.obsidian/snippets/styles.css b/.obsidian/snippets/styles.css old mode 100644 new mode 100755 diff --git a/.obsidian/templates.json b/.obsidian/templates.json old mode 100644 new mode 100755 diff --git a/.obsidian/themes/Obsidian gruvbox/manifest.json b/.obsidian/themes/Obsidian gruvbox/manifest.json old mode 100644 new mode 100755 diff --git a/.obsidian/themes/Obsidian gruvbox/theme.css b/.obsidian/themes/Obsidian gruvbox/theme.css old mode 100644 new mode 100755 diff --git a/.obsidian/themes/Tokyo Night/manifest.json b/.obsidian/themes/Tokyo Night/manifest.json old mode 100644 new mode 100755 diff --git a/.obsidian/themes/Tokyo Night/theme.css b/.obsidian/themes/Tokyo Night/theme.css old mode 100644 new mode 100755 diff --git a/.obsidian/themes/Wasp/manifest.json b/.obsidian/themes/Wasp/manifest.json old mode 100644 new mode 100755 diff --git a/.obsidian/themes/Wasp/theme.css b/.obsidian/themes/Wasp/theme.css old mode 100644 new mode 100755 diff --git a/.obsidian/types.json b/.obsidian/types.json old mode 100644 new mode 100755 diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json old mode 100644 new mode 100755 index 1c9b4d2..e93cd08 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -4,39 +4,24 @@ "type": "split", "children": [ { - "id": "8c2f58580563ad8b", + "id": "166c3f0cc48796b5", "type": "tabs", "children": [ { - "id": "c8d96bab4185fef6", + "id": "99bf5a60e1d7ab31", "type": "leaf", "state": { "type": "markdown", "state": { - "file": "Career/Concepts.md", + "file": "Dailies/2026-07-10.md", "mode": "source", "source": false }, "icon": "lucide-file", - "title": "Concepts" - } - }, - { - "id": "ecbbece3fdbe4ecf", - "type": "leaf", - "state": { - "type": "markdown", - "state": { - "file": "Technical/Android app.md", - "mode": "source", - "source": false - }, - "icon": "lucide-file", - "title": "Android app" + "title": "2026-07-10" } } - ], - "currentTab": 1 + ] } ], "direction": "vertical" @@ -68,7 +53,7 @@ "state": { "type": "search", "state": { - "query": "regex", + "query": "cycle checks", "matchingCase": false, "explainSearch": false, "collapseAll": false, @@ -95,15 +80,15 @@ "state": { "type": "calendar", "state": {}, - "icon": "calendar-with-checkmark", - "title": "Calendar" + "icon": "lucide-ghost", + "title": "calendar" } } ] } ], "direction": "horizontal", - "width": 466.5 + "width": 331.5 }, "right": { "id": "744e252b1622606d", @@ -177,8 +162,8 @@ "state": { "type": "excalidraw-sidepanel", "state": {}, - "icon": "excalidraw-icon", - "title": "Excalidraw Sidepanel" + "icon": "lucide-ghost", + "title": "excalidraw-sidepanel" } }, { @@ -187,7 +172,7 @@ "state": { "type": "backlink", "state": { - "file": "Career/Security/Cross Site Scripting (XSS).md", + "file": "pdfs/_technical/Art of Computer Programming - Volume 1 (Fundamental Algorithms).pdf", "collapseAll": false, "extraContext": false, "sortOrder": "alphabetical", @@ -197,7 +182,7 @@ "unlinkedCollapsed": true }, "icon": "links-coming-in", - "title": "Backlinks for Cross Site Scripting (XSS)" + "title": "Backlinks for Art of Computer Programming - Volume 1 (Fundamental Algorithms)" } } ], @@ -215,62 +200,62 @@ "canvas:Create new canvas": false, "daily-notes:Open today's daily note": false, "command-palette:Open command palette": false, + "bases:Create new base": false, + "templates:Insert template": false, "obsidian-excalidraw-plugin:New drawing": false, "pdf-plus:PDF++: Toggle auto-copy": false, "pdf-plus:PDF++: Toggle auto-focus": false, - "pdf-plus:PDF++: Toggle auto-paste": false, - "bases:Create new base": false, - "templates:Insert template": false + "pdf-plus:PDF++: Toggle auto-paste": false } }, - "active": "ecbbece3fdbe4ecf", + "active": "99bf5a60e1d7ab31", "lastOpenFiles": [ - "Technical/Emacs/Emacs Config.md", - "Technical/Android app.md", - "Deen/Poetry.md", - "Dailies/2026-06-09.md", - "Dailies/2026-06-08.md", - "Career/Database - SQL/Using Joins, Constraints, Normalization, and Subqueries.md", - "Dailies/2026-06-05.md", - "Deen/Naats.md", - "Career/Microlise/Session Stored XSS PENTEST.md", - "Career/Concepts.md", - "Career/Regex.md", - "Dailies/2026-06-04.md", - "Inbox/Testing -.md", - "Inbox/Testing -.md~", - "Inbox", - "Career/Microlise/Session Stored XSS PENTEST.html", - "Dailies/2026-05-29.md", - "Dailies/2026-06-01.md", - "Dailies/2026-06-02.md", - "Career/Security/Cross Site Scripting (XSS).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", + "Technical/Coding/zainezq upgrade.md", + "Dailies/2026-07-10.md", + "Dailies/2026-07-08.md", "Index.md", + "Daily Notes.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", - "pdfs/_articles/Opinion.pdf", + "Misc/20260111204228-rss_articles.md", + "Misc/20250918120519-misc_moc.md", + "Non Technical/Wedding MOC.md", + "Non Technical/Timetable.md", + "Non Technical/Textual Hifz.md", + "Non Technical/Proverbs.md", + "Non Technical/Non Technical MOC.md", + "Non Technical/Finances.md", + "Non Technical/Decluttering Plan.md", + "Non Technical/Chrome Tabs Backups.md", + "Non Technical/2026 Targets.md", + "Non Technical/20260307233451-recipes_cookbook.md", + "Non Technical/20260211114817-personal_operating_system.md", + "Articles/Articles MOC.md", + "Books/Books MOC.md", + "Non Technical/20250719175023-recipes_done.md", + "Non Technical/20250719174944-recipes_ideas.md", + "Non Technical/20250717230336-recipes_moc.md", + "Technical/Digital Backlog.md", + "Non Technical/20260429110504-ibarat.md", + "Career/Database - SQL/Attachments/Pasted image 20260703150047.png", + "Career/Database - SQL/Attachments/Pasted image 20260703150027.png", + "Career/Tech Talks", + "Career/Attachments/Pasted image 20260625102149.png", + "Career/Attachments/Pasted image 20260625102144.png", + "pdfs/_articles/20-laws-software-engineering.pdf", + "Articles/Notes/Attachments/Pasted image 20260624145432.png", + "Articles/Notes/Attachments/Pasted image 20260624145412.png", + "Articles/Notes/Attachments", + "Articles/#Effects of insufficient sleep on circadian rhythmicity.md#", + "Articles/Notes", "Career/Security/Attachments/Pasted image 20260603202316.png", + "Career/Theory", "Career/Security/Attachments/Pasted image 20260603202301.png", - "Books/Attachments/Pasted image 20260603145548.png", - "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", + "Career/Security/Attachments/Pasted image 20260602161410.png", + "Career/Database - SQL/Attachments/Pasted image 20260603221345.png", + "Attachments", + "pdfs/_articles/Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome.pdf", + "pdfs/_technical/Quick Start Kubernetes - Nigel Poulton.pdf", + "pdfs/_technical/sicp.pdf", "Untitled.canvas" ] } \ No newline at end of file diff --git a/.obsidian/workspace.sync-conflict-20260708-210706-VT6366A.json b/.obsidian/workspace.sync-conflict-20260708-210706-VT6366A.json new file mode 100755 index 0000000..51c4622 --- /dev/null +++ b/.obsidian/workspace.sync-conflict-20260708-210706-VT6366A.json @@ -0,0 +1,272 @@ +{ + "main": { + "id": "a10a5df036dad1ec", + "type": "split", + "children": [ + { + "id": "aec0031e10115070", + "type": "tabs", + "children": [ + { + "id": "dbe581ed3d915bad", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "Technical/AdventureOS/SQL Diagram (ERD).md", + "mode": "source", + "source": false + }, + "icon": "lucide-file", + "title": "SQL Diagram (ERD)" + } + } + ] + } + ], + "direction": "vertical" + }, + "left": { + "id": "e7693899fc71746d", + "type": "split", + "children": [ + { + "id": "6ff574ab70995d19", + "type": "tabs", + "children": [ + { + "id": "c4d2202b65732a61", + "type": "leaf", + "state": { + "type": "file-explorer", + "state": { + "sortOrder": "alphabetical", + "autoReveal": false + }, + "icon": "lucide-folder-closed", + "title": "Files" + } + }, + { + "id": "d4591b733055ecba", + "type": "leaf", + "state": { + "type": "search", + "state": { + "query": "regex", + "matchingCase": false, + "explainSearch": false, + "collapseAll": false, + "extraContext": false, + "sortOrder": "alphabetical" + }, + "icon": "lucide-search", + "title": "Search" + } + }, + { + "id": "2f73ae904e35aa1f", + "type": "leaf", + "state": { + "type": "bookmarks", + "state": {}, + "icon": "lucide-bookmark", + "title": "Bookmarks" + } + }, + { + "id": "183cc7829ba77fee", + "type": "leaf", + "state": { + "type": "calendar", + "state": {}, + "icon": "lucide-ghost", + "title": "calendar" + } + } + ] + } + ], + "direction": "horizontal", + "width": 331.5 + }, + "right": { + "id": "744e252b1622606d", + "type": "split", + "children": [ + { + "id": "24278e63191fa79a", + "type": "tabs", + "children": [ + { + "id": "42aa6e667de01f19", + "type": "leaf", + "state": { + "type": "outgoing-link", + "state": { + "file": "Non Technical/Non Technical MOC.md", + "linksCollapsed": false, + "unlinkedCollapsed": true + }, + "icon": "links-going-out", + "title": "Outgoing links from Non Technical MOC" + } + }, + { + "id": "d56e928cdfbcafcb", + "type": "leaf", + "state": { + "type": "tag", + "state": { + "sortOrder": "frequency", + "useHierarchy": true, + "showSearch": false, + "searchQuery": "" + }, + "icon": "lucide-tags", + "title": "Tags" + } + }, + { + "id": "0dd25c4390ed8e8b", + "type": "leaf", + "state": { + "type": "all-properties", + "state": { + "sortOrder": "frequency", + "showSearch": false, + "searchQuery": "" + }, + "icon": "lucide-archive", + "title": "All properties" + } + }, + { + "id": "fc92dee1d332a586", + "type": "leaf", + "state": { + "type": "outline", + "state": { + "file": "Non Technical/Non Technical MOC.md", + "followCursor": false, + "showSearch": false, + "searchQuery": "" + }, + "icon": "lucide-list", + "title": "Outline of Non Technical MOC" + } + }, + { + "id": "e98aeb66d6146106", + "type": "leaf", + "state": { + "type": "excalidraw-sidepanel", + "state": {}, + "icon": "lucide-ghost", + "title": "excalidraw-sidepanel" + } + }, + { + "id": "25f2f0631c046232", + "type": "leaf", + "state": { + "type": "backlink", + "state": { + "file": "pdfs/_technical/Art of Computer Programming - Volume 1 (Fundamental Algorithms).pdf", + "collapseAll": false, + "extraContext": false, + "sortOrder": "alphabetical", + "showSearch": false, + "searchQuery": "", + "backlinkCollapsed": false, + "unlinkedCollapsed": true + }, + "icon": "links-coming-in", + "title": "Backlinks for Art of Computer Programming - Volume 1 (Fundamental Algorithms)" + } + }, + { + "id": "e9d11380cce0da67", + "type": "leaf", + "state": { + "type": "file-properties", + "state": { + "file": "Career/Devops/DevOps Foundations Core Concepts and Fundamentals.md" + }, + "icon": "lucide-info", + "title": "File properties for DevOps Foundations Core Concepts and Fundamentals" + } + } + ], + "currentTab": 6 + } + ], + "direction": "horizontal", + "width": 200, + "collapsed": true + }, + "left-ribbon": { + "hiddenItems": { + "switcher:Open quick switcher": false, + "graph:Open graph view": false, + "canvas:Create new canvas": false, + "daily-notes:Open today's daily note": false, + "command-palette:Open command palette": false, + "bases:Create new base": false, + "templates:Insert template": false, + "obsidian-excalidraw-plugin:New drawing": false, + "pdf-plus:PDF++: Toggle auto-copy": false, + "pdf-plus:PDF++: Toggle auto-focus": false, + "pdf-plus:PDF++: Toggle auto-paste": false + } + }, + "active": "dbe581ed3d915bad", + "lastOpenFiles": [ + "Technical/AdventureOS/AdventureOS.md", + "Technical/AdventureOS/SQL Diagram (ERD).md", + "Technical/AdventureOS/Attachments/postgres - adventureos - public.png", + "Technical/AdventureOS/Attachments", + "Technical/AdventureOS", + "Technical/Attachments/postgres - adventureos - public.png", + "Technical/Attachments", + "Career/Devops/DevOps Foundations Core Concepts and Fundamentals.md", + "Career/Database - SQL/Using Joins, Constraints, Normalization, and Subqueries.md", + "Dailies/2026-06-20.md", + "Dailies/2026-06-19.md", + "Dailies/2026-06-17.md", + "Career/Concepts.md", + "Career/Design Patterns.md", + "Career/Theory/Ternary Operator.md", + "Career/Theory/XOR.md", + "Career/Theory/Regex.md", + "Career/Theory/DLL's.md", + "Career/Theory/Big (O) - Time and Space Complexity.md", + "Career/Windows Services.md", + "Career/Test Driven Development.md", + "Career/Solid Principles.md", + "Career/Software Development Methodologies.md", + "Career/Powershell MOC.md", + "Career/MVP + MVT.md", + "Career/Job applications.md", + "Career/Java Portswrigger Test.md", + "Career/Career MOC.md", + "Career/Bowling Kata.md", + "Career/Security/Attachments/Pasted image 20260603202316.png", + "Career/Theory", + "Career/Security/Attachments/Pasted image 20260603202301.png", + "Career/Security/Attachments/Pasted image 20260602161410.png", + "Career/Database - SQL/Airflow.md", + "Career/Database - SQL/Attachments/Pasted image 20260603221345.png", + "Career/Database - SQL/Attachments/Pasted image 20260619152151.png", + "Attachments", + "pdfs/_articles/Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome.pdf", + "Articles/#Effects of insufficient sleep on circadian rhythmicity.md#", + "pdfs/_articles/20-laws-software-engineering.pdf", + "pdfs/_technical/Quick Start Kubernetes - Nigel Poulton.pdf", + "pdfs/_technical/sicp.pdf", + "Books/Attachments/Pasted image 20260603145548.png", + "Books/Attachments/Pasted image 20260603145055.png", + "Books/Attachments/Pasted image 20260603145047.png", + "Untitled.canvas" + ] +} \ No newline at end of file diff --git a/Articles/#Effects of insufficient sleep on circadian rhythmicity.md# b/Articles/#Effects of insufficient sleep on circadian rhythmicity.md# new file mode 100755 index 0000000..d95ed97 --- /dev/null +++ b/Articles/#Effects of insufficient sleep on circadian rhythmicity.md# @@ -0,0 +1,22 @@ +--- +pdf: + - "[[Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome.pdf]]" +date started: 2026-06-17 +date finished: +type: +done: +--- +# Effects of insufficient sleep on circadian rhythmicity: Notes +> [!PDF|] [[Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome.pdf#page=1&selection=32,13,32,17|Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome, p.1]] +> > SEM +> +> SEM stands for Standard Error of the Mean, which is a statistical measure that estimates the accuracy with which a sample mean represents the population mean. It is calculated by dividing the standard deviation (SD) of the sample by the square root of the sample size (n). SEM provides insight into how much variability there is in the sample mean and is often used to create confidence intervals around the mean. A smaller SEM indicates that the sample mean is likely to be closer to the true population mean, while a larger SEM suggests more variability and less precision in the estimate. + +> [!PDF|] [[Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome.pdf#page=1&selection=33,12,33,16|Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome, p.1]] +> > RNA +> +> RNA stands for Ribonucleic Acid, which is a molecule essential for various biological roles, including coding, decoding, regulation, and expression of genes. RNA is typically single-stranded and is involved in the synthesis of proteins through the processes of transcription and translation. It serves as a messenger carrying instructions from DNA for controlling the synthesis of proteins, although some RNA molecules have catalytic and regulatory functions as well. +> [!PDF|] [[Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome.pdf#page=1&selection=38,36,38,50|Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome, p.1]] +> > Transcriptome +> +> Transcriptome refers to the complete set of RNA transcripts produced by the genome under specific circumstances or in a specific cell. It includes all types of RNA, such as messenger RNA (mRNA), ribosomal RNA (rRNA), transfer RNA (tRNA), and non-coding RNAs. The transcriptome provides insights into gene expression patterns, cellular functions, and responses to environmental changes, making it a crucial area of study in genomics and molecular biology. \ No newline at end of file diff --git a/Articles/20 Software Engineering Laws.md b/Articles/20 Software Engineering Laws.md deleted file mode 100644 index acb6f41..0000000 --- a/Articles/20 Software Engineering Laws.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -pdf: - - "[[20-laws-software-engineering.pdf]]" -date started: 2026-06-03 -date finished: -type: pdf-notes -done: ---- -# Link: -# 20 Software Engineering Laws: Notes \ No newline at end of file diff --git a/Articles/Articles MOC.md b/Articles/Articles MOC.md old mode 100644 new mode 100755 index 7333ea9..9366dac --- a/Articles/Articles MOC.md +++ b/Articles/Articles MOC.md @@ -1,22 +1,41 @@ -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]]) +These are articles, weather from `dev-articles` on slack, or ones that I find online. They can be in a PDF form, or an online link. +If I find an interesting article, this will get saved to the daily note. At the end of the day/week, when these dailies are cleaned up, the article may get added to this list if it's something I want to look into. If it's something for the future, it will go into [[z resources]]. ## Software Articles: -- [[I thought I knew system design]] -- [[Every Senior Engineer has read these books]] -- [[Software Quality]] -- [[20 Software Engineering Laws]] -- [[Redefining the Software Engineering Profession for AI]] +- [x] [[I thought I knew system design]] +- [x] [[Every Senior Engineer has read these books]] +- [x] [[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]] +## Science -All files that are not done: +- [ ] [[Effects of insufficient sleep on circadian rhythmicity]] +- [ ] [[Effect of Tiktok on teens]] +- [x] [[Reason some people are likable]] + +## Misc +- [ ] https://shvetsm.github.io/posts/the-best-engineers-write-less-code/ +- [ ] https://medium.com/data-science-collective/microsoft-banned-ai-because-it-cost-too-much-135bcbf15a18 +## All files that are not done: ```dataview TABLE FROM "Articles" WHERE done != true AND file.name!="Articles MOC" SORT file.name ASC +``` + +```dataview +TABLE + +    file.link AS Article, + +    done AS Done + +FROM "Articles" + +WHERE file.name != "Articles MOC" + +SORT file.name ASC ``` \ No newline at end of file diff --git a/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 b/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 old mode 100644 new mode 100755 diff --git a/Articles/Attachments/2026-05-22-every-senior-engineer-i-respect-has-read-these-books-have-you-by-the-latency-gambler-mar-2026-medium-02.png b/Articles/Attachments/2026-05-22-every-senior-engineer-i-respect-has-read-these-books-have-you-by-the-latency-gambler-mar-2026-medium-02.png old mode 100644 new mode 100755 diff --git a/Articles/Attachments/2026-05-22-every-senior-engineer-i-respect-has-read-these-books-have-you-by-the-latency-gambler-mar-2026-medium-03.png b/Articles/Attachments/2026-05-22-every-senior-engineer-i-respect-has-read-these-books-have-you-by-the-latency-gambler-mar-2026-medium-03.png old mode 100644 new mode 100755 diff --git a/Articles/Attachments/2026-05-22-every-senior-engineer-i-respect-has-read-these-books-have-you-by-the-latency-gambler-mar-2026-medium-04.png b/Articles/Attachments/2026-05-22-every-senior-engineer-i-respect-has-read-these-books-have-you-by-the-latency-gambler-mar-2026-medium-04.png old mode 100644 new mode 100755 diff --git a/Articles/Attachments/2026-05-22-every-senior-engineer-i-respect-has-read-these-books-have-you-by-the-latency-gambler-mar-2026-medium-05.png b/Articles/Attachments/2026-05-22-every-senior-engineer-i-respect-has-read-these-books-have-you-by-the-latency-gambler-mar-2026-medium-05.png old mode 100644 new mode 100755 diff --git a/Articles/Attachments/2026-05-22-every-senior-engineer-i-respect-has-read-these-books-have-you-by-the-latency-gambler-mar-2026-medium-06.png b/Articles/Attachments/2026-05-22-every-senior-engineer-i-respect-has-read-these-books-have-you-by-the-latency-gambler-mar-2026-medium-06.png old mode 100644 new mode 100755 diff --git a/Articles/Attachments/2026-05-22-every-senior-engineer-i-respect-has-read-these-books-have-you-by-the-latency-gambler-mar-2026-medium.png b/Articles/Attachments/2026-05-22-every-senior-engineer-i-respect-has-read-these-books-have-you-by-the-latency-gambler-mar-2026-medium.png old mode 100644 new mode 100755 diff --git a/Articles/Attachments/2026-05-22-senior-books.png b/Articles/Attachments/2026-05-22-senior-books.png old mode 100644 new mode 100755 diff --git a/Articles/Attachments/2026-05-22-software-quality.png b/Articles/Attachments/2026-05-22-software-quality.png old mode 100644 new mode 100755 diff --git a/Articles/Effects of insufficient sleep on circadian rhythmicity.md b/Articles/Effects of insufficient sleep on circadian rhythmicity.md deleted file mode 100644 index ee33fdd..0000000 --- a/Articles/Effects of insufficient sleep on circadian rhythmicity.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -pdf: - - "[[Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome.pdf]]" -date started: 2026-06-03 -date finished: -type: -done: ---- -# Effects of insufficient sleep on circadian rhythmicity: Notes diff --git a/Articles/Notes/20 Software Engineering Laws.md b/Articles/Notes/20 Software Engineering Laws.md new file mode 100755 index 0000000..67139af --- /dev/null +++ b/Articles/Notes/20 Software Engineering Laws.md @@ -0,0 +1,18 @@ +--- +pdf: + - "[[20-laws-software-engineering.pdf]]" +date started: 2026-06-03 +date finished: +type: pdf-notes +done: +note type: + - dev-articles +--- +# Link: +# 20 Software Engineering Laws: Notes + +> [!PDF|yellow] [[20-laws-software-engineering.pdf#page=2&selection=6,0,6,53&color=yellow|20-laws-software-engineering, p.2]] +> > In particular, we will talk about the following laws: +> +> ![[Pasted image 20260624145412.png]] +![[Pasted image 20260624145432.png]] diff --git a/Articles/Notes/Attachments/Pasted image 20260624145412.png b/Articles/Notes/Attachments/Pasted image 20260624145412.png new file mode 100755 index 0000000..9b14ff8 Binary files /dev/null and b/Articles/Notes/Attachments/Pasted image 20260624145412.png differ diff --git a/Articles/Notes/Attachments/Pasted image 20260624145432.png b/Articles/Notes/Attachments/Pasted image 20260624145432.png new file mode 100755 index 0000000..b30070a Binary files /dev/null and b/Articles/Notes/Attachments/Pasted image 20260624145432.png differ diff --git a/Articles/Effect of Tiktok on teens.md b/Articles/Notes/Effect of Tiktok on teens.md old mode 100644 new mode 100755 similarity index 100% rename from Articles/Effect of Tiktok on teens.md rename to Articles/Notes/Effect of Tiktok on teens.md diff --git a/Articles/Notes/Effects of insufficient sleep on circadian rhythmicity.md b/Articles/Notes/Effects of insufficient sleep on circadian rhythmicity.md new file mode 100755 index 0000000..bd3a0a5 --- /dev/null +++ b/Articles/Notes/Effects of insufficient sleep on circadian rhythmicity.md @@ -0,0 +1,33 @@ +--- +pdf: + - "[[Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome.pdf]]" +date started: 2026-06-17 +date finished: +type: +done: +--- +# Effects of insufficient sleep on circadian rhythmicity: Notes +> [!PDF|] [[Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome.pdf#page=1&selection=32,13,32,17|Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome, p.1]] +> > SEM +> +> SEM stands for Standard Error of the Mean, which is a statistical measure that estimates the accuracy with which a sample mean represents the population mean. It is calculated by dividing the standard deviation (SD) of the sample by the square root of the sample size (n). SEM provides insight into how much variability there is in the sample mean and is often used to create confidence intervals around the mean. A smaller SEM indicates that the sample mean is likely to be closer to the true population mean, while a larger SEM suggests more variability and less precision in the estimate. + +> [!PDF|] [[Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome.pdf#page=1&selection=33,12,33,16|Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome, p.1]] +> > RNA +> +> RNA stands for Ribonucleic Acid, which is a molecule essential for various biological roles, including coding, decoding, regulation, and expression of genes. RNA is typically single-stranded and is involved in the synthesis of proteins through the processes of transcription and translation. It serves as a messenger carrying instructions from DNA for controlling the synthesis of proteins, although some RNA molecules have catalytic and regulatory functions as well. + +> [!PDF|] [[Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome.pdf#page=1&selection=38,36,38,50|Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome, p.1]] +> > Transcriptome +> +> Transcriptome refers to the complete set of RNA transcripts produced by the genome under specific circumstances or in a specific cell. It includes all types of RNA, such as messenger RNA (mRNA), ribosomal RNA (rRNA), transfer RNA (tRNA), and non-coding RNAs. The transcriptome provides insights into gene expression patterns, cellular functions, and responses to environmental changes, making it a crucial area of study in genomics and molecular biology. + +> [!PDF|] [[Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome.pdf#page=1&selection=118,0,121,1|Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome, p.1]] +> > epidemiological studies +> +> Epidemiological studies are research investigations that study the distribution and determinants of health-related states or events in specific populations. These studies aim to identify risk factors for diseases, understand patterns of health and illness, and inform public health interventions. Epidemiological research can be observational (such as cohort, case-control, and cross-sectional studies) or experimental (such as randomized controlled trials), and it often involves analyzing data from large groups of people to draw conclusions about health trends and causes of disease. + +> [!PDF|] [[Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome.pdf#page=1&selection=177,26,179,62|Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome, p.1]] +> > In fact, the liver transcriptome is affected to a larger extent by sleep loss than the brain transcriptome +> +> \ No newline at end of file diff --git a/Articles/Every Senior Engineer has read these books.md b/Articles/Notes/Every Senior Engineer has read these books.md old mode 100644 new mode 100755 similarity index 98% rename from Articles/Every Senior Engineer has read these books.md rename to Articles/Notes/Every Senior Engineer has read these books.md index 2fc9c1f..3e727fc --- a/Articles/Every Senior Engineer has read these books.md +++ b/Articles/Notes/Every Senior Engineer has read these books.md @@ -2,6 +2,10 @@ 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 +date started: 2026-06-15 +date finished: 2026-06-15 +note type: + - dev-articles --- # Every Senior Engineer has read these books Notes: diff --git a/Articles/I thought I knew system design.md b/Articles/Notes/I thought I knew system design.md old mode 100644 new mode 100755 similarity index 100% rename from Articles/I thought I knew system design.md rename to Articles/Notes/I thought I knew system design.md diff --git a/Articles/Reason some people are likable.md b/Articles/Notes/Reason some people are likable.md old mode 100644 new mode 100755 similarity index 100% rename from Articles/Reason some people are likable.md rename to Articles/Notes/Reason some people are likable.md diff --git a/Articles/Redefining the Software Engineering Profession for AI.md b/Articles/Notes/Redefining the Software Engineering Profession for AI.md old mode 100644 new mode 100755 similarity index 100% rename from Articles/Redefining the Software Engineering Profession for AI.md rename to Articles/Notes/Redefining the Software Engineering Profession for AI.md diff --git a/Articles/Software Quality.md b/Articles/Notes/Software Quality.md old mode 100644 new mode 100755 similarity index 96% rename from Articles/Software Quality.md rename to Articles/Notes/Software Quality.md index 1bbcac2..92f0bf4 --- a/Articles/Software Quality.md +++ b/Articles/Notes/Software Quality.md @@ -5,6 +5,8 @@ date started: 2026-06-03 date finished: 2026-06-03 type: pdf-notes done: true +note type: + - dev-articles --- # Software Quality: Notes diff --git a/Articles/Substack Articles.md b/Articles/Substack Articles.md old mode 100644 new mode 100755 diff --git a/Attachments/Drawing 2026-06-19 14.55.21.excalidraw.md b/Attachments/Drawing 2026-06-19 14.55.21.excalidraw.md new file mode 100755 index 0000000..e398fbf --- /dev/null +++ b/Attachments/Drawing 2026-06-19 14.55.21.excalidraw.md @@ -0,0 +1,658 @@ +--- + +excalidraw-plugin: parsed +tags: [excalidraw] + +--- +==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠== You can decompress Drawing data with the command palette: 'Decompress current Excalidraw file'. For more info check in plugin settings under 'Saving' + + +# Excalidraw Data + +## Text Elements +%% +## Drawing +```compressed-json +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 +``` +%% \ No newline at end of file diff --git a/Books/Attachments/Pasted image 20260603143442.png b/Books/Attachments/Pasted image 20260603143442.png old mode 100644 new mode 100755 diff --git a/Books/Attachments/Pasted image 20260603143542.png b/Books/Attachments/Pasted image 20260603143542.png old mode 100644 new mode 100755 diff --git a/Books/Attachments/Pasted image 20260603143606.png b/Books/Attachments/Pasted image 20260603143606.png old mode 100644 new mode 100755 diff --git a/Books/Attachments/Pasted image 20260603144043.png b/Books/Attachments/Pasted image 20260603144043.png old mode 100644 new mode 100755 diff --git a/Books/Attachments/Pasted image 20260603144325.png b/Books/Attachments/Pasted image 20260603144325.png old mode 100644 new mode 100755 diff --git a/Books/Attachments/Pasted image 20260603144656.png b/Books/Attachments/Pasted image 20260603144656.png old mode 100644 new mode 100755 diff --git a/Books/Attachments/Pasted image 20260603145047.png b/Books/Attachments/Pasted image 20260603145047.png old mode 100644 new mode 100755 diff --git a/Books/Attachments/Pasted image 20260603145055.png b/Books/Attachments/Pasted image 20260603145055.png old mode 100644 new mode 100755 diff --git a/Books/Attachments/Pasted image 20260603145548.png b/Books/Attachments/Pasted image 20260603145548.png old mode 100644 new mode 100755 diff --git a/Books/Art of Computer Programming.md b/Books/Book Notes/Art of Computer Programming.md old mode 100644 new mode 100755 similarity index 100% rename from Books/Art of Computer Programming.md rename to Books/Book Notes/Art of Computer Programming.md diff --git a/Books/Clean Code.md b/Books/Book Notes/Clean Code.md old mode 100644 new mode 100755 similarity index 100% rename from Books/Clean Code.md rename to Books/Book Notes/Clean Code.md diff --git a/Books/Dose Effect.md b/Books/Book Notes/Dose Effect.md old mode 100644 new mode 100755 similarity index 100% rename from Books/Dose Effect.md rename to Books/Book Notes/Dose Effect.md diff --git a/Books/Ikigai.md b/Books/Book Notes/Ikigai.md old mode 100644 new mode 100755 similarity index 100% rename from Books/Ikigai.md rename to Books/Book Notes/Ikigai.md diff --git a/Books/Book Notes/Quick Start Kubernetes.md b/Books/Book Notes/Quick Start Kubernetes.md new file mode 100755 index 0000000..5a647d7 --- /dev/null +++ b/Books/Book Notes/Quick Start Kubernetes.md @@ -0,0 +1,10 @@ +--- +pdf: + - "[[Quick Start Kubernetes - Nigel Poulton.pdf]]" +date started: 2026-06-17 +date finished: +type: + - book notes +done: +--- +# Quick Start Kubernetes: Notes \ No newline at end of file diff --git a/Books/So good they cant ignore you.md b/Books/Book Notes/So good they cant ignore you.md old mode 100644 new mode 100755 similarity index 100% rename from Books/So good they cant ignore you.md rename to Books/Book Notes/So good they cant ignore you.md diff --git a/Books/The Book of Ichigo Ichie.md b/Books/Book Notes/The Book of Ichigo Ichie.md old mode 100644 new mode 100755 similarity index 100% rename from Books/The Book of Ichigo Ichie.md rename to Books/Book Notes/The Book of Ichigo Ichie.md diff --git a/Books/The Clean Coder.md b/Books/Book Notes/The Clean Coder.md old mode 100644 new mode 100755 similarity index 100% rename from Books/The Clean Coder.md rename to Books/Book Notes/The Clean Coder.md diff --git a/Books/The Science of Self-Discipline.md b/Books/Book Notes/The Science of Self-Discipline.md old mode 100644 new mode 100755 similarity index 100% rename from Books/The Science of Self-Discipline.md rename to Books/Book Notes/The Science of Self-Discipline.md diff --git a/Books/Book Recs.md b/Books/Book Recs.md old mode 100644 new mode 100755 diff --git a/Books/Books Calibre.md b/Books/Books Calibre.md old mode 100644 new mode 100755 index d8b5ffd..c2e6ee8 --- a/Books/Books Calibre.md +++ b/Books/Books Calibre.md @@ -3,7 +3,7 @@ tags: - books - calibre - index -generated_at: 2026-06-10T00:00:01.241276 +generated_at: 2026-07-13T00:00:01.632974 --- # Career diff --git a/Books/Books MOC.md b/Books/Books MOC.md old mode 100644 new mode 100755 index d712119..a525705 --- a/Books/Books MOC.md +++ b/Books/Books MOC.md @@ -1,3 +1,9 @@ +--- +note type: + - moc +date: 2026-06-22 +done: true +--- ## Recommendations for books: [[Book Recs]] # [[Books Calibre]] @@ -8,29 +14,10 @@ - [ ] [[Dose Effect]] - [ ] [[The Book of Ichigo Ichie]] -# Article Notes: - -## DONE [Effect of Tiktok on teens](id:db7b1fdb-28cd-43a8-8137-23399f38cd07) - -## TODO [Effects of insufficient sleep on circadian rhythmicity](id:5429d9c8-ace8-419b-a9dc-8403b9c20215) - -## Software: - -### DONE [I Thought I Knew System Design Until I Met a Google L7 Interviewer](id:9f220a90-635a-4744-9664-be89d8b2a64b) - -### DONE [Every Senior Engineer I Respect Has Read These Books (Have You?)](id:c3b075bc-44c9-43eb-9c44-a58cb532fc35) - -### DONE [Software Quality Article](id:453e252a-34f4-4d84-adab-35fe69ceed55) - # Long term: -## TODO [Art of Computer Programming Notes](id:f1bc3f88-95c5-4013-b0dd-f72428200e72) +- [ ] [Art of Computer Programming Notes](id:f1bc3f88-95c5-4013-b0dd-f72428200e72) -# Non PDF: - -## DONE [Microsoft banned AI because it cost too much.](https://medium.com/data-science-collective/microsoft-banned-ai-because-it-cost-too-much-135bcbf15a18) - -## DONE [The Best Engineers Write Less Code](https://shvetsm.github.io/posts/the-best-engineers-write-less-code/) All files that are not done: ```dataview diff --git a/Books/Notes/Career Capital.md b/Books/Notes/Career Capital.md old mode 100644 new mode 100755 diff --git a/Books/Notes/Deliberate practice.md b/Books/Notes/Deliberate practice.md old mode 100644 new mode 100755 diff --git a/Books/Notes/Neuroplasticity.md b/Books/Notes/Neuroplasticity.md old mode 100644 new mode 100755 diff --git a/Books/Notes/Stanford marshmallow experiment.md b/Books/Notes/Stanford marshmallow experiment.md old mode 100644 new mode 100755 diff --git a/Career/AI/AI - Codex.md b/Career/AI/AI - Codex.md old mode 100644 new mode 100755 diff --git a/Career/AI/AI Moc.md b/Career/AI/AI Moc.md old mode 100644 new mode 100755 diff --git a/Career/AI/Data camp AI training.md b/Career/AI/Data camp AI training.md old mode 100644 new mode 100755 diff --git a/Career/API/API Architecture.md b/Career/API/API Architecture.md old mode 100644 new mode 100755 diff --git a/Career/API/ASP.NET Core Web API Fundamental Notes.md b/Career/API/ASP.NET Core Web API Fundamental Notes.md old mode 100644 new mode 100755 diff --git a/Career/API/Restful API.md b/Career/API/Restful API.md old mode 100644 new mode 100755 diff --git a/Career/Attachments/APIOps.png b/Career/Attachments/APIOps.png old mode 100644 new mode 100755 diff --git a/Career/Attachments/Big-O-Notation-3130482830.png b/Career/Attachments/Big-O-Notation-3130482830.png old mode 100644 new mode 100755 diff --git a/Career/Attachments/Pasted image 20260625102144.png b/Career/Attachments/Pasted image 20260625102144.png new file mode 100755 index 0000000..9aede33 Binary files /dev/null and b/Career/Attachments/Pasted image 20260625102144.png differ diff --git a/Career/Attachments/Pasted image 20260625102149.png b/Career/Attachments/Pasted image 20260625102149.png new file mode 100755 index 0000000..9aede33 Binary files /dev/null and b/Career/Attachments/Pasted image 20260625102149.png differ diff --git a/Career/Attachments/Screenshot 2026-01-14 154800.png b/Career/Attachments/Screenshot 2026-01-14 154800.png old mode 100644 new mode 100755 diff --git a/Career/Attachments/adapter-pattern-2.png b/Career/Attachments/adapter-pattern-2.png old mode 100644 new mode 100755 diff --git a/Career/Attachments/adapter-pattern.png b/Career/Attachments/adapter-pattern.png old mode 100644 new mode 100755 diff --git a/Career/Attachments/command-pattern.png b/Career/Attachments/command-pattern.png old mode 100644 new mode 100755 diff --git a/Career/Attachments/composite-pattern.png b/Career/Attachments/composite-pattern.png old mode 100644 new mode 100755 diff --git a/Career/Attachments/decorator-pattern.png b/Career/Attachments/decorator-pattern.png old mode 100644 new mode 100755 diff --git a/Career/Attachments/decorator-problem.png b/Career/Attachments/decorator-problem.png old mode 100644 new mode 100755 diff --git a/Career/Attachments/facade-pattern.png b/Career/Attachments/facade-pattern.png old mode 100644 new mode 100755 diff --git a/Career/Attachments/factory-pattern.png b/Career/Attachments/factory-pattern.png old mode 100644 new mode 100755 diff --git a/Career/Attachments/iterator-pattern.png b/Career/Attachments/iterator-pattern.png old mode 100644 new mode 100755 diff --git a/Career/Attachments/observer-pattern.png b/Career/Attachments/observer-pattern.png old mode 100644 new mode 100755 diff --git a/Career/Attachments/proxy-pattern.png b/Career/Attachments/proxy-pattern.png old mode 100644 new mode 100755 diff --git a/Career/Attachments/singleton-pattern.png b/Career/Attachments/singleton-pattern.png old mode 100644 new mode 100755 diff --git a/Career/Attachments/state-pattern.png b/Career/Attachments/state-pattern.png old mode 100644 new mode 100755 diff --git a/Career/Attachments/structure-pattern.png b/Career/Attachments/structure-pattern.png old mode 100644 new mode 100755 diff --git a/Career/Attachments/template-method-pattern.png b/Career/Attachments/template-method-pattern.png old mode 100644 new mode 100755 diff --git a/Career/Bowling Kata.md b/Career/Bowling Kata.md old mode 100644 new mode 100755 diff --git a/Career/Career MOC.md b/Career/Career MOC.md old mode 100644 new mode 100755 diff --git a/Career/Concepts.md b/Career/Concepts.md old mode 100644 new mode 100755 index c583c65..7ae8b28 --- a/Career/Concepts.md +++ b/Career/Concepts.md @@ -64,12 +64,18 @@ Some core programming concepts that are essential for software development. The - [[OWASP Top 10]] - [[Cross Site Scripting (XSS)]] - [[Output Encoding]] + +# Tech Talks + +- [[OpenShift migration Tech Talk]] +- [[MA4 Notes]] # Concepts to learn and talk about (cs and maths) - [x] xor - [x] big O notation - [x] time complexity - [x] space complexity + - [x] ternary operator - [ ] data structures - [ ] algorithms - [ ] design patterns diff --git a/Career/Database - SQL/Airflow Dags.md b/Career/Database - SQL/Airflow Dags.md old mode 100644 new mode 100755 diff --git a/Career/Database - SQL/Airflow Tasks.md b/Career/Database - SQL/Airflow Tasks.md old mode 100644 new mode 100755 diff --git a/Career/Database - SQL/Airflow.md b/Career/Database - SQL/Airflow.md old mode 100644 new mode 100755 diff --git a/Career/Database - SQL/Attachments/Pasted image 20260603221345.png b/Career/Database - SQL/Attachments/Pasted image 20260603221345.png old mode 100644 new mode 100755 diff --git a/Career/Database - SQL/Attachments/Pasted image 20260619152151.png b/Career/Database - SQL/Attachments/Pasted image 20260619152151.png new file mode 100755 index 0000000..29ef256 Binary files /dev/null and b/Career/Database - SQL/Attachments/Pasted image 20260619152151.png differ diff --git a/Career/Database - SQL/Attachments/Pasted image 20260703150027.png b/Career/Database - SQL/Attachments/Pasted image 20260703150027.png new file mode 100755 index 0000000..5983a12 Binary files /dev/null and b/Career/Database - SQL/Attachments/Pasted image 20260703150027.png differ diff --git a/Career/Database - SQL/Attachments/Pasted image 20260703150047.png b/Career/Database - SQL/Attachments/Pasted image 20260703150047.png new file mode 100755 index 0000000..823d31d Binary files /dev/null and b/Career/Database - SQL/Attachments/Pasted image 20260703150047.png differ diff --git a/Career/Database - SQL/Database MOC.md b/Career/Database - SQL/Database MOC.md old mode 100644 new mode 100755 diff --git a/Career/Database - SQL/Database Permissions, Roles, and Accounts.md b/Career/Database - SQL/Database Permissions, Roles, and Accounts.md old mode 100644 new mode 100755 diff --git a/Career/Database - SQL/Postgres.md b/Career/Database - SQL/Postgres.md old mode 100644 new mode 100755 diff --git a/Career/Database - SQL/SQL Execution Plans.md b/Career/Database - SQL/SQL Execution Plans.md new file mode 100755 index 0000000..3aebbdd --- /dev/null +++ b/Career/Database - SQL/SQL Execution Plans.md @@ -0,0 +1,179 @@ +--- +note type: + - database + - sql + - note +date: 2026-07-03 +done: +link: https://bertwagner.com/posts/introduction-to-sql-server-execution-plans/ +--- +## What is an Execution Plan? + +- SQL Server is a **declarative language**: + - You specify _what_ data you want, not _how_ to retrieve it. +- An **execution plan** shows: + - How SQL Server decides to retrieve the data. + - The sequence of operations (joins, scans, seeks, etc.). + +### Key Idea + +- The **Query Optimizer**: + - Evaluates multiple possible ways to execute a query. + - Chooses a plan that is **“good enough”**, not necessarily the absolute fastest. +- Reason: + - Evaluating every possible plan would be too slow and impractical. + +### When Problems Occur + +- Poor performance happens when: + - The optimizer picks an inefficient plan. +- Causes may include: + - Inaccurate statistics + - Incorrect assumptions about data distribution +- Execution plans help diagnose these issues. + +--- + +## Types of Execution Plan Views + +### 1. Text-Based Execution Plan + +To see an execution plan for your query, you can run `SET SHOWPLAN_ALL ON`. This will provide a text-based tree representation of the plan: + +`SET SHOWPLAN_ALL ON GO --Query +`GO SET SHOWPLAN_ALL OFF GO` + +![[Pasted image 20260703150027.png]] + +### 2. Graphical Execution Plan (Preferred) + +- Generated via: + - **“Display Estimated Execution Plan”** in SSMS +- Features: + - Visual flow of query execution + - Easier to interpret than text-based plans +![[Pasted image 20260703150047.png]] +#### XML View + +- Access via: + - Right-click → “Show Execution Plan XML” +- Contains: + - Detailed metadata and properties not always visible graphically + +--- + +## Estimated vs Actual Execution Plans + +### Estimated Execution Plan + +- Created **before execution** +- Based on: + - Table statistics + - Metadata +- Does **NOT include runtime data** + +--- + +### Actual Execution Plan + +- Created **after execution** +- Includes: + - Actual number of rows processed + - Number of executions + - Runtime metrics + +### Key Difference + +|Feature|Estimated Plan|Actual Plan| +|---|---|---| +|When generated|Before execution|After execution| +|Uses real data|No|Yes| +|Structure|Same|Same| +|Runtime metrics|No|Yes| + +**Important Insight:** + +- The plan structure is usually identical. +- Only the **runtime statistics differ**. + +--- + +## Live Query Statistics (SQL Server 2016+) + +### What It Does + +- Shows execution progress in **real time** +- Combines: + - Estimated plan + live runtime data + +### Benefits + +- Helps identify **bottlenecks quickly** +- Useful for: + - Long-running queries + - Beginners learning execution plans + +### Example Insight + +- If a **Clustered Index Scan** takes most time: + - Focus optimisation efforts there. + +--- + +## Historical Execution Plans + +### 1. Plan Cache + +- SQL Server stores plans for reuse. +- Access via DMV: + - `sys.dm_exec_query_plan` + +#### Key Notes + +- Contains: + - Cached (previously executed) query plans +- Limitations: + - Plans may be removed from cache + - Typically shows **estimated plans only** + +--- + +### 2. Query Store + +- Stores historical query performance data +- Requirements: + - Must be enabled on the database + +#### Benefits + +- Allows: + - Retrieval of past execution plans + - Query performance analysis over time + +--- + +## Why Execution Plans Matter + +- Provide visibility into: + - How SQL Server retrieves data +- Essential for: + - **Performance tuning** + - Identifying inefficient operations + - Diagnosing slow queries + +--- + +## Summary + +- Execution plans reveal **how SQL Server executes queries**. +- The optimizer selects a **“good enough” plan**, not always optimal. +- Main viewing options: + - Text plan + - Graphical plan (most useful) + - XML plan +- Types of plans: + - **Estimated** → Pre-execution + - **Actual** → Includes runtime data +- Advanced tools: + - **Live Query Statistics** → real-time insights + - **Plan Cache & Query Store** → historical analysis diff --git a/Career/Database - SQL/SQL Joins.md b/Career/Database - SQL/SQL Joins.md old mode 100644 new mode 100755 index 9ae6b80..e3638db --- a/Career/Database - SQL/SQL Joins.md +++ b/Career/Database - SQL/SQL Joins.md @@ -3,9 +3,8 @@ note type: - database - theory date: 2026-06-03 -done: +done: true --- - # The SQL JOIN Clause The JOIN clause is used to combine rows from two or more tables, based on a related column between them. @@ -17,4 +16,6 @@ Here are the different types of JOINs in SQL: - 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]] \ No newline at end of file +![[Pasted image 20260603221345.png]] + +![[Pasted image 20260619152151.png]] diff --git a/Career/Database - SQL/Using Joins, Constraints, Normalization, and Subqueries.md b/Career/Database - SQL/Using Joins, Constraints, Normalization, and Subqueries.md old mode 100644 new mode 100755 index 3fe42d4..8b2f00c --- a/Career/Database - SQL/Using Joins, Constraints, Normalization, and Subqueries.md +++ b/Career/Database - SQL/Using Joins, Constraints, Normalization, and Subqueries.md @@ -4,7 +4,7 @@ note type: - database - theory date: 2026-06-03 -done: +done: true link: https://app.pluralsight.com/ilx/video-courses/sql-joins-constraints-normalization-subqueries/course-overview --- # Common Aggregate Functions @@ -771,130 +771,199 @@ Movies_Promotions - `*` = many -# SQL INNER JOINs (Level 4 Notes) +# SQL INNER JOIN — Explained with an Example -## Overview +## Example Tables -- **INNER JOIN** is used to combine rows from two (or more) tables based on a related column. -- It returns **only the matching records** between the tables (the overlapping part). -- Common use case: retrieving related data in a **single query instead of multiple queries**. - -## Key Concepts - -### 1. Problem Without JOIN - -- To get reviews and corresponding movie titles: - 1. Query reviews: SELECT review, movie_id FROM Reviews; - 2. Use returned `movie_id`s to query movies: SELECT title FROM Movies WHERE id IN (1, 3, 4); -- This requires **multiple queries**, which is inefficient. - -### 2. INNER JOIN Syntax +### Movies ``` -SELECT * -FROM Movies -INNER JOIN Reviews -ON Movies.id = Reviews.movie_id; +id | title +---|------------- +1 | Don Juan +2 | The Lost World +3 | Peter Pan +4 | Robin Hood ``` -#### Explanation: - -- `INNER JOIN Reviews`: specifies the table to join. -- `ON Movies.id = Reviews.movie_id`: defines how rows relate: - - `Movies.id` = primary key - - `Reviews.movie_id` = foreign key - -### 3. Result Behaviour - -- Only rows with **matching keys in both tables** are returned. -- Examples: - - Movies without reviews → **excluded** - - Reviews without movies → **excluded** - - A movie with multiple reviews → appears **multiple times** - -#### Example: - -- Movie **"Don Juan"** with 3 reviews → appears 3 times. -- Movie **"Peter Pan"** with no reviews → does not appear. - -### 4. Order of Tables -Both queries return the same result: - -`FROM Movies INNER JOIN Reviews` - -or - -`FROM Reviews INNER JOIN Movies` - -- Because INNER JOIN returns only **matching data**, order doesn't change the result. - -### 5. Selecting Specific Columns - -Instead of retrieving all columns (`SELECT *`), specify only what you need: +### Reviews ``` -SELECT Movies.title, Reviews.review -FROM Movies -INNER JOIN Reviews -ON Movies.id = Reviews.movie_id; +id | movie_id | body +---|----------|------------------- +1 | 1 | Great movie +2 | 1 | Loved it +3 | 1 | Classic +4 | 2 | Not bad +5 | NULL | Random review ``` -- Important: Prefix columns with table names to avoid ambiguity. +## What INNER JOIN Does -## 6. INNER JOIN Across Multiple Tables +Returns **only rows where both tables match**. -You can join more than two tables in a single query. +- Ignores: + - Movies with no reviews + - Reviews with no valid movie -### Example: Get movie title and genres +## Basic Query ``` -SELECT Movies.title, Genres.name -FROM Movies -INNER JOIN Movies_Genres -  ON Movies.id = Movies_Genres.movie_id -INNER JOIN Genres -  ON Movies_Genres.genre_id = Genres.id -WHERE Movies.title = 'Peter Pan'; +SELECT m.title, r.body + +FROM Movies m + +INNER JOIN Reviews r + +ON m.id = r.movie_id; ``` -### How it works: -1. Join **Movies → Movies_Genres** via `movie_id` -2. Join **Movies_Genres → Genres** via `genre_id` -3. Filter for `"Peter Pan"` - -## Visual Understanding - -- Think of INNER JOIN like the **intersection of two circles (Venn diagram)**: - - Left circle = Movies - - Right circle = Reviews - - Result = only the overlapping middle - -## Key Takeaways - -- Use **INNER JOIN** to retrieve related data from multiple tables in one query. -- It only returns **matching rows**. -- Always use the `ON` clause to define relationships. -- Specify columns for cleaner results. -- Multiple joins can be chained for more complex relationships. - -## Quick Example Summary +## Result (conceptually) ``` --- Basic join -SELECT Movies.title, Reviews.review -FROM Movies -INNER JOIN Reviews -ON Movies.id = Reviews.movie_id; - --- Multi-table join -SELECT Movies.title, Genres.name -FROM Movies -INNER JOIN Movies_Genres -  ON Movies.id = Movies_Genres.movie_id -INNER JOIN Genres -  ON Movies_Genres.genre_id = Genres.id; +Don Juan | Great movie +Don Juan | Loved it +Don Juan | Classic +The Lost World | Not bad ``` +## Key Observations + +- Only matching data is returned +- `Don Juan` appears 3 times (3 reviews) +- `Peter Pan` is missing (no reviews) +- `Random review` is missing (`movie_id = NULL`) + +## Why Use INNER JOIN + +Instead of doing this: + +``` +-- Query 1 + +SELECT movie_id, body FROM Reviews; + +-- Query 2 + +SELECT title FROM Movies WHERE id IN (1, 2); +``` + +You can do it in one query: + +``` +SELECT m.title, r.body + +FROM Movies m + +INNER JOIN Reviews r + +ON m.id = r.movie_id; +``` + +Cleaner and more efficient. + +## Table Order + +These are equivalent: + +``` +FROM Movies m + +INNER JOIN Reviews r + +ON m.id = r.movie_id; + +FROM Reviews r + +INNER JOIN Movies m + +ON m.id = r.movie_id; +``` + +Because INNER JOIN only keeps matches. + +## Selecting Specific Columns + +Avoid `SELECT *`: + +``` +SELECT m.title, r.body + +FROM Movies m + +INNER JOIN Reviews r + +ON m.id = r.movie_id; +``` + +This keeps output clean and avoids ambiguity. + + +## INNER JOIN with Multiple Tables + +### Example: Add Genres + +#### Additional Tables + +``` +Movies_Genres +movie_id | genre_id +---------|---------- +1 | 10 +1 | 11 +3 | 12 + +Genres +id | name +---|--------- +10 | Drama +11 | Romance +12 | Fantasy +``` + +### Query + +``` +SELECT m.title, g.name + +FROM Movies m + +INNER JOIN Movies_Genres mg + +  ON m.id = mg.movie_id + +INNER JOIN Genres g + +  ON mg.genre_id = g.id; +``` + +### Result (conceptually) + +``` +Don Juan | Drama +Don Juan | Romance +Peter Pan | Fantasy +``` + +## Mental Model + +Think of INNER JOIN as: + +- “Give me only rows that exist in **both tables**” + +## Behaviour Summary + +| Situation | Included? | +| --------------------- | --------- | +| Movie with reviews | Yes | +| Movie with no reviews | No | +| Review with no movie | No | +| | | + +## One-Line Summary + +INNER JOIN = **only matching rows between tables** + # SQL Aliases (Columns & Tables) ## Column Aliases @@ -982,123 +1051,250 @@ INNER JOIN Genres g ON mg.genre_id = g.id; -# SQL Outer Joins (LEFT & RIGHT) -## Overview +# SQL Outer Joins -Outer joins allow you to combine rows from two tables even when there is no match in one of them. They help ensure that you don’t lose data from one side of the relationship. +## Example Tables + +### Movies + +``` +id | title +---|------------- +1 | Don Juan +2 | The Lost World +3 | Peter Pan +4 | Robin Hood +``` + +### Reviews + +``` +id | movie_id | body +---|----------|------------------- +1 | 1 | Great movie +2 | 1 | Loved it +3 | 1 | Classic +4 | 2 | Not bad +5 | NULL | Random review +``` ## LEFT OUTER JOIN -### Purpose +### What it means -- Returns **all records from the left table** (`Movies`) -- Returns **matching records from the right table** (`Reviews`) -- If no match exists, the right-side columns are filled with `NULL` +“Show me **all movies**, and any reviews they have.” -### Syntax - -``` -SELECT * -FROM Movies -LEFT OUTER JOIN Reviews -ON Movies.id = Reviews.movie_id; -``` - -### Key Observations - -- Every movie appears in the result -- Movies with multiple reviews appear multiple times -- Movies with **no reviews still appear**, with `NULL` values for review columns - -### Example Output Insight - -- `Don Juan` appears **3 times** (3 reviews) -- `Peter Pan` appears **once** with no review (NULL values) - -## Refining the LEFT JOIN - -### Improvements - -1. Use table aliases -2. Select only relevant columns -3. Order results - -### Example Query +### Query ``` SELECT m.title, r.body + FROM Movies m -LEFT OUTER JOIN Reviews r -ON m.id = r.movie_id -ORDER BY r.id; + +LEFT JOIN Reviews r + +ON m.id = r.movie_id; ``` -### Result Behaviour +### Result (conceptually) -- Movies without reviews (e.g. `Peter Pan`) appear **last** due to ordering by `review id` +``` +Don Juan | Great movie +Don Juan | Loved it +Don Juan | Classic +The Lost World | Not bad +Peter Pan | NULL +Robin Hood | NULL +``` + +### Key idea + +- Every movie is shown +- If a movie has no reviews → `NULL` +- If a movie has many reviews → it repeats + +Example: + +- `Don Juan` appears 3 times +- `Peter Pan` appears once with `NULL` + +### How to remember + +> LEFT JOIN = **“Keep everything on the left (Movies)”** ## RIGHT OUTER JOIN -### Purpose +### What it means -- Returns **all records from the right table** (`Reviews`) -- Returns **matching records from the left table** (`Movies`) -- If no match exists, the left-side columns are filled with `NULL` +“Show me **all reviews**, even if they don’t belong to a movie.” -### Syntax - -``` -SELECT * -FROM Movies -RIGHT OUTER JOIN Reviews -ON Movies.id = Reviews.movie_id; -``` - -### Scenario Highlight - -- Some `movie_id` values in `Reviews` are set to `NULL` -- These reviews do not link to any movie - -### Key Observations - -- All reviews are included -- Reviews without a corresponding movie show `NULL` in movie fields - -## Refining the RIGHT JOIN - -### Example Query +### Query ``` SELECT m.title, r.body + FROM Movies m -RIGHT OUTER JOIN Reviews r -ON m.id = r.movie_id -ORDER BY r.id; + +RIGHT JOIN Reviews r + +ON m.id = r.movie_id; ``` -### Result Behaviour +### Result (conceptually) -- All reviews listed -- Reviews with no associated movie have `NULL` titles +``` +Don Juan | Great movie +Don Juan | Loved it +Don Juan | Classic +The Lost World | Not bad +NULL | Random review +``` -## LEFT vs RIGHT JOIN Summary +### Key idea -|Join Type|Includes All From|Missing Matches Show As| +- Every review is shown +- If a review has no movie → `NULL` in movie column + +Example: + +- The `Random review` has no movie → title is `NULL` + +### How to remember + +> RIGHT JOIN = **“Keep everything on the right (Reviews)”** + +## Side-by-Side + +| Situation | LEFT JOIN | RIGHT JOIN | +| --------------------- | ------------------- | ------------------ | +| Movie with no reviews | shown (NULL review) | not shown | +| Review with no movie | not shown | shown (NULL movie) | + + +## Quick Mental Model + +- LEFT JOIN → “I care about **Movies**” +- RIGHT JOIN → “I care about **Reviews**” +- `NULL` = missing relationship + +## One-Line Summary + +- LEFT JOIN → keep all rows from **first table** +- RIGHT JOIN → keep all rows from **second table** + + +# SQL Subqueries (Level 5) + +## Example Tables + +**Movies** + +|id|title|sales|duration| +|---|---|---|---| +|1|Batman|50000|120| +|2|Superman|30000|110| +|3|Iron Man|25000|105| +|4|Robin Hood|45000|140| + +**Promotions** + +|id|movie_id|category| |---|---|---| -|LEFT OUTER JOIN|Left table|NULLs in right columns| -|RIGHT OUTER JOIN|Right table|NULLs in left columns| +|1|1|non-cash| +|2|2|cash| +|3|4|non-cash| -## Key Takeaways +--- -- Use **LEFT JOIN** when you care about all records from the first (left) table -- Use **RIGHT JOIN** when you care about all records from the second (right) table -- `NULL` values indicate missing relationships -- Ordering can affect where unmatched rows appear in results +## What is a Subquery? +- A **subquery** is a query nested inside another query. +- The inner query runs first, and its result is used by the outer query. -- Outer joins ensure you don’t lose unmatched data -- LEFT JOIN = “Show everything from the left” -- RIGHT JOIN = “Show everything from the right” -- Useful for identifying missing relationships and incomplete data +## Example 1: Using `IN` with a Subquery +### Goal + +Find the **sum of sales** for movies with a **non-cash promotion**. + +``` +SELECT SUM(sales) + +FROM Movies + +WHERE id IN ( + +    SELECT movie_id + +    FROM Promotions + +    WHERE category = 'non-cash' + +); +``` +- Inner query returns: `1, 4` +- Outer query sums: `50000 + 45000 = 95000` + +## Alternative: Using a Join + +``` +SELECT SUM(sales) + +FROM Movies + +INNER JOIN Promotions + +  ON Movies.id = Promotions.movie_id + +WHERE category = 'non-cash'; +``` + +- Same result, different approach +- Join is typically more performant + +## Subquery Variants + +``` +SELECT * + +FROM Movies + +WHERE id NOT IN ( + +    SELECT movie_id + +    FROM Promotions + +); +``` + +- Returns movies with **no promotions** + +## Example 2: Aggregate Subquery + +### Goal + +Find movies with **above-average duration** + +``` +SELECT * + +FROM Movies + +WHERE duration > ( + +    SELECT AVG(duration) + +    FROM Movies + +); +``` + +- Average duration = `(120 + 110 + 105 + 140) / 4 = 118.75` +- Result: only **Robin Hood (140)** + +## Key Takeaway + +- Subqueries break problems into steps using intermediate results +- Use them when aggregates or filtering logic can’t be expressed directly in `WHERE` \ No newline at end of file diff --git a/Career/Design Patterns.md b/Career/Design Patterns.md old mode 100644 new mode 100755 diff --git a/Career/Devops/CI-CD Example (site visits).md b/Career/Devops/CI-CD Example (site visits).md old mode 100644 new mode 100755 diff --git a/Career/Devops/CI-CD Summary.md b/Career/Devops/CI-CD Summary.md old mode 100644 new mode 100755 diff --git a/Career/Devops/DevOps Foundations Core Concepts and Fundamentals.md b/Career/Devops/DevOps Foundations Core Concepts and Fundamentals.md new file mode 100755 index 0000000..e82c46c --- /dev/null +++ b/Career/Devops/DevOps Foundations Core Concepts and Fundamentals.md @@ -0,0 +1,599 @@ +--- +note type: + - devops + - theory + - note +date: 2026-06-20 +done: +link: https://app.pluralsight.com/ilx/video-courses/devops-foundations-core-concepts-fundamentals/course-overview +--- +# Introduction + +> **Epistemology** is the branch of philosophy that examines the **nature, origin, and limits of knowledge**, often referred to as the **theory of knowledge**. + +# Lean Software Development + +- Lean originates from **Sakichi Toyoda**, who focused on reducing wasted human effort after observing his mother’s weaving work. +- Core idea: **optimise systems by respecting and improving human work**, not just machines. +- Toyoda’s innovations in **automatic looms** laid the foundation for modern industrial efficiency. +- His son, **Kiichiro Toyoda**, expanded into automobiles → founding **Toyota** (first car: 1936). +- Post-WWII constraints forced Toyota to **avoid mass production** and focus on efficiency instead. +- **Toyota Production System (TPS)**, led by Taichi Ohno, aimed for the **complete elimination of waste**. +- Two key pillars: + - **Just-in-Time**: produce only what’s needed, when needed + - **Jidoka**: stop immediately when defects occur +- **Andon system**: any worker can halt production to fix problems early (quality over speed). +- Term **“Lean”** coined in 1990 to describe this high-efficiency, low-waste system. +- Adapted to software (2003): focuses on **waste reduction, continuous improvement, and delivering value**, closely aligned with **Agile principles**. + +# Lean Software Development – Waste & Principles + +- Central idea in lean: **waste is the primary enemy**. Eliminating it leads to better outcomes. +- Key insight: **optimising for speed alone creates waste**, but **eliminating waste naturally improves speed**. +- In software, this effect is amplified. **Early problem detection drastically reduces cost and impact**. + +## Bug Example (Cost vs Timing) + +- Bug found by **customer** → highest cost (damage to trust/reputation). +- Found **just before release** → still costly (delays). +- Found in **code review** → limited impact (few people involved). +- Found during **development/testing** → minimal cost. +- Found via **test-first (TDD)** → often prevented entirely. + +## Core Concepts + +- **Shift-left thinking**: move detection and quality checks as early as possible. +- **Test-first development (TDD)**: + - Write tests before code + - Forces clarity and simpler, more reliable designs + - Reduces the chance of defects early +- Even though tests aren’t perfect, they **guide safer, more focused development**. + +## First Lean Principle + +- **Eliminate waste**: + - Fixing avoidable bugs = waste + - Rework and repetition = waste + - Human effort spent on low-value tasks = waste + +## Key Philosophy + +- Repetition of simple tasks by humans = **underutilising human potential** +- Lean aims to **free people to do higher-value, creative work** + +# Lean Software Development – Poka‑Yoke & Defect Prevention + +## Inspection Types + +- **Inspection to find defects**: + - Happens **after the process** + - More costly and disruptive +- **Inspection to prevent defects**: + - Happens **during or before the process** + - Cheaper and more effective + +## Poka‑Yoke (Error Prevention) + +- Japanese term meaning **“error avoidance”** +- Focus: **design systems so mistakes are impossible or immediately caught** +- Aim: **build quality into the process, not inspect it afterwards** + +## Everyday Examples + +- **UI validation** (e.g. input masks, dropdowns, live error messages) +- **USB design**: only fits one way +- **Electrical outlets (GFCI)**: shuts off power to prevent harm +- **Manual cars**: must press clutch to start + +## Software & DevOps Applications + +- **Principle of least privilege**: + - Users only have permissions they need + - Prevents both malicious actions and accidental errors +- **Protected branches**: + - No direct commits to deployment branches + - Changes go through **pull requests + reviews + automated tests** +- **IDE checks**: + - Real-time compilation and error detection during coding + +## Test-First Development (TDD) + +- Write **tests before code** +- Forces clarity about: + - Requirements + - Assumptions and expected behaviour +- Helps: + - Prevent defects early + - Keep code simpler and more focused + +## Key Insight + +- Code contains **implicit assumptions** that are hard to debug later +- Writing tests first makes these assumptions **explicit and verifiable** + +## Long-Term Value + +- Tests don’t just prevent initial bugs +- They **guard against regressions** (future defects) + +# Lean Software Development – Certainty & Knowledge + +## Core Idea: Certainty Matters + +- Lean emphasises not just **knowing something**, but **being certain that it is true**. +- Two separate statements: + - “This code works” + - “We are certain this code works” + +## Creating Certainty in Software + +- **Automated testing**: + - Creates knowledge (code works) + - Maintains certainty (re-run tests continuously) +- At release level, certainty comes from accumulated evidence: + - Passing automated tests + - Code reviews + - Successful builds + - Load/performance tests + +## Limits of Human Testing + +- Human testing is **inherently limited** in software: + - Fixing one bug does **not guarantee stability elsewhere** + - Unlike physical systems, software behaviour is **non-linear and unpredictable** +- Conclusion: **minimise reliance on manual testing** + +## Key Insight: Software is Uncertain by Nature + +- Software development is **“predictably unpredictable”** +- Traditional planning often fails because: + - Required knowledge **doesn’t exist upfront** + - It only emerges **during development** + +## Lean / Agile Perspective + +- Lean, Agile, and DevOps: + - **Force teams to confront uncertainty honestly** + - Reject the illusion of perfect upfront planning +- Agile is not idealistic—it’s based on **real-world experience of failure in rigid planning** + +## Software as Research + +- Software development is essentially **research work**: + - Problems are **“wicked”** (can’t be fully defined upfront) + - Understanding evolves through **iteration and experimentation** + +## Principle: Epistemic Humility + +- Accept that: + - Your knowledge is **incomplete and uncertain** +- Plan and work accordingly: + - Short feedback loops + - Continuous validation + - Incremental delivery + +## Practical Implications + +- Build systems that: + - **Continuously generate evidence of correctness** + - Adapt as new knowledge emerges +- Shift focus from: + - “Are we right?” → “How sure are we that we’re right?” + +# Lean Software Development – Defer Commitment + +- **Defer commitment**: avoid making decisions too early when knowledge is still uncertain. +- Early commitments (BDUF – Big Design Up Front) **reduce predictability** because key knowledge doesn’t exist yet. +- **Software development creates knowledge over time**, so decisions improve as the project progresses. + +## Decision Types + +- **Irreversible decisions**: + - Hard or costly to undo + - Should be **delayed as long as possible** + - Allows better-informed choices +- **Reversible decisions**: + - Easy to change later + - Can be made **early to maintain progress** + +## Key Strategy + +- Prioritise **reversible choices over irreversible ones** when possible. +- Make early decisions that **keep options open**, not ones that lock you in. + +## Practical Examples + +- Architecture choices: + - Use modular systems so components can be swapped later (reversible) +- Business analogy: + - Travel insurance or flexible bookings = **paying for reversibility** + - Easy returns (e.g. Amazon, Zappos) encourage decisions because they reduce risk + +## Takeaway + +- **Better decisions come from better information**, which takes time to develop +- Lean encourages: + - **Delay irreversible commitments** + - **Keep options open** + - **Move forward with flexible, changeable decisions** + +# Lean Software Development – Deliver Fast + +## Core Idea: Deliver Fast + +- “Fast” means both **early delivery** and **frequent delivery**. +- Goal: **accelerate feedback and learning**. + +## Deliver Early + +- Release **small increments quickly** (e.g. end of each sprint). +- Even simple outputs (e.g. a mock login page) help: + - Expose issues early + - Trigger useful discussions + - Force setup of delivery processes (CI/CD, version control) + +## Deliver Often + +- Shift from **large, infrequent releases (e.g. quarterly)** to **frequent ones (e.g. weekly)**. +- Frequent releases: + - Reduce pressure to “get everything perfect” + - Allow unfinished features to be safely deferred + +## System-Level Impact + +- Frequent delivery forces teams to: + - **Automate repetitive tasks** + - **Simplify or eliminate unnecessary processes** + +## Key Principle + +- **“If it hurts, do it often”**: + - Increase frequency of painful processes (e.g. releases, testing) + - Forces improvement, automation, and efficiency + +## Practical Mindset + +- Identify risky/problematic areas (“what feels uncomfortable”) +- **Tackle them early and repeatedly** to reduce uncertainty + +# Lean Software Development – Respect People + +## Core Principle: Respect People + +- Lean (Toyota) places **people at the centre of systems**, unlike traditional approaches that treat workers like machines. +- Origin influenced by **Sakichi Toyoda’s human-focused perspective** (seeing work through his mother’s experience). + +## What “Respect People” Really Means + +- Not just: + - Being polite + - Fairness or “HR-style” gestures +- Instead, it means: + - **Empowering individuals** + - **Giving ownership and responsibility** + - **Trusting people to contribute and improve systems** + +## Key Idea + +- “People operate the system, not the other way around.” +- Workers are **intelligent contributors**, not interchangeable parts. + +## Practical Implications + +- Give teams: + - Authority to **stop processes and fix issues** + - Opportunity to **suggest improvements** +- Build systems where: + - **Anyone can contribute ideas** + - Collaboration is encouraged over rigid hierarchy + +## Business Impact + +- Human-centred systems: + - **Outperform top-down, rigid structures** + - Improve innovation and adaptability +- Benefits include: + - Lower turnover + - Higher engagement + - Better overall results + +## Risks of Ignoring This Principle + +- Treating people like machines leads to: + - Poor morale + - Lack of innovation + - Long-term organisational failure +# Lean Software Development – Optimising the Whole System + +## Core Idea: System Thinking Over Local Optimisation + +- Focusing on improving **one part of the system (e.g. development speed)** can harm the **overall system performance**. +- True optimisation comes from improving the **entire value stream**, not individual components. + +## Example: Test-Driven Development (TDD) + +- TDD may: + - **Slow down development initially** +- But it: + - Eliminates or reduces **manual testing effort** + - Prevents **regressions with automated tests** + - Creates a long-term **quality safety net** +- Net effect: **faster, more efficient system overall** + +## The Problem: Suboptimisation + +- Optimising individual parts ≠ optimising the system +- Common mistake: + - Managers focus on **visible metrics (e.g. dev time)** + - Ignore downstream effects (e.g. testing, defects, rework) + +## Key Insight (Elon Musk Quote) + +- “Optimising something that shouldn’t exist” = waste +- Highlights: + - Even smart people fall into **misplaced optimisation** + - We often optimise **means instead of outcomes** + +## Evaluating System Components + +Every part of a system: + +1. **Adds value** → keep and improve +2. **Hurts the system** → fix or remove +3. **Adds no value** → eliminate + +## Lean Mindset + +- “The best part is no part. The best process is no process.” +- Remove: + - Unnecessary steps + - Redundant processes + - Inefficient workflows + +## Practical Implications + +- Automate instead of manually repeating tasks +- Eliminate processes that **don’t contribute to value** +- Focus on: + - **Flow of work across the whole system** + - **End-to-end efficiency**, not local metrics + +## Takeaway + +- **Optimise the system, not individual parts** +- TDD and automation may slow one step, but improve the **entire pipeline** +- True lean improvement often means: + - **Removing what shouldn’t exist** rather than refining it + +# Lean Software Development – Waste (7 Types & System View) + +## Core Idea: What is Waste? + +- Waste = **any activity that does not add value to the end product**. +- Important distinction: + - Something may look like waste **in hindsight (final product)** + - But may still be **necessary in the process (learning, iteration)** +- Lean requires **careful identification of real waste vs necessary work** + +## The 7 Types of Waste (Lean Development) + +### 1. Partially Done Work + +- Work that is **not fully complete or deployed** +- Creates: + - Hidden effort + - False sense of progress +- Example: + - Code written without tests → _looks done but isn’t actually usable_ + +### 2. Extra Features (Overproduction) + +- Features built **too early or unnecessarily (“just in case”)** +- Equivalent to **unused inventory** in manufacturing +- Root cause: + - Poor adaptability / fear of future change +- Lean approach: + - Build **just in time**, not “just in case” + +### 3. Relearning + +- Re-acquiring knowledge that was **already known before** +- Causes: + - Poor documentation + - Staff turnover + - Knowledge silos +- Mitigation: + - Documentation, automation, simpler design + - Cross-training team members + +**Example** + +- Losing key developers → project knowledge lost → costly recovery + +### 4. Task Switching + +- Switching between tasks reduces efficiency significantly +- Cognitive penalty ≈ **40% productivity loss** +- Humans **cannot truly multitask** +- Impact: + - Slower delivery + - More errors + +### 5. Delays + +- Idle time waiting for: + - Decisions + - Information + - Approvals +- Causes: + - Centralised authority + - Poor communication (silos) +- Lean solution: + - **Empower teams, improve access to information** + +### 6. Defects + +- Errors that require **rework and disruption** +- Effects: + - Task switching + - Relearning context + - Delays and wasted effort +- Worse when found late: + - May require multiple people + - May be harder to fix + +### 7. Handoffs (implicit in examples) + +- Knowledge transfer between people/teams +- Risk: + - Miscommunication + - Loss of context +- Example: + - Poorly transferred project → failure after staff leave + +## Key Insight: Wastes Are Connected + +- Each waste often results from **missing lean principles**: + - Lack of **knowledge creation** → relearning + - Lack of **respect for people** → delays + - Poor **defect prevention** → defects + rework + +## System-Level Impact of Defects + +- Defects amplify multiple wastes: + + - Trigger **task switching** + - Require **relearning context** + - Create **delays** + - Increase **partially done work** +- Extreme case: + + - Original developer unavailable → severe handoff waste + +## Real-World Example Insight + +- Loss of key employees caused: + - Knowledge loss + - Project failure + - Major financial loss +- Preventive actions could include: + - Better knowledge capture (recordings, docs) + - Cross-training team members + - Retention incentives + +## Takeaway + +- Waste is **any non-value-adding effort across the system** +- Most waste comes from: + - Poor knowledge management + - Late feedback + - Weak processes and structure +- **Defects are a critical signal**: + - If defect rates are high, other wastes are likely unmanaged + +# Lean Software Development – Practical Application (DevOps) + +## Core Idea: Focus on Impact (Pareto Principle) + +- Use **Pareto (80/20 analysis)**: + - **80% of problems come from 20% of causes** +- In DevOps, biggest win: + - **Reduce defect rate first** +- Focus on the **“bad neighbourhood” in code**: + - Areas everyone avoids → highest impact if fixed +- Approach: + - **Go where the pain is (fear-driven development)** + +## Practical Strategy to Reduce Waste + +### 1. Target High-Impact Problems First + +- Identify: + - Bug hotspots + - Fragile systems +- Fixing these yields **disproportionate improvements** + +**Example** + +- A single unstable module causing most outages → prioritise fixing it + +### 2. Improve Developer Experience (Respect People) + +- If developers are: + - Slow + - Frustrated + - Error-prone +- That is a **system failure**, not a people problem + +**Example** + +- Inability to debug locally: + - Leads to slow, painful development + - Fixing this improves speed and quality immediately + +### 3. Prioritise User Pain (Internal Customers) + +- Treat internal teams (e.g. support engineers) as **customers** +- Fix their tooling issues first + +**Example** + +- Improving admin tools → enables support to resolve issues faster → better customer outcomes + +### 4. Reduce Handoffs (Cross-Training) + +- Train multiple people to perform key tasks +- Avoid reliance on individuals + +**Example** + +- Rotate responsibility for complex processes → spreads knowledge → reduces risk + +### 5. Simplify and Standardise Systems + +- Look for duplication: + - Similar processes/tools doing the same job +- Consolidate into **one flexible system** + +**Example** + +- Replace multiple build pipelines with **one parameterised build system** + +### 6. Automate Repetition + +- Rule: + - If you do something **twice**, consider automation before the third time +- Benefits: + - Reduces waste + - Improves consistency + - Frees up human effort + +**Example** + +- Automate deployments, testing, or data imports + +## Key Lean Connections + +- **Reduce defects** → biggest system-wide gain +- **Respect people** → improve how work actually gets done +- **Eliminate waste** → focus on high-value activities +- **Create knowledge** → through automation, documentation, and sharing + +## Takeaway + +- Start with **where the pain is highest**, not what’s easiest +- Improve systems by: + - Fixing bottlenecks + - Empowering people + - Automating repetitive work +- Lean DevOps isn’t about doing small improvements everywhere—it’s about **making the biggest difference first** + +## Summary + +- Use **80/20 thinking** to prioritise work +- Focus on: + - High-defect areas + - Developer productivity + - Tool usability +- Standardise, automate, and cross-train to reduce waste +- Always aim to **improve the whole system, not just individual parts** \ No newline at end of file diff --git a/Career/Java Portswrigger Test.md b/Career/Java Portswrigger Test.md old mode 100644 new mode 100755 diff --git a/Career/Job applications.md b/Career/Job applications.md old mode 100644 new mode 100755 diff --git a/Career/MVP + MVT.md b/Career/MVP + MVT.md old mode 100644 new mode 100755 diff --git a/Career/Microlise/121 - 02.07.2026.md b/Career/Microlise/121 - 02.07.2026.md new file mode 100755 index 0000000..b4cde50 --- /dev/null +++ b/Career/Microlise/121 - 02.07.2026.md @@ -0,0 +1,4 @@ +- Look on SQL Execution plans +- https://www.jetbrains.com/help/dotmemory/How_to_Find_a_Memory_Leak.html + + diff --git a/Career/Microlise/APIM.md b/Career/Microlise/APIM.md old mode 100644 new mode 100755 diff --git a/Career/Microlise/Competencies/Synchronous vs Asynchronous Dataflow Design.md b/Career/Microlise/Competencies/Synchronous vs Asynchronous Dataflow Design.md new file mode 100755 index 0000000..0c6f08b --- /dev/null +++ b/Career/Microlise/Competencies/Synchronous vs Asynchronous Dataflow Design.md @@ -0,0 +1,440 @@ +# Competency Evidence: Synchronous vs Asynchronous Dataflow Design + +**Competency:** Discerning between synchronous and asynchronous programming to improve dataflow choices within an application. + +**Author:** Zaine Qayyum +**Team:** Osmosis +**Date:** June 2026 +**Primary artefact:** Dora Orchestrator Airflow pipeline (`DoraOrchestrator` DAG) + +--- + +## 1. Competency Statement + +### Value of achieving this competency + +Being able to discern between using synchronous and asynchronous programming to improve dataflow choices within your application. + +### Scenario mapping + +The competency scenario describes fetching data from multiple sources to populate a dashboard, where some data can be displayed immediately and some depends on other data being available first. The Dora Orchestrator pipeline is a direct realisation of this scenario: + +- **Independent data domains** (builds, deployments, releases/environments) can be collected in parallel as soon as staging is prepared. + +- **Dependent data domains** (repositories → pull requests → commits; work items and threads after pull requests) must wait for upstream parquet outputs before they can run. + +- **A merge barrier** ensures all staging data is complete before the datamart is updated for PowerBI consumption. + + +### My role + +I was the primary author and maintainer of the Dora Orchestrator pipeline, including the orchestrator DAG, all collection scripts, unit tests, and the pull requests cited in this document. + +--- + +## 2. Problem Context + +### Business need + +The Osmosis team needed to surface DORA (DevOps Research and Assessment) metrics via PowerBI dashboards. Metrics are derived from multiple Azure DevOps (AZDO) and SonarQube API domains: teams, systems, repositories, pull requests, commits, work items, threads, builds, deployments, releases, and environments. + +### Original approach + +Data was queried directly from AZDO APIs inside PowerBI. This was brittle, tightly coupled, and effectively serial — each query blocked the next, with no orchestration layer to manage dependencies or parallelise independent fetches. + +### New approach + +A nightly Airflow orchestrator (`DoraOrchestrator`) collects data from AZDO and SonarQube APIs, writes to staging tables in `DoraDatabase_DEV`, executes merge stored procedures, and exposes the result to PowerBI via the [Dora DataMart](https://azdo.microlise.com/MicroliseCollection/Microlise/_git/DataMart.Academy.DoraMetrics). + +### Performance and dataflow constraints + +1. **Many independent API domains** — builds, deployments, and releases do not depend on repository metadata and can run concurrently. + +2. **Strict cross-domain dependencies** — commits require pull request IDs; pull requests require repository IDs; repositories require team/system enrichment. + +3. **Large payloads** — tens of thousands of records per domain; inter-task data transfer must not use Airflow's metadata database. + +4. **Operational reliability** — daily 1am schedule, Slack failure alerts, and 80%+ unit test coverage across all scripts. + + +--- + +## 3. Architecture Overview + +The orchestrator is defined in `Dags/DAG_Osmosis_DoraOrchestrator.py`. Collection logic lives in `Dags/OSMOSIS_DoraMetrics_Scripts/`. + +### DAG dependency graph + +```mermaid +flowchart TD + setup[clear_create_directory_start] + truncate[truncate_staging_tables] + builds[builds TaskGroup] + systemTeams[system_teams] + repositories[repositories] + pullRequests[pull_requests] + commits[commits] + workItem[work_item] + threads[threads] + deployments[deployments TaskGroup] + releases[releases_and_environments TaskGroup] + merge[merge_staging_to_data_tables] + cleanup[clear_create_directory_end] + + setup --> truncate + truncate --> builds + truncate --> systemTeams + truncate --> deployments + truncate --> releases + systemTeams --> repositories --> pullRequests --> commits --> merge + pullRequests --> workItem --> threads --> merge + builds --> merge + deployments --> merge + releases --> merge + merge --> cleanup +``` + +### Orchestrator dependency declarations + +The parallel and serial structure is encoded explicitly in the DAG: + +```310:316:Dags/DAG_Osmosis_DoraOrchestrator.py + clear_create_directory_start >> truncate_staging_tables_task + truncate_staging_tables_task >> builds >> merge_staging_to_data_tables_task + truncate_staging_tables_task >> system_teams >> repositories >> pull_requests >> commits >> merge_staging_to_data_tables_task + pull_requests >> work_item >> threads >> merge_staging_to_data_tables_task + truncate_staging_tables_task >> deployments >> merge_staging_to_data_tables_task + truncate_staging_tables_task >> releases_and_environments >> merge_staging_to_data_tables_task + merge_staging_to_data_tables_task >> clear_create_directory_end +``` + +Airflow's scheduler uses this graph to run independent branches on separate workers concurrently, while respecting serial constraints within each branch. + +--- + +## 4. Design Decisions — Parallel vs Serial + +| | | | +|---|---|---| +|Dataflow path|Execution model|Rationale| +|`builds`|Parallel from truncate|Builds are fetched from a single AZDO endpoint with continuation tokens; no dependency on teams/repos parquet| +|`deployments`|Parallel from truncate|Independent AZDO release deployment API domain| +|`releases_and_environments`|Parallel from truncate; fan-out inside group|One fetch produces releases, artifacts, and environments parquet files; two insert tasks run in parallel after fetch| +|`system_teams → repositories → pull_requests → commits`|Serial chain|Each step reads parquet written by the previous step (e.g. commits reads `pull_requests.parquet`)| +|`work_item → threads`|Serial after `pull_requests`|Work items and threads are collected after the PR domain is available| +|`merge_staging_to_data_tables`|Barrier (waits for all branches)|Staging must be complete before merge procedures update production tables| +|`clear_create_directory_end`|Serial after merge|Cleanup only after all data is persisted| + +### Parallel fan-out within releases + +Inside the `releases_and_environments` TaskGroup, a single fetch task fans out to two independent insert tasks: + +```276:278:Dags/DAG_Osmosis_DoraOrchestrator.py + fetch_all_releases_task >> insert_releases_staging_task + + fetch_all_releases_task >> insert_environments_staging_task +``` + +This mirrors the dashboard scenario: once release data is fetched, releases and environments can be inserted concurrently without waiting on each other. + +### Serial handoff via parquet files + +Downstream tasks read files produced by upstream tasks. For example, commits depend on pull request data: + +```19:31:Dags/OSMOSIS_DoraMetrics_Scripts/Commits.py +def fetch_all_commits(**context): + collection_directory = parquet_setup(COLLECTION_NAME) + os.makedirs(collection_directory, exist_ok=True) + + pull_requests_parquet_path = os.path.join(collection_directory, "pull_requests.parquet") + + pull_requests_df = pd.read_parquet(pull_requests_parquet_path) + repository_id = 'repository.id' + + pairs_df = pull_requests_df[['pullRequestId', repository_id]].dropna() + pairs_df['pullRequestId'] = pairs_df['pullRequestId'].astype(int) + pairs_df[repository_id] = pairs_df[repository_id].astype(str) + pairs = list(pairs_df.itertuples(index=False, name=None)) +``` + +This serial constraint is intentional: commits cannot be meaningfully collected until pull requests exist. + +--- + +## 5. Synchronous vs Asynchronous — Honest Tradeoff Analysis + +This section distinguishes two layers of concurrency in the pipeline and explains why each approach was chosen. + +### Layer 1: Orchestration-level concurrency (used) + +**What it is:** Airflow runs independent TaskGroups on separate worker processes concurrently. This is workflow parallelism, not language-level `async`/`await`. + +**Evidence:** Four branches fan out from `truncate_staging_tables_task` (builds, system chain, deployments, releases). The Airflow scheduler determines which tasks are runnable based on the dependency graph. + +**Why this was the right choice:** + +- Dependencies between domains are explicit and visible in the DAG graph. + +- Each domain is an isolated failure unit with its own retry semantics and Slack alert. + +- Process-level parallelism scales with Airflow worker pool capacity without rewriting collection scripts. + + +### Layer 2: In-task I/O (synchronous — used) + +**What it is:** Within each task, HTTP and database calls are blocking and sequential. There is no `async`/`await`, `asyncio`, threading, or `concurrent.futures` usage anywhere in `OSMOSIS_DoraMetrics_Scripts/`. + +**Evidence — synchronous per-repo API loop in pull requests:** + +```65:68:Dags/OSMOSIS_DoraMetrics_Scripts/PullRequests.py + for repo_id in repo_ids: + pull_requests = fetch_pull_requests(repo_id) or [] + + repo_url = f"https://azdo.microlise.com/MicroliseCollection/_apis/git/repositories/{repo_id}/" +``` + +Each `fetch_pull_requests` call blocks on `HttpHook.run()` until the AZDO API responds. Nested loops also make additional blocking calls per pull request for commit dates. + +**Evidence — batched but sequential work item fetches:** + +```45:51:Dags/OSMOSIS_DoraMetrics_Scripts/WorkItems.py + for batch in spilt_json_into_chunks(work_item_ids, 200): + ids_csv = ",".join(map(str, batch)) + endpoint = ENDPOINT_BASE + ids_csv + + response = get_api_information(WEBHOOK, endpoint, data=None, headers=None, api_name="Work Items") + items = extract_json(response, "value") + all_work_items.extend(items) +``` + +Batches of 200 reduce request count, but each batch is fetched sequentially. + +**Why synchronous in-task I/O was chosen:** + +1. **Airflow already parallelises at the DAG layer** — adding in-process async would overlap with worker-level concurrency without simplifying the dependency graph. + +2. **Predictable API rate-limit behaviour** — sequential calls per worker are easier to reason about than concurrent requests from multiple async coroutines. + +3. **Simpler error handling and testability** — each callable is a plain Python function with 80%+ unit test coverage across all domains. + +4. **Bounded task scope** — each task has a clear start (read parquet / call API) and end (write parquet / insert staging), which maps cleanly to Airflow's task lifecycle. + + +### Layer 3: Language-level async (not used — consciously deferred) + +In-process `asyncio` or thread-pool concurrency could reduce per-task runtime for I/O-bound loops (e.g. per-repo PR fetches, per-PR commit fetches). This was not implemented because: + +- It would not remove the need for DAG-level dependency management between domains. + +- It would complicate error handling, logging, and unit testing within each script. + +- API throttling risk increases with concurrent in-task requests. + +- The primary performance gain was achieved by parallelising independent domains at the orchestration layer, not by parallelising API calls within a single domain. + + +This is an example of **discernment**: recognising where concurrency adds value (independent domains) and where synchronous execution is the simpler correct choice (within a single domain's collection task). + +### Mapping to C# async concepts + +The suggested training covers C# `async`/`await` and `Task`. The conceptual mapping to this Python/Airflow pipeline is: + +| | | +|---|---| +|C# concept|Dora Orchestrator equivalent| +|`await` on independent I/O|Parallel Airflow TaskGroups after truncate| +|`await` on dependent I/O|Serial TaskGroup chain with parquet handoffs| +|`Task.WhenAll`|Multiple branches converging at merge barrier| +|Blocking synchronous I/O|`HttpHook.run()` loops inside PythonOperator callables| +|Choosing async vs sync|DAG dependency design + XCom vs parquet dataflow decision (PR 24206)| + +--- + +## 6. Key Pull Request Evidence + +### PR 23806 — Merge Dora Metrics branch into Main + +**Link:** [PR 23806](https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Airflow/pullrequest/23806) + +**Summary:** Initial delivery of the Dora Orchestrator pipeline. Moved from direct PowerBI API queries to a distributed Airflow + datamart architecture. Introduced the orchestrator DAG with TaskGroups for each AZDO domain, staging table population, merge procedures, Slack failure alerts, and unit tests exceeding 80% coverage. + +**Dataflow relevance:** Established the foundational dependency structure and the principle that independent AZDO domains should be orchestrated rather than queried ad hoc. + +**DAG structure diagram (from PR):** +PR 23806 DAG structure + +--- + +### PR 24206 — Changing XCom to parquets (primary evidence) + +**Link:** [PR 24206](https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Airflow/pullrequest/24206) +**Work item:** #106945 + +**Problem (from PR description):** + +> This pull request makes changes mainly to the way data is being transferred across different `tasks`. As we are using `task groups` to orchestrate the flow of data, we originally used `xcom` to pull and push data between different tasks; so for example: +> +> `fetch_all_builds runs -> pushes to xcom -> fetch_all_work_items_per_build then runs but pulls the data pushed to xcom`. +> +> Problems with this: xcom is not suitable for large amounts of data, as the docs state: "... but they are only designed for small amounts of data; do not use them to pass around large values, like dataframes". When we first ran the DAG in the DEV environment, we ran into a memory issue, which was regarding xcom not being able to handle large amounts of data. + +**Solution (from PR description):** + +> Solution: Use `parquets` for writing and reading data that are transferred between tasks. As these are meant for dataframes and for large amounts of data, it makes sense to write to storage and not the airflow metadata database. +> +> The parquet folder is created in the `shared_folder` through the task `clear_create_directory` which calls the script `ClearAndCreateCollectionDirectory`. + +**Dataflow relevance:** This is the clearest example of discerning between two data-passing strategies. XCom is synchronous and lightweight (metadata DB) but wrong for large payloads. Parquet files on shared storage are the correct handoff mechanism for dataframe-sized datasets between tasks. All fetch tasks were updated with `do_xcom_push=False`. + +**Implementation:** Shared folder path resolved via `parquet_setup()` in `Osmosis_Helper.py`; directory created by `ClearAndCreateCollectionDirectory.py` at DAG start. + +**DAG structure diagram (from PR):** +PR 24206 DAG structure + +--- + +### PR 24333 — Remove the cyclic task + +**Link:** [PR 24333](https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Airflow/pullrequest/24333) +**Work item:** #108242 + +**Problem (from PR description):** + +> The task `clear_create_directory` was called at the start and at the end, which caused a cycle loop. This PR removes that by creating separate tasks. + +**Solution:** Split into `clear_create_directory_start` and `clear_create_directory_end`, preserving setup/cleanup behaviour while making the graph acyclic. + +**Dataflow relevance:** A directed acyclic graph (DAG) is a prerequisite for correct parallel scheduling. A cyclic dependency would prevent Airflow from determining a valid execution order, breaking the parallel branches designed in PR 24206. This fix demonstrates understanding that dataflow graph structure directly affects concurrency. + +--- + +### PR 24378 — Fixing the releases DAG + +**Link:** [PR 24378](https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Airflow/pullrequest/24378) +**Work item:** #108316 + +**Summary:** Refined the releases/environments TaskGroup. Removed unnecessary normalisation, corrected validation from `1-m` to `m-m` cardinality (one release can have multiple artifacts), and cleaned up redundant variables. + +**Dataflow relevance:** Corrected the fan-out pattern where a single `fetch_all_releases` task produces data consumed by parallel `insert_releases_staging` and `insert_environments_staging` tasks. Accurate cardinality modelling ensures parallel insert tasks receive correctly shaped data. + +--- + +### Additional supporting PRs + +| | | | +|---|---|---| +|PR|Title|Relevance| +|[24012](https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Airflow/pullrequest/24012)|Added a schedule for the dora dag at 1 am|Operationalised daily concurrent collection window| +|[26618](https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Airflow/pullrequest/26618)|Adding a conversion to GUID from null repo guid values|Data integrity fix in repository enrichment chain| +|[29337](https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Airflow/pullrequest/29337)|Updating the SQ portfolio links - Dora DAG|Maintained serial dependency chain for system/repo enrichment| +|[31719](https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Airflow/pullrequest/31719)|Enriching systems with nested SQ Portfolios|Replaced hardcoded portfolio names with SonarQube API-driven nested portfolio fetch| + +--- + +## 7. Outcomes and Impact + +| | | +|---|---| +|Outcome|Detail| +|Parallel collection of independent domains|Builds, deployments, and releases/environments run concurrently after staging truncate, reducing wall-clock time versus a fully serial pipeline| +|DEV memory issue resolved|PR 24206 eliminated XCom as the inter-task transport for large dataframes, fixing the memory failure encountered on first DEV run| +|Correct DAG scheduling|PR 24333 removed the cyclic dependency, enabling Airflow to schedule parallel branches correctly| +|Daily reliable execution|PR 24012 added 1am cron schedule for unattended nightly collection| +|Test coverage maintained|Unit tests in `Dags/tests/run/Osmosis_DoraMetrics_Scripts_Tests/` maintained 80%+ coverage across all refactors| +|PowerBI-ready datamart|Merge procedures atomically promote staging data to production tables for dashboard consumption| + +--- + +## 8. Reflection and Future Improvements + +### What I would do differently with hindsight + +The orchestration-layer parallelism delivered the largest performance gain for the least complexity. If per-task runtime becomes a bottleneck, the highest-impact candidates for in-task concurrency are: + +- **PullRequests.py** — nested per-repo, per-PR API loops (I/O-bound, embarrassingly parallel across repos) + +- **Commits.py** — per-PR commit fetches (I/O-bound, parallelisable across PR pairs) + + +Any move to in-process async or thread-pool concurrency would require: + +1. AZDO API rate-limit analysis to avoid throttling + +2. Airflow worker memory profiling under concurrent requests + +3. Updated unit tests for concurrent error paths + +4. Clear logging to preserve observability per domain + + +### Competency demonstration summary + +This work evidences the competency not by using `async`/`await` everywhere, but by making deliberate dataflow choices at two levels: + +1. **Where to parallelise** — independent AZDO domains via Airflow TaskGroup branches + +2. **Where to serialise** — dependent domains via parquet handoffs and explicit `>>` dependencies + +3. **Where to stay synchronous** — blocking API calls within tasks, because orchestration-layer concurrency already addresses the primary bottleneck + +4. **Where to change transport mechanism** — XCom to parquet (PR 24206), because the synchronous metadata DB was the wrong medium for large async-safe handoffs + + +--- + +## 9. Appendix + +### File inventory + +| | | +|---|---| +|File|Purpose| +|`Dags/DAG_Osmosis_DoraOrchestrator.py`|Main orchestrator DAG — dependency graph, TaskGroups, merge barrier| +|`Dags/OSMOSIS_DoraMetrics_Scripts/SystemsTeams.py`|Teams and systems collection| +|`Dags/OSMOSIS_DoraMetrics_Scripts/Repositories.py`|Repository fetch and SonarQube enrichment| +|`Dags/OSMOSIS_DoraMetrics_Scripts/PullRequests.py`|Pull request collection (sync per-repo loops)| +|`Dags/OSMOSIS_DoraMetrics_Scripts/Commits.py`|Commit collection (reads PR parquet)| +|`Dags/OSMOSIS_DoraMetrics_Scripts/WorkItems.py`|Work item ID fetch and batched detail fetch| +|`Dags/OSMOSIS_DoraMetrics_Scripts/Threads.py`|Thread collection| +|`Dags/OSMOSIS_DoraMetrics_Scripts/Builds.py`|Build and build-work-item collection| +|`Dags/OSMOSIS_DoraMetrics_Scripts/Deployments.py`|Deployment collection| +|`Dags/OSMOSIS_DoraMetrics_Scripts/ReleasesAndEnvironments.py`|Release/environment fetch with parallel inserts| +|`Dags/OSMOSIS_DoraMetrics_Scripts/Osmosis_Helper.py`|Shared utilities — API helpers, parquet I/O, Slack alerts| +|`Dags/OSMOSIS_DoraMetrics_Scripts/ClearAndCreateCollectionDirectory.py`|Shared folder setup/cleanup| +|`Dags/tests/run/Osmosis_DoraMetrics_Scripts_Tests/`|Unit tests for all collection scripts| + +### Pull request links + +| | | +|---|---| +|PR|URL| +|23806|[https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Airflow/pullrequest/23806](https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Airflow/pullrequest/23806)| +|24012|[https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Airflow/pullrequest/24012](https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Airflow/pullrequest/24012)| +|24206|[https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Airflow/pullrequest/24206](https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Airflow/pullrequest/24206)| +|24333|[https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Airflow/pullrequest/24333](https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Airflow/pullrequest/24333)| +|24378|[https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Airflow/pullrequest/24378](https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Airflow/pullrequest/24378)| +|26618|[https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Airflow/pullrequest/26618](https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Airflow/pullrequest/26618)| +|29337|[https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Airflow/pullrequest/29337](https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Airflow/pullrequest/29337)| +|31719|[https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Airflow/pullrequest/31719](https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Airflow/pullrequest/31719)| + +### Related repositories and infrastructure + +| | | +|---|---| +|Resource|Link| +|Dora DataMart|[https://azdo.microlise.com/MicroliseCollection/Microlise/_git/DataMart.Academy.DoraMetrics](https://azdo.microlise.com/MicroliseCollection/Microlise/_git/DataMart.Academy.DoraMetrics)| +|Airflow deployment pipeline|[https://azdo.microlise.com/MicroliseCollection/Microlise/_release?_a=releases&view=mine&definitionId=970](https://azdo.microlise.com/MicroliseCollection/Microlise/_release?_a=releases&view=mine&definitionId=970)| +|Connection deployment pipeline|[https://azdo.microlise.com/MicroliseCollection/Microlise/_release?_a=releases&view=mine&definitionId=225](https://azdo.microlise.com/MicroliseCollection/Microlise/_release?_a=releases&view=mine&definitionId=225)| +|Slack alerts channel|[https://microlise.slack.com/archives/C09KD6S57CJ](https://microlise.slack.com/archives/C09KD6S57CJ)| + +### Suggested training + +**Course:** Async Programming in C# +**Link:** [https://www.linkedin.com/learning/async-programming-in-c-sharp?u=94030082](https://www.linkedin.com/learning/async-programming-in-c-sharp?u=94030082) +**Duration:** 3h 35m + +**Conceptual mapping:** The C# course covers when to use `async`/`await` versus blocking calls, how to compose concurrent operations with `Task.WhenAll`, and how to avoid common pitfalls with shared state. These concepts map directly to the dataflow decisions in this pipeline — the mechanism differs (Airflow orchestration + synchronous Python vs C# async tasks), but the discernment skill is the same: identify independent work that can proceed concurrently, respect dependencies that require serialisation, and choose the right transport mechanism for data between steps. + +--- + +_This document is standalone evidence for the Async Programming competency. It can be submitted directly to a competency portal or pasted into Confluence._ \ No newline at end of file diff --git a/Career/Microlise/ESS ESP/ESP Applications.md b/Career/Microlise/ESS ESP/ESP Applications.md old mode 100644 new mode 100755 diff --git a/Career/Microlise/ESS ESP/ESP Database.md b/Career/Microlise/ESS ESP/ESP Database.md old mode 100644 new mode 100755 diff --git a/Career/Microlise/ESS ESP/ESP Deploy Stages.md b/Career/Microlise/ESS ESP/ESP Deploy Stages.md old mode 100644 new mode 100755 diff --git a/Career/Microlise/ESS ESP/ESP Glossary.md b/Career/Microlise/ESS ESP/ESP Glossary.md old mode 100644 new mode 100755 diff --git a/Career/Microlise/ESS ESP/ESP Known Issues and Risks.md b/Career/Microlise/ESS ESP/ESP Known Issues and Risks.md old mode 100644 new mode 100755 diff --git a/Career/Microlise/ESS ESP/ESP Manifest.md b/Career/Microlise/ESS ESP/ESP Manifest.md old mode 100644 new mode 100755 diff --git a/Career/Microlise/ESS ESP/ESP OQ.md b/Career/Microlise/ESS ESP/ESP OQ.md old mode 100644 new mode 100755 diff --git a/Career/Microlise/ESS ESP/ESP Pipeline.md b/Career/Microlise/ESS ESP/ESP Pipeline.md old mode 100644 new mode 100755 diff --git a/Career/Microlise/ESS ESP/ESP Scripts.md b/Career/Microlise/ESS ESP/ESP Scripts.md old mode 100644 new mode 100755 diff --git a/Career/Microlise/ESS ESP/ESS ESP Index.md b/Career/Microlise/ESS ESP/ESS ESP Index.md old mode 100644 new mode 100755 diff --git a/Career/Microlise/ESS ESP/Microlise - ESS.md b/Career/Microlise/ESS ESP/Microlise - ESS.md old mode 100644 new mode 100755 diff --git a/Career/Microlise/ESS ESP/Remote-Session Script.md b/Career/Microlise/ESS ESP/Remote-Session Script.md new file mode 100755 index 0000000..3dc637a --- /dev/null +++ b/Career/Microlise/ESS ESP/Remote-Session Script.md @@ -0,0 +1,224 @@ +--- +note type: + - ess + - note +date: 2026-06-11 +done: +--- +## Reference script (TMC `Session.ps1`) + +### 1. What is the pool key? + +The **server name** string (`$serverName`). + +```mermaid +flowchart LR + serverName["serverName: APP01"] + pool["remoteSessionPool hashtable"] + session["PSSession object"] + + serverName -->|"used as key"| pool + pool --> session +``` + +Same server name → same pool entry. Different server → different entry. + +**Caveat for your task:** if the same server could be reached with **different credentials**, keying only on server name can return the wrong session. For a first version, matching the reference (key = server name) is fine if credentials are consistent per server. + +--- + +### 2. What happens on the second call for the same server? + +```mermaid +sequenceDiagram + participant Caller + participant GetRemoteSession as Get-RemoteSession + participant Pool + participant NewPSSession as New-PSSession + + Caller->>GetRemoteSession: serverName = APP01 + GetRemoteSession->>Pool: lookup APP01 + Pool-->>GetRemoteSession: session found + GetRemoteSession-->>Caller: existing session + Note over NewPSSession: not called +``` + +- Pool lookup hits. +- Logs something like “Using existing remote session”. +- Returns the cached session. +- **`New-PSSession` is not called** — that’s the whole point of the pool. + +--- + +### 3. When is `New-PSSession` called vs skipped? + +| Condition | Action | +|-----------|--------| +| Pool has an entry for `$serverName` | Skip `New-PSSession`, return cached session | +| Pool has **no** entry for `$serverName` | Call `New-PSSession`, store result in pool, return it | + +```mermaid +flowchart TD + start[Get-RemoteSession called] + lookup{Pool contains serverName?} + reuse[Log: using existing session] + create[Log: creating session] + newPs[New-PSSession] + store[Store in pool] + return[Return session] + + start --> lookup + lookup -->|yes| reuse --> return + lookup -->|no| create --> newPs --> store --> return +``` + +**Important:** `Get-RemoteSession` creates/reuses the session. **`Invoke-Command -Session $session`** is a separate step the caller does afterward (e.g. `Test-Path` on the remote box). + +--- + +### 4. What happens when session creation fails? Does that fit ESS? + +**In the reference:** if `$session` is falsy after `New-PSSession`, it logs an error and runs **`exit`** (ends the whole PowerShell process). + +**In ESS capabilities:** that does **not** fit. Look at [`Remove-Folder.psm1`](deploy/scripts/modules/capabilities/Remove-Folder.psm1) — failures use **`throw`**, not `exit`. + +| | TMC reference | ESS pattern | +|---|---------------|-------------| +| Failure | `exit` | `throw "message"` | +| Why | Script runner stops everything | Pester, pipelines, and orchestrators can catch/handle it | + +For your module: log with `Write-Log -Level ERROR`, then **throw** so deployment fails cleanly and tests can use `Should -Throw`. + +--- + +## Design decisions (for your implementation) + +### Parameters + +Match the reference, adapted to ESS style: + +- **`ServerName`** (mandatory) — pool key and `New-PSSession` target. +- **`Credential`** (optional) — pass through when present; omit when using default/current-user auth. + +Do **not** put remote script logic (e.g. `Test-Path`) inside `Get-RemoteSession`. Callers get a session, then run `Invoke-Command` themselves. + +--- + +### Pool scope — where does the hashtable live? + +**At module scope** in the `.psm1`, **above** the function — not inside the function body. + +```mermaid +flowchart TB + subgraph psm1 [Get-RemoteSession.psm1] + poolVar["script-scoped pool hashtable"] + func[Get-RemoteSession function] + poolVar --> func + end + + call1[First call] --> func + call2[Second call] --> func + func --> poolVar +``` + +If the pool is **inside** the function, it is recreated every call and caching never works. + +Use **`$script:`** scope so the pool belongs to the module instance, not the global session (unless you deliberately want global — you don’t for this task). + +--- + +### Naming: `Get-RemoteSession` vs `New-RemoteSession` + +| Verb | Meaning here | +|------|----------------| +| `New-*` | Always creates something new | +| `Get-*` | Retrieves existing **or** obtains one if needed | + +Your function is “get from pool, or create and cache” → **`Get-RemoteSession`** is the right approved verb. + +--- + +### Logging + +Use **`Write-Log`** (from [`Core.Logging.psm1`](deploy/scripts/modules/core/Core.Logging.psm1)), not TMC’s `Logging`. + +Worth logging: + +- **INFO** — “Using existing…” vs “Creating…” +- **INFO** — elapsed time for **creation only** (optional but matches the reference and helps debug slow WinRM) +- **ERROR** — before you throw on failure + +--- + +### Failure behavior + +```mermaid +flowchart LR + fail[New-PSSession fails or returns nothing] + log[Write-Log ERROR] + throwNode[throw with clear message] + + fail --> log --> throwNode +``` + +No `exit`. Callers and Pester expect exceptions, not process termination. + +--- + +### Pool key edge case (same server, different credentials) + +Reference keys **only on server name**. Implication: + +```mermaid +flowchart TD + callA["Call: APP01 + CredA"] --> pool1[Pool stores APP01 → sessionA] + callB["Call: APP01 + CredB"] --> pool2[Pool returns sessionA] + pool2 --> wrong[Wrong cred — sessionA reused] +``` + +For learning / v1: **same as reference** is OK if each server always uses one credential set. If that’s not true later, the key would need to include something credential-related — out of scope unless your manifests require it. + +--- + +## How this connects to `Invoke-Command` + +```mermaid +sequenceDiagram + participant Step as Deployment step + participant Get as Get-RemoteSession + participant IC as Invoke-Command + + Step->>Get: ServerName, Credential + Get-->>Step: $session + Step->>IC: -Session $session -ScriptBlock { Test-Path ... } + IC-->>Step: $fileExists +``` + +`Get-RemoteSession` = connection management. +`Invoke-Command` = run code on the remote machine. + +--- + +## Testing note (relevant to your attached snippet) + +For “fails when session cannot be created”, assert like other capabilities: + +- **`{ Get-RemoteSession ... } | Should -Throw`** — proves the function throws. +- Optionally assert **`Write-Log`** was called with `-Level ERROR`. + +`Should -Invoke Throw` is **not** valid Pester — `throw` is a language statement, not a mockable cmdlet. Same idea as [`Remove-Folder.Tests.ps1`](deploy/tests/modules/capabilities/Remove-Folder.Tests.ps1): use `Should -Throw` on the script block, and `Should -Invoke Write-Log` for the error log line. + +For pool behavior tests: mock **`New-PSSession`**, call the function twice with the same server, expect **`New-PSSession` invoked once**. + +--- + +## One-line summary + +| Question | Answer | +|----------|--------| +| Pool key | Server name | +| Second call | Return cached session; no `New-PSSession` | +| When to create | Only when key missing from pool | +| On failure | Reference: `exit` → **you:** `Write-Log` + `throw` | +| Pool location | Module-level `$script:` hashtable, not inside the function | + diff --git a/Career/Microlise/Microlise Assessment.md b/Career/Microlise/Microlise Assessment.md old mode 100644 new mode 100755 diff --git a/Career/Microlise/Microlise MOC.md b/Career/Microlise/Microlise MOC.md old mode 100644 new mode 100755 diff --git a/Career/Microlise/Pre work prep.md b/Career/Microlise/Pre work prep.md old mode 100644 new mode 100755 diff --git a/Career/Microlise/Seb Search Improvements.md b/Career/Microlise/Seb Search Improvements.md old mode 100644 new mode 100755 diff --git a/Career/Microlise/Session Stored XSS PENTEST.html b/Career/Microlise/Session Stored XSS PENTEST.html old mode 100644 new mode 100755 diff --git a/Career/Microlise/Session Stored XSS PENTEST.md b/Career/Microlise/Session Stored XSS PENTEST.md old mode 100644 new mode 100755 diff --git a/Career/Powershell MOC.md b/Career/Powershell MOC.md old mode 100644 new mode 100755 diff --git a/Career/Security/Attachments/Pasted image 20260602161410.png b/Career/Security/Attachments/Pasted image 20260602161410.png old mode 100644 new mode 100755 diff --git a/Career/Security/Attachments/Pasted image 20260603202301.png b/Career/Security/Attachments/Pasted image 20260603202301.png old mode 100644 new mode 100755 diff --git a/Career/Security/Attachments/Pasted image 20260603202316.png b/Career/Security/Attachments/Pasted image 20260603202316.png old mode 100644 new mode 100755 diff --git a/Career/Security/Cross Site Scripting (XSS).md b/Career/Security/Cross Site Scripting (XSS).md old mode 100644 new mode 100755 diff --git a/Career/Security/OWASP Top 10.md b/Career/Security/OWASP Top 10.md old mode 100644 new mode 100755 diff --git a/Career/Security/Output Encoding.md b/Career/Security/Output Encoding.md old mode 100644 new mode 100755 diff --git a/Career/Security/Server-Side Request Forgery (SSRF).md b/Career/Security/Server-Side Request Forgery (SSRF).md old mode 100644 new mode 100755 diff --git a/Career/Software Development Methodologies.md b/Career/Software Development Methodologies.md old mode 100644 new mode 100755 diff --git a/Career/Solid Principles.md b/Career/Solid Principles.md old mode 100644 new mode 100755 diff --git a/Career/Tech Talks/MA4 Notes.md b/Career/Tech Talks/MA4 Notes.md new file mode 100755 index 0000000..3e4c8fd --- /dev/null +++ b/Career/Tech Talks/MA4 Notes.md @@ -0,0 +1,14 @@ +--- +note type: + - microlise + - note +date: 2026-07-02 +done: true +--- + +- MA4 is a Microlise data centre / infrastructure environment. The MA4 migration project involves moving VMs, servers, and services from the legacy infrastructure to the new MA4 environment. The migration has been carried out in phases (Phase 1 covering DEV and OAT environments, with pre-prod and prod to follow). +- SOV house to close by march next year +- Inter-Data Centre Conncectity (IDC) + + ![[Pasted image 20260625102149.png]] +- \ No newline at end of file diff --git a/Career/Tech Talks/OpenShift migration Tech Talk.md b/Career/Tech Talks/OpenShift migration Tech Talk.md new file mode 100755 index 0000000..e1c547c --- /dev/null +++ b/Career/Tech Talks/OpenShift migration Tech Talk.md @@ -0,0 +1,23 @@ +--- +note type: + - microlise + - note +date: 2026-07-02 +done: true +--- +**OpenShift migration** + +- PROD workloads are going to be migrated from Sovereign House (PROD) to Powergate (GEN) clusters +- `mms. Local` is going to eventually be dropped +- OpenShift needs to use `*.ml.local` for ALL routes, which map directly to the routes (on HELM charts) +- `api.microlise.com` ->`apim.ml.local` +- `api-oat.microlise.com` -> `oat.apim.ml.local` (same for `cert`/ `uat`) +- `apim-int.ml.local` replaces `svc.cluster.local` for internal communications (`dev.apim-int.ml.local` for DEV) +- `live.microlise.com` -> `app.ml.local` / `api.ml.local` (same for oat/cert/uat) +- `apim` or `live` using paths - continue with paths for routes - otherwise use subdomains +- route migration - add new route, alongside old, test, drop the old route (once everything has been updated to point to it) +- need to use `route` `name` in the HELM charts +- new subdomains - use the new workflow in #help-openshift-platform once it's available - automated process +- setup the new routes on GEN/DEV first, to confirm they're all working - then repeat on PROD +- workload migration - process TBC - spin up new PROD workloads on GEN cluster, drop from PROD cluster +- GEN - doesn't require change control, PROD workloads on GEN - will still require it \ No newline at end of file diff --git a/Career/Test Driven Development.md b/Career/Test Driven Development.md old mode 100644 new mode 100755 diff --git a/Career/Big (O) - Time and Space Complexity.md b/Career/Theory/Big (O) - Time and Space Complexity.md old mode 100644 new mode 100755 similarity index 100% rename from Career/Big (O) - Time and Space Complexity.md rename to Career/Theory/Big (O) - Time and Space Complexity.md diff --git a/Career/DLL's.md b/Career/Theory/DLL's.md old mode 100644 new mode 100755 similarity index 100% rename from Career/DLL's.md rename to Career/Theory/DLL's.md diff --git a/Career/Regex.md b/Career/Theory/Regex.md old mode 100644 new mode 100755 similarity index 100% rename from Career/Regex.md rename to Career/Theory/Regex.md diff --git a/Career/Theory/Ternary Operator.md b/Career/Theory/Ternary Operator.md new file mode 100755 index 0000000..21c08ea --- /dev/null +++ b/Career/Theory/Ternary Operator.md @@ -0,0 +1,21 @@ +--- +note type: + - theory +date: 2026-06-19 +done: true +--- +The **ternary operator**, also known as the **conditional operator**, is a concise way to write an **if-else** statement in a single line by evaluating a **condition** and returning one of two values.  It is called "ternary" because it operates on **three operands**: the condition, the expression to execute if true, and the expression to execute if false.  + +The standard syntax is: + +``` +condition ? expression_if_true : expression_if_false +``` + +Key characteristics include: + +- **Short-Circuit Evaluation**: Only the expression corresponding to the evaluated condition is executed.  +- **Readability**: It enhances code brevity for simple logic but can reduce maintainability if nested excessively.  +- **Language Support**: It is widely supported in C-like languages (C, C++, Java, JavaScript, C#) and has variations in others (e.g., Python uses `value_if_true if condition else value_if_false`).  +- **Performance**: It generally has negligible performance differences compared to standard if-else blocks, as modern compilers optimize both similarly.  +- **Association**: In most languages, the operator is **right-associative**, allowing for chained conditions similar to `if...else if...else` chains. \ No newline at end of file diff --git a/Career/XOR.md b/Career/Theory/XOR.md old mode 100644 new mode 100755 similarity index 100% rename from Career/XOR.md rename to Career/Theory/XOR.md diff --git a/Career/Windows Services.md b/Career/Windows Services.md old mode 100644 new mode 100755 diff --git a/Dailies/2026-04-14.md b/Dailies/2026-04-14.md old mode 100644 new mode 100755 diff --git a/Dailies/2026-04-18.md b/Dailies/2026-04-18.md old mode 100644 new mode 100755 diff --git a/Dailies/2026-04-20.md b/Dailies/2026-04-20.md old mode 100644 new mode 100755 diff --git a/Dailies/2026-04-21.md b/Dailies/2026-04-21.md old mode 100644 new mode 100755 diff --git a/Dailies/2026-04-28.md b/Dailies/2026-04-28.md old mode 100644 new mode 100755 diff --git a/Dailies/2026-04-29.md b/Dailies/2026-04-29.md old mode 100644 new mode 100755 diff --git a/Dailies/2026-04-30.md b/Dailies/2026-04-30.md old mode 100644 new mode 100755 diff --git a/Dailies/2026-05-01.md b/Dailies/2026-05-01.md old mode 100644 new mode 100755 diff --git a/Dailies/2026-05-05.md b/Dailies/2026-05-05.md old mode 100644 new mode 100755 diff --git a/Dailies/2026-05-06.md b/Dailies/2026-05-06.md old mode 100644 new mode 100755 diff --git a/Dailies/2026-05-12.md b/Dailies/2026-05-12.md old mode 100644 new mode 100755 diff --git a/Dailies/2026-05-13.md b/Dailies/2026-05-13.md old mode 100644 new mode 100755 diff --git a/Dailies/2026-05-20.md b/Dailies/2026-05-20.md old mode 100644 new mode 100755 diff --git a/Dailies/2026-05-21.md b/Dailies/2026-05-21.md old mode 100644 new mode 100755 diff --git a/Dailies/2026-05-22.md b/Dailies/2026-05-22.md old mode 100644 new mode 100755 diff --git a/Dailies/2026-05-28.md b/Dailies/2026-05-28.md old mode 100644 new mode 100755 diff --git a/Dailies/2026-05-29.md b/Dailies/2026-05-29.md old mode 100644 new mode 100755 diff --git a/Dailies/2026-06-01.md b/Dailies/2026-06-01.md old mode 100644 new mode 100755 diff --git a/Dailies/2026-06-02.md b/Dailies/2026-06-02.md old mode 100644 new mode 100755 diff --git a/Dailies/2026-06-03.md b/Dailies/2026-06-03.md old mode 100644 new mode 100755 diff --git a/Dailies/2026-06-04.md b/Dailies/2026-06-04.md old mode 100644 new mode 100755 diff --git a/Dailies/2026-06-05.md b/Dailies/2026-06-05.md old mode 100644 new mode 100755 diff --git a/Dailies/2026-06-08.md b/Dailies/2026-06-08.md old mode 100644 new mode 100755 diff --git a/Dailies/2026-06-09.md b/Dailies/2026-06-09.md old mode 100644 new mode 100755 diff --git a/Dailies/2026-06-10.md b/Dailies/2026-06-10.md new file mode 100755 index 0000000..da08945 --- /dev/null +++ b/Dailies/2026-06-10.md @@ -0,0 +1,18 @@ +--- +work day: true +date: 2026-06-10 +--- + +# 2026-06-10 + +## TODOs +- [ ] Exercise +- [x] PR for the AVL +- [x] Remove folder PR +- [x] database df removal +- [ ] Reading (5 pages) +- [x] Class 1 +- [ ] Class 2 +- [ ] Class 3 + +## Links diff --git a/Dailies/2026-06-17.md b/Dailies/2026-06-17.md new file mode 100755 index 0000000..e360c60 --- /dev/null +++ b/Dailies/2026-06-17.md @@ -0,0 +1,19 @@ +--- +work day: true +date: "2026-06-17" +--- + +# 2026-06-17 + +## TODOs +- [ ] Exercise +- [x] Resolve comments for ESS PR +- [x] Resolve comments for DF removal PR +- [x] refinement +- [x] ESS PAM access +- [ ] Reading (5 pages) +- [x] Class 1 +- [ ] Class 2 +- [ ] Class 3 + +## Links diff --git a/Dailies/2026-06-17.md~ b/Dailies/2026-06-17.md~ new file mode 100755 index 0000000..e69de29 diff --git a/Dailies/2026-06-19.md b/Dailies/2026-06-19.md new file mode 100755 index 0000000..dd98cae --- /dev/null +++ b/Dailies/2026-06-19.md @@ -0,0 +1,20 @@ +--- +work day: true +date: 2026-06-19 +--- + +# 2026-06-19 + +## TODOs +- [ ] Exercise +- [x] Create the PRs +- [x] Training +- [ ] +- [ ] Reading (5 pages) +- [x] Class 1 +- [x] Class 2 +- [x] Class 3 + +## Links +- https://search.brave.com/search?q=mutation+testing+in+simple+terms&summary=1&conversation=0938704af85a3207ceba8f8e6938cbf47f20 +- https://search.brave.com/ask?q=if+you+invest+%C2%A320k+a+year+monthly%2C+with+a+rate+of+return+of+10%25+per+year+for+5+years+into+a+stocks+and+shares+isa%2C+how+much+do+you+make&conversation=0939236ccead38bcf48b863907c6bd192ed8 \ No newline at end of file diff --git a/Dailies/2026-06-20.md b/Dailies/2026-06-20.md new file mode 100755 index 0000000..a676db8 --- /dev/null +++ b/Dailies/2026-06-20.md @@ -0,0 +1,19 @@ +--- +work day: false +date: "2026-06-20" +--- + +# 2026-06-20 + +## TODOs +- [ ] Exercise +- [x] Eat the morning combo +- [ ] +- [ ] +- [x] Reading (5 pages) +- [x] Class 1 +- [x] Class 2 +- [ ] Class 3 + +## Links +- https://github.com/0-AI-UG/cate \ No newline at end of file diff --git a/Dailies/2026-06-22.md b/Dailies/2026-06-22.md new file mode 100755 index 0000000..1361fb4 --- /dev/null +++ b/Dailies/2026-06-22.md @@ -0,0 +1,22 @@ +--- +work day: true +date: 2026-06-22 +--- +# 2026-06-22 + +## TODOs +- [ ] Exercise +- [x] archival of git repos +- [x] comments on get remote session +- check instance being deployed already exists +- [ ] Reading (5 pages) +- [x] Class 1 +- [x] Class 2 +- [x] Class 3 + +## Links +- https://www.infoq.com/news/2026/06/netflix-microservices-realtime/ +- http://3l.taha.one/googles-lessons-build-software-that-lasts-4d7c0c82e5f2 +- https://h3geo.org/# +- https://medium.com/@emilyhustlenyc/i-failed-ubers-system-design-interview-last-month-here-s-every-question-they-asked-bdaf1bd6e64b +- https://thehackernews.com/2026/06/new-frost-attack-lets-websites-track.html \ No newline at end of file diff --git a/Dailies/2026-06-24.md b/Dailies/2026-06-24.md new file mode 100755 index 0000000..1e381b7 --- /dev/null +++ b/Dailies/2026-06-24.md @@ -0,0 +1,15 @@ +--- +work day: true +date: 2026-06-24 +--- +# 2026-06-24 + +## TODOs +- [x] Exercise +- [x] Confirm-ExistingDeployment Module +- [x] PR that in +- [x] Resolve the commnets +- [ ] Reading (5 pages) + +## Links +- https://www.google.com/search?q=Comfee%207000%20BTU \ No newline at end of file diff --git a/Dailies/2026-06-29.md b/Dailies/2026-06-29.md new file mode 100755 index 0000000..e7d7af6 --- /dev/null +++ b/Dailies/2026-06-29.md @@ -0,0 +1,19 @@ +--- +work day: true +date: 2026-06-29 +--- +# 2026-06-29 + +## TODOs +- [x] Exercise +- [x] Postdeploy stage development complete PR +- [x] Automate Remove-Folder +- [x] architecture rotation meeting +- [ ] Reading (5 pages) +- [ ] Class 1 +- [ ] Class 2 +- [ ] Class 3 + +## Links +- https://structural.chat/articles/programming-in-markdown/ +- \ No newline at end of file diff --git a/Dailies/2026-07-08.md b/Dailies/2026-07-08.md new file mode 100755 index 0000000..50ae6dd --- /dev/null +++ b/Dailies/2026-07-08.md @@ -0,0 +1,17 @@ +--- +work day: true +date: 2026-07-08 +--- +# 2026-07-08 + +## TODOs +- [ ] Exercise +- [x] Make the changes from the demo +- [x] One repo SQ fixes +- [ ] +- [ ] Reading (5 pages) +- [x] Class 1 +- [ ] Class 2 +- [ ] Class 3 + +## Links diff --git a/Dailies/2026-07-10.md b/Dailies/2026-07-10.md new file mode 100755 index 0000000..f286e10 --- /dev/null +++ b/Dailies/2026-07-10.md @@ -0,0 +1,18 @@ +--- +work day: true +date: 2026-07-10 +--- +# 2026-07-10 + +## TODOs +- [ ] Exercise +- [ ] +- [ ] +- [ ] +- [ ] Reading (5 pages) +- [ ] Class 1 +- [ ] Class 2 +- [ ] Class 3 + +## Links +- https://search.brave.com/search?q=WAJAHAT_MIR009 (naats on here) \ No newline at end of file diff --git a/Daily Notes.md b/Daily Notes.md old mode 100644 new mode 100755 index 491999a..0bbc5ce --- a/Daily Notes.md +++ b/Daily Notes.md @@ -21,4 +21,10 @@ All daily journal entries, linked automatically. [[2026-05-29]] [[2026-06-01]] [[2026-06-02]] -[[2026-06-03]] \ No newline at end of file +[[2026-06-03]] +[[2026-06-04]] +[[2026-06-05]] +[[2026-06-08]] +[[2026-06-09]] +[[2026-06-10]] +[[2026-06-17]] \ No newline at end of file diff --git a/Deen/Deen MOC.md b/Deen/Deen MOC.md new file mode 100755 index 0000000..892231f --- /dev/null +++ b/Deen/Deen MOC.md @@ -0,0 +1,4 @@ + +- [[Grace]] +- [[Naats]] +- [[Poetry]] \ No newline at end of file diff --git a/Deen/Grace.md b/Deen/Grace.md new file mode 100755 index 0000000..0c66ffb --- /dev/null +++ b/Deen/Grace.md @@ -0,0 +1,140 @@ +In the injunctions of inheritance appearing previously, it was mentioned that, given the conditions, for a male there is a share equal to that of two females. There are other proved aspects of male precedence as well. So, Sayyidah Umm Salmah (RA) once said to the Holy Prophet ﷺ: 'Our share in the inheritance is half. Then, there are such and such elements of difference between us and men ...' + +Her purpose was not to raise an objection. Rather, she wished to be a man and to deserve the merits restricted for men. There were other women who wished: 'Had we been men, we would have taken part in Jihad and the merit of Jihad would have been ours.' + +A woman asked the Holy Prophet ﷺ: 'A man gets a double share in the inheritance and the witness of a woman is half as compared with a man - does that mean that we shall be getting a half reward for all of our acts of worship?' Thereupon, the present verse was revealed in which an answer to both these statements has been given. The answer to Sayyidah Umm Salmah was given by 'and do not covet ...' and the answer to the last-mentioned woman was given by 'for men there is a share ...' + +# Commentary +## Coveting the Unacquirable + +In this verse (32), coveting things, traits and merits given to others has been prohibited, for they are not acquirable by effort. The reason is that when a man finds himself lacking in wealth, comfort, beauty, merit, knowledge and similar other states of being, he naturally experiences a surge of envy which urges him to come, at least, at par with that person, or, if possible, be ahead. But, he does not always have the capability or power to make his wish come true because there are merits and excellences which have nothing to do with man's own efforts and acquisitions. They are simply the blessings of nature, for example, being a man or being the scion of a prophets family or having been born in the family of a ruler or having been born beautiful. So, one who does not have access to these blessings-can never obtain them by effort even-if he were to spend a whole life-time devoted to that pursuit. A woman cannot become a man, nor can one choose to be born in the family of a prophet, or change his physique - become tall and handsome, acquire all beautiful features of his choice - because, this is not within his power. He simply cannot acquire these in the real sense, no matter how much he struggles with his medicines, treatments and devices. Consequently, when he finds himself incapable of matching the other person, his inner self starts playing with the idea that it would be wonderful if such blessings were snatched away from him (the other person) as well, so that, he too becomes either equal or lower than him: This is envy, a terribly, shameful and damaging trait of human morals, which is the cause of so many disputes, disturbances, killings and ravages in this world. + +This verse of the Holy Qur'En closes the doors of disorders by saying: **وَلَا تَتَمَنَّوْا مَا فَضَّلَ اللَّهُ بِهِ بَعْضَكُمْ عَلَىٰ بَعْضٍ** It means that Allah Almighty, in His infinite wisdom, has blessed people with all sorts of merits and excellences. He gave someone a particular quality, then gave someone else yet another quality; less to some, more to some others. In this matter, everyone should rest pleased with his or her destiny and stay clear from the envious desire to become the possessor of the other person's merits and excellences, for the end-result of this game of desires is nothing but a biting sense of personal loss, and of course, that awful sin of envy. + +It may sound a little simple, but the truth of the matter is that anyone Allah Almighty elects to be a man should be grateful for it, and anyone He elects to be a woman should be pleased with being just that, realizing that, had she been a man, may be, she could have failed to fulfil the responsibilities placed on a man, and would have thus ended up being a sinner. Then, anyone created beautiful by Allah Almighty should be all the more grateful for having been so blessed; and, anyone lesser in looks should also not grieve thinking of the good that may lie hidden behind this destiny, for being blessed with beauty does not necessarily guarantee good. It might have the recipient land into some unwelcome state of trial or corruption. Again, anyone who is a true lineal descendant of the Holy Prophet ﷺ should thank Allah Almighty for the great blessing of this lineal connection; and, anyone who does not have this connection should neither worry about it, nor should he go about longing for it, because this is something which cannot be acquired by effort, and if one still insists on coveting it, what he would get involved with will be nothing but sin and the gain he would make would be nothing but a broken heart and an aching soul. So, rather than pine for a lineage one does not have, the best policy is to think about one's own doings. Let these be good and righteous. Once a person enhances himself with such spiritual strengths, he can be ahead of those with higher or better lineage. + +## Striving to excel others in good deeds is different + +There are verses of the Holy Qur'an and the sayings of the noble Prophet ﷺ which exhort people to excel each other in good deeds. In other words, this is an open field in which it is all right to look at the trail of merits and excellence left by others. Indeed, people have been persuaded to make all possible efforts to acquire them. Now, this relates to deeds within man's control, and which can be acquired by learning, training and working. For example, if a person is impressed with someone's intellectual merits, practical life and excellent morals, he can, by all means, strive to acquire these qualities. This is very desirable, and praiseworthy. As such, the present verse does not contradict it. In fact, the later part of the same verse (32), that **لِّلرِّجَالِ نَصِيبٌ مِّمَّا اكْتَسَبُوا ۖ وَلِلنِّسَاءِ نَصِيبٌ مِّمَّا اكْتَسَبْنَ** is actually supporting this view. It means that men will get a share of what they acquired with their effort and conduct, and the same will be true for women who will get a share of what they acquired with their effort and conduct. One is not likely to miss the hint here - that effort and struggle in the acquisition of merits and perfections do not go waste. On the contrary, every man and woman will definitely get a return, a share of his or her effort. From here, we also know that desiring to have someone's intellectual moral excellence as combined with his model practical conduct, and then going ahead to see the fruition of these desires through effort and struggle, is certainly desirable and praiseworthy. Removed in the process here is an error which is committed by a lot of people who tend to do things not knowing what they are doing. Some of them become so devoted to their desire to acquire merits which cannot be acquired that they ruin their otherwise peaceful life right here in this mortal world. And if, bad come to worse, they are fired with envy, that is, they start wishing - 'if I do not have this blessing, may this be taken away from the other' - then, the very chances of salvation is the life to come also stand destroyed because of the grave sin of envy committed by him. + + +Moreover, there are another kind of people as well who lack courage, avoid action, or just have no sense of honour and shame, who do not even try to acquire merits which can be acquired. Such people, when approached with good counsel, would come back immediately, blaming their destiny and fate which is no more than an effort to camouflage their own timidity and inertia. The present verse has resolved this problem by stating a wise anh just rule which is: Man's effort is ineffective in acquiring merits which he does not control, such as, being high-born or handsome. Merits like these should be resigned to fate and one must be content with the divinely determined state he is in, and be grateful to Allah Almighty. Coveting anymore than that is absurd, ineffectual, meddlesome - an act which leaves behind nothing but a handful of sorrows. + +As for merits which can be acquired by effort, wishing to have them is useful, only if such a wish is supported by the necessary struggle to achieve. Let us keep in mind that the verse carries the promise that the effort so made will not be wasted and everyone will get a share of what he or she worked for. + +Referring back to injunctions prohibiting the unjust use of someone's property and the unjust taking of someone's life (29), Tafsir al-Bahr al-Muhit points out that this verse aims to seal the very source of these crimes, and it is for this purpose that instructions have been given to stop people from coveting others who are ahead of them in wealth, comfort or influence. A little thought will reveal that theft, robbery and other illegitimate ways of usurping someone's property, or to kill and destroy, are crimes which sprout from one particular emotional attitude. A person, when he finds (he other ahead of him in wealth and other material acquisitions, first feels the pinch in his heart wishing to come at par with him, or even wishes to become superior to him. Then, it is the intensity of this desire which pushes him all the way to go ahead and commit these crimes. The Holy Qur'an, as said earlier, has blocked the source of these crime by blocking the very desire of the unacquirables and the unobtainable of life. + +## To ask for Allah's grace is the ideal way + +After that, the verse moves on to instruct by saying: **وَاسْأَلُوا اللَّهَ مِن فَضْلِهِ** (And pray to Allah for His grace). It means, 'when you see someone excel in one or the other graces of life,' the ideal conduct is, 'not to wish to come at par with the other person in respect of that particular excellence, but that you should pray to Allah asking for graces and blessings from Him.' The reason is that Allah's grace appears in different forms for everyone. For some, wealth is a blessing from God for, if they were to become paupers, they might have fallen victims to sin and disbelief. For some others, grace lies in the very pecuniary circumstances they are in, for if they were to turn rich, they might have succumbed to thousands of sins. Similarly, for some, grace appears in the form of power and influence, while for some others, the unremembered and the unattended, the grace of Allah manifests itself in that very state. A look at the reality of things around would have told him that power and influence, if these were to be his lot, might have caused his falling into many a sin. Therefore, the verse instructs - when you ask Allah, do not ask for some fixed quality of life, instead, ask for His grace so that He, in his His infinite wisdom, opens the doors of His blessings on you. + +## Trust His Wisdom and Knowledge + +The verse concludes by saying:  **إِنَّ اللَّهَ كَانَ بِكُلِّ شَيْءٍ عَلِيمًا** (Surely, Allah is All-Knowing in respect of everything.) Here, the hint is that the arrangement of things made by Allah Almighty is the very quintessence of wisdom and justice. Whoever has been created and sustained in whatever condition it may be is an arrangement perfectly matched with the ideal demand of wisdom and justice. But, man is not fully aware of the consequences of what he does. This is something only Allah knows best and thus He also knows how suitable it is to keep anyone in a given condition + +Of course. Here’s a reflection-style summary you can come back to when you feel unsettled. + +# Main message of the text + +The tafsir is explaining that Allah gives different people different forms of blessing, ability, opportunity, status, beauty, knowledge, wealth, closeness, and roles. A person should not burn inside wishing they had exactly what another person has, especially when that thing is outside their control. That kind of comparison can lead to envy, sadness, resentment, and a broken heart. + +But the text also makes a very important distinction: + +Wanting to improve in something that **can be gained through effort** is not wrong. In fact, striving to gain knowledge, skill, good character, and excellence is praised. The problem is not improvement. The problem is when the heart becomes attached to someone else’s exact portion, position, or favour. + +## Key points to remember + +### 1. Some things are outside my control + +I cannot control: + +* whether I am chosen to read +* whether there is enough time in class +* whether the shaykh is under pressure +* whether someone else is faster +* whether someone else is closer to the shaykh +* whether the timing worked against me when I was ill or overwhelmed + +These are things I hand over to Allah. + +### 2. Some things are within my control + +I can control: + +* practising my reading +* improving slowly +* keeping adab +* avoiding resentment +* making duʿāʾ +* staying sincere +* not letting disappointment turn into envy +* accepting that my effort is still seen by Allah + +The text says effort in things that can be acquired does not go to waste. + +### 3. My effort is not wasted just because I was not chosen + +Not being chosen does not mean: + +* I am useless +* I am a burden +* I failed completely +* my effort had no value +* Allah did not see my struggle + +It may simply mean the class situation needed something else at that moment. + +### 4. I should not confuse practical limitations with personal failure + +If the class is short on time, the shaykh may choose the fastest reader. That is a practical decision, not necessarily a judgement on my worth or sincerity. + +Being slower by a small amount does not mean I am bad. It just means the circumstance required more speed. + +### 5. I should protect my heart from envy + +It is okay to feel hurt. +It is okay to wish I had a chance. +It is okay to want to improve. + +But I should be careful not to think: + +> “Why him and not me?” + +or + +> “I hope he loses that place.” + +Instead, I should think: + +> “Ya Allah, bless him in what You gave him, and give me from Your grace too.” + +### 6. I should ask Allah for His grace, not for someone else’s exact portion + +The tafsir says the better response is to ask Allah from His own grace. That means I do not need to demand the exact same role, closeness, speed, or opportunity as someone else. + +Allah may give me a different opening: + +* deeper understanding +* more sincerity +* private growth +* better adab +* another chance later +* reward for patience +* closeness through humility rather than visibility + +## Personal reflection to repeat + +When I feel off, I can remind myself: + +> I did what I could. I practised, I tried, and Allah saw that. +> Some parts were in my control, and some parts were not. +> If I was not chosen, that does not mean my effort was worthless. +> If someone else reads faster or is closer to the shaykh, that is their portion from Allah. +> My task is not to resent their portion, nor to blame myself harshly. +> My task is to keep adab, keep sincerity, and ask Allah from His grace. +> What is meant for me will reach me, and what is not meant for me may still be protecting me. +> Ya Allah, remove envy from my heart, accept my effort, and open the door that is best for me. + +## One-line version + +> I will strive in what I can control, accept what I cannot control, avoid envy, and ask Allah to give me my own share from His grace. diff --git a/Deen/Naats.md b/Deen/Naats.md old mode 100644 new mode 100755 diff --git a/Deen/Poetry.md b/Deen/Poetry.md old mode 100644 new mode 100755 index e9a99bd..c2bc45d --- a/Deen/Poetry.md +++ b/Deen/Poetry.md @@ -60,3 +60,48 @@ Strangers, and we have accepted it as a motto for life **Nasheed: “Strangers”** + +## Chechen Freedom Fighters (sanakhudu) + +- https://www.youtube.com/watch?v=oDK9Lo5o4Tg +- https://www.muftisays.com/forums/49-arabic-nasheeds/1779-sanakhudu--arabic-nasheed.html +### Arabic + +| | | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | +| Sana'khoodu Ma`arikana Ma`ahum



Wa sanamdhi Jumoo`an Narda`uhum



Wa nu`eedul haqqal mug-tasaba



Wa bi kullil quwwati Nad-fa`uhum | سنخوض معاركنا معهم



وسنمضي جموعا نردعهم



ونعيد الحق المغتصب



وبكل القوة ندفعهم | +| Bisilaahil haqqil battari



Sanu harriru ardhal ahraari



Wanu`eedul tuhraa ilal qudsi



Min Ba`didh-dhuli wadhal `aree | بسلاح الحق البتار



سنحرر أرض الأحرار
ونعيد الطهر إلى القدس



من بعد الذلّ و ذا العار | +| Wa sanamdhi Nadukku Ma'aqilahum



Bi dawyyin Daamin Yuqliquhum



Wa sanam hul `ara' Bi`ayy-deena



Wa biqullil quwwati Narda'uhum | و سنمضي ندك معاقلهم



بدوىّ دامٍ يقلقهم
وسنمحو العار بأيدينا



وبكل القوة نردعهم | +| Lan Nardha Bijuz-in Muhtallin



Lan Natruka Shibral-lildh-dhulli



Satamourul ardhu Wa tahriquhum



Fil ardhi Baraakeenun Taghli | نرضى بجزءٍ محتلّلن



لن نترك شبرا للذل
ستمور الأرض و تحرقهم



في الأرض براكين تغلي | + +### English + +Translation: + + + +We will venture to battle with them +And we will march in congregations toward their bases +And we shall return the stolen rights +And with full strength shall topple them + + + +With the relentless weapon of truth +We shall liberate the land of the free +We shall return purity to Al-Quds once again +After humiliation and disgrace + + + +Thunderously we shall infiltrate their hiding shelters +With boisterous stance that distresses them +We shall erase dishonor with our hands +And with full strength shall penalize them + + + +We will not yield to accept an occupied fraction (of land) +We will not leave a hand-span to oppression +For the land will revolt to scorch them +As within the land are raging volcanoes \ No newline at end of file diff --git a/Index.md b/Index.md old mode 100644 new mode 100755 diff --git a/Non Technical/20250717230336-recipes_moc.md b/Non Technical/20250717230336-recipes_moc.md deleted file mode 100644 index 0ed5b64..0000000 --- a/Non Technical/20250717230336-recipes_moc.md +++ /dev/null @@ -1,5 +0,0 @@ -# [Recipes Cookbook](id:b31d6c3f-9bc3-4006-aaaf-d56168249e3a) - -# [Recipe Ideas](id:F7D68FF4-CAD0-4791-BAE4-AC20B84A8785) - -# [Recipes Done](id:EA93341B-20C0-48A2-BD88-F24ED3C540DA) diff --git a/Non Technical/20250719174944-recipes_ideas.md b/Non Technical/20250719174944-recipes_ideas.md deleted file mode 100644 index e8217f3..0000000 --- a/Non Technical/20250719174944-recipes_ideas.md +++ /dev/null @@ -1,59 +0,0 @@ -# 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. diff --git a/Non Technical/20250719175023-recipes_done.md b/Non Technical/20250719175023-recipes_done.md deleted file mode 100644 index f0a8e69..0000000 --- a/Non Technical/20250719175023-recipes_done.md +++ /dev/null @@ -1,27 +0,0 @@ -# Done: - -## \<2025-07-17 Thu\> - - - -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\> - - - -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\> - - - -WASH HANDS AFTER TOUCHING GREEN CHILLI. - -juilienne : cutting the garlic into small strips diff --git a/Non Technical/20260107182221-2026_targets.md b/Non Technical/2026 Targets.md old mode 100644 new mode 100755 similarity index 71% rename from Non Technical/20260107182221-2026_targets.md rename to Non Technical/2026 Targets.md index 622460b..8b8d5ba --- a/Non Technical/20260107182221-2026_targets.md +++ b/Non Technical/2026 Targets.md @@ -1,3 +1,9 @@ +--- +note type: + - note +date: 2026-07-08 +done: +--- # Reading: - 20 books diff --git a/Non Technical/20260211114817-personal_operating_system.md b/Non Technical/20260211114817-personal_operating_system.md deleted file mode 100644 index e25f3dd..0000000 --- a/Non Technical/20260211114817-personal_operating_system.md +++ /dev/null @@ -1,3 +0,0 @@ - - [Timetable](id:fc92a943-61ac-462a-b6e5-8be46069f2ca) - -# Personal Operating System diff --git a/Non Technical/20260307233451-recipes_cookbook.md b/Non Technical/20260307233451-recipes_cookbook.md deleted file mode 100644 index 696f62e..0000000 --- a/Non Technical/20260307233451-recipes_cookbook.md +++ /dev/null @@ -1,71 +0,0 @@ -# Dinner - -## Crispy Honey Chili Chicken Chicken\_and\_Rice Dinner Family - -| | | -| ------------ | ------------------------------------------------------------------------------------- | -| **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 Chicken Chicken\_and\_Rice Lunch Rice - -| | | -| ------------ | ------------------------------------------------------------------------------------- | -| **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 Lunch Tuna - -| | | -| ------------ | ------------------------------------------------------------------------------------- | -| **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 Lunch Tuna - -| | | -| ------------ | ------------------------------------------------------------------------------------- | -| **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 Chicken Chicken\_and\_Rice Lunch One\_Pot Rice - -| | | -| ------------ | ------------------------------------------------------------------------------------- | -| **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 Lunch Peas Potato Quesadilla - -| | | -| ------------ | ------------------------------------------------------------------------------------- | -| **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) | diff --git a/Non Technical/20260429110504-ibarat.md b/Non Technical/20260429110504-ibarat.md deleted file mode 100644 index 636b5f9..0000000 --- a/Non Technical/20260429110504-ibarat.md +++ /dev/null @@ -1,14 +0,0 @@ -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 diff --git a/Non Technical/20260414162623-chrome_tabs_backup.md b/Non Technical/Chrome Tabs Backups.md old mode 100644 new mode 100755 similarity index 99% rename from Non Technical/20260414162623-chrome_tabs_backup.md rename to Non Technical/Chrome Tabs Backups.md index 09b12ca..2f5a946 --- a/Non Technical/20260414162623-chrome_tabs_backup.md +++ b/Non Technical/Chrome Tabs Backups.md @@ -1,3 +1,9 @@ +--- +note type: + - backups +date: 2026-07-08 +done: true +--- Here are all the links exported out of google chrome that date back to 2023. It will take a while to clean them out but for the moment, they will sit here. # diff --git a/Non Technical/20260410154301-decluttering_plan.md b/Non Technical/Decluttering Plan.md old mode 100644 new mode 100755 similarity index 97% rename from Non Technical/20260410154301-decluttering_plan.md rename to Non Technical/Decluttering Plan.md index aca909c..92e3034 --- a/Non Technical/20260410154301-decluttering_plan.md +++ b/Non Technical/Decluttering Plan.md @@ -1,3 +1,9 @@ +--- +note type: + - note +date: 2026-07-08 +done: +--- # 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. diff --git a/Non Technical/20260407121857-finances.md b/Non Technical/Finances.md old mode 100644 new mode 100755 similarity index 92% rename from Non Technical/20260407121857-finances.md rename to Non Technical/Finances.md index 2ce9379..a79c999 --- a/Non Technical/20260407121857-finances.md +++ b/Non Technical/Finances.md @@ -1,3 +1,10 @@ +--- +note type: + - finance + - note +date: 2026-07-08 +done: true +--- # Payslips | Month | Amount | diff --git a/Non Technical/History/Chechnya.md b/Non Technical/History/Chechnya.md new file mode 100755 index 0000000..4486332 --- /dev/null +++ b/Non Technical/History/Chechnya.md @@ -0,0 +1,61 @@ +--- +note type: + - note + - history +date: 2026-06-12 +done: +--- +## Big picture + +The **Chechen Wars** were two brutal conflicts between **Russia** and **Chechen separatists** after the collapse of the USSR. Chechnya wanted independence; Moscow wanted to keep Chechnya inside the Russian Federation. The first war ended with Russia effectively failing to control Chechnya. The second war ended with Russia re-establishing control through a loyal Chechen leadership under the Kadyrov family. ([Encyclopedia Britannica][1]) + +## Background: USSR and Chechnya + +Chechnya had a long history of resisting Russian rule. Under the **USSR**, Chechnya was part of the **Chechen-Ingush Autonomous Soviet Socialist Republic**. In 1944, Stalin accused Chechens and Ingush of collaborating with Nazi Germany and deported hundreds of thousands to Central Asia; they were allowed to return only after Stalin’s death, during the Khrushchev period. This created deep distrust of Moscow that shaped later independence movements. ([Sciences Po][2]) + +When the **USSR collapsed in 1991**, several republics became independent states. Chechnya, however, was not a full Soviet republic but an autonomous region inside Russia, so Moscow refused to accept its independence. Chechen leader **Dzhokhar Dudayev** declared the Chechen Republic of Ichkeria independent, but Russia did not recognise it. ([U.S. Department of War][3]) + +## First Chechen War, 1994–1996 + +The **cause** was Chechnya’s attempt to break away from Russia after 1991. Russian president **Boris Yeltsin** sent troops in December 1994, expecting a quick victory, but Russian forces faced strong Chechen resistance, especially in the capital **Grozny**. The war became extremely destructive, with heavy civilian suffering and major damage to Grozny. ([Encyclopedia Britannica][1]) + +The **main Chechen figures** were **Dzhokhar Dudayev**, the independence leader, and later **Aslan Maskhadov**, a senior commander who became president of the unrecognised Chechen Republic of Ichkeria. On the Russian side, the key figure was **Boris Yeltsin**. The war ended with the **Khasavyurt Accord** in 1996, after Chechen fighters retook much of Grozny and Russia agreed to withdraw. A provisional peace treaty followed in 1997. ([Encyclopedia Britannica][1]) + +The **outcome** was basically a Chechen military and political success in the short term. Russia withdrew, and Chechnya had de facto independence, but it was not internationally recognised. Chechnya then became unstable, with economic collapse, warlordism, kidnappings, and growing Islamist influence. + +## Second Chechen War, 1999–2009 + +The **cause** was a mix of Chechnya’s instability, Islamist militant activity, and Russia’s desire to restore control. In 1999, militants linked to **Shamil Basayev** and **Ibn al-Khattab** crossed from Chechnya into neighbouring Dagestan. Around the same period, apartment bombings in Russian cities killed hundreds; the Russian government blamed Chechen militants, although the bombings remain controversial. These events gave Moscow the justification for a new invasion. ([Wikipedia][4]) + +The **main Russian figure** was **Vladimir Putin**, who was prime minister in 1999 and became president in 2000. His hard line on Chechnya helped build his image as a strong leader. On the Chechen side, important figures included **Aslan Maskhadov**, **Shamil Basayev**, **Ibn al-Khattab**, and later **Doku Umarov**, who moved the separatist struggle toward a wider Islamist insurgency in the North Caucasus. ([Encyclopedia Britannica][5]) + +The **outcome** was a Russian victory. Russian forces captured Grozny after heavy bombardment, and Moscow gradually replaced direct military rule with a pro-Russian Chechen government. In 2003, a new constitution kept Chechnya inside the Russian Federation. Russia officially ended its “counter-terrorism operation” in Chechnya in 2009, although violence continued in the wider North Caucasus. ([Encyclopedia Britannica][1]) + +## The Kadyrovs + +A major turning point was Moscow’s alliance with **Akhmad Kadyrov**, a former separatist-linked religious leader who switched sides and became the pro-Russian leader of Chechnya. He was assassinated in 2004. His son, **Ramzan Kadyrov**, later became Chechnya’s leader in 2007 and built a highly personal, authoritarian regime loyal to Putin. ([OSW Ośrodek Studiów Wschodnich][6]) + +## Current state of Chechnya + +Today, Chechnya is officially a **republic within the Russian Federation**. It is not independent. It is ruled by **Ramzan Kadyrov**, who has wide internal autonomy from Moscow in return for loyalty to Putin and keeping Chechnya stable. OSW describes this as an unusual arrangement inside Russia, with Chechnya having a special status compared with other Russian regions. ([OSW Ośrodek Studiów Wschodnich][6]) + +The region has been rebuilt, especially Grozny, but political freedom is extremely limited. Human rights groups report severe abuses, including torture, disappearances, unlawful arrests, killings, and intimidation of critics. Moscow is often accused of tolerating this because Kadyrov keeps Chechnya under control. ([Human Rights Watch][7]) + +Chechen forces loyal to Kadyrov have also been involved in Russia’s war in Ukraine. Kadyrov remains publicly loyal to Putin and has presented himself as one of Russia’s most hardline pro-war figures. There are also signs of dynastic succession, with members of the Kadyrov family, including his son Adam, being placed into senior security roles. ([Reuters][8]) + +## Small section: what “the Kremlin” means + +The **Kremlin** literally means the fortified government complex in Moscow, but in politics it usually means **Russia’s central leadership**, especially the president and his inner circle. In the Chechen wars, “the Kremlin” refers to Moscow’s policy: first under **Yeltsin**, then under **Putin**. The Kremlin’s main goal was to stop Chechnya leaving Russia and to prevent separatism spreading to other regions. In the current period, the Kremlin keeps Chechnya inside Russia by relying on Kadyrov’s loyalty and security apparatus. ([OSW Ośrodek Studiów Wschodnich][6]) + +## One-sentence summary + +The **First Chechen War** was Russia’s failed attempt to stop Chechen independence, while the **Second Chechen War** was Russia’s successful but brutal reconquest, after which Chechnya became a heavily controlled Russian republic ruled by the Kremlin-backed Kadyrov regime. + +[1]: https://www.britannica.com/summary/Chechnya "Chechnya summary | Britannica" +[2]: https://www.sciencespo.fr/mass-violence-war-massacre-resistance/fr/document/massive-deportation-chechen-people-how-and-why-chechens-were-deported.html?utm_source=chatgpt.com "The Massive Deportation of the Chechen People" +[3]: https://media.defense.gov/2024/Jul/29/2003514000/-1/-1/0/20240726_CHECHNYA_1991-2000.PDF?utm_source=chatgpt.com "Case Studies" +[4]: https://en.wikipedia.org/wiki/1999_war_in_Dagestan?utm_source=chatgpt.com "1999 war in Dagestan" +[5]: https://www.britannica.com/biography/Doku-Umarov "Doku Umarov | Chechen Separatist, Guerrilla Leader & Terrorist | Britannica" +[6]: https://www.osw.waw.pl/en/publikacje/osw-commentary/2026-03-19/more-life-stake-uncertain-future-kadyrov-regime-chechnya "More than life at stake: the uncertain future of the Kadyrov regime in Chechnya | OSW Centre for Eastern Studies" +[7]: https://www.hrw.org/news/2021/06/24/kremlin-endorses-another-term-kadyrov-and-his-brutal-chechen-regime "Kremlin Endorses Another Term for Kadyrov and His Brutal Chechen Regime | Human Rights Watch" +[8]: https://www.reuters.com/world/europe/chechen-leader-kadyrov-says-russia-should-fight-ukraine-war-end-2026-01-29/ "Chechen leader Kadyrov says Russia should fight war in Ukraine to the end | Reuters" diff --git a/Non Technical/History/History MOC.md b/Non Technical/History/History MOC.md new file mode 100755 index 0000000..4c80da4 --- /dev/null +++ b/Non Technical/History/History MOC.md @@ -0,0 +1,2 @@ + +[[Chechnya]] \ No newline at end of file diff --git a/Non Technical/Non Technical MOC.md b/Non Technical/Non Technical MOC.md old mode 100644 new mode 100755 index 7a8e50e..f391f19 --- a/Non Technical/Non Technical MOC.md +++ b/Non Technical/Non Technical MOC.md @@ -1,21 +1,15 @@ - - [Books MOC](id:63314cff-3a3f-49b4-9e76-4a359c51f55f) +--- +note type: + - moc +date: 2026-07-08 +done: true +--- +- [[Wedding MOC]] +- [[Books MOC]] +- [[Articles MOC]] +- [[Finances]] +- [[Chrome Tabs Backups]] +- [[z resources]] +- [[Proverbs]] +- [[Textual Hifz]] - - [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) diff --git a/Non Technical/20260307165727-proverbs.md b/Non Technical/Proverbs.md old mode 100644 new mode 100755 similarity index 95% rename from Non Technical/20260307165727-proverbs.md rename to Non Technical/Proverbs.md index 39a7d2b..f09307f --- a/Non Technical/20260307165727-proverbs.md +++ b/Non Technical/Proverbs.md @@ -1,3 +1,9 @@ +--- +note type: + - note +date: 2026-07-08 +done: true +--- # Arabic # French diff --git a/Non Technical/20260420142151-textual_hifz.md b/Non Technical/Textual Hifz.md old mode 100644 new mode 100755 similarity index 99% rename from Non Technical/20260420142151-textual_hifz.md rename to Non Technical/Textual Hifz.md index 1841f65..e35acb4 --- a/Non Technical/20260420142151-textual_hifz.md +++ b/Non Technical/Textual Hifz.md @@ -1,5 +1,9 @@ -[Ibarat](id:3d3c56dc-0327-4e18-a90a-1bc105496243) - +--- +note type: + - note +date: 2026-07-08 +done: +--- # Plan: ## Sciences of the Quran & Recitation (Tajwīd) diff --git a/Non Technical/20260211124505-timetable.md b/Non Technical/Timetable.md old mode 100644 new mode 100755 similarity index 96% rename from Non Technical/20260211124505-timetable.md rename to Non Technical/Timetable.md index 6b24d4d..d3e8330 --- a/Non Technical/20260211124505-timetable.md +++ b/Non Technical/Timetable.md @@ -1,3 +1,9 @@ +--- +note type: + - note +date: 2026-07-08 +done: +--- # Non-Ramadan — Weekdays | | | | diff --git a/Non Technical/20250918120706-wedding_moc.md b/Non Technical/Wedding MOC.md old mode 100644 new mode 100755 similarity index 51% rename from Non Technical/20250918120706-wedding_moc.md rename to Non Technical/Wedding MOC.md index 31c055d..44bd1b5 --- a/Non Technical/20250918120706-wedding_moc.md +++ b/Non Technical/Wedding MOC.md @@ -1,3 +1,9 @@ +--- +note type: + - moc +date: 2026-07-08 +done: true +--- # Important dates ## Engagement Day: \<2025-10-26 Sun\> 3pm-6pm @@ -5,3 +11,7 @@ ## Nikah / Barat: \<2026-08-02 Sun\> ## Walima: \<2026-08-09 Sun\> + +Exchange of gifts: +- 04/07/2026 (Bride side) +- 20/07/26 (Groom side) \ No newline at end of file diff --git a/Non Technical/z resources.md b/Non Technical/z resources.md old mode 100644 new mode 100755 index 5bf131b..0eee87c --- a/Non Technical/z resources.md +++ b/Non Technical/z resources.md @@ -1,26 +1,38 @@ +--- +note type: + - note +date: 2026-07-08 +done: +--- # Articles: - - - - - - + - [ ] + - [ ] + - [ ] + - [ ] # Interesting things to read up: -- -- -- -- -- -- -- -- -- -- -- https://www.vatican.va/content/leo-xiv/en/encyclicals/documents/20260515-magnifica-humanitas.html +- [ ] +- [ ] +- [ ] +- [ ] +- [ ] +- [ ] +- [ ] +- [ ] +- [ ] +- [ ] +- [ ] https://www.vatican.va/content/leo-xiv/en/encyclicals/documents/20260515-magnifica-humanitas.html + +## 15/06/26 +- [ ] https://en.wikipedia.org/wiki/Mutation_testing +- [ ] [Investments with yearly rate of returns of 10% for 10 years](https://search.brave.com/ask?q=if+you+invest+%C2%A320k+a+year+monthly%2C+with+a+rate+of+return+of+10%25+per+year+for+5+years+into+a+stocks+and+shares+isa%2C+how+much+do+you+make&conversation=0939236ccead38bcf48b863907c6bd192ed8) # Server resources: -- +- [ ] # Repos -- +- [ ] +- [ ] \ No newline at end of file diff --git a/Technical/20250918120519-misc_moc.md b/Technical/20250918120519-misc_moc.md deleted file mode 100644 index d6d7e04..0000000 --- a/Technical/20250918120519-misc_moc.md +++ /dev/null @@ -1,3 +0,0 @@ -# [weddingmoc](id:c1de3972-e932-48fd-8065-3d89dad58007) - -# [workflow-moc](id:8CE93986-280B-45BD-9DF2-5D06586DDDE7) diff --git a/Technical/20250926151524-workflow_moc.md b/Technical/20250926151524-workflow_moc.md deleted file mode 100644 index e866067..0000000 --- a/Technical/20250926151524-workflow_moc.md +++ /dev/null @@ -1,7 +0,0 @@ -What are the use cases of the macbook and the pc: - -# Macbook - -## - -# PC diff --git a/Technical/20251223220531-technical_commonplace.md b/Technical/20251223220531-technical_commonplace.md deleted file mode 100644 index eea9172..0000000 --- a/Technical/20251223220531-technical_commonplace.md +++ /dev/null @@ -1,9 +0,0 @@ -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: - - - - -# Github: - - - diff --git a/Technical/20260111204228-rss_articles.md b/Technical/20260111204228-rss_articles.md deleted file mode 100644 index 3412d20..0000000 --- a/Technical/20260111204228-rss_articles.md +++ /dev/null @@ -1,9 +0,0 @@ -# [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) diff --git a/Technical/20260117194854-programming_projects.md b/Technical/20260117194854-programming_projects.md deleted file mode 100644 index e7a6edd..0000000 --- a/Technical/20260117194854-programming_projects.md +++ /dev/null @@ -1 +0,0 @@ - - diff --git a/Technical/AdventureOS/AdventureOS.md b/Technical/AdventureOS/AdventureOS.md new file mode 100755 index 0000000..70bc48e --- /dev/null +++ b/Technical/AdventureOS/AdventureOS.md @@ -0,0 +1,8 @@ +--- +note type: + - moc +date: 2026-07-03 +done: +link: https://gitea.zainezq.com/zaine/adventure +--- +[[SQL Diagram (ERD)]] \ No newline at end of file diff --git a/Technical/AdventureOS/Attachments/postgres - adventureos - public.png b/Technical/AdventureOS/Attachments/postgres - adventureos - public.png new file mode 100755 index 0000000..d331b93 Binary files /dev/null and b/Technical/AdventureOS/Attachments/postgres - adventureos - public.png differ diff --git a/Technical/AdventureOS/SQL Diagram (ERD).md b/Technical/AdventureOS/SQL Diagram (ERD).md new file mode 100755 index 0000000..6c0fa12 --- /dev/null +++ b/Technical/AdventureOS/SQL Diagram (ERD).md @@ -0,0 +1,8 @@ +--- +note type: + - sql + - database +date: 2026-07-03 +done: true +--- +![[postgres - adventureos - public.png]] diff --git a/Technical/Android app.md b/Technical/Coding/Android app.md old mode 100644 new mode 100755 similarity index 51% rename from Technical/Android app.md rename to Technical/Coding/Android app.md index 722c442..9008b77 --- a/Technical/Android app.md +++ b/Technical/Coding/Android app.md @@ -1,7 +1,16 @@ +--- +note type: + - note + - technical +date: 2026-06-17 +done: true +--- +## Running: -``./gradlew :app:installDebug +`./gradlew :app:installDebug `./gradlew :app:assembleDebug ` - +## Reverse +`adb reverse tcp:9010 tcp:9010` - Without adb reverse: emulator usually uses http://10.0.2.2:9010/ - With adb reverse: emulator uses http://127.0.0.1:9010/ diff --git a/Technical/20251214210526-useful_c_imports.md b/Technical/Coding/C imports.md old mode 100644 new mode 100755 similarity index 51% rename from Technical/20251214210526-useful_c_imports.md rename to Technical/Coding/C imports.md index f8cc051..1dc49e6 --- a/Technical/20251214210526-useful_c_imports.md +++ b/Technical/Coding/C imports.md @@ -1 +1,7 @@ +--- +note type: + - note +date: 2026-06-17 +done: true +--- - SDL2 [See this](https://wiki.libsdl.org/SDL2/FrontPage) diff --git a/Technical/20250402185735-java_moc.md b/Technical/Coding/Java MOC.md old mode 100644 new mode 100755 similarity index 51% rename from Technical/20250402185735-java_moc.md rename to Technical/Coding/Java MOC.md index 28812c8..d97c614 --- a/Technical/20250402185735-java_moc.md +++ b/Technical/Coding/Java MOC.md @@ -1,3 +1,9 @@ +--- +note type: + - moc +date: 2026-06-17 +done: false +--- 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) +Tests: [[Junit Testing]] diff --git a/Technical/20250723190656-java_junit_testing.md b/Technical/Coding/Junit Testing.md old mode 100644 new mode 100755 similarity index 56% rename from Technical/20250723190656-java_junit_testing.md rename to Technical/Coding/Junit Testing.md index aa557d2..cb39b12 --- a/Technical/20250723190656-java_junit_testing.md +++ b/Technical/Coding/Junit Testing.md @@ -1 +1,7 @@ +--- +note type: + - note +date: 2026-06-17 +done: true +--- diff --git a/Technical/Coding/zainezq upgrade.md b/Technical/Coding/zainezq upgrade.md new file mode 100755 index 0000000..52e32c6 --- /dev/null +++ b/Technical/Coding/zainezq upgrade.md @@ -0,0 +1,180 @@ + +# • Technical Onboarding Report + + Project Summary + + This repo is the source for https://zainezq.com, described in README.md:3 as a personal/familial hub. It is primarily a static site generated from Org-mode files using + Emacs org-publish, with supporting Emacs Lisp, CSS, browser JavaScript, Python search-index generation, and Gitea Actions deployment. + + The main entry point is build-site.el:1. The documented local build command is: + + emacs -Q --script build-site.el + + That is also wrapped by make build in Makefile:13. + + Architecture + + The architecture is a static publishing pipeline: + + 1. Source content lives mostly in .org files under blogs/, posts/, home/, books/, play/, and tags/. + 2. build-site.el:555 defines multiple org-publish projects. + 3. Local Lisp modules in lisp/ provide sitemap, tag, sidenote, and recently-updated behavior. + 4. Assets from assets/ are copied into output/assets/. + 5. search-index-json.py:57 scans generated HTML in output/ and writes output/test.json. + 6. Browser search uses lunr.js plus assets/scripts/search.js:1. + 7. CI runs the build through Gitea Actions in .gitea/workflows/build.yml:47. + + The site has several generated artifacts: output/, .org-timestamps/, tag pages, sitemap pages, recently-updated.org, assets/content/comment-pages.json, and output/ + test.json. + + Repo Structure + + Observed top-level areas: + + - blogs/: dated blog content, arranged by year and month, for example blogs/2026/05-may/.... + - posts/: longer-form posts, currently mostly under posts/career/. + - home/: homepage-adjacent pages and guides. + - play/: interactive/playful pages with dedicated JavaScript and CSS. + - books/: book notes. + - lima/: Markdown/Org content handled by a special publisher. + - assets/: static CSS, JS, images, icons, fonts, sketchnotes, and content JSON. + - lisp/: custom Emacs Lisp build helpers. + - tags/: generated or semi-generated tag pages. + - output/: generated site output; ignored by Git. + - .gitea/workflows/: CI workflow. + - build-site-tests.el: ERT tests for some build helpers. + + I counted roughly 165 .org files, 16 browser JS files, 11 CSS files, 6 Emacs Lisp files, and 5 Markdown files outside generated/vendor directories. + + Build And Publishing + + build-site.el:24 establishes z/site-root as the canonical root and build-site.el:41 sets z/output-root, overrideable with SITE_OUTPUT_DIR. + + The publishing projects are explicit in build-site.el:555: + + - org-main: root .org content and main sitemap. + - org-assets: static assets. + - org-categories-sitemap: category page generation from home/. + - org-posts: posts. + - org-blogs: blogs, with grouped sitemap. + - org-books: book notes. + - org-career: career subsection sitemap. + - wip-pages: work-in-progress listing. + - org-tags: tag pages. + - org-lima: Markdown/Org Lima content. + + The build includes cache safety logic. build-site.el:713 documents that output/ and .org-timestamps/ must be wiped together. build-site.el:738 checks output integrity and + forces republish if key outputs are missing. + + make currently runs set-perms clean-output build search clean-venv via Makefile:11. This depends on an absolute external permissions script at Makefile:7, which makes a + fresh developer setup less portable. + + Dependencies + + Clear dependencies from the repo: + + - Emacs with Org export support. + - Emacs package htmlize, bootstrapped from MELPA/ELPA in build-site.el:116. + - Python packages: beautifulsoup4, lxml, legacy-cgi in requirements.txt:1. + - Browser libraries vendored under assets/scripts/, including lunr.js, mermaid.min.js, svg-pan-zoom.min.js, and bigger-picture.min.js. + - pandoc is required for Lima Markdown publishing in build-site.el:512. + - inotifywait is required by watcher.sh:13. + - PowerShell is required by the Gitea build monitor in .gitea/workflows/build.yml:60. + - A separate authoring service is referenced at /home/zaine/master-folder/org-platform/authoring-service in README.md:9 and Makefile:9. + + Missing: there is no lockfile for Python, no pinned Emacs package version except the currently present .packages cache, and no documented system package install list. + + Data Flow + + Content metadata drives behavior. The repo uses Org keywords such as #+TITLE, #+DATE, #+FILETAGS, #+COMMENTS, #+SLUG, #+HIDDEN_PAGE, #+WIP, and #+NO_SIDENOTES. + + Examples: + + - Comments are enabled when #+COMMENTS: t is present, handled by build-site.el:309. + - Comment slugs come from #+SLUG, falling back to filename in build-site.el:320. + - Hidden pages are omitted from sitemaps using #+HIDDEN_PAGE: t in lisp/sitemaps.el:29. + - #+NO_SIDENOTES and some tags affect body classes through lisp/sidenotes.el:11. + - Tag pages are generated from FILETAGS/TAGS in lisp/tags.el:39. + - Recently updated content uses #+DATE or file modification time in lisp/recently-updated.el:47. + + Client-side comments call /api/comments/... in assets/scripts/comments.js:92. I could not determine the comments backend from this repo; only the frontend and generated + comment-page manifest are present. + + Coding Standards And Conventions + + Clear conventions: + + - Emacs Lisp functions use a z/ prefix. + - Build script sections are heavily commented and organized. + - Org metadata is the main content contract. + - Generated pages are regular Org files in some cases, for example tag pages and recently-updated.org. + - Browser JS is plain JavaScript, no bundler, no module system. + - CSS is split by concern: style.css, comments.css, kanban.css, play.css, wird-tracker.css, etc. + - Generated output and local build caches are ignored in .gitignore:1. + + Missing or unclear: + + - No formatter or linter config for Emacs Lisp, Python, JS, CSS, or Org. + - No documented code style beyond existing patterns. + - Vendored minified JS dependencies are not documented with source/version/license. + - There are Syncthing conflict files in tags/, which suggests generated/source ownership is not fully clean. + + Testing + + There is an ERT test file, build-site-tests.el:1, covering comments helpers, Lima sitemap formatting, attachment copying, and body class behavior. + + Important finding: tests currently document known bugs. For example build-site-tests.el:112 says non-HTML backend handling returns nil because when has no else branch, and + build-site-tests.el:248 documents the same issue for body-class filtering. + + make test does not run these local ERT tests. It delegates to the external authoring-service repo via Makefile:25. I found only Python bytecode under tests/__pycache__, + not source tests in this repo. + + I did not run the test suite because the available test command points outside the repository, and loading build-site.el can generate files as part of its top-level + execution. + + Developer Workflow + + Documented workflow: + + - Build site: make build or emacs -Q --script build-site.el. + - Full build: make, which also sets permissions, cleans output, builds, generates search, and removes .venv. + - Generate search: make search. + - Start authoring UI: make author, delegated to the external authoring-service. + - CI: Gitea Actions runs SITE_CLEAN=1 make and then a PowerShell monitor. + + The workflow is practical for the original machine, but not yet portable for a new developer because multiple paths are absolute and outside this repo. + + Maintainability Assessment + + Strong points: + + - The core build pipeline is centralized in build-site.el. + - Local Emacs Lisp helpers are split by domain. + - Metadata-driven behavior is understandable once keywords are known. + - Build logging and cache integrity handling are thoughtful. + - The repo has a README with the high-level build model and authoring-service notes. + + Risks and gaps: + + - build-site.el performs package install, generation, config, and publish execution at top level, making it hard to load safely in tests. + - make test does not test this repo’s local ERT tests. + - Absolute paths tie the repo to one machine and user. + - Some generated files appear committed or source-adjacent, especially tags/*.org, recently-updated.org, and list pages. + - Python dependencies are unpinned. + - The comment API backend and authoring service are outside the repo, but the static site depends on their contracts. + - Search output is named test.json, which is unclear for production behavior. + - The working tree was already dirty: gitea-build-monitor.log and posts/posts-list.org were modified. + + Prioritised Recommendations + + 1. Make local onboarding reproducible: document required system packages, Emacs version, Python version, pandoc, inotifywait, PowerShell, and expected external services. + 2. Remove or parameterize absolute paths in Makefile, CI, watcher.sh, and deployment scripts. Use env vars with documented defaults. + 3. Split build-site.el into loadable definitions and an explicit main entry point so tests can load functions without generating files or publishing. + 4. Wire local ERT tests into make test, and keep the external authoring-service tests under a separate target such as make test-author. + 5. Fix the documented non-HTML backend bugs in z/org-html-insert-comments-into-body and z/org-html-add-body-classes, then flip the tests. + 6. Clarify generated-file ownership: decide which .org files are hand-authored versus generated, remove sync-conflict files, and add generation notes or ignores where appropriate. + 7. Rename output/test.json and related references to a production name such as search-index.json. + 8. Pin Python dependencies and document vendored JS library versions/licenses. + 9. Document the comment API contract and authoring-service contract, since frontend code depends on /api/comments and the README points to an external repo. + 10. Add lightweight lint/format checks for Emacs Lisp, Python, and browser JS once the build/test workflow is stable. + diff --git a/Technical/20251101123637-backlog.md b/Technical/Digital Backlog.md old mode 100644 new mode 100755 similarity index 65% rename from Technical/20251101123637-backlog.md rename to Technical/Digital Backlog.md index c820a4e..0fda27e --- a/Technical/20251101123637-backlog.md +++ b/Technical/Digital Backlog.md @@ -1,4 +1,11 @@ -****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.**** +--- +note type: + - technical + - note +date: 2026-07-08 +done: +--- +**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 diff --git a/Technical/Emacs/Elisp.md b/Technical/Emacs/Elisp.md old mode 100644 new mode 100755 diff --git a/Technical/Emacs/Emacs Calendar.md b/Technical/Emacs/Emacs Calendar.md old mode 100644 new mode 100755 diff --git a/Technical/Emacs/Emacs Config.md b/Technical/Emacs/Emacs Config.md old mode 100644 new mode 100755 diff --git a/Technical/Emacs/Emacs MOC.md b/Technical/Emacs/Emacs MOC.md old mode 100644 new mode 100755 diff --git a/Technical/Emacs/Evil Mode.md b/Technical/Emacs/Evil Mode.md old mode 100644 new mode 100755 diff --git a/Technical/Emacs/GTD.md b/Technical/Emacs/GTD.md old mode 100644 new mode 100755 diff --git a/Technical/Emacs/Keybindings Emacs.md b/Technical/Emacs/Keybindings Emacs.md old mode 100644 new mode 100755 diff --git a/Technical/Emacs/Magit.md b/Technical/Emacs/Magit.md old mode 100644 new mode 100755 diff --git a/Technical/Emacs/Org Noter.md b/Technical/Emacs/Org Noter.md old mode 100644 new mode 100755 diff --git a/Technical/Emacs/Org Publish.md b/Technical/Emacs/Org Publish.md old mode 100644 new mode 100755 diff --git a/Technical/Emacs/Org Roam.md b/Technical/Emacs/Org Roam.md old mode 100644 new mode 100755 diff --git a/Technical/Linux/Arch Linux.md b/Technical/Linux/Arch Linux.md old mode 100644 new mode 100755 diff --git a/Technical/Linux/GPG Encryption.md b/Technical/Linux/GPG Encryption.md old mode 100644 new mode 100755 diff --git a/Technical/Linux/Keyboard.md b/Technical/Linux/Keyboard.md old mode 100644 new mode 100755 diff --git a/Technical/Linux/Linux MOC.md b/Technical/Linux/Linux MOC.md old mode 100644 new mode 100755 diff --git a/Technical/Linux/Systemd Services.md b/Technical/Linux/Systemd Services.md old mode 100644 new mode 100755 diff --git a/Technical/Linux/Wacom.md b/Technical/Linux/Wacom.md old mode 100644 new mode 100755 diff --git a/Technical/Linux/i3 WM.md b/Technical/Linux/i3 WM.md old mode 100644 new mode 100755 diff --git a/Technical/Server/Actual (finance).md b/Technical/Server/Actual (finance).md old mode 100644 new mode 100755 index 592fc26..7245d0a --- a/Technical/Server/Actual (finance).md +++ b/Technical/Server/Actual (finance).md @@ -1,3 +1,11 @@ +--- +note type: + - note + - server +date: 2026-07-08 +done: true +--- + # 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. \[ \] diff --git a/Technical/Server/Cloudflare.md b/Technical/Server/Cloudflare.md old mode 100644 new mode 100755 diff --git a/Technical/Server/Gitea.md b/Technical/Server/Gitea.md old mode 100644 new mode 100755 diff --git a/Technical/Server/Nextcloud.md b/Technical/Server/Nextcloud.md old mode 100644 new mode 100755 diff --git a/Technical/Server/Old NGINX Code.md b/Technical/Server/Old NGINX Code.md old mode 100644 new mode 100755 diff --git a/Technical/Server/Old Nextcloud.md b/Technical/Server/Old Nextcloud.md old mode 100644 new mode 100755 diff --git a/Technical/Server/RClone.md b/Technical/Server/RClone.md new file mode 100755 index 0000000..459d7e6 --- /dev/null +++ b/Technical/Server/RClone.md @@ -0,0 +1,18 @@ +--- +note type: + - note + - technical + - server +date: 2026-07-08 +done: true +--- +# Config rclone +[gdrive-naats] +scope = drive +root_folder_id = 1hPWQhbN6IzTHXsoWXNUfEJcJvsqNuKO3 +token = {"access_token":"ya29.a0AT3oNZ-q7U13IU0crYaDheKuUeBQdfZL3YCmZ2jjlEylXO1wazaZizHtHFwR5DYBpIA5fm1h1QKYFUPBjQ9H797CnReawHbv4Q2xjf6aqunNpfh1YOelUVCnBHbMAh7LFRF45R9jzvtIq8eVFs-B121RiMZuWGieSwEE5VikA_HEDFLJ_UCmpYVxIdhP0MSVNfSX2XcaCgYKAbMSARESFQHGX2MiJDojeLl-WI4BgR47k9WrRA0206","token_type":"Bearer","refresh_token":"1//03hFnXjchDjE5CgYIARAAGAMSNwF-L9IrISKDqOpd45XqBjWX_ULW8EPKP80itw48S1bJVyXa3nGS2TgBCTwbiNOaYwbzzgqaRTM","expiry":"2026-07-06T17:03:13.815812029+01:00"} +-------------------- +y) Yes this is OK (default) +e) Edit this remote +d) Delete this remote +y/e/d> diff --git a/Technical/Server/Server Backend.md b/Technical/Server/Server Backend.md old mode 100644 new mode 100755 diff --git a/Technical/Server/Server MOC.md b/Technical/Server/Server MOC.md old mode 100644 new mode 100755 index de4fbb0..1a7fd31 --- a/Technical/Server/Server MOC.md +++ b/Technical/Server/Server MOC.md @@ -19,4 +19,6 @@ done: true - [[Cloudflare]] -- [[Gitea]] \ No newline at end of file +- [[Gitea]] + +- [[RClone]] \ No newline at end of file diff --git a/Technical/Server/Vaultwarden.md b/Technical/Server/Vaultwarden.md old mode 100644 new mode 100755 diff --git a/Technical/Technical MOC.md b/Technical/Technical MOC.md old mode 100644 new mode 100755 index e96ac18..7f89b0d --- a/Technical/Technical MOC.md +++ b/Technical/Technical MOC.md @@ -7,6 +7,10 @@ done: true --- In this file I want to include technical information (things related to programming, coding and networking etc): +- [[Linux MOC]] +- [[Emacs MOC]] +- [[Server MOC]] + - [Programming Projects](id:d63abaad-15e8-45d8-aafb-c634164ec0c0) - [AOC Notes](id:e7f2302b-16eb-476d-a7b9-be12f077819d) @@ -15,7 +19,6 @@ In this file I want to include technical information (things related to programm - [Github Notes](id:ee6047b0-c878-4ec8-a1cf-9daf5c8f5b8e) - - [Linux MOC](id:bdb493df-db92-4c93-9558-0b10fdff3048) - [Database MOC](id:e448cd99-afee-4702-947f-644bb34dc1aa) diff --git a/Templates/articles template.md b/Templates/articles template.md old mode 100644 new mode 100755 index dacb9e6..5ada02b --- a/Templates/articles template.md +++ b/Templates/articles template.md @@ -4,5 +4,6 @@ date started: "{{date}}" date finished: type: done: +note type: --- # {{title}}: Notes \ No newline at end of file diff --git a/Templates/books template.md b/Templates/books template.md old mode 100644 new mode 100755 diff --git a/Templates/concept template.md b/Templates/concept template.md old mode 100644 new mode 100755 diff --git a/Templates/daily template.md b/Templates/daily template.md old mode 100644 new mode 100755 index fec45af..95c92d8 --- a/Templates/daily template.md +++ b/Templates/daily template.md @@ -2,10 +2,10 @@ work day: false date: "{{date}}" --- - # {{title}} ## TODOs +- [ ] Exercise - [ ] - [ ] - [ ] diff --git a/_attachments/anime-kuroko-no-basket-tetsuya-basketball-play-17f4blaudede9nw2.gif b/_attachments/anime-kuroko-no-basket-tetsuya-basketball-play-17f4blaudede9nw2.gif old mode 100644 new mode 100755 diff --git a/pdfs/_alim_class/A Gift of Precious Gems Bukhari intro sh Fadhlur rahman Final 20 FEB 2024.pdf b/pdfs/_alim_class/A Gift of Precious Gems Bukhari intro sh Fadhlur rahman Final 20 FEB 2024.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_alim_class/Al-Muhannad__ala_al-Mufannad_Translation.pdf b/pdfs/_alim_class/Al-Muhannad__ala_al-Mufannad_Translation.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_alim_class/Daurah/Imam Rabbani - Mujaddid Alf Thani.pdf b/pdfs/_alim_class/Daurah/Imam Rabbani - Mujaddid Alf Thani.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_alim_class/Daurah/Lessons in Islamic History.pdf b/pdfs/_alim_class/Daurah/Lessons in Islamic History.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_alim_class/Mukhtasar/Mukhtasar-Al-Quduri-Arabic-text.pdf b/pdfs/_alim_class/Mukhtasar/Mukhtasar-Al-Quduri-Arabic-text.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_alim_class/Mukhtasar/The-Mukhtasar-Al-Quduri-A-Manual-of-Islamic-Law-According-to-the-Hanafi-School.pdf b/pdfs/_alim_class/Mukhtasar/The-Mukhtasar-Al-Quduri-A-Manual-of-Islamic-Law-According-to-the-Hanafi-School.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_alim_class/_memorisation/0701NukhbatAlFikarFiMustalahiAhlAlAthrAlQasim.pdf b/pdfs/_alim_class/_memorisation/0701NukhbatAlFikarFiMustalahiAhlAlAthrAlQasim.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_alim_class/_memorisation/Al_Jazreyah.pdf b/pdfs/_alim_class/_memorisation/Al_Jazreyah.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_alim_class/_memorisation/ar_Tuhfat_Alatfal1.pdf b/pdfs/_alim_class/_memorisation/ar_Tuhfat_Alatfal1.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_alim_class/_memorisation/المنظومة البيقونية.pdf b/pdfs/_alim_class/_memorisation/المنظومة البيقونية.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_articles/20-laws-software-engineering.pdf b/pdfs/_articles/20-laws-software-engineering.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_articles/Double Booking Problem_ System Design Solutions _ ITNEXT.pdf b/pdfs/_articles/Double Booking Problem_ System Design Solutions _ ITNEXT.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_articles/Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome.pdf b/pdfs/_articles/Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome.pdf old mode 100644 new mode 100755 index 6a3edf4..d611b8b Binary files a/pdfs/_articles/Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome.pdf and b/pdfs/_articles/Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome.pdf differ diff --git a/pdfs/_articles/Every Senior Engineer I Respect Has Read These Books (Have You_) _ by The Latency Gambler _ Mar, 2026 _ Medium.pdf b/pdfs/_articles/Every Senior Engineer I Respect Has Read These Books (Have You_) _ by The Latency Gambler _ Mar, 2026 _ Medium.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_articles/I Thought I Knew System Design Until I Met a Google L7 Interviewer.pdf b/pdfs/_articles/I Thought I Knew System Design Until I Met a Google L7 Interviewer.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_articles/Opinion.pdf b/pdfs/_articles/Opinion.pdf old mode 100644 new mode 100755 diff --git a/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 b/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 old mode 100644 new mode 100755 diff --git a/pdfs/_articles/effect-of-tiktok-on-teens.pdf b/pdfs/_articles/effect-of-tiktok-on-teens.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_articles/reason-some-people-are-likable.pdf b/pdfs/_articles/reason-some-people-are-likable.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_articles/software-quality.pdf b/pdfs/_articles/software-quality.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_bootcamp/Agile Testing - Lisa Crispin and Janet Gregory.pdf b/pdfs/_bootcamp/Agile Testing - Lisa Crispin and Janet Gregory.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_bootcamp/Head First Design Patterns-O’Reilly.epub b/pdfs/_bootcamp/Head First Design Patterns-O’Reilly.epub old mode 100644 new mode 100755 diff --git a/pdfs/_bootcamp/Head First Design Patterns.pdf b/pdfs/_bootcamp/Head First Design Patterns.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_bootcamp/The Clean Coder - R. Martin.pdf b/pdfs/_bootcamp/The Clean Coder - R. Martin.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_bootcamp/The Toyota Way - Jeffrey Liker.pdf b/pdfs/_bootcamp/The Toyota Way - Jeffrey Liker.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_bootcamp/Working Effectively with Legacy Code - Michael Feathers.pdf b/pdfs/_bootcamp/Working Effectively with Legacy Code - Michael Feathers.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_bootcamp/code-complete-2nd-edition-v413hav.pdf b/pdfs/_bootcamp/code-complete-2nd-edition-v413hav.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_misc/Ikigai.pdf b/pdfs/_misc/Ikigai.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_misc/The Book of Ichigo Ichie.pdf b/pdfs/_misc/The Book of Ichigo Ichie.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_misc/The Science of Powerful Focus.pdf b/pdfs/_misc/The Science of Powerful Focus.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_misc/The_Science_Of_Self_Discipline.pdf b/pdfs/_misc/The_Science_Of_Self_Discipline.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_qirat/ar-qarat-hamza-elzayat-new.pdf b/pdfs/_qirat/ar-qarat-hamza-elzayat-new.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_qirat/ar-rawaet-sho3ba-3n-3asem-new.pdf b/pdfs/_qirat/ar-rawaet-sho3ba-3n-3asem-new.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_qirat/ar-raweat-warsh-new.pdf b/pdfs/_qirat/ar-raweat-warsh-new.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_qirat/‎⁨الثمر اليانع في رواية قالون عن نافع لمحمد نبهان بن حسين مصري⁩.pdf b/pdfs/_qirat/‎⁨الثمر اليانع في رواية قالون عن نافع لمحمد نبهان بن حسين مصري⁩.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_technical/Art of Computer Programming - Volume 1 (Fundamental Algorithms).pdf b/pdfs/_technical/Art of Computer Programming - Volume 1 (Fundamental Algorithms).pdf old mode 100644 new mode 100755 diff --git a/pdfs/_technical/Clean Code_ A Handbook of Agile Software Craftsmanship - Robert C. Martin.pdf b/pdfs/_technical/Clean Code_ A Handbook of Agile Software Craftsmanship - Robert C. Martin.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_technical/Quick Start Kubernetes - Nigel Poulton.pdf b/pdfs/_technical/Quick Start Kubernetes - Nigel Poulton.pdf new file mode 100755 index 0000000..0ca0b7e Binary files /dev/null and b/pdfs/_technical/Quick Start Kubernetes - Nigel Poulton.pdf differ diff --git a/pdfs/_technical/The Clean Coder.pdf b/pdfs/_technical/The Clean Coder.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_technical/grokking-algorithms-illustrated-programmers-curious.pdf b/pdfs/_technical/grokking-algorithms-illustrated-programmers-curious.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_technical/sicp.pdf b/pdfs/_technical/sicp.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_technical/so_good_they_cant_ignore_you.pdf b/pdfs/_technical/so_good_they_cant_ignore_you.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_uni/Guide to SSH Keys and GitLab.pdf b/pdfs/_uni/Guide to SSH Keys and GitLab.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_uni/TechReport-Angular-Cli.pdf b/pdfs/_uni/TechReport-Angular-Cli.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_uni/git-masterclass.pdf b/pdfs/_uni/git-masterclass.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_uni/springboot-masterclass.pdf b/pdfs/_uni/springboot-masterclass.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_urdu/Basic-Urdu-1670897891.pdf b/pdfs/_urdu/Basic-Urdu-1670897891.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_urdu/Proficiency in Urdu through English.pdf b/pdfs/_urdu/Proficiency in Urdu through English.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_urdu/Umrao-Jaan-Ada.pdf b/pdfs/_urdu/Umrao-Jaan-Ada.pdf old mode 100644 new mode 100755 diff --git a/pdfs/_urdu/st_exupery_le_petit_prince.pdf b/pdfs/_urdu/st_exupery_le_petit_prince.pdf old mode 100644 new mode 100755 diff --git a/pdfs/blank.pdf b/pdfs/blank.pdf old mode 100644 new mode 100755 diff --git a/systemd/quartz-notes.service b/systemd/quartz-notes.service old mode 100644 new mode 100755