29-05
All checks were successful
Build Roam Site / build (push) Successful in 31s

This commit is contained in:
2026-05-29 08:41:15 +01:00
parent 5d30c8f19e
commit a7285933c3
37 changed files with 1210 additions and 137 deletions

View File

@@ -0,0 +1,7 @@
* [[https://world.hey.com/dhh/a-petabyte-worth-of-omarchy-in-a-month-a1fc538e][A petabyte worth of Omarchy in a month]]
:PROPERTIES:
:FEED: David Heinemeier Hansson
:MINIFLUX_ID: 6150
:READ_AT: 2026-05-28 18:01
:END:

View File

@@ -18,3 +18,8 @@ All daily journal entries, linked automatically.
** [[file:daily/2026-05-06.org][2026-05-06]] ** [[file:daily/2026-05-06.org][2026-05-06]]
** [[file:daily/2026-05-12.org][2026-05-12]] ** [[file:daily/2026-05-12.org][2026-05-12]]
** [[file:daily/2026-05-13.org][2026-05-13]] ** [[file:daily/2026-05-13.org][2026-05-13]]
** [[file:daily/2026-05-20.org][2026-05-20]]
** [[file:daily/2026-05-21.org][2026-05-21]]
** [[file:daily/2026-05-22.org][2026-05-22]]
** [[file:daily/2026-05-28.org][2026-05-28]]
** [[file:daily/2026-05-29.org][2026-05-29]]

View File

@@ -0,0 +1,438 @@
:PROPERTIES:
:ID: b2ac09aa-e888-48d3-8357-2292f9b2526c
:END:
#+title: XSS Pentesting Report Fix
#+filetags: :microlise:security:notes:
* Metadata
- Name :: Understanding Session XSS
- Overview :: Pages 3334 document an informational “Session stored XSS” finding on the TMC Schedule Execution Board. The issue is real (unescaped user input in a JavaScript context) but impact is limited because only the submitting users session is affected—classic self-XSS, not cross-user attack.
** Todos
- [X] review-finding :: Read pages 3334 and map finding to SaveSearchCriteriaToSession + ScheduleExecutionBoard.aspx flow
- [X] locate-source :: Open TMC Web Portal repo and find session save + inline script render for date/orderID/time
- [ ] remediate-encode :: Apply HttpUtility.JavaScriptStringEncode to all session values in SetupControls() (~1849-1879)
- [ ] remediate-validate :: Add server-side validation in SaveSearchCriteriaToSession before writing SEBSessionState
- [ ] remediate-retest :: Retest with direct POST payload + normal UI search flow on ScheduleExecutionBoard
* Understanding the Session Stored XSS Finding (Pages 3334)
** Where this sits in the report
The [[file:d:/_dev/_misc/Pentest-04-26/Microlise TMC PO WA April 2026 v1.0.pdf][Microlise TMC PO WA April 2026 v1.0.pdf]] lists *14 findings* total. Pages 3334 ([[file:d:/_dev/_misc/Pentest-04-26/33-34.pdf][33-34.pdf]]) are the last technical finding before “END OF DOCUMENT”:
| Field | Value |
|-------------+-----------------------------------------------------------------------|
| Title | *Session stored XSS* |
| Severity | *Informational* (lowest tier; 4 informational findings in the report) |
| Status | Open |
| CWE | [[https://cwe.mitre.org/data/definitions/79.html][CWE-79]] — Improper Neutralization of Input |
| Environment | =cert.microlise.com= (cert/UAT), path prefix =/PENTEST/TMCWebPortal/= |
Higher-severity items in the same report (SQLi, IDOR, BFLA, etc.) are separate; this finding is documented as *technically valid but low business risk*.
-----
** What XSS is (general)
*Cross-Site Scripting (XSS)* means untrusted data ends up in a web page in a way the *browser treats as executable JavaScript*, instead of inert text.
#+begin_src mermaid :exports none
sequenceDiagram
participant Attacker
participant App as WebApplication
participant Victim as VictimBrowser
Attacker->>App: Submit malicious input
App->>App: Store or reflect input
App->>Victim: HTML/JS page containing payload
Victim->>Victim: Browser runs attacker's script
Note over Victim: Script runs with the site's origin<br/>can access cookies, DOM, APIs
#+end_src
The name “cross-site” is historical: classic attacks trick a *victim* into loading a page on *your* app so script runs in *your* origin (stealing session cookies, performing actions as the user, etc.).
Common types:
| Type | Persistence | Typical delivery |
|-------------+---------------------------------------+----------------------------------|
| *Reflected* | Not stored; one-off response | Malicious link/query param |
| *Stored* | Saved server-side (DB, file, session) | Victim loads a normal page later |
| *DOM-based* | Client-side only | Unsafe innerHTML, eval, etc. |
*Defense in depth:* validate input on the server (whitelist formats), and *encode output* for the exact context (HTML, attribute, JavaScript string, URL).
-----
** What happened in /this/ finding (TMC context)
*** Affected surface (source located)
| Role | Path |
|-----------------------------+--------------------------------|
| Page + inline JS | [[file:d:/_dev/WebPortal/src/code/AmberWebUI/SEB/ScheduleExecutionBoard.aspx][ScheduleExecutionBoard.aspx]] |
| WebMethod + page properties | [[file:d:/_dev/WebPortal/src/code/AmberWebUI/SEB/ScheduleExecutionBoard.aspx.cs][ScheduleExecutionBoard.aspx.cs]] |
| Session storage | [[file:d:/_dev/WebPortal/src/code/AmberWebUI/SEB/SEBSessionState.cs][SEBSessionState.cs]] |
- *Endpoint:* ASP.NET =[WebMethod]= =SaveSearchCriteriaToSession= on =ScheduleExecutionBoard.aspx=
- *Parameters:* JSON fields =date=, =orderID=, =time= (also =searchID=, =hours=, =quickSearch= in the same flow)
- *Host (pentest):* =cert.microlise.com=, path =/PENTEST/TMCWebPortal/SEB/...=
*** Attack flow (as tested)
#+begin_src mermaid
flowchart LR
subgraph submit [Step1_Submit]
A[Tester sends POST directly]
B[SaveSearchCriteriaToSession]
C[Values stored in server session]
end
subgraph render [Step2_Render]
D[User loads ScheduleExecutionBoard.aspx]
E[Server embeds session values in script block]
F[Browser executes unescaped JS]
end
A --> B --> C
C --> D --> E --> F
#+end_src
1. *Save:* User (or tester) POSTs JSON to =SaveSearchCriteriaToSession=. The app saves search criteria into the *server-side session*.
2. *Render:* On the next load of =ScheduleExecutionBoard.aspx=, those values are written into the HTML *inside a =<script>= block*, as JavaScript string literals.
3. *Bug:* Values are inserted *without JavaScript string encoding*. A crafted =date= can *break out of the string* and run arbitrary JS.
4. *Proof:* Pentesters confirmed execution in the browser; screenshots in the PDF show the POST and page source.
*** Code path (matches report exactly)
*1. Save — no server-side validation*
#+begin_src csharp
// ScheduleExecutionBoard.aspx.cs lines 336-348
[WebMethod]
public static void SaveSearchCriteriaToSession(string searchID, string orderID, string date, string time, int hours, bool displayPriorityJourneys, string quickSearch)
{
var sebState = new SEBSessionState();
sebState.ComplexSearch = searchID;
sebState.OrderBy = orderID;
sebState.SearchDate = date;
sebState.SearchTime = time;
// ...
}
#+end_src
*2. Persist — per-user ASP.NET session*
[[file:d:/_dev/WebPortal/src/code/AmberWebUI/SEB/SEBSessionState.cs][SEBSessionState.cs]] stores values under keys =dateID=, =timeID=, =orderByID=.
*3. Load — on next full page GET*
#+begin_src csharp
// ScheduleExecutionBoard.aspx.cs lines 267-277
private void SetupControls()
{
var sebState = new SEBSessionState();
SessionOrderID = sebState.OrderBy;
SessionDate = sebState.SearchDate;
SessionTime = sebState.SearchTime;
// ...
}
#+end_src
*4. Render — vulnerable inline JavaScript (root cause)*
#+begin_src javascript
// ScheduleExecutionBoard.aspx lines 1853-1875
if ("<%=SessionDate%>") {
$('#txtStart').val("<%= SessionDate %>");
}
if ("<%=SessionTime%>") {
$('#inputtime').val("<%=SessionTime%>");
}
if ("<%=SessionOrderID%>") {
$(orderBySelector + ' option[value="<%=SessionOrderID%>"]').attr('selected', 'selected');
}
#+end_src
Example payload in session: ="); alert(document.domain); //=
#+begin_src javascript
$('#txtStart').val(""); alert(document.domain); //");
#+end_src
*Related:* =QuickSearch= at line ~1879 — fix in the same pass.
*** Why “stored”, “session”, and “self-XSS”
- *Stored:* Payload survives page navigation in *session state*.
- *Self-XSS:* Only the submitters session is affected; no normal cross-user path.
- Severity *Informational* because threat model is weak vs shared stored XSS.
*** Client vs server validation gap
Pentesters bypassed browser validation via direct POST. No server-side validation blocked arbitrary strings.
-----
** Replicating the vulnerability (hands-on)
Use this section to *see the bug work* on an authorized environment (e.g. cert/UAT), then *repeat the same steps after fixes* and compare outcomes.
*** Prerequisites
| Requirement | Detail |
|-----------------+----------------------------------------------------------------------|
| *Authorization* | Pentest scope or internal security test policy only |
| *Permission* | =Microlise:TMC:SEB:Read= |
| *URL* | e.g. =https://<host>/TMCWebPortal/SEB/ScheduleExecutionBoard.aspx= |
| *Tools* | Browser + DevTools or Burp Suite |
| *Build* | Before-fix build first; redeploy with remediation for after-fix runs |
Must be logged in (valid session cookie on POST).
*** What you should observe (before fix)
#+begin_src mermaid
sequenceDiagram
participant You as Tester_browser
participant API as SaveSearchCriteriaToSession
participant Sess as ASP.NET_session
participant Page as ScheduleExecutionBoard_GET
You->>API: POST JSON with malicious date
API->>Sess: Store raw date in session
You->>Page: Reload SEB page
Page->>You: HTML with unescaped date inside script
You->>You: alert or other JS runs
#+end_src
1. WebMethod returns HTTP 200.
2. Payload never went through =DateValidation()=.
3. Full page reload → JS runs (e.g. =alert=).
4. View Source: payload inside double-quoted JS string, unescaped.
*Self-XSS:* only your session is poisoned.
*** Step-by-step reproduction
*Step 1 — Baseline (optional)*
1. Open SEB, perform a search.
2. DevTools → Network → =SaveSearchCriteriaToSession=.
3. Note POST, =application/json=, body shape, Cookie header.
*Step 2 — Inject via direct POST (bypass UI)*
| Parameter | Suggested test value |
|---------------------------+---------------------------------|
| =searchID= | =0.X= |
| =orderID= | =0.X= |
| =date= | ="); alert(document.domain);//= |
| =time= | =00:00= |
| =hours= | =24= |
| =displayPriorityJourneys= | =false= |
| =quickSearch= | =""= |
*Burp:* Repeater → replace JSON body → send.
*Browser console* (on SEB page, same origin):
#+begin_src javascript
fetch('ScheduleExecutionBoard.aspx/SaveSearchCriteriaToSession', {
method: 'POST',
credentials: 'include',
headers: { 'Content-Type': 'application/json; charset=utf-8' },
body: JSON.stringify({
searchID: '0.X',
orderID: '0.X',
date: '"); alert(document.domain);//',
time: '00:00',
hours: 24,
displayPriorityJourneys: false,
quickSearch: ''
})
}).then(r => console.log('status', r.status));
#+end_src
*curl* (replace host, path, cookies):
#+begin_src bash
curl -s -o /dev/null -w "%{http_code}" \
-X POST "https://<host>/<TMCWebPortal>/SEB/ScheduleExecutionBoard.aspx/SaveSearchCriteriaToSession" \
-H "Content-Type: application/json; charset=utf-8" \
-H "Cookie: <paste-session-cookies>" \
-d "{\"searchID\":\"0.X\",\"orderID\":\"0.X\",\"date\":\"\\\"); alert(document.domain);//\",\"time\":\"00:00\",\"hours\":24,\"displayPriorityJourneys\":false,\"quickSearch\":\"\"}"
#+end_src
*Step 3 — Trigger render (stored XSS)*
1. Full navigation reload of =ScheduleExecutionBoard.aspx= (F5).
2. =SetupControls()= embeds session =date= (~lines 18541855).
*Step 4 — Confirm*
| Check | Before fix (expected) |
|-------------------+-----------------------------------------------------------------------|
| Popup / console | =alert(document.domain)= runs |
| View Source | Literal ="); alert(...)= inside =$('#txtStart').val("...")= unescaped |
| Network on reload | Normal GET only; XSS from inline script |
| Other users | No effect (different session) |
*Step 5 — Optional:* malicious =time= or =orderID=.
*Step 6 — Clean up:* log out/in or POST valid date/time.
*** Comparison matrix (before vs after fixes)
Run the same Steps 24 after each change:
| Observation | Before fix | After encoding only | After validation only | After both |
|----------------------------------+------------+---------------------+-----------------------+---------------|
| POST malicious =date= accepted? | Yes (200) | Yes (200) | No / not stored | No |
| =alert= on reload? | *Yes* | *No* | Depends* | *No* |
| Executable JS in View Source? | *Yes* | *No* (escaped) | Depends* | *No* |
| =#txtStart= shows attack text? | Maybe | Escaped/safe | Default/empty | Default/empty |
| Normal UI search + reload works? | Yes | Yes | Yes | Yes |
*If only validation: reload may show no XSS without encoding — still apply both fixes.
*** Why UI-only testing misses the bug
| Path | =DateValidation()= runs? | Payload reaches session? |
|----------------------------+--------------------------+--------------------------|
| Click Search in UI | Yes | No (normal typing) |
| Direct POST / Burp / fetch | *No* | *Yes* |
Reproduction *must* use direct POST to match the pentest.
*** Evidence to capture (for fix sign-off)
1. Request (POST body with payload).
2. Screenshot of alert (before) or no alert (after).
3. View Source snippet around =$('#txtStart').val(=.
4. Regression: legitimate date, reload, criteria restored.
*** Safety and scope
- No production without approval.
- Prefer =alert(document.domain)= over exfiltration demos.
- Self-XSS: coding defect demo, not mass compromise.
-----
** How to fix it
Use *two layers*: output encoding + server-side validation.
*** Fix 1 — Output encoding (required)
File: [[file:d:/_dev/WebPortal/src/code/AmberWebUI/SEB/ScheduleExecutionBoard.aspx][ScheduleExecutionBoard.aspx]], =SetupControls()= (~18471884).
| Line (approx) | Field | Encode |
|---------------+-----------------+--------|
| 18491850 | SessionSearchID | Yes |
| 18541855 | SessionDate | Yes |
| 18601861 | SessionTime | Yes |
| 18721874 | SessionOrderID | Yes |
| 18781879 | QuickSearch | Yes |
*Before:*
#+begin_src javascript
$('#txtStart').val("<%= SessionDate %>");
#+end_src
*After:*
#+begin_src javascript
$('#txtStart').val("<%= HttpUtility.JavaScriptStringEncode(SessionDate ?? string.Empty) %>");
#+end_src
Encode =if= guards too, or use code-behind booleans (=HasSessionDate=).
*** Fix 2 — Server-side input validation
File: [[file:d:/_dev/WebPortal/src/code/AmberWebUI/SEB/ScheduleExecutionBoard.aspx.cs][ScheduleExecutionBoard.aspx.cs]], =SaveSearchCriteriaToSession= (~337).
| Parameter | Validation rule |
|------------+-----------------------------------------|
| =date= | Same regex as client =DateValidation()= |
| =time= | =^[0-2][0-9]:[0-5][0-9]$= |
| =orderID= | =^[0-9]+(\.X)?$= |
| =searchID= | Same as =orderID= |
| =hours= | Clamp 1999 |
#+begin_src csharp
[WebMethod]
public static void SaveSearchCriteriaToSession(...)
{
if (!IsValidSebDate(date) || !IsValidSebTime(time)
|| !IsValidQueryComponentId(orderID) || !IsValidQueryComponentId(searchID))
{
return;
}
var sebState = new SEBSessionState();
// ...
}
#+end_src
*Date regex:*
#+begin_src
^[0-9]{4}-(((0[13578]|(10|12))-(0[1-9]|[1-2][0-9]|3[0-1]))|(02-(0[1-9]|[1-2][0-9]))|((0[469]|11)-(0[1-9]|[1-2][0-9]|30)))$
#+end_src
*** Fix 3 — What not to do
- Do not rely on client =DateValidation()= alone.
- Do not use =HtmlEncode= in JS string literals.
- Do not use =innerHTML=; keep =.val()=.
*** Fix 4 — Verification / test plan
Master procedure: *Replicating the vulnerability* section above.
*Negative test:*
#+begin_src json
{
"searchID": "0.X",
"orderID": "0.X",
"date": "\"); alert(1);//",
"time": "00:00",
"hours": 24,
"displayPriorityJourneys": false,
"quickSearch": ""
}
#+end_src
*Pass:* No alert; escaped in source; invalid date not stored (with Fix 2).
*Positive test:* UI search + reload restores criteria.
*** Files to change (summary)
| File | Change |
|--------------------------------+-----------------------------------------------|
| [[file:d:/_dev/WebPortal/src/code/AmberWebUI/SEB/ScheduleExecutionBoard.aspx][ScheduleExecutionBoard.aspx]] | =JavaScriptStringEncode= in =SetupControls()= |
| [[file:d:/_dev/WebPortal/src/code/AmberWebUI/SEB/ScheduleExecutionBoard.aspx.cs][ScheduleExecutionBoard.aspx.cs]] | Validation in =SaveSearchCriteriaToSession= |
*References:* [[https://owasp.org/www-community/attacks/xss/][OWASP XSS]], [[https://portswigger.net/web-security/cross-site-scripting/stored][PortSwigger Stored XSS]], [[https://learn.microsoft.com/en-us/dotnet/api/system.web.httputility.javascriptstringencode][JavaScriptStringEncode]]
-----
** Mental model: severity vs correctness
| Question | Answer |
|----------------------------+-----------------------------------|
| Real coding flaw? | *Yes* (CWE-79) |
| Cross-user session hijack? | *Not under normal use* (self-XSS) |
| Should it still be fixed? | *Yes*, as hygiene |
| Priority vs SQLi / IDOR? | *Much lower* (informational) |
** Next step
1. *Reproduce* on cert/UAT (=replicate-vuln= todo).
2. *Implement* fixes in =D:\_dev\WebPortal= (=remediate-encode=, =remediate-validate=).
3. *Replay* steps and fill comparison matrix (=remediate-retest= todo).
Confirm execution when ready to change WebPortal code.

View File

@@ -4,4 +4,6 @@
#+title: Substack Articles #+title: Substack Articles
#+filetags: :notes:articles: #+filetags: :notes:articles:
[[id:973f2e9c-f161-45ad-8f19-2e4d563f56ac][The 20 Software Engineering Laws]] - [[id:973f2e9c-f161-45ad-8f19-2e4d563f56ac][The 20 Software Engineering Laws]]
- [[https://medium.com/data-science-collective/microsoft-banned-ai-because-it-cost-too-much-135bcbf15a18][Microsoft banned AI because it cost too much.]]

View File

@@ -0,0 +1,45 @@
:PROPERTIES:
:ID: 9f220a90-635a-4744-9664-be89d8b2a64b
:END:
#+title: I Thought I Knew System Design Until I Met a Google L7 Interviewer
#+filetags: :articles:notes:
* AI summary:
- System design is not about memorising architecture patterns; it is about knowing why each component is needed.
- Start with real numbers first, such as traffic, read/write ratio, latency, and throughput, before drawing the design.
- Every component, like caching, sharding, or replication, only helps under certain conditions.
- Good designers think through failure cases, such as database crashes, cache delays, or datacentre splits.
- The best approach is to start simple, measure the system, and only add complexity when a clear metric proves it is needed.
* Article Notes
:PROPERTIES:
:NOTER_DOCUMENT: ../../../pdfs/_articles/I Thought I Knew System Design Until I Met a Google L7 Interviewer.pdf
:NOTER_AUTO_SAVE_LAST_LOCATION: t
:NOTER_PAGE: 4
:END:
** sharding or replication.
:PROPERTIES:
:NOTER_PAGE: 2
:HIGHLIGHT: #s(pdf-highlight 2 (2 (0.2849462365591398 0.7887537993920972 0.43870967741935485 0.7993920972644377)))
:END:
Sharding is the process of splitting a database into smaller, more manageable pieces called shards. Each shard is a separate database that contains a subset of the data. Replication, on the other hand, is the process of copying data from one database to another. This can be done for backup purposes or to improve performance by distributing read requests across multiple replicas.
** Notes for page 3
:PROPERTIES:
:NOTER_PAGE: 3
:HIGHLIGHT: #s(pdf-highlight 3 (3 (0.07204301075268817 0.8882978723404256 0.6440860215053763 0.9224924012158054)))
:END:
#+BEGIN_QUOTE
This is the part that changes everything. Every component has this envelope of conditions where it actually helps. Caching works
when reads dominate and access patterns cluster together. Sharding makes sense when write throughput matters way more than
transactional guarantees. Replication helps when read availability beats consistency.
#+END_QUOTE
** Notes for page 4
:PROPERTIES:
:NOTER_PAGE: 4
:HIGHLIGHT: #s(pdf-highlight 4 (4 (0.06774193548387097 0.29635258358662614 0.12365591397849462 0.3366261398176292)))
:END:
#+BEGIN_QUOTE
Start with one database, one server, no cache. Only scale when some specific metric like latency or throughput or cost crosses a
threshold you can actually name. When you add a component, explain what new failure mode it introduces and how youd even
detect it.
#+END_QUOTE

View File

@@ -0,0 +1,124 @@
:PROPERTIES:
:ID: c3b075bc-44c9-43eb-9c44-a58cb532fc35
:END:
#+title: Every Senior Engineer I Respect Has Read These Books (Have You?)
#+filetags: :articles:notes:
* Article Notes:
:PROPERTIES:
:NOTER_DOCUMENT: ../../../pdfs/_articles/Every Senior Engineer I Respect Has Read These Books (Have You_) _ by The Latency Gambler _ Mar, 2026 _ Medium.pdf
:NOTER_AUTO_SAVE_LAST_LOCATION: t
:NOTER_PAGE: 3
:END:
** Notes for page 1
:PROPERTIES:
:NOTER_PAGE: 1
:HIGHLIGHT: #s(pdf-highlight 1 (1 (0.21505376344086022 0.39893617021276595 0.2591397849462366 0.4217325227963526)))
:END:
#+BEGIN_QUOTE
But they also read specifically, they read books that challenge assumptions about how
software should be built.
#+END_QUOTE
[[../assets/_books/2026-05-22-senior-books.png]]
** 1. The Pragmatic Programmer Hunt & Thomas
:PROPERTIES:
:NOTER_PAGE: 2
:HIGHLIGHT: #s(pdf-highlight 2 (2 (0.07119741100323623 0.06554878048780488 0.38187702265372164 0.0663109756097561)))
:END:
** The DRY principle originated here.
:PROPERTIES:
:NOTER_PAGE: 2
:HIGHLIGHT: #s(pdf-highlight 2 (2 (0.07119741100323623 0.13795731707317074 0.32362459546925565 0.1326219512195122)))
:END:
** Notes for page 2
:PROPERTIES:
:NOTER_PAGE: 2
:HIGHLIGHT: #s(pdf-highlight 2 (2 (0.10463861920172599 0.21417682926829268 0.4530744336569579 0.3307926829268293)))
:END:
#+BEGIN_QUOTE
Tracer bullet approach:
Instead of:
[Full DB layer] → [Full business logic] → [Full API] → [Full UI]
(nothing works until everything is done)
Do this:
[Minimal DB] → [Minimal logic] → [Minimal API] → [Minimal UI]
(thin slice works end-to-end, then iterate)
#+END_QUOTE
** 2. Designing Data-Intensive Applications Martin Kleppmann
:PROPERTIES:
:NOTER_PAGE: 2
:HIGHLIGHT: #s(pdf-highlight 2 (2 (0.07551240560949299 0.4214939024390244 0.47788565264293414 0.42225609756097565)))
:END:
[[../assets/_books/2026-05-22-every-senior-engineer-i-respect-has-read-these-books-have-you-by-the-latency-gambler-mar-2026-medium.png]]
** Authors website
:PROPERTIES:
:NOTER_PAGE: 2
:HIGHLIGHT: #s(pdf-highlight 2 (2 (0.2118279569892473 0.8199088145896657 0.05161290322580645 0.8237082066869301)))
:END:
https://dataintensive.net/
** 3. The Mythical Man-Month Fred Brooks
:PROPERTIES:
:NOTER_PAGE: 2
:HIGHLIGHT: #s(pdf-highlight 2 (2 (0.07526881720430108 0.8427051671732523 0.3419354838709677 0.8381458966565349)))
:END:
** Nine women cannot deliver a baby in one month.
:PROPERTIES:
:NOTER_PAGE: 2
:HIGHLIGHT: #s(pdf-highlight 2 (2 (0.3043010752688172 0.9156534954407295 0.6741935483870968 0.912613981762918)))
:END:
[[../assets/_books/2026-05-22-every-senior-engineer-i-respect-has-read-these-books-have-you-by-the-latency-gambler-mar-2026-medium-01.png]]
** 4. Refactoring Martin Fowler
:PROPERTIES:
:NOTER_PAGE: 3
:HIGHLIGHT: #s(pdf-highlight 3 (3 (0.07204301075268817 0.25835866261398177 0.26881720430107525 0.2613981762917933)))
:END:
[[../assets/_books/2026-05-22-every-senior-engineer-i-respect-has-read-these-books-have-you-by-the-latency-gambler-mar-2026-medium-02.png]]
** 5. Software Architecture: The Hard Parts Richards & Ford
:PROPERTIES:
:NOTER_PAGE: 3
:HIGHLIGHT: #s(pdf-highlight 3 (3 (0.07634408602150537 0.7241641337386018 0.4698924731182796 0.7165653495440729)))
:END:
** 6. Working Effectively with Legacy Code Michael Feathers
:PROPERTIES:
:NOTER_PAGE: 4
:HIGHLIGHT: #s(pdf-highlight 4 (4 (0.06881720430107527 0.1899696048632219 0.46021505376344085 0.1884498480243161)))
:END:
[[../assets/_books/2026-05-22-every-senior-engineer-i-respect-has-read-these-books-have-you-by-the-latency-gambler-mar-2026-medium-03.png]]
** 7. Database Internals Alex Petrov
:PROPERTIES:
:NOTER_PAGE: 4
:HIGHLIGHT: #s(pdf-highlight 4 (4 (0.06989247311827956 0.5075987841945289 0.310752688172043 0.5144376899696048)))
:END:
[[../assets/_books/2026-05-22-every-senior-engineer-i-respect-has-read-these-books-have-you-by-the-latency-gambler-mar-2026-medium-04.png]]
** 8. A Philosophy of Software Design John Ousterhout
:PROPERTIES:
:NOTER_PAGE: 4
:HIGHLIGHT: #s(pdf-highlight 4 (4 (0.07311827956989247 0.8586626139817629 0.4376344086021505 0.8594224924012158)))
:END:
** Notes for page 4
:PROPERTIES:
:NOTER_PAGE: 4
:HIGHLIGHT: #s(pdf-highlight 4 (4 (0.3720430107526882 0.8806990881458967 0.17956989247311828 0.9247720364741642)))
:END:
[[../assets/_books/2026-05-22-every-senior-engineer-i-respect-has-read-these-books-have-you-by-the-latency-gambler-mar-2026-medium-05.png]]
#+BEGIN_QUOTE
Ousterhouts core argument: the primary enemy of software quality is
complexity, and complexity accumulates through shallow modules, information leakage, and temporal
decomposition.
#+END_QUOTE
** 9. Clean Code Robert C. Martin
:PROPERTIES:
:NOTER_PAGE: 5
:HIGHLIGHT: #s(pdf-highlight 5 (5 (0.07204301075268817 0.32598784194528874 0.2924731182795699 0.32370820668693007)))
:END:
** The Reading Order That Makes Sense
:PROPERTIES:
:NOTER_PAGE: 5
:HIGHLIGHT: #s(pdf-highlight 5 (5 (0.4021505376344086 0.7188449848024316 0.08064516129032258 0.7188449848024316)))
:END:
[[../assets/_books/2026-05-22-every-senior-engineer-i-respect-has-read-these-books-have-you-by-the-latency-gambler-mar-2026-medium-06.png]]
** Nine books. Maybe 4,000 pages total.
:PROPERTIES:
:NOTER_PAGE: 6
:HIGHLIGHT: #s(pdf-highlight 6 (6 (0.07096774193548387 0.14817629179331307 0.34623655913978496 0.15273556231003038)))
:END:

View File

@@ -0,0 +1,34 @@
:PROPERTIES:
:ID: 453e252a-34f4-4d84-adab-35fe69ceed55
:END:
#+title: Software Quality Article
#+filetags: :articles:notes:software:
* Article Notes:
:PROPERTIES:
:NOTER_DOCUMENT: ../../../pdfs/_articles/software-quality.pdf
:NOTER_AUTO_SAVE_LAST_LOCATION: t
:NOTER_PAGE: 11
:END:
** Notes for page 1
:PROPERTIES:
:NOTER_PAGE: 1
:HIGHLIGHT: #s(pdf-highlight 1 (1 (0.07096774193548387 0.40197568389057753 0.5849462365591398 0.44680851063829785)))
:END:
#+BEGIN_QUOTE
We've normalized software catastrophes to the point where a Calculator
leaking 32GB of RAM barely makes the news.
#+END_QUOTE
[[../assets/_books/2026-05-22-software-quality.png]]
** Notes for page 10
:PROPERTIES:
:NOTER_PAGE: 10
:HIGHLIGHT: #s(pdf-highlight 10 (10 (0.07419354838709677 0.6565349544072948 0.7365591397849462 0.743161094224924)))
:END:
#+BEGIN_QUOTE
Teach fundamental engineering principles again. Array bounds
checking. Memory management. Algorithm complexity. These aren't
outdated concepts—they're engineering fundamentals.
#+END_QUOTE

View File

@@ -7,7 +7,7 @@
#+filetags: :books:org:index: #+filetags: :books:org:index:
#+DATE: 2025-05-19 #+DATE: 2025-05-19
#+STARTUP: content #+STARTUP: content
#+PROPERTY: GENERATED_AT 2026-05-15T00:00:01.848257 #+PROPERTY: GENERATED_AT 2026-05-29T00:00:01.183286
* Career * Career
** Clean Code_ A Handbook of Agile Software Craftsmanship - Robert C. Martin :Read: ** Clean Code_ A Handbook of Agile Software Craftsmanship - Robert C. Martin :Read:
@@ -86,6 +86,14 @@
:PATH: /home/zaine/master-folder/projects/calibre/library/Steve McConnell/Code Complete, Second Edition eBook (18) :PATH: /home/zaine/master-folder/projects/calibre/library/Steve McConnell/Code Complete, Second Edition eBook (18)
:END: :END:
** Hujjatul Islam Hadhrat Moulana Muhammad Qasim Nanotwi Rahmatullai Alayh A Glimpse Into His Life :Unread:
:PROPERTIES:
:AUTHOR: Jamiatul Ulama (KZN) Ta'limi Board
:STATUS: Unread
:CALIBRE_ID: 36
:PATH: /home/zaine/master-folder/projects/calibre/library/Jamiatul Ulama (KZN) Ta'limi Board/Hujjatul Islam Hadhrat Moulana Muhammad Qasim Nanotwi Rahmatullai Alayh A Glimpse Into His Life (36)
:END:
** Khulfa-e-Rashideen :Unread: ** Khulfa-e-Rashideen :Unread:
:PROPERTIES: :PROPERTIES:
:AUTHOR: Makbool Ahmed Suhaarwi | Afzal Hoosen Elias (translator) :AUTHOR: Makbool Ahmed Suhaarwi | Afzal Hoosen Elias (translator)
@@ -128,6 +136,14 @@
:PATH: /home/zaine/master-folder/projects/calibre/library/Shaykh Abdul Raheem Limbada/A Gift for Nikah (23) :PATH: /home/zaine/master-folder/projects/calibre/library/Shaykh Abdul Raheem Limbada/A Gift for Nikah (23)
:END: :END:
** Hujjatul Islam Hadhrat Moulana Muhammad Qasim Nanotwi Rahmatullai Alayh A Glimpse Into His Life :Unread:
:PROPERTIES:
:AUTHOR: Jamiatul Ulama (KZN) Ta'limi Board
:STATUS: Unread
:CALIBRE_ID: 36
:PATH: /home/zaine/master-folder/projects/calibre/library/Jamiatul Ulama (KZN) Ta'limi Board/Hujjatul Islam Hadhrat Moulana Muhammad Qasim Nanotwi Rahmatullai Alayh A Glimpse Into His Life (36)
:END:
** Imam Rabbani - Mujaddid Alf Thani :Unread: ** Imam Rabbani - Mujaddid Alf Thani :Unread:
:PROPERTIES: :PROPERTIES:
:AUTHOR: Unknown :AUTHOR: Unknown

View File

@@ -21,7 +21,34 @@
** DONE [[id:db7b1fdb-28cd-43a8-8137-23399f38cd07][Effect of Tiktok on teens]] ** DONE [[id:db7b1fdb-28cd-43a8-8137-23399f38cd07][Effect of Tiktok on teens]]
** TODO [[id:5429d9c8-ace8-419b-a9dc-8403b9c20215][Effects of insufficient sleep on circadian rhythmicity]] ** TODO [[id:5429d9c8-ace8-419b-a9dc-8403b9c20215][Effects of insufficient sleep on circadian rhythmicity]]
** Software:
*** DONE [[id:9f220a90-635a-4744-9664-be89d8b2a64b][I Thought I Knew System Design Until I Met a Google L7 Interviewer]]
:PROPERTIES:
:BEGIN_READING: <2026-05-22 Fri>
:END_READING: <2026-05-22 Fri>
:END:
*** DONE [[id:c3b075bc-44c9-43eb-9c44-a58cb532fc35][Every Senior Engineer I Respect Has Read These Books (Have You?)]]
:PROPERTIES:
:BEGIN_READING: <2026-05-22 Fri>
:END_READING: <2026-05-22 Fri>
:END:
*** DONE [[id:453e252a-34f4-4d84-adab-35fe69ceed55][Software Quality Article]]
:PROPERTIES:
:BEGIN_READING: <2026-05-22 Fri>
:END_READING: <2026-05-22 Fri>
:END:
* Long term: * Long term:
** TODO [[id:f1bc3f88-95c5-4013-b0dd-f72428200e72][Art of Computer Programming Notes]] ** TODO [[id:f1bc3f88-95c5-4013-b0dd-f72428200e72][Art of Computer Programming Notes]]
* Non PDF:
** DONE [[https://medium.com/data-science-collective/microsoft-banned-ai-because-it-cost-too-much-135bcbf15a18][Microsoft banned AI because it cost too much.]]
:PROPERTIES:
:BEGIN_READING: <2026-05-28 Thu>
:END_READING: <2026-05-28 Thu>
:END:
** DONE [[https://shvetsm.github.io/posts/the-best-engineers-write-less-code/][The Best Engineers Write Less Code]]
:PROPERTIES:
:BEGIN_READING: <2026-05-28 Thu>
:END_READING: <2026-05-28 Thu>
:END:

View File

@@ -6,5 +6,5 @@
* Effects of insufficient sleep on circadian rhythmicity Notes * Effects of insufficient sleep on circadian rhythmicity Notes
:PROPERTIES: :PROPERTIES:
:NOTER_DOCUMENT: ../../pdfs/_misc/_articles/Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome.pdf :NOTER_DOCUMENT: ../../../pdfs/_misc/_articles/Effects of insufficient sleep on circadian rhythmicity and expression amplitude of the human blood transcriptome.pdf
:END: :END:

View File

@@ -3,7 +3,7 @@
:DATE_STARTED: <2025-07-22 Tue> :DATE_STARTED: <2025-07-22 Tue>
:END: :END:
#+STARTUP: overview #+STARTUP: overview
#+title: career_moc #+title: Career MOC
#+filetags: :moc:career: #+filetags: :moc:career:
Here will lie articles, resources, notes and the like relating to my career. It differ with [[https://www.zainezq.com/posts/career/career-list.html][this]] page in the sense that this one will contain: Here will lie articles, resources, notes and the like relating to my career. It differ with [[https://www.zainezq.com/posts/career/career-list.html][this]] page in the sense that this one will contain:
@@ -18,8 +18,44 @@ Here will lie articles, resources, notes and the like relating to my career. It
Whereas [[https://www.zainezq.com/posts/career/career-list.html][this]] page will contain /finished/ notes regarding what I'm learning at different points in my career. For instance, the majority of November was learning about Software Engineering principles; things like requirements, user stories, lean and retrospectives. Whereas [[https://www.zainezq.com/posts/career/career-list.html][this]] page will contain /finished/ notes regarding what I'm learning at different points in my career. For instance, the majority of November was learning about Software Engineering principles; things like requirements, user stories, lean and retrospectives.
* Notes * News Outlets:
[[id:56fabaf6-e8aa-45d0-a1c1-89f247f0a93f][APIM]] Here are the best ones Id actually use for a **10-minute morning software engineer catch-up**:
| Outlet | Best for | How to use it |
| **TLDR Tech** | Fast daily summaries of startups, programming, AI, tools | Probably the best “read with coffee” option. It is designed as a 5-minute daily tech newsletter. [fn:1] |
| **Hacker News** | What developers are discussing right now | Skim the top 5 posts, but dont get dragged into every comment thread. Great for trends, new tools, and engineering debates. [fn:2] |
| **InfoQ** | Serious software engineering, architecture, DevOps, backend trends | Better for deeper engineering updates rather than quick gossip/news. It focuses on software development trends and best practices. [fn:3] |
| **The Pragmatic Engineer** | Big tech, startups, engineering culture, career insights | Very good for understanding what is happening inside tech companies and engineering teams. [fn:4] |
| **GitHub Blog / GitHub Changelog** | Developer tooling, GitHub features, CI/CD, Copilot, security updates | Useful because changes here can directly affect your workflow. The changelog covers GitHub product updates in one place. [fn:5] |
| **Stack Overflow Blog** | Programming practice, developer surveys, AI/dev trends | Good for broader developer ecosystem articles and opinions around programming. [fn:6] |
| **BleepingComputer** | Cybersecurity news you should know | Worth checking briefly, especially if you work with web apps, authentication, dependencies, or infrastructure. [fn:7] |
| **Ars Technica** | Tech policy, AI, operating systems, security, wider tech context | More general than software-engineering-specific, but useful for understanding the bigger tech landscape. [fn:8] |
| **The Register** | Enterprise tech, cloud, security, software industry news | Good if you want a slightly more blunt, IT/professional angle on tech news. [fn:9] |
| **The Changelog** | Open source and developer ecosystem news | Better as a weekly listen/read rather than daily, but useful for open-source updates. [fn:10] |
For your **10-minute morning routine**, Id keep it simple:
**Daily:**
1. **TLDR Tech** — 5 minutes
2. **Hacker News** — 3 minutes
3. **BleepingComputer or GitHub Changelog** — 2 minutes
**Once or twice a week:**
Read **The Pragmatic Engineer** or **InfoQ** for something more thoughtful and career/architecture-focused.
My personal pick for you would be: **TLDR Tech + Hacker News + GitHub Changelog**, then **InfoQ** when you want something more useful for uni/project/dissertation-level software engineering.
[fn:1]: https://tldr.tech/?utm_source=chatgpt.com "TLDR - A Byte Sized Daily Tech Newsletter"
[fn:2]: https://news.ycombinator.com/?utm_source=chatgpt.com "Hacker News"
[fn:3]: https://www.infoq.com/?utm_source=chatgpt.com "InfoQ: Software Development News, Trends & Best Practices ..."
[fn:4]: https://www.pragmaticengineer.com/?utm_source=chatgpt.com "The Pragmatic Engineer"
[fn:5]: https://github.blog/changelog/?utm_source=chatgpt.com "GitHub Changelog"
[fn:6]: https://stackoverflow.blog/?utm_source=chatgpt.com "The Stack Overflow Blog - Stack Overflow"
[fn:7]: https://www.bleepingcomputer.com/?utm_source=chatgpt.com "BleepingComputer | Cybersecurity, Technology News and ..."
[fn:8]: https://arstechnica.com/?utm_source=chatgpt.com "Ars Technica - Serving the Technologist since 1998. News ..."
[fn:9]: https://www.theregister.com/?utm_source=chatgpt.com "The Register: Technology news and analysis"
[fn:10]: https://podcasts.apple.com/gb/podcast/the-changelog-software-development-open-source/id341623264?utm_source=chatgpt.com "The Changelog: Software Development, Open Source"
* Unread Articles * Unread Articles
@@ -29,9 +65,6 @@ Whereas [[https://www.zainezq.com/posts/career/career-list.html][this]] page wil
- https://medium.com/@saiyaff/ai-tools-and-the-software-engineers-dilemma-e4ad89d516ca - https://medium.com/@saiyaff/ai-tools-and-the-software-engineers-dilemma-e4ad89d516ca
* Read Articles * Read Articles
* Coding
- [[id:2729599d-ae2b-4f22-b73d-bf22d81e0767][test-driven-development]]
* Microlise * Microlise
@@ -45,8 +78,6 @@ Whereas [[https://www.zainezq.com/posts/career/career-list.html][this]] page wil
* Resources: * Resources:
** Links ** Links
- [[https://simpleprogrammer.com/my-free-blogging-course-is-getting-unbelievable-results/][Simple Programmer]] - [[https://simpleprogrammer.com/my-free-blogging-course-is-getting-unbelievable-results/][Simple Programmer]]
** Books
- [[file:/home/zaine/master-folder/pdfs/technical/sicp.pdf][SICP Book]]

View File

@@ -38,7 +38,8 @@ Part of being a software engineer is having a good grasp of mathematical concept
- [[id:fdb8fa52-0c9d-4332-9f32-53bc6fee24b9][MVP and MVT]] - [[id:fdb8fa52-0c9d-4332-9f32-53bc6fee24b9][MVP and MVT]]
- [[id:2729599d-ae2b-4f22-b73d-bf22d81e0767][Test Driven Development]]
Some core programming concepts that are essential for software development. The things I need to add here are: Some core programming concepts that are essential for software development. The things I need to add here are:
* APIs * APIs

View File

@@ -11,3 +11,5 @@
** DONE [#C]: Clean up the code (js, css files) ** DONE [#C]: Clean up the code (js, css files)
** DONE [#A]: Improve the search UI in org web ** DONE [#A]: Improve the search UI in org web
** DONE [#A]: Improve the search UI in org roam ** DONE [#A]: Improve the search UI in org roam
** DONE [#B]: Improve design of org roam

View File

@@ -23,6 +23,172 @@
#+end_src
** Saving images in epdf mode (org roam):
#+begin_src emacs-lisp
;; epdf stuff
(require 'seq)
(require 'subr-x)
(defvar zaine/pdf-image-save-dir
"d:/_nextcloud/master-folder/org_files/org_roam/assets/_books/"
"Folder where cropped PDF images should be saved.")
(defvar zaine/org-roam-root
"d:/_nextcloud/master-folder/org_files/org_roam/"
"Root folder used for relative Org image links.")
(defvar zaine/pdf-image-kill-buffer-after-save t
"If non-nil, close the *PDF image* buffer after saving.")
(defvar zaine/pdf-image-insert-link-into-org t
"If non-nil, insert the image link into a visible Org buffer.")
(defun zaine/pdf-image--slugify (s)
"Turn S into a safe filename slug."
(let* ((s (downcase (string-trim (or s ""))))
(s (replace-regexp-in-string "['`]" "" s))
(s (replace-regexp-in-string "[^[:alnum:]]+" "-" s))
(s (replace-regexp-in-string "-+" "-" s))
(s (replace-regexp-in-string "\\`-+\\|-+\\'" "" s)))
(if (string-empty-p s) "pdf-image" s)))
(defun zaine/pdf-image--current-pdf-title ()
"Try to get the title from the most recently used PDF buffer."
(when-let ((buf
(seq-find
(lambda (b)
(with-current-buffer b
(derived-mode-p 'pdf-view-mode)))
(delq (current-buffer) (buffer-list)))))
(with-current-buffer buf
(if buffer-file-name
(file-name-base buffer-file-name)
(buffer-name buf)))))
(defun zaine/pdf-image--unique-file (dir stem ext)
"Return a unique filename in DIR using STEM and EXT."
(let ((file (expand-file-name (concat stem ext) dir))
(n 1))
(while (file-exists-p file)
(setq file
(expand-file-name
(format "%s-%02d%s" stem n ext)
dir))
(setq n (1+ n)))
file))
(defun zaine/pdf-image--org-link (file)
"Create a relative Org file link for FILE."
(format "[[file:%s]]"
(file-relative-name
(expand-file-name file)
(file-name-as-directory (expand-file-name zaine/org-roam-root)))))
(defun zaine/pdf-image--visible-org-buffer ()
"Find a visible Org buffer, usually your org-noter notes buffer."
(seq-find
(lambda (buf)
(with-current-buffer buf
(derived-mode-p 'org-mode)))
(delete-dups (mapcar #'window-buffer (window-list)))))
(defun zaine/pdf-image--insert-link-into-org (link)
"Insert LINK into a visible Org buffer, if one exists."
(when-let ((buf (zaine/pdf-image--visible-org-buffer)))
(with-current-buffer buf
(goto-char (point))
(unless (bolp)
(insert "\n"))
(insert link "\n")
(when (fboundp 'org-display-inline-images)
(org-display-inline-images)))
t))
(defun zaine/pdf-image--visible-org-window ()
"Find a visible Org window, usually the org-noter notes window."
(seq-find
(lambda (win)
(with-current-buffer (window-buffer win)
(derived-mode-p 'org-mode)))
(window-list nil 'no-minibuf)))
(defun zaine/pdf-image-save-and-insert (&optional ask-title)
"Save the current *PDF image* buffer into `_books` and insert an Org link.
With prefix argument, prompt for the title/name instead of using the PDF filename.
Also closes the temporary *PDF image* window afterwards."
(interactive "P")
(unless (or (derived-mode-p 'image-mode)
(string-match-p "\\`\\*PDF image\\*" (buffer-name)))
(user-error "Run this from the *PDF image* buffer"))
(let* ((image-buffer (current-buffer))
(image-windows (get-buffer-window-list image-buffer nil t))
(org-window (zaine/pdf-image--visible-org-window))
(default-title (or (zaine/pdf-image--current-pdf-title)
"pdf-image"))
(title (if ask-title
(read-string "Image/article name: " default-title)
default-title))
(stem (concat (format-time-string "%Y-%m-%d")
"-"
(zaine/pdf-image--slugify title)))
(file (zaine/pdf-image--unique-file
zaine/pdf-image-save-dir
stem
".png"))
(link (zaine/pdf-image--org-link file)))
(make-directory (file-name-directory file) t)
;; Save the raw image data from the *PDF image* buffer.
(let ((coding-system-for-write 'binary)
(require-final-newline nil))
(with-current-buffer image-buffer
(save-restriction
(widen)
(write-region (point-min) (point-max) file nil 'silent))
(set-buffer-modified-p nil)))
;; Copy the link just in case.
(kill-new link)
;; Insert the link into the visible Org notes window.
(when org-window
(with-selected-window org-window
(unless (bolp)
(insert "\n"))
(insert link "\n")
(when (fboundp 'org-display-inline-images)
(org-display-inline-images))))
;; Close the temporary *PDF image* window instead of letting Emacs reuse it.
(dolist (win image-windows)
(when (window-live-p win)
(ignore-errors
(delete-window win))))
;; Kill the temporary image buffer after its window has gone.
(when (buffer-live-p image-buffer)
(kill-buffer image-buffer))
;; Put focus back on the notes window if it still exists.
(when (and org-window (window-live-p org-window))
(select-window org-window))
(message "Saved %s and inserted Org link"
(file-name-nondirectory file))))
(with-eval-after-load 'image-mode
(define-key image-mode-map (kbd "C-c i p") #'zaine/pdf-image-save-and-insert))
#+end_src #+end_src
* CALDAV and org agenda calendars: * CALDAV and org agenda calendars:
@@ -91,57 +257,62 @@
* Org image inserter: * Org image inserter:
#+begin_src emacs-lisp #+begin_src emacs-lisp
;;; --- Org image inserter (improved search UX) ----------------------------- ;;; --- Org image inserter (improved search UX) -----------------------------
(use-package vertico (use-package vertico
:init (vertico-mode)) :init (vertico-mode))
(use-package orderless (use-package orderless
:custom :custom
(completion-styles '(orderless basic)) (completion-styles '(orderless basic))
(completion-category-defaults nil)) (completion-category-defaults nil))
(defgroup zq/org-assets nil (defgroup zq/org-assets nil
"Insert image links from predefined asset profiles." "Insert image links from predefined asset profiles."
:group 'org) :group 'org)
(defcustom zq/org-asset-profiles (defcustom zq/org-asset-profiles
'(("org-roam" . "D:\\_nextcloud\\master-folder\\org_files\\org_roam\\assets") '(("org-roam" . "D:\\_nextcloud\\master-folder\\org_files\\org_roam\\assets")
("org-web" . "D:\\_nextcloud\\master-folder\\org_files\\org_web\\assets")) ("org-web" . "D:\\_nextcloud\\master-folder\\org_files\\org_web\\assets"))
"Alist of (PROFILE-NAME . ASSETS-DIR)." "Alist of (PROFILE-NAME . ASSETS-DIR)."
:type '(alist :key-type string :value-type directory) :type '(alist :key-type string :value-type directory)
:group 'zq/org-assets) :group 'zq/org-assets)
(defcustom zq/org-image-extensions (defcustom zq/org-image-extensions
'("png" "jpg" "jpeg" "gif" "svg" "webp" "mov" "mp4" "mp3") '("png" "jpg" "jpeg" "gif" "svg" "webp" "mov" "mp4" "mp3")
"File extensions considered when offering candidates." "File extensions considered when offering candidates."
:type '(repeat string) :type '(repeat string)
:group 'zq/org-assets) :group 'zq/org-assets)
(defun zq/org--image-regexp () (defun zq/org--image-regexp ()
(concat "\\." (regexp-opt zq/org-image-extensions t) "\\'")) (concat "\\." (regexp-opt zq/org-image-extensions t) "\\'"))
(defun zq/org--image-files (dir) (defun zq/org--image-files (dir)
(when (and dir (file-directory-p dir)) "Return image/media files in DIR, newest modified first."
(directory-files-recursively dir (zq/org--image-regexp)))) (when (and dir (file-directory-p dir))
(sort
(directory-files-recursively dir (zq/org--image-regexp))
#'file-newer-than-file-p)))
(defun zq/org--parse-name (filename) (defun zq/org--parse-name (filename)
"Split FILENAME into (DATE . REST)." "Split FILENAME into (DATE . REST)."
(if (string-match "^\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\}\\)-\\(.*\\)" filename) (if (string-match "^\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\}\\)-\\(.*\\)" filename)
(cons (match-string 1 filename) (cons (match-string 1 filename)
(match-string 2 filename)) (match-string 2 filename))
(cons nil filename))) (cons nil filename)))
(defun zq/org--display-name (path) (defun zq/org--display-name (path)
(let* ((name (file-name-nondirectory path)) (let* ((name (file-name-nondirectory path))
(dir (file-name-nondirectory (directory-file-name (file-name-directory path)))) (dir (file-name-nondirectory (directory-file-name (file-name-directory path))))
(parsed (zq/org--parse-name name)) (parsed (zq/org--parse-name name))
(date (car parsed)) (date (car parsed))
(rest (cdr parsed))) (rest (cdr parsed)))
(format "%s (%s | %s)" rest (or date "no-date") dir))) (format "%s (%s | %s)" rest (or date "no-date") dir)))
(defun zq/org--build-candidates (files) (defun zq/org--build-candidates (files)
"Return an alist of (DISPLAY . FULLPATH), handling duplicates." "Return an alist of (DISPLAY . FULLPATH), handling duplicates.
Preserves the order of FILES, so newest files can appear first."
(let ((table (make-hash-table :test 'equal)) (let ((table (make-hash-table :test 'equal))
result) result)
(dolist (path files) (dolist (path files)
@@ -152,49 +323,48 @@
(push (cons (file-name-nondirectory path) path) result) (push (cons (file-name-nondirectory path) path) result)
(puthash display t table) (puthash display t table)
(push (cons display path) result)))) (push (cons display path) result))))
result)) (nreverse result)))
(defun zq/org-insert-asset-image (&optional profile use-file-prefix)
"Insert an Org link to an image chosen from a PROFILEs assets dir.
(defun zq/org-insert-asset-image (&optional profile use-file-prefix) Features:
"Insert an Org link to an image chosen from a PROFILEs assets dir. - Fuzzy search (with Vertico/Orderless/Ivy/Helm)
- Clean names (date stripped)
- Relative paths inserted
Features: With prefix arg (C-u), use file: links."
- Fuzzy search (with Vertico/Orderless/Ivy/Helm) (interactive
- Clean names (date stripped) (list (completing-read
- Relative paths inserted "Profile: "
(mapcar #'car zq/org-asset-profiles)
nil t nil nil "org-roam")
current-prefix-arg))
(let* ((base-dir (cdr (assoc profile zq/org-asset-profiles)))
(_ (unless (and base-dir (file-directory-p base-dir))
(user-error "Invalid directory for profile '%s'" profile)))
With prefix arg (C-u), use file: links." (files (or (zq/org--image-files base-dir)
(interactive (user-error "No assets found in %s" base-dir)))
(list (completing-read
"Profile: "
(mapcar #'car zq/org-asset-profiles)
nil t nil nil "org-roam")
current-prefix-arg))
(let* ((base-dir (cdr (assoc profile zq/org-asset-profiles)))
(_ (unless (and base-dir (file-directory-p base-dir))
(user-error "Invalid directory for profile '%s'" profile)))
(files (or (zq/org--image-files base-dir) (candidates (zq/org--build-candidates files))
(user-error "No assets found in %s" base-dir)))
(candidates (zq/org--build-candidates files)) ;; user selects clean name, we resolve full path
(selected (completing-read "Image: " candidates nil t))
(abs-path (cdr (assoc selected candidates)))
;; user selects clean name, we resolve full path (here (or (buffer-file-name) default-directory))
(selected (completing-read "Image: " candidates nil t)) (rel (file-relative-name abs-path (file-name-directory here)))
(abs-path (cdr (assoc selected candidates)))
(here (or (buffer-file-name) default-directory)) (link (format "[[%s%s]]"
(rel (file-relative-name abs-path (file-name-directory here))) (if use-file-prefix "file:" "")
rel)))
(link (format "[[%s%s]]" (insert link)
(if use-file-prefix "file:" "")
rel)))
(insert link) (when (derived-mode-p 'org-mode)
(org-display-inline-images t t))))
(when (derived-mode-p 'org-mode)
(org-display-inline-images t t))))
#+end_src #+end_src
* Weekly org review file: * Weekly org review file:

View File

@@ -7,4 +7,4 @@
Test-driven development is a way of writing code that involves writing an automated unit-level test case that fails, then writing just enough code to make the test pass, then refactoring both the test code and the production code, then repeating with another new test case. Alternative approaches to writing automated tests is to write all of the production code before starting on the test code or to write all of the test code before starting on the production code. Test-driven development is a way of writing code that involves writing an automated unit-level test case that fails, then writing just enough code to make the test pass, then refactoring both the test code and the production code, then repeating with another new test case. Alternative approaches to writing automated tests is to write all of the production code before starting on the test code or to write all of the test code before starting on the production code.
One example is: One example is:
- [[id:bca8e7a6-0590-4630-ab49-210306ad21a2][bowling-kata]] [[id:bca8e7a6-0590-4630-ab49-210306ad21a2][Bowling Kata]]

View File

@@ -1,7 +1,7 @@
:PROPERTIES: :PROPERTIES:
:ID: bca8e7a6-0590-4630-ab49-210306ad21a2 :ID: bca8e7a6-0590-4630-ab49-210306ad21a2
:END: :END:
#+title: bowling-kata #+title: Bowling Kata
#+filetags: :coding:docs:resources: #+filetags: :coding:docs:resources:
- https://www.codurance.com/katas/bowling - https://www.codurance.com/katas/bowling

View File

@@ -4,6 +4,10 @@
#+title: Microlise MOC #+title: Microlise MOC
#+filetags: :career:work: #+filetags: :career:work:
* <2026-05-27 Wed>: XSS ROM Work
** [[id:b2ac09aa-e888-48d3-8357-2292f9b2526c][XSS Pentesting Report Fix]]
* Misc
- [[id:2BFB84B2-2129-4AE3-8E69-290CA5BF9747][pre_work_prep_microlise]] - [[id:2BFB84B2-2129-4AE3-8E69-290CA5BF9747][pre_work_prep_microlise]]
- [[id:f877240e-c2c8-4087-84e5-4b1ca3fcd4ed][microlise-assessment]] - [[id:f877240e-c2c8-4087-84e5-4b1ca3fcd4ed][microlise-assessment]]

View File

@@ -6,7 +6,7 @@
#+AUTHOR: Auto-generated #+AUTHOR: Auto-generated
#+filetags: :recipes:cooking:org:index: #+filetags: :recipes:cooking:org:index:
#+STARTUP: content #+STARTUP: content
#+PROPERTY: GENERATED_AT 2026-05-15T00:00:02.712524 #+PROPERTY: GENERATED_AT 2026-05-29T00:00:01.969551
# How to add notes: under any recipe heading, add :COOKED: <date> to record when you made it, and :TIPS: your tip text to add notes. # How to add notes: under any recipe heading, add :COOKED: <date> to record when you made it, and :TIPS: your tip text to add notes.
# Multiple :COOKED: lines are supported. These are preserved across regenerations. # Multiple :COOKED: lines are supported. These are preserved across regenerations.

View File

@@ -4,10 +4,10 @@
#+title: Ibarat #+title: Ibarat
#+filetags: :reading:deen: #+filetags: :reading:deen:
Volume 1: 1 - 1890 (N1: 117 - 938) Volume 1: 1 - 1890 (N1: 117 - 938 = 821)
Volume 2: 1891 - 3948 (N1: 939 - 1770) Volume 2: 1891 - 3948 (N1: 939 - 1770 = 832)
Volume 3: 3949 - 5639 Volume 3: 3949 - 5639 (N1: 1771 - 2546 = 775)
Volume 4: 5640 - 7563 Volume 4: 5640 - 7563 (N1: 2547 - 3366 = 819)
* COMMENT Page 909 - 939 * COMMENT Page 909 - 939
| Pages | Time 1 | Time 2 | Time 3 | | Pages | Time 1 | Time 2 | Time 3 |

View File

@@ -67,6 +67,31 @@
"id": "7242940f-1485-41bc-8737-a22af5ac011f", "id": "7242940f-1485-41bc-8737-a22af5ac011f",
"title": "2026-05-13", "title": "2026-05-13",
"url": "/daily/2026-05-13.html" "url": "/daily/2026-05-13.html"
},
{
"id": "6c5ae105-a9b0-4392-bf0f-d8e261056fad",
"title": "2026-05-20",
"url": "/daily/2026-05-20.html"
},
{
"id": "ae849916-31ab-4829-b81c-36735402eb4a",
"title": "2026-05-21",
"url": "/daily/2026-05-21.html"
},
{
"id": "5c89425f-2483-456f-8925-5a558d6a0868",
"title": "2026-05-22",
"url": "/daily/2026-05-22.html"
},
{
"id": "99abd6e2-d9fc-423b-8930-c843f368557f",
"title": "2026-05-28",
"url": "/daily/2026-05-28.html"
},
{
"id": "648c487d-d218-404a-b427-d186dc4c265d",
"title": "2026-05-29",
"url": "/daily/2026-05-29.html"
} }
], ],
"A": [ "A": [
@@ -194,7 +219,7 @@
}, },
{ {
"id": "bca8e7a6-0590-4630-ab49-210306ad21a2", "id": "bca8e7a6-0590-4630-ab49-210306ad21a2",
"title": "bowling-kata", "title": "Bowling Kata",
"url": "/Misc/20250723185943-bowling_kata.html" "url": "/Misc/20250723185943-bowling_kata.html"
}, },
{ {
@@ -209,16 +234,16 @@
"title": "C Notes", "title": "C Notes",
"url": "/Notes/20241213005125-c_notes.html" "url": "/Notes/20241213005125-c_notes.html"
}, },
{
"id": "dd04d228-fff5-402a-929d-9d113a2ec965",
"title": "Career MOC",
"url": "/Career Concepts/20250722221649-career_moc.html"
},
{ {
"id": "f9838952-9753-471b-a2cc-d72e01a53ef6", "id": "f9838952-9753-471b-a2cc-d72e01a53ef6",
"title": "career_capital", "title": "career_capital",
"url": "/Books/20250723183655-career_capital.html" "url": "/Books/20250723183655-career_capital.html"
}, },
{
"id": "dd04d228-fff5-402a-929d-9d113a2ec965",
"title": "career_moc",
"url": "/Career Concepts/20250722221649-career_moc.html"
},
{ {
"id": "cf614dfb-f764-4689-be69-e0166f4b9260", "id": "cf614dfb-f764-4689-be69-e0166f4b9260",
"title": "Chrome Tabs Backup", "title": "Chrome Tabs Backup",
@@ -422,6 +447,11 @@
"id": "abe43fdc-e90d-4c2c-9320-cc7929f0c99a", "id": "abe43fdc-e90d-4c2c-9320-cc7929f0c99a",
"title": "ESS", "title": "ESS",
"url": "/Career Concepts/20260410115348-microlise_ess.html" "url": "/Career Concepts/20260410115348-microlise_ess.html"
},
{
"id": "c3b075bc-44c9-43eb-9c44-a58cb532fc35",
"title": "Every Senior Engineer I Respect Has Read These Books (Have You?)",
"url": "/Articles/20260522115235-every_senior_engineer_has_read_these_books_article.html"
} }
], ],
"F": [ "F": [
@@ -471,6 +501,11 @@
} }
], ],
"I": [ "I": [
{
"id": "9f220a90-635a-4744-9664-be89d8b2a64b",
"title": "I Thought I Knew System Design Until I Met a Google L7 Interviewer",
"url": "/Articles/20260522112659-i_thought_i_knew_system_design_article.html"
},
{ {
"id": "9d5aae0f-4ae1-49a5-a047-9099baad0a06", "id": "9d5aae0f-4ae1-49a5-a047-9099baad0a06",
"title": "i3-wm", "title": "i3-wm",
@@ -779,6 +814,11 @@
"title": "Software Development Methodologies", "title": "Software Development Methodologies",
"url": "/Career Concepts/20260328215014-software_dev_methodologies.html" "url": "/Career Concepts/20260328215014-software_dev_methodologies.html"
}, },
{
"id": "453e252a-34f4-4d84-adab-35fe69ceed55",
"title": "Software Quality Article",
"url": "/Articles/20260522161728-software_quality_article.html"
},
{ {
"id": "6820973F-613E-441A-BC1D-8FE5CD9BD6F7", "id": "6820973F-613E-441A-BC1D-8FE5CD9BD6F7",
"title": "Solid Principles", "title": "Solid Principles",
@@ -958,6 +998,11 @@
"id": "F32F8F09-3DEC-4FD1-8CFA-401A316E906B", "id": "F32F8F09-3DEC-4FD1-8CFA-401A316E906B",
"title": "XOR", "title": "XOR",
"url": "/Career Concepts/20260101011126-xor.html" "url": "/Career Concepts/20260101011126-xor.html"
},
{
"id": "b2ac09aa-e888-48d3-8357-2292f9b2526c",
"title": "XSS Pentesting Report Fix",
"url": "/20260527152602-microlise_xss_rom_pentest.html"
} }
] ]
} }

View File

@@ -7,16 +7,33 @@ This file is auto-generated. Do not edit manually.
* 2 * 2
- [[id:7f756445-de36-4c17-a7c2-213e626d8498][2026 Targets]] - [[id:7f756445-de36-4c17-a7c2-213e626d8498][2026 Targets]]
- [[id:652acf16-85cf-4351-b8cd-d89637644e0f][2026-04-14]]
- [[id:93b5751a-f2cb-4681-bf13-602c6e7bcf59][2026-04-18]]
- [[id:77fa0305-3bc2-48ac-8864-eae9f06f2991][2026-04-20]]
- [[id:aa1436cc-09bb-45d6-b2db-0b70a9f0756f][2026-04-21]]
- [[id:25ac4877-6cb8-409e-a82d-df2e44c7b0ce][2026-04-28]]
- [[id:b9273d08-0c8d-4d9f-9550-358269b6c1ae][2026-04-29]]
- [[id:dec13458-b814-40e8-9da9-64ed6ce2611b][2026-04-30]]
- [[id:79c607d2-7f8c-4fda-b816-0324e08eeb13][2026-05-01]]
- [[id:f17d1dc6-0539-40b9-b08a-38f46c3bf701][2026-05-05]]
- [[id:10483553-b547-47ce-835d-8222441b35ca][2026-05-06]]
- [[id:e69fd1ff-562d-4bb3-a27b-96d29ac5f56a][2026-05-12]]
- [[id:7242940f-1485-41bc-8737-a22af5ac011f][2026-05-13]]
- [[id:6c5ae105-a9b0-4392-bf0f-d8e261056fad][2026-05-20]]
- [[id:ae849916-31ab-4829-b81c-36735402eb4a][2026-05-21]]
- [[id:5c89425f-2483-456f-8925-5a558d6a0868][2026-05-22]]
- [[id:99abd6e2-d9fc-423b-8930-c843f368557f][2026-05-28]]
- [[id:648c487d-d218-404a-b427-d186dc4c265d][2026-05-29]]
* A * A
- [[id:effa2bf5-8b04-42d3-b9c1-17160dc4ddc2][Actual]] - [[id:effa2bf5-8b04-42d3-b9c1-17160dc4ddc2][Actual]]
- [[id:3acffb66-bc1a-4661-904f-c5447b3c3488][advanced-networking]] - [[id:3acffb66-bc1a-4661-904f-c5447b3c3488][Advanced Networking]]
- [[id:556d10d1-1c74-4d9f-a398-39cb3bd5d935][afp]] - [[id:556d10d1-1c74-4d9f-a398-39cb3bd5d935][AFP (Advanced Functional Programming)]]
- [[id:6c272430-aff5-468b-90d3-5ff3a96152cf][AFP Week 1]]
- [[id:f6c9e1a7-8465-4cef-9481-2b803d0c43d4][afp_lab_1]] - [[id:f6c9e1a7-8465-4cef-9481-2b803d0c43d4][afp_lab_1]]
- [[id:3aef24fd-b220-4408-aa1e-c3538d661b62][afp_lec_1]] - [[id:3aef24fd-b220-4408-aa1e-c3538d661b62][afp_lec_1]]
- [[id:460f4a49-8ae4-444a-bf82-4e14ca7cad3f][afp_lec_2]] - [[id:460f4a49-8ae4-444a-bf82-4e14ca7cad3f][afp_lec_2]]
- [[id:ed4c372b-0314-4b6e-9119-742f69b5e434][afp_lec_5]] - [[id:ed4c372b-0314-4b6e-9119-742f69b5e434][afp_lec_5]]
- [[id:6c272430-aff5-468b-90d3-5ff3a96152cf][afp_week1]]
- [[id:4bc71106-1d2b-4c71-836d-54b738fe5ff5][afp_week2]] - [[id:4bc71106-1d2b-4c71-836d-54b738fe5ff5][afp_week2]]
- [[id:1f395b8c-cf55-43eb-9430-dd9449f6b575][afp_week5]] - [[id:1f395b8c-cf55-43eb-9430-dd9449f6b575][afp_week5]]
- [[id:c6cf8f7a-778f-4e83-b607-753ef8dbb3f1][Airflow]] - [[id:c6cf8f7a-778f-4e83-b607-753ef8dbb3f1][Airflow]]
@@ -24,40 +41,73 @@ This file is auto-generated. Do not edit manually.
- [[id:1ea42d73-3cd1-4cac-a6ee-028de21d08d5][Airflow Tasks]] - [[id:1ea42d73-3cd1-4cac-a6ee-028de21d08d5][Airflow Tasks]]
- [[id:e7f2302b-16eb-476d-a7b9-be12f077819d][AOC Notes]] - [[id:e7f2302b-16eb-476d-a7b9-be12f077819d][AOC Notes]]
- [[id:49b195c8-e116-40ca-86e8-62c65dbb5a4f][API Architecture]] - [[id:49b195c8-e116-40ca-86e8-62c65dbb5a4f][API Architecture]]
- [[id:e7f082e4-1b9f-4ebe-96d6-94d92e80a07e][API Intro Notes]]
- [[id:56fabaf6-e8aa-45d0-a1c1-89f247f0a93f][APIM]] - [[id:56fabaf6-e8aa-45d0-a1c1-89f247f0a93f][APIM]]
- [[id:f1bc3f88-95c5-4013-b0dd-f72428200e72][Art of Computer Programming Notes]]
- [[id:8a32392e-180e-4754-b80f-dc4a327d6ba9][Artificial Intelligence]]
- [[id:b2fd7038-42a8-4cbe-882b-92fbe2c12a11][ASP.NET Core Web API Fundamental Notes]]
* B * B
- [[id:580cc3a5-af8e-4cbe-b5ad-5b06680e6c37][Backlog]] - [[id:580cc3a5-af8e-4cbe-b5ad-5b06680e6c37][Backlog]]
- [[id:275988a8-59d8-40c8-a8b4-47118d6eb834][big-o-complexity]] - [[id:275988a8-59d8-40c8-a8b4-47118d6eb834][Big (O) - Time and Space Complexity]]
- [[id:238ff7d8-db22-41e2-8aad-fc3c778e6248][book-recs]] - [[id:238ff7d8-db22-41e2-8aad-fc3c778e6248][Book Recommendations]]
- [[id:63314cff-3a3f-49b4-9e76-4a359c51f55f][Books MOC]] - [[id:63314cff-3a3f-49b4-9e76-4a359c51f55f][Books MOC]]
- [[id:bca8e7a6-0590-4630-ab49-210306ad21a2][bowling-kata]] - [[id:bca8e7a6-0590-4630-ab49-210306ad21a2][Bowling Kata]]
- [[id:b2fb976a-c23c-4275-8a53-da343c223b97][Brain MOC]] - [[id:b2fb976a-c23c-4275-8a53-da343c223b97][Brain MOC]]
* C * C
- [[id:5a207a1c-6f02-40d5-b42e-38daaa0aec10][C Notes]] - [[id:5a207a1c-6f02-40d5-b42e-38daaa0aec10][C Notes]]
- [[id:dd04d228-fff5-402a-929d-9d113a2ec965][Career MOC]]
- [[id:f9838952-9753-471b-a2cc-d72e01a53ef6][career_capital]] - [[id:f9838952-9753-471b-a2cc-d72e01a53ef6][career_capital]]
- [[id:dd04d228-fff5-402a-929d-9d113a2ec965][career_moc]] - [[id:cf614dfb-f764-4689-be69-e0166f4b9260][Chrome Tabs Backup]]
- [[id:2767b5ac-f2c9-4b1e-ab87-82c43cdec4c1][CI/CD Example]]
- [[id:5b714c6c-7eaf-4f3f-b4f6-2166ff3a9963][CI/CD Summary]]
- [[id:dd55d635-59de-4ed9-8ff0-423782c2e0ae][clean-code]] - [[id:dd55d635-59de-4ed9-8ff0-423782c2e0ae][clean-code]]
- [[id:43afdfdd-e1fe-4e3a-a6f6-0d99b253fc8a][Cloudflare]]
- [[id:22737796-6D31-49D5-84F2-F7BC73E45144][Concepts]] - [[id:22737796-6D31-49D5-84F2-F7BC73E45144][Concepts]]
* D * D
- [[id:7b8ba1b0-a00e-4fc1-b75e-55ba0e2c3bb7][Daily Notes MOC]]
- [[id:ceeb2ad1-b091-49d8-8cd6-752f28a6fd86][Data Camp AI Training]]
- [[id:e448cd99-afee-4702-947f-644bb34dc1aa][Database MOC]] - [[id:e448cd99-afee-4702-947f-644bb34dc1aa][Database MOC]]
- [[id:b4858f6a-b05c-47f2-972e-905e0bb2c352][Database Permissions, Roles, and Accounts]]
- [[id:b4da3cfd-f7d8-46aa-b3d7-a231178c06b6][Dawrah]]
- [[id:46c01e4f-4363-4017-9bb8-ef313266d5e2][Decluttering Plan]]
- [[id:4087e241-5c2a-4756-81a3-a98904231afb][Deen MOC]]
- [[id:d4f96bfb-b83d-449b-9f74-f602a1a3c2d3][deliberate_practice]] - [[id:d4f96bfb-b83d-449b-9f74-f602a1a3c2d3][deliberate_practice]]
- [[id:631b2086-4b8f-4fe3-829d-be1dc014e293][Design patterns]] - [[id:631b2086-4b8f-4fe3-829d-be1dc014e293][Design patterns]]
- [[id:e717c252-0e15-4403-898f-93163dd1b147][Dynamic Link Library (DLL)]]
* E * E
- [[id:db7b1fdb-28cd-43a8-8137-23399f38cd07][Effect of Tiktok on teens]]
- [[id:5429d9c8-ace8-419b-a9dc-8403b9c20215][Effects of insufficient sleep on circadian rhythmicity]]
- [[id:10b1f18e-b221-4ab8-bce4-b6f20ad417db][Emacs Calendar/Agenda]]
- [[id:1c87e4f1-fa7e-4200-9a29-a5a98d4c7ac9][Emacs Config]]
- [[id:7e79e4c5-383d-450f-882c-33d4f87ba1b5][Emacs ELISP]]
- [[id:45CC3AF5-5E20-4B03-A36C-8D4BDD5CBB13][Emacs Evil Mode]]
- [[id:8e5e9498-ff3c-48e7-aab5-6e94b2e41ccb][Emacs GTD]]
- [[id:966175d4-3b58-4abc-9b41-08cbf328dd87][Emacs Keybindings]]
- [[id:2ab0fa3f-8ac6-4af2-8cd4-1dd490fb19c3][Emacs Magit]]
- [[id:8fa3f476-6152-45f4-b618-50f1e4bce46c][Emacs MOC]] - [[id:8fa3f476-6152-45f4-b618-50f1e4bce46c][Emacs MOC]]
- [[id:7e79e4c5-383d-450f-882c-33d4f87ba1b5][emacs-stuff-elisp]] - [[id:168b6b10-d670-4f9d-89cf-aeb59aa644a1][Emacs Org Noter]]
- [[id:45CC3AF5-5E20-4B03-A36C-8D4BDD5CBB13][emacs-stuff-evil]] - [[id:7d2e867e-f091-4362-a583-453f732207fe][Emacs ORG Publish]]
- [[id:8e5e9498-ff3c-48e7-aab5-6e94b2e41ccb][emacs-stuff-gtd]] - [[id:034abe27-ca14-4dc0-9a3f-b8d0e1f26342][Emacs Org Roam]]
- [[id:966175d4-3b58-4abc-9b41-08cbf328dd87][emacs-stuff-keybindings]] - [[id:091e9bbc-0c9f-43da-81f9-464882c2a15b][ESP Applications]]
- [[id:2ab0fa3f-8ac6-4af2-8cd4-1dd490fb19c3][emacs-stuff-magit]] - [[id:a6c345df-8db9-4538-b87e-0e72e2414905][ESP Deployment Pipeline — Index]]
- [[id:7d2e867e-f091-4362-a583-453f732207fe][emacs-stuff-org-publish]] - [[id:d66e946f-6785-4e8e-ba00-bb25a52237d1][ESP — AzDO Pipeline]]
- [[id:034abe27-ca14-4dc0-9a3f-b8d0e1f26342][emacs-stuff-org-roam]] - [[id:46add22d-e562-4e3a-a301-d4aea2552952][ESP — Database & Dacpac]]
- [[id:cd3cd02f-c9b3-4455-8ce5-b2a5aa458fed][ESP — Deployment Stages]]
- [[id:2c950d25-6f86-4f83-a7b4-69e2ca2f7023][ESP — Glossary]]
- [[id:53d803aa-7e6f-44ed-8d99-a243a5ed5aab][ESP — Known Issues & Risks]]
- [[id:82c3d447-d6d3-498e-9f66-aee60c752462][ESP — Open Questions & TBC Items]]
- [[id:bf63b6c5-f32f-462e-82ad-8d4a15f7ba48][ESP — PowerShell Script Architecture]]
- [[id:9bf19a8b-5581-4be8-9892-913c51df0128][ESP — The Manifest]]
- [[id:abe43fdc-e90d-4c2c-9320-cc7929f0c99a][ESS]]
- [[id:c3b075bc-44c9-43eb-9c44-a58cb532fc35][Every Senior Engineer I Respect Has Read These Books (Have You?)]]
* F * F
- [[id:7d199fbe-b0e7-48fd-b8a1-793044dbea01][fyp]] - [[id:79ba54e3-d300-4352-a7e6-3e7ec342cca3][Finances]]
- [[id:7d199fbe-b0e7-48fd-b8a1-793044dbea01][FYP (Final Year Project - 2024-2025)]]
- [[id:26b2ed9a-cb81-4c43-bc63-6b3c8ffa3bf1][fyp-report-planning]] - [[id:26b2ed9a-cb81-4c43-bc63-6b3c8ffa3bf1][fyp-report-planning]]
* G * G
@@ -70,20 +120,23 @@ This file is auto-generated. Do not edit manually.
- [[id:086ca3ca-39ec-4d37-b56d-b6d9f51e6873][how-to-solve-leetcode]] - [[id:086ca3ca-39ec-4d37-b56d-b6d9f51e6873][how-to-solve-leetcode]]
* I * I
- [[id:9f220a90-635a-4744-9664-be89d8b2a64b][I Thought I Knew System Design Until I Met a Google L7 Interviewer]]
- [[id:9d5aae0f-4ae1-49a5-a047-9099baad0a06][i3-wm]] - [[id:9d5aae0f-4ae1-49a5-a047-9099baad0a06][i3-wm]]
- [[id:3d3c56dc-0327-4e18-a90a-1bc105496243][Ibarat]]
- [[id:fc07cbca-cf1a-4698-912b-de74001f0b5c][Ikigai Book Notes]]
- [[id:DE792A73-FD00-4048-82D8-AB6E84E869F2][Index]] - [[id:DE792A73-FD00-4048-82D8-AB6E84E869F2][Index]]
- [[id:c69e4c4d-2fb4-4cf1-a835-a235cf6db8e9][ise]] - [[id:c69e4c4d-2fb4-4cf1-a835-a235cf6db8e9][ISE]]
- [[id:06b2a012-4e8a-4a8a-9494-de7ed9fbe1d3][ise_week_1]] - [[id:06b2a012-4e8a-4a8a-9494-de7ed9fbe1d3][ISE Week 1]]
- [[id:f308642d-fcf3-410b-b154-d60582e112a2][ise_week_2]] - [[id:f308642d-fcf3-410b-b154-d60582e112a2][ISE Week 2]]
- [[id:1d0fa257-579f-49f3-b8fd-a3b68ddccf10][ise_week_3]] - [[id:1d0fa257-579f-49f3-b8fd-a3b68ddccf10][ISE Week 3]]
- [[id:ebf874d9-0554-47f0-be8b-5c9a948738bf][ise_week_4]] - [[id:ebf874d9-0554-47f0-be8b-5c9a948738bf][ISE Week 4]]
- [[id:0e70c535-b145-42d9-a9ed-fe48cddbb1a5][ise_week_5]] - [[id:0e70c535-b145-42d9-a9ed-fe48cddbb1a5][ISE Week 5]]
- [[id:9ad3f3f1-55f7-4114-bc8c-17250b6dd25d][ise_week_7]] - [[id:9ad3f3f1-55f7-4114-bc8c-17250b6dd25d][ise_week_7]]
* J * J
- [[id:ae343652-96fe-4341-8a36-ec3a1abd0dc6][Java MOC]]
- [[id:7b8de14c-a73e-4c92-a403-a9a1c419c0b3][java-junit-testing]] - [[id:7b8de14c-a73e-4c92-a403-a9a1c419c0b3][java-junit-testing]]
- [[id:5cfd7f6f-f5ac-4f18-90f9-be9a31dd238e][java-portswrigger-test]] - [[id:5cfd7f6f-f5ac-4f18-90f9-be9a31dd238e][java-portswrigger-test]]
- [[id:ae343652-96fe-4341-8a36-ec3a1abd0dc6][java_moc]]
- [[id:f9897f8e-2b63-4ad2-a55f-3787c4ac235f][job_application_cover_letters]] - [[id:f9897f8e-2b63-4ad2-a55f-3787c4ac235f][job_application_cover_letters]]
* K * K
@@ -99,65 +152,84 @@ This file is auto-generated. Do not edit manually.
* M * M
- [[id:bcd41e87-120c-455c-8898-996ddaa41f75][maven-pom-file]] - [[id:bcd41e87-120c-455c-8898-996ddaa41f75][maven-pom-file]]
- [[id:fbf6843c-85cc-43ba-b86c-c227a2b47b31][Memorisation Plan]]
- [[id:ABF4A0BE-0309-48A6-92ED-76031B3D2F86][Microlise MOC]] - [[id:ABF4A0BE-0309-48A6-92ED-76031B3D2F86][Microlise MOC]]
- [[id:f877240e-c2c8-4087-84e5-4b1ca3fcd4ed][microlise-assessment]] - [[id:f877240e-c2c8-4087-84e5-4b1ca3fcd4ed][microlise-assessment]]
- [[id:08415f5c-986e-45a6-8ea1-f3bedcc996f0][Misc MOC]] - [[id:08415f5c-986e-45a6-8ea1-f3bedcc996f0][Misc MOC]]
- [[id:fdb8fa52-0c9d-4332-9f32-53bc6fee24b9][MVP and MVT]]
* N * N
- [[id:0880f089-a5ad-49cd-8ce3-f020a5941313][Networking MOC]] - [[id:0880f089-a5ad-49cd-8ce3-f020a5941313][Networking MOC]]
- [[id:a087da71-bcfb-4ddf-9565-b82113d5d27f][neuroplasticity]] - [[id:a087da71-bcfb-4ddf-9565-b82113d5d27f][neuroplasticity]]
- [[id:56f39be4-1108-4020-be5a-1f3a0fbf96fa][nextcloud]] - [[id:56f39be4-1108-4020-be5a-1f3a0fbf96fa][Nextcloud]]
- [[id:565eaccd-8cf6-4dbb-bc66-a4b37367ce6b][Non-Technical MOC]] - [[id:565eaccd-8cf6-4dbb-bc66-a4b37367ce6b][Non-Technical MOC]]
* O * O
- [[id:a9829b5d-690d-4a21-ba94-ac8beac4d439][Old NGINX Config]]
- [[id:2c2d8df4-ad36-40ab-9f30-8a047b372956][old_nextcloud_server_code]] - [[id:2c2d8df4-ad36-40ab-9f30-8a047b372956][old_nextcloud_server_code]]
- [[id:a9829b5d-690d-4a21-ba94-ac8beac4d439][old_nginx_code]]
* P * P
- [[id:5f8f7d8a-5dfc-49a4-a7a6-33373a1d7c8d][Personal Operating System]] - [[id:5f8f7d8a-5dfc-49a4-a7a6-33373a1d7c8d][Personal Operating System]]
- [[id:939e301b-6463-46a8-b57e-0af606e7e7ef][Postgres]] - [[id:939e301b-6463-46a8-b57e-0af606e7e7ef][Postgres]]
- [[id:360df04d-ea24-4f04-b8e1-3595f34aac4d][Powershell MOC]]
- [[id:2BFB84B2-2129-4AE3-8E69-290CA5BF9747][pre_work_prep_microlise]] - [[id:2BFB84B2-2129-4AE3-8E69-290CA5BF9747][pre_work_prep_microlise]]
- [[id:d63abaad-15e8-45d8-aafb-c634164ec0c0][Programming Projects]] - [[id:d63abaad-15e8-45d8-aafb-c634164ec0c0][Programming Projects]]
- [[id:45eefd5b-a3d8-4b83-84ea-5a6984025755][Proverbs]]
- [[id:125c81dc-c14f-4b4d-93c6-0a2b157735ac][python-dictionary]] - [[id:125c81dc-c14f-4b4d-93c6-0a2b157735ac][python-dictionary]]
- [[id:9d534e89-7f0b-494c-bff6-7b3be05b85d1][python-lambda]] - [[id:9d534e89-7f0b-494c-bff6-7b3be05b85d1][python-lambda]]
- [[id:3a41407c-661e-416a-80d2-4c7a137d153a][python-set]] - [[id:3a41407c-661e-416a-80d2-4c7a137d153a][python-set]]
- [[id:3bbc6099-0187-4bf2-9282-97e5fa443f72][python-sorted-function]] - [[id:3bbc6099-0187-4bf2-9282-97e5fa443f72][python-sorted-function]]
* R * R
- [[id:EA93341B-20C0-48A2-BD88-F24ED3C540DA][recipes-done]] - [[id:b31d6c3f-9bc3-4006-aaaf-d56168249e3a][Recipes Cookbook]]
- [[id:F7D68FF4-CAD0-4791-BAE4-AC20B84A8785][recipes-ideas]] - [[id:EA93341B-20C0-48A2-BD88-F24ED3C540DA][Recipes Done]]
- [[id:65F747B1-3CB2-429A-9E26-ED8BC169E689][recipes-moc]] - [[id:F7D68FF4-CAD0-4791-BAE4-AC20B84A8785][Recipes Ideas]]
- [[id:65F747B1-3CB2-429A-9E26-ED8BC169E689][Recipes MOC]]
- [[id:023285a5-af32-4143-91e7-e0942a2635ad][Resources]]
- [[id:6a5bf6dd-d0ec-43e4-8e07-9956f4715f10][RESTful APIs]]
- [[id:3a8274ef-f2fe-486d-9caf-0c56982b9917][RSS Articles]] - [[id:3a8274ef-f2fe-486d-9caf-0c56982b9917][RSS Articles]]
* S * S
- [[id:0b6e7dc0-1171-4dc4-982e-a5d95765e09c][SEB Search Improvement — Couchbase Caching]]
- [[id:99533f2d-a4e8-41d0-a605-c7d4cef6f995][self_hosting]] - [[id:99533f2d-a4e8-41d0-a605-c7d4cef6f995][self_hosting]]
- [[id:9a71daa4-d9d4-4706-98f1-72e3d4eda9bc][Server Backend]] - [[id:9a71daa4-d9d4-4706-98f1-72e3d4eda9bc][Server Backend]]
- [[id:f09cb4ed-1407-4187-9002-de2c5db13a8f][Server MOC]] - [[id:f09cb4ed-1407-4187-9002-de2c5db13a8f][Server MOC]]
- [[id:2d7f1ccc-99d7-4c45-8fe7-4b87080edb01][so_good_they_cant_ignore_you]] - [[id:2d7f1ccc-99d7-4c45-8fe7-4b87080edb01][so_good_they_cant_ignore_you]]
- [[id:efe0360d-8d81-4372-833d-ad58e67d17c6][socket_programming_in_c]] - [[id:efe0360d-8d81-4372-833d-ad58e67d17c6][socket_programming_in_c]]
- [[id:6820973F-613E-441A-BC1D-8FE5CD9BD6F7][solid_principles]] - [[id:67ad330b-cc11-4e8e-b054-12b9da45ea60][Software Development Methodologies]]
- [[id:F3875F0F-5C9E-4BB1-A79C-6000B9558115][solid_principles_examples]] - [[id:453e252a-34f4-4d84-adab-35fe69ceed55][Software Quality Article]]
- [[id:6820973F-613E-441A-BC1D-8FE5CD9BD6F7][Solid Principles]]
- [[id:F3875F0F-5C9E-4BB1-A79C-6000B9558115][Solid Principles Examples]]
- [[id:acba0d25-08db-4784-8cc2-fe5c437ba723][stanford_marshmallow_experiment]] - [[id:acba0d25-08db-4784-8cc2-fe5c437ba723][stanford_marshmallow_experiment]]
- [[id:e7f3b897-72ca-45f1-8084-decf1b25c3d4][Substack Articles]]
- [[id:bf277242-4f09-46a2-aa6b-1d75ce0025ac][systemd_services]] - [[id:bf277242-4f09-46a2-aa6b-1d75ce0025ac][systemd_services]]
* T * T
- [[id:37495d5f-2a77-40bc-b45c-8163189bbe6b][Technical Commonplace]] - [[id:37495d5f-2a77-40bc-b45c-8163189bbe6b][Technical Commonplace]]
- [[id:2f285f04-fcf4-4ade-a1ac-2c50b43d529a][Technical MOC]] - [[id:2f285f04-fcf4-4ade-a1ac-2c50b43d529a][Technical MOC]]
- [[id:2729599d-ae2b-4f22-b73d-bf22d81e0767][Test Driven Development]] - [[id:2729599d-ae2b-4f22-b73d-bf22d81e0767][Test Driven Development]]
- [[id:973f2e9c-f161-45ad-8f19-2e4d563f56ac][The 20 Software Engineering Laws]]
- [[id:50dd4105-506e-424a-9cc2-4fd494dc4284][The Book of Ichigo Ichie Notes]]
- [[id:2c1d3647-a3be-4a4f-94c2-100f02de1f56][The Dose Effect Book Notes]]
- [[id:EC9D851F-3A2E-4F32-A584-76F6F7A08E30][the_clean_coder]] - [[id:EC9D851F-3A2E-4F32-A584-76F6F7A08E30][the_clean_coder]]
- [[id:455ef38f-9a5f-4f62-afe9-25e2261e1282][the_science_of_self_discipline]] - [[id:455ef38f-9a5f-4f62-afe9-25e2261e1282][the_science_of_self_discipline]]
- [[id:fc92a943-61ac-462a-b6e5-8be46069f2ca][Timetable]] - [[id:fc92a943-61ac-462a-b6e5-8be46069f2ca][Timetable]]
- [[id:5443ed1c-bb7f-4eb4-9c96-d12648dd2291][tpis]] - [[id:5443ed1c-bb7f-4eb4-9c96-d12648dd2291][TPIS]]
* U * U
- [[id:4a8edaed-9ebd-402b-9c5f-7a0cb4399102][uml_fyp]] - [[id:4a8edaed-9ebd-402b-9c5f-7a0cb4399102][uml_fyp]]
- [[id:797d6e3e-98eb-4bc7-88b6-e096ef7306ad][uni_moc]] - [[id:797d6e3e-98eb-4bc7-88b6-e096ef7306ad][Uni MOC]]
- [[id:d939e477-d1e9-43ea-960e-8727246d12a3][useful-c-imports]] - [[id:d939e477-d1e9-43ea-960e-8727246d12a3][useful-c-imports]]
* V
- [[id:e12ef44d-69a4-45c8-a823-c810d2c3857c][Vaultwarden]]
* W * W
- [[id:7612a9a6-ae70-4525-93a0-81bac857df39][wacom-notes]] - [[id:7612a9a6-ae70-4525-93a0-81bac857df39][wacom-notes]]
- [[id:348df473-6443-4f4a-b366-95397b574989][web-port-notes]] - [[id:348df473-6443-4f4a-b366-95397b574989][web-port-notes]]
- [[id:84c371ea-6789-450e-978c-f1d77e725f4b][Website Stuff]]
- [[id:c1de3972-e932-48fd-8065-3d89dad58007][wedding_moc]] - [[id:c1de3972-e932-48fd-8065-3d89dad58007][wedding_moc]]
- [[id:faa7f193-5af6-4a2f-a73e-540f833a7fd0][Windows Services]]
- [[id:8CE93986-280B-45BD-9DF2-5D06586DDDE7][workflow-moc]] - [[id:8CE93986-280B-45BD-9DF2-5D06586DDDE7][workflow-moc]]
- [[id:b2db0b0b-c179-43ab-9e2b-22bbaac69bcb][wp-emacs-config-blorg]] - [[id:b2db0b0b-c179-43ab-9e2b-22bbaac69bcb][wp-emacs-config-blorg]]
- [[id:D02B89DC-84D0-4211-A902-B9399F4179CA][wp-emotional-intelligence]] - [[id:D02B89DC-84D0-4211-A902-B9399F4179CA][wp-emotional-intelligence]]
@@ -169,5 +241,6 @@ This file is auto-generated. Do not edit manually.
- [[id:8CD2F4C4-22C2-4ECC-8F5F-C4779F8AC0F1][wp-week-12-reflection]] - [[id:8CD2F4C4-22C2-4ECC-8F5F-C4779F8AC0F1][wp-week-12-reflection]]
* X * X
- [[id:F32F8F09-3DEC-4FD1-8CFA-401A316E906B][xor]] - [[id:F32F8F09-3DEC-4FD1-8CFA-401A316E906B][XOR]]
- [[id:b2ac09aa-e888-48d3-8357-2292f9b2526c][XSS Pentesting Report Fix]]

Binary file not shown.

After

Width:  |  Height:  |  Size: 860 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 KiB

View File

@@ -193,7 +193,7 @@ async function buildFileTree(container) {
let treeData = null; let treeData = null;
try { try {
const res = await fetch('/assets/sidebar-tree.json'); const res = await fetch(`/assets/sidebar-tree.json?v=${Date.now()}`, { cache: 'no-store' });
if (res.ok) { if (res.ok) {
const json = await res.json(); const json = await res.json();
if (Array.isArray(json.tree)) treeData = json.tree; if (Array.isArray(json.tree)) treeData = json.tree;

5
daily/2026-05-20.org Executable file
View File

@@ -0,0 +1,5 @@
:PROPERTIES:
:ID: 6c5ae105-a9b0-4392-bf0f-d8e261056fad
:END:
#+title: 2026-05-20
* FEELING SICK

9
daily/2026-05-21.org Executable file
View File

@@ -0,0 +1,9 @@
:PROPERTIES:
:ID: ae849916-31ab-4829-b81c-36735402eb4a
:END:
#+title: 2026-05-21
* <2026-05-21 Thu> TODO:
** Complete the PR comments (Copy-DirectoryContent)
** Stop-WindowsService task
** [No refinement]
** See if there are any more manual prompt tasks that need picking up

7
daily/2026-05-22.org Executable file
View File

@@ -0,0 +1,7 @@
:PROPERTIES:
:ID: 5c89425f-2483-456f-8925-5a558d6a0868
:END:
#+title: 2026-05-22
* https://en.wikipedia.org/wiki/2024_CrowdStrike-related_IT_outages
* https://fortune.com/2025/07/23/ai-coding-tool-replit-wiped-database-called-it-a-catastrophic-failure/
* https://www.noahzender.com/ideas#all-ideas

15
daily/2026-05-28.org Executable file
View File

@@ -0,0 +1,15 @@
:PROPERTIES:
:ID: 99abd6e2-d9fc-423b-8930-c843f368557f
:END:
#+title: 2026-05-28
* <2026-05-28 Thu> TODO:
** DONE Memorise the names
** DONE Continue working on XSS issue, replicating first
** DONE If unblocked on PDEF, spend some time on this
** DONE 20 pages of current book
** DONE Class
* https://medium.com/data-science-collective/microsoft-banned-ai-because-it-cost-too-much-135bcbf15a18
* https://shvetsm.github.io/posts/the-best-engineers-write-less-code/
* https://css-tricks.com/technical-writing-in-the-ai-age/
* https://www.elenaverna.com/p/youll-lose-your-job-in-2027
* https://search.brave.com/search?q=docmost

11
daily/2026-05-29.org Executable file
View File

@@ -0,0 +1,11 @@
:PROPERTIES:
:ID: 648c487d-d218-404a-b427-d186dc4c265d
:END:
#+title: 2026-05-29
* <2026-05-29 Fri> TODO
** TODO [#A] Replicate the PDEF and document it
** TODO [#B] Investigate the fix for the PDEF
** TODO [#C] A few more test cases for the XSS report
** TODO [#A] Training
** TODO Read 20 pages
** TODO Class

12
orgroam-build.log Executable file → Normal file
View File

@@ -3,8 +3,8 @@ rm -rf output/
Generating the JSON output... Generating the JSON output...
/usr/bin/python3 search-index.py /usr/bin/python3 search-index.py
Generating search-index.json with links... Generating search-index.json with links...
search-index.json generated (177 entries). search-index.json generated (191 entries).
Loaded 177 entries from /home/zaine/master-folder/org_files/org_roam/output/search-index.json Loaded 191 entries from /home/zaine/master-folder/org_files/org_roam/output/search-index.json
all-files.json generated → /home/zaine/master-folder/org_files/org_roam/all-files.json all-files.json generated → /home/zaine/master-folder/org_files/org_roam/all-files.json
Building project (full rebuild with search index)... Building project (full rebuild with search index)...
emacs -Q --script lisp/build.el emacs -Q --script lisp/build.el
@@ -37,12 +37,14 @@ If you dont use the package package manager but still get
this warning, then your chosen package manager likely has a this warning, then your chosen package manager likely has a
similar defect. similar defect.
Loading /home/zaine/master-folder/org_files/org_roam/lisp/macros.el (source)... Loading /home/zaine/master-folder/org_files/org_roam/lisp/macros.el (source)...
Starting full rebuild at 2026-05-09 01:24:23 Starting full rebuild at 2026-05-29 08:34:51
🎬 Scanning /home/zaine/master-folder/org_files/org_roam/assets/ for .mov files… 🎬 Scanning /home/zaine/master-folder/org_files/org_roam/assets/ for .mov files…
(no .mov files found) (no .mov files found)
✅ Full rebuild complete in 9.68 seconds 🧩 Generating all-files.org from JSON…
✅ all-files.org generated
✅ Full rebuild complete in 16.29 seconds
Generating the JSON output 2... Generating the JSON output 2...
/usr/bin/python3 generate_sidebar_tree.py /usr/bin/python3 generate_sidebar_tree.py
Generating sidebar-tree.json... Generating sidebar-tree.json...
sidebar-tree.json generated (11 folders, 177 files) sidebar-tree.json generated (11 folders, 190 files)
→ /home/zaine/master-folder/org_files/org_roam/output/assets/sidebar-tree.json → /home/zaine/master-folder/org_files/org_roam/output/assets/sidebar-tree.json