MoreRSS

site iconYasking | 东东修改

博主毕业后北漂两三年,2017 年初回到哈尔滨从事软件开发,2021 年初又回到北京。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

Yasking | 东东的 RSS 预览

Memos: 记录「95分」好吃的‘小帅香菇面’

2026-03-08 20:58:00

好友小帅的香菇鸡蛋肉丁面,为了追求完美,食材均来自‘地标’原产地,一年前首次吃还能吃到某个食材味道‘更突出’,半年前吃略感勾芡过重,今天的口感夯中夯,十多样食材味道完美融合,美食不可辜负,我吃了两碗!

01.jpg

与之并列的是老田的老北京炸酱面,炸酱卤+辣椒卤吃到停不下来,下次再吃我发上来!

妻子爷爷的‘朝鲜军功奖章’

2026-03-08 19:59:36

过年回家躺在农村的热炕上,聊起妻子的爷爷,他参加过抗美援朝战争,在九死一生中平安归来,岳母拿出来一些当年的奖章,说还有好几枚,不知道遗失到了哪里,看着七十多年的物件,感慨系之,它承载着那段沉重的历史,也似在诉说着战争残酷,务要珍惜和平。


01.webp

⬆️ 朝鲜军功奖章是朝鲜政府为了表彰在战争中建立功勋的指战员而设立颁发的奖章,也是当时授予中国人民志愿军最普遍的奖章之一。

