2026-07-07 03:57:00
过去几十年,我大概只凑热闹看过个位数场次球赛,但最近天天看赛程,期待着晚上看球。
时差是一个很重要的原因。在欧洲看世界杯,大多数比赛都在下班后,偶尔才需要熬夜。
最初的是苏格兰闯入世界杯,想支持一下。对来自格拉斯哥的罗伯逊印象很深,看了很多他和利物浦的故事。
后来又想,既然自己人在英格兰,那也看看英格兰吧。于是看了两场英格兰的比赛,开始留意哈利·凯恩和赖斯。
小红书也算是一个契机。今年它买了世界杯转播权,所以一直给我推送相关视频。那段时间,我刷到了很多哈兰德的表情包和集锦,自然而然地开始看挪威队的比赛。
就这样,看的比赛慢慢多了起来。
看葡萄牙对克罗地亚的时候,我开始了解莫德里奇,那个从战火中走出来的中场大师。
看法国队比赛的时候,我认识了坎特。那个和球队气质有些格格不入的人。务实、低调,却在球场上无处不在。也是从他开始,我才慢慢注意到,足球并不只是前锋和进球,还有中场、后腰、防守、覆盖和拦截。
看佛得角和阿根廷的时候,和朋友们不由自主的鼓掌恍惚,感觉隔壁邻居都能听到。难得熬夜看球,看的热血沸腾,真精彩啊。
佛得角其实不只是门将出色,只是他比较显眼。佛得角的阵型布置和高效的回防效率,压缩了对手的进攻空间,但他们也从不放弃进攻的可能性。这种教练和球员的决心和执行力才是这个球队最大的魅力
追着这些球员和球队的轨迹,我又看了很多纪录片和集锦。慢慢意识到,自己也许并不是单纯喜欢看球,而是喜欢故事。
而绿茵场上,最不缺的就是故事和传奇。
在现场见证故事发生,是一种无以伦比的诱惑和乐趣。
很多平时不看球的人会看世界杯,除了比赛本身好看,可能还有一个原因:它让人短暂地进入一种全球共同关注、共同记忆、共同感动的氛围里。
在同一个夜晚,世界上许多陌生人一起等待、紧张、欢呼、遗憾。哪怕我并不是一个真正懂球的人,也会被这种共同经历打动。
也许这就是世界杯的魅力,一种独特的浪漫。
2026-07-06 03:45:00
英国的盛夏,热的睡不着,结果隔壁养老院着火了…

好久没去动物园,还挺开心的。

Cotswolds 的微缩小镇,在 Bourton-on-the-Water 闲逛是真的很舒服,不愧为英国最美乡村。

玛莎和 Kew Garden 联名的饮料,好喝!

第一次看到这么小的南瓜。

意料之外好吃的薯片,特别上头!

落日的美好,照片拍不出。

划了次船,一直在转圈圈,最后腰酸背痛。

一直想玩一次万智牌,看到有降世神通版的新手套装,忍不住入手了。
御三家(万智牌、游戏王、宝可梦)里,我会喜欢万智牌的美术和质感。但宝可梦卡牌买的最多,对战视频游戏王看的最多,日常炉石玩的最久。
呵,男人!
真杂啊,忍不住吐槽自己。

附近公园里一颗奇怪的树。

买了 Meta 和雷朋联名的智能眼镜,挺有趣的,但日常佩戴还是略重。等体验几个月之后,应该也会写一篇博客。

卡卡颂可能是我这两年最喜欢的桌游之一。美术做的很舒服,喜欢这种拼图类的。
玩法没有很强的对抗性,但又有足够的策略性,很有趣。

这套西游记的侧封真漂亮。

新买的杯子,喜欢!
这一年弄碎了两个喜欢的杯子,不知道这个能坚持多久…

闪现巴黎!
Flan 应该是我在法国最喜欢的甜点,焦糖表层,内馅大量的香草籽,配上解腻的饼皮,真好呀。

人群之中的那抹微笑。

巴塞罗那的圣家堂是真的震撼呀。

卢浮宫JoJo周边,太酷啦!

格鲁吉亚美食卡里饺。
还是更喜欢小笼包,想回国了。

