<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on The Great Garage</title><link>https://blog.hgao.net/post/</link><description>Recent content in Posts on The Great Garage</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Sun, 30 Apr 2023 +0000</lastBuildDate><atom:link href="/post/" rel="self" type="application/rss+xml"/><item><title>硅谷之夜——里克天文台银河摄影笔记</title><link>https://blog.hgao.net/post/milky-way-timelapse-at-lick-observatory/</link><pubDate>Sun, 30 Apr 2023 +0000</pubDate><guid>https://blog.hgao.net/post/milky-way-timelapse-at-lick-observatory/</guid><description>&lt;p&gt;把博客接入 Notion 之后，在手机上利用碎片时间写作的机会多了起来，于是开始渐渐补完过去几年存下的文章草稿。这篇文章是我一直想发表的一篇，写于二〇二一年七月，发表于二〇二三年四月。以下是正文：&lt;/p&gt;
&lt;p&gt;七月初的一天晚上，我驱车驶上圣何塞东边的汉密尔顿山，在里克天文台（Lick Observatory）进行了六个小时的银河拍摄。&lt;/p&gt;
&lt;p&gt;拍摄美丽的银河照片一直是我的理想。似乎是很久以前，就知晓银河的存在，但活了二十多年，都未曾亲眼目睹。二〇一七年的冬天，尚在洛杉矶读书的老婆和我听说约书亚树国家公园很适合观测银河，兴冲冲地开车过去，却只看到一片星辰。事后才明白，明亮的银心在冬天是看不到的。&lt;/p&gt;
&lt;p&gt;直到二〇一九年的秋天和朋友们旅行，在加州北部的拉森国家公园，终于见到了璀璨的夏季银河。几天后继续北上俄勒冈州，来到星空摄影圣地——火山口湖国家公园，与朋友们席地而躺，观赏了一夜的星空，可谓是把银河看圆满了。那时没有高端器材，也没有星空摄影的知识，但仍然用半幅单反搭配一颗 28 毫米 F2.8 手动对焦镜头，拍摄到了粗糙但明显的银河影像。感谢我的好同事 Jeff，在我启程之前赠送了这颗他从 Goodwill 上花五美元淘来的宝藏镜头。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://live.staticflickr.com/65535/52863850444_b3f3ea5787_k.jpg" alt="IMAGE"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;（火山口湖上方的银河。09/01/2019，Nikon D3400，28mm，F2.8，20s，ISO6400。使用 Adobe Lightroom 6.3.1 AI 降噪）&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;一个月后，我收到了老婆送的索尼 A7iii 全画幅相机，后来又买了腾龙 17-28 毫米 F2.8 广角镜头。有了称手的器材，却再没遇到合适的机会拍摄银河。直到刚刚过去的独立日，老婆飞去拉斯维加斯见朋友，我想着自己找点事做，那两天又适逢新月，于是我决定独自去里克天文台一展身手。&lt;/p&gt;
&lt;p&gt;为什么选择里克天文台呢？除了具备天文摄影所需的暗光和天气条件外，这个场所时时刻刻「勾引」着我。平时行车在圣克拉拉东西向的大路上，无论是 I-280、CA-101 或 CA-237 高速，还是 El Camino Real, Steven Creeks Boulevard 这样的本地路段，总能看到目光所及尽头汉密尔顿山峰上屹立的白色圆顶建筑群。这么小的建筑，离我有多远呢？站在那里，也能看到我此时此刻所在的位置吗？我常会这么想。所以，在决定拍摄位置时，里克天文台立即成为了首选。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://live.staticflickr.com/65535/52864160023_7d059b7b84_b.jpg" alt="IMAGE"&gt;&lt;/p&gt;
&lt;p&gt;（从 Homestead Road 远眺山顶的里克天文台（红框内））&lt;/p&gt;
&lt;p&gt;时间地点题材决定了，那怎么拍呢？我想尝试一点新的东西：拍摄日转夜的延时。在查询了一些教程之后，那天下午四点，我带上拍摄设备、保暖衣物、沙滩椅、Kindle，顺路在汉堡王买了晚餐，便向那一小撮白点进发。路并不是一直向东开，再加上建筑和树木遮挡，所以天文台时隐时现。大约二十分钟后，我开到了山脚下，天文台看上去已经比在家门口大了许多。&lt;/p&gt;
&lt;p&gt;上山的路九曲十八弯。还好是我一个人开，若是老婆坐在副驾，一定被甩得叫苦不迭。我开过以曲折著称的夏威夷茂宜岛哈纳之路，但和这条路相比都略微逊色。十五英里的山路花了四十分钟。途中车辆稀疏，只交会了几辆跑山的跑车。偶尔瞄到窗外，发现城市已经被远远抛在脚下。&lt;/p&gt;
&lt;p&gt;就这样开到了山顶。可惜天文台关闭，只能继续向前开。停到远处一片空地。关闭发动机的一刻，突然发觉周围之静谧，令人毛骨悚然。我从未在室外感受过如此的寂静。仔细听过之后，会感知到飞虫振翅的轻微嗡嗡声。城市在一层薄薄的云雾彼端，被完全消音。我努力寻找在山脚下远眺天文台的那个我，一无所获。南湾所有的楼房和道路都坍缩成了点和线。从家里仰望天文台，觉得很近。从天文台俯视硅谷，觉得很远。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://live.staticflickr.com/65535/51309731637_5d673f2bec_k.jpg" alt="IMAGE"&gt;&lt;/p&gt;
&lt;p&gt;吃了点东西，开回天文台附近，找到了路边的几个停车位。有另两辆车也停在那里，是来这里玩的游客，不久后就下山了。后来三三两两来了几对情侣，也是来了一会儿就走了。没有人和我一样等待银河。这段时间，我用手机上 PhotoPills app 的增强现实功能估算银河升起的方向，构思取景位置和角度，然而一直没找到满意的。不是银河被遮挡，就是前景不好看，或者离马路太近太危险，只得找一个差强人意的地方将就。&lt;/p&gt;
&lt;p&gt;一直等到八点，太阳快落了。我拍了几张落日照片打发时间。阳光照在湾上，一片橙黄。这时，一对情侣来看落日。他们无视了「private road，no trepass 」的标志，沿着一条小路往天文台方向走，登上其中一座小天文台的环形室外瞭望台。那边的景色很好，他们向西而坐，可以看到完整的落日光景。我也跟着他们上去，只是坐到了东边，那是银河即将升起的方向。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://live.staticflickr.com/65535/51310473731_fad2da1661_k.jpg" alt="IMAGE"&gt;&lt;/p&gt;
&lt;p&gt;这里的星空没有遮挡，前景也很开阔，能拍到远处的山和城市。&lt;/p&gt;
&lt;p&gt;确定了机位和构图，其他事情就相对简单了。架好相机，连上移动电源，设定光圈、曝光补偿、ISO 以及快门线，按下快门。剩下的就是三个小时的等待。关于参数设置，出发前已经在网上做了不少功课，所以没有在拍摄前手忙脚乱地查教程。拍摄星空延时，前期准备尤为重要，因为机会只有一次。好在我目前为止做得都不错。&lt;/p&gt;
&lt;p&gt;夜色渐临，东边的天空逐渐从橙黄变成蓝灰。周围响起悉悉虫鸣。蝉躁林愈静，鸟鸣山更幽，一阵恐惧逐渐爬上心头。仿佛独自乘一叶孤舟，漂泊在黑夜中的无尽的汪洋。虽然此刻的水面平滑如镜，但目所不及之处，不知有多少暗流涌动。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://live.staticflickr.com/65535/52863775186_ed73de62d6_k.jpg" alt="IMAGE"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;（夜色与 Morgan Hill 的街灯）&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;街灯、车流、飞机在夜色的衬托下逐渐显眼，星星也一颗颗出现。远处一切明亮的东西都开始变得有压迫感。我心里突然开始抗拒银河的升起了。&lt;/p&gt;
&lt;p&gt;网上有一些巨型天体的合成图像，比如一颗木星如果出现在月球的距离上，从地球看上去会是什么样的观感。这似乎叫巨物恐惧症。这是一种摄人心魄的恐惧，让人想逃离，又有一种美感吸引人看下去。此时的我，想象着巨大明亮的银河即将出现在天空，那银心和木星也没什么不同。我们每天见到的天体只是太阳月亮星星，相对于它们，一条横跨天穹的银河未免太震撼了。&lt;/p&gt;
&lt;p&gt;我甚至想到小时候做的一个噩梦。这可能是我这辈子印象最深的噩梦。在一个夜里，我现实中的玩具飞机飞上了天，比例大得夸张。我至今记得它闪着巨大的彩灯，划破黑夜呼啸而过的画面。接着一个画面是飞机坠毁，它巨大的质量甚至弯曲了空间，让它从地面看上去是弧形的，那冲击力仿佛一颗陨石。这么说起来，我可能小学时就已在梦里悟出广义相对论了。&lt;/p&gt;
&lt;p&gt;这一刻，我觉得自己无比渺小，有一种收拾细软上车回家的冲动。昨天的此时，我本打算去海边的 Pigeon Point Lighthouse 拍摄星空，可惜那里乌云密布，只能打道回府，略带遗憾地窝在沙发上玩 PS5。现在，我才意识到昨天的回忆是多么温馨舒适。我对自己说：老老实实回家，在虚拟世界冒险不好吗？&lt;/p&gt;
&lt;p&gt;&lt;img src="https://live.staticflickr.com/65535/52863092797_9c917f4604_o.jpg" alt="IMAGE"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;（来源：boredpanda.com）&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;按计划，拍摄开始后，我需要靠 Kindle 打发无聊的等待时间。但出于恐惧，也外加一丝兴奋和期待，我根本看不进去。我突然迫切地想上网，跟外界接触，产生联结，否则孤独和焦虑便如洪水般袭来。万幸的是，这里有微弱的 LTE 信号。一旦开始刷社交平台，心里就不慌了，即使图片可能永远都载入不出来。人真是奇妙的群居动物。&lt;/p&gt;
&lt;p&gt;不知不觉间，天光已经很微弱了，我甚至觉得似乎已经肉眼看到了银河。此时相机显示屏里的照片很黑，我感觉有些不对劲，于是把拍摄模式从光圈优先调成手动，增加快门时间，提高进光量。调整的效果立竿见影，淡淡的银河出现在照片里。我很开心，像是见到了老朋友。由于肉眼看银河的亮度其实很低，之前担忧的压迫感并未袭来，我在心中长舒一口气。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://live.staticflickr.com/65535/52863193102_6ee05e0cf6_k.jpg" alt="IMAGE"&gt;&lt;/p&gt;
&lt;p&gt;又过了一会儿，我所在的环形平台上来了一对情侣，在环的另一边，似乎是躺在自己准备的毯子上，看着另一个方向的星星。虽然听不清他们在聊什么，但听得出来是普通话，感觉很亲切。此时大约十点，天已经完全黑了，我心里却感觉好多了，开始享受现在的时光。银河比之前更显眼了一些，用肉眼也能找到，只是仍然比当年在火山口湖见到的微弱。天文台虽然建在山上，但距离繁华的硅谷还是太近了，不能完全避开光污染。上网的欲望没有那么迫切了，我开始用天文 app 辨认星座，找到了天蝎座、射手座、天秤座。然而读 Kindle 还是绝对读不进去的。&lt;/p&gt;
&lt;p&gt;那对情侣大约十一点多离开，我又成了孤身一人，但心里却已经很平静了。久坐之后腿有些麻，我溜达了一圈，发现这里的生态真是一言难尽。他们之前躺着的地上有只大蜈蚣，还有我从未见过的巨大蚂蚁。&lt;/p&gt;
&lt;p&gt;心态放松后，时间的流速就快了起来，转眼已经十一点半了。目前拍摄的照片数量已经足够合成一段二十多秒的延时视频，是时候收工了。尽管此时银心仍然高挂，如果继续拍下去，甚至能等到日出，拍成一段日转夜转日，无疑会更加震撼。但我没有这样做，或许是考虑到安全和疲劳，或许是我比较谨慎而中庸，喜欢见好就收而不是精益求精吧。&lt;/p&gt;
&lt;p&gt;关闭快门线后，抓紧时间拍了些其他角度的银河照片，便匆匆返程。回到车里，关上车门的一刹那，全身被一股极具安全感的暖流包围。一方面，危险被隔离在外；另一方面，即使遇到危险，也可以一脚油门随时跑路。汽车，伟大的发明。&lt;/p&gt;
&lt;p&gt;或许是从之前的紧张和兴奋中松懈下来，我在归途中感到一身轻松。大半夜赶下山的路，有几次差点冲出护栏，还是要小心驾驶。下到半山腰处，城市的灯光变得近得多了。第一次从这种角度俯瞰湾区夜景，很震撼，又有点颤栗。我克制住停在路中间并下车拍照的冲动，继续向山脚驶去。&lt;/p&gt;
&lt;p&gt;继续开了半个多小时的山路，终于见到了大马路和红绿灯。一切都和我上山前一样，什么都没变。刚刚过去的几个小时，像一次异世界历险，也像一场梦。尽管已经过了午夜，我却不怎么觉得疲劳和瞌睡。到家时已经一点多了，老婆打来电话，她和朋友在赌城的夜生活里玩得正开心。我也开心地跟她说我的经历。&lt;/p&gt;
&lt;p&gt;回家前最后的城市路段驾驶，可能是我最享受的驾驶体验之一。上一次有这种感觉，是在夏威夷看完哈雷阿卡拉火山的日出后，开车下山赶往机场，搭回家的航班。两者有很多的相似之处：在山顶观测天文现象、观测后下山回家、没怎么睡觉却精神抖擞。这种享受一方面来源于做成一件大事的成就感，另一方面则是冒险之后平安返回的幸福感。现代的都市人类已经习惯了平稳和平安，感官变得麻木。但我们每天所经历的这些平凡而热闹的日常，也许就是连续发生的奇迹。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://live.staticflickr.com/65535/52864126860_1143237012_k.jpg" alt="IMAGE"&gt;&lt;/p&gt;
&lt;p&gt;（哈雷阿卡拉火山的日出，03/19/2018 06:22AM，iPhone 6S）&lt;/p&gt;
&lt;p&gt;我已不记得那一天是最终如何结束的。或许在下一次冒险时，这些回忆，连同那些我此刻写作时已忘却的，都会被重新唤起。&lt;/p&gt;
&lt;iframe style="position: relative; width: 100%;" height="360" src="https://www.youtube.com/embed/Y907qjrWP_w" title="YouTube video player" frameborder="0" allow="clipboard-write; gyroscope; picture-in-picture; web-share" allowfullscreen&gt;&lt;/iframe&gt;</description></item><item><title>NAS 视频串流解决方案</title><link>https://blog.hgao.net/post/nas-streaming-solution/</link><pubDate>Tue, 18 Apr 2023 +0000</pubDate><guid>https://blog.hgao.net/post/nas-streaming-solution/</guid><description>&lt;p&gt;起笔于二〇二二年十一月，发表于二〇二三年四月。&lt;/p&gt;
&lt;p&gt;某个周五的晚上，我和鬼鬼结束了一周的工作，坐在电视机前，满怀期待地打开 NAS 上保存的某热门电影宇宙的最新一部作品。然而，视频画面却十分不流畅，几秒中卡顿一次，完全无法正常观看。&lt;/p&gt;
&lt;p&gt;就在几个小时前，我还得意地告诉鬼鬼，我搞到了这部作品的 4K HDR 高清资源，盛情邀请她一同观赏，来度过这个愉快的夜晚。如今这个局面，可谓十分尴尬——这不是翻车了嘛！&lt;/p&gt;
&lt;p&gt;我的 NAS 是群晖入门级的 DS220j，购于两年多以前。不仅盘位只有两个，CPU 和内存也是捉襟见肘，只能跑跑自带的下载、文件传输、视频监控等功能，不支持 Docker。NAS 里存放着一些电影和剧集，通过海外版小米盒子（运行安卓系统）上的 VLC 播放。大部分资源都能流畅播放，也支持字幕。虽然没有任何的媒体管理功能，界面也十分粗糙，但考虑到播放效果过得去，我一直对这套挂壁方案还算满意，直到这一次。&lt;/p&gt;
&lt;p&gt;众所周知，一个垃圾佬在捣鼓自己的东西时可以尽情挂壁，但绝不能牺牲领导的体验。所以，虽然得到了鬼鬼的暖心安慰，我仍下定决心，好好升级一下家里的视频串流方案。当然，在满足要求的前提下，尽可能少花钱。&lt;/p&gt;
&lt;p&gt;首先要做的，是确定播放卡顿的原因。从 NAS 串流视频需要经过以下几个步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;NAS 读取本地硬盘的视频文件&lt;/li&gt;
&lt;li&gt;通过局域网串流至播放设备&lt;/li&gt;
&lt;li&gt;播放设备解码&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;前两步理论上不会有问题。NAS 的机械硬盘虽慢，CPU 也拉跨，然而不至于连串流所需的读取速度都满足不了。串流使用的是 SMB 协议，在我家局域网的文件传输速度大约是 30MB/s，而一个时长两小时的 40GB 视频文件所需带宽仅为 5.5MB/s，比这低得多。&lt;/p&gt;
&lt;p&gt;看来问题大概率出在播放设备，也就小米盒子。这个好测试，换一个播放设备嘛。我偶尔也会在 iPhone 手机上播放 NAS 上的视频，所以上面也装了 VLC。用它播放 40GB 的文件，画面流畅，但没有声音，而且发热严重。我又换了一个类似码率的高清视频播放，结果依然流畅，声音也正常，但是仍旧发热。这说明了两个问题：一，之前的卡顿的确是播放端的问题，与 NAS 和网络无关。这无疑是个好消息，因为升级这两样的成本可比升级播放端高多了。二，VLC 或许兼容性不佳，卡顿和发热应该都是硬解不可用，只能软解造成的。iPhone 的芯片足够强大，即使软解也能流畅播放，但是这种高强度任务难免会增加功率，产生热量。至于小米盒子，连流畅播放也不能指望了。&lt;/p&gt;
&lt;p&gt;为了验证 VLC 不行，我决定换一个播放器 app 试试，于是选择了大名鼎鼎的 Infuse。Infuse 是苹果独占的播放器，支持 iPhone，iPad，Mac 和 Apple TV，尤其在 Apple TV 上出镜率很高。&lt;/p&gt;
&lt;p&gt;我用 Infuse 打开了这个 40GB 的视频。嗯，怎么说呢，真是如沐春风啊。画面、声音全部正常，播放流畅无卡顿，并且自动开启 HDR、加载字幕。界面美观易用，如同 iOS 的第一方 app，和 VLC 那明显从 PC 移植过来的界面相比，简直是天壤之别。它甚至还有海报和字幕搜刮功能。原来这才是专业的影视播放器啊！那一刻，我就知道我再也回不去 VLC 了。就这样，串流播放在手机上完美实现了。&lt;/p&gt;
&lt;p&gt;现在回头看看小米盒子的问题。小米盒子离路由器很近，WiFi 信号不会比 iPhone差。硬件方面，根据说明书，它支持硬件解 H.265。看来换一个播放器 app 就有希望解决问题。安卓上对标 Infuse 的播放器应该是 Kodi，功能同样强大，但界面是满满的工程师和极客味，能感受到两者社区的巨大差异。Kodi 可以流畅播放高清视频，声音也正常。&lt;/p&gt;
&lt;p&gt;然而，我随即意识到小米盒子本身有些问题。它不能开启 HDR，而且分辨率被锁在 1080p，无法设置为 2160p。这些功能在说明书中是支持的。尝试了更换 HDMI 线，无果。似乎小米盒子是不堪大用了。那么电视自带的 Roku 系统呢？Roku 的软件生态不如安卓，只能用它自带的播放器。虽然也可以流畅播放高清视频，也支持 HDR，但不支持字幕，界面功能也很简陋。&lt;/p&gt;
&lt;p&gt;事已至此，看来只能花点钱升级一下播放设备了（&lt;del&gt;太好了，有理由买新玩具了&lt;/del&gt;）。&lt;/p&gt;
&lt;p&gt;市面上主流的产品有 Apple TV，Google Chromecast with Google TV （名字真长啊） 和 NVIDIA Shield。Shield 对家庭影院和外接音响的支持最好，但是我短期内并没有组建家庭影院的计划。而且有了小米盒子的教训，第三方设备不在首选之列，更何况它既贵又丑。Apple TV 和 Chromecast 都是我很喜欢的产品。安卓系统还有一个优势，那就是我们在用的 K 歌 app 只有安卓版本。如果选择了 Apple TV，意味着需要为了 K 歌保留安卓系统的小米盒子。然而这些都不重要，我毫不犹豫地选择了 Apple TV。这在我第一次使用 Infuse 的时候，就已经注定了。&lt;/p&gt;
&lt;p&gt;此时 Apple TV 2022 发售在即，2021 版获得了不错的折扣，果断入手。2022 有一些不错的升级，不过对于我的使用场景，2021 已经完全够用。&lt;/p&gt;
&lt;p&gt;两天后，亚马逊准时送达。设置好新机，第一件事就是安装 Infuse。果然没有令我失望，Apple TV 的 Infuse 采用和 iOS 同样的交互逻辑和设计语言，配合遥控器的触摸功能，使用体验十分愉悦，在大小屏幕上达成了令人满足的统一。不出意外，Apple TV 通过 Infuse 也能流畅播放 NAS 所有的高清视频资源，各方面效果都无可挑剔。&lt;/p&gt;
&lt;p&gt;至此，最初的目标圆满达成。但是在见识了 Infuse 搜刮海报的能力后，我想更进一步，把所有的资源整合进媒体库中。Infuse 可以把一个 NAS 目录下的视频文件自动整理成媒体库，但是前提是通过 SMB 协议连接，不支持速度更快的 UPnP。速度的区别在播放时感觉不到，但如果大范围拖拽跳转，就能感知到 SMB 的延迟更加明显。有没有一种协议，可以像 SMB 那样支持媒体库，又有 UPnP 的速度呢？还真有，那就是 Plex 协议。&lt;a href="https://www.plex.tv/"&gt;Plex&lt;/a&gt; 是一个多媒体管理平台，由 server 和客户端两部分组成，两部分都支持所有主流平台。其中 server 可以安装到群晖上（是的，孱弱如 DS220j 也是可以的），这样客户端就可以通过 Plex 协议访问NAS 上的资源。客户端可以是 Plex 自己的播放器，也可以是 Infuse 这种支持 Plex 协议的第三方播放器。Plex server 本身就支持海报搜刮和影片整理等功能（媒体库嘛），播放器只需要从 server 加载 metadata 即可。这样的好处是，只需要在 server 上配置一遍，各个客户端的行为便能统一。&lt;/p&gt;
&lt;p&gt;这里多说一句，Plex 播放器本身十分优秀，试用了一下，觉得播放效果不逊于 Infuse。但是如果想解锁 Plex 播放器的全部功能，需要订阅或购买 Plex 的会员。会员还包含其他强大的功能，比如从互联网访问 Plex 中的资源、根据网络情况将资源在服务器转码成指定的分辨率后再串流等等。由于这些功能暂时用不到，我选择了免费版 Plex + Infuse 订阅的方式，价格比 Plex 订阅要便宜。&lt;/p&gt;
&lt;p&gt;最后，为了进一步提升传输速度，也为了不浪费 Apple TV 的以太网接口，我买了一个入门千兆交换机，将 Apple TV 通过以太网接入。测试下来，一段时长两小时、大小为 40GB 的视频，可以在一秒钟之内从任意进度加载。&lt;/p&gt;
&lt;p&gt;串流方案的升级到此完成。与之前相比，新的方案可以流畅播放、跳转高码率的高清视频，UI 易用性获得了极大提升，支持酷炫的海报墙、影片剧集归类、内容简介、演员表、字幕搜刮。电视盒子的流畅度、遥控器手感也大幅提升，还获得了原生 AirPlay 功能。花费的成本如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Apple TV 2021：$100&lt;/li&gt;
&lt;li&gt;Netgear 五口千兆交换机：$20&lt;/li&gt;
&lt;li&gt;Infuse Pro 订阅：$10/年&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;总体来说，这次改造相当成功，我自己也很满意。不仅因为最后的结果理想，也因为研究的过程很有趣，每一点 progress 都能带来成就感。利用自己的知识、双手和学习能力，让生活变得更好一点，可能这就是所谓的「热爱生活」吧。&lt;/p&gt;</description></item><item><title>二〇二二</title><link>https://blog.hgao.net/post/2022/</link><pubDate>Wed, 29 Mar 2023 +0000</pubDate><guid>https://blog.hgao.net/post/2022/</guid><description>&lt;p&gt;写作于二〇二二年十二月三十一日，发表于二〇二三年三月。&lt;/p&gt;
&lt;p&gt;到了年关，越发觉得这是思绪颇多的一年。我觉得很幸运，获得了很多，体验了很多，很感恩身边的一切。也很惶恐，觉得自己的奋斗配不上收获，也配不上我曾经的对自己的期许。害怕失去、落后，更害怕失去后拿不回来，落后时追赶不上。&lt;/p&gt;
&lt;p&gt;这一年依然居家办公，也依然对工作不太上心。身边同期入职的同学已经有人晋升，我却依然原地踏步。唯一欣慰的是，有在读技术职业类的书籍，尝试提升自己。新的一年，想多为事业奋斗一点，在这个复杂的形势里站稳脚跟，更求一份心安，不再为配不上而惶恐。&lt;/p&gt;
&lt;p&gt;这一年，完成或经历了很多大事。长期以来精心策划的婚礼，得以突破冲冲困难，在各方的帮助下圆满举行。我长久以来都对婚礼感到些许紧张，因为不习惯站在聚光灯下。但是经历过之后，我觉得我很享受这个过程，也让我内心的某个地方有所升华。如何、是否举行婚礼是个人的选择，但每个人的一生都值得这么一次。&lt;/p&gt;
&lt;p&gt;这一年，旅行了十一个国家，极大丰富了人生体验。完成了鬼鬼去普罗旺斯看薰衣草的梦想，也完成了我自己去斯坦福桥看切尔西比赛的梦想。之前积攒了数年信用卡积分，终于小小发挥了它们的作用，兑换了十几晚好酒店和几班机票，其中包括两千美元一晚的圣诞节 Los Cabos 华尔道夫私人泳池海景房，以及法国航空旧金山到巴黎的平躺商务舱。但有些兑换而来的行程其实也不太合理，此时要提醒自己，不能沉迷于点数的使用价值，旅行体验才是第一位。&lt;/p&gt;
&lt;p&gt;八月，获得了稳定的身份。来美六年，完成一个重要里程碑。心态更放松了一些，不那么为裁员而惶恐了。&lt;/p&gt;
&lt;p&gt;十一月，一年前订购的特斯拉终于提车了。第一次开这么好的车，总体很满意。电车纵然有很多缺点，但它的优点我也都能充分利用：家里有充电头，公司有免费充电桩，在停车场开着空调等老婆，和朋友露营时睡在车里。都是很棒的体验。&lt;/p&gt;
&lt;p&gt;七月，父母工作调动，搬来了美国，车程两小时即可见面。我明白个中幸运与艰辛，为他们骄傲。&lt;/p&gt;
&lt;p&gt;上述种种，要么是托身边人的福，要么是客观条件的幸运。所以有种并不是我奋斗所得的感觉。下面是一些小事，但更属于我自己。&lt;/p&gt;
&lt;p&gt;今年依然有一些兴趣爱好。三月份，冲动消费了艾尔登法环，沉迷了一整个月，是旷野之息、2077 之后，又一个让我欲罢不能的游戏。&lt;/p&gt;
&lt;p&gt;继续爱着足球，为梅西夺得世界杯而开心。原以为这是不可能完成的任务，但这个世界需要惊喜和传奇。&lt;/p&gt;
&lt;p&gt;重新爱上了 F1，开始追每个大奖赛的赛事回放。很喜欢周冠宇，买了他的帽子和赛车模型。时不时会用方向盘玩玩 GT7。&lt;/p&gt;
&lt;p&gt;尝试了跳舞，但很失败。&lt;/p&gt;
&lt;p&gt;在日常生活质量上遇到了几个小问题，都应对得不错。比如 NAS 串流体验不佳、比如家里饮用水净化。在解决这些问题的过程中，逐渐行成了定位问题，搜集知识、明确需求，搜集挑选解决方案的一套方法论。这个过程是学习，也是享受。&lt;/p&gt;
&lt;p&gt;新一年，想尝试吉他。&lt;/p&gt;
&lt;p&gt;我活得更加真实，更善于表达自己的感受，而不是敷衍过去。更加自信了一点点。不该在乎的也不去在乎了。简单点，给自己更多思考和冥想的时间。这个时代，人特别容易分心。能少被分心，就多赚回陪伴自己、陪伴他人的时间。&lt;/p&gt;</description></item><item><title>2023 年，再试一试使用 Notion 随时随地写博客</title><link>https://blog.hgao.net/post/notion-blog-anywhere-2023/</link><pubDate>Sat, 25 Mar 2023 +0000</pubDate><guid>https://blog.hgao.net/post/notion-blog-anywhere-2023/</guid><description>&lt;p&gt;&lt;img src="https://live.staticflickr.com/65535/52767786944_e6ab7435ae_o.jpg" alt="IMAGE"&gt;&lt;/p&gt;
&lt;p&gt;两年前写过一篇&lt;a href="%7B%7B%3C%20ref%20%22notion-blog-anywhere%22%20%3E%7D%7D"&gt;博文&lt;/a&gt;，讨论如何将 Notion 上的文章转换成 Markdown，并部署到自己的博客上。当时使用的是非官方的 Notion API，需要经常更新 token 才能获取数据，不稳定也不够自动化。发完那篇文章不久，我的 token 就挂了，自此再也没管它，也再没有发过文章。后来，&lt;a href="https://developers.notion.com/"&gt;Notion 发布了官方的 API&lt;/a&gt;，最近终于抽空玩了玩。登上了一年半未曾登录的 VPS，写一写这个两年没有更新的博客，顺便捡起阔别六年的 JavaScript。&lt;/p&gt;
&lt;p&gt;Notion API 本身是可以通过 HTTP 协议直接调用的，没有语言的限制。与此同时，Notion 也发布了一个&lt;a href="https://github.com/makenotion/notion-sdk-js"&gt;基于 Node.js 的 SDK&lt;/a&gt;，相当于给 API 套了一层壳，可以简化一些调用。我当时脑子没转过来这个弯，误以为一定要用 Node 才能调用 API，于是选择了 JavaScript 作为开发语言，而不是我更熟悉的 Python。对于这个决定我不后悔，因为学一学 JavaScript 不是坏事，无非多踩点坑（JS 坑之多可谓臭名昭著），开发速度慢一些。但另一方面，这也说明了不写需求文档的坏处🙃。&lt;/p&gt;
&lt;p&gt;通过 API 拿到数据后，下一步是把文章转换成 Markdown。其中比较复杂的是嵌套列表的转换，需要递归调用一些函数。我觉得这比我在工作中写的业务逻辑都复杂，可以当作一个不错的算法面试题。&lt;/p&gt;
&lt;p&gt;其余部分没有什么难度，主要时间都花在 debug 上。这个过程中，ChatGPT 多次解答了我的疑问，从 Node 里的常见函数调用，到复杂一些的 Promise 概念，再到帮我逐步分析解决了一个我毫无头绪的 bug - 这是 ChatGPT 横空出世半年来，我第一次高密度地与它互动，切身感受到了它的便捷。&lt;/p&gt;
&lt;p&gt;现在，这段两百行的小程序基本已经开发完成，正作为一个 cron job 定期运行，自动发布 Notion 上新增的文章。它的代码在 &lt;a href="https://github.com/hikoship/notion2hugo"&gt;GitHub&lt;/a&gt; 上。对了，这也是我时隔多年后再次使用 GitHub。&lt;/p&gt;
&lt;p&gt;从上周五到现在，我每天晚上都花几个小时，投入在这上面。我的业余时间变得久违地快乐、激动和充实。鬼鬼有点困惑不解：为什么我这个一年写不了两篇文章的博客，会值得投入这么多时间精力，手动发布不也挺简单的吗？&lt;/p&gt;
&lt;p&gt;我也说不准。或许首先，这个网站寄托着我的一部分精神和历史，像是我的一个「魂器」。我很珍惜它。个人网站是开放互联网最后的几颗遗珠。在这里，我尚有一些掌控权和自由度。任何人都能无门槛访问它，但又只能主动来访。它不需要注册登录，但也永远不会自动出现在时间线推送里。这种特质让我觉得安全又不孤独。因为珍惜，我愿意付出十分的努力，多打磨出一分的改进。&lt;/p&gt;
&lt;p&gt;另一方面，我单纯喜欢写代码，喜欢用代码作为工具发明创造，尤其是在写代码时间不多的今天。&lt;/p&gt;
&lt;p&gt;最后，我也是真的希望，可以随时随地写博客。&lt;/p&gt;</description></item><item><title>《赛博朋克 2077》杂谈</title><link>https://blog.hgao.net/post/cyberpunk-2077-thoughts/</link><pubDate>Sat, 03 Apr 2021 +0000</pubDate><guid>https://blog.hgao.net/post/cyberpunk-2077-thoughts/</guid><description>&lt;p&gt;最近把《赛博朋克 2077》玩完了。通关了所有结局，清了所有重要支线，摸清了战斗系统。游戏已经发售四个月，是时候写写这款游戏了。&lt;/p&gt;
&lt;p&gt;这或许是近几年宣传最猛，也是最受争议的游戏。对我个人而言，作为一个赛博朋克题材的爱好者 + 使用高端 PC 和大电视游玩的幸运玩家，若对本作一句话概述，便是九分深爱，一分遗憾。&lt;/p&gt;
&lt;h2 id="玩法"&gt;玩法&lt;/h2&gt;
&lt;p&gt;《赛博朋克 2077》包罗万象，可以射击、格斗、潜行、黑客、赛车。我没有玩过《GTA》或者其他类似的开放世界游戏，无法横向比较，但我很喜欢《赛博朋克 2077》的丰富性。&lt;/p&gt;
&lt;p&gt;枪械的设计手感还不错。这是我第一次玩 CS 以外的 FPS 游戏，没有明显不适的地方。虽然手柄很难瞄准，但这毕竟不是竞技游戏，我可以躲在掩体后面慢悠悠调整准星，用狙击枪或者可穿墙的精准步枪消灭敌人。这其实是我在 CS 里一直幻想的体验，没想到在这里成真了。&lt;/p&gt;
&lt;p&gt;近战是我在初期尝试的玩法。当时我还没有狙，枪法也差，甚至还不会制作子弹，手拿一百多 DPS 的垃圾冲锋枪，在和敌人的对抗中很吃亏。某天，一把三百多 DPS 的骚橙色武士刀出现在楼下的武器店中，我用大部分积蓄买下了它，从此开始爽快肉搏，度过了艰难的开荒时期。后来发现自己错过了本作最强的武士刀「觉」，再加上拿到了「猫又」狙击枪（堪比 CS 里的连狙），便逐渐往枪械流上转移。中期拿到「寡妇制造者」之后，就完全摆脱了对近战武器的依赖。&lt;/p&gt;
&lt;p&gt;潜行是我最讨厌的，不管是在本作中，还是在其他游戏里。很欣慰本作大部分场合不强制要求潜行，只要实力强大，就可以尽情突突突。&lt;/p&gt;
&lt;p&gt;黑客流如果玩得好可以乱杀，但需要牺牲近战或枪械点数，感觉不是很值得。很大程度上，在这个快意恩仇的夜之城里，我需要的是「爽」。&lt;/p&gt;
&lt;p&gt;本作的赛车系统饱受批评，据说比起《GTA》差了很多。我不追求完美过弯，只享受横冲直撞，所以感觉还好。如果想正儿八经兜风，摩托车是更好的选择。我最喜欢的开车路线，是从地图中的某个角落前往阿德卡多大本营。通往大本营的路本来只有一条，但我更愿意开着「隼-野狼」从山地抄近路越野。驾驶这头巨兽冲入无尽的荒漠，把树木一棵棵撞倒，车门和引擎盖因为飞跃小土坡后的跌落摔得稀碎。远方的夜之城天际线繁花似锦，脚下的沙漠和飞车构成了暴力美学。如此颠簸几公里后，只见柳暗花明，流浪者篝火晚会的歌声渐渐清晰。和帕南一起，依偎在篝火旁，加入合唱，沐浴星光。这让我想起了在《塞尔达传说：旷野之息》中，在暗夜的山顶上守候流星的场景。这可能是开放世界游戏最大的魅力。&lt;/p&gt;
&lt;h2 id="剧情含有剧透"&gt;剧情（含有剧透）&lt;/h2&gt;
&lt;p&gt;《赛博朋克 2077》的主线和支线都很优秀，并让我产生了自从玩《超级机器人大战 OG2》以来最为深入的情感沉浸，也就是所谓的「中毒」。&lt;/p&gt;
&lt;p&gt;主线剧情非常契合赛博朋克的主题，明显感觉到操控 V 这个无名佣兵对抗巨头企业时的压迫、紧张、兴奋，以及后期的绝望和沉重。最后的结局选项众多，每个都有一个多小时的独有任务，以及丰富的结尾剧情，CDPR 用心良苦。太阳、星星结局很浪漫，恶魔、自杀结局很现实。至于隐藏结局，则有点浪漫过头了。感觉制作组最用心的是恶魔结局，整个故事最波折，结尾的太空舱剧情也最长最压抑。&lt;/p&gt;
&lt;p&gt;支线剧情同样触及了很多深刻的话题，比如有关宗教的「罪与罚」，因童年阴影而残害下一代的「彼得潘」，关于复仇与原谅的「心中困兽」等等。尽管这是一个追求爽快的游戏，但很多时候，CDPR 诱导玩家在「处决」与「放过」之间作出选择，并对「放过」有所奖励。&lt;/p&gt;
&lt;p&gt;在这些出彩的主线和支线中，诞生了众多令我难忘的人物。杰克，强尼，帕南，索尔，朱迪，克里，瑞弗，罗格，老维，米斯蒂，竹村。他们可能只出现在一两个支线中，甚至没有支线任务，却被刻画得栩栩如生。这些人是 V 与夜之城之间的纽带，是我还愿意时不时回到这座罪恶都市的唯一牵挂。一方面是 CDPR 的剧本和叙事能力突出，一方面是第一人称视角和顶尖的画面表现提供的强烈沉浸。还有一个不可或缺的因素，就是本作纯正地道的中文翻译和配音。杰克的俏皮、强尼磁性嗓音里的玩世不恭、老维的语重心长、米斯蒂的轻柔、竹村的日式普通话，皆可圈可点。这是我第一次玩全程中文配音的游戏，与外语配音+中文字幕的体验实在是差距太大了。&lt;/p&gt;
&lt;p&gt;对我来说，本作刻画最深刻的人物是朱迪。而朱迪最后的支线「金字塔之歌」，是我觉得最忧伤的任务。云顶的波涛过后，一切重归风平浪静。朱迪约我在市郊的海湾潜水。下水之后，才知水底曾经是一座城市，是朱迪童年生活的地方。里面的每座房子都承载着朱迪的记忆，作为朋友，她把心底最深处的童年往事展现给我，似乎已经卸下了一切重担。然而第二天，朱迪说她要走了。她穿着短裤，在凌晨的港湾，独坐在码头上。简短的道别过后，她望向远方，开始沉思。她看不到我，听不到我，也不再会对我说话。我很想留住这个时刻，却也知道这个瞬间会像手心的沙子一样，要么握紧不动，要么任它流走。不得已，我面向着浸润在日出晨光里的朱迪，一步步后退走远。终于，那个逆光的人儿被系统刷新掉了，偷芯片时的最后一个伙伴离开了。那一刻的心情是无尽的惆怅。几天后，朱迪从俄勒冈、西雅图发来照片。照片上的太空针真实而又虚幻。再往后，她再也没有新的对话与我诉说了。由于代入感太强，我竟不自觉地用「我」代替了「V」。这是段电影般的体验，却比电影令人难受。游戏和电影不一样，受众小，分支又太多，没有那么多玩家会专门讨论某个细节。这令人感到孤独。更何况，朱迪故事的忧伤之处，本身就在于孤独。&lt;/p&gt;
&lt;p&gt;在网络中，本作的剧情收获了不少赞誉，但这个题材其实并不适合所有玩家。我本人对赛博朋克文化有强烈的喜好，读过《仿生人梦见电子羊吗？》和阿西莫夫全集，看过《攻壳机动队》和《银翼杀手》。其中 1982 年上映的《银翼杀手》是我和老婆一起看的，两个小时的慢节奏叙事、压抑的故事和美术风格，老婆啃得煎熬，但我嚼得津津有味。而在《赛博朋克 2077》中，CDPR 成功地将赛博朋克这一小众亚文化渗透到游戏的方方面面。大到夜之城的布景、世界观的搭建，小到支线任务中的各种对话记录，无一不渲染着社会的割裂、环境的恶化、机器的冷酷、人性的压榨。它的文本比起《银翼杀手》戏谑友好许多，但这也只是让它足够成为一款路人眼中不错的游戏。或许只有对于喜爱赛博朋克的人，《赛博朋克 2077》才有它的非凡之处。&lt;/p&gt;
&lt;h2 id="遗憾"&gt;遗憾&lt;/h2&gt;
&lt;p&gt;众所周知，这款游戏 bug 极多。呼声很高的 1.2 补丁包，40 GB 之巨，内容竟然全部是 bug 修复，数量多达上百条。然而我自己遇到的 bug 不多，「仅仅」是无处不在的穿模、逃不过的「黑梦」，以及某次打死 boss 之后的卡关而已。因为我很幸运，在二〇二〇年装了一台高端 PC，在矿潮前买到一块便宜的 RTX 3070（反过来说，如果不是这个游戏，我也不会考虑去买），还在感恩节用两百多刀买到一台 65 寸 4K HDR 电视。它们让我能够在 4K 最高画质下保持 60 FPS（关光追，开 DLSS），是提升沉浸感的大功臣，同时也得以避免主机平台上层出不穷的独占 bug。&lt;/p&gt;
&lt;p&gt;除了 bug，本作因为赶工，砍掉了不少宣发中的内容，比如轻轨、浮空车、多人模式等。UI 和系统上的毛糙细节，也时不时提醒人们，这个游戏并不是一个打磨完好的成品。&lt;/p&gt;
&lt;p&gt;然而话说回来，这些虽然都是缺点，但并不真正影响我对这个游戏的体验和喜爱，因为我喜爱的是赛博朋克本身。另一方面，这些缺点对于主流玩家，却或许是致命的，从而会引发一系列连锁反应，包括销量、口碑、股价下滑，乃至资金链断裂。最终的结果，是让潜在的 DLC、网游或续作胎死腹中，也让后来者在推出赛博朋克题材作品时瞻前顾后。这是我真正的遗憾之处。&lt;/p&gt;
&lt;h2 id="结语"&gt;结语&lt;/h2&gt;
&lt;p&gt;在我心中，《赛博朋克 2077》站在了金字塔尖，属于那种几年才能玩到一次、体验终身难忘的游戏；更因为它题材的特殊性，对我有非比寻常的意义。感谢 CDPR，作为业界顶级工作室，选择了这样一个主题。尽管在上一段阐述了担忧，但乐观地说，它制造的话题和关注度，也让更多人了解、喜欢上了赛博朋克。借用《基地》的设定，希望《赛博朋克 2077》 成为赛博朋克游戏和文化的「端点星」，现有终焉，未来始焉。&lt;/p&gt;</description></item><item><title>使用 Notion 随时随地写博客</title><link>https://blog.hgao.net/post/notion-blog-anywhere/</link><pubDate>Wed, 27 Jan 2021 +0000</pubDate><guid>https://blog.hgao.net/post/notion-blog-anywhere/</guid><description>&lt;p&gt;&lt;img src="https://live.staticflickr.com/65535/52767786944_e6ab7435ae_o.jpg" alt="IMAGE"&gt;&lt;/p&gt;
&lt;h2 id="notion-简介"&gt;Notion 简介&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://notion.so/"&gt;Notion&lt;/a&gt; 是一个跨平台笔记工具，类似印象笔记。它支持在笔记中使用 Markdown 语法，并且可以通过非官方的 API 将笔记批量导出。这篇文章将介绍如何通过脚本将 Notion 中的文章导出成 Markdown，并部署到自己已有的静态博客上。&lt;/p&gt;
&lt;p&gt;这篇文章就是通过这个方法完成并发布的。&lt;/p&gt;
&lt;h2 id="自建博客的痛点"&gt;自建博客的痛点&lt;/h2&gt;
&lt;p&gt;自己搭建博客的好处无须赘述。我从 2015 年开始用 Hugo 搭建自己的博客，也写了不少文章。但是近两年来发文显著减少，究其原因，是工作以后主要使用工作电脑，不常用个人电脑，而后者是我在 Hugo 上发表文章的唯一途径。每次想写点什么，只能记在手机或者工作电脑上。就算写完了一篇文章，还需要在个人电脑上手动格式化成 Markdown，再部署到 Hugo 上，很是繁琐。如果能有一个 Markdown 编辑器可以跨平台同步，写完后还无需额外操作就能发布到博客上，无疑会大大降低写作的门槛。接触到 Notion 以后，我发现这是可行的。&lt;/p&gt;
&lt;p&gt;在写这篇文章之前，我搜索了其他使用 Notion 驱动博客的文章。大部分文章是直接把 Notion 笔记分享出去，小部分是用 Netlify 和 Gatsby来解决。似乎没有文章提到如果把 Notion 整合到自己已有的博客中，所以希望这篇文章能弥补这一块的空白。&lt;/p&gt;
&lt;h2 id="需要用到的东西"&gt;需要用到的东西&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;一个 Notion 账户（免费账户即可）&lt;/li&gt;
&lt;li&gt;一个使用 Markdown 的静态博客（如 Hugo，Hexo，Jekyll）&lt;/li&gt;
&lt;li&gt;一个能运行 Python 脚本，并且能访问 Notion 的服务器。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="在-notion-中写作"&gt;在 Notion 中写作&lt;/h2&gt;
&lt;p&gt;首先，需要在 Notion 中新建一个数据库形式的页面（笔记本），用于放置所有要发表文章。给此数据库中的文章添加属性，比如发布日期、类别、标签、摘要等。凡是你在博客中使用到的属性都可以添加进来。另外，添加一个叫作「已发表」的 checkbox 用于区分草稿和已发表的文章。这样，当一篇文章可以发表时，只需要勾选 checkbox 即可，其余工作全部交给脚本自动化完成。&lt;/p&gt;
&lt;p&gt;关于撰写文章，Notion 支持 Markdown 语法，并且所见即所得。比如在新一行中输入 &lt;code&gt;# H1&lt;/code&gt;，会自动转换成大号加粗的 &lt;code&gt;H1&lt;/code&gt;。副标题、列表、粗体、斜体、代码块也是同理。如果在手机端不方便输入 Markdown 中的各种符号，也可以用 Notion 自己的 UI 来进行设置标题、加粗等操作，效果是一样的。&lt;/p&gt;
&lt;h2 id="文章提取及转化"&gt;文章提取及转化&lt;/h2&gt;
&lt;p&gt;这一段介绍如何通过代码，把写好的文章变成博客需要的 Markdown 文件。这里用到了 &lt;a href="https://github.com/jamalex/notion-py"&gt;notion-py&lt;/a&gt; 这个&lt;strong&gt;非官方&lt;/strong&gt;的 Python API，它支持对一个用户的 Notion 笔记进行增删查改，但我们只需要其中的「查」，所以步骤相对简单。具体的使用教程请各位参考 API 官方文档，不赘述了。&lt;/p&gt;
&lt;p&gt;文章存储在 Notion 自定义的类型中，由一个个 block 组成。通过一些简单的遍历和分支语句，就能够将大部分的 block 转换成 markdown 文本。博客的元数据保存在文章属性中，可以提取出来，用于生成 markdown 的 header。&lt;/p&gt;
&lt;h2 id="输出和部署"&gt;输出和部署&lt;/h2&gt;
&lt;p&gt;将每篇文章的 markdown 文本输出到静态博客生成器的文章目录下。通过 &lt;code&gt;diff&lt;/code&gt; 命令比较生成的文章，可以避免重复部署。如果博客在 Git 仓库中，也可以用 Git 比较文章的前后差异。有差异的话，运行相应的部署命令即可。&lt;/p&gt;
&lt;p&gt;我将我的脚本设置成一个 Linux 服务，每小时运行一次，这样就能够自动将 Notion 里的新文章部署到博客上了，还可以使用 Linux 的 &lt;code&gt;journalctl&lt;/code&gt; 命令可以查看服务日志。&lt;/p&gt;
&lt;h2 id="缺点和风险"&gt;缺点和风险&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;据说 Notion 无法从中国大陆访问，所以对脚本所在服务器有要求。&lt;/li&gt;
&lt;li&gt;无法预览文章在博客上的显示效果。&lt;/li&gt;
&lt;li&gt;脚本需要主动查询文章改动，所以时效性和节省带宽只能二者择一。目前还没有研究 API 如何监听 Notion 改动。&lt;/li&gt;
&lt;li&gt;在 Notion 中直接插入的图片可以在博客显示，但会压缩，并且 URL 只有一天内有效。每次生成 markdown 都会更新图片的 URL，导致 &lt;code&gt;diff&lt;/code&gt; 命令失去意义。&lt;/li&gt;
&lt;li&gt;API 不受官方支持，况且不知道 Notion 自己能存活多久。&lt;/li&gt;
&lt;li&gt;不支持 Vim 模式。&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>End of 2020</title><link>https://blog.hgao.net/post/end-of-2020/</link><pubDate>Fri, 15 Jan 2021 -0800</pubDate><guid>https://blog.hgao.net/post/end-of-2020/</guid><description>&lt;h1 id="前言"&gt;前言&lt;/h1&gt;
&lt;p&gt;2020年结束了。一个对所有人都算不上好，但对我个人也却算不上坏的年份。我和鬼结婚，买房，升职，养了两只猫，幸福的事接踵而至。另一方面，心智和能力没有明显的进步，越发让我觉得亟待提高，否则承担不起家庭的和工作的职责。不多说，照旧分开谈谈吧。&lt;/p&gt;
&lt;h1 id="旅行"&gt;旅行&lt;/h1&gt;
&lt;p&gt;今年主要的旅行大戏发生在年末，这篇文章的草稿也是旅途中完成的。和我鬼，以及另一对情侣去中西部的几个国家公园进行了房车旅行。希望能洗刷一些正面积累下来的压力和疲倦。二月底的时候，还和我鬼专程搭飞机去了一趟拉斯维加斯。彼时正是新冠在美国爆发的前夜。&lt;/p&gt;
&lt;p&gt;除此之外，便是几次短途徒步，以及两天一晚的秋叶摄影之旅而已。就美国的疫情而言，能有这样多的旅行机会很是古怪，可以说幸运，也可以说无奈。&lt;/p&gt;
&lt;p&gt;这些年逐渐喜欢旅行，也离不开旅行。感受新景色的冲击，身体上的考验已经成为调剂生活的必需品。无论是驾驶各种车辆和路况，还是攀登险峰；是克服心理障碍成为房车下水道专家，还是摸黑起床看第一抹日光，都让我觉得注入了新的能量。&lt;/p&gt;
&lt;p&gt;今年四顾维加斯，打卡了三个新的国家公园。明年的目标是佛罗里达和中国，伸展目标是欧洲。&lt;/p&gt;
&lt;h1 id="工作"&gt;工作&lt;/h1&gt;
&lt;p&gt;受疫情影响，今年有十个月在家办公。这种体验开始很新鲜，但如今令我煎熬。长期困于自己的屋子，不便利的沟通，身边诸多的干扰因素，令工作日痛苦不堪，长期折磨着我的精神。对于工作内容也缺乏激情，不知道目标在何处。讽刺的是，在这种情况下却升职了。大概我确实做了不少东西，但牺牲了自己的效率和发展。这仍是目前最困扰我的几件事情之一。&lt;/p&gt;
&lt;h1 id="兴趣爱好"&gt;兴趣爱好&lt;/h1&gt;
&lt;p&gt;这一年没有培养全新的兴趣爱好，倒是重新拾起了对电脑硬件的热爱，最终装出一台强悍的 ITX 机器。机箱是精心挑选+耐心等待的 FormD T1，里面装下了 3700X，RTX 3070 和 64GB 内存，给显卡降压的前提下噪音散热表现优秀。无奈 Windows 10 小毛病不断，这台电脑用起来总是不太顺手。&lt;/p&gt;
&lt;p&gt;另外买了群晖 DS220j，是一个双盘位 NAS，组了个简单的 4T Raid1 家庭数据中心。容量虽然不大，但主要都是照片，配合我自己的照片处理工作流，未来三年内应该不用担心硬盘空间不足了。通过 udnp 协议给小米盒子上的 VLC 提供片源，输出到 65 寸 的HDR 4K 电视，观影感受也上了一个台阶。&lt;/p&gt;
&lt;p&gt;摄影方面，入手了一颗 Sigma 35mm F1.4 Art，给老婆拍了几组人像，但水平仍然低下，主要靠老婆好看，器材强悍。城市和风景拍的不多，一方面由于疫情，一方面空闲时间也不多。想过买一颗长焦头和一颗 F1.4 85mm 定焦，但目前用处不是很多，价格也贵，以后有了孩子或者经常出远门的时候再提上日程吧。定焦看适马，变焦看腾龙，对我这种不追求极致的用户来说，这两家几乎可以满足我的所有需求了。今年准备入手一颗闪光灯，练习一下夜景人像。&lt;/p&gt;
&lt;p&gt;这一年读书比之前多了。看了好几本小说，获得的精神愉悦是其他娱乐方式给不了的。非小说类的书籍好开了几本，但都没看完。&lt;/p&gt;
&lt;h1 id="其他"&gt;其他&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;养了两只猫。感谢生活中有他们。&lt;/li&gt;
&lt;li&gt;买了两把好椅子。Herman Miller Mitra 2 和Teknion Contessa。后者虽然是二手，牌子也不如前者响亮，但舒服太多，主要在于椅背可以固定在指定的角度。坐过朋友的 Herman Miller Aeron，也很不错，但应该没有固定椅背功能。&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>失眠</title><link>https://blog.hgao.net/post/sleepless/</link><pubDate>Sun, 15 Nov 2020 +0000</pubDate><guid>https://blog.hgao.net/post/sleepless/</guid><description>&lt;p&gt;从四点睡觉一下子改到十二点睡觉很不容易，尤其是在奔向中年的今天。第一天晚上还能因为之前一天缺少睡眠而顺利入睡起床，第二天晚上则是睡了四个小时就醒了。&lt;/p&gt;
&lt;p&gt;中间读了小说，听了一向很助眠的哥德堡变奏曲，数了两百多只羊，仍是一分钟都没有睡着过。当然，这期间也曾多次下意识打开那些网页和社交软件，好在每次都适时制止了。现在天亮了，就当是睡了八个小时。起身工作吧。&lt;/p&gt;
&lt;p&gt;接收信息的渠道太多了，从好多好多年前的求之若渴，到今天的抗拒恐惧逃避。我自然是从信息中收获了太多益处的，但这一步步是如何走到现在这样的呢？或许是已知曾经简单到无聊的生活，再也不可能求得。或许，这些信息也并非我如今厌倦工作的本因。&lt;/p&gt;
&lt;p&gt;终究也到了一个能够回忆好多好多年前的时候了。今年我的父母年龄恰好是我的两倍了。这句话的潜台词是，他们像我这么大的时候已经生我了。他们最近身体开始有些中老年的小毛病出现，必是羡慕现在年纪的我。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;月黑風高 彎腰在計程車&lt;/p&gt;
&lt;p&gt;雨點大 不短的路 給蒙蔽&lt;/p&gt;
&lt;p&gt;我想那司機這樣子 熬夜到天亮 不容易&lt;/p&gt;
&lt;p&gt;誰知他說 開完車 還要替&lt;/p&gt;
&lt;p&gt;一整棟大廈掃地 才休息&lt;/p&gt;
&lt;p&gt;如果能多掙幾個錢 讓兒子上大學 沒關係&lt;/p&gt;
&lt;p&gt;他還說 沒關係 再睏也沒有問題&lt;/p&gt;
&lt;p&gt;只要下一代了不起&lt;/p&gt;
&lt;p&gt;下一代 我們在 我們在唉聲嘆氣&lt;/p&gt;
&lt;p&gt;在沼澤裡無能為力&lt;/p&gt;
&lt;p&gt;想不到為什麼會在這裡 又想去那裡&lt;/p&gt;
&lt;p&gt;越懂得多越不滿意 越喜歡回憶&lt;/p&gt;
&lt;p&gt;看到了背影 看不到自己 路牌也都懷疑&lt;/p&gt;
&lt;p&gt;一直走千萬公里 忘記了目的&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;写完这段话，打开窗户，闻到了久违的混合青草与泥土与露水味道的冬日大清早的凛冽气息。那是美好与活力，鼓舞人心的气息。邻居已经起床了，这是他们日常的生活。&lt;/p&gt;</description></item><item><title>照片处理工作流</title><link>https://blog.hgao.net/post/photo-postprocessing-workflow/</link><pubDate>Sat, 22 Feb 2020 +0000</pubDate><guid>https://blog.hgao.net/post/photo-postprocessing-workflow/</guid><description>&lt;p&gt;从二〇一七年接触摄影开始，自己的摄影知识一直停留在快门、光圈、ISO 而已，照片也只用 JPEG 存储。去年九月，阿炜帮我把相机升级成了索尼 A7III，于是下决心精进一下拍照技术。这期间切身体会到了 RAW 格式之于 JPEG 的优势（尤其在索尼 JPEG 直出并不出众的情况下），并形成了使用 RAW 拍照的习惯。由此也发展出自己的一套以 RAW 为基础的照片工作流。&lt;/p&gt;
&lt;h3 id="导入"&gt;导入&lt;/h3&gt;
&lt;p&gt;我用 Lightroom 作为处理工具，所以直接把照片通过电脑读卡器导入到 Lightroom 中。在此之前不进行照片筛选，因为相机自己的显示屏素质平庸，MacBook 的 Finder 预览 RAW 的速度又不尽如人意。&lt;/p&gt;
&lt;h3 id="筛选"&gt;筛选&lt;/h3&gt;
&lt;p&gt;在 Lightroom 里结合使用旗帜标记（flag）和星级来实现筛选的功能。在第一遍筛选中，将明显的废片标记为拒绝（rejected，快捷键 &lt;code&gt;x&lt;/code&gt;）。其他照片则按照如下标准评定星级：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一星：还凑合的照片。没有拍糊，但也没有太多反复观看的价值。&lt;/li&gt;
&lt;li&gt;二星：后期难度大，但有潜力的照片。这个类别比较难定义。举个例子，在拍摄大光比的风光照片时，经常会拍好多张，难以在短时间内比较其优劣，于是就挑一张还不错的重点后期处理，并标为五星，其他的归到二星。实际操作中，很少有照片是二星。&lt;/li&gt;
&lt;li&gt;三星：优秀的照片。或是具有一定的美感，或是有所叙事，能勾起我拍照时的回忆，可能会在以后时不时拿出来观看回味。&lt;/li&gt;
&lt;li&gt;四星：家人朋友的露脸照片。因为涉及到隐私，所以单独处理。&lt;/li&gt;
&lt;li&gt;五星：非常好的照片，或者需要复杂后期的优秀照片。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在第一遍筛选过程中，如果在两个星级之间摇摆，则尽量向高分靠拢。后面处理时候会根据需要对照片降级。在每一百张未被拒绝的照片中，五星比例大概在百分之五，三星百分之二十，其余大部分一星。当然，这个比例会根据拍摄的题材和场景变化。&lt;/p&gt;
&lt;h3 id="处理"&gt;处理&lt;/h3&gt;
&lt;p&gt;第一步，先删除被拒绝的照片。然后根据星级，按从高到低的顺序处理，同时，如果有需要，对照片进行降级。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;五星：逐张精细处理，包括曝光，色彩，裁剪等等。这其中的技巧和习惯因人而异，就不展开说了。如果有多张重复，考虑将重复照片降级为二星；如果处理空间不大，或者觉得照片没有那么好看，考虑降级为三星。&lt;/li&gt;
&lt;li&gt;四星：原封不动&lt;/li&gt;
&lt;li&gt;三星：与五星类似，逐一处理。有重复或者没那么好看的，降级成一星&lt;/li&gt;
&lt;li&gt;二星：原封不动&lt;/li&gt;
&lt;li&gt;一星：使用 Lightroom 的自动处理功能（快捷键 &lt;code&gt;Shift&lt;/code&gt; + &lt;code&gt;A&lt;/code&gt;）快速处理。如果觉得有的照片实在没有价值，考虑删除。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在每一星级的处理之后，确保被拒绝的照片均已删除，从而减少无效劳动。&lt;/p&gt;
&lt;h3 id="导出和存储"&gt;导出和存储&lt;/h3&gt;
&lt;p&gt;根据星级不同，导出 RAW 和 JPEG 两种格式，存储在移动硬盘、Flickr、Google Photos 三个位置。JPEG 我会按百分之九十的品质导出，追求极限的话可以用百分之百，但我没仔细比较过两者差别，我也没有强迫症，反正乍一看看不出什么不同。心里不膈应就行了。&lt;/p&gt;
&lt;p&gt;首先，在电脑的本地硬盘建立三个目录：&lt;code&gt;google_photos&lt;/code&gt;，&lt;code&gt;flickr&lt;/code&gt; 和 &lt;code&gt;raw&lt;/code&gt;。接下来分别进行如下操作：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;五星：导出 RAW 格式到 &lt;code&gt;raw&lt;/code&gt; 目录，同时导出 JPEG 格式到 &lt;code&gt;flickr&lt;/code&gt; 目录&lt;/li&gt;
&lt;li&gt;四星、二星：导出 RAW 格式到 &lt;code&gt;raw&lt;/code&gt; 目录&lt;/li&gt;
&lt;li&gt;三星：导出 JPEG 格式到 &lt;code&gt;flickr&lt;/code&gt; 目录&lt;/li&gt;
&lt;li&gt;一星：导出 JPEG 格式到 &lt;code&gt;google_photos&lt;/code&gt; 目录&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;导出完毕后，将 &lt;code&gt;flickr&lt;/code&gt; 目录中的所有照片复制到 &lt;code&gt;google_photos&lt;/code&gt; 目录下，使 &lt;code&gt;flickr&lt;/code&gt; 成为 &lt;code&gt;google_photos&lt;/code&gt; 的一个子集。然后，在移动硬盘（或 NAS，或其他永久存储资料的地方）建立一个目录，用于存放所有本次导出的照片。将 &lt;code&gt;google_photos&lt;/code&gt; 和 &lt;code&gt;raw&lt;/code&gt; 文件夹备份进移动硬盘。同时进行在线备份，将 &lt;code&gt;google_photos&lt;/code&gt; 上传到 Google Photos。将 &lt;code&gt;flickr&lt;/code&gt; 上传到 Flickr。上传 Flickr 时可以根据情况标记相册、标签，不强求完美。&lt;/p&gt;
&lt;h3 id="体验"&gt;体验&lt;/h3&gt;
&lt;p&gt;这种策略实行了几个月，处理过五六次照片，总体比较满意，修出了一些好看的照片，理论上也能很大程度保证照片的安全。比起以前无脑直出，体会到了照片处理软件和 RAW 格式的强大魔力。统计了某一次拍摄，共两百张照片使用 Lightroom 的处理时间，其中没有高难度的风景照或是需要精修的照片，大概花费了一个小时，还是可以接受的。保持效率的重要因素就是，学会取舍。一张照片如果看着不那么顺眼，就快修然后 move on（怎么翻译？）。&lt;/p&gt;
&lt;p&gt;这个工作流也有一些欠缺的地方，比如二星和四星的处理方式其实一模一样、硬盘照片如何检索、如何保证安全等等。同样的道理，这些都是要取舍的。如果今后有更好的点子或&lt;strong&gt;非常多&lt;/strong&gt;的闲钱（用来搭 NAS、组 RAID、或者订阅更大的网盘）再说吧。努力拒绝完美主义，拒绝强迫症，除非因为它们而做不到：）。&lt;/p&gt;</description></item><item><title>琐事 2 - 写博客与丢钱包的感悟</title><link>https://blog.hgao.net/post/trivia2/</link><pubDate>Sat, 02 Nov 2019 +0000</pubDate><guid>https://blog.hgao.net/post/trivia2/</guid><description>&lt;h3 id="博客"&gt;博客&lt;/h3&gt;
&lt;p&gt;我意识到，从二〇十七年期，我开始失去了在这个博客写文章的习惯。这两年，每年一两篇产出，也并不是发自内心的抒发，而是宽慰自己：看，你还坚持着这个爱好。所以，我也不喜欢这些「憋」出来的内容，比如 &lt;a href="https://blog.hgao.net/post/best-of-2017/"&gt;《Best of 2017》&lt;/a&gt;，比如&lt;a href="https://blog.hgao.net/post/pokemon-lets-go-pikachu-review/"&gt;《〈精灵宝可梦：Let&amp;rsquo;s Go! 皮卡丘〉七十小时游戏体会》&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;我一直有意无意地把博客内容当作对生活之美的记录与总结。过着快乐的生活，亦觉得记之于笔下是一种快乐。但我现在要承认，我过得不快乐。&lt;/p&gt;
&lt;h3 id="丢钱包"&gt;丢钱包&lt;/h3&gt;
&lt;p&gt;始终在被周围推动着前进。在有的时候，大脑和记忆都停止了工作，因为不需要自己行动，环境就会把我导向指定的目的地。于是，在前天我丢钱包的时，对于在上次使用完之后有没有把它放回到背包里，竟没有一点印象。&lt;/p&gt;
&lt;p&gt;但这个毛病其实不是最近才有，而是几乎贯穿我的一生了（笑）。诸多例子实在不忍列举。我想了一些新的变化，应用在自己的生活方式上。后面一起看看成效吧。&lt;/p&gt;
&lt;p&gt;这些变化很可能会让我写出更多的博客，我很有信心。但我能坚持多久，是否会被低成本的快乐诱惑，在自己的快乐程度有所改观之后抛弃这些变化、回到原点？我不是很有信心。&lt;/p&gt;
&lt;h3 id="琐事"&gt;琐事&lt;/h3&gt;
&lt;p&gt;另外，九月份生日的时候受到了阿炜送的贵重礼物，一台索尼 A7iii 相机和一只腾龙 28-75mm F2.8 镜头。我自己也配了一只 28mm F2 和 50mm F1.8，随心拍了一些照片。考虑到备份和分享，决定进军 &lt;a href="https://www.flickr.com/photos/hikoship/"&gt;Flickr&lt;/a&gt;。欢迎交流：）&lt;/p&gt;</description></item><item><title>An Optimization of QMK Mod-tap (Layer-tap) for Fast Typists</title><link>https://blog.hgao.net/post/qmk-mod-key/</link><pubDate>Wed, 22 May 2019 +0000</pubDate><guid>https://blog.hgao.net/post/qmk-mod-key/</guid><description>&lt;p&gt;&lt;strong&gt;The code doesn&amp;rsquo; work as expected. Please refer to &lt;code&gt;IGNORE_MOD_TAP_INTERRUPT&lt;/code&gt; and &lt;code&gt;PERMISSIVE_HOLD&lt;/code&gt; &lt;a href="https://github.com/qmk/qmk_firmware/blob/master/docs/config_options.md"&gt;here&lt;/a&gt; for possible workarounds.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://qmk.fm"&gt;QMK&lt;/a&gt; is the most powerful and popular keyboard firmware in custimzed mechanical keyboard community. It allows you to can write C code to set macros to any key, which makes it highly playable.&lt;/p&gt;
&lt;p&gt;Apart from programming, QMK has quite a lot of pre-set quantum keys. An important category of them is mod-tap keys. That means, when you tap the key, it prints a normal output, such as a letter, digit or any other key on the keyboard; when you hold it, it works like a mod key, such as Control, Alt, Shift or Win (Command/Super). That&amp;rsquo;s particually useful for mini keyboards (40% layout, for example), where keys are highly reused.&lt;/p&gt;
&lt;p&gt;However, the performance of mod-tap may not meet the need of fast typing. For example, if the mod-tap key is Control(A), and you press Control(A) and C fast, it actually prints &amp;ldquo;AC&amp;rdquo; on the screen, but not sends a Control + C combination. The same thing happens on layer-tap key.&lt;/p&gt;
&lt;p&gt;I haven&amp;rsquo;t read the source code of mod-tap keys, but with programming, we can avoid this issue completely.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;QMK_KEYBOARD_H&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;lctl_other_key_pressed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt; &lt;span class="n"&gt;lctl_hold_timer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;process_record_user&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt; &lt;span class="n"&gt;keycode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;keyrecord_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;keycode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Left control. Can be changed to any modifier, or MO({LAYER_NUM}) for layer-taps.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nl"&gt;KC_LCTL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pressed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Records press time.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="n"&gt;lctl_hold_timer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;timer_read&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// At the beginning, no other key is pressed.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="n"&gt;lctl_other_key_pressed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;timer_elapsed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lctl_timer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;space_other_key_pressed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Sends out &amp;#39;A&amp;#39; if the key is held for less than 0.5s and no other key was pressed during the period.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="nf"&gt;tap_code&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;KC_A&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Another key is pressed.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="n"&gt;lctl_other_key_pressed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;In this piece of code, we set the keycode of the mod-tap key to a normal Control key. It ensures it works perfectly as a mod key. Then we attach another event to this key when it is released - we sends a normal letter, which is the &amp;ldquo;tap&amp;rdquo; part of mod-tap. Tap is only triggerred when the key was held shortly and no other key is pressed before release. This way, even fast typists can enjoy mod-tap keys happily.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not sure if the current behavior of mod-tap is expected by QMK developer, but I will do some investigation on it and see if I can make the solution general to the default mod-tap implementation.&lt;/p&gt;</description></item><item><title>《精灵宝可梦：Let's Go! 皮卡丘》七十小时游戏体会</title><link>https://blog.hgao.net/post/pokemon-lets-go-pikachu-review/</link><pubDate>Thu, 06 Dec 2018 -0800</pubDate><guid>https://blog.hgao.net/post/pokemon-lets-go-pikachu-review/</guid><description>&lt;h2 id="废话"&gt;废话&lt;/h2&gt;
&lt;p&gt;眼看年关将至，就在「Best of 2018」即将再一次成为年度唯一的一篇博文之际，我发新文章了！其实这一年其实有过几次想要写博客的冲动，并且在笔记软件里也列出了要点，但由于时间原因，要么写了一半烂尾，要么就没开始动笔。最近下了某种决心，于是终于写了这篇文章。&lt;/p&gt;
&lt;h2 id="正文"&gt;正文&lt;/h2&gt;
&lt;p&gt;写文章的时候，我正一边码字，一边在是不是瞅一眼旁边的 Switch，看看常盘森林里有没有钻出一直金色的独角虫——我已经连续捕捉一百多只屎黄色的独角虫了，中间遇到了一只遍体通红的闪光铁甲蛹，但始终没看到闪光独角虫。&lt;/p&gt;
&lt;p&gt;自从通关以后，这种行为几乎就成为了我在这款游戏里的仅有的几件活动之一。它和其他的几件活动形成一个循环：打天王刷钱→买球→刷高个体值的宝可梦→刷闪光宝可梦→球用光→打天王刷钱。这个过程不得不说是十分无趣且枯燥的。我还算比较喜欢刷刷刷以及收集类的游戏，比如在《无双》系列中喜欢拿全所有的专属武器，在《实况足球》里一定要每个夏天都要刷出一个妖人，但仍然觉得《精灵宝可梦》的「刷」更令人头痛且枯燥到夸张。&lt;/p&gt;
&lt;p&gt;令我有点难过的是，我已经记不太清我在通关之前对这款游戏是什么感觉了。至少应该比现在要好。一个月前，我拿到了我鬼送我的首发卡带，在解禁日当天就得以进入宝可梦的世界。这距离我写下那篇&lt;a href="https://blog.hgao.net/post/pokemon-20-anniversary-and-chinese-version/"&gt;《精灵宝可梦》二十周年纪念&lt;/a&gt;已经过去了两年多。可想而知，第一次面对首发、正版、中文、次世代，又是我鬼送的精灵宝可梦，我的内心有多么喜悦和激动！这些要素确实掩盖了游戏很多的缺点。就像我在知乎提过的问题那样，从模拟器到真机并没有给我带来游戏节奏过慢的苦恼，相反，这种走走逛逛的风格令我享受其中。其中我最爱的是大地图上显示真实的宝可梦，以及在对战中显示真实的场地。这种代入感的提升是前所未有的，，也是之前很欠缺的。另外就是中文翻译，有很多非常本土化的文字，我会觉得有些过于随意和网络口语化，但并不妨碍，十分有趣。看得出是关注最新流行中文圈的译者作品。&lt;/p&gt;
&lt;p&gt;谈完这些新玩家重点关注的方面，再来说老玩家津津乐道的对战系统。很遗憾，这部作品牺牲了非常多的对战元素。个中原因或许是吸引新玩家，或许是整合新系统，或许兼而有之。但最后的结果，是努力值、道具、特性这三项非常传统且重要的对战元素被取消。再考虑到本作只有第一世代的一百五十一只宝可梦，战术变化就少得可怜。从我个人经历来看，每次在线对战都能遇到对面有一两只和我一样的宝可梦，比如铁甲暴龙、暴鲤龙、呆河马、皮可西、五彩泥。&lt;/p&gt;
&lt;h2 id="结尾"&gt;结尾&lt;/h2&gt;
&lt;p&gt;《精灵宝可梦》是我最喜爱的游戏系列之一。对于这部新作品，通关前的游戏体验也是我最愉悦的游戏体验之一。可惜通关之后少得可怜，刷个体值的体验又十分糟糕。这是宝可梦系列的一个特色，但也是在现时代如云的优秀游戏中十分扎眼的一个缺陷。我还会继续购买它的下一步作品，但是可能不会再抱有这么高的期待。&lt;/p&gt;
&lt;h2 id="真结尾"&gt;真结尾&lt;/h2&gt;
&lt;p&gt;拖到一月廿一日才写完，但好歹写完了。&lt;/p&gt;</description></item><item><title>Best Of 2017</title><link>https://blog.hgao.net/post/best-of-2017/</link><pubDate>Tue, 19 Dec 2017 +0800</pubDate><guid>https://blog.hgao.net/post/best-of-2017/</guid><description>&lt;p&gt;「Best」系列是从二〇一五年开始写的。当时刚开始鼓捣博客系统，看到几位关注的博主都有写年终总结的习惯，自己也就尝试了一下。在此之前，总觉得每一年都平平淡淡，无非就是升学、玩游戏、偶尔的短途旅游。但是现在，每次写年终总结，都觉得这一年发生了好多好多事。不知是因为往年的事情被我疏忽了，还是说每个人的人生，在这个年龄都会发生剧变？亦或是我自己本身改变了呢？&lt;/p&gt;
&lt;h3 id="学业"&gt;学业&lt;/h3&gt;
&lt;p&gt;度过了在 USC 的第一学期之后，我便对这里的学习强度和压力有了大体的把握——相对于本科来说轻松了很多。算下来，我一共只能在这两年的时间里上六门正儿八经的大课，所以尽量还是上一些口碑好一些、收获多一些的课吧！可惜在 USC，这样的课又实在不多。于是，我选了一门份大量足的重要课程——操作系统，并为它搭配了一门超级水课——数据库。&lt;/p&gt;
&lt;p&gt;操作系统给我一个补强本科基础的机会。我重新温习了 C 语言，搭建了从 Mac 远程登录到 Linux 虚拟机的工作流，借机配置了一套称手的 Vim。在完成作业的过程中，也解决了很多本科时候囫囵屯枣留下的谜团。但是在学期后半段，因为兼顾找工作的关系，课程还是不可避免地落下了，最后的几个大作业也做得很挣扎。至于另一门数据库E课程，我不想多说，因为实在是太烂了。最终，在操作系统课上，我拿到了 A，很满意。数据库是 B+，我也很满意，因为我几乎没去上过课，而试卷的内容也让我确信不值得花时间去上它。&lt;/p&gt;
&lt;p&gt;到了下半年，为了能够有更多的精力刷题找工作，我只选了一门课。一学期一门课，真的是不可思议。这门课是人工智能，内容也都是我本科有所了解却一知半解的。然而这门课覆盖太广又不够深入，所以效果并没有操作系统那么好。几次作业也只能称得上是有趣，并没有太多锻炼价值。现在回想起来，或许学一门自然语言处理课程要更加合适。这门课我也拿到了 A，而且还高出 A 线不少。这要得益于前半程作业和考试的优秀发挥，使得我在最后一次期末考试上，有资本只考五十多分。&lt;/p&gt;
&lt;p&gt;转眼间，南加大的学习已经过去了四分之三。剩下最后一学期，虽然没有了找工作的压力，但同时学校也没什么好课，索性就安安稳稳求个毕业吧。&lt;/p&gt;
&lt;p&gt;南加大的计算机硕士项目一直在国内留学圈争议颇多。位置好，录取松，就业率尚可，使这里成为一个适合刷题找工作的学校；同时它费用高、课程水，又让人觉得学不到什么，不能算一个学校。我觉得如果以找工作为目的，这里还是合适的。少花些时间在本科已经学过的课上，多刷题，找个好工作概率还是很大的，只是扔了那么多钱却没学到什么，心里可能会有些落差；真想学东西，就自己多和老师去联系。毕竟水的项目本身，不是学校的资源。&lt;/p&gt;
&lt;h3 id="工作"&gt;工作&lt;/h3&gt;
&lt;p&gt;每次回想起今年找工作的两段经历，都觉得跌宕起伏，自己很幸运。&lt;/p&gt;
&lt;p&gt;我自己本质上是个难以自我驱动的人。临近出国才努力学习提高绩点，临近学期末才开始慌张，抓紧时间找工作。要不是一月份我鬼拿到了亚马逊的录用，我连最后能不能找到实习都很难说。不过从另一方面看，人在危急时候的潜力还是很可观的。周围人都得到实习岗位之后，我立即改变了之前慢慢悠悠找工作的状态，在 LinkedIn 上拉下脸皮找人内推，利用各种机会修改充实简历，并每天投几家公司。尽管只有一小部分人回复，但至少我得到了第一个面试机会。这段时间我鬼给我的鼓励起到了十分重要的作用，让我能够重振信心，不断尝试💕。最终凭借我之前的底子，以及短期内刷的题，过了几个首轮，然后拿到了 EA 的录用。更幸运的是，跟我鬼的办公室离得非常近，我们得以暑假一起去西雅图实习。&lt;/p&gt;
&lt;p&gt;实习的过程充实而开心。EA 团队的气氛很好，特别是组里的印度大哥，场上场下都对我特别关怀。我们一起玩 FIFA，聊体育，讨论技术。我觉得自己的代码能力能够胜任组里的工作，但到了后期，因为一些兼容性问题，效率比较低下，后来觉得，在这件事上和经理应该多沟通一些。最终我展示了自己的 Demo，大家都觉得不错。事后，经理并没有直接录用我，说目前的职位没有空缺，还问了我对别的组有没有兴趣。从我自己的角度说，在 EA 固然开心，但还是希望能去更加核心的互联网公司。患得患失之间，也错失了主动和组里保持联系的黄金时间。不知道后面和他们会不会再有交集，毕竟职场是职场，私下是私下。但至少希望和印度大哥还能再联系吧。&lt;/p&gt;
&lt;p&gt;到了下半年，又到了找全职的季节。我自以为凭借之前积累的经验和实习经历，找全职会更加轻松，但是改简历的拖延让我错过了九月份的最佳机会。十月份内推了很多家，但是有的大公司已经招满，有的直接拒了简历，显然是之前的估计过于乐观了。中间曾经拿到 Wish 的面试并过了第一轮，但第二轮跪倒在一个简单的算法题上，大意失荆州。此后我更加注意基础的算法题，但竟然再也没拿到什么面试。&lt;/p&gt;
&lt;p&gt;直到十一月，Google 来了面试。这算是我面试的第一家一线互联网公司，从最开始就没什么信心。但是不得不说 Google 的招聘流程和人员非常专业，为我描绘了清晰的招聘流程以及需要的准备资料，并特别强调了他们看重「思考的过程」，并希望我尽可能多说出我自己的思路。这算是我的强项，使我的紧张感降低不少。第一轮电话面试，题目比较难，但我一直和面试官保持沟通，他也耐心听取我的想法。最终我想出了一个不算最优，但是效果还凑合的解法，得到了他的肯定，并拿到了现场面试的入场券。现场面试的四轮题目，我遇到的题又都不算难，只能说特别幸运了。于是尽可能和面试官讨论，最终通过了招聘委员会，得到了录用。&lt;/p&gt;
&lt;p&gt;相比于找实习，我这次过分乐观，但最后命运眷顾，得以加入最想加入的公司。从结果来看是很好的，但我更希望能从容一些；但要做到这点，又只能靠过硬的实力来撑腰。同时，凡事都要尽早准备，早的总比晚的好，不能每次都指望幸运。&lt;/p&gt;
&lt;h3 id="游戏"&gt;游戏&lt;/h3&gt;
&lt;p&gt;今年我鬼送的生日礼物是任天堂 Switch。这是我收到过的最贵的礼物，也是我的第一台实体游戏机（之前都是模拟器）。买过的游戏包括马里奥赛车、剪纸、《塞尔达传说：旷野之息》（民间翻译为荒野之息）、《Just Dance》、《FIFA 18》、《Arms》、马里奥奥德赛，还是不少的，加起来已经超过一台主机的钱了。&lt;/p&gt;
&lt;p&gt;第一个要说的，毫无疑问，是旷野之息。&lt;/p&gt;
&lt;p&gt;作为一个没拥有过主机、只玩实况、无双、CS 和非即时游戏的玩家，其实有点担心塞尔达系列是不是自己的菜。当年买了备受好评的《仙剑奇侠传四》，但玩了几个小时就弃坑，所以即时早就耳闻旷野之息的大名，仍然不确定自己是否能玩得下去。但是从游戏刚开始，旷野之息给我的感觉就是：舒服。可能是我好久没有玩过最新的优秀大作了吧，旷野之息的 UI、操作，乃至整个系统都给我这个新手一种舒适的感觉。我的林克初期不太会盾反、闪避，遇见守护者一般都用 SL 打法或者干脆躲着走，但这不代表游戏体验差。林克在旷野中有无数事情可以做：骑马，打猎、砍柴、做饭，爬山，滑翔、解谜、滚雪球。玩着玩着，林克加了足够多的心心，也能慢慢磨死守护者和加农了。&lt;/p&gt;
&lt;p&gt;旷野之息的游戏的地图极大，站在山顶向远处眺望，地图的边缘可能只是几个像素点，如同现实世界中十几公里的距离；地图上的场景也极多，冰川、雪山、火山、草原、湖泊、沙漠、沼泽，无所不包；当林克从高塔跳下、在空中滑翔，强风在耳边呼啸，眼前的景色逐渐清晰，我感觉到这个迷你机器里传来无比自由的快感。旷野窒息的一切都太丰富多彩，在此之下，战斗和谜题反而都显得不那么重要了。它像一个旅游宣传片，骄傲展示着海拉尔大陆的无限风光，又像一个虚构的田园，让玩家变回无忧无虑的孩子，重温儿时那些有幸经历，或无法经历的探险。&lt;/p&gt;
&lt;p&gt;说到《旷野之息》的缺点，那就是这个有戏有点让人感觉寂寞了。游戏最初，在拜访卡卡里克寸之前，林克只遇到老国王一个人类。后期通关后，NPC 只能重复着相同的话，做着相同的事。当然，这算是吹毛求疵了，所有的单机游戏都无法避免这样的结果，但我还是希望能给林克找一个伙伴，在旅途中不至于永远孤身奋战。游戏设定通关后自动载入打 Boss 之前的存档，导致塞尔达永远要被困在海拉尔城堡，未免缺少了些人情味。好吧，林克还可以与马作伴，我也只能这么自我安慰了。&lt;/p&gt;
&lt;p&gt;除了《旷野之息》，另一个享有好评的游戏是《超级马力欧：奥德赛》（以下简称「奥德赛」）。相对于旷野之息，奥德赛的风格更加清新，氛围也更加轻松。卡通的人物设定让不喜欢写实的丑陋怪物的玩家也能愉快玩耍。通关下来，感觉奥德赛确实是一款优秀的游戏，但体验上远不及旷野之息丰富和震撼。不能攀爬，导致很多地方要么去不了，要么绕路才能去；不能滑翔，导致能看到的景色只局限与地面；地图总体不小，但各个地图割裂，相比之下就感觉空间狭窄而压抑。&lt;/p&gt;
&lt;p&gt;《Just Dance》是为了运动而买的，然而玩了一会就弃了，对口的歌不多，趣味性也不太够。&lt;/p&gt;
&lt;p&gt;《Arms》是我后来才知道的一个游戏，也是体感操作，但由于是格斗游戏，趣味性就大得多了。虽然不像拳皇一样有炫目的连招，但自己亲自出拳的感觉是其他游戏不能比的。尽管基本操作只有左拳、右圈、跳跃、冲刺，但现在有各种各样的 Arms 格斗比赛，可见这个游戏的格斗系统值得深挖。&lt;/p&gt;
&lt;p&gt;《FIFA 18》……怎么说呢？对于我这种重度足球游戏爱好者，能够在掌机上玩到《FIFA》是一种特别的享受。Switch 版本的 FIFA 18 相比 PS 和 XBox 平台少了一些模式，但已经足够好玩。而且我初次尝试 Ultimate Team 便欲罢不能，果然是与人斗其乐无穷！但 EA 这家公司，我的前东家，哪都好，但确实圈钱圈得比较厉害（不然员工也不会有这么好的待遇是吧）。太多人抱怨在 FIFA 里充值抽球员，抽到的都是废卡。我抵挡住了诱惑，最后也没向前东家捐出一分钱……我后期的阵容还是不错的，组了一套西甲阵容，队里有科克、萨拉赫、佩德罗、拉什福德、阿杜里斯、格策、塞尔吉罗贝托、胡安弗兰等一众二线球星。不过呢？在某次比赛中，被电脑戏耍、输了球的我十分生气，敲了一下 Switch，我的 FIFA 卡带就再也读不出来了，从此节省了好多业余时间……真的是个令人有爱有恨的游戏。《FIFA 19》上市时，我可能还是会买吧，笑。&lt;/p&gt;
&lt;p&gt;另外还玩了手机上的《逆转裁判5》英文版。很开心能继续少年时的爱好，不过打到第五章有点疲劳了，目前在烂尾状态。。。&lt;/p&gt;
&lt;h3 id="旅行"&gt;旅行&lt;/h3&gt;
&lt;p&gt;这一年，第一次去了美国的国家公园——瑞尼尔雪山国家公园。在西雅图任何一个空旷角落，往四周望去，能看到的除了太空针，就是远处的瑞尼尔雪山了。有一次在 Alki beach 漫步，当夜色降临时，猛然发现瑞尼尔的阴影笼罩在深蓝色的天边，一股强烈的压迫感扑面而来，如同抬头时看到一颗比月亮大百倍的天体。&lt;/p&gt;
&lt;p&gt;七月，冰雪渐融，租了个小车，和我鬼踏上雪山领地。两个多小时的路程，眼看着山影渐渐变大而清晰，心情十分激动。然而来到瑞尼尔，上山没走几步路，trail 就已被积雪覆盖。我们就穿着运动鞋，不惧艰险地继续爬，四脚并用，终于到了山顶。途中有个雪坡，上面有几个人为制造的滑梯，很多人来来回回爬上山又滑下来，乐此不疲。我爬到滑梯顶端的时候，路很狭窄，差点顺着滑梯滑下去，好在路人拉了我一把，才免于重新爬过。站在山顶，看着头顶湛蓝的天，和脚下绵延的雪岭，感到自身的渺小，同时又有征服的快感。下山的时候，我们没有走对路，越到后面越难走，几乎只能坐在地上用裤子滑雪。最后勉强靠着手机的指南针，赶在天黑前下山。&lt;/p&gt;
&lt;p&gt;下山以后，已经衣服裤子全湿，而且两个人都晒成了大红脸。。。不过个中体验却是令我一生的难忘的。引用我鬼的话，「无限风光在险峰」。&lt;/p&gt;
&lt;h3 id="其他"&gt;其他&lt;/h3&gt;
&lt;p&gt;今年看了两部动画，一个是好友安利的《星际牛仔》，一个是四月播出的《进击的巨人》第二期。两部都是非常优秀的动画。《星际牛仔》出品于一九九八年，拿到今天观看，却丝毫不落俗套，给我耳目一新的感觉。**我认为这是我至今看过最精彩的动画之一，也是最完善的动画作品（没有之一），几乎没有缺点。&lt;strong&gt;强烈推荐给所有动画爱好者观看。《进击的巨人》则延续了第一季的质量，画面更加精美，节奏一如既往地快速而紧张。&lt;/strong&gt;(以下包含剧透）**莱纳和贝尔托特在城墙上被艾伦一行揭发，变身巨人时的剧情，**是我所见过的最震撼的动画剧情高潮。**早在二〇一三年，动画第一季播出时，我就或多或少被剧透到原作漫画中的设定：「巨人都是人类变的」、「莱纳是铠巨人」等等，所以内心算是有所准备。但真正看到这一段，还是受到了巨大的冲击。&lt;/p&gt;
&lt;p&gt;受了第二季影响，我终于决定去看巨人的原作漫画，并立刻深陷其中。不同于《星际牛仔》由一个个单体故事引导主线，《进击的巨人》通篇都是主线剧情，自然就更引人入胜；而谏山创又十分擅长制造剧情冲突，使得漫画中的反转频繁剧烈而又不显突兀。现在追到了最新的一百多话，世界观已经铺开，漫画也已经进入最后的决战。每月初都盼着更新，又惋惜今后是看一话少一话了。另外，受到实习时组里大哥的影响，还看了《死亡笔记》。也是剧情很精彩的一部，但中二气息比较明显，不如《巨人》合我心意。&lt;/p&gt;
&lt;p&gt;突然想起来还有一部，就是《精灵宝可梦：日月》。没什么说的，配合 B 站弹幕，完美的泡面番。&lt;/p&gt;
&lt;p&gt;另外被我鬼领入了漫威系列的坑。开始时发现要补那么多电影我是抗拒的，但看进去以后觉得很有意思。每次发新片都能和心爱的人一起观影、讨论剧情，是很难得且幸福的事情。&lt;/p&gt;
&lt;p&gt;然后就是买了个车，有点旧，不过开着还凑合。感觉自己不是个爱车的人，不愿意花时间去深入了解、挖掘，车上的一些功能甚至还不清楚。可能是没买到自己想要的车吧（笑）。&lt;/p&gt;
&lt;h3 id="best-of-2017"&gt;Best of 2017&lt;/h3&gt;
&lt;p&gt;和往年一样，最后是这一年想要推荐的的技术、产品和作品：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Nintendo Switch——感谢我鬼！爱你！&lt;/li&gt;
&lt;li&gt;《塞尔达传说：旷野之息》&lt;/li&gt;
&lt;li&gt;iPhone SE——没什么好说的，图个省心&lt;/li&gt;
&lt;li&gt;《星际牛仔》&lt;/li&gt;
&lt;li&gt;《进击的巨人》&lt;/li&gt;
&lt;li&gt;漫威电影宇宙&lt;/li&gt;
&lt;li&gt;Spf13 Vim——我使用的 Vim 配置。该配置作者也是本博客的生成引擎 Hugo 的作者。可惜该配置似乎已不再维护。&lt;/li&gt;
&lt;li&gt;tmux——SSH 神器&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;最后，感谢这一年在学习、找工、生活上各路贵人的相助，希望大家身体健康，笑口常开。希望自己和我鬼一切安好，珍惜时间，多多努力。&lt;/p&gt;</description></item><item><title>Best Of 2016</title><link>https://blog.hgao.net/post/best-of-2016/</link><pubDate>Sat, 31 Dec 2016 -0800</pubDate><guid>https://blog.hgao.net/post/best-of-2016/</guid><description>&lt;p&gt;十二月三十一日上午，一觉醒来，东八区已经先行一步，前往二〇一七。看着朋友圈里的总结，有些恍惚，仿佛自己的二〇一六平稳而悠长。去年今日，我猜测着此时此刻的自己会身处何方，并相信二〇一六会是让我人生剧变的一年，因为我第一次离家，来到大洋彼岸独自生活。如今回首，地理环境的转变实在算不上什么，有「人」的存在，才有最好的二〇一六。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="学业"&gt;学业&lt;/h3&gt;
&lt;p&gt;还是先说说学习吧！上半年在写论文和毕业设计中度过，现在想来十分遥远。确定了以工业界和互联网为发展方向后，对于之前实验室的科研项目就难有动力。不得不说，与二〇一五相比，这个上半年过得浑浑噩噩，不够努力。但是作为大学最后一个学期，中间穿插一些刷题、旅行、聚会，能以较高的质量完成毕业设计，也就不多强求了。感谢吴老师和前辈们一年多来的培养和关照！&lt;/p&gt;
&lt;p&gt;来到南加大以后，又回到了每天上下课的日子，只是每学期只有两门专业课，再也不需要早起。&lt;/p&gt;
&lt;p&gt;算法课的内容大多在本科学过，比较烧脑，但题目做起来很有意思。平时作业难，但是不算分，坚持交了几周就放弃了。后来的事实证明，即使不写作业，只要吃透历年卷子，考试还是比较轻松的。三次考试都还不错，比较稳地拿到了 A。&lt;/p&gt;
&lt;p&gt;算法课虽然对我来说没有新内容，也不写代码，但温故知新，对于理顺一些思路还是很重要的。一些原来做起来费劲的 LeetCode 题目，上完课后就知道怎么写了。&lt;/p&gt;
&lt;p&gt;网页技术这门课让我很失望。虽然能够学到基本的建站和移动开发，但考试都是概念，几乎不能考察学生水平；课件是大段的白纸黑字，代码没有高亮，可读性极低，能看出制作者很不用心；作业细节扣得很死，无聊却没有任何练习意义；和 Lynda 合作，利用上课时间播放网络课程，强制学生观看，在质量参差不齐的视频上浪费时间；规定离奇，两个班级卷子一样却分开算分，作业交错班级也扣分，期末不能查卷子。&lt;/p&gt;
&lt;p&gt;至于这门课的好处：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;可以补充我欠缺的技术，比如 AngularJS 和 Android 开发；&lt;/li&gt;
&lt;li&gt;凭借不错的基础，能比较轻松拿一个 A；&lt;/li&gt;
&lt;li&gt;不点名，不用去上课，也就不用浪费时间。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;编程方面，做了一些小项目，最满意的是年初的爬虫系统，自己从头开始做，学会了用 Tornado 做后台，并抓取一亩三分地的数据；写了几个安卓小程序，都没有坚持维护；LeetCode 做了两百多道，但还需巩固，年底买了个付费会员，希望不要浪费。&lt;/p&gt;
&lt;p&gt;这学期算是弥补了大学 GPA 一直很低的遗憾，但与之相对的是找实习很失败。投了不少简历，却没有收到一个面试。一方面没有好好改简历，另一方面也没有花时间找内推。下学期机会不多，只能靠自身努力，希望能像去年上半年一样投入，并找到一份暑假的工作吧。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="旅行"&gt;旅行&lt;/h3&gt;
&lt;p&gt;二〇一六总体上学习压力不大（当然也没有很努力），去了不少地方。三月底和大学班级的同学去舟山毕业旅行，吃海鲜、爬普陀山、玩阿瓦隆，很开心。感谢葱班长的组织。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.hgao.net/images/post/best-of-2016/zhoushan.jpg" alt="舟山"&gt;&lt;/p&gt;
&lt;p&gt;从舟山回来以后，马上就和父母去了日本。这大概是我近几年最了解也最想去的国家，它确实没有令我失望。城市整洁有序，市民文明礼让，同时又有丰富的文化底蕴。大阪城天守阁的历史印迹、本能寺的安详静谧、京都动画工作室的朝圣、新干线的便利和科技感、上野公园樱花的凄美、东京塔的浪漫、秋叶原的热血悸动，都令我难以忘怀。与其他地方不同，在日本，有一种「不是来旅行，而是生活在此地」的感觉。各个方面，都让我觉得「啊，这就是那个一直看到、听到的国家，和我想像中一模一样」。很可惜没有专门为这次行程写一篇游记，但我真的想要再去好多次。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.hgao.net/images/post/best-of-2016/ueno.jpg" alt="上野公园"&gt;&lt;/p&gt;
&lt;p&gt;毕业后，和父母去了趟北京，其中的具体经过被我写成一篇&lt;a href="https://blog.hgao.net/post/beijing-trip-2016/"&gt;北京启示&lt;/a&gt;，不再赘述。即将离开故土的中国人，去看一看很不错。&lt;/p&gt;
&lt;p&gt;下半年来到洛杉矶，至今已经去过城市中大部分的地方。总体而言，脏乱的环境、混乱的治安、拥堵的道路、匮乏的公共交通让它不算是个宜居的城市；另一方面，它又是绝佳的美食、购物圣地。虽然这些对我最初没有什么吸引力，但遇到鬼姑娘之后，开始更注重生活中的小乐趣，跟别处的同学一比，确实能体会到洛杉矶的优势。&lt;/p&gt;
&lt;p&gt;感恩节期间没去别的城市，因为迪哥和葱狗来找我。几个人租了一辆 Nissan Altima，兜兜转转，很方便。半年没见，聚到一起还是熟悉的感觉，十分美妙，希望两位一切顺利，今后常聚。还车前一天，和鬼姑娘沿着一号公路，开了一个小时去马里布海滩，吹吹海风，捡捡石头，无比惬意。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.hgao.net/images/post/best-of-2016/malibu.jpg" alt="马里布"&gt;&lt;/p&gt;
&lt;p&gt;寒假和鬼姑娘坐火车南下圣地亚哥，是唯一一次出城。看了中途岛博物馆，逛了老城、巴博亚公园，玩了海洋世界。火车路线上海景无敌，但还是希望能搞辆小车开开，以后可以常去。当然这都是找到实习的后话了。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.hgao.net/images/post/best-of-2016/midway.jpg" alt="中途岛博物馆"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="零碎时间"&gt;零碎时间&lt;/h3&gt;
&lt;p&gt;这一年读书很少，科幻方面看完了《机器人》系列和《海伯利安》的第一部（后者实在不好看），另外看了些关于男女爱情的书，包括《红玫瑰》和《失乐园》，并不算引人入胜。最喜欢的作品是王小波的《黄金时代》，很惊讶作者在那个动荡的年代能怀着如此幽默和自由的灵魂。&lt;/p&gt;
&lt;p&gt;年初的时候被基友安利了狼人杀真人秀节目《Lying Man》，从此研究起狼人套路。开学后跟学院里的同学玩了很多，很开心，也认识了不少朋友。来美国之后，还因为狼人和鬼姑娘相识，并遇到了现在的几个基友。这波狼人热潮随着申屠的备受瞩目而达到顶峰，可能又会由于偷看事件而逐渐退烧、回归小众。但它把不认识的人连接到一起，就是最大的价值。&lt;/p&gt;
&lt;p&gt;足球方面看得越来越少，在美国看英超，时间还不如国内舒服。明年年初欧冠淘汰赛开打后，可能会多看一些吧。可惜这赛季切尔西战术革新后如此勇猛，没能透过直播去体会，有些遗憾。&lt;/p&gt;
&lt;p&gt;ACG 方面，年初看了一点初代高达后弃坑，拳皇也没怎么练习。玩穿了《精灵宝可梦：白》，并&lt;a href="https://blog.hgao.net/post/pokemon-white-clear/"&gt;写了一篇通关体会&lt;/a&gt;。在 Steam 上特价买了《传送门》，听到了《内核恐慌》的口号「No hot feelings~」，但第一部还没玩完。在 iPad 上下载了一个《Human Resource Machine》，是个闯关编程游戏，正在不定时攻略中。&lt;/p&gt;
&lt;p&gt;开始常规性观看电影和美剧，目前正在补《权力的游戏》第二季和一些老电影。今年看了不少动画电影，《疯狂动物城》、《你的名字》都是很棒的作品，而&lt;a href="https://blog.hgao.net/post/bigfish-begonia/"&gt;《大鱼海棠》&lt;/a&gt;虽争议颇多，至少歌还是很好听的。&lt;/p&gt;
&lt;p&gt;《IT 公论》停更了，《内核恐慌》也改为不定期播出。再加上蓝牙耳机损坏，听播客的时间逐渐少了。&lt;/p&gt;
&lt;p&gt;毕业前重新研究了一阵魔方，买了一个国冠月晓（非广告），才发现现在的国产魔方制作已经突飞猛进。然而记不住新公式，成绩并没有提升很多。&lt;/p&gt;
&lt;p&gt;来了美国，经常自己做饭，喂饱自己是没问题。今后还要跟着鬼姑娘和大厨朋友们多学习。&lt;/p&gt;
&lt;p&gt;开始喜欢听粤语歌，如果能会唱就好了。&lt;/p&gt;
&lt;p&gt;去洛杉矶北边的六旗公园坐了各种变态的过山车，再也不怕了……&lt;/p&gt;
&lt;p&gt;明年如果有时间、有闲钱（嗯，找到实习）的话，想在技能树上点一下摄影。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="best-of-2016"&gt;Best Of 2016&lt;/h3&gt;
&lt;p&gt;与去年相同，列一下我觉得不错的技术、产品或作品。今年的榜单或许不够豪华，因为很多东西去年已经囊括，而今年新添的设备又不多，主要是精神上的一些收获。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;LeetCode&lt;/li&gt;
&lt;li&gt;Uber——感谢学校，每晚两次免费机会，保障学生安全。即使不免费，也大大方便无车群众出行&lt;/li&gt;
&lt;li&gt;信用卡——不带现金的感觉太好了&lt;/li&gt;
&lt;li&gt;Happy Hacking Keyboard Pro 2 无刻印键盘——不算完美、但足以退烧的键盘（并不是因为手感好，而是因为又骚又贵）&lt;/li&gt;
&lt;li&gt;HPE 87 茶轴机械键盘——三百块的国货，樱桃轴，兢兢业业让我的手舒服了四年。虽然已出，仍然追授&lt;/li&gt;
&lt;li&gt;Evernote——免费用户的权利逐渐被剥削，但仍是一个不错的笔记本+日记本&lt;/li&gt;
&lt;li&gt;QCY QY7 蓝牙耳机——京东爆款，廉价够用，在美国都能经常遇到同款&lt;/li&gt;
&lt;li&gt;每月十一元人民币、500MB 流量的中国联通手机卡&lt;/li&gt;
&lt;li&gt;《黄金时代》&lt;/li&gt;
&lt;li&gt;《基地》系列与《机器人》系列&lt;/li&gt;
&lt;li&gt;《疯狂动物城》&lt;/li&gt;
&lt;li&gt;Karabiner——键位映射软件，可惜不兼容 macOS Sierra&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;最后，谢谢父母的辛勤付出和关心照顾，谢谢鬼姑娘的爱和陪伴，谢谢老基友新基友的珍贵友谊。&lt;/p&gt;
&lt;p&gt;祝大家新年快乐，身体健康，努力有收获。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.hgao.net/images/post/best-of-2016/sunrise.jpg" alt="日出"&gt;&lt;/p&gt;</description></item><item><title>我的手机图鉴</title><link>https://blog.hgao.net/post/my-cellphones/</link><pubDate>Sun, 18 Dec 2016 -0800</pubDate><guid>https://blog.hgao.net/post/my-cellphones/</guid><description>&lt;p&gt;（写这篇博客之前读了 &lt;a href="http://dlyang.me"&gt;LanternD&lt;/a&gt; 同学的&lt;a href="http://dlyang.me/cellphone-evolution-1/"&gt;《手机进化史 · 上篇》&lt;/a&gt;和&lt;a href="http://dlyang.me/cellphone-evolution-2/"&gt;《手机进化史 · 下篇》&lt;/a&gt;，行文之中会下意识地借鉴，在此表示感谢。）&lt;/p&gt;
&lt;h2 id="功能机时代"&gt;功能机时代&lt;/h2&gt;
&lt;h3 id="联想型号不可考二五年九月-至-约二六下半年"&gt;联想（型号不可考，二〇〇五年九月 至 约二〇〇六下半年）&lt;/h3&gt;
&lt;p&gt;小学六年级，我转学到了上海。人生地不熟，为了方便与家人联络，在开学前几天，老爸带我去牡丹江路的电器商场（是国美永乐还是苏宁呢？）兜了一圈，带回了我的第一部手机。我不记得它的型号，连样子也有些模糊。能够确定的，那是一部一千多块的联想翻盖拍照手机，小巧的银色机身，尚可盈盈一握。这对于小学生来说已经相当奢侈了。拿到它的第一天晚上，和老爸在北翼商业街的大排档附近漫步，给老妈打了第一个电话，当时老妈用的还是几百块的小灵通呢，真是不好意思（笑）。&lt;/p&gt;
&lt;p&gt;除了那寒碜的摄像头，这部手机没什么可玩性。只是当时的需求也高不到哪去，一个俄罗斯方块足以让我玩到半夜，还会因为在将死之际化险为夷而心跳加速睡不着觉。&lt;/p&gt;
&lt;p&gt;至少在〇六年德国世界杯期间，它的表现还是很正常的。我清楚记得决赛夜里，正是它的闹钟把我准时唤醒。然而由于翻盖设计对排线的损耗，这部手机在之后经常点不亮屏幕，再加上当时有了老爸淘汰下来的备用机，我用它的频率日渐减少。终于，从某一天开始，它再也没有点亮过。如今，经过几次搬家，我已不知它现在委身于何处，或许仍在上海的家中吧。按照王国维的二重证据法，我既找不到实物，又没有相关的「史料」，恐怕是难以对它有更清楚的印象了。&lt;/p&gt;
&lt;p&gt;它的另一个重要意义是：&lt;strong&gt;从那时候起，我的身边就一直伴随着一个电子设备&lt;/strong&gt;。而这一点，可能永远都不会再改变。&lt;/p&gt;
&lt;h3 id="摩托罗拉-e360约二六下半年-至-二七年五月"&gt;摩托罗拉 E360（约二〇〇六下半年 至 二〇〇七年五月）&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://blog.hgao.net/images/post/cellphone/moto-e360.jpg" alt="摩托罗拉 E360"&gt;&lt;/p&gt;
&lt;p&gt;之前提到老爸淘汰了一部备用机，便是这摩托罗拉 E360。这是我们全家的第一部手机，大概是老爸在〇二、〇三年购买的。有意思的是，我不仅记得它的型号，还记得当时的价格是一千六百八十元（题外话：一段时间后我在手机店里看到了它，价格变成了八百八十元）。&lt;/p&gt;
&lt;p&gt;由于年代的关系，它的各方面性能都不如我的联想。屏幕不够绚丽，响应不够迅速，更没有摄像头。然而当时的摩托罗拉是一线大厂，质量可靠，所以在我的联想罢工之后，它忠实地承担起了我的通讯任务。可惜的是，里面的游戏实在是不好玩。&lt;/p&gt;
&lt;p&gt;直到最后，它似乎都没出现什么故障，如今也不知身在何处。&lt;/p&gt;
&lt;h2 id="塞班王朝的兴衰"&gt;塞班王朝的兴衰&lt;/h2&gt;
&lt;h3 id="诺基亚-3230二七年五月-至-约二九上半年"&gt;诺基亚 3230（二〇〇七年五月 至 约二〇〇九上半年）&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://blog.hgao.net/images/post/cellphone/nokia-3230.jpg" alt="诺基亚 3230"&gt;&lt;/p&gt;
&lt;p&gt;话说两朝老臣 E360 一直兢兢业业，虽说无功但也无过，对于一个中学生来说，还能有什么苛求呢？然而出于一些我不记得的原因，爸妈还是同意在二〇〇七年的五一长假，带我去牡丹江路换一部新手机。琳琅满目的柜台中，我一眼就看到了造型独特的诺基亚 3230。&lt;/p&gt;
&lt;p&gt;我很早就知道 3230。它是一部经典街机，在各种电视广告、海报中都能见到它酒红色的机身。有一次独身一人乘飞机回青岛，身边的时髦女性用着 3230，给年幼的我一种难以名状的感觉，而且我以为这种感觉是如今的 iPhone 所传达不出来的。&lt;/p&gt;
&lt;p&gt;时过境迁，这部曾经的中高端手机价格不断跳水，来到了一千五百元的价位；而看到我望眼欲穿的样子，爸妈也把预算从一千提高到了一千五——两个数字相遇，我满心欢喜地带着诺基亚 3230 回家了。&lt;/p&gt;
&lt;p&gt;对我而言，诺基亚 3230 最大的价值是它的 Symbian S60 V2 操作系统，让我从功能机用户一跃成为智能手机玩家。最初，由于系统的故障，第三方软件包一直无法安装，但其自带的 FIFA 2005 已经能让我玩得不亦乐乎。后来去家门口的手机店刷了下系统，开始安装各种各样的软件、游戏、主题和字体。再加上国庆长假开通了 GPRS 网络（大概是 10 元 / 50 MB，还记得那天从联通营业厅回家时，走到宝山文化中心，看到屏幕左上角跳出来的「G」时兴奋的心情），从此打开了一个潘多拉魔盒。&lt;/p&gt;
&lt;p&gt;当时的 S60 平台软件丰富，可玩性高，不乏佳作。UCWeb 5.1（UC 浏览器的前身）提供了标签浏览功能，在现在看来仍十分人性化；GameLoft 公司出品的 Java 运动游戏只有一百多 KB 的大小，却五脏俱全，无论是网球还是篮球，其成熟度都超过很多如今 iOS / Android 平台的游戏；QQ 2007 简洁而强大，已经具备了日常所需的基本功能。&lt;/p&gt;
&lt;p&gt;最令我兴奋的是，S60 上有一个叫做 vBag 的 GBA 模拟器。最初尝试了一个马里奥游戏，十分卡顿。但谢天谢地我没有放弃，重启之后，清空了内存（大概一共只有十几兆），3230 成功运行了《精灵宝可梦：红宝石》。我立即意识到，手里的这部设备可以化身一个无所不能的游戏机，而且它全天二十四小时属于我，意味着我再也不用眼巴巴盼望着每周几小时的玩电脑时间。爸妈或许从未想到，这个超出预算的手机竟能有如此大的魔力，还好我没有因此（太）荒废学业。&lt;/p&gt;
&lt;p&gt;题外话，当时还没有响应式设计（Responsive Design）的概念，手机上网大多数访问的是 Wap 网页，只有寥寥的文字连接，却能在 GPRS 网络下高速加载。当时常去的几个网站：一个是新浪体育；一个是尚且十分简洁清爽的百度贴吧；一个是&lt;a href="http://www.d.cn"&gt;当乐网&lt;/a&gt;，游戏资源丰富，如今仍在运作；还有一个是天网手机论坛（waptw.com)，从游戏到各种改版、美化、破解，无所不包。对我影响深刻的《超级机器人大战 OG2》游戏 ROM，就是在天网论坛下载到的。可惜天网现在似乎已经无法访问了。&lt;/p&gt;
&lt;p&gt;3230 还有一定的多媒体功能。虽然屏幕分辨率只有 176 * 208，存储卡也只有 128MB，但好歹能放几首歌或者短视频进去。那些年用它听过《千里之外》，《秋天不回来》，看过麦蒂三十五秒十三分的视频。哎，暴露年龄系列。&lt;/p&gt;
&lt;p&gt;诺基亚 3230 &lt;strong&gt;从来没有让我感到无聊过&lt;/strong&gt;。这是一个很高的评价。然而它的寿命不长，由于 GBA 游戏玩得太多，它娇小脆弱的摇杆不再灵敏，逐渐被我搁置，如今可能在家中的某个角落颐养天年吧。与此同时，老爸的又一部备用机出现在我的眼前，它搭载了最新的 S60 V3 系统，成功吸引了我的注意。&lt;/p&gt;
&lt;h3 id="诺基亚-e50约二九上半年-至-二一年四月"&gt;诺基亚 E50（约二〇〇九上半年 至 二〇一〇年四月）&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://blog.hgao.net/images/post/cellphone/nokia-e50.jpg" alt="诺基亚 E50"&gt;&lt;/p&gt;
&lt;p&gt;这部诺基亚 E50 是老爸公司配发的手机，然而用了一阵之后，老爸显然不能体会到智能手机的魅力，换回了他之前的诺基亚 6270。于是，失宠的 E50 只能轮到我来疼爱了。&lt;/p&gt;
&lt;p&gt;E50 采用 S60 V3 操作系统，虽然屏幕尺寸比 3230 小，但是分辨率提升到 240 * 320，显示效果相当细腻。其运行内存大概是整个 S60 V3 家族中最小的（价格可能也是最便宜的），但比 3230 强不少，这意味着我可以使用模拟器加速进行 GBA 游戏了！（这很重要！）&lt;/p&gt;
&lt;p&gt;虽然没有统计过，但我相信自己在 E50 上花费的游戏时间相当可观。除了《精灵宝可梦》和《超级机器人大战》，我还打穿了《逆转裁判》和《火焰之纹章》两个经典系列，至今仍保留着很多美好的回忆。&lt;/p&gt;
&lt;p&gt;至于其他游戏，除了依然令人爱不释手的 GameLoft 作品之外，另一个神奇的游戏是《冠军足球经理》。几百 KB 的程序包括了联赛杯赛、球员买卖、战术布置等核心要素，其中的一些妖人更是几年后在现实中崭露头角。诺伊尔、拉姆塞都是我在这款游戏中认识的。&lt;/p&gt;
&lt;p&gt;除了显示和计算性能的提升，S60 V3 的软件资源也更为丰富。V3 和 V2 的应用程序互不兼容，有些 V2 上的好软件（比如内存管理）到 V3 中就找不到了。但同时，也有更多的 V3 独占应用可供选择。V3 的一大特点（缺点）是，安装软件需要认证签名，这算是我第一次真正意义上地「折腾」手机。&lt;/p&gt;
&lt;p&gt;由于大量的游戏操作，E50 的「7」键和「*」键（分别充当 GBA 的「B」键和「A」键）被我摧残至掉漆，摇杆也越发不灵敏；金属外壳在屡次摔碰之下已经变形，被我贴上胶带继续使用（质量真是好）。终于有一天，它的摇杆完全没有反应，我却不愿放弃，从淘宝买了一个替换摇杆自己拆机，却再也点不亮它。&lt;/p&gt;
&lt;p&gt;和前任们一样，E50 的遗体也不知在何方。大概越是喜爱，就越容易过度使用，从而结局也变得越发悲惨吧。&lt;/p&gt;
&lt;h3 id="诺基亚-5233二一年四月-至-二一三年一月"&gt;诺基亚 5233（二〇一〇年四月 至 二〇一三年一月）&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://blog.hgao.net/images/post/cellphone/nokia-5233.jpg" alt="诺基亚 5233"&gt;&lt;/p&gt;
&lt;p&gt;历史的车轮滚滚向前。塞班系统虽然普及，但随着苹果和 Android 阵营的发力，中高端市场已经被全触屏手机所占据。作为应对，诺基亚发布了搭载 S60 V5 触屏专用系统的 N97、5800XM、5530XM、5230、5233。虽然价格上拉开了很大差距，但它们的 CPU、内存、分辨率却完全相同（5530XM 作为其中的次高端手机，屏幕竟然比低端 5230、5233 还小，不能理解）。5230 比 5233 多了 3G 网络，对我也没多大用处，于是我自然选择了其中最便宜、一千块出头的 5233。&lt;/p&gt;
&lt;p&gt;相比 E50，5233 的性能更上一个台阶（毕竟和旗舰 N97 持平），玩 GBA 游戏已经是毫无压力。但去掉了键盘，初期打字还是有些不便，《冠军足球经理》这样的优秀游戏也玩不到了，好在 GBA 模拟器永远都能满足我啊。&lt;/p&gt;
&lt;p&gt;5233 的真正优势是多媒体能力。640 * 360 的 3.2 寸屏幕能够以（在当时看来）相当不错的效果观看视频，我用它看完了《魔法禁书目录》、《某科学的超电磁炮》、《Clannad》等经典动画。为了节省空间而不断用格式工厂调整码率，恐怕是那个时代特有的回忆。&lt;/p&gt;
&lt;p&gt;那是塞班最后的巅峰，高中的班里有不少塞班用户。作为第一个 S60 V5 玩家，我为此还给大家写过破解和签名的教程。大概那时候开始，我可能给同学们一种「资深手机玩家」的印象，大家买手机有时候会找我咨询。&lt;/p&gt;
&lt;p&gt;当时间来到二〇一三年的时候，塞班无论从性能还是应用生态上，都已经完全无法抗衡 iOS 和 Android。于是，以「不能收邮件、不能与 Google 帐号同步、不能用 Dropbox 移动办公」为由，5233 被我强制退休了。&lt;/p&gt;
&lt;p&gt;5233 是我用过最长寿、最耐操的的手机。我不记得在哪家店、用什么价格买回了它，但它的结局最为安详：完好无损地躺在我家中的抽屉里，无疾而终。&lt;/p&gt;
&lt;p&gt;如果说移动电话发展至今，把它前后分为两段，那么切分点毫无疑问是二〇〇七年——第一代 iPhone 发布。此后的近十年间，手机从一个通讯工具，变成一个和电脑一样、几乎全能的数字计算设备。塞班系统作为前 iPhone 时代的智能手机，没有出众的计算能力，没有复杂的社交功能，但其中那些纯粹的应用让我始终难以忘怀。我总能明白，自己在用手机做什么，自己的时间花在了什么地方。&lt;/p&gt;
&lt;h2 id="重新发明手机"&gt;「重新发明手机」&lt;/h2&gt;
&lt;h3 id="索尼-xperia-acro-slt26w二一三年一月-至-二一四年九月"&gt;索尼 Xperia Acro S（LT26W，二〇一三年一月 至 二〇一四年九月）&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://blog.hgao.net/images/post/cellphone/sony-lt26w.jpg" alt="索尼 Xperia Acro S (LT26W)"&gt;&lt;/p&gt;
&lt;p&gt;Acro S 是我的第一部 Android 手机，也是第一部水货手机。二〇一三年的寒假，我在上海火车站不夜城，从 Jack（我的高中同桌，全班第一位 Android 用户）推荐的店里带回了它，价格是两千两百八十元。作为索尼上一代主力机型 Xperia S (LT26i) 的防水版，算是两千元档性价比不错的选择。它的性能与 5233 不可同日而语，GBA 游戏八倍速运行毫无压力。更直观的性能反映是，它可以使用 NDS 模拟器了！虽然模拟速度不快，但足以让我体验无穷丰富的 NDS 游戏资源。&lt;/p&gt;
&lt;p&gt;Acro S 配备一块 720P 的 4.3 寸屏幕，像素密度达到 Retina 标准，但因为 iPad 的存在，我并没有用它看很多视频，同时 Android 原生游戏也没有深入体验。&lt;/p&gt;
&lt;p&gt;那段时间，我很注重个人数据的云同步，Android 在这方面提供了一个优秀的平台。Dropbox、Gmail、Google Calendar、Google Contacts 这些需求都可以通过 Android 管理，再也不必担心数据丢失。Google Now 更是一次次带来惊喜，也经常被我用于向父母、同学展示大数据的魅力。大概从这时开始，手机从一个通讯、娱乐工具，变成了我的个人数据管理终端。&lt;/p&gt;
&lt;p&gt;Acro S 没少被我折腾。用了一阵原生系统后，开始着手对一些不如意的地方进行改造。先是 root 之后删了些内置应用，后来直接刷各种各样的 ROM。索尼的官方系统只支持到 Android 4.0，但我把 4.1 到 4.4 的系统都刷过一遍。无奈 Acro S 属于小众，ROM 资源相比 Xperia S 差距甚远，即使偶尔能找到新版本的系统，其稳定性也难以令人满意。&lt;/p&gt;
&lt;p&gt;之前提到 Acro S 是一部防水手机，没想到这竟成了它的命门。二〇一四年九月，和两位朋友玩漂流，防水袋漏了，三人手机均进水。另两位同学无法开机，我的 Acro S 却不屈不挠正常工作，带我们导航回酒店，立下汗马功劳。然而回去之后，手机开始发烫、屏幕变白，最终无法启动了。其实我觉得这点进水程度不应该对一部「防水」手机造成致命伤，但事实就是如此。可能是我没把防水口塞紧，也可能是索尼大法并没有那么好吧。&lt;/p&gt;
&lt;p&gt;Acro S 后来被我拆了一下，又装回去（了一部分），现在安然躺在爸妈房间的抽屉里。&lt;/p&gt;
&lt;h3 id="lg-nexus-5二一四年九月-至今"&gt;LG Nexus 5（二〇一四年九月 至今）&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://blog.hgao.net/images/post/cellphone/lg-nexus5.jpg" alt="LG Nexus 5"&gt;&lt;/p&gt;
&lt;p&gt;自从被 Jack 安利了 Nexus 系列之后，我心里就一直对「原生」有所牵挂。5233 退役时，曾试过海淘性价比超群的 Nexus 4，但因为供不应求而作罢；等到 Acro S 需要接班人的时候，我不再犹豫，毅然买下发布十个月之久、价格依旧坚挺的 Nexus 5。&lt;/p&gt;
&lt;p&gt;这是我第一次买一部「系统和前任相同」的手机，按理说不容易有新鲜感。但是 Nexus 5 更轻便、速度更快、屏幕更大、分辨率更高、续航更久。总而言之，这是我第一次感觉到，自己&lt;strong&gt;买了一部「完美」的手机&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;型号带着「Nexus」，就意味着海量的刷机资源。然而折腾一轮、过了把瘾之后，还是换回了无 root 的原生系统。这一方面归功于硬件性能的提升，让用户不再需要定制以换取更快的响应速度；另一方面也归功于 Android 5.0 系统的长足进步。&lt;/p&gt;
&lt;p&gt;我的 Nexus 5 一直都是无套无膜裸奔，以致为它换过两次屏幕。因为屏占比太高，一旦磕碰就会碎得稀里哗啦。后来贴了钢化膜保护，倒是再也没摔过。&lt;/p&gt;
&lt;p&gt;今年感恩节期间，Nexus 5 的振动失灵。加上电池老化、摄像头进灰等原因，我在 eBay 上买了一部打折的 iPhone 7。未曾想，这 iPhone 有硬件故障，而 Nexus 5 的振动几天后又恢复正常，竟得以继续服役了。&lt;/p&gt;
&lt;h2 id="后记"&gt;后记&lt;/h2&gt;
&lt;p&gt;十多年前，看过一个 Windows Mobile 手机的广告，上面运行着一个微缩的 Windows 98。那时我以为，这是手机的最终形态。现在，对比我的第一部联想，市面上的手机已经变得完全不同。那是一个中学生所不能想像的。十年后的手机会是什么样子？或许会有新的介质、新的交互方式；当然，也可能因为一些外在原因，停滞不前。它越来越重要，因为人与人的联络日益紧密；它也越来越不重要，因为计算设备间的界限正逐渐模糊。&lt;/p&gt;</description></item></channel></rss>