This commit is contained in:
2025-12-14 21:07:46 +00:00
commit 5db24213bd
281 changed files with 18445 additions and 0 deletions

View File

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

BIN
.DS_Store vendored Normal file

Binary file not shown.

43
.markdown-preview.html Normal file
View File

@@ -0,0 +1,43 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimal-ui">
<title>Markdown preview</title>
<link rel="stylesheet" type="text/css" href="https://thomasf.github.io/solarized-css/solarized-dark.min.css">
<script src="http://code.jquery.com/jquery-1.12.4.min.js"></script>
<script>
(function($, undefined) {
var socket = new WebSocket("ws://localhost:7379");
socket.onopen = function() {
console.log("Connection established.");
socket.send("MDPM-Register-UUID: f87a673b-1b0f-4722-b466-031cd0f97774");
};
socket.onclose = function(event) {
if (event.wasClean) {
console.log('Connection closed gracefully.');
} else {
console.log('Connection terminated.');
}
console.log('Code: ' + event.code + ' reason: ' + event.reason);
};
socket.onmessage = function(event) {
$("#markdown-body").html($(event.data).find("#content").html()).trigger('mdContentChange');
var scroll = $(document).height() * ($(event.data).find("#position-percentage").html() / 100);
$("html, body").animate({ scrollTop: scroll }, 600);
};
socket.onerror = function(error) {
console.log("Error: " + error.message);
};
})(jQuery);
</script>
</head>
<body>
<article id="markdown-body" class="markdown-body">
<p>Markdown preview</p>
</article>
</body>
</html>

View File

@@ -0,0 +1,20 @@
:PROPERTIES:
:ID: 2f285f04-fcf4-4ade-a1ac-2c50b43d529a
:END:
#+title: technical_moc
#+filetags: :moc:
In this file I want to include technical information (things related to programming, coding and networking etc):
- [[id:e7f2302b-16eb-476d-a7b9-be12f077819d][AOC Notes]]
- [[id:348df473-6443-4f4a-b366-95397b574989][web-port-notes]]
- [[id:710f65e5-0bd4-42be-b5d1-69dbe79b745e][github-notes]]
- [[id:bdb493df-db92-4c93-9558-0b10fdff3048][linux_moc]]
- [[id:e448cd99-afee-4702-947f-644bb34dc1aa][database_moc]]
- [[id:8fa3f476-6152-45f4-b618-50f1e4bce46c][emacs_moc]]
- [[id:0880f089-a5ad-49cd-8ce3-f020a5941313][networking-moc]]
- [[id:9d1cfccc-8da7-41a3-b435-9857f0abe441][leetcode_notes]]
- [[id:347d2663-515b-4d9a-9ee9-7706ee86a845][haskell_notes]]
- [[id:5a207a1c-6f02-40d5-b42e-38daaa0aec10][c_notes]]
- [[id:ae343652-96fe-4341-8a36-ec3a1abd0dc6][java_moc]]
- [[id:f09cb4ed-1407-4187-9002-de2c5db13a8f][server_moc]]

View File

@@ -0,0 +1,19 @@
:PROPERTIES:
:ID: 2f285f04-fcf4-4ade-a1ac-2c50b43d529a
:END:
#+title: technical_moc
#+filetags: :moc:
In this file I want to include technical information (things related to programming, coding and networking etc):
- [[id:e7f2302b-16eb-476d-a7b9-be12f077819d][AOC Notes]]
- [[id:348df473-6443-4f4a-b366-95397b574989][web-port-notes]]
- [[id:710f65e5-0bd4-42be-b5d1-69dbe79b745e][github-notes]]
- [[id:bdb493df-db92-4c93-9558-0b10fdff3048][linux_moc]]
- [[id:e448cd99-afee-4702-947f-644bb34dc1aa][database_moc]]
- [[id:8fa3f476-6152-45f4-b618-50f1e4bce46c][emacs_moc]]
- [[id:0880f089-a5ad-49cd-8ce3-f020a5941313][networking-moc]]
- [[id:9d1cfccc-8da7-41a3-b435-9857f0abe441][leetcode_notes]]
- [[id:347d2663-515b-4d9a-9ee9-7706ee86a845][haskell_notes]]
- [[id:5a207a1c-6f02-40d5-b42e-38daaa0aec10][c_notes]]
- [[id:ae343652-96fe-4341-8a36-ec3a1abd0dc6][java_moc]]

View File

@@ -0,0 +1,15 @@
:PROPERTIES:
:ID: 2f285f04-fcf4-4ade-a1ac-2c50b43d529a
:END:
#+title: Technical Coding
#+filetags: :coding:notes:technical:index:
In this file I want to include technical coding information. This will include things I've learnt from solving:
- [[id:9d1cfccc-8da7-41a3-b435-9857f0abe441][Leetcode Notes]]
- [[id:e7f2302b-16eb-476d-a7b9-be12f077819d][AOC Notes]]
- [[id:347d2663-515b-4d9a-9ee9-7706ee86a845][Haskell Notes]]
- [[id:5a207a1c-6f02-40d5-b42e-38daaa0aec10][C Notes]]
- [[id:348df473-6443-4f4a-b366-95397b574989][web-port-notes]]
- [[id:710f65e5-0bd4-42be-b5d1-69dbe79b745e][github-notes]]
- [[id:ae343652-96fe-4341-8a36-ec3a1abd0dc6][technical-java-notes]]
-

View File

@@ -0,0 +1,16 @@
:PROPERTIES:
:ID: 2f285f04-fcf4-4ade-a1ac-2c50b43d529a
:END:
#+title: technical_moc
#+filetags: :coding:notes:technical:index:
In this file I want to include technical coding information. This will include things I've learnt from solving:
- [[id:9d1cfccc-8da7-41a3-b435-9857f0abe441][Leetcode Notes]]
- [[id:e7f2302b-16eb-476d-a7b9-be12f077819d][AOC Notes]]
- [[id:347d2663-515b-4d9a-9ee9-7706ee86a845][Haskell Notes]]
- [[id:5a207a1c-6f02-40d5-b42e-38daaa0aec10][C Notes]]
- [[id:348df473-6443-4f4a-b366-95397b574989][web-port-notes]]
- [[id:710f65e5-0bd4-42be-b5d1-69dbe79b745e][github-notes]]
- [[id:ae343652-96fe-4341-8a36-ec3a1abd0dc6][technical-java-notes]]
- [[id:bdb493df-db92-4c93-9558-0b10fdff3048][linux_moc]]
- [[id:e448cd99-afee-4702-947f-644bb34dc1aa][database_moc]]

1086
20241210001150-aoc_notes.org Executable file

File diff suppressed because it is too large Load Diff

1085
20241210001150-aoc_notes.org~ Executable file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,17 @@
:PROPERTIES:
:ID: 9d1cfccc-8da7-41a3-b435-9857f0abe441
:END:
#+title: leetcode_notes
#+filetags: :index:notes:leetcode:coding:
* Resources:
To work through:
- https://www.youtube.com/watch?v=lvO88XxNAzs&list=LL&index=1&ab_channel=stoneycodes
* Start
[[id:275988a8-59d8-40c8-a8b4-47118d6eb834][big-o-complexity]]
[[id:086ca3ca-39ec-4d37-b56d-b6d9f51e6873][how-to-solve-leetcode]]
[[id:93a43a24-6861-40c4-b45b-581977bb55cf][leetcode-arrays]]

View File

@@ -0,0 +1,17 @@
:PROPERTIES:
:ID: 9d1cfccc-8da7-41a3-b435-9857f0abe441
:END:
#+title: Leetcode Notes
#+filetags: :notes:leetcode:coding:technical:
* Resources:
To work through:
- https://www.youtube.com/watch?v=lvO88XxNAzs&list=LL&index=1&ab_channel=stoneycodes
* Start
[[id:275988a8-59d8-40c8-a8b4-47118d6eb834][big-o-complexity]]
[[id:086ca3ca-39ec-4d37-b56d-b6d9f51e6873][how-to-solve-leetcode]]
[[id:93a43a24-6861-40c4-b45b-581977bb55cf][leetcode-arrays]]

26
20241210004247-emacs_moc.org Executable file
View File

