Skip to content

Commit d94c146

Browse files
committed
docs(style): improve readability by replacing em dashes and semicolons ✏️
- Replace em dashes (—) with commas in README and architecture docs - Replace semicolons with commas in prose across DEEP-NOTES files - Update style guide in STRUCTURE.md to reflect new punctuation rules - Fix punctuation in Time-Complexity series for consistent readability - Update PERSONAL/6D-1M.md framework examples with clearer punctuation
1 parent c00c457 commit d94c146

File tree

14 files changed

+82
-82
lines changed

14 files changed

+82
-82
lines changed

ARCHITECTURE/CODE-ORGANIZATION.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,4 +315,4 @@ Code organization depends on each developer's style, team preferences, and proje
315315
- Choose an approach that works for **your team**
316316
- Refactor when it stops serving you
317317

318-
**Remember:** The best organization is one that your team can understand and maintain. There's no "one size fits all" solutionjust principles and patterns you adapt to your situation.
318+
**Remember:** The best organization is one that your team can understand and maintain. There's no "one size fits all" solution, just principles and patterns you adapt to your situation.

ARCHITECTURE/DECISION-TREE.md

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -26,26 +26,26 @@ This isn't about decision trees in machine learning. It's about mapping technica
2626

2727
### Quick Takeaways
2828

29-
1. **One root question first** — Then branch from there
30-
2. **Written criteria** — So branches stay consistent, not just feeling-based
31-
3. **Leaf = action or decision** — Not "maybe" or "we'll see"
32-
4. **Depth of 3–4 levels** — Deeper is hard to maintain
33-
5. **Write the "why"** — One sentence per branch so context doesn't get lost
34-
6. **Trees go stale** — Requirements change; treat them as living docs
35-
7. **Check what already exists** ADR or existing tree before creating a new one
36-
8. **Simple > complete** — Something that gets used beats something perfect that nobody opens
29+
1. **One root question first**, then branch from there
30+
2. **Written criteria**, so branches stay consistent, not just feeling-based
31+
3. **Leaf = action or decision**, not "maybe" or "we'll see"
32+
4. **Depth of 3–4 levels**, deeper is hard to maintain
33+
5. **Write the "why"**, one sentence per branch so context doesn't get lost
34+
6. **Trees go stale**, requirements change, treat them as living docs
35+
7. **Check what already exists**, ADR or existing tree before creating a new one
36+
8. **Simple > complete**, something that gets used beats something perfect that nobody opens
3737

3838
---
3939

4040
## What Is a Decision Tree in Design?
4141

4242
Here, a decision tree is a branching decision structure. One question or condition at the top, its answers lead to the next branches, until you reach a single concrete decision or action.
4343

44-
- **Root** — The top-level question or condition (level 0)
45-
- **Branch** — Each answer or criterion forms a branch
46-
- **Leaf** — End of a branch: a decision or action you can actually take
44+
- **Root**, the top-level question or condition (level 0)
45+
- **Branch**, each answer or criterion forms a branch
46+
- **Leaf**, end of a branch: a decision or action you can actually take
4747

48-
Short example: "Need per-service scale within 12 months?" → Yes → consider microservices / modular monolith; No → start with a simple monolith. It doesn't have to be formal; what matters is that the flow is readable and reusable.
48+
Short example: "Need per-service scale within 12 months?" → Yes → consider microservices / modular monolith. No → start with a simple monolith. It doesn't have to be formal, what matters is that the flow is readable and reusable.
4949

5050
---
5151

@@ -61,7 +61,7 @@ Less fit when:
6161

6262
- Criteria are still vague or change a lot
6363
- The decision heavily depends on context you can't spell out
64-
- One or two questions are enough; no need to map a full tree
64+
- One or two questions are enough, no need to map a full tree
6565

6666
---
6767

@@ -71,7 +71,7 @@ Start with **one root question** whose answers drive all branches below. Don't s
7171

7272
**❌ No clear root:**
7373

74-
Jump straight to: "REST or GraphQL? SQL or NoSQL? Monolith or microservices?" everything floats, no logical order.
74+
Jump straight to: "REST or GraphQL? SQL or NoSQL? Monolith or microservices?" - everything floats, no logical order.
7575

