Nothing Here...

Nothing Here...

/blogs will have contents

2026-06-25 Chu Tsz Ming

Headers

# h1 Heading 8-)
## h2 Heading
### h3 Heading
#### h4 Heading
##### h5 Heading
###### h6 Heading

Alternatively, for H1 and H2, an underline-ish style:

Alt-H1
======

Alt-H2
------
```	

# h1 Heading 8-)
## h2 Heading
### h3 Heading
#### h4 Heading
##### h5 Heading
###### h6 Heading

Alternatively, for H1 and H2, an underline-ish style:

Alt-H1
======

Alt-H2
------

------

# Emphasis

Emphasis, aka italics, with asterisks or underscores.

Strong emphasis, aka bold, with asterisks or underscores.

Combined emphasis with asterisks and underscores.

Strikethrough uses two tildes. Scratch this.

This is bold text

This is bold text

This is italic text

This is italic text

Strikethrough


Emphasis, aka italics, with *asterisks* or _underscores_.

Strong emphasis, aka bold, with **asterisks** or __underscores__.

Combined emphasis with **asterisks and _underscores_**.

Strikethrough uses two tildes. ~~Scratch this.~~

**This is bold text**

__This is bold text__

*This is italic text*

_This is italic text_

~~Strikethrough~~

------

# Lists
  1. First ordered list item
  2. Another item ⋅⋅* Unordered sub-list.
  3. Actual numbers don't matter, just that it's a number ⋅⋅1. Ordered sub-list
  4. And another item.

⋅⋅⋅You can have properly indented paragraphs within list items. Notice the blank line above, and the leading spaces (at least one, but we'll use three here to also align the raw Markdown).

⋅⋅⋅To have a line break without a paragraph, you will need to use two trailing spaces.⋅⋅ ⋅⋅⋅Note that this line is separate, but within the same paragraph.⋅⋅ ⋅⋅⋅(This is contrary to the typical GFM line break behaviour, where trailing spaces are not required.)

  • Unordered list can use asterisks
  • Or minuses
  • Or pluses
  1. Make my changes
    1. Fix bug
    2. Improve formatting
      • Make the headings bigger
  2. Push my commits to GitHub
  3. Open a pull request
    • Describe my changes
    • Mention all the members of my team
      • Ask for feedback
  • Create a list by starting a line with +, -, or *
  • Sub-lists are made by indenting 2 spaces:
    • Marker character change forces new list start:
      • Ac tristique libero volutpat at
      • Facilisis in pretium nisl aliquet
      • Nulla volutpat aliquam velit
  • Very easy!

1. First ordered list item
2. Another item
⋅⋅* Unordered sub-list.
1. Actual numbers don't matter, just that it's a number
⋅⋅1. Ordered sub-list
4. And another item.

⋅⋅⋅You can have properly indented paragraphs within list items. Notice the blank line above, and the leading spaces (at least one, but we'll use three here to also align the raw Markdown).

⋅⋅⋅To have a line break without a paragraph, you will need to use two trailing spaces.⋅⋅
⋅⋅⋅Note that this line is separate, but within the same paragraph.⋅⋅
⋅⋅⋅(This is contrary to the typical GFM line break behaviour, where trailing spaces are not required.)

* Unordered list can use asterisks
- Or minuses
+ Or pluses

1. Make my changes
    1. Fix bug
    2. Improve formatting
        - Make the headings bigger
2. Push my commits to GitHub
3. Open a pull request
    * Describe my changes
    * Mention all the members of my team
        * Ask for feedback

+ Create a list by starting a line with `+`, `-`, or `*`
+ Sub-lists are made by indenting 2 spaces:
  - Marker character change forces new list start:
    * Ac tristique libero volutpat at
    + Facilisis in pretium nisl aliquet
    - Nulla volutpat aliquam velit
+ Very easy!

------

# Task lists
  • Finish my changes
  • Push my commits to GitHub
  • Open a pull request
  • @mentions, #refs, links, formatting, and tags supported
  • list syntax required (any unordered or ordered list supported)
  • this is a complete item
  • this is an incomplete item

- [x] Finish my changes
- [ ] Push my commits to GitHub
- [ ] Open a pull request
- [x] @mentions, #refs, [links](), **formatting**, and <del>tags</del> supported
- [x] list syntax required (any unordered or ordered list supported)
- [ ] this is a complete item
- [ ] this is an incomplete item

------

# Ignoring Markdown formatting

You can tell GitHub to ignore (or escape) Markdown formatting by using \ before the Markdown character.

Let's rename *our-new-project* to *our-old-project*.


Let's rename \*our-new-project\* to \*our-old-project\*.

------

# Links

I'm an inline-style link

I'm an inline-style link with title

I'm a reference-style link

I'm a relative reference to a repository file

You can use numbers for reference-style link definitions

Or leave it empty and use the link text itself.

URLs and URLs in angle brackets will automatically get turned into links. http://www.example.com or http://www.example.com and sometimes example.com (but not on Github, for example).

Some text to show that the reference links can follow later.


[I'm an inline-style link](https://www.google.com)

[I'm an inline-style link with title](https://www.google.com "Google's Homepage")

[I'm a reference-style link][Arbitrary case-insensitive reference text]

[I'm a relative reference to a repository file](../blob/master/LICENSE)

[You can use numbers for reference-style link definitions][1]

Or leave it empty and use the [link text itself].

URLs and URLs in angle brackets will automatically get turned into links.
http://www.example.com or <http://www.example.com> and sometimes
example.com (but not on Github, for example).

Some text to show that the reference links can follow later.

[arbitrary case-insensitive reference text]: https://www.mozilla.org
[1]: http://slashdot.org
[link text itself]: http://www.reddit.com

------

# Images

Here's our logo (hover to see the title text):

Inline-style: alt text

Reference-style: alt text

Minion Stormtroopocat

Like links, Images also have a footnote style syntax

Alt text

With a reference later in the document defining the URL location:


Here's our logo (hover to see the title text):

Inline-style:
![alt text](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png "Logo Title Text 1")

Reference-style:
![alt text][logo]

[logo]: https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png "Logo Title Text 2"

![Minion](https://octodex.github.com/images/minion.png)
![Stormtroopocat](https://octodex.github.com/images/stormtroopocat.jpg "The Stormtroopocat")

Like links, Images also have a footnote style syntax

![Alt text][id]

With a reference later in the document defining the URL location:

[id]: https://octodex.github.com/images/dojocat.jpg  "The Dojocat"

------

# [Footnotes](https://github.com/markdown-it/markdown-it-footnote)

Footnote 1 link[^first].

Footnote 2 link[^second].

Inline footnote^[Text of inline footnote] definition.

Duplicated footnote reference[^second].

[^first]: Footnote can have markup

and multiple paragraphs.

[^second]: Footnote text.


Footnote 1 link[^first].

Footnote 2 link[^second].

Inline footnote^[Text of inline footnote] definition.

Duplicated footnote reference[^second].

[^first]: Footnote **can have markup**

    and multiple paragraphs.

[^second]: Footnote text.

------

# Code and Syntax Highlighting

Inline code has back-ticks around it.


Inline `code` has `back-ticks around` it.

```c#
using System.IO.Compression;

