Skip to content

Technology

Gadgets, tools, and the small obsessions of a life lived through good hardware. Enthusiasm, applied responsibly.

How to Code on iPad

iPad is the best coding computer, which is why I always code on Mac.

Have you ever...

  • Had an idea at 11pm and wished you could just pick up where you left off—without walking to your desk?
  • Wanted to code on the couch without the "I'm opening my laptop to work" signal that kills the vibe?
  • Tried to fit MacBook on an airplane tray table next to your drink?
  • Wished you could code at the park on nothing but cellular and a keyboard?

I have. So I started coding on my iPad; and I'm not going back.

Coding on iPad setup

A Slab of Glass (and a Keyboard)

iPad Pro with Magic Keyboard is the most comfortable computer I've ever used. Not the most powerful, not the most versatile—the most comfortable. It weighs roughly a kilogram, runs silent, lasts all day, and disappears into a backpack without complaint. Every location that used to be "not a computer place" became one.

There's another side to portability: durability. Spill water on MacBook keyboard and you're buying new MacBook. Spill lava on my iPad's Magic Keyboard and I'm buying a new keyboard; an expensive one, sure, but a keyboard nonetheless.

The hardware is perfect for coding; the software is the problem.

Coding ON iPad

iPad Pros ship with the same M-series chips as Macs. The silicon is identical. In theory, this device could run macOS, Xcode, a full terminal, the works. But Apple won't let it. There's no native shell, no package manager, no pip install. Everything is an app, sandboxed and isolated.

I tried. Textastic has syntax highlighting and FTP. Pythonista runs Python directly on the device. These apps are impressive for what they are, but "what they are" is not a development environment.

I wanted to install my Vim configuration: my dotfiles, my plugins, the muscle memory I've spent years building. On Mac, it's a single git clone and a setup script. On iPad, it's an odyssey: file system sandboxing, half my plugins broken, no way to pipe commands together. I just wanted a terminal. A real one.

The editing was fine. Everything around it—file management, version control, builds, testing—felt like surgical precision with oven mitts. Long press to rename. Share sheet to move. Switch apps to run. iPad stopped feeling like a tool and started feeling like a puzzle.

So I gave up programming on iPad, and I started programming via iPad.

Coding VIA iPad

My MacBook already has everything I need: Z-Shell, Vim, tmux, Git, Python, C++ toolchains. All I needed was a way to reach it from my iPad. This problem was solved in 1995 via SSH.

An SSH Client

Blink is my SSH client. It's a native iOS terminal emulator that supports SSH and Mosh, renders fonts well, and integrates with iPad keyboard shortcuts so ⌘+Tab works like Mac. It doesn't try to be an IDE or a file manager. It's a terminal. That's it.

Other options worth considering:

  • Termius cross-platform with SFTP and port forwarding; has a free tier
  • Prompt polished and minimal, from the team behind Nova and Transmit
  • Secure ShellFish SSH client with native Files app integration for iOS and Mac

Reaching Your Mac

On the same network, macOS has SSH built in. Go to System Settings → General → Sharing → Remote Login and toggle it on. Your Mac gets a local hostname, and from Blink:

ssh [email protected]

That's it. You're in.

On a different network, Tailscale creates a free personal VPN connecting your devices as if they were on the same network. Install it on both, sign in, and your Mac gets a stable address you can SSH into from anywhere.

Developing a website and hosting it locally? SSH port forwarding lets you access it on your iPad:

ssh -L 4000:localhost:4000 [email protected]

Now localhost:4000 in Safari on your iPad shows your local dev server running on your Mac.

Mosh: SSH's Resilient Sibling

Mosh is SSH for mobile connections. Where SSH dies on network hiccups, Mosh picks up where you left off and predicts keystrokes locally so typing feels instant on high-latency connections.

I use it sparingly. It occasionally mangles my terminal rendering, the kind of artifacts that make Vim feel like a funhouse mirror. For day-to-day coding, plain SSH is cleaner.

But for long-running connections, Mosh is unbeatable. If I'm port forwarding a dev server to Safari, I don't want that tunnel dying every time I switch apps or my WiFi wobbles. I'll start a Mosh session for the port forward, open Safari in Split View, and code in a separate SSH session. The Mosh connection just sits there, indestructible, keeping my preview running.

tmux: The Session That Never Dies

tmux is what makes this setup practical. It's a terminal multiplexer: persistent sessions with multiple panes that survive disconnections.

I start a tmux session on my Mac, open Vim in one pane, run a build in another. Then I close my iPad, go to sleep, wake up, open Blink, reconnect, and type tmux attach. Everything is exactly where I left it. The Vim buffer with my half-written function. The build output. The git log I was reviewing.

Without tmux, every disconnection kills your processes and closes your files. With it, your Mac becomes a persistent development server that your iPad dials into whenever you want.

A Typical Session

I open Blink, type ssh mac, and I'm at my Z-Shell prompt. If a tmux session is already running—it usually is—I reattach:

tmux attach

From here, it's indistinguishable from sitting at my Mac. Vim, Python, C++, Git, grep. It is my Mac's terminal, just displayed on my iPad. Some common workflows:

  • Writing this blog in Vim and Markdown
  • Vibe coding with Claude Code, Vim, and whatever else the project needs
  • Web development running Ghost locally and forwarding port 2368 to Safari in Split View
  • Git commits, branches, and PRs without leaving the terminal
  • Server ops SSHing into production from the couch
Coding on iPad session

Where It Falls Apart

A few months in, here's what doesn't work.

Images are a pain. Anything visual, the files live on your Mac and a terminal image viewer doesn't cut it. For image-heavy work, I still reach for MacBook.

File transfer is clunky. AirDrop and iCloud Drive work but neither integrates into a terminal workflow. Too much context-switching.

Network quality matters. Fast WiFi feels local. Weak signal or cellular, every keystroke has a delay. There's a floor below which this isn't enjoyable.

Your Mac needs to stay on. The display can sleep, but the system needs to keep running. Keep it plugged in and toggle System Settings → Battery → Options → "Prevent your Mac from sleeping automatically when the display is off" (or pmset -a sleep 0 in Terminal). One-time setup.

One screen is still one screen. Split View gives you two apps, but there's no second monitor for documentation.

I'm still learning. A few months in, I'm still hitting walls. That's part of the appeal, honestly. There's something satisfying about optimizing a setup nobody designed but works anyway.

The Best Computers

My iPad isn't replacing my Mac. It's extending it to places Mac can't comfortably go. Mac does the computing; iPad does the being-there.

If you have Mac and iPad, you already have everything you need. SSH has been around since 1995. tmux since 2007. The tools are decades old. The form factor is what's new.

The best coding computer is the one that lets you code when you otherwise wouldn't.

Markdown Cheatsheet

A comprehensive reference for every Markdown flavor

This guide covers markdown syntax from basic to advanced, across all major flavors. Whether you're writing documentation, blog posts, or technical notes, this reference has you covered.

Flavor Best For
CommonMark Universal compatibility
GFM GitHub repos, issues, wikis
Pandoc Academic papers, books
Kramdown Jekyll/Ruby sites
MDX React documentation
Obsidian Personal knowledge bases
## 1. Basic Syntax (Original Markdown)

### Headings

```markdown
# Heading 1
## Heading 2
### Heading 3
#### Heading 4
##### Heading 5
###### Heading 6

Alternative H1
==============

Alternative H2
--------------
```

### Emphasis

```markdown
*italic* or _italic_
**bold** or __bold__
***bold italic*** or ___bold italic___
~~strikethrough~~ (GFM extension)
```

### Lists

**Unordered:**

```markdown
* Item 1
* Item 2
  * Nested item 2.1
  * Nested item 2.2
    * Deep nested
- Item with dash
+ Item with plus
```

**Ordered:**

```markdown
1. First item
2. Second item
   1. Nested ordered
   2. Another nested
3. Third item
1. Numbers don't need to be sequential
```

### Links & Images

```markdown
[Inline link](https://example.com "Optional Title")
[Reference link][ref1]
[Implicit reference][]
<https://automatic-link.com>
<[email protected]>

![Alt text](image.jpg "Optional title")
![Reference image][img-ref]

[ref1]: https://example.com "Reference Title"
[Implicit reference]: https://example.com
[img-ref]: image.jpg "Image Reference"
```

### Blockquotes

```markdown
> Single line quote

> Multi-line quote continues here
> and here

> Nested quotes
>> Can be nested
>>> Multiple levels deep
```

### Code

```markdown
Inline `code` with backticks

    Code block with 4 spaces
    or tab indentation
```

~~~markdown
```
Fenced code block
Multiple lines
```

```javascript
// Syntax highlighted (GFM)
function hello() {
    console.log("Hello, World!");
}
```
~~~

### Horizontal Rules

```markdown
Three or more:

---
Hyphens

***
Asterisks

___
Underscores
```

---

## 2. GitHub Flavored Markdown (GFM)

### Tables

```markdown
| Left-aligned | Center-aligned | Right-aligned |
| :----------- | :------------: | ------------: |
| Cell 1       | Cell 2         | Cell 3        |
| Longer text  | **Bold**       | *Italic*      |

Minimal table:

First Header | Second Header
------------ | -------------
Content Cell | Content Cell
```

**Rendered:**

| Left-aligned | Center-aligned | Right-aligned |
| :----------- | :------------: | ------------: |
| Cell 1       | Cell 2         | Cell 3        |
| Longer text  | **Bold**       | *Italic*      |