7676
**✅ Root question first:**
7777

@@ -90,7 +90,7 @@ Write down criteria (and weights if needed) so branches don't rely on feeling al
9090

9191
**❌ Gut feel only:**
9292

93-
"Let's just use X." Six months later nobody remembers why.
93+
"Let's just use X." - Six months later nobody remembers why.
9494

9595
**✅ Written criteria:**
9696

@@ -113,8 +113,8 @@ Every leaf (end of a branch) should be **one clear decision or action**, not "ma
113113

114114
**✅ Clear leaves:**
115115

116-
- "Use modular monolith; separate domains by folder, deploy as one unit"
117-
- "Use GraphQL for public API; REST for internal"
116+
- "Use modular monolith, separate domains by folder, deploy as one unit"
117+
- "Use GraphQL for public API, REST for internal"
118118

119119
If the end is still "it depends," add one more level: write the question or criterion that splits that "depends" until you get a decision you can act on.
120120

@@ -138,8 +138,8 @@ On each branch (or at least at each leaf), write **one sentence for "why"**: why
138138

139139
Examples:
140140

141-
- "Choose monolith because team is small and MVP in 3 months; refactor to microservices only if we see real bottleneck evidence."
142-
- "GraphQL for public because mobile clients need query flexibility; REST for internal because it's simpler and tooling already exists."
141+
- "Choose monolith because team is small and MVP in 3 months, refactor to microservices only if we see real bottleneck evidence."
142+
- "GraphQL for public because mobile clients need query flexibility, REST for internal because it's simpler and tooling already exists."
143143

144144
This helps when context changes: you can reassess whether that "why" still holds or the tree needs an update.
145145

DEEP-NOTES/Job-Management/infinite-loop.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ This note covers **infinite loops**: processes that run continuously, typically
1919

2020
**Infinite Loop**: A process that runs continuously without termination, using `while (true)` or similar constructs, often with periodic sleep or wait conditions.
2121

22-
- The process never exits naturally; it must be killed externally.
22+
- The process never exits naturally, it must be killed externally.
2323
- Resource consumption is continuous (CPU, memory, connections).
2424
- Response time is immediate when work arrives.
2525

