<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Tamak</title>
    <link>https://tamak.xyz/</link>
    <description>Recent content on Tamak</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    <lastBuildDate>Thu, 14 May 2026 10:30:00 +0800</lastBuildDate>
    <atom:link href="https://tamak.xyz/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title></title>
      <link>https://tamak.xyz/notes/quick-thought/</link>
      <pubDate>Thu, 14 May 2026 10:30:00 +0800</pubDate>
      <guid>https://tamak.xyz/notes/quick-thought/</guid>
      <description>&lt;p&gt;今天在咖啡馆写代码的时候突然想到，Hugo 的 content 类型其实很像数据库的表设计——每种内容类型有固定的字段（front matter），然后有独立的列表和详情视图（list.html / single.html）。MVC 框架做了这么多年的抽象，静态站点生成器用文件系统就实现了类似的模式，很优雅。&lt;/p&gt;</description>
    </item>
    <item>
      <title>你好，世界</title>
      <link>https://tamak.xyz/posts/hello-world/</link>
      <pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate>
      <guid>https://tamak.xyz/posts/hello-world/</guid>
      <description>&lt;p&gt;欢迎来到我的个人网站。这是我用 Hugo 搭建的第一篇文章。&lt;/p&gt;&#xA;&lt;p&gt;这里将会记录我的思考、学习笔记和创作过程。从零搭建一个网站本身就是一件有趣的事情——从选择静态站点生成器，到设计页面布局，到配置部署流程，每一步都是学习。&lt;/p&gt;&#xA;&lt;p&gt;希望你能在这里找到有价值的内容。&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://tamak.xyz/notes/wukong/</link>
      <pubDate>Wed, 13 May 2026 22:15:00 +0800</pubDate>
      <guid>https://tamak.xyz/notes/wukong/</guid>
      <description>&lt;p&gt;看完《黑神话悟空》的实机演示，国产 3A 终于不是一句空话了。美术风格太顶了，每一帧都是壁纸。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hugo 静态站点搭建指北</title>
      <link>https://tamak.xyz/posts/hugo-guide/</link>
      <pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate>
      <guid>https://tamak.xyz/posts/hugo-guide/</guid>
      <description>&lt;p&gt;从 Jekyll 到 Gatsby 再到 Hugo，我最终选择了 Hugo 作为这个网站的基础设施。这篇文章聊聊我的选型思路和实际搭建过程中遇到的问题。&lt;/p&gt;&#xA;&lt;p&gt;Hugo 最大的优势是快——不仅是构建速度快，学习曲线也相对平缓。对于个人站点来说，零依赖的静态 HTML 比任何 SPA 方案都更适合。&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://tamak.xyz/notes/tools/</link>
      <pubDate>Tue, 12 May 2026 09:00:00 +0800</pubDate>
      <guid>https://tamak.xyz/notes/tools/</guid>
      <description>&lt;p&gt;好的工具是那些你用了半年后，还需要时不时查文档发现新功能的工具。Vim、ffmpeg、jq 都是这种。&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://tamak.xyz/notes/summer/</link>
      <pubDate>Sun, 10 May 2026 18:30:00 +0800</pubDate>
      <guid>https://tamak.xyz/notes/summer/</guid>
      <description>&lt;p&gt;夏天到了，窗外的蝉鸣和白噪音简直是天然的专注音乐。比任何 focus playlist 都好用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>第一期：为什么要做播客</title>
      <link>https://tamak.xyz/podcast/episode-1/</link>
      <pubDate>Sun, 10 May 2026 00:00:00 +0000</pubDate>
      <guid>https://tamak.xyz/podcast/episode-1/</guid>
      <description>&lt;p&gt;在这一期节目中，我聊了聊为什么决定开始做播客，以及我对播客这种媒介的理解。&lt;/p&gt;&#xA;&lt;p&gt;做播客的初衷很简单——有些想法写下来太正式，发社交媒体又太碎片。音频是一个很好的中间地带，可以展开聊一个话题，又保留了对话的自然感。&lt;/p&gt;&#xA;&lt;p&gt;后续节目会涉及技术、阅读、游戏等话题，欢迎订阅。&lt;/p&gt;</description>
    </item>
    <item>
      <title>我的创作工具链</title>
      <link>https://tamak.xyz/posts/toolchain/</link>
      <pubDate>Sun, 10 May 2026 00:00:00 +0000</pubDate>
      <guid>https://tamak.xyz/posts/toolchain/</guid>
      <description>&lt;p&gt;经常有朋友问我用什么工具写代码、录视频、做播客。这篇整理一下我目前在用的工具链。&lt;/p&gt;&#xA;&lt;p&gt;核心原则很简单：够用就好，不折腾。每个工具都应该是生产力的延伸，而不是新的 distraction。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tampermonkey 脚本推荐</title>
      <link>https://tamak.xyz/shares/tampermonkey/</link>
      <pubDate>Fri, 08 May 2026 00:00:00 +0000</pubDate>
      <guid>https://tamak.xyz/shares/tampermonkey/</guid>
      <description></description>
    </item>
    <item>
      <title>城市角落</title>
      <link>https://tamak.xyz/album/urban-photography/</link>
      <pubDate>Fri, 08 May 2026 00:00:00 +0000</pubDate>
      <guid>https://tamak.xyz/album/urban-photography/</guid>
      <description>&lt;p&gt;在城市里游走时拍下的一些瞬间。我喜欢捕捉那些被人忽略的角落——老旧的楼梯、斑驳的墙面、午后的光影。这些画面没有宏大的叙事，但自有一种安静的力量。&lt;/p&gt;</description>
    </item>
    <item>
      <title>《如何阅读一本书》</title>
      <link>https://tamak.xyz/shares/book-recommendation/</link>
      <pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate>
      <guid>https://tamak.xyz/shares/book-recommendation/</guid>
      <description></description>
    </item>
    <item>
      <title>播客麦克风选购指南</title>
      <link>https://tamak.xyz/shares/mic-guide/</link>
      <pubDate>Mon, 04 May 2026 00:00:00 +0000</pubDate>
      <guid>https://tamak.xyz/shares/mic-guide/</guid>
      <description></description>
    </item>
    <item>
      <title>精选故事</title>
      <link>https://tamak.xyz/projects/memory-website/stories/</link>
      <pubDate>Mon, 15 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://tamak.xyz/projects/memory-website/stories/</guid>
      <description>&lt;hr&gt;&#xA;&lt;h2 id=&#34;我长大的那条弄堂&#34;&gt;我长大的那条弄堂&lt;/h2&gt;&#xA;&lt;p&gt;虹口的弄堂，现在大多拆了。但闭上眼睛，我还闻得到那里的气味——清晨煤炉的烟火味，夏天井水里冰镇的西瓜，隔壁阿婆晒的梅干菜。弄堂不长，从头走到尾只要五分钟，但那五分钟里装下了一整个世界。&lt;/p&gt;&#xA;&lt;p&gt;我们住在二楼，木楼梯踩上去嘎吱响。窗户对着天井，晾衣杆上永远挂着各家各色的衣服。到了傍晚，收音机里传出评弹的声音，大人们搬出竹椅在弄堂口乘凉，小孩子满世界跑。那时候日子不富裕，但邻里之间像一家人。谁家包了馄饨，总要端一碗给隔壁。谁家孩子没人看，总有阿婆帮忙照应。&lt;/p&gt;&#xA;&lt;p&gt;弄堂里还有个老虎灶，专门卖开水。一分钱一壶。每天傍晚，我拎着暖水瓶去打水，排队的功夫能听一肚子闲话——张家的儿子考上大学了，李家的媳妇生了个大胖小子，王家阿婆的猫又跑丢了。一个小小的老虎灶，就是整个弄堂的新闻中心。&lt;/p&gt;&#xA;&lt;p&gt;现在的年轻人住进了高楼，关上门谁都不认识谁。我有时候想，舒适是舒适了，但有些东西，弄堂没了也就没了。那种推开门就有热气腾腾的生活涌进来的感觉，那种一个人有事整条街都来帮忙的暖意——这些不是电梯和中央空调能替代的。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://picsum.photos/seed/shikumen/1200/600&#34; alt=&#34;老弄堂的石库门&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;海峡那头的信&#34;&gt;海峡那头的信&lt;/h2&gt;&#xA;&lt;p&gt;1962 年，我收到了一封从香港转寄来的信。信封已经皱得不成样子，邮票贴了三张。是我中学最好的朋友——林淑珍写来的。她四九年跟家人去了台湾，从此断了音讯。&lt;/p&gt;&#xA;&lt;p&gt;那封信我读了不知多少遍。她说她在台北也做了老师，教国文。她说台北的冬天也冷，但不像上海那样湿。她说她很想念我，想再跟我一起去城隍庙吃小笼馒头。信的最后一行写着：&amp;ldquo;秀兰，你还记得我们在一中银杏树下许的愿吗？&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;我记得。我们约好了要一起当老师，我们做到了——只是隔了一道海峡。&lt;/p&gt;&#xA;&lt;p&gt;后来，我们断断续续通了三十多年的信。信里不谈政治，只谈书、谈花、谈学生、谈儿女。每一封信都要辗转几个月才能到，有时候信到了，信封已经快烂了。但那薄薄几页纸，是我们在各自的世界里向对方伸出的手。&lt;/p&gt;&#xA;&lt;p&gt;九十年代，她终于回了一趟上海。我们在外滩见的面，两个老太太抱在一起哭。她头发白了，牙齿也缺了几颗，但笑起来还是十六岁的样子。那天我带她去吃了小笼馒头，和四十年前说好的一样。&lt;/p&gt;&#xA;&lt;p&gt;这个故事我讲给孙女听，她说奶奶你们太不容易了。我说，不容易是常态，但守住那些珍贵的人和事，就是生活的意义。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://picsum.photos/seed/old-letters/1200/600&#34; alt=&#34;旧信件与老照片&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;教了三代人&#34;&gt;教了三代人&lt;/h2&gt;&#xA;&lt;p&gt;教学生涯里最奇妙的事——我教过一家三代人。&lt;/p&gt;&#xA;&lt;p&gt;先是七十年代教过一个男孩周建国，他聪明但调皮，上课总坐不住。我没有批评他，而是让他当了语文课代表。这孩子一下子就上进了——他觉得被信任了，就要对得起这份信任。后来他考上了大学，做了工程师。&lt;/p&gt;&#xA;&lt;p&gt;九十年代，他的女儿周小燕又分到了我班上。我一看名字和地址，心里一动，下课问她：&amp;ldquo;你爸爸是不是叫周建国？&amp;ldquo;小姑娘瞪大了眼睛，拼命点头。我说，你爸爸当年坐第三排靠窗那个位置。&lt;/p&gt;&#xA;&lt;p&gt;再后来，二〇一几年，周小燕带着她的儿子来看我，说想让儿子也叫我一声陈老师。我说，别叫陈老师了，叫我奶奶吧。&lt;/p&gt;&#xA;&lt;p&gt;这样的故事，当老师的人一辈子总能遇到几个。它们让我觉得，站在讲台上的那四十年，值了。教书不是在黑板上写字，是把一样东西放进另一个人心里——然后看着它发芽，在很多年后开出花来。&lt;/p&gt;</description>
    </item>
    <item>
      <title>人生时间线</title>
      <link>https://tamak.xyz/projects/memory-website/timeline/</link>
      <pubDate>Mon, 15 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://tamak.xyz/projects/memory-website/timeline/</guid>
      <description>&lt;div class=&#34;timeline-flow&#34;&gt;&#xA;&lt;div class=&#34;timeline-panel panel-left&#34;&gt;&#xA;&lt;div class=&#34;timeline-year-marker&#34;&gt;1936&lt;/div&gt;&#xA;&lt;div class=&#34;timeline-content-card&#34;&gt;&#xA;&lt;div class=&#34;timeline-card-img&#34;&gt;&lt;img src=&#34;https://picsum.photos/seed/shanghai-alley/800/600&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/div&gt;&#xA;&lt;div class=&#34;timeline-card-text&#34;&gt;&lt;h3&gt;弄堂里的童年&lt;/h3&gt;&lt;p&gt;我出生在上海虹口的一条弄堂里。那年初夏，弄堂口的栀子花开得正好。父亲在纺织厂做账房先生，母亲在里弄小学教书。每天清晨，弄堂里此起彼伏的吆喝声——卖豆浆的、修棕绷的、磨剪刀的——那是我最早的记忆。弄堂不长，从头走到尾只要五分钟，但那五分钟里装下了一整个世界。&lt;/p&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;timeline-panel panel-right&#34;&gt;&#xA;&lt;div class=&#34;timeline-year-marker&#34;&gt;1949&lt;/div&gt;&#xA;&lt;div class=&#34;timeline-content-card&#34;&gt;&#xA;&lt;div class=&#34;timeline-card-img&#34;&gt;&lt;img src=&#34;https://picsum.photos/seed/vintage-school/800/600&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/div&gt;&#xA;&lt;div class=&#34;timeline-card-text&#34;&gt;&lt;h3&gt;新学堂，新时代&lt;/h3&gt;&lt;p&gt;十三岁那年，我考进了市立第一女子中学。校园里那棵老银杏树，秋天铺满一地金黄。就是在那里，我第一次读到了鲁迅、冰心、巴金。语文老师姓周，她说我的作文&#34;有灵气&#34;，那句话我记了一辈子——后来自己也做了语文老师。&lt;/p&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;timeline-panel panel-left&#34;&gt;&#xA;&lt;div class=&#34;timeline-year-marker&#34;&gt;1958&lt;/div&gt;&#xA;&lt;div class=&#34;timeline-content-card&#34;&gt;&#xA;&lt;div class=&#34;timeline-card-img&#34;&gt;&lt;img src=&#34;https://picsum.photos/seed/classroom-blackboard/800/600&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/div&gt;&#xA;&lt;div class=&#34;timeline-card-text&#34;&gt;&lt;h3&gt;第一堂课&lt;/h3&gt;&lt;p&gt;从师范学院毕业后，我被分配到闸北一所初中教语文。第一次站上讲台，手心里全是汗，台下四十多双眼睛亮晶晶地看着我。我教的第一篇课文是朱自清的《背影》。读到最后一段，教室里安静极了，有几个女生红了眼眶。那一刻我知道，这就是我要做一辈子的事。&lt;/p&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;timeline-panel panel-right&#34;&gt;&#xA;&lt;div class=&#34;timeline-year-marker&#34;&gt;1966&lt;/div&gt;&#xA;&lt;div class=&#34;timeline-content-card&#34;&gt;&#xA;&lt;div class=&#34;timeline-card-img&#34;&gt;&lt;img src=&#34;https://picsum.photos/seed/tea-couple/800/600&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/div&gt;&#xA;&lt;div class=&#34;timeline-card-text&#34;&gt;&lt;h3&gt;成家 · 风雨&lt;/h3&gt;&lt;p&gt;那年我和老陈结婚了。他在造船厂做工程师。婚礼很简单——两家人吃了顿饭，买了张新床，就算成了家。随后那些年不容易，但我们互相扶持着走过来了。老陈话不多，但每晚都会给我泡一杯茶，放在备课的桌角。婚姻这个东西，说是山盟海誓，其实就是一杯茶。凉了有人给你续，就够了。&lt;/p&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;timeline-panel panel-left&#34;&gt;&#xA;&lt;div class=&#34;timeline-year-marker&#34;&gt;1979&lt;/div&gt;&#xA;&lt;div class=&#34;timeline-content-card&#34;&gt;&#xA;&lt;div class=&#34;timeline-card-img&#34;&gt;&lt;img src=&#34;https://picsum.photos/seed/graduation-class/800/600&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/div&gt;&#xA;&lt;div class=&#34;timeline-card-text&#34;&gt;&lt;h3&gt;黄金时代&lt;/h3&gt;&lt;p&gt;一切重新好起来了。我回到了热爱的讲台，一下子觉得浑身都是劲。那十来年是我教书生涯最充实的日子——带了好几届毕业班，学生的作文拿了市里的奖，我也评上了高级教师。更重要的是，课堂重新有了生气，大家敢想敢说，敢于在作文里写真心话。&lt;/p&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;timeline-panel panel-right&#34;&gt;&#xA;&lt;div class=&#34;timeline-year-marker&#34;&gt;1996&lt;/div&gt;&#xA;&lt;div class=&#34;timeline-content-card&#34;&gt;&#xA;&lt;div class=&#34;timeline-card-img&#34;&gt;&lt;img src=&#34;https://picsum.photos/seed/writing-journal/800/600&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/div&gt;&#xA;&lt;div class=&#34;timeline-card-text&#34;&gt;&lt;h3&gt;退休不褪色&lt;/h3&gt;&lt;p&gt;退休那天，学生们给我办了一场欢送会，黑板上写着&#34;陈老师辛苦了&#34;。有个男生站起来说，是我让他爱上了语文。我当场就哭了。回到家，老陈递给我一本崭新的笔记本，说：&#34;你现在可以写自己的东西了。&#34;从那以后，我开始写诗、写回忆、写菜谱，不知不觉写了十几本。从教学生写作，到自己成为一个写作者——这是一种奇妙的轮回。&lt;/p&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;timeline-panel panel-left&#34;&gt;&#xA;&lt;div class=&#34;timeline-year-marker&#34;&gt;2008&lt;/div&gt;&#xA;&lt;div class=&#34;timeline-content-card&#34;&gt;&#xA;&lt;div class=&#34;timeline-card-img&#34;&gt;&lt;img src=&#34;https://picsum.photos/seed/europe-travel/800/600&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/div&gt;&#xA;&lt;div class=&#34;timeline-card-text&#34;&gt;&lt;h3&gt;第一次远行&lt;/h3&gt;&lt;p&gt;孙女大学毕业那年，带我和老陈去了欧洲。在巴黎，我第一次站在埃菲尔铁塔下面，抬头看它比想象中高大太多。在罗马的许愿池，孙女拉着我一起投了硬币。在威尼斯坐船，在佛罗伦萨看大卫像，在因特拉肯看雪山。回来以后，我在日记里写了整整十七页。七十多岁还有这样的第一次，真好。&lt;/p&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;timeline-panel panel-right&#34;&gt;&#xA;&lt;div class=&#34;timeline-year-marker&#34;&gt;2024&lt;/div&gt;&#xA;&lt;div class=&#34;timeline-content-card&#34;&gt;&#xA;&lt;div class=&#34;timeline-card-img&#34;&gt;&lt;img src=&#34;https://picsum.photos/seed/family-cooking/800/600&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/div&gt;&#xA;&lt;div class=&#34;timeline-card-text&#34;&gt;&lt;h3&gt;家的味道&lt;/h3&gt;&lt;p&gt;孙女帮我把这些年收集的菜谱整理成了一本小书——手写影印版，配上家里的老照片。书只印了一百本，送给亲戚朋友。他们说，看着看着就哭了。其实不是菜多好，是那些菜里有时间、有故事、有一个家。现在我还在写，每天写一点。文字帮我记住那些不该忘记的事，也让我的孩子们知道，他们从哪里来。&lt;/p&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>珍藏物品</title>
      <link>https://tamak.xyz/projects/memory-website/treasures/</link>
      <pubDate>Mon, 15 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://tamak.xyz/projects/memory-website/treasures/</guid>
      <description>&lt;section class=&#34;model-3d-section&#34;&gt;&#xA;  &lt;div class=&#34;model-3d-header&#34;&gt;&#xA;    &lt;h2 class=&#34;museum-section-title&#34;&gt;3D 珍藏馆&lt;/h2&gt;&#xA;    &lt;p class=&#34;model-3d-hint&#34;&gt;拖拽鼠标旋转 · 滚轮缩放 · 右键平移&lt;/p&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;model-3d-layout&#34;&gt;&#xA;    &#xA;    &lt;div class=&#34;model-3d-viewer&#34;&gt;&#xA;      &lt;div class=&#34;model-3d-pedestal&#34;&gt;&#xA;        &lt;div class=&#34;model-3d-canvas-wrap&#34; id=&#34;model-3d-container&#34;&gt;&#xA;          &lt;canvas id=&#34;model-3d-canvas&#34;&gt;&lt;/canvas&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;model-3d-pedestal-base&#34;&gt;&lt;/div&gt;&#xA;      &lt;/div&gt;&#xA;      &lt;div class=&#34;model-3d-controls-hint&#34;&gt;&#xA;        &lt;span&gt;🖱 拖拽旋转&lt;/span&gt;&#xA;        &lt;span&gt;🔍 滚轮缩放&lt;/span&gt;&#xA;      &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;    &#xA;    &lt;div class=&#34;model-3d-info&#34;&gt;&#xA;      &lt;span class=&#34;treasure-label&#34;&gt;清代 · 景德镇窑&lt;/span&gt;&#xA;      &lt;h2&gt;粉彩牡丹纹瓷瓶&lt;/h2&gt;&#xA;      &lt;p&gt;这是一件清代粉彩牡丹纹瓷瓶，曾祖母的陪嫁之物。瓶身绘有盛开的牡丹，寓意富贵吉祥。釉面温润如玉，金线勾勒的花瓣在光线下若隐若现。历经百年，依然完好如初，是家中代代相传的珍宝。&lt;/p&gt;&#xA;      &lt;div class=&#34;model-3d-meta&#34;&gt;&#xA;        &lt;div class=&#34;model-3d-meta-item&#34;&gt;&#xA;          &lt;span class=&#34;meta-label&#34;&gt;材质&lt;/span&gt;&#xA;          &lt;span class=&#34;meta-value&#34;&gt;陶瓷 · 粉彩&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;model-3d-meta-item&#34;&gt;&#xA;          &lt;span class=&#34;meta-label&#34;&gt;产地&lt;/span&gt;&#xA;          &lt;span class=&#34;meta-value&#34;&gt;景德镇&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;model-3d-meta-item&#34;&gt;&#xA;          &lt;span class=&#34;meta-label&#34;&gt;年代&lt;/span&gt;&#xA;          &lt;span class=&#34;meta-value&#34;&gt;约1890年&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;      &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/section&gt;&#xA;&#xA;&lt;script type=&#34;importmap&#34;&gt;&#xA;{&#xA;  &#34;imports&#34;: {&#xA;    &#34;three&#34;: &#34;https://unpkg.com/three@0.160.0/build/three.module.js&#34;,&#xA;    &#34;three/addons/&#34;: &#34;https://unpkg.com/three@0.160.0/examples/jsm/&#34;&#xA;  }&#xA;}&#xA;&lt;/script&gt;&#xA;&#xA;&lt;script type=&#34;module&#34;&gt;&#xA;import * as THREE from &#39;three&#39;;&#xA;import { OrbitControls } from &#39;three/addons/controls/OrbitControls.js&#39;;&#xA;&#xA;(function(){&#xA;  var container = document.getElementById(&#39;model-3d-container&#39;);&#xA;  var canvas = document.getElementById(&#39;model-3d-canvas&#39;);&#xA;  if (!container || !canvas) return;&#xA;&#xA;  var width = container.clientWidth;&#xA;  var height = container.clientHeight || 560;&#xA;&#xA;  var scene = new THREE.Scene();&#xA;  var renderer = new THREE.WebGLRenderer({ canvas: canvas, antialias: true, alpha: true });&#xA;  renderer.setSize(width, height, false);&#xA;  renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));&#xA;  renderer.shadowMap.enabled = true;&#xA;  renderer.shadowMap.type = THREE.PCFSoftShadowMap;&#xA;  renderer.toneMapping = THREE.ACESFilmicToneMapping;&#xA;  renderer.toneMappingExposure = 1.1;&#xA;&#xA;  var camera = new THREE.PerspectiveCamera(40, width / Math.max(height, 1), 0.1, 100);&#xA;  camera.position.set(3.2, 1.8, 4.5);&#xA;  camera.lookAt(0, 0.4, 0);&#xA;&#xA;  var controls = new OrbitControls(camera, renderer.domElement);&#xA;  controls.target.set(0, 0.4, 0);&#xA;  controls.enableDamping = true;&#xA;  controls.dampingFactor = 0.08;&#xA;  controls.minDistance = 2.2;&#xA;  controls.maxDistance = 8;&#xA;  controls.maxPolarAngle = Math.PI * 0.7;&#xA;  controls.minPolarAngle = 0.3;&#xA;  controls.autoRotate = true;&#xA;  controls.autoRotateSpeed = 0.6;&#xA;  controls.update();&#xA;&#xA;  var ambientLight = new THREE.AmbientLight(&#39;#f5efe0&#39;, 1.8);&#xA;  scene.add(ambientLight);&#xA;&#xA;  var keyLight = new THREE.DirectionalLight(&#39;#ffffff&#39;, 4.5);&#xA;  keyLight.position.set(5, 6, 4);&#xA;  keyLight.castShadow = true;&#xA;  keyLight.shadow.mapSize.width = 1024;&#xA;  keyLight.shadow.mapSize.height = 1024;&#xA;  keyLight.shadow.camera.near = 0.5;&#xA;  keyLight.shadow.camera.far = 30;&#xA;  keyLight.shadow.camera.left = -8;&#xA;  keyLight.shadow.camera.right = 8;&#xA;  keyLight.shadow.camera.top = 8;&#xA;  keyLight.shadow.camera.bottom = -8;&#xA;  keyLight.shadow.bias = -0.0001;&#xA;  scene.add(keyLight);&#xA;&#xA;  var fillLight = new THREE.DirectionalLight(&#39;#d4c9b5&#39;, 1.8);&#xA;  fillLight.position.set(-3, 2, -2);&#xA;  scene.add(fillLight);&#xA;&#xA;  var rimLight = new THREE.DirectionalLight(&#39;#ffffff&#39;, 2.2);&#xA;  rimLight.position.set(0, 3, -4);&#xA;  scene.add(rimLight);&#xA;&#xA;  var groundGeo = new THREE.CircleGeometry(4, 64);&#xA;  var groundMat = new THREE.MeshStandardMaterial({ color: &#39;#e8e2d5&#39;, roughness: 0.65, metalness: 0.02 });&#xA;  var ground = new THREE.Mesh(groundGeo, groundMat);&#xA;  ground.rotation.x = -Math.PI / 2;&#xA;  ground.position.y = -1.2;&#xA;  ground.receiveShadow = true;&#xA;  scene.add(ground);&#xA;&#xA;  var pedestalGeo = new THREE.CylinderGeometry(0.22, 0.26, 0.16, 48);&#xA;  var pedestalMat = new THREE.MeshStandardMaterial({ color: &#39;#3a3028&#39;, roughness: 0.3, metalness: 0.15 });&#xA;  var pedestal = new THREE.Mesh(pedestalGeo, pedestalMat);&#xA;  pedestal.position.y = -0.72;&#xA;  pedestal.castShadow = true;&#xA;  pedestal.receiveShadow = true;&#xA;  scene.add(pedestal);&#xA;&#xA;  var pedestalTop = new THREE.CylinderGeometry(0.24, 0.22, 0.06, 48);&#xA;  var pedestalTopM = new THREE.MeshStandardMaterial({ color: &#39;#b8973e&#39;, roughness: 0.2, metalness: 0.7 });&#xA;  var topRing = new THREE.Mesh(pedestalTop, pedestalTopM);&#xA;  topRing.position.y = -0.61;&#xA;  scene.add(topRing);&#xA;&#xA;  var vaseGroup = new THREE.Group();&#xA;  var profile = [];&#xA;  for (var i = 0; i &lt;= 1; i += 0.02) {&#xA;    var h = i;&#xA;    var r;&#xA;    if (h &lt; 0.08) { r = 0.28 + h * 1.2; }&#xA;    else if (h &lt; 0.35) { r = 0.38 + Math.sin((h - 0.08) / 0.27 * Math.PI) * 0.2; }&#xA;    else if (h &lt; 0.55) { r = 0.40 + Math.sin((h - 0.35) / 0.2 * Math.PI) * 0.08; }&#xA;    else if (h &lt; 0.78) { r = 0.28 - (h - 0.55) * 0.35; }&#xA;    else { r = 0.2 + Math.sin((h - 0.78) / 0.22 * Math.PI * 0.5) * 0.06; }&#xA;    profile.push(new THREE.Vector2(r, h * 0.08 - 0.55));&#xA;  }&#xA;&#xA;  var vaseBodyGeo = new THREE.LatheGeometry(profile, 72);&#xA;  var vaseBodyMat = new THREE.MeshStandardMaterial({ color: &#39;#e8dcc8&#39;, roughness: 0.22, metalness: 0.05 });&#xA;  var vaseBody = new THREE.Mesh(vaseBodyGeo, vaseBodyMat);&#xA;  vaseBody.castShadow = true;&#xA;  vaseBody.receiveShadow = true;&#xA;  vaseGroup.add(vaseBody);&#xA;&#xA;  var rimGeo = new THREE.TorusGeometry(0.22, 0.012, 16, 72);&#xA;  var rimMat = new THREE.MeshStandardMaterial({ color: &#39;#b8973e&#39;, roughness: 0.15, metalness: 0.85 });&#xA;  var rim = new THREE.Mesh(rimGeo, rimMat);&#xA;  rim.position.y = -0.03;&#xA;  rim.rotation.x = Math.PI / 2;&#xA;  vaseGroup.add(rim);&#xA;&#xA;  var baseBand = new THREE.TorusGeometry(0.26, 0.01, 16, 72);&#xA;  var band = new THREE.Mesh(baseBand, rimMat);&#xA;  band.position.y = -0.53;&#xA;  band.rotation.x = Math.PI / 2;&#xA;  vaseGroup.add(band);&#xA;&#xA;  var midRingGeo = new THREE.TorusGeometry(0.37, 0.008, 16, 72);&#xA;  var midRing = new THREE.Mesh(midRingGeo, rimMat);&#xA;  midRing.position.y = -0.22;&#xA;  midRing.rotation.x = Math.PI / 2;&#xA;  vaseGroup.add(midRing);&#xA;&#xA;  vaseGroup.position.y = 0.72;&#xA;  scene.add(vaseGroup);&#xA;&#xA;  var spotLight = new THREE.SpotLight(&#39;#ffffff&#39;, 12, 10, Math.PI / 5, 0.3, 0.5);&#xA;  spotLight.position.set(2, 4, 3);&#xA;  spotLight.castShadow = true;&#xA;  spotLight.shadow.mapSize.width = 512;&#xA;  spotLight.shadow.mapSize.height = 512;&#xA;  scene.add(spotLight);&#xA;&#xA;  function animate(){&#xA;    requestAnimationFrame(animate);&#xA;    controls.update();&#xA;    renderer.render(scene, camera);&#xA;  }&#xA;  animate();&#xA;&#xA;  window.addEventListener(&#39;resize&#39;, function(){&#xA;    var w = container.clientWidth;&#xA;    var h = container.clientHeight || 560;&#xA;    if (Math.abs(w - width) &gt; 2 || Math.abs(h - height) &gt; 2) {&#xA;      width = w;&#xA;      height = h;&#xA;      renderer.setSize(w, h, false);&#xA;      camera.aspect = w / Math.max(h, 1);&#xA;      camera.updateProjectionMatrix();&#xA;    }&#xA;  });&#xA;})();&#xA;&lt;/script&gt;&#xA;&#xA;&lt;div class=&#34;treasures-showcase&#34;&gt;&#xA;&lt;div class=&#34;treasure-item-full&#34;&gt;&#xA;&lt;div class=&#34;treasure-item-img&#34;&gt;&#xA;&lt;img src=&#34;https://picsum.photos/seed/fountain-pen-vintage/800/600&#34; alt=&#34;父亲的派克钢笔&#34; loading=&#34;lazy&#34;&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;treasure-item-text&#34;&gt;&#xA;&lt;span class=&#34;treasure-label&#34;&gt;1930年代 · 上海&lt;/span&gt;&#xA;&lt;h2&gt;父亲的派克钢笔&lt;/h2&gt;&#xA;&lt;p&gt;这是父亲留给我的派克钢笔，笔尖是 14K 金的。父亲在纺织厂做了大半辈子账房先生，用这支笔记了几十年账，每一笔都工工整整。他说，做账如做人，一笔一划都得对得起良心。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