#pragma warning disable 414, 3021

namespace MyApplication
{
    [Obsolete("...")]
    class Program : IInterface
    {
        public static List<int> JustDoIt(int count)
        {
            Console.WriteLine($"Hello {Name}!");
            return new List<int>(new int[] { 1, 2, 3 })
        }
    }
}
@font-face {
  font-family: Chunkfive; src: url('Chunkfive.otf');
}

body, .usertext {
  color: #F0F0F0; background: #600;
  font-family: Chunkfive, sans;
}

@import url(print.css);
@media print {
  a[href^=http]::after {
    content: attr(href)
  }
}
function $initHighlight(block, cls) {
  try {
    if (cls.search(/\bno\-highlight\b/) != -1)
      return process(block, true, 0x0F) +
             ` class="${cls}"`;
  } catch (e) {
    /* handle exception */
  }
  for (var i = 0 / 2; i < classes.length; i++) {
    if (checkCondition(classes[i]) === undefined)
      console.log('undefined');
  }
}

export  $initHighlight;
require_once 'Zend/Uri/Http.php';

namespace Location\Web;

interface Factory
{
    static function _factory();
}

abstract class URI extends BaseURI implements Factory
{
    abstract function test();

    public static $st1 = 1;
    const ME = "Yo";
    var $list = NULL;
    private $var;