这个是第二版的证书样式(百度百科-朝鲜军功奖章

02.webp

03.webp

04.webp

⬇️ 和平万岁纪念章是 1953 年 10 月中国人民第三届赴朝慰问团赠送给全体志愿军指战员的纪念章,它不仅是慰问品,更是对志愿军将士为和平作出巨大牺牲的崇高敬意和表彰。

05.webp

这只和平鸽大有来头,其原型是西班牙著名画家毕加索为1952年世界和平大会绘制的宣传画。

06.webp

⬇️ 这枚章是 1951 年 10 月,在中国人民志愿军出国作战一周年之际,由中国人民政治协商会议全国委员会颁发给所有参加抗美援朝人员。

07.webp

它通常也被称为 “政协纪念章” 或 “毛主席像章”,它是抗美援朝战争期间,由国家颁发的第一枚全国性纪念章。

08.webp

⬇️ 民国时期广州著名皮具老字号 “朱芳记” 最典型的商标标识上一只展翅的鹰。

09.webp

听说是抗美援朝回来国家给的奖励。

10.webp

Memos: 博客切换为 Shiki 代码高亮方案

2026-03-06 23:35:00

最近将博客的 highlight.js + Pygments 的高亮方案替换为 github.com/shikijs/shiki,这里记几个我觉得有意思、最实用的效果。

Diff 效果

在行尾写注释 // [!code --]// [!code ++],无行号和有行号两种场景效果不同。

无行号 - / + 悬在行首:

func greet(name string) string {
    return "Hello, " + name // [!code --]
    return "Hi, " + name   // [!code ++]
}

开启行号时符号合并进行号列,颜色跟随变化:

```go ln func greet(name string) string { return "Hello, " + name // [!code --] return "Hi, " + name // [!code ++] }


<!--more-->

**Focus 聚焦效果**

非焦点行淡出,突出当前关注的逻辑。

```go
func login() {
    validate()   // [!code focus]
    requestToken()
    saveSession()
}

语义高亮

[!code highlight] 是无语义的通用版;info / warning / error 是有语义的递进版,适合标注关键路径、潜在问题和错误。

func insertionSort(nums []int) {
    for i := 1; i < len(nums); i++ { // [!code highlight]
        key := nums[i]
        j := i - 1
        for j >= 0 && nums[j] > key {
            nums[j+1] = nums[j]
            j--
        }
        nums[j+1] = key // [!code info]
    }
}

func sortAndPrint(data []int) {
    if data == nil { // [!code warning]
        return
    }
    insertionSort(data)
    fmt.Println(data[len(data)]) // [!code error]
}

func main() {
    nums := []int{5, 3, 8, 1, 9, 2}
    sortAndPrint(nums)
}

Hover 装饰效果

鼠标悬停才高亮,适合标注 "需要关注但不需要一直突出" 的行。

func div(a, b int) int {
    result := a / b
    logValue(result) // [!code hover]
    return result
}

行号(Line Numbers)

使用 ```go lnln 关键字开启行号,适合引用具体行或展示较长代码片段。

```go ln package main

import "fmt"

func fibonacci(n int) int { if n <= 1 { return n } return fibonacci(n-1) + fibonacci(n-2) }

func main() { fmt.Println(fibonacci(10)) }


**范围行高亮效果**

在 info 字符串里声明高亮行,不在代码内容里留注释标记,适合引用第三方代码。`ln` 和 `{范围}` 可以组合使用。

示例中的标签是:`` ```go ln {6,8-10} ``

```go ln {6,8-10}
package main

import "fmt"

func main() {
    nums := []int{1, 2, 3, 4, 5}
    sum := 0
    for _, v := range nums {
        sum += v
    }
    fmt.Println(sum)
}

然而,估计我还是会用默认效果,不带行号、不带高亮,避免代码过于花里胡哨,遵循 ‘非必要则不使用’ 的原则。

Memos: 博客新增划线、重点及荧光笔效果支持

2026-03-06 23:34:00

这是普通文字,这是划线重点。 这是 蓝色划线重点, 这是 紫色划线重点

<span class="u-line">这是划线重点</span>
<span class="u-line u-line-blue">蓝色划线重点</span>
<span class="u-line u-line-violet">紫色划线重点</span>

这是 黄色高亮, 这是 绿色高亮, 这是 粉色高亮

<span class="hl hl-yellow">黄色高亮</span>
<span class="hl hl-green">绿色高亮</span>
<span class="hl hl-pink">粉色高亮</span>
<span class="hl hl-blue">蓝色高亮</span>
<span class="hl hl-lavender">薰衣草高亮</span>
<span class="hl hl-peach">蜜桃高亮</span>
<span class="hl hl-mint">薄荷高亮</span>
<span class="hl hl-coral">珊瑚高亮</span>
<span class="hl hl-lemon">柠檬高亮</span>

这是 记号笔风格高亮绿色记号笔

<span class="hl hl-marker hl-yellow">Marker Yellow</span>
<span class="hl hl-marker hl-green">Marker Green</span>
<span class="hl hl-marker hl-pink">Marker Pink</span>
<span class="hl hl-marker hl-lavender">Marker Lavender</span>

记录博客字体分包与字体子集化

2026-03-05 14:16:48

本博客中文字体采用了一段时间的字体分包方案,又尝试调整为按需字体子集化的方案,整理记录如下。

字体分包

博客使用 Oppo Sans 4.0 字体:https://www.coloros.com/article/A00000074/

使用 cn-font-split 工具分包

$ pnpx cn-font-split --input "OPPO Sans 4.0.ttf" --outDir dist-font

生成内容如下

01.webp

其中

  • index.html 是预览调试一个一个 Demo 网页
  • index.proto 是 Protocol Buffers 接口定义文件
  • reporter.bin 记录字体拆分的详细信
  • result.css 是引入的拆分字体的入口定义样式文件

使用的话,将拆分后的众多 .woff2 字体文件放到 OPPOSans4(自定义)目录,添加到博客静态目录中,编辑 result.css 文件,注意批量编辑 URL 中的路径。

@font-face{font-family:"OPPO Sans 4.0";src:local("OPPO Sans 4.0"),url("./fonts/OPPOSans4/b8d45a4b1842853318f4cdd5ba6ef8a4.woff2")format("woff2");font-style:normal;font-display:swap;

例如我的字体放在 css 当前目录的 fonts/OPPOSans4 下,路径就是 ./fonts/OPPOSans4/b8d45a4b1842853318f4cdd5ba6ef8a4.woff2

02.webp

博客加载过程中,会按需加载,以 OPPO Sans 字体为例,默认命令参数下拆分为 400+ 个字体文件,每篇文章动态加载了 10-30 个字体文件,比较零散。

按需字体子集化

这是另一个思路,把博客使用到文字汇总,将字体精简,精简后的字体文件只包含用到的字体,也能大幅减少字体文件的体积。

brew install fonttools

收集

find content -name "*.md" -exec cat {} \; > all_text.txt

过滤

sed -e 's/```.*//g' \  
-e 's/`[^`]*`//g' \  
-e 's/!\[[^]]*\](\([^)]*\))//g' \  
-e 's/\[[^]]*\](\([^)]*\))/\1/g' \  
all_text.txt > clean_text.txt

生成

pyftsubset "OPPO Sans 4.0.ttf" \  
--text-file=clean_text.txt \  
--output-file=opposans-blog.woff2 \  
--flavor=woff2 \  
--layout-features='*' \  
--no-hinting \  
--desubroutinize

使用

@font-face {
    font-family: 'OPPO Sans 4.0';
    src: url('fonts/OppoSans-Blog.woff2') format('woff2');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}

:root {
    --font-sans: 'OPPO Sans 4.0', 'Source Sans Pro', 'Helvetica Neue', Arial, sans-serif;
    --font-mono: 'JetBrains Mono', 'Roboto Mono', Consolas, Monaco, 'Courier New', monospace;
    --font-ui: var(--font-sans);
}

就只需要加载一个精简后字体文件。

03.webp

字体子集化方案较麻烦的是需要定期执行脚本生成字体,好在未匹配到的字体会自动降级为系统字体,偶尔两个中文降级到系统字体显示并非不可接受。

P.S. 经过几次调整,OPPO Sans 中文字体 + JetBrains Mono 代码显示效果是我目前最喜欢的搭配!

Memos: 邻座吃饭的一家三口

2026-03-01 23:34:00

吃饭时邻座一对夫妻和孩子对话,对话内容让我印象较深,如下:


对话一

(夫妻俩吃完了面条,女孩买了奶茶回来)

女孩妈:你排那么长时间,怎么不给我俩带一杯

女孩:(无声)


对话二

女孩妈:那边炸鸡排看着挺好吃

女孩爸:… 滚,不给你俩买


对话三

(女孩爸在跟女儿侃侃而谈,女孩妈起身走开)

女孩爸:你干什么去啊

女孩妈:用不着你管

女孩爸:快回来,坐在这块


对话四

(女孩爸继续跟女儿侃侃而谈)

女孩爸:… 就是这点好,你他妈就是个傻逼,也能 XXX…