凝望

读到费曼写给亡妻的情书,浓郁热烈,字里行间倾洒他的痛苦,思念与深情。读到最后一句 Please excuse my not mailing this —— but I don’t know your new address,立马想到了归有光的庭有枇杷树,今已亭亭如盖矣。 异曲同工的具像化,同样是表达对逝去爱人刻骨铭心的眷恋,生命被撕裂后无法填补的空洞。弗曼是西式的炽热,归是东方的内敛,以亭中枇杷树无声生长,映照时光流逝与生死相隔的巨大哀恸。含蓄、克制,内敛,如同水墨留白,情感越是深沉,言语越是清疏淡雅,汹涌的悲思凝练于物是人非的静观。 我的读后感归于一首诗。 凝望 你说看星空看日落, 不如看我的眼眸—— 因为所有光芒都会撤退到黑夜边境, 唯有我瞳孔里住着不落的黎明。 当你凝望世界, 我正凝望你; 你收拢整座宇宙的皱纹, 轻轻折进我眼角的涟漪。

July 17, 2025 · 1 min · 26 words

被误解是表达者的宿命

夫言发于心,而闻者异解,此理之常也。年齿愈增,默然愈甚。 盖阅历既深,乃知世相纷纭,人情幽邃,非片语可尽其实。欲求辞达意周,则患其繁;欲求辞简意赅,则惧其偏。 复观众生:所历殊途,境界悬隔,智识云泥。虽同观一物,所见深浅迥异;共闻一语,所会旨趣悬殊。理喻之难,甚于登天。 是以倦于置喙,但守方寸。于洪流大势,静观而已矣——言既难契于众听,身亦莫挽乎滔滔之势。

July 5, 2025 · 1 min · 4 words

Memorial Day临海小记

乙巳孟夏,驱车西行。临海之涯,以观沧溟。 但见洪波接天,浩渺无极。碧水如倾万顷之琉璃,远岫若浮数点之云墨。长风浩浩,卷雪浪而崩云;鸥鹭翩翩,掠寒烟而忘机。极目骋怀,始知宇宙之宏阔;俯身掬水,乃觉浮生之须臾。 昔人云:“寄蜉蝣于天地,渺沧海之一粟。”信哉斯言!吾辈营营于尘网,汲汲于微名,常为蜗角之争,所累寸心。今对汪洋之无始无终,感山海之不移不易,方悟营营者如朝露,汲汲者若飞尘。此身不过沧海一苇,此世不过白驹过隙,复何忧之能扰?复何欲之难平? 愿效鸥鹭之忘机,观潮汐之信诺。得失随浪卷,宠辱付云流。当此碧海青天,惟觉清风入怀,俗虑尽涤。后之视今,亦犹今之视昔,惟愿览者共析此中真意,莫为浮云遮望眼。

May 31, 2025 · 1 min · 4 words

迎新

龙舞春风瑞气生,万家灯火喜新程。 绿柳摇曳暖日长,桃花扬香迎早春。 星河月影共辉映,海外天涯同乾坤。 千山水长故乡景,浊酒一杯归家魂。

February 9, 2024 · 1 min · 4 words

Automate deploying this blog using Github action

了解github action后,第一步想到的是改造下这个博客。利用github action的工作流,做到直接在github上编辑markdown,保存后,触发一个设定的workflow,做到编译,部署编译好的静态网站到GitHub pages。 这里面关键是,如何部署编译好的静态网站到Github Pages。我用的是hexo这个静态网站生成器,代码是在一个独立repo,与要部署的目标repo不同。在GitHub的runner也就是服务器上,如何设置github credentials,从而能从那里部署是关键。 几番搜索发现了有个现成的github action: hexo-action。简单总结下: Generate a deploy key pair. ssh-keygen -t rsa -C "username@example.com" Public key is saved in github page repo’s Settings/Deploy Keys. Private key is saved as a secret in source repo’s Settings/Secrets, e.g., named DEPLOY_KEY. Add the github workflow: name: Blog CICD on: push: branches: - 'main' jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: submodules: true - name: Use Node.js uses: actions/setup-node@v3 with: node-version: '20.x' - name: Install dependencies run: npm install hexo - name: Deploy id: deploy uses: sma11black/hexo-action@v1.0.3 with: deploy_key: ${{ secrets.DEPLOY_KEY }} user_name: github_action 这是第一篇自动部署的文章。Let’s see if it works. ...