    /**
     * Returns a URI
     *
     * @return URI
     */
    static public function _factory($stats = array(), $uri = 'http')
    {
        echo __METHOD__;
        $uri = explode(':', $uri, 0b10);
        $schemeSpecific = isset($uri[1]) ? $uri[1] : '';
        $desc = 'Multi
line description';

        // Security check
        if (!ctype_alnum($scheme)) {
            throw new Zend_Uri_Exception('Illegal scheme');
        }

        $this->var = 0 - self::$st;
        $this->list = list(Array("1"=> 2, 2=>self::ME, 3 => \Location\Web\URI::class));

        return [
            'uri'   => $uri,
            'value' => null,
        ];
    }
}

echo URI::ME . URI::$st1;

__halt_compiler () ; datahere
datahere
datahere */
datahere

Tables

Colons can be used to align columns.

| Tables        | Are           | Cool  |
| ------------- |:-------------:| -----:|
| col 3 is      | right-aligned | $1600 |
| col 2 is      | centered      |   $12 |
| zebra stripes | are neat      |    $1 |

There must be at least 3 dashes separating each header cell.
The outer pipes (|) are optional, and you don't need to make the
raw Markdown line up prettily. You can also use inline Markdown.

Markdown | Less | Pretty
--- | --- | ---
*Still* | `renders` | **nicely**
1 | 2 | 3

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

| Command | Description |
| --- | --- |
| git status | List all new or modified files |
| git diff | Show file differences that haven't been staged |

| Command | Description |
| --- | --- |
| `git status` | List all *new or modified* files |
| `git diff` | Show file differences that **haven't been** staged |

| Left-aligned | Center-aligned | Right-aligned |
| :---         |     :---:      |          ---: |
| git status   | git status     | git status    |
| git diff     | git diff       | git diff      |

| Name     | Character |
| ---      | ---       |
| Backtick | `         |
| Pipe     | \|        |

Colons can be used to align columns.

Tables Are Cool
col 3 is right-aligned $1600
col 2 is centered $12
zebra stripes are neat $1

There must be at least 3 dashes separating each header cell. The outer pipes (|) are optional, and you don't need to make the raw Markdown line up prettily. You can also use inline Markdown.

Markdown Less Pretty
Still renders nicely
1 2 3
First Header Second Header
Content Cell Content Cell
Content Cell Content Cell
Command Description
git status List all new or modified files
git diff Show file differences that haven't been staged
Command Description
git status List all new or modified files
git diff Show file differences that haven't been staged
Left-aligned Center-aligned Right-aligned
git status git status git status
git diff git diff git diff
Name Character
Backtick `
Pipe |

Blockquotes

> Blockquotes are very handy in email to emulate reply text.
> This line is part of the same quote.

Quote break.

> This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can *put* **Markdown** into a blockquote.

> Blockquotes can also be nested...
>> ...by using additional greater-than signs right next to each other...
> > > ...or with spaces between arrows.

Blockquotes are very handy in email to emulate reply text. This line is part of the same quote.

Quote break.

This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can put Markdown into a blockquote.

Blockquotes can also be nested...

...by using additional greater-than signs right next to each other...

...or with spaces between arrows.


Inline HTML

<dl>
  <dt>Definition list</dt>
  <dd>Is something people use sometimes.</dd>

  <dt>Markdown in HTML</dt>
  <dd>Does *not* work **very** well. Use HTML <em>tags</em>.</dd>
</dl>
Definition list
Is something people use sometimes.
Markdown in HTML
Does *not* work **very** well. Use HTML tags.

Horizontal Rules

Three or more...

---

Hyphens

***

Asterisks

___

Underscores

Three or more...


Hyphens


Asterisks


Underscores


YouTube Videos