### Task Lists

```markdown
- [x] Completed task
- [ ] Uncompleted task
- [ ] Another todo
  - [x] Nested completed
  - [ ] Nested uncompleted
```

**Rendered:**

- [x] Completed task
- [ ] Uncompleted task
- [ ] Another todo
  - [x] Nested completed
  - [ ] Nested uncompleted

### Username & Issue Mentions

```markdown
@username (GitHub only)
#123 (Issue reference)
user/repo#123 (Cross-repo issue)
```

### Emoji

```markdown
:smile: :heart: :thumbsup: :100:
:rocket: :octocat: :+1: :-1:
```

### Syntax Highlighting with Language

~~~markdown
```python
def factorial(n):
    """Calculate factorial"""
    if n <= 1:
        return 1
    return n * factorial(n - 1)
```

```diff
- Removed line
+ Added line
! Important change
# Comment
```
~~~

**Rendered:**

```python
def factorial(n):
    """Calculate factorial"""
    if n <= 1:
        return 1
    return n * factorial(n - 1)
```

```diff
- Removed line
+ Added line
! Important change
# Comment
```

### SHA References

```markdown
16c999e8c71134401a78d4d46435517b2271d6ac
mojombo@16c999e8c71134401a78d4d46435517b2271d6ac
mojombo/github-flavored-markdown@16c999e
```

---

## 3. CommonMark Extensions

### Autolinks

```markdown
www.example.com (some parsers)
https://example.com
ftp://files.example.com
```

### Disallowed Raw HTML (optional)

```html
<script>alert('This may be stripped');</script>
<div class="custom">Safe HTML allowed in some flavors</div>
```

### Entity & Numeric Character References

```markdown
&nbsp; &amp; &lt; &gt; &quot; &apos;
&#65; &#x41; &#8230;
```

---

## 4. MultiMarkdown Extensions

### Metadata Block

```markdown
Title: Document Title
Author: John Doe
Date: 2024-01-01
Tags: markdown, reference
Base Header Level: 2
```

### Footnotes

```markdown
Here's a sentence with a footnote[^1].

Here's another with a longer note[^longnote].

Inline footnote^[This is an inline footnote].

[^1]: This is the footnote.

[^longnote]: Here's one with multiple paragraphs.

    Indent paragraphs to include them in the footnote.

    > Even blockquotes in footnotes!
```

### Citations

```markdown
This is a statement that needs citation[p. 23][#Doe:2024].

Multiple citations[p. 10][#Smith:2023; p. 24][#Doe:2024].

[#Doe:2024]: John Doe. *Sample Book*. 2024.
[#Smith:2023]: Jane Smith. *Another Book*. 2023.
```

### Math (also Pandoc)

```markdown
Inline math: $E = mc^2$ or \\(a^2 + b^2 = c^2\\)

Display math:
$$
\sum_{i=1}^{n} x_i = \int_{0}^{1} f(x) dx
$$

\\[
\frac{-b \pm \sqrt{b^2 - 4ac}}{2a}
\\]
```

### Abbreviations

```markdown
HTML is great.
CSS is awesome.

*[HTML]: HyperText Markup Language
*[CSS]: Cascading Style Sheets
```

### Definition Lists

```markdown
Term 1
:   Definition 1
:   Another definition

Term 2
:   Definition with *inline* **formatting**

Compact Definition
: Brief description
```

### Smart Typography

```markdown
"Smart quotes" and 'single quotes'
En-dash -- and em-dash ---
Ellipsis...
```

### Cross-references

```markdown
See [](#heading-1) for more info.
As discussed in [](#fig:example).

![Example Figure][fig:example]

[fig:example]: image.jpg "Example" width=500px height=300px
```

---

## 5. Pandoc Markdown Extensions

### Div Blocks

```markdown
::: {.note #special-note}
This is a special note block with class and id.
:::

::: warning
This is a warning block.
:::

::: {.sidebar}
Sidebar content here
:::
```

### Span Elements

```markdown
This is [special text]{.highlight #text-id} inline.

[Small caps]{.smallcaps} text.
```

### Line Blocks

```markdown
| The limerick packs laughs anatomical
| In space that is quite economical.
|    But the good ones I've seen
|    So seldom are clean
| And the clean ones so seldom are comical
```

### Fancy Lists

```markdown
(1) First item
(2) Second item
    a. Sub-item
    b. Another sub
        i. Deep nesting

#. Auto-numbered
#. Continues numbering

i. Roman numerals
ii. Continue
    A. Upper letters
    B. More items

Example lists:
(@) First example
(@) Second example

Later reference to example (@).
```

### Grid Tables

```markdown
+---------------+---------------+--------------------+
| Fruit         | Price         | Advantages         |
+===============+===============+====================+
| Bananas       | $1.34         | - built-in wrapper |
|               |               | - bright color     |
+---------------+---------------+--------------------+
| Oranges       | $2.10         | - cures scurvy     |
|               |               | - tasty            |
+---------------+---------------+--------------------+
```

### Pipe Tables (simpler)

```markdown
| Right | Left | Default | Center |
|------:|:-----|---------|:------:|
|   12  |  12  |    12   |   12   |
|  123  |  123 |   123   |  123   |
|    1  |    1 |     1   |    1   |
```

### Superscript and Subscript

```markdown
H~2~O is water.
X^2^ is X squared.
^superscript^ and ~subscript~
```

### Inline Code Attributes

```markdown
`code`{.python}
`var x = 5;`{#mycode .javascript .numberLines startFrom="100"}
```

### Raw Blocks

~~~markdown
```{=html}
<div class="custom-html">
  Raw HTML preserved exactly
</div>
```

```{=latex}
\begin{align}
  E &= mc^2
\end{align}
```

```{=mediawiki}
{{Template|arg=value}}
```
~~~

### YAML Metadata Block

```yaml
---
title: Complete Reference
subtitle: Every Markdown Feature
author:
  - name: John Doe
    affiliation: University
  - name: Jane Smith
date: 2024-01-01
abstract: |
  This is a multi-line
  abstract in YAML.
tags: [markdown, documentation]
keywords:
  - markdown
  - reference
lang: en-US
toc: true
toc-depth: 3
numbersections: true
---
```

### Native Spans and Divs

```html
<div custom="attribute">
Native div with attributes
</div>

<span class="custom">Native span</span>
```

---

## 6. Extended Features (Various Flavors)

### Admonitions/Callouts

```markdown
!!! note "Optional Title"
    This is a note admonition.

!!! warning
    This is a warning without title.

!!! danger "Critical"
    Important danger message.

!!! tip
    Helpful tip here.

!!! important
    Important information.

!!! example "Code Example"
    ```python
    print("Hello")
    ```
```

**GitHub-style callouts:**

```markdown
> [!NOTE]
> GitHub-style callout

> [!WARNING]
> Another style of callout

> [!TIP]
> Helpful information

> [!IMPORTANT]
> Crucial information

> [!CAUTION]
> Be careful here
```

### Keyboard Keys

```html
Press <kbd>Ctrl</kbd> + <kbd>C</kbd> to copy.
<kbd>⌘</kbd> + <kbd>V</kbd> on Mac.

++ctrl+alt+del++ (some flavors)
```

**Rendered:**

Press <kbd>Ctrl</kbd> + <kbd>C</kbd> to copy.
<kbd>⌘</kbd> + <kbd>V</kbd> on Mac.

### Mark/Highlight

```markdown
==Highlighted text== (some flavors)
<mark>HTML mark element</mark>
{==highlighted==} (critic markup)
```

**Rendered:**

<mark>HTML mark element</mark>

### Insert/Delete (Critic Markup)

```markdown
{++inserted text++}
{--deleted text--}
{~~old~>new~~}
{>>comment<<}
{==highlight==}{>>with comment<<}
```

### Details/Summary

```html
<details>
<summary>Click to expand</summary>

Hidden content here with:
- Lists
- **Formatting**
- Etc.

</details>

<details open>
<summary>Expanded by default</summary>
This is visible initially.
</details>
```

**Rendered:**

<details>
<summary>Click to expand</summary>

Hidden content here with:
- Lists
- **Formatting**
- Etc.

</details>

### Table of Contents

```markdown
[[TOC]] (some flavors)
[TOC] (other flavors)
{:toc} (kramdown)
```

### Include Files

```markdown
<<[file.md]
<<(file.md)
{{file.md}}
!include file.md
{! file.md !}
```

### Diagrams

~~~markdown
```mermaid
graph LR
    A[Start] --> B{Decision}
    B -->|Yes| C[Do this]
    B -->|No| D[Do that]
    C --> E[End]
    D --> E
```

```plantuml
@startuml
Alice -> Bob: Hello
Bob --> Alice: Hi!
@enduml
```

```graphviz
digraph G {
    A -> B;
    B -> C;
    C -> A;
}
```
~~~

### Custom Containers

```markdown
::: {.theorem #pythagorean}
**Pythagorean Theorem**: $a^2 + b^2 = c^2$
:::

::: note
Custom note container
:::

::: {.callout-note}
## Note Title
Note content
:::
```

### Attributes on Elements

```markdown
![](image.jpg){width=50% height=30px}

[Link](url.com){.external target="_blank"}

Paragraph with attributes.
{: .custom-class #custom-id}
```

### Hard Line Breaks

```markdown
Line ending with two spaces
creates a hard break.

Line ending with backslash\
also creates a hard break (some flavors).
```