家里的新成员 Henry!

没想到第一次看万青是在伦敦。

喜欢这件短袖,求链接!

预约半年之后,Analogue Pocket 终于到了。
来的有些突然,还没把配件和卡带买好,希望下半年能腾出空来。

试着留了次胡子。

2026-07-05 05:47:00
最近给博客换了一套适配 Bear Blog 的自制主题,取名 Vermilion(朱砂)。
正文用衬线字体窄栏排版,行距放宽,适合中英文混排阅读,背景模拟了泛黄旧书的质感。
截图留念:

完整 CSS:
/* ============================================================
Vermilion — Bear Blog theme from https://anotherdayu.com/
Eggshell-gray paper / ink text / cinnabar seal accents / narrow airy column
Usage: paste into Dashboard → Themes → Edit theme CSS
============================================================ */
:root {
--paper: #f4f3ef; /* Sketch paper: cool-toned eggshell gray */
--ink: #2d2b28; /* Ink: warm gray-black, not pure black */
--ink-soft: #6e6a63; /* Secondary text: dates, footer */
--cinnabar: #a6392e; /* Cinnabar: seal red */
--hairline: #dcd8d0; /* Thin divider lines */
--code-bg: #eceae4; /* Code blocks: half a shade darker than the paper */
/* Paper grain: SVG noise, faint dark speckle in light mode */
--grain: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.05 0'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23g)'/%3E%3C/svg%3E");
}
@media (prefers-color-scheme: dark) {
:root {
--paper: #242220; /* Night paper: warm gray-black */
--ink: #d8d4cb;
--ink-soft: #8f8a80;
--cinnabar: #cf6a58; /* Cinnabar brightened one step */
--hairline: #3b3833;
--code-bg: #2e2b28;
/* Switch to faint light speckle so grain stays visible on a dark base */
--grain: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.04 0'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23g)'/%3E%3C/svg%3E");
}
}
/* ---------- Base typography: narrow, airy column ---------- */
body {
background-color: var(--paper);
background-image: var(--grain); /* Overlay the paper grain texture */
color: var(--ink);
font-family: Georgia, "Iowan Old Style", "Noto Serif SC",
"Source Han Serif SC", "Songti SC", SimSun, serif;
font-size: 1.125rem;
line-height: 1.9;
max-width: 650px;
margin: 0 auto;
padding: 2.5rem 1.5rem;
-webkit-font-smoothing: antialiased;
overflow-wrap: break-word; /* Long URLs / words won't break the narrow layout */
-webkit-text-size-adjust: 100%; /* Prevent font inflation on mobile landscape */
}
p {
margin: 1.4em 0;
}
/* ---------- Blog title: a cinnabar seal as the signature ---------- */
.title h1 {
font-size: 1.5rem;
font-weight: 600;
letter-spacing: 0.04em;
color: var(--ink);
display: inline-block;
}
/* Signature element: small cinnabar seal square after the title */
.title h1::after {
content: "";
display: inline-block;
width: 0.55em;
height: 0.55em;
margin-left: 0.45em;
background: var(--cinnabar);
border-radius: 1px;
vertical-align: baseline;
}
.title h1 a,
.title h1 a:visited {
color: inherit;
text-decoration: none;
}
/* ---------- Nav: small quiet text, no divider ---------- */
nav {
font-size: 0.9rem;
letter-spacing: 0.05em;
margin-bottom: 2.5rem;
}
nav a {
color: var(--ink-soft);
text-decoration: none;
margin-right: 1.2em;
}
nav a:hover {
color: var(--cinnabar);
}
/* ---------- Heading hierarchy: distinguished by size and weight ---------- */
h1, h2, h3, h4 {
line-height: 1.5;
letter-spacing: 0.02em;
margin-top: 2.2em;
margin-bottom: 0.6em;
}
h1 {
font-size: 1.6rem;
font-weight: 700;
}
h2 {
font-size: 1.3rem;
font-weight: 600;
}
h3 {
font-size: 1.05rem;
font-weight: 600;
}
/* ---------- Links: thin cinnabar underline ---------- */
a {
color: var(--ink);
text-decoration: underline;
text-decoration-color: var(--cinnabar);
text-decoration-thickness: 1px;
text-underline-offset: 3px;
}
a:hover {
color: var(--cinnabar);
}
/* ---------- Post list: alignment as separation — two columns and whitespace, no divider lines ---------- */
.blog-posts {
list-style: none;
padding: 0;
}
.blog-posts li {
display: flex;
align-items: baseline;
gap: 1.2em;
padding: 0.3em 0;
}
/* Fixed-width dates form a tidy left column; titles align into the right column */
.blog-posts li span {
flex-shrink: 0;
min-width: 6.5em;
font-size: 0.85rem;
color: var(--ink-soft);
font-variant-numeric: tabular-nums;
}
.blog-posts li a {
text-decoration: none;
}
.blog-posts li a:hover {
color: var(--cinnabar);
}
/* ---------- Tags: no underline, quiet gray text ---------- */
.tags a {
text-decoration: none;
color: var(--ink-soft);
font-size: 0.85rem;
}
.tags a:hover {
color: var(--cinnabar);
}
/* ---------- Blockquote: cinnabar left rule ---------- */
blockquote {
margin: 1.6em 0;
padding: 0.2em 0 0.2em 1.2em;
border-left: 2px solid var(--cinnabar);
color: var(--ink-soft);
}
/* ---------- Horizontal rule ---------- */
hr {
border: none;
border-top: 1px solid var(--hairline);
margin: 2.5em auto;
width: 60%;
}
/* ---------- Code ---------- */
.highlight, .code, pre, code {
font-family: "SF Mono", Menlo, Consolas, "Sarasa Mono SC", monospace;
font-size: 0.88em;
background: var(--code-bg);
border-radius: 3px;
}
code {
padding: 0.15em 0.4em;
}
pre {
padding: 1em 1.2em;
overflow-x: auto;
line-height: 1.7;
border: 1px solid var(--hairline);
}
pre code {
padding: 0;
background: none;
}
/* ---------- Images and tables ---------- */
img {
max-width: 100%;
border-radius: 2px;
}
table {
border-collapse: collapse;
width: 100%;
font-size: 0.95em;
}
th, td {
padding: 0.5em 0.8em;
border-bottom: 1px solid var(--hairline);
text-align: left;
}
th {
font-weight: 600;
border-bottom-width: 2px;
}
/* ---------- Sub-headings (h2/h3): gray # prefix; h1 and blog title stay clean ---------- */
.post h2::before,
.page h2::before,
.post h3::before,
.page h3::before {
content: "# ";
color: var(--ink-soft);
opacity: 0.6;
font-weight: 400;
}
/* ---------- Post page: date under the title ---------- */
.post time,
time {
font-size: 0.85rem;
color: var(--ink-soft);
letter-spacing: 0.03em;
}
/* ---------- Inputs and buttons: search box, subscribe form ---------- */
/* Covers the common #searchInput search plugin, native search/text inputs,
and the email field on the subscribe page */
input[type="text"],
input[type="search"],
input[type="email"],
#searchInput {
font-family: inherit;
font-size: 0.95rem;
color: var(--ink);
background: transparent;
border: 1px solid var(--hairline);
border-radius: 3px;
padding: 0.5em 0.9em;
width: 100%;
max-width: 100%;
box-sizing: border-box;
outline: none;
transition: border-color 0.15s ease;
-webkit-appearance: none; /* Strip default iOS input chrome */
}
#searchInput {
margin-bottom: 1.5em;
}
input::placeholder {
color: var(--ink-soft);
opacity: 0.7;
}
/* Focus: the border wakes up in cinnabar, echoing the link underlines */
input[type="text"]:focus,
input[type="search"]:focus,
input[type="email"]:focus,
#searchInput:focus {
border-color: var(--cinnabar);
}
/* Remove the default clear (x) button so the field stays quiet */
input[type="search"]::-webkit-search-decoration,
input[type="search"]::-webkit-search-cancel-button {
-webkit-appearance: none;
}
button:not(.upvote-button),
input[type="submit"] {
font-family: inherit;
font-size: 0.9rem;
letter-spacing: 0.03em;
color: var(--ink-soft);
background: transparent;
border: 1px solid var(--hairline);
border-radius: 3px;
padding: 0.45em 1.2em;
cursor: pointer;
transition: color 0.15s ease, border-color 0.15s ease;
}
button:not(.upvote-button):hover,
input[type="submit"]:hover {
color: var(--cinnabar);
border-color: var(--cinnabar);
}
/* ---------- Footer ---------- */
footer {
margin-top: 3.5rem;
padding-top: 1.2rem;
border-top: 1px solid var(--hairline);
font-size: 0.85rem;
color: var(--ink-soft);
}
footer a {
color: var(--ink-soft);
}
/* Hide the "Made with Bear" attribution (the last span in the footer).
Note: only allowed for paid Bear accounts or contributors —
free accounts hiding it will get their styles reset by the platform. */
footer span:last-child {
display: none;
}
/* ---------- Mobile ---------- */
@media (max-width: 600px) {
body {
padding: 1.4rem 1.1rem;
font-size: 1.05rem;
line-height: 1.85;
}
/* Scale the heading hierarchy down one step so narrow screens don't feel crowded */
.title h1 { font-size: 1.3rem; }
h1 { font-size: 1.35rem; }
h2 { font-size: 1.15rem; }
h3 { font-size: 1.05rem; }
h1, h2, h3 { margin-top: 1.8em; }
/* Enlarge nav tap targets for thumbs */
nav {
margin-bottom: 1.8rem;
}
nav a {
display: inline-block;
padding: 0.4em 0;
margin-right: 1.4em;
}
/* Post list: date wraps above the title, row spacing increases */
.blog-posts li {
flex-direction: column;
gap: 0.1em;
padding: 0.6em 0;
}
/* Tighter code-block padding, smoother horizontal scrolling */
pre {
padding: 0.8em 1em;
font-size: 0.85em;
-webkit-overflow-scrolling: touch;
}
/* Wide tables scroll horizontally instead of breaking the page */
table {
display: block;
overflow-x: auto;
white-space: nowrap;
}
hr { width: 100%; }
}
.upvote-count {
display: none;
}
.upvote-button:disabled::after {
content: 'liked!';
}
2026-06-25 05:06:00
背包可能是除了电脑之外,我最看重的通勤装备。过去用的是 Bellroy,起了换包的念头,是因为几次大雨把包淋透之后,开始有点担心里面的电子产品。英国的雨来的太不讲道理。
新背包现在用了 10 个月,非常满意,是 21L 的 Able Carry Daily Plus。这个容量很适合通勤,不会显得臃肿,也足够放下日常所需。
它的外观比较内敛,但又与常规电脑包不同,没那么中规中矩,保留了一些辨识度。
我比较喜欢它的几个地方:

