From b19e3c10393bc7ead0999b85216e98110619c9cd Mon Sep 17 00:00:00 2001 From: Zaine Arch Date: Sun, 8 Mar 2026 13:04:05 +0000 Subject: [PATCH] Huge changes --- .gitignore | 0 .markdown-preview.html | 0 20241210001045-technical_moc.org | 0 20241210001150-aoc_notes.org | 0 20241210001206-leetcode_notes.org | 0 20241210004247-emacs_moc.org | 0 20241210004247-emacs_stuff.org | 0 20241210004329-org_roam.org | 5 + 20241210004453-gtd.org | 0 20241210012703-fyp.org | 0 20241210152650-uni.org | 0 20241210152650-uni_moc.org | 0 20241210152713-tpis.org | 0 20241210232054-uml_fyp.org | 0 20241210233721-brain_moc.org | 3 + ...1161232- job_application_cover_letters.org | 0 20241211161232-applications.org | 0 20241212013207-haskell_notes.org | 0 20241212013902-lazy_evaluation.org | 0 20241213005125-c_notes.org | 0 20241213005156-socket_programming_in_c.org | 0 20241217234535-web_port_notes.org | 0 20241217234944-wp_emacs_config_blorg.org | 0 20241220234456-github_notes.org | 0 ...1172543-the_science_of_self_discipline.org | 0 20250111213016-wp_prefront_cortex_blog.org | 0 20250120110833-afp.org | 0 20250120111047-afp_week1.org | 0 20250120113936-afp_lab_1.org | 0 20250121110241-afp_lec_1.org | 0 20250128110828-afp_week2.org | 0 20250128111008-afp_lec_2.org | 0 20250213124335-i3_wm.org | 0 20250214155617-wp_new_emacs_config_blorg.org | 0 20250218110239-afp_week5.org | 0 20250218110346-afp_lec_5.org | 0 20250218174735-emacs_stuff_keybindings.org | 0 20250226184629-wp_urge_surfing_blorg.org | 0 20250314223811-wp_growth_mindset.org | 0 20250314230952-wp_emotional_intelligence.org | 0 20250324041724-wp_week_12_reflections.org | 0 20250326002128-emacs_stuff_elisp.org | 0 20250329114733-ise.org | 0 20250329114848-ise_week_1.org | 0 20250329121843-ise_week_2.org | 0 20250329142725-ise_week_3.org | 0 20250329200158-ise_week_4.org | 0 20250329231658-emacs_stuff_magit.org | 0 20250331201944-ise_week_5.org | 0 20250331202447-ise_week_7.org | 0 20250402185735-java_moc.org | 0 20250402185735-technical_java_notes.org | 0 20250403120140-fyp_report_planning.org | 0 20250412234351-wp_sadness.org | 0 20250417173809-linux_moc.org | 0 20250417173809-linux_stuff.org | 0 20250417173821-wacom_notes.org | 0 20250420012258-emacs_stuff_evil.org | 0 20250428133236-systemd_services.org | 0 20250430001952-microlise_assessment.org | 0 20250516161728-gpg_encryption.org | 0 20250703183239-linux_arch_linux.org | 0 20250715223949-the_clean_coder.org | 0 20250717230336-recipes_main.org | 9 - 20250717230336-recipes_moc.org | 10 +- 20250719174944-recipes_ideas.org | 2 +- 20250719175023-recipes_done.org | 2 +- 20250722221649-career_moc.org | 0 20250723171109-maven_pom_file.org | 0 ...723182408-so-good-they-cant-ignore-you.org | 0 ...723182408-so_good_they_cant_ignore_you.org | 0 20250723183655-career_capital.org | 0 20250723183755-deliberate_practice.org | 0 20250723184233-advanced_networking.org | 0 ...184430-stanford_marshmallow_experiment.org | 0 20250723185056-neuroplasticity.org | 0 20250723185829-test_driven_development.org | 0 20250723185943-bowling_kata.org | 0 20250723190203-java_portswrigger_test.org | 0 20250723190656-java_junit_testing.org | 0 20250723190927-self_hosting.org | 0 20250723200800-postgres.org | 0 20250724230557-books_org_agenda.org | 23 +- 20250727120306-nextcloud.org | 24 + 20250727121051-networking_moc.org | 0 20250727122406-database_moc.org | 0 20250727174809-books_moc.org | 0 20250727174903-book_recs.org | 0 20250727221512-clean_code.org | 0 20250804201706-big_o_complexity.org | 0 20250804212215-how_to_solve_leetcode.org | 0 20250804212606-leetcode_arrays.org | 0 20250804214537-python_set.org | 0 20250805141906-python_dictionary.org | 0 20250805143427-python_sorted_function.org | 0 20250805143741-python_lambda.org | 0 20250806111925-non_technical_moc.org | 6 +- 20250806155335-emacs_stuff_org_publish.org | 0 20250918120519-misc_moc.org | 0 20250918120706-wedding_moc.org | 69 +- 20250926151524-workflow_moc.org | 0 20251002154125-microlise_moc.org | 0 20251002154204-pre_work_prep_microlise.org | 0 20251019114736-server_moc.org | 7 +- 20251019114758-old_nextcloud_server_code.org | 0 20251101123637-backlog.org | 6 +- 20251109205925-old_nginx_code.org | 411 ++++++------ 20251122223053-keyboard.org | 0 20251214210526-useful_c_imports.org | 0 20251223215636-design_patterns_notes.org | 0 20251223220531-technical_commonplace.org | 3 + 20251229180039-airflow.org | 0 20251229180156-airflow_tasks.org | 0 20251229180249-airflow_dags.org | 0 20260101010049-concepts.org | 14 +- 20260101011126-xor.org | 0 20260101012549-solid_principles.org | 1 + 20260101012731-solid_principles_examples.org | 0 20260101143401-actual_self_hosted.org | 0 20260101194248-gitea.org | 0 20260104155940-server_backend.org | 40 +- 20260107182221-2026_targets.org | 0 20260111204228-rss_articles.org | 14 + 20260115152626-apim.org | 0 20260117194854-programming_projects.org | 0 20260121173318-api_architecture.org | 0 20260211114817-personal_operating_system.org | 8 + 20260211124505-timetable.org | 36 ++ 20260227103506-vaultwarden.org | 15 + 20260305102210-cicd_example.org | 599 ++++++++++++++++++ 20260305111610-cicd_summary.org | 64 ++ ...05130457-database_perms_roles_accounts.org | 243 +++++++ 20260305132058-restful_api.org | 317 +++++++++ 20260307165727-proverbs.org | 24 + 20260307233451-recipes_cookbook.org | 5 + Makefile | 0 all-files.json | 93 ++- all-files.org | 10 +- assets/2_to_1.svg | 0 assets/career-notes/api-layers.png | Bin assets/career/APIOps.png | Bin .../career/Screenshot 2026-01-14 154800.png | Bin assets/design-patterns/adapter-pattern-2.png | Bin assets/design-patterns/adapter-pattern.png | Bin assets/design-patterns/command-pattern.png | Bin assets/design-patterns/composite-pattern.png | Bin assets/design-patterns/decorator-pattern.png | Bin assets/design-patterns/decorator-problem.png | Bin assets/design-patterns/facade-pattern.png | Bin assets/design-patterns/factory-pattern.png | Bin assets/design-patterns/iterator-pattern.png | Bin assets/design-patterns/observer-pattern.png | Bin assets/design-patterns/proxy-pattern.png | Bin assets/design-patterns/singleton-pattern.png | Bin assets/design-patterns/state-pattern.png | Bin assets/design-patterns/structure-pattern.png | Bin .../template-method-pattern.png | Bin assets/git-cheat-sheet-1.png | Bin assets/git-cheat-sheet-2.png | Bin assets/icons/icons8-z-key-64.png | Bin 0 -> 1151 bytes assets/styles/style.css | 3 +- index.org | 0 lisp/build.el | 49 +- orgroam-build.log | 13 + search-index.py | 0 tests/build-tests.el | 0 tests/macros-tests.el | 0 167 files changed, 1786 insertions(+), 342 deletions(-) mode change 100644 => 100755 .gitignore mode change 100644 => 100755 .markdown-preview.html mode change 100644 => 100755 20241210001045-technical_moc.org mode change 100644 => 100755 20241210001150-aoc_notes.org mode change 100644 => 100755 20241210001206-leetcode_notes.org mode change 100644 => 100755 20241210004247-emacs_moc.org mode change 100644 => 100755 20241210004247-emacs_stuff.org mode change 100644 => 100755 20241210004329-org_roam.org mode change 100644 => 100755 20241210004453-gtd.org mode change 100644 => 100755 20241210012703-fyp.org mode change 100644 => 100755 20241210152650-uni.org mode change 100644 => 100755 20241210152650-uni_moc.org mode change 100644 => 100755 20241210152713-tpis.org mode change 100644 => 100755 20241210232054-uml_fyp.org mode change 100644 => 100755 20241210233721-brain_moc.org mode change 100644 => 100755 20241211161232- job_application_cover_letters.org mode change 100644 => 100755 20241211161232-applications.org mode change 100644 => 100755 20241212013207-haskell_notes.org mode change 100644 => 100755 20241212013902-lazy_evaluation.org mode change 100644 => 100755 20241213005125-c_notes.org mode change 100644 => 100755 20241213005156-socket_programming_in_c.org mode change 100644 => 100755 20241217234535-web_port_notes.org mode change 100644 => 100755 20241217234944-wp_emacs_config_blorg.org mode change 100644 => 100755 20241220234456-github_notes.org mode change 100644 => 100755 20241231172543-the_science_of_self_discipline.org mode change 100644 => 100755 20250111213016-wp_prefront_cortex_blog.org mode change 100644 => 100755 20250120110833-afp.org mode change 100644 => 100755 20250120111047-afp_week1.org mode change 100644 => 100755 20250120113936-afp_lab_1.org mode change 100644 => 100755 20250121110241-afp_lec_1.org mode change 100644 => 100755 20250128110828-afp_week2.org mode change 100644 => 100755 20250128111008-afp_lec_2.org mode change 100644 => 100755 20250213124335-i3_wm.org mode change 100644 => 100755 20250214155617-wp_new_emacs_config_blorg.org mode change 100644 => 100755 20250218110239-afp_week5.org mode change 100644 => 100755 20250218110346-afp_lec_5.org mode change 100644 => 100755 20250218174735-emacs_stuff_keybindings.org mode change 100644 => 100755 20250226184629-wp_urge_surfing_blorg.org mode change 100644 => 100755 20250314223811-wp_growth_mindset.org mode change 100644 => 100755 20250314230952-wp_emotional_intelligence.org mode change 100644 => 100755 20250324041724-wp_week_12_reflections.org mode change 100644 => 100755 20250326002128-emacs_stuff_elisp.org mode change 100644 => 100755 20250329114733-ise.org mode change 100644 => 100755 20250329114848-ise_week_1.org mode change 100644 => 100755 20250329121843-ise_week_2.org mode change 100644 => 100755 20250329142725-ise_week_3.org mode change 100644 => 100755 20250329200158-ise_week_4.org mode change 100644 => 100755 20250329231658-emacs_stuff_magit.org mode change 100644 => 100755 20250331201944-ise_week_5.org mode change 100644 => 100755 20250331202447-ise_week_7.org mode change 100644 => 100755 20250402185735-java_moc.org mode change 100644 => 100755 20250402185735-technical_java_notes.org mode change 100644 => 100755 20250403120140-fyp_report_planning.org mode change 100644 => 100755 20250412234351-wp_sadness.org mode change 100644 => 100755 20250417173809-linux_moc.org mode change 100644 => 100755 20250417173809-linux_stuff.org mode change 100644 => 100755 20250417173821-wacom_notes.org mode change 100644 => 100755 20250420012258-emacs_stuff_evil.org mode change 100644 => 100755 20250428133236-systemd_services.org mode change 100644 => 100755 20250430001952-microlise_assessment.org mode change 100644 => 100755 20250516161728-gpg_encryption.org mode change 100644 => 100755 20250703183239-linux_arch_linux.org mode change 100644 => 100755 20250715223949-the_clean_coder.org delete mode 100644 20250717230336-recipes_main.org mode change 100644 => 100755 20250717230336-recipes_moc.org mode change 100644 => 100755 20250719174944-recipes_ideas.org mode change 100644 => 100755 20250719175023-recipes_done.org mode change 100644 => 100755 20250722221649-career_moc.org mode change 100644 => 100755 20250723171109-maven_pom_file.org mode change 100644 => 100755 20250723182408-so-good-they-cant-ignore-you.org mode change 100644 => 100755 20250723182408-so_good_they_cant_ignore_you.org mode change 100644 => 100755 20250723183655-career_capital.org mode change 100644 => 100755 20250723183755-deliberate_practice.org mode change 100644 => 100755 20250723184233-advanced_networking.org mode change 100644 => 100755 20250723184430-stanford_marshmallow_experiment.org mode change 100644 => 100755 20250723185056-neuroplasticity.org mode change 100644 => 100755 20250723185829-test_driven_development.org mode change 100644 => 100755 20250723185943-bowling_kata.org mode change 100644 => 100755 20250723190203-java_portswrigger_test.org mode change 100644 => 100755 20250723190656-java_junit_testing.org mode change 100644 => 100755 20250723190927-self_hosting.org mode change 100644 => 100755 20250723200800-postgres.org mode change 100644 => 100755 20250727120306-nextcloud.org mode change 100644 => 100755 20250727121051-networking_moc.org mode change 100644 => 100755 20250727122406-database_moc.org mode change 100644 => 100755 20250727174809-books_moc.org mode change 100644 => 100755 20250727174903-book_recs.org mode change 100644 => 100755 20250727221512-clean_code.org mode change 100644 => 100755 20250804201706-big_o_complexity.org mode change 100644 => 100755 20250804212215-how_to_solve_leetcode.org mode change 100644 => 100755 20250804212606-leetcode_arrays.org mode change 100644 => 100755 20250804214537-python_set.org mode change 100644 => 100755 20250805141906-python_dictionary.org mode change 100644 => 100755 20250805143427-python_sorted_function.org mode change 100644 => 100755 20250805143741-python_lambda.org mode change 100644 => 100755 20250806111925-non_technical_moc.org mode change 100644 => 100755 20250806155335-emacs_stuff_org_publish.org mode change 100644 => 100755 20250918120519-misc_moc.org mode change 100644 => 100755 20250918120706-wedding_moc.org mode change 100644 => 100755 20250926151524-workflow_moc.org mode change 100644 => 100755 20251002154125-microlise_moc.org mode change 100644 => 100755 20251002154204-pre_work_prep_microlise.org mode change 100644 => 100755 20251019114736-server_moc.org mode change 100644 => 100755 20251019114758-old_nextcloud_server_code.org mode change 100644 => 100755 20251101123637-backlog.org mode change 100644 => 100755 20251109205925-old_nginx_code.org mode change 100644 => 100755 20251122223053-keyboard.org mode change 100644 => 100755 20251214210526-useful_c_imports.org mode change 100644 => 100755 20251223215636-design_patterns_notes.org mode change 100644 => 100755 20251223220531-technical_commonplace.org mode change 100644 => 100755 20251229180039-airflow.org mode change 100644 => 100755 20251229180156-airflow_tasks.org mode change 100644 => 100755 20251229180249-airflow_dags.org mode change 100644 => 100755 20260101010049-concepts.org mode change 100644 => 100755 20260101011126-xor.org mode change 100644 => 100755 20260101012549-solid_principles.org mode change 100644 => 100755 20260101012731-solid_principles_examples.org mode change 100644 => 100755 20260101143401-actual_self_hosted.org mode change 100644 => 100755 20260101194248-gitea.org mode change 100644 => 100755 20260104155940-server_backend.org mode change 100644 => 100755 20260107182221-2026_targets.org mode change 100644 => 100755 20260111204228-rss_articles.org mode change 100644 => 100755 20260115152626-apim.org mode change 100644 => 100755 20260117194854-programming_projects.org mode change 100644 => 100755 20260121173318-api_architecture.org create mode 100755 20260211114817-personal_operating_system.org create mode 100755 20260211124505-timetable.org create mode 100644 20260227103506-vaultwarden.org create mode 100644 20260305102210-cicd_example.org create mode 100644 20260305111610-cicd_summary.org create mode 100644 20260305130457-database_perms_roles_accounts.org create mode 100644 20260305132058-restful_api.org create mode 100644 20260307165727-proverbs.org create mode 100644 20260307233451-recipes_cookbook.org mode change 100644 => 100755 Makefile mode change 100644 => 100755 all-files.json mode change 100644 => 100755 all-files.org mode change 100644 => 100755 assets/2_to_1.svg mode change 100644 => 100755 assets/career-notes/api-layers.png mode change 100644 => 100755 assets/career/APIOps.png mode change 100644 => 100755 assets/career/Screenshot 2026-01-14 154800.png mode change 100644 => 100755 assets/design-patterns/adapter-pattern-2.png mode change 100644 => 100755 assets/design-patterns/adapter-pattern.png mode change 100644 => 100755 assets/design-patterns/command-pattern.png mode change 100644 => 100755 assets/design-patterns/composite-pattern.png mode change 100644 => 100755 assets/design-patterns/decorator-pattern.png mode change 100644 => 100755 assets/design-patterns/decorator-problem.png mode change 100644 => 100755 assets/design-patterns/facade-pattern.png mode change 100644 => 100755 assets/design-patterns/factory-pattern.png mode change 100644 => 100755 assets/design-patterns/iterator-pattern.png mode change 100644 => 100755 assets/design-patterns/observer-pattern.png mode change 100644 => 100755 assets/design-patterns/proxy-pattern.png mode change 100644 => 100755 assets/design-patterns/singleton-pattern.png mode change 100644 => 100755 assets/design-patterns/state-pattern.png mode change 100644 => 100755 assets/design-patterns/structure-pattern.png mode change 100644 => 100755 assets/design-patterns/template-method-pattern.png mode change 100644 => 100755 assets/git-cheat-sheet-1.png mode change 100644 => 100755 assets/git-cheat-sheet-2.png create mode 100755 assets/icons/icons8-z-key-64.png mode change 100644 => 100755 index.org create mode 100644 orgroam-build.log mode change 100644 => 100755 search-index.py mode change 100644 => 100755 tests/build-tests.el mode change 100644 => 100755 tests/macros-tests.el diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/.markdown-preview.html b/.markdown-preview.html old mode 100644 new mode 100755 diff --git a/20241210001045-technical_moc.org b/20241210001045-technical_moc.org old mode 100644 new mode 100755 diff --git a/20241210001150-aoc_notes.org b/20241210001150-aoc_notes.org old mode 100644 new mode 100755 diff --git a/20241210001206-leetcode_notes.org b/20241210001206-leetcode_notes.org old mode 100644 new mode 100755 diff --git a/20241210004247-emacs_moc.org b/20241210004247-emacs_moc.org old mode 100644 new mode 100755 diff --git a/20241210004247-emacs_stuff.org b/20241210004247-emacs_stuff.org old mode 100644 new mode 100755 diff --git a/20241210004329-org_roam.org b/20241210004329-org_roam.org old mode 100644 new mode 100755 index 12459d8..da1d2b6 --- a/20241210004329-org_roam.org +++ b/20241210004329-org_roam.org @@ -29,3 +29,8 @@ Here is the current config in my init.el - An article: [[https://ianjones.info/own-your-second-brain][Own your second brain]] - article: [[https://honnef.co/articles/my-org-roam-workflows-for-taking-notes-and-writing-articles/][my-org-roam-workflows-for-taking-notes-and-writing-articles]] - article: [[https://michaelneuper.com/posts/how-i-use-org-roam-to-takes-notes-for-cs/][how-i-use-org-roam-to-takes-notes-for-cs]] + +The command below starts emacs in a terminal and kills it after 10 seconds. this is useful for when I add a note in the main machine, but the server's DB doesn't pick up the changes until Emacs is restarted in the server. +#+begin_src bash + timeout 10 emacs >/dev/null 2>&1 +#+end_src diff --git a/20241210004453-gtd.org b/20241210004453-gtd.org old mode 100644 new mode 100755 diff --git a/20241210012703-fyp.org b/20241210012703-fyp.org old mode 100644 new mode 100755 diff --git a/20241210152650-uni.org b/20241210152650-uni.org old mode 100644 new mode 100755 diff --git a/20241210152650-uni_moc.org b/20241210152650-uni_moc.org old mode 100644 new mode 100755 diff --git a/20241210152713-tpis.org b/20241210152713-tpis.org old mode 100644 new mode 100755 diff --git a/20241210232054-uml_fyp.org b/20241210232054-uml_fyp.org old mode 100644 new mode 100755 diff --git a/20241210233721-brain_moc.org b/20241210233721-brain_moc.org old mode 100644 new mode 100755 index bb804a7..a928acd --- a/20241210233721-brain_moc.org +++ b/20241210233721-brain_moc.org @@ -6,6 +6,8 @@ * [[id:2f285f04-fcf4-4ade-a1ac-2c50b43d529a][Technical MOC]] +* [[id:22737796-6D31-49D5-84F2-F7BC73E45144][Concepts]] + * [[id:565eaccd-8cf6-4dbb-bc66-a4b37367ce6b][Non Technical MOC]] * [[id:dd04d228-fff5-402a-929d-9d113a2ec965][Career MOC]] @@ -16,3 +18,4 @@ * [[id:797d6e3e-98eb-4bc7-88b6-e096ef7306ad][Uni MOC]] +* [[id:5f8f7d8a-5dfc-49a4-a7a6-33373a1d7c8d][Personal Operating System]] diff --git a/20241211161232- job_application_cover_letters.org b/20241211161232- job_application_cover_letters.org old mode 100644 new mode 100755 diff --git a/20241211161232-applications.org b/20241211161232-applications.org old mode 100644 new mode 100755 diff --git a/20241212013207-haskell_notes.org b/20241212013207-haskell_notes.org old mode 100644 new mode 100755 diff --git a/20241212013902-lazy_evaluation.org b/20241212013902-lazy_evaluation.org old mode 100644 new mode 100755 diff --git a/20241213005125-c_notes.org b/20241213005125-c_notes.org old mode 100644 new mode 100755 diff --git a/20241213005156-socket_programming_in_c.org b/20241213005156-socket_programming_in_c.org old mode 100644 new mode 100755 diff --git a/20241217234535-web_port_notes.org b/20241217234535-web_port_notes.org old mode 100644 new mode 100755 diff --git a/20241217234944-wp_emacs_config_blorg.org b/20241217234944-wp_emacs_config_blorg.org old mode 100644 new mode 100755 diff --git a/20241220234456-github_notes.org b/20241220234456-github_notes.org old mode 100644 new mode 100755 diff --git a/20241231172543-the_science_of_self_discipline.org b/20241231172543-the_science_of_self_discipline.org old mode 100644 new mode 100755 diff --git a/20250111213016-wp_prefront_cortex_blog.org b/20250111213016-wp_prefront_cortex_blog.org old mode 100644 new mode 100755 diff --git a/20250120110833-afp.org b/20250120110833-afp.org old mode 100644 new mode 100755 diff --git a/20250120111047-afp_week1.org b/20250120111047-afp_week1.org old mode 100644 new mode 100755 diff --git a/20250120113936-afp_lab_1.org b/20250120113936-afp_lab_1.org old mode 100644 new mode 100755 diff --git a/20250121110241-afp_lec_1.org b/20250121110241-afp_lec_1.org old mode 100644 new mode 100755 diff --git a/20250128110828-afp_week2.org b/20250128110828-afp_week2.org old mode 100644 new mode 100755 diff --git a/20250128111008-afp_lec_2.org b/20250128111008-afp_lec_2.org old mode 100644 new mode 100755 diff --git a/20250213124335-i3_wm.org b/20250213124335-i3_wm.org old mode 100644 new mode 100755 diff --git a/20250214155617-wp_new_emacs_config_blorg.org b/20250214155617-wp_new_emacs_config_blorg.org old mode 100644 new mode 100755 diff --git a/20250218110239-afp_week5.org b/20250218110239-afp_week5.org old mode 100644 new mode 100755 diff --git a/20250218110346-afp_lec_5.org b/20250218110346-afp_lec_5.org old mode 100644 new mode 100755 diff --git a/20250218174735-emacs_stuff_keybindings.org b/20250218174735-emacs_stuff_keybindings.org old mode 100644 new mode 100755 diff --git a/20250226184629-wp_urge_surfing_blorg.org b/20250226184629-wp_urge_surfing_blorg.org old mode 100644 new mode 100755 diff --git a/20250314223811-wp_growth_mindset.org b/20250314223811-wp_growth_mindset.org old mode 100644 new mode 100755 diff --git a/20250314230952-wp_emotional_intelligence.org b/20250314230952-wp_emotional_intelligence.org old mode 100644 new mode 100755 diff --git a/20250324041724-wp_week_12_reflections.org b/20250324041724-wp_week_12_reflections.org old mode 100644 new mode 100755 diff --git a/20250326002128-emacs_stuff_elisp.org b/20250326002128-emacs_stuff_elisp.org old mode 100644 new mode 100755 diff --git a/20250329114733-ise.org b/20250329114733-ise.org old mode 100644 new mode 100755 diff --git a/20250329114848-ise_week_1.org b/20250329114848-ise_week_1.org old mode 100644 new mode 100755 diff --git a/20250329121843-ise_week_2.org b/20250329121843-ise_week_2.org old mode 100644 new mode 100755 diff --git a/20250329142725-ise_week_3.org b/20250329142725-ise_week_3.org old mode 100644 new mode 100755 diff --git a/20250329200158-ise_week_4.org b/20250329200158-ise_week_4.org old mode 100644 new mode 100755 diff --git a/20250329231658-emacs_stuff_magit.org b/20250329231658-emacs_stuff_magit.org old mode 100644 new mode 100755 diff --git a/20250331201944-ise_week_5.org b/20250331201944-ise_week_5.org old mode 100644 new mode 100755 diff --git a/20250331202447-ise_week_7.org b/20250331202447-ise_week_7.org old mode 100644 new mode 100755 diff --git a/20250402185735-java_moc.org b/20250402185735-java_moc.org old mode 100644 new mode 100755 diff --git a/20250402185735-technical_java_notes.org b/20250402185735-technical_java_notes.org old mode 100644 new mode 100755 diff --git a/20250403120140-fyp_report_planning.org b/20250403120140-fyp_report_planning.org old mode 100644 new mode 100755 diff --git a/20250412234351-wp_sadness.org b/20250412234351-wp_sadness.org old mode 100644 new mode 100755 diff --git a/20250417173809-linux_moc.org b/20250417173809-linux_moc.org old mode 100644 new mode 100755 diff --git a/20250417173809-linux_stuff.org b/20250417173809-linux_stuff.org old mode 100644 new mode 100755 diff --git a/20250417173821-wacom_notes.org b/20250417173821-wacom_notes.org old mode 100644 new mode 100755 diff --git a/20250420012258-emacs_stuff_evil.org b/20250420012258-emacs_stuff_evil.org old mode 100644 new mode 100755 diff --git a/20250428133236-systemd_services.org b/20250428133236-systemd_services.org old mode 100644 new mode 100755 diff --git a/20250430001952-microlise_assessment.org b/20250430001952-microlise_assessment.org old mode 100644 new mode 100755 diff --git a/20250516161728-gpg_encryption.org b/20250516161728-gpg_encryption.org old mode 100644 new mode 100755 diff --git a/20250703183239-linux_arch_linux.org b/20250703183239-linux_arch_linux.org old mode 100644 new mode 100755 diff --git a/20250715223949-the_clean_coder.org b/20250715223949-the_clean_coder.org old mode 100644 new mode 100755 diff --git a/20250717230336-recipes_main.org b/20250717230336-recipes_main.org deleted file mode 100644 index aec7bc3..0000000 --- a/20250717230336-recipes_main.org +++ /dev/null @@ -1,9 +0,0 @@ -:PROPERTIES: -:ID: 65F747B1-3CB2-429A-9E26-ED8BC169E689 -:END: -#+title: recipes-moc -#+filetags: :moc:recipes: - -* [[id:F7D68FF4-CAD0-4791-BAE4-AC20B84A8785][recipes-ideas]] - -* [[id:EA93341B-20C0-48A2-BD88-F24ED3C540DA][recipes-done]] diff --git a/20250717230336-recipes_moc.org b/20250717230336-recipes_moc.org old mode 100644 new mode 100755 index 864dca9..7843279 --- a/20250717230336-recipes_moc.org +++ b/20250717230336-recipes_moc.org @@ -1,9 +1,11 @@ :PROPERTIES: :ID: 65F747B1-3CB2-429A-9E26-ED8BC169E689 :END: -#+title: recipes-main -#+filetags: :recipes: +#+title: Recipes MOC +#+filetags: :moc:recipes: -* [[id:F7D68FF4-CAD0-4791-BAE4-AC20B84A8785][recipes-ideas]] +* [[id:b31d6c3f-9bc3-4006-aaaf-d56168249e3a][Recipes Cookbook]] -* [[id:EA93341B-20C0-48A2-BD88-F24ED3C540DA][recipes-done]] +* [[id:F7D68FF4-CAD0-4791-BAE4-AC20B84A8785][Recipe Ideas]] + +* [[id:EA93341B-20C0-48A2-BD88-F24ED3C540DA][Recipes Done]] diff --git a/20250719174944-recipes_ideas.org b/20250719174944-recipes_ideas.org old mode 100644 new mode 100755 index 632b4e3..a31c584 --- a/20250719174944-recipes_ideas.org +++ b/20250719174944-recipes_ideas.org @@ -1,7 +1,7 @@ :PROPERTIES: :ID: F7D68FF4-CAD0-4791-BAE4-AC20B84A8785 :END: -#+title: recipes-ideas +#+title: Recipes Ideas #+filetags: :recipes:ideas: * Spiced Potato & Pea Quesadillas diff --git a/20250719175023-recipes_done.org b/20250719175023-recipes_done.org old mode 100644 new mode 100755 index b24fdf4..cdbfa5f --- a/20250719175023-recipes_done.org +++ b/20250719175023-recipes_done.org @@ -1,7 +1,7 @@ :PROPERTIES: :ID: EA93341B-20C0-48A2-BD88-F24ED3C540DA :END: -#+title: recipes-done +#+title: Recipes Done #+filetags: :recipes:resources: * Done: diff --git a/20250722221649-career_moc.org b/20250722221649-career_moc.org old mode 100644 new mode 100755 diff --git a/20250723171109-maven_pom_file.org b/20250723171109-maven_pom_file.org old mode 100644 new mode 100755 diff --git a/20250723182408-so-good-they-cant-ignore-you.org b/20250723182408-so-good-they-cant-ignore-you.org old mode 100644 new mode 100755 diff --git a/20250723182408-so_good_they_cant_ignore_you.org b/20250723182408-so_good_they_cant_ignore_you.org old mode 100644 new mode 100755 diff --git a/20250723183655-career_capital.org b/20250723183655-career_capital.org old mode 100644 new mode 100755 diff --git a/20250723183755-deliberate_practice.org b/20250723183755-deliberate_practice.org old mode 100644 new mode 100755 diff --git a/20250723184233-advanced_networking.org b/20250723184233-advanced_networking.org old mode 100644 new mode 100755 diff --git a/20250723184430-stanford_marshmallow_experiment.org b/20250723184430-stanford_marshmallow_experiment.org old mode 100644 new mode 100755 diff --git a/20250723185056-neuroplasticity.org b/20250723185056-neuroplasticity.org old mode 100644 new mode 100755 diff --git a/20250723185829-test_driven_development.org b/20250723185829-test_driven_development.org old mode 100644 new mode 100755 diff --git a/20250723185943-bowling_kata.org b/20250723185943-bowling_kata.org old mode 100644 new mode 100755 diff --git a/20250723190203-java_portswrigger_test.org b/20250723190203-java_portswrigger_test.org old mode 100644 new mode 100755 diff --git a/20250723190656-java_junit_testing.org b/20250723190656-java_junit_testing.org old mode 100644 new mode 100755 diff --git a/20250723190927-self_hosting.org b/20250723190927-self_hosting.org old mode 100644 new mode 100755 diff --git a/20250723200800-postgres.org b/20250723200800-postgres.org old mode 100644 new mode 100755 diff --git a/20250724230557-books_org_agenda.org b/20250724230557-books_org_agenda.org index ef43406..9dff434 100644 --- a/20250724230557-books_org_agenda.org +++ b/20250724230557-books_org_agenda.org @@ -7,7 +7,7 @@ #+filetags: :books:org:index: #+DATE: 2025-05-19 #+STARTUP: content -#+PROPERTY: GENERATED_AT 2026-01-25T00:00:01.130521 +#+PROPERTY: GENERATED_AT 2026-03-08T00:00:01.357226 * Career ** Clean Code_ A Handbook of Agile Software Craftsmanship - Robert C. Martin :Read: @@ -78,6 +78,14 @@ :END: * Current Reads +** Code Complete, Second Edition eBook :Unread: +:PROPERTIES: +:AUTHOR: Steve McConnell +:STATUS: Unread +:CALIBRE_ID: 18 +:PATH: /home/zaine/master-folder/projects/calibre/library/Steve McConnell/Code Complete, Second Edition eBook (18) +:END: + ** Khulfa-e-Rashideen :Unread: :PROPERTIES: :AUTHOR: Makbool Ahmed Suhaarwi | Afzal Hoosen Elias (translator) @@ -103,11 +111,12 @@ :END: * Deen -** A Gift for Nikah :Unread: +** A Gift for Nikah :Read: :PROPERTIES: :AUTHOR: Shaykh Abdul Raheem Limbada -:STATUS: Unread +:STATUS: Read :CALIBRE_ID: 23 +:COMPLETED_AT: 2026-01-27 13:16:50.022878 :PATH: /home/zaine/master-folder/projects/calibre/library/Shaykh Abdul Raheem Limbada/A Gift for Nikah (23) :END: @@ -152,6 +161,14 @@ :END: * Self Improvement +** Atomic Habits :Unread: +:PROPERTIES: +:AUTHOR: James Clear +:STATUS: Unread +:CALIBRE_ID: 32 +:PATH: /home/zaine/master-folder/projects/calibre/library/James Clear/Atomic Habits (32) +:END: + ** Ikigai :Unread: :PROPERTIES: :AUTHOR: Héctor García, Francesc Miralles diff --git a/20250727120306-nextcloud.org b/20250727120306-nextcloud.org old mode 100644 new mode 100755 index bd2bc22..a64b19f --- a/20250727120306-nextcloud.org +++ b/20250727120306-nextcloud.org @@ -49,7 +49,28 @@ #+end_src +* Permissions: +#+begin_src bash + +# Add yourself and www-data to a shared group + +### Create a shared group: + +sudo groupadd ncshare + +### Add both users: + +sudo usermod -aG ncshare zaine +sudo usermod -aG ncshare www-data + +### Set the folder to that group: + +sudo chown -R zaine:ncshare /home/zaine/master-folder +sudo chmod -R 775 /home/zaine/master-folder + + +#+end_src * Config @@ -57,3 +78,6 @@ Location is: sudo nano /var/lib/docker/volumes/nextcloud_nextcloud/_data/config/config.php +* Accounts +User is: zaine +Pass: Shakkal123! diff --git a/20250727121051-networking_moc.org b/20250727121051-networking_moc.org old mode 100644 new mode 100755 diff --git a/20250727122406-database_moc.org b/20250727122406-database_moc.org old mode 100644 new mode 100755 diff --git a/20250727174809-books_moc.org b/20250727174809-books_moc.org old mode 100644 new mode 100755 diff --git a/20250727174903-book_recs.org b/20250727174903-book_recs.org old mode 100644 new mode 100755 diff --git a/20250727221512-clean_code.org b/20250727221512-clean_code.org old mode 100644 new mode 100755 diff --git a/20250804201706-big_o_complexity.org b/20250804201706-big_o_complexity.org old mode 100644 new mode 100755 diff --git a/20250804212215-how_to_solve_leetcode.org b/20250804212215-how_to_solve_leetcode.org old mode 100644 new mode 100755 diff --git a/20250804212606-leetcode_arrays.org b/20250804212606-leetcode_arrays.org old mode 100644 new mode 100755 diff --git a/20250804214537-python_set.org b/20250804214537-python_set.org old mode 100644 new mode 100755 diff --git a/20250805141906-python_dictionary.org b/20250805141906-python_dictionary.org old mode 100644 new mode 100755 diff --git a/20250805143427-python_sorted_function.org b/20250805143427-python_sorted_function.org old mode 100644 new mode 100755 diff --git a/20250805143741-python_lambda.org b/20250805143741-python_lambda.org old mode 100644 new mode 100755 diff --git a/20250806111925-non_technical_moc.org b/20250806111925-non_technical_moc.org old mode 100644 new mode 100755 index cf0e0ec..138b233 --- a/20250806111925-non_technical_moc.org +++ b/20250806111925-non_technical_moc.org @@ -4,8 +4,10 @@ #+title: Non-Technical MOC #+filetags: :moc: -- [[id:65F747B1-3CB2-429A-9E26-ED8BC169E689][recipes-moc]] - - [[id:63314cff-3a3f-49b4-9e76-4a359c51f55f][Books MOC]] - [[id:3a8274ef-f2fe-486d-9caf-0c56982b9917][RSS Articles]] + +- [[id:65F747B1-3CB2-429A-9E26-ED8BC169E689][Recipes MOC]] + +- [[id:45eefd5b-a3d8-4b83-84ea-5a6984025755][Proverbs]] diff --git a/20250806155335-emacs_stuff_org_publish.org b/20250806155335-emacs_stuff_org_publish.org old mode 100644 new mode 100755 diff --git a/20250918120519-misc_moc.org b/20250918120519-misc_moc.org old mode 100644 new mode 100755 diff --git a/20250918120706-wedding_moc.org b/20250918120706-wedding_moc.org old mode 100644 new mode 100755 index 1d68c47..a2e5633 --- a/20250918120706-wedding_moc.org +++ b/20250918120706-wedding_moc.org @@ -7,71 +7,4 @@ * Important dates ** Engagement Day: <2025-10-26 Sun> 3pm-6pm ** Nikah / Barat: <2026-08-02 Sun> -** Walima: - -* Walimah Venues - -** Requirements -- 250 to 350 people -- Segregated -- External / Internal Catering (halal) -- Timing (Saturday evening) -- Prayer Facility -- Early July (or similar) -- Deposit - -** Hadley Hall -*** Details - -Bearwood Road, Birmingham, United Kingdom B66 4ES - -https://www.instagram.com/hadley.hall/?hl=en -https://www.facebook.com/p/Hadley-Hall-Banqueting-Suite-100063467019018/?locale=en_GB - -Contact Details: -- 0121 601 0955 -- 07522257044 (insta) - -Distance: 18 Minutes Drive / 51 Minutes Bus - -2 Suites. One is 200 people, the other is 450 people -Segregated Yes with 300 people -Catering is £10ph -Timing is 6-11pm (and morning too). -Prayer facility included. -Early July is good time -Deposit £500 - -Roughly £6500 (3k food, 3.5k everything else) - -<2025-09-28 Sun> : Went to view the hall, 2 halls are given for the price of 3.5k. -** Bab al Hara -*** Details -500 people segregated suite. one large hall. instagram has all details. 9.5k with catering, 6.2k without for 300 people. - -<2025-09-30 Tue> : Went to view -** Mayfair suite -9.3k with food -6k without food -<2025-10-01 Wed>: Went to view - -** Bia Lounge -*** Details - -45-47 Golden Hillock Rd, Birmingham B10 0JU - -http://www.bialoungeweddinghall.co.uk/ - -Contact Details: - -Tel: 0121 772 7576 -Mob: 07901 553 350 - -Distance: 5 Min Drive / 27 Min Bus - -400 people -Segregated yes -Catering (in house basic is 10-12ph) -Early July yes (some dates available) -Prayer Facility included -Deposit minimum 500 +** Walima: <2026-08-09 Sun> diff --git a/20250926151524-workflow_moc.org b/20250926151524-workflow_moc.org old mode 100644 new mode 100755 diff --git a/20251002154125-microlise_moc.org b/20251002154125-microlise_moc.org old mode 100644 new mode 100755 diff --git a/20251002154204-pre_work_prep_microlise.org b/20251002154204-pre_work_prep_microlise.org old mode 100644 new mode 100755 diff --git a/20251019114736-server_moc.org b/20251019114736-server_moc.org old mode 100644 new mode 100755 index 8ef86b2..3e99870 --- a/20251019114736-server_moc.org +++ b/20251019114736-server_moc.org @@ -6,8 +6,13 @@ [[id:2c2d8df4-ad36-40ab-9f30-8a047b372956][old_nextcloud_server_code]] -[[id:a9829b5d-690d-4a21-ba94-ac8beac4d439][old_nginx_code]] +- [[id:a9829b5d-690d-4a21-ba94-ac8beac4d439][Old NGINX Config]] - [[id:effa2bf5-8b04-42d3-b9c1-17160dc4ddc2][Actual]] - [[id:9a71daa4-d9d4-4706-98f1-72e3d4eda9bc][Server Backend]] + +- [[id:56f39be4-1108-4020-be5a-1f3a0fbf96fa][nextcloud]] + +- [[id:e12ef44d-69a4-45c8-a823-c810d2c3857c][Vaultwarden]] + diff --git a/20251019114758-old_nextcloud_server_code.org b/20251019114758-old_nextcloud_server_code.org old mode 100644 new mode 100755 diff --git a/20251101123637-backlog.org b/20251101123637-backlog.org old mode 100644 new mode 100755 index ed640e7..7015665 --- a/20251101123637-backlog.org +++ b/20251101123637-backlog.org @@ -6,8 +6,8 @@ * Ideas - Building a code smells coverage checker for the ~output~ dir +- Powershell script to give insights on the build scripts. This can be fed into the daily logs/discord pipeline +- have a central point where we can see the server details and documentations +- Have a two way sync between the cookbook and org-roam notes (see: [[https://nextcloud.github.io/cookbook/dev/api/0.1.3/index.html#/Recipes/listRecipes][swagger]]) * To sort: - -- https://forge.medium.com/a-simple-tool-for-personal-growth-dc1e822aa229 - diff --git a/20251109205925-old_nginx_code.org b/20251109205925-old_nginx_code.org old mode 100644 new mode 100755 index 63e422c..84beb6b --- a/20251109205925-old_nginx_code.org +++ b/20251109205925-old_nginx_code.org @@ -1,262 +1,265 @@ :PROPERTIES: :ID: a9829b5d-690d-4a21-ba94-ac8beac4d439 :END: -#+title: old_nginx_code +#+title: Old NGINX Config #+filetags: :server: - --> % cat /etc/nginx/sites-available/zserver +#+begin_src bash -server { - server_name zainezq.com; + -> % cat /etc/nginx/sites-available/zserver - access_log /var/log/nginx/zserver.access.log combined; - error_log /var/log/nginx/zserver.error.log warn; - # Basic authentication for the entire server - auth_basic "Restricted Access"; - auth_basic_user_file /etc/nginx/.htpasswd; - # Root location - location / { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_redirect off; + server { + server_name zainezq.com; - root /home/zaine/master-folder/org_files/org_web/output; - index index.html index.htm; - try_files $uri $uri/ =404; - } + access_log /var/log/nginx/zserver.access.log combined; + error_log /var/log/nginx/zserver.error.log warn; + # Basic authentication for the entire server + auth_basic "Restricted Access"; + auth_basic_user_file /etc/nginx/.htpasswd; -location /nginx_status { - stub_status; - } + # Root location + location / { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_redirect off; -location /dockge/ { - proxy_pass http://127.0.0.1:5021/; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; -} + root /home/zaine/master-folder/org_files/org_web/output; + index index.html index.htm; + try_files $uri $uri/ =404; + } + + location /nginx_status { + stub_status; + } + + location /dockge/ { + proxy_pass http://127.0.0.1:5021/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } -location /guac/ { - proxy_pass http://127.0.0.1:3003/guacamole/; - proxy_http_version 1.1; + location /guac/ { + proxy_pass http://127.0.0.1:3003/guacamole/; + proxy_http_version 1.1; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection $connection_upgrade; -} + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + } - # PGAdmin4 location - location /pgadmin4/ { - proxy_set_header X-Script-Name /pgadmin4; - proxy_set_header Host $host; - proxy_pass http://127.0.0.1:5050; - proxy_redirect off; - } - - location /pdf/ { - proxy_pass http://127.0.0.1:8002/pdf/; - proxy_set_header X-Script-Name /pdf; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header Host $host; - proxy_redirect off; - } + # PGAdmin4 location + location /pgadmin4/ { + proxy_set_header X-Script-Name /pgadmin4; + proxy_set_header Host $host; + proxy_pass http://127.0.0.1:5050; + proxy_redirect off; + } + + location /pdf/ { + proxy_pass http://127.0.0.1:8002/pdf/; + proxy_set_header X-Script-Name /pdf; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $host; + proxy_redirect off; + } - location /calibre { - proxy_bind $server_addr; - proxy_pass http://127.0.0.1:8083; - proxy_set_header Host $http_host; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Scheme $scheme; - proxy_set_header X-Script-Name /calibre; # IMPORTANT: path has NO trailing slash - # This rewrites Calibre-Web's internal paths - proxy_redirect off; - proxy_http_version 1.1; - client_max_body_size 100M; - } + location /calibre { + proxy_bind $server_addr; + proxy_pass http://127.0.0.1:8083; + proxy_set_header Host $http_host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Scheme $scheme; + proxy_set_header X-Script-Name /calibre; # IMPORTANT: path has NO trailing slash + # This rewrites Calibre-Web's internal paths + proxy_redirect off; + proxy_http_version 1.1; + client_max_body_size 100M; + } - location /codeserver/ { - proxy_pass http://localhost:8441/; - rewrite ^/codeserver(/.*)$ $1 break; + location /codeserver/ { + proxy_pass http://localhost:8441/; + rewrite ^/codeserver(/.*)$ $1 break; - proxy_set_header Host $host; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - proxy_set_header Accept-Encoding gzip; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } + proxy_set_header Host $host; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Accept-Encoding gzip; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } - location /filebrowser { - # prevents 502 bad gateway error - proxy_buffers 8 32k; - proxy_buffer_size 64k; + location /filebrowser { + # prevents 502 bad gateway error + proxy_buffers 8 32k; + proxy_buffer_size 64k; - client_max_body_size 75M; + client_max_body_size 75M; - # redirect all HTTP traffic to localhost:8088; - proxy_pass http://127.0.0.1:9991; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header Host $http_host; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - #proxy_set_header X-NginX-Proxy true; + # redirect all HTTP traffic to localhost:8088; + proxy_pass http://127.0.0.1:9991; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $http_host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + #proxy_set_header X-NginX-Proxy true; - # enables WS support - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; + # enables WS support + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; - proxy_read_timeout 999999999; - } + proxy_read_timeout 999999999; + } - # Miniflux location - location /miniflux/ { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://127.0.0.1:9433/miniflux/; - proxy_redirect off; - } + # Miniflux location + location /miniflux/ { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://127.0.0.1:9433/miniflux/; + proxy_redirect off; + } - # Jupyter location - location /jupyter/ { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://127.0.0.1:8888/jupyter/; - proxy_redirect off; + # Jupyter location + location /jupyter/ { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://127.0.0.1:8888/jupyter/; + proxy_redirect off; - # WebSocket support - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - } + # WebSocket support + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + } - location /portainer/ { - proxy_pass https://localhost:9443/; - proxy_ssl_verify off; # Because Portainer uses a self-signed cert by default - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header Authorization ""; - # Required for WebSocket support - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; + location /portainer/ { + proxy_pass https://localhost:9443/; + proxy_ssl_verify off; # Because Portainer uses a self-signed cert by default + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Authorization ""; + # Required for WebSocket support + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; - # Rewrite URL base path - rewrite ^/portainer(/.*)$ $1 break; - } + # Rewrite URL base path + rewrite ^/portainer(/.*)$ $1 break; + } -location /wireguard/ { - proxy_pass http://127.0.0.1:124/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; + location /wireguard/ { + proxy_pass http://127.0.0.1:124/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; - # Rewrite assets for subpath compatibility - proxy_set_header Accept-Encoding ""; - sub_filter 'href="/' 'href="/wireguard/'; - sub_filter 'src="/' 'src="/wireguard/'; - sub_filter_types text/css application/javascript; - sub_filter_once off; -} + # Rewrite assets for subpath compatibility + proxy_set_header Accept-Encoding ""; + sub_filter 'href="/' 'href="/wireguard/'; + sub_filter 'src="/' 'src="/wireguard/'; + sub_filter_types text/css application/javascript; + sub_filter_once off; + } -# /password -> /password/ -location = /password { return 301 /password/; } + # /password -> /password/ + location = /password { return 301 /password/; } -# Main app/API (disable inherited basic auth here) -location ^~ /password/ { - auth_basic off; + # Main app/API (disable inherited basic auth here) + location ^~ /password/ { + auth_basic off; - proxy_http_version 1.1; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; - # WebSockets - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; + # WebSockets + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; - # Keep the /password prefix upstream (NO trailing slash here) - proxy_pass http://127.0.0.1:8006; -} + # Keep the /password prefix upstream (NO trailing slash here) + proxy_pass http://127.0.0.1:8006; + } -# (Optional but tidy) If you keep a dedicated WS block, disable auth there too -location ^~ /password/notifications/hub { - auth_basic off; + # (Optional but tidy) If you keep a dedicated WS block, disable auth there too + location ^~ /password/notifications/hub { + auth_basic off; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - proxy_set_header Host $host; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; - proxy_pass http://127.0.0.1:8006; -} + proxy_pass http://127.0.0.1:8006; + } - # Optional: Add a custom error page - error_page 500 502 503 504 /50x.html; - location = /50x.html { - root /usr/share/nginx/html; - } + # Optional: Add a custom error page + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } - # Optional: Cache static assets for performance (add this new block) -# location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|eot|svg|html|htm)$ { -# root /home/zaine/master-folder/org_files/org_web/output; -# expires 30d; -# access_log off; -# } + # Optional: Cache static assets for performance (add this new block) + # location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|eot|svg|html|htm)$ { + # root /home/zaine/master-folder/org_files/org_web/output; + # expires 30d; + # access_log off; + # } - # Optional: Deny access to hidden files - location ~ /\. { - deny all; - } + # Optional: Deny access to hidden files + location ~ /\. { + deny all; + } - listen 443 ssl; # managed by Certbot - ssl_certificate /etc/letsencrypt/live/zainezq.com-0001/fullchain.pem; # managed by Certbot - ssl_certificate_key /etc/letsencrypt/live/zainezq.com-0001/privkey.pem; # managed by Certbot - include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot - ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot + listen 443 ssl; # managed by Certbot + ssl_certificate /etc/letsencrypt/live/zainezq.com-0001/fullchain.pem; # managed by Certbot + ssl_certificate_key /etc/letsencrypt/live/zainezq.com-0001/privkey.pem; # managed by Certbot + include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot + ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot -} + } -server { - if ($host = zserver.zapto.org) { - return 301 https://$host$request_uri; - } # managed by Certbot + server { + if ($host = zserver.zapto.org) { + return 301 https://$host$request_uri; + } # managed by Certbot - listen 80; - server_name zserver.zapto.org; - return 404; # managed by Certbot -} + listen 80; + server_name zserver.zapto.org; + return 404; # managed by Certbot + } +#+end_src diff --git a/20251122223053-keyboard.org b/20251122223053-keyboard.org old mode 100644 new mode 100755 diff --git a/20251214210526-useful_c_imports.org b/20251214210526-useful_c_imports.org old mode 100644 new mode 100755 diff --git a/20251223215636-design_patterns_notes.org b/20251223215636-design_patterns_notes.org old mode 100644 new mode 100755 diff --git a/20251223220531-technical_commonplace.org b/20251223220531-technical_commonplace.org old mode 100644 new mode 100755 index 8772101..8c09777 --- a/20251223220531-technical_commonplace.org +++ b/20251223220531-technical_commonplace.org @@ -4,6 +4,9 @@ #+title: Technical Commonplace #+filetags: :technical:notes:commonplace: +* Articles: +- https://forge.medium.com/a-simple-tool-for-personal-growth-dc1e822aa229 + * MVP and MVT - An **MVP** is a **minimal functional product** built to validate what customers actually want by observing real usage. diff --git a/20251229180039-airflow.org b/20251229180039-airflow.org old mode 100644 new mode 100755 diff --git a/20251229180156-airflow_tasks.org b/20251229180156-airflow_tasks.org old mode 100644 new mode 100755 diff --git a/20251229180249-airflow_dags.org b/20251229180249-airflow_dags.org old mode 100644 new mode 100755 diff --git a/20260101010049-concepts.org b/20260101010049-concepts.org old mode 100644 new mode 100755 index c0ff86c..145265c --- a/20260101010049-concepts.org +++ b/20260101010049-concepts.org @@ -22,8 +22,18 @@ Part of being a software engineer is having a good grasp of mathematical concept - [[id:49b195c8-e116-40ca-86e8-62c65dbb5a4f][API Architecture]] WIP +- [[id:2767b5ac-f2c9-4b1e-ab87-82c43cdec4c1][CI/CD Example - Sitevisits]] + +- [[id:5b714c6c-7eaf-4f3f-b4f6-2166ff3a9963][CI/CD Summary]] + +- [[id:6a5bf6dd-d0ec-43e4-8e07-9956f4715f10][RESTful API]] + Some core programming concepts that are essential for software development. The things I need to add here are: +* Database Related + +- [[id:b4858f6a-b05c-47f2-972e-905e0bb2c352][Database Permissions, Roles, and Accounts]] + * Concepts to learn and talk about (cs and maths) - +xor+ - +big O notation+ @@ -35,6 +45,7 @@ Some core programming concepts that are essential for software development. The - functional programming - object-oriented programming - relational databases vs non-relational databases +- +Database permissions, roles and accounts+ - networking basics - operating systems fundamentals - concurrency and parallelism @@ -45,9 +56,10 @@ Some core programming concepts that are essential for software development. The - cloud computing basics - containerization (Docker, Kubernetes, etc.) - DevOps practices -- CI/CD pipelines +- +CI/CD pipelines+ - microservices architecture - API design and development +- +restful apis+ - web development fundamentals (HTML, CSS, JavaScript) - mobile app development basics - machine learning basics diff --git a/20260101011126-xor.org b/20260101011126-xor.org old mode 100644 new mode 100755 diff --git a/20260101012549-solid_principles.org b/20260101012549-solid_principles.org old mode 100644 new mode 100755 index 78c3d34..a6e8e5f --- a/20260101012549-solid_principles.org +++ b/20260101012549-solid_principles.org @@ -2,6 +2,7 @@ :ID: 6820973F-613E-441A-BC1D-8FE5CD9BD6F7 :END: #+title: solid_principles +#+filetags: :career:notes:technical: The SOLID principles are a set of five design principles that help software developers create maintainable, scalable, and flexible software systems. The principles were introduced by Robert C. Martin (Uncle Bob) and are widely used in object-oriented programming. diff --git a/20260101012731-solid_principles_examples.org b/20260101012731-solid_principles_examples.org old mode 100644 new mode 100755 diff --git a/20260101143401-actual_self_hosted.org b/20260101143401-actual_self_hosted.org old mode 100644 new mode 100755 diff --git a/20260101194248-gitea.org b/20260101194248-gitea.org old mode 100644 new mode 100755 diff --git a/20260104155940-server_backend.org b/20260104155940-server_backend.org old mode 100644 new mode 100755 index 00ed423..c697528 --- a/20260104155940-server_backend.org +++ b/20260104155940-server_backend.org @@ -32,14 +32,17 @@ The project is packaged as a Docker container, making it easy to deploy. You can #+begin_src bash - docker compose build org_backend + docker compose build org_backend - docker compose up -d org_backend - - # To check logs + docker compose up -d org_backend + + # Alternatively: + docker compose down && docker compose build --no-cache && docker compose up -d + + # To check logs + + docker logs -f org_backend - docker logs -f org_backend - #+end_src * Bruno @@ -56,3 +59,28 @@ Flow of how a note would be written: 4. This will trigger a function that republishes the notes website to include the new note. **Need to think more about this.** + +* Update + +The org-backend is no longer hosted using docker, it is now using systemd. The backend is still built using Maven, but it is now deployed as a standalone application rather than a Docker container. + +Here are the commands needed: + +#+begin_src bash + + # To build the application + mvn clean package -DskipTests + + # To run the application + java -jar target/org_backend-1.0.0-SNAPSHOT.jar + + # systemctl commands + sudo systemctl start org_backend + sudo systemctl stop org_backend + sudo systemctl restart org_backend + sudo systemctl status org_backend + + # To check logs + journalctl -u org_backend -f + + #+end_src diff --git a/20260107182221-2026_targets.org b/20260107182221-2026_targets.org old mode 100644 new mode 100755 diff --git a/20260111204228-rss_articles.org b/20260111204228-rss_articles.org old mode 100644 new mode 100755 index c422ab3..0e24cde --- a/20260111204228-rss_articles.org +++ b/20260111204228-rss_articles.org @@ -25,3 +25,17 @@ :READ_AT: 2026-01-12 11:14 :END: +* [[https://coffeeandjunk.substack.com/p/genius][Where Have All the Geniuses Gone?]] + :PROPERTIES: + :FEED: The Sunday Wisdom + :MINIFLUX_ID: 5358 + :READ_AT: 2026-01-25 22:52 + :END: + +* [[https://coffeeandjunk.substack.com/p/forever][Not Everything Has to Be Timeless]] + :PROPERTIES: + :FEED: The Sunday Wisdom + :MINIFLUX_ID: 5361 + :READ_AT: 2026-02-10 17:48 + :END: + diff --git a/20260115152626-apim.org b/20260115152626-apim.org old mode 100644 new mode 100755 diff --git a/20260117194854-programming_projects.org b/20260117194854-programming_projects.org old mode 100644 new mode 100755 diff --git a/20260121173318-api_architecture.org b/20260121173318-api_architecture.org old mode 100644 new mode 100755 diff --git a/20260211114817-personal_operating_system.org b/20260211114817-personal_operating_system.org new file mode 100755 index 0000000..1b94d99 --- /dev/null +++ b/20260211114817-personal_operating_system.org @@ -0,0 +1,8 @@ +:PROPERTIES: +:ID: 5f8f7d8a-5dfc-49a4-a7a6-33373a1d7c8d +:END: +#+title: Personal Operating System + +- [[id:fc92a943-61ac-462a-b6e5-8be46069f2ca][Timetable]] + +* Personal Operating System diff --git a/20260211124505-timetable.org b/20260211124505-timetable.org new file mode 100755 index 0000000..31cc9be --- /dev/null +++ b/20260211124505-timetable.org @@ -0,0 +1,36 @@ +:PROPERTIES: +:ID: fc92a943-61ac-462a-b6e5-8be46069f2ca +:END: +#+title: Timetable + +* Non-Ramadan — Weekdays + ++-------------+---------------+------------------------------------------------------------+ +| Time | Focus | Details | ++-------------+---------------+------------------------------------------------------------+ +| 06:30–08:00 | Morning (Dīn) | Fajr, Istighfār, Durood, Qurʾān (1.5 Juz), mobility / walk | ++-------------+---------------+------------------------------------------------------------+ +| 08:00–16:30 | Work | Work blocks with intention | ++-------------+---------------+------------------------------------------------------------+ +| 16:30–17:30 | Reset | Light food, walk, dhikr | ++-------------+---------------+------------------------------------------------------------+ +| 17:45–22:30 | Evening | Commute + Alimiyyah classes | ++-------------+---------------+------------------------------------------------------------+ +| 22:30–23:00 | Night | Remaining Durood, reflection, plan tomorrow, sleep | ++-------------+---------------+------------------------------------------------------------+ + +*Note*: If the day is Tuesday or Thursday, then we take an hour lunch and go to the gym. + +* Non-Ramadan — Weekends + ++--------------+-------------+---------------------------------------------------+ +| Time | Focus | Details | ++--------------+-------------+---------------------------------------------------+ +| Morning | Dīn | Fajr, full awrād, extended Qurʾān / reading | ++--------------+-------------+---------------------------------------------------+ +| Before Class | Body | Workout | ++--------------+-------------+---------------------------------------------------+ +| 11:00–14:00 | Alimiyyah | Classes | ++--------------+-------------+---------------------------------------------------+ +| Evening | Nourishment | Arabic/English reading, calligraphy, family, rest | ++--------------+-------------+---------------------------------------------------+ diff --git a/20260227103506-vaultwarden.org b/20260227103506-vaultwarden.org new file mode 100644 index 0000000..1e4ee4f --- /dev/null +++ b/20260227103506-vaultwarden.org @@ -0,0 +1,15 @@ +:PROPERTIES: +:ID: e12ef44d-69a4-45c8-a823-c810d2c3857c +:END: +#+title: Vaultwarden + + +Just ran into an issue where the IOS app was failing due to the latest version of bitwarden not being installed on the server. To fix this: + +#+begin_src bash + + docker compose pull + + docker compose up -d + +#+end_src diff --git a/20260305102210-cicd_example.org b/20260305102210-cicd_example.org new file mode 100644 index 0000000..29df4e2 --- /dev/null +++ b/20260305102210-cicd_example.org @@ -0,0 +1,599 @@ +:PROPERTIES: +:ID: 2767b5ac-f2c9-4b1e-ab87-82c43cdec4c1 +:END: +#+title: CI/CD Example + +During the first wave in 2026, we planned to get the netcore version of site visits out to customers. There were a bunch of tasks relating to this, so I asked AI to conceptually explain them. + +* Prompt: + +I want to understand builds and pipelines in more depth. we have a set of tasks to get a new upgraded project to customers. this is task 1: + +Add the .net core version to the TMC release pipeline. +Follow this guide so that the build artifacts are included in the TMC release + +https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Documents?path=/TMC/Deployment/AddingANewProjectToTMC.md&_a=preview + +(This will add the artifact to the release, you will then need to test this locally, see the other task) + +After that, we need to make the below changes as we did for the DriverWebAPI: + +https://azdo.microlise.com/MicroliseCollection/Microlise/_git/TMC_Release/pullrequest/23129?path=/ReleasePackagesConfig.csv&_a=files +https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Deployment/pullrequest/23154?_a=files +https://azdo.microlise.com/MicroliseCollection/Microlise/_git/TMCBranchTool/pullrequest/23766?_a=files + +this is task 2: +Add application file and make deployable locally +See this PR from when we previously did on Drivers: https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Deployment.Manifests.MFD/pullrequest/23188?path=/manifests/customers/dev/LocalDeploy/DEV/_apps.yml + +Note: That some of the properties in the files are different to what you have for a local deploy, if in doubt refer to main to ensure that we have no consistencies. + +Also, we don't need to alter the connection string as this has already been done. + +==== + +This requires the previous tasks to be completed (main build and artifact added to release) + +Follow this commit as an example + +https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Deployment.Manifests.MFD/commit/aeb2dbf1bbcef1b672aee05fdc7988959afd1a36?refName=refs/heads/main + +Create a new application file for the dotnet core version of the service, swap it out in the manifests for the local deploy along with any relevant configuration + +There may be some differences due to this being a web api rather than a background service, and the fact that we use the appsettings.json rather than the app.config - in which case look to Arrivals and departures and vehiclev2 if that is still around + +Set up local TMC and deploy - make sure it works as expected + +This is now possible on the new domain joined machines with a VM - did it myself and it works well + +https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Documents?path=/TMC/Deployment/Local%20Deployment%20and%20running%20ATFs%20on%20non-domain%20joined%20machines.md&_a=preview + +this is 3: +Make deployable in QA (Toblerone) +Check out this commit for the AVL where the new service was added to the templates and the deploy file, use what was learned from the local deploy to ensure this works in the same way + +Check if you can just apply this to the toblerone box, the deploy_all.yml file governs what is actually deployed, this might not be possible but worth a check + +Test that Toblerone deploys okay + +https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Deployment.Manifests.MFD/commit/59db355dbb80c784d7b7ca9f3bb30fc00ef1d13e?refName=refs/heads/main&path=/manifests + +See this PR for how we did it last time for the Driver Web API: https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Deployment.Manifests.MFD/pullrequest/23320 + +This needs to be changed for the current release, potentially the previous release if it errors when that happens as well as the ad hoc. See the last three files in the above PR. + +task 4: +Add artifact to the ad-hoc pipelines for QA / Cert +Need to complete the previous Toblerone QA task first! + +We need to add a similar artifact for SiteVisits to the ad hoc QA / Cert release pipeline like so: + +Image + +And then give it a run and make sure it works. + +See the release pipeline here: TMC.SiteVisitsWebApi - Pipelines + +task 5: +Ensure that you test each endpoint with different data, ensuring the experience is exactly the same for each endpoint (auth, request / response) + +As we are planning to hotswap the instances over, they must work exactly the same + +Make sure its on the same URL + +task 6: +Make deployable in the rest of QA +We have this running in Toblerone QA, once we are happy with the API in Toblerone we need to roll it out to the rest of QA. + +Aaron also suggested considering doing the internal CERT environments at this stage, then we have a more live like environment tested early on too. + +See this PR for how we did this for the Driver Web API: https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Deployment.Manifests.MFD/pullrequest/24329?path=/manifests/TemplateFiles/26.1/QA/deploy_tmc.yml + +task 7: +Ensure that the new Serilog logs are captured into elastic +This file needs updating with the paths for the serilogs in the sitevisitswebapi + +https://azdo.microlise.com/MicroliseCollection/Microlise/_git/ELK-Beats?path=/inventories/uat_web_servers/templates/filebeat~planBstructuredLogs.yml + +However it does not look like servicename and customername parsing is working for the existing logs + +Effectively, add a line like this but for our SiteVisits API: + +Image + +task 8: +Make deployable in UAT +Update UAT to use the new dotnet core version of the API, use what was learned from the local deploy to ensure this works in the same way + +Use this commit for reference + +https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Deployment.Manifests.MFD/commit/2fce44462b699b88e4c2597c8492a1a0dad1614d?refName=refs/heads/main + +See this PR for what we did last time for UAT (incorporates other environments): https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Deployment.Manifests.MFD/pullrequest/25631?path=/manifests/TemplateFiles/26.2/UAT/deploy_all_zero_predeploy.yml + +task 9: +Make deployable in live +Update live to use the new dotnet core version of the API, use what was learned from the local deploy to ensure this works in the same way + +Use this commit for reference + +https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Deployment.Manifests.MFD/commit/ce61205a1f53649e7b1313fb78eb72225d99503d?refName=refs/heads/main&path=/manifests/customers/prod/CEVA_BAXTER/LIVE/_customer.yml + +See this PR for what we did last time for live (incorporates other environments): https://azdo.microlise.com/MicroliseCollection/Microlise/_git/Deployment.Manifests.MFD/pullrequest/25631?path=/manifests/TemplateFiles/26.2/UAT/deploy_all_zero_predeploy.yml + + +* Response + +You’re essentially looking at a **full CI/CD path** for introducing a **new version of a service (.NET Core API)** into a large enterprise deployment system. The tasks look complicated because they touch **multiple layers of the delivery pipeline**, not just code. + +I'll explain this in a **mental model first**, then walk through **what each task is really doing in the pipeline**. + +--- + +** 1. The Big Picture: What a Build & Release Pipeline Is + +In enterprise systems like Azure DevOps, deployment is usually split into two major stages. + +1. Build Pipeline (CI) + +Purpose: **Turn source code into deployable artifacts** + +Steps typically include: + +#+begin_src +Code → Restore packages → Compile → Run tests → Package → Publish artifact +#+end_src + +Output = **artifact** + +Example artifact: + +#+begin_src +SiteVisitsWebApi.zip +#+end_src + +This artifact contains: + +#+begin_src +dlls +configs +dependencies +startup files +#+end_src + +Think of an **artifact** as a **versioned package of your application**. + + +2. Release Pipeline (CD) + +Purpose: **Take the artifact and deploy it to environments** + +Example environments: + +#+begin_src +Local +QA +CERT +UAT +LIVE +#+end_src + +Each environment might have: +- different configs +- different servers +- different manifests + + +*Your System Specifically* + +You are working with something like: + +#+begin_src + + +Git Repo + ↓ +Build Pipeline + ↓ +Artifacts + ↓ +TMC Release Pipeline + ↓ +Deployment Manifests + ↓ +Servers + +#+end_src + + +** 2. Why This Task Exists + +You are **introducing a new .NET Core version of an API**. + +Previously there was likely: + +#+begin_src +SiteVisitsWebApi (.NET Framework) +#+end_src + +Now: + +#+begin_src +SiteVisitsWebApi (.NET Core) +#+end_src + + +So you must: + +1. Build it +2. Package it +3. Add it to release pipeline +4. Update deployment configs +5. Deploy to environments gradually + + +** 3. What Each Task Actually Means + +I'll translate the tasks into **plain engineering intent**. + + + +*** Task 1: Add .NET Core Version to Build + Release + +What is happening? + +You add the **new project to the build pipeline** so it produces an artifact. + +Before: + +~Build → DriverWebAPI artifact~ + +After: + +#+begin_src + +Build → DriverWebAPI artifact + → SiteVisitsWebApi artifact + +#+end_src + + +Why the PRs exist + +These repositories control deployment: + +#+begin_src +TMC_Release +Deployment +TMCBranchTool +#+end_src + +They likely manage: + +| Repo | Purpose | +| ------------- | ------------------------- | +| TMC_Release | release packaging | +| Deployment | deployment scripts | +| TMCBranchTool | release branch automation | + + +What ReleasePackagesConfig.csv probably does + +Something like: + +#+begin_src + +ServiceName,ArtifactName,DeploymentType +DriverWebApi,DriverWebApi.zip,WebApi +SiteVisitsWebApi,SiteVisitsWebApi.zip,WebApi + +#+end_src + +So the pipeline knows: + +#+begin_src +Include this artifact in the release bundle +#+end_src + + +Result of Task 1 + +Your pipeline will now produce: + +Artifacts: + +~DriverWebApi~ + +~SiteVisitsWebApi~ + + +And release pipeline can access them. + + + +*** Task 2: Make Deployable Locally + +Now you test deployment **without affecting real environments**. + +This uses **deployment manifests**. + + +What a manifest is + +A manifest is basically a **deployment recipe**. + +Example: + +#+begin_src yaml + +apps: + - name: sitevisitswebapi + artifact: SiteVisitsWebApi + port: 5000 + config: appsettings.json + +#+end_src + +It tells the deployment system: + +deploy this artifact +with these configs +to this environment + + +What you do here + +Create a new **application definition**. + +Example: + +~_apps.yml~ + +Add: + +~sitevisitswebapi~ + +Then configure: + +#+begin_src +artifact source +ports +configs +environment variables +#+end_src + + +Why they mention differences + +Your service is: + +~Web API~ + +instead of + +~Background Windows Service~ + +So deployment might differ: + +| Background service | Web API | +| ------------------ | ----------------------- | +| runs as service | hosted in IIS / kestrel | +| app.config | appsettings.json | + +Result of Task 2 + +You can now run: + +local TMC deployment + +and your API launches locally. + +*** Task 3: Deploy to QA (Toblerone) + +Now you move from: + +Local → QA + +"Toblerone" appears to be a **specific QA environment/server**. + + +You update manifests like: + +deploy_all.yml + +Which probably contains: + +#+begin_src yaml + + +apps: + - driverwebapi + - sitevisitswebapi +#+end_src + +So the deployment engine knows: + +deploy this service in QA + + +Then test deployment. + + +*** Task 4: Add to Ad-hoc QA / Cert Pipelines + +These are **manual release pipelines**. + +Example use: + +~Dev: deploy specific service to QA quickly~ + + +Instead of full release. + +You add the artifact there so people can manually deploy it. + + +*** Task 5: Endpoint Testing + +Critical step. + +You must confirm the new API behaves **exactly like the old one**. + +Because they plan a **hotswap**. + +Meaning: + +Old API → replace with new API +same URL +same behaviour + +If anything changes, clients break + +So test: + +Auth +Request formats +Response formats +Error codes + + +*** Task 6: Deploy to Remaining QA + +Once Toblerone works: + +Toblerone QA → All QA environments + +Example: + +QA1 +QA2 +QA3 + +Maybe also: + +Internal CERT + + +*** Task 7: Logging (Serilog → Elastic) + +The new API logs differently. + +Probably something like: + +~logs/sitevisitswebapi/*.log~ + + +Filebeat must be told to collect them. + +Example config: + +#+begin_src +- type: log + paths: + - /logs/sitevisitswebapi/*.log +#+end_src + +Then logs go: + +~Server → Filebeat → Elasticsearch → Kibana~ + + +*** Task 8: Deploy to UAT + +UAT = staging environment. + +Production-like testing + +Here you update the deployment manifests to use the **new API**. + + + +*** Task 9: Deploy to Live + +Final production rollout. + +Same process: + +manifest updates +deploy pipeline +verification + + +** 4. The Entire Flow (Visual) + +#+begin_src + + +Code (SiteVisitsWebApi) + │ + ▼ +Build Pipeline + │ + ▼ +Artifact Produced +(SiteVisitsWebApi.zip) + │ + ▼ +TMC Release Pipeline + │ + ▼ +Deployment Manifests + │ + ▼ +Local Deploy + │ + ▼ +QA (Toblerone) + │ + ▼ +All QA + │ + ▼ +UAT + │ + ▼ +LIVE +#+end_src + + +** 5. Why Enterprise Pipelines Feel Complicated + +Because deployment is separated into **many independent systems**: + +| Layer | Responsibility | +| ------------------ | ----------------------- | +| Build pipeline | compile code | +| Artifact storage | store packages | +| Release pipeline | orchestrate deployments | +| Manifests | describe environments | +| Deployment scripts | actually install | +| Logging | monitor | + +Each lives in **different repos**. + + +** 6. The Most Important Concept to Understand + +Everything revolves around **artifacts**. + +#+begin_src +Source Code + ↓ +Build + ↓ +Artifact + ↓ +Deploy artifact everywhere +#+end_src + +You **never deploy source code directly**. + + +** 7. What You're Really Doing in This Ticket + +You are teaching the deployment system: + +"Hey, there is a new service now" + +Then gradually making every environment aware of it. + diff --git a/20260305111610-cicd_summary.org b/20260305111610-cicd_summary.org new file mode 100644 index 0000000..ef4b1f1 --- /dev/null +++ b/20260305111610-cicd_summary.org @@ -0,0 +1,64 @@ +:PROPERTIES: +:ID: 5b714c6c-7eaf-4f3f-b4f6-2166ff3a9963 +:END: +#+title: CI/CD Summary + +* Summary +CI/CD stands for Continuous Integration and Continuous Delivery/Deployment. It’s a development practice that automates building, testing, and delivering software so code changes can be released quickly and reliably. + +** Continuous Integration (CI) + +CI means developers frequently merge their code into a shared repository. Every time code is pushed: + +1. The code is built automatically. +2. Automated tests run. +3. If something breaks, the team is alerted. + +Goal: catch bugs early and ensure new code works with the rest of the project. + +** Continuous Delivery / Continuous Deployment (CD) +CD takes the tested code from CI and prepares it for release. + +- Continuous Delivery: Code is automatically prepared for production, but a human approves the final deployment. + +- Continuous Deployment: Code is automatically deployed to production with no manual approval. + +Goal: make releases faster and safer. + +** Pipelines +A pipeline is the automated workflow that runs these steps in sequence. Think of it as a script that defines what happens after a code change. + +Typical pipeline stages: + +1. Source – code pushed to repository +2. Build – compile the application +3. Test – run automated tests +4. Package – create deployable artifact (e.g., Docker image) +5. Deploy – release to staging or production + +Example simplified pipeline: + +~Code Push → Build → Test → Package → Deploy~ + +Why CI/CD is useful + +- Faster development cycles + +- Fewer integration bugs + +- Automated testing and deployment + +- More reliable releases + +Common CI/CD tools + +- GitHub Actions + +- Jenkins + +- GitLab CI/CD + +- CircleCI + +In short: +CI/CD uses pipelines to automatically build, test, and deploy software whenever code changes are made. diff --git a/20260305130457-database_perms_roles_accounts.org b/20260305130457-database_perms_roles_accounts.org new file mode 100644 index 0000000..9571041 --- /dev/null +++ b/20260305130457-database_perms_roles_accounts.org @@ -0,0 +1,243 @@ +:PROPERTIES: +:ID: b4858f6a-b05c-47f2-972e-905e0bb2c352 +:END: +#+title: Database Permissions, Roles, and Accounts + +* Introduction +Database security is a crucial part of database administration. It ensures that only authorised users can access, modify, or manage data. Three core concepts used to control access are: + +1. Accounts (logins/users) +2. Roles +3. Permissions + +These concepts work together to create structured and secure access control inside a database system. + +* 1. Database Accounts + +A *database account* represents an identity that can connect to the database system. In Microsoft SQL Server this is typically split into two layers: + +- *Login* → Authentication at the server level +- *User* → Authorisation inside a specific database + +** Login (Server Level) + +A login allows someone or something to authenticate with the SQL Server instance. + +Example: Creating a login + +#+BEGIN_SRC sql +CREATE LOGIN student_user +WITH PASSWORD = 'StrongPassword123!'; +#+END_SRC + +You can also create a login linked to Windows authentication. + +#+BEGIN_SRC sql +CREATE LOGIN [DOMAIN\Zaine] FROM WINDOWS; +#+END_SRC + +** Database User + +A login must be mapped to a user inside a database before it can access that database. + +Example: + +#+BEGIN_SRC sql +USE SchoolDB; + +CREATE USER student_user +FOR LOGIN student_user; +#+END_SRC + +Now the login can access the *SchoolDB* database as the user *student_user*. + +* 2. Permissions + +Permissions define *what actions a user can perform*. These actions include reading data, inserting rows, modifying tables, or executing procedures. + +Common SQL Server permissions include: + +- SELECT → Read data +- INSERT → Add new data +- UPDATE → Modify data +- DELETE → Remove data +- EXECUTE → Run stored procedures +- ALTER → Modify database objects +- CONTROL → Full control over an object + +** Granting Permissions + +Permissions are given using the *GRANT* statement. + +Example: Allow a user to read data from a table. + +#+BEGIN_SRC sql +GRANT SELECT +ON Students +TO student_user; +#+END_SRC + +** Grant Multiple Permissions + +#+BEGIN_SRC sql +GRANT SELECT, INSERT +ON Students +TO student_user; +#+END_SRC + +This allows the user to read and add new rows. + +** Revoking Permissions + +If a permission should be removed: + +#+BEGIN_SRC sql +REVOKE INSERT +ON Students +FROM student_user; +#+END_SRC + +** Denying Permissions + +A *DENY* explicitly blocks an action, even if another role grants it. + +#+BEGIN_SRC sql +DENY DELETE +ON Students +TO student_user; +#+END_SRC + +* 3. Roles + +Roles are collections of permissions that can be assigned to multiple users. They simplify permission management by allowing administrators to assign permissions once and reuse them. + +Instead of granting permissions to many individual users, you grant them to a role. + +Example scenario: + +- Many students should be able to view course data. +- Instead of assigning permissions to each student individually, create a role. + +** Creating a Role + +#+BEGIN_SRC sql +CREATE ROLE student_role; +#+END_SRC + +** Assign Permissions to the Role + +#+BEGIN_SRC sql +GRANT SELECT +ON Courses +TO student_role; +#+END_SRC + +** Add Users to the Role + +#+BEGIN_SRC sql +ALTER ROLE student_role +ADD MEMBER student_user; +#+END_SRC + +Now *student_user* inherits all permissions from *student_role*. + +* 4. Built-in Database Roles + +SQL Server includes several predefined roles that already have common permission sets. + +Examples: + +| Role Name | Purpose | +|---------------+-----------------------------------| +| db_owner | Full control over the database | +| db_datareader | Read all tables | +| db_datawriter | Insert/update/delete all tables | +| db_ddladmin | Create or modify database objects | + +Example: Add a user to the read-only role. + +#+BEGIN_SRC sql +ALTER ROLE db_datareader +ADD MEMBER student_user; +#+END_SRC + +This allows the user to read all tables without giving modification rights. + +* 5. Example: Simple University Database Security + +Assume a database called *UniversityDB* with two tables: + +- Students +- Courses + +Goal: + +- Students → Read course information +- Teachers → Modify course data +- Admin → Full control + +** Step 1: Create Roles + +#+BEGIN_SRC sql +CREATE ROLE student_role; +CREATE ROLE teacher_role; +CREATE ROLE admin_role; +#+END_SRC + +** Step 2: Assign Permissions + +Student role (read-only): + +#+BEGIN_SRC sql +GRANT SELECT +ON Courses +TO student_role; +#+END_SRC + +Teacher role: + +#+BEGIN_SRC sql +GRANT SELECT, INSERT, UPDATE +ON Courses +TO teacher_role; +#+END_SRC + +Admin role: + +#+BEGIN_SRC sql +GRANT CONTROL +ON DATABASE::UniversityDB +TO admin_role; +#+END_SRC + +** Step 3: Add Users + +#+BEGIN_SRC sql +ALTER ROLE student_role ADD MEMBER student_user; +ALTER ROLE teacher_role ADD MEMBER teacher_user; +ALTER ROLE admin_role ADD MEMBER admin_user; +#+END_SRC + +Now permissions are organised through roles instead of assigning them individually. + +* 6. Why Roles Are Important + +Roles provide several benefits: + +- *Simpler management* → Change permissions in one place +- *Scalability* → Works well with many users +- *Security consistency* → Reduces risk of incorrect permissions +- *Easier auditing* → Clear structure of access control + +Without roles, administrators would need to manually manage permissions for every individual user. + +* Summary + +Database access control relies on three key components: + +- *Accounts* identify who is accessing the system (logins and users). +- *Permissions* define what actions can be performed. +- *Roles* group permissions together for easier management. + +In Microsoft SQL Server, administrators typically create logins, map them to database users, assign them to roles, and grant permissions to those roles. This layered approach ensures a secure and manageable database system. + diff --git a/20260305132058-restful_api.org b/20260305132058-restful_api.org new file mode 100644 index 0000000..bb8bac4 --- /dev/null +++ b/20260305132058-restful_api.org @@ -0,0 +1,317 @@ +:PROPERTIES: +:ID: 6a5bf6dd-d0ec-43e4-8e07-9956f4715f10 +:END: +#+title: RESTful APIs + +* What is a RESTful API? + +A *RESTful API* is a web service that follows the principles of *REST (Representational State Transfer)*. REST is an architectural style used for designing networked applications. + +In a RESTful system: + +- Everything is treated as a *resource* +- Resources are identified using *URLs* +- Standard *HTTP methods* are used to interact with resources +- Communication is usually done using *JSON* + +Example resource: + +#+begin_src +/users +/users/1 +/users/1/orders +#+end_src + +These represent data stored on the server. + +* Core HTTP Methods + +REST APIs rely heavily on HTTP verbs. + +| Method | Purpose | Example Endpoint | +|--------+-----------------------------+------------------| +| GET | Retrieve data | GET /users | +| POST | Create a new resource | POST /users | +| PUT | Update an existing resource | PUT /users/1 | +| DELETE | Remove a resource | DELETE /users/1 | + +* Example Resource: User + +Assume we have a simple *User* resource: + +#+begin_src json +{ + "id": 1, + "name": "Alice", + "email": "alice@email.com" +} +#+end_src + +The API allows clients to create, read, update, and delete users. + +* Creating a REST API in C# (ASP.NET Core) + +In C#, REST APIs are commonly built using *ASP.NET Core Web API*. + +Example project creation: + +#+begin_src bash +dotnet new webapi -n UserApi +cd UserApi +dotnet run +#+end_src + +This creates a ready-to-run REST API project. + +* Defining a Model + +First, define the resource model. + +File: Models/User.cs + +#+begin_src csharp +namespace UserApi.Models +{ + public class User + { + public int Id { get; set; } + + public string Name { get; set; } + + public string Email { get; set; } + } +} +#+end_src + +This represents the data stored and returned by the API. + +* Creating a Controller + +Controllers handle HTTP requests. + +File: Controllers/UserController.cs + +#+begin_src csharp +using Microsoft.AspNetCore.Mvc; +using UserApi.Models; + +namespace UserApi.Controllers +{ + [ApiController] + [Route("api/[controller]")] + public class UserController : ControllerBase + { + private static List users = new List() + { + new User { Id = 1, Name = "Alice", Email = "alice@email.com" }, + new User { Id = 2, Name = "Bob", Email = "bob@email.com" } + }; + + [HttpGet] + public ActionResult> GetUsers() + { + return Ok(users); + } + } +} +#+end_src + +Endpoint created: + +#+begin_src +GET /api/user +#+end_src + +Response: + +#+begin_src json +[ + { "id": 1, "name": "Alice", "email": "alice@email.com" }, + { "id": 2, "name": "Bob", "email": "bob@email.com" } +] +#+end_src + +* Getting a Single Resource + +Add an endpoint to retrieve a specific user. + +#+begin_src csharp +[HttpGet("{id}")] +public ActionResult GetUser(int id) +{ + var user = users.FirstOrDefault(u => u.Id == id); + + if (user == null) + { + return NotFound(); + } + + return Ok(user); +} +#+end_src + +Endpoint: + +#+begin_src +GET /api/user/1 +#+end_src + +* Creating a Resource (POST) + +Clients send JSON data to create a new user. + +#+begin_src csharp +[HttpPost] +public ActionResult CreateUser(User newUser) +{ + newUser.Id = users.Max(u => u.Id) + 1; + users.Add(newUser); + + return CreatedAtAction(nameof(GetUser), new { id = newUser.Id }, newUser); +} +#+end_src + +Example request: + +#+begin_src json +POST /api/user + +{ + "name": "Charlie", + "email": "charlie@email.com" +} +#+end_src + +* Updating a Resource (PUT) + +#+begin_src csharp +[HttpPut("{id}")] +public IActionResult UpdateUser(int id, User updatedUser) +{ + var user = users.FirstOrDefault(u => u.Id == id); + + if (user == null) + { + return NotFound(); + } + + user.Name = updatedUser.Name; + user.Email = updatedUser.Email; + + return NoContent(); +} +#+end_src + +Endpoint: + +#+begin_src +PUT /api/user/1 +#+end_src + +* Deleting a Resource + +#+begin_src csharp +[HttpDelete("{id}")] +public IActionResult DeleteUser(int id) +{ + var user = users.FirstOrDefault(u => u.Id == id); + + if (user == null) + { + return NotFound(); + } + + users.Remove(user); + + return NoContent(); +} +#+end_src + +Endpoint: + +#+begin_src +DELETE /api/user/1 +#+end_src + +* REST Principles + +A good REST API should follow these key ideas: + +** 1. Statelessness + +Each request contains all information needed. + +The server does *not store client session state*. + +** 2. Resource-Based URLs + +Endpoints should represent *nouns*, not verbs. + +Good: + +#+begin_src +GET /users +POST /users +GET /users/1 +#+end_src + +Bad: + +#+begin_src +GET /getUsers +POST /createUser +#+end_src + +** 3. Standard HTTP Status Codes + +| Code | Meaning | +|------+--------------| +| 200 | OK | +| 201 | Created | +| 204 | No Content | +| 400 | Bad Request | +| 404 | Not Found | +| 500 | Server Error | + +* Example Full API Structure + +#+begin_src +UserApi/ +├── Controllers/ +│ └── UserController.cs +├── Models/ +│ └── User.cs +├── Program.cs +└── appsettings.json +#+end_src + +* Testing the API + +You can test APIs using tools like: + +- curl +- Postman +- Swagger UI (included with ASP.NET) + +Example curl request: + +#+begin_src bash +curl http://localhost:5000/api/user +#+end_src + +* Summary + +A RESTful API: + +- Exposes *resources via URLs* +- Uses *HTTP methods (GET, POST, PUT, DELETE)* +- Communicates typically using *JSON* +- Is *stateless* +- Returns *standard HTTP status codes* + +In C#, *ASP.NET Core Web API* makes building REST APIs straightforward using: + +- Models +- Controllers +- Routing +- Built-in JSON serialization diff --git a/20260307165727-proverbs.org b/20260307165727-proverbs.org new file mode 100644 index 0000000..59f1c51 --- /dev/null +++ b/20260307165727-proverbs.org @@ -0,0 +1,24 @@ +:PROPERTIES: +:ID: 45eefd5b-a3d8-4b83-84ea-5a6984025755 +:END: +#+title: Proverbs + +* Arabic + +* French + +** <2026-03-06 Fri>: écriture comme les mouches +L'expression « écriture comme les mouches » est une forme figurée pour décrire une écriture très petite, fine, difficile à lire, souvent qualifiée de « pattes de mouche ». + +* English + +* Urdu +** <2026-03-07 Sat>: "یک نہ شود دو شود" (Yak na shud, do shud) + +Literal Meaning: +"One didn't happen, two happened." + +Interpretation: +It's used when someone fails to achieve one thing and ends up with an even bigger problem or loss — essentially, adding insult to injury. Instead of just missing out on one thing, they end up worse off than before. + +** <2026-03-08 Sun>: [[https://www.urdupod101.com/blog/2021/06/10/best-urdu-proverbs/][Link to a bunch of proverbs]] diff --git a/20260307233451-recipes_cookbook.org b/20260307233451-recipes_cookbook.org new file mode 100644 index 0000000..3d20203 --- /dev/null +++ b/20260307233451-recipes_cookbook.org @@ -0,0 +1,5 @@ +:PROPERTIES: +:ID: b31d6c3f-9bc3-4006-aaaf-d56168249e3a +:END: +#+title: Recipes Cookbook + diff --git a/Makefile b/Makefile old mode 100644 new mode 100755 diff --git a/all-files.json b/all-files.json old mode 100644 new mode 100755 index d4d9d7d..6f63320 --- a/all-files.json +++ b/all-files.json @@ -139,6 +139,16 @@ "title": "career_moc", "url": "/20250722221649-career_moc.html" }, + { + "id": "2767b5ac-f2c9-4b1e-ab87-82c43cdec4c1", + "title": "CI/CD Example", + "url": "/20260305102210-cicd_example.html" + }, + { + "id": "5b714c6c-7eaf-4f3f-b4f6-2166ff3a9963", + "title": "CI/CD Summary", + "url": "/20260305111610-cicd_summary.html" + }, { "id": "dd55d635-59de-4ed9-8ff0-423782c2e0ae", "title": "clean-code", @@ -156,6 +166,11 @@ "title": "Database MOC", "url": "/20250727122406-database_moc.html" }, + { + "id": "b4858f6a-b05c-47f2-972e-905e0bb2c352", + "title": "Database Permissions, Roles, and Accounts", + "url": "/20260305130457-database_perms_roles_accounts.html" + }, { "id": "d4f96bfb-b83d-449b-9f74-f602a1a3c2d3", "title": "deliberate_practice", @@ -168,6 +183,11 @@ } ], "E": [ + { + "id": "8fa3f476-6152-45f4-b618-50f1e4bce46c", + "title": "Emacs MOC", + "url": "/20241210004247-emacs_moc.html" + }, { "id": "7e79e4c5-383d-450f-882c-33d4f87ba1b5", "title": "emacs-stuff-elisp", @@ -202,11 +222,6 @@ "id": "034abe27-ca14-4dc0-9a3f-b8d0e1f26342", "title": "emacs-stuff-org-roam", "url": "/20241210004329-org_roam.html" - }, - { - "id": "8fa3f476-6152-45f4-b618-50f1e4bce46c", - "title": "emacs_moc", - "url": "/20241210004247-emacs_stuff.html" } ], "F": [ @@ -298,6 +313,11 @@ } ], "J": [ + { + "id": "ae343652-96fe-4341-8a36-ec3a1abd0dc6", + "title": "Java MOC", + "url": "/20250402185735-java_moc.html" + }, { "id": "7b8de14c-a73e-4c92-a403-a9a1c419c0b3", "title": "java-junit-testing", @@ -308,11 +328,6 @@ "title": "java-portswrigger-test", "url": "/20250723190203-java_portswrigger_test.html" }, - { - "id": "ae343652-96fe-4341-8a36-ec3a1abd0dc6", - "title": "java_moc", - "url": "/20250402185735-technical_java_notes.html" - }, { "id": "f9897f8e-2b63-4ad2-a55f-3787c4ac235f", "title": "job_application_cover_letters", @@ -347,15 +362,15 @@ "title": "Library", "url": "/20250724230557-books_org_agenda.html" }, + { + "id": "bdb493df-db92-4c93-9558-0b10fdff3048", + "title": "Linux MOC", + "url": "/20250417173809-linux_stuff.html" + }, { "id": "569a4a57-1843-4821-8259-17762855985e", "title": "linux-arch-linux", "url": "/20250703183239-linux_arch_linux.html" - }, - { - "id": "bdb493df-db92-4c93-9558-0b10fdff3048", - "title": "linux_moc", - "url": "/20250417173809-linux_moc.html" } ], "M": [ @@ -403,18 +418,23 @@ } ], "O": [ + { + "id": "a9829b5d-690d-4a21-ba94-ac8beac4d439", + "title": "Old NGINX Config", + "url": "/20251109205925-old_nginx_code.html" + }, { "id": "2c2d8df4-ad36-40ab-9f30-8a047b372956", "title": "old_nextcloud_server_code", "url": "/20251019114758-old_nextcloud_server_code.html" - }, - { - "id": "a9829b5d-690d-4a21-ba94-ac8beac4d439", - "title": "old_nginx_code", - "url": "/20251109205925-old_nginx_code.html" } ], "P": [ + { + "id": "5f8f7d8a-5dfc-49a4-a7a6-33373a1d7c8d", + "title": "Personal Operating System", + "url": "/20260211114817-personal_operating_system.html" + }, { "id": "939e301b-6463-46a8-b57e-0af606e7e7ef", "title": "Postgres", @@ -430,6 +450,11 @@ "title": "Programming Projects", "url": "/20260117194854-programming_projects.html" }, + { + "id": "45eefd5b-a3d8-4b83-84ea-5a6984025755", + "title": "Proverbs", + "url": "/20260307165727-proverbs.html" + }, { "id": "125c81dc-c14f-4b4d-93c6-0a2b157735ac", "title": "python-dictionary", @@ -452,21 +477,31 @@ } ], "R": [ + { + "id": "b31d6c3f-9bc3-4006-aaaf-d56168249e3a", + "title": "Recipes Cookbook", + "url": "/20260307233451-recipes_cookbook.html" + }, { "id": "EA93341B-20C0-48A2-BD88-F24ED3C540DA", - "title": "recipes-done", + "title": "Recipes Done", "url": "/20250719175023-recipes_done.html" }, { "id": "F7D68FF4-CAD0-4791-BAE4-AC20B84A8785", - "title": "recipes-ideas", + "title": "Recipes Ideas", "url": "/20250719174944-recipes_ideas.html" }, { "id": "65F747B1-3CB2-429A-9E26-ED8BC169E689", - "title": "recipes-main", + "title": "Recipes MOC", "url": "/20250717230336-recipes_moc.html" }, + { + "id": "6a5bf6dd-d0ec-43e4-8e07-9956f4715f10", + "title": "RESTful APIs", + "url": "/20260305132058-restful_api.html" + }, { "id": "3a8274ef-f2fe-486d-9caf-0c56982b9917", "title": "RSS Articles", @@ -546,6 +581,11 @@ "title": "the_science_of_self_discipline", "url": "/20241231172543-the_science_of_self_discipline.html" }, + { + "id": "fc92a943-61ac-462a-b6e5-8be46069f2ca", + "title": "Timetable", + "url": "/20260211124505-timetable.html" + }, { "id": "5443ed1c-bb7f-4eb4-9c96-d12648dd2291", "title": "tpis", @@ -569,6 +609,13 @@ "url": "/20251214210526-useful_c_imports.html" } ], + "V": [ + { + "id": "e12ef44d-69a4-45c8-a823-c810d2c3857c", + "title": "Vaultwarden", + "url": "/20260227103506-vaultwarden.html" + } + ], "W": [ { "id": "7612a9a6-ae70-4525-93a0-81bac857df39", diff --git a/all-files.org b/all-files.org old mode 100644 new mode 100755 index 87a3433..d75172d --- a/all-files.org +++ b/all-files.org @@ -47,6 +47,7 @@ This file is auto-generated. Do not edit manually. - [[id:631b2086-4b8f-4fe3-829d-be1dc014e293][Design patterns]] * E +- [[id:8fa3f476-6152-45f4-b618-50f1e4bce46c][Emacs MOC]] - [[id:7e79e4c5-383d-450f-882c-33d4f87ba1b5][emacs-stuff-elisp]] - [[id:45CC3AF5-5E20-4B03-A36C-8D4BDD5CBB13][emacs-stuff-evil]] - [[id:8e5e9498-ff3c-48e7-aab5-6e94b2e41ccb][emacs-stuff-gtd]] @@ -54,7 +55,6 @@ This file is auto-generated. Do not edit manually. - [[id:2ab0fa3f-8ac6-4af2-8cd4-1dd490fb19c3][emacs-stuff-magit]] - [[id:7d2e867e-f091-4362-a583-453f732207fe][emacs-stuff-org-publish]] - [[id:034abe27-ca14-4dc0-9a3f-b8d0e1f26342][emacs-stuff-org-roam]] -- [[id:8fa3f476-6152-45f4-b618-50f1e4bce46c][emacs_moc]] * F - [[id:7d199fbe-b0e7-48fd-b8a1-793044dbea01][fyp]] @@ -81,9 +81,9 @@ This file is auto-generated. Do not edit manually. - [[id:9ad3f3f1-55f7-4114-bc8c-17250b6dd25d][ise_week_7]] * J +- [[id:ae343652-96fe-4341-8a36-ec3a1abd0dc6][Java MOC]] - [[id:7b8de14c-a73e-4c92-a403-a9a1c419c0b3][java-junit-testing]] - [[id:5cfd7f6f-f5ac-4f18-90f9-be9a31dd238e][java-portswrigger-test]] -- [[id:ae343652-96fe-4341-8a36-ec3a1abd0dc6][java_moc]] - [[id:f9897f8e-2b63-4ad2-a55f-3787c4ac235f][job_application_cover_letters]] * K @@ -94,8 +94,8 @@ This file is auto-generated. Do not edit manually. - [[id:9d1cfccc-8da7-41a3-b435-9857f0abe441][Leetcode Notes]] - [[id:93a43a24-6861-40c4-b45b-581977bb55cf][leetcode-arrays]] - [[id:363dbdfa-f23c-4f7e-a6f3-6d34f78984bb][Library]] +- [[id:bdb493df-db92-4c93-9558-0b10fdff3048][Linux MOC]] - [[id:569a4a57-1843-4821-8259-17762855985e][linux-arch-linux]] -- [[id:bdb493df-db92-4c93-9558-0b10fdff3048][linux_moc]] * M - [[id:bcd41e87-120c-455c-8898-996ddaa41f75][maven-pom-file]] @@ -114,6 +114,7 @@ This file is auto-generated. Do not edit manually. - [[id:a9829b5d-690d-4a21-ba94-ac8beac4d439][old_nginx_code]] * P +- [[id:5f8f7d8a-5dfc-49a4-a7a6-33373a1d7c8d][Personal Operating System]] - [[id:939e301b-6463-46a8-b57e-0af606e7e7ef][Postgres]] - [[id:2BFB84B2-2129-4AE3-8E69-290CA5BF9747][pre_work_prep_microlise]] - [[id:d63abaad-15e8-45d8-aafb-c634164ec0c0][Programming Projects]] @@ -125,7 +126,7 @@ This file is auto-generated. Do not edit manually. * R - [[id:EA93341B-20C0-48A2-BD88-F24ED3C540DA][recipes-done]] - [[id:F7D68FF4-CAD0-4791-BAE4-AC20B84A8785][recipes-ideas]] -- [[id:65F747B1-3CB2-429A-9E26-ED8BC169E689][recipes-main]] +- [[id:65F747B1-3CB2-429A-9E26-ED8BC169E689][recipes-moc]] - [[id:3a8274ef-f2fe-486d-9caf-0c56982b9917][RSS Articles]] * S @@ -145,6 +146,7 @@ This file is auto-generated. Do not edit manually. - [[id:2729599d-ae2b-4f22-b73d-bf22d81e0767][Test Driven Development]] - [[id:EC9D851F-3A2E-4F32-A584-76F6F7A08E30][the_clean_coder]] - [[id:455ef38f-9a5f-4f62-afe9-25e2261e1282][the_science_of_self_discipline]] +- [[id:fc92a943-61ac-462a-b6e5-8be46069f2ca][Timetable]] - [[id:5443ed1c-bb7f-4eb4-9c96-d12648dd2291][tpis]] * U diff --git a/assets/2_to_1.svg b/assets/2_to_1.svg old mode 100644 new mode 100755 diff --git a/assets/career-notes/api-layers.png b/assets/career-notes/api-layers.png old mode 100644 new mode 100755 diff --git a/assets/career/APIOps.png b/assets/career/APIOps.png old mode 100644 new mode 100755 diff --git a/assets/career/Screenshot 2026-01-14 154800.png b/assets/career/Screenshot 2026-01-14 154800.png old mode 100644 new mode 100755 diff --git a/assets/design-patterns/adapter-pattern-2.png b/assets/design-patterns/adapter-pattern-2.png old mode 100644 new mode 100755 diff --git a/assets/design-patterns/adapter-pattern.png b/assets/design-patterns/adapter-pattern.png old mode 100644 new mode 100755 diff --git a/assets/design-patterns/command-pattern.png b/assets/design-patterns/command-pattern.png old mode 100644 new mode 100755 diff --git a/assets/design-patterns/composite-pattern.png b/assets/design-patterns/composite-pattern.png old mode 100644 new mode 100755 diff --git a/assets/design-patterns/decorator-pattern.png b/assets/design-patterns/decorator-pattern.png old mode 100644 new mode 100755 diff --git a/assets/design-patterns/decorator-problem.png b/assets/design-patterns/decorator-problem.png old mode 100644 new mode 100755 diff --git a/assets/design-patterns/facade-pattern.png b/assets/design-patterns/facade-pattern.png old mode 100644 new mode 100755 diff --git a/assets/design-patterns/factory-pattern.png b/assets/design-patterns/factory-pattern.png old mode 100644 new mode 100755 diff --git a/assets/design-patterns/iterator-pattern.png b/assets/design-patterns/iterator-pattern.png old mode 100644 new mode 100755 diff --git a/assets/design-patterns/observer-pattern.png b/assets/design-patterns/observer-pattern.png old mode 100644 new mode 100755 diff --git a/assets/design-patterns/proxy-pattern.png b/assets/design-patterns/proxy-pattern.png old mode 100644 new mode 100755 diff --git a/assets/design-patterns/singleton-pattern.png b/assets/design-patterns/singleton-pattern.png old mode 100644 new mode 100755 diff --git a/assets/design-patterns/state-pattern.png b/assets/design-patterns/state-pattern.png old mode 100644 new mode 100755 diff --git a/assets/design-patterns/structure-pattern.png b/assets/design-patterns/structure-pattern.png old mode 100644 new mode 100755 diff --git a/assets/design-patterns/template-method-pattern.png b/assets/design-patterns/template-method-pattern.png old mode 100644 new mode 100755 diff --git a/assets/git-cheat-sheet-1.png b/assets/git-cheat-sheet-1.png old mode 100644 new mode 100755 diff --git a/assets/git-cheat-sheet-2.png b/assets/git-cheat-sheet-2.png old mode 100644 new mode 100755 diff --git a/assets/icons/icons8-z-key-64.png b/assets/icons/icons8-z-key-64.png new file mode 100755 index 0000000000000000000000000000000000000000..7ac81ddf84af114a87e106f600577f0f263ed2ca GIT binary patch literal 1151 zcmV-_1c3XAP)cCsvkj&Rm@zg(G%Q9&1Vfz>OiL$)9)7j7bc1aday1gYnHNr%=$+z)BugLj zRt{F2LHIt>Q*)l=x%dv`&2!Fs8WK{aTwGjSTwGjSR-v$-y@mB83+wr<@B}#0Kid+8 z4OAQf=9#(z~ zMEl$q<9;9pwtX>Y-Tc3GubYaaAlm1+13PR-DLY8KY$iClMQ*mD>}rNP-5y5E_BwRm=hj$C(Vs5%6q(xBx! z7hA8xT6}Moid=VR*mn>_r9n%Q&Fv{_E==QJX?u#U_7r4$K859k?hN}6fT%WzjwDvc zG-P`*#dgPZA9w{swE1(SZ{KKl;~o%AL?xp5;!)C57TCru^V>Jt{q_qWnuxkKjCE}UvQ3Sc z-@eiA)4M^`opURS?`DMbtzodeIlM93H`%S4p9fKQ&Rhg*E&_jZh_1N^{*`_mp=LhF zW+!y3cb@}MXU6R?6}P{FHF_b}-5FY+1yO16%~d|k`fu`owL90{8O}WeqSD|_n1=7d zuomwO>OBAx-5J^|K~x&d2if#}h%0voS-d+4s~Y0>A3_|=b$5pMp9WFo8OFLlcnU<7 zXBg}5+zFz}GmLeA^aO}1&oI{A^*D$s&oI{g$#xKXcRKg0F)O*eg95u-d)TKHuw;|U z6M7z_+3waJ7Vv@C=VP(YM^kUPbKiu3mx91Hnx)n5)*kx#HppkSAHcw)Abwd+Wxtov zelI`U*Bt0i170j?wXbPEfS?ydm1h|14wtbIE`uQlfA&`r^im+r;YavIdsw8DM5Gjk zO8@y+K(32UIcHsOUTW6=qNG(qb+iPcB`ijZX&Nf}>rGg?j#JJfUJ6EvY0k9D&q}FM zCK&V3HntV=$x#pIlu5=tR8M-CnkZsn(gRL(sckCeF|>IX7Z(>77Z>$^<`0y0KS&nQ RQfvSK002ovPDHLkV1m;rAu<2} literal 0 HcmV?d00001 diff --git a/assets/styles/style.css b/assets/styles/style.css index d03c22a..696ddd7 100755 --- a/assets/styles/style.css +++ b/assets/styles/style.css @@ -60,6 +60,8 @@ body { color: var(--fg); transition: background-color 0.3s, color 0.3s; font-family: Inter, sans-serif; + overflow-x: hidden; + padding-left: 1px; } .tag { @@ -792,4 +794,3 @@ pre.src{ background-color: var(--code-bg); color: var(--fg); } - diff --git a/index.org b/index.org old mode 100644 new mode 100755 diff --git a/lisp/build.el b/lisp/build.el index b344f99..8fc5de8 100755 --- a/lisp/build.el +++ b/lisp/build.el @@ -10,6 +10,14 @@ (package-initialize) +(defvar site-root + (file-name-directory + (or load-file-name buffer-file-name))) + +(defun site-path (path) + (expand-file-name path site-root)) + + (unless package-archive-contents (package-refresh-contents)) @@ -133,7 +141,10 @@ (add-to-list 'load-path default-directory) (defvar z-shared-head - " + " + + + @@ -255,8 +266,10 @@ Created with %c on Arch Arch Arch Arch Arch