diff --git a/.obsidian/appearance.json b/.obsidian/appearance.json index 9e26dfe..ca5a017 100644 --- a/.obsidian/appearance.json +++ b/.obsidian/appearance.json @@ -1 +1,3 @@ -{} \ No newline at end of file +{ + "cssTheme": "Obsidian gruvbox" +} \ No newline at end of file diff --git a/.obsidian/themes/Obsidian gruvbox/manifest.json b/.obsidian/themes/Obsidian gruvbox/manifest.json new file mode 100644 index 0000000..7267fa7 --- /dev/null +++ b/.obsidian/themes/Obsidian gruvbox/manifest.json @@ -0,0 +1,7 @@ +{ + "name": "Obsidian gruvbox", + "version": "0.2.1", + "minAppVersion": "0.16.0", + "author": "insanum", + "authorUrl": "https://insanum.com" +} diff --git a/.obsidian/themes/Obsidian gruvbox/theme.css b/.obsidian/themes/Obsidian gruvbox/theme.css new file mode 100644 index 0000000..a310e7b --- /dev/null +++ b/.obsidian/themes/Obsidian gruvbox/theme.css @@ -0,0 +1,579 @@ + +:root +{ + --dark0-hard_x: 29,32,33; /* #1d2021 */ + --dark0-hard: rgb(var(--dark0-hard_x)); + --dark0_x: 40,40,40; /* #282828 */ + --dark0: rgb(var(--dark0_x)); + --dark0-soft_x: 50,48,47; /* #32302f */ + --dark0-soft: rgb(var(--dark0-soft_x)); + --dark1_x: 60,56,54; /* #3c3836 */ + --dark1: rgb(var(--dark1_x)); + --dark2_x: 80,73,69; /* #504945 */ + --dark2: rgb(var(--dark2_x)); + --dark3_x: 102,92,84; /* #665c54 */ + --dark3: rgb(var(--dark3_x)); + --dark4_x: 124,111,100; /* #7c6f64 */ + --dark4: rgb(var(--dark4_x)); + --gray_x: 146,131,116; /* #928374 */ + --gray: rgb(var(--gray_x)); + + --light0-hard_x: 249,245,215; /* #f9f5d7 */ + --light0-hard: rgb(var(--light0-hard_x)); + --light0_x: 251,241,199; /* #fbf1c7 */ + --light0: rgb(var(--light0_x)); + --light0-soft_x: 242,229,188; /* #f2e5bc */ + --light0-soft: rgb(var(--light0-soft_x)); + --light1_x: 235,219,178; /* #ebdbb2 */ + --light1: rgb(var(--light1_x)); + --light2_x: 213,196,161; /* #d5c4a1 */ + --light2: rgb(var(--light2_x)); + --light3_x: 189,174,147; /* #bdae93 */ + --light3: rgb(var(--light3_x)); + --light4_x: 168,153,132; /* #a89984 */ + --light4: rgb(var(--light4_x)); + + --bright-red_x: 251,73,52; /* #fb4934 */ + --bright-red: rgb(var(--bright-red_x)); + --bright-green_x: 184,187,38; /* #b8bb26 */ + --bright-green: rgb(var(--bright-green_x)); + --bright-yellow_x: 250,189,47; /* #fabd2f */ + --bright-yellow: rgb(var(--bright-yellow_x)); + --bright-blue_x: 131,165,152; /* #83a598 */ + --bright-blue: rgb(var(--bright-blue_x)); + --bright-purple_x: 211,134,155; /* #d3869b */ + --bright-purple: rgb(var(--bright-purple_x)); + --bright-aqua_x: 142,192,124; /* #8ec07c */ + --bright-aqua: rgb(var(--bright-aqua_x)); + --bright-orange_x: 254,128,25; /* #fe8019 */ + --bright-orange: rgb(var(--bright-orange_x)); + + --neutral-red_x: 204,36,29; /* #cc241d */ + --neutral-red: rgb(var(--neutral-red_x)); + --neutral-green_x: 152,151,26; /* #98971a */ + --neutral-green: rgb(var(--neutral-green_x)); + --neutral-yellow_x: 215,153,33; /* #d79921 */ + --neutral-yellow: rgb(var(--neutral-yellow_x)); + --neutral-blue_x: 69,133,136; /* #458588 */ + --neutral-blue: rgb(var(--neutral-blue_x)); + --neutral-purple_x: 177,98,134; /* #b16286 */ + --neutral-purple: rgb(var(--neutral-purple_x)); + --neutral-aqua_x: 104,157,106; /* #689d6a */ + --neutral-aqua: rgb(var(--neutral-aqua_x)); + --neutral-orange_x: 214,93,14; /* #d65d0e */ + --neutral-orange: rgb(var(--neutral-orange_x)); + + --faded-red_x: 157,0,6; /* #9d0006 */ + --faded-red: rgb(var(--faded-red_x)); + --faded-green_x: 121,116,14; /* #79740e */ + --faded-green: rgb(var(--faded-green_x)); + --faded-yellow_x: 181,118,20; /* #b57614 */ + --faded-yellow: rgb(var(--faded-yellow_x)); + --faded-blue_x: 7,102,120; /* #076678 */ + --faded-blue: rgb(var(--faded-blue_x)); + --faded-purple_x: 143,63,113; /* #8f3f71 */ + --faded-purple: rgb(var(--faded-purple_x)); + --faded-aqua_x: 66,123,88; /* #427b58 */ + --faded-aqua: rgb(var(--faded-aqua_x)); + --faded-orange_x: 175,58,3; /* #af3a03 */ + --faded-orange: rgb(var(--faded-orange_x)); +} + +body +{ + --accent-h: 12; /* --faded-red #9d0006 */ + --accent-s: 107%; + --accent-l: 32%; + + --link-decoration: none; + --link-decoration-hover: none; + --link-external-decoration: none; + --link-external-decoration-hover: none; + + --tag-decoration: none; + --tag-decoration-hover: underline; + --tag-padding-x: .5em; + --tag-padding-y: .2em; + --tag-radius: .5em; + + --tab-font-weight: 600; + --bold-weight: 600; + + --checkbox-radius: 0; + + /* --list-indent: 2em; */ + + --embed-border-left: 6px double var(--interactive-accent); +} + +.theme-dark +{ + --color-red-rgb: var(--neutral-red_x); + --color-red: var(--neutral-red); + --color-purple-rgb: var(--neutral-purple_x); + --color-purple: var(--neutral-purple); + --color-green-rgb: var(--neutral-green_x); + --color-green: var(--neutral-green); + --color-cyan-rgb: var(--neutral-blue_x); + --color-cyan: var(--neutral-blue); + --color-blue-rgb: var(--faded-blue_x); + --color-blue: var(--faded-blue); + --color-yellow-rgb: var(--neutral-yellow_x); + --color-yellow: var(--neutral-yellow); + --color-orange-rgb: var(--neutral-orange_x); + --color-orange: var(--neutral-orange); + --color-pink-rgb: var(--bright-purple_x); + --color-pink: var(--bright-purple); + + --background-primary: var(--dark0); + --background-primary-alt: var(--dark0); + --background-secondary: var(--dark0-hard); + --background-secondary-alt: var(--dark1); + --background-modifier-border: var(--dark1); + + --cursor-line-background: rgba(var(--dark1_x), 0.5); + + --text-normal: var(--light0); + --text-faint: var(--light1); + --text-muted: var(--light2); + + --link-url: var(--neutral-green); + + --h1-color: var(--neutral-red); + --h2-color: var(--neutral-yellow); + --h3-color: var(--neutral-green); + --h4-color: var(--neutral-aqua); + --h5-color: var(--neutral-blue); + --h6-color: var(--neutral-purple); + + --text-highlight-bg: var(--neutral-yellow); + --text-highlight-fg: var(--dark0-hard); + + --text-accent: var(--neutral-orange); + --text-accent-hover: var(--bright-aqua); + + --tag-color: var(--bright-aqua); + --tag-background: var(--dark2); + --tag-background-hover: var(--dark1); + + --titlebar-text-color-focused: var(--bright-red); + + --inline-title-color: var(--bright-yellow); + + --bold-color: var(--neutral-yellow); + --italic-color: var(--neutral-yellow); + + --checkbox-color: var(--light4); + --checkbox-color-hover: var(--light4); + --checkbox-border-color: var(--light4); + --checkbox-border-color-hover: var(--light4); + --checklist-done-color: rgba(var(--light2_x), 0.5); + + --table-header-background: rgba(var(--dark0_x), 0.2); + --table-header-background-hover: var(--dark2); + --table-row-even-background: rgba(var(--dark2_x), 0.2); + --table-row-odd-background: rgba(var(--dark2_x), 0.4); + --table-row-background-hover: var(--dark2); + + --text-selection: rgba(var(--neutral-red_x), 0.6); + --flashing-background: rgba(var(--neutral-red_x), 0.3); + + --code-normal: var(--bright-blue); + --code-background: var(--dark1); + + --mermaid-note: var(--neutral-blue); + --mermaid-actor: var(--dark2); + --mermaid-loopline: var(--neutral-blue); + --mermaid-exclude: var(--dark4); + --mermaid-seqnum: var(--dark0); + + --icon-color-hover: var(--bright-red); + --icon-color-focused: var(--bright-blue); + + --nav-item-color-hover: var(--bright-red); + --nav-item-color-active: var(--bright-aqua); + --nav-file-tag: rgba(var(--neutral-yellow_x), 0.9); + + --graph-line: var(--dark2); + --graph-node: var(--light3); + --graph-node-tag: var(--neutral-red); + --graph-node-attachment: var(--neutral-green); + + --calendar-hover: var(--bright-red); + --calendar-background-hover: var(--dark1); + --calendar-week: var(--neutral-orange); + --calendar-today: var(--neutral-orange); + + --dataview-key: var(--text-faint); + --dataview-key-background: rgba(var(--faded-red_x), 0.5); + --dataview-value: var(--text-faint); + --dataview-value-background: rgba(var(--neutral-green_x), 0.3); + + --tab-text-color-focused-active: var(--neutral-yellow); + --tab-text-color-focused-active-current: var(--bright-red); +} + +.theme-light +{ + --color-red-rgb: var(--neutral-red_x); + --color-red: var(--neutral-red); + --color-purple-rgb: var(--neutral-purple_x); + --color-purple: var(--neutral-purple); + --color-green-rgb: var(--neutral-green_x); + --color-green: var(--neutral-green); + --color-cyan-rgb: var(--neutral-blue_x); + --color-cyan: var(--neutral-blue); + --color-blue-rgb: var(--faded-blue_x); + --color-blue: var(--faded-blue); + --color-yellow-rgb: var(--neutral-yellow_x); + --color-yellow: var(--neutral-yellow); + --color-orange-rgb: var(--neutral-orange_x); + --color-orange: var(--neutral-orange); + --color-pink-rgb: var(--bright-purple_x); + --color-pink: var(--bright-purple); + + --background-primary: var(--light0-hard); + --background-primary-alt: var(--light0-hard); + --background-secondary: var(--light1); + --background-secondary-alt: var(--light1); + --background-modifier-border: var(--light2); + + --cursor-line-background: rgba(var(--light1_x), 0.5); + + --text-normal: var(--dark0); + --text-faint: var(--dark3); + --text-muted: var(--dark2); + + --link-url: var(--neutral-green); + + --h1-color: var(--neutral-red); + --h2-color: var(--neutral-yellow); + --h3-color: var(--neutral-green); + --h4-color: var(--neutral-aqua); + --h5-color: var(--neutral-blue); + --h6-color: var(--neutral-purple); + + --text-highlight-bg: var(--bright-yellow); + --text-highlight-fg: var(--dark0); + + --text-accent: var(--neutral-orange); + --text-accent-hover: var(--bright-aqua); + + --tag-color: var(--neutral-aqua); + --tag-background: var(--light1); + --tag-background-hover: rgba(var(--light1_x), 0.6); + + --titlebar-text-color-focused: var(--bright-red); + + --inline-title-color: var(--bright-yellow); + + --bold-color: var(--neutral-yellow); + --italic-color: var(--neutral-yellow); + + --checkbox-color: var(--light4); + --checkbox-color-hover: var(--light4); + --checkbox-border-color: var(--light4); + --checkbox-border-color-hover: var(--light4); + --checklist-done-color: rgba(var(--dark2_x), 0.4); + + --table-header-background: rgba(var(--light3_x), 0.4); + --table-header-background-hover: var(--light2); + --table-row-even-background: rgba(var(--light1_x), 0.2); + --table-row-odd-background: rgba(var(--light1_x), 0.7); + --table-row-background-hover: var(--light2); + + --text-selection: rgba(var(--neutral-red_x), 0.6); + --flashing-background: rgba(var(--neutral-red_x), 0.3); + + --code-normal: var(--bright-blue); + --code-background: var(--light1); + + --mermaid-note: var(--bright-blue); + --mermaid-actor: var(--light3); + --mermaid-loopline: var(--neutral-blue); + --mermaid-exclude: var(--light2); + --mermaid-seqnum: var(--light0); + + --icon-color-hover: var(--bright-red); + --icon-color-focused: var(--bright-blue); + + --nav-item-color-hover: var(--bright-red); + --nav-item-color-active: var(--neutral-blue); + --nav-file-tag: rgba(var(--neutral-blue_x), 0.9); + + --graph-line: var(--light1); + --graph-node: var(--gray); + --graph-node-tag: var(--neutral-red); + --graph-node-attachment: var(--bright-green); + + --calendar-hover: var(--bright-red); + --calendar-background-hover: var(--light1); + --calendar-week: var(--bright-red); + --calendar-today: var(--bright-red); + + --dataview-key: var(--text-faint); + --dataview-key-background: rgba(var(--faded-red_x), 0.3); + --dataview-value: var(--text-faint); + --dataview-value-background: rgba(var(--neutral-green_x), 0.2); + + --tab-text-color-focused-active: var(--neutral-yellow); + --tab-text-color-focused-active-current: var(--bright-red); +} + +table +{ + border: 1px solid var(--background-secondary) !important; + border-collapse: collapse; +} + +thead +{ + border-bottom: 2px solid var(--background-modifier-border) !important; +} + +th +{ + font-weight: 600 !important; + border: 1px solid var(--background-secondary) !important; +} + +td +{ + border-left: 1px solid var(--background-secondary) !important; + border-right: 1px solid var(--background-secondary) !important; + border-bottom: 1px solid var(--background-secondary) !important; +} + +.markdown-rendered tbody tr:nth-child(even) +{ + background-color: var(--table-row-even-background) !important; +} + +.markdown-rendered tbody tr:nth-child(odd) +{ + background-color: var(--table-row-odd-background) !important; +} + +.markdown-rendered tbody tr:nth-child(even):hover, +.markdown-rendered tbody tr:nth-child(odd):hover +{ + background-color: var(--table-row-background-hover) !important; +} + +.markdown-rendered mark +{ + background-color: var(--text-highlight-bg); + color: var(--text-highlight-fg); +} + +.markdown-rendered mark a +{ + color: var(--red) !important; + font-weight: 600; +} + +.search-result-file-matched-text +{ + color: var(--text-highlight-fg) !important; +} + +.cm-hashtag-begin:hover, .cm-hashtag-end:hover +{ + color: var(--text-accent); + /* background-color: var(--tag-background-hover); */ + text-decoration: underline; +} + +input[type=checkbox] +{ + border: 1px solid var(--checkbox-color); +} + +input[type=checkbox]:checked +{ + background-color: var(--checkbox-color); + box-shadow: inset 0 0 0 2px var(--background-primary); +} + +input[type=checkbox]:checked:after +{ + display: none; +} + +code[class*="language-"], +pre[class*="language-"] +{ + line-height: var(--line-height-tight) !important; +} + +.cm-url +{ + color: var(--link-url) !important; +} + +.cm-url:hover +{ + color: var(--text-accent-color) !important; +} + +/* Keep highlight/marks the same between viewer and editor. */ +.cm-highlight +{ + color: var(--text-highlight-fg) !important; +} + +/* Keep inline code the same between viewer and editor. */ +.cm-inline-code +{ + border-radius: var(--radius-s); + font-size: var(--code-size); + padding: 0.1em 0.25em; +} + +.cm-line .cm-strong +{ + color: var(--bold-color) !important; +} + +/* + * Keep list bullet padding the same between viewer and editor. + * This is annoying with the cursor in the editor as there is a gap. + */ +/* +.cm-formatting-list +{ + padding-right: 4px !important; +} +*/ + +/* + * Keep sub-list indenting the same between viewer and editor. + * This assumes --list-indent is default at 2em. + */ +/* +.cm-indent +{ + text-indent: 1em !important; +} +*/ + +.mermaid .note +{ + fill: var(--mermaid-note) !important; +} + +.mermaid .actor +{ + fill: var(--mermaid-actor) !important; +} + +.mermaid .loopLine +{ + stroke: var(--mermaid-loopline) !important; +} + +.mermaid .loopText>tspan, +.mermaid .entityLabel +{ + fill: var(--neutral-red) !important; +} + +.mermaid .exclude-range +{ + fill: var(--mermaid-exclude) !important; +} + +.mermaid .sequenceNumber +{ + fill: var(--mermaid-seqnum) !important; +} + +.calendar .week-num +{ + color: var(--calendar-week) !important; +} + +.calendar .today +{ + color: var(--calendar-today) !important; +} + +.calendar .week-num:hover, +.calendar .day:hover +{ + color: var(--calendar-hover) !important; + background-color: var(--calendar-background-hover) !important; +} + +.markdown-embed-title +{ + color: var(--yellow); + font-weight: 600 !important; +} + +.cm-active +{ + background-color: var(--cursor-line-background) !important; +} + +.nav-file-tag +{ + color: var(--nav-file-tag) !important; +} + +.is-flashing +{ + background-color: var(--flashing-background) !important; +} + +.dataview.inline-field-key +{ + border-top-left-radius: var(--radius-s); + border-bottom-left-radius: var(--radius-s); + padding-left: 4px; + font-family: var(--font-monospace); + font-size: var(--font-smaller); + color: var(--dataview-key) !important; + background-color: var(--dataview-key-background) !important; +} + +.dataview.inline-field-value +{ + border-top-right-radius: var(--radius-s); + border-bottom-right-radius: var(--radius-s); + padding-right: 4px; + font-family: var(--font-monospace); + font-size: var(--font-smaller); + color: var(--dataview-value) !important; + background-color: var(--dataview-value-background) !important; +} + +.suggestion-highlight +{ + color: var(--bright-red); +} + +body { + --callout-border-width: 1px; + --callout-border-opacity: 0.4; + /* Order as defined in app.css */ + --callout-default: var(--neutral-blue_x); + --callout-note: var(--neutral-blue_x); + --callout-summary: var(--neutral-aqua_x); + --callout-info: var(--neutral-blue_x); + --callout-todo: var(--neutral-blue_x); + --callout-important: var(--neutral-aqua_x); + --callout-tip: var(--neutral-aqua_x); + --callout-success: var(--neutral-green_x); + --callout-question: var(--neutral-yellow_x); + --callout-warning: var(--neutral-orange_x); + --callout-fail: var(--neutral-red_x); + --callout-error: var(--neutral-red_x); + --callout-bug: var(--neutral-red_x); + --callout-example: var(--neutral-purple_x); + --callout-quote: var(--gray_x); +} + +.callout { + background-color: rgba(var(--callout-color), 0.2); +} diff --git a/.obsidian/themes/Wasp/manifest.json b/.obsidian/themes/Wasp/manifest.json new file mode 100644 index 0000000..11342cd --- /dev/null +++ b/.obsidian/themes/Wasp/manifest.json @@ -0,0 +1,7 @@ +{ + "name": "Wasp", + "version": "1.0.7", + "minAppVersion": "1.0.0", + "author": "Santi Younger", + "authorUrl": "https://santiyounger.com/" +} diff --git a/.obsidian/themes/Wasp/theme.css b/.obsidian/themes/Wasp/theme.css new file mode 100644 index 0000000..0cde85b --- /dev/null +++ b/.obsidian/themes/Wasp/theme.css @@ -0,0 +1,414 @@ +/* Wasp — Obsidian theme by Santi Younger */ + +/* Shared (both color schemes) — per Obsidian "Build a theme" guidance */ +body { + --font-monospace: "Source Code Pro", monospace; + /* Heading scale (reading + live preview) — matches Obsidian defaults */ + --h1-size: 1.802em; + --h2-size: 1.556em; + --h3-size: 1.344em; + --h4-size: 1.167em; + --h5-size: 1.067em; + --h6-size: 1em; + --h1-weight: 700; + --h2-weight: 600; + --h3-weight: 600; + --h4-weight: 600; + --h5-weight: 600; + --h6-weight: 600; +} + +/* ── Dark palette ─────────────────────────────────────────────────────────── */ +.theme-dark { + /* Base scale — required for community palette contrast checks (WCAG 4.5:1 on base-10) */ + --color-base-00: #191919; + --color-base-05: #1f1f1f; + --color-base-10: #242424; + --color-base-20: #2a2a2a; + --color-base-25: #323232; + --color-base-30: #3d3d3d; + --color-base-35: #4a4a44; + --color-base-40: #5c5c54; + --color-base-50: #9a9284; + --color-base-60: #bdae93; + --color-base-70: #d4c9a8; + --color-base-100: #faf2d6; + + --background-primary: var(--color-base-10); + --background-primary-alt: var(--color-base-10); + --background-secondary: var(--color-base-00); + --background-secondary-alt: var(--color-base-30); + --background-modifier-border: #f8c537; + --background-modifier-hover: rgba(255, 255, 255, 0.06); + + --text-normal: #faf2d6; + --text-faint: #bdae93; + --text-muted: #bdae93; + --h1-color: #f8c537; + --h2-color: #E8D49A; + --h3-color: #D49335; + --h4-color: #E0E0E0; + --h5-color: #C9BEA8; + --h6-color: #bdae93; + --text-title-h1: var(--h1-color); + --text-title-h2: var(--h2-color); + --text-title-h3: var(--h3-color); + --text-title-h4: var(--h4-color); + --text-title-h5: var(--h5-color); + --text-title-h6: var(--h6-color); + --text-highlight-bg: #640211; + --text-link: #83a598; + --text-a: #f8c537; + --text-a-hover: #83a598; + --text-accent: #f8c537; + --text-accent-hover: #D49335; + --text-on-accent: #1A2023; + --text-selection: #f8c537; + + --inline-code: #83a598; + --code-block: #83a598; + --pre-code: #3D3D3D; + --interactive-accent: #f8c537; + --interactive-accent-rgb: 248, 197, 55; + --interactive-before: #9a9284; + --vim-cursor: #f8c537; + + /* Graph view */ + --graph-node: rgb(var(--interactive-accent-rgb)); + --graph-line: rgb(var(--interactive-accent-rgb)); + --graph-node-focused: rgb(var(--interactive-accent-rgb)); + --graph-text: var(--text-normal); + + --callout-title-color: var(--text-normal); + + /* File tree — hover subtle; active = darker amber + white text (not bright gold) */ + --wasp-nav-active-background: #7A5C14; + --nav-item-background-hover: var(--background-modifier-hover); + --nav-item-background-active: var(--wasp-nav-active-background); + --nav-item-color-hover: var(--text-normal); + --nav-item-color-active: #ffffff; + --nav-collapse-icon-color: var(--text-faint); + --nav-collapse-icon-color-collapsed: var(--text-faint); + + /* Wasp-specific UI (settings buttons, etc.) */ + --button-bg-color: #D49335; + --button-text-color: #242424; + --button-hover-bg-color: #DAA520; + --button-hover-text-color: #1A2023; + + --text-sub-accent: var(--text-accent); +} + +/* ── Light palette ────────────────────────────────────────────────────────── */ +.theme-light { + /* Base scale — required for community palette contrast checks (WCAG 4.5:1 on base-10) */ + --color-base-00: #faf6f0; + --color-base-05: #fffcf7; + --color-base-10: #faf6f0; + --color-base-20: #e8dfd0; + --color-base-25: #ddd4c4; + --color-base-30: #c9b8a8; + --color-base-35: #b0a090; + --color-base-40: #968878; + --color-base-50: #7a6f5f; + --color-base-60: #6b5e4f; + --color-base-70: #5c5044; + --color-base-100: #2c2419; + + --background-primary: var(--color-base-10); + --background-primary-alt: var(--color-base-05); + --background-secondary: var(--color-base-20); + --background-secondary-alt: var(--color-base-30); + --background-modifier-border: #C87628; + --background-modifier-hover: rgba(120, 72, 24, 0.08); + + --text-normal: #2C2419; + --text-faint: #6B5E4F; + --text-muted: #5C5044; + --h1-color: #9A4E12; + --h2-color: #924e14; + --h3-color: #8f5514; + --h4-color: #8F4F14; + --h5-color: #7A4310; + --h6-color: #6B3A0E; + --text-title-h1: var(--h1-color); + --text-title-h2: var(--h2-color); + --text-title-h3: var(--h3-color); + --text-title-h4: var(--h4-color); + --text-title-h5: var(--h5-color); + --text-title-h6: var(--h6-color); + --text-link: #9b4218; + --text-a: #9B3A1A; + --text-a-hover: #9b4218; + --text-accent: #9B3A1A; + --text-accent-hover: #9b4218; + --text-on-accent: #1F1A14; + --text-selection: #E4C07A; + --text-highlight-bg: #F0E0B8; + --text-white: #FFFCF7; + + --inline-code: #3D6B5C; + --pre-code: #EDE6DA; + --interactive-accent: #D4922A; + --interactive-accent-rgb: 212, 146, 42; + --interactive-before: #6b5e4f; + --vim-cursor: #9B3A1A; + + --graph-node: rgb(var(--interactive-accent-rgb)); + --graph-line: rgb(var(--interactive-accent-rgb)); + --graph-node-focused: rgb(var(--interactive-accent-rgb)); + --graph-text: var(--text-normal); + + --callout-title-color: var(--text-normal); + + --nav-item-background-hover: var(--background-modifier-hover); + --nav-item-background-active: var(--background-modifier-border); + --nav-item-color-hover: var(--text-normal); + --nav-item-color-active: var(--text-on-accent); + + /* Workspace tabs — clear bar vs active pane */ + --tab-container-background: #E8DFD0; + --tab-background-active: var(--background-primary); + --tab-text-color: #5C5044; + --tab-text-color-active: #1F1A14; + --tab-text-color-focused: #5C5044; + --tab-text-color-focused-active: #1F1A14; + --tab-text-color-focused-highlighted: #1F1A14; + --tab-text-color-focused-active-current: #1F1A14; + --tab-divider-color: #C9B8A8; + --tab-outline-color: #C87628; + --tab-font-weight: 500; + --tab-font-weight-active: 600; + + --list-marker-color: var(--text-muted); + --indentation-guide-color: #6b5e4f; + + --button-bg-color: #C87628; + --button-text-color: #1F1A14; + --button-hover-bg-color: #A85C18; + --button-hover-text-color: #FFFCF7; + + --text-sub-accent: var(--text-accent); +} + +/* Dark: active file row — ensure white label/icons on darker amber bar */ +.theme-dark .tree-item-self.nav-file-title.is-active, +.theme-dark .tree-item-self.nav-folder-title.is-active { + --icon-color: var(--nav-item-color-active); +} + +.theme-dark .tree-item-self.nav-file-title.is-active .tree-item-inner, +.theme-dark .tree-item-self.nav-folder-title.is-active .tree-item-inner, +.theme-dark .tree-item-self.nav-file-title.is-active .nav-file-title-content, +.theme-dark .tree-item-self.nav-folder-title.is-active .nav-folder-title-content, +.theme-dark .tree-item-self.nav-file-title.is-active .svg-icon, +.theme-dark .tree-item-self.nav-folder-title.is-active .svg-icon, +.theme-dark .tree-item-self.nav-file-title.is-active svg, +.theme-dark .tree-item-self.nav-folder-title.is-active svg { + color: var(--nav-item-color-active); + stroke: var(--nav-item-color-active); +} + +/* ── Dark: selection & search (gold highlight needs dark foreground) ───── */ +.theme-dark .cm-s-obsidian span.obsidian-search-match-highlight { + color: var(--text-normal); + background-color: #483699; +} + +.theme-dark ::selection, +.theme-dark .markdown-preview-view ::selection, +.theme-dark .markdown-rendered ::selection, +.theme-dark .markdown-source-view.mod-cm6 .cm-editor .cm-line ::selection, +.theme-dark .cm-editor .cm-line ::selection { + background-color: var(--text-selection); + color: var(--text-on-accent); +} + +.theme-dark .markdown-source-view.mod-cm6 .cm-editor .cm-selectionBackground, +.theme-dark .markdown-source-view.mod-cm6 .cm-editor .cm-selectionMatchBackground, +.theme-dark .cm-editor .cm-selectionBackground, +.theme-dark .cm-editor .cm-selectionMatchBackground { + background-color: var(--text-selection); +} + +.theme-dark .cm-editor .cm-selection { + color: var(--text-on-accent); +} + +/* ── Light: selection, tabs, editor syntax ──────────────────────────────── */ +.theme-light ::selection, +.theme-light .markdown-preview-view ::selection, +.theme-light .markdown-rendered ::selection, +.theme-light .markdown-source-view.mod-cm6 .cm-editor .cm-line ::selection, +.theme-light .cm-editor .cm-line ::selection { + background-color: var(--text-selection); + color: var(--text-on-accent); +} + +.theme-light .markdown-source-view.mod-cm6 .cm-editor .cm-selectionBackground, +.theme-light .markdown-source-view.mod-cm6 .cm-editor .cm-selectionMatchBackground, +.theme-light .cm-editor .cm-selectionBackground, +.theme-light .cm-editor .cm-selectionMatchBackground { + background-color: var(--text-selection); +} + +.theme-light .cm-editor .cm-selection { + color: var(--text-on-accent); +} + +/* Light: workspace tab chrome (icons + titles follow tab variables) */ +.theme-light .workspace-tab-header:not(.is-active) .workspace-tab-header-inner-title, +.theme-light .workspace-tab-header:not(.is-active) .workspace-tab-header-inner-icon { + color: var(--tab-text-color); + opacity: 1; +} + +.theme-light .workspace-tab-header.is-active .workspace-tab-header-inner-title, +.theme-light .workspace-tab-header.is-active .workspace-tab-header-inner-icon, +.theme-light .workspace-tab-header.is-active .workspace-tab-header-status-icon { + color: var(--tab-text-color-focused-active); +} + +.theme-light .workspace-tab-header.is-active .svg-icon, +.theme-light .workspace-tab-header.is-active svg { + color: var(--tab-text-color-focused-active); + stroke: var(--tab-text-color-focused-active); +} + +/* Light: faint editor markers — quotes/callouts only (not bold/italic) */ +.theme-light .cm-s-obsidian span.cm-formatting-quote, +.theme-light .cm-s-obsidian span.cm-hmd-callout, +.theme-light .cm-s-obsidian span.cm-quote, +.theme-light .cm-s-obsidian .cm-line:not(.cm-active) span.cm-formatting-quote, +.theme-light .cm-s-obsidian .cm-line:not(.cm-active) span.cm-hmd-callout, +.theme-light .cm-s-obsidian .cm-line:not(.cm-active) span.cm-quote { + color: var(--text-muted); + opacity: 1; +} + +/* Headings: sizes/weights on body, colors on .theme-* — Obsidian applies them in reading + edit (#10) */ + +/* Graph view highlights (WebGL bridge) */ +.theme-dark .graph-view.color-circle, +.theme-dark .graph-view.color-fill-highlight, +.theme-dark .graph-view.color-line-highlight, +.theme-light .graph-view.color-circle, +.theme-light .graph-view.color-fill-highlight, +.theme-light .graph-view.color-line-highlight { + color: rgb(var(--interactive-accent-rgb)); +} + +/* ── Misc editor / UI ───────────────────────────────────────────────────── */ +.cm-s-obsidian span.cm-formatting-link { + color: var(--text-normal); +} + +body .markdown-source-view .CodeMirror-guttermarker-subtle { + color: var(--text-normal); +} + +.theme-light .vertical-tab-header-group-title { + color: var(--text-white); +} + +/*-----------------------------------------*/ +/* End of main theme, extra functionality can be added below */ + +.markdown-source-view { + font-family: var(--font-monospace); +} + +body .cm-fat-cursor .CodeMirror-cursor { + background-color: var(--vim-cursor); + opacity: 0.8; + width: 9px; + visibility: visible; +} + +button.mod-cta { + background-color: var(--button-bg-color); + color: var(--button-text-color); + font-weight: 600; +} + +button.mod-cta:hover, +button.mod-cta:focus { + background-color: var(--button-hover-bg-color); + color: var(--button-text-color); + font-weight: 600; +} + +.vertical-tab-nav-item.is-active { + background-color: var(--button-bg-color); + color: var(--button-text-color); + font-weight: 600; +} + +.vertical-tab-nav-item.is-active:hover, +.vertical-tab-nav-item.is-active:focus { + background-color: var(--button-hover-bg-color); + color: var(--button-text-color); + font-weight: 600; +} + +body:not(.is-phone) .vertical-tab-nav-item.is-active { + --background-modifier-hover: var(--button-hover-bg-color); + --icon-color: var(--button-text-color); + background-color: var(--button-bg-color); + color: var(--button-text-color); + font-weight: 600; +} + +body:not(.is-phone) .vertical-tab-nav-item.is-active:hover, +body:not(.is-phone) .vertical-tab-nav-item.is-active:focus { + background-color: var(--button-hover-bg-color); + color: var(--button-text-color); + font-weight: 600; +} + +.checkbox-container.is-enabled { + background-color: var(--button-bg-color); + color: var(--button-text-color); +} + +.checkbox-container.is-enabled:hover, +.checkbox-container.is-enabled:focus { + background-color: var(--button-hover-bg-color); + color: var(--button-text-color); +} + +.flair.mod-pop { + background-color: var(--button-bg-color); + color: var(--button-text-color); +} + +.flair.mod-pop:hover, +.flair.mod-pop:focus { + background-color: var(--button-hover-bg-color); + color: var(--button-text-color); +} + +/** hr styles — PREVIEW MODE */ +.cm-line hr, +.markdown-preview-view hr { + margin-block-start: 4em; + margin-block-end: 4em; + border: none; + height: 0; + border-bottom: 1px solid; + border-image-slice: 1; + border-width: 1px; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); +} + +.cm-line hr::after, +.markdown-preview-view hr::after { + display: inline-block; + position: absolute; + left: 50%; + transform: translate(-50%, -50%); + transform-origin: 50% 50%; + padding: 0.5rem; + color: var(--text-sub-accent); + background-color: var(--background-primary); +} diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 2abde9d..0cb7102 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -13,12 +13,12 @@ "state": { "type": "markdown", "state": { - "file": "Career/Career MOC.md", + "file": "Career/Concepts.md", "mode": "source", "source": false }, "icon": "lucide-file", - "title": "Career MOC" + "title": "Concepts" } } ] @@ -182,44 +182,52 @@ }, "active": "0aa065275eb81420", "lastOpenFiles": [ - "Career/Microlise MOC.md", + "Career/Big (O) - Time and Space Complexity.md", + "Career/Microlise/Microlise MOC.md", + "Career/Microlise/Microlise Assessment.md", + "Career/Microlise/Session Stored XSS PENTEST.md", "Career/Concepts.md", - "Career/Java Portswrigger Test.md", + "Index.md", "Career/Career MOC.md", + "Daily Notes.md", + "Career/Test Driven Development.md", + "Career/Windows Services.md", + "Career/Solid Principles.md", + "Career/Software Development Methodologies.md", + "Career/Restful API.md", + "Career/Powershell MOC.md", + "Career/MVP + MVT.md", "Career/Job applications.md", - "home/zaine/master-folder/CV's/Cover Letter/Santec/Santec.pdf.md", + "Career/Java Portswrigger Test.md", + "Career/DLL's.md", + "Career/Design Patterns.md", + "Career/Data camp AI training.md", + "Career/Cross Site Scripting (XSS).md", + "Career/CI-CD Summary.md", + "Career/CI-CD Example (site visits).md", + "Career/Bowling Kata.md", + "Career/ASP.NET Core Web API Fundamental Notes.md", + "Career/API Architecture.md", + "Career/Database - SQL", + "Career/20260305130457-database_perms_roles_accounts.org", + "Career/Attachments/APIOps.png", + "Career/Attachments/Screenshot 2026-01-14 154800.png", + "Career/Attachments/proxy-pattern.png", + "Career/Attachments/state-pattern.png", + "Career/Attachments/composite-pattern.png", + "Career/Attachments/iterator-pattern.png", + "Career/Attachments/template-method-pattern.png", + "Career/Attachments/facade-pattern.png", + "Career/Attachments/adapter-pattern-2.png", + "Career/Attachments/adapter-pattern.png", + "Career/Microlise", + "Career/Microlise/ESS ESP", + "Career/Attachments", "home/zaine/master-folder/CV's/Cover Letter/Santec", "home/zaine/master-folder/CV's/Cover Letter", "home/zaine/master-folder/CV's", "home/zaine/master-folder", "home/zaine", - "home", - "Index.md", - "Career/20260527152602-microlise_xss_rom_pentest.md", - "Career/20260513142352-aritificial_intelligence.md", - "Career/20260513115140-powershell_moc.md", - "Career/20260512121806-data_camp_ai_training.md", - "Career/20260505121135-seb_search_improvements.md", - "Career/20260413154901-dll.md", - "Career/20260413120825-windows_services.md", - "Career/20260410123131-esp_glossary.md", - "Career/20260410122935-esp_open_questions.md", - "Career/20260410122754-esp_known_issues.md", - "Career/20260410122604-ess_deploy_stages.md", - "Career/20260410122425-ess_database.md", - "Career/20260410122303-ess_manifest.md", - "Career/20260410122116-ess_scripts.md", - "Career/20260410121927-esp_pipeline.md", - "Career/20260410121719-esp_applications.md", - "Career/20260410121527-ess_esp_index.md", - "Career/20260410115348-microlise_ess.md", - "Career/20260407102129-mvp_mvt.md", - "Career", - "Attachments/anime-kuroko-no-basket-tetsuya-basketball-play-17f4blaudede9nw2.gif", - "Attachments", - "anime-kuroko-no-basket-tetsuya-basketball-play-17f4blaudede9nw2.gif", - "systemd/quartz-notes.service", - "systemd", "Untitled.canvas" ] } \ No newline at end of file diff --git a/Career/20250727122406-database_moc.md b/Career/20250727122406-database_moc.md deleted file mode 100644 index e7c5abb..0000000 --- a/Career/20250727122406-database_moc.md +++ /dev/null @@ -1,3 +0,0 @@ - - [Postgres](id:939e301b-6463-46a8-b57e-0af606e7e7ef) - - - [Airflow](id:c6cf8f7a-778f-4e83-b607-753ef8dbb3f1) diff --git a/Career/20260101012731-solid_principles_examples.md b/Career/20260101012731-solid_principles_examples.md deleted file mode 100644 index 8b13789..0000000 --- a/Career/20260101012731-solid_principles_examples.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Career/20260410121527-ess_esp_index.md b/Career/20260410121527-ess_esp_index.md deleted file mode 100644 index fd8968b..0000000 --- a/Career/20260410121527-ess_esp_index.md +++ /dev/null @@ -1,58 +0,0 @@ -# Overview - -The ESP Deployment Pipeline project is an effort to automate the deployment of the ESP application suite (built by ESS) into customer environments using Azure DevOps (AzDO) YAML pipelines and PowerShell scripts. - -We are the third team to inherit this work. Team Ludo started it, got the build working in AzDO, and began deployment work before being reassigned. We pick up from there. - -# Quick Reference — Key Concepts - -| Concept | What it is | Notes File | -| --------------- | ---------------------------------------------------- | ------------------------------------------------------------------------------- | -| ESP | Suite of apps deployed per-customer | [ESP Applications](id:091e9bbc-0c9f-43da-81f9-464882c2a15b) | -| AzDO Pipeline | YAML-based CI/CD pipeline in Azure DevOps | [ESP — AzDO Pipeline](id:d66e946f-6785-4e8e-ba00-bb25a52237d1) | -| PowerShell Arch | Three-tier script architecture (T1/T2/T3) | [ESP — PowerShell Script Architecture](id:bf63b6c5-f32f-462e-82ad-8d4a15f7ba48) | -| Manifest | Config file defining a customer environment | [ESP — The Manifest](id:9bf19a8b-5581-4be8-9892-913c51df0128) | -| Dacpac | Packaged SQL Server DB schema deployment | [ESP — Database & Dacpac](id:46add22d-e562-4e3a-a301-d4aea2552952) | -| Stages | Validate / Prerequisites / Predeploy / Deploy / Post | [ESP — Deployment Stages](id:cd3cd02f-c9b3-4455-8ce5-b2a5aa458fed) | -| Known Issues | Pain points, risks, and gaps | [ESP — Known Issues & Risks](id:53d803aa-7e6f-44ed-8d99-a243a5ed5aab) | -| Open Questions | Things still TBC or not yet designed | [ESP — Open Questions & TBC Items](id:82c3d447-d6d3-498e-9f66-aee60c752462) | -| Glossary | Terminology reference | [ESP — Glossary](id:2c950d25-6f86-4f83-a7b4-69e2ca2f7023) | - -# Context — Why This Project Exists - - - Few original ESS engineers remain; those left are on paid customer work - - Manual deployments are slow, risky, and rely on tribal knowledge - - Business goal: *all deployments are consistently repeatable with no manual VM work* - - Initial scope: ROMAC DEV environment only - - Future scope: all environments including PROD and ESS's own data centre - -# Team History - -| Team | Contribution | Current Status | -| --------- | ------------------------------------------------------- | --------------------------- | -| ESS | Built ESP; wrote original deployment docs | Mostly departed | -| Team Ludo | Full ESP build in AzDO; started deploy pipeline; dacpac | Reassigned to customer work | -| Our Team | Inheriting deploy pipeline work | Active | - -# Existing Resources to Review - - - Handover from Team Ludo: `ESP_Pipeline_Handover.docx` - - Ludo deployment docs: `DEPLOY.md` (in Repos) - - Ludo deploy scripts: `deploy` folder (in Repos) - - ESP Main Build pipeline: AzDO → Pipelines → `ESS.esp Main Build` - - ESP Deploy Pipeline: AzDO → Pipelines → `ESS.esp Deploy` - -# File Index - -| File | Contents | -| ------------------------------------------------------------------------------- | --------------------------------------- | -| [ESP Deployment Pipeline — Index](id:a6c345df-8db9-4538-b87e-0e72e2414905) | This file — master index | -| [ESP Applications](id:091e9bbc-0c9f-43da-81f9-464882c2a15b) | ESP app suite breakdown | -| [ESP — AzDO Pipeline](id:d66e946f-6785-4e8e-ba00-bb25a52237d1) | AzDO pipeline structure and concepts | -| [ESP — PowerShell Script Architecture](id:bf63b6c5-f32f-462e-82ad-8d4a15f7ba48) | Three-tier PowerShell architecture | -| [ESP — The Manifest](id:9bf19a8b-5581-4be8-9892-913c51df0128) | Manifest design and purpose | -| [ESP — Database & Dacpac](id:46add22d-e562-4e3a-a301-d4aea2552952) | Database, dacpac, and SQL concerns | -| [ESP — Deployment Stages](id:cd3cd02f-c9b3-4455-8ce5-b2a5aa458fed) | Stages of deployment — detail per stage | -| [ESP — Known Issues & Risks](id:53d803aa-7e6f-44ed-8d99-a243a5ed5aab) | Known issues and risks | -| [ESP — Known Issues & Risks](id:53d803aa-7e6f-44ed-8d99-a243a5ed5aab) | TBC items and open design questions | -| [ESP — Glossary](id:2c950d25-6f86-4f83-a7b4-69e2ca2f7023) | Glossary of all technical terms | diff --git a/Career/20260121173318-api_architecture.md b/Career/API Architecture.md similarity index 99% rename from Career/20260121173318-api_architecture.md rename to Career/API Architecture.md index 0fc964d..f0832e0 100644 --- a/Career/20260121173318-api_architecture.md +++ b/Career/API Architecture.md @@ -1,4 +1,4 @@ -**Z notes on API architecture - companion to [APIM notes](id:56fabaf6-e8aa-45d0-a1c1-89f247f0a93f)** +**Z notes on API architecture - companion to [[APIM]] # 1\. What is API Architecture? diff --git a/Career/20260327114708-asp_net_core_6_apis_notes.md b/Career/ASP.NET Core Web API Fundamental Notes.md similarity index 100% rename from Career/20260327114708-asp_net_core_6_apis_notes.md rename to Career/ASP.NET Core Web API Fundamental Notes.md diff --git a/Career/Attachments/APIOps.png b/Career/Attachments/APIOps.png new file mode 100644 index 0000000..825ee00 Binary files /dev/null and b/Career/Attachments/APIOps.png differ diff --git a/Career/Attachments/Big-O-Notation-3130482830.png b/Career/Attachments/Big-O-Notation-3130482830.png new file mode 100644 index 0000000..eaa37ad Binary files /dev/null and b/Career/Attachments/Big-O-Notation-3130482830.png differ diff --git a/Career/Attachments/Screenshot 2026-01-14 154800.png b/Career/Attachments/Screenshot 2026-01-14 154800.png new file mode 100644 index 0000000..540916f Binary files /dev/null and b/Career/Attachments/Screenshot 2026-01-14 154800.png differ diff --git a/Career/Attachments/adapter-pattern-2.png b/Career/Attachments/adapter-pattern-2.png new file mode 100644 index 0000000..bdf7cd2 Binary files /dev/null and b/Career/Attachments/adapter-pattern-2.png differ diff --git a/Career/Attachments/adapter-pattern.png b/Career/Attachments/adapter-pattern.png new file mode 100644 index 0000000..f404763 Binary files /dev/null and b/Career/Attachments/adapter-pattern.png differ diff --git a/Career/Attachments/command-pattern.png b/Career/Attachments/command-pattern.png new file mode 100644 index 0000000..93acd52 Binary files /dev/null and b/Career/Attachments/command-pattern.png differ diff --git a/Career/Attachments/composite-pattern.png b/Career/Attachments/composite-pattern.png new file mode 100644 index 0000000..4dc8a7b Binary files /dev/null and b/Career/Attachments/composite-pattern.png differ diff --git a/Career/Attachments/decorator-pattern.png b/Career/Attachments/decorator-pattern.png new file mode 100644 index 0000000..53d4d88 Binary files /dev/null and b/Career/Attachments/decorator-pattern.png differ diff --git a/Career/Attachments/decorator-problem.png b/Career/Attachments/decorator-problem.png new file mode 100644 index 0000000..2b17256 Binary files /dev/null and b/Career/Attachments/decorator-problem.png differ diff --git a/Career/Attachments/facade-pattern.png b/Career/Attachments/facade-pattern.png new file mode 100644 index 0000000..233a832 Binary files /dev/null and b/Career/Attachments/facade-pattern.png differ diff --git a/Career/Attachments/factory-pattern.png b/Career/Attachments/factory-pattern.png new file mode 100644 index 0000000..46d24dc Binary files /dev/null and b/Career/Attachments/factory-pattern.png differ diff --git a/Career/Attachments/iterator-pattern.png b/Career/Attachments/iterator-pattern.png new file mode 100644 index 0000000..363dc10 Binary files /dev/null and b/Career/Attachments/iterator-pattern.png differ diff --git a/Career/Attachments/observer-pattern.png b/Career/Attachments/observer-pattern.png new file mode 100644 index 0000000..2987963 Binary files /dev/null and b/Career/Attachments/observer-pattern.png differ diff --git a/Career/Attachments/proxy-pattern.png b/Career/Attachments/proxy-pattern.png new file mode 100644 index 0000000..f9852fb Binary files /dev/null and b/Career/Attachments/proxy-pattern.png differ diff --git a/Career/Attachments/singleton-pattern.png b/Career/Attachments/singleton-pattern.png new file mode 100644 index 0000000..44661d7 Binary files /dev/null and b/Career/Attachments/singleton-pattern.png differ diff --git a/Career/Attachments/state-pattern.png b/Career/Attachments/state-pattern.png new file mode 100644 index 0000000..86c1793 Binary files /dev/null and b/Career/Attachments/state-pattern.png differ diff --git a/Career/Attachments/structure-pattern.png b/Career/Attachments/structure-pattern.png new file mode 100644 index 0000000..f076803 Binary files /dev/null and b/Career/Attachments/structure-pattern.png differ diff --git a/Career/Attachments/template-method-pattern.png b/Career/Attachments/template-method-pattern.png new file mode 100644 index 0000000..1e39afe Binary files /dev/null and b/Career/Attachments/template-method-pattern.png differ diff --git a/Career/20250804201706-big_o_complexity.md b/Career/Big (O) - Time and Space Complexity.md similarity index 88% rename from Career/20250804201706-big_o_complexity.md rename to Career/Big (O) - Time and Space Complexity.md index 76555f3..0eae848 100644 --- a/Career/20250804201706-big_o_complexity.md +++ b/Career/Big (O) - Time and Space Complexity.md @@ -45,7 +45,7 @@ return False This would take N time, we need to check every number in the list once, making this solution O(N) - linear time. This looks at the worst case scenarion, if 2 was at the start of the list we know it would take a constant time, however if it's at the end then it would take N time. -![](../assets/Big-O-Notation-3130482830.png) +![[Big-O-Notation-3130482830.png]] In the graph above focus on the tail end of the graphs because Big O is concerned with "as the input size grows what happens to the speed of the operations". @@ -68,12 +68,12 @@ Here's how it works: 1. Summing Linear Operations: If your algorithm involves several separate linear operations, such as: -• First iterating over an array of n elements, -• Then, in a separate loop, iterating over the same or another array of n elements, -• And perhaps another loop doing the same, -each operation has a complexity of O(n). If you sum these, the resulting complexity for these sequential operations is O(n) + O(n) + O(n), and so on. + • First iterating over an array of n elements, + • Then, in a separate loop, iterating over the same or another array of n elements, + • And perhaps another loop doing the same, + each operation has a complexity of O(n). If you sum these, the resulting complexity for these sequential operations is O(n) + O(n) + O(n), and so on. -1. Simplification: According to Big O notation rules, when you add complexities of the same order, the overall complexity is dominated by the term that grows fastest as n increases. For linear operations, O(n) + O(n) + O(n) simplifies to O(n) because the growth rate in terms of the largest input size n doesn't change-it remains linear. +2. Simplification: According to Big O notation rules, when you add complexities of the same order, the overall complexity is dominated by the term that grows fastest as n increases. For linear operations, O(n) + O(n) + O(n) simplifies to O(n) because the growth rate in terms of the largest input size n doesn't change-it remains linear. Linear time complexity, denoted as O(n), means that the time required to complete the execution of an algorithm increases linearly with the increase in the size of the input data. In essence, if you double the size of the input, you double the time it takes to process it. diff --git a/Career/Bowling Kata.md b/Career/Bowling Kata.md new file mode 100644 index 0000000..78814ac --- /dev/null +++ b/Career/Bowling Kata.md @@ -0,0 +1,7 @@ + - + + - + + - + + - diff --git a/Career/20260305102210-cicd_example.md b/Career/CI-CD Example (site visits).md similarity index 100% rename from Career/20260305102210-cicd_example.md rename to Career/CI-CD Example (site visits).md diff --git a/Career/20260305111610-cicd_summary.md b/Career/CI-CD Summary.md similarity index 100% rename from Career/20260305111610-cicd_summary.md rename to Career/CI-CD Summary.md diff --git a/Career/Concepts.md b/Career/Concepts.md index 2a1bb5e..648c334 100644 --- a/Career/Concepts.md +++ b/Career/Concepts.md @@ -1,69 +1,71 @@ In this node lies notes relating to theoretical concepts tying with maths and/or computer science. I will need to find a way to categorise different notes, but it's a wip. +## MOC's + +- [[Database MOC]] +- [[Microlise MOC]] # Microlise: ## ESS - - [ESS](id:abe43fdc-e90d-4c2c-9320-cc7929f0c99a) - - [SEB Search Improvement — Couchbase Caching](id:0b6e7dc0-1171-4dc4-982e-a5d95765e09c) + - [[Microlise - ESS]] + - [[Seb Search Improvements]] ## AI Training: - - [Data Camp AI Training](id:ceeb2ad1-b091-49d8-8cd6-752f28a6fd86) + - [[Data camp AI training]] # Mathematical Concepts Part of being a software engineer is having a good grasp of mathematical concepts. Here are some notes on various mathematical concepts that I find useful. - - [XOR](id:F32F8F09-3DEC-4FD1-8CFA-401A316E906B) + - [[XOR]] # Core Programming Concepts - - [Powershell MOC](id:360df04d-ea24-4f04-b8e1-3595f34aac4d) + - [[Powershell MOC]] - - [Solid Principles](id:6820973F-613E-441A-BC1D-8FE5CD9BD6F7) + - [[Solid Principles]] - - [Big O Notation, Time and Space Complexity](id:275988a8-59d8-40c8-a8b4-47118d6eb834) + - [[Big (O) - Time and Space Complexity]] - - [Design patterns](id:631b2086-4b8f-4fe3-829d-be1dc014e293) WIP + - [[Design Patterns]] WIP - - [CI/CD Example - Sitevisits](id:2767b5ac-f2c9-4b1e-ab87-82c43cdec4c1) + - [[CI-CD Example (site visits)]] - - [CI/CD Summary](id:5b714c6c-7eaf-4f3f-b4f6-2166ff3a9963) + - [[CI-CD Summary]] - - [Software Development Methodologies](id:67ad330b-cc11-4e8e-b054-12b9da45ea60) + - [[Software Development Methodologies]] - - [MVP and MVT](id:fdb8fa52-0c9d-4332-9f32-53bc6fee24b9) + - [[MVP + MVT]] - - [Test Driven Development](id:2729599d-ae2b-4f22-b73d-bf22d81e0767) + - [[Test Driven Development]] Some core programming concepts that are essential for software development. The things I need to add here are: # APIs - - [RESTful API](id:6a5bf6dd-d0ec-43e4-8e07-9956f4715f10) + - [[Restful API]] - - [API Architecture](id:49b195c8-e116-40ca-86e8-62c65dbb5a4f) (Just needs spell checks and re read) + - [[API Architecture]] (Just needs spell checks and re read) - - [API Intro Notes](id:e7f082e4-1b9f-4ebe-96d6-94d92e80a07e) - - - [ASP.NET Core Web API Fundamental Notes](id:b2fd7038-42a8-4cbe-882b-92fbe2c12a11) (todo) + - [[ASP.NET Core Web API Fundamental Notes]] (todo) # Database Related - - [Database Permissions, Roles, and Accounts](id:b4858f6a-b05c-47f2-972e-905e0bb2c352) + - [[Database Permissions, Roles, and Accounts]] - - [SQL Joins](id:de3bef27-81c9-49d1-85bb-edceb9a80e65) + - [[SQL Joins]] # Misc - - [Windows Services](id:faa7f193-5af6-4a2f-a73e-540f833a7fd0) + - [[Windows Services]] - - [Dynamic Link Library (DLL)](id:e717c252-0e15-4403-898f-93163dd1b147) + - [[DLL's]] # Security: - - [Cross Site Scripting (XSS)](id:01c89142-7e14-42b2-bd01-743656908fd2) + - [[Cross Site Scripting (XSS)]] # Concepts to learn and talk about (cs and maths) diff --git a/Career/Cross Site Scripting (XSS).md b/Career/Cross Site Scripting (XSS).md new file mode 100644 index 0000000..f755213 --- /dev/null +++ b/Career/Cross Site Scripting (XSS).md @@ -0,0 +1,33 @@ +# Definition: + + - Cross Site Scripting (XSS) is a type of security vulnerability typically found in web applications. It allows attackers to inject malicious scripts into content from otherwise trusted websites. + +# Types of XSS: + +## 1\. Stored XSS / Persistent XSS / Type 2 XSS: + +The malicious script is permanently stored on the target server, such as in a database, message forum, visitor log, comment field, etc. When a user requests the stored information, the malicious script is served as part of the web page. + +Example: An attacker posts a comment containing a malicious script on a blog. When other users view the comment, the script executes in their browsers, potentially stealing their cookies or performing other malicious actions. + +## 2\. Reflected XSS / Non-Persistent XSS / Type 1 XSS: + +The malicious script is reflected off a web server, such as in an error message, search result, or any other response that includes some or all of the input sent to the server as part of the request. Reflected XSS is delivered to victims via another route, such as in an email or a third-party web site. + +Example: An attacker crafts a URL that includes a malicious script. When a user clicks on the link, the script is reflected off the server and executed in the user's browser. + +## 3\. DOM-based XSS: + +The vulnerability exists in the client-side code rather than the server-side code. The malicious script is executed as a result of modifying the DOM (Document Object Model) environment in the victim's browser, which causes the client-side code to execute in an unintended manner. + +Example: An attacker manipulates the URL of a web page to include a malicious script. When the page processes the URL, it executes the script in the user's browser. + +# Prevention: + + - Input Validation: Ensure that all user input is properly validated and sanitized before being processed or stored. This includes using whitelisting techniques to allow only expected input. + + - Output Encoding: Encode output to ensure that any potentially malicious scripts are rendered harmless when displayed in the browser. This can be done using functions that convert special characters to their corresponding HTML entities. + + - Content Security Policy (CSP): Implement a Content Security Policy to restrict the sources from which scripts can be loaded and executed. This can help mitigate the impact of XSS attacks. + + - Use Security Libraries: Utilize security libraries and frameworks that provide built-in protection against XSS vulnerabilities. diff --git a/Career/20260413154901-dll.md b/Career/DLL's.md similarity index 100% rename from Career/20260413154901-dll.md rename to Career/DLL's.md diff --git a/Career/20260512121806-data_camp_ai_training.md b/Career/Data camp AI training.md similarity index 100% rename from Career/20260512121806-data_camp_ai_training.md rename to Career/Data camp AI training.md diff --git a/Career/20251229180249-airflow_dags.md b/Career/Database - SQL/Airflow Dags.md similarity index 100% rename from Career/20251229180249-airflow_dags.md rename to Career/Database - SQL/Airflow Dags.md diff --git a/Career/20251229180156-airflow_tasks.md b/Career/Database - SQL/Airflow Tasks.md similarity index 70% rename from Career/20251229180156-airflow_tasks.md rename to Career/Database - SQL/Airflow Tasks.md index 20d16e6..effa0f0 100644 --- a/Career/20251229180156-airflow_tasks.md +++ b/Career/Database - SQL/Airflow Tasks.md @@ -1,4 +1,4 @@ -A task in the context of airflow is the basic unit of execution. They are arranged into [Dags](id:3b16e19a-62f0-4705-a451-a8790181941f) and then have upstream and downstream dependencies set between them in order to express the order in which they should be run. +A task in the context of airflow is the basic unit of execution. They are arranged into [[Airflow Dags]] and then have upstream and downstream dependencies set between them in order to express the order in which they should be run. There are three kinds of tasks: diff --git a/Career/20251229180039-airflow.md b/Career/Database - SQL/Airflow.md similarity index 87% rename from Career/20251229180039-airflow.md rename to Career/Database - SQL/Airflow.md index 343de10..41df372 100644 --- a/Career/20251229180039-airflow.md +++ b/Career/Database - SQL/Airflow.md @@ -1,6 +1,6 @@ # xcom -XComs stands for cross-communications, and as the name suggests, it allows [Airflow Tasks](id:1ea42d73-3cd1-4cac-a6ee-028de21d08d5) to talk to each other (because by default, tasks are entirely isolated and can run on seperate machines). +XComs stands for cross-communications, and as the name suggests, it allows [[Airflow Tasks]] to talk to each other (because by default, tasks are entirely isolated and can run on seperate machines). See [this](https://airflow.apache.org/docs/apache-airflow/stable/core-concepts/xcoms.html) diff --git a/Career/Database - SQL/Database MOC.md b/Career/Database - SQL/Database MOC.md new file mode 100644 index 0000000..d32b4d8 --- /dev/null +++ b/Career/Database - SQL/Database MOC.md @@ -0,0 +1,2 @@ +- [[Postgres]] +- [[Airflow]] diff --git a/Career/20260305130457-database_perms_roles_accounts.md b/Career/Database - SQL/Database Permissions, Roles, and Accounts.md similarity index 100% rename from Career/20260305130457-database_perms_roles_accounts.md rename to Career/Database - SQL/Database Permissions, Roles, and Accounts.md diff --git a/Career/20250723200800-postgres.md b/Career/Database - SQL/Postgres.md similarity index 100% rename from Career/20250723200800-postgres.md rename to Career/Database - SQL/Postgres.md diff --git a/Career/Database - SQL/SQL Joins.md b/Career/Database - SQL/SQL Joins.md new file mode 100644 index 0000000..606b9ba --- /dev/null +++ b/Career/Database - SQL/SQL Joins.md @@ -0,0 +1,10 @@ +# The SQL JOIN Clause + +The JOIN clause is used to combine rows from two or more tables, based on a related column between them. + +Here are the different types of JOINs in SQL: + +****(INNER) JOIN****: Returns only rows that have matching values in both tables +****LEFT (OUTER) JOIN****: Returns all rows from the left table, and only the matched rows from the right table +****RIGHT (OUTER) JOIN****: Returns all rows from the right table, and only the matched rows from the left table +****FULL (OUTER) JOIN****: Returns all rows when there is a match in either the left or right table diff --git a/Career/20251223215636-design_patterns_notes.md b/Career/Design Patterns.md similarity index 87% rename from Career/20251223215636-design_patterns_notes.md rename to Career/Design Patterns.md index 321173d..1642afe 100644 --- a/Career/20251223215636-design_patterns_notes.md +++ b/Career/Design Patterns.md @@ -6,85 +6,78 @@ Strategy is a behavioral design pattern that lets you define a family of algorithms, put each of them into a separate class, and make their objects interchangeable. -![](./assets/design-patterns/structure-pattern.png) +![[structure-pattern.png]] ## Observer pattern Observer is a behavioral design pattern that lets you define a subscription mechanism to notify multiple objects about any events that happen to the object they’re observing. -![](./assets/design-patterns/observer-pattern.png) - +![[observer-pattern.png]] ## Decorator pattern Decorator is a structural design pattern that lets you attach new behaviors to objects by placing these objects inside special wrapper objects that contain the behaviors. The problem: -![](./assets/design-patterns/decorator-problem.png) - -![](./assets/design-patterns/decorator-pattern.png) +![[decorator-problem.png]] +![[decorator-pattern.png]] ## Factory Pattern Factory Method is a creational design pattern that provides an interface for creating objects in a superclass, but allows subclasses to alter the type of objects that will be created. -![](./assets/design-patterns/factory-pattern.png) - +![[factory-pattern.png]] ## Singleton Pattern Singleton is a creational design pattern that lets you ensure that a class has only one instance, while providing a global access point to this instance. -![](./assets/design-patterns/singleton-pattern.png) - +![[singleton-pattern.png]] ## Command Pattern Command is a behavioral design pattern that turns a request into a stand-alone object that contains all information about the request. This transformation lets you pass requests as a method arguments, delay or queue a request’s execution, and support undoable operations. -![](./assets/design-patterns/command-pattern.png) - +![[command-pattern.png]] ## Adapter Pattern Adapter is a structural design pattern that allows objects with incompatible interfaces to collaborate. -![](./assets/design-patterns/adapter-pattern.png) +![[adapter-pattern.png]] Another approach: -![](./assets/design-patterns/adapter-pattern-2.png) - +![[adapter-pattern-2.png]] ## Facade Pattern Facade is a structural design pattern that provides a simplified interface to a library, a framework, or any other complex set of classes. -![](./assets/design-patterns/facade-pattern.png) +![[facade-pattern.png]] ## Template Method Pattern Template Method is a behavioral design pattern that defines the skeleton of an algorithm in the superclass but lets subclasses override specific steps of the algorithm without changing its structure. -![](./assets/design-patterns/template-method-pattern.png) - +![[template-method-pattern.png]] ## Iterator and Composite Pattern Iterator is a behavioral design pattern that lets you traverse elements of a collection without exposing its underlying representation (list, stack, tree, etc.). -![](./assets/design-patterns/iterator-pattern.png) +![[iterator-pattern.png]] Composite is a structural design pattern that lets you compose objects into tree structures and then work with these structures as if they were individual objects. -![](./assets/design-patterns/composite-pattern.png) +![[composite-pattern.png]] ## State Pattern State is a behavioral design pattern that lets an object alter its behavior when its internal state changes. It appears as if the object changed its class. -![](./assets/design-patterns/state-pattern.png) +![[state-pattern.png]] ## Proxy Pattern Proxy is a structural design pattern that lets you provide a substitute or placeholder for another object. A proxy controls access to the original object, allowing you to perform something either before or after the request gets through to the original object. -![](./assets/design-patterns/proxy-pattern.png) +![[proxy-pattern.png]] # Design patterns. What are they? diff --git a/Career/20260407102129-mvp_mvt.md b/Career/MVP + MVT.md similarity index 100% rename from Career/20260407102129-mvp_mvt.md rename to Career/MVP + MVT.md diff --git a/Career/Microlise MOC.md b/Career/Microlise MOC.md deleted file mode 100644 index 5e7da5b..0000000 --- a/Career/Microlise MOC.md +++ /dev/null @@ -1,9 +0,0 @@ -# \<2026-05-27 Wed\>: XSS ROM Work - -## [XSS Pentesting Report Fix](id:b2ac09aa-e888-48d3-8357-2292f9b2526c) - -# Misc - - - [preworkprepmicrolise](id:2BFB84B2-2129-4AE3-8E69-290CA5BF9747) - - - [microlise-assessment](id:f877240e-c2c8-4087-84e5-4b1ca3fcd4ed) diff --git a/Career/20260115152626-apim.md b/Career/Microlise/APIM.md similarity index 97% rename from Career/20260115152626-apim.md rename to Career/Microlise/APIM.md index 3895578..25cb828 100644 --- a/Career/20260115152626-apim.md +++ b/Career/Microlise/APIM.md @@ -5,11 +5,12 @@ The core pillars: -![](./assets/career/Screenshot%202026-01-14%20154800.png) +![[Screenshot 2026-01-14 154800.png]] + The workflow of publishing API’s: -![](./assets/career/APIOps.png) +![[APIOps.png]] This is summarised below: diff --git a/Career/20260410121719-esp_applications.md b/Career/Microlise/ESS ESP/ESP Applications.md similarity index 84% rename from Career/20260410121719-esp_applications.md rename to Career/Microlise/ESS ESP/ESP Applications.md index d1676e5..e26f689 100644 --- a/Career/20260410121719-esp_applications.md +++ b/Career/Microlise/ESS ESP/ESP Applications.md @@ -18,11 +18,11 @@ ESP applications fall into three categories: | ----------- | ---------- | ------------------------------------------- | | EspBroker | SQL Server | The core ESP database. Deployed via dacpac. | -See [ESP — Database & Dacpac](id:46add22d-e562-4e3a-a301-d4aea2552952) for dacpac detail. +See [[ESP Database]] for Dacpac detail. ## 2\. Windows Services -[Windows Services](id:faa7f193-5af6-4a2f-a73e-540f833a7fd0) are background processes that run on a Windows server. They have no UI — they start, run, and are managed via the Windows Service Manager (or PowerShell commands like `Stop-Service`, `Start-Service`). +[[Windows Services]] are background processes that run on a Windows server. They have no UI — they start, run, and are managed via the Windows Service Manager (or PowerShell commands like `Stop-Service`, `Start-Service`). | Service Name | Notes | | --------------- | --------------------------------- | @@ -51,7 +51,7 @@ Get-Service -Name "DLService" ### Why Services Must Be Stopped Before Deployment -When deploying a new version, the old service process holds file locks on its [DLLs](id:e717c252-0e15-4403-898f-93163dd1b147). You cannot overwrite a locked file on Windows. Therefore the sequence is: +When deploying a new version, the old service process holds file locks on its [[DLL's]]. You cannot overwrite a locked file on Windows. Therefore the sequence is: 1. Stop the service 2. Swap the files (old → new) @@ -81,7 +81,7 @@ Citrix apps are more complex to deploy than Windows Services because: Unlike TMC (where presumably all customers get everything), ESP is a subset deployment. This means: - - The manifest (see [ESP — The Manifest](id:9bf19a8b-5581-4be8-9892-913c51df0128)) must define **which apps each customer has** + - The manifest (see [[ESP Manifest]]) must define **which apps each customer has** - The deployment scripts must skip apps not applicable to a given customer - There is no universal "deploy everything" - each customer's list must be explicitly defined and maintained diff --git a/Career/20260410122425-ess_database.md b/Career/Microlise/ESS ESP/ESP Database.md similarity index 93% rename from Career/20260410122425-ess_database.md rename to Career/Microlise/ESS ESP/ESP Database.md index 34c1bd7..5d6e9b8 100644 --- a/Career/20260410122425-ess_database.md +++ b/Career/Microlise/ESS ESP/ESP Database.md @@ -94,7 +94,7 @@ function Invoke-DatabaseDeployment { # Database Deployment in the Deployment Stage -Database deployment sits inside the **DEPLOY stage**. See [ESP — Deployment Stages](id:cd3cd02f-c9b3-4455-8ce5-b2a5aa458fed) for full stage detail. The database is typically deployed before services are started up to ensure the schema is ready for the new application code. +Database deployment sits inside the **DEPLOY stage**. See [[ESP Deploy Stages]] for full stage detail. The database is typically deployed before services are started up to ensure the schema is ready for the new application code. Suggested order within the DEPLOY stage: @@ -111,7 +111,7 @@ If the dacpac deploys successfully but a subsequent step fails, rolling back the - Restore from backup (requires a backup to have been taken immediately before) - Write a counter-dacpac that reverts the schema (complex, error-prone) -This is one of the reasons the **rollback plan is still TBC**. See [ESP — Open Questions & TBC Items](id:82c3d447-d6d3-498e-9f66-aee60c752462). +This is one of the reasons the **rollback plan is still TBC**. See [[ESP OQ]]. A **database backup must be taken before any deployment** — this should be a mandatory step in the PREDEPLOY stage. diff --git a/Career/20260410122604-ess_deploy_stages.md b/Career/Microlise/ESS ESP/ESP Deploy Stages.md similarity index 92% rename from Career/20260410122604-ess_deploy_stages.md rename to Career/Microlise/ESS ESP/ESP Deploy Stages.md index c05c026..faa86a6 100644 --- a/Career/20260410122604-ess_deploy_stages.md +++ b/Career/Microlise/ESS ESP/ESP Deploy Stages.md @@ -55,7 +55,7 @@ Verify that the target environment meets all requirements before deployment begi - Network connectivity between agent and target servers - Sufficient disk space on target servers - Database is accessible - - If DEPLOY will include DB: check `dacpacReady` flag (see [ESP — Database & Dacpac](id:46add22d-e562-4e3a-a301-d4aea2552952)) + - If DEPLOY will include DB: check `dacpacReady` flag (see [[ESP Database]]) ## Outcome @@ -81,7 +81,7 @@ Pre-staging minimises the time during which the application is down. When DEPLOY ## Artifact Staging Note -The ESP build artifact is currently a **flat folder of DLLs** — not separated per application. Predeploy will need to handle the mapping of DLLs to their correct applications. See [ESP — Known Issues & Risks](id:53d803aa-7e6f-44ed-8d99-a243a5ed5aab). +The ESP build artifact is currently a **flat folder of DLLs** — not separated per application. Predeploy will need to handle the mapping of DLLs to their correct applications. See [[ESP Known Issues and Risks]]. # Stage 4 — DEPLOY @@ -94,7 +94,7 @@ The actual upgrade — swap the old version for the new version. ### 4a. Database 1. Check `dacpacReady` flag — fail if false -2. Deploy the dacpac to EspBroker (see [ESP — Database & Dacpac](id:46add22d-e562-4e3a-a301-d4aea2552952)) +2. Deploy the dacpac to EspBroker (see [[ESP Database]]) ### 4b. Windows Services @@ -122,7 +122,7 @@ The database schema must be deployed **before** starting the new application cod ## Risk -This is the most **destructive** stage. If something goes wrong mid-deploy, the system may be in a partially upgraded state. This is why rollback planning (currently TBC) is critical. See [ESP — Open Questions & TBC Items](id:82c3d447-d6d3-498e-9f66-aee60c752462). +This is the most **destructive** stage. If something goes wrong mid-deploy, the system may be in a partially upgraded state. This is why rollback planning (currently TBC) is critical. See [[ESP Known Issues and Risks]]. # Stage 5 — POSTDEPLOY diff --git a/Career/20260410123131-esp_glossary.md b/Career/Microlise/ESS ESP/ESP Glossary.md similarity index 87% rename from Career/20260410123131-esp_glossary.md rename to Career/Microlise/ESS ESP/ESP Glossary.md index 76a952b..9272cc0 100644 --- a/Career/20260410123131-esp_glossary.md +++ b/Career/Microlise/ESS ESP/ESP Glossary.md @@ -12,7 +12,7 @@ For deploying to customer servers, a self-hosted agent is required to have netwo ## Artifact (Build) The output of a build pipeline — typically compiled binaries, DLLs, config files, etc. packaged and stored so a deployment pipeline can consume them. -The ESP build artifact is currently a flat folder of DLLs. See [ESP — Known Issues & Risks](id:53d803aa-7e6f-44ed-8d99-a243a5ed5aab) +The ESP build artifact is currently a flat folder of DLLs. See [[ESP Known Issues and Risks]] ## AzDO / Azure DevOps @@ -40,17 +40,17 @@ A technology platform that delivers desktop applications to users remotely. The ## Cycle Checks -Post-deployment validation checks for ESP that involve navigating through the Citrix application UI to verify the system is functioning correctly. These are extensive and difficult to automate. See [ESP — Deployment Stages](id:cd3cd02f-c9b3-4455-8ce5-b2a5aa458fed). +Post-deployment validation checks for ESP that involve navigating through the Citrix application UI to verify the system is functioning correctly. These are extensive and difficult to automate. See [[ESP Deploy Stages]]. # D ## Dacpac -**Data-tier Application Package**. A `.dacpac` file that represents the desired schema of a SQL Server database. Deployed using `sqlpackage.exe`, which calculates the difference between desired and actual schema and applies it. See [ESP — Database & Dacpac](id:46add22d-e562-4e3a-a301-d4aea2552952). +**Data-tier Application Package**. A `.dacpac` file that represents the desired schema of a SQL Server database. Deployed using `sqlpackage.exe`, which calculates the difference between desired and actual schema and applies it. See [[ESP Database]]. ## `dacpacReady` -A flag in the manifest (see [ESP — The Manifest](id:9bf19a8b-5581-4be8-9892-913c51df0128)) that indicates whether a customer's database has been manually aligned to be compatible with the dacpac. Must be `true` before the pipeline will attempt database deployment. +A flag in the manifest (see [[ESP Manifest]]) that indicates whether a customer's database has been manually aligned to be compatible with the dacpac. Must be `true` before the pipeline will attempt database deployment. ## Deploy Pipeline @@ -68,7 +68,7 @@ In the context of ESP, an environment is a specific deployment target for a cust ## ESP -The application suite built by ESS. Delivered to customers on a per-customer basis. Contains databases, Windows Services, and Citrix applications. See [ESP Applications](id:091e9bbc-0c9f-43da-81f9-464882c2a15b). +The application suite built by ESS. Delivered to customers on a per-customer basis. Contains databases, Windows Services, and Citrix applications. See [[ESP Applications]]. ## ESS @@ -94,14 +94,14 @@ A unit of work within an AzDO pipeline stage. Each job runs on a single agent. A ## Layer / Tier -The architectural layers in the PowerShell script design. Tier 1 = entry point; Tier 2 = orchestration; Tier 3 = isolated worker functions. See [ESP — PowerShell Script Architecture](id:bf63b6c5-f32f-462e-82ad-8d4a15f7ba48). +The architectural layers in the PowerShell script design. Tier 1 = entry point; Tier 2 = orchestration; Tier 3 = isolated worker functions. See [[ESP Scripts]]. # M ## Manifest A configuration file defining a specific customer environment. Used by the deployment scripts to know what to deploy, where, and how. -See [ESP — The Manifest](id:9bf19a8b-5581-4be8-9892-913c51df0128). +See [[ESP Manifest]]. ## Microlise @@ -164,7 +164,7 @@ Microsoft's command-line tool for deploying dacpac files to SQL Server. ## Stage (Deployment) -One of the five phases of the ESP deployment: VALIDATE, PREREQUISITES, PREDEPLOY, DEPLOY, POSTDEPLOY. Each can be run independently. See [ESP — Deployment Stages](id:cd3cd02f-c9b3-4455-8ce5-b2a5aa458fed). +One of the five phases of the ESP deployment: VALIDATE, PREREQUISITES, PREDEPLOY, DEPLOY, POSTDEPLOY. Each can be run independently. See [[ESP Deploy Stages]]. ## Stage (AzDO Pipeline) @@ -178,7 +178,7 @@ The Microlise team that preceded your team on this project. They built the ESP s ## Tier 1 / 2 / 3 -See **Layer / Tier** above and [ESP — PowerShell Script Architecture](id:bf63b6c5-f32f-462e-82ad-8d4a15f7ba48). +See **Layer / Tier** above and [[ESP Scripts]]. ## TMC diff --git a/Career/20260410122754-esp_known_issues.md b/Career/Microlise/ESS ESP/ESP Known Issues and Risks.md similarity index 98% rename from Career/20260410122754-esp_known_issues.md rename to Career/Microlise/ESS ESP/ESP Known Issues and Risks.md index 4913e51..5aa256e 100644 --- a/Career/20260410122754-esp_known_issues.md +++ b/Career/Microlise/ESS ESP/ESP Known Issues and Risks.md @@ -27,7 +27,7 @@ For each customer database: - The pipeline **must** check the `dacpacReady` flag before touching the database - If `false`, fail immediately with a clear error message - - See [ESP — Database & Dacpac](id:46add22d-e562-4e3a-a301-d4aea2552952) for implementation detail + - See [[ESP Database]] for implementation detail # Issue 2 — Build Artifact Is a Flat DLL Dump diff --git a/Career/20260410122303-ess_manifest.md b/Career/Microlise/ESS ESP/ESP Manifest.md similarity index 92% rename from Career/20260410122303-ess_manifest.md rename to Career/Microlise/ESS ESP/ESP Manifest.md index 5898c1c..87e958c 100644 --- a/Career/20260410122303-ess_manifest.md +++ b/Career/Microlise/ESS ESP/ESP Manifest.md @@ -22,7 +22,7 @@ It is the **single source of truth** for a deployment. Tier 1 loads it, validate # Design Status -The manifest **structure has not yet been fully designed**. This is an open work item. See [ESP — Open Questions & TBC Items](id:82c3d447-d6d3-498e-9f66-aee60c752462) for a list of design questions to resolve. +The manifest **structure has not yet been fully designed**. This is an open work item. See [[ESP OQ]] for a list of design questions to resolve. What follows is a **proposed structure** based on what the scripts will need. @@ -82,7 +82,7 @@ What follows is a **proposed structure** based on what the scripts will need. # Manifest Validation (VALIDATE Stage) -The VALIDATE stage (see [ESP — Deployment Stages](id:cd3cd02f-c9b3-4455-8ce5-b2a5aa458fed)) loads the manifest and checks it is well-formed before any deployment activity. Things to validate: +The VALIDATE stage (see [[ESP Deploy Stages]]) loads the manifest and checks it is well-formed before any deployment activity. Things to validate: - All required fields are present - Server names are resolvable/pingable diff --git a/Career/20260410122935-esp_open_questions.md b/Career/Microlise/ESS ESP/ESP OQ.md similarity index 96% rename from Career/20260410122935-esp_open_questions.md rename to Career/Microlise/ESS ESP/ESP OQ.md index 9284e1b..b93cef2 100644 --- a/Career/20260410122935-esp_open_questions.md +++ b/Career/Microlise/ESS ESP/ESP OQ.md @@ -89,7 +89,7 @@ What does the manifest config file look like? What format, what fields, where is ## See Also -[ESP — The Manifest](id:9bf19a8b-5581-4be8-9892-913c51df0128) contains a proposed structure. This needs to be validated against actual deployment requirements and agreed by the team. +[[ESP Manifest]] contains a proposed structure. This needs to be validated against actual deployment requirements and agreed by the team. ## Answer (Fill In When Known) diff --git a/Career/20260410121927-esp_pipeline.md b/Career/Microlise/ESS ESP/ESP Pipeline.md similarity index 96% rename from Career/20260410121927-esp_pipeline.md rename to Career/Microlise/ESS ESP/ESP Pipeline.md index d018547..93b3062 100644 --- a/Career/20260410121927-esp_pipeline.md +++ b/Career/Microlise/ESS ESP/ESP Pipeline.md @@ -55,7 +55,7 @@ There are two existing pipelines to be aware of: - **Purpose:** Builds the ESP applications from source code - **Output:** Build artifacts (DLLs, binaries) - - **Known Issue:** The artifact does not separate applications cleanly - it produces a large flat folder of DLLs. See [ESP — Known Issues & Risks](id:53d803aa-7e6f-44ed-8d99-a243a5ed5aab) + - **Known Issue:** The artifact does not separate applications cleanly - it produces a large flat folder of DLLs. See [[ESP Known Issues and Risks]] - **Location:** AzDO → Pipelines → Runs for `ESS.esp Main Build` ## ESS.esp Deploy @@ -75,7 +75,7 @@ The pipeline's job is relatively thin - it is an **orchestrator** that calls our └── Calls Tier 2 scripts (PreDeployment.ps1, Deployment.ps1, etc.) └── Calls Tier 3 functions (Stop-WindowsService, Invoke-Sql, etc.) -See [ESP — PowerShell Script Architecture](id:bf63b6c5-f32f-462e-82ad-8d4a15f7ba48) for full detail on the script architecture. +See [[ESP Scripts]] for full detail on the script architecture. # Pipeline Agents diff --git a/Career/20260410122116-ess_scripts.md b/Career/Microlise/ESS ESP/ESP Scripts.md similarity index 98% rename from Career/20260410122116-ess_scripts.md rename to Career/Microlise/ESS ESP/ESP Scripts.md index af8235b..c9f89b6 100644 --- a/Career/20260410122116-ess_scripts.md +++ b/Career/Microlise/ESS ESP/ESP Scripts.md @@ -24,7 +24,7 @@ Invoke-Deployment.ps1 -Customer ROMAC -Environment DEV -Stages VALIDATE ## Responsibility - The **single entry point** to the whole deployment system - - Loads and validates the manifest (see [ESP — The Manifest](id:9bf19a8b-5581-4be8-9892-913c51df0128)) + - Loads and validates the manifest (see [[ESP Manifest]]) - Loads all required PowerShell modules (Tier 2, Tier 3, helpers) - Calls the appropriate Tier 2 functions for the requested stages - Passes the manifest object through to Tier 2 diff --git a/Career/Microlise/ESS ESP/ESS ESP Index.md b/Career/Microlise/ESS ESP/ESS ESP Index.md new file mode 100644 index 0000000..7c06f7d --- /dev/null +++ b/Career/Microlise/ESS ESP/ESS ESP Index.md @@ -0,0 +1,58 @@ +# Overview + +The ESP Deployment Pipeline project is an effort to automate the deployment of the ESP application suite (built by ESS) into customer environments using Azure DevOps (AzDO) YAML pipelines and PowerShell scripts. + +We are the third team to inherit this work. Team Ludo started it, got the build working in AzDO, and began deployment work before being reassigned. We pick up from there. + +# Quick Reference - Key Concepts + +| Concept | What it is | Notes File | +| --------------- | ---------------------------------------------------- | ------------------------------ | +| ESP | Suite of apps deployed per-customer | [[ESP Applications]] | +| AzDO Pipeline | YAML-based CI/CD pipeline in Azure DevOps | [[ESP Pipeline]] | +| PowerShell Arch | Three-tier script architecture (T1/T2/T3) | [[ESP Scripts]] | +| Manifest | Config file defining a customer environment | [[ESP Manifest]] | +| Dacpac | Packaged SQL Server DB schema deployment | [[ESP Database]] | +| Stages | Validate / Prerequisites / Predeploy / Deploy / Post | [[ESP Deploy Stages]] | +| Known Issues | Pain points, risks, and gaps | [[ESP Known Issues and Risks]] | +| Open Questions | Things still TBC or not yet designed | [[ESP OQ]] | +| Glossary | Terminology reference | [[ESP Glossary]] | + +# Context — Why This Project Exists + + - Few original ESS engineers remain; those left are on paid customer work + - Manual deployments are slow, risky, and rely on tribal knowledge + - Business goal: *all deployments are consistently repeatable with no manual VM work* + - Initial scope: ROMAC DEV environment only + - Future scope: all environments including PROD and ESS's own data centre + +# Team History + +| Team | Contribution | Current Status | +| --------- | ------------------------------------------------------- | --------------------------- | +| ESS | Built ESP; wrote original deployment docs | Mostly departed | +| Team Ludo | Full ESP build in AzDO; started deploy pipeline; dacpac | Reassigned to customer work | +| Our Team | Inheriting deploy pipeline work | Active | + +# Existing Resources to Review + + - Handover from Team Ludo: `ESP_Pipeline_Handover.docx` + - Ludo deployment docs: `DEPLOY.md` (in Repos) + - Ludo deploy scripts: `deploy` folder (in Repos) + - ESP Main Build pipeline: AzDO → Pipelines → `ESS.esp Main Build` + - ESP Deploy Pipeline: AzDO → Pipelines → `ESS.esp Deploy` + +# File Index + +| File | Contents | +| ------------------------------ | --------------------------------------- | +| [[ESS ESP Index]] | This file — master index | +| [[ESP Applications]] | ESP app suite breakdown | +| [[ESP Pipeline]] | AzDO pipeline structure and concepts | +| [[ESP Scripts]] | Three-tier PowerShell architecture | +| [[ESP Manifest]] | Manifest design and purpose | +| [[ESP Database]] | Database, dacpac, and SQL concerns | +| [[ESP Deploy Stages]] | Stages of deployment — detail per stage | +| [[ESP Known Issues and Risks]] | Known issues and risks | +| [[ESP OQ]] | TBC items and open design questions | +| [[ESP Glossary]] | Glossary of all technical terms | diff --git a/Career/20260410115348-microlise_ess.md b/Career/Microlise/ESS ESP/Microlise - ESS.md similarity index 99% rename from Career/20260410115348-microlise_ess.md rename to Career/Microlise/ESS ESP/Microlise - ESS.md index 2050f70..31cc6a6 100644 --- a/Career/20260410115348-microlise_ess.md +++ b/Career/Microlise/ESS ESP/Microlise - ESS.md @@ -1,7 +1,6 @@ Joined team Shackleton on \<2026-04-07 Tue\>, who are now overseeing the deployment process for ESS applications. -[ESP Deployment Pipeline — Index](id:a6c345df-8db9-4538-b87e-0e72e2414905) - +[[ESS ESP Index]] # AI generated overview of ESP ## What's the Big Picture? diff --git a/Career/Microlise/Microlise Assessment.md b/Career/Microlise/Microlise Assessment.md new file mode 100644 index 0000000..e172553 --- /dev/null +++ b/Career/Microlise/Microlise Assessment.md @@ -0,0 +1,53 @@ +1. What are you most proud of doing in the last 2 years? + +2. What do you think you could have done better in the last two years? + +3. What is the most important thing you have done in the last two years? + +4. What books have you read recently? + + Recently, I have been reading The C Programming Language by Brian Kernighan and Dennis Ritchie to better understand low-level programming. I have been reading this book since my second year at university and have learnt many concepts that translate well into higher-level programming languages like Java. I also decided to create a GitHub repository where I store the practical applications of what was learnt from this book in an educational format so that I can share what I learnt as well test my knowledge. + + Another book I have been reading is The Science of Self-Discipline by Peter Hollins. What I took from this book is that despite perpetual distractions we are enveloped with, there are ways we can still remain disciplined. The structuring of the book is quite clever in the sense that it allows the reader to seamlessly flow from the relevant topics that surround the subject of 'self-discipline'. From this book, I got more into the GTD (getting things done) principle and has really helped with managing my to-dos. + +5. What are the things you like about your role? + + The thing I like most about my current role is the fact that no two days are the same. As my current role is a part-time tutor, I meet students that really challenge me to explain complex concepts in simpler ways. There are many soft skills that I've picked up, such as: communication, time-management, organisation and teamworking skills. + +6. What annoys you? + + Poor communication from peers and soiled working environments can at times be frustrating. I believe that good and innovative ideas come from open discussions, therefore I value settings where conversations flow in a respectful manner, where people can speak their thoughts and ideas regardless of their seniority. + +7. What would you like to be able to do better? + + I would like to improve my skills in DevOps, specifically the CI/CD and containerisation aspect of this. As I've worked on full-stack applications, my focus was mainly on getting the features deployed, however I want to understand more about deployment, scalability, and infrastructure. To bridge this gap, I began setting up my own homelab that hosts different services through docker-compose. I'm also looking at GitHub actions as I regularly upload to GitHub. + + **add something non-technical** + +8. If we were to ask your manager, how would they describe you? + They’d describe me as: dependable, empathetic, and always ready to help. Someone who + takes initiative in stressful situations, supports others without hesitation, and makes others smile. + +9. What would your manager say was the best way to manage you? + + Giving me the trust and space to work independently. Being given regular feedback along with constructive performance reviews with what needs to be worked on really helps. + +10. What would your manager say you need to improve on? + They might say I sometimes take on too much at once. I tend to get enthusiastic about new challenges, however I need to be able to set realistic expectations with both myself and the team through assessing the workload better. + +11. If we asked some of the people that worked with you, to describe you, what would they say? + They'd likely say that I'm approachable, passionate about learning and well-organised. Someone who is easy to get along with and overall jolly. + +12. If you could change something about your current role, what would it be? + +13. Why do you want to move on from your current role? + +14. What do you think you will like about this role? + +15. What do you think will be difficult about this role? + +16. Can you provide an example of where you have gone above and beyond the role to achieve a goal? + +17. Can you provide an example of where you have provided exceptional internal or external customer care? + +18. Have you done any charity work, or voluntary work to help others? If not, have you examples of where you have helped someone at work? diff --git a/Career/Microlise/Microlise MOC.md b/Career/Microlise/Microlise MOC.md new file mode 100644 index 0000000..4cd64a4 --- /dev/null +++ b/Career/Microlise/Microlise MOC.md @@ -0,0 +1,9 @@ +# \<2026-05-27 Wed\>: XSS ROM Work + +## [[Session Stored XSS PENTEST]] + +# Misc + + - [[Pre work prep]] + + - [[Microlise Assessment]] \ No newline at end of file diff --git a/Career/Microlise/Pre work prep.md b/Career/Microlise/Pre work prep.md new file mode 100644 index 0000000..4cedae5 --- /dev/null +++ b/Career/Microlise/Pre work prep.md @@ -0,0 +1,22 @@ +# Clothing + +# Bag(s) + +## If going directly from work to mosque: + +## If going back home: + +# Timings + +\<2025-10-06 Mon\>: 9:15pm arrival + +# Petrol/Transport + +Taking two cars: + + - mine 2 days a week (friday and wednesday) + - Bajis car on the rest of the week + +# Documents + +# diff --git a/Career/20260505121135-seb_search_improvements.md b/Career/Microlise/Seb Search Improvements.md similarity index 100% rename from Career/20260505121135-seb_search_improvements.md rename to Career/Microlise/Seb Search Improvements.md diff --git a/Career/20260527152602-microlise_xss_rom_pentest.md b/Career/Microlise/Session Stored XSS PENTEST.md similarity index 99% rename from Career/20260527152602-microlise_xss_rom_pentest.md rename to Career/Microlise/Session Stored XSS PENTEST.md index 34d832d..bcd2adf 100644 --- a/Career/20260527152602-microlise_xss_rom_pentest.md +++ b/Career/Microlise/Session Stored XSS PENTEST.md @@ -1,6 +1,6 @@ # Links: - - [Cross Site Scripting (XSS)](id:01c89142-7e14-42b2-bd01-743656908fd2) + - [[Cross Site Scripting (XSS)]] # Metadata diff --git a/Career/20260513115140-powershell_moc.md b/Career/Powershell MOC.md similarity index 100% rename from Career/20260513115140-powershell_moc.md rename to Career/Powershell MOC.md diff --git a/Career/20260305132058-restful_api.md b/Career/Restful API.md similarity index 100% rename from Career/20260305132058-restful_api.md rename to Career/Restful API.md diff --git a/Career/20260328215014-software_dev_methodologies.md b/Career/Software Development Methodologies.md similarity index 100% rename from Career/20260328215014-software_dev_methodologies.md rename to Career/Software Development Methodologies.md diff --git a/Career/20260101012549-solid_principles.md b/Career/Solid Principles.md similarity index 95% rename from Career/20260101012549-solid_principles.md rename to Career/Solid Principles.md index 7a07c07..16d64af 100644 --- a/Career/20260101012549-solid_principles.md +++ b/Career/Solid Principles.md @@ -12,4 +12,3 @@ The SOLID principles are: 5. ****Dependency Inversion Principle (DIP)****: High-level modules should not depend on low-level modules; both should depend on abstractions. Additionally, abstractions should not depend on details; details should depend on abstractions. This principle encourages the use of interfaces and abstract classes to decouple high-level and low-level components. -[solidprinciplesexamples](id:F3875F0F-5C9E-4BB1-A79C-6000B9558115) diff --git a/Career/Test Driven Development.md b/Career/Test Driven Development.md new file mode 100644 index 0000000..1b5b7c8 --- /dev/null +++ b/Career/Test Driven Development.md @@ -0,0 +1,3 @@ +Test-driven development is a way of writing code that involves writing an automated unit-level test case that fails, then writing just enough code to make the test pass, then refactoring both the test code and the production code, then repeating with another new test case. Alternative approaches to writing automated tests is to write all of the production code before starting on the test code or to write all of the test code before starting on the production code. + +One example is [[Bowling Kata]] diff --git a/Career/20260413120825-windows_services.md b/Career/Windows Services.md similarity index 100% rename from Career/20260413120825-windows_services.md rename to Career/Windows Services.md diff --git a/Career/20260101011126-xor.md b/Career/XOR.md similarity index 100% rename from Career/20260101011126-xor.md rename to Career/XOR.md diff --git a/Index.md b/Index.md index 5e5b7e4..8825426 100644 --- a/Index.md +++ b/Index.md @@ -3,4 +3,8 @@ This is the homepage [[Daily Notes]] +[[Career MOC]] + +[[Concepts]] + ![[anime-kuroko-no-basket-tetsuya-basketball-play-17f4blaudede9nw2.gif]] \ No newline at end of file diff --git a/home/zaine/master-folder/CV's/Cover Letter/Santec/Santec.pdf.md b/home/zaine/master-folder/CV's/Cover Letter/Santec/Santec.pdf.md deleted file mode 100644 index e69de29..0000000