@@ -84,11 +84,11 @@ while (true) {
8484

8585
## Important Points
8686

87-
- **Resource efficiency**: Poor for non-real-time workloads; consumes resources 24/7.
87+
- **Resource efficiency**: Poor for non-real-time workloads, consumes resources 24/7.
8888
- **Monitoring**: Harder to distinguish between idle and active states.
8989
- **Scalability**: Multiple instances need coordination to avoid duplicate work.
90-
- **Error handling**: Unhandled exceptions can crash the entire process; need robust recovery.
91-
- **Memory leaks**: Dangerous in long-running processes; accumulate over time.
90+
- **Error handling**: Unhandled exceptions can crash the entire process, need robust recovery.
91+
- **Memory leaks**: Dangerous in long-running processes, accumulate over time.
9292
- **Deployment**: Requires process managers (systemd, PM2) for restart capability.
9393

9494
## Summary

DEEP-NOTES/Job-Management/scheduled-jobs.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ const messageProcessing = new CronJob('* * * * *', processMessages)
9090
## Important Points
9191

9292
- **Resource efficiency**: Excellent - resources used only during execution.
93-
- **Monitoring**: Clear success/failure metrics per execution; easy to track.
94-
- **Scalability**: Multiple instances can run safely; scheduler handles coordination.
93+
- **Monitoring**: Clear success/failure metrics per execution, easy to track.
94+
- **Scalability**: Multiple instances can run safely, scheduler handles coordination.
9595
- **Error isolation**: Failed execution doesn't affect next scheduled run.
9696
- **Testing**: Can be triggered manually for testing and debugging.
9797
- **Reliability**: Built-in retry mechanisms and failure notifications.

DEEP-NOTES/Rest-API/uri-design.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ POST /v1/getUserSessionListById
7575

7676
- Prefer plural nouns for collections (`/users`, `/prompts`)
7777
- Use path params for identity, query params for filtering
78-
- Keep depth reasonable; avoid path chains longer than needed
78+
- Keep depth reasonable, avoid path chains longer than needed
7979
- Use lowercase kebab-case when possible for readability
8080

8181
## Query Parameter Rules

DEEP-NOTES/STRUCTURE.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
> Reference: [kyong0612 learning-notes](https://github.com/kyong0612/learning-notes/tree/main/articles) (example: [Claude Code CLAUDE.md](https://github.com/kyong0612/learning-notes/blob/main/articles/Claude%20Code%20%E3%81%AE%20CLAUDE.md%E3%81%AF%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%9F%E6%96%B9%E3%81%8C%E3%81%84%E3%81%84/note.md))
44
55
- One file = one topic or one source
6-
- Frontmatter + structured body; body starts with H1 = note title
6+
- Frontmatter + structured body, body starts with H1 = note title
77

88
---
99

@@ -27,7 +27,7 @@ tags: ['tag1', 'tag2']
2727

2828
## 2. Body Structure
2929

30-
**First line of body:** `# Note Title` (H1, same or close to `title` in frontmatter). Kyong always uses this; we follow.
30+
**First line of body:** `# Note Title` (H1, same or close to `title` in frontmatter). Kyong always uses this, we follow.
3131

3232
Two patterns:
3333

@@ -38,32 +38,32 @@ Follow the source flow. Not rigid Definition/Analogy/Examples.
3838
- **## はじめに** (or **## Overview** / intro): context, why this topic, what changed for the author.
3939
- **## [Topic 1]**, **## [Topic 2]**, …: sections follow the article/talk structure. Use **###** for subsections.
4040
- Lists, code blocks (```), **bold** for important terms.
41-
- **## まとめ** (or **## Summary**): summary; end with **結論:** or one takeaway sentence (italic allowed).
41+
- **## まとめ** (or **## Summary**): summary, end with **結論:** or one takeaway sentence (italic allowed).
4242

43-
Real flow example: [note Claude Code CLAUDE.md](https://github.com/kyong0612/learning-notes/blob/main/articles/Claude%20Code%20%E3%81%AE%20CLAUDE.md%E3%81%AF%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%9F%E6%96%B9%E3%81%8C%E3%81%84%E3%81%84/note.md) はじめに → CLAUDE.mdとは → ワークフロー → TDD → ツール → … → まとめ + 結論.
43+
Real flow example: [note Claude Code CLAUDE.md](https://github.com/kyong0612/learning-notes/blob/main/articles/Claude%20Code%20%E3%81%AE%20CLAUDE.md%E3%81%AF%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%9F%E6%96%B9%E3%81%8C%E3%81%84%E3%81%84/note.md) - はじめに → CLAUDE.mdとは → ワークフロー → TDD → ツール → … → まとめ + 結論.
4444

4545
### Pattern B: Concept Note
4646

47-
One concept per file; fixed sections. Optional extra sections (e.g. a deeper dive) are allowed.
47+
One concept per file, fixed sections. Optional extra sections (for example a deeper dive) are allowed.
4848

4949
- **## Overview**: one or two paragraphs, what this note is about and the main point.
5050
- **## Definition** (if needed): formal definition or term boundaries.
5151
- **## The Analogy**: real-world analogy.
5252
- **## When You See It**: when this pattern appears (code, algorithm, context).
53-
- **## Examples**: concrete examples; label **Good:** / **Bad:** (or **Better:** / **Good to know:** as needed).
53+
- **## Examples**: concrete examples, label **Good:** / **Bad:** (or **Better:** / **Good to know:** as needed).
5454
- **## Important Points**: key points (bullets).
5555
- **## Summary**: summary (bullets) + one closing italic sentence (NeaByte style).
5656

5757
---
5858

5959
## 3. Writing Style
6060

61-
| Aspect | Rule |
62-
| --------------- | --------------------------------------------------------- |
63-
| **Density** | Short sentences, one idea per sentence. Avoid filler. |
64-
| **Punctuation** | Use periods, commas, colons. Avoid excessive em dash (—). |
65-
| **Examples** | **Good:** / **Bad:** (text only, no emoji). |
66-
| **Closing** | One italic sentence; direct and humble. |
61+
| Aspect | Rule |
62+
| --------------- | ------------------------------------------------------------------------- |
63+
| **Density** | Short sentences, one idea per sentence. Avoid filler. |
64+
| **Punctuation** | Use periods, commas, colons. Avoid excessive em dash, use commas instead. |
65+
| **Examples** | **Good:** / **Bad:** (text only, no emoji). |
66+
| **Closing** | One italic sentence, direct and humble. |
6767

6868
---
6969

DEEP-NOTES/Time-Complexity/o-1-constant.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ Not O(1): scanning the whole array to find something (that's at least O(n)), or
4242
**Good: constant-time access by index**
4343

4444
```typescript
45-
// NOTE: Single array index access same cost whether arr has 10 or 10M elements.
45+
// NOTE: Single array index access - same cost whether arr has 10 or 10M elements.
4646
// O(1).
4747
function getFirst<T>(arr: T[]): T | undefined {
4848
return arr[0] // one access, regardless of arr.length
@@ -72,13 +72,13 @@ function getFirstByScan<T>(arr: T[], predicate: (x: T) => boolean): T | undefine
7272

7373
- **O(1) = no growth with _n_.** Same cost for 10 or 10,000,000 elements (within the constant).
7474
- Prefer O(1) for operations on the critical path: lookups, peeking at a known position, updating a single record by key.
75-
- Hash tables and arrays (by index) are your main tools for O(1) access; use them when the problem allows.
75+
- Hash tables and arrays (by index) are your main tools for O(1) access, use them when the problem allows.
7676
- "Constant" doesn't mean "instant." It means the cost doesn't scale with input size.
7777

7878
## Summary
7979

80-
- **O(1)**: runtime bounded by a constant; independent of input size.
80+
- **O(1)**: runtime bounded by a constant, independent of input size.
8181
- **Analogy**: checking a wall clock. One look, same effort any time.
82-
- **Use it for**: index access, hash lookups, reading a fixed field; aim for it on hot paths when possible.
82+
- **Use it for**: index access, hash lookups, reading a fixed field, aim for it on hot paths when possible.
8383

8484
_Constant time doesn't mean fast in absolute terms. It means your cost doesn't grow when the data does._

DEEP-NOTES/Time-Complexity/o-2-n-exponential.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,29 +13,29 @@ tags:
1313

1414
## Overview
1515

16-
This note covers **O(2ⁿ) exponential time**: the complexity class where the number of operations grows exponentially with _n_, e.g. doubling each time _n_ increases by 1. Typical pattern: exploring **all subsets** of _n_ elements (each item: in or out → 2ⁿ outcomes). Unlike O(n!): 2ⁿ = all subsets; n! = all orderings. Exponential algorithms become impractical very quickly; even for moderate _n_ (e.g. 30–50), 2ⁿ is huge. **Goal:** avoid enumerating all subsets or binary combinations unless _n_ is very small; recognize the "two choices per step, n steps" pattern and consider pruning, memoization, or DP.
16+
This note covers **O(2ⁿ) exponential time**: the complexity class where the number of operations grows exponentially with _n_, for example doubling each time _n_ increases by 1. Typical pattern: exploring **all subsets** of _n_ elements (each item: in or out → 2ⁿ outcomes). Unlike O(n!): 2ⁿ = all subsets; n! = all orderings. Exponential algorithms become impractical very quickly; even for moderate _n_ (e.g. 30–50), 2ⁿ is huge. **Goal:** avoid enumerating all subsets or binary combinations unless _n_ is very small; recognize the "two choices per step, n steps" pattern and consider pruning, memoization, or DP.
1717

1818
## Definition
1919

20-
**O(2ⁿ)** means the running time is bounded by a constant times 2ⁿ (or more generally, cⁿ for some constant c > 1). So each time you add one to _n_, the worst-case work multiplies by a fixed factor (e.g. 2).
20+
**O(2ⁿ)** means the running time is bounded by a constant times 2ⁿ (or more generally, cⁿ for some constant c > 1). So each time you add one to _n_, the worst-case work multiplies by a fixed factor (for example 2).
2121

22-
- 2^10 ≈ 1,000; 2^20 ≈ 1 million; 2^30 ≈ 1 billion. So "exponential" is not something you want for large _n_.
23-
- Big O allows any exponential base (2ⁿ, 3ⁿ, etc.); we write 2ⁿ as the standard example for "exponential in n."
22+
- 2^10 ≈ 1,000, 2^20 ≈ 1 million, 2^30 ≈ 1 billion. So "exponential" is not something you want for large _n_.
23+
- Big O allows any exponential base (2ⁿ, 3ⁿ, and so on), we write 2ⁿ as the standard example for "exponential in n."
2424

2525
## The Analogy
2626

27-
**A decision tree that doubles at each step.** At each of _n_ steps you have two choices (e.g. yes/no, include/exclude). So you have 2×2×…×2 = 2ⁿ possible paths. Exploring all of them means 2ⁿ leaves. The tree "fans out" very fast. That's exponential growth. No way to avoid the explosion unless you prune or don't enumerate everything.
27+
**A decision tree that doubles at each step.** At each of _n_ steps you have two choices (for example yes or no, include or exclude). So you have 2×2×…×2 = 2ⁿ possible paths. Exploring all of them means 2ⁿ leaves. The tree "fans out" very fast. That's exponential growth. No way to avoid the explosion unless you prune or don't enumerate everything.
2828

2929
## When You See It
3030

3131
Exponential time typically appears when:
3232

33-
- **Enumerating all subsets**: e.g. "try every subset of items" (2ⁿ subsets). Each element is either in or out, so 2 choices per element, so 2ⁿ.
34-
- **Recursion with two (or more) branches per call**: e.g. Fibonacci done naively (each call branches into two), or recursive backtracking that tries two options at each step without memoization or pruning.
35-
- **Some exact algorithms for NP-hard problems**: e.g. brute-force SAT (try all 2ⁿ truth assignments), or subset-sum by trying all subsets. Often the best _exact_ algorithm we have is exponential; we then rely on heuristics, approximation, or small _n_.
33+
- **Enumerating all subsets**: for example "try every subset of items" (2ⁿ subsets). Each element is either in or out, so 2 choices per element, so 2ⁿ.
34+
- **Recursion with two (or more) branches per call**: for example Fibonacci done naively (each call branches into two), or recursive backtracking that tries two options at each step without memoization or pruning.
35+
- **Some exact algorithms for NP-hard problems**: for example brute-force SAT (try all 2ⁿ truth assignments), or subset-sum by trying all subsets. Often the best _exact_ algorithm we have is exponential, we then rely on heuristics, approximation, or small _n_.
3636
- **Backtracking / exhaustive search**: when the search space is "all combinations of n binary choices."
3737

38-
You do **not** get O(2ⁿ) from a single loop (O(n)) or from nested loops with a fixed depth (e.g. O(n²), O(n³)). The key is "number of steps or choices grows with n, and we're doing work proportional to the number of outcomes."
38+
You do **not** get O(2ⁿ) from a single loop (O(n)) or from nested loops with a fixed depth (for example O(n²), O(n³)). The key is "number of steps or choices grows with n, and we're doing work proportional to the number of outcomes."
3939

4040
## Examples
4141

@@ -96,7 +96,7 @@ function sumArray(arr: number[]): number {
9696

9797
## Summary
9898

99-
- **O(2ⁿ)**: work proportional to 2ⁿ (or cⁿ); typical pattern is exploring all subsets or all n-step binary choices.
99+
- **O(2ⁿ)**: work proportional to 2ⁿ (or cⁿ), typical pattern is exploring all subsets or all n-step binary choices.
100100
- **Analogy:** a decision tree that doubles at each step. That's 2ⁿ leaves.
101101
- **Watch for:** subset enumeration, naive recursion with two branches per level, brute-force exact algorithms. Use only for small n or when no better option exists.
102102

0 commit comments

Comments
 (0)