主力设备是 MacBook Pro M2 Pro,偶尔会带上 iPad mini 看书。
因为更看重电脑防护,所以我没有选择轻量化背包,而是把减重放在内部收纳上。现在会尽量使用 Cuben Fiber 材料的小物件,既轻,也不太吸水,清理起来比较方便,还能多一道防水层保护电子产品。

一些小物件:
以前总想一包多用,既希望它能完美应对高频的日常通勤,又希望它能兼顾偶尔一次的短途旅行。为此我买过大包、小包,甚至还尝试过背着徒步包通勤。
后来才明白,我总是把低频需求想得太重要。一个包当然可以尽量多用,但它首先应该服务于最高频的需求,而不是偶尔出现的那一次旅行。
2026-06-24 01:08:00
韩炳哲在《爱欲之死》里聊到:如果说有一样东西需要对当今社会日益频繁发生的「失望」负责,那么它不是不断升华的想象力,而是不断提高的期望值。
过去,人们先经历,再留下记忆和图像。现在,我们还没有真正进入一个地方,就已经在观看它最漂亮的样子:最好的光线,最干净的构图,最适合发布的角度。
经验反过来变成照片的生产过程。
现实从来不是这样。
天气可能不好,街道可能杂乱,行人可能很多,展览可能普通,餐厅可能拥挤,人可能疲惫,关系也可能尴尬。这些并不是现实的瑕疵,而是现实原本的质地。
图像世界和网络会把这些东西过滤掉,留下「最好」的瞬间,传播那些易于展示和观看的一面。
所以我们真正拿来比较的,并不是现实和想象,而是现实的完整经验,和图像筛选之后的理想片段。
当现实的粗糙感被抹平,世界就像是说明书,不再体验,而是在核对;不再认真相处磨合,而是确认对方是否符合某个清单。
摄影和其他艺术不同的地方也在于此。照片看起来最接近现实,却也最容易暴露现实的不可抵达。
摄影用最接近现实的方式,提醒我们现实无法被真正占有。
既像证据,又像告别。
2026-06-23 18:58:00
这几年陆续去了几个摄影艺术中心:上海摄影艺术中心、Fotografiska、东京都写真美术馆、伦敦 The Photographers’ Gallery,以及巴黎 MEP。它们都以摄影为核心,但给人的感觉很不同。
上海摄影艺术中心(SCOP)现在已经停业,是我摄影爱好的起点。在上海摄影和艺术市场还没那么蓬勃的时候,为爱好者们撑起了一片港湾,让更多人认识到摄影不仅是新闻、纪实、旅行… 又在西岸逐渐商业化成熟的时候,默默退出。
这种退场本身,也像是上海艺术生态变化的一部分。
它在上海的贵价平替,或许是苏州河边的 Fotografiska,有夜上海的感觉。展览、餐厅、酒吧、商店、灯光、社交氛围,尽在其中。它的布展确实一流,观展体验可能是这几个地方里最好的,灯光精致,空间细心,节奏也很顺。但它的票价和消费门槛,也让它和普通摄影爱好者之间拉开了距离。观战人群相对比较年轻潮流。
东京都写真美术馆风格严肃传统,有一种系统性:收藏、展览、研究、历史,分门别类。观展人群也很丰富,各个年龄段都有,其中老年观众相对较多。
日本的摄影文化本来就深,这个展馆是成熟摄影艺术市场的模样,有大量本土摄影师的作品。它不需要急着证明摄影是不是艺术,因为这个问题似乎早已被社会接受了。
上海 SCOP 对很多摄影艺术爱好者来说更像是启蒙,Fotografiska 则是发展的必经之路,开始商业化,东京都写真美术馆则可能是未来中国摄影展馆的模样。它不那么精致,但有足够的沉淀,也与社会达成了共识::摄影是一种值得长期保存、研究和观看的艺术形式。
The Photographers’ Gallery 在伦敦中心的一角,周围是商业、游客、剧院、咖啡馆和街头人流,可以在逛街、散步、喝咖啡之间走进去,看一组影像,然后带着思考回到街上。
我去过三次,感觉内容都很当代,共性是有「讨论感」,与公共社会议题结合的很紧密。
其中一次还看到了博客圈很知名的 Internet Phone Book。这本书收录了几百个个人网站,包括设计师、开发者、写作者、策展人和教育者… 用一种很慢、很旧式的方式,保存那些被平台和算法遮住的个人互联网。

MEP(Maison Européenne de la Photographie),中文可以译为欧洲摄影之家。与东京都写真美术馆一样很系统完整,但给人的感觉不那么严肃,更放松舒适。它也没有试图讨论和启发些什么,几个策展都在淡淡的展示历史和现实。
它的视频摄影展是我这两年看过最喜欢的,不矫揉造作,故弄玄虚,静静的能看很久。
这种平和让我舒适,摄影不仅是一种视觉刺激,而是一个日常化的艺术形式,是一种需要被保存、研究、重读的现代文化。
我平时大多还是在亚洲和英语文化圈活动,MEP 的纪念品商店给了我不少惊喜,在那里看到了很多以前不熟悉的摄影集。
其中我最喜欢的是 Éric Tabuchi 和 Nelly Monnier 的《ARN / Atlas des Régions Naturelles》,于是买了其中一本。
ARN 是一个长期摄影档案项目,记录法国约 450 个“自然区域 / pays”。不像德国的类型学摄影那样清冷,它更松更杂,关心的是人们生活得日常,那些很难被旅游叙事命名的地方,如何构成一个国家的纹理。索引网站也做的很漂亮。