### Video Embeds (Some Flavors)

```markdown
![](video.mp4)
![](https://youtube.com/watch?v=id)

@[youtube](dQw4w9WgXcQ)
```

### Special Lists

```markdown
Term
  ~ Definition using tilde

Tight list:
* item1
* item2

Loose list:

* item1

* item2
```

---

## 7. Edge Cases & Special Characters

### Escaping

```markdown
\*Not italic\*
\`Not code\`
\[Not a link\](not a url)
\# Not a heading
\| Not a table
\1. Not a list
```

### Special Characters

```markdown
&copy; &trade; &reg; &deg; &plusmn; &ne; &le; &ge;
&rarr; &larr; &uarr; &darr; &harr;
&frac12; &frac34; &infin; &sum; &prod;
```

**Rendered:**

&copy; &trade; &reg; &deg; &plusmn; &ne; &le; &ge;
&rarr; &larr; &uarr; &darr; &harr;
&frac12; &frac34; &infin; &sum; &prod;

### Zero-Width Characters

```markdown
Zero&#8203;Width&#8203;Space
Word&shy;Break&shy;Hint
```

### Nested Structures

```markdown
> Blockquote with:
> - List item 1
> - List item 2
>   ```python
>   # code in list in quote
>   print("nested")
>   ```
>   > Nested quote in list
>
> 1. Ordered in quote
> 2. More ordered
>
> | Table | In | Quote |
> |-------|----|----|
> | Works | In | Some |
```

### Complex Nesting

```markdown
1. List with paragraph

   Multiple paragraph in list item.

   > Quote in list

   ```
   code in list
   ```

2. Another item
   - [ ] Task in ordered list
   - [x] Completed
```

### Unicode & Emoji

```markdown
📝 ✨ 🚀 💻 🎯 ⚡ 🔥 ✅ ❌ ⚠️
α β γ δ ε ζ η θ
© ® ™ • · × ÷ ±
```

### Comments

```markdown
<!-- HTML comment -->
[//]: # (This is also a comment)
[//]: <> (Another comment style)
[comment]: <> (Yet another)
```

---

## 8. Kramdown Specific

### Block Attributes

```markdown
{: .class #id key="value"}
This paragraph has attributes.

> Block quote with attributes.
{: .pullquote}
```

### Options

```markdown
{::options parse_block_html="true" /}
{::options auto_ids="false" /}
```

### No Markdown

```markdown
{::nomarkdown}
This *won't* be **parsed**.
{:/}
```

### Comments

```markdown
{::comment}
This is a kramdown comment.
{:/comment}
```

---

## 9. Markdown Extra

### Special Attributes

```markdown
Header {#header-id .header-class}
================================

[link](url){#link-id .link-class}
```

### Fenced Code Attributes