<a href="http://www.youtube.com/watch?feature=player_embedded&v=YOUTUBE_VIDEO_ID_HERE" target="_blank">
<img src="http://img.youtube.com/vi/YOUTUBE_VIDEO_ID_HERE/0.jpg" alt="IMAGE ALT TEXT HERE" width="240" height="180" border="10">
</a>
IMAGE ALT TEXT HERE
[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/YOUTUBE_VIDEO_ID_HERE/0.jpg)](http://www.youtube.com/watch?v=YOUTUBE_VIDEO_ID_HERE)

![IMAGE ALT TEXT HERE](https://upload.wikimedia.org/wikipedia/commons/thumb/e/ef/YouTube_logo_2015.svg/1200px-YouTube_logo_2015.svg.png)


Custom Rendering Extensions

On top of standard Markdown, this blog renders a few extra author-side markers. They are plain text in the source — no plugins needed.

<line-break> — forced page break

Write <line-break> anywhere in the post. On screen it silently breaks the flow; when the page is printed (A4), it forces a new page exactly there.

Content after the page break marker.

<follow> — hug the previous content

Place <follow> directly before a table to make it sit inline with the preceding text instead of starting a new line. The table wraps only when the line runs out of space.

Inline table hugging this text:

Fruit Qty Note
Apples 12 Fuji
Bananas 8 Cavendish
Cherries 5 Rainier

MusicXML — engraved sheet music

Fenced blocks tagged musicxml are engraved as sheet music at build time (MuseScore-style layout), not shown as code:

Engraved by Verovio 6.3.0-425dd7b Piano

animated-piano — piano animation

Fenced blocks tagged animated-piano become an auto-playing piano key animation (gif-like). Notes follow the AB-Notation (ABNotes) file spec.

AB-Notation 文件规范(修订版)

AB-Notation 专为 animated-piano 渲染引擎设计,通过简洁的纯文本语法生成钢琴动画。文件由全局元数据(Metadata)与音符序列(Note Sequence)两部分构成。

1. 基础语法格式

基本音符遵循 [时长][音高] 的核心模式。序列中的不同事件(音符、休止、和弦)通过 , 分隔。

时长(Duration):采用“纯长度”(Step/Tick)逻辑计算时值。基础单位 1 = 1 个十六分音符:

时长 含义
1 十六分音符
2 八分音符
4 四分音符 (Crotchet)
8 二分音符 (Minim)
16 全音符

附点语法糖(两种等效写法):

  • 纯数字法:直接写出总长度,如 6
  • 附点符号法:在时长后加 .,引擎自动计算 长度 × 1.5,如 4.

6 与 4. 在引擎解析时完全等价,均代表附点四分音符。

音高(Pitch):采用科学音高记谱法,包含音名与八度。升降号使用 #(升号)和 b(降号)标记在音名之后。如 C5、F#4。

休止符(Rest):音高部分使用大写字母 R 替代,如 4R(四分休止符,长度为 4)。

小节线(Barline):使用反引号(`)划分音乐小节,用于视觉分隔以及跨小节连结的绝对定位。

2. 高级记谱特性

连音组(Tuplets):用于表示在指定总长度内,均分排列多个连续音符。

  • 语法:[音符数量]/[共享总长度][音符1, 音符2, ...]
  • 示例:3/4[C5, E5, G5]
  • 解析:三连音(Triplet)结构,C5、E5、G5 三个音符共同占据长度 4(即一个四分音符)的总时长。

和弦(Chords):多个同时发声的音高共享同一个时长声明。

  • 语法:[时长]<音高1, 音高2, ...>
  • 示例:8<C4, E4, G4>
  • 解析:长度为 8(二分音符时长)的 C 大三和弦。

延音线与跨小节连结(Ties):用于将当前音符的时长延长至后续指定位置的音符(同音高),常用于跨小节连接。

  • 语法:在目标音高后追加 (tie-to: [小节序号]-[音符索引])
  • 示例:4C5(tie-to: 2-3)
  • 解析:当前的四分音符 C5 会通过延音线,无缝连接到第 2 小节的第 3 个音符。注意:小节序号与音符索引均从 1 开始计数。

3. 全局元数据(Metadata)

文件头部需声明动画与回放的全局参数,每行一个键值对,无需任何标点结尾:

  • tempo: 播放速度,单位为 BPM (Beats Per Minute)。如 tempo=88
  • metre: 拍号 (Time Signature),定义每小节的节拍结构。如 metre=4/4 或 metre=6/8

4. 综合代码块示例

包含元数据、单音、等效附点写法、和弦与连音的完整示例:

键盘默认显示 10 个白键(约一个八度),音符超出范围时,可用浮动控制条上的 −/+ 按钮调整键盘大小(缩小可看全音域,放大则键更大)。

.private/ — password-protected posts

Articles under .private/ are kept out of the blog index but remain reachable by their direct URL. When the BLOG_PRIVATE_PASSWORD build secret is set, their rendered HTML is AES-GCM encrypted at build time and unlocked with a password in the browser.