January 7, 2024 · 1 min · 103 words

又十年

二月听到学友新歌 张学友的新单曲又十年,旋律简单,歌词动人。恰好今年也是来美十年,人生前18年在家乡,7年裤子大,简单一算,西雅图已经是故乡外呆的最久的地方。 这几年随着小红书转码热门话题,十年前,我也算是半个转码。 但当时没有leetcode,没有bootcamp,也没有社交热度。只是作为相关专业电子信息工程,在学校就学了很多计算机相关课程,任何课题也都离不开代码。能动手实现并且立马看到成效比偏理论的通信更吸引我,于是毕业前就顺利成章的锁定专门找计算机行业工作。 年纪渐渐增长才发觉自己是被时间追着跑,一眨眼又是一个十年,连想停下来喘口气都是奢侈的。 一生有几个理想能够扛得住岁月 还不如好好地过越来越少的明天 一眨眼 又是一个十年 那些瓜葛纠结 在某一天突然迎刃而解

December 1, 2023 · 1 min · 11 words

吾心安处

于2023/06去看即将搬入的新家有感 旭日起山巅,夕阳落湖边。 闹市取幽径,转角见屋檐。

November 1, 2023 · 1 min · 3 words

夏日绝句

于2021年7月18日别谷歌奔赴新征程有感而作 序 微软五年,谷歌两载,如白驹过隙,忽然而已。 山河壮阔,星辰辽远,纵跬步咫尺,又是好风景。 银鞍白马微风软,飒沓流星谷中歌。 风鹏正举九万里,食苹鹿鸣下山河。

July 20, 2021 · 1 min · 6 words

Recap of Scala tutorial

A cheatsheet that gets you started. The original tutorial can be found here Main function The normal version: object Hello { def main(args: Array[String]) = { println("Hello, world") } } The version that extends App trait object Hello extends App { println("Hello, world") } // To access args. object Hello extends App { if (args.size == 0) println("Hello, you") else println("Hello, " + args(0)) } As you may notice: no ; needed as ending in Scala. Variables The type in declaration is optional. val s: String = "hello" // val for immutable, final in Java. val s = "hello" // Same as above. var i: Int = 42 // var for mutable. var i = 42 // Same as above. Built-in types: val b: Byte = 1 // 8-bit signed [-128, 127](-2^7 to 2^7-1, inclusive) val s: Short = 1 // 16-bit signed. val x: Int = 1 // 32-bit signed. val l: Long = 1 // 64-bit signed. val f: Float = 3.0 // 32-bit IEEE 754 single-precision float. val d: Double = 2.0 // 64-bit IEEE 754 double-precision float. val c: Char = 'a' // 16-bit unsigned Unicode character. val s: String = "str" // A sequence of Char BigInt and BigDecimal for large numbers: ...

July 12, 2021 · 14 min · 2835 words

详解水塘抽样(Reservoir sampling)

一个场景 当内存无法加载全部数据时,如何从包含未知大小的数据流中随机选取k个数据,并且要保证每个数据被抽取到的概率相等。 水塘抽样 把上述问题具体化为给定一个未知大小数组data[],从中选取k个数,要求每个数被选中的概率相等。假设数组长度为n,则每个数被选中概率应为k/n。 策略是: 对最前面k个数,直接放到数组chosen[]即chosen[i] = data[i] 0 <= i < k。 对data[i], i >= k,先生成个[0...i)间的随机数(左闭右开),假设rand(0, i) = j,则如果j < k,则做替换chosen[j] = data[i]。否则,nothing happens. 如此反复直到结束。 Java实现如下: public class ReservoirSampling { private Random rand = new Random(); public int[] sampling(int[] data, int k) { int[] chosen = new int[k]; int i = 0; for (int d : data) { if (i < k) { chosen[i] = d; } else { int j = rand.nextInt(i); if (j < k) { chosen[j] = d; } } ++i; } return chosen; } } 每个元素被选中概率相等的证明如下: ...

March 24, 2021 · 3 min · 440 words