@@ -0,0 +1,26 @@
:PROPERTIES:
:ID: 8fa3f476-6152-45f4-b618-50f1e4bce46c
:END:
#+title: emacs_moc
#+filetags: :resources:index:docs:emacs:
The purpose of this file is to store things related to emacs (that being packages, or community projects that i stumble across).
- [[id:034abe27-ca14-4dc0-9a3f-b8d0e1f26342][emacs-stuff-org-roam]] for roam related things
- [[id:8e5e9498-ff3c-48e7-aab5-6e94b2e41ccb][emacs-stuff-gtd]]
- [[id:966175d4-3b58-4abc-9b41-08cbf328dd87][emacs-stuff-keybindings]]
- [[id:7e79e4c5-383d-450f-882c-33d4f87ba1b5][emacs-stuff-elisp]]
- [[id:2ab0fa3f-8ac6-4af2-8cd4-1dd490fb19c3][emacs-stuff-magit]]
- [[id:45CC3AF5-5E20-4B03-A36C-8D4BDD5CBB13][emacs-stuff-evil]]
- A link that contains all the key bindings for emacs: [[http://xahlee.info/emacs/emacs/emacs_keybinding_list.html][Keybindings list]]
- the theme 'ef-dream' repository: [[https://github.com/protesilaos/ef-themes][ef-themes]]
- something to look into: [[https://github.com/mickeynp/combobulate][combobulate]]
- the use package git hub: [[https://github.com/jwiegley/use-package][use-package]]
- hamacs (someones emacs config) [[https://www.howardabrams.com/hamacs/][hamacs]]
- projectile doc [[https://docs.projectile.mx/projectile/configuration.html][proj doc]]
- doom style dashboard [[https://gist.github.com/DevelopmentCool2449/ffc91d1d9b7b16e0f48402b698386f3d#file-dashboard-doom-style-el][doom dash]]
- soft charcoal theme [[https://github.com/mswift42/soft-charcoal-theme?tab=readme-ov-file][sc]]
- the theme im currently using: [[https://github.com/ogdenwebb/emacs-kaolin-themes?tab=readme-ov-file][kaolin]]
- config: [[https://gitlab.com/dwt1/configuring-emacs][config-dwt]]
- simplenote to self hosted: [[https://ru2saig.github.io/posts/switching-from-simplenote-to-a-self-hosted-approach-nextcloud-orgzly-and-emacs/][Link]]

View File

@@ -0,0 +1,26 @@
:PROPERTIES:
:ID: 8fa3f476-6152-45f4-b618-50f1e4bce46c
:END:
#+title: emacs_moc
#+filetags: :emacs:moc:
The purpose of this file is to store things related to emacs (that being packages, or community projects that i stumble across).
- [[id:034abe27-ca14-4dc0-9a3f-b8d0e1f26342][emacs-stuff-org-roam]] for roam related things
- [[id:8e5e9498-ff3c-48e7-aab5-6e94b2e41ccb][emacs-stuff-gtd]]
- [[id:966175d4-3b58-4abc-9b41-08cbf328dd87][emacs-stuff-keybindings]]
- [[id:7e79e4c5-383d-450f-882c-33d4f87ba1b5][emacs-stuff-elisp]]
- [[id:2ab0fa3f-8ac6-4af2-8cd4-1dd490fb19c3][emacs-stuff-magit]]
- [[id:45CC3AF5-5E20-4B03-A36C-8D4BDD5CBB13][emacs-stuff-evil]]
[[id:7d2e867e-f091-4362-a583-453f732207fe][emacs-stuff-org-publish]]
- A link that contains all the key bindings for emacs: [[http://xahlee.info/emacs/emacs/emacs_keybinding_list.html][Keybindings list]]
- the theme 'ef-dream' repository: [[https://github.com/protesilaos/ef-themes][ef-themes]]
- something to look into: [[https://github.com/mickeynp/combobulate][combobulate]]
- the use package git hub: [[https://github.com/jwiegley/use-package][use-package]]
- hamacs (someones emacs config) [[https://www.howardabrams.com/hamacs/][hamacs]]
- projectile doc [[https://docs.projectile.mx/projectile/configuration.html][proj doc]]
- doom style dashboard [[https://gist.github.com/DevelopmentCool2449/ffc91d1d9b7b16e0f48402b698386f3d#file-dashboard-doom-style-el][doom dash]]
- soft charcoal theme [[https://github.com/mswift42/soft-charcoal-theme?tab=readme-ov-file][sc]]
- the theme im currently using: [[https://github.com/ogdenwebb/emacs-kaolin-themes?tab=readme-ov-file][kaolin]]
- config: [[https://gitlab.com/dwt1/configuring-emacs][config-dwt]]
- simplenote to self hosted: [[https://ru2saig.github.io/posts/switching-from-simplenote-to-a-self-hosted-approach-nextcloud-orgzly-and-emacs/][Link]]

View File

@@ -0,0 +1,26 @@
:PROPERTIES:
:ID: 8fa3f476-6152-45f4-b618-50f1e4bce46c
:END:
#+title: emacs_moc
#+filetags: :emacs:moc:
The purpose of this file is to store things related to emacs (that being packages, or community projects that i stumble across).
- [[id:034abe27-ca14-4dc0-9a3f-b8d0e1f26342][emacs-stuff-org-roam]] for roam related things
- [[id:8e5e9498-ff3c-48e7-aab5-6e94b2e41ccb][emacs-stuff-gtd]]
- [[id:966175d4-3b58-4abc-9b41-08cbf328dd87][emacs-stuff-keybindings]]
- [[id:7e79e4c5-383d-450f-882c-33d4f87ba1b5][emacs-stuff-elisp]]
- [[id:2ab0fa3f-8ac6-4af2-8cd4-1dd490fb19c3][emacs-stuff-magit]]
- [[id:45CC3AF5-5E20-4B03-A36C-8D4BDD5CBB13][emacs-stuff-evil]]
- A link that contains all the key bindings for emacs: [[http://xahlee.info/emacs/emacs/emacs_keybinding_list.html][Keybindings list]]
- the theme 'ef-dream' repository: [[https://github.com/protesilaos/ef-themes][ef-themes]]
- something to look into: [[https://github.com/mickeynp/combobulate][combobulate]]
- the use package git hub: [[https://github.com/jwiegley/use-package][use-package]]
- hamacs (someones emacs config) [[https://www.howardabrams.com/hamacs/][hamacs]]
- projectile doc [[https://docs.projectile.mx/projectile/configuration.html][proj doc]]
- doom style dashboard [[https://gist.github.com/DevelopmentCool2449/ffc91d1d9b7b16e0f48402b698386f3d#file-dashboard-doom-style-el][doom dash]]
- soft charcoal theme [[https://github.com/mswift42/soft-charcoal-theme?tab=readme-ov-file][sc]]
- the theme im currently using: [[https://github.com/ogdenwebb/emacs-kaolin-themes?tab=readme-ov-file][kaolin]]
- config: [[https://gitlab.com/dwt1/configuring-emacs][config-dwt]]
- simplenote to self hosted: [[https://ru2saig.github.io/posts/switching-from-simplenote-to-a-self-hosted-approach-nextcloud-orgzly-and-emacs/][Link]]

31
20241210004329-org_roam.org Executable file
View File

@@ -0,0 +1,31 @@
:PROPERTIES:
:ID: 034abe27-ca14-4dc0-9a3f-b8d0e1f26342
:END:
#+title: emacs-stuff-org-roam
#+filetags: :emacs:roam:org:docs:resources:
This base will contain information on org roam. Although its closely linked to the [[id:8e5e9498-ff3c-48e7-aab5-6e94b2e41ccb][emacs-stuff-gtd]] node, that one will contain articles, notes and videos related to how to get things done.
[[https://www.orgroam.com/manual.html][User Manual]]
Here is the current config in my init.el
#+BEGIN_SRC elisp
;;roam config
(use-package org-roam
:ensure t
:custom
(org-roam-directory "~/master-folder/org_files/org_roam")
:bind (("C-c n l" . org-roam-buffer-toggle)
("C-c n f" . org-roam-node-find)
("C-c n i" . org-roam-node-insert))
:config
(org-roam-setup))
#+END_SRC
- for the org-roam-ui (the graphical interface for nodes): [[https://github.com/org-roam/org-roam-ui][org-roam-ui]]
- an article: [[https://gist.github.com/nickanderson/00005b5b03e323a65ada98c5fa5ebb11][example-org-roam-workflow.org]]
- An article to read: [[https://cmdln.org/2023/03/25/how-i-org-in-2023/][How i use org in 2023]]
- An article: [[https://jethrokuan.github.io/org-roam-guide/][org-roam-guide]]
- 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]]

29
20241210004329-org_roam.org~ Executable file
View File

@@ -0,0 +1,29 @@
:PROPERTIES:
:ID: 034abe27-ca14-4dc0-9a3f-b8d0e1f26342
:END:
#+title: emacs-stuff-org-roam
This base will contain information on org roam. Although its closely linked to the [[id:8e5e9498-ff3c-48e7-aab5-6e94b2e41ccb][emacs-stuff-gtd]] node, that one will contain articles, notes and videos related to how to get things done.
Here is the current config in my init.el
#+BEGIN_SRC elisp
;;roam config
(use-package org-roam
:ensure t
:custom
(org-roam-directory "~/master-folder/org_files/org_roam")
:bind (("C-c n l" . org-roam-buffer-toggle)
("C-c n f" . org-roam-node-find)
("C-c n i" . org-roam-node-insert))
:config
(org-roam-setup))
#+END_SRC
- for the org-roam-ui (the graphical interface for nodes): [[https://github.com/org-roam/org-roam-ui][org-roam-ui]]
- an article: [[https://gist.github.com/nickanderson/00005b5b03e323a65ada98c5fa5ebb11][example-org-roam-workflow.org]]
- An article to read: [[https://cmdln.org/2023/03/25/how-i-org-in-2023/][How i use org in 2023]]
- An article: [[https://jethrokuan.github.io/org-roam-guide/][org-roam-guide]]
- 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]]

7
20241210004453-gtd.org Executable file
View File

@@ -0,0 +1,7 @@
:PROPERTIES:
:ID: 8e5e9498-ff3c-48e7-aab5-6e94b2e41ccb
:END:
#+title: emacs-stuff-gtd
#+filetags: :emacs:resources:
- article: [[https://hamberg.no/gtd][gtd]]

7
20241210004453-gtd.org~ Executable file
View File

@@ -0,0 +1,7 @@
:PROPERTIES:
:ID: 8e5e9498-ff3c-48e7-aab5-6e94b2e41ccb
:END:
#+title: emacs-stuff-gtd
#+filetags: :emacs:gtd:resources:
- article: [[https://hamberg.no/gtd][gtd]]

27
20241210012703-fyp.org Executable file
View File

@@ -0,0 +1,27 @@
:PROPERTIES:
:ID: 7d199fbe-b0e7-48fd-b8a1-793044dbea01
:END:
#+title: fyp
#+filetags: :index:uni:
In this file i will include things related to my final year *project*.
- The idea:
*A web platform for users to take notes with an ai assistant*
- Migrating to cloud databse.
I was originally intending to use AWS RDS with an e2c instance, but realised that the learning curve was too great, and that i needed a simpler solution.
On the <2024-12-09 Mon> I decided to try this: exporting the current vm i had running and run in on oracle cloud.
The results for this:
The UML for this project: [[id:4a8edaed-9ebd-402b-9c5f-7a0cb4399102][uml_fyp]]
@startuml
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response
Alice -> Bob: Another authentication Request
Alice <-- Bob: Another authentication Response
@enduml
[[id:26b2ed9a-cb81-4c43-bc63-6b3c8ffa3bf1][fyp-report-planning]]

27
20241210012703-fyp.org~ Executable file
View File

@@ -0,0 +1,27 @@
:PROPERTIES:
:ID: 7d199fbe-b0e7-48fd-b8a1-793044dbea01
:END:
#+title: FYP
#+filetags: :index:uni:fyp:
In this file i will include things related to my final year *project*.
- The idea:
*A web platform for users to take notes with an ai assistant*
- Migrating to cloud databse.
I was originally intending to use AWS RDS with an e2c instance, but realised that the learning curve was too great, and that i needed a simpler solution.
On the <2024-12-09 Mon> I decided to try this: exporting the current vm i had running and run in on oracle cloud.
The results for this:
The UML for this project: [[id:4a8edaed-9ebd-402b-9c5f-7a0cb4399102][UML_FYP]]
@startuml
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response
Alice -> Bob: Another authentication Request
Alice <-- Bob: Another authentication Response
@enduml
[[id:26b2ed9a-cb81-4c43-bc63-6b3c8ffa3bf1][fyp-report-planning]]

12
20241210152650-uni.org Normal file
View File

@@ -0,0 +1,12 @@
:PROPERTIES:
:ID: 797d6e3e-98eb-4bc7-88b6-e096ef7306ad
:END:
#+title: uni_moc
#+filetags: :uni:moc:
* Modules:
- [[id:5443ed1c-bb7f-4eb4-9c96-d12648dd2291][tpis]]
- [[id:556d10d1-1c74-4d9f-a398-39cb3bd5d935][afp]]
- [[id:c69e4c4d-2fb4-4cf1-a835-a235cf6db8e9][ise]]
- [[id:3acffb66-bc1a-4661-904f-c5447b3c3488][advanced-networking]]
* Final Year Project
- [[id:7d199fbe-b0e7-48fd-b8a1-793044dbea01][fyp]] Final Year Project

12
20241210152650-uni.org~ Normal file
View File

@@ -0,0 +1,12 @@
:PROPERTIES:
:ID: 797d6e3e-98eb-4bc7-88b6-e096ef7306ad
:END:
#+title: uni_moc
#+filetags: :uni:index:
* Modules:
- [[id:5443ed1c-bb7f-4eb4-9c96-d12648dd2291][tpis]]
- [[id:556d10d1-1c74-4d9f-a398-39cb3bd5d935][afp]]
- [[id:c69e4c4d-2fb4-4cf1-a835-a235cf6db8e9][ise]]
- [[id:3acffb66-bc1a-4661-904f-c5447b3c3488][advanced-networking]]
* Final Year Project
- [[id:7d199fbe-b0e7-48fd-b8a1-793044dbea01][fyp]] Final Year Project

12
20241210152650-uni_moc.org Executable file
View File

@@ -0,0 +1,12 @@
:PROPERTIES:
:ID: 797d6e3e-98eb-4bc7-88b6-e096ef7306ad
:END:
#+title: uni_moc
#+filetags: :uni:index:
* Modules:
- [[id:5443ed1c-bb7f-4eb4-9c96-d12648dd2291][TPIS]]
- [[id:556d10d1-1c74-4d9f-a398-39cb3bd5d935][AFP]]
- [[id:c69e4c4d-2fb4-4cf1-a835-a235cf6db8e9][ISE]]
- [[id:3acffb66-bc1a-4661-904f-c5447b3c3488][advanced-networking]]
* Final Year Project
- [[id:7d199fbe-b0e7-48fd-b8a1-793044dbea01][FYP]] Final Year Project

9
20241210152713-tpis.org Executable file
View File

@@ -0,0 +1,9 @@
:PROPERTIES:
:ID: 5443ed1c-bb7f-4eb4-9c96-d12648dd2291
:END:
#+title: tpis
#+filetags: :uni:
Teaching Programming In School
- Proposal: [[file:~/master-folder/misc/proposal.pdf][Proposal for the module]]
- <2024-12-10 Tue> - Presentation

9
20241210152713-tpis.org~ Executable file
View File

@@ -0,0 +1,9 @@
:PROPERTIES:
:ID: 5443ed1c-bb7f-4eb4-9c96-d12648dd2291
:END:
#+title: TPIS
#+filetags: :uni:tpis:
Teaching Programming In School
- Proposal: [[file:~/master-folder/misc/proposal.pdf][Proposal for the module]]
- <2024-12-10 Tue> - Presentation

708
20241210232054-uml_fyp.org Executable file
View File

@@ -0,0 +1,708 @@
:PROPERTIES:
:ID: 4a8edaed-9ebd-402b-9c5f-7a0cb4399102
:END:
#+title: uml_fyp
#+filetags: :uni:
* Class diagram
** class 2:
@startuml
skinparam classAttributeIconSize 0
skinparam packageStyle rectangle
skinparam linetype ortho
left to right direction
' Entity Layer
rectangle "Entity Layer" as EntityLayer #E3F2FD {
class User {
+id: Long
+roles: Set<String>
+firstName: String
+lastName: String
+username: String
+password: String
+confirmPassword: String
+email: String
+phoneNumber: String
+picture: byte[]
}
class Workspace {
+id: Long
+name: String
+description: String
+fileCount: int
+noteCount: int
+lastAccessed: LocalDateTime
+dateCreated: LocalDateTime
}
class Library {
+id: Long
+name: String
+description: String
+dateCreated: LocalDateTime
+lastAccessed: LocalDateTime
}
class Page {
+id: Long
+name: String
+workspaceId: Long
+content: Text
+height: int
+width: int
}
class FileMetadata {
+id: Long
+fileUrl: String
+userId: String
+description: String
+fileData: byte[]
+fileName: String
+fileType: String
}
class AiChat {
+id: Long
+name: String
+workspaceId: Long
+createdAt: LocalDateTime
+messages: List<AIChatMessage>
}
}
' Repository Layer
rectangle "Repository Layer" as RepositoryLayer #E8F5E9 {
class AiChatRepository
class FileMetadataRepository
class LibraryRepository
class PageRepository
class UserRepository
class WorkspaceRepository
class RegisterRepository
class AuthRepository
}
' Service Layer
rectangle "Service Layer" as ServiceLayer #FFF3E0 {
class AiChatService
class AuthService
class FileMetadataService
class LibraryService
class PageService
class RegisterService
class UserService
class WorkspaceService
}
' Controller Layer
rectangle "Controller Layer" as ControllerLayer #F3E5F5 {
class AiChatController
class AiChatWebSocketController
class AuthController
class FileMetadataController
class LibraryController
class PageController
class RegisterController
class UserController
class WorkspaceController
}
' External Python Microservice
rectangle "External NLP Module (Python FastAPI)" as ExternalNLP #FCE4EC {
class FastAPINLPServer {
+/extract_text
+/keywords
+/tfidf_keywords
+/summarize
+/ner
}
}
rectangle "Frontend Core" as FrontendCore {
class AboutComponent
class AccessibilityComponent
class ContactComponent
class ForgotPasswordComponent
class LoginComponent
class LoginService
class PrivacyComponent
class RegisterComponent
class RegisterService
class SecurityComponent
class TermsComponent
LoginComponent --> LoginService
RegisterComponent --> RegisterService
LoginService ..> AuthController : REST
RegisterService ..> RegisterController : REST
}
rectangle "Frontend Entities" as FrontendEntities {
class AiChatComponent
class DashboardComponent
class DefaultLayoutComponent
class HomeComponent
class LibraryComponent
class ProfileComponent
class WorkspacePageComponent
class WorkspacesComponent
class AiChatServiceFE
class DashboardServiceFE
class LayoutServiceFE
class HomeServiceFE
class LibraryServiceFE
class ProfileServiceFE
class WorkspacePageServiceFE
class WorkspacesServiceFE
AiChatComponent --> AiChatServiceFE
DashboardComponent --> DashboardServiceFE
DefaultLayoutComponent --> LayoutServiceFE
DefaultLayoutComponent --> LoginComponent
DefaultLayoutComponent --> RegisterComponent
HomeComponent --> HomeServiceFE
LibraryComponent --> LibraryServiceFE
ProfileComponent --> ProfileServiceFE
WorkspacePageComponent --> WorkspacePageServiceFE
WorkspacesComponent --> WorkspacesServiceFE
ForgotPasswordComponent ..> UserController : REST
AiChatServiceFE ..> AiChatController : REST
AiChatServiceFE ..> AiChatWebSocketController : WebSocket
DashboardServiceFE ..> WorkspaceController : REST
DashboardServiceFE ..> PageController : REST
DashboardServiceFE ..> AiChatController : REST
LayoutServiceFE ..> UserController : REST
HomeServiceFE ..> AuthController : REST
LibraryServiceFE ..> LibraryController : REST
LibraryServiceFE ..> FileMetadataController : REST
ProfileServiceFE ..> UserController : REST
WorkspacePageServiceFE ..> PageController : REST
WorkspacePageServiceFE ..> FileMetadataController : REST
WorkspacePageServiceFE ..> AiChatController : REST
WorkspacesServiceFE ..> WorkspaceController : REST
AboutComponent --> ContactComponent
AboutComponent --> TermsComponent
AboutComponent --> PrivacyComponent
}
class AngularClient
AngularClient --> FrontendCore
AngularClient --> FrontendEntities
AngularClient ..> FastAPINLPServer : REST
' Entity Relationships
User "1" --> "many" Library
User "1" --> "many" Workspace
Library "1" --> "many" Workspace
Library "1" --> "many" FileMetadata
Workspace "1" --> "many" Page
Workspace "1" --> "many" FileMetadata
Workspace "1" --> "many" AiChat
' Controller → Service
AiChatController --> AiChatService
AiChatWebSocketController --> AiChatService
AuthController --> AuthService
FileMetadataController --> FileMetadataService
LibraryController --> LibraryService
PageController --> PageService
RegisterController --> RegisterService
UserController --> UserService
WorkspaceController --> WorkspaceService
' Service → Repository
AiChatService --> AiChatRepository
AuthService --> AuthRepository
FileMetadataService --> FileMetadataRepository
LibraryService --> LibraryRepository
PageService --> PageRepository
RegisterService --> RegisterRepository
UserService --> UserRepository
WorkspaceService --> WorkspaceRepository
' Repository → Entity
AiChatRepository --> AiChat
FileMetadataRepository --> FileMetadata
LibraryRepository --> Library
PageRepository --> Page
UserRepository --> User
WorkspaceRepository --> Workspace
RegisterRepository --> User
AuthRepository --> User
@enduml
** authentication sequence diagram:
@startuml
title Full Authentication Flow - Registration to Secured Access
skinparam shadowing true
skinparam packageStyle rectangle
skinparam handwritten false
skinparam linetype polyline
skinparam ParticipantPadding 20
skinparam maxMessageSize 150
actor User
== Registration Process ==
box "Client" #E3F2FD
participant UserClient as "User"
end box
box "Backend - Registration" #E8F5E9
participant RegisterController
participant UserService
end box
UserClient -> RegisterController : POST /register\n(username, password, confirmPassword)
RegisterController -> RegisterController : Check if passwords match
alt Passwords do not match
RegisterController --> UserClient : 400 Bad Request (Passwords mismatch)
return
end
RegisterController -> RegisterController : Hash password (BCrypt)
RegisterController -> RegisterController : Load default profile image
RegisterController -> UserService : createUser(user)
RegisterController --> UserClient : 200 OK (User Created)
== Authentication Process ==
box "Backend - Authentication" #FFF3E0
participant AuthController
participant AuthenticationManager
participant JwtUtil
end box
UserClient -> AuthController : POST /auth/login\n(username, password)
AuthController -> AuthenticationManager : Authenticate credentials
alt Valid credentials
AuthController -> JwtUtil : generateToken(userDetails, userId)
AuthController --> UserClient : 200 OK + JWT
else Invalid credentials
AuthController --> UserClient : 401 Unauthorized
return
end
== Accessing a Protected API ==
box "Security Filter Chain" #F3E5F5
participant JwtRequestFilter
participant UserDetailsService
participant JwtUtilFilter as "JwtUtil"
end box
UserClient -> JwtRequestFilter : Request with Authorization header
JwtRequestFilter -> JwtUtilFilter : extractUsername(jwt)
JwtRequestFilter -> UserDetailsService : loadUserByUsername
JwtRequestFilter -> JwtUtilFilter : validateToken(jwt, userDetails)
alt Valid token
JwtRequestFilter -> SecurityContext : Set authentication
else Invalid token
JwtRequestFilter -> JwtRequestFilter : Log and skip authentication
end
JwtRequestFilter --> UserClient : Continue filter chain
== @JwtRequired Secured Method Access ==
box "AOP - Method Security" #E1F5FE
participant JwtAspect
participant JwtUtilAspect as "JwtUtil"
end box
UserClient -> JwtAspect : Call method annotated with @JwtRequired
JwtAspect -> JwtAspect : Extract JWT from header
JwtAspect -> JwtUtilAspect : extractUsername(jwt)
JwtAspect -> SecurityContext : Get UserDetails
JwtAspect -> JwtUtilAspect : validateToken(jwt, userDetails)
alt Token valid and user matches
JwtAspect --> UserClient : Proceed to method execution
else Invalid/mismatched token
JwtAspect --> UserClient : Unauthorized exception
return
end
@enduml
** class
@startuml
skinparam classAttributeIconSize 0
skinparam packageStyle rectangle
package "High-Level Overview" {
' Controller Layer
package "Controller Layer" {
class AiChatController
class AiChatWebSocketController
class AuthController
class FileMetadataController
class LibraryController
class PageController
class RegisterController
class UserController
class WorkspaceController
}
' Service Layer
package "Service Layer" {
class AiChatService
class AuthService
class FileMetadataService
class LibraryService
class PageService
class RegisterService
class UserService
class WorkspaceService
}
' Repository Layer
package "Repository Layer" {
class AiChatRepository
class FileMetadataRepository
class LibraryRepository
class PageRepository
class UserRepository
class WorkspaceRepository
class RegisterRepository
class AuthRepository
}
' Entity Layer
package "Entity Layer" {
class User {
+id: Long
+roles: Set<String>
+firstName: String
+lastName: String
+username: String
+password: String
+confirmPassword: String
+email: String
+phoneNumber: String
+picture: byte[]
}
class Workspace {
+id: Long
+name: String
+description: String
+fileCount: int
+noteCount: int
+lastAccessed: LocalDateTime
+dateCreated: LocalDateTime
}
class Library {
+id: Long
+name: String
+description: String
+dateCreated: LocalDateTime
+lastAccessed: LocalDateTime
}
class Page {
+id: Long
+name: String
+workspaceId: Long
+content: Text
+height: int
+width: int
}
class FileMetadata {
+id: Long
+fileUrl: String
+userId: String
+description: String
+fileData: byte[]
+fileName: String
+fileType: String
}
class AiChat {
+id: Long
+name: String
+workspaceId: Long
+createdAt: LocalDateTime
+messages: List<AIChatMessage>
}
}
' Python NLP Microservice
package "External NLP Module (Python FastAPI)" {
class FastAPINLPServer {
+/extract_text
+/keywords
+/tfidf_keywords
+/summarize
+/ner
}
}
' Entity Relationships
User "1" --> "many" Library
User "1" --> "many" Workspace
Library "1" --> "many" Workspace
Library "1" --> "many" FileMetadata
Workspace "1" --> "many" Page
Workspace "1" --> "many" FileMetadata
Workspace "1" --> "many" AiChat
' Controller → Service
AiChatController --> AiChatService
AiChatWebSocketController --> AiChatService
AuthController --> AuthService
FileMetadataController --> FileMetadataService
LibraryController --> LibraryService
PageController --> PageService
RegisterController --> RegisterService
UserController --> UserService
WorkspaceController --> WorkspaceService
' Service → Repository
AiChatService --> AiChatRepository
AuthService --> AuthRepository
FileMetadataService --> FileMetadataRepository
LibraryService --> LibraryRepository
PageService --> PageRepository
RegisterService --> RegisterRepository
UserService --> UserRepository
WorkspaceService --> WorkspaceRepository
' Repository → Entity
AiChatRepository --> AiChat
FileMetadataRepository --> FileMetadata
LibraryRepository --> Library
PageRepository --> Page
UserRepository --> User
WorkspaceRepository --> Workspace
RegisterRepository --> User
AuthRepository --> User
' Frontend → NLP Server
}
' Frontend Component
package "Frontend" {
class AngularClient
}
' Angular communicates with both backends
AngularClient ..> AiChatController : REST
AngularClient ..> AiChatWebSocketController : WebSocket
AngularClient ..> AuthController : REST
AngularClient ..> PageController : REST
AngularClient ..> FileMetadataController : REST
AngularClient ..> WorkspaceController : REST
AngularClient ..> LibraryController : REST
AngularClient ..> RegisterController : REST
AngularClient ..> UserController : REST
AngularClient ..> FastAPINLPServer : REST
@enduml
** client-server
@startuml
!pragma layout smetana
actor User
package "Client Side (Angular)" {
[Angular App] as Frontend
}
package "Spring Boot Backend" {
[Auth Controller]
[Note Controller]
[NLP Proxy Service]
[Spring Boot App] as Backend
}
package "Database Layer" {
database "PostgreSQL Database" as DB
}
package "FastAPI NLP Server (Port 9010)" {
[FastAPI NLP Service] as NLP
[Summarisation Endpoint] as SumEndpoint
[Keyword Extraction] as KeywordEndpoint
[NER Endpoint] as NEREndpoint
}
package "External API" {
[OpenAI API]
}
' Interactions
User --> Frontend : Uses Web Interface
Frontend --> Backend : REST API Calls
Backend --> [Auth Controller] : Handles Auth
Backend --> [Note Controller] : Handles Notes
Backend --> [NLP Proxy Service] : Handles NLP Requests
[Auth Controller] --> DB : Access users table
[Note Controller] --> DB : Access notes table
[NLP Proxy Service] --> NLP : HTTP (port 9010)
NLP --> SumEndpoint : /summarise
NLP --> KeywordEndpoint : /keywords
NLP --> NEREndpoint : /ner
SumEndpoint --> [OpenAI API] : API call for contextual help
note right of Frontend
Angular app includes:
- Note Editor
- Summary View
- Keyword Panel
end note
note right of Backend
Spring Boot includes:
- Auth Controller
- Note Controller
- NLP Proxy Service (calls FastAPI)
end note
note right of NLP
FastAPI exposes endpoints for:
- Summarisation (Pegasus)
- Keyword Extraction (TF-IDF, YAKE)
- NER (spaCy)
end note
@enduml
** high level:
@startuml
skinparam componentStyle uml2
skinparam packageStyle rectangle
package "Client (Frontend)" {
[Angular UI]
}
package "Java Backend (Spring Boot)" {
[REST API Controller Layer]
[WebSocket Controller]
[Service Layer]
[Repository Layer]
[JPA Entities]
}
package "Python NLP Service" {
[FastAPI Server]
[Summarizer (Pegasus)]
[Keyword Extractor (YAKE / TF-IDF)]
[NER (spaCy)]
[Extract Text (Canvas Object)]
}
package "External Services" {
[OpenAI API]
[PostgreSQL DB]
}
' Communication Arrows
[Angular UI] --> [REST API Controller Layer] : REST API (JSON)
[Angular UI] --> [WebSocket Controller] : WebSocket
[REST API Controller Layer] --> [Service Layer]
[WebSocket Controller] --> [Service Layer]
[Service Layer] --> [Repository Layer]
[Repository Layer] ..> [JPA Entities] : uses
[Service Layer] --> [OpenAI API] : API calls
[Service Layer] --> [FastAPI Server] : REST (NLP Requests)
[FastAPI Server] --> [Summarizer (Pegasus)]
[FastAPI Server] --> [Keyword Extractor (YAKE / TF-IDF)]
[FastAPI Server] --> [NER (spaCy)]
[FastAPI Server] --> [Extract Text (Canvas Object)]
[Repository Layer] --> [PostgreSQL DB] : Hibernate ORM
@enduml
** title AI Chat + Workspace Workflow
@startuml
title AI Chat + Workspace Workflow
skinparam shadowing true
skinparam packageStyle rectangle
skinparam handwritten false
skinparam linetype polyline
skinparam ParticipantPadding 20
skinparam maxMessageSize 150
actor User
== AI Chat Session Creation ==
box "Client" #E3F2FD
participant AngularClient as "User"
end box
box "Backend - AI Chat" #E8F5E9
participant AiChatController
participant AiChatService
participant AiChatRepository
end box
box "External NLP Service" #FCE4EC
participant FastAPINLPServer as "FastAPI NLP"
end box
User -> AngularClient : Open AI Chat page
AngularClient -> AiChatController : POST /ai-chat\n(chat metadata)
AiChatController -> AiChatService : createChat(chatDto)
AiChatService -> AiChatRepository : save(chat)
AiChatService --> AiChatController : chatId
AiChatController --> AngularClient : 200 OK + chatId
User -> AngularClient : Send message via WebSocket
AngularClient -> AiChatWebSocketController : message
AiChatWebSocketController -> AiChatService : handleMessage()
alt Message requires NLP
AiChatService -> FastAPINLPServer : POST /summarize or /ner
FastAPINLPServer --> AiChatService : NLP result
end
AiChatService -> AiChatRepository : update(chat with message)
AiChatWebSocketController --> AngularClient : Message response
== Workspace Creation ==
box "Backend - Workspace" #FFF3E0
participant WorkspaceController
participant WorkspaceService
participant WorkspaceRepository
end box
User -> AngularClient : Create Workspace
AngularClient -> WorkspaceController : POST /workspace\n(name, description)
WorkspaceController -> WorkspaceService : createWorkspace(dto)
WorkspaceService -> WorkspaceRepository : save(workspace)
WorkspaceService --> WorkspaceController : workspaceId
WorkspaceController --> AngularClient : 200 OK + workspaceId
@enduml
* Screenshots:
** Draft 1:
[[file:~/master-folder/FYP/uml/draft1.png]]

708
20241210232054-uml_fyp.org~ Executable file
View File

@@ -0,0 +1,708 @@
:PROPERTIES:
:ID: 4a8edaed-9ebd-402b-9c5f-7a0cb4399102
:END:
#+title: UML_FYP
#+filetags: :uni:fyp:
* Class diagram
** class 2:
@startuml
skinparam classAttributeIconSize 0
skinparam packageStyle rectangle
skinparam linetype ortho
left to right direction
' Entity Layer
rectangle "Entity Layer" as EntityLayer #E3F2FD {
class User {
+id: Long
+roles: Set<String>
+firstName: String
+lastName: String
+username: String
+password: String
+confirmPassword: String
+email: String
+phoneNumber: String
+picture: byte[]
}
class Workspace {
+id: Long
+name: String
+description: String
+fileCount: int
+noteCount: int
+lastAccessed: LocalDateTime
+dateCreated: LocalDateTime
}
class Library {
+id: Long
+name: String
+description: String
+dateCreated: LocalDateTime
+lastAccessed: LocalDateTime
}
class Page {
+id: Long
+name: String
+workspaceId: Long
+content: Text
+height: int
+width: int
}
class FileMetadata {
+id: Long
+fileUrl: String
+userId: String
+description: String
+fileData: byte[]
+fileName: String
+fileType: String
}
class AiChat {
+id: Long
+name: String
+workspaceId: Long
+createdAt: LocalDateTime
+messages: List<AIChatMessage>
}
}
' Repository Layer
rectangle "Repository Layer" as RepositoryLayer #E8F5E9 {
class AiChatRepository
class FileMetadataRepository
class LibraryRepository
class PageRepository
class UserRepository
class WorkspaceRepository
class RegisterRepository
class AuthRepository
}
' Service Layer
rectangle "Service Layer" as ServiceLayer #FFF3E0 {
class AiChatService
class AuthService
class FileMetadataService
class LibraryService
class PageService
class RegisterService
class UserService
class WorkspaceService
}
' Controller Layer
rectangle "Controller Layer" as ControllerLayer #F3E5F5 {
class AiChatController
class AiChatWebSocketController
class AuthController
class FileMetadataController
class LibraryController
class PageController
class RegisterController
class UserController
class WorkspaceController
}
' External Python Microservice
rectangle "External NLP Module (Python FastAPI)" as ExternalNLP #FCE4EC {
class FastAPINLPServer {
+/extract_text
+/keywords
+/tfidf_keywords
+/summarize
+/ner
}
}
rectangle "Frontend Core" as FrontendCore {
class AboutComponent
class AccessibilityComponent
class ContactComponent
class ForgotPasswordComponent
class LoginComponent
class LoginService
class PrivacyComponent
class RegisterComponent
class RegisterService
class SecurityComponent
class TermsComponent
LoginComponent --> LoginService
RegisterComponent --> RegisterService
LoginService ..> AuthController : REST
RegisterService ..> RegisterController : REST
}
rectangle "Frontend Entities" as FrontendEntities {
class AiChatComponent
class DashboardComponent
class DefaultLayoutComponent
class HomeComponent
class LibraryComponent
class ProfileComponent
class WorkspacePageComponent
class WorkspacesComponent
class AiChatServiceFE
class DashboardServiceFE
class LayoutServiceFE
class HomeServiceFE
class LibraryServiceFE
class ProfileServiceFE
class WorkspacePageServiceFE
class WorkspacesServiceFE
AiChatComponent --> AiChatServiceFE
DashboardComponent --> DashboardServiceFE
DefaultLayoutComponent --> LayoutServiceFE
DefaultLayoutComponent --> LoginComponent
DefaultLayoutComponent --> RegisterComponent
HomeComponent --> HomeServiceFE
LibraryComponent --> LibraryServiceFE
ProfileComponent --> ProfileServiceFE
WorkspacePageComponent --> WorkspacePageServiceFE
WorkspacesComponent --> WorkspacesServiceFE
ForgotPasswordComponent ..> UserController : REST
AiChatServiceFE ..> AiChatController : REST
AiChatServiceFE ..> AiChatWebSocketController : WebSocket
DashboardServiceFE ..> WorkspaceController : REST
DashboardServiceFE ..> PageController : REST
DashboardServiceFE ..> AiChatController : REST
LayoutServiceFE ..> UserController : REST
HomeServiceFE ..> AuthController : REST
LibraryServiceFE ..> LibraryController : REST
LibraryServiceFE ..> FileMetadataController : REST
ProfileServiceFE ..> UserController : REST
WorkspacePageServiceFE ..> PageController : REST
WorkspacePageServiceFE ..> FileMetadataController : REST
WorkspacePageServiceFE ..> AiChatController : REST
WorkspacesServiceFE ..> WorkspaceController : REST
AboutComponent --> ContactComponent
AboutComponent --> TermsComponent
AboutComponent --> PrivacyComponent
}
class AngularClient
AngularClient --> FrontendCore
AngularClient --> FrontendEntities
AngularClient ..> FastAPINLPServer : REST
' Entity Relationships
User "1" --> "many" Library
User "1" --> "many" Workspace
Library "1" --> "many" Workspace
Library "1" --> "many" FileMetadata
Workspace "1" --> "many" Page
Workspace "1" --> "many" FileMetadata
Workspace "1" --> "many" AiChat
' Controller → Service
AiChatController --> AiChatService
AiChatWebSocketController --> AiChatService
AuthController --> AuthService
FileMetadataController --> FileMetadataService
LibraryController --> LibraryService
PageController --> PageService
RegisterController --> RegisterService
UserController --> UserService
WorkspaceController --> WorkspaceService
' Service → Repository
AiChatService --> AiChatRepository
AuthService --> AuthRepository
FileMetadataService --> FileMetadataRepository
LibraryService --> LibraryRepository
PageService --> PageRepository
RegisterService --> RegisterRepository
UserService --> UserRepository
WorkspaceService --> WorkspaceRepository
' Repository → Entity
AiChatRepository --> AiChat
FileMetadataRepository --> FileMetadata
LibraryRepository --> Library
PageRepository --> Page
UserRepository --> User
WorkspaceRepository --> Workspace
RegisterRepository --> User
AuthRepository --> User
@enduml
** authentication sequence diagram:
@startuml
title Full Authentication Flow - Registration to Secured Access
skinparam shadowing true
skinparam packageStyle rectangle
skinparam handwritten false
skinparam linetype polyline
skinparam ParticipantPadding 20
skinparam maxMessageSize 150
actor User
== Registration Process ==
box "Client" #E3F2FD
participant UserClient as "User"
end box
box "Backend - Registration" #E8F5E9
participant RegisterController
participant UserService
end box
UserClient -> RegisterController : POST /register\n(username, password, confirmPassword)
RegisterController -> RegisterController : Check if passwords match
alt Passwords do not match
RegisterController --> UserClient : 400 Bad Request (Passwords mismatch)
return
end
RegisterController -> RegisterController : Hash password (BCrypt)
RegisterController -> RegisterController : Load default profile image
RegisterController -> UserService : createUser(user)
RegisterController --> UserClient : 200 OK (User Created)
== Authentication Process ==
box "Backend - Authentication" #FFF3E0
participant AuthController
participant AuthenticationManager
participant JwtUtil
end box
UserClient -> AuthController : POST /auth/login\n(username, password)
AuthController -> AuthenticationManager : Authenticate credentials
alt Valid credentials
AuthController -> JwtUtil : generateToken(userDetails, userId)
AuthController --> UserClient : 200 OK + JWT
else Invalid credentials
AuthController --> UserClient : 401 Unauthorized
return
end
== Accessing a Protected API ==
box "Security Filter Chain" #F3E5F5
participant JwtRequestFilter
participant UserDetailsService
participant JwtUtilFilter as "JwtUtil"
end box
UserClient -> JwtRequestFilter : Request with Authorization header
JwtRequestFilter -> JwtUtilFilter : extractUsername(jwt)
JwtRequestFilter -> UserDetailsService : loadUserByUsername
JwtRequestFilter -> JwtUtilFilter : validateToken(jwt, userDetails)
alt Valid token
JwtRequestFilter -> SecurityContext : Set authentication
else Invalid token
JwtRequestFilter -> JwtRequestFilter : Log and skip authentication
end
JwtRequestFilter --> UserClient : Continue filter chain
== @JwtRequired Secured Method Access ==
box "AOP - Method Security" #E1F5FE
participant JwtAspect
participant JwtUtilAspect as "JwtUtil"
end box
UserClient -> JwtAspect : Call method annotated with @JwtRequired
JwtAspect -> JwtAspect : Extract JWT from header
JwtAspect -> JwtUtilAspect : extractUsername(jwt)
JwtAspect -> SecurityContext : Get UserDetails
JwtAspect -> JwtUtilAspect : validateToken(jwt, userDetails)
alt Token valid and user matches
JwtAspect --> UserClient : Proceed to method execution
else Invalid/mismatched token
JwtAspect --> UserClient : Unauthorized exception
return
end
@enduml
** class
@startuml
skinparam classAttributeIconSize 0
skinparam packageStyle rectangle
package "High-Level Overview" {
' Controller Layer
package "Controller Layer" {
class AiChatController
class AiChatWebSocketController
class AuthController
class FileMetadataController
class LibraryController
class PageController
class RegisterController
class UserController
class WorkspaceController
}
' Service Layer
package "Service Layer" {
class AiChatService
class AuthService
class FileMetadataService
class LibraryService
class PageService
class RegisterService
class UserService
class WorkspaceService
}
' Repository Layer
package "Repository Layer" {
class AiChatRepository
class FileMetadataRepository
class LibraryRepository
class PageRepository
class UserRepository
class WorkspaceRepository
class RegisterRepository
class AuthRepository
}
' Entity Layer
package "Entity Layer" {
class User {
+id: Long
+roles: Set<String>
+firstName: String
+lastName: String
+username: String
+password: String
+confirmPassword: String
+email: String
+phoneNumber: String
+picture: byte[]
}
class Workspace {
+id: Long
+name: String
+description: String
+fileCount: int
+noteCount: int
+lastAccessed: LocalDateTime
+dateCreated: LocalDateTime
}
class Library {
+id: Long
+name: String
+description: String
+dateCreated: LocalDateTime
+lastAccessed: LocalDateTime
}
class Page {
+id: Long
+name: String
+workspaceId: Long
+content: Text
+height: int
+width: int
}
class FileMetadata {
+id: Long
+fileUrl: String
+userId: String
+description: String
+fileData: byte[]
+fileName: String
+fileType: String
}
class AiChat {
+id: Long
+name: String
+workspaceId: Long
+createdAt: LocalDateTime
+messages: List<AIChatMessage>
}
}
' Python NLP Microservice
package "External NLP Module (Python FastAPI)" {
class FastAPINLPServer {
+/extract_text
+/keywords
+/tfidf_keywords
+/summarize
+/ner
}
}
' Entity Relationships
User "1" --> "many" Library
User "1" --> "many" Workspace
Library "1" --> "many" Workspace
Library "1" --> "many" FileMetadata
Workspace "1" --> "many" Page
Workspace "1" --> "many" FileMetadata
Workspace "1" --> "many" AiChat
' Controller → Service
AiChatController --> AiChatService
AiChatWebSocketController --> AiChatService
AuthController --> AuthService
FileMetadataController --> FileMetadataService
LibraryController --> LibraryService
PageController --> PageService
RegisterController --> RegisterService
UserController --> UserService
WorkspaceController --> WorkspaceService
' Service → Repository
AiChatService --> AiChatRepository
AuthService --> AuthRepository
FileMetadataService --> FileMetadataRepository
LibraryService --> LibraryRepository
PageService --> PageRepository
RegisterService --> RegisterRepository
UserService --> UserRepository
WorkspaceService --> WorkspaceRepository
' Repository → Entity
AiChatRepository --> AiChat
FileMetadataRepository --> FileMetadata
LibraryRepository --> Library
PageRepository --> Page
UserRepository --> User
WorkspaceRepository --> Workspace
RegisterRepository --> User
AuthRepository --> User
' Frontend → NLP Server
}
' Frontend Component
package "Frontend" {
class AngularClient
}
' Angular communicates with both backends
AngularClient ..> AiChatController : REST
AngularClient ..> AiChatWebSocketController : WebSocket
AngularClient ..> AuthController : REST
AngularClient ..> PageController : REST
AngularClient ..> FileMetadataController : REST
AngularClient ..> WorkspaceController : REST
AngularClient ..> LibraryController : REST
AngularClient ..> RegisterController : REST
AngularClient ..> UserController : REST
AngularClient ..> FastAPINLPServer : REST
@enduml
** client-server
@startuml
!pragma layout smetana
actor User
package "Client Side (Angular)" {
[Angular App] as Frontend
}
package "Spring Boot Backend" {
[Auth Controller]
[Note Controller]
[NLP Proxy Service]
[Spring Boot App] as Backend
}
package "Database Layer" {
database "PostgreSQL Database" as DB
}
package "FastAPI NLP Server (Port 9010)" {
[FastAPI NLP Service] as NLP
[Summarisation Endpoint] as SumEndpoint
[Keyword Extraction] as KeywordEndpoint
[NER Endpoint] as NEREndpoint
}
package "External API" {
[OpenAI API]
}
' Interactions
User --> Frontend : Uses Web Interface
Frontend --> Backend : REST API Calls
Backend --> [Auth Controller] : Handles Auth
Backend --> [Note Controller] : Handles Notes
Backend --> [NLP Proxy Service] : Handles NLP Requests
[Auth Controller] --> DB : Access users table
[Note Controller] --> DB : Access notes table
[NLP Proxy Service] --> NLP : HTTP (port 9010)
NLP --> SumEndpoint : /summarise
NLP --> KeywordEndpoint : /keywords
NLP --> NEREndpoint : /ner
SumEndpoint --> [OpenAI API] : API call for contextual help
note right of Frontend
Angular app includes:
- Note Editor
- Summary View
- Keyword Panel
end note
note right of Backend
Spring Boot includes:
- Auth Controller
- Note Controller
- NLP Proxy Service (calls FastAPI)
end note
note right of NLP
FastAPI exposes endpoints for:
- Summarisation (Pegasus)
- Keyword Extraction (TF-IDF, YAKE)
- NER (spaCy)
end note
@enduml
** high level:
@startuml
skinparam componentStyle uml2
skinparam packageStyle rectangle
package "Client (Frontend)" {
[Angular UI]
}
package "Java Backend (Spring Boot)" {
[REST API Controller Layer]
[WebSocket Controller]
[Service Layer]
[Repository Layer]
[JPA Entities]
}
package "Python NLP Service" {
[FastAPI Server]
[Summarizer (Pegasus)]
[Keyword Extractor (YAKE / TF-IDF)]
[NER (spaCy)]
[Extract Text (Canvas Object)]
}
package "External Services" {
[OpenAI API]
[PostgreSQL DB]
}
' Communication Arrows
[Angular UI] --> [REST API Controller Layer] : REST API (JSON)
[Angular UI] --> [WebSocket Controller] : WebSocket
[REST API Controller Layer] --> [Service Layer]
[WebSocket Controller] --> [Service Layer]
[Service Layer] --> [Repository Layer]
[Repository Layer] ..> [JPA Entities] : uses
[Service Layer] --> [OpenAI API] : API calls
[Service Layer] --> [FastAPI Server] : REST (NLP Requests)
[FastAPI Server] --> [Summarizer (Pegasus)]
[FastAPI Server] --> [Keyword Extractor (YAKE / TF-IDF)]
[FastAPI Server] --> [NER (spaCy)]
[FastAPI Server] --> [Extract Text (Canvas Object)]
[Repository Layer] --> [PostgreSQL DB] : Hibernate ORM
@enduml
** title AI Chat + Workspace Workflow
@startuml
title AI Chat + Workspace Workflow
skinparam shadowing true
skinparam packageStyle rectangle
skinparam handwritten false
skinparam linetype polyline
skinparam ParticipantPadding 20
skinparam maxMessageSize 150
actor User
== AI Chat Session Creation ==
box "Client" #E3F2FD
participant AngularClient as "User"
end box
box "Backend - AI Chat" #E8F5E9
participant AiChatController
participant AiChatService
participant AiChatRepository
end box
box "External NLP Service" #FCE4EC
participant FastAPINLPServer as "FastAPI NLP"
end box
User -> AngularClient : Open AI Chat page
AngularClient -> AiChatController : POST /ai-chat\n(chat metadata)
AiChatController -> AiChatService : createChat(chatDto)
AiChatService -> AiChatRepository : save(chat)
AiChatService --> AiChatController : chatId
AiChatController --> AngularClient : 200 OK + chatId
User -> AngularClient : Send message via WebSocket
AngularClient -> AiChatWebSocketController : message
AiChatWebSocketController -> AiChatService : handleMessage()
alt Message requires NLP
AiChatService -> FastAPINLPServer : POST /summarize or /ner
FastAPINLPServer --> AiChatService : NLP result
end
AiChatService -> AiChatRepository : update(chat with message)
AiChatWebSocketController --> AngularClient : Message response
== Workspace Creation ==
box "Backend - Workspace" #FFF3E0
participant WorkspaceController
participant WorkspaceService
participant WorkspaceRepository
end box
User -> AngularClient : Create Workspace
AngularClient -> WorkspaceController : POST /workspace\n(name, description)
WorkspaceController -> WorkspaceService : createWorkspace(dto)
WorkspaceService -> WorkspaceRepository : save(workspace)
WorkspaceService --> WorkspaceController : workspaceId
WorkspaceController --> AngularClient : 200 OK + workspaceId
@enduml
* Screenshots:
** Draft 1:
[[file:~/master-folder/FYP/uml/draft1.png]]

34
20241210233721-brain.org~ Executable file
View File

@@ -0,0 +1,34 @@
:PROPERTIES:
:ID: b2fb976a-c23c-4275-8a53-da343c223b97
:END:
#+title: brain
#+filetags: :brain:
#+BEGIN_SRC elisp
(org-roam-ui-mode)
#+END_SRC
#+RESULTS:
: t
* Technical (Computing)
[[id:8fa3f476-6152-45f4-b618-50f1e4bce46c][Emacs Stuff]]
[[id:2f285f04-fcf4-4ade-a1ac-2c50b43d529a][technical]]
* Career
** Work
*** Index: [[id:dd04d228-fff5-402a-929d-9d113a2ec965][career-index]]
** Applications - career (pre work)
The org file: [[file:~/master-folder/org_files/career.org][career]]
The roam file: [[id:fe5086b8-1941-4125-881a-65d01e1e7774][Career roam]]
* Uni stuff:
[[id:797d6e3e-98eb-4bc7-88b6-e096ef7306ad][Uni]]
* Misc
** Books
[[id:63314cff-3a3f-49b4-9e76-4a359c51f55f][books-main]]
[[id:2706598f-e6aa-4e88-8d24-5f699bd22787][Book Notes]]
** Food
[[id:65F747B1-3CB2-429A-9E26-ED8BC169E689][recipes-main]]

30
20241210233721-brain_moc.org Executable file
View File

@@ -0,0 +1,30 @@
:PROPERTIES:
:ID: b2fb976a-c23c-4275-8a53-da343c223b97
:END:
#+title: brain_moc
#+filetags: :moc:
#+BEGIN_SRC elisp
(org-roam-ui-mode)
#+END_SRC
#+RESULTS:
: t
* Backlog
[[id:580cc3a5-af8e-4cbe-b5ad-5b06680e6c37][backlog]]
* Technical (Computing)
[[id:2f285f04-fcf4-4ade-a1ac-2c50b43d529a][technical_moc]]
* Non Technical
[[id:565eaccd-8cf6-4dbb-bc66-a4b37367ce6b][non_technical_moc]]
* Uni stuff:
[[id:797d6e3e-98eb-4bc7-88b6-e096ef7306ad][uni_moc]]
* Career
[[id:dd04d228-fff5-402a-929d-9d113a2ec965][career_moc]]
* Misc
[[id:08415f5c-986e-45a6-8ea1-f3bedcc996f0][misc_moc]]

32
20241210233721-brain_moc.org~ Executable file
View File

@@ -0,0 +1,32 @@
:PROPERTIES:
:ID: b2fb976a-c23c-4275-8a53-da343c223b97
:END:
#+title: brain_moc
#+filetags: :moc:
#+BEGIN_SRC elisp
(org-roam-ui-mode)
#+END_SRC
#+RESULTS:
: t
* Technical (Computing)
[[id:2f285f04-fcf4-4ade-a1ac-2c50b43d529a][technical_moc]]
* Non Technical
[[id:565eaccd-8cf6-4dbb-bc66-a4b37367ce6b][non_technical_moc]]
* Uni stuff:
[[id:797d6e3e-98eb-4bc7-88b6-e096ef7306ad][uni_moc]]
* Career
[[id:dd04d228-fff5-402a-929d-9d113a2ec965][career_moc]]
* Misc
[[id:08415f5c-986e-45a6-8ea1-f3bedcc996f0][misc_moc]]
* quick notes
** portainer access token:
ptr_KFQqKse9K4Nc9M5jnpc61fpAvGzdTOXTzswz9CwOF74=

View File

@@ -0,0 +1,269 @@
:PROPERTIES:
:ID: f9897f8e-2b63-4ad2-a55f-3787c4ac235f
:END:
#+title: job_application_cover_letters
#+filetags: :pre-career:applications:
#+STARTUP: overview
* Modules:
1st year
- Data structures and Algorithms
- Object Oriented Programming
- Mathematical and Logical foundations of computer science
- Full stack software development
- Artificial Intelligence 1
- Theories of computation
2nd year
- Team Project (77%)
- Security and Networks (72%)
- Functional Programming (87%)
- Software Engineering and Professional Practice (81%)
- Artificial Intelligence 2 (75%)
- Operating Systems and Systems Programming (66%)
3rd Year
- Final Year Project
- Advanced Networking
- Advanced Functional Programming
- Intelligent Software Engineering
- Teaching Computer Science in Schools
Mathematics A level: A
French A level: B
Business A level: A
Maths GCSE: 9
English GCSE: 6
* Stantec
** Cover letter:
[[file:/home/zaine/master-folder/CV's/Cover Letter/Santec/Santec.pdf][File]]
*CONTAINS SPELLING MISTAKES - USE BT ONE*
I would firstly like to extend my gratidute for giving me the opportunity to apply for an amazing role. If you are looking for a passionate data analyst and problem solver with experience extending into software development, then I believe I'm the perfect candidate for the role.
Growing up, I have always been interested in two things: Tech and problem solving. My technical journey began when I joined the University Of Birmingham, wherein I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead, and resulted in a 14% increase in user satisfaction. In addition, I used Python for the visualization of data on a networking module and have been using PostgreSQL throughout my degree.
Upon inspecting the requirements from the description, I have listed below my top three skills which I believe would make me most suited for this role:
- Data Analysis and Visualisation: I developed a Java based note taking application, where I used JavaFX and a database (PSQL).
- Database Management: Created and maintained databases using PostgreSQL for various projects, some were hosted locally, some on the cloud and some on virtual machines.
- Innovative Thinking: Currently integrating machine learning algorithms into a note taking platform tailored for neurodiverse students specifically.
Stantec has a commitment to two main things which really resonate and encouraged me to apply: sustainability and innovation. The Surface Water Assessor and Flood Prediction Tools are innovations that really inspire a person, and it only encourages me more to use the knowledge I am fortunate to have gained to help and make meaningful impact to society.
I am enthusiastic about joining the graduate program; it is a core principle of mine that continous learning will propel one to unimaginable heights, and I firmly believe that Santec will be able to provice the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
I am deeply drawn to the water sector because it sits at the intersection of environmental stewardship and technological innovation, offering a unique opportunity to address critical global challenges. With increasing droughts and floods revealing vulnerabilities in water systems, I am inspired by the chance to contribute to solutions that promote water conservation, resilience, and equitable access. Joining this sector allows me to apply my technical expertise in data analysis and machine learning to protect one of our most vital resources, ensuring sustainable and impactful outcomes for communities and future generations.
** Why are you interested in the sector stated above?
What draws me to the water sector is the amount of possibilities there are when it comes to creating positive impact to society. I believe in environmental stewardship, and through the use of technology, this offers a unique chance to address critical global issues, and solve them as well! Joining this sector would allow me to grow as an individual, and to apply my technical skills and experience in data analysis and machine learning to ensure that impactful outcomes are achieved.
* Sinara
** Use this section to describe your technical experience such as programming languages, operating systems, hardware, databases etc. Give some indication of your level of proficiency in each. Include particular reference to your skills in C#/C++ and Java.
Technical Experience
C: Strong proficiency gained through academic projects focusing on operating systems and systems programming. I created a 3 tier TCP/IP client server CLI service as part of University project. C++: Moderate proficiency, developed through coursework and personal exploration of object oriented and systems programming. Currently learning more about this, I recently developped a c++ pomodorro CLI system (personal project). Java: Advanced expertise through academic projects, such as developing a note taking application (personal) using JavaFX and a database driven book catalog (University). This includes experience in object oriented programming and GUI development. TypeScript/Angular: Proficient in full stack development, notably using Angular for frontend development and integrating with Spring Boot backends. Used this for a web project that is now completed and using Spring boot with Typescript/Angular for a current web project. Databases PostgreSQL: Advanced proficiency demonstrated in team projects and personal development efforts, including a web application for football enthusiastic students (University Project) and a book catalog application. H2 Console: Experience in testing and managing in memory databases within Spring Boot applications. Operating Systems Linux: Competent in scripting and system management, with experience writing bash scripts and using Linux environments for development. I also use Linux as my daily driver, and I am getting more into emacs.
What was the purpose of the program. What part did you play in its development?
Football Finder Web Application Purpose: The program was designed to help users locate and join local football matches based on their preferences, such as location, skill level, and availability. The goal was to increase engagement in local sports communities and make match organisation easier. My Role: As the team leader, I oversaw code commits, pull requests, and task allocations using a Kanban board. I actively contributed to both the frontend and backend, focusing on user interface enhancements and optimising the backend logic for booking pitches Lessons Learned: I improved my ability to lead a team and manage project workflows effectively. I strengthened my skills in user centered design, ensuring the interface met user expectations, this was done through collating feedback. I learned the importance of clear communication and fostering a supportive environment within the team.
What steps did you take before starting to write code?
Before starting the Football Finder Web Application, I liaised with the team to define user requirements, focusing on features like location based match searches and skill level filtering. We researched existing solutions, identified gaps, and selected a tech stack of Angular, Spring Boot, and PostgreSQL. I created user personas, wireframes, and prototypes to visualise the UI and flow, while also designing the database schema (using JDL) and API endpoints. A Kanban board was established for task management, and we broke the project into sprints with clear milestones. Finally, we outlined a testing strategy, including unit, integration, and user acceptance testing, to ensure the application met user needs and functioned seamlessly.
How was the software tested?
The Football Finder Web Application was tested using a strategy to ensure functionality and reliability. Unit tests were written for individual components and backend services to validate isolated functionality. To test API endpoints we used SwaggerUI. User acceptance testing involved gathering feedback from a small group of target users to evaluate the usability and effectiveness of the application. Automated tests were implemented for repetitive checks, and manual testing focused on edge cases, such as invalid input handling and network interruptions. Finally, the application was deployed in a staging environment to simulate real world usage and identify any final issues before production.
What problems did you encounter and how did you deal with them?
During the development of the Football Finder Web Application, we encountered several challenges. One major issue was ensuring accurate location based match recommendations, which we resolved by integrating and testing multiple geolocation APIs to find the most reliable solution. Another problem was maintaining data consistency during simultaneous updates to the match database, which we addressed by implementing transaction management and locking mechanisms in PostgreSQL. Cross browser compatibility issues arose in the frontend, which we fixed by rigorously testing on different browsers and applying appropriate SCSS fixes (alot of global stylings had to be rewritten). Lastly, communication delays within the team occasionally slowed progress, so we introduced more frequent stand ups and better use of task management tools to improve collaboration and streamline workflows.
With hindsight, what would you have done differently?
With hindsight, I would have allocated more time to user research and feedback during the initial planning stages to better align the application's features with user needs. Additionally, I would have implemented our own automated deployment pipelines earlier to streamline the testing and staging process as opposed to using the one the University provided, allowing us to learn more about devops and have more control over the project. Lastly, setting clearer communication protocols from the outset could have minimised delays, ensuring smoother collaboration and faster resolution of blockers.
What are your personal career goals?
- Develop expertise in full-stack development, machine learning, and cloud computing. - Contribute to open source projects (currently going into emacs and MELPA packages) - Lead impactful projects that give back to the community. - Take on leadership roles to guide teams in delivering applications and solutions.
Please use this space to provide any other information you feel would support your application. For example: Other experience or awards, positions of responsibility, hobbies and interests.
- I love language learning and reading literature in other languages. - I really enjoy reading about other people's experiences with GTD (getting things done) and use these as inspiration for my own system - I am currently getting into embedded programming. - I am a regular gym goer and love cooking. - I also enjoy tinkering with cars and modding them.
* BT
** Cover Letter:
[[file:~/master-folder/CV's/Cover Letter/btgroup/BT_group_cl.pdf][file]]
Dear Hiring Manager,
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing role. If you are looking for a passionate software engineer and problem solver with experience extending into other disciplines, then I believe I'm the perfect candidate for the role.
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction; this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising data on a networking module, and for various scripting purposes.
Beyond this, I also work as a tutor at Tutors United, where I teach Mathematics and English to students coming from lower socio-economic backgrounds, and who are neurodiverse. This experience has taught me many things, two that are notable are communication and adaptability. These two skills together have taught me the importance of understanding as well as addressing challenges, which I believe will translate well at BT group, where challenges are primarily user centric.
What draws me most to BT group is their commitment to using technology to bring good to the community. This, I would say, is one of the reasons I decided to go into the field of tech, which was to help others. BT group achieves this in various ways, ranging from addressing climate change to enhancing cybersecurity. I would be really ecstatic to apply my skills in various programming languages and tools such as Git, Ansible, and Terraform, coupled with my foundational knowledge of cloud services like AWS and Oracle cloud to the mission of BT group, which is to develop high performance and well tested code to bring about a greater benefit to the community.
I am enthusiastic about joining the graduate program; it is a core principle of mine that continuous learning will propel one to unimaginable heights, and I firmly believe that BT group will be able to provide the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
* Panoptech
** Cover Letter:
Dear Hiring Manager,
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing role. If you are looking for a passionate software engineer and problem solver with experience extending into DevOps, then I believe I'm the perfect candidate for the role.
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction; this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising data on a networking module, and for various scripting purposes.
In addition to my technical background, I have experience with DevOps tools, including Ansible, Docker, and Jenkins, gained through self learning and practical application. I am also familiar with bash scripting, which is something I find myself coming back to whenever I want to automate something; this I usually do in bash and python, occasionally, for no particular reason, I would use Haskell to write scripts. I am certain that these skills will allow me to support the development team in managing the DevOps toolchain.
I also use Linux as my daily drivers, I have dual booted quite a few machines, some running Ubuntu some running Mint. I also have experience in virutalisation software; this was when I needed to host a local database, hence I fired up a virtual machine running minimal Ubuntu and kept a PSQL server on there.
I am enthusiastic about joining the Panoptech; it is a core principle of mine that continuous learning will propel one to unimaginable heights, and I firmly believe that Panoptech will be able to provide the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
* buro happold
[[file:~/master-folder/CV's/Cover Letter/buro_happald/Buro_Happold_CL.pdf][file]]
** cl - SAME AS BT
Dear Hiring Manager,
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing
role. If you are looking for a passionate Digital Technologist and problem solver with experience
extending into other disciplines, then I believe I'm the perfect candidate for the role.
There are two things I have always been interested in growing up: Technology and Problem
solving. My technical journey began when I joined the University of Birmingham, where I have
developed solid foundations in data analysis, software development and problem solving. One
of the biggest projects I have worked on was a football finding web app which I was entrusted
to lead and resulted in a 14% increase in user satisfaction; this was built using Java Spring Boot,
Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising
data on a networking module, and for various scripting purposes.
Beyond this, I also work as a tutor at Tutors United, where I teach Mathematics and English to
students coming from lower socio-economic backgrounds, and who are neurodiverse. This
experience has taught me many things, two that are notable are communication and
adaptability. These two skills together have taught me the importance of understanding as well
as addressing challenges, which I believe will translate well at Buro Happold, where challenges
are primarily user centric.
What draws me most to Buro Happold is their commitment to using technology to bring good
to the community. This, I would say, is one of the reasons I decided to go into the field of tech,
which was to help others. Buro Happold achieves this in various ways, from designing modular
systems that reduce costs while enhancing the learning experience for institutions like Kuwait
University, to implementing advanced technologies at landmark sites like the Louvre Abu Dhabi,
ensuring seamless visitor experiences and operational efficiency.
I am enthusiastic about joining the company; it is a core principle of mine that continuous
learning will propel one to unimaginable heights, and I firmly believe that Buro Happold will be
able to provide the means to make that happen. Thank you for considering my application, I
look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
* Experian
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing role. If you are looking for a passionate software engineer and problem solver with experience extending into other disciplines, then I believe I'm the perfect candidate for the role.
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction, this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising data on a networking module, and for various scripting purposes.
Beyond this, I also work as a tutor at Tutors United, where I teach Mathematics and English to students coming from lower socio-economic backgrounds, and who are neurodiverse. This experience has taught me many things, two that are notable are communication and adaptability. These two skills together have taught me the importance of understanding as well as addressing challenges, which I believe will translate well at Experian, where challenges are primarily user centric.
What draws me most to Experian is their commitment to using technology to bring good to the community. This, I would say, is one of the reasons I decided to go into the field of tech, which was to help others. Experian achieves this in various ways, ranging from addressing climate change to enhancing cybersecurity. I would be really ecstatic to apply my skills in various programming languages and tools such as Java, Angular/Typescript and git, coupled with my foundational knowledge of cloud services like AWS and Oracle cloud to the mission of Experian, which is to develop high performance and well tested code to bring about a greater benefit to the community.
I am enthusiastic about joining the graduate program, it is a core principle of mine that continuous learning will propel one to unimaginable heights, and I firmly believe that Experian will be able to provide the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
* Cambridge Consultants
Dear Hiring Manager,
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing role. If you are looking for a passionate embedded software engineer and problem solver with experience extending into DevOps and low-level programming, then I believe I'm the perfect candidate for the role.
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction; this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising data on a networking module, and for various scripting purposes.
In addition to my technical background, I have experience with DevOps tools, including Ansible, Docker, and Jenkins, gained through self learning and practical application. I am also familiar with bash scripting, which is something I find myself coming back to whenever I want to automate something; this I usually do in bash and python, occasionally, for the purpose of challenging myself, I would use Haskell to write scripts. In addition, I write scripts that allow me to communicate with hardware connected to a raspberry Pi; whenever I have the free time, I dive into embedded programming as this is a huge interest of mine. I am certain that these skills will allow me to support the team in solving real client problems at Cambridge Consultants.
I also use Linux as my daily drivers, I have dual booted quite a few machines, some running Ubuntu some running Mint. I also have experience in virutalisation software; this was when I needed to host a local database, hence I fired up a virtual machine running minimal Ubuntu and kept a PSQL server on there.
I am enthusiastic about joining the Cambridge Consultants; it is a core principle of mine that continuous learning will propel one to unimaginable heights, and I firmly believe that Cambridge Consultants will be able to provide the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
* Adelphi Real World
Dear Hiring Manager,
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing role. If you are looking for a passionate problem solver with a strong foundation in data analysis and a drive to deliver precise and efficient solutions, I believe I am the ideal candidate for this role.
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction, this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising data on a networking module, and for various scripting purposes.
Beyond this, I also work as a tutor at Tutors United, where I teach Mathematics and English to students coming from lower socio-economic backgrounds, and who are neurodiverse. This experience has taught me many things, two that are notable are communication and adaptability. These two skills together have taught me the importance of understanding as well as addressing challenges, which I believe will translate well at Adelphi, where challenges are primarily user centric.
What draws me most to Adelphi Real World is their commitment to leveraging real world data to improve healthcare outcomes. The mere prospect of contributing to this mission by using tools like SPSS, Confirmit, and Excel, and supporting fieldwork and data processing, aligns perfectly with my dream of using technology to help others. I would be really ecstatic to apply my analytical skills, programming knowledge, and meticulous attention to detail to bring about a greater benefit to Adelphi, the healthcare sector and the community.
I am enthusiastic about joining this esteemed organisation, it is a core principle of mine that continuous learning will propel one to unimaginable heights, and I firmly believe that Adelphi Real World will be able to provide the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
* Midland Heart
Dear Hiring Manager,
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing role. If you are looking for a passionate problem solver with a strong foundation in data analysis and a drive to deliver precise and efficient solutions, I believe I am the ideal candidate for this role.
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction, this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising data on a networking module, and for various scripting purposes.
Beyond this, I also work as a tutor at Tutors United, where I teach Mathematics and English to students coming from lower socio-economic backgrounds, and who are neurodiverse. This experience has taught me many things, two that are notable are communication and adaptability. These two skills together have taught me the importance of understanding as well as addressing challenges, which I believe will translate well at Midland Heart, where challenges are primarily user centric.
What draws me most to Midland Heart is their commitment to leveraging real world data to improve tenancy outcomes. The mere prospect of contributing to this mission by using tools like Power Bi, Python, and Cloud Services, and supporting fieldwork and data processing, aligns perfectly with my dream of using technology to help others. I would be ecstatic to apply my analytical skills, programming knowledge, and meticulous attention to detail to bring about a greater benefit to Midland Heart, the housing sector and the community.
I am enthusiastic about joining this esteemed organisation, it is a core principle of mine that continuous learning will propel one to unimaginable heights, and I firmly believe that Midland Heart will be able to provide the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
* EDW
Dear Hiring Manager,
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing role. If you are looking for a passionate Software Tester and problem solver with experience extending into other disciplines, then I believe I'm the perfect candidate for the role.
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction; this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising data on a networking module, and for various scripting purposes.
Beyond this, I also work as a tutor at Tutors United, where I teach Mathematics and English to students coming from lower socio-economic backgrounds, and who are neurodiverse. This experience has taught me many things, two that are notable are communication and adaptability. These two skills together have taught me the importance of understanding as well as addressing challenges, which I believe will translate well at EDW Technology, where challenges are primarily user centric.
What draws me most to EDW Technology is their commitment to using technology to bring good to the community. This, I would say, is one of the reasons I decided to go into the field of tech, which was to help others. EDW Technology achieves this in various ways, ranging from creating energy management tools to providing user focused solutions. I would be ecstatic to apply my skills in various programming languages and tools such as Java, Swagger, and Git, coupled with my foundational knowledge of cloud services like AWS and Oracle cloud to the mission of EDW Technology, which is to develop high performance and well tested code to bring about a greater benefit to the community.
I am enthusiastic about joining the graduate program; it is a core principle of mine that continuous learning will propel one to unimaginable heights, and I firmly believe that EDW Technology will be able to provide the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
* DCA
Dear Hiring Manager,
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing role. If you are looking for a passionate software engineer and problem solver with experience extending into other disciplines, then I believe I'm the perfect candidate for the role.
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction; this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising data on a networking module, and for various scripting purposes. I have also built a full stack NLP/AI powered note taking web application to address the issue of cognitive overload.
Beyond this, I also work as a tutor at Tutors United, where I teach Mathematics and English to students coming from lower socio-economic backgrounds, and who are neurodiverse. This experience has taught me many things, two that are notable are communication and adaptability. These two skills together have taught me the importance of understanding as well as addressing challenges, which I believe will translate well at DCA, where challenges are primarily user centric.
What draws me most to DCA is their commitment to using technology to bring good to the community. This, I would say, is one of the reasons I decided to go into the field of tech, which was to help others. DCA achieves this in various ways, ranging from addressing novel transport solutions to developing safety-critical medical devices. I would be really ecstatic to apply my skills in various programming languages and tools such as Git, Docker, and Nginx, coupled with my foundational knowledge of cloud services like AWS and Oracle cloud to the mission of DCA, which is to develop high performance and well tested code to bring about a greater benefit to the community
I am enthusiastic about joining the graduate program; it is a core principle of mine that continuous learning will propel one to unimaginable heights, and I firmly believe that DCA will be able to provide the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
* emp
Describe something you have done that you are proud of. (Word limit 250 words)
One of the proudest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction; this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. However, my proudest work to date was a full stack web application that utilises AI and NLP to reduce cognitive overload faced in students. This was an ongoing long-term project and has taken me 7 months to complete. I used Spring Boot, Angular/Typescript along with Python scripting.
How can you demonstrate your current curiosity around technology to us? (Word Limit 250 words)
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. I find myself more so immersed in technical related hobbies such as ricing a Linux distro, configuration of Emacs, tinkering with embedded programming using Raspberry Pi.
Can you describe to us a scenario where you have demonstrated either creativity, innovation or originality (Word Limit 250 words)
One of the most innovative projects I have worked on was my AI-assisted note-taking web application, designed to combat cognitive overload in students. The challenge was to create an intuitive system that could process and summarise lecture content efficiently while al-lowing students to interact with it seamlessly. I thus decided on using OpenAIs API for basic requests (intelligence enhanced which allowed it to see what the user is doing through parsing the canvas object), natural language processing (NLP), integrating it with an Angular TypeScript frontend and a Spring Boot backend.
What made this project particularly creative was my decision to incorporate adaptive sum-marisation, meaning the AI tailors the level of detail in notes based on the users prefer-ences and previous study patterns. Unlike traditional note-taking applications, this one con-tinuously learns from user behavior, refining its output over time. Furthermore, I used YAKE and TF-IDF to extract keywords from the notes, as well as NER (named entity recognition).

View File

@@ -0,0 +1,269 @@
:PROPERTIES:
:ID: f9897f8e-2b63-4ad2-a55f-3787c4ac235f
:END:
#+title: job_application_cover_letters
#+filetags:
#+STARTUP: overview
* Modules:
1st year
- Data structures and Algorithms
- Object Oriented Programming
- Mathematical and Logical foundations of computer science
- Full stack software development
- Artificial Intelligence 1
- Theories of computation
2nd year
- Team Project (77%)
- Security and Networks (72%)
- Functional Programming (87%)
- Software Engineering and Professional Practice (81%)
- Artificial Intelligence 2 (75%)
- Operating Systems and Systems Programming (66%)
3rd Year
- Final Year Project
- Advanced Networking
- Advanced Functional Programming
- Intelligent Software Engineering
- Teaching Computer Science in Schools
Mathematics A level: A
French A level: B
Business A level: A
Maths GCSE: 9
English GCSE: 6
* Stantec
** Cover letter:
[[file:/home/zaine/master-folder/CV's/Cover Letter/Santec/Santec.pdf][File]]
*CONTAINS SPELLING MISTAKES - USE BT ONE*
I would firstly like to extend my gratidute for giving me the opportunity to apply for an amazing role. If you are looking for a passionate data analyst and problem solver with experience extending into software development, then I believe I'm the perfect candidate for the role.
Growing up, I have always been interested in two things: Tech and problem solving. My technical journey began when I joined the University Of Birmingham, wherein I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead, and resulted in a 14% increase in user satisfaction. In addition, I used Python for the visualization of data on a networking module and have been using PostgreSQL throughout my degree.
Upon inspecting the requirements from the description, I have listed below my top three skills which I believe would make me most suited for this role:
- Data Analysis and Visualisation: I developed a Java based note taking application, where I used JavaFX and a database (PSQL).
- Database Management: Created and maintained databases using PostgreSQL for various projects, some were hosted locally, some on the cloud and some on virtual machines.
- Innovative Thinking: Currently integrating machine learning algorithms into a note taking platform tailored for neurodiverse students specifically.
Stantec has a commitment to two main things which really resonate and encouraged me to apply: sustainability and innovation. The Surface Water Assessor and Flood Prediction Tools are innovations that really inspire a person, and it only encourages me more to use the knowledge I am fortunate to have gained to help and make meaningful impact to society.
I am enthusiastic about joining the graduate program; it is a core principle of mine that continous learning will propel one to unimaginable heights, and I firmly believe that Santec will be able to provice the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
I am deeply drawn to the water sector because it sits at the intersection of environmental stewardship and technological innovation, offering a unique opportunity to address critical global challenges. With increasing droughts and floods revealing vulnerabilities in water systems, I am inspired by the chance to contribute to solutions that promote water conservation, resilience, and equitable access. Joining this sector allows me to apply my technical expertise in data analysis and machine learning to protect one of our most vital resources, ensuring sustainable and impactful outcomes for communities and future generations.
** Why are you interested in the sector stated above?
What draws me to the water sector is the amount of possibilities there are when it comes to creating positive impact to society. I believe in environmental stewardship, and through the use of technology, this offers a unique chance to address critical global issues, and solve them as well! Joining this sector would allow me to grow as an individual, and to apply my technical skills and experience in data analysis and machine learning to ensure that impactful outcomes are achieved.
* Sinara
** Use this section to describe your technical experience such as programming languages, operating systems, hardware, databases etc. Give some indication of your level of proficiency in each. Include particular reference to your skills in C#/C++ and Java.
Technical Experience
C: Strong proficiency gained through academic projects focusing on operating systems and systems programming. I created a 3 tier TCP/IP client server CLI service as part of University project. C++: Moderate proficiency, developed through coursework and personal exploration of object oriented and systems programming. Currently learning more about this, I recently developped a c++ pomodorro CLI system (personal project). Java: Advanced expertise through academic projects, such as developing a note taking application (personal) using JavaFX and a database driven book catalog (University). This includes experience in object oriented programming and GUI development. TypeScript/Angular: Proficient in full stack development, notably using Angular for frontend development and integrating with Spring Boot backends. Used this for a web project that is now completed and using Spring boot with Typescript/Angular for a current web project. Databases PostgreSQL: Advanced proficiency demonstrated in team projects and personal development efforts, including a web application for football enthusiastic students (University Project) and a book catalog application. H2 Console: Experience in testing and managing in memory databases within Spring Boot applications. Operating Systems Linux: Competent in scripting and system management, with experience writing bash scripts and using Linux environments for development. I also use Linux as my daily driver, and I am getting more into emacs.
What was the purpose of the program. What part did you play in its development?
Football Finder Web Application Purpose: The program was designed to help users locate and join local football matches based on their preferences, such as location, skill level, and availability. The goal was to increase engagement in local sports communities and make match organisation easier. My Role: As the team leader, I oversaw code commits, pull requests, and task allocations using a Kanban board. I actively contributed to both the frontend and backend, focusing on user interface enhancements and optimising the backend logic for booking pitches Lessons Learned: I improved my ability to lead a team and manage project workflows effectively. I strengthened my skills in user centered design, ensuring the interface met user expectations, this was done through collating feedback. I learned the importance of clear communication and fostering a supportive environment within the team.
What steps did you take before starting to write code?
Before starting the Football Finder Web Application, I liaised with the team to define user requirements, focusing on features like location based match searches and skill level filtering. We researched existing solutions, identified gaps, and selected a tech stack of Angular, Spring Boot, and PostgreSQL. I created user personas, wireframes, and prototypes to visualise the UI and flow, while also designing the database schema (using JDL) and API endpoints. A Kanban board was established for task management, and we broke the project into sprints with clear milestones. Finally, we outlined a testing strategy, including unit, integration, and user acceptance testing, to ensure the application met user needs and functioned seamlessly.
How was the software tested?
The Football Finder Web Application was tested using a strategy to ensure functionality and reliability. Unit tests were written for individual components and backend services to validate isolated functionality. To test API endpoints we used SwaggerUI. User acceptance testing involved gathering feedback from a small group of target users to evaluate the usability and effectiveness of the application. Automated tests were implemented for repetitive checks, and manual testing focused on edge cases, such as invalid input handling and network interruptions. Finally, the application was deployed in a staging environment to simulate real world usage and identify any final issues before production.
What problems did you encounter and how did you deal with them?
During the development of the Football Finder Web Application, we encountered several challenges. One major issue was ensuring accurate location based match recommendations, which we resolved by integrating and testing multiple geolocation APIs to find the most reliable solution. Another problem was maintaining data consistency during simultaneous updates to the match database, which we addressed by implementing transaction management and locking mechanisms in PostgreSQL. Cross browser compatibility issues arose in the frontend, which we fixed by rigorously testing on different browsers and applying appropriate SCSS fixes (alot of global stylings had to be rewritten). Lastly, communication delays within the team occasionally slowed progress, so we introduced more frequent stand ups and better use of task management tools to improve collaboration and streamline workflows.
With hindsight, what would you have done differently?
With hindsight, I would have allocated more time to user research and feedback during the initial planning stages to better align the application's features with user needs. Additionally, I would have implemented our own automated deployment pipelines earlier to streamline the testing and staging process as opposed to using the one the University provided, allowing us to learn more about devops and have more control over the project. Lastly, setting clearer communication protocols from the outset could have minimised delays, ensuring smoother collaboration and faster resolution of blockers.
What are your personal career goals?
- Develop expertise in full-stack development, machine learning, and cloud computing. - Contribute to open source projects (currently going into emacs and MELPA packages) - Lead impactful projects that give back to the community. - Take on leadership roles to guide teams in delivering applications and solutions.
Please use this space to provide any other information you feel would support your application. For example: Other experience or awards, positions of responsibility, hobbies and interests.
- I love language learning and reading literature in other languages. - I really enjoy reading about other people's experiences with GTD (getting things done) and use these as inspiration for my own system - I am currently getting into embedded programming. - I am a regular gym goer and love cooking. - I also enjoy tinkering with cars and modding them.
* BT
** Cover Letter:
[[file:~/master-folder/CV's/Cover Letter/btgroup/BT_group_cl.pdf][file]]
Dear Hiring Manager,
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing role. If you are looking for a passionate software engineer and problem solver with experience extending into other disciplines, then I believe I'm the perfect candidate for the role.
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction; this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising data on a networking module, and for various scripting purposes.
Beyond this, I also work as a tutor at Tutors United, where I teach Mathematics and English to students coming from lower socio-economic backgrounds, and who are neurodiverse. This experience has taught me many things, two that are notable are communication and adaptability. These two skills together have taught me the importance of understanding as well as addressing challenges, which I believe will translate well at BT group, where challenges are primarily user centric.
What draws me most to BT group is their commitment to using technology to bring good to the community. This, I would say, is one of the reasons I decided to go into the field of tech, which was to help others. BT group achieves this in various ways, ranging from addressing climate change to enhancing cybersecurity. I would be really ecstatic to apply my skills in various programming languages and tools such as Git, Ansible, and Terraform, coupled with my foundational knowledge of cloud services like AWS and Oracle cloud to the mission of BT group, which is to develop high performance and well tested code to bring about a greater benefit to the community.
I am enthusiastic about joining the graduate program; it is a core principle of mine that continuous learning will propel one to unimaginable heights, and I firmly believe that BT group will be able to provide the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
* Panoptech
** Cover Letter:
Dear Hiring Manager,
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing role. If you are looking for a passionate software engineer and problem solver with experience extending into DevOps, then I believe I'm the perfect candidate for the role.
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction; this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising data on a networking module, and for various scripting purposes.
In addition to my technical background, I have experience with DevOps tools, including Ansible, Docker, and Jenkins, gained through self learning and practical application. I am also familiar with bash scripting, which is something I find myself coming back to whenever I want to automate something; this I usually do in bash and python, occasionally, for no particular reason, I would use Haskell to write scripts. I am certain that these skills will allow me to support the development team in managing the DevOps toolchain.
I also use Linux as my daily drivers, I have dual booted quite a few machines, some running Ubuntu some running Mint. I also have experience in virutalisation software; this was when I needed to host a local database, hence I fired up a virtual machine running minimal Ubuntu and kept a PSQL server on there.
I am enthusiastic about joining the Panoptech; it is a core principle of mine that continuous learning will propel one to unimaginable heights, and I firmly believe that Panoptech will be able to provide the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
* buro happold
[[file:~/master-folder/CV's/Cover Letter/buro_happald/Buro_Happold_CL.pdf][file]]
** cl - SAME AS BT
Dear Hiring Manager,
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing
role. If you are looking for a passionate Digital Technologist and problem solver with experience
extending into other disciplines, then I believe I'm the perfect candidate for the role.
There are two things I have always been interested in growing up: Technology and Problem
solving. My technical journey began when I joined the University of Birmingham, where I have
developed solid foundations in data analysis, software development and problem solving. One
of the biggest projects I have worked on was a football finding web app which I was entrusted
to lead and resulted in a 14% increase in user satisfaction; this was built using Java Spring Boot,
Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising
data on a networking module, and for various scripting purposes.
Beyond this, I also work as a tutor at Tutors United, where I teach Mathematics and English to
students coming from lower socio-economic backgrounds, and who are neurodiverse. This
experience has taught me many things, two that are notable are communication and
adaptability. These two skills together have taught me the importance of understanding as well
as addressing challenges, which I believe will translate well at Buro Happold, where challenges
are primarily user centric.
What draws me most to Buro Happold is their commitment to using technology to bring good
to the community. This, I would say, is one of the reasons I decided to go into the field of tech,
which was to help others. Buro Happold achieves this in various ways, from designing modular
systems that reduce costs while enhancing the learning experience for institutions like Kuwait
University, to implementing advanced technologies at landmark sites like the Louvre Abu Dhabi,
ensuring seamless visitor experiences and operational efficiency.
I am enthusiastic about joining the company; it is a core principle of mine that continuous
learning will propel one to unimaginable heights, and I firmly believe that Buro Happold will be
able to provide the means to make that happen. Thank you for considering my application, I
look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
* Experian
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing role. If you are looking for a passionate software engineer and problem solver with experience extending into other disciplines, then I believe I'm the perfect candidate for the role.
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction, this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising data on a networking module, and for various scripting purposes.
Beyond this, I also work as a tutor at Tutors United, where I teach Mathematics and English to students coming from lower socio-economic backgrounds, and who are neurodiverse. This experience has taught me many things, two that are notable are communication and adaptability. These two skills together have taught me the importance of understanding as well as addressing challenges, which I believe will translate well at Experian, where challenges are primarily user centric.
What draws me most to Experian is their commitment to using technology to bring good to the community. This, I would say, is one of the reasons I decided to go into the field of tech, which was to help others. Experian achieves this in various ways, ranging from addressing climate change to enhancing cybersecurity. I would be really ecstatic to apply my skills in various programming languages and tools such as Java, Angular/Typescript and git, coupled with my foundational knowledge of cloud services like AWS and Oracle cloud to the mission of Experian, which is to develop high performance and well tested code to bring about a greater benefit to the community.
I am enthusiastic about joining the graduate program, it is a core principle of mine that continuous learning will propel one to unimaginable heights, and I firmly believe that Experian will be able to provide the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
* Cambridge Consultants
Dear Hiring Manager,
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing role. If you are looking for a passionate embedded software engineer and problem solver with experience extending into DevOps and low-level programming, then I believe I'm the perfect candidate for the role.
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction; this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising data on a networking module, and for various scripting purposes.
In addition to my technical background, I have experience with DevOps tools, including Ansible, Docker, and Jenkins, gained through self learning and practical application. I am also familiar with bash scripting, which is something I find myself coming back to whenever I want to automate something; this I usually do in bash and python, occasionally, for the purpose of challenging myself, I would use Haskell to write scripts. In addition, I write scripts that allow me to communicate with hardware connected to a raspberry Pi; whenever I have the free time, I dive into embedded programming as this is a huge interest of mine. I am certain that these skills will allow me to support the team in solving real client problems at Cambridge Consultants.
I also use Linux as my daily drivers, I have dual booted quite a few machines, some running Ubuntu some running Mint. I also have experience in virutalisation software; this was when I needed to host a local database, hence I fired up a virtual machine running minimal Ubuntu and kept a PSQL server on there.
I am enthusiastic about joining the Cambridge Consultants; it is a core principle of mine that continuous learning will propel one to unimaginable heights, and I firmly believe that Cambridge Consultants will be able to provide the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
* Adelphi Real World
Dear Hiring Manager,
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing role. If you are looking for a passionate problem solver with a strong foundation in data analysis and a drive to deliver precise and efficient solutions, I believe I am the ideal candidate for this role.
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction, this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising data on a networking module, and for various scripting purposes.
Beyond this, I also work as a tutor at Tutors United, where I teach Mathematics and English to students coming from lower socio-economic backgrounds, and who are neurodiverse. This experience has taught me many things, two that are notable are communication and adaptability. These two skills together have taught me the importance of understanding as well as addressing challenges, which I believe will translate well at Adelphi, where challenges are primarily user centric.
What draws me most to Adelphi Real World is their commitment to leveraging real world data to improve healthcare outcomes. The mere prospect of contributing to this mission by using tools like SPSS, Confirmit, and Excel, and supporting fieldwork and data processing, aligns perfectly with my dream of using technology to help others. I would be really ecstatic to apply my analytical skills, programming knowledge, and meticulous attention to detail to bring about a greater benefit to Adelphi, the healthcare sector and the community.
I am enthusiastic about joining this esteemed organisation, it is a core principle of mine that continuous learning will propel one to unimaginable heights, and I firmly believe that Adelphi Real World will be able to provide the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
* Midland Heart
Dear Hiring Manager,
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing role. If you are looking for a passionate problem solver with a strong foundation in data analysis and a drive to deliver precise and efficient solutions, I believe I am the ideal candidate for this role.
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction, this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising data on a networking module, and for various scripting purposes.
Beyond this, I also work as a tutor at Tutors United, where I teach Mathematics and English to students coming from lower socio-economic backgrounds, and who are neurodiverse. This experience has taught me many things, two that are notable are communication and adaptability. These two skills together have taught me the importance of understanding as well as addressing challenges, which I believe will translate well at Midland Heart, where challenges are primarily user centric.
What draws me most to Midland Heart is their commitment to leveraging real world data to improve tenancy outcomes. The mere prospect of contributing to this mission by using tools like Power Bi, Python, and Cloud Services, and supporting fieldwork and data processing, aligns perfectly with my dream of using technology to help others. I would be ecstatic to apply my analytical skills, programming knowledge, and meticulous attention to detail to bring about a greater benefit to Midland Heart, the housing sector and the community.
I am enthusiastic about joining this esteemed organisation, it is a core principle of mine that continuous learning will propel one to unimaginable heights, and I firmly believe that Midland Heart will be able to provide the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
* EDW
Dear Hiring Manager,
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing role. If you are looking for a passionate Software Tester and problem solver with experience extending into other disciplines, then I believe I'm the perfect candidate for the role.
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction; this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising data on a networking module, and for various scripting purposes.
Beyond this, I also work as a tutor at Tutors United, where I teach Mathematics and English to students coming from lower socio-economic backgrounds, and who are neurodiverse. This experience has taught me many things, two that are notable are communication and adaptability. These two skills together have taught me the importance of understanding as well as addressing challenges, which I believe will translate well at EDW Technology, where challenges are primarily user centric.
What draws me most to EDW Technology is their commitment to using technology to bring good to the community. This, I would say, is one of the reasons I decided to go into the field of tech, which was to help others. EDW Technology achieves this in various ways, ranging from creating energy management tools to providing user focused solutions. I would be ecstatic to apply my skills in various programming languages and tools such as Java, Swagger, and Git, coupled with my foundational knowledge of cloud services like AWS and Oracle cloud to the mission of EDW Technology, which is to develop high performance and well tested code to bring about a greater benefit to the community.
I am enthusiastic about joining the graduate program; it is a core principle of mine that continuous learning will propel one to unimaginable heights, and I firmly believe that EDW Technology will be able to provide the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
* DCA
Dear Hiring Manager,
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing role. If you are looking for a passionate software engineer and problem solver with experience extending into other disciplines, then I believe I'm the perfect candidate for the role.
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction; this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising data on a networking module, and for various scripting purposes. I have also built a full stack NLP/AI powered note taking web application to address the issue of cognitive overload.
Beyond this, I also work as a tutor at Tutors United, where I teach Mathematics and English to students coming from lower socio-economic backgrounds, and who are neurodiverse. This experience has taught me many things, two that are notable are communication and adaptability. These two skills together have taught me the importance of understanding as well as addressing challenges, which I believe will translate well at DCA, where challenges are primarily user centric.
What draws me most to DCA is their commitment to using technology to bring good to the community. This, I would say, is one of the reasons I decided to go into the field of tech, which was to help others. DCA achieves this in various ways, ranging from addressing novel transport solutions to developing safety-critical medical devices. I would be really ecstatic to apply my skills in various programming languages and tools such as Git, Docker, and Nginx, coupled with my foundational knowledge of cloud services like AWS and Oracle cloud to the mission of DCA, which is to develop high performance and well tested code to bring about a greater benefit to the community
I am enthusiastic about joining the graduate program; it is a core principle of mine that continuous learning will propel one to unimaginable heights, and I firmly believe that DCA will be able to provide the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
* emp
Describe something you have done that you are proud of. (Word limit 250 words)
One of the proudest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction; this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. However, my proudest work to date was a full stack web application that utilises AI and NLP to reduce cognitive overload faced in students. This was an ongoing long-term project and has taken me 7 months to complete. I used Spring Boot, Angular/Typescript along with Python scripting.
How can you demonstrate your current curiosity around technology to us? (Word Limit 250 words)
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. I find myself more so immersed in technical related hobbies such as ricing a Linux distro, configuration of Emacs, tinkering with embedded programming using Raspberry Pi.
Can you describe to us a scenario where you have demonstrated either creativity, innovation or originality (Word Limit 250 words)
One of the most innovative projects I have worked on was my AI-assisted note-taking web application, designed to combat cognitive overload in students. The challenge was to create an intuitive system that could process and summarise lecture content efficiently while al-lowing students to interact with it seamlessly. I thus decided on using OpenAIs API for basic requests (intelligence enhanced which allowed it to see what the user is doing through parsing the canvas object), natural language processing (NLP), integrating it with an Angular TypeScript frontend and a Spring Boot backend.
What made this project particularly creative was my decision to incorporate adaptive sum-marisation, meaning the AI tailors the level of detail in notes based on the users prefer-ences and previous study patterns. Unlike traditional note-taking applications, this one con-tinuously learns from user behavior, refining its output over time. Furthermore, I used YAKE and TF-IDF to extract keywords from the notes, as well as NER (named entity recognition).

269
20241211161232-applications.org~ Executable file
View File

@@ -0,0 +1,269 @@
:PROPERTIES:
:ID: f9897f8e-2b63-4ad2-a55f-3787c4ac235f
:END:
#+title: Applications
#+filetags: :pre-career:applications:
#+STARTUP: overview
* Modules:
1st year
- Data structures and Algorithms
- Object Oriented Programming
- Mathematical and Logical foundations of computer science
- Full stack software development
- Artificial Intelligence 1
- Theories of computation
2nd year
- Team Project (77%)
- Security and Networks (72%)
- Functional Programming (87%)
- Software Engineering and Professional Practice (81%)
- Artificial Intelligence 2 (75%)
- Operating Systems and Systems Programming (66%)
3rd Year
- Final Year Project
- Advanced Networking
- Advanced Functional Programming
- Intelligent Software Engineering
- Teaching Computer Science in Schools
Mathematics A level: A
French A level: B
Business A level: A
Maths GCSE: 9
English GCSE: 6
* Stantec
** Cover letter:
[[file:/home/zaine/master-folder/CV's/Cover Letter/Santec/Santec.pdf][File]]
*CONTAINS SPELLING MISTAKES - USE BT ONE*
I would firstly like to extend my gratidute for giving me the opportunity to apply for an amazing role. If you are looking for a passionate data analyst and problem solver with experience extending into software development, then I believe I'm the perfect candidate for the role.
Growing up, I have always been interested in two things: Tech and problem solving. My technical journey began when I joined the University Of Birmingham, wherein I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead, and resulted in a 14% increase in user satisfaction. In addition, I used Python for the visualization of data on a networking module and have been using PostgreSQL throughout my degree.
Upon inspecting the requirements from the description, I have listed below my top three skills which I believe would make me most suited for this role:
- Data Analysis and Visualisation: I developed a Java based note taking application, where I used JavaFX and a database (PSQL).
- Database Management: Created and maintained databases using PostgreSQL for various projects, some were hosted locally, some on the cloud and some on virtual machines.
- Innovative Thinking: Currently integrating machine learning algorithms into a note taking platform tailored for neurodiverse students specifically.
Stantec has a commitment to two main things which really resonate and encouraged me to apply: sustainability and innovation. The Surface Water Assessor and Flood Prediction Tools are innovations that really inspire a person, and it only encourages me more to use the knowledge I am fortunate to have gained to help and make meaningful impact to society.
I am enthusiastic about joining the graduate program; it is a core principle of mine that continous learning will propel one to unimaginable heights, and I firmly believe that Santec will be able to provice the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
I am deeply drawn to the water sector because it sits at the intersection of environmental stewardship and technological innovation, offering a unique opportunity to address critical global challenges. With increasing droughts and floods revealing vulnerabilities in water systems, I am inspired by the chance to contribute to solutions that promote water conservation, resilience, and equitable access. Joining this sector allows me to apply my technical expertise in data analysis and machine learning to protect one of our most vital resources, ensuring sustainable and impactful outcomes for communities and future generations.
** Why are you interested in the sector stated above?
What draws me to the water sector is the amount of possibilities there are when it comes to creating positive impact to society. I believe in environmental stewardship, and through the use of technology, this offers a unique chance to address critical global issues, and solve them as well! Joining this sector would allow me to grow as an individual, and to apply my technical skills and experience in data analysis and machine learning to ensure that impactful outcomes are achieved.
* Sinara
** Use this section to describe your technical experience such as programming languages, operating systems, hardware, databases etc. Give some indication of your level of proficiency in each. Include particular reference to your skills in C#/C++ and Java.
Technical Experience
C: Strong proficiency gained through academic projects focusing on operating systems and systems programming. I created a 3 tier TCP/IP client server CLI service as part of University project. C++: Moderate proficiency, developed through coursework and personal exploration of object oriented and systems programming. Currently learning more about this, I recently developped a c++ pomodorro CLI system (personal project). Java: Advanced expertise through academic projects, such as developing a note taking application (personal) using JavaFX and a database driven book catalog (University). This includes experience in object oriented programming and GUI development. TypeScript/Angular: Proficient in full stack development, notably using Angular for frontend development and integrating with Spring Boot backends. Used this for a web project that is now completed and using Spring boot with Typescript/Angular for a current web project. Databases PostgreSQL: Advanced proficiency demonstrated in team projects and personal development efforts, including a web application for football enthusiastic students (University Project) and a book catalog application. H2 Console: Experience in testing and managing in memory databases within Spring Boot applications. Operating Systems Linux: Competent in scripting and system management, with experience writing bash scripts and using Linux environments for development. I also use Linux as my daily driver, and I am getting more into emacs.
What was the purpose of the program. What part did you play in its development?
Football Finder Web Application Purpose: The program was designed to help users locate and join local football matches based on their preferences, such as location, skill level, and availability. The goal was to increase engagement in local sports communities and make match organisation easier. My Role: As the team leader, I oversaw code commits, pull requests, and task allocations using a Kanban board. I actively contributed to both the frontend and backend, focusing on user interface enhancements and optimising the backend logic for booking pitches Lessons Learned: I improved my ability to lead a team and manage project workflows effectively. I strengthened my skills in user centered design, ensuring the interface met user expectations, this was done through collating feedback. I learned the importance of clear communication and fostering a supportive environment within the team.
What steps did you take before starting to write code?
Before starting the Football Finder Web Application, I liaised with the team to define user requirements, focusing on features like location based match searches and skill level filtering. We researched existing solutions, identified gaps, and selected a tech stack of Angular, Spring Boot, and PostgreSQL. I created user personas, wireframes, and prototypes to visualise the UI and flow, while also designing the database schema (using JDL) and API endpoints. A Kanban board was established for task management, and we broke the project into sprints with clear milestones. Finally, we outlined a testing strategy, including unit, integration, and user acceptance testing, to ensure the application met user needs and functioned seamlessly.
How was the software tested?
The Football Finder Web Application was tested using a strategy to ensure functionality and reliability. Unit tests were written for individual components and backend services to validate isolated functionality. To test API endpoints we used SwaggerUI. User acceptance testing involved gathering feedback from a small group of target users to evaluate the usability and effectiveness of the application. Automated tests were implemented for repetitive checks, and manual testing focused on edge cases, such as invalid input handling and network interruptions. Finally, the application was deployed in a staging environment to simulate real world usage and identify any final issues before production.
What problems did you encounter and how did you deal with them?
During the development of the Football Finder Web Application, we encountered several challenges. One major issue was ensuring accurate location based match recommendations, which we resolved by integrating and testing multiple geolocation APIs to find the most reliable solution. Another problem was maintaining data consistency during simultaneous updates to the match database, which we addressed by implementing transaction management and locking mechanisms in PostgreSQL. Cross browser compatibility issues arose in the frontend, which we fixed by rigorously testing on different browsers and applying appropriate SCSS fixes (alot of global stylings had to be rewritten). Lastly, communication delays within the team occasionally slowed progress, so we introduced more frequent stand ups and better use of task management tools to improve collaboration and streamline workflows.
With hindsight, what would you have done differently?
With hindsight, I would have allocated more time to user research and feedback during the initial planning stages to better align the application's features with user needs. Additionally, I would have implemented our own automated deployment pipelines earlier to streamline the testing and staging process as opposed to using the one the University provided, allowing us to learn more about devops and have more control over the project. Lastly, setting clearer communication protocols from the outset could have minimised delays, ensuring smoother collaboration and faster resolution of blockers.
What are your personal career goals?
- Develop expertise in full-stack development, machine learning, and cloud computing. - Contribute to open source projects (currently going into emacs and MELPA packages) - Lead impactful projects that give back to the community. - Take on leadership roles to guide teams in delivering applications and solutions.
Please use this space to provide any other information you feel would support your application. For example: Other experience or awards, positions of responsibility, hobbies and interests.
- I love language learning and reading literature in other languages. - I really enjoy reading about other people's experiences with GTD (getting things done) and use these as inspiration for my own system - I am currently getting into embedded programming. - I am a regular gym goer and love cooking. - I also enjoy tinkering with cars and modding them.
* BT
** Cover Letter:
[[file:~/master-folder/CV's/Cover Letter/btgroup/BT_group_cl.pdf][file]]
Dear Hiring Manager,
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing role. If you are looking for a passionate software engineer and problem solver with experience extending into other disciplines, then I believe I'm the perfect candidate for the role.
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction; this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising data on a networking module, and for various scripting purposes.
Beyond this, I also work as a tutor at Tutors United, where I teach Mathematics and English to students coming from lower socio-economic backgrounds, and who are neurodiverse. This experience has taught me many things, two that are notable are communication and adaptability. These two skills together have taught me the importance of understanding as well as addressing challenges, which I believe will translate well at BT group, where challenges are primarily user centric.
What draws me most to BT group is their commitment to using technology to bring good to the community. This, I would say, is one of the reasons I decided to go into the field of tech, which was to help others. BT group achieves this in various ways, ranging from addressing climate change to enhancing cybersecurity. I would be really ecstatic to apply my skills in various programming languages and tools such as Git, Ansible, and Terraform, coupled with my foundational knowledge of cloud services like AWS and Oracle cloud to the mission of BT group, which is to develop high performance and well tested code to bring about a greater benefit to the community.
I am enthusiastic about joining the graduate program; it is a core principle of mine that continuous learning will propel one to unimaginable heights, and I firmly believe that BT group will be able to provide the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
* Panoptech
** Cover Letter:
Dear Hiring Manager,
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing role. If you are looking for a passionate software engineer and problem solver with experience extending into DevOps, then I believe I'm the perfect candidate for the role.
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction; this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising data on a networking module, and for various scripting purposes.
In addition to my technical background, I have experience with DevOps tools, including Ansible, Docker, and Jenkins, gained through self learning and practical application. I am also familiar with bash scripting, which is something I find myself coming back to whenever I want to automate something; this I usually do in bash and python, occasionally, for no particular reason, I would use Haskell to write scripts. I am certain that these skills will allow me to support the development team in managing the DevOps toolchain.
I also use Linux as my daily drivers, I have dual booted quite a few machines, some running Ubuntu some running Mint. I also have experience in virutalisation software; this was when I needed to host a local database, hence I fired up a virtual machine running minimal Ubuntu and kept a PSQL server on there.
I am enthusiastic about joining the Panoptech; it is a core principle of mine that continuous learning will propel one to unimaginable heights, and I firmly believe that Panoptech will be able to provide the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
* buro happold
[[file:~/master-folder/CV's/Cover Letter/buro_happald/Buro_Happold_CL.pdf][file]]
** cl - SAME AS BT
Dear Hiring Manager,
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing
role. If you are looking for a passionate Digital Technologist and problem solver with experience
extending into other disciplines, then I believe I'm the perfect candidate for the role.
There are two things I have always been interested in growing up: Technology and Problem
solving. My technical journey began when I joined the University of Birmingham, where I have
developed solid foundations in data analysis, software development and problem solving. One
of the biggest projects I have worked on was a football finding web app which I was entrusted
to lead and resulted in a 14% increase in user satisfaction; this was built using Java Spring Boot,
Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising
data on a networking module, and for various scripting purposes.
Beyond this, I also work as a tutor at Tutors United, where I teach Mathematics and English to
students coming from lower socio-economic backgrounds, and who are neurodiverse. This
experience has taught me many things, two that are notable are communication and
adaptability. These two skills together have taught me the importance of understanding as well
as addressing challenges, which I believe will translate well at Buro Happold, where challenges
are primarily user centric.
What draws me most to Buro Happold is their commitment to using technology to bring good
to the community. This, I would say, is one of the reasons I decided to go into the field of tech,
which was to help others. Buro Happold achieves this in various ways, from designing modular
systems that reduce costs while enhancing the learning experience for institutions like Kuwait
University, to implementing advanced technologies at landmark sites like the Louvre Abu Dhabi,
ensuring seamless visitor experiences and operational efficiency.
I am enthusiastic about joining the company; it is a core principle of mine that continuous
learning will propel one to unimaginable heights, and I firmly believe that Buro Happold will be
able to provide the means to make that happen. Thank you for considering my application, I
look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
* Experian
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing role. If you are looking for a passionate software engineer and problem solver with experience extending into other disciplines, then I believe I'm the perfect candidate for the role.
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction, this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising data on a networking module, and for various scripting purposes.
Beyond this, I also work as a tutor at Tutors United, where I teach Mathematics and English to students coming from lower socio-economic backgrounds, and who are neurodiverse. This experience has taught me many things, two that are notable are communication and adaptability. These two skills together have taught me the importance of understanding as well as addressing challenges, which I believe will translate well at Experian, where challenges are primarily user centric.
What draws me most to Experian is their commitment to using technology to bring good to the community. This, I would say, is one of the reasons I decided to go into the field of tech, which was to help others. Experian achieves this in various ways, ranging from addressing climate change to enhancing cybersecurity. I would be really ecstatic to apply my skills in various programming languages and tools such as Java, Angular/Typescript and git, coupled with my foundational knowledge of cloud services like AWS and Oracle cloud to the mission of Experian, which is to develop high performance and well tested code to bring about a greater benefit to the community.
I am enthusiastic about joining the graduate program, it is a core principle of mine that continuous learning will propel one to unimaginable heights, and I firmly believe that Experian will be able to provide the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
* Cambridge Consultants
Dear Hiring Manager,
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing role. If you are looking for a passionate embedded software engineer and problem solver with experience extending into DevOps and low-level programming, then I believe I'm the perfect candidate for the role.
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction; this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising data on a networking module, and for various scripting purposes.
In addition to my technical background, I have experience with DevOps tools, including Ansible, Docker, and Jenkins, gained through self learning and practical application. I am also familiar with bash scripting, which is something I find myself coming back to whenever I want to automate something; this I usually do in bash and python, occasionally, for the purpose of challenging myself, I would use Haskell to write scripts. In addition, I write scripts that allow me to communicate with hardware connected to a raspberry Pi; whenever I have the free time, I dive into embedded programming as this is a huge interest of mine. I am certain that these skills will allow me to support the team in solving real client problems at Cambridge Consultants.
I also use Linux as my daily drivers, I have dual booted quite a few machines, some running Ubuntu some running Mint. I also have experience in virutalisation software; this was when I needed to host a local database, hence I fired up a virtual machine running minimal Ubuntu and kept a PSQL server on there.
I am enthusiastic about joining the Cambridge Consultants; it is a core principle of mine that continuous learning will propel one to unimaginable heights, and I firmly believe that Cambridge Consultants will be able to provide the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
* Adelphi Real World
Dear Hiring Manager,
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing role. If you are looking for a passionate problem solver with a strong foundation in data analysis and a drive to deliver precise and efficient solutions, I believe I am the ideal candidate for this role.
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction, this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising data on a networking module, and for various scripting purposes.
Beyond this, I also work as a tutor at Tutors United, where I teach Mathematics and English to students coming from lower socio-economic backgrounds, and who are neurodiverse. This experience has taught me many things, two that are notable are communication and adaptability. These two skills together have taught me the importance of understanding as well as addressing challenges, which I believe will translate well at Adelphi, where challenges are primarily user centric.
What draws me most to Adelphi Real World is their commitment to leveraging real world data to improve healthcare outcomes. The mere prospect of contributing to this mission by using tools like SPSS, Confirmit, and Excel, and supporting fieldwork and data processing, aligns perfectly with my dream of using technology to help others. I would be really ecstatic to apply my analytical skills, programming knowledge, and meticulous attention to detail to bring about a greater benefit to Adelphi, the healthcare sector and the community.
I am enthusiastic about joining this esteemed organisation, it is a core principle of mine that continuous learning will propel one to unimaginable heights, and I firmly believe that Adelphi Real World will be able to provide the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
* Midland Heart
Dear Hiring Manager,
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing role. If you are looking for a passionate problem solver with a strong foundation in data analysis and a drive to deliver precise and efficient solutions, I believe I am the ideal candidate for this role.
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction, this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising data on a networking module, and for various scripting purposes.
Beyond this, I also work as a tutor at Tutors United, where I teach Mathematics and English to students coming from lower socio-economic backgrounds, and who are neurodiverse. This experience has taught me many things, two that are notable are communication and adaptability. These two skills together have taught me the importance of understanding as well as addressing challenges, which I believe will translate well at Midland Heart, where challenges are primarily user centric.
What draws me most to Midland Heart is their commitment to leveraging real world data to improve tenancy outcomes. The mere prospect of contributing to this mission by using tools like Power Bi, Python, and Cloud Services, and supporting fieldwork and data processing, aligns perfectly with my dream of using technology to help others. I would be ecstatic to apply my analytical skills, programming knowledge, and meticulous attention to detail to bring about a greater benefit to Midland Heart, the housing sector and the community.
I am enthusiastic about joining this esteemed organisation, it is a core principle of mine that continuous learning will propel one to unimaginable heights, and I firmly believe that Midland Heart will be able to provide the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
* EDW
Dear Hiring Manager,
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing role. If you are looking for a passionate Software Tester and problem solver with experience extending into other disciplines, then I believe I'm the perfect candidate for the role.
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction; this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising data on a networking module, and for various scripting purposes.
Beyond this, I also work as a tutor at Tutors United, where I teach Mathematics and English to students coming from lower socio-economic backgrounds, and who are neurodiverse. This experience has taught me many things, two that are notable are communication and adaptability. These two skills together have taught me the importance of understanding as well as addressing challenges, which I believe will translate well at EDW Technology, where challenges are primarily user centric.
What draws me most to EDW Technology is their commitment to using technology to bring good to the community. This, I would say, is one of the reasons I decided to go into the field of tech, which was to help others. EDW Technology achieves this in various ways, ranging from creating energy management tools to providing user focused solutions. I would be ecstatic to apply my skills in various programming languages and tools such as Java, Swagger, and Git, coupled with my foundational knowledge of cloud services like AWS and Oracle cloud to the mission of EDW Technology, which is to develop high performance and well tested code to bring about a greater benefit to the community.
I am enthusiastic about joining the graduate program; it is a core principle of mine that continuous learning will propel one to unimaginable heights, and I firmly believe that EDW Technology will be able to provide the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
* DCA
Dear Hiring Manager,
I would firstly like to extend my gratitude for giving me the opportunity to apply for an amazing role. If you are looking for a passionate software engineer and problem solver with experience extending into other disciplines, then I believe I'm the perfect candidate for the role.
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. One of the biggest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction; this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. In addition, I find myself often using Python for visualising data on a networking module, and for various scripting purposes. I have also built a full stack NLP/AI powered note taking web application to address the issue of cognitive overload.
Beyond this, I also work as a tutor at Tutors United, where I teach Mathematics and English to students coming from lower socio-economic backgrounds, and who are neurodiverse. This experience has taught me many things, two that are notable are communication and adaptability. These two skills together have taught me the importance of understanding as well as addressing challenges, which I believe will translate well at DCA, where challenges are primarily user centric.
What draws me most to DCA is their commitment to using technology to bring good to the community. This, I would say, is one of the reasons I decided to go into the field of tech, which was to help others. DCA achieves this in various ways, ranging from addressing novel transport solutions to developing safety-critical medical devices. I would be really ecstatic to apply my skills in various programming languages and tools such as Git, Docker, and Nginx, coupled with my foundational knowledge of cloud services like AWS and Oracle cloud to the mission of DCA, which is to develop high performance and well tested code to bring about a greater benefit to the community
I am enthusiastic about joining the graduate program; it is a core principle of mine that continuous learning will propel one to unimaginable heights, and I firmly believe that DCA will be able to provide the means to make that happen. Thank you for considering my application, I look forward to discussing my candidacy further!
Warm regards,
Zaine-Ul-Abideen Qayyum
* emp
Describe something you have done that you are proud of. (Word limit 250 words)
One of the proudest projects I have worked on was a football finding web app which I was entrusted to lead and resulted in a 14% increase in user satisfaction; this was built using Java Spring Boot, Typescript/Angular and PostgreSQL. However, my proudest work to date was a full stack web application that utilises AI and NLP to reduce cognitive overload faced in students. This was an ongoing long-term project and has taken me 7 months to complete. I used Spring Boot, Angular/Typescript along with Python scripting.
How can you demonstrate your current curiosity around technology to us? (Word Limit 250 words)
There are two things I have always been interested in growing up: Technology and Problem solving. My technical journey began when I joined the University of Birmingham, where I have developed solid foundations in data analysis, software development and problem solving. I find myself more so immersed in technical related hobbies such as ricing a Linux distro, configuration of Emacs, tinkering with embedded programming using Raspberry Pi.
Can you describe to us a scenario where you have demonstrated either creativity, innovation or originality (Word Limit 250 words)
One of the most innovative projects I have worked on was my AI-assisted note-taking web application, designed to combat cognitive overload in students. The challenge was to create an intuitive system that could process and summarise lecture content efficiently while al-lowing students to interact with it seamlessly. I thus decided on using OpenAIs API for basic requests (intelligence enhanced which allowed it to see what the user is doing through parsing the canvas object), natural language processing (NLP), integrating it with an Angular TypeScript frontend and a Spring Boot backend.
What made this project particularly creative was my decision to incorporate adaptive sum-marisation, meaning the AI tailors the level of detail in notes based on the users prefer-ences and previous study patterns. Unlike traditional note-taking applications, this one con-tinuously learns from user behavior, refining its output over time. Furthermore, I used YAKE and TF-IDF to extract keywords from the notes, as well as NER (named entity recognition).

View File

@@ -0,0 +1,9 @@
:PROPERTIES:
:ID: fe5086b8-1941-4125-881a-65d01e1e7774
:END:
#+title: Career roam
#+filetags: :pre-career:index:
Microlise Assessment Centre: [[id:f877240e-c2c8-4087-84e5-4b1ca3fcd4ed][microlise-assessment]]

View File

@@ -0,0 +1,54 @@
:PROPERTIES:
:ID: 347d2663-515b-4d9a-9ee9-7706ee86a845
:END:
#+title: haskell_notes
#+filetags: :index:notes:haskell:coding:
* Haskell Notes
** Introduction
Haskell is a purely functional programming language with strong static typing and [[id:63456626-b34e-46d9-b85e-0f1f5724aa83][lazy_evaluation]] . It was named after the logician Haskell Curry. It is widely used in academia and industry for teaching and research as well as for writing industrial applications.
** Features of Haskell
- Purely Functional: Functions in Haskell are pure, meaning they don't have side effects.
- Strong Static Typing: Types are checked at compile time, reducing runtime errors.
- Lazy Evaluation: Expressions are not evaluated until their values are needed.
- Type Inference: Haskell can automatically infer types, making the code more concise.
- Concise Syntax: Haskell's syntax is clean and concise, making it easy to read and write.
** Getting Started with Haskell
- Installation: To get started with Haskell, you need to install the Glasgow Haskell Compiler (GHC). You can download it from [[https://www.haskell.org/downloads/][Download]]
- Basic Syntax:
- Comments: Single line comments start with `--`, and multi-line comments are enclosed within `{-` and `-}`.
- Modules: Code is organized into modules, which can be imported using the `import` keyword.
** Basic Concepts
- Functions: Functions are first-class citizens in Haskell. A function definition looks like this:
#+BEGIN_SRC haskell
add :: Int -> Int -> Int
add x y = x + y
#+END_SRC
This defines a function *add* that takes two integers and returns their sum.
- Types and Type Classes: Types are a crucial part of Haskell. You define types using the `data` keyword, and type classes using the `class` keyword.
** Example
Here's a simple example to demonstrate some basic features of Haskell:
#+BEGIN_SRC haskell
-- Define a new data type
data Shape = Circle Float | Rectangle Float Float
-- Define a function to calculate the area of a shape
area :: Shape -> Float
area (Circle r) = pi * r^2
area (Rectangle l w) = l * w
-- Example usage
main = do
let c = Circle 10
let r = Rectangle 5 7
print (area c)
print (area r)
#+END_SRC
This example defines a new data type Shape with two constructors, Circle and Rectangle, and a function area that calculates the area of a shape.

View File

@@ -0,0 +1,54 @@
:PROPERTIES:
:ID: 347d2663-515b-4d9a-9ee9-7706ee86a845
:END:
#+title: Haskell Notes
#+filetags: :technical:notes:haskell:coding:
* Haskell Notes
** Introduction
Haskell is a purely functional programming language with strong [[id:729441d1-51d5-4d94-8fe6-ff9ebb3f5739][Static Typing]] and [[id:63456626-b34e-46d9-b85e-0f1f5724aa83][Lazy Evaluation]]. It was named after the logician Haskell Curry. It is widely used in academia and industry for teaching and research as well as for writing industrial applications.
** Features of Haskell
- Purely Functional: Functions in Haskell are pure, meaning they don't have side effects.
- Strong Static Typing: Types are checked at compile time, reducing runtime errors.
- Lazy Evaluation: Expressions are not evaluated until their values are needed.
- Type Inference: Haskell can automatically infer types, making the code more concise.
- Concise Syntax: Haskell's syntax is clean and concise, making it easy to read and write.
** Getting Started with Haskell
- Installation: To get started with Haskell, you need to install the Glasgow Haskell Compiler (GHC). You can download it from [[https://www.haskell.org/downloads/][Download]]
- Basic Syntax:
- Comments: Single line comments start with `--`, and multi-line comments are enclosed within `{-` and `-}`.
- Modules: Code is organized into modules, which can be imported using the `import` keyword.
** Basic Concepts
- Functions: Functions are first-class citizens in Haskell. A function definition looks like this:
#+BEGIN_SRC haskell
add :: Int -> Int -> Int
add x y = x + y
#+END_SRC
This defines a function *add* that takes two integers and returns their sum.
- Types and Type Classes: Types are a crucial part of Haskell. You define types using the `data` keyword, and type classes using the `class` keyword.
** Example
Here's a simple example to demonstrate some basic features of Haskell:
#+BEGIN_SRC haskell
-- Define a new data type
data Shape = Circle Float | Rectangle Float Float
-- Define a function to calculate the area of a shape
area :: Shape -> Float
area (Circle r) = pi * r^2
area (Rectangle l w) = l * w
-- Example usage
main = do
let c = Circle 10
let r = Rectangle 5 7
print (area c)
print (area r)
#+END_SRC
This example defines a new data type Shape with two constructors, Circle and Rectangle, and a function area that calculates the area of a shape.

View File

@@ -0,0 +1,9 @@
:PROPERTIES:
:ID: 63456626-b34e-46d9-b85e-0f1f5724aa83
:END:
#+title: lazy_evaluation
#+filetags: :haskell:coding:notes:
See this article: [[https://medium.com/background-thread/what-is-lazy-evaluation-programming-word-of-the-day-8a6f4410053f][Lazy eval]]
There are two types of evaluation: strict and lazy

View File

@@ -0,0 +1,9 @@
:PROPERTIES:
:ID: 63456626-b34e-46d9-b85e-0f1f5724aa83
:END:
#+title: Lazy Evaluation
#+filetags: :haskell:coding:notes:
See this article: [[https://medium.com/background-thread/what-is-lazy-evaluation-programming-word-of-the-day-8a6f4410053f][Lazy eval]]
There are two types of evaluation: strict and lazy

9
20241213005125-c_notes.org Executable file
View File

@@ -0,0 +1,9 @@
:PROPERTIES:
:ID: 5a207a1c-6f02-40d5-b42e-38daaa0aec10
:END:
#+title: c_notes
#+filetags: :index:coding:notes:
[[id:efe0360d-8d81-4372-833d-ad58e67d17c6][socket_programming_in_c]]
[[id:d939e477-d1e9-43ea-960e-8727246d12a3][useful-c-imports]]

7
20241213005125-c_notes.org~ Executable file
View File

@@ -0,0 +1,7 @@
:PROPERTIES:
:ID: 5a207a1c-6f02-40d5-b42e-38daaa0aec10
:END:
#+title: c_notes
#+filetags: :index:coding:notes:
[[id:efe0360d-8d81-4372-833d-ad58e67d17c6][socket_programming_in_c]]

View File

@@ -0,0 +1,31 @@
:PROPERTIES:
:ID: efe0360d-8d81-4372-833d-ad58e67d17c6
:END:
#+title: socket_programming_in_c
#+filetags: :networking:coding:notes:
From: [[https://www.linuxhowtos.org/C_C++/socket.htm][Web Link]]
* Steps:
The steps involved in establishing a socket on the client side are as follows:
1. Create a socket with the socket() system call
2. Connect the socket to the address of the server using the connect() system call
3. Send and receive data. There are a number of ways to do this, but the simplest is to use the read() and write() system calls.
The steps involved in establishing a socket on the server side are as follows:
1. Create a socket with the socket() system call
2. Bind the socket to an address using the bind() system call. For a server socket on the Internet, an address consists of a port number on the host machine.
3. Listen for connections with the listen() system call
4. Accept a connection with the accept() system call. This call typically blocks until a client connects with the server.
5. Send and receive data
* Socket types:
When you create a socket, you must specify the *address domain* and the *socket type*, the client and server can only communicate if they are of the same type and in the same domain.
The two most common address domains:
- unix domain (they share common file system)
- internet domain
The two most common socket types:
- stream sockets (continuous stream of characters) - uses tcp
- datagram sockets (reads the entire messages at once) - uses dp

View File

@@ -0,0 +1,31 @@
:PROPERTIES:
:ID: efe0360d-8d81-4372-833d-ad58e67d17c6
:END:
#+title: Socket Programming in C
#+filetags: :networking:coding:notes:
From: [[https://www.linuxhowtos.org/C_C++/socket.htm][Web Link]]
* Steps:
The steps involved in establishing a socket on the client side are as follows:
1. Create a socket with the socket() system call
2. Connect the socket to the address of the server using the connect() system call
3. Send and receive data. There are a number of ways to do this, but the simplest is to use the read() and write() system calls.
The steps involved in establishing a socket on the server side are as follows:
1. Create a socket with the socket() system call
2. Bind the socket to an address using the bind() system call. For a server socket on the Internet, an address consists of a port number on the host machine.
3. Listen for connections with the listen() system call
4. Accept a connection with the accept() system call. This call typically blocks until a client connects with the server.
5. Send and receive data
* Socket types:
When you create a socket, you must specify the *address domain* and the *socket type*, the client and server can only communicate if they are of the same type and in the same domain.
The two most common address domains:
- unix domain (they share common file system)
- internet domain
The two most common socket types:
- stream sockets (continuous stream of characters) - uses tcp
- datagram sockets (reads the entire messages at once) - uses dp

246
20241217234535-web_port_notes.org Executable file
View File

@@ -0,0 +1,246 @@
:PROPERTIES:
:ID: 348df473-6443-4f4a-b366-95397b574989
:END:
#+title: web-port-notes
#+filetags: :index:docs:zzq:
* <2025-11-06 Thu> old sitemap for blogs:
(defun zz/2025-sitemap (title list)
"sitemap that lists 2025 links as bullet points with dates and tags."
(concat
"#+TITLE: " title "\n"
"#+OPTIONS: toc:nil num:nil \n\n"
"See the categories: @@html:<a href=\"../../categories.html\">Categories</a>@@\n\n"
"* 2025:\n"
(mapconcat
(lambda (entry)
(let* ((link (car entry))
;; extract relative file name from the link
(filename (if (string-match "\\[\\[file:\\([^]]+\\)\\]" link)
(match-string 1 link)
link))
(full-path (expand-file-name filename "~/master-folder/org_files/org_web/blogs/2025/"))
(date-str "no date")
(tags-str ""))
;; Get publish date
(let ((date (org-publish-find-date full-path org-publish-project-alist)))
(when date
(setq date-str (format-time-string "%d-%m-%Y %H:%M" date))))
;; Get FILETAGS from file buffer
(when (file-exists-p full-path)
(with-temp-buffer
(insert-file-contents full-path)
(org-mode)
(let* ((tags (cadr (assoc "FILETAGS" (org-collect-keywords '("FILETAGS"))))))
(when tags
(setq tags-str (mapconcat (lambda (tag)
(format "@@html:<a href=\"/tags/%s.html\"> <span class=\"post-tag\">%s</span> </a>@@" tag tag))
(split-string tags ":" t) ;; <- Splits by ":" and removes empty strings
" "))))))
;; Final line output
(format "- %s @@html:<span class=\"post-date\">%s</span>@@ %s" link date-str tags-str)))
(cdr list)
"\n")))
* Footnotes and sidenotes
Here is a list of macros:
#+begin_src emacs-lisp
(setq org-export-global-macros
(append
'(
("sidenote"
. "@@html:<label for=\"sn$1\" class=\"margin-toggle sidenote-number\"></label><input type=\"checkbox\" id=\"sn$1\" class=\"margin-toggle\"/><span class=\"sidenote\">$2</span>@@")
("epigraph" . "@@html:<div class=\"epigraph\"><blockquote>$1<footer>$2</footer></blockquote></div>@@")
("epigraph_single" . "@@html:<div class=\"epigraph\"><blockquote>$1</blockquote></div>@@")
("epigraph3" . "@@html:<div class=\"epigraph\"><blockquote>$1<footer>$2, <cite>$3</cite></footer></blockquote></div>@@")
("kbd" . "@@html:<kbd>$1</kbd>@@@@latex:\\texttt{$1}@@")
("margimg"
. "@@html:<aside class=\"marginnote\"><figure class=\"mn-fig\"><img src=\"$1\" alt=\"$2\" class=\"mn-img\" loading=\"lazy\" decoding=\"async\"/>$3</figure></aside>@@")
org-export-global-macros)))
#+end_src
They are used as follows:
{{{sidenote(1, The very first iteration of this website used the Angular framework\, only after a while I realised (as every Emacs lover does) that I want to make this an Emacs-centric project)}}}
Use footnotes as follows:
[fn:1]
then put them at the bottom with the respective information.
* Blorgz
** ideas:
### **Personal Growth & Self-Improvement**
1. **The Power of Journaling: How Writing Every Day Can Transform Your Life**
- Exploring the benefits of journaling for mental clarity, goal setting, and emotional processing.
2. **The Science of Happiness: What Really Makes Us Happy?**
- A deep dive into the psychology and neuroscience of happiness and how to apply it to daily life.
3. **Building a Growth Mindset: How to Shift from a Fixed to a Growth-Oriented Outlook**
- Practical steps and insights on adopting a growth mindset for personal and professional development.
4. **How to Set and Achieve Long-Term Goals**
- A structured approach to setting clear, actionable goals and staying motivated over time.
5. **Embracing Failure: How to Learn and Grow from Setbacks**
- Understanding the importance of failure and how to reframe it as an opportunity for growth.
### **Mental Health & Well-being**
6. **Dealing with Anxiety: Techniques to Cope and Build Resilience**
- Mindfulness, cognitive-behavioral strategies, and lifestyle changes that help manage anxiety.
7. **How to Build Emotional Intelligence (EQ) for Better Relationships**
- Tips for recognizing, understanding, and managing your own emotions, and how to navigate others' emotions.
8. **The Importance of Sleep for Mental and Physical Health**
- Why sleep is crucial for your overall well-being, along with tips for improving your sleep hygiene.
9. **How to Practice Self-Compassion and Be Kinder to Yourself**
- Exploring the importance of self-compassion and how to stop being your own harshest critic.
10. **Breaking the Cycle of Negative Self-Talk**
- How to identify, challenge, and reframe the negative thoughts that hold you back.
### **Lifestyle & Balance**
11. **Minimalism: How Decluttering Your Life Can Lead to More Freedom**
- A guide to adopting a minimalist lifestyle, including decluttering your home, work, and digital space.
12. **The Importance of Work-Life Balance and How to Achieve It**
- Strategies for maintaining a healthy balance between your career, personal life, and self-care.
13. **How to Create a Morning Routine That Sets You Up for Success**
- A step-by-step guide to designing a morning routine that boosts your productivity and mindset.
14. **The Power of Saying 'No': Setting Boundaries to Protect Your Time and Energy**
- How to say no gracefully and why its important for your mental health and well-being.
15. **Building Strong Relationships: The Art of Effective Communication**
- How to communicate more clearly and empathetically in both personal and professional settings.
### **Life Philosophy & Reflection**
16. **Living with Purpose: How to Find Your Lifes Meaning**
- A philosophical exploration of how to align your actions with your core values and life purpose.
17. **Stoicism for Modern Life: How Ancient Philosophy Can Help You Thrive Today**
- Applying Stoic principles to improve resilience, clarity, and calm in the face of challenges.
18. **The Concept of Ikigai: Finding Joy and Fulfillment in Your Work and Life**
- Exploring the Japanese philosophy of Ikigai and how to apply it for greater fulfillment and balance.
19. **How to Handle Life Transitions: Moving Forward with Confidence**
- Tips for navigating big life changes, from job shifts to personal transformations.
20. **The Importance of Gratitude: How to Cultivate a Daily Practice for a More Positive Life**
- The science behind gratitude and how to incorporate it into your daily life to increase happiness.
### **Productivity in Daily Life**
21. **Time Management for Busy People: How to Get More Done Without Burning Out**
- Techniques like time blocking, prioritization, and task batching to make your day more productive.
22. **Overcoming Overwhelm: How to Tackle Large Tasks Without Feeling Stressed**
- Breaking down big tasks into manageable chunks to prevent feelings of stress or burnout.
23. **The Importance of Play and Fun in a Productive Life**
- How leisure and play are just as important for mental health and long-term productivity.
24. **How to Stay Motivated During Long-Term Projects**
- Strategies for maintaining motivation and momentum over the course of a long, challenging task.
25. **Creating a Digital Detox: How to Unplug and Recharge**
- The benefits of taking time away from screens and how to implement a healthy digital detox.
** my emacs.config
- [[id:b2db0b0b-c179-43ab-9e2b-22bbaac69bcb][wp-emacs-config-blorg]]
** prefrontal-cortex
- [[id:b292f5c6-0c27-439c-8274-2150eb45e20d][wp-prefront-cortex-blorg]]
** new emacs config written on: <2025-02-14 Fri>
[[id:1ee754f9-f30f-4976-850b-d18d01a834d2][wp-new-emacs-config-blorg]]
** urge surfing: <2025-03-14 Fri>
[[id:cfc4ce06-7862-49b7-9a4f-e515d690cd38][wp-urge-surfing-blorg]]
** growth mindset
[[id:CD093B85-BF68-4EAB-AABE-733C7BFC99DE][wp-growth-mindset]] <2025-03-14 Fri>
** emotional intelligence
[[id:D02B89DC-84D0-4211-A902-B9399F4179CA][wp-emotional-intelligence]] <2025-03-16 Sun>
** reflection on week 12
[[id:8CD2F4C4-22C2-4ECC-8F5F-C4779F8AC0F1][wp-week-12-reflections]]
** sadness
[[id:462F091B-9156-48B3-8665-0BE36C95C182][wp-sadness]]
* Commits
** code:
You can add a commit detail by doing this:
#+begin_src elist
(insert-commit-template)
;; "SPC c i c"
#+end_src
** Commit on <2024-12-17 Tue>
*** Details
This commit was focused on getting the blog section ready. So far ive decided to go for a static approach, whereby the blogs are stored in a .json file and populated in an array. The 'slug' property is found in:
- the title of the file (blog)
- the metadata of the blog
- the metadata of the index.json
These three must be consistent
*** What to work on next:
- the rendering of the content of the blogs
- the github project population: match the blog page stylings.
*** Commit message:
"Worked on the blog page, did stylings and began to populate"
** Commit on <2024-12-18 Wed>
*** Details
Decided to change the way the blog is rendered. Using a json index object to display the list (slug is importnant), then blog detail is displayed as a rendered *HTML* from a markdown file. The scss was changed as well:
#+begin_src js
"node_modules/prismjs/themes/prism-dark.css"
#+end_src
this loads the theme for the code blocks.
*** What to work on next:
- the github project population: match the blog page stylings.
*** Commit message:
"continued work on blog page, stylings are done, the rendering changed from using json to md."
** Commit on <2024-12-20 Fri>
*** Details
Worked on the github project display, kept the same look as the blogs. Also done the about me section in the homepage (added some random ai generated info - need to change). Also done the contacts (set up a smpt gmail server)
*** What to work on next:
- Get rid of all the hardcoded blogs, and begin first blog.
*** Commit message:
"finished contact section - added smtp gmail server"
** Commit on <2025-01-01 Wed>
*** Details
Deployed (changed back to emailjs)
*** What to work on next:
*** Commit message:
** Commit on <2025-01-12 Sun>
*** Details
- added new blog: prefrontal cortex and self discipline
- added a estimated time to read
*** What to work on next:
more blogs
*** Commit message:
"added new blog"
** Commit on <2025-02-15 Sat>
*** Details
- added tags with persistency. Redid the whole UI (theme)
*** What to work on next:
- add a cv section
*** Commit message:
** Commit on <2025-03-14 Fri>
*** Details
- added quizzes and used firebase for storage
*** What to work on next:
- rendering of images , spending more time on blogs and creating quizzes
*** Commit message:

View File

@@ -0,0 +1,205 @@
:PROPERTIES:
:ID: 348df473-6443-4f4a-b366-95397b574989
:END:
#+title: web-port-notes
#+filetags: :index:docs:zzq:
* Footnotes and sidenotes
Here is a list of macros:
#+begin_src emacs-lisp
(setq org-export-global-macros
(append
'(
("sidenote"
. "@@html:<label for=\"sn$1\" class=\"margin-toggle sidenote-number\"></label><input type=\"checkbox\" id=\"sn$1\" class=\"margin-toggle\"/><span class=\"sidenote\">$2</span>@@")
("epigraph" . "@@html:<div class=\"epigraph\"><blockquote>$1<footer>$2</footer></blockquote></div>@@")
("epigraph_single" . "@@html:<div class=\"epigraph\"><blockquote>$1</blockquote></div>@@")
("epigraph3" . "@@html:<div class=\"epigraph\"><blockquote>$1<footer>$2, <cite>$3</cite></footer></blockquote></div>@@")
("kbd" . "@@html:<kbd>$1</kbd>@@@@latex:\\texttt{$1}@@")
("margimg"
. "@@html:<aside class=\"marginnote\"><figure class=\"mn-fig\"><img src=\"$1\" alt=\"$2\" class=\"mn-img\" loading=\"lazy\" decoding=\"async\"/>$3</figure></aside>@@")
org-export-global-macros)))
#+end_src
They are used as follows:
{{{sidenote(1, The very first iteration of this website used the Angular framework\, only after a while I realised (as every Emacs lover does) that I want to make this an Emacs-centric project)}}}
Use footnotes as follows:
[fn:1]
then put them at the bottom with the respective information.
* Blorgz
** ideas:
### **Personal Growth & Self-Improvement**
1. **The Power of Journaling: How Writing Every Day Can Transform Your Life**
- Exploring the benefits of journaling for mental clarity, goal setting, and emotional processing.
2. **The Science of Happiness: What Really Makes Us Happy?**
- A deep dive into the psychology and neuroscience of happiness and how to apply it to daily life.
3. **Building a Growth Mindset: How to Shift from a Fixed to a Growth-Oriented Outlook**
- Practical steps and insights on adopting a growth mindset for personal and professional development.
4. **How to Set and Achieve Long-Term Goals**
- A structured approach to setting clear, actionable goals and staying motivated over time.
5. **Embracing Failure: How to Learn and Grow from Setbacks**
- Understanding the importance of failure and how to reframe it as an opportunity for growth.
### **Mental Health & Well-being**
6. **Dealing with Anxiety: Techniques to Cope and Build Resilience**
- Mindfulness, cognitive-behavioral strategies, and lifestyle changes that help manage anxiety.
7. **How to Build Emotional Intelligence (EQ) for Better Relationships**
- Tips for recognizing, understanding, and managing your own emotions, and how to navigate others' emotions.
8. **The Importance of Sleep for Mental and Physical Health**
- Why sleep is crucial for your overall well-being, along with tips for improving your sleep hygiene.
9. **How to Practice Self-Compassion and Be Kinder to Yourself**
- Exploring the importance of self-compassion and how to stop being your own harshest critic.
10. **Breaking the Cycle of Negative Self-Talk**
- How to identify, challenge, and reframe the negative thoughts that hold you back.
### **Lifestyle & Balance**
11. **Minimalism: How Decluttering Your Life Can Lead to More Freedom**
- A guide to adopting a minimalist lifestyle, including decluttering your home, work, and digital space.
12. **The Importance of Work-Life Balance and How to Achieve It**
- Strategies for maintaining a healthy balance between your career, personal life, and self-care.
13. **How to Create a Morning Routine That Sets You Up for Success**
- A step-by-step guide to designing a morning routine that boosts your productivity and mindset.
14. **The Power of Saying 'No': Setting Boundaries to Protect Your Time and Energy**
- How to say no gracefully and why its important for your mental health and well-being.
15. **Building Strong Relationships: The Art of Effective Communication**
- How to communicate more clearly and empathetically in both personal and professional settings.
### **Life Philosophy & Reflection**
16. **Living with Purpose: How to Find Your Lifes Meaning**
- A philosophical exploration of how to align your actions with your core values and life purpose.
17. **Stoicism for Modern Life: How Ancient Philosophy Can Help You Thrive Today**
- Applying Stoic principles to improve resilience, clarity, and calm in the face of challenges.
18. **The Concept of Ikigai: Finding Joy and Fulfillment in Your Work and Life**
- Exploring the Japanese philosophy of Ikigai and how to apply it for greater fulfillment and balance.
19. **How to Handle Life Transitions: Moving Forward with Confidence**
- Tips for navigating big life changes, from job shifts to personal transformations.
20. **The Importance of Gratitude: How to Cultivate a Daily Practice for a More Positive Life**
- The science behind gratitude and how to incorporate it into your daily life to increase happiness.
### **Productivity in Daily Life**
21. **Time Management for Busy People: How to Get More Done Without Burning Out**
- Techniques like time blocking, prioritization, and task batching to make your day more productive.
22. **Overcoming Overwhelm: How to Tackle Large Tasks Without Feeling Stressed**
- Breaking down big tasks into manageable chunks to prevent feelings of stress or burnout.
23. **The Importance of Play and Fun in a Productive Life**
- How leisure and play are just as important for mental health and long-term productivity.
24. **How to Stay Motivated During Long-Term Projects**
- Strategies for maintaining motivation and momentum over the course of a long, challenging task.
25. **Creating a Digital Detox: How to Unplug and Recharge**
- The benefits of taking time away from screens and how to implement a healthy digital detox.
** my emacs.config
- [[id:b2db0b0b-c179-43ab-9e2b-22bbaac69bcb][wp-emacs-config-blorg]]
** prefrontal-cortex
- [[id:b292f5c6-0c27-439c-8274-2150eb45e20d][wp-prefront-cortex-blorg]]
** new emacs config written on: <2025-02-14 Fri>
[[id:1ee754f9-f30f-4976-850b-d18d01a834d2][wp-new-emacs-config-blorg]]
** urge surfing: <2025-03-14 Fri>
[[id:cfc4ce06-7862-49b7-9a4f-e515d690cd38][wp-urge-surfing-blorg]]
** growth mindset
[[id:CD093B85-BF68-4EAB-AABE-733C7BFC99DE][wp-growth-mindset]] <2025-03-14 Fri>
** emotional intelligence
[[id:D02B89DC-84D0-4211-A902-B9399F4179CA][wp-emotional-intelligence]] <2025-03-16 Sun>
** reflection on week 12
[[id:8CD2F4C4-22C2-4ECC-8F5F-C4779F8AC0F1][wp-week-12-reflections]]
** sadness
[[id:462F091B-9156-48B3-8665-0BE36C95C182][wp-sadness]]
* Commits
** code:
You can add a commit detail by doing this:
#+begin_src elist
(insert-commit-template)
;; "SPC c i c"
#+end_src
** Commit on <2024-12-17 Tue>
*** Details
This commit was focused on getting the blog section ready. So far ive decided to go for a static approach, whereby the blogs are stored in a .json file and populated in an array. The 'slug' property is found in:
- the title of the file (blog)
- the metadata of the blog
- the metadata of the index.json
These three must be consistent
*** What to work on next:
- the rendering of the content of the blogs
- the github project population: match the blog page stylings.
*** Commit message:
"Worked on the blog page, did stylings and began to populate"
** Commit on <2024-12-18 Wed>
*** Details
Decided to change the way the blog is rendered. Using a json index object to display the list (slug is importnant), then blog detail is displayed as a rendered *HTML* from a markdown file. The scss was changed as well:
#+begin_src js
"node_modules/prismjs/themes/prism-dark.css"
#+end_src
this loads the theme for the code blocks.
*** What to work on next:
- the github project population: match the blog page stylings.
*** Commit message:
"continued work on blog page, stylings are done, the rendering changed from using json to md."
** Commit on <2024-12-20 Fri>
*** Details
Worked on the github project display, kept the same look as the blogs. Also done the about me section in the homepage (added some random ai generated info - need to change). Also done the contacts (set up a smpt gmail server)
*** What to work on next:
- Get rid of all the hardcoded blogs, and begin first blog.
*** Commit message:
"finished contact section - added smtp gmail server"
** Commit on <2025-01-01 Wed>
*** Details
Deployed (changed back to emailjs)
*** What to work on next:
*** Commit message:
** Commit on <2025-01-12 Sun>
*** Details
- added new blog: prefrontal cortex and self discipline
- added a estimated time to read
*** What to work on next:
more blogs
*** Commit message:
"added new blog"
** Commit on <2025-02-15 Sat>
*** Details
- added tags with persistency. Redid the whole UI (theme)
*** What to work on next:
- add a cv section
*** Commit message:
** Commit on <2025-03-14 Fri>
*** Details
- added quizzes and used firebase for storage
*** What to work on next:
- rendering of images , spending more time on blogs and creating quizzes
*** Commit message:

View File

@@ -0,0 +1,7 @@
:PROPERTIES:
:ID: b2db0b0b-c179-43ab-9e2b-22bbaac69bcb
:END:
#+title: wp-emacs-config-blorg
#+filetags: :zzq:blogs:
[[file:~/master-folder/projects/web-port/md-files/emacs_config.md][file]]

View File

@@ -0,0 +1,6 @@
:PROPERTIES:
:ID: b2db0b0b-c179-43ab-9e2b-22bbaac69bcb
:END:
#+title: wp-emacs-config-blorg
[[file:~/master-folder/projects/web-port/md-files/emacs_config.md][file]]

View File

@@ -0,0 +1,9 @@
:PROPERTIES:
:ID: 710f65e5-0bd4-42be-b5d1-69dbe79b745e
:END:
#+title: github_notes
#+filetags: :git:notes:
* Open Source Projects:
- [[https://github.com/codecrafters-io/build-your-own-x?tab=readme-ov-file][Build your own `x`]]
https://www.atlassian.com/git/tutorials/saving-changes/gitignore

View File

@@ -0,0 +1,8 @@
:PROPERTIES:
:ID: 710f65e5-0bd4-42be-b5d1-69dbe79b745e
:END:
#+title: github_notes
#+filetags: :git:notes:
* Open Source Projects:
- [[https://github.com/codecrafters-io/build-your-own-x?tab=readme-ov-file][Build your own `x`]]

16
20241231172511-book_notes.org Executable file
View File

@@ -0,0 +1,16 @@
:PROPERTIES:
:ID: 2706598f-e6aa-4e88-8d24-5f699bd22787
:END:
#+title: book_notes
#+filetags: :index:books:notes:
* [[id:455ef38f-9a5f-4f62-afe9-25e2261e1282][the_science_of_self_discipline]]
* [[id:EC9D851F-3A2E-4F32-A584-76F6F7A08E30][the_clean_coder]]
* [[id:2d7f1ccc-99d7-4c45-8fe7-4b87080edb01][so_good_they_cant_ignore_you]]
* [[id:dd55d635-59de-4ed9-8ff0-423782c2e0ae][clean-code]]
* [[id:4426cc9a-1568-4fc8-9242-269654c43a3b][naqshe-hayat]]

14
20241231172511-book_notes.org~ Executable file
View File

@@ -0,0 +1,14 @@
:PROPERTIES:
:ID: 2706598f-e6aa-4e88-8d24-5f699bd22787
:END:
#+title: book_notes
#+filetags: :index:books:notes:
* [[id:455ef38f-9a5f-4f62-afe9-25e2261e1282][the_science_of_self_discipline]]
* [[id:EC9D851F-3A2E-4F32-A584-76F6F7A08E30][the_clean_coder]]
* [[id:2d7f1ccc-99d7-4c45-8fe7-4b87080edb01][so_good_they_cant_ignore_you]]
* [[id:dd55d635-59de-4ed9-8ff0-423782c2e0ae][clean-code]]

View File

@@ -0,0 +1,147 @@
:PROPERTIES:
:ID: 455ef38f-9a5f-4f62-afe9-25e2261e1282
:TYPE: Book
:AUTHOR: Peter Hollins
:DATE_STARTED: <2024-12-27 Fri>
:DATE_ENDED: <2025-05-24 Sat>
:END:
#+title: the_science_of_self_discipline
#+filetags: :books:
* Introduction
Upon completing the book titled "The Science of Self-Discipline" written by Peter Hollins, I wanted to write a
little summary of the lessons the book has to offer.
* Purpose
The purpose of the book is to provide a framework for those wanting to build and maintain self-discipline in their
daily routine, through science-based advice and strategies.
* Biological Basis of Self-Discipline
One of the first quotes given in the book is from Jim Rohn, who states that:
> “We must all suffer one of two things: the pain of discipline or the pain of regret.”
The very first chapter talks about the biology behind self-discipline. The reason for discussing this is that
without having an understanding of the things that cause, diminish or strengthen self-discipline, it would be
difficult to benefit from it. The concept of [[id:a087da71-bcfb-4ddf-9565-b82113d5d27f][neuroplasticity]] is mentioned in the book, which
enables change. Our brain's ability to form and reorganise neural connections alludes to the fact that
self-discipline can be developed and improved over time. The example used is that of a road being taken to and from
work every single day. The more often this road is taken, the more automatic the journey becomes, up to a point
where you will be able to get through it without conscious thought.
Another important point raised is the concept of *willpower fatigue*. Self-discipline and willpower are not two
static quantities that are fixed, they are like gas in a tank, it can be drained or replenished. Essentially this
emphasises the point that no matter how great somebody's willpower is, it will eventually deplete. How does one
combat this then? One should prioritise important tasks when the willpower is at its highest, larger tasks should be
broken down into smaller ones, and self-care should be practiced to replenish willpower.
* Two Rules:
** The 40% Rule
This rule was developed by Navy SEALs, and states that when you feel like you've reached your mental or physical
limit, the reality is that you've only reached about 40% of your true capacity. This rule allows you to create a
shift in your mindset. Perceived limitations are no longer ones maximum capacity, but rather, this shift pushes you
to tap into hidden reserves and maximises your potential.
** 10-Minute Rule
If you ever felt like you crave something, and the urge pushes you to it, the 10 minute rules states that you should
wait for 10 minutes before getting it. If you want to eat a sugary snack, wait for 10 minutes before getting it.
This exercise removes the 'immediate' from immediate gratification, and more-so shows that you *can* withstand your
urges.
* Discipline Drainers
The author then goes on to mention common discipline drainers, and how to overcome them.
** False Hope Syndrome
Instead of setting unrealistic expectations, set smaller achievable goals, and celebrate the wins along the way. If
you were to do the former, it can quickly lead to disappointment and a decrease in motivation. The latter approach
will give you the sense of accomplishment, build self-confidence and increase momentum, which is more sustainable
over time.
** Procrastination
To improve self-discipline, procrastination should be avoided, one should stop waiting to *be ready* or for
everything to feel *just right*. Inaction goes hand in hand with making excuses, and ultimately sabotages the
chances of you getting the thing you want done. The 75% rule was mentioned, where you take action when you are 75%
certain of success. Embracing the imperfection allows you to act, and this action enables you to improve
self-discipline.
* Flex your Uncomfortable muscle
By nature self-discipline is uncomfortable. If you were given the choice to play video games or run a mile, most
would choose the former, simply because it is *easier*. Methods such as urge surfing, seeking out
challenges and practicing discomfort are mentioned here that would allow you to develop self-discipline.
* Create a Disciplined Environment
The next chapter of the book states that having an environment that is conducive to self-discipline is one of the
most effective and simplest ways to drastically improve ones life. How does one do this? The author lists and
explains ways to create such an environment. From amongst them are:
- Minimising Distractions: essentially you create a clutter-free working environment, and focus on the 'out of sight,
out of mind' principle
- Regulate Dopamine: being mindful of the cues that trigger dopamine release, such as junk food, social media etc.
and instead creating a reward system that enforces positive behaviour and habits
- Optimise default choices: simply put, this is streamlining disciplined behaviour and choosing the path of least
resistance
* Delayed Gratification
This chapter was titled 'Why You Should Always Eat Your Vegetables First', and, as one can tell, this is talking
about the art of delaying gratification. The author goes on to explain how this works, and goes back to the
[[id:acba0d25-08db-4784-8cc2-fe5c437ba723][stanford-marshmallow-experiment]]. Two ways one can delay gratification are:
- Visualising your future self: research goes on to state that there is a strong correlation between visualising
your future self and making better long-term decisions. This is simply putting yourself in the shoes of your
future self and imagining what you will be doing in the future
- The 10-10-10 Rule: a question to pose to oneself, asking 'how will I feel in 10 minutes, 10 hours and 10 days?'.
This question forces a perspective shift and can allow you to prioritise long-term benefits over short-term
satisfactions
* Using targeted questions
> If you make the effort to ask yourself these four questions and to be
honest in your answers, youll become more aware of your tendencies to
rationalize and make excuses, and youll be prepared to create better
habits for leading a disciplined life.
The four questions are as follows:
1. Do I want to be a disciplined person or not?
2. Am I doing the right thing or simply whats easy?
3. These are the vegetables, so what am I getting for dessert?
4. Am I being self-aware?
* Mindset and Approach
This chapter talks about how our mindset can affect weather we positively or negatively perceive our lives. Some of
the ways one can take on a more positive and optimistic outlook on life are:
- The Endowed Progress Effect: perceiving advancements can make us feel more motivated and optimistic, one can do
this by recognising and acknowledging progress in the past towards a goal
- Goal Proximity: the idea that the closer we are to a goal, the more motivated we are to reach it.
- Think of How Your Actions Can Benefit Others: when one considers how their actions can benefit others, this can
quickly turn into a strong source of motivation and drive
- Think Optimistically: by thinking optimistically, one can create a positive and optimistic outlook on life. The
term used in the book is 'hoping for the best while preparing for the worst'
- Think in Terms of Effort: focus on the effort, not the outcome. When one does this, they are able to enjoy the
process regardless of the outcome
* Build Routines and Habits
Motivation is nice to have, but it is something that fluctuates based on emotion and circumstances. Habits on the
other hand, are something concrete and can be built and maintained. Research has shown that it takes 66 days to
build a habit, and requires self-discipline to get through that process. But once it is built, this habit will drive
you instead. The final thing mentioned in the book is the six sources of influence model by Joseph Grenny. These
factors are (1) personal motivation, (2) personal ability, (3) social motivation, (4) social ability, (5) structural
motivation, and (6) structural ability.
* Summary
This book is a great read, and taught me a lot about self-discipline and the science behind it. I would definitely
recommend it to anyone who wants to improve their self-discipline. It is, however, something that should be
reflected upon, not all the approaches and strategies are a one-size-fits-all, thus, take it with a grain of salt and
adapt it to your own circumstances.

View File

@@ -0,0 +1,147 @@
:PROPERTIES:
:ID: 455ef38f-9a5f-4f62-afe9-25e2261e1282
:TYPE: Book
:AUTHOR: Peter Hollins
:DATE_STARTED: <2024-12-27 Fri>
:DATE_ENDED: <2025-05-24 Sat>
:END:
#+title: The Science Of Self Discipline
#+filetags: :books:complete:
* Introduction
Upon completing the book titled "The Science of Self-Discipline" written by Peter Hollins, I wanted to write a
little summary of the lessons the book has to offer.
* Purpose
The purpose of the book is to provide a framework for those wanting to build and maintain self-discipline in their
daily routine, through science-based advice and strategies.
* Biological Basis of Self-Discipline
One of the first quotes given in the book is from Jim Rohn, who states that:
> “We must all suffer one of two things: the pain of discipline or the pain of regret.”
The very first chapter talks about the biology behind self-discipline. The reason for discussing this is that
without having an understanding of the things that cause, diminish or strengthen self-discipline, it would be
difficult to benefit from it. The concept of [[id:a087da71-bcfb-4ddf-9565-b82113d5d27f][neuroplasticity]] is mentioned in the book, which
enables change. Our brain's ability to form and reorganise neural connections alludes to the fact that
self-discipline can be developed and improved over time. The example used is that of a road being taken to and from
work every single day. The more often this road is taken, the more automatic the journey becomes, up to a point
where you will be able to get through it without conscious thought.
Another important point raised is the concept of *willpower fatigue*. Self-discipline and willpower are not two
static quantities that are fixed, they are like gas in a tank, it can be drained or replenished. Essentially this
emphasises the point that no matter how great somebody's willpower is, it will eventually deplete. How does one
combat this then? One should prioritise important tasks when the willpower is at its highest, larger tasks should be
broken down into smaller ones, and self-care should be practiced to replenish willpower.
* Two Rules:
** The 40% Rule
This rule was developed by Navy SEALs, and states that when you feel like you've reached your mental or physical
limit, the reality is that you've only reached about 40% of your true capacity. This rule allows you to create a
shift in your mindset. Perceived limitations are no longer ones maximum capacity, but rather, this shift pushes you
to tap into hidden reserves and maximises your potential.
** 10-Minute Rule
If you ever felt like you crave something, and the urge pushes you to it, the 10 minute rules states that you should
wait for 10 minutes before getting it. If you want to eat a sugary snack, wait for 10 minutes before getting it.
This exercise removes the 'immediate' from immediate gratification, and more-so shows that you *can* withstand your
urges.
* Discipline Drainers
The author then goes on to mention common discipline drainers, and how to overcome them.
** False Hope Syndrome
Instead of setting unrealistic expectations, set smaller achievable goals, and celebrate the wins along the way. If
you were to do the former, it can quickly lead to disappointment and a decrease in motivation. The latter approach
will give you the sense of accomplishment, build self-confidence and increase momentum, which is more sustainable
over time.
** Procrastination
To improve self-discipline, procrastination should be avoided, one should stop waiting to *be ready* or for
everything to feel *just right*. Inaction goes hand in hand with making excuses, and ultimately sabotages the
chances of you getting the thing you want done. The 75% rule was mentioned, where you take action when you are 75%
certain of success. Embracing the imperfection allows you to act, and this action enables you to improve
self-discipline.
* Flex your Uncomfortable muscle
By nature self-discipline is uncomfortable. If you were given the choice to play video games or run a mile, most
would choose the former, simply because it is *easier*. Methods such as urge surfing, seeking out
challenges and practicing discomfort are mentioned here that would allow you to develop self-discipline.
* Create a Disciplined Environment
The next chapter of the book states that having an environment that is conducive to self-discipline is one of the
most effective and simplest ways to drastically improve ones life. How does one do this? The author lists and
explains ways to create such an environment. From amongst them are:
- Minimising Distractions: essentially you create a clutter-free working environment, and focus on the 'out of sight,
out of mind' principle
- Regulate Dopamine: being mindful of the cues that trigger dopamine release, such as junk food, social media etc.
and instead creating a reward system that enforces positive behaviour and habits
- Optimise default choices: simply put, this is streamlining disciplined behaviour and choosing the path of least
resistance
* Delayed Gratification
This chapter was titled 'Why You Should Always Eat Your Vegetables First', and, as one can tell, this is talking
about the art of delaying gratification. The author goes on to explain how this works, and goes back to the
[[id:acba0d25-08db-4784-8cc2-fe5c437ba723][stanford-marshmallow-experiment]]. Two ways one can delay gratification are:
- Visualising your future self: research goes on to state that there is a strong correlation between visualising
your future self and making better long-term decisions. This is simply putting yourself in the shoes of your
future self and imagining what you will be doing in the future
- The 10-10-10 Rule: a question to pose to oneself, asking 'how will I feel in 10 minutes, 10 hours and 10 days?'.
This question forces a perspective shift and can allow you to prioritise long-term benefits over short-term
satisfactions
* Using targeted questions
> If you make the effort to ask yourself these four questions and to be
honest in your answers, youll become more aware of your tendencies to
rationalize and make excuses, and youll be prepared to create better
habits for leading a disciplined life.
The four questions are as follows:
1. Do I want to be a disciplined person or not?
2. Am I doing the right thing or simply whats easy?
3. These are the vegetables, so what am I getting for dessert?
4. Am I being self-aware?
* Mindset and Approach
This chapter talks about how our mindset can affect weather we positively or negatively perceive our lives. Some of
the ways one can take on a more positive and optimistic outlook on life are:
- The Endowed Progress Effect: perceiving advancements can make us feel more motivated and optimistic, one can do
this by recognising and acknowledging progress in the past towards a goal
- Goal Proximity: the idea that the closer we are to a goal, the more motivated we are to reach it.
- Think of How Your Actions Can Benefit Others: when one considers how their actions can benefit others, this can
quickly turn into a strong source of motivation and drive
- Think Optimistically: by thinking optimistically, one can create a positive and optimistic outlook on life. The
term used in the book is 'hoping for the best while preparing for the worst'
- Think in Terms of Effort: focus on the effort, not the outcome. When one does this, they are able to enjoy the
process regardless of the outcome
* Build Routines and Habits
Motivation is nice to have, but it is something that fluctuates based on emotion and circumstances. Habits on the
other hand, are something concrete and can be built and maintained. Research has shown that it takes 66 days to
build a habit, and requires self-discipline to get through that process. But once it is built, this habit will drive
you instead. The final thing mentioned in the book is the six sources of influence model by Joseph Grenny. These
factors are (1) personal motivation, (2) personal ability, (3) social motivation, (4) social ability, (5) structural
motivation, and (6) structural ability.
* Summary
This book is a great read, and taught me a lot about self-discipline and the science behind it. I would definitely
recommend it to anyone who wants to improve their self-discipline. It is, however, something that should be
reflected upon, not all the approaches and strategies are a one-size-fits-all, thus, take it with a grain of salt and
adapt it to your own circumstances.

View File

@@ -0,0 +1,7 @@
:PROPERTIES:
:ID: b292f5c6-0c27-439c-8274-2150eb45e20d
:END:
#+title: wp-prefront-cortex-blorg
#+filetags: :zzq:blogs:
[[file:~/master-folder/projects/web-port/md-files/prefrontal_cortex.md][file]]

View File

@@ -0,0 +1,6 @@
:PROPERTIES:
:ID: b292f5c6-0c27-439c-8274-2150eb45e20d
:END:
#+title: wp-prefront-cortex-blorg
[[file:~/master-folder/projects/web-port/md-files/prefrontal_cortex.md][file]]

11
20250120110833-afp.org Executable file
View File

@@ -0,0 +1,11 @@
:PROPERTIES:
:ID: 556d10d1-1c74-4d9f-a398-39cb3bd5d935
:END:
#+title: afp
#+filetags: :uni:index:
[[id:6c272430-aff5-468b-90d3-5ff3a96152cf][afp_week1]]
[[id:4bc71106-1d2b-4c71-836d-54b738fe5ff5][afp_week2]]
[[id:1f395b8c-cf55-43eb-9430-dd9449f6b575][afp_week5]]

11
20250120110833-afp.org~ Executable file
View File

@@ -0,0 +1,11 @@
:PROPERTIES:
:ID: 556d10d1-1c74-4d9f-a398-39cb3bd5d935
:END:
#+title: AFP
#+filetags: :uni:afp:index:
[[id:6c272430-aff5-468b-90d3-5ff3a96152cf][afp_week1]]
[[id:4bc71106-1d2b-4c71-836d-54b738fe5ff5][afp_week2]]
[[id:1f395b8c-cf55-43eb-9430-dd9449f6b575][afp_week5]]

10
20250120111047-afp_week1.org Executable file
View File

@@ -0,0 +1,10 @@
:PROPERTIES:
:ID: 6c272430-aff5-468b-90d3-5ff3a96152cf
:END:
#+title: afp_week1
#+filetags: :uni:index:
* <2025-01-20 Mon> : [[id:f6c9e1a7-8465-4cef-9481-2b803d0c43d4][afp_lab_1]]
- Installing Agda
* <2025-01-21 Tue> : [[id:3aef24fd-b220-4408-aa1e-c3538d661b62][afp_lec_1]]

10
20250120111047-afp_week1.org~ Executable file
View File

@@ -0,0 +1,10 @@
:PROPERTIES:
:ID: 6c272430-aff5-468b-90d3-5ff3a96152cf
:END:
#+title: afp_week1
#+filetags: :uni:
* <2025-01-20 Mon> : [[id:f6c9e1a7-8465-4cef-9481-2b803d0c43d4][afp_lab_1]]
- Installing Agda
* <2025-01-21 Tue> : [[id:3aef24fd-b220-4408-aa1e-c3538d661b62][afp_lec_1]]

115
20250120113936-afp-lab-1.org~ Executable file
View File

@@ -0,0 +1,115 @@
:PROPERTIES:
:ID: f6c9e1a7-8465-4cef-9481-2b803d0c43d4
:END:
#+title: afp-lab-1
#+filetags: :notes:uni:afp:
<2025-01-20 Mon>
* Installation of Agda:
** Step 1
#+BEGIN_SRC eshell
sudo apt-get install zlib1g-dev libncurses5-dev
#+END_SRC
then install ghc
- https://www.haskell.org/ghcup/
Now that you have cabal installed, use it to install Agda as a Haskell package:
#+BEGIN_SRC eshell
cabal update
cabal install Agda
#+END_SRC
** Step 2
Most users will want to install the standard library. You can install this as any other Agda library (see Library Management). See the agda-stdlib projects installation instructions for the steps to take to install the latest version.
https://github.com/agda/agda-stdlib
https://agda.readthedocs.io/en/latest/tools/package-system.html#package-system
* Exercises:
[[file:~/master-folder/Uni/ADVFUNC/afp-learning-2024-2025/files/LectureNotes/files/exercises/my-lab1.lagda.md][my lab1]]
```agda
data Bool : Type where
true false : Bool
```
In Agda, the snippet `data Bool : Type where true false : Bool` is a definition of a simple data type named `Bool`. Lets break down and explain all the components and words in this snippet:
---
### 1. **`data`**
- **What it means:** This keyword introduces a new *data type* definition in Agda.
- **Purpose:** Defines a type that consists of one or more *constructors*, which are used to create values of the type.
- **In this case:** The `data` keyword is used to define the `Bool` type.
---
### 2. **`Bool`**
- **What it is:** The name of the data type being defined.
- **Purpose:** Represents a type that has exactly two possible values: `true` and `false`.
- **In this case:** `Bool` is a common type used to represent truth values in logic (true or false).
---
### 3. **`:` (colon)**
- **What it means:** Indicates a type declaration in Agda.
- **Purpose:** Separates the name of the data type (`Bool`) from its type (`Type`).
- **In this case:** `Bool : Type` declares that `Bool` is a type itself (i.e., a type of values).
---
### 4. **`Type`**
- **What it is:** The universe of all types in Agda.
- **Purpose:** In Agda, types are first-class citizens, and `Type` represents the "type of types." For instance:
- `Bool : Type` means `Bool` is a type.
- If you define a type ` : Type` for natural numbers, it also belongs to `Type`.
- **In this case:** `Bool` is defined as a type that belongs to this universe.
---
### 5. **`where`**
- **What it means:** Introduces the constructors (values) of the type.
- **Purpose:** Lists the specific ways you can construct or create values of the newly defined type.
- **In this case:** `where` introduces the two constructors, `true` and `false`, which are the only possible values of the `Bool` type.
---
### 6. **`true false`**
- **What they are:** The *constructors* of the `Bool` type.
- **Purpose:** Constructors are functions (or constants) that produce values of the type. Here:
- `true : Bool` means `true` is a value of type `Bool`.
- `false : Bool` means `false` is a value of type `Bool`.
- **In this case:** These two constructors define all possible values of `Bool`.
---
### 7. **`Bool` after the `:`**
- **What it means:** Specifies the type of each constructor.
- **Purpose:** Ensures that each constructor produces a value of the correct type (`Bool` in this case).
- **In this case:** Both `true` and `false` are of type `Bool`.
---
### Complete Meaning
The entire definition can be read as:
1. Define a new type called `Bool`.
2. `Bool` belongs to the universe of types (`Type`).
3. The `Bool` type has two constructors:
- `true` (a value of type `Bool`).
- `false` (a value of type `Bool`).
---
### Example Usage in Agda
You can use `Bool` in various ways:
```agda
-- A function that negates a Bool
not : Bool → Bool
not true = false
not false = true
-- A value of type Bool
myBool : Bool
myBool = true
```
This showcases how the `Bool` type and its constructors (`true` and `false`) can be used in programs.

115
20250120113936-afp_lab_1.org Executable file
View File

@@ -0,0 +1,115 @@
:PROPERTIES:
:ID: f6c9e1a7-8465-4cef-9481-2b803d0c43d4
:END:
#+title: afp_lab_1
#+filetags: :notes:uni:
<2025-01-20 Mon>
* Installation of Agda:
** Step 1
#+BEGIN_SRC eshell
sudo apt-get install zlib1g-dev libncurses5-dev
#+END_SRC
then install ghc
- https://www.haskell.org/ghcup/
Now that you have cabal installed, use it to install Agda as a Haskell package:
#+BEGIN_SRC eshell
cabal update
cabal install Agda
#+END_SRC
** Step 2
Most users will want to install the standard library. You can install this as any other Agda library (see Library Management). See the agda-stdlib projects installation instructions for the steps to take to install the latest version.
https://github.com/agda/agda-stdlib
https://agda.readthedocs.io/en/latest/tools/package-system.html#package-system
* Exercises:
[[file:~/master-folder/Uni/ADVFUNC/afp-learning-2024-2025/files/LectureNotes/files/exercises/my-lab1.lagda.md][my lab1]]
```agda
data Bool : Type where
true false : Bool
```
In Agda, the snippet `data Bool : Type where true false : Bool` is a definition of a simple data type named `Bool`. Lets break down and explain all the components and words in this snippet:
---
### 1. **`data`**
- **What it means:** This keyword introduces a new *data type* definition in Agda.
- **Purpose:** Defines a type that consists of one or more *constructors*, which are used to create values of the type.
- **In this case:** The `data` keyword is used to define the `Bool` type.
---
### 2. **`Bool`**
- **What it is:** The name of the data type being defined.
- **Purpose:** Represents a type that has exactly two possible values: `true` and `false`.
- **In this case:** `Bool` is a common type used to represent truth values in logic (true or false).
---
### 3. **`:` (colon)**
- **What it means:** Indicates a type declaration in Agda.
- **Purpose:** Separates the name of the data type (`Bool`) from its type (`Type`).
- **In this case:** `Bool : Type` declares that `Bool` is a type itself (i.e., a type of values).
---
### 4. **`Type`**
- **What it is:** The universe of all types in Agda.
- **Purpose:** In Agda, types are first-class citizens, and `Type` represents the "type of types." For instance:
- `Bool : Type` means `Bool` is a type.
- If you define a type ` : Type` for natural numbers, it also belongs to `Type`.
- **In this case:** `Bool` is defined as a type that belongs to this universe.
---
### 5. **`where`**
- **What it means:** Introduces the constructors (values) of the type.
- **Purpose:** Lists the specific ways you can construct or create values of the newly defined type.
- **In this case:** `where` introduces the two constructors, `true` and `false`, which are the only possible values of the `Bool` type.
---
### 6. **`true false`**
- **What they are:** The *constructors* of the `Bool` type.
- **Purpose:** Constructors are functions (or constants) that produce values of the type. Here:
- `true : Bool` means `true` is a value of type `Bool`.
- `false : Bool` means `false` is a value of type `Bool`.
- **In this case:** These two constructors define all possible values of `Bool`.
---
### 7. **`Bool` after the `:`**
- **What it means:** Specifies the type of each constructor.
- **Purpose:** Ensures that each constructor produces a value of the correct type (`Bool` in this case).
- **In this case:** Both `true` and `false` are of type `Bool`.
---
### Complete Meaning
The entire definition can be read as:
1. Define a new type called `Bool`.
2. `Bool` belongs to the universe of types (`Type`).
3. The `Bool` type has two constructors:
- `true` (a value of type `Bool`).
- `false` (a value of type `Bool`).
---
### Example Usage in Agda
You can use `Bool` in various ways:
```agda
-- A function that negates a Bool
not : Bool → Bool
not true = false
not false = true
-- A value of type Bool
myBool : Bool
myBool = true
```
This showcases how the `Bool` type and its constructors (`true` and `false`) can be used in programs.

154
20250121110241-afp-lec-1.org~ Executable file
View File

@@ -0,0 +1,154 @@
:PROPERTIES:
:ID: 3aef24fd-b220-4408-aa1e-c3538d661b62
:END:
#+title: afp-lec-1
#+filetags: :notes:uni:afp:
<2025-01-21 Tue>
[[file:~/master-folder/Uni/ADVFUNC/afp-learning-2024-2025/files/LectureNotes/files/introduction.lagda.md][Week 1 Handout]]
* Week 1 lec 1
if you want to put a hole in the file (ie the { }1 ) then put a ? and load the file
types are default called 'sets' in agda but we will call them types.
data Bool : Type where
true false : Bool
Here we create a type called Bool
--
data Maybe (A : Type) : Type where
nothing : Maybe A
just : A → Maybe A
Given the type A we produce another type
Then we have two constructors, we can actually call them whatever we want, the only rule is that it shouldnt have spaces in the middle. For example, instead of nothing we can call 'nothing' as 'Nothingljfsdsdj'.
The below is known as coercion or the disjoint union
Considering Blah = Either Bool
left 0: Blah
right false: Blah
--
data : Type where
zero :
suc :
-- 4 = suc (suc (suc (suc zero)))
--
data List (A : Type) : Type where
[] : List A
_::_ : A → List A → List A
Below is a function that maps a type to a type:
myList : Type -> Type
myList = List
-- N -> Type ... this is called 'Dependant Type' which depends on elements of another type.
When it comes to types, its often the case where the language we use doesnt exactly define the type we want it to. For example in haskell, the binary tree, when we want to use the binary search tree its a little difficult. In agda we can define a precise type; including the binary search tree. In summary agda can write precise types.
--
if_then_else_ : {A : Type} → Bool → A → A → A
if true then x else y = x
if false then x else y = y
this above is known as mixfix operation, we use the _ to denote where the arguments of the function are going to be places
--
_+_ :
zero + y = y
suc x + y = suc (x + y)
here we can pattern match on any of x or y
in haskell, recursion can be done and there arent restrictions on it. in Agda we have structural recursion as there is a termination on recursion. Structural recursion is when you follow the structure of the definition, for example in suc x + y, we get suc (x + y), we keep removing the x from suc until we are left with 0. scrcpy
--
_*_ :
zero * y = zero
suc x * y = x * y + y
for suc x * y:
(1 + x) * y
y + x * y
in infixr, the r means the brackets are explicitly on the right, if we use infixl then its on the left:
x + y + z
x + (y + z) : r
(x + y) + z : l
-- research implicit arguements.
reverse : {A : Type} → List A → List A
reverse [] = []
reverse (x :: xs) = reverse xs ++ [ x ]
although this program works, its inefficient.
rev-append : {A : Type} → List A → List A → List A
rev-append [] ys = ys
rev-append (x :: xs) ys = rev-append xs (x :: ys)
rev : {A : Type} → List A → List A
rev xs = rev-append xs []
the revappend is a helper function. you can see theres no ++ (concatenation) involved.
* Week 1 lec 2
N-Induction : (P: N -> Type)
-> P 0
-> ((k:N) -> Pk (P (suc k))
choose k = 0
P0 : P0
f0 p1 : P1
f1 p2 : p2
-> (n:N) -> Pn
This is proof by induction,
-induction P p0 f 0 = P0
-induction P p0 f(suc n) = goal
where
: Pn
= -induction P p0 f n
-induction P p0 f 3 =
f3(f2(f1 p0))
essentially this is a for loop.
--
indstep : (k:N) -> k≣k -> suc k ≣ suc k
indstep k e = e
-refl n = -induction (λx -> x≣x) * (λke -> e)
introduction and elimination rules
--
List-induction : { x : Type }
-> (P : List X -> Type)
-> P []
-> ((x:X)(xs:List X) -> Pxs -> P(x::xs))
-> (xs : List X ) -> P xs
List-induction
* Keybindings:
- C-c C-l : to load the agda file
- SPC-w for the windows
- C-c C-c : case split (agda mode) (put x, or b or whatever the first one is, then use this - very useful).
- C-c C-SPC: give: tries to fill the hole
- C-shift - : undo
- C-c C-r : refine
- C-c C-, : show the context

154
20250121110241-afp_lec_1.org Executable file
View File

@@ -0,0 +1,154 @@
:PROPERTIES:
:ID: 3aef24fd-b220-4408-aa1e-c3538d661b62
:END:
#+title: afp_lec_1
#+filetags: :notes:uni:
<2025-01-21 Tue>
[[file:~/master-folder/Uni/ADVFUNC/afp-learning-2024-2025/files/LectureNotes/files/introduction.lagda.md][Week 1 Handout]]
* Week 1 lec 1
if you want to put a hole in the file (ie the { }1 ) then put a ? and load the file
types are default called 'sets' in agda but we will call them types.
data Bool : Type where
true false : Bool
Here we create a type called Bool
--
data Maybe (A : Type) : Type where
nothing : Maybe A
just : A → Maybe A
Given the type A we produce another type
Then we have two constructors, we can actually call them whatever we want, the only rule is that it shouldnt have spaces in the middle. For example, instead of nothing we can call 'nothing' as 'Nothingljfsdsdj'.
The below is known as coercion or the disjoint union
Considering Blah = Either Bool
left 0: Blah
right false: Blah
--
data : Type where
zero :
suc :
-- 4 = suc (suc (suc (suc zero)))
--
data List (A : Type) : Type where
[] : List A
_::_ : A → List A → List A
Below is a function that maps a type to a type:
myList : Type -> Type
myList = List
-- N -> Type ... this is called 'Dependant Type' which depends on elements of another type.
When it comes to types, its often the case where the language we use doesnt exactly define the type we want it to. For example in haskell, the binary tree, when we want to use the binary search tree its a little difficult. In agda we can define a precise type; including the binary search tree. In summary agda can write precise types.
--
if_then_else_ : {A : Type} → Bool → A → A → A
if true then x else y = x
if false then x else y = y
this above is known as mixfix operation, we use the _ to denote where the arguments of the function are going to be places
--
_+_ :
zero + y = y
suc x + y = suc (x + y)
here we can pattern match on any of x or y
in haskell, recursion can be done and there arent restrictions on it. in Agda we have structural recursion as there is a termination on recursion. Structural recursion is when you follow the structure of the definition, for example in suc x + y, we get suc (x + y), we keep removing the x from suc until we are left with 0. scrcpy
--
_*_ :
zero * y = zero
suc x * y = x * y + y
for suc x * y:
(1 + x) * y
y + x * y
in infixr, the r means the brackets are explicitly on the right, if we use infixl then its on the left:
x + y + z
x + (y + z) : r
(x + y) + z : l
-- research implicit arguements.
reverse : {A : Type} → List A → List A
reverse [] = []
reverse (x :: xs) = reverse xs ++ [ x ]
although this program works, its inefficient.
rev-append : {A : Type} → List A → List A → List A
rev-append [] ys = ys
rev-append (x :: xs) ys = rev-append xs (x :: ys)
rev : {A : Type} → List A → List A
rev xs = rev-append xs []
the revappend is a helper function. you can see theres no ++ (concatenation) involved.
* Week 1 lec 2
N-Induction : (P: N -> Type)
-> P 0
-> ((k:N) -> Pk (P (suc k))
choose k = 0
P0 : P0
f0 p1 : P1
f1 p2 : p2
-> (n:N) -> Pn
This is proof by induction,
-induction P p0 f 0 = P0
-induction P p0 f(suc n) = goal
where
: Pn
= -induction P p0 f n
-induction P p0 f 3 =
f3(f2(f1 p0))
essentially this is a for loop.
--
indstep : (k:N) -> k≣k -> suc k ≣ suc k
indstep k e = e
-refl n = -induction (λx -> x≣x) * (λke -> e)
introduction and elimination rules
--
List-induction : { x : Type }
-> (P : List X -> Type)
-> P []
-> ((x:X)(xs:List X) -> Pxs -> P(x::xs))
-> (xs : List X ) -> P xs
List-induction
* Keybindings:
- C-c C-l : to load the agda file
- SPC-w for the windows
- C-c C-c : case split (agda mode) (put x, or b or whatever the first one is, then use this - very useful).
- C-c C-SPC: give: tries to fill the hole
- C-shift - : undo
- C-c C-r : refine
- C-c C-, : show the context

11
20250128110828-afp_week2.org Executable file
View File

@@ -0,0 +1,11 @@
:PROPERTIES:
:ID: 4bc71106-1d2b-4c71-836d-54b738fe5ff5
:END:
#+title: afp_week2
#+filetags: :uni:index:
<2025-01-27 Mon>
<2025-01-28 Tue>
[[id:460f4a49-8ae4-444a-bf82-4e14ca7cad3f][afp_lec_2]]

9
20250128110828-afp_week2.org~ Executable file
View File

@@ -0,0 +1,9 @@
:PROPERTIES:
:ID: 4bc71106-1d2b-4c71-836d-54b738fe5ff5
:END:
#+title: afp_week2
#+filetags: :uni:afp:
<2025-01-27 Mon>
<2025-01-28 Tue>

View File

@@ -0,0 +1,43 @@
:PROPERTIES:
:ID: 460f4a49-8ae4-444a-bf82-4e14ca7cad3f
:END:
#+title: afp_lec_2
#+filetags: :uni:notes:
- List are dependant, thats what makes it so special.
```agda
data _≡_ {X : Type} : X → X → Type where
refl : (x : X) → x ≡ x
infix 0 _≡_
```
Here is the identity type. For every type X, im going to define two elements of X, and the only way to define this element the constructor of which is single. The type is like a proposition and the element is like the proof. By just having this rule we can do everything we wanna do, for example, proving that if x=y, y=x.
Definition equal : =
Type equality : ≡
we want to write propositions as types and proofs as programs.
A proof is a convincing argument. How do you convince someone that something you believe is true is actually true, it ivolves reasoning.
* AND
To prove A and B we have to prove A, and also prove B. Proof by arguments; you have to argue/justify that A is true and that B is true.
a : A
the little `a` is a justification of the the big `A`. little a is a way to prove that big A holds.
So for this it would be:
a : A
b : B
and we need that both holds, imagine them as pairs: (a , b)
cartesian product -> (a , b) : A x B
the cartesian product is just a set of pairs. The below is a translation of conjunction to cartesian product in Agda.
```agda
data _ x _ (A B : Type) : Type where
_ , _ : A -> B -> A x B
```

View File

@@ -0,0 +1,43 @@
:PROPERTIES:
:ID: 460f4a49-8ae4-444a-bf82-4e14ca7cad3f
:END:
#+title: afp-lec-2
#+filetags: :uni:afp:notes:
- List are dependant, thats what makes it so special.
```agda
data _≡_ {X : Type} : X → X → Type where
refl : (x : X) → x ≡ x
infix 0 _≡_
```
Here is the identity type. For every type X, im going to define two elements of X, and the only way to define this element the constructor of which is single. The type is like a proposition and the element is like the proof. By just having this rule we can do everything we wanna do, for example, proving that if x=y, y=x.
Definition equal : =
Type equality : ≡
we want to write propositions as types and proofs as programs.
A proof is a convincing argument. How do you convince someone that something you believe is true is actually true, it ivolves reasoning.
* AND
To prove A and B we have to prove A, and also prove B. Proof by arguments; you have to argue/justify that A is true and that B is true.
a : A
the little `a` is a justification of the the big `A`. little a is a way to prove that big A holds.
So for this it would be:
a : A
b : B
and we need that both holds, imagine them as pairs: (a , b)
cartesian product -> (a , b) : A x B
the cartesian product is just a set of pairs. The below is a translation of conjunction to cartesian product in Agda.
```agda
data _ x _ (A B : Type) : Type where
_ , _ : A -> B -> A x B
```

16
20250213124335-i3_wm.org Normal file
View File

@@ -0,0 +1,16 @@
:PROPERTIES:
:ID: 9d5aae0f-4ae1-49a5-a047-9099baad0a06
:END:
#+title: i3-wm
#+filetags: :guide:
* Commands:
*Mod1 = Win Key*
$mod+Enter = Open Terminal
$mod+s = Stacked layout
$mod+e = Default layout
$mod+d = dmenu
* Config file:

16
20250213124335-i3_wm.org~ Normal file
View File

@@ -0,0 +1,16 @@
:PROPERTIES:
:ID: 9d5aae0f-4ae1-49a5-a047-9099baad0a06
:END:
#+title: i3-wm
#+filetags: :linux:guide:
* Commands:
*Mod1 = Win Key*
$mod+Enter = Open Terminal
$mod+s = Stacked layout
$mod+e = Default layout
$mod+d = dmenu
* Config file:

View File

@@ -0,0 +1,130 @@
:PROPERTIES:
:ID: 1ee754f9-f30f-4976-850b-d18d01a834d2
:END:
#+title: wp-new-emacs-config-blorg
#+filetags: :zzq:blogs:
# Setting Up an Advanced Emacs Configuration for Productivity
I recently spoke about what Emacs is, and how it is useful for productivity. I wanted to write this up again and dive more into the other files that were stored in the `/scripts` directory , as well as how to set it up.
## Prerequisites
Before we begin, ensure you have Emacs installed. You can install Emacs using the following commands based on your operating system:
- **Ubuntu/Debian:** `sudo apt install emacs`
- **MacOS (Homebrew):** `brew install emacs`
- **Windows:** Use [MSYS2](https://www.msys2.org/) or install Emacs from [GNU Emacs](https://www.gnu.org/software/emacs/).
Additionally, ensure that `git` is installed to clone repositories and manage configurations.
## Download the Configuration Files
First let's walk through how to set this up.
Clone the repository or manually download the provided configuration files into your `~/.emacs.d/` directory:
```sh
mkdir -p ~/.emacs.d/
cd ~/.emacs.d/
```
The following file should be copied to `~/.emacs.d/`:
- `init.el`
And the following files should be copied into `~/.emacs.d/scripts`:
- `auto-comp.el`
- `custom-agenda.el`
- `displays.el`
- `keyboard.el`
- `shells.el`
- `window.el`
If you are using `git`, you can clone your repository directly:
```sh
git clone https://github.com/zainezq/dot-files/tree/main/emacs-config
```
## Understanding the Configuration
This configuration is modularised for easier maintenance. Each file handles a specific feature:
### `init.el`: The Core Configuration
The `init.el` file is the entry point of the configuration. It:
- Loads package management (MELPA, `use-package`)
- Imports additional modules (`displays`, `shells`, `auto-comp`, `window`, `keyboard`, `custom-agenda`)
- Configures UI elements such as themes, icons, and window behavior
- Sets up Org mode and language support
- Enables Evil mode for Vim-like keybindings
### `auto-comp.el`: Auto-Completion Setup
This file configures `company-mode` for autocompletion in Emacs. It:
- Loads `company-mode` and `company-box` for a better UI
- Sets the minimum prefix length and delay before suggestions appear
- Enables backend support for various modes
### `keyboard.el`: Custom Keybindings
This file sets up keybindings using the `general.el` package. Some useful shortcuts include:
- `SPC .` → Open file finder
- `SPC f c` → Open `init.el` for quick edits
- `SPC b b` → Switch buffers
- `SPC w 1` → Removes (not kills) all buffers except the current one
- `SPC t n` → Toggle NeoTree file explorer
### `window.el`: Window Management
Defines functions for moving buffers between splits using `windmove`. Functions include:
- `buf-move-up` → Swap buffers up
- `buf-move-down` → Swap buffers down
- `buf-move-left` → Swap buffers left
- `buf-move-right` → Swap buffers right
### `shells.el`: Shell and Terminal Integration
Configures:
- `vterm` as the primary terminal
- `eshell-toggle` for quick access to Eshell
- `vterm-toggle` for easy terminal toggling
### `custom-agenda.el`: Org Mode Enhancements
This file customises Org mode agendas. It:
- Configures custom agenda views
- Hides the Org agenda startup message
- Enables extra features such as displaying scheduled tasks
### `displays.el`: UI Enhancements
This file improves the visual experience in Emacs:
- Configures `dashboard.el` to show a custom startup screen, you may modify this to your liking, see: [Emacs Dashboard](https://github.com/emacs-dashboard/emacs-dashboard)
- Enables `neotree` for file navigation
- Hides unnecessary UI elements for a cleaner look
## Installing Dependencies
Open Emacs and run the following command to install missing packages:
```sh
M-x package-refresh-contents
M-x package-install-selected-packages
```
Alternatively, restart Emacs, and `use-package` will automatically install any missing dependencies.
If any issues arise, check `*Messages*` buffer (`M-x view-echo-area-messages`) or start Emacs with debugging mode enabled (`emacs --debug-init`). What I tend to do is whenever I encounter any errors, I run emacs in minimal mode: `emacs -Q`, this loads emacs without the init.el file (if I can't pinpoint the exact error).
## Final Notes
This configuration optimises Emacs for efficient navigation, organisation, and shell integration.
Everybodies configuration will differ based on their needs, so feel free to take and leave the parts as you wish!
For additional customisation, refer to the official package documentation:
- [General.el (Keybindings)](https://github.com/noctuid/general.el)
- [Evil Mode (Vim keybindings)](https://github.com/emacs-evil/evil)
- [Org Mode](https://orgmode.org/)
- [Neotree (File navigation)](https://github.com/jaypei/emacs-neotree)

View File

@@ -0,0 +1,129 @@
:PROPERTIES:
:ID: 1ee754f9-f30f-4976-850b-d18d01a834d2
:END:
#+title: wp-new-emacs-config-blorg
# Setting Up an Advanced Emacs Configuration for Productivity
I recently spoke about what Emacs is, and how it is useful for productivity. I wanted to write this up again and dive more into the other files that were stored in the `/scripts` directory , as well as how to set it up.
## Prerequisites
Before we begin, ensure you have Emacs installed. You can install Emacs using the following commands based on your operating system:
- **Ubuntu/Debian:** `sudo apt install emacs`
- **MacOS (Homebrew):** `brew install emacs`
- **Windows:** Use [MSYS2](https://www.msys2.org/) or install Emacs from [GNU Emacs](https://www.gnu.org/software/emacs/).
Additionally, ensure that `git` is installed to clone repositories and manage configurations.
## Download the Configuration Files
First let's walk through how to set this up.
Clone the repository or manually download the provided configuration files into your `~/.emacs.d/` directory:
```sh
mkdir -p ~/.emacs.d/
cd ~/.emacs.d/
```
The following file should be copied to `~/.emacs.d/`:
- `init.el`
And the following files should be copied into `~/.emacs.d/scripts`:
- `auto-comp.el`
- `custom-agenda.el`
- `displays.el`
- `keyboard.el`
- `shells.el`
- `window.el`
If you are using `git`, you can clone your repository directly:
```sh
git clone https://github.com/zainezq/dot-files/tree/main/emacs-config
```
## Understanding the Configuration
This configuration is modularised for easier maintenance. Each file handles a specific feature:
### `init.el`: The Core Configuration
The `init.el` file is the entry point of the configuration. It:
- Loads package management (MELPA, `use-package`)
- Imports additional modules (`displays`, `shells`, `auto-comp`, `window`, `keyboard`, `custom-agenda`)
- Configures UI elements such as themes, icons, and window behavior
- Sets up Org mode and language support
- Enables Evil mode for Vim-like keybindings
### `auto-comp.el`: Auto-Completion Setup
This file configures `company-mode` for autocompletion in Emacs. It:
- Loads `company-mode` and `company-box` for a better UI
- Sets the minimum prefix length and delay before suggestions appear
- Enables backend support for various modes
### `keyboard.el`: Custom Keybindings
This file sets up keybindings using the `general.el` package. Some useful shortcuts include:
- `SPC .` → Open file finder
- `SPC f c` → Open `init.el` for quick edits
- `SPC b b` → Switch buffers
- `SPC w 1` → Removes (not kills) all buffers except the current one
- `SPC t n` → Toggle NeoTree file explorer
### `window.el`: Window Management
Defines functions for moving buffers between splits using `windmove`. Functions include:
- `buf-move-up` → Swap buffers up
- `buf-move-down` → Swap buffers down
- `buf-move-left` → Swap buffers left
- `buf-move-right` → Swap buffers right
### `shells.el`: Shell and Terminal Integration
Configures:
- `vterm` as the primary terminal
- `eshell-toggle` for quick access to Eshell
- `vterm-toggle` for easy terminal toggling
### `custom-agenda.el`: Org Mode Enhancements
This file customises Org mode agendas. It:
- Configures custom agenda views
- Hides the Org agenda startup message
- Enables extra features such as displaying scheduled tasks
### `displays.el`: UI Enhancements
This file improves the visual experience in Emacs:
- Configures `dashboard.el` to show a custom startup screen, you may modify this to your liking, see: [Emacs Dashboard](https://github.com/emacs-dashboard/emacs-dashboard)
- Enables `neotree` for file navigation
- Hides unnecessary UI elements for a cleaner look
## Installing Dependencies
Open Emacs and run the following command to install missing packages:
```sh
M-x package-refresh-contents
M-x package-install-selected-packages
```
Alternatively, restart Emacs, and `use-package` will automatically install any missing dependencies.
If any issues arise, check `*Messages*` buffer (`M-x view-echo-area-messages`) or start Emacs with debugging mode enabled (`emacs --debug-init`). What I tend to do is whenever I encounter any errors, I run emacs in minimal mode: `emacs -Q`, this loads emacs without the init.el file (if I can't pinpoint the exact error).
## Final Notes
This configuration optimises Emacs for efficient navigation, organisation, and shell integration.
Everybodies configuration will differ based on their needs, so feel free to take and leave the parts as you wish!
For additional customisation, refer to the official package documentation:
- [General.el (Keybindings)](https://github.com/noctuid/general.el)
- [Evil Mode (Vim keybindings)](https://github.com/emacs-evil/evil)
- [Org Mode](https://orgmode.org/)
- [Neotree (File navigation)](https://github.com/jaypei/emacs-neotree)

View File

@@ -0,0 +1,7 @@
:PROPERTIES:
:ID: 1f395b8c-cf55-43eb-9430-dd9449f6b575
:END:
#+title: afp_week5
#+filetags: :uni:index:
[[id:ed4c372b-0314-4b6e-9119-742f69b5e434][afp_lec_5]]

View File

@@ -0,0 +1,7 @@
:PROPERTIES:
:ID: 1f395b8c-cf55-43eb-9430-dd9449f6b575
:END:
#+title: afp_week5
#+filetags: :uni:afp:
[[id:ed4c372b-0314-4b6e-9119-742f69b5e434][afp-lec-5]]

View File

@@ -0,0 +1,8 @@
:PROPERTIES:
:ID: ed4c372b-0314-4b6e-9119-742f69b5e434
:END:
#+title: af_wk5_lec1
*
the first half of the lecture we went through the practice test solutions.
for the last question we got a hint, namely to redefine the leaf and node constructors of the Rose Trees.

View File

@@ -0,0 +1,9 @@
:PROPERTIES:
:ID: ed4c372b-0314-4b6e-9119-742f69b5e434
:END:
#+title: afp_lec_5
#+filetags: :uni:notes:
*
the first half of the lecture we went through the practice test solutions.
for the last question we got a hint, namely to redefine the leaf and node constructors of the Rose Trees.

View File

@@ -0,0 +1,9 @@
:PROPERTIES:
:ID: ed4c372b-0314-4b6e-9119-742f69b5e434
:END:
#+title: afp-lec-5
#+filetags: :uni:afp:notes:
*
the first half of the lecture we went through the practice test solutions.
for the last question we got a hint, namely to redefine the leaf and node constructors of the Rose Trees.

View File

@@ -0,0 +1,18 @@
:PROPERTIES:
:ID: 966175d4-3b58-4abc-9b41-08cbf328dd87
:END:
#+title: emacs-stuff-keybindings
#+filetags: :emacs:guide:
Keybindings I have come across:
* Get help for a major mode:
Type `C-h m` to get information for a major mode.
* TO indent a region n amount of spaces (where n is a number): `C-u n C-x Tab`
* Projectile:
- `SPC-p p` - switch project
- `SPC-p f` - find project

View File

@@ -0,0 +1,13 @@
:PROPERTIES:
:ID: 966175d4-3b58-4abc-9b41-08cbf328dd87
:END:
#+title: emacs-stuff-keybindings
#+filetags: :emacs:guide:
Keybindings I have come across:
* TO indent a region n amount of spaces (where n is a number): `C-u n C-x Tab`
* Projectile:
- `SPC-p p` - switch project
- `SPC-p f` - find project

View File

@@ -0,0 +1,69 @@
:PROPERTIES:
:ID: cfc4ce06-7862-49b7-9a4f-e515d690cd38
:END:
#+title: wp-urge-surfing-blorg
#+filetags: :blogs:zzq:
# Urge Surfing: Mastering the Art of Riding Your Impulses
By Zaine Qayyum
## Table of Contents
1. [Introduction](#introduction)
2. [What is Urge Surfing?](#what-is-urge-surfing)
3. [How Urge Surfing Works](#how-urge-surfing-works)
4. [Conclusion](#conclusion)
## Introduction
I've spoken about the internal components of 'self-discipline' in another blog, but if we take a look at this whole self-improvement topic from another angle, we can see that the underlying reason for us not being able to 'stick to things' is due to us giving in to our urges. That may sound trivial, and we may connect the dots that if we control our impulses, we can do xyz. However, that form of thinking requires a bit of explanation.
Psychologists have researched and found that opposing our urges is like making them stronger because we give it that 'attention' it wants (Wegner, 1994). In his Ironic Process Theory, Daniel Wegner demonstrated that trying to suppress thoughts such as resisting cravings or unwanted impulses paradoxically makes them more persistent (Wegner, Schneider, Carter, & White, 1987). Addiction research further emphasises this, where forcefully fighting cravings can intensify them rather than make them disappear.
But what if, instead of giving in or fighting them, we learned to ride them like a wave? This is the foundation of urge surfing, a mindfulness based technique developed by Dr. Alan Marlatt, which teaches individuals to observe their cravings without reacting to them, allowing them to naturally peak and fade.
## What is Urge Surfing?
Urge surfing is a concept that originated in addiction therapy and mindfulness practices. Developed by psychologist **Dr. Alan Marlatt**, it was designed to help people struggling with addictive behaviors by teaching them to observe their cravings rather than acting on them.
The fundamental aspect of the technique is based on the ideology that **urges are temporary** (so real), they rise, peak and then eventually fade away, which is where the term **surfing** intuitively comes from.
## How Urge Surfing Works
Urge surfing relies on mindfulness, where we recognise the urge, observe it, then let it fade away.
The process can be broken down into three main steps:
### 1. **Recognising the Urge**
The first step is to *identify the urge* as it arises. This means paying close attention to bodily sensations, thoughts, and emotions that signal a craving. For example:
- A sudden tension in the stomach when craving sweets.
- Restlessness and an urge to check social media.
- A racing heart and a compulsion to lash out in anger.
Acknowledging the urge early gives you the power to observe it rather than be consumed by it (kind of wanted to link this to "The Observer and the Observed").
### 2. **Riding the Wave**
Once you recognise the urge, the next step is to **observe it without reacting**. Imagine the urge as a wave in the ocean. rather than fighting it, you ride it by:
- *Breathing deeply*: In other words, focussing on slow deep breaths to achor yourself in the present moment
- *Noticing sensations*: Where do you feel the urge? Is it in your chest, hands, or stomach?
- *Labeling the urge*: Mentally note, "This is just a craving," or "This is just an impulse." This helps you distance yourself from it
- *Practicing non-judgment*: Don't label the urge as good or bad. Just observe it as it rises and falls
### 3. **Letting It Fade Away**
With time, urges *naturally subside*. Like waves, they reach a peak and then fade away. The trick behind this is accepting that they come and go, and this gives you a much better control over your impulses.
## The Science Behind Urge Surfing
Now you might be thinking "Hey you just spouted a bunch of things but where is the scientific correlation???". Let's take a look at the science behind it:
- *The 90-Second Rule*: Neuroscientist **Dr. Jill Bolte Taylor** suggests that most emotional reactions last about 90 seconds. If we can *sit with an urge* for that duration, it often begins to dissipate.
- *Neuroplasticity*: Every time we resist an impulse instead of acting on it, we *weaken the neural pathways* associated with that habit. Over time, the urges become less intense.
- *The Prefrontal Cortex*: Self-control is governed by the prefrontal cortex, the rational part of our brain. Practicing urge surfing strengthens this area, which improves discipline.
![Urge Surfing Diagram](./assets/urge-surfing.png)
*Source: [Link](https://www.thenourishedpath.com/blog/eating-mindfully-urge-surfing)*
## Conclusion
Urge surfing is truly a powerful technique when mastered, not only does it allow you to control your urges without giving in, it also helps you to become more self-disciplined. If you are interested in learning more about this, I would recommend reading the book "The Science of Self-Discipline" by Peter Hollins.

View File

@@ -0,0 +1,68 @@
:PROPERTIES:
:ID: cfc4ce06-7862-49b7-9a4f-e515d690cd38
:END:
#+title: wp-urge-surfing-blorg
# Urge Surfing: Mastering the Art of Riding Your Impulses
By Zaine Qayyum
## Table of Contents
1. [Introduction](#introduction)
2. [What is Urge Surfing?](#what-is-urge-surfing)
3. [How Urge Surfing Works](#how-urge-surfing-works)
4. [Conclusion](#conclusion)
## Introduction
I've spoken about the internal components of 'self-discipline' in another blog, but if we take a look at this whole self-improvement topic from another angle, we can see that the underlying reason for us not being able to 'stick to things' is due to us giving in to our urges. That may sound trivial, and we may connect the dots that if we control our impulses, we can do xyz. However, that form of thinking requires a bit of explanation.
Psychologists have researched and found that opposing our urges is like making them stronger because we give it that 'attention' it wants (Wegner, 1994). In his Ironic Process Theory, Daniel Wegner demonstrated that trying to suppress thoughts such as resisting cravings or unwanted impulses paradoxically makes them more persistent (Wegner, Schneider, Carter, & White, 1987). Addiction research further emphasises this, where forcefully fighting cravings can intensify them rather than make them disappear.
But what if, instead of giving in or fighting them, we learned to ride them like a wave? This is the foundation of urge surfing, a mindfulness based technique developed by Dr. Alan Marlatt, which teaches individuals to observe their cravings without reacting to them, allowing them to naturally peak and fade.
## What is Urge Surfing?
Urge surfing is a concept that originated in addiction therapy and mindfulness practices. Developed by psychologist **Dr. Alan Marlatt**, it was designed to help people struggling with addictive behaviors by teaching them to observe their cravings rather than acting on them.
The fundamental aspect of the technique is based on the ideology that **urges are temporary** (so real), they rise, peak and then eventually fade away, which is where the term **surfing** intuitively comes from.
## How Urge Surfing Works
Urge surfing relies on mindfulness, where we recognise the urge, observe it, then let it fade away.
The process can be broken down into three main steps:
### 1. **Recognising the Urge**
The first step is to *identify the urge* as it arises. This means paying close attention to bodily sensations, thoughts, and emotions that signal a craving. For example:
- A sudden tension in the stomach when craving sweets.
- Restlessness and an urge to check social media.
- A racing heart and a compulsion to lash out in anger.
Acknowledging the urge early gives you the power to observe it rather than be consumed by it (kind of wanted to link this to "The Observer and the Observed").
### 2. **Riding the Wave**
Once you recognise the urge, the next step is to **observe it without reacting**. Imagine the urge as a wave in the ocean. rather than fighting it, you ride it by:
- *Breathing deeply*: In other words, focussing on slow deep breaths to achor yourself in the present moment
- *Noticing sensations*: Where do you feel the urge? Is it in your chest, hands, or stomach?
- *Labeling the urge*: Mentally note, "This is just a craving," or "This is just an impulse." This helps you distance yourself from it
- *Practicing non-judgment*: Don't label the urge as good or bad. Just observe it as it rises and falls
### 3. **Letting It Fade Away**
With time, urges *naturally subside*. Like waves, they reach a peak and then fade away. The trick behind this is accepting that they come and go, and this gives you a much better control over your impulses.
## The Science Behind Urge Surfing
Now you might be thinking "Hey you just spouted a bunch of things but where is the scientific correlation???". Let's take a look at the science behind it:
- *The 90-Second Rule*: Neuroscientist **Dr. Jill Bolte Taylor** suggests that most emotional reactions last about 90 seconds. If we can *sit with an urge* for that duration, it often begins to dissipate.
- *Neuroplasticity*: Every time we resist an impulse instead of acting on it, we *weaken the neural pathways* associated with that habit. Over time, the urges become less intense.
- *The Prefrontal Cortex*: Self-control is governed by the prefrontal cortex, the rational part of our brain. Practicing urge surfing strengthens this area, which improves discipline.
![Urge Surfing Diagram](./assets/urge-surfing.png)
*Source: [Link](https://www.thenourishedpath.com/blog/eating-mindfully-urge-surfing)*
## Conclusion
Urge surfing is truly a powerful technique when mastered, not only does it allow you to control your urges without giving in, it also helps you to become more self-disciplined. If you are interested in learning more about this, I would recommend reading the book "The Science of Self-Discipline" by Peter Hollins.

View File

@@ -0,0 +1,86 @@
:PROPERTIES:
:ID: CD093B85-BF68-4EAB-AABE-733C7BFC99DE
:END:
#+title: wp-growth-mindset
#+filetags: :blogs:zzq:
# Building a Growth Mindset
By Zaine Qayyum
---
This topic is something that I've been wanting to talk about for a while, and the reason is because of how important it is as human beings to have this **growth mindset**. You might ask "why? what is the need when I can just have a fixed mindset?". The answer is simple: having a growth mindset is essential for personal and professional success. This is what I wanted to talk about in this blog, and I hope you find it useful!
## Table of Contents
1. [What Is a Growth Mindset?](#what-is-a-growth-mindset)
2. [Why Does a Growth Mindset Matter?](#why-does-a-growth-mindset-matter)
3. [How to Develop a Growth Mindset](#how-to-develop-a-growth-mindset)
4. [Final Thoughts](#final-thoughts).
## What Is a Growth Mindset?
The term *growth mindset* was introduced by psychologist **Dr. Carol Dweck** in her research on motivation and learning. It refers to the belief that our abilities, intelligence, and talents can be developed through **effort, learning, and persistence**. Take for example the muscles in our body, we develop them through repeated "reps" and consistent effort. The same applies to our intelligence, talents, and abilities; we can develop them through effort, learning, and persistence.
This contrasts with a **fixed mindset**, where people believe their intelligence and talents are static traits, they either "have it" or they dont.
### Growth Mindset vs. Fixed Mindset
| Growth Mindset | Fixed Mindset |
|---------------|--------------|
| Challenges are opportunities to grow | Challenges are threats to avoid |
| Failure is a stepping stone for learning | Failure defines intelligence and worth |
| Effort is the path to mastery | If you have to try, you're not naturally talented |
| Constructive criticism is valuable | Criticism is a personal attack |
| Inspired by others' success | Feels threatened by others' success |
## Why Does a Growth Mindset Matter?
The question now might arise, "why does a growth mindset matter?"
Having a growth mindset is **not just motivational jargon,** but it has real benefits, here are some of them:
- **Increases resilience:** People with a growth mindset are more likely to persist in the face of challenges, which ultimately allows you to grow in multiple ways.
- **Encourages continuous learning:** Lifelong learning is something so valued and desired (subject for another blog?), and a growth mindset goes hand in hand with it.
- **Boosts performance:** Research shows that students and professionals with a growth mindset perform better over time. This "performance" can be related to arbitrary things like academic success, job performance, or personal growth.
- **Improves relationships:** It helps people handle feedback better and build stronger connections with others.
## How to Develop a Growth Mindset
### 1. **Reframe Failure as Learning**
Instead of viewing failure as proof of inadequacy, see it as feedback. Ask yourself:
- *What can I learn from this?*
- *How can I approach this differently next time?*
The questions I always ask myself are "What did I do that went well?" and "What can I do differently next time?"
### 2. **Challenges should be embraced**
A common trap of a fixed mindset is avoiding challenges to protect your self-esteem. Instead:
- Take on **new projects** that push your abilities.
- Step outside your **comfort zone** regularly.
- Remind yourself: *Every expert was once a beginner*.
### 3. **Use "Yet" to Change Your Self Talk**
Pay attention to your inner dialogue (yes we all have one, even if we don't realise it). If you catch yourself saying:
> *"I'm not good at this."*
Reframe it to:
> *"I'm not good at this **yet**."*
This small change can shift your perspective from **impossibility to potential**.
### 4. **Value Effort Over Talent**
Society often glorifies natural talent, but effort is what leads to mastery. Instead of aiming to be "the best," focus on:
- Developing **discipline and consistency**.
- Tracking your **progress** rather than comparing yourself to others.
- Celebrating small wins along the way.
## Final Thoughts
A **growth mindset** isnt something you "get" overnight, it takes a while to cultivate. Its a daily practice. It requires self awareness, patience, and a willingness to embrace discomfort. But once achieved, it can take you to unimaginable heights.
I honestly feel as though the best thing that worked for me was shifting my mindset, being positive about the situations I am in and learning to embrace the now.
I hope this inspires you even in the slightest :)
---

View File

@@ -0,0 +1,85 @@
:PROPERTIES:
:ID: CD093B85-BF68-4EAB-AABE-733C7BFC99DE
:END:
#+title: wp-growth-mindset
# Building a Growth Mindset
By Zaine Qayyum
---
This topic is something that I've been wanting to talk about for a while, and the reason is because of how important it is as human beings to have this **growth mindset**. You might ask "why? what is the need when I can just have a fixed mindset?". The answer is simple: having a growth mindset is essential for personal and professional success. This is what I wanted to talk about in this blog, and I hope you find it useful!
## Table of Contents
1. [What Is a Growth Mindset?](#what-is-a-growth-mindset)
2. [Why Does a Growth Mindset Matter?](#why-does-a-growth-mindset-matter)
3. [How to Develop a Growth Mindset](#how-to-develop-a-growth-mindset)
4. [Final Thoughts](#final-thoughts).
## What Is a Growth Mindset?
The term *growth mindset* was introduced by psychologist **Dr. Carol Dweck** in her research on motivation and learning. It refers to the belief that our abilities, intelligence, and talents can be developed through **effort, learning, and persistence**. Take for example the muscles in our body, we develop them through repeated "reps" and consistent effort. The same applies to our intelligence, talents, and abilities; we can develop them through effort, learning, and persistence.
This contrasts with a **fixed mindset**, where people believe their intelligence and talents are static traits, they either "have it" or they dont.
### Growth Mindset vs. Fixed Mindset
| Growth Mindset | Fixed Mindset |
|---------------|--------------|
| Challenges are opportunities to grow | Challenges are threats to avoid |
| Failure is a stepping stone for learning | Failure defines intelligence and worth |
| Effort is the path to mastery | If you have to try, you're not naturally talented |
| Constructive criticism is valuable | Criticism is a personal attack |
| Inspired by others' success | Feels threatened by others' success |
## Why Does a Growth Mindset Matter?
The question now might arise, "why does a growth mindset matter?"
Having a growth mindset is **not just motivational jargon,** but it has real benefits, here are some of them:
- **Increases resilience:** People with a growth mindset are more likely to persist in the face of challenges, which ultimately allows you to grow in multiple ways.
- **Encourages continuous learning:** Lifelong learning is something so valued and desired (subject for another blog?), and a growth mindset goes hand in hand with it.
- **Boosts performance:** Research shows that students and professionals with a growth mindset perform better over time. This "performance" can be related to arbitrary things like academic success, job performance, or personal growth.
- **Improves relationships:** It helps people handle feedback better and build stronger connections with others.
## How to Develop a Growth Mindset
### 1. **Reframe Failure as Learning**
Instead of viewing failure as proof of inadequacy, see it as feedback. Ask yourself:
- *What can I learn from this?*
- *How can I approach this differently next time?*
The questions I always ask myself are "What did I do that went well?" and "What can I do differently next time?"
### 2. **Challenges should be embraced**
A common trap of a fixed mindset is avoiding challenges to protect your self-esteem. Instead:
- Take on **new projects** that push your abilities.
- Step outside your **comfort zone** regularly.
- Remind yourself: *Every expert was once a beginner*.
### 3. **Use "Yet" to Change Your Self Talk**
Pay attention to your inner dialogue (yes we all have one, even if we don't realise it). If you catch yourself saying:
> *"I'm not good at this."*
Reframe it to:
> *"I'm not good at this **yet**."*
This small change can shift your perspective from **impossibility to potential**.
### 4. **Value Effort Over Talent**
Society often glorifies natural talent, but effort is what leads to mastery. Instead of aiming to be "the best," focus on:
- Developing **discipline and consistency**.
- Tracking your **progress** rather than comparing yourself to others.
- Celebrating small wins along the way.
## Final Thoughts
A **growth mindset** isnt something you "get" overnight, it takes a while to cultivate. Its a daily practice. It requires self awareness, patience, and a willingness to embrace discomfort. But once achieved, it can take you to unimaginable heights.
I honestly feel as though the best thing that worked for me was shifting my mindset, being positive about the situations I am in and learning to embrace the now.
I hope this inspires you even in the slightest :)
---

View File

@@ -0,0 +1,95 @@
:PROPERTIES:
:ID: D02B89DC-84D0-4211-A902-B9399F4179CA
:END:
#+title: wp-emotional-intelligence
#+filetags: :blogs:zzq:
# How to Build Emotional Intelligence (EQ) for Better Relationships
Someone asked me a while ago "bro, do you think I have emotional intelligence?", and after having that conversation, I thought to myself "what exactly does *mean* to have emotional intelligence? Emotional Intelligence (EQ) is the ability to recognise, understand, and manage your own emotions, as well as the emotions of others. I wanted to write out this post so that this can be better understood and applied to our daily lives.
---
## What is Emotional Intelligence (EQ)?
Emotional Intelligence is often broken down into five key components:
1. **Self-Awareness**: Recognising and understanding your own emotions.
2. **Self-Regulation**: Managing and controlling your emotional reactions.
3. **Motivation**: Harnessing emotions to pursue goals with energy and persistence.
4. **Empathy**: Understanding and sharing the feelings of others.
5. **Social Skills**: Building and maintaining healthy relationships through effective communication and conflict resolution.
Knowledge is of little use if not applied. These five components, one can say, are the building blocks for EQ.
---
## Why EQ Matters in Relationships
Relationships depend on emotional connection. Whether its with a partner, family member, friend, or colleague, EQ helps you:
- Communicate more effectively.
- Resolve conflicts constructively.
- Build trust and intimacy.
- Understand and meet the emotional needs of others.
Without emotional intelligence, you may not be able to *understand* the emotions of others, which can ultimately lead to conflicts.
---
## How to Build Emotional Intelligence for Better Relationships
Based on the 5 components of EQ, here are practical steps to develop your EQ and strengthen your relationships:
### **Self-Awareness**
- **Reflect on Your Emotions**: Take time each day to identify and label your emotions. Ask yourself, “What am I feeling right now, and why?”
- **Journal**: Writing about your emotions can help you process them and identify patterns in your reactions.
- **Seek Feedback**: Ask friends or family members how they perceive your emotional responses. This can provide valuable insights into blind spots.
### **Self-Regulation**
- **Pause Before Reacting**: When you feel a strong emotion, take a deep breath and give yourself a moment to respond thoughtfully rather than reacting impulsively.
- **Practice Stress Management**: Techniques like meditation, exercise, or deep breathing can help you stay calm in emotionally charged situations.
- **Set Boundaries**: Learn to say no and manage your emotional energy to avoid depletion.
### **Empathy**
- **Listen Actively**: Pay full attention when someone is speaking. Focus on their words, tone, and body language without interrupting or planning your response. There is a huge difference between active listening and passive listening.
- **Put Yourself in Their Shoes**: Try to understand the other persons perspective, even if you dont agree with it.
- **Validate Their Feelings**: Acknowledge their emotions by saying things like, “I understand why youd feel that way.”
### **Social Skills**
- **Communicate Clearly**: Use “I” statements to express your feelings without blaming others (e.g., “I feel upset when…”).
- **Practice Conflict Resolution**: Approach disagreements with a problem solving mindset rather than a confrontational one. Remember its you and them versus the problem, not each other!
- **Show Appreciation**: Regularly express gratitude and appreciation for the people in your life.
### **Motivation**
- **Set Personal Goals**: Identify what you want to achieve in your relationships and take steps to work toward those goals.
- **Stay Positive**: Focus on the good in your relationships and maintain a hopeful outlook, even during challenging times.
---
## Real-Life Examples of EQ in Action
There are many practical examples of EQ in action in our daily lives. Take work as an example, if you notice your colleague a little stressed, offer them support and ask if they need help! Not only will they feel grateful that they're being seen, you'll also strengthen your professional relationship with said colleague. Another one is in a platonic relationship, when a friend shares a problem, listen without judgement and offer empathy.
---
## The Long-Term Benefits of High EQ
Building emotional intelligence is a lifelong journey, but the rewards are immense. Over time, youll notice:
- Stronger, more meaningful relationships.
- Improved communication.
- Greater resilience in the face of challenges.
- A deeper understanding of yourself and others.
- Being able to actively listen to others.
---
## Final Thoughts
This whole thought and discussion stemmed from that single question. I find myself becoming more intrigued in the intricacies of relationships and human interaction. EQ is one of those components that make up a considerable portion of how we interact with others, without which relationships would become stale. Thank you for reading :)
---
*“Emotional intelligence is the key to both personal and professional success.” Daniel Goleman*

View File

@@ -0,0 +1,94 @@
:PROPERTIES:
:ID: D02B89DC-84D0-4211-A902-B9399F4179CA
:END:
#+title: wp-emotional-intelligence
# How to Build Emotional Intelligence (EQ) for Better Relationships
Someone asked me a while ago "bro, do you think I have emotional intelligence?", and after having that conversation, I thought to myself "what exactly does *mean* to have emotional intelligence? Emotional Intelligence (EQ) is the ability to recognise, understand, and manage your own emotions, as well as the emotions of others. I wanted to write out this post so that this can be better understood and applied to our daily lives.
---
## What is Emotional Intelligence (EQ)?
Emotional Intelligence is often broken down into five key components:
1. **Self-Awareness**: Recognising and understanding your own emotions.
2. **Self-Regulation**: Managing and controlling your emotional reactions.
3. **Motivation**: Harnessing emotions to pursue goals with energy and persistence.
4. **Empathy**: Understanding and sharing the feelings of others.
5. **Social Skills**: Building and maintaining healthy relationships through effective communication and conflict resolution.
Knowledge is of little use if not applied. These five components, one can say, are the building blocks for EQ.
---
## Why EQ Matters in Relationships
Relationships depend on emotional connection. Whether its with a partner, family member, friend, or colleague, EQ helps you:
- Communicate more effectively.
- Resolve conflicts constructively.
- Build trust and intimacy.
- Understand and meet the emotional needs of others.
Without emotional intelligence, you may not be able to *understand* the emotions of others, which can ultimately lead to conflicts.
---
## How to Build Emotional Intelligence for Better Relationships
Based on the 5 components of EQ, here are practical steps to develop your EQ and strengthen your relationships:
### **Self-Awareness**
- **Reflect on Your Emotions**: Take time each day to identify and label your emotions. Ask yourself, “What am I feeling right now, and why?”
- **Journal**: Writing about your emotions can help you process them and identify patterns in your reactions.
- **Seek Feedback**: Ask friends or family members how they perceive your emotional responses. This can provide valuable insights into blind spots.
### **Self-Regulation**
- **Pause Before Reacting**: When you feel a strong emotion, take a deep breath and give yourself a moment to respond thoughtfully rather than reacting impulsively.
- **Practice Stress Management**: Techniques like meditation, exercise, or deep breathing can help you stay calm in emotionally charged situations.
- **Set Boundaries**: Learn to say no and manage your emotional energy to avoid depletion.
### **Empathy**
- **Listen Actively**: Pay full attention when someone is speaking. Focus on their words, tone, and body language without interrupting or planning your response. There is a huge difference between active listening and passive listening.
- **Put Yourself in Their Shoes**: Try to understand the other persons perspective, even if you dont agree with it.
- **Validate Their Feelings**: Acknowledge their emotions by saying things like, “I understand why youd feel that way.”
### **Social Skills**
- **Communicate Clearly**: Use “I” statements to express your feelings without blaming others (e.g., “I feel upset when…”).
- **Practice Conflict Resolution**: Approach disagreements with a problem solving mindset rather than a confrontational one. Remember its you and them versus the problem, not each other!
- **Show Appreciation**: Regularly express gratitude and appreciation for the people in your life.
### **Motivation**
- **Set Personal Goals**: Identify what you want to achieve in your relationships and take steps to work toward those goals.
- **Stay Positive**: Focus on the good in your relationships and maintain a hopeful outlook, even during challenging times.
---
## Real-Life Examples of EQ in Action
There are many practical examples of EQ in action in our daily lives. Take work as an example, if you notice your colleague a little stressed, offer them support and ask if they need help! Not only will they feel grateful that they're being seen, you'll also strengthen your professional relationship with said colleague. Another one is in a platonic relationship, when a friend shares a problem, listen without judgement and offer empathy.
---
## The Long-Term Benefits of High EQ
Building emotional intelligence is a lifelong journey, but the rewards are immense. Over time, youll notice:
- Stronger, more meaningful relationships.
- Improved communication.
- Greater resilience in the face of challenges.
- A deeper understanding of yourself and others.
- Being able to actively listen to others.
---
## Final Thoughts
This whole thought and discussion stemmed from that single question. I find myself becoming more intrigued in the intricacies of relationships and human interaction. EQ is one of those components that make up a considerable portion of how we interact with others, without which relationships would become stale. Thank you for reading :)
---
*“Emotional intelligence is the key to both personal and professional success.” Daniel Goleman*

View File

@@ -0,0 +1,9 @@
:PROPERTIES:
:ID: 8CD2F4C4-22C2-4ECC-8F5F-C4779F8AC0F1
:END:
#+title: wp-week-12-reflection
#+filetags: :blogs:zzq:
# Week 12 reflections
12 out of the 52 weeks are now completed (following the [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601)), and I guess this blog post will be a little different from the usual *information-centric* posts. 12 weeks having passed from this year means there's only 9 months left of 2025, and i've come to realise that time is moving *quick*. The question then arose, "how can I maximise the time that I have?", the answer to which isn't as simple as one may think. Albeit this, let's take a look at one particularly useful equation that may serve as a guide to modelling the value of time:

View File

@@ -0,0 +1,8 @@
:PROPERTIES:
:ID: 8CD2F4C4-22C2-4ECC-8F5F-C4779F8AC0F1
:END:
#+title: wp-week-12-reflection
# Week 12 reflections
12 out of the 52 weeks are now completed (following the [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601)), and I guess this blog post will be a little different from the usual *information-centric* posts. 12 weeks having passed from this year means there's only 9 months left of 2025, and i've come to realise that time is moving *quick*. The question then arose, "how can I maximise the time that I have?", the answer to which isn't as simple as one may think. Albeit this, let's take a look at one particularly useful equation that may serve as a guide to modelling the value of time:

View File

@@ -0,0 +1,82 @@
:PROPERTIES:
:ID: 7e79e4c5-383d-450f-882c-33d4f87ba1b5
:END:
#+title: emacs-stuff-elisp
#+filetags: :emacs:elisp:guide:
-- use `<s` followed by `TAB`
#+BEGIN_SRC elisp
(defun my-echo-input ()
"Prompt the user for input and echo it back."
(interactive)
(message "hello"))
#+END_SRC
#+RESULTS:
: my-echo-input
#+begin_src emacs-lisp
(shell-command "thunar ~/Documents/ &")
(run-at-time "1 sec" nil #'delete-other-windows)
#+end_src
#+RESULTS:
: [nil 26600 20298 876807 nil delete-other-windows nil nil 917000 nil]
#+begin_src elisp
(defun open-current-dir()
(interactive)
(cond ((string-equal system-type "gnu/linux")
(shell-command (concat "thunar " ".")))
((string-equal system-type "darwin")
(shell-command (concat "open " "."))))
)
#+end_src
#+RESULTS:
: open-current-dir
#+begin_src elisp
(defun test()
(interactive)
(cond ((string-equal system-type "gnu/linux")
(message "linux"))
((string-equal system-type "darwin")
(message "mac"))
)
)
(defun kill-other-buffers-startup ()
"Kill all buffers except the current one."
(interactive)
(mapc (lambda (buffer)
(unless (eq buffer (current-buffer))
(kill-buffer buffer)))
(buffer-list)))
;(add-hook 'emacs-startup-hook #'kill-other-buffers-startup)
#+end_src
#+begin_src elisp
(defun create-weekly-entry ()
(interactive)
(let* ((current-date-time-format "[%Y-week-%V]")
(timestamp (format-time-string current-date-time-format))
(entry (concat "* Weekly Entry: " timestamp "\n"
"** Tasks:\n"
"** Notes:\n"
)))
(write-region entry nil "~/master-folder/org_files/todo/master-tl.org" 'append)))
#+end_src
#+RESULTS:
: test

View File

@@ -0,0 +1,81 @@
:PROPERTIES:
:ID: 7e79e4c5-383d-450f-882c-33d4f87ba1b5
:END:
#+title: emacs-stuff-elisp
-- use `<s` followed by `TAB`
#+BEGIN_SRC elisp
(defun my-echo-input ()
"Prompt the user for input and echo it back."
(interactive)
(message "hello"))
#+END_SRC
#+RESULTS:
: my-echo-input
#+begin_src emacs-lisp
(shell-command "thunar ~/Documents/ &")
(run-at-time "1 sec" nil #'delete-other-windows)
#+end_src
#+RESULTS:
: [nil 26600 20298 876807 nil delete-other-windows nil nil 917000 nil]
#+begin_src elisp
(defun open-current-dir()
(interactive)
(cond ((string-equal system-type "gnu/linux")
(shell-command (concat "thunar " ".")))
((string-equal system-type "darwin")
(shell-command (concat "open " "."))))
)
#+end_src
#+RESULTS:
: open-current-dir
#+begin_src elisp
(defun test()
(interactive)
(cond ((string-equal system-type "gnu/linux")
(message "linux"))
((string-equal system-type "darwin")
(message "mac"))
)
)
(defun kill-other-buffers-startup ()
"Kill all buffers except the current one."
(interactive)
(mapc (lambda (buffer)
(unless (eq buffer (current-buffer))
(kill-buffer buffer)))
(buffer-list)))
;(add-hook 'emacs-startup-hook #'kill-other-buffers-startup)
#+end_src
#+begin_src elisp
(defun create-weekly-entry ()
(interactive)
(let* ((current-date-time-format "[%Y-week-%V]")
(timestamp (format-time-string current-date-time-format))
(entry (concat "* Weekly Entry: " timestamp "\n"
"** Tasks:\n"
"** Notes:\n"
)))
(write-region entry nil "~/master-folder/org_files/todo/master-tl.org" 'append)))
#+end_src
#+RESULTS:
: test

43
20250329114733-ise.org Normal file
View File

@@ -0,0 +1,43 @@
:PROPERTIES:
:ID: c69e4c4d-2fb4-4cf1-a835-a235cf6db8e9
:END:
#+title: ise
#+filetags: :uni:index:
* Intelligent Software Engineering Key Revision Points (Lectures 1-7)
** DONE Lecture 8 - 10
Test questions will be randomly chosen from these key points. Key revision points for
lecture 8-10 will be verbally covered during lectures
** DONE Lecture 1
General Bug Report Process (page 9)
Simple Bug Report Classification Method (pages 12-20)
** DONE Lecture 2
DiMerent Configuration Sampling Methods (pages 8-19)
Configuration Encodings (pages 21-28)
Single Environment Learning (DaL) (pages 39-46)
** DONE Lecture 3
Classic Code Complexity Metrics (pages 8-27)
How to Mine Bugs for Learning? (pages 37-43)
Cross Project Prediction (HDP) (pages 50-60)
** DONE Lecture 4
DiMerent Coverage Metrics and Branch Concepts (pages 6-12)
Evolutionary Algorithm (pages 24-32)
Test Case Generation (EvoSuite) (pages 44-55)
Multi/Many-objective Software Testing (Sapienz) (pages 80-97)
** DONE Lecture 5
Model free Tuning (for ORM) (pages 9-17)
Model free Tuning (BestConfig) (pages 18-23)
** DONE Lecture 7
Statistical Test Selection and Use (pages 21-67)
* Week 1
[[id:06b2a012-4e8a-4a8a-9494-de7ed9fbe1d3][ise_week_1]]
* Week 2
[[id:f308642d-fcf3-410b-b154-d60582e112a2][ise_week_2]]
* Week 3
[[id:1d0fa257-579f-49f3-b8fd-a3b68ddccf10][ise_week_3]]
* Week 4
[[id:ebf874d9-0554-47f0-be8b-5c9a948738bf][ise_week_4]]
* Week 5
[[id:0e70c535-b145-42d9-a9ed-fe48cddbb1a5][ise_week_5]]
* Week 7
[[id:9ad3f3f1-55f7-4114-bc8c-17250b6dd25d][ise_week_7]]

43
20250329114733-ise.org~ Normal file
View File

@@ -0,0 +1,43 @@
:PROPERTIES:
:ID: c69e4c4d-2fb4-4cf1-a835-a235cf6db8e9
:END:
#+title: ISE
#+filetags: :uni:ise:index:
* Intelligent Software Engineering Key Revision Points (Lectures 1-7)
** TODO Lecture 8 - 10
Test questions will be randomly chosen from these key points. Key revision points for
lecture 8-10 will be verbally covered during lectures
** DONE Lecture 1
General Bug Report Process (page 9)
Simple Bug Report Classification Method (pages 12-20)
** DONE Lecture 2
DiMerent Configuration Sampling Methods (pages 8-19)
Configuration Encodings (pages 21-28)
Single Environment Learning (DaL) (pages 39-46)
** DONE Lecture 3
Classic Code Complexity Metrics (pages 8-27)
How to Mine Bugs for Learning? (pages 37-43)
Cross Project Prediction (HDP) (pages 50-60)
** DONE Lecture 4
DiMerent Coverage Metrics and Branch Concepts (pages 6-12)
Evolutionary Algorithm (pages 24-32)
Test Case Generation (EvoSuite) (pages 44-55)
Multi/Many-objective Software Testing (Sapienz) (pages 80-97)
** DONE Lecture 5
Model free Tuning (for ORM) (pages 9-17)
Model free Tuning (BestConfig) (pages 18-23)
** DONE Lecture 7
Statistical Test Selection and Use (pages 21-67)
* Week 1
[[id:06b2a012-4e8a-4a8a-9494-de7ed9fbe1d3][ise-week-1]]
* Week 2
[[id:f308642d-fcf3-410b-b154-d60582e112a2][ise-week-2]]
* Week 3
[[id:1d0fa257-579f-49f3-b8fd-a3b68ddccf10][ise-week-3]]
* Week 4
[[id:ebf874d9-0554-47f0-be8b-5c9a948738bf][ise-week-4]]
* Week 5
[[id:0e70c535-b145-42d9-a9ed-fe48cddbb1a5][ise-week-5]]
* Week 7
[[id:9ad3f3f1-55f7-4114-bc8c-17250b6dd25d][ise-week-7]]

View File

@@ -0,0 +1,56 @@
:PROPERTIES:
:ID: 06b2a012-4e8a-4a8a-9494-de7ed9fbe1d3
:END:
#+title: ise_week_1
#+filetags: :uni:notes:
* Bug report classification
Perform bug report classification with AI following the steps
below:
- Text filtering
- Stemming
- Indexing
- Train machine learning models, i.e., Decision Tree, Naive Bayes, and Logistic
Regression
- Prediction (after data pre-processing)
** Text filtering:
- Punctuation removal
- Specific transformations occur:
the myUser has no meaning, its just a word. You need to split it into two meaningful words.
- Stop words should not be removed, as it changes the whole meaning of a bug report.
- Unlike other NLP tasks, removing stop words may distort the meaning of bug reports.
** Stemming:
- Stemming reduces different forms of a word to its common base by sequential application of stemming rules. For example: light caresses colours becomes Light caress colour
** Indexing:
- Indexing: we need to convert the text into numeric representation, there are two common ways of doing this: TF and IDF
- TF: total words / specific word . for example: "bug" appears 50 times in a 150 terms.
- IDF: We penalise certain words based on their frequency.
- bug report classifications here often does not use IDF but TF, because some frequent terms should not be penalized
- For each report, we will have a vector of indexing for words in the reports according to a dictionary
- Example: A bug report = {“this”, “bugs”, “failure”, “interesting”, …}
Vector = <0.123, 0.34, 0.1, ….>
** DT
- What is decision tree: a tree structure that split the data depending on different values.
- Each node is a test on the attribute.
- Each branch represents the outcome.
** NB
- What is Naive Bayes? Classifier based on the conditional probability given by the Bayes theorem.
- Calculating the probability of each class, and classify the given features into the one with higher probability.
** LR
- What is logistic regression: a linear model for classification
- Fitting the logistic growth and the sigmoid midpoint
- Output a probability, but can use a cutoff point to decide class.
** Results:
Choose the top 20/50 words when theyre used as a feature

View File

@@ -0,0 +1,56 @@
:PROPERTIES:
:ID: 06b2a012-4e8a-4a8a-9494-de7ed9fbe1d3
:END:
#+title: ise-week-1
#+filetags: :uni:ise:notes:
* Bug report classification
Perform bug report classification with AI following the steps
below:
- Text filtering
- Stemming
- Indexing
- Train machine learning models, i.e., Decision Tree, Naive Bayes, and Logistic
Regression
- Prediction (after data pre-processing)
** Text filtering:
- Punctuation removal
- Specific transformations occur:
the myUser has no meaning, its just a word. You need to split it into two meaningful words.
- Stop words should not be removed, as it changes the whole meaning of a bug report.
- Unlike other NLP tasks, removing stop words may distort the meaning of bug reports.
** Stemming:
- Stemming reduces different forms of a word to its common base by sequential application of stemming rules. For example: light caresses colours becomes Light caress colour
** Indexing:
- Indexing: we need to convert the text into numeric representation, there are two common ways of doing this: TF and IDF
- TF: total words / specific word . for example: "bug" appears 50 times in a 150 terms.
- IDF: We penalise certain words based on their frequency.
- bug report classifications here often does not use IDF but TF, because some frequent terms should not be penalized
- For each report, we will have a vector of indexing for words in the reports according to a dictionary
- Example: A bug report = {“this”, “bugs”, “failure”, “interesting”, …}
Vector = <0.123, 0.34, 0.1, ….>
** DT
- What is decision tree: a tree structure that split the data depending on different values.
- Each node is a test on the attribute.
- Each branch represents the outcome.
** NB
- What is Naive Bayes? Classifier based on the conditional probability given by the Bayes theorem.
- Calculating the probability of each class, and classify the given features into the one with higher probability.
** LR
- What is logistic regression: a linear model for classification
- Fitting the logistic growth and the sigmoid midpoint
- Output a probability, but can use a cutoff point to decide class.
** Results:
Choose the top 20/50 words when theyre used as a feature

View File

@@ -0,0 +1,229 @@
:PROPERTIES:
:ID: f308642d-fcf3-410b-b154-d60582e112a2
:END:
#+title: ise_week_2
#+filetags: :uni:notes:
* DONE Different Configuration Sampling Methods (pages 8-19)
* DONE Configuration Encodings (pages 21-28)
* DONE Single Environment Learning (DaL) (pages 39-46)
* 2.1
** Configuration Sampling
In general machine learning problem, we dont care where the data comes from , but here we do.
Configuration sampling is used to select representative samples for learning performance models.
- Types of options:
- Binary (e.g., on/off)
- Numeric (e.g., value ranges)
- Goal: Balance model accuracy with sampling effort.
** Binary Sampling Strategies
*** Option-wise Strategy
- Each binary option is selected at least once in some configuration.
- Minimize other options to reduce unknown interaction effects.
- Size: Linear in the number of binary options.
*** T-wise Strategy
- Covers all T-wise combinations of options (T ≥ 2).
- Example (2-wise): {001}, {010}, {100}, {111}
- Size: Exponential in T.
*** Negative Option-wise Strategy
- For each option: one configuration where it is disabled, all others enabled.
- Adds one all-yes configuration.
- Size: Linear.
- Example (3 options): {110}, {101}, {011}, {111}
- you can see the 4th one is an all-yes configuration
*** Random (Binary)
- Select n configurations randomly.
- Simple but may be less representative.
*** Difference Between Option-wise and Negative Option-wise Strategies
Both strategies are used for sampling configurations in systems with binary options, but they focus on different aspects of option selection.
**** Option-wise Strategy
- **Goal:** Ensure each option is enabled (selected) at least once across configurations.
- For every binary option, create a configuration where it is **on**.
- Other options are minimized to avoid unknown interactions.
- **Focus:** Testing the **presence** of each option.
- **Example (3 options):**
- {100} → Option 1 enabled, others off
- {010} → Option 2 enabled, others off
- {001} → Option 3 enabled, others off
**** Negative Option-wise Strategy
- **Goal:** Ensure each option is disabled (deselected) at least once.
- For each option, create a configuration where it is **off**, and **all others are on**.
- Also includes a configuration where all options are **on**.
- **Focus:** Testing the **absence** of each option.
- **Example (3 options):**
- {110} → Option 3 disabled
- {101} → Option 2 disabled
- {011} → Option 1 disabled
- {111} → All options enabled
**** Comparison Summary
| Feature | Option-wise | Negative Option-wise |
|-------------------------+--------------------------+-------------------------------|
| Focus | Presence of each option | Absence of each option |
| What is varied | Each option enabled once | Each option disabled once |
| Other options in config | Typically disabled | Typically enabled |
| Additional config? | Not required | Yes, includes all-on config |
| Use case | Minimal presence testing | Influence of removing options |
** Non-Binary (Numeric) Sampling Strategies
*** One-Factor-At-A-Time (OFAT)
- Assumes no interactions among options.
- Varies one option at a time, others fixed at center values.
- Size: Linear in number of options.
- Example (values = 1,3,5): {333}, {533}, {133}, {353}, {313}, {331}, {335}
*** Box-Behnken Design (BBD)
- Captures quadratic effects and 2-wise interactions.
- Uses subset of 3^k full factorial (min, center, max).
- Size: Exponential in number of options.
- Example: {111}, {113}, {115}, {131}, {151}, etc.
*** Central Composite Design (CCD)
- Combines:
- 2^k factorial points
- 2k axial points at α-distance
- 1 center point
- Captures curvature and interactions.
- Example: 8 full factorial + 6 axial + {333}
*** Plackett-Burman Design (PBD)
- Focus on main effects, assumes negligible interactions.
- Uses predefined seeds, e.g., PBD(9,3)
- First config from seed, rest by right-shifting seed.
- Uses indices only for values.
- Example: If O = {1,100,1000,10000,100000}, index 3 could mean 1, 1000, 100000
*** Random (Non-Binary)
- Random selection of numeric configurations.
- Risk of non-uniformity and clustering.
- Can negatively impact learning performance.
** Mixed Variable Sampling
Some systems include both binary and non-binary (numeric) configuration options.
These are referred to as **mixed systems**.
- Requires hybrid or combined strategies to ensure representative coverage.
- One approach: **Permute over the mixed space** by combining possible binary and numeric value combinations.
- This can grow combinatorially, so sampling techniques may be needed to reduce the total number of permutations.
*** Example
- Non-binary configs: {0.1, 0.4, 5}, {0.2, 0.4, 7}, {0.2, 0.7, 5}
- Binary configs: {1,0}, {1,1}
- Full mixed permutations:
- {0.1, 0.4, 5, 1, 0}
- {0.1, 0.4, 5, 1, 1}
- {0.2, 0.4, 7, 1, 0}
- {0.2, 0.4, 7, 1, 1}
- {0.2, 0.7, 5, 1, 0}
- {0.2, 0.7, 5, 1, 1}
* 2.2
** Single Environment Learning: DeepPerf
Source: Ha & Zhang, ICSE 2019
DeepPerf is an early approach using deep neural networks (>3 layers) to predict software performance in configurable systems.
- Designed to address:
- Small data size: Limited measurements available.
- Feature sparsity: Only a few configuration options significantly impact performance.
- Network instability: Tackled with tailored hyperparameter tuning.
** Limitation of DeepPerf
- Does not handle sample sparsity, a major issue in configuration performance prediction.
** Improved Approach: Divide-and-Learn (DaL)
Source: Gong & Chen, ESEC/FSE 2023
*** Key Problem: Sample Sparsity
- Caused by:
- Inherited feature sparsity.
- Small configuration changes leading to drastic performance shifts.
- Not all configurations being valid.
- Training data is sparse due to expensive measurements.
*** Key Properties of Configuration Landscape
1. Intra-division smoothness: Configurations in the same division show smooth performance variations.
2. Inter-division sharpness: Cross-division configurations differ significantly, possibly on key options.
Risk: Limited data might lead to overfitting within divisions.
*** Architecture of DaL
Three Goals:
1. Divide the configuration data into meaningful divisions → function ϕ
2. Learn a local model for each division → function μ
3. Assign new configurations to the correct local model → using ϕ and μ
- Implementation:
- CART (Decision Tree) is used for dividing.
- DeepPerf models are trained within each division.
- Random Forest is used for classifying unseen configurations into divisions.
*** Trade-off: Number of Divisions
- More divisions → better at tackling sparsity, but less data per model → risks underfitting.
- Need to balance:
- Generalizability vs.
- Specialization
*** Results
- DaL outperforms or matches state-of-the-art in 33 out of 40 cases.
- Achieves up to 1.94× improvement.
- Needs fewer training samples for same accuracy.
- Especially beneficial in complex systems or with more training data.
* 2.3
** Single Environment Learning: Encoding
Source: Gong & Chen, MSR 2022
A study conducted by the lab investigates how different encoding schemes impact the software performance learning pipeline.
*** Three Common Encoding Schemes
- Label encoding
- Scaled label encoding (e.g., max-min normalization)
- One-hot encoding
** Encoding Schemes Explained
*** Label Encoding
- Converts configuration options into numeric values.
- Example:
- Configuration: (cache_size, interval, ssl, data_strategy)
- Values: cache_size = (1, 10, 10000), interval = (14), ssl = (0, 1), data_strategy = (strategy_1, strategy_2, strategy_3)
- Encoded: (10000, 2, 1, 1) → (2, 1, 1, 1) → data_strategy: (0, 1, 2)
*** Scaled Label Encoding
- Similar to label encoding but normalizes all values to the range [0, 1].
- Example (10000, 2, 1, 1) becomes (1, 1/3, 1, 0.5)
*** One-Hot Encoding
- Transforms each categorical value into a binary vector.
- Example: (10000, 2, 1, 1) becomes (0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0)
** Community Debate and Justifications
- Categorical features (e.g., cache_mode = memory, disk, mixed):
- Label encoding implies false ordering (1, 2, 3)
- One-hot encoding avoids this but may introduce multicollinearity.
- Numeric options (e.g., cache_size = 1, 10, 10000):
- Label encoding maintains order but struggles with large scale differences.
- Scaled label encoding improves numeric stability but weakens interaction with binary features.
** Study Protocol
- Evaluated using 7 learning algorithms across 5 software systems.

View File

@@ -0,0 +1,229 @@
:PROPERTIES:
:ID: f308642d-fcf3-410b-b154-d60582e112a2
:END:
#+title: ise-week-2
#+filetags: :uni:ise:notes:
* DONE Different Configuration Sampling Methods (pages 8-19)
* DONE Configuration Encodings (pages 21-28)
* DONE Single Environment Learning (DaL) (pages 39-46)
* 2.1
** Configuration Sampling
In general machine learning problem, we dont care where the data comes from , but here we do.
Configuration sampling is used to select representative samples for learning performance models.
- Types of options:
- Binary (e.g., on/off)
- Numeric (e.g., value ranges)
- Goal: Balance model accuracy with sampling effort.
** Binary Sampling Strategies
*** Option-wise Strategy
- Each binary option is selected at least once in some configuration.
- Minimize other options to reduce unknown interaction effects.
- Size: Linear in the number of binary options.
*** T-wise Strategy
- Covers all T-wise combinations of options (T ≥ 2).
- Example (2-wise): {001}, {010}, {100}, {111}
- Size: Exponential in T.
*** Negative Option-wise Strategy
- For each option: one configuration where it is disabled, all others enabled.
- Adds one all-yes configuration.
- Size: Linear.
- Example (3 options): {110}, {101}, {011}, {111}
- you can see the 4th one is an all-yes configuration
*** Random (Binary)
- Select n configurations randomly.
- Simple but may be less representative.
*** Difference Between Option-wise and Negative Option-wise Strategies
Both strategies are used for sampling configurations in systems with binary options, but they focus on different aspects of option selection.
**** Option-wise Strategy
- **Goal:** Ensure each option is enabled (selected) at least once across configurations.
- For every binary option, create a configuration where it is **on**.
- Other options are minimized to avoid unknown interactions.
- **Focus:** Testing the **presence** of each option.
- **Example (3 options):**
- {100} → Option 1 enabled, others off
- {010} → Option 2 enabled, others off
- {001} → Option 3 enabled, others off
**** Negative Option-wise Strategy
- **Goal:** Ensure each option is disabled (deselected) at least once.
- For each option, create a configuration where it is **off**, and **all others are on**.
- Also includes a configuration where all options are **on**.
- **Focus:** Testing the **absence** of each option.
- **Example (3 options):**
- {110} → Option 3 disabled
- {101} → Option 2 disabled
- {011} → Option 1 disabled
- {111} → All options enabled
**** Comparison Summary
| Feature | Option-wise | Negative Option-wise |
|-------------------------+--------------------------+-------------------------------|
| Focus | Presence of each option | Absence of each option |
| What is varied | Each option enabled once | Each option disabled once |
| Other options in config | Typically disabled | Typically enabled |
| Additional config? | Not required | Yes, includes all-on config |
| Use case | Minimal presence testing | Influence of removing options |
** Non-Binary (Numeric) Sampling Strategies
*** One-Factor-At-A-Time (OFAT)
- Assumes no interactions among options.
- Varies one option at a time, others fixed at center values.
- Size: Linear in number of options.
- Example (values = 1,3,5): {333}, {533}, {133}, {353}, {313}, {331}, {335}
*** Box-Behnken Design (BBD)
- Captures quadratic effects and 2-wise interactions.
- Uses subset of 3^k full factorial (min, center, max).
- Size: Exponential in number of options.
- Example: {111}, {113}, {115}, {131}, {151}, etc.
*** Central Composite Design (CCD)
- Combines:
- 2^k factorial points
- 2k axial points at α-distance
- 1 center point
- Captures curvature and interactions.
- Example: 8 full factorial + 6 axial + {333}
*** Plackett-Burman Design (PBD)
- Focus on main effects, assumes negligible interactions.
- Uses predefined seeds, e.g., PBD(9,3)
- First config from seed, rest by right-shifting seed.
- Uses indices only for values.
- Example: If O = {1,100,1000,10000,100000}, index 3 could mean 1, 1000, 100000
*** Random (Non-Binary)
- Random selection of numeric configurations.
- Risk of non-uniformity and clustering.
- Can negatively impact learning performance.
** Mixed Variable Sampling
Some systems include both binary and non-binary (numeric) configuration options.
These are referred to as **mixed systems**.
- Requires hybrid or combined strategies to ensure representative coverage.
- One approach: **Permute over the mixed space** by combining possible binary and numeric value combinations.
- This can grow combinatorially, so sampling techniques may be needed to reduce the total number of permutations.
*** Example
- Non-binary configs: {0.1, 0.4, 5}, {0.2, 0.4, 7}, {0.2, 0.7, 5}
- Binary configs: {1,0}, {1,1}
- Full mixed permutations:
- {0.1, 0.4, 5, 1, 0}
- {0.1, 0.4, 5, 1, 1}
- {0.2, 0.4, 7, 1, 0}
- {0.2, 0.4, 7, 1, 1}
- {0.2, 0.7, 5, 1, 0}
- {0.2, 0.7, 5, 1, 1}
* 2.2
** Single Environment Learning: DeepPerf
Source: Ha & Zhang, ICSE 2019
DeepPerf is an early approach using deep neural networks (>3 layers) to predict software performance in configurable systems.
- Designed to address:
- Small data size: Limited measurements available.
- Feature sparsity: Only a few configuration options significantly impact performance.
- Network instability: Tackled with tailored hyperparameter tuning.
** Limitation of DeepPerf
- Does not handle sample sparsity, a major issue in configuration performance prediction.
** Improved Approach: Divide-and-Learn (DaL)
Source: Gong & Chen, ESEC/FSE 2023
*** Key Problem: Sample Sparsity
- Caused by:
- Inherited feature sparsity.
- Small configuration changes leading to drastic performance shifts.
- Not all configurations being valid.
- Training data is sparse due to expensive measurements.
*** Key Properties of Configuration Landscape
1. Intra-division smoothness: Configurations in the same division show smooth performance variations.
2. Inter-division sharpness: Cross-division configurations differ significantly, possibly on key options.
Risk: Limited data might lead to overfitting within divisions.
*** Architecture of DaL
Three Goals:
1. Divide the configuration data into meaningful divisions → function ϕ
2. Learn a local model for each division → function μ
3. Assign new configurations to the correct local model → using ϕ and μ
- Implementation:
- CART (Decision Tree) is used for dividing.
- DeepPerf models are trained within each division.
- Random Forest is used for classifying unseen configurations into divisions.
*** Trade-off: Number of Divisions
- More divisions → better at tackling sparsity, but less data per model → risks underfitting.
- Need to balance:
- Generalizability vs.
- Specialization
*** Results
- DaL outperforms or matches state-of-the-art in 33 out of 40 cases.
- Achieves up to 1.94× improvement.
- Needs fewer training samples for same accuracy.
- Especially beneficial in complex systems or with more training data.
* 2.3
** Single Environment Learning: Encoding
Source: Gong & Chen, MSR 2022
A study conducted by the lab investigates how different encoding schemes impact the software performance learning pipeline.
*** Three Common Encoding Schemes
- Label encoding
- Scaled label encoding (e.g., max-min normalization)
- One-hot encoding
** Encoding Schemes Explained
*** Label Encoding
- Converts configuration options into numeric values.
- Example:
- Configuration: (cache_size, interval, ssl, data_strategy)
- Values: cache_size = (1, 10, 10000), interval = (14), ssl = (0, 1), data_strategy = (strategy_1, strategy_2, strategy_3)
- Encoded: (10000, 2, 1, 1) → (2, 1, 1, 1) → data_strategy: (0, 1, 2)
*** Scaled Label Encoding
- Similar to label encoding but normalizes all values to the range [0, 1].
- Example (10000, 2, 1, 1) becomes (1, 1/3, 1, 0.5)
*** One-Hot Encoding
- Transforms each categorical value into a binary vector.
- Example: (10000, 2, 1, 1) becomes (0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0)
** Community Debate and Justifications
- Categorical features (e.g., cache_mode = memory, disk, mixed):
- Label encoding implies false ordering (1, 2, 3)
- One-hot encoding avoids this but may introduce multicollinearity.
- Numeric options (e.g., cache_size = 1, 10, 10000):
- Label encoding maintains order but struggles with large scale differences.
- Scaled label encoding improves numeric stability but weakens interaction with binary features.
** Study Protocol
- Evaluated using 7 learning algorithms across 5 software systems.

View File

@@ -0,0 +1,182 @@
:PROPERTIES:
:ID: 1d0fa257-579f-49f3-b8fd-a3b68ddccf10
:END:
#+title: ise_week_3
#+filetags: :uni:notes:
* DONE Classic Code Complexity Metrics (pages 8-27)
* DONE How to Mine Bugs for Learning? (pages 37-43)
* DONE Cross Project Prediction (HDP) (pages 50-60)
* 3.1 Intelligent Software Engineering: Classic Metrics
** Software Defect Prediction
- The foundation of software defect prediction lies in metric identification.
- This was a key research direction in the 1980s.
- Metrics aim to quantify properties of code to detect potential defects and improve quality.
** Classic Code Metrics
*** 1. McCabe Cyclomatic Complexity
- Purpose: Measures the complexity of code based on the number of linearly independent paths in the codes flow graph.
**** Why it Matters
- More conditional statements = More possible execution paths = Higher complexity.
- Useful for identifying complex, hard-to-test, and error-prone code.
**** Simple Definition
- McCabe Complexity = Number of simple conditions + 1
**** What is a “Simple Condition”?
- A conditional without logical connectors (AND, OR).
- Examples:
- if (a > b)
- while (a > b)
- for (a=b; a > b; b++)
- do {…} while (a > b)
**** Compound Conditions
- Count each simple condition inside:
- if (a > b || a > 2) → 2 simple conditions
- if (a > b && a > 2) → 2 simple conditions
**** Use Case
- Helps determine test case count needed for complete branch coverage.
*** 2. Halstead Complexity Measures
- Purpose: Measures complexity based on the operators and operands used in code.
**** Definitions:
- n1: Number of distinct operators (e.g., !=, !, %, /, *, +, &&, ||)
- n2: Number of distinct operands (e.g., variable names, constants, types like bool, char)
- N1: Total occurrences of operators
- N2: Total occurrences of operands
**** Why Use Halstead?
- Evaluates:
- Code length
- Code vocabulary
- Effort required to implement or understand the code
- Potential bugs
*** 3. Lines of Code (LOC)
- LOC: Total number of lines in a program.
- Comment Lines: Lines containing only comments.
**** Usefulness:
- Simple indicator of:
- Code size
- Code density
- Maintainability and readability
* 3.2 Intelligent Software Engineering: Within-Project Prediction
** Just-in-Time (JIT) Defect Prediction
- Based on the classic work by Kim et al. (2008).
- Focuses on predicting defects at the commit/change level rather than file or module level.
** Steps in the JIT Defect Prediction Pipeline:
1. File-level changes are extracted from a project's revision history.
2. Bug fix changes are identified using keywords in SCM (Source Code Management) change log messages.
3. Bug-introducing and clean changes are identified by tracing backwards from the bug fix commits.
4. A classification model (e.g., SVM) is trained on these labeled examples.
5. Once trained, the classifier can predict if new code changes are likely to be buggy or clean.
** Change-wise Prediction Details
*** Change History Extraction
- Collected information includes:
- Change log
- Author
- Change date
- Source code
- Change delta
- Change metadata
*** Identifying Bug-Introducing Changes
**** Step 1: Search for Bug Fixes
- Use keywords (e.g., “fix”, “bug”, “patch”) to find bug-fixing commits.
**** Step 2: Use the SZZ Algorithm
- Determine what was changed in bug fixes.
- Produces a list of regions ("hunks") showing differences between two revisions.
- Deleted or modified code in each hunk is treated as the location of a bug.
- Traces origin of this code to find the earlier bug-introducing changes.
** Example Walkthrough
*** Revision 1:
- Initial creation of a function `bar`.
- Introduces a bug: `if (report == null)` (should be `!=`).
- SCM annotate shows all lines as modified in revision 1 by "kim".
*** Revision 2:
- Two changes:
- Function `bar` renamed to `foo`.
- Argument changed from `report` to `report.str` in `println`.
- Annotate output shows lines 1 and 4 were last modified by "ejw" in revision 2.
*** Revision 3:
- Bug fix applied: changes `==` to `!=` on line 3.
- SZZ algorithm compares revisions 3 and 2, identifying line 3 as modified.
- Traces line 3s origin back to revision 1 — identifying the bug-introducing change.
* 3.3 Intelligent Software Engineering: Cross-Project Prediction (HDP)
** Heterogeneous Defect Prediction (HDP)
- Based on the work by Nam and Kim (2015).
- Motivation: Metrics used for defect prediction often differ across projects.
- Goal: Address the metric mismatching problem across projects (heterogeneous settings).
- Classifier agnostic — can be used with any machine learning model.
** HDP Architecture
*** Metric Selection in Source Datasets
- Uses well-known feature selection methods:
- Gain ratio
- Chi-square
- Relief-F
- Significance attribute evaluation
- Empirical testing used to choose the best approach.
- Top 15% metrics per source project are selected.
- Metric mismatching arises because each project may prioritize different metrics.
*** Matching Source and Target Metrics
**** Key Steps:
1. Pair all metrics from source and target projects.
2. Remove poorly matched metrics based on a cutoff threshold for matching scores.
3. Apply maximum weighted bipartite matching to select the best group of matched metric pairs:
- Goal: Maximize sum of matching scores.
- Ensure no duplicated metrics are selected.
**** Example:
- 2 source metrics: X1, X2
- 2 target metrics: Y1, Y2
- Matching pairs: (X1,Y1), (X1,Y2), (X2,Y1), (X2,Y2)
After applying a cutoff threshold of 0.30:
- Group 1: (X1,Y1) and (X2,Y2) with total score 1.3 (=0.8+0.5)
- Group 2: (X2,Y1) with score 0.4 (Stands alone (can't be paired with any other remaining pair without duplication)).
- Group 1 is chosen as the matched metric set.
** Methods for Calculating Matching Scores
*** Percentile-Based Method
- Compares 9 percentiles (10th, 20th, ..., 90th) between source and target metric values.
- Uses the formula:
Pij(n) = 1 - |spij(n) - bpij(n)| / bpij(n)
- spij(n): smaller percentile value
- bpij(n): bigger percentile value
- Matching score is 1 when all percentiles are identical.
*** Kolmogorov-Smirnov (KS) Test Method
- Non-parametric two-sample test.
- Useful when distributions are unknown or have unequal variances.
- Computes a p-value to indicate the similarity.
- Matching score derived from the p-value.
*** Spearmans Rank Correlation Coefficient Method
- Measures correlation between two sets of values.
- If dataset sizes differ, randomly sample the larger set to match sizes.
** Classifier Independence
- HDP approach can be paired with any machine learning algorithm (e.g., SVM, RF, etc.)

View File

@@ -0,0 +1,182 @@
:PROPERTIES:
:ID: 1d0fa257-579f-49f3-b8fd-a3b68ddccf10
:END:
#+title: ise-week-3
#+filetags: :uni:ise:notes:
* DONE Classic Code Complexity Metrics (pages 8-27)
* DONE How to Mine Bugs for Learning? (pages 37-43)
* DONE Cross Project Prediction (HDP) (pages 50-60)
* 3.1 Intelligent Software Engineering: Classic Metrics
** Software Defect Prediction
- The foundation of software defect prediction lies in metric identification.
- This was a key research direction in the 1980s.
- Metrics aim to quantify properties of code to detect potential defects and improve quality.
** Classic Code Metrics
*** 1. McCabe Cyclomatic Complexity
- Purpose: Measures the complexity of code based on the number of linearly independent paths in the codes flow graph.
**** Why it Matters
- More conditional statements = More possible execution paths = Higher complexity.
- Useful for identifying complex, hard-to-test, and error-prone code.
**** Simple Definition
- McCabe Complexity = Number of simple conditions + 1
**** What is a “Simple Condition”?
- A conditional without logical connectors (AND, OR).
- Examples:
- if (a > b)
- while (a > b)
- for (a=b; a > b; b++)
- do {…} while (a > b)
**** Compound Conditions
- Count each simple condition inside:
- if (a > b || a > 2) → 2 simple conditions
- if (a > b && a > 2) → 2 simple conditions
**** Use Case
- Helps determine test case count needed for complete branch coverage.
*** 2. Halstead Complexity Measures
- Purpose: Measures complexity based on the operators and operands used in code.
**** Definitions:
- n1: Number of distinct operators (e.g., !=, !, %, /, *, +, &&, ||)
- n2: Number of distinct operands (e.g., variable names, constants, types like bool, char)
- N1: Total occurrences of operators
- N2: Total occurrences of operands
**** Why Use Halstead?
- Evaluates:
- Code length
- Code vocabulary
- Effort required to implement or understand the code
- Potential bugs
*** 3. Lines of Code (LOC)
- LOC: Total number of lines in a program.
- Comment Lines: Lines containing only comments.
**** Usefulness:
- Simple indicator of:
- Code size
- Code density
- Maintainability and readability
* 3.2 Intelligent Software Engineering: Within-Project Prediction
** Just-in-Time (JIT) Defect Prediction
- Based on the classic work by Kim et al. (2008).
- Focuses on predicting defects at the commit/change level rather than file or module level.
** Steps in the JIT Defect Prediction Pipeline:
1. File-level changes are extracted from a project's revision history.
2. Bug fix changes are identified using keywords in SCM (Source Code Management) change log messages.
3. Bug-introducing and clean changes are identified by tracing backwards from the bug fix commits.
4. A classification model (e.g., SVM) is trained on these labeled examples.
5. Once trained, the classifier can predict if new code changes are likely to be buggy or clean.
** Change-wise Prediction Details
*** Change History Extraction
- Collected information includes:
- Change log
- Author
- Change date
- Source code
- Change delta
- Change metadata
*** Identifying Bug-Introducing Changes
**** Step 1: Search for Bug Fixes
- Use keywords (e.g., “fix”, “bug”, “patch”) to find bug-fixing commits.
**** Step 2: Use the SZZ Algorithm
- Determine what was changed in bug fixes.
- Produces a list of regions ("hunks") showing differences between two revisions.
- Deleted or modified code in each hunk is treated as the location of a bug.
- Traces origin of this code to find the earlier bug-introducing changes.
** Example Walkthrough
*** Revision 1:
- Initial creation of a function `bar`.
- Introduces a bug: `if (report == null)` (should be `!=`).
- SCM annotate shows all lines as modified in revision 1 by "kim".
*** Revision 2:
- Two changes:
- Function `bar` renamed to `foo`.
- Argument changed from `report` to `report.str` in `println`.
- Annotate output shows lines 1 and 4 were last modified by "ejw" in revision 2.
*** Revision 3:
- Bug fix applied: changes `==` to `!=` on line 3.
- SZZ algorithm compares revisions 3 and 2, identifying line 3 as modified.
- Traces line 3s origin back to revision 1 — identifying the bug-introducing change.
* 3.3 Intelligent Software Engineering: Cross-Project Prediction (HDP)
** Heterogeneous Defect Prediction (HDP)
- Based on the work by Nam and Kim (2015).
- Motivation: Metrics used for defect prediction often differ across projects.
- Goal: Address the metric mismatching problem across projects (heterogeneous settings).
- Classifier agnostic — can be used with any machine learning model.
** HDP Architecture
*** Metric Selection in Source Datasets
- Uses well-known feature selection methods:
- Gain ratio
- Chi-square
- Relief-F
- Significance attribute evaluation
- Empirical testing used to choose the best approach.
- Top 15% metrics per source project are selected.
- Metric mismatching arises because each project may prioritize different metrics.
*** Matching Source and Target Metrics
**** Key Steps:
1. Pair all metrics from source and target projects.
2. Remove poorly matched metrics based on a cutoff threshold for matching scores.
3. Apply maximum weighted bipartite matching to select the best group of matched metric pairs:
- Goal: Maximize sum of matching scores.
- Ensure no duplicated metrics are selected.
**** Example:
- 2 source metrics: X1, X2
- 2 target metrics: Y1, Y2
- Matching pairs: (X1,Y1), (X1,Y2), (X2,Y1), (X2,Y2)
After applying a cutoff threshold of 0.30:
- Group 1: (X1,Y1) and (X2,Y2) with total score 1.3 (=0.8+0.5)
- Group 2: (X2,Y1) with score 0.4 (Stands alone (can't be paired with any other remaining pair without duplication)).
- Group 1 is chosen as the matched metric set.
** Methods for Calculating Matching Scores
*** Percentile-Based Method
- Compares 9 percentiles (10th, 20th, ..., 90th) between source and target metric values.
- Uses the formula:
Pij(n) = 1 - |spij(n) - bpij(n)| / bpij(n)
- spij(n): smaller percentile value
- bpij(n): bigger percentile value
- Matching score is 1 when all percentiles are identical.
*** Kolmogorov-Smirnov (KS) Test Method
- Non-parametric two-sample test.
- Useful when distributions are unknown or have unequal variances.
- Computes a p-value to indicate the similarity.
- Matching score derived from the p-value.
*** Spearmans Rank Correlation Coefficient Method
- Measures correlation between two sets of values.
- If dataset sizes differ, randomly sample the larger set to match sizes.
** Classifier Independence
- HDP approach can be paired with any machine learning algorithm (e.g., SVM, RF, etc.)

View File

@@ -0,0 +1,268 @@
:PROPERTIES:
:ID: ebf874d9-0554-47f0-be8b-5c9a948738bf
:END:
#+title: ise_week_4
#+filetags: :uni:notes:
* DONE Different Coverage Metrics and Branch Concepts (pages 6-12)
* DONE Evolutionary Algorithm (pages 24-32)
* DONE Test Case Generation (EvoSuite) (pages 44-55)
* DONE Multi/Many-objective Software Testing (Sapienz) (pages 80-97)
want to figure out how to translate the real world phenotype to a genotype
* 4.2 Evolutionary Algorithms - Intelligent Software Engineering
** 1. Illustrative Optimization Problem
- Problem: Maximize the objective function \( f(x) = x^2 \)
- Design variable: \( x \in \{-15, -14, ..., 0, 1, ..., 15\} \)
- Search space: All integers between -15 and 15 inclusive
- Objective function: \( f(x) = x^2 \), to be maximized
- Constraints: None
- This problem is simple and allows us to demonstrate the application of evolutionary algorithms without involving additional complexity from constraints.
** 2. Representation
Evolutionary algorithms operate on representations of solutions called genotypes, which map to actual solutions (phenotypes). The choice of representation is crucial and problem-dependent.
*** Binary Representation
- The solution is represented as a fixed-length binary string.
- For the example problem (maximizing \( f(x) = x^2 \)), we use a 5-bit binary representation:
- The first bit indicates the sign of \( x \): 0 for positive, 1 for negative.
- The remaining bits represent the magnitude in binary.
- The genotype space is \( \{0,1\}^L \), where L is the length of the binary string.
*** Other Common Representations
- **Binary**: Suitable for many simple problems.
- **Integer**: Useful for categorical or discrete variables (e.g., car brands such as Toyota, Volkswagen, etc.).
- **Floating Point**: Used for problems with continuous variables. For example, optimizing \( f(x_1, x_2) = x_1 + x_2 \), where \( x_1, x_2 \in [0,1] \).
- **Permutations**: Suitable for ordering problems like the Traveling Salesman Problem.
- **Matrices**: Employed in more complex problems such as staff allocation or scheduling.
** 3. Evolutionary Algorithm Steps
The typical steps in an evolutionary algorithm include:
1. **Initialization**:
- Start with a randomly generated population of candidate solutions.
- Ensure a diverse set of individuals to explore the search space effectively.
- Optionally include known solutions or use heuristics to seed the initial population.
2. **Evaluation**:
- Each individual is evaluated using a fitness function.
- The fitness function quantifies how well an individual performs with respect to the problem objective.
3. **Main Loop** (repeats until termination condition is met):
a. **Selection**:
- Select parent individuals based on their fitness.
- Higher fitness individuals have a higher chance of being selected.
b. **Recombination (Crossover)**:
- Combine selected parents to produce new offspring.
- Occurs with probability \( P_c \) (crossover probability).
c. **Mutation**:
- Randomly alter offspring genes to maintain diversity.
- Occurs with probability \( P_m \) (mutation probability).
d. **Evaluation of Offspring**:
- Assess the fitness of each newly created individual.
e. **Survivor Selection**:
- Decide which individuals (from parents and offspring) will make up the next generation.
- Can use various strategies like elitism or generational replacement.
** 4. Fitness Function
- The fitness function is derived from the problems objective or quality function.
- It assigns a single real-valued score to each individual (phenotype).
- The function reflects the degree to which a solution meets the desired criteria.
- Typically, the aim is to **maximize** fitness.
- If the problem is better posed as a minimization task, it can be transformed accordingly (e.g., minimizing \( f(x) \) is equivalent to maximizing \( -f(x) \)).
* 4.3 Test Case Generation using EvoSuite - Intelligent Software Engineering
** 1. Introduction to EvoSuite
- EvoSuite is a tool developed by Fraser and Arcuri (2011) for automated test case generation.
- It generates whole test suites (not just individual test cases) for a given software system.
- The tool accepts a list of input classes to be tested and produces corresponding JUnit test case code.
- It leverages **genetic algorithms**, a form of evolutionary computation, to evolve effective test suites.
** 2. Motivation and Limitations of Traditional Methods
- Conventional test generation tools typically focus on **single coverage goals** (e.g., a single program branch).
- Assumes:
- All coverage goals are equally important.
- All goals are equally difficult to reach.
- Goals are independent of each other.
- These assumptions are problematic:
- The sequence in which goals are selected can significantly affect the quality of the resulting test suite.
- Interdependencies among goals are often ignored.
*** Solution:
- Generate **whole test suites** rather than isolated test cases.
- Takes into account relationships between methods/classes.
** 3. Architecture and Representation
*** Test Suite Representation
- A test suite \( T \) consists of multiple test cases.
- Each **test case** is a sequence of statements of varying types and lengths.
- The total length of a test suite is the sum of the lengths of its individual test cases.
*** Statement Types in Test Cases
1. **Primitive statements**: Initialize basic types (e.g., `int var0 = 54`)
2. **Constructor statements**: Create new instances (e.g., `Stack var1 = new Stack()`)
3. **Field statements**: Access object members (e.g., `int var2 = var1.size`)
4. **Method statements**: Call methods (e.g., `int var3 = var1.pop()`)
** 4. Fitness Function
- Guides the **selection of parents** in the genetic algorithm.
- Aims to **maximize code coverage**.
- If two test suites achieve the same coverage, the one with fewer statements is preferred (parsimony).
- Uses **branch coverage** as the primary metric.
- Employs the **branch distance heuristic**:
- Measures how close an input is to flipping a predicates boolean outcome.
** 5. Bloat Control
- A known issue in Genetic Algorithms is **bloat**, where test cases grow unnecessarily large.
- Can lead to memory exhaustion and inefficiency.
*** Techniques Used:
- Set limits:
- Maximum number of test cases \( N \)
- Maximum length per test case \( L \)
- Discard offspring that do not provide improved coverage.
** 6. Search Operators
*** Crossover Operator
- Combines two parent test suites (P1 and P2) to generate two offspring (O1 and O2).
- O1 = first \( a \cdot |P1| \) test cases from P1 + remaining from P2.
- O2 = similar combination from P2 and P1.
- Valid since test cases are independent.
- Helps reduce difference in length between resulting test suites.
*** Mutation Operator
- Mutation is applied with a probability of \( 1/T \), where \( T \) is the number of test cases.
- New test cases may be added with a probability \( p \), up to a maximum count \( N \).
*** Mutation Operations (applied with equal probability 1/3):
1. **Remove**:
- Each statement \( s_i \) is deleted with probability \( 1/n \), where \( n \) is the number of statements.
- If needed, replace deleted statements to keep test case valid.
2. **Change**:
- Each statement \( s_i \) may be altered.
- For primitives: change numeric value randomly within ±Δ.
- For others: change to a method/field/constructor of the same type.
3. **Insert**:
- A new statement is inserted at a random position in the test case.
** 7. Results and Evaluation
- Key takeaway: **EvoSuite outperforms traditional single-goal test generation tools**.
- Reported improvement: Up to **18x better branch coverage** than single-branch strategies.
* 4.4 Multi/Many-objective Software Testing with Sapienz - Intelligent Software Engineering
** 1. Introduction to Sapienz
- Sapienz is an automated software testing tool developed by Mao et al. (2016).
- It uses evolutionary algorithms to generate test cases for Android apps.
- Notable Achievements:
- Tested the top 1000 most popular Google Play apps.
- Discovered 558 unique and previously unknown app crashes.
- Led to a commercial spinout company named **MaJiCkE**.
- Acquired by **Facebook/Meta**.
- Sapienz customizes the **NSGA-II** algorithm (a multi-objective genetic algorithm) for test case generation.
Reference: Mao, Ke, Mark Harman, and Yue Jia. *"Sapienz: Multi-objective automated testing for android applications."* ISSTA 2016.
** 2. NSGA-II: An Overview
- NSGA-II is a Genetic Algorithm (GA) adapted for **multi-objective optimization**.
- Key Differences from standard GA:
- Uses **Pareto dominance** for survival selection.
- A solution **a dominates** solution **b** if:
- \( a_i \leq b_i \) for all objectives, and
- \( \exists j \) such that \( a_j < b_j \)
- A **Pareto optimal** solution is one that is not dominated by any other in the population.
- NSGA-II also uses:
- **Non-dominated sorting**: Separates population into Pareto fronts.
- **Crowding distance**: Prefers diverse solutions within the same front.
** 3. Representation
- Specific representation details were not included in the slides but are tailored to represent Android GUI interaction sequences.
** 4. Objective Functions in Sapienz
Sapienz optimizes multiple objectives simultaneously:
*** a. Code Coverage
- Types of coverage used:
- **Statement Coverage**: Measures how many individual code statements are executed.
- **Method Coverage**: Measures the number of methods invoked.
- **Android Activity Coverage**: Tracks which screens (activities) of the app are accessed.
- Example: A dialer app may include separate activities for contacts, keypad, call history, etc.
*** b. Test Case Length
- Shorter test cases are generally preferred to improve efficiency and reduce overhead.
- Multiple slides (8689) emphasize the importance of minimizing test length.
*** c. Crash Discovery
- The number of test cases that lead to app crashes is also a key metric.
- Objective: Maximize the number of crash-inducing test cases.
** 5. Search Operators
*** a. Crossover
- Combines parts of two parent test sequences to form new offspring.
- Details of the crossover structure are tool-specific but follow the typical GA-style recombination.
*** b. Mutation
- Mutations are applied to test cases to explore new behaviors.
- Types of Mutation:
1. **High-Level Mutation**:
- Alters the structure or intent of test sequences.
2. **Low-Level Mutation (Same Size)**:
- Changes test actions without altering the sequence length.
3. **Low-Level Mutation (Different Size)**:
- Adds or removes actions to vary the length of test cases.
4. **Low-Level Mutation (Shuffling)**:
- Reorders existing actions in the test case.
** 6. Results and Observations
- Sapienz significantly **outperforms other automated testing tools** in terms of:
- Number of crashes detected.
- Coverage achieved.
- Efficiency in test generation.

View File

@@ -0,0 +1,268 @@
:PROPERTIES:
:ID: ebf874d9-0554-47f0-be8b-5c9a948738bf
:END:
#+title: ise-week-4
#+filetags: :uni:ise:notes:
* DONE Different Coverage Metrics and Branch Concepts (pages 6-12)
* DONE Evolutionary Algorithm (pages 24-32)
* DONE Test Case Generation (EvoSuite) (pages 44-55)
* DONE Multi/Many-objective Software Testing (Sapienz) (pages 80-97)
want to figure out how to translate the real world phenotype to a genotype
* 4.2 Evolutionary Algorithms - Intelligent Software Engineering
** 1. Illustrative Optimization Problem
- Problem: Maximize the objective function \( f(x) = x^2 \)
- Design variable: \( x \in \{-15, -14, ..., 0, 1, ..., 15\} \)
- Search space: All integers between -15 and 15 inclusive
- Objective function: \( f(x) = x^2 \), to be maximized
- Constraints: None
- This problem is simple and allows us to demonstrate the application of evolutionary algorithms without involving additional complexity from constraints.
** 2. Representation
Evolutionary algorithms operate on representations of solutions called genotypes, which map to actual solutions (phenotypes). The choice of representation is crucial and problem-dependent.
*** Binary Representation
- The solution is represented as a fixed-length binary string.
- For the example problem (maximizing \( f(x) = x^2 \)), we use a 5-bit binary representation:
- The first bit indicates the sign of \( x \): 0 for positive, 1 for negative.
- The remaining bits represent the magnitude in binary.
- The genotype space is \( \{0,1\}^L \), where L is the length of the binary string.
*** Other Common Representations
- **Binary**: Suitable for many simple problems.
- **Integer**: Useful for categorical or discrete variables (e.g., car brands such as Toyota, Volkswagen, etc.).
- **Floating Point**: Used for problems with continuous variables. For example, optimizing \( f(x_1, x_2) = x_1 + x_2 \), where \( x_1, x_2 \in [0,1] \).
- **Permutations**: Suitable for ordering problems like the Traveling Salesman Problem.
- **Matrices**: Employed in more complex problems such as staff allocation or scheduling.
** 3. Evolutionary Algorithm Steps
The typical steps in an evolutionary algorithm include:
1. **Initialization**:
- Start with a randomly generated population of candidate solutions.
- Ensure a diverse set of individuals to explore the search space effectively.
- Optionally include known solutions or use heuristics to seed the initial population.
2. **Evaluation**:
- Each individual is evaluated using a fitness function.
- The fitness function quantifies how well an individual performs with respect to the problem objective.
3. **Main Loop** (repeats until termination condition is met):
a. **Selection**:
- Select parent individuals based on their fitness.
- Higher fitness individuals have a higher chance of being selected.
b. **Recombination (Crossover)**:
- Combine selected parents to produce new offspring.
- Occurs with probability \( P_c \) (crossover probability).
c. **Mutation**:
- Randomly alter offspring genes to maintain diversity.
- Occurs with probability \( P_m \) (mutation probability).
d. **Evaluation of Offspring**:
- Assess the fitness of each newly created individual.
e. **Survivor Selection**:
- Decide which individuals (from parents and offspring) will make up the next generation.
- Can use various strategies like elitism or generational replacement.
** 4. Fitness Function
- The fitness function is derived from the problems objective or quality function.
- It assigns a single real-valued score to each individual (phenotype).
- The function reflects the degree to which a solution meets the desired criteria.
- Typically, the aim is to **maximize** fitness.
- If the problem is better posed as a minimization task, it can be transformed accordingly (e.g., minimizing \( f(x) \) is equivalent to maximizing \( -f(x) \)).
* 4.3 Test Case Generation using EvoSuite - Intelligent Software Engineering
** 1. Introduction to EvoSuite
- EvoSuite is a tool developed by Fraser and Arcuri (2011) for automated test case generation.
- It generates whole test suites (not just individual test cases) for a given software system.
- The tool accepts a list of input classes to be tested and produces corresponding JUnit test case code.
- It leverages **genetic algorithms**, a form of evolutionary computation, to evolve effective test suites.
** 2. Motivation and Limitations of Traditional Methods
- Conventional test generation tools typically focus on **single coverage goals** (e.g., a single program branch).
- Assumes:
- All coverage goals are equally important.
- All goals are equally difficult to reach.
- Goals are independent of each other.
- These assumptions are problematic:
- The sequence in which goals are selected can significantly affect the quality of the resulting test suite.
- Interdependencies among goals are often ignored.
*** Solution:
- Generate **whole test suites** rather than isolated test cases.
- Takes into account relationships between methods/classes.
** 3. Architecture and Representation
*** Test Suite Representation
- A test suite \( T \) consists of multiple test cases.
- Each **test case** is a sequence of statements of varying types and lengths.
- The total length of a test suite is the sum of the lengths of its individual test cases.
*** Statement Types in Test Cases
1. **Primitive statements**: Initialize basic types (e.g., `int var0 = 54`)
2. **Constructor statements**: Create new instances (e.g., `Stack var1 = new Stack()`)
3. **Field statements**: Access object members (e.g., `int var2 = var1.size`)
4. **Method statements**: Call methods (e.g., `int var3 = var1.pop()`)
** 4. Fitness Function
- Guides the **selection of parents** in the genetic algorithm.
- Aims to **maximize code coverage**.
- If two test suites achieve the same coverage, the one with fewer statements is preferred (parsimony).
- Uses **branch coverage** as the primary metric.
- Employs the **branch distance heuristic**:
- Measures how close an input is to flipping a predicates boolean outcome.
** 5. Bloat Control
- A known issue in Genetic Algorithms is **bloat**, where test cases grow unnecessarily large.
- Can lead to memory exhaustion and inefficiency.
*** Techniques Used:
- Set limits:
- Maximum number of test cases \( N \)
- Maximum length per test case \( L \)
- Discard offspring that do not provide improved coverage.
** 6. Search Operators
*** Crossover Operator
- Combines two parent test suites (P1 and P2) to generate two offspring (O1 and O2).
- O1 = first \( a \cdot |P1| \) test cases from P1 + remaining from P2.
- O2 = similar combination from P2 and P1.
- Valid since test cases are independent.
- Helps reduce difference in length between resulting test suites.
*** Mutation Operator
- Mutation is applied with a probability of \( 1/T \), where \( T \) is the number of test cases.
- New test cases may be added with a probability \( p \), up to a maximum count \( N \).
*** Mutation Operations (applied with equal probability 1/3):
1. **Remove**:
- Each statement \( s_i \) is deleted with probability \( 1/n \), where \( n \) is the number of statements.
- If needed, replace deleted statements to keep test case valid.
2. **Change**:
- Each statement \( s_i \) may be altered.
- For primitives: change numeric value randomly within ±Δ.
- For others: change to a method/field/constructor of the same type.
3. **Insert**:
- A new statement is inserted at a random position in the test case.
** 7. Results and Evaluation
- Key takeaway: **EvoSuite outperforms traditional single-goal test generation tools**.
- Reported improvement: Up to **18x better branch coverage** than single-branch strategies.
* 4.4 Multi/Many-objective Software Testing with Sapienz - Intelligent Software Engineering
** 1. Introduction to Sapienz
- Sapienz is an automated software testing tool developed by Mao et al. (2016).
- It uses evolutionary algorithms to generate test cases for Android apps.
- Notable Achievements:
- Tested the top 1000 most popular Google Play apps.
- Discovered 558 unique and previously unknown app crashes.
- Led to a commercial spinout company named **MaJiCkE**.
- Acquired by **Facebook/Meta**.
- Sapienz customizes the **NSGA-II** algorithm (a multi-objective genetic algorithm) for test case generation.
Reference: Mao, Ke, Mark Harman, and Yue Jia. *"Sapienz: Multi-objective automated testing for android applications."* ISSTA 2016.
** 2. NSGA-II: An Overview
- NSGA-II is a Genetic Algorithm (GA) adapted for **multi-objective optimization**.
- Key Differences from standard GA:
- Uses **Pareto dominance** for survival selection.
- A solution **a dominates** solution **b** if:
- \( a_i \leq b_i \) for all objectives, and
- \( \exists j \) such that \( a_j < b_j \)
- A **Pareto optimal** solution is one that is not dominated by any other in the population.
- NSGA-II also uses:
- **Non-dominated sorting**: Separates population into Pareto fronts.
- **Crowding distance**: Prefers diverse solutions within the same front.
** 3. Representation
- Specific representation details were not included in the slides but are tailored to represent Android GUI interaction sequences.
** 4. Objective Functions in Sapienz
Sapienz optimizes multiple objectives simultaneously:
*** a. Code Coverage
- Types of coverage used:
- **Statement Coverage**: Measures how many individual code statements are executed.
- **Method Coverage**: Measures the number of methods invoked.
- **Android Activity Coverage**: Tracks which screens (activities) of the app are accessed.
- Example: A dialer app may include separate activities for contacts, keypad, call history, etc.
*** b. Test Case Length
- Shorter test cases are generally preferred to improve efficiency and reduce overhead.
- Multiple slides (8689) emphasize the importance of minimizing test length.
*** c. Crash Discovery
- The number of test cases that lead to app crashes is also a key metric.
- Objective: Maximize the number of crash-inducing test cases.
** 5. Search Operators
*** a. Crossover
- Combines parts of two parent test sequences to form new offspring.
- Details of the crossover structure are tool-specific but follow the typical GA-style recombination.
*** b. Mutation
- Mutations are applied to test cases to explore new behaviors.
- Types of Mutation:
1. **High-Level Mutation**:
- Alters the structure or intent of test sequences.
2. **Low-Level Mutation (Same Size)**:
- Changes test actions without altering the sequence length.
3. **Low-Level Mutation (Different Size)**:
- Adds or removes actions to vary the length of test cases.
4. **Low-Level Mutation (Shuffling)**:
- Reorders existing actions in the test case.
** 6. Results and Observations
- Sapienz significantly **outperforms other automated testing tools** in terms of:
- Number of crashes detected.
- Coverage achieved.
- Efficiency in test generation.

View File

@@ -0,0 +1,46 @@
:PROPERTIES:
:ID: 2ab0fa3f-8ac6-4af2-8cd4-1dd490fb19c3
:END:
#+title: emacs-stuff-magit
#+filetags: :emacs:git:guide:
* Magit Key Guide (Quick Reference)
** Open Magit
- C-x g :: Open Magit status buffer
** Staging & Unstaging
- s :: Stage (file or hunk)
- u :: Unstage
- S :: Stage all
- U :: Unstage all
** Committing
- c c :: Commit
- C-c C-c :: Confirm commit (in commit buffer)
- c a :: Amend last commit
** Branching
- b b :: Switch branch
- b c :: Create new branch
- b m :: Merge into current
- b M :: Rebase onto another branch
** Push / Pull
- P u :: Push to upstream
- F u :: Pull from upstream
- f u :: Fetch from upstream
** Logs & Diffs
- l l :: Show log for current branch
- d :: Show diff (between commits, etc.)
- RET :: View diff at point
** Help & Dispatch
- ? :: Show help for current buffer
- x :: Open Magit dispatch menu (magit-dispatch)
- ! :: Run Git command (rebase, cherry-pick, etc.)
** Other Essentials
- k :: Discard changes (careful)
- q :: Quit Magit buffer

View File

@@ -0,0 +1,117 @@
:PROPERTIES:
:ID: 0e70c535-b145-42d9-a9ed-fe48cddbb1a5
:END:
#+title: ise_week_5
#+filetags: :uni:notes:
* TODO Model free Tuning (for ORM) (pages 9-17)
* TODO Model free Tuning (BestConfig) (pages 18-23)
* 5.1 Model-Free Tuning for ORM Systems - Intelligent Software Engineering
** 1. Introduction and Background
- This approach was proposed by Singh et al. (2016).
- The goal is to optimize Object-Relational Mapping (ORM) systems without relying on models.
- Uses **NSGA-II**, a multi-objective evolutionary algorithm, to handle **multiple performance concerns**.
Reference: Singh, Ravjot et al. *"Optimizing the performance-related configurations of object-relational mapping frameworks using a multi-objective genetic algorithm."* ACM/SPEC ICPE 2016.
** 2. Architecture and Setup
- Focuses exclusively on **binary configuration options**.
- Example of a configuration: `{0011}` a binary vector where each bit represents a configuration toggle (on/off).
- Evaluates performance using three objective metrics:
- **Execution time**
- **CPU load**
- **Memory consumption**
- Other components follow the standard NSGA-II flow: selection, crossover, mutation, and fitness evaluation.
** 3. Stopping Criteria
Two specific stopping rules are proposed for determining when to terminate the evolutionary process:
*** a. Setting 1: t-test-based Stopping
- Conducts statistical **t-tests** to compare changes in objective values between generations.
- For each pair of consecutive generations \( g_i \) and \( g_j \):
- Run a t-test on ∆CPU and ∆MEM between all configurations in both generations.
- If **all p-values > 0.05** for **two consecutive generations**, it indicates **no statistically significant improvement**, and the algorithm is stopped.
*** b. Setting 2: Mutual Dominance Rate (MDR)
- Measures how much progress is made by comparing the current and previous generation.
- Let:
- Set A = configurations from the previous generation
- Set B = configurations from the current generation
- Define \( dom(A,B) \) as the number of configurations in A that are **dominated** by any configuration in B.
Interpretation:
- **MDR = 0**: No progress — performance plateau
- **MDR < 0**: Regression — performance is deteriorating
- **MDR > 0**: Improvement — current generation is better than the last
** 4. Termination Condition
- The tuning process should stop if **any** of the defined stopping conditions (t-test or MDR) are met.
** 5. Experimental Results
- NSGA-II consistently found configurations that ranked within the **top 25%** of all possible configurations across tested applications.
- Results were obtained by combining different **aggregation functions** and **stopping rules**, demonstrating strong generalization and effectiveness.
* 5.2 Model-Free Tuning with BestConfig - Intelligent Software Engineering
** 1. Introduction and Background
- BestConfig is a model-free configuration tuning system proposed by **Zhu et al. (2017)**.
- It focuses on tuning for **a single performance objective** (e.g., throughput, latency).
- Utilizes **local search techniques** rather than global evolutionary approaches.
- Employs **label encoding** for parameters (e.g., {0, 23, 100}).
- Key strategy: aggressively explore **promising regions** of the configuration space.
Reference: Zhu, Yuqing et al. *"BestConfig: tapping the performance potential of systems via automatic configuration tuning."* SoCC 2017.
** 2. Architecture Overview
- BestConfig is designed to intelligently search a high-dimensional configuration space.
- Architecture relies on two core components:
- DDS (Divide & Diverge Sampling)
- RBS (Recursive Bound & Search)
** 3. DDS: Divide & Diverge Sampling
- Purpose: Ensures **coverage** of the entire configuration space by dividing it into **subspaces**.
- Process:
1. Each configuration parameter's range is divided into **k intervals**.
2. These intervals are combined across all parameters, forming \( k^n \) subspaces.
3. **One random sample** is taken from each subspace.
- Advantages:
- Avoids bias in sampling (common in uniform random search).
- More likely to sample from all areas of the space.
- Especially useful in **high-dimensional spaces**.
** 4. RBS: Recursive Bound & Search
- Purpose: Locally refines and improves the best-known configuration.
- Steps:
1. Identify the best-performing configuration \( C_0 \) from the initial samples.
2. Define **bounds** for each parameter based on neighboring values around \( C_0 \).
3. Sample new points within this bounded space to find a better configuration \( C_1 \).
4. Repeat the bounding and sampling process **recursively** until no improvement is found.
- Bound Definition:
- For each parameter value in \( C_0 \), the closest lower and higher values in the dataset are chosen as bounds.
- Termination Conditions:
- If no better configuration is found in a recursive round, the search **restarts from a broader space**.
- The entire tuning process **stops** only when a **predefined resource budget** (e.g., time, evaluations) is exhausted.
** 5. Results and Observations
- BestConfig consistently finds configurations **significantly better than the systems default settings**.
- Achieves these improvements within a **reasonable time frame**, making it practical for real-world use.

View File

@@ -0,0 +1,117 @@
:PROPERTIES:
:ID: 0e70c535-b145-42d9-a9ed-fe48cddbb1a5
:END:
#+title: ise-week-5
#+filetags: :uni:ise:notes:
* TODO Model free Tuning (for ORM) (pages 9-17)
* TODO Model free Tuning (BestConfig) (pages 18-23)
* 5.1 Model-Free Tuning for ORM Systems - Intelligent Software Engineering
** 1. Introduction and Background
- This approach was proposed by Singh et al. (2016).
- The goal is to optimize Object-Relational Mapping (ORM) systems without relying on models.
- Uses **NSGA-II**, a multi-objective evolutionary algorithm, to handle **multiple performance concerns**.
Reference: Singh, Ravjot et al. *"Optimizing the performance-related configurations of object-relational mapping frameworks using a multi-objective genetic algorithm."* ACM/SPEC ICPE 2016.
** 2. Architecture and Setup
- Focuses exclusively on **binary configuration options**.
- Example of a configuration: `{0011}` a binary vector where each bit represents a configuration toggle (on/off).
- Evaluates performance using three objective metrics:
- **Execution time**
- **CPU load**
- **Memory consumption**
- Other components follow the standard NSGA-II flow: selection, crossover, mutation, and fitness evaluation.
** 3. Stopping Criteria
Two specific stopping rules are proposed for determining when to terminate the evolutionary process:
*** a. Setting 1: t-test-based Stopping
- Conducts statistical **t-tests** to compare changes in objective values between generations.
- For each pair of consecutive generations \( g_i \) and \( g_j \):
- Run a t-test on ∆CPU and ∆MEM between all configurations in both generations.
- If **all p-values > 0.05** for **two consecutive generations**, it indicates **no statistically significant improvement**, and the algorithm is stopped.
*** b. Setting 2: Mutual Dominance Rate (MDR)
- Measures how much progress is made by comparing the current and previous generation.
- Let:
- Set A = configurations from the previous generation
- Set B = configurations from the current generation
- Define \( dom(A,B) \) as the number of configurations in A that are **dominated** by any configuration in B.
Interpretation:
- **MDR = 0**: No progress — performance plateau
- **MDR < 0**: Regression — performance is deteriorating
- **MDR > 0**: Improvement — current generation is better than the last
** 4. Termination Condition
- The tuning process should stop if **any** of the defined stopping conditions (t-test or MDR) are met.
** 5. Experimental Results
- NSGA-II consistently found configurations that ranked within the **top 25%** of all possible configurations across tested applications.
- Results were obtained by combining different **aggregation functions** and **stopping rules**, demonstrating strong generalization and effectiveness.
* 5.2 Model-Free Tuning with BestConfig - Intelligent Software Engineering
** 1. Introduction and Background
- BestConfig is a model-free configuration tuning system proposed by **Zhu et al. (2017)**.
- It focuses on tuning for **a single performance objective** (e.g., throughput, latency).
- Utilizes **local search techniques** rather than global evolutionary approaches.
- Employs **label encoding** for parameters (e.g., {0, 23, 100}).
- Key strategy: aggressively explore **promising regions** of the configuration space.
Reference: Zhu, Yuqing et al. *"BestConfig: tapping the performance potential of systems via automatic configuration tuning."* SoCC 2017.
** 2. Architecture Overview
- BestConfig is designed to intelligently search a high-dimensional configuration space.
- Architecture relies on two core components:
- DDS (Divide & Diverge Sampling)
- RBS (Recursive Bound & Search)
** 3. DDS: Divide & Diverge Sampling
- Purpose: Ensures **coverage** of the entire configuration space by dividing it into **subspaces**.
- Process:
1. Each configuration parameter's range is divided into **k intervals**.
2. These intervals are combined across all parameters, forming \( k^n \) subspaces.
3. **One random sample** is taken from each subspace.
- Advantages:
- Avoids bias in sampling (common in uniform random search).
- More likely to sample from all areas of the space.
- Especially useful in **high-dimensional spaces**.
** 4. RBS: Recursive Bound & Search
- Purpose: Locally refines and improves the best-known configuration.
- Steps:
1. Identify the best-performing configuration \( C_0 \) from the initial samples.
2. Define **bounds** for each parameter based on neighboring values around \( C_0 \).
3. Sample new points within this bounded space to find a better configuration \( C_1 \).
4. Repeat the bounding and sampling process **recursively** until no improvement is found.
- Bound Definition:
- For each parameter value in \( C_0 \), the closest lower and higher values in the dataset are chosen as bounds.
- Termination Conditions:
- If no better configuration is found in a recursive round, the search **restarts from a broader space**.
- The entire tuning process **stops** only when a **predefined resource budget** (e.g., time, evaluations) is exhausted.
** 5. Results and Observations
- BestConfig consistently finds configurations **significantly better than the systems default settings**.
- Achieves these improvements within a **reasonable time frame**, making it practical for real-world use.

Some files were not shown because too many files have changed in this diff Show More