~~~markdown
~~~ {.python #mycode .numberLines startFrom="10"}
def hello():
    print("Hi")
~~~
~~~

### Markdown Inside HTML

```html
<div markdown="1">
This is *markdown* inside **HTML**.
</div>

<div markdown="block">
- List inside HTML
- Another item
</div>
```

### Backslash Escapes

```markdown
\\ \` \* \_ \{ \} \[ \] \( \) \# \+ \- \. \!
```

---

## 10. R Markdown / Quarto

### Code Chunks

~~~markdown
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

```{python}
#| label: fig-plot
#| fig-cap: "Sample Plot"
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [1, 4, 9])
```
~~~

### Inline R Code

```markdown
The mean is `r mean(c(1,2,3))`.
```

### Chunk Options

~~~markdown
```{r, echo=FALSE, fig.width=6, fig.height=4}
plot(cars)
```
~~~

---

## 11. Wiki-Style Links & Knowledge Base Features

### Wiki Links (Obsidian/Roam/Foam)

```markdown
[[Page Name]]
[[Page Name|Custom Display Text]]
[[Page Name#Heading]]
[[Page Name^block-id]]
![[Embedded Page]]
![[image.png|300x200]]
```

### Block References

```markdown
^unique-block-id

Reference to [[Page#^unique-block-id]]
```

### Tags

```markdown
#tag #multi-word-tag #nested/tag #2024/01/projects
#[[Complex Tag Name]]
```

### Dataview (Obsidian)

~~~markdown
```dataview
TABLE author, rating, finished
FROM #books
WHERE rating > 4
SORT finished DESC
```

`= this.file.name`
`= date(now)`
~~~

---

## 12. MDX (Markdown + JSX)

```jsx
import Button from './Button'
import { Chart } from './Chart'

export const meta = {
  title: 'MDX Document',
  author: 'John'
}

# {meta.title}

<Button onClick={() => alert('Clicked!')}>
  Click me
</Button>

<Chart data={[1, 2, 3]} />

Regular markdown with *React components*.
```

---

## 13. AsciiDoc-Influenced Features

### Admonition Blocks (Alternative Syntax)

```markdown
NOTE: This is a note.

TIP: Helpful tip here.

IMPORTANT: Don't forget this.

WARNING: Be careful!

CAUTION: Critical warning.
```

### Include Directives

```markdown
include::chapter1.md[]
include::code.js[lines=5..10]
```

### Conditional Directives

```markdown
ifdef::env-github[]
This only shows on GitHub.
endif::[]

ifndef::env-github[]
This shows everywhere except GitHub.
endif::[]
```

---

## 14. Mathematical Notation (Extended)

### Display Math Environments

```latex
$$
\begin{align}
a &= b + c \\
d &= e + f + g \\
h &= i
\end{align}
$$

$$
\begin{matrix}
a & b & c \\
d & e & f \\
g & h & i
\end{matrix}
$$

$$
\begin{cases}
x + y = 5 \\
2x - y = 1
\end{cases}
$$
```

### Chemical Equations

```latex
$\ce{2H2 + O2 -> 2H2O}$

$\ce{SO4^2- + Ba^2+ -> BaSO4 v}$
```

### Physics Notation

```latex
$\ket{\psi} = \alpha\ket{0} + \beta\ket{1}$

$\bra{\phi}\ket{\psi}$
```

---

## 15. Diagram Extensions

### PlantUML

~~~markdown
```plantuml
@startuml
!theme plain
actor User
participant "Web Browser" as Browser
participant "Web Server" as Server
database "Database" as DB

User -> Browser: Enter URL
Browser -> Server: HTTP Request
Server -> DB: Query
DB -> Server: Results
Server -> Browser: HTTP Response
Browser -> User: Display Page
@enduml
```
~~~

### Ditaa

~~~markdown
```ditaa
    +--------+   +-------+    +-------+
    |        | --+ ditaa +--> |       |
    |  Text  |   +-------+    |diagram|
    |Document|   |!magic!|    |       |
    |     {d}|   |       |    |       |
    +---+----+   +-------+    +-------+
        :                         ^
        |       Lots of work      |
        +-------------------------+
```
~~~

### Graphviz DOT

~~~markdown
```dot
digraph finite_state_machine {
    rankdir=LR;
    size="8,5"

    node [shape = doublecircle]; S;
    node [shape = point ]; qi

    node [shape = circle];
    qi -> S;
    S  -> q1 [ label = "a" ];
    S  -> S  [ label = "a" ];
    q1 -> S  [ label = "a" ];
    q1 -> q2 [ label = "b" ];
    q2 -> q1 [ label = "b" ];
    q2 -> q2 [ label = "b" ];
}
```
~~~

### Vega-Lite

~~~markdown
```vega-lite
{
  "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
  "data": {"url": "data.csv"},
  "mark": "bar",
  "encoding": {
    "x": {"field": "category", "type": "nominal"},
    "y": {"field": "value", "type": "quantitative"}
  }
}
```
~~~

---

## 16. Scholarly Markdown

### Abstract Block

```markdown
{abstract}
This paper presents a comprehensive overview of markdown
flavors and their features. We examine standard syntax
and extended capabilities across implementations.
{/abstract}
```

### Author Block

```markdown
{authors}
John Doe^1^, Jane Smith^2^

^1^ University of Examples
^2^ Institute of Documentation
{/authors}
```

### Keywords

```markdown
{keywords}
markdown, documentation, syntax, reference
{/keywords}
```

### DOI/Bibliography

```markdown
[@doi:10.1000/xyz123] shows that markdown is effective.

See [@smith2024; @doe2023] for more information.
```

### Glossary

```markdown
{glossary}
GFM
: GitHub Flavored Markdown

MMD
: MultiMarkdown
{/glossary}
```

---

## 17. Hugo/Jekyll/Static Site Features

### Front Matter (TOML)

```toml
+++
title = "Post Title"
date = 2024-01-01T10:00:00Z
draft = false
tags = ["markdown", "hugo"]
categories = ["documentation"]
+++
```

### Shortcodes

```markdown
{{</* youtube w7Ft2ymGmfc */>}}
{{</* tweet user="xxx" id="xxx" */>}}
{{</* gist user="xxx" id="xxx" */>}}
{{</* figure src="image.jpg" title="Figure 1" */>}}
{{</* highlight go "linenos=table" */>}}
package main
import "fmt"
func main() {
    fmt.Println("Hello")
}
{{</* /highlight */>}}
```

### Jekyll Includes

```liquid
{% include header.html %}
{% include_relative file.md %}
```

### Liquid Templates

```liquid
{% for post in site.posts %}
- [{{ post.title }}]({{ post.url }})
{% endfor %}

{% if page.comments %}
  {% include comments.html %}
{% endif %}
```

---

## 18. Markua (LeanPub)

### Aside

```markdown
A> This is an aside (sidebar).
A> It can span multiple lines.
```

### Blurb

```markdown
B> This is a blurb - a textbox with special styling.
```

### Discussion

```markdown
D> This is a discussion box for exercises or questions.
```

### Error/Warning/Information

```markdown
E> This is an error message.

W> This is a warning.

I> This is an information box.
```

### Quiz

```markdown
{quiz, id: quiz1}
? What is 2 + 2?

a) 3
B) 4
c) 5
d) 6

? Which are markdown flavors?

[X] GFM
[X] CommonMark
[ ] XML
[X] Pandoc
{/quiz}
```

---

## 19. Advanced Table Features

### Column Spanning (some flavors)

```markdown
| Column 1 | Column 2 | Column 3 |
|----------|:--------:|---------:|
| span=2   |          | Right    |
| Left     | Center   | Right    |
```

### MultiMarkdown Tables

```markdown
|             |          Grouping           ||
| First Header | Second Header | Third Header |
| ------------ | :-----------: | -----------: |
| Content      |   *Long Cell*               ||
| Content      |   **Cell**    |         Cell |
| New section  |     More      |         Data |
| And more     | With an escaped '\|'        ||
[Table caption, works in MD Extra too]
```

### Grid Table with Alignment

```markdown
+:-----+:-----:+-----:+
| Left |Center |Right |
+======+=======+======+
| L    |   C   |    R |
+------+-------+------+
| Left |Center |Right |
+------+-------+------+
```

---

## 20. Custom HTML with Markdown

### Details with Markdown

```html
<details markdown="1">
<summary>Click for markdown content</summary>

- This is a **list**
- With _formatting_
- Inside HTML details

```python
# Even code blocks work
print("Hello from details")
```

</details>
```

### Ruby Annotations

```html
<ruby>
漢字<rt>かんじ</rt>
</ruby>

<ruby>
WWW<rt>World Wide Web</rt>
</ruby>
```

### Progress Bars

```html
<progress value="70" max="100">70%</progress>

<meter value="6" min="0" max="10">6 out of 10</meter>
```

---

## 21. Extended Link Features

### Link Attributes

```markdown
[External Link](https://example.com){:target="_blank" rel="noopener"}

[Download](file.pdf){:download="filename.pdf"}
```

### Anchor Links with IDs

```markdown
{#custom-anchor}
### Heading with Custom ID

Jump to [custom anchor](#custom-anchor)
```

### Protocol Links

```markdown
[Email](mailto:[email protected]?subject=Hello)
[Phone](tel:+1234567890)
[SMS](sms:+1234567890?body=Hello)
[FTP](ftp://files.example.com)
```

---

## 22. Typography Extensions

### Small Caps

```html
<span style="font-variant: small-caps;">Small Caps Text</span>
```

```markdown
%{Small Caps}% (some flavors)
```

### Fractions

```markdown
1/2 1/3 2/3 1/4 3/4 1/8 3/8 5/8 7/8
```

### Ordinals

```markdown
1st 2nd 3rd 4th 21st 42nd
```

### Smart Punctuation

```markdown
"Curly quotes" and 'apostrophes'...
— Em dash and – en dash
(C) (R) (TM) (P) +-
```

---

## 23. Metadata & Processing Instructions

### Processing Instructions

```markdown
{frontmatter}
toc: true
numbered: true
lang: en
{/frontmatter}

{mainmatter}

{backmatter}
```

### Parser Directives

~~~markdown
~~~~~~~~~~~~~~~~~~~~~{.python .numberLines startFrom="100"}
def process():
    return "Code with attributes"
~~~~~~~~~~~~~~~~~~~~~
~~~

### Raw LaTeX

```latex
\newpage
\tableofcontents
\listoffigures
\listoftables
```

---

## 24. List Extensions

### Alphabetical Lists

```markdown
a. First item
b. Second item
c. Third item

A. Upper case
B. Continues
C. Through alphabet
```

### Definition Lists (Extended)

```markdown
Apple
:   A fruit
:   A company
    - Makes phones
    - Makes computers
:   A symbolic object

Orange
Citrus
:   Multiple terms, one definition
```

### Interrupted Lists

```markdown
1. First item

<!-- comment breaks list -->

1. New list starts

1. First item

{:.continue}
2. Continues previous list
```

---

## 25. Special Blocks & Environments

### Theorem Environment

```markdown
::: theorem
Let $f$ be a continuous function on $[a,b]$. Then $f$
attains its maximum and minimum values.
:::

::: proof
By the extreme value theorem...
:::

::: lemma
Supporting result here.
:::

::: corollary
Following from the theorem...
:::
```

### Exercise Blocks

```markdown
::: exercise
Prove that $\sqrt{2}$ is irrational.
:::

::: solution
Assume $\sqrt{2} = p/q$ where $p,q$ are integers...
:::
```

---

## 26. Accessibility Features

### Image Descriptions

```markdown
![Alt text](image.jpg "Title"){longdesc="Extended description for screen readers"}
```

### Abbreviation Definitions

```markdown
The HTML specification is maintained by W3C.

*[HTML]: HyperText Markup Language
*[W3C]: World Wide Web Consortium
```

### Language Marking

```html
This is English text. <span lang="es">Esto es español.</span>
<span lang="ja">これは日本語です。</span>
```

---

## 27. Version Control Integration

### Diff Syntax

~~~markdown
```diff
@@ -1,3 +1,3 @@
 Line 1
-Line 2 (removed)
+Line 2 (added)
 Line 3
```
~~~

### Merge Conflicts

```
<<<<<<< HEAD
Current change
=======
Incoming change
>>>>>>> branch-name
```

### Blame Annotations

```
e83c516 (John 2024-01-01) Initial commit
a4f9b32 (Jane 2024-01-02) Fix typo
```

---

## 28. Additional Special Characters

### Box Drawing

```
┌─────────┬─────────┐
│ Cell 1  │ Cell 2  │
├─────────┼─────────┤
│ Cell 3  │ Cell 4  │
└─────────┴─────────┘
```

### Arrows & Symbols

```
← → ↑ ↓ ↔ ↕ ⇐ ⇒ ⇑ ⇓ ⇔ ⇕
✓ ✗ ✔ ✖ ✚ ★ ☆ ♠ ♣ ♥ ♦
① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩
```

### Math Symbols

```
∀ ∃ ∅ ∇ ∈ ∉ ∋ ∏ ∑ ∞
⊂ ⊃ ⊆ ⊇ ∪ ∩ ∧ ∨ ¬ ⊕
```

---

## Summary: Feature Support by Flavor

| Feature | Original | CommonMark | GFM | MMD | Pandoc | Kramdown |
|---------|:--------:|:----------:|:---:|:---:|:------:|:--------:|
| Headings | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Emphasis | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Lists | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Links | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Images | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Code blocks | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Tables | – | – | ✓ | ✓ | ✓ | ✓ |
| Task lists | – | – | ✓ | – | ✓ | – |
| Strikethrough | – | – | ✓ | ✓ | ✓ | ✓ |
| Footnotes | – | – | – | ✓ | ✓ | ✓ |
| Math | – | – | – | ✓ | ✓ | ✓ |
| Definition lists | – | – | – | ✓ | ✓ | ✓ |
| Abbreviations | – | – | – | ✓ | ✓ | ✓ |
| Attributes | – | – | – | ✓ | ✓ | ✓ |
| Div blocks | – | – | – | – | ✓ | – |
| Span elements | – | – | – | – | ✓ | – |
| Superscript | – | – | – | ✓ | ✓ | – |
| Subscript | – | – | – | ✓ | ✓ | – |

---

## Quick Reference Card

| Category | Syntax | Result |
|----------|--------|--------|
| **Headings** | `# H1` `## H2` `### H3` | Heading levels 1-6 |
| **Bold** | `**text**` or `__text__` | **text** |
| **Italic** | `*text*` or `_text_` | *text* |
| **Bold + Italic** | `***text***` | ***text*** |
| **Strikethrough** | `~~text~~` | ~~text~~ |
| **Inline code** | `` `code` `` | `code` |
| **Link** | `[text](url)` | [text](https://example.com) |
| **Image** | `![alt](url)` | Embedded image |
| **Blockquote** | `> quote` | Indented quote |
| **Unordered list** | `- item` or `* item` | Bullet list |
| **Ordered list** | `1. item` | Numbered list |
| **Task list** | `- [ ]` / `- [x]` | Checkbox |
| **Horizontal rule** | `---` or `***` | Divider line |
| **Code block** | ` ``` ` or indent 4 spaces | Code block |
| **Table** | `\| col \| col \|` | Table |
| **Footnote** | `[^1]` | Superscript reference |

---

**The golden rule:** Headings, emphasis, lists, links, images, code blocks, and blockquotes work everywhere. Everything else depends on your processor.

1. Basic Syntax (Original Markdown)

Headings

# Heading 1
## Heading 2
### Heading 3
#### Heading 4
##### Heading 5
###### Heading 6

Alternative H1
==============

Alternative H2
--------------

Emphasis

*italic* or _italic_
**bold** or __bold__
***bold italic*** or ___bold italic___
~~strikethrough~~ (GFM extension)

Lists

Unordered:

* Item 1
* Item 2
  * Nested item 2.1
  * Nested item 2.2
    * Deep nested
- Item with dash
+ Item with plus

Ordered:

1. First item
2. Second item
   1. Nested ordered
   2. Another nested
3. Third item
1. Numbers don't need to be sequential
[Inline link](https://example.com "Optional Title")
[Reference link][ref1]
[Implicit reference][]
<https://automatic-link.com>
<[email protected]>

![Alt text](image.jpg "Optional title")
![Reference image][img-ref]

[ref1]: https://example.com "Reference Title"
[Implicit reference]: https://example.com
[img-ref]: image.jpg "Image Reference"

Blockquotes

> Single line quote

> Multi-line quote continues here
> and here

> Nested quotes
>> Can be nested
>>> Multiple levels deep

Code

Inline `code` with backticks

    Code block with 4 spaces
    or tab indentation
```
Fenced code block
Multiple lines
```

```javascript
// Syntax highlighted (GFM)
function hello() {
    console.log("Hello, World!");
}
```

Horizontal Rules

Three or more:

---
Hyphens

***
Asterisks

___
Underscores

2. GitHub Flavored Markdown (GFM)

Tables

| Left-aligned | Center-aligned | Right-aligned |
| :----------- | :------------: | ------------: |
| Cell 1       | Cell 2         | Cell 3        |
| Longer text  | **Bold**       | *Italic*      |

Minimal table:

First Header | Second Header
------------ | -------------
Content Cell | Content Cell

Rendered:

Left-aligned Center-aligned Right-aligned
Cell 1 Cell 2 Cell 3
Longer text Bold Italic

Task Lists

- [x] Completed task
- [ ] Uncompleted task
- [ ] Another todo
  - [x] Nested completed
  - [ ] Nested uncompleted

Rendered:

  • [x] Completed task
  • [ ] Uncompleted task
  • [ ] Another todo
    • [x] Nested completed
    • [ ] Nested uncompleted

Username & Issue Mentions

@username (GitHub only)
#123 (Issue reference)
user/repo#123 (Cross-repo issue)

Emoji

:smile: :heart: :thumbsup: :100:
:rocket: :octocat: :+1: :-1:

Syntax Highlighting with Language

```python
def factorial(n):
    """Calculate factorial"""
    if n <= 1:
        return 1
    return n * factorial(n - 1)
```

```diff
- Removed line
+ Added line
! Important change
# Comment
```

Rendered:

def factorial(n):
    """Calculate factorial"""
    if n <= 1:
        return 1
    return n * factorial(n - 1)
- Removed line
+ Added line
! Important change
# Comment

SHA References

16c999e8c71134401a78d4d46435517b2271d6ac
mojombo@16c999e8c71134401a78d4d46435517b2271d6ac
mojombo/github-flavored-markdown@16c999e

3. CommonMark Extensions

www.example.com (some parsers)
https://example.com
ftp://files.example.com

Disallowed Raw HTML (optional)

<script>alert('This may be stripped');</script>
<div class="custom">Safe HTML allowed in some flavors</div>

Entity & Numeric Character References

&nbsp; &amp; &lt; &gt; &quot; &apos;
&#65; &#x41; &#8230;

4. MultiMarkdown Extensions

Metadata Block

Title: Document Title
Author: John Doe
Date: 2024-01-01
Tags: markdown, reference
Base Header Level: 2

Footnotes

Here's a sentence with a footnote[^1].

Here's another with a longer note[^longnote].

Inline footnote^[This is an inline footnote].

[^1]: This is the footnote.

[^longnote]: Here's one with multiple paragraphs.

    Indent paragraphs to include them in the footnote.

    > Even blockquotes in footnotes!

Citations

This is a statement that needs citation[p. 23][#Doe:2024].

Multiple citations[p. 10][#Smith:2023; p. 24][#Doe:2024].

[#Doe:2024]: John Doe. *Sample Book*. 2024.
[#Smith:2023]: Jane Smith. *Another Book*. 2023.

Math (also Pandoc)

Inline math: $E = mc^2$ or \\(a^2 + b^2 = c^2\\)

Display math:
$$
\sum_{i=1}^{n} x_i = \int_{0}^{1} f(x) dx
$$

\\[
\frac{-b \pm \sqrt{b^2 - 4ac}}{2a}
\\]

Abbreviations

HTML is great.
CSS is awesome.

*[HTML]: HyperText Markup Language
*[CSS]: Cascading Style Sheets

Definition Lists

Term 1
:   Definition 1
:   Another definition

Term 2
:   Definition with *inline* **formatting**

Compact Definition
: Brief description

Smart Typography

"Smart quotes" and 'single quotes'
En-dash -- and em-dash ---
Ellipsis...

Cross-references

See [](#heading-1) for more info.
As discussed in [](#fig:example).

![Example Figure][fig:example]

[fig:example]: image.jpg "Example" width=500px height=300px

5. Pandoc Markdown Extensions

Div Blocks

::: {.note #special-note}
This is a special note block with class and id.
:::

::: warning
This is a warning block.
:::

::: {.sidebar}
Sidebar content here
:::

Span Elements

This is [special text]{.highlight #text-id} inline.

[Small caps]{.smallcaps} text.

Line Blocks

| The limerick packs laughs anatomical
| In space that is quite economical.
|    But the good ones I've seen
|    So seldom are clean
| And the clean ones so seldom are comical

Fancy Lists

(1) First item
(2) Second item
    a. Sub-item
    b. Another sub
        i. Deep nesting

#. Auto-numbered
#. Continues numbering

i. Roman numerals
ii. Continue
    A. Upper letters
    B. More items

Example lists:
(@) First example
(@) Second example

Later reference to example (@).

Grid Tables

+---------------+---------------+--------------------+
| Fruit         | Price         | Advantages         |
+===============+===============+====================+
| Bananas       | $1.34         | - built-in wrapper |
|               |               | - bright color     |
+---------------+---------------+--------------------+
| Oranges       | $2.10         | - cures scurvy     |
|               |               | - tasty            |
+---------------+---------------+--------------------+

Pipe Tables (simpler)

| Right | Left | Default | Center |
|------:|:-----|---------|:------:|
|   12  |  12  |    12   |   12   |
|  123  |  123 |   123   |  123   |
|    1  |    1 |     1   |    1   |

Superscript and Subscript

H~2~O is water.
X^2^ is X squared.
^superscript^ and ~subscript~

Inline Code Attributes

`code`{.python}
`var x = 5;`{#mycode .javascript .numberLines startFrom="100"}

Raw Blocks

```{=html}
<div class="custom-html">
  Raw HTML preserved exactly
</div>
```

```{=latex}
\begin{align}
  E &= mc^2
\end{align}
```

```{=mediawiki}
{{Template|arg=value}}
```

YAML Metadata Block

---
title: Complete Reference
subtitle: Every Markdown Feature
author:
  - name: John Doe
    affiliation: University
  - name: Jane Smith
date: 2024-01-01
abstract: |
  This is a multi-line
  abstract in YAML.
tags: [markdown, documentation]
keywords:
  - markdown
  - reference
lang: en-US
toc: true
toc-depth: 3
numbersections: true
---

Native Spans and Divs

<div custom="attribute">
Native div with attributes
</div>

<span class="custom">Native span</span>

6. Extended Features (Various Flavors)

Admonitions/Callouts

!!! note "Optional Title"
    This is a note admonition.

!!! warning
    This is a warning without title.

!!! danger "Critical"
    Important danger message.

!!! tip
    Helpful tip here.

!!! important
    Important information.

!!! example "Code Example"
    ```python
    print("Hello")
    ```

GitHub-style callouts:

> [!NOTE]
> GitHub-style callout

> [!WARNING]
> Another style of callout

> [!TIP]
> Helpful information

> [!IMPORTANT]
> Crucial information

> [!CAUTION]
> Be careful here

Keyboard Keys

Press <kbd>Ctrl</kbd> + <kbd>C</kbd> to copy.
<kbd>⌘</kbd> + <kbd>V</kbd> on Mac.

++ctrl+alt+del++ (some flavors)

Rendered:

Press Ctrl + C to copy.
⌘ + V on Mac.

Mark/Highlight

==Highlighted text== (some flavors)
<mark>HTML mark element</mark>
{==highlighted==} (critic markup)

Rendered:

HTML mark element

Insert/Delete (Critic Markup)

{++inserted text++}
{--deleted text--}
{~~old~>new~~}
{>>comment<<}
{==highlight==}{>>with comment<<}

Details/Summary

<details>
<summary>Click to expand</summary>

Hidden content here with:
- Lists
- **Formatting**
- Etc.

</details>

<details open>
<summary>Expanded by default</summary>
This is visible initially.
</details>

Rendered:

Click to expand

Hidden content here with:

  • Lists
  • Formatting
  • Etc.

Table of Contents

[[TOC]] (some flavors)
[TOC] (other flavors)
{:toc} (kramdown)

Include Files

<<[file.md]
<<(file.md)
{{file.md}}
!include file.md
{! file.md !}

Diagrams

```mermaid
graph LR
    A[Start] --> B{Decision}
    B -->|Yes| C[Do this]
    B -->|No| D[Do that]
    C --> E[End]
    D --> E
```

```plantuml
@startuml
Alice -> Bob: Hello
Bob --> Alice: Hi!
@enduml
```

```graphviz
digraph G {
    A -> B;
    B -> C;
    C -> A;
}
```

Custom Containers

::: {.theorem #pythagorean}
**Pythagorean Theorem**: $a^2 + b^2 = c^2$
:::

::: note
Custom note container
:::

::: {.callout-note}
## Note Title
Note content
:::

Attributes on Elements

![](image.jpg){width=50% height=30px}

[Link](url.com){.external target="_blank"}

Paragraph with attributes.
{: .custom-class #custom-id}

Hard Line Breaks

Line ending with two spaces
creates a hard break.

Line ending with backslash\
also creates a hard break (some flavors).

Video Embeds (Some Flavors)

![](video.mp4)
![](https://youtube.com/watch?v=id)

@[youtube](dQw4w9WgXcQ)

Special Lists

Term
  ~ Definition using tilde

Tight list:
* item1
* item2

Loose list:

* item1

* item2

7. Edge Cases & Special Characters

Escaping

\*Not italic\*
\`Not code\`
\[Not a link\](not a url)
\# Not a heading
\| Not a table
\1. Not a list

Special Characters

&copy; &trade; &reg; &deg; &plusmn; &ne; &le; &ge;
&rarr; &larr; &uarr; &darr; &harr;
&frac12; &frac34; &infin; &sum; &prod;

Rendered:

© ™ ® ° ± ≠ ≤ ≥
→ ← ↑ ↓ ↔
½ ¾ ∞ ∑ ∏

Zero-Width Characters

Zero&#8203;Width&#8203;Space
Word&shy;Break&shy;Hint

Nested Structures

> Blockquote with:
> - List item 1
> - List item 2
>   ```python
>   # code in list in quote
>   print("nested")
>   ```
>   > Nested quote in list
>
> 1. Ordered in quote
> 2. More ordered
>
> | Table | In | Quote |
> |-------|----|----|
> | Works | In | Some |

Complex Nesting

1. List with paragraph

   Multiple paragraph in list item.

   > Quote in list

code in list


2. Another item
- [ ] Task in ordered list
- [x] Completed

Unicode & Emoji

📝 ✨ 🚀 💻 🎯 ⚡ 🔥 ✅ ❌ ⚠️
α β γ δ ε ζ η θ
© ® ™ • · × ÷ ±

Comments

<!-- HTML comment -->
[//]: # (This is also a comment)
[//]: <> (Another comment style)
[comment]: <> (Yet another)

8. Kramdown Specific

Block Attributes

{: .class #id key="value"}
This paragraph has attributes.

> Block quote with attributes.
{: .pullquote}

Options

{::options parse_block_html="true" /}
{::options auto_ids="false" /}

No Markdown

{::nomarkdown}
This *won't* be **parsed**.
{:/}

Comments

{::comment}
This is a kramdown comment.
{:/comment}

9. Markdown Extra

Special Attributes

Header {#header-id .header-class}
================================

[link](url){#link-id .link-class}

Fenced Code Attributes

~~~ {.python #mycode .numberLines startFrom="10"}
def hello():
    print("Hi")

### Markdown Inside HTML

```html
<div markdown="1">
This is *markdown* inside **HTML**.
</div>

<div markdown="block">
- List inside HTML
- Another item
</div>
```

### Backslash Escapes

```markdown
\\ \` \* \_ \{ \} \[ \] \( \) \# \+ \- \. \!
```

---

## 10. R Markdown / Quarto

### Code Chunks

~~~markdown
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

```{python}
#| label: fig-plot
#| fig-cap: "Sample Plot"
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [1, 4, 9])
```

Inline R Code

The mean is `r mean(c(1,2,3))`.

Chunk Options

```{r, echo=FALSE, fig.width=6, fig.height=4}
plot(cars)
```

[[Page Name]]
[[Page Name|Custom Display Text]]
[[Page Name#Heading]]
[[Page Name^block-id]]
![[Embedded Page]]
![[image.png|300x200]]

Block References

^unique-block-id

Reference to [[Page#^unique-block-id]]

Tags

#tag #multi-word-tag #nested/tag #2024/01/projects
#[[Complex Tag Name]]

Dataview (Obsidian)

```dataview
TABLE author, rating, finished
FROM #books
WHERE rating > 4
SORT finished DESC
```

`= this.file.name`
`= date(now)`

12. MDX (Markdown + JSX)

import Button from './Button'
import { Chart } from './Chart'

export const meta = {
  title: 'MDX Document',
  author: 'John'
}

# {meta.title}

<Button onClick={() => alert('Clicked!')}>
  Click me
</Button>

<Chart data={[1, 2, 3]} />

Regular markdown with *React components*.

13. AsciiDoc-Influenced Features

Admonition Blocks (Alternative Syntax)

NOTE: This is a note.

TIP: Helpful tip here.

IMPORTANT: Don't forget this.

WARNING: Be careful!

CAUTION: Critical warning.

Include Directives

include::chapter1.md[]
include::code.js[lines=5..10]

Conditional Directives

ifdef::env-github[]
This only shows on GitHub.
endif::[]

ifndef::env-github[]
This shows everywhere except GitHub.
endif::[]

14. Mathematical Notation (Extended)

Display Math Environments

$$
\begin{align}
a &= b + c \\
d &= e + f + g \\
h &= i
\end{align}
$$

$$
\begin{matrix}
a & b & c \\
d & e & f \\
g & h & i
\end{matrix}
$$

$$
\begin{cases}
x + y = 5 \\
2x - y = 1
\end{cases}
$$

Chemical Equations

$\ce{2H2 + O2 -> 2H2O}$

$\ce{SO4^2- + Ba^2+ -> BaSO4 v}$

Physics Notation

$\ket{\psi} = \alpha\ket{0} + \beta\ket{1}$

$\bra{\phi}\ket{\psi}$

15. Diagram Extensions

PlantUML

```plantuml
@startuml
!theme plain
actor User
participant "Web Browser" as Browser
participant "Web Server" as Server
database "Database" as DB

User -> Browser: Enter URL
Browser -> Server: HTTP Request
Server -> DB: Query
DB -> Server: Results
Server -> Browser: HTTP Response
Browser -> User: Display Page
@enduml
```

Ditaa

```ditaa
    +--------+   +-------+    +-------+
    |        | --+ ditaa +--> |       |
    |  Text  |   +-------+    |diagram|
    |Document|   |!magic!|    |       |
    |     {d}|   |       |    |       |
    +---+----+   +-------+    +-------+
        :                         ^
        |       Lots of work      |
        +-------------------------+
```

Graphviz DOT

```dot
digraph finite_state_machine {
    rankdir=LR;
    size="8,5"

    node [shape = doublecircle]; S;
    node [shape = point ]; qi

    node [shape = circle];
    qi -> S;
    S  -> q1 [ label = "a" ];
    S  -> S  [ label = "a" ];
    q1 -> S  [ label = "a" ];
    q1 -> q2 [ label = "b" ];
    q2 -> q1 [ label = "b" ];
    q2 -> q2 [ label = "b" ];
}
```

Vega-Lite

```vega-lite
{
  "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
  "data": {"url": "data.csv"},
  "mark": "bar",
  "encoding": {
    "x": {"field": "category", "type": "nominal"},
    "y": {"field": "value", "type": "quantitative"}
  }
}
```

16. Scholarly Markdown

Abstract Block

{abstract}
This paper presents a comprehensive overview of markdown
flavors and their features. We examine standard syntax
and extended capabilities across implementations.
{/abstract}

Author Block

{authors}
John Doe^1^, Jane Smith^2^

^1^ University of Examples
^2^ Institute of Documentation
{/authors}

Keywords

{keywords}
markdown, documentation, syntax, reference
{/keywords}

DOI/Bibliography

[@doi:10.1000/xyz123] shows that markdown is effective.

See [@smith2024; @doe2023] for more information.

Glossary

{glossary}
GFM
: GitHub Flavored Markdown

MMD
: MultiMarkdown
{/glossary}

17. Hugo/Jekyll/Static Site Features

Front Matter (TOML)

+++
title = "Post Title"
date = 2024-01-01T10:00:00Z
draft = false
tags = ["markdown", "hugo"]
categories = ["documentation"]
+++

Shortcodes

{{</* youtube w7Ft2ymGmfc */>}}
{{</* tweet user="xxx" id="xxx" */>}}
{{</* gist user="xxx" id="xxx" */>}}
{{</* figure src="image.jpg" title="Figure 1" */>}}
{{</* highlight go "linenos=table" */>}}
package main
import "fmt"
func main() {
    fmt.Println("Hello")
}
{{</* /highlight */>}}

Jekyll Includes

{% include header.html %}
{% include_relative file.md %}

Liquid Templates

{% for post in site.posts %}
- [{{ post.title }}]({{ post.url }})
{% endfor %}

{% if page.comments %}
  {% include comments.html %}
{% endif %}

18. Markua (LeanPub)

Aside

A> This is an aside (sidebar).
A> It can span multiple lines.

Blurb

B> This is a blurb - a textbox with special styling.

Discussion

D> This is a discussion box for exercises or questions.

Error/Warning/Information

E> This is an error message.

W> This is a warning.

I> This is an information box.

Quiz

{quiz, id: quiz1}
? What is 2 + 2?

a) 3
B) 4
c) 5
d) 6

? Which are markdown flavors?

[X] GFM
[X] CommonMark
[ ] XML
[X] Pandoc
{/quiz}

19. Advanced Table Features

Column Spanning (some flavors)

| Column 1 | Column 2 | Column 3 |
|----------|:--------:|---------:|
| span=2   |          | Right    |
| Left     | Center   | Right    |

MultiMarkdown Tables

|             |          Grouping           ||
| First Header | Second Header | Third Header |
| ------------ | :-----------: | -----------: |
| Content      |   *Long Cell*               ||
| Content      |   **Cell**    |         Cell |
| New section  |     More      |         Data |
| And more     | With an escaped '\|'        ||
[Table caption, works in MD Extra too]

Grid Table with Alignment

+:-----+:-----:+-----:+
| Left |Center |Right |
+======+=======+======+
| L    |   C   |    R |
+------+-------+------+
| Left |Center |Right |
+------+-------+------+

20. Custom HTML with Markdown

Details with Markdown

<details markdown="1">
<summary>Click for markdown content</summary>

- This is a **list**
- With _formatting_
- Inside HTML details

```python
# Even code blocks work
print("Hello from details")
```

Ruby Annotations

<ruby>
漢字<rt>かんじ</rt>
</ruby>

<ruby>
WWW<rt>World Wide Web</rt>
</ruby>

Progress Bars

<progress value="70" max="100">70%</progress>

<meter value="6" min="0" max="10">6 out of 10</meter>

[External Link](https://example.com){:target="_blank" rel="noopener"}

[Download](file.pdf){:download="filename.pdf"}
{#custom-anchor}
### Heading with Custom ID

Jump to [custom anchor](#custom-anchor)
[Email](mailto:[email protected]?subject=Hello)
[Phone](tel:+1234567890)
[SMS](sms:+1234567890?body=Hello)
[FTP](ftp://files.example.com)

22. Typography Extensions

Small Caps

<span style="font-variant: small-caps;">Small Caps Text</span>
%{Small Caps}% (some flavors)

Fractions

1/2 1/3 2/3 1/4 3/4 1/8 3/8 5/8 7/8

Ordinals

1st 2nd 3rd 4th 21st 42nd

Smart Punctuation

"Curly quotes" and 'apostrophes'...
— Em dash and – en dash
(C) (R) (TM) (P) +-

23. Metadata & Processing Instructions

Processing Instructions

{frontmatter}
toc: true
numbered: true
lang: en
{/frontmatter}

{mainmatter}

{backmatter}

Parser Directives

~~~~~~~~~~~~~~~~~~~~~{.python .numberLines startFrom="100"}
def process():
    return "Code with attributes"

### Raw LaTeX

```latex
\newpage
\tableofcontents
\listoffigures
\listoftables
```

---

## 24. List Extensions

### Alphabetical Lists

```markdown
a. First item
b. Second item
c. Third item

A. Upper case
B. Continues
C. Through alphabet
```

### Definition Lists (Extended)

```markdown
Apple
:   A fruit
:   A company
    - Makes phones
    - Makes computers
:   A symbolic object

Orange
Citrus
:   Multiple terms, one definition
```

### Interrupted Lists

```markdown
1. First item

<!-- comment breaks list -->

1. New list starts

1. First item

{:.continue}
2. Continues previous list
```

---

## 25. Special Blocks & Environments

### Theorem Environment

```markdown
::: theorem
Let $f$ be a continuous function on $[a,b]$. Then $f$
attains its maximum and minimum values.
:::

::: proof
By the extreme value theorem...
:::

::: lemma
Supporting result here.
:::

::: corollary
Following from the theorem...
:::
```

### Exercise Blocks

```markdown
::: exercise
Prove that $\sqrt{2}$ is irrational.
:::

::: solution
Assume $\sqrt{2} = p/q$ where $p,q$ are integers...
:::
```

---

## 26. Accessibility Features

### Image Descriptions

```markdown
![Alt text](image.jpg "Title"){longdesc="Extended description for screen readers"}
```

### Abbreviation Definitions

```markdown
The HTML specification is maintained by W3C.

*[HTML]: HyperText Markup Language
*[W3C]: World Wide Web Consortium
```

### Language Marking

```html
This is English text. <span lang="es">Esto es español.</span>
<span lang="ja">これは日本語です。</span>
```

---

## 27. Version Control Integration

### Diff Syntax

~~~markdown
```diff
@@ -1,3 +1,3 @@
 Line 1
-Line 2 (removed)
+Line 2 (added)
 Line 3
```

Merge Conflicts

<<<<<<< HEAD
Current change
=======
Incoming change
>>>>>>> branch-name

Blame Annotations

e83c516 (John 2024-01-01) Initial commit
a4f9b32 (Jane 2024-01-02) Fix typo

28. Additional Special Characters

Box Drawing

┌─────────┬─────────┐
│ Cell 1  │ Cell 2  │
├─────────┼─────────┤
│ Cell 3  │ Cell 4  │
└─────────┴─────────┘

Arrows & Symbols

← → ↑ ↓ ↔ ↕ ⇐ ⇒ ⇑ ⇓ ⇔ ⇕
✓ ✗ ✔ ✖ ✚ ★ ☆ ♠ ♣ ♥ ♦
① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩

Math Symbols

∀ ∃ ∅ ∇ ∈ ∉ ∋ ∏ ∑ ∞
⊂ ⊃ ⊆ ⊇ ∪ ∩ ∧ ∨ ¬ ⊕

Summary: Feature Support by Flavor

Feature Original CommonMark GFM MMD Pandoc Kramdown
Headings ✓ ✓ ✓ ✓ ✓ ✓
Emphasis ✓ ✓ ✓ ✓ ✓ ✓
Lists ✓ ✓ ✓ ✓ ✓ ✓
Links ✓ ✓ ✓ ✓ ✓ ✓
Images ✓ ✓ ✓ ✓ ✓ ✓
Code blocks ✓ ✓ ✓ ✓ ✓ ✓
Tables – – ✓ ✓ ✓ ✓
Task lists – – ✓ – ✓ –
Strikethrough – – ✓ ✓ ✓ ✓
Footnotes – – – ✓ ✓ ✓
Math – – – ✓ ✓ ✓
Definition lists – – – ✓ ✓ ✓
Abbreviations – – – ✓ ✓ ✓
Attributes – – – ✓ ✓ ✓
Div blocks – – – – ✓ –
Span elements – – – – ✓ –
Superscript – – – ✓ ✓ –
Subscript – – – ✓ ✓ –

Quick Reference Card

Category Syntax Result
Headings # H1 ## H2 ### H3 Heading levels 1-6
Bold **text** or __text__ text
Italic *text* or _text_ text
Bold + Italic ***text*** text
Strikethrough ~~text~~ text
Inline code `code` code
Link [text](url) text
Image ![alt](url) Embedded image
Blockquote > quote Indented quote
Unordered list - item or * item Bullet list
Ordered list 1. item Numbered list
Task list - [ ] / - [x] Checkbox
Horizontal rule --- or *** Divider line
Code block ``` or indent 4 spaces Code block
Table | col | col | Table
Footnote [^1] Superscript reference

The golden rule: Headings, emphasis, lists, links, images, code blocks, and blockquotes work everywhere. Everything else depends on your processor.

Home Row

112 WPM. Take that, typing teacher!

I managed a new high score in TypeRacer today: 112WPM.

With this article, I wanted to share my journey here, and how I would recommend someone to start.

My Typing Story

I have an interesting history with typing.

I started "typing" at age of five years old to learn the controls of Quake. While the keyboard was a different language with different characters, the muscle memory was the same keyboard-to-keyboard. Upon moving to the states, I changed to an English QWERTY keyboard, and continued playing Doom.

In middle school, before beginning typing class, I clocked in at 35-40 WPM. As I progressed throughout the class, I got familiar with more of the "weird" keys (symbols, numbers, q/z/v) and what a proper "home-row" hand positioning looked like. Midway through the class, I made a discovery about our typing software: you were allowed to make two mistakes, with one word misspell counting as one mistake, and at the end the software took the number of characters you had finished and divided it by 5 (the average word length). So I typed a few words, then held down a random key until the timer expired. And scored 230 WPM.

I thought I was going to get credit for finding a bug our school's software; while my teacher did call my parents that night, it was accuse me of hacking the typing software and changing my score. After explaining to her what I did, her first remedy suggested was a generous failing grade and suspension, but after apologizing to her and the staff, I was only forbidden from being crowned best typist at the school assembly. I may have not gotten an award, but I kept typing skills, reaching 55-65 WPM consistently.

In high school, it was more of the same classes, so I didn't see my typing speed increase drastically—I hovered in the 60-70 WPM range. Even in college, I plateaued around this range.

That is, until I got a mechanical keyboard. I didn't see the results immediately, but with consistent use I bumped my numbers to 65-80 WPM. And this is where I hovered for 5 years; this is where I felt like I had maxed out given the same environment.

I couldn't get any better, because my hand movement prohibited it. While my core fingers mostly stayed in home-row, to achieve my top speed I had developed bad habits to maintain it. Habits such as using right (dominant) index finger to go 3 keys over to the left or using my ring finger in-place of my little finger. While I always returned to home-row, I could feel the excess movement taking its toll, both on my efficiency and general hand strain. During the pandemic, I was working on my computer a lot, and my hands just could not keep up.

So for the first time since I started typing I had to try. It's hard to rewire muscle memory, especially at 30. I tried perfecting every keystroke, getting a massive dopamine hit as I consistently landed the ones I use most often. However, that last 20% feels much harder than the first 20%.

Today, I still try to perfect my craft. I still struggle with my little finger movement. I still catch myself trying to regress some of my old ways when I am trying to compensate and type fast. But today I also typed 112 WPM, and that's cause to celebrate. Take that, typing teacher.

You Too Can Improve

While I can't teach touch typing in a single blog post, I can give a pretty decent summary of it. The following are things I recommend doing in order to become a better typist.

Keyboard

I'll just state it outright: there's no conclusive evidence that ergonomic keyboards actually prevent RSI. Keyboards measurably improve your posture, just not necessarily your health outcomes:

  • Alice layouts (Keychron V10, Epomaker Alice) reduce ulnar deviation with 10-degree inward tilt, 2-4 week learning curve
  • Fully split keyboards (ErgoDox EZ, ZSA Moonlander) offer maximum adjustability including 0-60 degree tenting, 2-6 weeks to adapt
  • Column-staggered designs (Corne, Kyria, Dactyl Manuform) optimize for finger lengths, brutal 1-3 month adaptation
  • Kinesis Advantage2 reduces muscle activity in key flexor/extensor muscles, 2 weeks to full mastery
  • Traditional ergonomic boards (Microsoft Sculpt, Logitech ERGO K860) offer gentle splits with fixed angles, ~1 month learning curve
  • Alternative layouts (Dvorak, Colemak) claim reduced finger travel but have zero clinical trials and 1-3 months of productivity loss

The biomechanical improvements are real and measurable; the clinical benefits remain frustratingly theoretical.

But here's the thing: you don't need empirical evidence on the health benefits if you enjoy typing that much more. Think of it as fun with benefits (FwB, for short...). If you enjoy sitting down at your desk and typing, and it's something you do several hours a day, a keyboard you enjoy could be the push you need to improve other parts of your typing too.

Home Row

Touch typing technique centers on the home row position—ASDF for the left hand and JKL; for the right hand. The F and J keys contain tactile bumps that allow positioning without visual confirmation. This central position minimizes finger travel distance, with proper technique requiring only 0.76-1.5 key distances per character compared to 3.5+ for hunt-and-peck typing.

Each finger has specific responsibilities:

Hand Finger Home Row Keys Covered
Left Pinky A Q, A, Z, Tab, Caps Lock, Shift, `
Left Ring S W, S, X, 2
Left Middle D E, D, C, 3
Left Index F R, F, V, T, G, B, 4, 5
Right Index J Y, H, N, U, J, M, 6, 7
Right Middle K I, K, ,, 8
Right Ring L O, L, ., 9
Right Pinky ; P, ;, /, 0, -, =, [, ], ,, ', Enter, Backspace
Both Thumbs Space Space only

The index fingers cover the most keys (two columns each), while pinkies cover their column plus all outer keys. After striking any key, fingers must return to home row position—this maintains spatial orientation and prevents positional drift that increases error rates.

Ergonomics

Wrists should remain in neutral position: straight in alignment with forearms, neither bent upward (extension), downward (flexion), nor sideways. During active typing, wrists should float 1-2 inches above the keyboard surface, not resting on the desk or wrist rest. Resting creates contact stress and forces non-neutral positions. Wrist rests serve only for pauses between typing bursts.

Fingers should curve gently, similar to holding a tennis ball. This natural curve allows fingertips to strike keys perpendicularly with optimal mechanical advantage. Palms stay raised above the keyboard while hands maintain this curved posture. The biomechanics of each keystroke involve three distinct muscle activation bursts: extensor muscles lift the finger, flexor muscles drive it downward against keyswitch resistance, and extensors again remove the fingertip. Collision with the end of key travel stops downward motion, not muscle action—meaning excessive force provides no benefit and increases cumulative joint stress.

Arms should hang naturally at the sides with elbows forming 90-110 degree angles. This open angle promotes blood circulation and prevents nerve compression at the elbow. Shoulders remain relaxed and slightly externally rotated, not hunched or rolled forward.

Strength Training

Strength training shows what ergonomic keyboards can't: actual evidence. Research suggests it can significantly reduce injury risk, with clear biological reasons why—it strengthens tendons, improves tissue resilience, and builds endurance in the muscles you use for typing. The formula is simple: use weights or resistance bands (not just bodyweight), train 2-3 times weekly with rest days between, and focus on your forearms, grip, and upper back. Just be patient—tendons adapt slower than muscles, so it takes months to see results.

Loading typing guide...

Conclusion

There's a learning curve to typing. In the beginning you'll see gains with minimal effort, just by knowing roughly where the keys are. As you progress and focus more on your speed, you might sacrifice hand placement (accuracy) for quickly hitting the correct key (speed). As you plateau, it will take more and more focus to correct the muscle memory. And along the way, your typing teacher may try to expel you.

All that matters is fixing your fingers, one key at a time.

iPhone (17?) Air, One Month Later

I fear I am about to feel what iPhone Mini people feel.

A confession. After reading the announcements, I planned to upgrade from my iPhone 16 Pro Max to iPhone 17 Pro Max. It was a luxury move, with my less-than-full-day battery life as the polite excuse. By the time I went to preorder, my configuration was weeks out. So I bought iPhone Air instead, in my usual configuration: the newest color (Sky Blue), 512 GB.

This is my 9th iPhone. My favorite, until now, was iPhone 6 Plus. Despite its size, the comfort was unmatched. I kept it for three years, my longest streak. Every iPhone since has been a strong device; none felt quite like that one.

I'm happy to say the crown has been passed to iPhone Air.

The Air feels every bit as comfortable as phones used to feel, with 2025 internals inside. I had assumed I needed to step down from the Max line because my hand cramped during bedtime use. The issue wasn't size, though; it was the close cousin of size: weight.

Below is a chart of every iPhone's weight. Peaks are Pro Maxes, valleys are base models, color-coded by year. The base iPhone 15 weighs as much as a Pro from several years ago.

The trend is unlikely to reverse. Customers have consistently asked for more battery, better cameras, and louder speakers, and those upgrades come with mass. To make the Air, Apple chose a different point on the curve:

  • Battery: 3,149 mAh (vs. 3,692 mAh on base, 4,252 mAh on Pro, 5,088 mAh on Pro Max)
  • Camera: single rear lens, no telephoto or ultra-wide
  • Speaker: mono via the earpiece. The bottom-firing driver is omitted.

These are the trade-offs the spec sheet shows. On paper, the Air reads like a phone of compromises. So why, after a month, am I keeping mine?

Because the spec sheet isn't how I use a phone.

My partner has an iPhone 12 Mini. Every time I pick it up, I think "too small for me." When I pick up the Pro Max, the weight asks for two hands or a surface; one-handed use is unstable. For my hand, the Pro line is comfortable for long sessions only with a case. The base iPhone hasn't fit my hand the way I'd hoped.

The Air is comfortable regardless of hand size. The screen is large enough to text on one-handed. It sits in a pocket without sagging. It's the first phone I've used caseless without immediately scratching it, a habit I'd given up after my iPhone 12 Pro's front glass cracked under normal wear.

I gave it a month before writing, to live with each trade-off:

  • "Hard to pick up off a table": easy unless it's face-down.
  • "Too thin to hold": most comfortable phone I've held, for my hands.
  • Single camera: I reposition or hand the phone to my partner more often.
  • Mono speaker: noticeable in showers and noisy kitchens; unnoticeable elsewhere because I'm usually wearing AirPods.
  • Battery: real-world use requires charger logistics, but I'd been doing that since iPhone 8. Many owners online report battery comparable to iPhone 16 Pro in normal use.

Each trade-off is real. None mattered enough to undo the comfort gain.

I handed the phone to my partner, who has called every iPhone and Pixel I've passed her "heavy" or "huge," and she said, "wow, this is nice." Six years of feedback to the contrary, then one sentence the other way. That was the moment I was certain.

A few design choices, from a customer's perspective, where I think there's room to improve:

  1. Pricing. $999 puts Air $200 above the base and only $100 below the Pro. Many buyers will close that small gap to the Pro for the feature delta.
  2. Color palette. Sky Blue, Light Gold, Cloud White, Space Black: subtle and minimal. The palette reads as aspirational, which positions the phone as a niche device rather than mass-market.
  3. Marketing emphasis. Air's messaging leans on thinness. From my experience, the meaningful win is weight, not thickness, and weight is a more legible benefit to a casual buyer.
  4. Visibility. I haven't seen Air ads on billboards, TV, or in my online feeds. The phone has lived primarily on Apple's own surfaces.

Reports suggest Air's sales came in below targets, with some pushback on those numbers. Apple has discontinued past "fourth iPhone" experiments (Mini, Plus, SE), and Air may follow.

After a month, two conclusions:

  1. I'll wait for the next iteration of Air, unless it takes more than three years (the same patience I gave iPhone 6 Plus).
  2. I'll buy whatever Apple ships as the successor. One more camera, the second speaker, and that's enough.

A thought experiment: rotating a different "fourth slot" each year (Air, Fold, Mini) would let Apple test new form factors without committing to multi-year roadmaps. Not free, since separate molds and supply chains have real cost, but a way to keep the lineup varied for a small population of customers who care.

For now, iPhone Air is the phone I reach for. The first iPhone in a long time that I genuinely enjoy holding: quiet, unobtrusive, content to disappear into my pocket and stay out of my way until I need it.

Same Old Story

  1. SAME thing every time I open LinkedIn
  2. OLD posts, new posts claim "AI takes all jobs in six months"
  3. STORY after story flow for half a year that says the...
  4. GOTO 1