-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch.json
1 lines (1 loc) · 501 KB
/
search.json
1
[{"title":"购物分享(老登特别篇)","url":"/2025/01/13/购物分享(老登特别篇)/","content":"\n久等了!最近的老登用品买得比较多,所以专门写一期老登特别篇!\n\n# 手电筒\n之前迷上了逛Kickstarter(一个国外的众筹网站),买了那个什么Mimi的超小相机,说11月发货,到现在还没做好。除了相机之外,也买了一些移动硬盘啥的。有一天突然看见这个手电筒,非常心动,当即购买两个(送了友一个)。\n\n<img width=\"400\" alt=\"手电筒\" src=\"https://greendolphindance.github.io/picx-images-hosting/11521736759100_.pic_hd.8ojs9wmdj4.webp\">\n\n拍卖家秀的那个人手比较大,导致我以为这个手电筒比实际上的要小。拿到手比我想象的要大,虽然装上了链子,但感觉当项链戴会有点奇怪的程度。但全钛的材质确实看起来很高级,作为手电筒也确实是非常亮,这方面是无可挑剔的。此外,它用c口充电,而非装电池,这一点我也比较喜欢。\n\n选购配件的时候加购了两个tritium vials,就是两个发出微弱绿光的小棍子,据说可以发光25年,用来加装在手电筒上,帮助人在黑暗中快速找到它。拿到手之后我发现把它塞进手电筒的凹槽里会很松,一倒就掉出来了。研究了很久,百思不得其解。最后想起来搜了一下Kickstart项目的评论,发现好多人在问这个怎么装进去。店家的回复是用(好像是)UV胶把它封到凹槽里去。但是我哪来的UV胶啊?想了半天,一回头看到我的美甲套装,于是掏出底胶糊了一层在凹槽底部,把小棍子放进去,照灯;然后再上一层封层把小棍子完全包裹住,再照灯。虽然涂得其实不太完美,但至少感觉还挺牢固的。下图中灯的上下两层两小条就是tritium vials了:\n\n<img width=\"400\" alt=\"tritium vials\" src=\"https://greendolphindance.github.io/picx-images-hosting/11531736759101_.pic_hd.5mnw8ol7qq.webp\">\n\n# 7合1的那个迷你工具,有万年笔开瓶器锯子啥啥的\n选购手电筒配件的时候看到了这个小工具,应该是项目发起人的另一个产品,觉得有点好玩就一并购买了。买的时候忘记截图,结果拿到手才发现自己完全不记得这个七合一是有哪七种功能!想找商品说明也找不到了。只记得中间有一个万年笔,然后旁边可以开瓶盖,还有一个小锯子。别的忘了!\n\n这个也是可以做成项链挂在脖子上的, 但是谁会挂啊!感觉一不小心那个万年笔就会把自己捅死。结果到现在一次都没有使用过。而且!刚刚想把它找出来拍照,结果想不起来放在哪里了啊啊啊……又浪费了一些金钱!\n\n# 卡片式手机拍照支架\n仍然来自Kickstarter。很神奇的一个小东西,折叠起来只有卡片大小和厚度,但展开可以变成一个拍照的支架。\n\n<img width=\"400\" alt=\"拍照支架(折叠时)\" src=\"https://greendolphindance.github.io/picx-images-hosting/11541736759104_.pic_hd.pffeu7kbg.webp\">\n\n<img width=\"600\" alt=\"拍照支架(使用时)\" src=\"https://greendolphindance.github.io/picx-images-hosting/11581736759573_.pic_hd.ic7jev1lg.webp\">\n\n买的时候比较疑惑这个支架怎么能适配不同厚度的手机,结果到手发现……它送了一堆适合不同手机厚度的配件。\n\n<img width=\"400\" alt=\"拍照支架配件\" src=\"https://greendolphindance.github.io/picx-images-hosting/11551736759105_.pic_hd.2rv82w6b3b.webp\">\n\n我觉得这个设计还挺鸡肋的,因为我有一些厚度不同的手机壳,这样的话只能每换一个手机壳就去找尺寸合适的配件换上,怪麻烦的。不过鸡肋就鸡肋吧,这玩意拿出来还挺帅的。\n\n# 小尾巴\n自从开始买CD之后就把我的索尼XM5当有线耳机在用,觉得音质比蓝牙模式好太多了。但有时候想听手机里的歌,这种时候就只能用蓝牙耳机了,因为众所周知,iPhone早已不再有3.5mm耳机接口。我一想,那为什么不买个小尾巴呢?\n\n一开始其实只是想买一个那种几十块钱的转接短线。结果上淘宝一搜,有十九块九的,有好几百的,大为迷惑,便去做了一番功课,才知道有的小尾巴起到一个解码器的作用,以我贫乏的物理学知识只能理解为它能让音质更好。这时候我就想,那干脆就买一个贵的小尾巴吧!(当然也查到了有大尾巴这么个东西,但是我想说不定要带出去用,它太大了,直接放弃。)\n\n继续做功课。结果在知乎看到一位老哥,该怎么称呼他,小尾巴发烧友?他买了巨多小尾巴,每个都仔细把玩过,出了一篇测评。如果不是软广那这爱好也太冷门了吧……但买手电筒的时候也有看到一些老哥把玩手电筒的,那之后我对这种事的接受程度就大大提高了。除了这篇测评之外,网上关于小尾巴的信息就没有多少了,这让我感觉还挺意外的。按理说这应该是个比较实用的东西才对?\n\n最终选择了乂(yì)度,理由已经忘了。\n\n<img width=\"600\" alt=\"小尾巴\" src=\"https://greendolphindance.github.io/picx-images-hosting/11601736759678_.pic_hd.5fkod9axa0.webp\">\n\n买回来感觉确实音质有所提升,但不确定有多少是安慰剂效应。之后选耳机的时候(见下文)问耳机店店员,这小尾巴它是智商税吗?店员说当然不是啊。我这才放下心来。\n\n另,由于插着小尾巴时手机不能充电,我尘封的无线充电座又有了用武之地(之前嫌它充得太慢就改用有线充了)!\n\n# 磁带机\n是的,2025年,磁带机!一切的起因是友mj。他给我发了一个日本新出的CD机的链接,我立刻从萌购下单,结果被退款,说缺货。我非常不甘心,开始浏览其相关商品,于是看到了一个磁带机。本来其实是没有需求的,但我偏要创造需求,上淘宝和Diskunion购买了一些磁带。这时候就可以心安理得(?)地看磁带机了。\n\n经过一番调研,我总结出以下四类:\n\n- 淘宝上几十块到一百多块的杂牌/外贸\n- 闲鱼上的旧索尼\n- 日本近年新出的\n- 国内近年新出的\n\n然后就是明确需求。我比较希望买一个外壳透明的,但如果只有这个要求的话就选不出来了,因为四类里都有外壳透明的款式。然后试着去问了一下福声唱片的老板,老板说他不了解,但国产就不要考虑了吧。好的,排除第一个和最后一个。日本新出的我只知道一个Beams,国内没见到有任何人买过。那么先看看闲鱼吧。\n\n闲鱼上的透明壳索尼主要是一些闲得没事干的人收一些旧机器然后给它们换成透明壳。一开始看了几个三百多块的,都觉得就还行吧。然后突然刷到一个9分钟前上架的gx688,加邮费470块,一眼相中,就它了!\n\n也说不上来具体是哪一点比三百多块的强,大概就是刚好合眼缘吧,缘,妙不可言!另一点是老板的谈吐让我感觉他主要是一个自己玩的发烧友,玩不过来了就出掉一些机器,而不是那种专门的贩子。\n\n拍下之后他说送一盘测试用的磁带,问我要不要自己选歌,否则就发周杰伦。我一听他说周杰伦,马上说那我自己选吧。他说一面31分10秒以内,总共两面,尽量录满。我于是整理出一个Yes的歌单,让GPT帮我找一个最优策略,就是哪些歌放在哪一面可以浪费最少的时间。整出来总共只空了10秒,很满意。发给老板,老板说你太为难我这个专科生了。我没听懂。第二天看见老板凌晨3点多给我发了个视频,说终于录完了,你这些英文歌也太难找了,我才明白他说专科生啥啥的是什么意思,大感愧疚。\n\n老板从河北发货,所以很快就收到了。实物和照片同样美丽,我拿在手上不停摩挲,太爱了,太好看了。\n\n<img width=\"600\" alt=\"磁带机正面\" src=\"https://greendolphindance.github.io/picx-images-hosting/11611736759749_.pic.64dxx9zora.webp\">\n\n<img width=\"600\" alt=\"磁带机背面\" src=\"https://greendolphindance.github.io/picx-images-hosting/11621736759750_.pic.10297zzz8b.webp\">\n\n音质我也听不出来,因为没有别的磁带机可以对比,反正还可以吧,能听出这个是这个,那个是那个。也不指望磁带机能发出什么无损声音。\n\n老板还送了我一个黑色的电池盒,里面有一个螺丝可以拧到磁带机上面,连接磁带机上的两个触点,就可以使用五号电池了(它本来是用口香糖电池的)。\n\n但这个黑色的电池盒和透明的机身看上去不是很搭。这便是一切的开始(正在写,写完把链接放在这里)。\n\n\n# 耳机\n买了小尾巴之后又觉得XM5不够了,想买一个专门的开放式hifi耳机,预算五千。于是开始做功课,搜索一些老登耳机发烧论坛,寻找有没有爵士乐老登的耳机推荐。比较惊讶的是这样的帖子极少,难道爵士并不足以构成一个专门的耳机需求?\n\n又发了朋友圈和小红书求助,辅以论坛里不多的帖子,终于设法找到了一些推荐:森海、歌德、AUNE、拜雅。我更偏向歌德,因为无论是论坛老登还是网易云听友都有推荐这个的,说调声很特殊,听爵士乐很合适。\n\n粗筛阶段之后开始上淘宝搜索,主要是想去试听一下,所以想找北京的耳机店。首先发现西四地铁站A口出去的地下商场有一家,而我当天刚好要去西四,于是问了一下有什么耳机,对方说有森海。我立刻出发了。到了我说要试某某型号(现在已经忘了是啥型号了),他问我用什么设备听,我说手机加小尾巴。他就说这个型号不好推,更推荐譬如hd490pro。我就试了,果然还可以。看当时网上售价3481.34,在预算之内。于是记下来。之后又试了便宜一千块钱的hd660s2,觉得也还行吧,但不知道是不是心理作用,感觉没有贵的那个好。\n\n然后还想去试最想买的歌德。备选的型号有mprox(淘宝售价6520.34)、hemp(3800+,具体忘了)、sr225x(1881.34)、sr325x(2581.34)。歌德国内的总代理叫安润,在北京,798附近。又是刚好,当天要去COG,离安润只有十几分钟车程。于是先去了安润,接待我的店员是女生,店里还有三只猫:一只黏人缅因、一只神经奶牛(大概两个月大,满地疯跑)、奶牛的妈(非常胆小,躲在笼子里,我一靠近还哈我)。一下子对这家店印象很好!\n\n事前询问哪些型号可以试,客服说mprox没有了,连样机都卖掉了。我看淘宝拆封不退,闲鱼上的又有点不敢买,加之又超了预算(为什么这一项是最后被考虑的啊?),于是就放弃了这个型号。又听说225就是325的低配版,所以打算只试325,反正预算也很够。\n\n于是先试了325。和森海非常不同的感觉,但是我尚未掌握耳机圈的那些黑话,所以无法描述具体哪里不同。用于测试的曲子是著名试音专辑《Hope》的最后一首“Stimela (The Coal Train)”(测试爵士人声和管乐)、一首Bill Evans(测试爵士钢琴),以及Siberian Khatru(测试摇滚)。\n\n<img width=\"400\" alt=\"Hope\" src=\"https://greendolphindance.github.io/picx-images-hosting/11561736759106_.pic.5xaq1u0vq8.webp\">\n\n感觉比起森海,歌德更加给人一种现场感或整体感。刚听森海的时候感觉听力突然变得很好,每一个乐器都非常清晰,比蓝牙耳机不知道高到哪里去了。但对比歌德就发现,这种层次分明的感觉其实是有点奇怪的,几个声部都各自为阵,类似编曲软件做出来的那种清晰的音乐,真要比喻的话……有点像更具音乐性的术力口……歌德则更加自然。\n\n然后试了更好看的hemp,限量款,发现也更好听,戴上也感觉更轻。毕竟贵一千多块!当即决定购买,就不试AUNE和拜雅了,反正也不知道哪里有。于是跟店员说,淘宝卖3800,你们店能给我多少?店员说我可以跟老板争取一个最低价,应该在3700左右。我说淘宝可以分6期免息诶,如果只便宜100块我可能还是会去网上买,但我也想帮你做个业绩倒是。结果店员说,我们其实也是走淘宝,拍下改价,也可以6期免息。我说那好,就加了微信。\n\n其实还有一个型号,the white,我也想买,据说设计是从Beatles的白盘得到的灵感。淘宝没有,只能去闲鱼,或者海淘(好像也只有二手)。也挺好看的。我试完hemp发现旁边有一个the white,于是也试了一下,音质感觉和hemp差不多,但the white我记得更贵。随口问了一嘴价格,店员说只有这个样机了,如果你要买我可以去问一下价格,只要你不嫌弃这些磕碰。而我早已注意到磕碰,还挺严重的,而且由于耳机外侧是纯白色,瑕疵更是触目惊心。于是我脱口而出:我嫌弃。店员哈哈大笑。试完又摸了一会猫,就去岩馆了。\n\n当晚她给我发消息,说老板今天比较生气,明天等他消气了她再问。还挺好笑的。第二天她告诉我可以3600给我,我一想那可以啊,于是拍下改价付钱。\n\n下午发的顺丰同城,第二天就收到了。送了一个耳机架。\n\n<img width=\"400\" alt=\"Hope\" src=\"https://greendolphindance.github.io/picx-images-hosting/11571736759108_.pic_hd.6ikdo4vh2g.webp\">\n\n然后拿到手才发现耳机的线是固定在耳罩上的,不能拔掉(没有不满,只是提一下)。由于室友在,不方便使用开放式耳机,于是到了周五晚上才试。结果发现插头插不进小尾巴(小尾巴只有3.5和4.4mm的口)!心急如焚,差点准备在淘宝买转接线,突然一股神秘力量促使我拔了一下那个插头,结果!是个套娃!6.35mm的大头里面还有一个3.5mm的小头。真是谢天谢地!\n\n声音和店里的貌似是一样的。这看起来是句废话,毕竟总代理也没有必要售假。但我的意思是,其实歌德这个牌子本质上是一个美国小作坊,这些耳机是手工做的(说得好听点:每个hemp都有独一无二的花纹),所以或许每个耳机的音效也会有微妙的不同。但我这个反正我是没听出来不同。或许其实它品控还不错?\n\n好了,老登购物分享结束!下回攒够一波订单,再购再报。","tags":["工具","音乐"],"categories":["购物"]},{"title":"2024小结","url":"/2025/01/12/2024小结/","content":"\n跨年夜我从美国回家,2024年2月底回了学校。刚开始的时候对国内生活还有些微陌生感,到了年底已经基本上没有在国外的记忆了。24年的记性也是一样差。\n\n由于记性差,23年的总结是靠着那一年的日记写出来的。但刚刚数了一下,2024年总共仅写了43篇日记,创历史新低。我太懒了!而且浏览了一遍,发现有一半都是在说最近又买了什么东西……所以先总结一下本年度的购物吧(?)。\n\n# 购物\n\n可以说是买得太多了,所以只挑一些日记里写过的说一说。\n\n2024年第一单是:iPhone 15 Pro。含泪挥别了亲爱的12 Mini,从此再无小屏旗舰(其实Mini现在还在服役,妈在用)。但用了几天Pro之后就真香了。屏幕确实有点大,但是我逐渐开始经常使用那个“在屏幕底部下滑降半屏”的不知道叫什么的功能,而且更多时候是双手玩手机,所以也没有非常不适应。电池非常持久,虽然我还是保留着随身带充电宝的习惯,但是使用它的次数明显变少了。再有就是,这次买了256G的,爽死了,之前128G真是捉襟见肘。此外,钛原色真是太美了,刚拿到手的时候我忍不住反复抚摸、把玩。\n\n但仔细一想,Pro对我来说是性能过剩的,毕竟我也不打游戏啥的,也不用其他很吃性能的APP。所以只能靠使用时长来回本了!以前一般是三年换一个手机,这次就十年吧(不是)。\n\n用了12期免息,每个月六七百块,其实也没有想象的那么无感。还花呗的时候经常会发现怎么要还这么多,结果一看账单才想起还有手机的分期。必须放弃那种“分期免息等于不要钱”的错误信念了!\n\n下一批购物是[宿舍用的收纳](https://greendolphindance.com/2024/02/28/%E8%B4%AD%E7%89%A9%E5%88%86%E4%BA%AB%EF%BC%886%EF%BC%89%EF%BC%9A%E5%AE%BF%E8%88%8D%E8%A3%85%E4%BF%AE%E7%AF%87/)。具体内容请点击链接查看,我这里只想宣布一个好消息:当时买了且觉得好用的东西,到了年底依然在坚持使用!并且大概率今年还会继续使用!所以虽然我买得多,但我其实某种意义上是一个节约的人……?如果15 Pro能够坚持使用十年,便更坐实这一点了,我要努力!\n\n下一次花大钱是:搏击课。最开始是买30送2,其实有点没底到底能不能上完,结果8月以前基本上维持着除了经期每周去三次的频率,可以说是恐怖。不知不觉就上完了。8月以后重新开始攀岩了,所以去拳馆减少到了每周两次。这时候友mj在家附近拳馆的课上完了,于是我们就凑了个一对二。所以目前是每两个人每周各上一节一对一,然后一起上一节一对二。记得好像是已经续过两次课了,每次15节的样子吧。反正意外地消耗得很快。非常解压!应该会坚持。\n\n下一个:自行车。从这次购物开始了我“灵光一闪”派的购物方针,意思是立刻买下自己突然想买的东西。是的,我本来有一辆比较破的自行车,但能骑。然后有一天突然想到我要骑车去拳馆,是不是应该买一辆更好的车呢?然后立刻开始做功课。首先排除了国产三大牌,好像是凤凰永久还有一个啥?飞鸽?然后确定了我要买的就是一个买菜车,更高级的用不上。预算最初是一千,后来提到一千五(理由已经忘了),结果最后还是超出了几十块。想来想去,还是迪卡侬吧。在一款童车和Elop 120中选了后者,在门店试了蒂凡尼蓝觉得不太好看,于是勇敢地订购了门店没货的粉色。结果实物非常好看!有一种磨砂感。车本体是1244.9元,但是我买了一些锁、屁垫、车篮、车灯、手机支架啥的,零零碎碎加起来就1500+了。其实也可以淘宝买第三方的,但是……原版的比较好看嘛……\n\n下一个是文身,去年新增了两个,还修改了一个,放在一起讲。首先是[PLUCK那个](https://greendolphindance.com/2024/03/18/%E6%88%91%E7%9A%84%E6%96%87%E8%BA%AB/#%E7%AC%AC%E5%9B%9B%E4%B8%AA%EF%BC%9A%E5%B9%B8%E8%BF%90%E4%B8%8E%E5%8B%87%E6%B0%94)。文得我感觉还是挺好的,但是后来想想其实没必要,因为我自己都很经常忘记我有这么一个文身……总是记得我有五个文身,然后在心里数,诶怎么只有四个,还有一个是啥?半天才想起来。或许不是不应该文,而是应该文在更明显的地方才对。\n\n第二个是Beatles的手稿,好像是Paul写的吧。歪歪扭扭的四行字:\n\nAnd in the end\nThe love you take\nis equal to\nThe love you make.\n\n<img width=\"400\" alt=\"文身2\" src=\"https://github.com/greendolphindance/picx-images-hosting/raw/master/11501736694149_.pic.491d3klq8a.webp\">\n\n其实我至今不知道“The love you make”是否有一些黄色意味,我就当它没有了。这个也是一时兴起去文的,因为碰巧看到了这张手稿,就觉得很适合文在身上。就去了。结果15分钟就搞定了?文身师的价格是2000/小时,我交了600的定金。我一看15分钟,心想难道她要退100块钱给我?结果她说起步价是1000,我就又付了400。总觉得亏了……?\n\n第三个是因为社会实践去了四川,然后给我文左小臂和右大臂图案的文身师毕业回老家了,刚好就在成都。我倒是不太想加新图,但一直不太喜欢之前免费文的脖子后面的蝴蝶,觉得没有细节。所以就想把它改一下。改成这样了:\n\n<img width=\"400\" alt=\"文身3\" src=\"https://github.com/greendolphindance/picx-images-hosting/raw/master/11511736694573_.pic.6bh5rmsukr.webp\">\n\n好看很多……!不愧是盆老师。其实一开始没想做这么大的,但打印出来在脖子上比了一下,觉得居然大一点比较好看,于是就这样了。之后盆老师去北京旅扎,本来想找她补色,但她看了我拍的照片说我恢复得也太好了吧?于是就没去补。\n\n好的,下一项购物。中间有一段时间偷懒没写日记,再次记录购物的时候已经到了7月低,此时我在四川广元。我做的事情:把电脑寄到华强北换了个2T的硬盘。怎么说呢,我永远不会后悔花这1100块钱!2T也太爽了吧!\n\n最后,今年还屡次去看了演出。The Hug基本上每一两个月会去一次。其他印象比较深的是3月底肖骏、安雨与Aaron Parks的演出、6月友lsm的私人演出、11月的Herbie Hancock、跨越24和25年的即兴音乐会。都是美好的回忆!\n\n# 分手\n\n虽然也不是完全地有必要,但是说一下也无妨。其实从年初开始我内心就有一种爱慕与厌恶交织的感情。前者现在看来大概等同于性冲动,后者就比较复杂了。一言以蔽之就是对方把自己放在了极其优先的位置,并且将这一点以一种很幼稚的方式表现了出来。比如我反复问他是否决定了以后是留在国外还是回国,他每次都虚与委蛇。有一次我忍不住问,你做决定的时候是不是没有考虑过有我这么个人存在?结果被反将一军,他说:你决定留在国内是不是也没考虑我?我一时语塞。但其实我知道以我现在这个情况,去国外定居是远没有他回国来得容易的。如果稍微考虑到双方的共同发展的话,两个选项孰优孰劣应该比较明显吧。所以我倾向于认为对方压根就没考虑过以后的事,或者避免去考虑。\n\n那么,“以一种很幼稚的方式表现了出来”又是什么意思呢?我不多的日记中已经有大量例子了,就举一个吧。我当时说留在国内的时候,说的是大概率会在北京。结果他去北京的时候一个劲地跟我说北京好冷、北京傻逼,牛津的过冬袜子扛不住北京的天气。我就问你穿的什么鞋啊?结果他穿的:网面运动鞋。我说不儿,你都穿网面鞋了,你冷这能怪北京吗?他居然说:我不管,反正我讨厌北京。\n\n简直是司马昭之心!而且这样说显然不能改变我的决定,所以只是他在宣泄情绪而已。这像是一种小孩的行动,其实施纯粹是为了膈应他人,同时对自己也没有好处。是我不太能理解的那类行动。当然这样的事还有很多了,但我的性冲动确实过于强大,以至于我前一晚刚把自己有多生气写到日记里,第二天就直接原谅了。\n\n但是冲动当然是会渐渐消退的。有一天我突然意识到,好像这段关系中主要是我在主动,即便如此也搞得我自己经常很不爽,于是突然有点意兴阑珊起来,渐渐地不怎么主动发消息了。但是!如果对方给我发消息,我也是会积极回复的。结果慢慢地,对方也渐渐不发消息了。这时候就很尴尬,要装作没事一样重新开始发消息吗?还是就这样顺其自然呢?我想了一下情侣也不是非得经常发消息吧,好像发不发都行?但对方是怎么想的?于是在这种犹豫和纠结中,几天过去了。\n\n事后我复盘了一下,突然想到如果对方不给我发消息了,我会直接问ta为什么不给我发消息。但是他没问。当然这其中的原因就不得而知了,但总而言之感觉对方对这段关系也不是很重视。于是果然,一个视频打过来,对方直接宣布分手,因为我们这样的关系是“有毒的”,且以后他不会回国工作。我有理由相信他说出这话的时候是松了一口气的。或许决定早已做好,对我假装成一个尚未确定的状态已经算是给我面子了。\n\n出于惯性,我确实真切地伤心了一阵。也尝试给他发消息,但双方大概都已了然此事已不可挽回,所以也没有过多推拉。我应该也有很多做得不对的地方,所以谢天谢地是我被甩了,这样显得我责任轻一点。\n\n总觉得这恋爱谈得稀里糊涂的……以后还是别太认真了。哎本来不想显得很mean,毕竟我这边大概率也有问题,但是不知不觉又写了一堆。Anyway,就酱,结束!\n\n# 攀岩\n\n8月往后的生活重心竟放在了攀岩上。其实一开始没觉得自己会复攀,毕竟已经大半年没摸过点了。复攀的契机好像是土肥太可爱了???然后立刻就去Mellow兼职了(见[《八月碎碎念》](https://greendolphindance.com/2024/08/27/%E5%85%AB%E6%9C%88%E7%A2%8E%E7%A2%8E%E5%BF%B5/))。虽然其实根本也没发生什么值得留念的事情……最多也就是拍了两张合照以及要了签名。\n\n但是攀岩本身突然成为了我生活中很重要的一部分,有一阵甚至除了上班和摸鱼就是在岩馆,我其实不知道为什么。或许是因为我突然变强了!之前我的抱石水平应该只有V2-V3吧,犹记得刚回家的时候去了一趟岩馆,一条仰角V2没爬过去……虽然在美国完攀过V4但是那个含水量未免太高。\n\n结果……一夜之间变强了。某天晚上在768香蕉的slab上蠕动,突然看到一条荧光黄薄片点构成的V4。我一直觉得因为我手小,或许会比较适合抓薄点、小指洞之类的。就心说试试吧。爬了几次居然感觉有戏,于是磕了一晚,成了。这就是我第一条V4。\n\n有了第一条之后,居然一发不可收拾。每个岩馆换线我都去把所有V4摸一遍,基本上总能捡漏几条。这么捡了一两个月,突然硬V4也可以磕一磕了。再过了一阵,终于,我于12月22日在浩石顺义店捡了一条V5。而此前不久,我已在2025年的手账本“年度目标”处写上了“过一条V5”!难道我要把V5划掉改成V6吗?感觉这辈子可能没什么希望啊。想了半天,把“一条”的“一”划掉,改成了“两”。\n\n# 最后\n\n本来还想写一下学业方面的,但每当我想写下“# 学业”,我的内心就会产生一种抵触感。这也当然,毕竟我的学业毫无进展。我现在已经分不清我是吃药吃的还是单纯的懒了,或许一开始是吃药吃的然后就懒成习惯了吧。不知道!\n\n做年度进展报告的时候,其他人都是说我的论文计划多少章,我现在写了多少章,啥啥的。而我:直接报告一篇短论文。s老师转向我导,问:你这个学生怎么办?我替他回答说我当然延毕啊。我做完报告之后,到了提问环节,导问我,你对你的论文有什么计划?我直接说我没有计划。大家哈哈大笑。\n\n但我这样回答也不是想省事或者赌气啥的,只是因为我确实不是那样工作的。我没有为论文做过计划,一直以来我都是先写一篇小的,然后想想哪里有个线头,扯一下,哪里又有个线头,再扯一下,慢慢就变成了一篇长论文。报告会后导说咱们聊聊,我告诉了他我以前的这种工作方式,他说你以前可以这样,现在如果做不到了,就需要采取别的方法,比如开始做计划。我一想也有道理。但我确实也不知道该怎么做计划,所以到现在还在拖着。\n\n我说我计划延毕尽量长的时间,意思是27年毕业。导建议我把目标先定在26年,这样能有一些余地。很合理,就这么办吧。等于说一个季度写一章出来,乍一看不是很困难。但现在距年度进展报告又是一个月了,我还是啥也没写。烦啊!\n\n老实说,要不是退学会影响找工作,我早就退学进入职场了。我以前有点怕上班,因为不知道上班是什么样子的,只从家人朋友那里听说上班很累很恐怖。但兼职和实习之后感觉还好啊。并且我差不多摸清楚了我适合什么样的工作,我发现只要不让我当领导去给别人安排工作,我其实干啥都可以。我尤其喜欢做一些琐碎的活,比如在岩馆帮老板把定做的徽章装进首饰盒里……我装完全部的两百个,仍意犹未尽。\n\n真的,还不如本科毕业就找工作。但是当时也没想到之后会发展成这个样子。哎,好难。\n\n23年我问自己,这一年我到底成就了什么事。当时给出的可选项有:谈了个恋爱、出了两趟国、下定了离开学术界的决心。这么看来24年好像更加一事无成了:恋爱谈崩了、出国经历已然淡忘,不过不做学术的这个决定倒是没变。但最重要的是,前年我论文基本没写,去年还是基本没写,怎么会这样!","tags":["总结","置顶"],"categories":["随笔"]},{"title":"最近","url":"/2024/12/08/最近/","content":"# 年度进展报告\n\n11月18号突然接到通知说要做年度进展报告。我今年一直在调整,锻炼身体增加娱乐,也有一部分懒的原因,所以什么也没写。刚接到消息的时候整个人懵住。缓了一阵后又觉得好像只是走个过场,应付一下也可以,大不了就是被建议分流。\n\n但一方面还是有点紧张,要是真的被建议分流的话都不知道该怎么反应。另一方面,仔细想想学校的这些环节我一直都在敷衍,到底什么时候才能认真开始写作呢?我都已经博五了。虽然可以再延毕两年,但还是不得不尽快开始。\n\n抱着这样的心情开始了写作。由于之前饱受阅读障碍的困扰,交换的时候写作也是痛苦地挤牙膏,我本以为这次也会如此。结果居然十分顺利,在11月28号弄出了12页的内容,发给导看。导给的批注都很中肯,指出了一些实质性的问题,但我姑且回应了。导给的总体评价是“you have some interesting material, which is good”,我寻思这是夸我还是骂我呢?感觉像是没东西可夸了,只好夸一下我找的文献不错。\n\n发论文的deadline是12月5号,结果最终交的东西只有15页,而且乱七八糟没头没尾的。相当于我在18–28号每天写了1.2页,而在29–5号每天只写了不到半页。大概就是觉得就这样了,而且之前集中写作太累,所以后来就松懈了。这倒是符合我一贯的做事风格,虎头蛇尾。\n\n总之,也就这样了。看到时候会怎么样吧。\n\n# 要钱\n\n10月份的时候突然想起来,某社欠了我三年的翻译费还没给。此前已经多次催促无果,既然想起来了,就又去催了一次。\n\n对方说书还没出来,先给我申请翻译费吧。我寻思合同里明确写了即便书没出来,一定期限后也得先给我结钱,怎么她说的仿佛是给我特别申请了一样?\n\n合同里写道,未能如期出版的话应另行约定出版日期,如果届时还未出版,应该先结款,否则就要加付每天千分之一的违约金。我就问了一嘴违约金的事,对方说:\n\n“这个如果按照合同严格执行的话确实是应该有,确实是没按期出版。但是我也不知道这个按个什么标准去测算合适。这样您看行吗,我们给您多开点,您给个数,我跟领导说一下这个情况。”\n\n怎么好像完全不知道合同的规定呢?我就把相关条文截图发过去了。结果对方立刻慌了,要跟我语音交流,话里话外就是说不可能给这么多,还说“您这种按合同来的我还是第一次见”“其他译者都没有要过这个违约金”“我们有法务,就算您走法律程序也未必能胜诉”。我寻思你不给违约金,你写在合同里干嘛呢?但还是跟她说,我不是想为难你们,因为没有经验,没有标准,所以直接按合同里的计算了。对面貌似理解了。最后还是要我说一个数,她去跟领导商量。\n\n我按合同算出来的是要多给1.7w,也不知道该喊多少价。和在出版业干过的友人商量了一下,反正他们到时候肯定还要砍价,就先喊高一点吧。于是喊了1w。\n\n果然不行。她后来跟我商量,我的译稿刨掉非中文字符是24w字左右,本来的翻译费是2.4w。问一共给我3w行不行。我之前算违约金的时候是按译稿27w字算的(就是没排除非中文字符)。想想也行吧,再多他们也不会给了,于是答应了。她还补充了一句“其实还没到24w但我取整了”。那还真是谢谢了呢!\n\n然后她说,“因为社里的死规定,书不出不让做稿酬,我得揉在其他项目里,您也多理解哈”。给我整不明白了。合同里说另行约定出版日期到了之后,即便书没出也要先结钱。该社这个规定意思是从一开始就没想过要按合同执行吗……?不过反正能拿到钱,就算了吧。\n\n更不能理解的是,友听说了这件事,一口咬定是我的问题,因为书出之前不给翻译费,以及不要违约金,都是约定俗成的规则。我圈外人确实不懂这些条条框框,我所依据的只有合同罢了。就因为这个,事情变成了我的错吗?真是莫名其妙。你不想付,合同里就不要这么写啊。\n\n# 岩馆打工结束\n\n被岩馆开除(?)了。其实干了两个月左右之后,他们就不怎么找我去了,因为好像他们又招了几个全职教练以及前台,就不那么缺人了。日男在我去的那一次之后就再也没来过这个馆定线(虽然不知道以后还来不来),所以我也乐见其成,没人叫我我就不去了。我最近去是上个月,他们换线,想找一个矮子试线。\n\n前几天上班,馆长私聊我问过年前后能不能来兼职,我当然是拒绝了,谁过年还在北京啊!然后下午就跟我说,感谢今年兼职,明年有机会再来,给我绑张月卡。\n\n前情提要:在这个馆兼职的话,平常自己来爬是免费的。所以“给我绑张月卡”的意思就是以后我不能免费爬了,也就是我被正式开除。在攀岩队群里一说,大家都觉得莫名其妙,怎么毫无理由就把我开了呢?这时候一位前辈站出来说,等你上班了心态就好了,你这根本都算不上开除,就是个临时工,劳动合同也没签的。我一下豁然开朗(?)。\n\n总之就这样了。\n\n# 日男\n\n说到岩馆就不得不说日男哥。目前毫无进展,只有相互眼熟、见面会打个招呼的关系。不过我也没有什么期待。见面机会都是我偏要勉强来的,就是他来北京哪个馆定线/上课/办活动,岩馆的公众号都会说,然后我就在那个时间去逮他。每次去也就是打个招呼,然后自己默默在那爬,相互没怎么搭理。\n\n上次在COG有一个小比赛,说是他会在场,我抓了两个网友屁颠屁颠就去了。一看人果然在,贴着个退烧贴,我大惊,问他咋了,他英文说不利索,就握拳放在嘴巴前,做作咳嗽几声,我就懂了。但也说不出什么安慰话语,只好用怜悯的眼神望着他(?)。\n\n这个比赛的规则是,六个定线员每人推荐V1-V5各一条,总共三十条线。被推荐的线起步点会贴一个圆牌,写着某某推荐。然后大家组队,每人拿个卡片开始爬,爬过了打个勾。总之就是爬得越多越好。\n\n我立刻就开始爬日男推荐。爬完V123,觉得还行,于是开始爬V4。结果flash了,大喜,听到后面远处日男在欢呼鼓掌,更高兴了,结果四处找不到下降点,半天下不来,最后只好跳下来了。又去逛了一会,回来看见这条线上有定线员在施工,大惊,以为他们觉得线太容易了在改。我看到日男坐在旁边,就问(英语)你们是在改线吗?他说没有没有。我就说耶,那我过了。然后我完全没有想到,他竟然伸出拳头要和我击拳!怀着微妙的心情完成了击拳。\n\n我来之前跟两个网友描述了日男如何如何可爱,她们一来发现果然如此,于是问日男能不能合影。我混入其中,拍了大概五六七八张,每张都差不多,但我事后反复观看。他太可爱了!!!还给他投喂了小蛋糕,但是蛋糕店他妈的没给盘子勺子,于是大家都用手抓着吃,非常狼狈(但日男说おいしい然后吃完了混杂着手上镁粉的一坨蛋糕)。\n\n受到鼓舞我回去就立刻发了小红书私信,虽然也是一些礼貌客套话。果然还是没回。IG里发照片tag他(甚至为了这个帖子把账户从私密转成公开),也是毫无回应。我追悔莫及,过了几天就把账户又转回私密了。早知道就不发了!\n\n他这几天在问山教课,在想要不要去,感觉他老看到我应该也觉得挺奇怪的吧……。算了还是过两天去看看吧,摸摸新线,管他的。","categories":["随笔"]},{"title":"“其实你是想离开的”","url":"/2024/11/10/“其实你是想离开的”/","content":"\n# 1\n\n*作为一个群体,我们总是认为高等教育领域的工作不仅是一个行业:我们认为它是一种天职。因此,在打算从事其他行业时,我们顾虑的不仅是一些实际问题,……我们真切地担忧,一旦不再是学者,我们就不知道自己还能成为什么人。(p. 13)*\n\n如果我在最摇摆不定的时期看到《离开学术界实用指南》中的这一段话,一定会受益匪浅。就连在现在——在我早已下定决心离开之后——这也足以引发我的思考。我至今对于决定不再从事哲学仍然有一定程度的愧疚。这一方面是由于放弃哲学某种意义上相当于承认自己的失败:智识上的、能力上的、决心上的;另一方面,我总是感觉不做哲学会破坏我个人的整全性。正如书中所说,我不知道自己还能成为什么人。\n\n后文的一个比喻似乎更为恰当:从学术行业的离开“好比一次失恋”,“发现你的爱只是单相思”。虽然我不知道在什么意义上一个人可以结束对学术的单相思(需要学术“爱上这个人”?意味着ta能够从学术研究中得到可见的回报?),但抛开它的不恰当性不谈,顺着这个思路,我的情况更类似于因为自己的条件太差而主动放弃追求。不过这个不说也罢。\n\n根据本书,学术人——或许尤其是人文学者——的一大毛病是会将这份工作的价值看得太重。不是获得报酬意义上的价值,而是某种更高的东西。在决定离开之前,我未来的人生规划就是投身学术,自我和工作在这个过程中你我不分。我必须并且必将热爱这份工作。但作者在列举离开的好处时,除了提到“工资通常会更高”以外,还提到了在我看来更加重要的一点,即“自我和工作可以分开,工作可以不是全部”。这给我提供了一个新想法:我不必热爱我的工作,它可以只是一种手段,给我带来经济上的好处,让我得以投身我所热爱的其他事物。但这一想法在其他行业原本是那么自然!\n\n因此,我们必须抵制“学术作为天职”的自我催眠,必须克服那种畏惧离开的情绪。作者认为有两个理由(pp. 14-15):\n\n1. 不改行的风险是真实而巨大的——完全正确。\n2. 这种失望的痛苦最终将会烟消云散。从统计上说,“即使是不情不愿地离开自己专业领域的人,也表现出更高的幸福感。”(p. 25)\n\n他提醒我们:\n\n*离开的最大障碍就是承认“其实你是想离开的”。一旦克服,就很容易想象和采用新的范式。(p. 31)*\n\n# 2\n\n在第2章,作者鼓励读者思考三个问题:\n\n1. 你想从生活中得到什么?\n2. 你想从职业中得到什么?\n3. 你如何最好地协调二者?\n\n他随后列举了一些评估的领域供参考,这些领域包括地点、人际关系、职业轨迹、薪水、工作的意义感。鉴于本文大致上仅仅是一篇类似读后感的东西,我这里不想对每个领域都作展开。但是在讨论薪水时,作者在脚注中提到了引人深思的一点:\n\n*古代哲学最大的讽刺之一是,几乎每个鄙视金钱的思想家都过着属于精英阶层的舒适生活。(p. 45)*\n\n我居然从未注意过!\n\n我喜欢购物,算是一个爱钱的人,所以“放下身段”去搞钱(如果我能做得到的话)对我来说不成问题。但首先,会使用“放下身段”这种表达,即便打了引号,也说明我对搞钱这件事并没有足够理直气壮。其次,虽然很想要钱,但我目前对未来工作的想象也仅限于和专业相关的工作(如图书编辑)。这其实是一种自相矛盾,因为专业对口的工作往往意味着更少的工资。也许我的价值观受到我所学习的专业的影响,而我“不满于职业与价值观没有紧密地结合起来”(p. 47)。\n\n出现矛盾的一个原因是我觉得我无法做与我的专业完全不相关的工作。在打下这句话的时候我心里想到的是程序员、产品经理、市场调研等等。但是这又暴露出一个问题,就是我基本上不知道这些工作具体要求我做什么。也许程序员要好理解一点,似乎就是写代码,但具体到细节,例如如何修改古老的代码、与他人合作的时候要如何操作、相互交接,这些我是一窍不通。至于产品经理、市场调研,我只有一个模糊的概念,但完全不知道他们平常都在干嘛。\n\n针对这一点,作者在第3章的建议是:\n\n*对你可能做的工作和你愿意走的职业道路保持尽可能开放的心态。不妨先假设你可以做**任何工作**。然后,你有一大把时间来搞明白,某个行业是否适合拥有你这样优势、技能和经历的人。*\n\n换言之,必须努力压抑“我无法胜任这类工作”和“我讨厌这类工作”的想法,因为鉴于我对这些工作并没有足够的了解,我根本没有很好的依据来作出这些判断。\n\n当然,有一些职业选择是明显可以被排除的,例如律师、医生等。但是其他在以前根本无法想象自己会做的工作,却都是真切地可以纳入考虑的。\n\n# 3\n\n接下来都是一些具体的建议,这些部分我看得比较草率。这些建议和指南包括尽可能很多地安排信息访谈(也就是与他人会面并打听他们的职业,了解他们都在做什么,从而知道有哪些工作可供自己选择)、如何写简历、如何培养新的技能与积累经验,以及如何在做学术工作的同时抽出时间来做这些事情等等。\n\n其中,写简历的部分比较有趣。作者提出的一个宗旨是:“强调你**如何**研究,而非研究的是**什么**。”确实,非学术人士为什么要关心你的学术经历、发表和会议?你要做的是阐述过去的学术经历如何为此单位带来价值。这并非通过滔滔不绝地跟人家介绍安斯康姆的理论就能做到的。\n\n但由于我的毕业遥遥无期,这部分建议还不会有实操的机会。所以我的读后感就戛然而止(?)。","tags":["书籍"],"categories":["书影音"]},{"title":"购物分享(10)","url":"/2024/11/03/购物分享(10)/","content":"\n好久不见!博文虽然没写,但东西倒是没少买。\n\n# 文石NoteX3 Pro\n\n<img width=\"400\" alt=\"文石订单\" src=\"https://greendolphindance.github.io/picx-images-hosting/10871730648386_.pic.lvqo29hfq.webp\">\n\n之前在多抓鱼买了文石的一个小的电纸书,发现问题不少。首先,它翻页的时候经常有残影,时常影响阅读体验。其次,我买电纸书主要是为了看漫画,但是这个屏幕太小,看字多的漫画(例如JOJO)费劲,而且图片细节也不太完整。\n\n所以就想买一个大号的电纸书。品牌还是会选文石,因为安卓系统对我来说是刚需,而其他品牌的电纸书好像基本都是自家的封闭系统。彩屏没必要。最好还能手写笔记。看来看去,就是NoteX3系列了。又想用到的机会比较多,要不就买个贵的吧,于是就入手了Pro。\n\n到手开机就提示更新系统,说请等待几分钟,结果更新了快一个小时。Anyways,这个设备我基本上还是满意的。首先用到现在,我还没有发现翻页残影的情况,可能是旗舰机的性能比较好?据说无残影和刷新率是相互冲突的,但我这个刷新率也还好。\n\n此外就是开放系统的好处了。微信读书、b漫自不在话下,除此之外我甚至下载了clash(虽然根本用不上)。还可以绑定坚果云,由于我的文献都同步到了坚果云上,这无疑是极大的便利。\n\n送的磁吸保护套和支架都不错,质感很好。\n\n比较不满意的是那支笔。性能方面没有问题,写字时基本没有时差,屏幕上会即时出现线条,但最初有一些锯齿,约一秒后会变得平滑。不满意的点在于橡皮擦功能。它带了一个笔套,取下来时可以套在笔的上端。但问题是,如果笔的上端有笔帽,那就不能用橡皮擦了!所以在写字的时候只好把笔帽放在桌上或者握在手里,感觉有些不爽。\n\n后记1:买完NoteX3 Pro之后,把原来的小电纸书500块钱卖了(买入价698)。\n\n后记2:有一天把它带上地铁,又觉得举着费劲,感觉地铁上还是需要一个小的电纸书。于是又在多抓鱼购入(品相中等,¥592)。\n\n# Petzl液态镁粉\n\n<img width=\"600\" alt=\"Petzl订单\" src=\"https://greendolphindance.github.io/picx-images-hosting/10881730648387_.pic.83a1ujnev5.webp\">\n\n很久以前在某多买过便宜的液态镁粉,使用感一言难尽。最近攀岩非常频繁,虽然难度粉袋和抱石粉袋都有(后者是宜家的便当袋),但用固体镁粉时,总觉得爬了两下手上就没粉了,尤其是在抱石时,我一般不会背着粉袋,有时候居然爬到一半就感觉手滑了。所以觉得还是买个液体镁粉吧。我的安全带是Petzl的,对这个品牌比较有好感,所以选择入手了它家的液镁。\n\n跟便宜的液镁比确实有很大区别。摇匀后,它比便宜液镁更浓稠,这使得它能够在手上待更长时间。但其实也不能说是特别长,一般简单线爬两三条、难线爬两条甚至一条,就需要补充了。跟粉末比倒肯定是持续时间更长一些。\n\n但我还是不太习惯液镁,因为涂了之后总感觉手上很滑!所以我现在都模仿世界杯选手,涂了液镁之后再薅一把固体粉末,这样就万无一失了。\n\n我也用过Mellow提供的公用镁粉(应该是幻山的?),感觉区别不是特别大。所以其实买便宜一点的也没啥问题,某多上的除外。\n\n# 佳能CP1200照片打印机\n\n<img width=\"600\" alt=\"照片打印机订单\" src=\"https://greendolphindance.github.io/picx-images-hosting/10891730648388_.pic.175ead491o.webp\">\n\n因为想做一些纸质记录,所以想入手一个照片打印机。首先在柯达、富士、小米、佳能中选了佳能。柯达忘记是为什么没选了,富士主要是因为相纸太贵(但其实好像有办法用小米的相纸代替?但我懒得折腾),小米是因为看了佳能的老款后,感觉小米性价比也不怎么高,而且因为以前买过小米的显示器灯,一下就坏了,对它不是很信任。总之就是佳能了。\n\n目前官旗在售的是CP1500。但太贵了,而且我做了一通功课发现跟老款相比没有特别大的升级。所以就想在CP1300、1200、910里面选。910有点丑,1200和1300相比我没有特别的偏好,就看闲鱼上哪个有好价了。结果蹲了几天,并没有出现小红书用户说的那种好价,于是就想买个便宜的吧,1200便宜。闲鱼一看全是贩子,筛了半天,找到一个大学生,小刀五块钱购入。只有裸机和线,相纸我另外在淘宝买了,大概1.51一张。\n\n打印质量只能说还行吧,颜色比较还原,但偶尔会出现小光点。但对我来说已经够用。以后应该不会考虑购入更新的型号,除非这个坏了。\n\n# 百乐安娜苏限定\n\n<img width=\"600\" alt=\"百乐订单\" src=\"https://greendolphindance.github.io/picx-images-hosting/10901730648388_.pic.6t74o85v32.webp\">\n\n还是因为想做一些纸质记录,所以购入了各式各样的笔和本子。其中最满意的一笔还是百乐的安娜苏限定。这个限定出了好多款,但除了这两个套盒之外,其他的我看图都觉得比较塑料,遂放弃。黑色和紫色我觉得都好看,挑不出来,索性都买了。\n\n不得不说这笔是真贵啊!就算拿到手很满意,也感觉它不值那么多钱。不过限定大概就是这样的吧。可能因为是可擦笔,墨水和一般的中性笔不同,稍微淡一点,我比较喜欢。试了一下擦掉字迹,擦得也很干净。记得我小时候想擦中性笔的字迹,要么是用透明胶粘,要么是买那种深蓝色的摩擦力巨大的橡皮擦给它擦了,两者的原理都是稍微磨损纸张。而如今居然可以不损坏纸张,只擦掉笔迹,科技真的飞速进步啊!\n\n# CPB长管隔离\n\n<img width=\"600\" alt=\"CPB订单\" src=\"https://greendolphindance.github.io/picx-images-hosting/10911730648389_.pic.esismo8po.webp\">\n\n因为有好价就买了,之前也没用过,现在一想好像都没听说过它有什么差评。\n\n上脸发现真神啊!就好像是你没化妆,而是天生就皮肤好的那种感觉。脸出油了也不丑,也不会说掉妆斑驳什么的,真想知道它的原理。总之除了贵没有缺点。\n\n但是这一管还挺大,我倒也没算过它每毫升的单价,搞不好比某些国产品牌还便宜呢。\n\n# Aesop香水 Hwyl 炽\n\n<img width=\"600\" alt=\"Aesop订单\" src=\"https://greendolphindance.github.io/picx-images-hosting/10921730648390_.pic.8hghlewo5y.webp\">\n\n盲买的。到手之后隔了很久才第一次喷,是浓烈的木质和墨水(?)味。我个人很喜欢,但是感觉很多人会受不了,所以建议还是先买个小样闻闻。\n\n我其实有一堆香水了,但几乎每次出门都忘记喷……\n\n# 泡泡骚及泡泡骚手机壳\n\n<img width=\"400\" alt=\"泡泡骚订单1\" src=\"https://greendolphindance.github.io/picx-images-hosting/10941730648608_.pic.8vmxca74uo.webp\">\n\n<img width=\"400\" alt=\"泡泡骚订单2\" src=\"https://greendolphindance.github.io/picx-images-hosting/10951730648611_.pic.7sn81eb289.webp\">\n\n泡泡骚虽迟但到。这次的不同是尝试买了几个手机壳。款式我都很喜欢,唯一缺点就是底部稍微有点厚了,我用充电线充还可以,但用充电宝的自带线充的话,由于它那个线的头有点大,插入时就会被手机壳挡住,插口只能插进去一点点,所以一动就掉出来了。但这个我理解为小米充电宝的问题而不是手机壳的问题,毕竟充电宝更便宜,怪充电宝我心里舒服一点。\n\n声明一下我不喜欢喜羊羊,我买喜羊羊的壳只是因为它上面印了沃霍尔的作品、地下丝绒专辑封面的那个香蕉。但这是什么怪怪的双联名?喜羊羊和沃霍尔香蕉?\n\n首次购入了泡泡骚盲盒。购了三个,但开出两个一样的,气死了。在闲鱼上卖掉了,比原价亏了十五块钱?感觉还好吧,总比卖不出去好。\n\n本期最爱是西红柿和黑色Pingu!\n\n由于我不喜欢手机壳/手机上粘东西,我只用磁吸的底座,于是闲置了很多粘贴式的底座。上次尝试挂上闲鱼付邮送,居然还真有人要。然后我发现闲鱼给ta计算的邮费是13块,而我寄特价快递只要5.5,合着我还赚了几块钱?","tags":["工具","美妆","运动"],"categories":["购物"]},{"title":"中学生日记","url":"/2024/10/17/中学生日记/","content":"\n好像有太久没有写博客了,再不写有点说不过去。但其实也没啥好写的,最近都是一些倒霉事,虽然倒也不算是特别不幸,但总归让人有点提不起劲。而且超忙的,不忙的时候都在攀岩,所以也没时间写博客。\n\n最近想做一些纸质的记录,所以买了明年的日程本。但在此之前就不记录了吗?于是翻出了尘封的甲虫本子开始乱写。没想到居然文思泉涌,写了两页纸(虽然完全是流水账)。\n\n<img width=\"400\" alt=\"流水账2\" src=\"https://github.com/greendolphindance/picx-images-hosting/raw/master/10031729095391_.pic_hd.5mnspxvfu4.webp\">\n\n\n<img width=\"400\" alt=\"流水账1\" src=\"https://github.com/greendolphindance/picx-images-hosting/raw/master/10041729095392_.pic_hd.1vyn4p6u1z.webp\">\n\n真是敷衍啊!","categories":["随笔"]},{"title":"八月碎碎念","url":"/2024/08/27/八月碎碎念/","content":"\n终于结束了社会实践,于10号回到了北京。本来以为回来之后会闲一些,结果发现在广元的最后一周才是最闲的时候。\n\n首先,我的实习转线下了。其实工作内容没什么变化,甚至工作量也没有增加多少,只是变成需要坐办公室了。然而坐办公室的话每个月能拿1200,而上个月我只拿了90块钱,因为自己计算的工作量只有3个小时……开始思考当初是不是该多写几个小时,不过想想还是觉得诚实一点比较好。我干活虽然粗糙,但确实干得挺快的。\n\n本月最重大事件则是我有了一位大好き的运动员——土肥圭太さん。其实一开始是被脸吸引了,单眼皮、淡颜、长得像小孩而且比较中性,完全是我喜欢的类型!然后看了他的一些比赛和攀爬视频,发现他爬slab很优雅很细腻,我自己向往的攀爬风格正是这种。在攀岩队群里表达了喜爱之情,结果队友告诉我建议去Mellow兼职,因为他每个月会来Mellow定线。\n\n于是我就真去了……\n\n老板给我打了个语音,然后就直接让我去上班了。排班出来后,我发现定线那几天只给我排了一天的班,大失所望。又问队友,队友说你和慢姐(馆长)说说,我就鼓起勇气问能不能定线的时候给我多排班,她说那你周五也来个早班吧。我狂喜!\n\n结果在原定的排班,周四下午,我就直接见到本人了!本来想着他会不会来,结果一不留神,人直接出现在馆里面了。假装不经意地跟他用日语打了招呼+自我介绍,结果他叽里咕噜回了一句日语,我一个字没听懂。只好用英语跟他说,我只会说一点点日语。他就改用英语,原来是看我面生,问我在这里干嘛。我说アルバイト。他就哦哦。\n\n然后我们各自干活去了,但我一直在偷偷看他。真人好白,皮肤好好,好可爱!而且他把上衣脱了,啊啊啊这肌肉,我狂流口水。\n\n和他一起来的日本人还有小柴さん和原田さん,我都认识,但是都不好意思打招呼。小柴さん是因为他周三就来了,当时我没打招呼,现在打感觉有点尴尬……。原田さん是感觉……他有点可怕……我跟他打照面,礼貌微笑,他都板起个脸。他也基本上没跟两个日本人以外的任何人有什么交流。所以到头来我就只跟土肥さん说了话。我听其他两人都叫他どひけ,好玩!\n\n为了找他签名特意买了白色的笔(我的粉袋是黑色的),但快递扔在宿舍门口忘记拿了。本来以为他周四不会来,觉得第二天把笔拿过来就好了,结果他来了。这时候我不知道周五他还来不来,所以非常焦急,因为现在不签可能就没机会签了,而我又没有白色笔!这时另一个女教练跟我聊天,我说我是土肥さん的粉丝。她说那你要找他签名吗?我说我的粉袋是黑色的,我没有白色笔。结果她说前台有!我大喜过望,先把笔薅了过来,伺机而动。\n\n然而因为他也在忙,我也在忙,而且他基本上都跟其他两个日本人站在一块,我不想找其他两人签名,但总感觉当他们两个的面只说找土肥さん签会有点尴尬。结果一直没有找到单独说话的机会。\n\n突然,机会来了!他一个人往我这边走过来。我失声大叫(没有):“あのーー”\n\n他就看向我,我先说“I'll express this in Japanese”,然后磕磕巴巴地说:“私と……自撮りして……くれませんか?”成功说完后我忍不住大喊一声“できた!”他好像觉得蛮好笑的,然后说好啊。于是自拍。然后我开始自由发挥,说“サインも欲しい”,不知道说对没有,也不知道礼不礼貌。但他很爽快地叫我把粉袋绷平,然后签了名。\n\n<img width=\"400\" alt=\"粉袋(签名版)\" src=\"https://greendolphindance.github.io/picx-images-hosting/9671724764298_.pic_hd.64dsewm49d.webp\">\n\n但是这个白色笔好像快没水了啊啊啊,好不清晰。但有就不错了。\n\n啊,帅哥真好!\n\n周五他也来了,但不知为啥更没机会说话了。我18:45下班,收拾东西走人,他坐在门口的窗户面前,但没看到我。因为有点远,我也没跟他告别。然后我走到地铁站,突然又想回去跟他讲话,于是又掉头回去,跟同事说我还想再爬一下。终于逮到机会跟他说了一句“你辛苦了”,他也回了一句。这就是全部了。\n\n在前台附近瞄到了他在刷小红书,好像在看私信,有个人给他发了一长段中文,他看了一下又划回去了。我就在回去的地铁上也给他发了一条,内容是:“澪です。 お疲れ様でした!来月またMellowに来てくれる?”澪是我的日文名字。\n\n结果人没回,然后先后发了IG和小红书。估计就不会回了。有点失望但也还好吧!毕竟名人需要和粉丝有一点距离感!\n\n但岩馆的兼职平常很无聊,就是盯着看自保区人家的安全带有没有穿好、锁有没有扣好。虽然简单,但自保区新人多,安全员是很重要的工作。然而这就意味着8小时光盯着人屁股看了,一点摸鱼的时间都没有,很累很累很累。有一次我去接水了,回来就有一个人安全带穿反了,被老板发现了,对我一顿批评。过一阵又有一个人穿反了,已经上墙了,又被老板发现了,又是一顿批评。搞得我垂头丧气的。不过适应之后就没有出现过失误了。\n\n昨天去上工,一个教练,和蔼的大叔,跟我说你去抽根烟吧,我给你看着。我欢天喜地地跟另一个教练出去抽烟。然后他评价我的攀爬给人一种随时会掉下来的感觉。这跟我想象的好像不一样啊!我以为我是那种技术型!看来还是得多练……\n\n前几个月土肥さん是每个月都会来,希望保持!这样的话下个月就有盼头了!","tags":["运动"],"categories":["随笔"]},{"title":"七月碎碎念","url":"/2024/07/25/七月碎碎念/","content":"\n转眼间七月也要过完了,我仍然一事无成。13号开始休息到月底,本来想推进一下我的论文,结果先去成都文了个身,又玩了几天,然后博古睿来活了,接下来去成都和同学聚会,再接下来又接了读书会的报告,这个月恐怕又这么过去了。\n\n想起来写博客的缘由是今天突然出现了不寻常的社交,两次。第一次来源于群里的一位姐。群是一个穿搭博主的粉丝群,已经建立几年了,经常聊天的大家彼此都比较熟悉。里面的这位姐,擅长自己手工做衣服。因为想把自家养的狗狗文在身上,又知道我经常文身,于是加了我的微信咨询相关事宜。那之后的某一天,姐突然出现了抑郁焦虑的情绪,于是又来问我,我给出了一些医疗建议。今天看到姐在群里分享自己做的衣服,突然想起她之前的事,于是私聊问了一下情况,姐说现在好多了,之前是由于工作而焦虑。\n\n姐谢谢我,我说没事。然后她突然说:一直想给你寄我做的一条裙子。我大惊喜,但说不用客气。她说你不嫌弃就行。那我就不知道咋推辞了,只好道谢。内心已经放起烟花。也不是说贪她一条裙子,就是觉得自己的小小善举居然收到了巨大回报,有一种双向奔赴相互释放善意的感觉,非常良好。Made my day。\n\n良好的感觉一直持续,结果我收到了另一位姐(不是群友)的视频邀请。这位姐是我上个月在青城后山旅游的时候认识的,仅一面之缘,前一天晚上问我在不在北京,我说不在,然后跟我说了一下她想和暧昧对象一起去北京玩,并说明天详聊。这时候发消息问我,能不能语音聊。我说好啊,她就视频打过来了。我接听。\n\n接听基本陌生的人的视频对我来说很不寻常,我想这可能是因为群姐给我带来的良好感觉一直持续,让我觉得和别人社交一下也不错,虽然这么突然确实有点奇怪。接通后,姐用一种絮絮叨叨却稍微有趣的方式给我讲了她的前女友、现在的暧昧对象,以及她想要去日本留学的计划。我不时回应。她问给我打视频是否有些冒昧,我说还好吧。我没有撒谎,这对当时的我来说恰好并不构成一种打扰。聊了一阵,她才道出给我(而不是更亲近的朋友)打电话的原因:感觉这些事不太适合给熟悉的人讲,而且她现在的朋友大多结婚生子,已有些渐行渐远;觉得我给人一种慢慢的感觉,比较稳重,而且昨天刚好聊了天,所以突然就想跟我聊聊。\n\n我当即否认自己是一个稳重靠谱的人,但表示对她突然的行为毫不在意。她听后看上去有些高兴,但突然她的领导叫她去开会(我才知道她是上班期间给我打视频),我们约好晚上继续聊。\n\n按照我一贯的性格来讲,今天的社交已经远远超标。但我并没有感觉到压力。也许我的标准只是看心情而已。\n\n---\n\n说回穿搭博主的群。这个群很神奇,明明大家现生都不认识,却有一种相互都很熟悉的感觉。我已经和三位群友见过面,一位在北京读书,我和她见过两次,一次在清华,一次在颐和园;第二位是长沙人,我跟她过年前在长沙碰的面;第三位就神奇了,她是绵阳人,听说我来了广元,特意从绵阳跑来找我玩。其他的群友也有面基的,在群里分享,看起来其乐融融。\n\n其实和她们见面也没聊什么有营养的话题,就是群里的事、工作或学业、感情生活,然后相互拍拍照片。我经过长期的锻炼,学会了找话题,所以基本上也并没有什么尴尬时刻。倒不如说跟她们见面我完全不尴尬也没压力,就是随便走走聊聊,逛景点、吃东西,熟络得甚至不像是第一次见。仔细反思一下,我居然还比较享受这种状态。如果哪天群没了,我估计会难受死。\n\n穿搭博主本人、群主希希也是个很好的人。去参加博古睿的面试前,我得知需要正式的着装。而我衣柜里的西装外套只有我妈淘汰下来的银行制服,上身一试,丑得要死。我于是在群里诉苦。希希看见了,直接私聊我,说借给我衣服,给我发了两张她的西装外套穿搭。我不确定哪件比较好,于是她把两件都寄来了。最终选择了薄的双排扣那件,搭配了希希自制的白衬衫、丝绒短裙和红色皮鞋,追根溯源,全都来自于群里,要么是希希做的,要么是群友推荐的。事后得知我是穿得最正式的两个人之一,不知道有没有给面试官留下较好的印象。不过反正我最后入选了。\n\n群还教给我很多事情。因为大家来自五湖四海,各自的经历都不一样,这经常教给我很多生活经验和知识。群真好,我从一开始的社恐不敢发言,到现在基本上每天都在群里唠嗑,其间成长了多少,自不必多言。\n\n我现在对我作为i人的身份产生了一些疑虑。有可能我i的程度不够深,并不是仅仅享受独处。但也许i人本身就不是完全拒斥社交,而是大多数人社交的方式让ta感觉不舒服。我现在这样就挺好。\n\n---\n\n这个月也有令人不快的社交,其主要来源是广元市利州区的某些领导。第一次见面那天,我们19点才下班,中学的老师说请我们吃火锅。结果大概七点半的时候,区领导的联络员通知我们,20:30在某茶馆“小聚一下”。我们理所当然地迟到了。到达的时候,桌上杯盘狼藉,每个人的前面都摆着一杯啤酒和两杯不同的茶。就座后,领导让每个人自我介绍,他们自己也介绍了,但我完全记不得这么多名字和头衔。然后就是加微信,开始相互敬酒,每个领导给每个学生单独都敬了一杯,排列组合。我懒得主动,被敬完就呆坐着。而有些会来事的同学已经开始回敬了。领导说第二天中午正式请我们吃饭。\n\n第二天中午发生了更离谱的事。我们在饭店的包厢围着一个大圆桌落座,某位领导提议领导和学生交叉坐,就是一位领导一位学生再一位领导这样。有一个男的旁边坐了我和另一个女生,他脱口而出:“哈哈,两个妹妹陪我吃饭。”\n\n我一怒之下怒了一下,没有搭理他,专心吃菜。饭桌上一群老男人谈笑风生,尽是一些爹味发言,我也没太在意,觉得饭菜味道还行。\n\n我以为这事就这么过去了,结果之后联络员拉了一个她和所有学生的群,某一天突然在里面通知:明天18:30,你们的学长请你们吃饭,请准时参加。\n\n因为利州区区长是清华毕业,所以有一个同学,即坐在那个“妹妹陪吃饭”领导另一边的女生,问这个学长是不是区长。结果联络员说不是。\n\n然后她估计就来火了,说这种饭局她就不参加了哈,况且也不知道是谁,龇牙。我想了一下,觉得应该有一个唱白脸的,于是委婉说大家其实都很忙,以后这种活动希望还是精简一点。我的本意是这次我会去,下次不一定。结果联络员以为我也不去,发了一长段拜托我们支持她的工作,并@了我和那个女生。语气有些令人尴尬。\n\n我一想这不道德绑架吗?凭什么我要支持?于是干脆这次也不去了。晚上她给我和那个女生各打了两个电话,我们都没接。于是第二天她说:活动取消。\n\n我以为这事就完了,结果前两天她又通知我们:上次的活动给你们(?)补上哈。并发了时间地点。我估摸着这次推不掉了,就问能不能早点走,我有事,她说明天就是简单吃个饭。\n\n好吧。结果我到了那里,另一个女生根本不来,说是身体不舒服。鬼才信。于是开始简单吃饭。简单个屁,又是一通介绍敬酒,等了半天才可以动筷子。前后仍然吃了两个小时,而且去的地方很偏僻,不好打车,打上车也要等很久,我一合计干脆留在那里等大家之后拼车算了。\n\n除了第一次“小聚”,我之后都说喝了酒长寻麻疹,以此拒绝,他们也没为难我。其实也没撒谎,我到了这里之后真的每次喝酒必长寻麻疹,不知何故。但自己一个人或者跟朋友(比如那个从绵阳来找我的群友)一起的话,长寻麻疹我也愿意喝。所以其实我只是单纯不想跟这帮领导喝酒而已。\n\n总之希望上次就是最后一次社交活动了。\n\n---\n\n最近看了《斗牌传说》的动画,因为太好看,之后又把漫画全部看完了。非常喜欢赤木,但是如果他是三次元人,我肯定会远离这种不怕死的赌鬼。但他是虚构人物,动漫主要想表达他的冷静和坚定,再加上他(对阿治等人)偶尔会流露出像人的一面,甚至可以说是温柔,这诸多特质加起来,令人欲罢不能。\n\n我不是第一次看麻将动漫,之前看过《天才麻将少女》。但可以说《天麻》和《斗牌》完全不在一个档次上,不管是人物的刻画还是牌局的设计。关于后者,《天麻》里尽是超能力打牌,比如极高概率触发海底捞月或杠上开花。而《斗牌》里的设计都有逻辑可言,是心理战,而且基本上之后都会解说为什么这么打,令人信服。除了最后鹫巢的强运过于离谱,但即便如此,赤木的打法也是有依据的。\n\n而关于前者,《天麻》作者虽然没有公开性别,但毫无疑问是个男的。动画中充斥着大量媚宅情节,原村和的胸也大得过于离谱,我几乎是捏着鼻子看完。之前知乎上有人经过一通分析,说作者必是女的,而且是个胸小的女的,原村和胸大是对自己自卑心理的弥补。我真无语。除此之外,作品中的百合情节也是一塌糊涂,非常肤浅。如果是女作者,写女孩子之间的暧昧感情绝不会如此粗枝大叶。槽点太多了。\n\n《斗牌》是一部纯男性作品,里面除了鹫巢幻想中的胜利女神(作为一个符号)之外,没有任何的女性角色。之后我了解到,作者说自己不擅长刻画女性角色,所以就没有画。就这一点我就非常敬佩,不会刻画女性角色虽然是缺陷,但并没有大错。有的漫画家,自己不会刻画还硬画,把女性画成那种媚男形象,实在恶心。福本有自知之明这一点,不常看动漫的人可能没什么感觉,但在我看来是非常难能可贵的。而且虽然是纯男赌博漫画,里面好像也没有女性不友好的言论,比如开黄腔那种。所以我能够非常享受地看下去。\n\n接下来要看福本的其他作品。《赌博默示录》动画看了几集,但因为不是麻将动画所以其实不是那么感兴趣,不过剧情设计很好,开司也很可爱。也下载了《天河街浪子》全集,里面有老年赤木,所以其实更想看后者。","tags":["动漫"],"categories":["随笔"]},{"title":"购物分享(9)","url":"/2024/07/16/购物分享(9)/","content":"\n好久不见!最近又买了一些东西。\n\n# MOFT\n\nMOFT是我很喜欢的配件品牌,我的Mac、iPad、iPhone都使用了该品牌的配件。还在用iPad Pro时,我买了一个粘贴式支架,很好用。但后来换iPad mini了,就闲置了。然后想买一个mini的保护壳和笔套,但国内旗舰店没有上线,所以是在美国官网买的,[之前](https://greendolphindance.com/2023/12/04/%E8%B4%AD%E7%89%A9%E5%88%86%E4%BA%AB%EF%BC%883%EF%BC%89/)也分享过。\n\n最近MOFT出了和巴黎时装周联名的手机壳、挂绳和磁吸卡包,我一眼相中。共有黑灰两色。由于我已经有一个MOFT的灰色手机壳了,最终选择购入黑色。顺便又买了一个笔记本支架。之前没买是因为弄了笔记本保护壳,但后来因为买了[明基随行灯](https://greendolphindance.com/2024/06/27/%E8%B4%AD%E7%89%A9%E5%88%86%E4%BA%AB%EF%BC%888%EF%BC%89/),要贴那个定位贴,所以把壳扔掉了,因此可以加装笔记本支架。\n\n<img width=\"600\" alt=\"MOFT手机壳、笔记本支架订单\" src=\"https://greendolphindance.github.io/picx-images-hosting/9201721098970_.pic.1aovu5hcqe.webp\">\n\n很贵,心好痛!但是好看!\n\n拿到手是一个巨大的箱子,里面像俄罗斯套娃一样包了很多层。第一层是快递包装,第二层是泡沫纸,第三层是有MOFT Logo的一个大盒子,然后里面很可怜地放了一个用类似锡箔纸材质真空包装的小小手机壳……真是过度包装的典范。拿到手是MOFT一贯的好品控,喜欢。\n\n这系列的配件是有礼盒装的,有手机壳+挂绳的礼盒可选。收到手机壳后几天,我无意间发现分别买手机壳和挂绳会比买礼盒便宜,然后仔细思考了一下使用场景,觉得平常穿没有口袋的裙子骑车的时候会用上,于是又下单了挂绳。\n\n<img width=\"600\" alt=\"MOFT挂绳订单\" src=\"https://greendolphindance.github.io/picx-images-hosting/9181721098967_.pic.2a4z7bjtr6.webp\">\n\n好贵的绳子啊,谁他妈会买三百块的绳子(我)。拿到手确实好看,但感觉两个连接处的受力不是很均匀?感觉略有瑕疵。但买都买了,总体还是满意的,所以也没退。\n\n放一张全家福:\n\n<img width=\"400\" alt=\"MOFT全家福\" src=\"https://greendolphindance.github.io/picx-images-hosting/9171721098964_.pic_hd.5mnp1p216z.jpg\">\n\n(2024-11-24更新)之前忘记说了,事实上这根绳子和手机壳连接的那个贴片已经断了两次,断的都是我觉得受力更多的那一边。我给客服反馈,客服态度很不怎么样,还叫我不要戴着绳子跑步……好吧,也就是说我被喜欢的品牌背刺了,拜拜,再也不见。\n\n# 特洛克积木插座\n\n<img width=\"600\" alt=\"积木插座订单\" src=\"https://greendolphindance.github.io/picx-images-hosting/9211721098971_.pic.1aovu5hl8s.webp\">\n\n少数派联名,我看中的(仍然)是颜值。于是买了回来,又买了很多积木,等了很久才收到。送了一条type-c数据线,是那种电话线的样子,就是中间很多卷卷那种。感觉略有些短,而且卷卷的部分比较紧绷,不能拉太长,否则会把线从充电头上扯下来。不是特别满意,不过反正是送的。\n\n外包装很精致:\n\n<img width=\"400\" alt=\"积木插座外包装\" src=\"https://greendolphindance.github.io/picx-images-hosting/9231721098975_.pic_hd.5q7azeu7cg.jpg\">\n\n我买的是插座本体+可拆卸氮化镓充电头的套装。里面附赠了一些积木,全拼起来应该是外包装上画的样式。但我想自己装饰,参考了一下别人的分享,最终效果如图:\n\n<img width=\"600\" alt=\"积木插座装饰后1\" src=\"https://greendolphindance.github.io/picx-images-hosting/9241721098978_.pic_hd.syu5kgrnr.jpg\">\n\n<img width=\"600\" alt=\"积木插座装饰后2\" src=\"https://greendolphindance.github.io/picx-images-hosting/9251721098980_.pic_hd.8ad5c1utk8.jpg\">\n\n本意是想弄一个爵士四重奏的形式。结果买小人仔的时候忘记了,只买了三个。所以只好把大贝斯挂起来。而且这个贝斯确实买太大了,之前试着装在某个小人手上,结果需要踩两块板,而且整个人超级后仰,才能把贝斯举起来。所以就放弃了。\n\n钢琴我本来买的是一个很小的,大概5cm长的样子。结果发给我是一个大的。而且三个脚是实心的,无法插在积木底座上。所以干脆就放在旁边了。\n\n遮阳篷,我本来是想放在插座正面的。但是感觉正面最外面的那一排凸起和边上的距离没有设计好,有点过长,导致遮阳篷的积木插不进去。所以只好只插了四块在旁边。送的积木我也不想全部浪费,就拼在了下面。数据线夹我也拼了两个在它本来该在的地方,剩下一个用来挂贝斯。\n\n其实对我这个设计不是特别满意……但也只好这样了。\n\n# Apple Watch表带\n\n<img width=\"600\" alt=\"表带订单\" src=\"https://greendolphindance.github.io/picx-images-hosting/9191721098968_.pic.6t70aar4uk.webp\">\n\n看少数派那个把所有设备都改成黑橙配色的人安利的。之前我用的表带是拼多多买的串珠蝴蝶款式的,也要30多块,但质量实在太差,戴了没一个月金属部分就发黑了……而且说实话这个串珠款式看久了有点腻,太花哨了。阿慕良品的表带收到后直接把串珠表带扔了。\n\n我是第一次买这么贵的表带,主要也是想用久一点。一开始看中的是店内另一款,有橘棕色,但那款要贵几十块。然后我看这个孔雀蓝也挺好看的,于是改买这款。\n\n实物图如下:\n\n<img width=\"400\" alt=\"表带实物\" src=\"https://greendolphindance.github.io/picx-images-hosting/9221721098973_.pic_hd.51e1fe7zvf.webp\">\n\n我买的时候没看清,以为是孔雀绿,刚刚截图的时候才发现是孔雀蓝。我说怎么比我想象的要蓝一些呢。还挺好看的,做工也没什么瑕疵。希望能用久一点吧。\n\n今天的分享就到这里。散会!","tags":["工具"],"categories":["购物"]},{"title":"购物分享(8)","url":"/2024/06/27/购物分享(8)/","content":"\n本次是数码产品合集。\n\n# 小米自带线充电宝20000mAh\n\n<img width=\"400\" alt=\"小米充电宝\" src=\"https://greendolphindance.github.io/picx-images-hosting/8911719461371_.pic.73ttcd4xbo.webp\">\n\n价格:¥159\n\n来源:小米有品\n\n---\n\n我确信我应该是在小米有品买的,但上面显示我没有任何订单。搜了淘宝和京东,也没有,很是奇怪。Anyways。\n\n以前常用的是Zendure的行李箱充电宝(红色,10000mAh),但由于换了15 Pro,lightening口变成c口了,需要换一根线,再加上我越来越不愿意出门带充电宝+线两样东西,所以渐渐闲置了。最近用得最多的是Anker的磁吸充电宝(黑色,5000mAh),很轻薄方便,但缺点也同样明显:(1)没法同时用磁吸充电宝和泡泡骚,当然这个不是什么大问题;(2)充得慢,无线充电的通病;(3)5000mAh太少了,基本上需要每天充电。\n\n于是萌生了购买一个大容量自带线充电宝的想法。最开始看中的是Anker那款,但当时看的价格比较贵,同时看到不久前李*琦直播间的价格巨便宜,于是很不爽,干脆不买Anker了,最后购入小米。\n\n拿到手最初的感觉是,很重,不适应。但带出去几次后,放在单肩包或斜挎包里(我不太喜欢背双肩包),又感觉还好。毕竟人家有20000毫安嘛。自带线很方便,不用的时候可以把线头按进卡扣里,呈现图片显示的那种状态。但有时候线头会从卡扣里滑出,所以最好不要提着走(?)。这部分我倒是没什么问题,毕竟我平常都放在包里。\n\n比较不喜欢的是线有点太短了,不太方便边充电边玩手机。毕竟这个充电宝很厚,线太短了只能一手揣着充电宝,另一只手玩手机,显得很傻,而且不太方便。\n\n还有一个不满意的点是,它太容易脏了……我每天把它放在包里,不知道怎么它的表面上就会有一些灰色的痕迹,不清楚是蹭到了什么东西还是掉色了。现在已经整个是一个战损的状态。\n\n总之这个产品中规中矩吧。能用,但是很多小细节做得不好。我还是有点后悔没买Anker的,李*琦直播间到手也就160多块。但不知道他什么时候会再播这个产品就是了。\n\n# 明基LaptopBar随行灯\n\n<img width=\"600\" alt=\"LaptopBar\" src=\"https://greendolphindance.github.io/picx-images-hosting/8931719462714_.pic.3yebdg1i8o.webp\">\n\n本来我有一个明基的显示器灯的,平常笔记本放在旁边,屏幕上放个微信,偶尔瞄一眼,也没什么需要笔记本随行灯的需求。但是现在要在广元待一个月,没有显示器(和灯),总感觉缺了点什么。而且对于这个产品也好奇已久。再加上博士毕业有4000块报销额度,而且618打折,最终爽快购入了。\n\n拿到手感觉非常惊艳!是明基一贯的高水准。而且比我想象的要小巧和轻一些。还送了一个收纳包,平常带出去时可以放在包里。收纳包中间有一个隔层,这个设计是为了把电池放进隔层里固定住,但实际使用时这个隔层偏小,要塞一会才能正确地塞进去。不过瑕不掩瑜。\n\n使用效果如图:\n\n<img width=\"400\" alt=\"LaptopBar使用效果\" src=\"https://greendolphindance.github.io/picx-images-hosting/8921719462471_.pic_hd.5c0uhhbo10.webp\">\n\n因为懒,我直接让它自动调整亮度和冷暖,出来的效果很不错。也可以手动调整,并且保存你喜爱的设置。我太懒了所以就没搞。我的显示器灯也是一直用的自动模式,反正还挺够用的。\n\n比较喜欢的一点是它有两种,那个啥,形态?就是电池上面有一根杆子,可以不伸出来,这样就是灯紧贴着屏幕上缘;也可以伸出来,这样就是灯比屏幕上缘高出一截(如图所示)。我比较喜欢后一种。\n\n其实对我来说,它的使用场景还是挺多的。除了出差之外,我放假回家也可以用这个。我房间本身用的是那个叫什么灯,就是一个灯管,送两块磁铁,粘在桌子上方。那个照明效果很差,甚至有频闪。明基这个好太多了。\n\n总之,满意满意满意。\n\n2024-7-1更新:好吧,实际使用后,有一个点不太满意:续航只有140分钟。我以为供电器这么大一坨可以抵得上一个5000毫安的充电宝呢。还是说这个智能调整的功能比较耗电?\n\n# 少数派联名积木键盘\n\n<img width=\"600\" alt=\"积木键盘\" src=\"https://greendolphindance.github.io/picx-images-hosting/8941719464011_.pic.13ln7od8tb.webp\">\n\n价格:¥1050+邮费32(🈚️)\n\n来源:少数派线下店(但邮寄)\n\n---\n\n之前买了少数派出品的积木插座,于是加入了积木插座交流群,群友在群里发了这款键盘,一眼相中了。询问客服,价格为1999,直接放弃。\n\n没想到事情迎来了转折。某天上午,客服突然私聊我说:“您好,这款键盘已停产,只有这一把样品在售卖,原价1999,打75折,1499.25,目前活动满1500可叠加使用三张350团500的券,券后价格1049.25。”\n\n突然一下有了极大的吸引力!我个人不介意购买样品,只要使用没有问题就行。于是当即心动。但是我的毕业报销,单品不能超过1000块,所以还是有点舍不得。\n\n发了朋友圈吐槽,有朋友建议:让他开1000的发票,我再补49.25。这个方法看似可行,但我的报销必须附有支付记录。进一步交流发现,购买这款键盘的步骤是在大众点评团购三张350代500的券,然后到手约1049.25。客服说他直接给我算1500元,到手1050,然后给我送周边。\n\n于是我想到一个好主意:先在大众点评团两张券,开700的发票;再团一张券即可。这样支付记录和发票都有了。\n\n客服欣然同意,于是交易成功。\n\n由于我恰好要在那时前往广元,所以得改地址,几经波折终于把键盘拿到手。发现从包装到内容都十分精致!还送了很多积木块,可以用于DIY。我最初的作品是这样的:\n\n<img width=\"600\" alt=\"积木键盘DIY初版\" src=\"https://greendolphindance.github.io/picx-images-hosting/8951719464205_.pic.5j42cxyuv0.webp\">\n\n我拼这些白色十字架的意图是弄一些小星星,营造闪闪发亮的效果。结果被群友吐槽“耶稣看了都复活”,于是就改成了首图那样:既然是从少数派买的,那就拼个π吧。\n\n我没用过多少键盘,所以只能对比我已有的Keychron K3。这个键盘的手感明显比K3要好,按键很爽脆,不过相应地声音也更大。这款键盘的按键较多,只是没有数字小键盘而已(反正我也用不上),而K3是那种浓缩的,类似笔记本电脑的键盘那样。这款键盘的Fn键在第一排右数第四个,上面是一块黄油(?)一样的形状,主要的功能是用一些组合键来调整灯光啥的,不过我不喜欢键盘有灯,所以用不上,直接关掉了。总而言之是明显好于K3的,但不知道跟K3 Pro相比怎样。\n\n这个键盘肯定是有设计方面的溢价的,所以性价比肯定不高。不过我喜欢就行!买来之后完全爱不释手,每天都要打点字。因为要给初中生做讲座,昨天狂打了6000字的演讲稿,爽得要死。感觉还不过瘾,所以今天就来写购物分享了。\n\n电量方面,这个键盘是用Type-C线供电的,昨天充到了99%,狂打了6000字和购物分享之后,刚才一看剩余94%,但我对这个数字没什么概念。只有换算成“几天一充”,我才搞得清它的续航究竟好不好。\n\n但无论这个键盘怎么样,你们也买不到了,嘻嘻。\n\n今天的购物分享就到这里!","tags":["工具"],"categories":["购物"]},{"title":"成都两日游","url":"/2024/06/23/成都两日游/","content":"\n好久没写博客了,主要是没什么事可写,而且有点忙起来了。东西倒是买了不少,但没有什么值得分享的。\n\n最近需要去四川广元进行社会实践,换言之就是学校安排的打白工活动,不去就不能毕业。在前往广元之前,我计划了成都的两日游。本以为是一场特种兵之行,结果年纪大了体力不支,两天的计划仅各完成了一半。但成都确实是个不错的城市,这次比较仓促,以后可能还来。\n\n我的原计划:第一天去青城后山+都江堰,第二天去逛五家唱片店和多抓鱼快闪店。结果实际上,第一天只去了青城后山,第二天只去了两家唱片店和多抓鱼。\n\n# 到达和住宿\n\n我到达的时间是21号凌晨,事实证明是一个错误的决定。首先,我买的机票是00:10到,结果它延误了,最后是1点才落地。这么晚到成都,只能打车去市区(当然即使是0:10到也需要打车)。我又不敢半夜打网约车,就打了正规出租车。\n\n我住在一品天下地铁站附近,这是小红书某个关于成都旅游的帖子下面评论区本地人推荐的地点,说是交通方便。确实挺方便的,靠近市中心。不过从机场过去就很远了。更加没想到的是,途中的高速费巨贵,好像要39吧(首都机场才10块),并且我要负担司机往返的费用。\n\n所以最后打车花了:279块。付款的时候我心真的痛死了。\n\n住宿方面,定的是一个民宿,3天共466块,有58平米,带洗衣机,还算便宜。唯一不满意的点是它没提供洗衣液之类的,房东叫我去楼下商店买,但我看楼下商店只卖烟酒食品。不过这也好解决,我去在成都的亲戚家薅了她还剩最后一点的洗衣液,洗了一次衣服。之后在猫超又买了一包便宜洗衣凝珠,结果第二天没洗衣服,没用上,不过可以去了广元再用。\n\n其实我可以住亲戚家的,但我一开始没想起她住在成都,就订了民宿。后来我妈提醒我了。民宿可以免费退,但我又想享受独处时光,于是谎称不能退,所以就这样了。\n\n# Day 1:青城后山~~+都江堰~~\n\n21号去了青城后山。之所以去后山而不是前山,是因为前山主要是看各种道观,但我对那个不感兴趣。后山就纯粹是爬山看风景。而且前山门票80,后山只要20。\n\n就去了。交通方面,我参考的攻略是[这个](http://xhslink.com/0OtWbN),但里面貌似有一个错误。高铁不应该坐到都江堰,而应该直接坐到青城山。帖子说从都江堰站坐大巴去青城后山只要40分钟,但我查到的比这个时间长得多。\n\n我当天先坐地铁从一品天下到犀浦,在犀浦高铁站门口买了早饭(门口有巨多小摊),是普通的烤甜玉米、卤蛋和豆浆,因为我平常起得晚,早上没胃口,不习惯吃早饭,所以没法吃口味太重或太油的。但我觉得早起去爬山的话,还是吃点早饭比较好,否则没爬多久就饿了。玉米难以下咽,烤得非常干,因为是那种烧烤架露天烤的。我在我家(长沙)的路边摊买的烤玉米是那种半封闭的烤炉,烤出来的就比较多汁。但卤蛋非常惊艳,味道刚刚好。我在成都吃过的两个卤蛋都非常好吃,难道这也是一种成都特产?豆浆就中规中矩,放了很多糖。\n\n我的车是8点多的,前一天快3点才睡,第二天6点就自然醒了,非常极限。再一次证明了坐晚上的飞机是一个多么错误的决定。\n\n然后坐高铁从犀浦到青城山。下车后跟着路牌走到去后山的大巴处,稍微有点远,而且中间有一段没有指示牌,我一度以为我走错了。大巴票我是买的往返,一共30块。但其实单程票也只要16块,来回就省了两块钱。其实我觉得可以去程坐大巴,回来的时候直接打车去高铁站,因为到时候应该会很累了。攻略说想在车上睡觉的最好抢前排的位置坐,因为后排更加颠簸。结果我上车的时候,一群人蜂拥而上,把前排占满了。我只好坐在最后一排,确实非常摇晃,像过山车。所以还是需要做好没法在前排睡觉的心理准备。\n\n大巴的终点好像是泰安古镇,不太记得了。就算不是,古镇也不是很远。没啥好看的,就是一些仿古的建筑,主要是各种客栈和饭店。我是觉得没有必要住在景区。\n\n我的游览路线参考[这篇攻略](http://xhslink.com/XH3YbN)的评论区。简而言之是从五龙沟上山,走到又一村,然后下山走到金骊索道的上站,坐索道下山。要走完全程太费时了,感觉我来走的话,要花一天还不止,可能会死在山上。\n\n过程没啥好说的,就是走。水和食物不用带太多,甚至可以不用带,因为隔一段距离就会有人摆摊,卖的东西都大同小异:水果(主要是西瓜、李子、黄瓜)、小孩玩具、水和饮料、方便面、炒土豆、烤肠、腊肉(可以直接吃那种),溢价合理(毕竟有搬上来的人工费)。充电宝绝对要带。别的就没啥了。\n\n景色还不错,但不要抱过高期待。就是山里的自然环境,有树啊草啊、溪流瀑布之类的。比较喜欢的景点是三潭雾泉,就是一个小瀑布,搞得周围雾蒙蒙的。\n\n<img width=\"400\" alt=\"三潭雾泉\" src=\"https://github.com/greendolphindance/picx-images-hosting/raw/master/8881719075924_.pic_hd.77df3pedjc.webp\">\n\n但也就还行吧。我以前去过湖南的马拉河,当时那边还没怎么开发,景色比这个好。所以就是随便拍了一些照片就继续爬了。\n\n中途买了李子,8块钱,总共8个还是9个。不记得哪个攻略说这个李子好吃。我吃了第一个是酸的,后面几个还可以,就也不是特别好吃吧。\n\n爬到一半已经有点不行了,看到一个卖鲜榨橙汁的摊,老板娘站在那抽烟。我问这里可以抽吗?她说这一段比较潮湿,可以抽,不过要确保烟头熄灭。好吧,既然当地人都这么说了,那我也抽。买了一瓶橙汁,15块,其实蛮便宜的。华子以前有个卖鲜榨橙汁的机器,也是15块一杯,跟这个量差不多。这边还需要把那么多橙子搬上来。橙汁蛮甜,我看着她做的,也没加糖啥的。这时候来了两个男的,买了3根黄瓜,10块,在景区食物中也不算贵。西瓜好像是5块。底下还有卖凉面和凉粉的,应该和橙汁老板娘是一起的,但我没问价格。\n\n问老板娘到索道还有多远,她说还要40多分钟,我当场崩溃。但现在进退两难,原路返回估计也要很久,所以只好继续往上爬了。但最后只花了30多分钟。\n\n转为下山的时候路过了一些小饭馆啥的,当时没注意,走了一会发现怎么下山了呢。现在想来那就是又一村了,有点拉垮啊。然后坐索道,30块,风景挺好,但缆车外面的玻璃是黑的,拍出来有点奇怪。\n\n<img width=\"600\" alt=\"缆车外\" src=\"https://github.com/greendolphindance/picx-images-hosting/raw/master/8891719076584_.pic_hd.1vyij05zu9.webp\">\n\n索道的终点不记得是什么地方了,总之离坐返程大巴的地点还有一段距离。我当时已经快死了,就坐了观光车过去,10块。所以我之前说还不如买单程大巴票,回来直接打车去高铁站,舒舒服服。\n\n最终一共走了3小时14分,7公里左右。爬升相当于爬了87层。之前有攀岩队前队友晚上爬楼梯锻炼,爬到顶再坐电梯下去重新爬,一共爬了200多层,不是人啊!\n\n我的发现是攀岩和打拳对我在徒步方面的体能并没有什么正面作用,我还是累得要死。可能还是需要快走或跑步这类的运动。但我巨讨厌跑步,所以以后还是少爬山吧(?)。\n\n在返程大巴上看了一下高铁票,发现到都江堰最快也得到四点半了。再加上很累,所以就放弃了,直接坐高铁到犀浦了。然后回民宿休息了一下,就去双流区我亲戚家,和她吃了饭。吃的啥后面再写。从一品天下打车去她家40多分钟,居然只要二三十块,可见成都市区打车挺便宜的。在北京20多分钟的路程就要二三十块了。22号从她家打车回来,拼到两个人,只花了令人惊异的17块钱。\n\n# Day 2:唱片店+多抓鱼\n\n最开始做计划的时候,22号本来是去五家唱片店的。后来友人mj给我发了[这个链接](https://www.duozhuayu.com/posts/1062?utm_source=appshare_%2Fposts%2F1062&utm_medium=copyLink&sharer_id=43983254130265391),我才发现这天开始多抓鱼在成都有一个快闪店。好嘛,那去。\n\n于是计划成了下面这样:\n\n<img width=\"600\" alt=\"6-22计划\" src=\"https://greendolphindance.github.io/picx-images-hosting/8901719154948_.pic_hd.5j427tpdot.webp\">\n\n准备先往东南,经过不快进和旧时光走到得行,再到多抓鱼(成都光环购物公园),再往西经过明堂士多到赋格,再返程。发了朋友圈,有懂的人在下面评论说太多了,另有人叫我注意这几家店的开业时间,我于是搜了一下不快进的,发现:12:30开始营业……于是直接把它划掉了。\n\n最后的行程则和如此计划的大相径庭。一开始是按计划进行的,睡了个懒觉先去了旧时光。出来的时候花呗已多欠了900元。我买CD向来很精简,只买流媒体上找不到的。然而这个店主太会进货了,一个小架子上的爵士乐专辑(大概三四十张),大概有一半在网上都找不到。于是大买特买。这店主也是个会做生意的,看我挑了那么多,便对我说:再看看摇滚?\n\n好吧,看看。于是又拿了几张摇滚。老板拿计算器按半天,刚好900。\n\n刚进来的时候门口坐着一位女士,好像是老板娘。我抬头一看满墙的黑胶,就问老板娘你们是不是只卖黑胶,她说是。我就出去了。出去走了两步,想来都来了,要不看看黑胶吧,反正毕业后买黑胶唱机也在计划之内。于是又返回。这次碰到了老板本人,我说其实我想买CD,他说CD我们有啊!就是这一决定让我痛失900。\n\n结账后跟老板聊了一会,说了我的计划。他说赋格压根没有CD卖,得行和明堂士多主要是做新CD的,可能没有我想要的。不快进倒可以找一找。于是我的计划变成了:旧时光➡️多抓鱼➡️不快进➡️回家。跟一开始的未免也差得太远。\n\n接下来去多抓鱼,坐地铁大概半小时。可能因为是第一天开业,里面巨多人。书倒没什么特别的,只大概分成了几类,各个类别之下的书都是随机码放在整理箱里的。没啥好书,我只能说。但看到了奶牛猫玩偶,非常可爱,当即拿下(¥88)。又买了一个小黑猫挂件,挂在包上了(¥33)。然后想来都来了,还是得带本书回去,于是一通翻找,最后买了一本:《中国的蔬菜》。翻了一下感觉内容是词源学、历史学、农学的交叉,就是考据国内各种蔬菜名称的来源,并且科普它们的生长习性、食用价值等等。还挺有意思的。\n\n书里说,荸荠和马蹄是同一种东西(黑紫色的皮,甜),但慈菇是另一种(灰色的皮,苦)。而我老家的方言里,说慈菇就是在说那个黑紫色皮的玩意。可能是某种以讹传讹,但书里没写。可见还是有些不全面的。\n\n言归正传,逛完多抓鱼去商场里买了个奶茶,等了半个多小时。出来的时候已经快3点了。因为没吃午饭,开始饿了,所以想着去商场里面或者周边吃点东西。打开大众点评,发现一个熟悉的身影:昊·来了寿司。它在北京也有门店,我去文那个“PLUCK”文身的时候吃过一次,是四川风格的寿司,超级好吃,当即有点想吃。又翻了半天,感觉其他的都不太感兴趣,于是就去了这家寿司店(下详)。\n\n下一站是不快进。对这家我倒是有点失望,一进门我说要找爵士乐CD,他说没有(但是墙上赫然是板桥文夫的黑胶)。我说那找摇滚的吧,要网上没有的。他翻了半天说这个隐患乐队网上应该没有,被禁了。我顿时好奇,上网一搜,发现仅存一首歌。打开放了一下,觉得一般,就没买。然后他又找出一张,是一个人用电脑操控数十种乐器弄出来的东西。他给我放了一下,非常新奇,可以说是毫无感情。我决定买下。然后又挑了两张。结账的时候他说其中一张要三百块,我说那你放回去吧。剩下两张共花费180元。\n\n这个店还卖咖啡和酒,有三种鸡尾酒,都是以乐队名称命名的。第一个Oasis,我巨讨厌这个乐队,直接pass。第二个是Guns N Roses,第三个忘了。最后点了Guns N Roses(¥68),居然很是好喝。基酒好像是某个金酒和生命之水。我想起当时跟崔聊天,我跟他聊起生命之水,我不知道英文怎么说,就说好像是叫water of life。崔说我知道你说的是啥了,但它不叫这个,叫living water。好吧,我才发现这个中文词能够对应两个意思完全不同的英文词组。\n\n然后就回去了,坐的地铁。其实应该打车的,因为这时候我手上的东西已经很重了。地铁全程没有位置,搞得我还是挺难受的。回去我就瘫了,休息了一阵勉强起来去找我亲戚吃饭(下详)。\n\n# 吃的\n\n一个总体的感受是:川菜没有湘菜好吃。借用我亲戚举的例子,做湘菜有时候生抽都不放,就放盐,纯靠食材的新鲜程度,但川菜基本上都是生抽老抽味精鸡精糖豆瓣酱全部往里搁,所以吃多了会腻,而且吃久了会发现味道都差不多,都是火锅底料的味道。而且川人给人一种牙齿太差的印象,因为总是喜欢吃软趴趴的东西,但湘菜比较多元化,可以容许有嚼劲的食物。\n\n免责声明:这是我在成都生活的亲戚说的,不代表本人观点。但我确实也觉得还是湘菜比较好吃。\n\n不过偶尔吃吃也还是不错。这几天共吃了四家店,其中老妈兔头和椒龙辣凤火锅串串是我亲戚带我去吃的,六个六是点的外卖,昊·来了寿司是去多抓鱼之后到店里吃的。\n\n## 老妈兔头\n\n我是第一次吃兔头,但没什么不可接受的。刘畅老师曾说过:真要尊重动物,就(心怀感激地)吃掉它们。《银之匙》讲的也是这个道理。我深以为然。不过兔头确实有点形状可怖,主要是它那上下两对大门牙还在,很明显地提示了这是一颗头颅。我拍照发到家庭群里,爸问:这是什么,土拨鼠头?\n\n兔头有麻辣和(好像是)五香两种口味,我们两种都点了,一致觉得麻辣味比较好吃。但五香味也不错。\n\n冒鸭肠非常好吃。鸭肠脆脆的,毫无腥味,里面还有我爱的豆芽菜。\n\n夫妻肺片,火锅底料味。我一向不太喜欢冷荤,不过也可以接受,但冷的火锅底料是不是有点过分了!\n\n干锅兔,中规中矩,感觉不如湘菜的干锅。里面有土豆和洋葱,我还挺喜欢的。\n\n还点了一个类似凉粉的东西,刚好就是我亲戚痛恨的川味软趴趴美食。酸辣口,滑溜溜的,入口即化。味道没什么层次感,个人觉得一般。\n\n## 六个六攀枝花羊肉米线\n\n22号起床点了这个的外卖,没吃完,不是说它不好吃,是我平常中午起床,早上实在没什么胃口……\n\n在这家吃到了来川第二颗卤蛋,仍然是高水准,色泽不均匀,带壳拿了个塑料袋装过来,明显是自己卤的。反观北京外卖,有一次点了个什么,送过来的卤蛋居然是外面买的那种真空包装的,连拆都懒得拆……作为卤蛋爱好者,我比较喜欢偏咸的口味,川人对卤蛋的理解看来也是这样,所以刚好对我的胃口。\n\n还花五毛钱巨款加了一把薄荷,好香!发现我虽然没吃过什么薄荷做的菜,但对薄荷的接受度很高。\n\n米线里肉挺多片的,但薄。米线本线就中规中矩,又是川人喜爱的软趴趴口感。\n\n比较便宜,¥15.38。\n\n## 昊·来了寿司\n\n寿司店,但是四川风味。有脑花寿司、毛肚寿司等等。点了店里一个92块的套餐,有五个寿司、一个蟹棒天妇罗、一个牛肉一口饭(实际上可以吃三五口)。打卡收藏好评又送了一个脑花一口饭和一瓣玫珑蜜瓜,切好,摆盘很精致。\n\n寿司挑几个印象深的说一说。芒果鹅肝寿司,非常非常好吃,鹅肝爱好者狂喜。不过就没什么特色,一般日料店都会有。脑花寿司,也很好吃,我一口闷。皮蛋三文鱼寿司,好好吃,三文鱼是生的,可能腌过,上面有皮蛋碎,非常讲究的调味。一口饭都不错,我更喜欢脑花的那个。蜜瓜很甜。\n\n在北京还吃了毛肚寿司,也是很好吃,巨大一片毛肚,一口吃掉,啊呜啊呜。\n\n总之就是:都好吃。要不是北京那家太远了,我每周都要去吃。\n\n低估了这个套餐,吃完已经很饱了。我想区区五个寿司,一口米饭(结果又送了一口),能撑到哪里去。结果!\n\n## 椒龙辣凤火锅串串\n\n在成都的最后一顿。由于三点多才吃的寿司而且吃得很饱,晚上根本吃不下什么东西。于是等到七点,问亲戚饿不饿,她说饿了,我才打车出发。\n\n锅底很辣,是我在成都吃过最辣的东西,但对我来说也还好,喝点水就行。其实湘人的吃辣能力应该比川人要好,因为我好像没吃过什么特别辣的川菜,但在湖南一包小鱼仔就可以让我屁股冒火(?)。\n\n酸梅汤免费,但非常淡,不过不要钱的话,不喝白不喝。\n\n串串是那种自己去冷柜里拿的,然后丢到锅里煮,最后按竹签的数量算钱,加上锅底价格。一串很小,不过鉴于我吃得过饱,这个量对我来说就刚刚好,可以多拿几样而不吃撑。一般来讲是荤菜两根,素菜一根,不过我看那个毛肚卷香菜也是一根。毛肚卷香菜很好吃,超爱毛肚,更爱香菜,二者绝配!\n\n一般素菜尤其是叶子菜会更吸油,所以会更辣。我吃了空心菜、丝瓜、冬瓜、芋头,都好好吃,最推荐空心菜。其实莴笋应该也会好吃,但我去拿的时候刚好没有了。它还有南瓜,但我有点接受不了辣的南瓜,就没拿。\n\n肉类我没拿多少,最推荐的还是那个毛肚卷香菜,别的有点忘记了,好像有郡肝等,总而言之都不错,但并没有给我留下很深刻的印象。\n\n豆制品我就拿了鸡蛋干,不好吃,不入味。应该拿老豆腐,但那时候我已经再次吃饱了。\n\n# 之后的计划\n\n今天离开成都去了广元,与实践基地的老师会面了。碰到的川人都挺热情。初步来看广元挺好的,有可能等我回去会再写一篇关于广元的。","tags":["食物","旅行","音乐"],"categories":["随笔"]},{"title":"Category页面过长博文名省略","url":"/2024/05/15/Category页面过长博文名省略/","content":"\n在[《博客搭建小记》](http://greendolphindance.com/2023/10/07/博客搭建小记/)中,我曾记录过参考[这个教程](https://myoontyee.github.io/article/9ff0cec8.html)实现Category页面过长博文名省略的过程。但是今天发现了问题:在单个Category的子页面中,省略效果是正常的;但在所有Category的父页面中,过长的博文名没有省略。我原来的代码如下:\n\n```html\n<style>\n li {\n height: 24.2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n @media screen and (max-width: 767px) {\n li {\n width: 240px;\n }\n }\n\n @media screen and (min-width: 768px) {\n li {\n width: 60vw;\n }\n }\n</style>\n```\n\n问题很明显。由于桌面端父页面中,文章列表是分为两列的,所以这时的li的宽度就会超过60vw。这样一来,博文名就不能省略。\n\n于是修改代码。\n\n# /layout/_page/category.ejs\n\n这部分控制的是子页面的显示,所以是无需修改的。但相对于教程,我还是将width修改为80vw,以适应不同设备的屏幕大小:\n\n```html\n<style>\n li {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n width: 80vw;\n /* 设置宽度为视口宽度的80% */\n }\n</style>\n```\n\n# /layout/category.ejs\n\n这部分我的修改如下:\n\n## 1. 给li起一个类名\n\n我起的名字是item-title。虽然很简单但还是放一下代码:\n\n```html\n<li class=\"item-title\"><%- post_item.title %></li>\n```\n\n## 2. 设置item-title的默认样式\n\n默认样式指的是宽度超过992px时的样式,宽度更小时的样式之后会分别设置。代码:\n\n```css\n .item-title {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n width: 270px;\n}\n```\n\n## 3. 分别设置不同宽度范围下的item-title宽度\n\n我分了两种情况,代码如下:\n\n```css\n@media (max-width: 992px) {\n .item-title {\n width: 250px;\n }\n}\n\n@media (max-width: 768px) {\n .item-title {\n width: 230px;\n }\n}\n```\n\n完整的CSS代码如下:\n\n```html\n<style>\n .item-title {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n width: 270px;\n }\n\n @media (max-width: 992px) {\n .item-title {\n width: 250px;\n }\n }\n\n @media (max-width: 768px) {\n .item-title {\n width: 230px;\n }\n }\n</style>\n```\n\n# 碎碎念\n\n虽然这个解决方法看似很简单,但其中包含着我无数的错误尝试。一开始的思路是想要设定li的宽度为card-item宽度的80%,但是由于不能越级上访(?),只能将其设置为其直接父元素宽度的80%,这样就不对,每个标题都被省略,变得很短。\n\n然后GPT让我用javascript来弄这个宽度,但我调试了很久也不行,不知道是哪里出了问题。\n\n最后只好用蠢办法,在不同的情况下设定不同的绝对宽度。","tags":["博客"],"categories":["折腾"]},{"title":"最近听了啥:《Thelonious Monk 1962-1968》","url":"/2024/05/14/最近听了啥:《Thelonious-Monk-1962-1968》/","content":"\n好久没更博客了,因为实在不知道要写什么内容。写随笔吧,最近又没发生什么。写购物分享吧,最近买的都是衣服和吃的,未免有些太无聊了。刚好今天在精神病院旁边的福声唱片店买了三张CD,想着不如分享一下这个吧。\n\n我的乐理知识非常贫乏,也很难写出漂亮的话,所以从来没写过乐评。这篇博文也不是一篇乐评,只是想分享一下淘到好东西以及听到好音乐的快乐(?)。\n\n# 福声唱片\n\n福声唱片是一家很有名的店,我早有耳闻。一开始不知道是从什么地方听说的,后来友人mj告诉我,我才发现我跟他一起去逛过。但当时什么也没买,之后就忘记了这回事。上个月去精神病院时重新发现了它,但没进去。今天去得比较早,在旁边的豆仔喝了咖啡之后时间仍然很早,就想去看一下吧。老板是个中年男子,店员是一个中年女子和一个年轻女孩,不知道他们是什么关系,难道是一家人?\n\n爵士CD放得很高,老板给我搬了个板凳,我踩上去,在架子上翻找。中年女子走过来,说吓了一跳,以为这姑娘有这么高呢。我(153cm)尴尬笑笑。\n\n我一边翻CD一边在Apple Music上搜,因为不想买网上能听到的(没钱)。老板和店员都表示理解。年轻女孩问我,你平常听CD还是黑胶,我说我宿舍太小了,没地方放黑胶机。她也深表理解。\n\n最后挑了三张网上找不到的,走到前台准备结账。突然年轻女孩叫我,说他们这还有一箱,可以让我看看。我一看全是古典乐,一头雾水,结果原来是她搞错了,以为这箱也是爵士乐。\n\n这时候老板走过来,问我:挑了这么久,都没有入你的眼的?我大为局促,连忙说已经挑了几张,放在前台了。老板才表示满意。走之前加了老板微信,他们那居然可以帮我找碟,令我回忆起为了找碟给关注的爵士乐博主发私信,结果博主不回的尴尬往事(结果第二天突然有人在YouTube上传了整张专辑,我百思不得其解,有这么巧的事吗?)。\n\n# Thelonious Monk 1962-1968\n\n<img width=\"600\" alt=\"专辑封面\" src=\"https://github.com/greendolphindance/picx-images-hosting/assets/87912044/370fb473-fc83-458a-8edc-146835b12bd8\">\n\n顾名思义,这张专辑是一个合辑,收录了Monk在1962-1968年的代表作。\n\n比波普乐手演奏抒情性较强的曲目总是有别样的风味,Monk也不例外。这张专辑的第1和第4首,《'Round Midnight》和《Ruby, My Dear》,本身就是我非常喜欢的曲目,在Monk的演绎之下则格外动人。\n\n我一直以为《'Round Midnight》是Miles Davis写的!因为他的演奏太令人印象深刻了。查阅Gioia的《爵士乐标准曲曲库导读》,发现在Davis完成他那令人惊叹的演奏之后,Monk和他大吵一架,指责前者没有正确演奏该曲。但与他所说相反,这场演出让观众都疯了。很好笑!\n\n友人zm曾经跟我说过,Monk弹琴有一种幽默感。当时我对他还不太感冒,所以没有参透其中的深意。到了现在,我已经非常喜欢Monk,再回想起这句话,就大概能知道zm是什么意思了。Monk经常弹一些貌似很蠢的音符或者和弦,非常好笑,但听习惯了就会很上头。这种手法的代表作是第2首,《Well You Needn't》,这也是我最喜欢的Monk曲目之一。专辑的第5首《Straight,No Chaser》、第6首《Blue Monk》和第7首《Rhythm-A-Ning》也很好笑,我听着听着就忍不住笑出声。这是听Monk时常有的体验。\n\n至于我最喜欢的Monk,则是专辑的第3首,《Bemsha Swing》。只要你听一下该曲,就会知道我为什么喜欢它。非常Monk。\n\n当我尝试学习爵士钢琴时,我第一次上手的曲目就是《Blue Monk》。但是无论怎么弹,都弹不出Monk那种傻乎乎的劲。现在由于时间不够且宿舍太小,我已经把我的电钢琴卖掉了。不知道什么时候才会继续弹琴,可能有了工作,租了更大的房子之后?但到时候会不会更忙?不好说。\n\n第7首《Rhythm-A-Ning》、第9首《Misterioso》和第10首《Epistrophy》竟然是我以前没有听过的曲子。看来我对Monk爱得还不够深!\n\n该专辑共有10首曲子。剩下尚未提及的最后一首,是第8首,《Monk's Dream》。我其实非常喜欢这首,但总是记不住它的旋律。上次zm演出(他是一位钢琴家),我想让他弹这首,他问我怎么弹,我直接愣住,因为它的旋律我一个音都想不起来!其实我听很多爵士乐都是这样,你告诉我曲名,我很多情况下都想不起它的旋律;你给我它的旋律,我也不一定能记得它是哪首歌。我只能记得“我听过这首”,并且说不定能够回忆起一些听它时的感受。可见我不是一个对音乐很……敏感?的人(能这么说吗?)。友人lsm也有同感,说爵士歌曲的标题就像词牌名,很多时候跟内容没什么关系。我完全同意,即便有些例外:《If I Were A Bell》(开头有经典下课铃声)、《Take Five》(五拍子),等等。\n\n# 结语\n\n写完了发现全文就是一篇絮絮叨叨的流水账……也许我一开始就不该有写这种主题的文章的想法。但写都写了。\n\n但是真的很推荐大家去听Monk!需要适应一阵,但是适应好了之后就再也离不开他了。","tags":["音乐"],"categories":["书影音"]},{"title":"接崔见闻","url":"/2024/04/23/接崔见闻/","content":"\n最近都没有出现,一是分手了,有些破事需要整理,二就是帮我导师接待了一位来华子教课的外国教授。教授是个八十多岁的老头,没头发但有很大一把胡子,步履蹒跚但目光炯炯,感觉很有智慧。我们一般叫他崔,因为他姓里有个“Tra”,现在的译法是“特拉”,原来译成“崔”,我们感觉“崔”比较简洁,就这么叫他了。\n\n其实五年前我就见过崔,当时他来华子访问。当时我带他和他妻子从甲所走到新斋,有两条平行的路,一条大马路,一条那种林荫小道,导航给我导了小道,我就往上面冲。崔妻说我们怎么不走上面呢?上次走的是上面。我才发现他们根本不需要我带路,我是这里唯一不认路的。\n\n跑题了,这篇文章其实是想记录一下这次接待崔的经历。有非常多需要吐槽的事情。\n\n# 机场接崔\n\n第一个任务当然是去机场接他。这件事情的困难主要在于无法联系到他,他没有中国电话卡,也貌似不会连wifi的样子,所以只能站在出口举一个写着“Prof. Cxxx Txxx”的牌子,然后盯着人出来的地方,不放过任何一个白胡子老头。\n\n我在这件事情上犯的错误是偷懒没有把牌子打印成一张纸,而是用iPad做了一页PPT然后举着。我导本来叫我打印一张纸,我还觉得他不懂科技的便利,事实证明问题还是在我。我举了一个多小时的iPad,差点没给我累死,而且如果用纸打印,可以带一点胶布,把纸贴在出口旁边的玻璃外侧,然后人站在旁边,这样就可以放心玩手机(吗)。\n\n但是我有做得很好的非常得意的一点,就是带了两瓶水!虽然在机场崔没喝,但是跟我导汇合之后给了他俩一人一瓶,当然我导那瓶他最后也给崔了。这让我感觉自己很专业,是国际级的领导助理(其实也不是啦)。\n\n说回机场的事。旁边有个大哥也在接人,但他比我聪明,举的是一张纸。飞机降落一个小时后,我们还在那等着,结果国际航班出口里面出来的都是亚裔,貌似是一班新加坡来的飞机,这个现象持续了很久。大哥终于站不住了,问我接的是哪班飞机,我告诉他,结果发现我们俩接的是同一班。我跟大哥说我无法联系我接的人,大哥说他也是,于是我们惺惺相惜了起来,开始聊闲天。又聊了快半个小时,终于发现了白胡子老头,我尖声大叫,用酸痛的双臂挥舞iPad,老头终于回头看我了,然后走来。我说我们先出去吧,然后率先往前走,他非常奇怪,问我旁边这个人不一起吗?我只好解释他是路人。走之前祝福了大哥早点接到该接的人。\n\n然后就是去打车,我为了不迷路,提前去看了打车的地方,所以这部分很顺利。回程路上崔给我讲了好多广东话,事后才知道他第一任妻子是广东人。\n\n# 去崔公寓\n\n在崔公寓所在的小区门口下车,我导站在马路对面挥手。看到他我终于松了一口气,这种社交实在太高强度了。之后基本上都是导在跟他说怎么刷门禁、按密码锁、介绍房间设施等等,我就在旁边游移,插空递了那两瓶水给他们。然后来了一个公寓的管理员女士,给崔咔咔拍了张照,我才知道外国人来是要给警察局报备的。管理员女士会说一点英文,再加上同学跟我说另一位外籍教授,赫,也要住这个小区,我就发现这个小区还是蛮国际化的。\n\n但是如此国际化的公寓里,微波炉上居然没有英文说明。空调遥控器也全是中文。我看了忧心忡忡。好像我跟崔说了一声看不懂可以找我,又好像没说,我不记得了。\n\n弄了一通去吃晚饭。旁边有一个食堂,但是只开放给学校家属,居然学生老师的卡都不能刷。好在二楼有一个小咖啡厅可以吃饭。崔是半个素食主义者,不吃哺乳动物和禽类。换句话说就是只能吃鱼虾海鲜这类的。结果偌大一个菜单,只有三个饭他能吃。点了老半天,终于决定吃一个沙拉碗,但是最后也没吃完(虽然他说味道不错)。\n\n吃完导说要和崔去旁边超市买点生活用品,我要回去搞心理咨询,赶紧先溜了。明天还要带他吃午饭、办电话卡。导连声道谢,我怪不好意思的。\n\n这天的第二个错误是穿了一条裙子,不太迈得开腿的那种。导致我无法骑车回去,走了半个小时,不过也还好。\n\n# 办电话卡\n\n第二天起了个大早去找崔,敲了半天门似乎没听见,给他发Skype消息也没看,想直接拿门禁卡刷进去,结果他把门反锁了。最后他不知怎么发现了我,开门放我进去了。\n\n我前一天晚上给了他三个选项:(1)还是去那个咖啡厅;(2)点外卖;(3)去营业厅附近吃。他毫不犹豫排除了1,说23都行,来了再商量。我于是比约定的时间早了一些过去,还提前在大众点评看了营业厅附近的餐厅,做足了功课,问他要不要吃蒸汽海鲜,他说要吃。结果发现蒸汽海鲜是投放的广告,实际上离营业厅有4.6公里……\n\n最后去吃了鲅鱼饺子,但没点鲅鱼。点的是皮皮虾蒸饺和麻辣小龙虾饺子,还有两个粥。前台摆了一大堆罐装饮料,他立刻认出是啤酒(但上面根本没用英文写),说要喝,我说你选一个吧,这些都差不多。他直接拿了罐大乌苏,问有没有cold的。我说这就是cold的呀,但应该有iced的。他说不要iced的,就要cold的,我这个不是cold的。我不明其意。结果他直接从冷柜里拿了一瓶,说这是cold的。我才知道cold和iced是有区别的!前者没有可见冰,而后者有。\n\n饺子上来了,我吃了一口,立刻发现有猪肉,于是慌了手脚。崔也咬了一口,我强作镇定,结果他啧啧称赞,好像并没有发现里面有猪肉。我决定永远保守这个秘密……\n\n吃完饭就去了营业厅。我打电话问过很多家营业厅,发现步行距离以内的都无法用护照办理电话卡。华子里面有一家,地图APP上没有电话,我就提前去踩了下点,结果发现周末不开门,只好作罢。当天去的那家稍微远点,是打车去的。店面很小,大众点评上很多差评都是说找不到。我跟着人家的攻略,绕到建筑的北边,顺利找到。\n\n办业务的人没几个,但还是排了一会队。崔可能走累了,没有主动挑起话题。我就指给他看旁边的智能家居展示墙,并表明我的观点,我认为智能家居就是傻b(不是原话)。过了一会又没话聊了,我就指着另一边的积分抽奖台,说这是lottery,他说能抽中多少钱?我说能抽洗衣液。我还忘记洗衣液英语怎么说了,一时尬住。\n\n终于到崔了,办得很顺利,无非就是看护照、填表(我填)、拍照、签名等等,具体顺序和步骤我已经忘了。反正弄了一会,卡就好了,装到手机里充好话费就能上网。多亏导跟我说有19块的套餐,业务员给我推荐的都是六七十的,我说我要19的,她问你是以前办过吗?这么熟。我嘿嘿一笑。\n\n垫了228块。事后导说估计不能报销,虽然228最终也不是我出,但是怎么能这样啊?办个电话卡也不给报销?我去档案馆打工的时候老师叫我贴发票,贴的可都是话费的发票啊!\n\n回家纠结晚上怎么吃。最后想来想去,点了安妮外卖。崔晚饭好像吃不下,就点了一个素的前菜,是芝士焗茄子和西红柿,再加上我强烈推荐的苹果派。本来我准备溜了,仔细一想,崔和骑手无法沟通,底下有门禁,我得等到外卖来。于是留下了。我说再给您弄点啤酒吧,他一想,没有开瓶器,于是又点了个超市外卖,买了开瓶器和啤酒。结果最后两个骑手都跟着人溜进来,送到门口了……我白等了!\n\n但是期间给他弄了个备用的VPN,然后用手机号开通了微信。尝试用外国信用卡绑定微信支付,但需要外国银行的验证,崔又忘记了他的什么contract number,后来找到了但是又有个什么弄不了,最后只好放弃。等办了银行卡再说吧。\n\n外卖到了,崔很善良地给我拿了筷子,我就吃了点茄子西红柿,很好吃!不愧是安妮。然后跟他一起享用了啤酒。之后我就跑了,之后也没问他觉得苹果派怎么样,希望他吃得开心。\n\n# 办校园卡\n\n今天崔要上课,我去接他,导建议我们先打车去李兆基楼办校园卡。我很担心来不及,因为崔有点老了,老忘事,还磨磨蹭蹭的。果然下了电梯我问他护照带没带,他说忘了,又上去拿。幸好问了!\n\n但还是赶上了,校园卡很快,没啥好讲的。还顺带开通了info账号,本意是想我们可以帮他充校园卡。不过后来发现最大的功能是让他能够登进去充值小程序,这样他自己也可以充。不会的话我们帮他用小程序充就好了,反正经常需要见面。\n\n# 办银行卡\n\n下完课去办银行卡。路过拾年咖啡,崔说他来过这里,这里不错。我就说要不要上去喝点啥,他说看我,我说看你。于是就上去了,坐在二楼露台上,点了一壶铁观音。好喝!\n\n但是好景不长,突然下起了小雨。我问导怎么办,他说他只有一把伞。我说人文楼保安有没有呢?他借到了。但同时我问了拾年咖啡,他们也有伞,押金50。我就借了两把。这样就不用导跑过来。\n\n但是现在已经五点了,银行六点半关门。天上打雷了,感觉雨可能变大。我又问导,导回我一句废话:要么你们赶快走,在雨变大之前到银行;要么再等等。我想了一下说走吧!于是撑伞走了。这是我这几天做的最错误的决定。\n\n走了大概一百米,雨突然变得巨大。我问崔要不要回去,他说都行。他总是说都行!感觉他有点害羞,有啥要求都不好意思提。这让我很难办。但是我狠下心,咬咬牙,说继续走吧。结果两个人的裤子都湿了。雨真的很大,所以不止裤脚湿了,整条裤子都湿了。晚上吃饭时我想问他有没有风湿之类的,但英语不会说,就问他淋了雨腿会不会痛。他说不会,我松了一口气。\n\n终于到了银行,开始办业务。好像是去了一个VIP房间,没有等待。但是整个过程非常漫长,对我和崔都是一种折磨。基本上是柜员在里面操作,我们两个干等,十分钟起步。偶尔让崔签个名,或者让我填表。填崔的纳税人识别号的时候,他写的那个5很像6,导致柜员搞错了,喊了他的前辈来看,看了很久决定让崔出示他的葡萄牙身份证,才发现5填成6了。由于这个错误,又是好一阵等。我和崔最后聊无可聊,只好大眼瞪小眼,沉默。\n\n终于办好了,但是接下来就是出去让另一个柜员(就是那个前辈)给绑定微信等。她首先点了微信,失败,然后说先激活一下京东。我说为什么激活京东啊,你们是不是有什么指标?她说没有,但是必须先激活一个,才能激活微信。好吧,什么鬼!于是弄了京东、支付宝和微信。期间崔设置和输入了无数次密码。我让崔把所有密码设成一样的,他采纳。\n\n办完之后银行刚好下班。所以我又有点不确定立刻从拾年咖啡出发的决定是否正确。感觉是刚刚好赶上的程度。\n\n之后导过来,一起去澜园吃饭,勉强赶上。我第一次去澜园,感觉还不错。吃饭时教了他充饭卡和微信支付的方法,但是第二天他就忘了。\n\n# 感想\n\n国内对外国人的不友好令人发指。办这些东西,要是没有中国人的帮助,一个外国人要怎么办啊!不过仔细一想,如果我在外国,不会当地的语言,我也不知道该怎么办。所以大概是平等的。但是英语是通用语言,国内的这些东西连个英文指示都没有,这说不过去吧。而且华子也没有提供任何指导或帮助。我愤愤不平。\n\n但是今天,当我看到崔的工资时,我释然了(?)。\n\n跟老年人相处就像带小孩,需要反复教学,要求足够的耐心。但是比起小孩,我更喜欢跟老年人待在一起,因为他们至少智识是成熟的,只是缺乏行动力。崔是个很和善且很有智慧的人。所以帮他办事我非常乐意,况且我从中也学到了很多。我不是个很细致的人,并且经常判断失误,感觉很不好意思。但经此一役,我成长了!","categories":["随笔"]},{"title":"购物分享(7)","url":"/2024/04/02/购物分享(7)/","content":"\n好久不见!最近又买了不少东西。我说的不少指的是:除了衣服之外还有不少。衣服啥的就不写了,想写一些更有意思的东西。\n\n# 泡泡骚\n\n<img width=\"600\" alt=\"泡泡骚订单1\" src=\"https://greendolphindance.github.io/picx-images-hosting/7211712040451_.pic.32hqj8v0yd.webp\">\n\n\n<img width=\"400\" alt=\"泡泡骚订单2\" src=\"https://greendolphindance.github.io/picx-images-hosting/7221712040452_.pic.4jnvkzzb77.webp\">\n\n---\n\n是的,我又买了。泡泡骚最近出了“陶之道”系列,有手机壳和支架。我觉得手机壳好像没太必要,毕竟我这个手机壳搭配支架好像也不错的样子。但是支架我觉得挺好看的,就买了。\n\n<img width=\"400\" alt=\"陶之道1\" src=\"https://greendolphindance.github.io/picx-images-hosting/7271712040457_.pic_hd.6f0gdmch1o.webp\">\n\n<img width=\"400\" alt=\"陶之道2\" src=\"https://greendolphindance.github.io/picx-images-hosting/7261712040455_.pic_hd.9gwceudohq.webp\">\n\n手感类似液体硅胶,是有点软的,很舒服。支架表面的沟壑也挺好看的。当然你要问我值不值两百块,那当然不值,但是买东西不就是买个开心嘛!\n\n收到后发现箱子里有一张卡片,上面写着扫码进入小程序送券等等,我就扫了,送了一张5元券。于是又下单一个。下单完发现又送了一张10元券,于是下单了第三个……\n\n陶之道是磁吸支架,其余两个是粘贴的。不过泡泡骚的头都是可以拧下来的,我就拧下来装到我本来那个透明的磁吸底座上了。\n\n<img width=\"600\" alt=\"其余两个泡泡骚\" src=\"https://greendolphindance.github.io/picx-images-hosting/7181712040447_.pic_hd.8dwn3yhlvr.webp\">\n\n其中不推荐这个唱片形状的,虽然我现在在用。因为它是那个“转个不停系列”里的,也就是说你拨弄这个唱片,它会转个不停。而泡泡骚换头需要用力按压再旋转。如果泡泡骚本身可以旋转,这个头就很难取下来。这也就是为什么我一直在用这个唱片泡泡骚,因为我取不下来了……当然看还是好看的。\n\n本来想在拼多多上买几个通用底座的,但是我明明问了卖家兼不兼容泡泡骚,它说可以兼容,但是买回来一看发现不兼容。再去问卖家,就开始推卸责任。于是我上12315投诉了……虽然只有十几块钱,但是气不过,它那个态度真是。不过我觉得投诉估计也不会有什么结果。\n\n我问了好多家,那一家推卸责任的是唯一说可以兼容泡泡骚的,且其实不兼容,所以我们有理由认为,整个拼多多没有可以兼容泡泡骚头的底座。闲鱼有,但是有点贵,我还在观望(可是你都已经买了昂贵泡泡骚了)。\n\n# CD机、MD机、CD、MD\n\n<img width=\"400\" alt=\"CD机、MD机、MD\" src=\"https://greendolphindance.github.io/picx-images-hosting/7241712040453_.pic.1e8dm2p1d3.webp\">\n\n<img width=\"400\" alt=\"CD\" src=\"https://greendolphindance.github.io/picx-images-hosting/7231712040453_.pic.39kyep1ati.webp\">\n\n---\n\n最近清理豆瓣想听,发现有一些专辑全网找不到资源。但是淘宝或者闲鱼有CD/MD可买。于是需要CD机和MD机。我做了一些功课,最终选择了:最好看的。\n\n## CD机和CD\n\n<img width=\"400\" alt=\"CD机\" src=\"https://greendolphindance.github.io/picx-images-hosting/7191712040449_.pic_hd.5xaep1tpmk.webp\">\n\n关于CD机,本来是想买那种淘宝有售的全新CD机,带蓝牙功能可以连音响的那种。但是发朋友圈问大家的意见,有朋友说那种音质都很差,不如闲鱼收一个随身听。于是我就去收了一个。型号没有太研究明白,总之是买了一个便宜又看得过去的。是个贩子卖的,配件齐全。成色感觉不算很好的,划痕比较多,但也还过得去。\n\nCD买了Jon Cleary的《Jon Cleary And The Absolute Monster Gentlemen》和伊藤君子&小曾根真的《KIMIKO》。Cleary的那张很不错,5星好评。不过伊藤那张,我不太适应她的声线,一开始没听出什么味来。听到后半张的时候才开始上头。我不常听人声爵士,仅有的比较喜欢的基本都是那种声音很浑厚的,伊藤这个有点太平了。给了4星。\n\n## MD机和MD\n\n<img width=\"600\" alt=\"MD机\" src=\"https://greendolphindance.github.io/picx-images-hosting/7201712040450_.pic_hd.1lblhiajey.webp\">\n\n这款MD机有很多颜色,选来选去选了蓝色的,可爱死了。但是这个成色有点战损,就算我开Dazz滤镜拍,都可以看出有很多划痕啥的。但这是我看到最便宜的!\n\nMD买了古尔达和Joe Zawinul的《Music for Two Pianos》,这张我标想听三年了,一直没有找到。最后在闲鱼搜了一下居然有人卖,虽然不是原版。听了一下,非常好,5星。\n\n这个MD机,我拿到手发现盖子只能打开一点点,以为出了什么问题。拿到MD盘才发现本来就是这样设计的。这个MD,我本来以为和CD一样就是一张光碟,结果发现它是一个长方形的有些厚度的盘。我一开始不知道怎么插进去,试了几次,发现要侧着插进去。我这辈子第一次看到并使用这个玩意,问了92年的友人mj,他说他也没用过,这个东西到底是什么年代的!\n\n# 攀岩鞋\n\n<img width=\"600\" alt=\"攀岩鞋订单\" src=\"https://greendolphindance.github.io/picx-images-hosting/7251712040454_.pic.3rb03am8os.webp\">\n\n我又买了。之前的鞋是La Sportiva Futura女款,窄楦,穿得痛死了,基本上爬两下就要脱下来休息。而且因为太痛,有的小点不敢踩,反而影响了表现。\n\n先买了一双Butora Spider窄楦的36码,快递到之前去768试了一下他们新进的So iLL的粉色鞋,非常非常好看,也很合适,但是要1199,总有点粉红税的感觉。教练看了我的脚说我脚宽,不适合窄楦的鞋,我心里咯噔一下。Butora到手发现果然穿不进,但不(完全)是因为窄楦,而是鞋太短了。回头看下我在美国买的Butora,折算过来38码,好吧!退了回去。\n\n然后在闲鱼刷到了这双据说只穿过一次的37.5码宽楦Spider,卖家说穿得太痛了。问了卖家说她运动鞋穿36-37,而我穿35-36,感觉挺合适,就盲买了。到手一穿刚好!幸好这个鞋合适,不然我肯定会去买那双1199的粉红税。当然粉红税也是好鞋,整个鞋很软,是我喜欢的那种硬度。Butora这个稍微有点硬,不过也能穿。\n\n但我跟768教练说,36码的鞋我穿不下就来买1199,但最后还是闲鱼卖了37.5这双,感觉食言了,有点不太好。\n\n现在的问题就是我之前那双破Futura要怎么处理,暂且是以便宜的价格挂闲鱼了,不过谁会要我这臭鞋?倒也不一定,我上一双臭鞋就是闲鱼卖出去了。","tags":["工具","运动","音乐"],"categories":["购物"]},{"title":"我的文身","url":"/2024/03/18/我的文身/","content":"\n经常听到有人说文身要慎重,要慎重选择图案,因为它会跟着你一辈子云云。我其实不太赞同,因为你在文图案的时候没法保证这是你这一辈子都会喜欢的图案,如果慎重选择是基于这个理由,那么由于人类是生活在仅仅此时此刻的存在者,文身这件事情本身就不成立。\n\n比起“不要太轻视对图案的选择”,我更愿意说“不要太重视你的身体”。你的身体是什么碰不得的东西呢?你从磕碰、挤压青春痘而得来的疤痕、你从遗传得来的肤色、体毛,这些通常情况下都会跟随你一辈子(如果你说可以做点阵激光、脱毛等等,我则会说文身也可以洗),那么一个或大或小的图案为什么不能附着在你的身体上呢?\n\n我说这些当然不是在说文什么都可以。非主流语录、(当时)对象的姓名、天眼、画工有巨大瑕疵的花臂或满背,这些当然最好都不要出现在任何人的身上。但这是基于我的角度来说的。我的意思是,如果你的审美决定了你会想文一个天眼在额头上,那么我会暗地里嘲笑你;但那可能已经是凭借你当时的审美能做出的最佳选择。而由于你具有这样的审美,就算你没有文天眼,我也很可能会出于一些其他的理由嘲笑你。所以你的天眼只是让我对你的嘲笑多出了一个较为明显的理由而已。被嘲笑的东西根本上还是你的智识和审美,与你文不文身好像没有太大的关系。唯一的关系在于,你的天眼使得你的智识和审美被暴露在大庭广众之下,使得人人可以通达。借由你的文身,就算是陌生人也会知道你是这样一个精神小伙(妹)。\n\n所有这些都指向一句废话:当且仅当你已经想好,你再去文身。之所以说这是一句废话,是因为如果一个人文了身,那我们都可以在某种意义上说ta已经想好。我的观点其实也很简单:你文身之后,要么你之后不会后悔,要么你会后悔。如果你不后悔,那很好,你该文身。如果你后悔,那我觉得你不该文身,但也没必要后悔,which implies这没多大事。所以我其实就是想说不要把文身看作一件很大的事,不管文不文,不管文什么,都没多大事。你这副身体不是那么神圣碰不得的。\n\n基于这个理念,我现在拥有了四个文身。第一个(2021-5-30)在左手小臂内侧,第二个(2022-2-14)在后脖子,第三个(2023-4-5)在右手大臂外侧,第四个昨天刚文,在左手大臂内侧。\n\n# 第一个:蝴蝶与花与剑\n\n<img width=\"400\" alt=\"蝴蝶与花与剑\" src=\"https://github.com/greendolphindance/picx-images-hosting/raw/master/7061710747260_.pic_hd.1lbkw3pik1.webp\">\n\n价格:1200/h * 忘了(肯定没超过4h)\n\n---\n\n这其实算是JOJO的一个痛文身,因为剑与蝴蝶中轴对称、蝴蝶在剑下方的构图参考了六部中徐伦的文身:\n\n<img width=\"600\" alt=\"徐伦的文身\" src=\"https://github.com/greendolphindance/picx-images-hosting/raw/master/image.2vei2fbjjc.webp\">\n\n但我不想让人看出来这是个痛文身,而且当时要遮疤,需要剑的面积大一些,所以把蝴蝶的面积改小了,然后在剑周围加了很多花。这每朵花在设计的时候都是我亲手选出的有意义之花,记得有毛茛、向日葵、香槟玫瑰等等,但事到如今已经把它们的意义全部忘却了。\n\n文身师在设计的时候跟我说,为了构图,她没有把我手上的疤完全遮住,我说没关系。结果本来是遮疤的文身让这些疤痕更明显了!我回家见高中同学,大家看我的文身,一下就看到了旁边白色的疤痕,一个同学直接问这个白色的线也是文的吗?我只好告诉她是我自己划的,就这样暴露了我是精神病的事实。不过现在回想起来,这些疤痕不遮也罢,我就是精神病,创死全世界,没什么好遮遮掩掩的。\n\n剑柄下方最大的那只蝴蝶是非洲的什么蝶来着,据说是世界上最毒的蝴蝶。当然我单纯是因为它的花纹和扁扁的身材比例才选的,然后它其实雌雄是不同的花纹,记得雌蝶是比较浅吧,不太好遮疤,所以选了雄蝶的花纹。\n\n手腕处的蝴蝶是一开始设计时没有的,因为一开始手腕上没有疤。然后有一天我冲动割腕了……不过不是为了死,主要是想放一些血,感觉人会舒服一些。我记得我是在有鼎广场割的,特别黑,没有一个人,但是我坐的地方有一片灯光,刚好照到我前面的地上。然后这片光线下就全是我的血。之后的一个月我隔几天就来这个位置看看,发现血迹消散的速度比我想象中快很多,大概一个多月就基本上没有颜色了。被蚂蚁喝掉了(?)。\n\n这个蝴蝶我一开始不是很满意,所以补色的时候让文身师改了一下:\n\n<img width=\"400\" alt=\"修改后的蝴蝶\" src=\"https://github.com/greendolphindance/picx-images-hosting/raw/master/7071710747261_.pic_hd.41xtb1femo.webp\">\n\n文身师很有美德,说我这个文身花的时间比她预估的久(意思是价格比预估的贵),让她感到愧疚,所以让我来补色的时候随便添加修改。我记得原来的蝴蝶是有现实中的参考的,但是改之后的没有,就是给原来的蝴蝶填上黑色然后加了凤尾。我在文这个图案的时候,一开始非常注重现实参考,文身师建议我给某种花换一个颜色,我都以现实中没有这种颜色的这种花为由拒绝了。但到了修改这只蝴蝶的时候,我突然一下想开了,觉得与现实稍有出入的图案未必就不能文。可以说是一种思想上的进步。\n\n修改后的蝴蝶的图是我今天拍的,可以看出比三年前模糊了很多。这是无法避免的,所以我的文身都是那种有着清晰边框的。我尽量不去文那种水彩、水墨、写实之类的风格,因为感觉晕开了之后会丑。\n\n# 第二个:后脖子线条蝴蝶\n\n<img width=\"400\" alt=\"后脖子线条蝴蝶\" src=\"https://greendolphindance.github.io/picx-images-hosting/7081710747263_.pic_hd.9dcpvrelul.webp\">\n\n价格:0\n\n---\n\n文这个的起因是我表妹抽中了大众点评上的免费试,但自己不想文,就问我去不去。我想着已经有一个了,也不多一个,就去吧。\n\n本来想在脖子后面文一个条形码,结果文身师连连摆手,说你以后会后悔的(不过我到现在还是想文一个条形码)。我想了一想那就再来个蝴蝶吧。\n\n然后就在文身师电脑里的手稿里翻找,找到一个还ok的,就文上去了,用时大概一个小时吧。倒也没什么寓意,就是随便一文,所以没什么好讲的。\n\n# 第三个:穆夏包臂\n\n<img width=\"400\" alt=\"穆夏包臂\" src=\"https://greendolphindance.github.io/picx-images-hosting/7091710747265_.pic_hd.2oba70uwd4.webp\">\n\n价格:5500(1200/h * 5 - 500)\n\n---\n\n一直关注着文第一个图的文身师的微博,然后她每年都搞抽奖。试着转发了一下,抽中500块代金券!\n\n然后就一直在想文什么图。本来她当时在推广她弄的AI花卉系列(就是用AI画花,再人工修改),还有一个艺术家(名字忘了)画的花,最近公版了,都挺好看。但后来我的审美变了,想文一个大图。然后有一天抽烟的时候突然想起穆夏有一个给烟草公司画的广告画,是一个抽烟的美女,我就想要不文这个吧!\n\n发给文身师她欣然答应。去了之后打印了几张比大小,我又陷入纠结。感觉这个图做成最大的包臂一圈比较好看,但那就贵了。思来想去还是决定做最大的。没想到文身师长叹一口气,说我又想把你这钱挣了,又觉得累。我说那你做不做嘛。文身师(找来一个护腰):做!\n\n就做了。她说如果超过5小时,给我按5小时算,结果真真就正好5小时(没占到便宜,不爽)。\n\n这个图真实地体现了文身师的审美有多重要。这个图原图是这样子的:\n\n<img width=\"400\" alt=\"穆夏原图\" src=\"https://greendolphindance.github.io/picx-images-hosting/image.45fue8xu3.webp\">\n\n可以看到我的文身师:(1)缩短了手臂与身体的距离;(2)减短了头发;(3)在头发上加了耳环(文身中部蒂凡尼蓝色的圆形物体);(4)加了颜色鲜艳的衣服;(5)加了花。其中,(1)(2)是为了让构图更紧凑;(3)(4)是为了避免画面太空,因为头发的大面积黄色和皮肤的大面积肉色(即没上颜色的部分)会显得比较单调;(5)是为了让画面整体大致呈圆形。这些细节反正我是注意不到。\n\n不过也有不太满意的部分。我这张图可能看不太出来,不过不同于原图的灰白色,我文身上女性手中的烟头冒出来的烟是黑灰色的。有点不太写实,但是可以理解,毕竟白色不是那么好上色。然后一开始我让文身师不要把烟去掉,文身师理解错了,以为是那个冒出来的烟,但我说的其实是她手里拿的那根烟。结果到最后的时候我才发现不对,就让文身师加一根烟,结果只好加了一根雪茄颜色的烟。不过这都是小问题,整体我还是蛮喜欢的。\n\n# 第四个:幸运与勇气\n\n<img width=\"400\" alt=\"幸运与勇气\" src=\"https://greendolphindance.github.io/picx-images-hosting/7121710760372_.pic.8z6a531xp4.webp\">\n\n价格:1020(120 * (3.5cm + 5cm))\n\n---\n\n这次这个是真正意义上的痛文身,文的是JOJO第一部里,一个反派临死前送给主角的剑上的文字。这把剑本来叫幸运(Luck)之剑,但反派送给主角时给剑重新命了名,在“Luck”前加了一个“P”,变成了勇气(Pluck)之剑。\n\n<img width=\"400\" alt=\"JOJO原作相关剧情\" src=\"https://greendolphindance.github.io/picx-images-hosting/7101710749915_.pic.54xilyz0h8.webp\">\n\n我觉得这个寓意很好,图也挺好看,于是一直想文,但没找到时机。\n\n然后我就创造了时机。上周我的想法又冒出来时,我的行动力突然暴涨,直接去小红书搜了北京的JOJO文身,找到了一个文身师,然后直接预约了。\n\n加上微信之后发现这个文身师也是女性。至此,我的所有三个文身师都是女文身师。\n\n我让文身师给我把这个歪着的图弄直,再辅以必要的修改。尽量原汁原味地文上去。“P”是血字,“LUCK”是那种镌刻的效果。一开始想要的镌刻效果是这样的:\n\n<img width=\"400\" alt=\"一开始想要的镌刻效果\" src=\"https://greendolphindance.github.io/picx-images-hosting/677891710741714_.pic.1aor30k35l.webp\">\n\n但是发到群里,大家都说很恐怖,于是作罢了。到了店里跟文身师商量,她说可以在字的右下方做一点阴影,再用白色强调亮部。最后做出来效果确实不错。但是现在想想,感觉做一开始想要的那种效果更精致一些,不过现在后悔也无济于事了。\n\n这个文身用时仅45分钟左右,是按面积收费的,算下来有点亏(本来可以做更复杂的图),不过毕竟这是我自己选的图,也没有办法。总体还是挺满意的。\n\n# 结语\n\n以上就是我全部的文身,不排除以后会有更多。感觉我这几年审美都没怎么变,因为文的图风格都类似,而且无一让我后悔。","tags":["美妆"],"categories":["随笔"]},{"title":"友链页面美化","url":"/2024/03/07/友链页面美化/","content":"\n好久没折腾了,都有些生疏了。这次想美化一下友链页面。原来就是一些带链接的文字堆在一起,现在想要改成每人一个方框,方框里面是博主的名字,鼠标悬停在方框上会显示博客的名字,点击博主名字在新窗口跳转到相应博客。\n\n其实还蛮简单的。分别需要修改/links/index.md、创建link.ejs和link.styl。\n\n# index.md\n\n修改如下:\n\n```markdown\n---\ntitle: \"- 友情链接 -\"\nbrowser_title: \"友链\"\ndate: 2023-10-07 12:09:32\ntype: \"links\"\nlayout: \"link\"\nlinks:\n - name: \"Hanlin\"\n url: \"http://r64.i11r.com\"\n blogName: \"蜈ィ縺ヲ縺ゅ↑縺溘・謇轤コ縺ァ縺吶・\"\n - name: \"Ayu\"\n url: \"https://ayu.land\"\n blogName: \"~ — Ayu\"\n - name: \"CosmoOri\"\n url: \"https://dkn16.github.io\"\n blogName: \"Kangning Diao\"\n - name: \"Mokou\"\n url: \"https://www.cnblogs.com/mokou/\"\n blogName: \"莫多心情小站\"\n - name: \"Origakid\"\n url: \"https://origakid.top\"\n blogName: \"抽象艺术大巴扎\"\n - name: \"茨月\"\n url: \"https://blog.zcy.moe\"\n blogName: \"Chris Zhang\"\n---\n```\n\n这里的要点:layout要改成link,和之后要创建的link.ejs的名字匹配。然后在links里面添加数据,注意缩进要正确。\n\n# link.ejs\n\n代码如下:\n\n```html\n<div class=\"container\">\n <div class=\"post-wrap\">\n <h1 class=\"post-title\">\n <%= page.title %>\n </h1>\n <% for (var i=0; i < page.links.length; i++) { %>\n <div class=\"friend-link\">\n <a href=\"<%= page.links[i].url %>\" target=\"_blank\" title=\"<%= page.links[i].blogName %>\">\n <div class=\"friend-name\">\n <%= page.links[i].name %>\n </div>\n </a>\n </div>\n <% } %>\n </div>\n</div>\n```\n\n很简单。在index.md里的links实际上创造了一个数组,这里遍历了数组里的全部元素,让它们一个个显示出来。“target=\"_blank\"”的意思是在新标签页打开链接(而不是当前页面跳转)。title之后的是鼠标悬停时在旁边显示出来的东西。\n\n# link.styl\n\n代码如下:\n\n```css\n.friend-link {\n margin-bottom: 10px;\n display: inline-flex; /* 将默认显示方式更改为inline-flex */\n max-width: 100%; /* 最大宽度为100%,以适应内容 */\n flex-wrap: wrap; /* 允许在需要时换行 */\n}\n\n.friend-name {\n padding: 5px 10px;\n border: 1px solid #ccc;\n border-radius: 5px;\n color: #777;\n text-decoration: none;\n transition: background-color 0.3s;\n margin-right: 10px; /* 添加友人之间的间距 */\n margin-bottom: 10px; /* 添加友人之间的间距 */\n}\n\n.friend-name:hover {\n background-color: #f0f0f0; \n}\n\n.friend-link a {\n text-decoration: none;\n}\n```\n\nfriend-link里的几项设定是为了让一行显示多个方框,并且自动换行。friend-name:hover是为了让鼠标悬停在方框上时,方框有一个变颜色的效果。\n\n这里有一个坑,好吧其实也不是这里的坑,但是和CSS有关。我在调试的时候发现无论博客是日间模式还是夜间模式,悬停时显示的title都是夜间模式的背景色。然后调试了很久也没有效果。最后我灵机一动,想它是不是并非根据博客的主题来的,而是根据浏览器/系统的主题来的。于是把系统切换成日间模式。果然!现在无论博客是什么主题,title的背景色都是日间模式的背景色了。所以这个东西好像是无法修改的……\n\n总之就是这样了,总体来讲还是比较简单的。\n\n# 2024-3-9更新:友链乱序排列\n原本友链是按照添加时间排序的,但是这样不利于后面的链接被点击(虽然本来也没几个……),所以想着改成随机排序,并且每次重新进入友链页面时,顺序都被打乱一遍。\n\n原以为比较复杂,结果GPT一句话就搞定了。修改link.ejs代码如下:\n\n```html\n<div class=\"container\">\n <div class=\"post-wrap\">\n <h1 class=\"post-title\">\n <%= page.title %>\n </h1>\n <% var shuffledLinks=page.links.sort(()=> Math.random() - 0.5); %>\n <% for (var i=0; i < shuffledLinks.length; i++) { %>\n <div class=\"friend-link\">\n <a href=\"<%= shuffledLinks[i].url %>\" target=\"_blank\" title=\"<%= shuffledLinks[i].blogName %>\">\n <div class=\"friend-name\">\n <%= shuffledLinks[i].name %>\n </div>\n </a>\n </div>\n <% } %>\n </div>\n</div>\n```\n\n……不行。刚进去的时候确实是乱序的,但是刷新之后没有反应。怀疑是缓存问题。调整了很久都没好,无奈只好让GPT换一种方式,让它每10分钟打乱一下顺序。GPT给的代码如下:\n\n```html\n<div class=\"container\">\n <div class=\"post-wrap\">\n <h1 class=\"post-title\">\n <%= page.title %>\n </h1>\n <div id=\"friend-links\">\n <% for (var i=0; i < page.links.length; i++) { %>\n <div class=\"friend-link\" id=\"friend<%= i %>\">\n <a href=\"<%= page.links[i].url %>\" target=\"_blank\" title=\"<%= page.links[i].blogName %>\">\n <div class=\"friend-name\">\n <%= page.links[i].name %>\n </div>\n </a>\n </div>\n <% } %>\n </div>\n </div>\n</div>\n\n<script>\n function shuffleLinks() {\n var friendLinks = document.getElementById('friend-links');\n var links = Array.from(friendLinks.children);\n links.sort(() => Math.random() - 0.5);\n for (var i = 0; i < links.length; i++) {\n friendLinks.appendChild(links[i]);\n }\n }\n\n // 初始页面加载时打乱一次顺序\n shuffleLinks();\n\n // 每隔10分钟打乱一次顺序\n setInterval(function () {\n shuffleLinks();\n }, 600000); // 10分钟 = 600000毫秒\n</script>\n```\n\n结果,deploy之后,每刷新一次顺序都会被打乱了!误打误撞地成功了(?)。我感觉那个“每隔10分钟打乱一次顺序”后面的代码可以删掉,但我懒得试了,能跑就行。","tags":["博客"],"categories":["折腾"]},{"title":"搬家与《Unpacking》","url":"/2024/03/03/搬家与《Unpacking》/","content":"\n二月底整理好了新宿舍(意思是把东西从二十个左右的箱子里拿出来分别摆好);昨天玩了一个叫《Unpacking》的游戏,主题也是整理房间(意思也是把东西从箱子里拿出来摆好)。这两件事情有着令人惊异的相似性(废话)。\n\n《Unpacking》里的场景很像我搬家时所有设计都落空的情况。在旧宿舍给物品打包时,我是按照从不重要到重要的顺序收拾的,不重要的先收拾,重要的后收拾(因为收拾的过程中还在宿舍住了几天,需要用到某些东西)。最后一个箱子里放的是显示器、梳子镜子、水杯、当前在用的卫生纸等等。我按收拾的顺序给箱子标上编号,也就是数字越大的越后收拾,从而也越重要。我还把剪刀用胶布贴在了数字最大的箱子上。我的想法是,搬到新宿舍后,就按照数字从大到小的顺序拆箱子,这样能够保证重要的箱子内的物品被最先取出。最首要的当然就是拆上面贴有剪刀的箱子(刚好可以用这把剪刀来拆),这样即便没时间拆其他的箱子,第一天所必需的物品也齐全了。\n\n很美好的设想!但是实际上,志愿者帮我把箱子搬到新宿舍的时候,把数字的顺序搞乱了(没有责怪的意思,难免的)。我和男朋友赶到现场后,紧急变换方案,想着把所有的箱子搬到走廊去,找出上面有剪刀的箱子开始拆。结果!所有箱子上都没有剪刀……大概是搬运的时候遗失了。而我也不记得最后的箱子上的数字是多少。此外,走廊快被我们占满了,房间里还有好几个箱子堆叠。所以只好随便拿了一个箱子开始拆(借了室友的剪刀)。幸好一天就收拾完了,也幸好我那几天是住在男朋友那儿,否则后果不堪设想。\n\n《Unpacking》里的设定与之类似。你拿到的所有箱子都(当然)没有按照重要性排序,里面拿出的物品也并不按照某种顺序。游戏中主角会收拾几个房间,每个房间有一些箱子,装着这些房间所需要的东西。但是!主角收拾东西的时候有可能放错,比如把本该在厕所的牙刷放到客厅的箱子里去。这给游戏增加了一些写实性和难度。\n\n从这次搬家的经历可以得知,如果有人帮我把箱子搬到走廊,我收拾箱子的效率是一天二十个左右。而在我到宿舍之前,我的预计是一天六个左右。实在是太低估了自己。但也有可能是我挺擅长收纳的,毕竟我打通这个游戏只花了三小时,看了我一个好友的记录,她打了四个多小时呢。\n\n《Unpacking》的最大难点,也是它和现实脱节最严重的一点,就是将某样东西放在某处“有可能是错误的”。比如一个瑜伽垫,随意地放在地上是不对的,必须要放在床底;带框并且用玻璃装裱的挂画不能放在浴室;甚至锅铲不能放在厨房台面上。总之有一些奇奇怪怪的错误。但是现实的收纳是很少有“错误”一说的。也许把植物放在浇水不方便的高处算是一种错误,但是瑜伽垫的话,只要不挡路,放哪都行。我的收纳原则是常用的东西拿取要方便,如果我需要每天锻炼,那瑜伽垫应当放在我触手可及之处才行。\n\n还有一些不写实的点,比如做饼干的模具不能叠放等等。但瑕不掩瑜,这仍然是一款优秀的游戏。以我现在的集中力,没法长时间不间断地游玩同一个游戏;以我的耐力,又无法游玩整个流程过长的游戏。《Unpacking》就刚刚好,三小时的流程,刚好一口气玩完。全成就我就不想了,才不愿意再重新玩一遍已经玩过的游戏呢。\n\n","tags":["游戏"],"categories":["随笔"]},{"title":"购物分享(6):宿舍装修篇","url":"/2024/02/28/购物分享(6):宿舍装修篇/","content":"\n为了让新宿舍可以住人,我购置了很多收纳物件和家具等等。目前舒适度有一些了。来分享一下我买的东西吧!\n\n# 洞洞板\n\n<img width=\"400\" alt=\"洞洞板订单\" src=\"https://github.com/greendolphindance/picx-images-hosting/raw/master/6841709129278_.pic.4xu9zq11r8.webp\">\n\n这个桌面支架,因为我的桌子靠墙且无法移动,就让ta换成了那种立在桌面上的支架。由于我洞洞板的左上部分能够卡到柜子和墙的缝隙里去,整个洞洞板非常稳固。不过就算不能卡住,用四个支架撑住应该也还行,店家要我拍两份支架(图上只显示了一份),我以为拍两份才发两个,骂骂咧咧地拍了,结果到手一看有四个!不过我想稳妥一点,就把四个都安上了,没有退货。\n\n买洞洞板的要点,我觉得是:买宜家同款的。这样配件选择比较多,很多店都可以买到各种不同的配件。我的所有配件安好后如下图:\n\n<img width=\"400\" alt=\"洞洞板效果\" src=\"https://github.com/greendolphindance/picx-images-hosting/raw/master/6831709129277_.pic_hd.wialcd11y.webp\">\n\n下面来逐个说说各个配件。\n\n## 配件(1)\n\n<img width=\"400\" alt=\"配件1\" src=\"https://github.com/greendolphindance/picx-images-hosting/raw/master/6851709129279_.pic.77daj83vx2.webp\">\n\n这部分配件都是很普通的,几乎每家店都有。这一家是我找到的最便宜的。下面逐个介绍一下它们在我这里的用处。\n\n- 方盒:我放在最底下,用来放化妆刷。化妆的时候可以把方盒取下放在手边可以随时拿取的地方。\n- 多功能A:似乎是个盘子架。我用来放置之前在网易云花9.9还是19.9买的假黑胶装饰品(中间印的是Camel的专辑《Mirage》)。\n- 抹布毛巾架:挂卷纸。其实我觉得这个如果真的拿来挂抹布毛巾,反而不是很好用。因为它向外伸出的距离不是很大,挂抹布的话,抹布可能会碰到底下的东西。当然除非你把抹布架挂在最底下,但这样就要求你的板子上墙。\n- 5只小白钩:买来发现板子不够大,也没啥要挂的,用不上。退了。\n- 平板/手机架:用来收纳平板。手机我时常拿着,没有挂上去的必要。\n- B挂钩:收纳直板夹。其实这两个挂钩是可以左右转动的,有点危险,不过也没办法了。不去动它的话是不会掉的。\n- 抽纸置物篮:上面放一些杂物,底下放抽纸。旁边可以挂眼镜。\n- 衣帽钩:用不上,退了。\n\n## 配件(2)\n\n<img width=\"400\" alt=\"配件2\" src=\"https://github.com/greendolphindance/picx-images-hosting/raw/master/6861709129280_.pic.839ryorr8h.webp\">\n\n这部分配件在其他的店铺买不到,就算有替代品,也没这家店的好看。三样东西分别收纳吹风机、头戴式耳机和AirPods Pro。不推荐头戴式耳机的那个,因为配件挂上去之后,末端会往下坠,整个支架呈现一个斜度。耳机挂上去总感觉会掉(虽然其实没掉)。我记得其他店也有相同功能的配件,不过比这个大,想要买的可以权衡一下。\n\n# 键盘托架\n\n<img width=\"600\" alt=\"键盘托架订单\" src=\"https://github.com/greendolphindance/picx-images-hosting/raw/master/6871709129282_.pic.51dvxgv062.webp\">\n\n非常实用工具,使我桌面空空。以前买过一个木质的,质感一般。现在这个是金属的,就好很多了。安装方式如图所示(所以如果桌正面下方有个抽屉的话是不能装的)。把键盘放在上面,还有二十几厘米的空间可以利用。本来想放鼠标,但是这个是有磁力的,会把鼠标吸附住……也许还是该买木头的?最后用来放显示器灯的开关了,有微弱的磁力,刚好防止推太快导致开关滑落。\n\n# 衣柜隔板\n\n<img width=\"600\" alt=\"衣柜隔板订单\" src=\"https://github.com/greendolphindance/picx-images-hosting/raw/master/6881709129283_.pic.7i04ce8x0i.webp\">\n\n其实就是个比较便宜、质量比较差的床上桌,好处是可以自由调节宽度。我的化妆品实在太多,所以开辟了床尾的一部分,放了这个隔板来安放化妆品。买的32cm高,睡觉时不太容易碰到。\n\n承重方面,装上所有的化妆品是绰绰有余的。但是它说人坐上去也没问题,这一点我有所怀疑。\n\n# 理线盒\n\n<img width=\"600\" alt=\"理线盒订单\" src=\"https://github.com/greendolphindance/picx-images-hosting/raw/master/6891709129284_.pic.1ov633owxa.webp\">\n\n刚把挂钩粘上,准备等一天再把理线盒安上去,到时候再来写。这个理线盒最怕的就是粘不稳掉下来,这个得要时间来检验。\n\n(2024-2-29更新)靠,不好用。这个高度太短,底下那个挡板太宽,我的排插非常勉强才能放进去,而且放不正。胶暂时还没掉。\n\n(晚上再更新)啊啊啊啊掉了!这下一点推荐的理由都没有了。\n\n# 纸窗帘\n\n<img width=\"600\" alt=\"纸窗帘订单\" src=\"https://github.com/greendolphindance/picx-images-hosting/raw/master/6901709129285_.pic.9gwb2qp0vy.webp\">\n\n算是宜家类似款?就是一个纸(无纺布?)做的百叶帘,顶上是胶,可以粘在什么东西上面。我拿来挡一下床头。\n\n米黄色透光性应该不是很好,不能当窗帘,不知道更深色怎么样。不过我个人不怕光,有光也睡得着。倒是不透人。就只是一个维护隐私的小工具而已。\n\n# 浴室篮子\n\n<img width=\"600\" alt=\"浴室篮子订单\" src=\"https://github.com/greendolphindance/picx-images-hosting/raw/master/6911709129286_.pic.1zhzw9h8lq.webp\">\n\n狗子的浴室篮!可爱可爱可爱。不知道是不是正品,反正这个店说是有授权。\n\n还挺能装的,所有浴室需要的东西(洗发露、护发素、沐浴露、卸妆油,都是大瓶)都放进去了,还有一些空隙。\n\n相同功能的篮子网上肯定还有很多更便宜的,但是这个太可爱了所以推荐!\n\n# 桌下抽屉\n\n<img width=\"600\" alt=\"桌下抽屉订单\" src=\"https://github.com/greendolphindance/picx-images-hosting/raw/master/6921709129288_.pic.1zhzwaoo81.webp\">\n\n顾名思义,粘在桌子底下的抽屉。我拿来粘在开放式柜子的下方,放内裤袜子用。小贵,但我也懒得找更便宜的了。\n\n# 亚克力镜子\n\n<img width=\"600\" alt=\"镜子订单\" src=\"https://github.com/greendolphindance/picx-images-hosting/raw/master/6931709129290_.pic.4xu9zt2o9e.webp\">\n\n买这玩意是没办法的办法。本来想买一面挂门的玻璃镜子的,结果我宿舍这个门严丝合缝,用尺子试了一下,根本插不进去。落地镜又没地放。贴墙的玻璃镜子的话,掉下来又很危险。所以思前想后买了这个亚克力镜子。\n\n感想就是,能用,但远没有玻璃镜子好用。在镜子的边缘或者站在远处的时候,镜子里的人物就会变形。近距离下效果倒是还行。所以勉强用一下吧。\n\n# 椅垫和椅套\n\n<img width=\"600\" alt=\"椅垫订单\" src=\"https://github.com/greendolphindance/picx-images-hosting/raw/master/6951709129294_.pic.9nziy7yu20.webp\">\n\n<img width=\"600\" alt=\"椅套订单\" src=\"https://github.com/greendolphindance/picx-images-hosting/raw/master/6941709129291_.pic.9kfx0i5k0t.webp\">\n\n原来我的椅子用的是那种硬的、一体式的花瓣椅垫,不太舒服,而且如果想盘腿坐在椅子上的话,垫子就会移位。站在椅子上拿东西也会导致椅垫移位,甚至有点危险。所以想换一个既舒服又耐用,还不会移位的椅垫。\n\n上小红书搜寻一番,看到有人推荐这种连体椅套,说先垫上椅垫,再套上这个,椅垫就不会移位了。\n\n反正没几个钱,买!\n\n我的宿舍椅子算是比较大的,而且椅面是半径较大的圆角矩形,一开始担心这个椅垫太小或者形状不对。结果它弹力特别大,居然勉强可以全部包住。不过装了椅垫之后就包不住了,靠椅背的两侧椅面会露出来,有点丑,但也可以用,不会跑。\n\n移位的问题解决了,接下来就是寻找舒服耐用的椅垫材质。根据我的常识,普通的棉椅垫虽然看起来软乎乎,但过不了多久就会塌陷或者跑棉。之前买过某个高科技材料的椅垫,填充物是小塑料管,时间长了也被压瘪了,坐起来难受。思前想后,要么还是记忆棉吧!\n\n于是在刚才看到的小红书帖子里找到了博主所用的记忆棉椅垫和靠背的链接。但它居然!涨价10元!让我很不爽。一生气,就忘记货比三家了,于是直接买了。而现在既然东西已经到手,再比价也是徒增烦恼,索性算了。","tags":["家具"],"categories":["购物"]},{"title":"Mac半自动导出Safari书签至Chrome","url":"/2024/02/19/Mac半自动导出Safari书签至Chrome/","content":"\n# 缘由\n\n我在Mac中使用两个浏览器,Safari和Chrome。日常用Safari,需要使用网页检查器的时候用Chrome。但是有时候Safari不是很好使(比如看Angela Yu的网课的时候,总是卡死),就会换到Chrome。所以我对浏览器间的书签和密码同步有一定需求。经过搜索,我发现密码同步可以用一个叫“iCloud密码”的Chrome插件。但是书签同步并没有很好的方案。有一些第三方软件似乎可以做到,但是很多人说同步之后造成了书签大混乱,我就不太敢用。\n\n找来找去发现了[这个帖子](https://blog.csdn.net/lluuaanngg/article/details/136088824)。ta的脚本挺不错的,但是需要手动操作两步:保存Safari书签时点一下保存、导入到Chrome时选择文件并导入。有点麻烦。我就想能不能再自动一点。经过我的试验,后一步是无法自动的,所以决定着手优化前一步。\n\n# 导出Safari书签\n\n我希望将书签的html文件保存到默认目录,也就是“下载”文件夹。所以保存时并不需要修改文件路径。因此,这个事情的步骤大概是:打开Safari,点击文件-导出-书签,点击保存按钮。具体代码如下:\n\n```\n-- 启动Safari\ntell application \"Safari\"\n\tactivate\n\t--delay 2 -- 等待Safari启动,如果老电脑老版本启动过慢导致来不及自动化,请取消注释并调整延迟时间,下面chrome同理\nend tell\n\n-- 使用System Events模拟点击菜单项导出书签\ntell application \"System Events\"\n\ttell process \"Safari\"\n\t\tclick menu item \"书签…\" of menu \"导出\" of menu item \"导出\" of menu \"文件\" of menu bar item \"文件\" of menu bar 1\n\t\tdelay 1\n\t\t\n\t\t-- 模拟按下回车键,执行保存操作\n\t\tkeystroke return\n\tend tell\nend tell\n\n-- 等待保存书签文件\ndelay 3 -- 可以根据需要调整等待时间\n```\n\n# 删除书签文件\n\n然后就是导入Chrome了,前面已经说了,这部分没法自动化。再然后,我想要删除生成的html文件,于是又加了一步:\n\n```\n-- 弹出对话框,询问是否删除文件\nset userChoice to button returned of (display dialog \"是否删除已保存的书签文件?\" buttons {\"取消\", \"删除\"} default button \"删除\" with icon caution)\n\n-- 根据用户选择来删除文件\nif userChoice is \"删除\" then\n\tdo shell script \"rm -f /Users/{我的用户名}/Downloads/Safari浏览器书签.html\"\nend if\n```\n\n这个脚本的完整内容如下:\n\n```\n-- MacBook Pro 16-inch, 2019\n-- macOS Sonoma 14.2.1 (23C71)\n-- V1.0 魔改版\n-- 2024年2月19日\n-- 启动Safari\ntell application \"Safari\"\n\tactivate\n\t--delay 2 -- 等待Safari启动,如果老电脑老版本启动过慢导致来不及自动化,请取消注释并调整延迟时间,下面chrome同理\nend tell\n\n-- 使用System Events模拟点击菜单项导出书签\ntell application \"System Events\"\n\ttell process \"Safari\"\n\t\tclick menu item \"书签…\" of menu \"导出\" of menu item \"导出\" of menu \"文件\" of menu bar item \"文件\" of menu bar 1\n\t\tdelay 1\n\t\t\n\t\t-- 模拟按下回车键,执行保存操作\n\t\tkeystroke return\n\tend tell\nend tell\n\n-- 等待保存书签文件\ndelay 3 -- 可以根据需要调整等待时间\n\n-- 启动Chrome\ntell application \"Google Chrome\"\n\tactivate\nend tell\n\n-- 使用System Events模拟点击菜单项导入书签\ntell application \"System Events\"\n\ttell process \"Google Chrome\"\n\t\tclick menu item \"导入书签和设置…\" of menu 1 of menu bar item \"Chrome\" of menu bar 1\n\t\tdelay 2 -- 等待导入对话框出现\n\t\t-- 用户可能需要手动完成导入过程,因为AppleScript不能直接操作导入对话框\n\tend tell\nend tell\n\n-- 弹出对话框,询问是否删除文件\nset userChoice to button returned of (display dialog \"是否删除已保存的书签文件?\" buttons {\"取消\", \"删除\"} default button \"删除\" with icon caution)\n\n-- 根据用户选择来删除文件\nif userChoice is \"删除\" then\n\tdo shell script \"rm -f /Users/chumiaochen/Downloads/Safari浏览器书签.html\"\nend if\n```\n\n# 添加快捷键\n\n每次都要点开脚本文件执行,太麻烦了。所以设置了一个快捷键。方法是创建一个快捷指令,把脚本粘贴进去,然后在快捷指令的右边栏点击“添加键盘快捷键“,再按下你需要的快捷键即可。我设置的是Option+Command+S。\n\n其实我更希望弄一个类似于iPhone上“自动化”一样的东西,让它每周执行一次,但是我在Mac上没有找到自动化。\n\n# 缺点\n\n这个办法是没办法的办法,每次需要手动执行(虽然有快捷键),导入也需要手动操作。很烦!","tags":["工具"],"categories":["折腾"]},{"title":"制作hexo时间轴","url":"/2024/02/16/制作hexo时间轴/","content":"在[wang7peng](https://github.com/wang7peng)老师的建议下添加了一个时间轴(我命名为“动态”)页面,效果[如下](https://greendolphindance.com/timeline/),不知道和他想象中的效果是否相符。\n\n我计划在这个时间轴里记录如下三部分内容:blog_post、personal_status和blog_renovation。第一项用于记录文章发布,第二项用于记录一些个人动态或者心情啥的(类似于朋友圈),第三项用来记录给博客搞装修的情况。由于也想记录第二项和第三项,所以数据只好手动输入了。\n\n制作这个时间轴需要以下几个步骤:新建页面、准备数据、编写模板文件、设定样式。\n\n# 新建页面\n\n没什么好说的,就是新建一个名为“timeline”的页面,和添加其他自定义页面的方法一致。这边的教程以我的主题为例。首先在终端定位到博客目录下,运行:\n\n```\nhexo new page timeline\n```\n\n然后打开/source/timeline文件夹下的index.md文件,在FrontMatter里添加一行:\n\n```\nlayout: timeline\n```\n\nlayout后面的内容要与之后创建的模板文件的名称对应。\n\n然后在主题文件夹下的_config.yml里,相应的地方(我这是“nav:”下方)添加:\n\n```yaml\n动态: /timeline\n```\n\n其中“动态”是我设定的页面名称。\n\n# 准备数据\n\n这一步的目的是建立一个文档,里面存放时间轴内需要显示的所有内容。ChatGPT提供的第一种方案是使用JSON格式的文件,但是我始终没有成功。明明把文件放在了/source/_data目录下,却一直没有被调用。搞来搞去GPT说,可以用一个js文件存储数据,但我仍然失败,原因不明。最后,我想起[制作hexo标签墙](https://greendolphindance.com/2023/12/22/制作Hexo标签墙/)时,存储数据用的是一个yml文件,于是调教了一番GPT,最终成功。\n\n在/source/_data中创建timeline.yml文档,并输入需要显示的数据:\n\n```yaml\ntimeline:\n - date: \"2024-02-16\"\n type: blog_post\n description: \"发布了《制作hexo时间轴》\"\n link: \"https://greendolphindance.com/2024/02/16/制作hexo时间轴/\"\n - date: \"2024-02-16\"\n type: blog_renovation\n description: 添加了“动态(timeline)”页面\n - date: \"2024-02-15\"\n type: personal_status\n description: 过完年从老家回来了,好累啊!\n```\n\n其中,我在ejs模板文件中给blog_post类型添加了description和link字段(下详),以便读者点击文本内容跳转到相应文章。blog_renovation和personal_status则只有description字段。\n\n以后有新内容时,在最上方添加即可。\n\n# 编写模板文件\n\n在/themes/Chic/layout下新建timeline.ejs文档(再次强调,这里的文件名需要与index.md中layout后面的内容相同)。这里有个坑,就是我这个主题,/layout下面还有个/page目录,我一开始把文档新建在这个目录下了,结果没办法调用。\n\ntimeline.ejs文档内容如下,还挺直观的,就不过多解释了:\n\n```html\n<!DOCTYPE html>\n<html>\n\n<head>\n <title>\n <%= page.title %>\n </title>\n</head>\n\n<body>\n <div class=\"container\">\n <div class=\"post-wrap\">\n <h2 class=\"post-title\">\n <%= page.title %>\n </h2>\n <div class=\"timeline\">\n <% const timelineData=getYaml('source/_data/timeline.yml'); %>\n <% if (timelineData.timeline && timelineData.timeline.length> 0) { %>\n <% timelineData.timeline.forEach(function(item) { %>\n <div class=\"timeline-item\">\n <div class=\"timeline-date\">\n <%= item.date %>\n </div>\n <div class=\"timeline-content\">\n <% if (item.type==='blog_post' ) { %>\n <% if (item.link) { %>\n <p>\n <a href=\"<%= item.link %>\">\n <%= item.description %>\n </a>\n </p>\n <% } else { %>\n <p>\n <%= item.description %>\n </p>\n <% } %>\n <% } else if (item.type==='personal_status' ) { %>\n <p>\n <%= item.description %>\n </p>\n <% } else if (item.type==='blog_renovation' ) { %>\n <p>\n <%= item.description %>\n </p>\n <% } %>\n </div>\n </div>\n <% }); %>\n <% } else { %>\n <p>暂无内容</p>\n <% } %>\n </div>\n </div>\n </div>\n</body>\n\n</html>\n```\n\n# 设定样式\n\n最后一步就是设定时间轴的样式。我希望文字内容的左边有一条竖线,竖线上面有一些圆点,分别与不同的文字项目对齐。这条线和这些点为我博客的主题色,即#2b96bd色。我还做了一些比如调整行间距(line-height)的设置,GPT也做了一些贡献。完整代码如下:\n\n```css\n.timeline {\n margin: 0 auto;\n padding: 20px;\n position: relative; /* 使得伪元素定位相对于 .timeline 的位置 */\n}\n\n.timeline:before {\n content: ''; /* 添加一个伪元素用于绘制时间线 */\n position: absolute; /* 使得伪元素相对于 .timeline 定位 */\n top: 0; /* 从顶部开始 */\n bottom: 0; /* 撑满整个 .timeline */\n left: 10px; /* 使得线条与 .timeline-item 的左边距一致 */\n width: 2px; /* 线条宽度 */\n background-color: #2a96bd; /* 线条颜色 */\n}\n\n.timeline-item {\n position: relative; /* 使得 .timeline-content 相对于 .timeline-item 定位 */\n border-left: 2px solid transparent; /* 透明的左边框用于绘制线条 */\n padding-left: 20px; /* 增加左边距,使得标题不会和线条重合 */\n margin-bottom: 40px; /* 放大两个不同项之间的间距 */\n}\n\n.timeline-item:before {\n content: ''; /* 添加一个伪元素用于绘制蓝色点 */\n position: absolute; /* 使得伪元素相对于 .timeline-item 定位 */\n top: 10px; /* 距离 .timeline-item 顶部位置 */\n left: -16px; /* 将蓝色点定位到线条的左边缘 */\n width: 10px; /* 点的宽度 */\n height: 10px; /* 点的高度 */\n background-color: #2a96bd; /* 点的颜色 */\n border-radius: 50%; /* 将点设置为圆形 */\n}\n\n.timeline-date {\n font-weight: bold;\n margin-bottom: 5px;\n line-height: 1em;\n}\n\n.timeline-content {\n margin-left: 10px;\n font-size: 14px; /* 设置描述字体大小 */\n line-height: 1.5em;\n}\n```\n\n什么伪元素之类的,我还没学过,看不懂啥意思,先就这样吧!","tags":["博客"],"categories":["折腾"]},{"title":"最近下载的小玩意:Raycast","url":"/2024/02/09/最近下载的小玩意:Raycast/","content":"\n关于启动器,我很久以前用过Alfred,因为有点丑,又换回了原生Spotlight,一直用到昨天。那么为什么昨天突然又想折腾第三方启动器了呢?其实是机缘巧合。男朋友买了新电脑,我凭借着过去的经验让他装个Wox(另一个第三方启动器),然后突然想起一些Wox有的功能Spotlight没有,而我又确实需要,比如在搜索框输入“ddg+空格”就可以直接在Duckduckgo上搜索东西等。结果,就因为这么简单的理由,我就下载了Raycast。\n\n下载之前在Raycast和HapiGo之间犹豫了一小会,最后想着先下Raycast试一下,不好用的话再换HapiGo。但是事后发现Raycast就够好用了。对HapiGo感到抱歉!\n\n# 开始使用\n\n下载Raycast后,立刻试了一试,结果发现这什么啊?只能搜APP,文件搜不了。然后仔细研读教程,才发现搜索文件是底下的一个二级(?)搜索,需要输入“Search Files”并点击回车才能进入继续搜索文件。\n\n<img width=\"600\" alt=\"search files\" src=\"https://greendolphindance.github.io/picx-images-hosting/image.5j9pkjv1eiv4.webp\">\n\n那也太麻烦了吧!仔细研究了一下设置,发现可以设置别名,也可以设置快捷键。于是把别名设成了“f”:\n\n<img width=\"600\" alt=\"search files别名\" src=\"https://greendolphindance.github.io/picx-images-hosting/image.5z7k3u90hts0.webp\">\n\n这下方便多了。其实也想设个快捷键,但是我很不擅长记快捷键,尤其是那几个功能键该按哪个。我每次想强制退出应用(option+cmd+esc),都要排列组合数次……所以还是单记一个“f”要好些。但我之后为窗口管理和剪贴板历史设置了快捷键,因为我之前所用的应用已经让我形成了肌肉记忆(下详)。\n\n# 快速链接\n\n也就是快速搜索Duckduckgo等网站的功能。默认是有Duckduckgo和Google,我又加了一个Bing,免得哪天梯子挂了。\n\n<img width=\"600\" alt=\"快速链接\" src=\"https://greendolphindance.github.io/picx-images-hosting/image.5rm80aaynxmo.webp\">\n\n难受的是,我好像没找到在哪里更换图标,所以搜索Bing的时候搜索栏里会出现图上的搜索图标,而不是Bing的Logo。但这只是个小问题。\n\n# 替代其他的应用\n\nRaycast还集成了很多其他APP的功能,比如窗口管理(Magnet、Rectangle)和剪贴板历史(Maccy等)。我都尝试一遍后,就把多余的APP都删除了。\n\n## 替代Rectangle\n\n窗口管理软件,我之前用的是开源的Rectangle。结果Raycast自带一个这个功能,还能直接一键导入Rectangle的快捷键……那我为什么不用呢。\n\n<img width=\"600\" alt=\"Raycast导入Rectangle快捷键\" src=\"https://greendolphindance.github.io/picx-images-hosting/image.6332yaduqz5s.webp\">\n\n除此之外,Magnet和Spectacle的快捷键也可以直接导入。\n\n我感觉Raycast用起来比Rectangle稍慢一丢丢,但差异并不明显。本着APP越少越好的原则,我就删除了后者。\n\n## 替代Maccy\n\n以前推荐过[Maccy](https://greendolphindance.com/2023/11/16/最近下载的小玩意:Input-Source-Pro、Maccy/#Maccy),是我发现的Mac上功能精简且比较好看的剪贴板应用。当然我现在仍然推荐,只是用不到了,因为Raycast也有相同的功能。\n\n我把快捷键设置成了shift+cmd+c,和之前Maccy的快捷键保持一致,这样体验比较连续。Raycast的剪贴版历史不仅可以识别文字、图片、链接等,甚至还可以识别颜色的HEX值。值对应的颜色会直接在剪贴板历史界面中显示出来,而且还支持以不同的颜色格式复制:\n\n<img width=\"600\" alt=\"复制不同格式的颜色\" src=\"https://greendolphindance.github.io/picx-images-hosting/image.43gb5fcsnekg.webp\">\n\n好恨自己为什么没有早发现这个APP!之前折腾博客的时候,博客上有好几种灰色,我记下了一个的代码又忘记另一个,只能每次点检查元素然后在CSS样式里翻找,很狼狈。\n\n## 替代Spotlight\n\n这似乎是废话了。但是一进这个APP,它就有替换Spotlight的教程(其实就是把Spotlight的快捷键关掉,再把Raycast的快捷键设成cmd+空格),足以体现该APP的野心。\n\n# 插件商店\n\nRaycast强大的一点就是用户可以自行编写插件。当然我啥也不会,我就用用别人写的。我试用了商店里的很多插件,并决定留下这几款:\n\n- Apple Mail:顾名思义,管理Mac上邮件应用的插件,内含多项功能。我为常用的“Check For New Mail”和“Mark All As Read”功能设置了别名。\n- Apple Notes:同样顾名思义。可以快速新建或搜索备忘录。\n- Apple Reminders:顾名思义。功能与Apple Notes类似。\n- Color Picker:取色插件。\n- Count:字数统计。\n- Download Video:下载YouTube视频。\n- Downloads Manager:管理下载内容。我为“Open Latest Download”和“Show Latest Download”设置了别名。\n- Kill Process:顾名思义。\n- Lorem Ipsum:Lorem Ipsum生成器。\n- Paste as Plain Text:顾名思义。我设置快捷键为shift+cmd+v,和呼出剪贴版历史的快捷键对应,这样也不算太难记。\n- QR Code Generator:顾名思义。\n- Quit Applications:顾名思义。\n- Random Data Generator:生成随机数据,选择很多,不仅有常用的数字、浮点数、日期、字符串等,还有很多其他的,甚至包括随机生成一个猫或狗的品种等等……谁会用到?\n- Remove Background From Image:抠图插件,需要[remove.bg](https://www.remove.bg/zh)的API。\n- Safari:管理Safari的插件,我用得比较多的是搜索收藏夹。\n- Show IP Address:顾名思义。\n- Speedtest:测网速的。\n- System Monitor:显示CPU、内存、电池和网络情况。\n- URL Shortener:顾名思义。\n\n# 无法替代的应用\n\n## Shorttr\n\n虽然Raycast插件商店里有截图插件,但现有的Raycast截图插件无法进行长截图(Scrolling Capture)。\n\n## Bob\nRaycast需要订阅(每月$8)才能使用翻译功能,我没有试过,50块买断的Bob比它性价比实在高太多了。\n\n# PRO\n我个人是觉得没必要开会员。会员功能就只有无限剪贴板历史(谁会用到?)、AI(用GPT4甚至还要再加$8每月)、翻译(Bob足够好使)和云同步(并没有多台Mac),好像都没有必要。\n\n要我是开发者,我就把插件商店划到会员功能里面,我不赚钱谁赚钱(不是)。开发者还是比我有良心多了!","tags":["工具"],"categories":["折腾"]},{"title":"最近下载的小玩意:Cleaner One","url":"/2024/02/08/最近下载的小玩意:Cleaner-One/","content":"\n[之前](https://greendolphindance.com/2023/10/08/%E6%9C%80%E8%BF%91%E4%B8%8B%E8%BD%BD%E7%9A%84%E5%B0%8F%E7%8E%A9%E6%84%8F/#OnyX)推荐过OnyX,然后今天磁盘不是快满了然后报警了吗,就想着用它来清理一下。结果不能用了!\n\n<img width=\"300\" alt=\"OnyX报错\" src=\"https://cdn.jsdelivr.net/gh/greendolphindance/picx-images-hosting@master/image.1f2qes22paow.webp\">\n\n按照它的提示修复宗卷(挨个点一遍急救),仍然无效。只好含泪卸载。\n\n所以需要找一个替代品。我的要求无他,就是能清理那些系统文件……然后辗转找到了[Cleaner One](https://apps.apple.com/cn/app/cleaner-one-%E7%A3%81%E7%9B%98%E6%B8%85%E7%90%86/id1473079126?mt=12)。好像也有PC版。然后它有另一个叫Cleaner One Pro的APP,好像是要订阅的,如果像我一样需求比较简单,用不是Pro的那个就行。\n\n打开界面如下:\n\n<img width=\"600\" alt=\"Cleaner One界面\" src=\"https://greendolphindance.github.io/picx-images-hosting/image.24ud2gksurr4.webp\">\n\n就……很像那种杀毒软件……不过扫了两下是真有效。它把系统文件里的一些大文件分出来了,我看到十几个几G的文件,名称那里赫然写着:VMWare……然后我不是[弃VMWare转Crossover](https://greendolphindance.com/2024/02/05/Mac%E8%BF%90%E8%A1%8C%E4%BB%85%E6%94%AF%E6%8C%81Windows%E7%9A%84Steam%E6%B8%B8%E6%88%8F/)了嘛,我就把这些大文件连同VMWare本体都删除了。于是省下了:100G左右!没想到这个玩意这么大……\n\n对比竞品,腾讯柠檬我也下了,它找不出这些大文件。而且腾讯柠檬的功能Cleaner One好像都有,于是我也卸载了前者。别的竞品我也没试过,之后如果有的话再来更新。","tags":["工具"],"categories":["折腾"]},{"title":"Mac运行仅支持Windows的Steam游戏","url":"/2024/02/05/Mac运行仅支持Windows的Steam游戏/","content":"\n众所周知,Mac不适合玩游戏。但是我偏要勉强(?)。但我不想装双系统,所以一直是用一些原理不明的APP来玩。一路过来也用了不少APP了,现逐一测评一下。\n\n# VMWare\n\n这是我第一个用的APP,用它来玩巴别塔圣歌。它好像是一个虚拟机,就像在Mac里开一个小窗口运行Windows一样。然后你就在这个小窗口里下载Steam,然后安装游戏等等。\n\n能用,但是不推荐。首先这个虚拟机里面很卡,开个网页要半天。其次,有一些游戏(比如今天突然想玩的相声模拟器)没法运行,点击开始游戏会弹出card driver需要update的信息,但是它那个card driver是不能update的……所以无解。\n\n之前一直是用的这个,但今天以相声模拟器为契机,我开始折腾别的方案了。\n\n# Wine Crossover\n\n是一个命令行工具,我还没研究出来怎么用。但是看起来它需要本地有一个exe文件。而Steam如果系统不兼容的话,是无法下载游戏的exe文件的,所以没法用。\n\n# Wineskin Winery\n\n好像和上一个是打包一起下的,这一个不是命令行工具,而是有交互界面的。\n\n我完全忘记怎么用了,所以打开试了一下。然后就卡死了……\n\n重新开了一次,终于打开了。然后发现它也是需要exe文件才能够安装软件。放弃了!\n\n# Porting Kit\n\n使用方法很新颖:输入你的Steam Profile网址(需要权限为公开),它就会读取你库中所有的游戏,如果它的库里有的话,就提供下载。\n\n这么一说是挺方便的,但是!它库里的游戏实在太少了……我买了那么多游戏,只有文明五出现了下载图标(而且文明五Mac本来就能玩啊喂!)。新游戏更是想都别想。\n\n不过它免费!所以只玩经典游戏的可以试一下,如果不是这样那还是算了吧。\n\n# CrossOver\n\n这个是我唯一推荐的。安装后,点击下载Steam,它就会创建一个名为Steam的容器并在里面下载。然后就可以打开Steam的exe文件,下载里面的游戏了,很优雅。\n\n试了相声模拟器,很丝滑地打开了,玩的时候也没有任何卡顿的迹象。\n\n缺点就是要钱。试用14还是15天,一年24刀,也还行,但我很讨厌订阅制。然而买断实在太贵了……494刀,抢钱啊。\n\n更新:还得是万能的淘宝,永久版激活码188.18元……立刻购入了。不知道会不会有什么隐患,先用着再说。\n\n# 2024-3-13更新\n淦,还是把VMWare下回来了。CrossOver只能用来运行APP,但我今天出现了一个问题:就是我办了张银行卡,弄了个U盾,然后插进电脑里(我为此还买了个拓展坞)没反应。我就想是否是MacOS不兼容的问题,就想弄个虚拟机,于是又把VMWare搬出来了。最后居然成功!","tags":["工具","游戏"],"categories":["折腾"]},{"title":"购物分享(5)","url":"/2024/02/01/购物分享(5)/","content":"\n回家就是买买买!本来想过完寒假再写的,结果一看买了好多,就先写一篇吧。\n\n# 披头士黄色潜水艇联名乐高及展示盒\n\n<img width=\"400\" alt=\"乐高订单截图\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/f83e9fb0-4d92-4bba-94f8-82b9adfcaa3b\">\n\n老早就想买了,想着国外买一个带回来。结果停产了,在亚马逊一搜,卖到两千人民币!然后再搜,淘宝有现货,便宜一半(虽然还是很贵),咬咬牙买了。\n\n拼起来不算很难,我一晚上拼好的。效果如图:\n\n<img width=\"600\" alt=\"乐高效果图\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/f0136979-2329-4a14-b15e-43a02b115261\">\n\n放在展示盒里的效果如图:\n\n<img width=\"400\" alt=\"乐高效果图(带展示盒)\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/87f0894f-fe0a-4b86-8a21-c0372a0a513d\">\n\n怎么说呢,就是非常精致,再加上乐高一贯的品控。图里看不出来,但是其实它把潜水艇的内饰也还原了出来,里面有方向盘啊什么的,如果把上面的壳拿掉就可以看见。披头四小人也是可以放到潜水艇内部去的,大小刚好。\n\n有的人不敢买乐高是因为怕猫给它砸了,不过我用展示盒装起来之后,我家猫只会来蹭一蹭,不会想要伸爪子把它打下去。\n\n# 法压壶\n\n<img width=\"600\" alt=\"法压壶订单截图\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/165c75d5-ebc0-4cdc-a9e0-f937337ce5d3\">\n\n勤俭持家的我,从美国把没喝完的一整包咖啡粉带回来了,于是需要一个壶。家里本来有一个美式滴滤机,但是都收起来放了好久了,我也懒得拿出来,再加上它体积大,又需要滤纸(用完了)等等,我就不太想用。\n\n在美国用过摩卡壶和法压壶。电磁炉的话,摩卡壶挺好用的,但是(1)我家是明火灶,用摩卡壶得再买一个架子架起来,而且有烧融手柄的风险;(2)摩卡壶底下装了开水之后很烫手,需要戴隔热手套操作。所以有点麻烦,想想还是买了法压壶,毕竟只要倒开水就可以了。\n\n牌子是随便选的,选了一个便宜的。用下来体验挺好。壶身有三个刻度,从1 cup到3 cup,然后它附送了一个勺子,刚好挖一勺就对应一个cup。还是有些小细节在里面的。\n\n出品的话就中规中矩,主要取决于原料的味道。我的咖啡粉是PEETS的,口味一般,所以也没太喝出来壶有什么精妙之处。\n\n# 防丢猫项圈\n\n<img width=\"600\" alt=\"猫项圈订单截图\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/2fa08877-961c-4972-ac34-5e28360f7696\">\n\n粉粉嫩嫩的猫项圈,非常轻,很有质感。为了脱离性别刻板印象,给我家猫(男)选了粉色。护套里面可以放AirTag,还可以刻字,有防丢功能。项圈本身的面料似乎可以防止抓挠的时候损坏。\n\n很用心的一款产品,但我不推荐。首先,AirTag的防丢功能有限。AirTag的原理要求它处在一个附近有iPhone的环境中才能定位,而我们家有两三台iPhone,它还是经常信号弱。我试验过好几次,有时候甚至把手机怼到猫脖子上,仍然无法定位。不知道是不是两三台iPhone太少的原因,但我也不敢把猫丢到公共场所去试。\n\n其次,这个项圈是带弹力的,所以很容易被猫挣脱!我给我家猫戴的时候,大概是可以放进两个指头的松紧度,算是比较紧的吧,但是第二天项圈就出现在了地上!\n\n# 假发\n\n<img width=\"400\" alt=\"假发订单截图\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/c349e10f-d0db-485d-bb18-637a662e2048\">\n\n非主流假发(?)。之前染过一个这种绿色的挂耳,感觉还挺好看,所以看到有这个颜色的就买回来了,反正有运费险。\n\n是真发,再加上品牌溢价,所以有点贵。但戴上去效果蛮好.戴去了岳阳熊猫馆:\n\n<img width=\"400\" alt=\"假发上身图\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/e79e1631-d463-4481-8974-2054531a647f\">\n\n长度也差不多是我头发的长度,稍微长了一丢丢,所以扣到耳后更自然。另外要注意的是不要像我一样用完就往行李箱一扔,现在刘海翘起来了……之后用卷发棒补救一下吧。\n\n# iPhone 15 Pro钛原色256G\n\n<img width=\"600\" alt=\"手机订单截图\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/2b3baa89-47d2-4183-8556-806c07be8016\">\n\n激动的心!颤抖的手!\n\n之前爸买了一个同款,非常眼红,然后最近淘宝降了1000块,立刻入手了。\n\n裸机非常有质感,但是我(看着我的战损12 mini)再也不敢裸奔了,于是购入了手机壳(下详)。也没有12 mini那么硌手,但是确实有些太大了。正在学习使用那个把屏幕拉下来一半的功能,否则根本无法单手操作。\n\n最烦的就是微博轻享版的那个摇一摇广告,无法关闭,跳过按钮在左上角,小小一个,根本点不到。然后不小心动了一下手机就到淘宝或者别的什么地方去了。\n\n除此之外该机体验堪称完美。关于新功能,我设置了用于操作按钮的快捷指令:手机竖放时长按,可以打开一个菜单,点击各项可以跳转到支付宝/微信的付款码/扫一扫;横放时长按,就是静音开关;倒扣时长按,是录音/停止录音;左边框朝下时是打开相机;右边框朝下时是听歌识曲。非常!实用!\n\n另一个新功能是灵动岛(是的我现在才上岛),我还没玩明白,之后有心得再详细说。\n\n# 手机壳\n\n<img width=\"400\" alt=\"手机壳订单截图\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/d975f8df-20d0-40ef-b3bf-0d87c5b1c135\">\n\n华强北仿的原装壳。原装壳我只在店里摸过一次,还没咂巴出味来,所以没法对比。但是我这个壳的手感也很不错。爸看了说他也要买一个,我就又买了一个白色的,准备自己用,现在这个颜色的给他。\n\n除了手感之外,这个壳无线充电是可以弹动画的,不愧是华强北!\n\n友人mj推荐我购买MYNUS的壳,我看了确实好看,但是15 Pro的壳还在coming soon,所以得等等了。目前先用这个过渡一下吧。\n\n昨天跟友人yzy去喝酒,跟调酒师聊天,他说他的壳九块九,充电也可以弹动画,我大为震撼。但是他那个壳看着手感不是很好的样子。所以贵有贵的好吧(那你为什么不去买原装)!\n\n# 电脑包\n\n<img width=\"600\" alt=\"电脑包订单截图\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/d23e4e0b-4100-4fba-bb46-320e9b5d557a\">\n\n种草了个又贵又直男的电脑双肩包,而我手上这个刚好也该换了。那买吧!\n\n实物比图片好看点,没有那么直男:\n\n<img width=\"400\" alt=\"电脑包实物\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/5a526a24-dc41-45a7-8030-319c7008e618\">\n\n好吧,一拍感觉还是有点直男。但是实物确实还行,比官方图稍微偏米黄一点。\n\n关于这个包,它有一个独立电脑仓,可以放电脑和iPad,好像里面有什么高科技可以保护电脑四角。然后主仓的分区也挺合理,前面还有个方便拿取的兜,两边和内部都有放水壶和伞的区域(我把外面的用来放餐巾纸啥的,方便拿取)。背后有可以固定在行李箱提手上的弹力带。\n\n我找了半天别的包,要么就是没有独立电脑仓,要么就是防护太少,要么就是那种整个扣起来的,不好拿取。这个是最合适的,虽然丑了点,但是胜在实用。\n\n其实店里还有300多和500多的其他款,也满足这些条件,但是——只有黑色!黑色一上身,立马给人一种码农感(对不起),夏天还不好搭配衣服。所以咬咬牙买了这个。\n\n# 日本麻将和场风盘\n\n<img width=\"600\" alt=\"麻将订单截图\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/f3b5ebb5-215d-4e41-9949-dc6346e342a5\">\n\n<img width=\"600\" alt=\"场风盘订单截图\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/eb0b528e-36cd-4373-ad4e-74c6a6207c1c\">\n\n其实买错了,应该买大洋化学的那个入门套装,也就三百。这个加起来也快三百了。然后这个御圣的立直棒放在大洋化学场风盘的槽里稍微长了一点。但是这个太重了,退回去很亏,所以就这样了。\n\n实物很美貌:\n\n<img width=\"400\" alt=\"麻将实物图\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/bc05bd32-9439-4671-8b76-88864465adc4\">\n\n麻将小小的一个,很可爱。盒子的布局很合理。也没有发现什么质量问题。周六打一局吧!\n\n# 黄油柿饼\n\n<img width=\"600\" alt=\"柿饼订单截图\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/0a69dae9-6622-49ef-8462-7b868f8a539c\">\n\n有天刷了下拼多多,看到这个,立刻就买了。今天解冻了一个吃,好好吃啊!黄油的香、柿饼的甜、坚果的脆在嘴里水乳交融(?)。缺点就是太贵了,三十多才六个。然后包装很垃圾,只能自己吃,不能送人。\n\n# Apple Watch表带\n\n<img width=\"600\" alt=\"表带订单截图\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/9a550e4d-9971-4c3a-ae96-4f0c5d21a181\">\n\n前几天逛苹果,看到了这个表带,立马~~下单~~搜图在拼多多找到了平替。到手一看,颜色挺好看的,质感就那样吧,能用就行。主要是我迫切地想把现在这个表带换掉。现在这个是个金属的,好看是好看,但是它会挂我的毛衣袖子,然后搞得一手表的毛……秋冬喜欢穿毛衣的人真的要注意,慎入金属表带。现在这个就没有这个问题。虽然有魔术贴,但你注意一下别贴到毛衣上就行了。","tags":["工具","游戏","服饰","食物","玩具"],"categories":["购物"]},{"title":"制作hexo标签墙(2)","url":"/2024/01/26/制作hexo标签墙(2)/","content":"\n返璞归真了!不弄[这个链接](https://greendolphindance.com/2023/12/22/制作Hexo标签墙/)里制作的标签墙了,打算弄一个简单一点的,把各个标签排列起来,根据标签内文章数量的多少设置字体大小。\n\n一开始在tags文件夹下的index.md修改,没反应,只好改在tag.ejs里修改。代码如下:\n\n```html\n<div class=\"tags-page\">\n <% for (var tag of tagsArray) { %>\n <% var postCount=tag.length; %>\n <span style=\"font-size: <%= 12 + postCount * 2 %>px;\">\n <a href=\"<%= url_for('/tags/' + tag.name + '/') %>\">\n <%= tag.name %>\n <small>(<%= postCount %>)</small>\n </a>\n </span>\n <% } %>\n</div>\n```\n\n# 修改\n\n在欧元老师的建议下,取了个对数,缩小了不同标签的大小差。调试了数次,最终代码如下:\n\n```html\n<div class=\"tags-page\">\n <% for (var tag of tagsArray) { %>\n <% var postCount=tag.length; %>\n <span style=\"font-size: <%= 12 + Math.log(postCount + 1) * 5 %>px;\">\n <a href=\"<%= url_for('/tags/' + tag.name + '/') %>\">\n <%= tag.name %>\n <small>(<%= postCount %>)</small>\n </a>\n </span>\n <% } %>\n</div>\n```","tags":["博客"],"categories":["折腾"]},{"title":"制作hexo热力图","url":"/2024/01/22/制作hexo热力图/","content":"又是cyx!告诉了我[有个人的博客](https://blog.douchi.space/hugo-blog-heatmap/#gsc.tab=0)做了热力图。我一开始没想做,因为我博文更新没那么勤,热力图做出来恐怕不会好看。但是到了晚上,我的折腾之心开始蠢蠢欲动!于是喊GPT帮我做。当天晚上debug到凌晨四点,还是没能做出来。今天跟cyx喝了个咖啡,回来继续捣鼓,居然成了!\n\n# 完整代码\n话不多说,放一下我的完整代码,这是在profile.ejs文件里的,因为我想把热力图放在主页的标题上方。\n\n```html\n<div class=\"container profile-container\">\n <div class=\"intro\">\n <div class=\"avatar\">\n <a href=\"<%- url_for(theme.nav.Posts) %>\"><img src=\"<%- url_for(theme.avatar) %>\"></a>\n </div>\n <div id=\"heatmap-container\"></div>\n\n <script src=\"https://d3js.org/d3.v5.min.js\"></script>\n\n <script>\n document.addEventListener(\"DOMContentLoaded\", function () {\n function getDateBefore(days) {\n var currentDate = new Date();\n currentDate.setDate(currentDate.getDate() - days);\n var year = currentDate.getFullYear();\n var month = String(currentDate.getMonth() + 1).padStart(2, '0');\n var day = String(currentDate.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n }\n <%\n function convertWordCount(wordCountString) {\n if (!wordCountString) {\n return 0;\n }\n\n // Convert to string and check if the word count string contains 'k'\n var lowerCaseString = String(wordCountString).toLowerCase();\n\n if (lowerCaseString.includes('k')) {\n return parseFloat(lowerCaseString) * 1000;\n } else {\n return parseFloat(lowerCaseString);\n }\n }\n %>\n\nvar data = [\n <% site.posts.each(function (post) { %>\n {\n date: \"<%= post.date.format('YYYY-MM-DD') %>\",\n word_count: <%= convertWordCount(getWordCount(post.content)) %>,\n link: \"<%= url_for(post.path) %>\"\n },\n <% }); %>\n];\n\n\n var margin = { top: 20, right: 20, bottom: 20, left: 20 };\n var containerWidth = 600;\n var cellSize = Math.min((containerWidth - margin.left - margin.right) / 45, (containerWidth - margin.top - margin.bottom) / 8);\n var width = cellSize * 45;\n var height = cellSize * 8;\n\n var svg = d3\n .select(\"#heatmap-container\")\n .append(\"svg\")\n .attr(\"width\", width + margin.left + margin.right)\n .attr(\"height\", height + margin.top + margin.bottom)\n .append(\"g\")\n .attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\");\n\n var xScale = d3.scaleBand().range([width, 0]).padding(0.1);\n var yScale = d3.scaleBand().range([height, 0]).padding(0.1);\n\n var exponent = 0.3; // Adjust the exponent as needed\n var colorScale = d3.scaleSequential(d3.interpolate(\"lightblue\", \"#2d96bd\"))\n .domain([1, Math.pow(d3.max(data, function (d) { return d.word_count; }), exponent)]);\n\n xScale.domain(d3.range(45));\n yScale.domain(d3.range(8));\n\n // 在渲染每个格子时设置渐变色的值\n var cells = svg.selectAll(\".cell\")\n .data(d3.cross(d3.range(8), d3.range(45)))\n .enter().append(\"a\")\n .attr(\"href\", function (d) {\n var currentDate = getDateBefore(d[0] * 45 + d[1]);\n var correspondingData = data.find(entry => entry.date === currentDate);\n return correspondingData ? correspondingData.link : \"#\"; // 设置链接,如果没有链接就是 \"#\",即当前页面\n })\n .append(\"rect\")\n .attr(\"class\", function (d) {\n var currentDate = getDateBefore(d[0] * 45 + d[1]);\n var correspondingData = data.find(entry => entry.date === currentDate);\n return \"cell\" + (correspondingData && correspondingData.word_count > 0 ? \" blue\" : \"\");\n })\n\n\n .attr(\"x\", function (d) { return xScale(d[1]); })\n .attr(\"y\", function (d) { return yScale(d[0]); })\n .attr(\"width\", cellSize)\n .attr(\"height\", cellSize)\n .style(\"fill\", function (d) {\n var currentDate = getDateBefore(d[0] * 45 + d[1]);\n var correspondingData = data.find(entry => entry.date === currentDate);\n return correspondingData ? colorScale(Math.pow(correspondingData.word_count, exponent)) : \"#ccc\";\n })\n .attr(\"rx\", 4)\n .attr(\"ry\", 4)\n .attr(\"data-word_count\", function (d) {\n var currentDate = getDateBefore(d[0] * 45 + d[1]);\n var correspondingData = data.find(entry => entry.date === currentDate);\n return correspondingData ? correspondingData.word_count : null;\n })\n .on(\"click\", function (event, d) {\n var currentDate = getDateBefore(d[0] * 45 + d[1]);\n var correspondingData = data.find(entry => entry.date === currentDate);\n if (correspondingData && correspondingData.link) {\n window.location.href = correspondingData.link;\n }\n });\n\n\n function updateCellStyles() {\n var isDarkTheme = document.body.classList.contains(\"dark-theme\");\n cells.style(\"stroke\", isDarkTheme ? \"#292a2d\" : \"#fff\")\n .style(\"stroke-width\", \"1px\");\n }\n\n updateCellStyles();\n\n document.body.addEventListener(\"themechange\", function () {\n updateCellStyles();\n });\n });\n </script>\n\n <style>\n @media (max-width: 767px) {\n #heatmap-container {\n display: none;\n }\n }\n\n /* 在桌面端时隐藏 .avatar */\n @media (min-width: 768px) {\n .avatar {\n display: none;\n }\n }\n\n .cell {\n stroke: #fff !important;\n stroke-width: 1px;\n fill: #ccc;\n cursor: default;\n /* 添加这一行 */\n }\n\n .dark-theme .cell {\n stroke: #292a2d !important;\n stroke-width: 1px;\n fill: #a9a9b3;\n cursor: default;\n /* 添加这一行 */\n }\n\n .blue {\n cursor: pointer;\n }\n\n .dark-theme .blue {\n cursor: pointer;\n }\n </style>\n\n\n <div class=\"nickname\"><%- theme.nickname %></div>\n <div class=\"description\"><%- markdown(theme.description) %></div>\n <div class=\"links\">\n <% if (theme.links !==undefined) { %>\n <% for (var key in theme.links){ %>\n <a class=\"link-item\" title=\"<%- key %>\" href=\"<%= theme.links[key] %>\">\n <% if(theme.links_text_enable) { %>\n <%= key %>\n <% } %>\n <% if(theme.links_icon_enable){ %>\n <i class=\"iconfont icon-<%- key.toLowerCase() %>\"></i>\n <% } %>\n </a>\n <% } %>\n <% } %>\n </div>\n </div>\n</div>\n```\n\n# 思路\n\n那个博主用的是echart库,我捣鼓了半天也未能成功,于是改用GPT推荐的D3库。然后我不想添加热力图标题、月份和星期等等文字内容,以适应我博客的极简风格,所以就没有加入这些东西,只设置了8*45=360个格子,展示我约一年来发博的情况。没有文章的时候为灰色,有文章的时候根据文章的字数显示为渐变的蓝色,最深为#2d96bd色,最浅为lightblue色。\n\n此外,由于手机上显示的状况不佳,我希望在屏幕宽度为768像素以下时,不显示热力图,而显示我的照片:\n\n```css\n@media (max-width: 767px) {\n #heatmap-container {\n display: none;\n }\n}\n\n/* 在桌面端时隐藏 .avatar */\n@media (min-width: 768px) {\n .avatar {\n display: none;\n }\n}\n```\n\n关于数据的抓取,我是用如下代码实现的:\n\n```javascript\nvar data = [\n <% page.posts.each(function (post) { %>\n {\n date: \"<%= post.date.format('YYYY-MM-DD') %>\",\n word_count: <%= convertWordCount(getWordCount(post.content)) %>,\n link: \"<%= url_for(post.path) %>\"\n },\n <% }); %>\n];\n```\n\n其中,getWordCount函数是hexo-wordcount插件里带的,如果想复刻我的代码,需要先安装这个插件。\n\n其实一开始就想能够自动抓取了,但是一直不成功,于是改成了手动输入。但是又太麻烦,就又开始捣鼓自动抓取的事情。但无论怎么弄都成功不了,GPT也找不出问题。于是求助我男朋友。他发现了两个错误:(1)我抓取的字数格式是形如2.8k的,而需要的数据是形如2800的。(2)我在代码的有些地方用了words,在另一些地方用了word_count(估计是我开了很多新窗口让GPT给了我很多次代码,然后搞混了)。改正这两个错误后,热力图就正常显示了。(在此感谢!)\n\n还有一些细节:设置了点击跳转的逻辑后,我发现鼠标放在灰色的格子上时,也会变成手指的样式。我希望它在且仅在蓝色的格子上时才变成手指。代码里有一些是做这个事情的:\n\n```css\n.blue {\n cursor: pointer;\n}\n\n.dark-theme .blue {\n cursor: pointer;\n}\n```\n我部署上去后,在夜间模式是没效果的,所以加了后一段。但是我感觉按道理应该没必要加的?\n\n以下这段代码是用来设置格子边框的样式的:\n\n```css\n.cell {\n stroke: #fff !important;\n stroke-width: 1px;\n fill: #ccc;\n cursor: default;\n /* 添加这一行 */\n}\n\n.dark-theme .cell {\n stroke: #292a2d !important;\n stroke-width: 1px;\n fill: #a9a9b3;\n cursor: default;\n /* 添加这一行 */\n}\n```\n\n因为在夜间模式的时候,格子边框起初也是白色,看起来很丑。这个也弄了很久,要么就是日间模式和夜间模式的框全变白,要么就全变黑。最后不记得是怎么解决的了。\n\n热力图做好后,发现由于一篇文章的字数太多,其他文章的蓝色就变得很浅,而且只有微妙的区别。于是叫GPT修改代码:\n\n```javascript\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n // ... (previous code)\n\n var exponent = 0.3; // Adjust the exponent as needed\n var colorScale = d3.scaleSequential(d3.interpolate(\"lightblue\", \"#2d96bd\"))\n .domain([1, Math.pow(d3.max(data, function (d) { return d.word_count; }), exponent)]);\n\n // ... (remaining code)\n\n var cells = svg.selectAll(\".cell\")\n .data(d3.cross(d3.range(8), d3.range(45)))\n .enter().append(\"a\")\n // ... (remaining code)\n .style(\"fill\", function (d) {\n var currentDate = getDateBefore(d[0] * 45 + d[1]);\n var correspondingData = data.find(entry => entry.date === currentDate);\n return correspondingData ? colorScale(Math.pow(correspondingData.word_count, exponent)) : \"#ccc\";\n })\n // ... (remaining code)\n});\n```\n\n我也看不懂,反正能跑。\n\n至于D3相关代码,我是一点也不懂,就不妄加评论了。\n\n就这样吧,想到什么再写!\n\n# 微调(2024-1-27)\n稍微调整了一下,把exponent改成了0.6,把lightblue改成了#add8e6。修改后的完整代码如下:\n\n```html\n<div class=\"container profile-container\">\n <div class=\"intro\">\n <div class=\"avatar\">\n <a href=\"<%- url_for(theme.nav.Posts) %>\"><img src=\"<%- url_for(theme.avatar) %>\"></a>\n </div>\n <div id=\"heatmap-container\"></div>\n\n <script src=\"https://d3js.org/d3.v5.min.js\"></script>\n\n <script>\n document.addEventListener(\"DOMContentLoaded\", function () {\n function getDateBefore(days) {\n var currentDate = new Date();\n currentDate.setDate(currentDate.getDate() - days);\n var year = currentDate.getFullYear();\n var month = String(currentDate.getMonth() + 1).padStart(2, '0');\n var day = String(currentDate.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n }\n <%\n function convertWordCount(wordCountString) {\n if (!wordCountString) {\n return 0;\n }\n\n // Convert to string and check if the word count string contains 'k'\n var lowerCaseString = String(wordCountString).toLowerCase();\n\n if (lowerCaseString.includes('k')) {\n return parseFloat(lowerCaseString) * 1000;\n } else {\n return parseFloat(lowerCaseString);\n }\n }\n %>\n\nvar data = [\n <% site.posts.each(function (post) { %>\n {\n date: \"<%= post.date.format('YYYY-MM-DD') %>\",\n word_count: <%= convertWordCount(getWordCount(post.content)) %>,\n link: \"<%= url_for(post.path) %>\"\n },\n <% }); %>\n];\n\n\n var margin = { top: 20, right: 20, bottom: 20, left: 20 };\n var containerWidth = 600;\n var cellSize = Math.min((containerWidth - margin.left - margin.right) / 45, (containerWidth - margin.top - margin.bottom) / 8);\n var width = cellSize * 45;\n var height = cellSize * 8;\n\n var svg = d3\n .select(\"#heatmap-container\")\n .append(\"svg\")\n .attr(\"width\", width + margin.left + margin.right)\n .attr(\"height\", height + margin.top + margin.bottom)\n .append(\"g\")\n .attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\");\n\n var xScale = d3.scaleBand().range([width, 0]).padding(0.1);\n var yScale = d3.scaleBand().range([height, 0]).padding(0.1);\n\n var exponent = 0.6; // Adjust the exponent as needed\n var colorScale = d3.scaleSequential(d3.interpolate(\"#add8e6\", \"#2d96bd\"))\n .domain([1, Math.pow(d3.max(data, function (d) { return d.word_count; }), exponent)]);\n\n xScale.domain(d3.range(45));\n yScale.domain(d3.range(8));\n\n // 在渲染每个格子时设置渐变色的值\n var cells = svg.selectAll(\".cell\")\n .data(d3.cross(d3.range(8), d3.range(45)))\n .enter().append(\"a\")\n .attr(\"href\", function (d) {\n var currentDate = getDateBefore(d[0] * 45 + d[1]);\n var correspondingData = data.find(entry => entry.date === currentDate);\n return correspondingData ? correspondingData.link : \"#\"; // 设置链接,如果没有链接就是 \"#\",即当前页面\n })\n .append(\"rect\")\n .attr(\"class\", function (d) {\n var currentDate = getDateBefore(d[0] * 45 + d[1]);\n var correspondingData = data.find(entry => entry.date === currentDate);\n return \"cell\" + (correspondingData && correspondingData.word_count > 0 ? \" blue\" : \"\");\n })\n\n\n .attr(\"x\", function (d) { return xScale(d[1]); })\n .attr(\"y\", function (d) { return yScale(d[0]); })\n .attr(\"width\", cellSize)\n .attr(\"height\", cellSize)\n .style(\"fill\", function (d) {\n var currentDate = getDateBefore(d[0] * 45 + d[1]);\n var correspondingData = data.find(entry => entry.date === currentDate);\n return correspondingData ? colorScale(Math.pow(correspondingData.word_count, exponent)) : \"#ccc\";\n })\n .attr(\"rx\", 4)\n .attr(\"ry\", 4)\n .attr(\"data-word_count\", function (d) {\n var currentDate = getDateBefore(d[0] * 45 + d[1]);\n var correspondingData = data.find(entry => entry.date === currentDate);\n return correspondingData ? correspondingData.word_count : null;\n })\n .on(\"click\", function (event, d) {\n var currentDate = getDateBefore(d[0] * 45 + d[1]);\n var correspondingData = data.find(entry => entry.date === currentDate);\n if (correspondingData && correspondingData.link) {\n window.location.href = correspondingData.link;\n }\n });\n\n\n function updateCellStyles() {\n var isDarkTheme = document.body.classList.contains(\"dark-theme\");\n cells.style(\"stroke\", isDarkTheme ? \"#292a2d\" : \"#fff\")\n .style(\"stroke-width\", \"1px\");\n }\n\n updateCellStyles();\n\n document.body.addEventListener(\"themechange\", function () {\n updateCellStyles();\n });\n });\n </script>\n\n <style>\n @media (max-width: 767px) {\n #heatmap-container {\n display: none;\n }\n }\n\n /* 在桌面端时隐藏 .avatar */\n @media (min-width: 768px) {\n .avatar {\n display: none;\n }\n }\n\n .cell {\n stroke: #fff !important;\n stroke-width: 1px;\n fill: #ccc;\n cursor: default;\n /* 添加这一行 */\n }\n\n .dark-theme .cell {\n stroke: #292a2d !important;\n stroke-width: 1px;\n fill: #a9a9b3;\n cursor: default;\n /* 添加这一行 */\n }\n\n .blue {\n cursor: pointer;\n }\n\n .dark-theme .blue {\n cursor: pointer;\n }\n </style>\n\n\n <div class=\"nickname\"><%- theme.nickname %></div>\n <div class=\"description\"><%- markdown(theme.description) %></div>\n <div class=\"links\">\n <% if (theme.links !==undefined) { %>\n <% for (var key in theme.links){ %>\n <a class=\"link-item\" title=\"<%- key %>\" href=\"<%= theme.links[key] %>\">\n <% if(theme.links_text_enable) { %>\n <%= key %>\n <% } %>\n <% if(theme.links_icon_enable){ %>\n <i class=\"iconfont icon-<%- key.toLowerCase() %>\"></i>\n <% } %>\n </a>\n <% } %>\n <% } %>\n </div>\n </div>\n</div>\n```\n\n# 鼠标悬停在格子上时,显示文章标题和日期\n\n因为原有的显示模式太不直观了,不知道哪个格子代表哪一天,又不想做成表格的形式,于是出此下策。效果如图:\n\n<img width=\"600\" alt=\"效果图\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/c5df99b3-5e79-4ce8-adb3-46a25d672065\">\n\n修改后的代码如下:\n\n```html\n<div class=\"container profile-container\">\n <div class=\"intro\">\n <div class=\"avatar\">\n <a href=\"<%- url_for(theme.nav.Posts) %>\"><img src=\"<%- url_for(theme.avatar) %>\"></a>\n </div>\n <div id=\"heatmap-container\">\n <div id=\"tooltip\"></div>\n </div>\n\n\n <script src=\"https://d3js.org/d3.v5.min.js\"></script>\n\n <script>\n document.addEventListener(\"DOMContentLoaded\", function () {\n function getDateBefore(days) {\n var currentDate = new Date();\n currentDate.setDate(currentDate.getDate() - days);\n var year = currentDate.getFullYear();\n var month = String(currentDate.getMonth() + 1).padStart(2, '0');\n var day = String(currentDate.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n }\n <%\n function convertWordCount(wordCountString) {\n if (!wordCountString) {\n return 0;\n }\n\n // Convert to string and check if the word count string contains 'k'\n var lowerCaseString = String(wordCountString).toLowerCase();\n\n if (lowerCaseString.includes('k')) {\n return parseFloat(lowerCaseString) * 1000;\n } else {\n return parseFloat(lowerCaseString);\n }\n }\n %>\n\nvar data = [\n <% site.posts.each(function (post) { %>\n {\n date: \"<%= post.date.format('YYYY-MM-DD') %>\",\n word_count: <%= convertWordCount(getWordCount(post.content)) %>,\n link: \"<%= url_for(post.path) %>\",\n title: \"<%= post.title %>\"\n },\n <% }); %>\n];\n\n\n var margin = { top: 20, right: 20, bottom: 20, left: 20 };\n var containerWidth = 600;\n var cellSize = Math.min((containerWidth - margin.left - margin.right) / 45, (containerWidth - margin.top - margin.bottom) / 8);\n var width = cellSize * 45;\n var height = cellSize * 8;\n\n var svg = d3\n .select(\"#heatmap-container\")\n .append(\"svg\")\n .attr(\"width\", width + margin.left + margin.right)\n .attr(\"height\", height + margin.top + margin.bottom)\n .append(\"g\")\n .attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\");\n\n var xScale = d3.scaleBand().range([width, 0]).padding(0.1);\n var yScale = d3.scaleBand().range([height, 0]).padding(0.1);\n\n var exponent = 0.3; // Adjust the exponent as needed\n var colorScale = d3.scaleSequential(d3.interpolate(\"lightblue\", \"#2d96bd\"))\n .domain([1, Math.pow(d3.max(data, function (d) { return d.word_count; }), exponent)]);\n\n xScale.domain(d3.range(45));\n yScale.domain(d3.range(8));\n\n // 在渲染每个格子时设置渐变色的值\n var cells = svg.selectAll(\".cell\")\n .data(d3.cross(d3.range(8), d3.range(45)))\n .enter().append(\"a\")\n .attr(\"href\", function (d) {\n var currentDate = getDateBefore(d[0] * 45 + d[1]);\n var correspondingData = data.find(entry => entry.date === currentDate);\n return correspondingData ? correspondingData.link : \"#\";\n })\n .append(\"rect\")\n .attr(\"class\", function (d) {\n var currentDate = getDateBefore(d[0] * 45 + d[1]);\n var correspondingData = data.find(entry => entry.date === currentDate);\n return \"cell\" + (correspondingData && correspondingData.word_count > 0 ? \" blue\" : \"\");\n })\n .attr(\"x\", function (d) { return xScale(d[1]); })\n .attr(\"y\", function (d) { return yScale(d[0]); })\n .attr(\"width\", cellSize)\n .attr(\"height\", cellSize)\n .style(\"fill\", function (d) {\n var currentDate = getDateBefore(d[0] * 45 + d[1]);\n var correspondingData = data.find(entry => entry.date === currentDate);\n return correspondingData ? colorScale(Math.pow(correspondingData.word_count, exponent)) : \"#ccc\";\n })\n .attr(\"rx\", 4)\n .attr(\"ry\", 4)\n .attr(\"data-word_count\", function (d) {\n var currentDate = getDateBefore(d[0] * 45 + d[1]);\n var correspondingData = data.find(entry => entry.date === currentDate);\n return correspondingData ? correspondingData.word_count : null;\n })\n .attr(\"title\", function (d) {\n var currentDate = getDateBefore(d[0] * 45 + d[1]);\n var correspondingData = data.find(entry => entry.date === currentDate);\n return correspondingData ? currentDate + \"\\n\" + correspondingData.title : \"\";\n })\n .on(\"click\", function (event, d) {\n var currentDate = getDateBefore(d[0] * 45 + d[1]);\n var correspondingData = data.find(entry => entry.date === currentDate);\n\n if (correspondingData && correspondingData.link) {\n // 点击直接跳转\n window.location.href = correspondingData.link;\n }\n })\n .on(\"mouseover\", function (event, d) {\n var title = d3.select(this).attr(\"title\");\n if (title) {\n var tooltip = d3.select(\"#tooltip\");\n // 显示日期和标题\n tooltip.transition()\n .duration(200)\n .style(\"opacity\", 1);\n var tooltipContent = title;\n tooltip.html(tooltipContent);\n\n // 获取蓝色格子的位置\n var cellBoundingBox = this.getBoundingClientRect();\n\n // 计算 tooltip 的位置,使其中心线与蓝色格子的中心线对齐\n var tooltipWidth = tooltip.node().offsetWidth;\n var xPosition = cellBoundingBox.left + cellBoundingBox.width / 2;\n var yPosition = cellBoundingBox.top;\n tooltip.style(\"left\", xPosition + \"px\")\n .style(\"top\", yPosition + \"px\");\n }\n })\n\n .on(\"mouseout\", function (event, d) {\n // 隐藏 tooltip\n var tooltip = d3.select(\"#tooltip\");\n tooltip.transition()\n .duration(200)\n .style(\"opacity\", 0)\n .on(\"end\", function () {\n // 清除 tooltip 内容\n tooltip.html(\"\");\n });\n });\n\n function updateCellStyles() {\n var isDarkTheme = document.body.classList.contains(\"dark-theme\");\n cells.style(\"stroke\", isDarkTheme ? \"#292a2d\" : \"#fff\")\n .style(\"stroke-width\", \"1px\");\n }\n\n updateCellStyles();\n\n document.body.addEventListener(\"themechange\", function () {\n updateCellStyles();\n });\n });\n\n\n </script>\n\n <style>\n @media (max-width: 767px) {\n #heatmap-container {\n display: none;\n }\n }\n\n /* 在桌面端时隐藏 .avatar */\n @media (min-width: 768px) {\n .avatar {\n display: none;\n }\n }\n\n .cell {\n stroke: #fff !important;\n stroke-width: 1px;\n fill: #ccc;\n cursor: default;\n /* 添加这一行 */\n }\n\n .dark-theme .cell {\n stroke: #292a2d !important;\n stroke-width: 1px;\n fill: #a9a9b3;\n cursor: default;\n /* 添加这一行 */\n }\n\n .blue {\n cursor: pointer;\n }\n\n .dark-theme .blue {\n cursor: pointer;\n }\n\n #tooltip {\n position: absolute;\n background-color: white;\n border: 1px solid #a9a9b3;\n padding: 3px;\n /* 调整文字与边框的间距 */\n opacity: 0;\n font-size: 10px;\n /* 调整字体大小 */\n transform: translate(-50%, -100%);\n /* 将框定位到正上方居中 */\n line-height: 1;\n }\n\n .dark-theme #tooltip {\n background-color: #292a2d;\n }\n </style>\n\n <div id=\"tooltip\"></div>\n\n <div class=\"nickname\"><%- theme.nickname %></div>\n <div class=\"description\"><%- markdown(theme.description) %></div>\n <div class=\"links\">\n <% if (theme.links !==undefined) { %>\n <% for (var key in theme.links){ %>\n <a class=\"link-item\" title=\"<%- key %>\" href=\"<%= theme.links[key] %>\">\n <% if(theme.links_text_enable) { %>\n <%= key %>\n <% } %>\n <% if(theme.links_icon_enable){ %>\n <i class=\"iconfont icon-<%- key.toLowerCase() %>\"></i>\n <% } %>\n </a>\n <% } %>\n <% } %>\n </div>\n </div>\n</div>\n```\n\n# 2024-7-17调整\n\n这次主要调整了以下几个方面:\n\n- 夜间模式时,本来设定无文章的格子颜色为#a9a9b3,但不知为何没有生效。这次用了更细的选择器,使得颜色变为这个。\n- 相应地,有文章格子的蓝色也调整为更深(保持渐变),否则会很不协调。\n\n修改了profile.ejs和script.js的内容。修改后者是因为,调整了这两项后,点击切换主题按钮,蓝色并没有变深或变浅,而是要刷新一下才会变化。所以需要定义一个themechange事件并监听它,每当这个事件被触发时,更新格子颜色。这就需要追溯到原本js文件里的toggleTheme函数,在函数执行时,添加一个themechange事件。\n\n## 修改后的profile.ejs\n\n```html\n<link rel=\"stylesheet\" href=\"../fonts/iconfont2/iconfont.css\">\n<div class=\"container profile-container\">\n <div class=\"intro\">\n <div class=\"avatar\">\n <a href=\"<%- url_for(theme.nav.Posts) %>\"><img src=\"<%- url_for(theme.avatar) %>\"></a>\n </div>\n <div id=\"heatmap-container\">\n <div id=\"tooltip\"></div>\n </div>\n\n\n <script src=\"https://d3js.org/d3.v5.min.js\"></script>\n <script>\n document.addEventListener(\"DOMContentLoaded\", function () {\n function getDateBefore(days) {\n var currentDate = new Date();\n currentDate.setDate(currentDate.getDate() - days);\n var year = currentDate.getFullYear();\n var month = String(currentDate.getMonth() + 1).padStart(2, '0');\n var day = String(currentDate.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n }\n \n <%\n function convertWordCount(wordCountString) {\n if (!wordCountString) {\n return 0;\n }\n\n var lowerCaseString = String(wordCountString).toLowerCase();\n\n if (lowerCaseString.includes('k')) {\n return parseFloat(lowerCaseString) * 1000;\n } else {\n return parseFloat(lowerCaseString);\n }\n }\n %>\n \n var data = [\n <% site.posts.each(function (post) { %>\n {\n date: \"<%= post.date.format('YYYY-MM-DD') %>\",\n word_count: <%= convertWordCount(getWordCount(post.content)) %>,\n link: \"<%= url_for(post.path) %>\",\n title: \"<%= post.title %>\"\n },\n <% }); %>\n ];\n\n var margin = { top: 20, right: 20, bottom: 20, left: 20 };\n var containerWidth = 600;\n var cellSize = Math.min((containerWidth - margin.left - margin.right) / 45, (containerWidth - margin.top - margin.bottom) / 7);\n var width = cellSize * 45;\n var height = cellSize * 7;\n\n var svg = d3\n .select(\"#heatmap-container\")\n .append(\"svg\")\n .attr(\"width\", width + margin.left + margin.right)\n .attr(\"height\", height + margin.top + margin.bottom)\n .append(\"g\")\n .attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\");\n\n var xScale = d3.scaleBand().range([0, width]).padding(0.1);\n var yScale = d3.scaleBand().range([0, height]).padding(0.1);\n\n var exponent = 0.35;\n var colorScale = d3.scaleSequential(d3.interpolate(\"lightblue\", \"#2d96bd\"))\n .domain([1, Math.pow(d3.max(data, function (d) { return d.word_count; }), exponent)]);\n\n var darkColorScale = d3.scaleSequential(d3.interpolate(\"#4bafce\", \"#1a6d8a\"))\n .domain([1, Math.pow(d3.max(data, function (d) { return d.word_count; }), exponent)]);\n\n xScale.domain(d3.range(44, -1, -1));\n yScale.domain(d3.range(6, -1, -1));\n\n var cells = svg.selectAll(\".cell\")\n .data(d3.cross(d3.range(7), d3.range(45)).reverse())\n .enter().append(\"a\")\n .attr(\"href\", function (d) {\n var currentDate = getDateBefore(d[1] * 7 + d[0]);\n var correspondingData = data.find(entry => entry.date === currentDate);\n return correspondingData ? correspondingData.link : \"#\";\n })\n .append(\"rect\")\n .attr(\"class\", function (d) {\n var currentDate = getDateBefore(d[1] * 7 + d[0]);\n var correspondingData = data.find(entry => entry.date === currentDate);\n return \"cell\" + (correspondingData && correspondingData.word_count > 0 ? \" blue\" : \"\");\n })\n .attr(\"x\", function (d) { return xScale(d[1]); })\n .attr(\"y\", function (d) { return yScale(d[0]); })\n .attr(\"width\", cellSize)\n .attr(\"height\", cellSize)\n .style(\"fill\", function (d) {\n var currentDate = getDateBefore(d[1] * 7 + d[0]);\n var correspondingData = data.find(entry => entry.date === currentDate);\n var isDarkTheme = document.body.classList.contains(\"dark-theme\");\n return correspondingData ? (isDarkTheme ? darkColorScale(Math.pow(correspondingData.word_count, exponent)) : colorScale(Math.pow(correspondingData.word_count, exponent))) : \"#ccc\";\n })\n .attr(\"rx\", 4)\n .attr(\"ry\", 4)\n .attr(\"data-word_count\", function (d) {\n var currentDate = getDateBefore(d[1] * 7 + d[0]);\n var correspondingData = data.find(entry => entry.date === currentDate);\n return correspondingData ? correspondingData.word_count : null;\n })\n .attr(\"title\", function (d) {\n var currentDate = getDateBefore(d[1] * 7 + d[0]);\n var correspondingData = data.find(entry => entry.date === currentDate);\n return correspondingData ? currentDate + \"\\n\" + correspondingData.title : \"\";\n })\n\n .on(\"click\", function (event, d) {\n var currentDate = getDateBefore(d[1] * 7 + d[0]);\n var correspondingData = data.find(entry => entry.date === currentDate);\n\n if (correspondingData && correspondingData.link) {\n window.location.href = correspondingData.link;\n }\n })\n .on(\"mouseover\", function (event, d) {\n var title = d3.select(this).attr(\"title\");\n if (title) {\n var tooltip = d3.select(\"#tooltip\");\n tooltip.transition()\n .duration(200)\n .style(\"opacity\", 0.9);\n var tooltipContent = title;\n tooltip.html(tooltipContent);\n\n var cellBoundingBox = this.getBoundingClientRect();\n\n var tooltipWidth = tooltip.node().offsetWidth;\n var xPosition = cellBoundingBox.left + cellBoundingBox.width / 2;\n var yPosition = cellBoundingBox.top;\n tooltip.style(\"left\", xPosition + \"px\")\n .style(\"top\", yPosition + \"px\");\n }\n })\n\n .on(\"mouseout\", function (event, d) {\n var tooltip = d3.select(\"#tooltip\");\n tooltip.transition()\n .duration(200)\n .style(\"opacity\", 0)\n .on(\"end\", function () {\n tooltip.html(\"\");\n });\n });\n\n function updateCellStyles() {\n var isDarkTheme = document.body.classList.contains(\"dark-theme\");\n cells.style(\"stroke\", isDarkTheme ? \"#292a2d\" : \"#fff\")\n .style(\"stroke-width\", \"1px\")\n .style(\"fill\", function (d) {\n var currentDate = getDateBefore(d[1] * 7 + d[0]);\n var correspondingData = data.find(entry => entry.date === currentDate);\n return correspondingData ? (isDarkTheme ? darkColorScale(Math.pow(correspondingData.word_count, exponent)) : colorScale(Math.pow(correspondingData.word_count, exponent))) : \"#ccc\";\n });\n }\n\n updateCellStyles();\n\n document.body.addEventListener(\"themechange\", function () {\n updateCellStyles();\n });\n });\n </script>\n\n <style>\n @media (max-width: 767px) {\n #heatmap-container {\n display: none;\n }\n }\n\n /* 在桌面端时隐藏 .avatar */\n @media (min-width: 768px) {\n .avatar {\n display: none;\n }\n }\n\n .cell {\n stroke: #fff !important;\n stroke-width: 1px;\n fill: #ccc;\n cursor: default;\n /* 添加这一行 */\n }\n\n .dark-theme .cell {\n stroke: #292a2d !important;\n stroke-width: 1px;\n cursor: default;\n /* 添加这一行 */\n }\n\n .dark-theme .cell:not(.blue) {\n fill: #a9a9b3 !important;\n }\n\n .blue {\n cursor: pointer;\n }\n\n .dark-theme .blue {\n cursor: pointer;\n }\n\n #tooltip {\n position: absolute;\n background-color: white;\n border: 1px solid #a9a9b3;\n padding: 3px;\n /* 调整文字与边框的间距 */\n opacity: 0;\n font-size: 10px;\n /* 调整字体大小 */\n transform: translate(-50%, -100%);\n /* 将框定位到正上方居中 */\n line-height: 1;\n }\n\n .dark-theme #tooltip {\n background-color: #292a2d;\n }\n </style>\n\n <div class=\"nickname\"><%- theme.nickname %></div>\n <div class=\"description\"><%- markdown(theme.description) %></div>\n <div class=\"links\">\n <% if (theme.links !==undefined) { %>\n <% for (var key in theme.links){ %>\n <a class=\"link-item\" title=\"<%- key %>\" href=\"<%= theme.links[key] %>\">\n <% if(theme.links_text_enable) { %>\n <%= key %>\n <% } %>\n <% if(theme.links_icon_enable){ %>\n <i class=\"iconfont icon-<%- key.toLowerCase() %>\"></i>\n <% } %>\n </a>\n <% } %>\n <% } %>\n </div>\n </div>\n</div>\n```\n\n## 修改前后的script.js\n\n### 修改前\n\n```javascript\n// declaraction of document.ready() function.\n(function () {\n var ie = !!(window.attachEvent && !window.opera);\n var wk = /webkit\\/(\\d+)/i.test(navigator.userAgent) && (RegExp.$1 < 525);\n var fn = [];\n var run = function () {\n for (var i = 0; i < fn.length; i++) fn[i]();\n };\n var d = document;\n d.ready = function (f) {\n if (!ie && !wk && d.addEventListener)\n return d.addEventListener('DOMContentLoaded', f, false);\n if (fn.push(f) > 1) return;\n if (ie)\n (function () {\n try {\n d.documentElement.doScroll('left');\n run();\n } catch (err) {\n setTimeout(arguments.callee, 0);\n }\n })();\n else if (wk)\n var t = setInterval(function () {\n if (/^(loaded|complete)$/.test(d.readyState))\n clearInterval(t), run();\n }, 0);\n };\n})();\n\n\ndocument.ready(\n // toggleTheme function.\n // this script shouldn't be changed.\n () => {\n var _Blog = window._Blog || {};\n const currentTheme = window.localStorage && window.localStorage.getItem('theme');\n const isDark = currentTheme === 'dark';\n const pagebody = document.getElementsByTagName('body')[0]\n if (isDark) {\n document.getElementById(\"switch_default\").checked = true;\n // mobile\n document.getElementById(\"mobile-toggle-theme\").innerText = \"· Dark\"\n } else {\n document.getElementById(\"switch_default\").checked = false;\n // mobile\n document.getElementById(\"mobile-toggle-theme\").innerText = \"· Light\"\n }\n _Blog.toggleTheme = function () {\n if (isDark) {\n pagebody.classList.add('dark-theme');\n // mobile\n document.getElementById(\"mobile-toggle-theme\").innerText = \"· Dark\"\n } else {\n pagebody.classList.remove('dark-theme');\n // mobile\n document.getElementById(\"mobile-toggle-theme\").innerText = \"· Light\"\n }\n document.getElementsByClassName('toggleBtn')[0].addEventListener('click', () => {\n if (pagebody.classList.contains('dark-theme')) {\n pagebody.classList.remove('dark-theme');\n } else {\n pagebody.classList.add('dark-theme');\n }\n window.localStorage &&\n window.localStorage.setItem('theme', document.body.classList.contains('dark-theme') ? 'dark' : 'light',)\n })\n // moblie\n document.getElementById('mobile-toggle-theme').addEventListener('click', () => {\n if (pagebody.classList.contains('dark-theme')) {\n pagebody.classList.remove('dark-theme');\n // mobile\n document.getElementById(\"mobile-toggle-theme\").innerText = \"· Light\"\n\n } else {\n pagebody.classList.add('dark-theme');\n // mobile\n document.getElementById(\"mobile-toggle-theme\").innerText = \"· Dark\"\n }\n window.localStorage &&\n window.localStorage.setItem('theme', document.body.classList.contains('dark-theme') ? 'dark' : 'light',)\n })\n };\n _Blog.toggleTheme();\n // ready function.\n }\n);\n```\n\n### 修改后\n\n```javascript\n// declaraction of document.ready() function.\n(function () {\n var ie = !!(window.attachEvent && !window.opera);\n var wk = /webkit\\/(\\d+)/i.test(navigator.userAgent) && (RegExp.$1 < 525);\n var fn = [];\n var run = function () {\n for (var i = 0; i < fn.length; i++) fn[i]();\n };\n var d = document;\n d.ready = function (f) {\n if (!ie && !wk && d.addEventListener)\n return d.addEventListener('DOMContentLoaded', f, false);\n if (fn.push(f) > 1) return;\n if (ie)\n (function () {\n try {\n d.documentElement.doScroll('left');\n run();\n } catch (err) {\n setTimeout(arguments.callee, 0);\n }\n })();\n else if (wk)\n var t = setInterval(function () {\n if (/^(loaded|complete)$/.test(d.readyState))\n clearInterval(t), run();\n }, 0);\n };\n})();\n\ndocument.ready(\n // toggleTheme function.\n // this script shouldn't be changed.\n () => {\n var _Blog = window._Blog || {};\n const currentTheme = window.localStorage && window.localStorage.getItem('theme');\n const isDark = currentTheme === 'dark';\n const pagebody = document.getElementsByTagName('body')[0]\n if (isDark) {\n document.getElementById(\"switch_default\").checked = true;\n // mobile\n document.getElementById(\"mobile-toggle-theme\").innerText = \"· Dark\"\n } else {\n document.getElementById(\"switch_default\").checked = false;\n // mobile\n document.getElementById(\"mobile-toggle-theme\").innerText = \"· Light\"\n }\n _Blog.toggleTheme = function () {\n if (isDark) {\n pagebody.classList.add('dark-theme');\n // mobile\n document.getElementById(\"mobile-toggle-theme\").innerText = \"· Dark\"\n } else {\n pagebody.classList.remove('dark-theme');\n // mobile\n document.getElementById(\"mobile-toggle-theme\").innerText = \"· Light\"\n }\n document.getElementsByClassName('toggleBtn')[0].addEventListener('click', () => {\n if (pagebody.classList.contains('dark-theme')) {\n pagebody.classList.remove('dark-theme');\n // Dispatch the custom 'themechange' event\n var event = new Event('themechange');\n document.body.dispatchEvent(event);\n } else {\n pagebody.classList.add('dark-theme');\n // Dispatch the custom 'themechange' event\n var event = new Event('themechange');\n document.body.dispatchEvent(event);\n }\n window.localStorage &&\n window.localStorage.setItem('theme', document.body.classList.contains('dark-theme') ? 'dark' : 'light',)\n })\n // moblie\n document.getElementById('mobile-toggle-theme').addEventListener('click', () => {\n if (pagebody.classList.contains('dark-theme')) {\n pagebody.classList.remove('dark-theme');\n // mobile\n document.getElementById(\"mobile-toggle-theme\").innerText = \"· Light\"\n // Dispatch the custom 'themechange' event\n var event = new Event('themechange');\n document.body.dispatchEvent(event);\n } else {\n pagebody.classList.add('dark-theme');\n // mobile\n document.getElementById(\"mobile-toggle-theme\").innerText = \"· Dark\"\n // Dispatch the custom 'themechange' event\n var event = new Event('themechange');\n document.body.dispatchEvent(event);\n }\n window.localStorage &&\n window.localStorage.setItem('theme', document.body.classList.contains('dark-theme') ? 'dark' : 'light',)\n })\n };\n _Blog.toggleTheme();\n // ready function.\n }\n);\n\n```","tags":["博客"],"categories":["折腾"]},{"title":"解决“致命错误:无法读取远程仓库”问题","url":"/2024/01/19/解决“致命错误:无法读取远程仓库”问题/","content":"\n从昨天开始,我的博客出了故障。在终端输入hexo d,报错:\n\n<img width=\"600\" alt=\"错误信息\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/b3e231d8-ad46-4414-9b1c-3145c152fab3\">\n\n我此前没有进行过任何修改,所以确定问题不是出在博客文件夹里的配置。初步判断是网络问题,但关闭或打开梯子、更换节点、更换梯子,都没有效果。于是开始瞎折腾。试了但没有效果的办法有:\n\n- 重新设置用户名和邮箱\n - ```git config --global user.name \"yourname\"```\n - ```git config --global user.email\"[email protected]\"```\n- 重设SSH Key(参考[这个教程](https://blog.csdn.net/iiiliuyang/article/details/104203197))\n- 更新Hexo版本,重新安装所有npm插件\n- 重新添加SSH私钥路径\n - ```ssh-add /path/to/your/private/key```\n\n折腾了一天,还是没有解决,很沮丧。男朋友报告他那边git pull出现了相同的问题,但是另一个用Hexo搭建博客的朋友却没有出现这个问题,非常奇怪。\n\n过了一会,男朋友说问题解决了,是机场把端口22封禁了,需要把SSH端口强制改成443。于是我照葫芦画瓢。在macOS的/Users/{用户名}/.ssh文件夹下(需要开启“显示隐藏文件”)建立一个叫config的文件,添加如下内容:\n\n```\nHost github.com\n Hostname ssh.github.com\n IdentityFile /Users/chumiaochen/.ssh/id_rsa\n User git\n Port 443\n ProxyCommand nc -v -x 127.0.0.1:7890 %h %p\n```\n\n发现还是不行,错误信息如下:\n\n```\nssh_dispatch_run_fatal: Connection to UNKNOWN port 65535: Broken pipe\n```\n\n喂给GPT,叫我重新添加一下到私钥的路径:\n\n```\nssh-add /Users/{用户名}/.ssh/id_rsa\n```\n\n照做了。再次hexo d,出现新的错误:\n\n```\n致命错误:远端意外挂断了)\n```\n\n(这里不知道为什么有个右括号)\n\n再次询问GPT,叫我在config文件里再添加两句,添加后完整文件内容如下:\n\n```\nHost github.com\n Hostname ssh.github.com\n IdentityFile /Users/chumiaochen/.ssh/id_rsa\n User git\n Port 443\n ProxyCommand nc -v -x 127.0.0.1:7890 %h %p\n TCPKeepAlive yes\n ServerAliveInterval 120\n ```\n\n 再次hexo d,问题解决。","tags":["博客"],"categories":["折腾"]},{"title":"长沙人的长沙四日游","url":"/2024/01/12/长沙人的长沙四日游/","content":"由于男朋友访长,我和他进行了为期四日的长沙游。我作为长沙人,好像只带朋友来玩过一两次。事前我们并没有做很多攻略,基本上是拍脑袋想,不过从结果上来说,还是基本令人满意的。众所周知,长沙市中心人挤人。所以我们的基本思路是去人少的地方。又由于男朋友被我带入了攀岩坑,我们还划出一日去了攀岩馆。我将这次旅行的经验教训总结如下。\n\n# 商圈\n我热衷于网购,不爱逛街,因此去商圈基本是为了喝奶茶和吃饭。五一广场周边的商圈,不用想也知道人山人海。所以我们去了两个比较冷门的商圈,体验都还不错。\n\n## 华创\n华创国际广场是我家门口的商场,是近年才逐渐发展起来的。交通比较方便,位于地铁一号线开福寺站附近,出站后走十几分钟可以到达。也有一些公交车可以直达。里面主要是有一些吃的喝的。吃的选择挺多,就不一一列举了。茶颜悦色基本上不用排队,也有奈雪、喜茶、果呀呀、茉酸奶等等。特别推荐双双饮品店,豆沙主题的饮品都非常好喝。还有盒马。在这个商场吃了面屋猪一(下详)。\n\n## 银盆岭万达\n银盆岭万达广场(原来叫奥克斯广场)是河西的商场,离市中心比较远。交通还行,离地铁四/六号线六沟垅站很近。附近有茶颜,还有一家很大的鸳央咖啡(茶颜悦色旗下咖啡店),也有喜茶、果呀呀等。吃的不太多,推荐黄记煌,但我们吃的是一家叫君柒烤肉的自助烤肉店(下详,但不推荐)。我们去这家商场主要是为了攀岩,商场内有一家叫湘攀攀岩的攀岩馆,比较小,但难度和抱石都有(不过难度只有顶绳),难易适中(下详)。\n\n# 湖南博物院\n周三我们去了省博,体验很好。三层是梅山文化的展,似乎是展到今年年底。有很多怪力乱神的玩意我很喜欢。二层是马王堆的展。马王堆出土的展品种类繁多,令人目不暇接。必看的是省博三宝(我编的):素纱禅衣、T型帛画、辛追夫人遗体。目前也有特展,但我们没去看。逛到半路有家咖啡厅,里面有T型帛画上的金乌主题的蛋糕,38元:\n\n<img width=\"600\" alt=\"金乌蛋糕\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/11b0e0bc-cde6-4d6e-a724-a71adad9c255\">\n\n卖相非常好,味道就那样,吃起来不像是手工蛋糕,估计是厂里做的。不过可以买一个拍照玩。逛展逛到一半有东西吃,这个设计还是挺人性化的。\n\n展厅内时不时会有志愿者带游客逛展并解说,坏处是人多,好处是可以听讲解。要不要蹭讲解,请自行决定吧。其实很多展品底下都会有二维码,扫了可以有讲解,但是我们太懒了就没扫。门口也可以租那种戴耳机的讲解,20块一个人,我们嫌贵没租。\n\n全馆我最喜欢的是辛追墓及棺椁的1:1模型,非常震撼。特定时间会有投影动画可以看,还挺有趣的,我第一次看的时候头皮发麻,但这次看不知道为什么没有这种感觉了。\n\n<img width=\"600\" alt=\"棺椁模型一角\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/b1de38fe-bf62-4ec2-b48c-a54d8f34cf4c\">\n\n来都来了,怎么不买点文创呢?我比较喜欢的文创是有关锅碗瓢盆上的狸猫纹样(很怪的猫,完全没有猫样)和T型帛画上的金乌的。我买了两个手提包、一个金乌贴布、一套狸猫书签(商品名写的是回形针)。\n\n<img width=\"600\" alt=\"手提包\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/ba4a41a8-eeb1-408e-928f-272210fbac51\">\n\n手提包是狸猫(这次画得比较有猫样)和金乌组合的纹样,比我想象得大,因为之前看到有人吐槽不实用。我觉得装个手机钱包啥的还是挺好的。\n\n<img width=\"600\" alt=\"金乌贴布\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/781c66fc-6b86-4758-9b65-9b174f710afb\">\n\n这个贴布可以贴在包、书本或衣服上。我把它贴在我的MUJI手提包上,红蓝绝配!\n\n<img width=\"600\" alt=\"狸猫书签\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/fd9f1b2f-a264-4a0f-88ec-0bc6786b8875\">\n\n怪怪的猫的真面目。还没舍得拆,所以不知道实际上是否好用。\n\n需要注意的是,省博有淘宝旗舰店,但是很多文创产品旗舰店是没有的。所以如果有机会来,还是可以买点回去,送人自用都好。\n\n# 饮食\n\n## 茶颜悦色及其旗下饮品店\n\n关于茶颜悦色我要说的是,茶颜悦色很好喝,但是不值得排队一小时去买,更不值得为了它特意来一趟长沙。关于在哪里买茶颜悦色不要排队,我在上文已经推荐了一些冷门商场。顺着这个思路,可以再找找其他的冷门商场,或者干脆点外卖。根据我的经验,无奶油顶的饮品到手和当场喝只有比较小的差别,有奶油顶的饮品奶油和撒料是分装的,有点没有那个感觉了,还是比较推荐现场喝。\n\n茶颜悦色饮品的个人推荐:\n\n- 有奶油顶:三季虫(很浓的红茶香,口味略重)、蔓越阑珊(加了蔓越莓果酱之类的,口感偏酸)\n- 无奶油顶:声声乌龙(招牌)、桂花弄(桂花香气)、嫌弃黄茶版(豆香)\n- 奶盖:全部(literally全部,无一踩雷)\n\n茶颜悦色旗下还有鸳央咖啡和古德墨柠。其实比起茶颜悦色本色,我更推荐这两家。一是它们各有特点,二是不要排特别久的队。前者主打“日咖夜酒”——特调茶咖和低度数酒(每天16:30以后售卖),后者主打柠香味的奶茶,也有酒(同样是16:30后提供)。\n\n鸳央咖啡和古德墨柠饮品的个人推荐:\n\n- 鸳央咖啡·咖啡:没有特别讨厌的,随便点吧\n- 鸳央咖啡·酒:庄生晓梦蝶(紫苏桃子味,清甜。另外紫苏桃子是湖南特色小吃,也一并推荐)\n- 古德墨柠·奶茶:有凉风(基本上是散发柠檬香气的茶颜悦色)、春眠不觉晓(稍微有一点沙冰,柠檬味比有凉风重)\n- 古德墨柠·酒:还没喝过\n\n## 面屋猪一\n新开的,星期二吃了这家,据说是什么网红店,在深圳还是哪里很火?\n\n<img width=\"400\" alt=\"面屋猪一店面\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/2abc7dad-5da7-453d-a7da-66f9c21e1b32\">\n\n店面很小,目测可以坐十个人左右吧,所以虽然取号显示前面只有两桌,还是等了很久的位。服务态度很好,我们坐在店门口等,服务员看我们等了很久,给我们拿了两罐芬达,吃的时候还多送了一份小食,说不好意思让你们等了这么久。令人暖心!\n\n点单的纸上详细写了面的粗细、软硬程度、汤的浓淡、辣度等等,服务员会详细指导,也会告知怎样买单更优惠。价格大概是人均40,可以免费加两次面。我们只加了一次就吃饱了。\n\n<img width=\"600\" alt=\"面屋猪一(面、饮料、小食)\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/4be173be-1cfb-4796-9f07-3a87a763adc6\">\n\n一尝发现很好吃!不愧是网红店。汤很香,辣酱也很香(图里的还没放辣酱),但是有点辣,建议少放。图片中左的玉米粒是加的,之后倒进碗里了。中间的是小食——土豆泥沙拉、海草、腌笋。小食倒是中规中矩,可能是批发大包装。我以前很喜欢吃海草,每餐必点,结果看到淘宝有卖那种很大一包做好了的海草,只要十几块钱,大受震撼,从此不点了。但免费的还是爱吃。\n\n## 鲁哥饭店\n老朋友了,我自己经常吃,朋友聚会也在这吃过几次。味道很正宗,菜品基本没踩过雷。推荐酸萝卜牛百叶、咸蛋黄茄子。虽然是我个人的推荐,但这两个菜其实也是大众点评上大家最推荐的菜。所以来旅游的朋友可以照着大众点评点,一般不出错。我们那天点了三个菜:孜然牛肉、酸包菜粉条、藕汤。都很好吃,我尤其喜欢喝那个藕汤,它里面可能放了点糖,喝起来清甜爽口,搭配粉藕更是锦上添花。\n\n## 君柒烤肉\n\n看到店门口贴着“湘派烤肉”,想看看到底是怎么个湘派就进去了。价格很便宜,大众点评双人套餐人均55,是自助餐!可以说是白菜价了。\n\n但是吃了一餐,始终没get到“湘派”到底体现在哪里。感觉就是很普通的烤肉,没有特色,味道也很一般。所以外地来的朋友就不用吃这一家了。\n\n里面倒是有挺多好玩的,有烤肠机(好吃,但我为什么要在这里吃烤肠),还有自己打冰淇淋的机器(但不好吃)。除了烤物之外,还有炸物、蒸物(包子烧卖啥的)、甜品,但除了炸物我们没吃之外,其他的都挺不好吃的,尤其甜品,一吃就是厂里做的。\n\n总之不推荐。当时真应该去吃彭耕记的。\n\n## 三和面馆\n\n也是老朋友了,上回朋友来长沙请他们吃这个,惊艳所有人。我自己也点过很多次外卖。码子最推荐黄瓜皮牛肉,黄瓜皮很脆且有清香;其次是雪里红肉泥。主食推荐干拌面。粉我没吃过,不知道好不好吃。\n\n湖南的碱面似乎很出名,和北方的面不是一个风味,是偏硬的细面。喜欢的会很喜欢。如果没吃过,推荐尝试一下,反正也不贵,大众点评买那个18元的套餐即可,可以选黄瓜皮牛肉、红烧肉和雪里红肉泥,不过红烧肉的我没吃过。\n\n## 比例咖啡\n\n或许是长沙最出名的独立咖啡店?距一号线侯家塘站大概十几分钟步行的路程。我没有踩雷过,所以基本上都可以点。最推荐Dirty和手冲。Dirty的豆子偏苦,和冰牛奶相得益彰。手冲每天的豆单不一样,会写在正对着门的小黑板上。我周五点的是肯尼亚,是偏酸的莓果风味,闻起来确实有莓果香。我不太擅长分辨咖啡的风味,什么坚果、红酒之类的啥也闻不出,但花香和果香我闻出来很明显,而且很喜欢。所以我比较喜欢偏酸的咖啡。如果喜欢偏苦的,可以让店员推荐。咖啡上来时,一个店员小哥充满激情地介绍了该咖啡的风味特点,很有感染力。\n\n店内店外都有座位,天气好的话可以坐在店外边晒太阳边喝。店内比较小,空调效果很足很暖和,但歌单不怎么样。\n\n## 旺旺小吃\n\n老朋友三号,每次路过母校长郡中学(地铁一号线南门口站)都会买。面对着长郡校门右拐,直走到尽头就可以看到。一般打烊比较早,不清楚具体是几点,我周五是下午快五点的时候买的。\n\n个人的推荐是招牌香干、土豆丝和捆鸡。香干是那种很干很硬的,有嚼劲,回味无穷。土豆丝脆脆的,捆鸡是新品,也都很好吃。需要注意的是很辣!尤其是香干,非常辣,连我都需要喝很多水。但是有一开始吃就停不下来的魔力。\n\n我从2013年开始吃旺旺小吃,如今已经超过十年了。我看着它从长郡左边搬到右边,从5块一盒涨价到25(荤)/10(素)块一盒,感觉时光飞逝。现在荤菜的价格确实有点贵了,但又不是天天吃,偶尔买一次不要紧的。\n\n另有凉皮和凉面出售,也都非常推荐。喜欢清爽挂的朋友记得让店家别放芝麻酱(还是花生酱?不记得了)。\n\n# 攀岩\n考虑到城市面积,长沙的攀岩馆算是挺多的。比较出名的有两家香蕉攀岩、瞿海滨攀岩馆、湘攀攀岩。我们周四去的是湘攀攀岩。\n\n关于四家的概况:\n\n- 香蕉攀岩(凯德壹中心店):很小,只有抱石\n- 香蕉攀岩(珠江星环店):比较大,难度比较多,抱石只有中间一个岛。有设定儿童区,适合小孩玩\n- 瞿海滨攀岩馆:难度和抱石都有,抱石区很大,线路各个等级都有\n- 湘攀攀岩:难度和抱石都有,比较小,但比凯德壹香蕉要大\n\n湘攀白天基本没人,晚上人会比较多(不过基本所有的攀岩馆都这样,都是社畜)。社恐的建议白天去,想和大部队一起磕线的可以晚上去。我们爬了一个下午加一个晚上,下午教练和前台姐姐会(闲着没事地)来指导你,或者跟你一起爬。晚上氛围很好,大家会轮流爬同一条线,失败了会获得鼓励,成功了会收获掌声和欢呼。不过想来其他的攀岩馆应该也是这样的氛围。\n\n湘攀的线定得挺有意思的,大部分线需要一点技巧,基本没有纯粹的引体线。我尤其喜欢slab墙上的那些线路,有难度又好玩。\n\n# 总结\n\n以上就是一个长沙人的长沙旅行攻略,纯主观,有偏见,仅供参考。虽然近年来游客增加,体验有所下降,但是长沙确实是一个适合旅游的城市,如果思路得当,可以玩得很舒服。欢迎大家来长沙玩(最好在淡季虽然我也不知道什么时候是淡季)!","tags":["食物","运动","旅行"],"categories":["随笔"]},{"title":"购物分享(4)","url":"/2024/01/01/购物分享(4)/","content":"回国了!回国前后买的一大批东西到了。挑几个来写购物分享。\n\n# 衣服\n\n## 新雪丽棉服\n\n<img width=\"600\" alt=\"新雪丽棉服-卖家秀\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/2f05f4f6-6efa-480f-9239-de993c30dff8\">\n\n价格:¥295\n\n来源:小红书@For her\n\n---\n\n我钟爱的穿搭博主希希(小红书@For her)自制的棉服外套!采用高端原料、精致工艺、时尚设计(瞎吹)。领子可以立起或放下,共两种穿法。我上身如图(分别是领子立起、领子放下):\n\n<img width=\"600\" alt=\"棉服上身-领子立起\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/745cd5a3-7553-4b21-84d0-79fee1973bc6\">\n\n<img width=\"600\" alt=\"棉服上身-领子放下\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/1094b411-d124-40ca-b0f3-b66a61db7a94\">\n\n怎么说呢,有一种老干部风(?)的同时又有一些山系,反正我是很喜欢。希希刚发设计图开预售的时候,我想这啥啊不买,结果做出来了,她一发上身图,我就后悔没有上车!于是连夜转账,看到希希确认收款,终于松了一口气。\n\n有一些设计上的小细节我很喜欢:(1)口袋带按扣;(2)内衬是好看的格子图案,敞开穿或者把袖子翻上去的时候会有一种别致心机感。一些做作摆拍:\n\n<img width=\"600\" alt=\"棉服内衬及美甲\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/247dd2b5-f35e-4864-b71a-564be7778e0b\">\n\n(顺便展示一下自己做的美甲)\n\n## 粉红围巾\n\n<img width=\"600\" alt=\"粉红围巾\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/b5165c71-7f49-4c27-91ee-3d9916b145e4\">\n\n价格:¥129.9\n\n来源:微店(已售罄)\n\n---\n说是某品牌(看图)的原单,不知真假。不过挺舒服也挺好看的。材质是羊绒羊毛混纺。我拍得太丑了就不放上身图了,总之挺好看百搭一围巾。\n\n## 便宜牛仔裤\n\n\n<img width=\"600\" alt=\"牛仔裤\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/d6c26ec4-4b2e-4cc1-9f45-c4733f940170\">\n\n价格:¥23.8\n\n来源:拼多多(已售罄)\n\n---\n\n希希粉丝群的群友喵少推荐的便宜裤子。斜拉链的设计我有点不喜欢,但二十块钱要什么自行车呢?而且我平常也不爱把上衣扎到牛仔裤里,主打一个怎么舒服怎么来。\n\n上身是阔腿裤的版型:\n\n<img width=\"600\" alt=\"牛仔裤上身\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/15f6c71d-423e-4e5e-97f2-9d6086ac8e56\">\n\n居然无可挑剔!明天就穿这一套出门吃烧鸟(并没有什么关系就是了)。\n\n# 书\n\n## 《离开学术界实用指南》\n\n<img width=\"600\" alt=\"离开学术界实用指南\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/e17e9680-679b-45a0-9a78-79e5afa012d2\">\n\n价格:¥25.78\n\n来源:多抓鱼(品相良好)\n\n---\n\n正适合我的一本书。拿到手发现开本比较小,可以放在包里,需要时随时拿出来阅读(不是)。目前看了一章,觉得说的很多事情都有些道理,如果读完有收获的话可能会在博客写读后感吧。\n\n## 《我破碎的真理子》\n\n<img width=\"600\" alt=\"我破碎的真理子\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/8f9f5be7-eaf4-45ee-a9fb-1d73bee969dc\">\n\n价格:¥32\n\n来源:天猫·红阅图书专营店(我买的链接没了,最新的链接在[这里](https://item.taobao.com/item.htm?id=737920486590),比我买的便宜,快买)\n\n---\n\n早就在汉化组的微博看过的漫画,终于引进了实体书,于是购买补档。我看过最好的短篇之一,但建议在情绪稳定的时候阅读。首发送了很多周边,有明信片光栅卡等等,我最喜欢的是这个:\n\n<img width=\"600\" alt=\"透明卡片\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/9afaafef-dcf4-41e4-a869-85e3436aafda\">\n\n卡面是透明的,可以像这样叠在不同背景上,形成不同的颜色。我特意选了在LA看到的大海作为背景,想和剧情呼应。\n\n此外,本书还贴心地附送了两封信:\n\n<img width=\"600\" alt=\"信\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/d931b62d-7fe0-45c7-977c-d7fa049b3ed8\">\n\n我还没看,准备读一遍实体书复习再看。不过既然是那样的剧情,感觉这两封信确实很有必要。\n\n国内实体书删减了一段未成年人抽烟的场景,对剧情没有影响。但我其实挺喜欢那一段来着。\n\n# 贝尔金手机支架\n\n<img width=\"600\" alt=\"手机支架\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/ca89cd5b-e778-4b8a-adfd-2dae391aa644\">\n\n价格:¥137.98\n\n来源:[天猫超市](https://item.taobao.com/item.htm?id=710304946420)\n\n---\n\n之前不是分享过买的泡泡骚吗,其实在那之前,我就买了一个贝尔金的磁吸手机支架寄到了家。只是我迫切想要一个支架,国外泡泡骚又便宜五十块钱,所以又买了一个泡泡骚。计划是回去把泡泡骚淘汰给我爸,然后我用贝尔金。\n\n结果回来之后给爸一试,爸说他要贝尔金,我只好继续用泡泡骚了(悲)。\n\n贝尔金这个金属支架明显质感比塑料的泡泡骚要好。如图所示,它立起来是个支架,不过在手持手机时也可以把手指穿过去起到辅助作用。用爸的手机简单一试:\n\n<img width=\"600\" alt=\"手机支架-手持\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/20ab00ff-8282-4265-9a2a-4f11b5068ef5\">\n\n总之,我的评价是,好好好,快买。而且这个比泡泡骚便宜!\n\n# 盒马草莓盒子蛋糕\n\n<img width=\"600\" alt=\"蛋糕\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/3bb24293-456a-4d6c-b097-372c16733566\">\n\n价格:¥79\n\n来源:盒马\n\n---\n\n好吃快吃!今天跟表妹逛盒马的时候买的,据她说很好吃,回来一尝果然惊艳。是比较淡的味道,草莓是新鲜草莓的味道(而不是裹了糖浆那种),吃得出来品质很好。奶油是动物奶油。蛋糕胚也很松软。唯一的不足可能是上面草莓果酱的味道不是很突出,但这更像是个人口味差异,而不是它的缺陷。\n\n盒马另有99块的车厘子蛋糕在售,不知道怎么样,有机会尝试一下。","tags":["工具","服饰","食物","书籍"],"categories":["购物"]},{"title":"制作hexo标签墙","url":"/2023/12/22/制作Hexo标签墙/","content":"\n# 背景\n今天闲来无事,想起cyx曾经发给过我的一个人的博客的[标签墙](https://mantyke.icu/tags-wall)。她是用Hugo搭的博客,研究了一下代码,感觉Hugo有一个特定的插件可以实现这个,但是Hexo没有。于是准备手搓一个。\n\n这一过程当然得到了ChatGPT的很多帮助,或者说Javascript代码基本上都是它写的(我才刚学到用Javascript算小学数学题……)。我只是修改了一些CSS样式等等。过程如下。\n\n# 步骤\n\n## 1. 准备数据\n\n首先,我创建了source/_data目录,并在其下创建了一个tag_groups.yml文件,用来定义标签及其分类。\n\n```\n标签1: 分类A\n标签2: 分类B\n标签3: 分类C\n……\n```\n\n## 2. 修改tag.ejs\n\n在我的主题模板文件 tag.ejs 中,我添加了以下代码来展示标签,并为每个标签添加了一个数据属性来存储其分类。\n\n```html\n<div class=\"tag-cloud-tags\">\n <% sortedTags.forEach(function(tag) { %>\n <% var tagName=tag.name; %>\n <% var tagGroup=tagGroups[tagName] ? tagGroups[tagName] : '未分类' ; %>\n <a class=\"tag\" href=\"<%- url_for(tag.path) %>\"\n data-tag-group=\"<%- tagGroup %>\">\n <%- tagName %><small>(<%- tag.length %>)</small>\n </a>\n <% }); %>\n</div>\n\n<% } else { %>\n <p>未找到标签分组数据。</p>\n <% } %>\n\n <div id=\"tag-background\"></div>\n <div id=\"tag-group-name\"></div>\n ```\n\n## 3. CSS样式\n\n为了使标签墙看起来更美观,我添加了一些基本的 CSS 样式,并为夜间模式定义了不同的颜色。\n\n```css\n:root {\n --tag-border-color: #ddd;\n /* 标签文本颜色 */\n}\n\nbody.dark-theme {\n --tag-border-color: #a9a9b3;\n /* 夜间模式下的边框颜色 */\n}\n\n.tag {\n display: inline-block;\n margin: 0 10px;\n padding: 5px 10px;\n border: 1px solid var(--tag-border-color);\n transition: opacity 0.3s;\n}\n\n.tag:hover {\n cursor: pointer;\n opacity: 1;\n /* 鼠标悬停时,标签不会减淡 */\n}\n\n.dimmed {\n opacity: 0.3;\n /* 减淡显示的样式 */\n}\n\n#tag-group-name {\n display: none;\n /* 默认不显示 */\n position: fixed;\n left: 50%;\n bottom: 10%;\n /* 或根据需要调整 */\n transform: translateX(-50%);\n font-size: 3em;\n /* 大字号,根据需要调整 */\n z-index: 9999;\n /* 确保它在页面内容之上 */\n color: var(--tag-border-color);\n /* 使用同样的颜色 */\n padding: 0.5em 1em;\n /* 内边距,根据需要调整 */\n border-radius: 10px;\n /* 圆角边框 */\n transition: opacity 0.3s, bottom 0.3s;\n /* 平滑过渡效果 */\n opacity: 0;\n pointer-events: none;\n /* 确保鼠标事件可以透过它传递 */\n}\n\n@media (prefers-color-scheme: dark),\n.dark-theme {\n #tag-group-name {\n color: var(--tag-text-color);\n /* 夜间模式的文本颜色 */\n }\n}\n```\n\n## 4. JavaScript交互\n\n最后,我通过 JavaScript 添加了交互效果,当鼠标悬停在标签上时,显示标签的分类,并减淡其他分类的标签。\n\n```html\n<script>\n document.addEventListener('DOMContentLoaded', function () {\n var tags = document.querySelectorAll('.tag-cloud-tags a');\n var groupNameDisplay = document.getElementById('tag-group-name');\n\n tags.forEach(function (tag) {\n tag.addEventListener('mouseover', function () {\n var group = this.getAttribute('data-tag-group');\n groupNameDisplay.textContent = group; // 设置分类名称文本\n groupNameDisplay.style.display = 'block'; // 显示分类名称\n groupNameDisplay.style.opacity = 1; // 使其可见\n groupNameDisplay.style.bottom = '20%'; // 提高位置使其更可见\n\n tags.forEach(function (otherTag) {\n if (otherTag.getAttribute('data-tag-group') !== group) {\n otherTag.classList.add('dimmed');\n }\n });\n });\n\n tag.addEventListener('mouseout', function () {\n groupNameDisplay.style.opacity = 0; // 使其透明\n groupNameDisplay.style.bottom = '10%'; // 降低位置\n groupNameDisplay.style.display = 'none'; // 再次隐藏\n\n tags.forEach(function (otherTag) {\n otherTag.classList.remove('dimmed');\n });\n });\n });\n });\n</script>\n```\n\n## 5. 小修改:移动端的点击效果\n\n如果仅做此前的修改,会导致在移动端时,点击标签直接跳转了子页面,没有显示标签墙的突出选中分类的效果。因此,我希望实现移动端点击一次时突出显示选中分类、点击两次时才跳转至子页面。添加如下Javascript代码:\n\n```html\n<script>\n document.addEventListener('DOMContentLoaded', function () {\n var tags = document.querySelectorAll('.tag-cloud-tags a');\n var groupNameDisplay = document.getElementById('tag-group-name');\n\n function handleTagInteraction(currentTag, isMouseOver) {\n var group = currentTag.getAttribute('data-tag-group');\n groupNameDisplay.textContent = group;\n groupNameDisplay.style.display = isMouseOver ? 'block' : 'none';\n\n tags.forEach(function (tag) {\n if (isMouseOver && tag.getAttribute('data-tag-group') !== group) {\n tag.classList.add('dimmed');\n } else {\n tag.classList.remove('dimmed');\n }\n });\n }\n\n tags.forEach(function (tag) {\n // 鼠标悬停效果\n tag.addEventListener('mouseover', function () {\n handleTagInteraction(this, true);\n });\n\n tag.addEventListener('mouseout', function () {\n handleTagInteraction(this, false);\n });\n\n // 移动端点击效果\n tag.addEventListener('touchend', function (event) {\n // 阻止默认的链接跳转\n event.preventDefault();\n\n // 切换激活状态\n if (!this.classList.contains('active')) {\n // 移除之前激活的标签的激活状态\n document.querySelector('.tag-cloud-tags a.active')?.classList.remove('active');\n\n // 激活当前标签并应用效果\n this.classList.add('active');\n handleTagInteraction(this, true);\n } else {\n // 如果已经激活,则允许链接跳转\n window.location.href = this.href;\n }\n });\n });\n });\n</script>\n```\n即可。\n\n## 不知道什么修改\n\n由于(1)排序逻辑突然挂了,(2)移动端不显示分类大字,我在GPT的指导下修改了一些代码。作为备份,我把修改后tag.ejs的完整代码放在下面(有些缩进是乱的,我懒得改了):\n\n```html\n<%# this page will judge whether current page is 'tag.' url:'http://localhost:4000/tag/' return false.\n url:'http://localhost:4000/tags/test/' return true. if you enter 'tag' page by click link will show all tags.\n otherwise if you enter 'tags' by click post header link will show the single tag of this post. how to add a tag\n page: 1. hexo new page \"tag\" 2. cd source/tag/index.md 3. add layout pattern like this: --- title: '''tag''' date:\n 2019-06-09 09:56:49 layout: tag --- %>\n\n <% if(is_tag()){ %>\n <%- partial('_page/tag', {pagination: config.tag, index: true}) %>\n <% }else{ %>\n <div class=\"container\">\n <div class=\"post-wrap tags\">\n <h2 class=\"post-title\">- 标签 -</h2>\n <% if (site.data.tag_groups) { %>\n <% var tagGroups=site.data.tag_groups; %>\n <% var tagsArray=[]; site.tags.each(function(tag) { tagsArray.push({ name: tag.name,\n path: tag.path, length: tag.length }); }); var sortedTags=tagsArray.sort(function(a,\n b) { return a.name.toLowerCase().localeCompare(b.name.toLowerCase()); }); %>\n\n <div class=\"tag-cloud-tags\">\n <% sortedTags.forEach(function(tag) { %>\n <% var tagName=tag.name; %>\n <% var tagGroup=tagGroups[tagName] ? tagGroups[tagName] : '未分类' ; %>\n <a class=\"tag\" href=\"<%- url_for(tag.path) %>\"\n data-tag-group=\"<%- tagGroup %>\">\n <%- tagName %><small>(<%- tag.length %>)</small>\n </a>\n <% }); %>\n </div>\n\n\n <% } else { %>\n <p>未找到标签分组数据。</p>\n <% } %>\n <div id=\"tag-background\"></div>\n <div id=\"tag-group-name\"></div>\n </div>\n <% } %>\n\n<style>\n :root {\n --tag-border-color: #ddd;\n --tag-text-color: #ddd;\n /* 标签文本颜色 */\n }\n\n body.dark-theme {\n --tag-border-color: #a9a9b3;\n /* 夜间模式下的边框颜色 */\n --tag-text-color: #a9a9b3;\n }\n\n .tag {\n display: inline-block;\n margin: 0 10px;\n padding: 5px 10px;\n border: 1px solid var(--tag-border-color);\n transition: opacity 0.3s;\n }\n\n .tag:hover {\n cursor: pointer;\n opacity: 1;\n /* 鼠标悬停时,标签不会减淡 */\n }\n\n .dimmed {\n opacity: 0.3;\n /* 减淡显示的样式 */\n }\n\n #tag-group-name {\n display: none;\n /* 默认不显示 */\n position: fixed;\n left: 50%;\n bottom: 10%;\n /* 或根据需要调整 */\n transform: translateX(-50%);\n font-size: 3em;\n /* 大字号,根据需要调整 */\n z-index: 9999;\n /* 确保它在页面内容之上 */\n color: var(--tag-border-color);\n /* 使用同样的颜色 */\n padding: 0.5em 1em;\n /* 内边距,根据需要调整 */\n border-radius: 10px;\n /* 圆角边框 */\n transition: opacity 0.3s, bottom 0.3s;\n /* 平滑过渡效果 */\n opacity: 0;\n pointer-events: none;\n /* 确保鼠标事件可以透过它传递 */\n }\n\n @media (prefers-color-scheme: dark),\n .dark-theme {\n #tag-group-name {\n color: var(--tag-text-color);\n /* 夜间模式的文本颜色 */\n }\n }\n</style>\n\n<script>\n document.addEventListener('DOMContentLoaded', function () {\n var tags = document.querySelectorAll('.tag-cloud-tags a');\n var groupNameDisplay = document.getElementById('tag-group-name');\n\n tags.forEach(function (tag) {\n tag.addEventListener('mouseover', function () {\n var group = this.getAttribute('data-tag-group');\n groupNameDisplay.textContent = group; // 设置分类名称文本\n groupNameDisplay.style.display = 'block'; // 显示分类名称\n groupNameDisplay.style.opacity = 1; // 使其可见\n groupNameDisplay.style.bottom = '20%'; // 提高位置使其更可见\n\n tags.forEach(function (otherTag) {\n if (otherTag.getAttribute('data-tag-group') !== group) {\n otherTag.classList.add('dimmed');\n }\n });\n });\n\n tag.addEventListener('mouseout', function () {\n groupNameDisplay.style.opacity = 0; // 使其透明\n groupNameDisplay.style.bottom = '10%'; // 降低位置\n groupNameDisplay.style.display = 'none'; // 再次隐藏\n\n tags.forEach(function (otherTag) {\n otherTag.classList.remove('dimmed');\n });\n });\n });\n });\n\n</script>\n\n<script>\n document.addEventListener('DOMContentLoaded', function () {\n var tags = document.querySelectorAll('.tag-cloud-tags a');\n var groupNameDisplay = document.getElementById('tag-group-name');\n var currentlySelectedTag = null;\n\n function applyDimEffect(tagToHighlight) {\n var group = tagToHighlight.getAttribute('data-tag-group');\n groupNameDisplay.textContent = group;\n groupNameDisplay.style.display = 'block';\n\n tags.forEach(function (tag) {\n if (tag !== tagToHighlight && tag.getAttribute('data-tag-group') !== group) {\n tag.classList.add('dimmed');\n }\n });\n }\n\n function clearDimEffect() {\n groupNameDisplay.style.display = 'none';\n tags.forEach(function (tag) {\n tag.classList.remove('dimmed');\n });\n }\n\n tags.forEach(function (tag) {\n // 鼠标悬停效果(桌面端)\n tag.addEventListener('mouseover', function () {\n applyDimEffect(this);\n });\n\n tag.addEventListener('mouseout', clearDimEffect);\n\n // 移动端点击效果\n tag.addEventListener('click', function (event) {\n if (currentlySelectedTag !== this) {\n // 阻止默认行为并应用减淡效果\n event.preventDefault();\n clearDimEffect();\n applyDimEffect(this);\n currentlySelectedTag = this;\n } else {\n // 允许默认行为,跳转链接\n currentlySelectedTag = null;\n }\n });\n });\n\n // 在移动端,点击页面其他部分移除减淡效果\n document.addEventListener('click', function (event) {\n if (event.target.closest('.tag-cloud-tags a') === null) {\n clearDimEffect();\n currentlySelectedTag = null;\n }\n });\n });\n</script>\n```\n\n# 结语\n希望这篇文章能帮到有同样需求的人。但是本人不会写代码,只是把GPT给我写的代码原样抄上来,所以不对任何可能出现的bug负责,也不知道该怎么调试……如果按照我的步骤来,但出现了bug,就请自己加油吧!","tags":["博客"],"categories":["折腾"]},{"title":"2023小结","url":"/2023/12/15/2023小结/","content":"不记得是生病起还是疫情开始起,我的生活就失去了实感。我每度过一天都像没有度过一样。但今年按理来说应该是较为特殊的一年,因为这一年我大部分时间都在国外。然而我对所有事情都没有太深的印象。我开始翻阅今年写过的日记,发现年初说过想要多写日记,“像是为未来的失忆做准备那样、事无巨细地写下来吧”。但我现在连写过这句话的事情都不记得了。\n\n2月7日和cyx出去玩,日记记载吃了土豆泥卤粉、喝了4M咖啡。土豆泥卤粉我有印象,很是不错,但是咖啡的味道我已经忘了。聊了什么也不记得了。那天还有一件重要的事情,就是我抽了好几个扭蛋,其中有一个镜音连。我当时想着如果有机会见面的话,送给rhl。rhl现在是我的男朋友。\n\n<img width=\"400\" alt=\"扭蛋\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/4e45bbad-3c21-4489-9f1e-ce20f227ebdc\">\n\n我和rhl在英国见了很多次面,第一次在5月21日。中途发生了很多事,回过头来才发现已经交往这么久了。比较印象深刻的是他有一天(当时好像还不是特别熟)突然问我要不要一起去酒吧看欧联杯。这好像是首次正式约会。日记记载,他说手臂被蚊子咬了很痒,我就抠他的手臂,然后他突然把我的手抓起来玩。牵手的一瞬间我突然心动了一下。但这件事情也是看了日记才想起来的。还有一次是在6月14日的晚上,我们打电话聊到两点半,然后他提议睡觉的时候也不挂电话,我说这样好像情侣哦,他说想趁着我没走给我多一点体验(情侣体验卡?)。于是我们听着对方的呼吸声睡着(假的,被微信降噪掉了),第二天5点多醒来聊了两句,之后他手机没电了,才结束通话。\n\n<img width=\"200\" alt=\"通话记录\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/139e992c-2fce-42d5-9c86-8afb435c9ee2\">\n\n过了几天我们就在一起了。\n\n这段关系能成需要多方面的条件,其中之一就是我得肉身前往英国。2023年的前两个月我一直在为雅思焦虑,第一次起初没过,然后考了第二次,刚考完(2月27日)就收到了第一次复议成功的通知。口语增加了0.5分,意味着小分刚好够了。但当时第一反应是:第二次考试的两千块白花了。日记记载,得知复议成功的前一天晚上,也就是考完第二次的当天晚上,我点了安妮意大利餐厅的外卖吃。一百二十块的东西一扫而光,像是一种提前庆祝。\n\n后来收到了第二次的成绩,口语仅6分,令我百思不得其解。我第二次口语比第一次发挥好太多,和考官谈笑风生。如果我更好奇一些,我就复议了,但我忍住了。\n\n雅思之后让我焦虑的是mgfm(我在牛津和伯克利的合作导师)和研院的行政。等mgfm的邮件很令人心焦。他有一次突然去度假,隔了半个月还是一个月才回我邮件,差点错过了ddl。但是还是要为他辩解,因为他正常工作的时间回邮件是挺快的。研院的行政一开始同意我先去英国后去美国,答应给我三个月英国的资助和三个月美国的资助,但我去找她时又换了说法,说学校没同意,只是先看看。还说我去英国的话,现在办签证,只能去一个月,没有必要。我说我签证已经办好了。她大惊,问我的财产证明从哪来的,我说现在办学生签可以不用财产证明。她大怒又不能发作,只能咬牙切齿地说你这样是违规的,我说好的老师我知道了。\n\n这段时间我经常呕吐,不知道是压力大还是身体不行,但无论如何可以确定不是怀孕。似乎是从今年开始,我刷牙之后刷舌苔,会因为戳得太里面而干呕数次,但不戳那么里面我又会觉得刷不干净。不记得是谁跟我说这是否是一种变相自残,我大骇。\n\n3月5日去了闭社社聚,主要活动是喝酒和打德扑。其实我对德扑并不是那么的感兴趣,比起这个我更希望玩玩喝酒游戏,或者来点真心话大冒险啥的。但是这样未免太不健康(难道赌博游戏就健康了吗?)。结果,大家很矜持地每人点了一杯酒,只有我在吭吭喝。最后结账的时候调酒师说,你喝得多,用美团买券吧。\n\n<img width=\"400\" alt=\"闭社社聚\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/4dad9f85-1dd0-464f-94fd-a86c7e1da97e\">\n\n有点想念闭社了,希望开学再多多组织社聚。\n\n3月7日去复诊,跟医生据理力争让减药,医生一听说我要出国,连连摇头,说到了陌生环境,减药可能有风险,只让我把两颗碳酸锂都放在晚上吃。我只好作罢。其实下半年来美之后,有一段时间我托妈寄的药被卡在海关,我的药不够吃,于是我每天只吃原来1/4的药量,差不多就是本来一天吃四种药,现在我拉到四天吃,每次吃一种。即便这样也平安无事。我就想我是不是好了。但是尝试验证这件事可能会付出极大代价,所以我放弃。下次复诊是4月4日,在我的软磨硬泡之下,医生终于同意给我减一颗碳酸锂。我心情大好,带着相机去了小红书上刷到的网红地铁站——奥林匹克公园——拍海棠花。结果当天下雨,海棠花掉了很多,导致我拍到了一些滑稽的照片:\n\n<img width=\"600\" alt=\"海棠花\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/f8897220-bb87-4873-9a48-a2b586b2aa05\">\n\n3月17日我报名了吉他协会组织的编曲课,但是到现在还有两节课没上,因为我太拖延了,一首曲子到现在也没写完,就没法上课。\n\n3月24日和mj出去玩,这是他去德国之前我们最后一次出去玩。去了双风车咖啡馆,用三顿半的罐子兑换礼品。我兑了一杯咖啡、一个猫围兜和一个不知道叫什么的可以反光的带子。猫围兜有防窒息设计,如果受了太大的力,卡扣会打开,围兜会脱落。我给猫戴上之后,每过一个夜,第二天早上就会发现卡扣打开的围兜出现在地上,每晚如此,很神秘。但是白天刚给他戴上的时候,猫与围兜看似相安无事。终于有一天,猫不知道把围兜脱到哪去了,不记得有没有找到了,也可能找到了但随手放到哪里去了。\n\n4月5日去文身。其实仔细看画面是有bug的,但我不说应该没人会注意看,所以我不说。\n\n<img width=\"400\" alt=\"文身\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/058cfe3e-066c-4577-b959-58112a29d7c1\">\n\n然后就去了英国。起初住的是一个Airbnb。巴基斯坦房东令人惊异地友好,甚至承包了我每天的晚饭。但是学校方面让我遭受了很大的打击:我上课一点也听不懂。而且不是英语的问题,我每个词都能懂,但是没有办法把这些词连成句子。我觉得我负责这方面的器官受到了一些不可逆的损伤,而且这个损伤还在加重。原本只有阅读时没办法把词连成句子,现在居然听别人说话也这样了。并且经过我这一年的实验,只有比较艰涩的哲学文本或对话会让我这个样子,其他比如日常聊天或者看前端课程都不会这样。所以今年终于下定决心,想要离开学术界另谋出路。\n\n抱着这种心情我来了美国。放弃听懂任何课程之后,我的生活就变得轻松。我还发现我在和mgfm单独交流的时候是可以听懂大部分的,难道是因为我太紧张于是集中了注意力?于是我猜测这是否是注意力的问题,并且想着在美国看一下ADHD。最后因保险不包而作罢。\n\n这之后的重大事件是给mgfm坦白了我因为吃药而注意力受损的事情,以及跟导师坦白了我毕业后不想留在学术界的事情。两人都表示理解,但mgfm说他不能替我的人生做决定。没错,不过我自己也已经做好了决定。rhl说我做这个决定的时候没有考虑他,说得不错,但我的状态只有我自己知道,这件事没办法和他人商量,或者就算商量也是一样的结果。\n\n不做学术了我能干嘛呢?一个选项是仍然做学术相关的工作,比如当编辑。另一个选项是做完全不同的工作,比如转码。我很怀疑我在后一个选项上是否有足够的恒心,但是即便选前一个,我也想必会比较快乐,虽然钱不如转码多,校稿也没有写代码开心。\n\n感受到写代码的开心是因为搭了这个博客。虽然严格来说,这代码不是我写的,是ChatGPT写的,但GPT是我调教的。每解决一个细小的问题都让我欢呼雀跃,而且我似乎很擅长发现这种细小的问题……也许我更应该当一个产品经理?\n\n不过,我更想每天躺在家里然后有钱从天上掉下来。\n\n12月去了友人hlx及其丈夫在LA的家。他们这个房子基本上就是我的梦中情房,除了我不会展示太多收藏品之外(他们展示了相机、黑胶、各种摆件等等)。我的最低要求是有咖啡机、烘干机和洗碗机,并且装修不能太丑,这个房子都满足。我在他们家享受了两天小资生活,第一天喝的拿铁(含拉花),第二天喝手冲,hlx丈夫甚至买了一套两只杯子,说是形状不同,会导致风味物质的挥发速度不同,进而会导致风味的不同。让我尝一尝是否真的有不同。真的。但我只喝出一个浓一点,一个淡一点,更多的我就品不出来了。hlx说这是智商税,我大笑。\n\n我的人生目标可能就是住上这样的房子吧!不过最好是可以买下来。\n\n(LA海边非常好看!)\n\n<img width=\"600\" alt=\"海滩\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/6082cba0-ffff-4dde-8964-a0443664dd0b\">\n\n站在海边我就在想今年到底成就了些什么事。谈了个恋爱、出了两趟国,这算不算某种成就?或者下了离开学术界的决定,这又算不算成就呢?也许只能以后再复盘了。","tags":["总结"],"categories":["随笔"]},{"title":"最近下载的小玩意:Sleeve 2、巴别塔圣歌、一生足迹、Bark+短信转发器、Niagara Launcher","url":"/2023/12/07/最近下载的小玩意:Sleeve 2、巴别塔圣歌、一生足迹、Bark-短信转发器、Niagara-Launcher/","content":"\n# Sleeve 2\n<img width=\"100\" alt=\"Sleeve 2图标\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/2b0f82c3-5848-45ae-9d79-dc7711e50f3c\">\n\n平台:macOS\n\n价格:$5.99\n\n---\n\n在主屏幕上显示正在播放的音乐的小工具,支持高度自定义。没有播放音乐的时候,显示是这样的(可以隐藏,但是它默认双击打开音乐APP,我觉得很方便,便保留了):\n\n<img width=\"600\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/b812d018-c321-4ca2-8acf-b258141aa2c0\">\n\n播放音乐的时候是这样的:\n\n<img width=\"600\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/57bbcf8d-73c7-4a0c-b8c9-36d0321bb80e\">\n\n其中需要说一下这个的位置。它的初始位置不是这样的,是我强迫症,想要它和其他小组件对齐(具体而言,是没有播放音乐时,右边缘和小组件右边缘对齐;播放音乐时,左右两边都和小组件对齐)。刚才说了,Sleeve 2支持高度自定义,所以我便修改参数实现了这一点。具体参数导出如下:\n\n> https://cowtransfer.com/s/4a7da3486bcd48 点击链接查看 [ BillowingSunset.sleevetheme ] ,或访问奶牛快传 cowtransfer.com 输入传输口令 xwi0p2 查看;\n\n其实我也不知道到底有没有对齐,懒得折腾了,看着像是对齐一样就行了。\n\n# 巴别塔圣歌\n\n<img width=\"400\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/0a4daeef-aabc-4f36-94a1-b50b0b8a7582\">\n\n平台:Windows\n\n价格:¥64\n\n---\n\n为了玩这个游戏安装了虚拟机(VMWare)。虚拟机本机有点卡,有时会闪退,其他的还好,但是不做推荐了。\n\n游戏本身很精美,视觉和音乐方面都是。游玩方式很特别,需要破译不同种族(职业?)的文字。除了破译文字之外,这个游戏以解谜为主,其中甚至包括类似华容道的关卡。多的不说了,免得剧透。\n\n我目前的进度是破译了第一种文字,然后在第二个种族那里卡关了,因为需要潜行,我很不擅长这类需要把握时机的游戏(但我也很不擅长华容道,所以也可以说我in general就不擅长游戏)。\n\n总之推荐,好游戏。\n\n# 一生足迹\n\n<img width=\"100\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/4db00e2c-17a2-431d-a3e0-0741737f360e\">\n\n平台:iOS\n\n价格:¥0(会员¥12/年)\n\n---\n\n可以将你去过的地方在地图上点亮的APP,轨迹可以连成线。效果如下(图片来自APP的示例壁纸):\n\n<img width=\"400\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/c83bcdfe-0098-4d61-8020-3c7dc54964fb\">\n\nAPP还是非常精美的。但我太宅了,下载它之后的几天都没有出门……所以只有从照片导入的位置有零星几个小点。不过总之还是挺好看的,而且本体免费,会员也不贵。推荐。\n\n# Bark+短信转发器\n\n<img width=\"100\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/7a0667ee-37a1-4555-b819-f9ecc3385021\">\n\n<img width=\"100\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/b981587d-e90a-41c9-a7c8-58a0e322a2ef\">\n\n平台:iOS(Bark)、Android(短信转发器)\n\n价格:¥0\n\n---\n\n是看了少数派的[这篇文章](https://sspai.com/post/84621)从而下载的。我只实施了文章的前半段,也就是安卓手机短信转发至iPhone的部分。\n\n我的备用机是冷门的Sony Xperia Ace II,目前插着国内卡接收验证码用。然后我之前登录美区Apple ID,总是要短信验证(最近不知道为啥突然不用了),而我基本上总是刚好不在家的时候需要登录美区Apple ID,然后经常忘记带备用机出门,所以就没法登录。而且就算带了备用机,要把它拿出来看短信也很麻烦(懒)。这两个APP解决了这一痛点。\n\n具体的设置请看少数派的文章。实现效果如下:\n\n<img width=\"400\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/9cac0cca-646e-47af-a293-744bed8375aa\">\n\n其中,手机图标来自[iconfont](https://www.iconfont.cn),URL是[这个](https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/ee922467-016d-4407-8236-58612d3d4021)。\n\n# Niagara Launcher\n\n<img width=\"100\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/3a7db44e-ef77-4e85-a6cd-0113c72bdc31\">\n\n\n平台:Android\n\n价格:¥0(订阅$9.99/年或$29.99买断)\n\n---\n\n订阅价格昂贵的启动器。我本来想支持正版的,但是那个付款界面一直显示错误啥的,我无奈只好下了盗版……\n\n虽然现在没啥人用第三方启动器了,但是我这个索尼备用机的默认界面实在是有点丑。我一开始在Play商店乱逛的时候看到了把安卓手机变成iOS样式的APP,于是试了一下,发现广告很多,而且在一些微妙的地方和iOS有差别,从而整体上显现一种劣质感。所以在好友mj的推荐下,下载了Niagara Launcher。\n\n折腾完了之后发现少数派也写过[相关文章](https://sspai.com/post/65279),所以我在此就不多介绍了,只放几张效果图。\n\n主界面(播放音乐时):\n\n<img width=\"400\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/9e2d5e43-615a-480e-8ffb-1a6efe5e0cb9\">\n\n搜索界面:\n\n<img width=\"400\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/d6fde824-f6e4-4eb2-8225-73f53035b48f\">\n\n最喜欢的!字母导航栏!滑动手指会有极顺滑的体验:\n\n<img width=\"400\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/2c070d48-526e-4b84-8864-7a917b785f35\">\n\n这个启动器的缺点就是太极简了,主屏幕只能放最多8个APP,对我来说刚好,但对于平常需要使用大量APP的人士来说就不合适了。所以出于相同的原因,不推荐主力机使用这个启动器。但是备用机就是拿来折腾的!所以非常推荐!","tags":["工具","游戏"],"categories":["折腾"]},{"title":"购物分享(3)","url":"/2023/12/04/购物分享(3)/","content":"\n竟然,连发三篇购物分享。回国之前一定不能再买了。\n\n# MUJI的一些衣服\n\n<img width=\"600\" alt=\"MUJI\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/2ae7af43-29a6-4ba0-9525-e829c7faf266\">\n\n价格:如图\n\n来源:[MUJI USA官网](https://www.muji.us)\n\n---\n\n主要是为了买第二件,在国内没买到的大棉袄子。第一件摇粒绒套头衫是凑单的,不记得是因为两件打折还是两件包邮了,总之不是重点。\n\n<img width=\"400\" alt=\"大棉袄子\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/5a453114-4b8f-4222-ad5f-942d5e1aa249\">\n\n(没有全身镜,将就一下。)\n\n大棉袄子和我想象的几乎完全一致,就是袖子有点长。衣长倒是差不多合适,可能稍微长了一点,但是我买这件基本上是为了搭配长裙的,所以外套长一点也无所谓。\n\n<img width=\"400\" alt=\"摇粒绒\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/f1f2281b-92a2-4f64-93e4-f42db2d77426\">\n\n摇粒绒这件版型居然很好,穿上像泰迪熊很可爱。就是颜色比较普通,不过不是这个色就不像泰迪熊了吧!\n\n# Adidas的一些衣服\n\n<img width=\"600\" alt=\"Adidas\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/e150f8d3-aeff-4f26-a5e6-8bedd560f82b\">\n\n价格:如图\n\n来源:[Adidas官网](https://www.adidas.com/us)\n\n---\n\n买前两件是因为便宜,后一件是因为好看。结果到手一试,都挺好看的。\n\n<img width=\"400\" alt=\"帽子\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/f9b29ce9-21a5-4599-a006-e9bda9a217ae\">\n\n帽子颜色很可爱!冷色调的粉色帽身搭配橙色的LOGO,居然不显得很突兀。我就是为了颜色才买的。帽型就是不出错的那种,也判断不出是否好看,毕竟我基本上戴所有帽子都合适(得意),所以没办法看出这顶帽子是否衬人。\n\n无论如何,它挺便宜的,满意。\n\n<img width=\"400\" alt=\"背心\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/206e0729-62c1-4b00-bd9a-d459b8c9a0cf\">\n\n这个背心,我发这张照片到一个大群里,群友都说我瘦了,还问我要链接!但我大概没瘦,所以是这个背心和拍照角度显瘦。\n\n这个背心国内卖两百多呢,所以如果人在美国的话可以买一件试试,确实挺好看的。明天准备穿着去爬墙。\n\n<img width=\"400\" alt=\"卫衣\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/293bc07b-c0f0-425d-922f-a04ef7b048ff\">\n\n一眼就被吸引住了的蓝色卫衣!这个蓝好特别!立刻花大价钱买了回来。到手一看,居然是加薄绒的,惊喜(因为感觉加一层绒会增加一些成本)。这个款式比较短,下摆又是收的,对我来说有点太时尚了,可能走运动风的时候可以穿。但是,我的原则是长裙搭一切,所以我认为它也可以搭长裙!特别是由于我太矮了,穿着这件衣服不会像模特那样露肚脐,所以穿一些中腰长裙应该也不会露肚脐,重大利好。\n\n唯一的缺点就是有点贵……\n\n# AirTag\n\n(都知道长啥样就不放图了)\n\n价格:$77.16(含税)\n\n来源:[Amazon](http://amazon.com)\n\n---\n\n去年过生日的时候,我的好友mj送了我两个AirTag,是从第三方店铺买的,应该是别人刻了字但不要了的。他本来选的是刻有“🐯”“🐱”还是啥的两个Emoji的AirTag,结果发过来的上面刻着“❤️至死”和“不渝❤️”。要不是他是gay,我都感动哭了,立刻想嫁了(不是)。之后他想去店铺追责,竟发现店铺倒闭了!\n\n这都是题外话了。这次我自己买了4个全新AirTag,把三个行李箱里各放了一个。剩下一个准备放钱包,然后至死不渝那两个,准备一个藏在自行车里,一个戴猫脖子上。为此还要购买相关的自行车配件和猫项圈。\n\nAirTag刚出来的时候我还想傻子才会买,结果转眼间就真香了,唉!\n\n# MOFT iPad mini保护套、笔套、磁吸贴纸\n\n<img width=\"600\" alt=\"MOFT\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/6b71109a-8497-4a4a-aed7-4920b96bab40\">\n\n价格:如图\n\n来源:[MOFT官网](https://www.moft.us)\n\n磁吸贴纸是凑单买的,因为是一次性的,准备拿回国再用,所以暂时无法测评,只能测评另外两样。\n\n这个保护套,它厉害了!可以通过不同的折叠方式实现不同角度的放置,甚至可以抬高iPad并将其立起:\n\n<img width=\"400\" alt=\"保护套/支架\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/fce1a227-b487-47eb-b0eb-6efe53b4b110\">\n\n我无法描述是怎么折的,有兴趣的朋友可以去官网看看。这是国内的品牌,淘宝也有官方店,比国外官网便宜很多。我是急需(不想iPad裸奔)所以才在国外买了。以后我可能想买它那个桌垫,不过感觉宿舍桌子放不下,再说吧。\n\n笔套相对而言就比较普通了。它的好处是增强了磁力,让Pencil可以吸在iPad的背面。不过吸在背面不就无法充电了吗!尝试把它吸在侧面,不是很稳当,而且也并没有充上电。所以我觉得它的使用场景可能是,要带出门的时候把笔吸到背面防丢,然后坐着不动的时候把笔从套子里取出来充电?未免有些太麻烦了吧?\n\n总之,保护套,推荐购买;笔套,不推荐。\n\n# 苏糖酸镁、甘氨酸镁\n\n<img width=\"600\" alt=\"iHerb\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/3947b176-bc6c-408f-bce1-8a769ad24d92\">\n\n价格:如图\n\n来源:[iHerb](https://www.iherb.com)\n\n---\n\n小红书上看到的,据说早上吃苏糖酸镁可以改善认知、思维等等,晚上吃甘氨酸镁能提高睡眠质量。我就买来尝尝。\n\n结果好像没什么用啊!\n\n其实是能感觉到有一点用的。早上吃了苏糖酸镁之后会比平常精神一点,但是持续时间不长,如果不喝咖啡的话,下午就想睡了。甘氨酸镁的作用时有时无。我的睡眠差主要差在质量差而不是入睡困难,就是我会做很多梦,睡很久(10+个小时),但是醒来还是很累。吃了它之后,有几天我会做梦比较少,早上也有动力起床,但也有几天我还是照旧。所以说好像没什么用。\n\n但也许是长期吃才有效?买都买了我就多吃一吃吧……\n\n# Butora攀岩鞋\n\n<img width=\"400\" alt=\"攀岩鞋\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/6ce0922d-d8c3-4446-a5e5-d9c0b923b07e\">\n\n价格:$129.26(含税)\n\n来源:[Amazon](http://amazon.com)\n\n---\n\n我买的是Butora Acro Comp这个型号,尺码是6 Narrow。之前买了一双5码的Butora,也能穿进去,就是紧得我难受,就退了买了这双。\n\n刚刚点进去看发现同一尺码又降了十几刀……难受。\n\n攀岩队的群友推荐的是Spider这个型号,但是亚马逊没有,我又急着要穿,想买个送货快点的(基本上就只有亚马逊了)。所以买了这一款。我个人喜欢穿鞋头尖一点的鞋,因为我不太擅长在小点上换脚,鞋头尖的话稍微好换一点。不过鞋头尖的鞋一般也比较aggressive,我是无所谓啦。\n\n群友还说Butora的鞋很适合亚洲人的脚后跟,确实,我的脚后跟基本上充满了鞋后跟,只有一点点空隙。不过我的那双Futura女款也差不多是这样,所以没感觉Butora比La Sportiva更适合亚洲人很多。\n\n穿着爬了一次墙,感觉没有Futura(35码)紧,不过也挺紧的(?什么废话)。Futura是我每爬完一条线都要马上把鞋脱下来,否则就痛得要死的程度,Butora这双是我可以不脱下来,但是这样也会很不舒服的程度。所以某种意义上算是刚好?\n\n# 其他\n还买了久仰大名的Fulton鸟笼伞,但是它一直running late,我现在好像不太想要了,应该会退掉。其他还买了花王的洗手液,挤出来是猫爪的形状,很可爱。再其他好像就没什么了。","tags":["工具","服饰","运动","健康"],"categories":["购物"]},{"title":"购物分享(2)","url":"/2023/11/25/购物分享(2)/","content":"\n购买的物品居然又攒到了一篇购物分享的量,这才过了多久!\n\n# Anker充电座、无线充电宝\n\n价格:充电座$112.46;充电宝$37.5\n\n来源:[Anker官网](https://www.anker.com)\n\n---\n\n一直很喜欢Anker这个品牌,买了不少他们家的产品。[上次](https://greendolphindance.com/2023/11/16/购物分享(1)/)购入无线充电座之后,觉得充电太慢,就又买了Anker这个,思前想后还是把原来的退了(如果以后有需要,再买一个Anker!)。又因为两件打折,又凑了一个无线充电宝。但这样一来我就有三个充电宝了,带不回国,刚好男朋友又来了,便把一个旧的Anker送给了他。完美解决!\n\n## 充电座\n\n<img width=\"400\" alt=\"Anker充电座\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/df20610b-c851-431c-93aa-54f5681441dd\">\n\n第一感觉:非常精致非常重,设计很巧妙。刚买回来的时候爱不释手,频频把玩。它不用的时候可以收成一个立方体随身携带:\n\n<img width=\"400\" alt=\"Anker充电座(折叠时)\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/91f4fb87-c904-4bfb-93b4-5d14db79f6bc\">\n\n用的时候再打开。斜面用于充手机,斜面后方的平面用于充AirPods,侧边伸出的部分用于充Apple Watch。连接方式是C to C,送一个充电头。\n\n充电当然不如有线快充快,但是比我之前买的第三方那个还是快多了。而且这个东西的使用场景就是没事的时候贴上去放着,所以我也不是很追求充电速度。 \n\n我的朋友jw想买Belkin的这一款充电座:\n\n<img width=\"400\" alt=\"Anker充电座(折叠时)\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/28e1f67f-b0c5-4a52-9a30-775bd87084c8\">\n\n但我觉得这个圆圆的好丑啊!不如Anker方方正正的好看!\n\n总之这个东西虽然贵,是否物有所值见仁见智,但是我还是非常满意非常喜欢。预计它将会陪伴我很多年。\n\n## 充电宝\n\n<img width=\"400\" alt=\"Anker充电宝\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/adda7ed3-d88a-4687-8126-92614564d4fa\">\n\n第一感觉仍然是非常精致,虽然是凑单随便买的,但是品质在线。拿来充了几分钟,有一个不满意的点是它比我的12 mini大一点,充的时候并非我想象的那样三边对齐,这一点不如原装的无线充电宝。除此之外应该是没有缺点的。\n\n# 泡泡骚\n\n<img width=\"400\" alt=\"Anker充电宝\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/d7fe5464-5264-4250-bcff-be747f11d854\">\n\n价格:$24.8(含税)\n\n来源:[Amazon](https://www.amazon.com)\n\n---\n\n购入了久仰大名的泡泡骚!因为比国内便宜大概五十块钱。买的是透明的,因为感觉别的颜色和花纹都好丑。\n\n第一感觉还是好精致,但是又说不上来哪里精致,可能是价格比较精致??就是我找不到任何可以让它掉价的东西,比如塑料接缝或者啥的。但值不值25刀还是见仁见智吧,我个人觉得挺好的。\n\n我是裸机,没有Magsafe壳,吸附的效果也很不错。基本上只要不狂甩都是不会掉的。取下来也很方便。直接拔比较难拔下来,技巧是抓住泡泡骚往平行于背板的方向挪,这样很容易就可以扯下来。\n\n唯一的不满就是无线充电的时候要把泡泡骚取下来,好麻烦啊(?)。但是不取下来是不可能的吧!所以算了!\n\n# iPad mini(官翻机)\n\n(大家都知道长啥样就不拍图了)\n\n价格:$609.27(含税)\n\n来源:[苹果官网](https://www.apple.com)\n\n---\n\n把手上的iPad air trade in,换了一个iPad mini。看起来是一次消费降级,实际上体验感飙升。我平常不太用iPad看视频等,所以大屏幕对我没有啥用处。倒是会看漫画,不过其实iPad mini的屏幕尺寸更接近于纸质漫画的页面大小。然后mini显然更加便携,这使得我平常甚至可以提一个小袋子出门,而不用背书包。等回国了,这个iPad甚至可以装进一般大小的皮包,刚好我平常喜欢背皮包。\n\n这台机器没有什么缺点,不过苹果员工的业务能力倒是需要培训一下。我由于买的是官翻机,trade in的钱不能直接抵扣付款,需要转换成礼品卡。我打电话询问,苹果员工一开始告诉我,如果我买了iPad mini,那礼品卡的钱可以作为退款退回到我的信用卡里。而当我拿到礼品卡,想再打电话询问如何操作时,另一个员工却告诉我礼品卡不可能折现,并且只能在美区使用。所以我得到了325刀用不出去的钱……于是立马买了一副AirPods pro二代,花费$249,但它又送了我$50的礼品卡……你妈的,套娃啊!我还买了小火箭(此前一直蹭朋友的用),但其他的真不知道往哪花了。我跟男朋友说,如果你下一台电脑换MacBook,我就把礼品卡里剩的钱都给你,然后在美国买了电脑人肉背回国。但是我们研究了一下午,感觉换Mac并不是最佳选择。所以可能最终这个钱还是花不出去。气死我啦!\n\n# 森永Hi-Chew(嗨啾)水果软糖\n\n<img width=\"400\" alt=\"Anker充电宝\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/80f3bad1-f4f3-497d-ace5-518b05971d2d\">\n\n价格:$6.49(两包,含税)\n\n来源:[Amazon](https://www.amazon.com)\n\n和男朋友及其友人攀岩后去吃了一家拉面店,吃完后服务生给我们分发的糖。浓浓的水果味,很好吃,回来之后立刻下单了。\n\n两包里一包是经典口味,另一包是热带口味。经典包括青苹果、葡萄、草莓三种口味,热带是菠萝、芒果、橙子,不过后者我还没拆,不知道味道。\n\n总之好吃好吃好吃,我昨天连续吃了一个小时,终于醒悟过来,停止了进食。一包不多,需要省着点吃!\n\n淘宝搜了一下,发现国内也有卖,可能有点小贵。感兴趣的朋友不妨一试。\n\n# GPT4\n\n价格:$20/月\n\n来源:[ChatGPT官网](https://chat.openai.com)\n\n---\n\n刚需,最近阅读障碍愈发严重,需要拿它来辅助读文献。虽然让它重构论证有点超过,但在文章里找东西、给一些总结等等,还是挺好使的。尤其是找东西,比肉眼找快太多了。\n\n除此之外还可以用来解读塔罗占卜牌面什么的(咦)。\n\n# 预告\n\n其实最近买的东西不止可以发一篇购物分享,甚至可以发两篇……除了以上物品以外,我还买了但是尚未送到的东西有:\n\n- Butora攀岩鞋\n- Fulton的鸟笼伞\n- 保健品(苏糖酸镁、甘氨酸镁)\n- MOFT的平板支架等\n- 四个AirTag\n- 阿迪达斯的一些衣服\n- 无印良品的一些衣服\n\n列出来发现也太多了!?而且除了这些可能值得一写的东西之外还买了攀岩镁粉、沐浴露、洗手液、一些菜啊等等,这个月可以说是超高消费了!但是我最近好像只有拆包裹的时候才会很快乐(悲)。","tags":["工具","食物"],"categories":["购物"]},{"title":"购物分享(1)","url":"/2023/11/17/购物分享(1)/","content":"\n最近买了不少东西,一是黑五到了,二是突然冒出来了各种需求……所以分享在这里。没有广告!\n\n# 阿玛尼5G唇釉\n\n<img width=\"400\" alt=\"Armani\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/6cd8cea3-6900-4786-b759-1b9230f8b76e\">\n\n\n价格:$87.75(三支)+$9(税)\n\n来源:[Armani官网](https://www.giorgioarmanibeauty-usa.com)\n\n---\n\n这个在国内被叫做5G唇釉,不知道为啥。英文名是Ecstasy Mirror Lip Gloss。我买了三个色号:400、502、503。\n\n## 400\n<img width=\"400\" alt=\"400\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/5a120e54-6b01-4208-8472-c17c164e6f02\">\n\n算是正红色?买之前在网上做功课,说是血浆红,但上嘴有点发玫。显白,我素颜涂都显得很白,但我没有特别多显白的需求。看全脸感觉素颜涂这个颜色显得特别煞有介事(?),有点太超过了,还是要带妆比较好。\n\n这一支的颜色我是不太满意的。因为平常我基本涂裸色,涂大红色的场合比较少,所以更想买一支拥有了就一劳永逸、不用买其他大红色口红的产品。但这个,就有点玫红,不是那种纯正大红色……所以回国了看看能不能出掉吧。\n\n## 502\n\n<img width=\"400\" alt=\"502\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/329a4d88-49ac-4099-a65c-2ee345b67edb\">\n\n好看!比503(见下文)更偏粉紫。我是素颜涂的,可以看出来不是很衬肤色,素颜看起来有一丢丢荧光,但是带妆涂肯定很美!\n\n买之前做功课说是樱花粉,实际上嘴也差不多是这个颜色,所以不错!\n\n## 503\n\n<img width=\"400\" alt=\"503\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/c5c6cea5-9a09-4959-94c8-e887b2245536\">\n\n\n三支里最喜欢的一支。比502偏红(橘?)一些。虽然不是那种显白型但是感觉素颜和带妆都可!带妆涂是这样:\n\n<img width=\"400\" alt=\"503带妆\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/b6945c5e-7b68-4d16-8406-bef01de8336e\">\n\n(我的马赛克是不是很精妙!)\n\n感觉这两张照片,不同光线下颜色有点不同,但大致就是那么个色吧!总之是挺好看的!\n\n## 赠品\n买唇釉送了两个香水小样,红色的Si Passion(区别于粉色的Si),还有ADGH Parfum:\n\n<img width=\"400\" alt=\"香水小样\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/a9692bd4-6342-47d1-8f9c-72a6ecd7a0e2\">\n\n两个都挺好闻的。Si是我一直喜欢但没买正装的(一直薅小样),是甜甜的有点女人的香味,ADGH是清新的味道,两者都不是很重。我没有很多形容香水的词汇量,但是这两个都还不错!\n\n# 戴森直板夹(翻新)\n\n<img width=\"400\" alt=\"直板夹\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/dedc7921-a7ed-4fd0-bdda-1925714dd407\">\n\n价格:$199.99(商品)+$20.50(税)\n\n来源:[NORDSTROM RACK](https://www.nordstromrack.com/?utm_source=NR_transactional&utm_medium=email&utm_campaign=RACK400Shipcfm&utm_channel=email_tran_ret_p&utm_term=744309&utm_content=20231115_tlogo)\n\n---\n\n下血本了!但也比淘宝自营店的官翻机(¥1890)便宜了几百块。关于这个东西,我根本没做功课,纯属冲动购买。所以拿到手发现它除了可以插着电用之外,还可以充电后无线使用,还是蛮惊喜的。\n\n拿到手迫不及待想试一试,结果没电。我就把它插在充电座上去做别的事,过了大概一个小时再去看,已经充满了。续航还没测试过,也懒得测试。而且要测试的话,把它一直开在那里还挺危险的(?)。\n\n充好电之后就可以试啦!调到了最低档(330华氏度),大概二十秒就加热完成了,很快!浅卷一个刘海:\n\n<img width=\"400\" alt=\"直板夹效果\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/addcdf93-ca2b-4ba8-882a-014b6f0aa081\">\n\n昨天没洗头,太油了,不好意思。一个初步印象是造型很快,不像我其他某些直板夹一样要夹好几次才能达到同样的卷度。此外,我感觉这个直板夹不会让头发被夹了之后变得毛躁,这可能也是戴森的卖点之一。但除此之外,好像没啥特别的。\n\n我不知道快速加热、快速造型、防止毛躁在技术上是否比较难实现,所以不知道这份溢价是否值得。但戴森总归是一个一劳永逸的选择。而且这是final sale,不能退换!所以我就既来之则安之了。明天拿给男朋友试下(?)。\n\n# 三合一无线充电座\n\n<img width=\"400\" alt=\"充电座\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/e933b984-3ab9-41f9-9376-468b8c6442c1\">\n\n价格:$19.99(商品)+$2.05(税)\n\n来源:[Amazon](https://www.amazon.com)\n\n杂牌的。之所以没在国内买,是因为价格差不多的情况下,国内的大多有点丑(比如我这个上面只有一个圈圈,但国内厂商会把丑丑的品牌名和LOGO印上去),而且我有点急着用,所以就买了。\n\n这个有圈圈的板子是充手机的,手表可以挂在上方进行充电,底座上还有一个突出用以充AirPods。很方便,出门只要带这一个东西就行了。缺点当然就是充得慢,还有一个小缺憾是AirPods实际上是有线充电,就没有那么优雅。\n\n<img width=\"400\" alt=\"充电座效果\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/e999b72c-e738-42f4-9632-070b8579783e\">\n\n除此之外还买了苹果官方推荐的Anker的三合一充电座(再次下了血本),是快充,而且耳机似乎也是无线充。等到货了补充到这里。准备回头一个充电座放家里,另一个充电座放学校,就不用带来带去的。工作了之后就单位放一个,租的房子里放一个,完美(想得好远)!\n\n# 首饰\n<img width=\"400\" alt=\"首饰1\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/0c45a3ec-f848-4168-a8f3-40c0cba056d3\">\n\n价格:找不到了!\n\n来源:应该是[SELENICHAST官网](https://selenichast.com)\n\n---\n\n官网账号里找不到这个订单,所以要么不是在官网买的,要么是作为Guest结算的,没有计入我的账号。诡异的是搜邮件也搜不到这个订单。所以不记得价格是多少了。\n\n买了蝴蝶耳坠、蝴蝶项链,还有一个塔罗牌主题的项链(命运之轮)。都很精致!但是塔罗牌项链意外地大,可能需要精心搭配一下。\n\n因为太满意所以又下了一单!\n\n<img width=\"400\" alt=\"首饰2\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/c27bcb9d-a068-4118-8e1a-732b8bfb06cf\">\n\n感觉都挺好看的,都想买!最终精选了三样。最期待那个星星月亮的手链!\n\n# 一些衣服\n\n## Theory牛仔裤\n\n<img width=\"400\" alt=\"牛仔裤\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/86aeda6e-196d-482e-afcf-11396170ef7a\">\n\n价格:$64.99(不含税)\n\n来源:[SAKS OFF 5TH](https://www.saksoff5th.com)\n\n---\n\n版型、做工、颜色都堪称完美的一条牛仔裤!原价$215,断码打折,火速购入最小码(24),感觉血赚。颜色大概这个样子:\n\n<img width=\"400\" alt=\"牛仔裤细节\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/d2e9a813-8c08-40f6-bd49-a4c111ecf280\">\n\n缺点就是吃饱了饭腰稍微有一点紧。不过我可以忍。\n\n## Sam Edelman及膝靴\n\n<img width=\"400\" alt=\"及膝靴\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/af23d373-4623-4ab5-860e-0b105adbf3f0\">\n\n价格:$55.98(不含税)\n\n来源:[SAKS OFF 5TH](https://www.saksoff5th.com)\n\n---\n\n原价$225,又被我捡了便宜了(不是)。因为不能退换,Final Sale就像是一场赌博,还好我裤子和鞋子都赌赢了。我不太穿迷你裙,但配稍微长一点的裙子也非常好看。颜色很特别,而且是真皮,很爱!\n\n图上的裙子也是我这一波一起买的,Tommy Hilfiger的皮裙,$~~89~~19.97。这一个比较失败,因为没仔细看详情,导致腰买大了一圈!其实还是可以穿的,它可以卡在屁股上不掉下去,而且上面似乎有两块固定皮带的布料,但是就是有点难受。所以没有拍特写照片。\n\n总之,虽然有得有失,但下次Final Sale我仍然必参加!\n\n# 新秀丽行李箱\n\n<img width=\"400\" alt=\"行李箱外观\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/440ff90f-8cc7-4052-b241-2cf056ec3e0c\">\n\n价格:$88.99(商品)+$9.12(税)\n\n来源:[新秀丽官网](https://shop.samsonite.com)\n\n---\n\n原价$159.99,是谁又捡漏了呀!\n\n买行李箱的起因是发现回家的航班可以托运两个大箱子。我手上本来有一大一小两个箱子。然后就想,反正我要寄东西回去,不如再买一个大箱子,把小箱子装满东西寄回去,然后坐飞机的时候托运两个大箱子。多么完美的计划(消费借口)!就是不知道我妈看到会不会杀了我,家里已经有好几个行李箱了。\n\n刚拿到手拖着它上楼,轮子的顺滑令我惊异。比我用过的任何行李箱都滑(当然,我并没有用过高端行李箱)。箱子的内部如图所示:\n\n<img width=\"400\" alt=\"行李箱内部\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/a143b449-0c26-4d1b-bc02-7e25d02a723f\">\n\n就是一个普通行李箱的内部,没啥特别的。但总之人民币几百块买个新秀丽的大箱子也还蛮划算的!\n\n# 其他\n\n最近雀魂和魔法少女伊莉雅联动,氪了不少,抽到了美游(和那个男的),买了美游皮肤,美滴很!但是还是很想要伊莉雅TT。\n\n还托表妹买了麦当劳猫窝,不过暂未送到我家,无法测评。等强子用上再来写!","tags":["工具","美妆","服饰"],"categories":["购物"]},{"title":"最近下载的小玩意:Input Source Pro、Maccy","url":"/2023/11/16/最近下载的小玩意:Input-Source-Pro、Maccy/","content":"\n# Input Source Pro\n\n<img width=\"100\" alt=\"ISP图标\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/b2ef0be9-c837-4720-af51-59e3e159a737\">\n\n平台:macOS\n\n价格:¥0\n\n---\n\n这是一个输入法管理应用,主要功能有二:(1)在切换输入法或切换应用时显示当前的输入法;(2)为每个应用指定不同的默认输入法。由于我使用的系统已有类似功能(1)的功能(如下图),我只开启了功能(2)。\n\n<img width=\"185\" alt=\"原始输入法切换提示功能\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/c2d577f8-0e5d-4e27-8087-0b8e503bca99\">\n\n但还是介绍一下(1)吧。在长按鼠标左键、切换输入法或切换应用(以上均可选)时,光标上方、应用右下角或屏幕右下角(以上均可选)会出现一个小方框,提示正在使用的输入法。如图所示:\n\n![功能(1)示例](https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/8ca39f20-7587-4330-974a-be7fa57efbfc)\n\n也可以调这个方框的颜色、大小啥的,比较好的一点是支持夜间模式。但是从图上也可以看到,这个功能和系统自带的功能有重复,于是我就把它关了。\n\n接下来是(2)。功能的使用很简单,如图所示:\n\n<img width=\"780\" alt=\"功能(2)示例\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/0a7ca8a2-824e-4e6b-b8d8-9d1b02dd35c6\">\n\n这不就是我梦寐以求的功能吗!功能比较一目了然,就不多介绍了,感兴趣的朋友去下载看看吧,目前还是免费的。\n\n# Maccy\n\n<img width=\"100\" alt=\"Maccy图标\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/379dda6a-de30-4da3-b8c6-c2444f58f883\">\n\n平台:macOS\n\n价格:¥0(这个APP的付款机制是任意选一个价格付款,我就选了0元,白嫖了)\n\n---\n\n简洁、没有多余功能的剪贴板管理应用,支持搜索。呼出的快捷键是Shift+Command+C。\n\n剪贴板管理应用我试过挺多的,但名字都忘了。我的需求很少,只需要能够记忆历史剪贴板内容,再加一个搜索功能就好了。也因为需求少,我希望应用免费或比较便宜。另外,外观风格和系统能够融合是加分项。市面上大多数剪贴板管理应用都花里胡哨的,好多功能我用不到,又丑,所以一直没有找到合适的。然后我就发现了Maccy,它完全符合我的需求。它呼出的界面是这样子的:\n\n<img width=\"781\" alt=\"Maccy界面\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/82670058-f210-4c84-890c-446a6e701c14\">\n\n和系统风格很匹配吧!这其实是我选择它的最大原因。\n\n总之,这个小玩意挺好用的,感兴趣的话可以试一下。","tags":["工具"],"categories":["折腾"]},{"title":"最近下载的小玩意:iBar","url":"/2023/11/04/最近下载的小玩意:iBar/","content":"\n<img width=\"100\" alt=\"logo\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/b86e5392-8728-4be4-aabe-f58f1dfbc251\">\n\n平台:macOS\n\n价格:¥0\n\n下载地址:App Store\n\n---\n\n因为平常使用的小工具太多(……),我的电脑顶上那一栏的图标基本上是满的。然后打开某个APP时,顶栏左边的菜单项就会把右边的图标挤没。有时候要点图标,还得返回到桌面再点,很麻烦。\n\n我一直想解决这个问题,但没想出来可以怎么解决。直到我随便点了一篇微信推给我的公众号文章,里面提到了这个工具。\n\n使用很简单:安装这个APP,做好必要的授权,然后配置。我的配置是这样的:\n\n<img width=\"860\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/f75345c1-cd16-41bc-bc1d-96a69b1a208b\">\n\n于是平常的时候,菜单栏的图标是全部隐藏的,只有少量图标(包括iBar的图标)和日期时间等显示。点击菜单栏空白处的时候,所有图标会展开显示在下方,如图所示:\n\n<img width=\"1439\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/ac917719-cdbf-4088-ab79-f40a7902c997\">\n\n如果点击展开的栏中的某个图标,该图标会短暂地显示在顶栏中,但过不了多久就会消失。不知道这个特性有什么意义。\n\n一个实用功能是,你可以选择始终显示在顶栏的图标。比如Wi-Fi、蓝牙、耳机等,设置成始终显示就比较方便。设置方法是在图标上右键—偏好设置—菜单栏布局:\n\n<img width=\"860\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/b5f28f6f-45b7-4b59-b466-2e0e41dc45bd\">\n\n效果如下:\n\n<img width=\"442\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/6cbb718a-1cf5-45cf-b572-d6c05ee41141\">\n\n暂时还没发现这个APP有什么大缺陷,除了展开的栏中的图标不能改顺序,但我好像没这需求。再就是这个APP本身是一个蛮丑陋的解决方案,但我好像想不到更好的。","tags":["工具"],"categories":["折腾"]},{"title":"最近下载的小玩意:Visual Studio Code","url":"/2023/10/24/最近下载的小玩意:Visual-Studio-Code/","content":"<img width=\"100\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/4900959c-0d87-4978-a5c3-6d2e66b1ac5c\">\n\n\n平台:Windows、macOS、Linux\n\n价格:¥0\n\n下载地址:[官网](https://code.visualstudio.com)\n\n---\n\n终于,我还是用上了VS Code。这应该不算小玩意了吧……毕竟功能还挺多的。但是为了维持这个系列,还是叫它“小玩意”吧。\n\n[上篇小玩意](https://greendolphindance.com/2023/10/17/最近下载的小玩意:Typewriter/)说没有用VS Code的理由是已经有了Sublime Text和XCode,不想再下一个写代码的应用,但是今天一想,我所有的东西都在VS Code里写不就行了吗?这样岂不是能够把工具更精简。于是配置好VS Code之后,就卸载了Typewriter、Sublime Text和Skim(用来搭配Sublime Text进行预览的)。XCode没删,因为莫名感觉之后还会用到(?)。\n\n下面我分Markdown和LaTeX两方面来介绍VS Code的配置方法和使用体验。\n\n# Markdown\n\n## 配置\n\n我参考的是[这个教程](https://zhuanlan.zhihu.com/p/56943330)。需要下载Markdown All in One和Markdown Preview Github Styling两个插件。下载好后,书写Markdown文档会有相应高亮,点击工作区右上角的这个图标:\n\n<img width=\"19\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/a9272159-0c34-4151-8de4-4b08e9bf49fa\">\n\n可以显示预览。\n\n## 和Typewriter对比\n虽然[上篇小玩意](https://greendolphindance.com/2023/10/17/最近下载的小玩意:Typewriter/)里没写,但是我在使用过程中发现了Typewriter的一个最大缺点:工作区和预览的位置不同步。就是说,虽然预览区和工作区可以同步滚动,但是那个位置对应不是很精确,有时候工作区滚到的位置上的文字,在预览区甚至没有出现。所以我经常需要单独滚动预览区,以把位置对应好。VS Code在这一点上就做得好太多。\n\nVS Code还有一个优势,就是预览的渲染速度非常快,甚至和Typora不相上下。后者是所见即所得,更需要快速的渲染,所以对于VS Code能做到Typora的速度,我是很惊奇的。就感觉好用心的一款产品啊……相比之下Typewriter就慢得多。\n\n我在[上篇小玩意](https://greendolphindance.com/2023/10/17/最近下载的小玩意:Typewriter/)里介绍了Typewriter的一些缺点,接下来我会逐一列举VS Code在这些方面的表现。\n\n首先,关于FrontMatter,VS Code显然不会出现任何错误,因为人家的预览里压根就不显示FrontMatter……其实我觉得还是显示了好一点,至少把标题写出来吧。\n\n然后,关于Typewriter把代码里的注释显示成标题格式的bug。首先复习一下Typewriter里的显示:\n\n<img width=\"1221\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/39bbcb60-06c2-42f1-a73f-e63cea15548c\">\n\n可以看到注释“# scripts loaded in the end of the body”在工作区里显示的格式和下方的标题“# 订阅”相同。\n\n相反,VS Code仍然不会出现任何这样的问题,因为它的工作区压根就不会显示标题格式。它除了高亮以外啥也没有:\n\n<img width=\"1310\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/38bd744b-f5b6-43cb-bf98-a9dab17839d8\">\n\n其实我觉得啥也没有挺好的,反正有高亮,而且格式啥的在预览区都会显示出来。不过这个见仁见智吧。\n\n关于目录,首先似乎需要装一个叫Markdown Preview Enhanced的插件,然后预览区右上角会显示一个目录图标,点击就可以展开目录。虽然不能固定在边栏,不如Typewriter直观,但也还行。\n\n# LaTeX\n\n## 配置\n\n参考的教程是[这个](https://zhuanlan.zhihu.com/p/166523064)。需要下载LaTeX Workshop这个插件。然后在JSON文件中加入配置代码。其中,我相较于教程做了一点修改,把自动编译改成了onSave。\n\n## 和Sublime Text对比\n\n一眼看去,二者最大的区别就是VS Code内置了预览功能,而Sublime Text的预览功能需要通过Skim等外部应用实现。这应该有利有弊,因为我看的教程里有教如果有需要的话,怎么从内部预览切换到外部预览。但看了一下,我大概用不到。\n\n另一个区别在于目录。Sublime Text的目录是直接显示出来的,而VS Code要点击最左边那一栏的“TeX”图标才能看到目录,稍微麻烦一点,不过我可以忍。\n\n此外,二者在语法检查上也有区别。在Sublime Text上,我使用了一个插件让我可以在内部使用Grammarly进行拼写检查。而在VS Code上,我根据[这个教程](https://zhuanlan.zhihu.com/p/139210056)下载并配置了LaTeX插件。\n\n# 写代码\n因为刚开始学前端,写代码的机会还不多,所以没法写出VS Code和其他编辑器(比如XCode)的对比。不过我上的网课是Angela Yu的,她是Mac电脑,但推荐使用的是VS Code而不是XCode,所以可能是有她的道理吧。","tags":["工具"],"categories":["折腾"]},{"title":"博客崩了记录","url":"/2023/10/20/博客崩了记录/","content":"\n如题,昨天博客突然崩了。当时是想尝试添加置顶功能,然后不知道为什么编译报错,页面整个404。然后把指定功能相关的代码删除了,但仍然报错。好奇怪!\n\n用Mac的时间机器将它恢复到了15号的样子,但是编辑任意文件,提示文件已锁定,且不能解锁。试着生成网页,也提示没有权限。于是一气之下建立了一个新的博客文件夹,把所有东西复制一份过去,然后把原文件夹删除,cd到新目录再编辑里面的内容。比较惊讶的是删除原文件夹竟然没有提示权限不够!?\n\n于是15号之后的修改都要重做了。花了一天时间,根据之前的[笔记](https://greendolphindance.com/2023/10/07/博客搭建小记/)重新操作。但是!明明是一模一样的代码,却出现了新的bugs!\n\n解决这些bugs的过程中参考了社友AliceZ的建议,并接受了社友茨月的科普,在此感谢。\n\n# Bug 1:切换到与系统偏好相反的颜色模式后,再切换页面,颜色模式跳回到和系统偏好一致\n\n把夜间模式相关的代码改成和[这个页面](https://greendolphindance.com/2023/10/07/博客搭建小记/#夜间模式随系统颜色模式开启)所写的一致(2023-10-19版本),结果出现了这个问题。以前从未有过。解决方案如下:\n\n```html\n<script>\n (function() {\n // 在页面加载时根据存储的主题或用户的系统偏好设置主题\n const savedTheme = sessionStorage.getItem('theme') || localStorage.getItem('theme');\n const userPrefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n const useDarkMode = savedTheme ? savedTheme === 'dark' : userPrefersDark;\n\n if (useDarkMode) {\n document.documentElement.classList.add('dark-theme');\n }\n })();\n\ndocument.addEventListener('DOMContentLoaded', function() {\n const themeToggleCheckbox = document.getElementById('switch_default'); // 复选框\n const themeToggleMobile = document.getElementById('mobile-toggle-theme'); // 移动端切换按钮\n\n function updateButtonText(isDark) {\n themeToggleMobile.textContent = isDark ? '· Dark' : '· Light';\n }\n\n function toggleTheme() {\n const isDark = document.documentElement.classList.toggle('dark-theme');\n document.body.classList.toggle('dark-theme', isDark);\n sessionStorage.setItem('theme', isDark ? 'dark' : 'light');\n updateButtonText(isDark);\n }\n\n // 初始化按钮文本\n const initialIsDark = document.documentElement.classList.contains('dark-theme');\n updateButtonText(initialIsDark);\n\n // 为复选框和移动端的切换按钮添加事件监听器\n themeToggleCheckbox.addEventListener('change', function() {\n const isDark = themeToggleCheckbox.checked;\n document.documentElement.classList.toggle('dark-theme', isDark);\n document.body.classList.toggle('dark-theme', isDark);\n sessionStorage.setItem('theme', isDark ? 'dark' : 'light');\n updateButtonText(isDark);\n });\n\n themeToggleMobile.addEventListener('click', toggleTheme);\n});\n</script>\n```\n\n中途发生了一件神奇的事情:ChatGPT给我生成的代码,Light和Dark刚好是反的……我手动更换了一下才正确。实在是非常奇怪,居然出现这样的失误?\n\n# Bug 2:菜单展开时将页面左上角的内容挤到一起\n\n如图:\n\n![9a149dc368370a0bb795a5f783e992f3](https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/10c6e13a-c760-4202-9a8b-09390276932e)\n\n也是之前根本没出现过的问题!\n\n最后的解决是让展开的菜单栏“浮在”左上角各个元素之上,让它直接覆盖在这些元素的上面而不是挤到它们:\n\n```css\n@media screen and (max-width: 479px) {\n .navbar-mobile .menu {\n position: absolute;\n top: 80.66px; /* 调整这个值,使菜单栏下移 */\n left: 0;\n width: 100%;\n background-color: #fff; /* 或其他颜色 */\n z-index: 2; /* 确保在其他元素之上 */\n display: none; /* 默认隐藏 */\n }\n\n .navbar-mobile .menu.active {\n display: block; /* 当菜单激活时显示 */\n }\n\n .navbar-mobile .navbar-header,\n .navbar-mobile .menu-toggle {\n z-index: 1; /* 确保在菜单之下 */\n }\n}\n```\n\n其中80.66px是用网页检查器测量出来的上方元素的高度。这样修改后就没问题了。\n\n# 反思\n在这个事件中,我显然犯了一些错误。下面进行反思。\n\n## 不要急着推倒重来\n博客刚崩掉并且回滚代码恢复不了时,我的第一反应是用时间机器恢复到以前的版本。但是仔细想想,应该有更优的解决方案。首先,GitHub上有历史记录可以恢复!这个我根本就不知道,还是我男朋友告诉我的。但他告诉我时,我已经重建了博客文件夹,历史记录就没有了。\n\n而且我发现我缺乏一种刨根问底的精神,觉得只要问题解决了就可以了。诚然,重建博客文件夹或许可以解决这个问题,但是一旦重建,我就没法知道究竟是什么原因导致博客崩掉的了。虽然据说程序员的原则是“能跑就行”,但是我不是程序员啊!我只是一个普通的爱好者!作为爱好的话,还是尝试深入理解其本质比较合适吧。\n\n## 版本控制\n在这两天之前我完全没听说过“版本控制”这个词……结果AliceZ和茨月都强调了版本控制的重要性。于是去查了,以下是GPT的解说:\n\n> Version control(版本控制)是一种记录文件更改历史的系统,以便将来可以查看特定版本的文件。版本控制系统对于软件开发项目特别有用,因为它们帮助开发团队跟踪和管理代码的更改。GitHub 是一个基于 Git 的在线版本控制系统,用于协作开发项目。\n>\n> 以下是如何在 GitHub 上进行版本控制的基本步骤:\n>\n> ### 1. **创建仓库(Repository)**\n> - 访问 [GitHub](https://github.com/)。\n> - 点击右上角的 \"+\",然后选择 \"New repository\"。\n> - 填写仓库名称、描述等信息,然后点击 \"Create repository\"。\n>\n> ### 2. **克隆仓库(Clone)**\n> - 找到你想要克隆的仓库。\n> - 点击 \"Code\" 按钮,复制 URL。\n> - 在本地计算机上打开命令行,输入以下命令:\n> ```\n> git clone [复制的URL]\n> ```\n>\n> ### 3. **创建和切换分支(Branch)**\n> - 在命令行中,进入你的项目目录。\n> - 输入以下命令创建并切换到新分支:\n> ```\n> git checkout -b [分支名称]\n> ```\n>\n> ### 4. **添加和提交更改(Add & Commit)**\n> - 对项目进行更改。\n> - 使用以下命令将更改添加到暂存区:\n> ```\n> git add .\n> ```\n> - 使用以下命令提交更改:\n> ```\n> git commit -m \"[提交信息]\"\n> ```\n>\n> ### 5. **推送更改到 GitHub(Push)**\n> - 使用以下命令将更改推送到 GitHub:\n> ```\n> git push origin [分支名称]\n> ```\n>\n> ### 6. **创建拉取请求(Pull Request)**\n> - 返回 GitHub 的仓库页面。\n> - 点击 \"Pull requests\",然后点击 \"New pull request\"。\n> - 选择你推送的分支,然后点击 \"Create pull request\"。\n>\n> ### 7. **合并拉取请求(Merge Pull Request)**\n> - 在拉取请求页面,点击 \"Merge pull request\",然后点击 \"Confirm merge\"。\n>\n> ### 8. **拉取最新更改(Pull)**\n> - 在本地项目目录中,切换回主分支:\n> ```\n> git checkout main\n> ```\n> - 拉取最新更改:\n> ```\n> git pull origin main\n> ```\n>\n> 以上是 GitHub 版本控制的基本流程。根据项目和团队的不同,可能会有更多的步骤和策略,如代码审查、持续集成/持续部署(CI/CD)等。\n\n大概意思是要做什么修改的时候,就切换到一个新分支,然后修改成功之后再把它拉回主分支吧。我学习!以后一定吸取教训!!\n\n## 情绪管理\n这一点就不多说了。昨天修了一天bug还没修好,大崩溃。今天修好了,心情就大好。感觉情绪忽上忽下的,总之还是没能成为一个成熟的大人。\n\n## 寻求帮助\n出现这两个新bug之后不好意思问男朋友具体的解决办法,毕竟他已经多年没写前端了(更正:他说他其实从来没写过前端……),问他会给他增加额外的学习成本。之后在闭社发嘟文吐槽,附上了问题描述,其实有暗戳戳期待会不会有人来帮忙。好在最后没有尴尬收场:茨月和AliceZ在评论区提出了观点和建议,让我学到很多,我也根据这些建议解决了部分问题。\n\n发现我在寻求帮助的时候总是很别扭,一方面希望有人帮忙,另一方面又怕麻烦别人,于是就采取了这种迂回的方式求助(而不是比如直接给了解前端开发的社友发私信)。这跟我的性格有关,我的默认状态是不向任何人求助,自己独立解决问题。这在人生的早期比较好使,因为我当时算是同龄人中较聪明者,遇到问题的时候每每自己就给它解决了,不会造成很多困难。但是现在,我的能力渐渐触碰到天花板,遇到的无法独立解决的棘手问题越来越多,这种时候一个人内耗就不好使了。\n\n所以真的很感谢GPT(的开发者)……虽然它经常不怎么靠谱,但是我可以一直问它而没有心理负担。但一直依赖GPT也不是办法,我总要找到一个适合我的向活人求助的方式,因为总会有需要这样的场合出现。所以还是得继续探索自我。","tags":["博客"],"categories":["折腾"]},{"title":"最近下载的小玩意:Typewriter","url":"/2023/10/17/最近下载的小玩意:Typewriter/","content":"<img width=\"100\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/04b81b8a-3ecd-4ee1-90eb-41e0341af953\">\n\n平台:macOS、iOS、iPadOS\n\n价格:¥0\n\n下载地址:App Store\n\n---\n\n终于被我找到了,全家桶适用的免费Markdown编辑器!\n\n本来一直在用Typora的试用版的,但是发现了一些问题。有时候代码的预览不是很灵,而且一旦转为预览的格式,再编辑就有点麻烦。总之是一些小问题,但还是让我有点困扰。所以有想过改用一个编辑和预览分开的编辑器。\n\n之前社友Origakid推荐了VS Code。但是我这人比较奇怪,想要一个专门用来写Markdown的编辑器,二来电脑里已经装了Xcode和Sublime Text两个用来写代码的工具,总觉得再装一个好难受啊!所以暂时把寻找Markdown编辑器的计划搁置了。\n\n结果刚好,今天在微博看到少数派发了[一篇文章](https://sspai.com/prime/story/free-markdown-editor-2023),介绍各个平台上的免费Markdown编辑器。虽然是介绍免费编辑器,但文章本身竟是收费的,要开会员才能看。但是!天无绝人之路,在手机端看文章,刚好可以在试读部分的最后看到在macOS和iOS上的推荐!\n\n![IMG_4953](https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/b5659f46-6c86-41b4-9a3a-7684eee5d11a)\n\n就是你了!Typewriter!马上下载了来试试看。发现这个编辑器的编辑和预览不完全是分离的,编辑板块也有一些格式,比如标题和链接。\n\n先说缺点。预览有时候显示是错误的,比如我这篇文章的FrontMatter:\n\n<img width=\"1248\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/15dd77ca-7991-45c8-a0f1-479ad4ebeb63\">\n\n这个信息本来不会出现在正文中的,但Typewriter不仅让它显示在了正文中,而且自作多情地给它把格式转换了:Categories类目下的“- 折腾”被直接转换成了无序列表。相反,Typora会用单独的格式将这部分信息标示出来。\n\n另一个例子,我在另一篇文章里插入了一个代码块,其中有一个注释,以“#”开头。结果Typewriter把这个井号判定成了标题的标志,在编辑板块显示成了标题的样子:\n\n<img width=\"1221\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/39bbcb60-06c2-42f1-a73f-e63cea15548c\">\n\n此外,可以发现在预览板块,这一段代码是没有格式的。虽然这段代码取自yml文件,Typewriter可能不支持高亮,但是至少要体现一下它是一段代码吧!\n\n总之,感觉Typewriter的这些细节抓得不是很好,让我强迫症有点难受。\n\n但是,它毕竟不要钱啊!而且其他方面都还可以,例如可以在编辑板块显示文章目录:\n\n<img width=\"192\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/8985b299-077d-41c0-9a67-bcc9f53a1260\">\n\n这点比Typora好(或者也可能是我没用会Typora?),我在写[《博客搭建小记》](https://greendolphindance.com/2023/10/07/博客搭建小记/)时,因为文章太长,所以没有目录的Typora用得很难受。今天补充内容时用Typewriter编辑,感觉比较不错,可以快速跳转到各个小标题去。\n\n总而言之,虽然Typewriter还有一些缺点,但我暂时就用它了。如果有更好的再说吧!\n\n2023-10-24更新:已转投VSCode。","tags":["工具"],"categories":["折腾"]},{"title":"最近下载的小玩意:QSpace Pro","url":"/2023/10/10/最近下载的小玩意:QSpace-Pro/","content":"\n<img width=\"100\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/43f93acf-2cda-4f5a-b44c-80220a455b5f\">\n\n平台:macOS\n\n价格:¥79(官网下载,APP内购买,网上找了个邀请码便宜10块)\n\n---\n\n想找[之前的文章](https://greendolphindance.com/2023/10/08/最近下载的小玩意/)提过的TotalFinder的替代品了,一来想支持正版,二来Apple似乎在给它设置重重险阻,感觉该APP的未来不容乐观。\n\n一开始还不太想放弃,于是点进TotalFinder官网的“Support”页面看看它还在不在维护。发现其实四月份的时候还是更新了的,但我又在评论区看到了这样一条:\n\n<img width=\"787\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/69ad0ba1-7ef6-4d10-a2ff-5e7736e068a4\">\n\n里面推荐了QSpace Pro,也就是本文的主角。我立刻就去下载了,并开启了30天的试用。\n\nQSpace Pro和TotalFinder最大的不同是,前者是一个单独的APP,而后者类似于访达的一个插件。所以使用QSpace Pro时,最好使其在程序坞中保留。(然后我就不想用原生的访达了,但是不知道怎么把它隐藏掉,难受。)\n\n在使用上,QSpace Pro和TotalFinder也有区别。QSpace Pro没有tabs,只有双栏或多栏显示,但这对我来说已经够用。下图为四栏显示,如需调整栏数和排列方式,只需点击窗口右上角的“田”字,再选择需要的显示方式。\n\n<img width=\"1224\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/031a9d8a-ba94-4de5-bed5-a4cdf1982efb\">\n\n还有一个我看中的功能,就是新建文件。Windows用户看到这里可能一头雾水,这不是很基础一功能吗?可是,是的,访达没有这个功能……这也是我从Windows转Mac遇到的众多不适应的地方之一。现在,我终于能解决这个问题了!只需点击右键,选择“新建文件”,就能拥有和在Windows上一样的丝滑体验!\n\n在默认情况下,点击“新建文件”会建立一个txt文档。但你可以在QSpace Pro的设置里添加,让它能够生成docx文档等:\n\n<img width=\"915\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/1e4b298c-f8bb-4571-9ad7-ca38d1b2e1bb\">\n\n添加后效果如下:\n\n<img width=\"277\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/d3f10a5d-aaee-4706-88d8-3fc3283e558a\">\n\n我还想提到一个功能,就是分组。QSpace Pro可以以不同的方式将文件夹的内容进行分组。我比较喜欢的是按类型分组,效果如下:\n\n<img width=\"503\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/50c4e981-6386-4985-b34b-d1a29b327a80\">\n\n这个作用一看就知道吧!我就不介绍了。\n\n“设置”里还可以根据个人习惯进行一些设置。比如回车、删除键等对应什么功能。我使用了“Windows模式”:\n\n<img width=\"766\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/224c34c8-e688-49d9-a779-3e9cf8eeb703\">\n\n还有一些小细节,比如排序的快捷键(QSpace Pro点选排序方式有点麻烦,所以有快捷键是极好的):\n\n<img width=\"638\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/8b90f59e-72ec-45c2-8d66-a4d1bc2e4ebc\">\n\n到目前为止,这个APP还没有什么令我不满意的地方,所以果断地买断了。以后如果有新的心得,会在这里更新。\n","tags":["工具"],"categories":["折腾"]},{"title":"塔罗牌、生命灵数、星座和MBTI","url":"/2023/10/09/塔罗牌、生命灵数、星座和MBTI/","content":"众所周知我最近在频繁使用塔罗牌。我也经常在小红书上浏览相关内容用以打发时间。有一天,我发现一个塔罗师针对新手的免费分享活动,于是添加了她的微信。她把我拉进一个小群,里面其他人也都是新接触塔罗牌的人。\n\n然后,她竟然开始给大家布置作业,让每天抽一张日签并分析,发到群里,然后她来给大家点评。我觉得这一整件事情都挺好玩的,而且反正她暂时还没有收钱的迹象,我就还真的每天认真完成作业。\n\n# 生命灵数\n\n前两天她突然提到一个什么“生命灵数”,要求我们大家都算一下自己的并相互分析。算法是这样的:\n\n>1、生命灵数(性格数字)=年+月+日(加到个位数)\n>eg:20020824,2+0+0+2+0+8+2+4=18,1+8=9,生命灵数就是9隐士\n>\n>2、生命角色=月+日(加到个位)\n>eg:20020824,0+8+2+4=14,1+4=5,生命角色是5教皇,教皇有“教育、辅导、援助”这些意思,他喜欢辅导别人,没可能是学些传统的东西,发挥纯正,也会是以为很棒的心灵导师\n>\n>3、态度品质=小牌元素+生命灵数\n>小牌元素第一种算法(态度品质1)=年+月+日相加总和/4的余数\n>eg:20020824,2+0+0+2+0+8+2+4=18,18/4=4余\n>\n>小牌元素第二种算法(态度品质2)=月+日相加总和/4的余数\n>eg:20020824,0+8+2+4=14,14/4=3余\n>\n>从余数看态度品质,余数1代表权杖,余数2代表圣杯,余数3代表宝剑,余数0没有余数代表星币。\n>\n>那么20020824的态度品质就是圣杯9\n\n其中,生命灵数(性格数字)代表了一个人内在的真实性格,而生命角色的数字代表了ta表现出来的个性。小牌元素的两种算法需要综合考虑,两者算出来的结果共同作用于一个人的态度品质。\n\n虽然我对塔罗的接受度还算比较高,但我一看到这个生命灵数等的算法就很排斥,起初还不知道为什么。后来一想,这样会导致同天生日的人有一模一样的性格、角色和态度品质。\n\n相信生命灵数的人会说:可能同天生日的人,在性格方面也会有神秘的相似之处。假设这个是对的吧。但是内在性格、外在性格、态度品质这些东西都一样,是不是太超过了!\n\n这时候还有一个补救的方法,就是说这些灵数都对应着塔罗牌,而对塔罗牌的解读可能是丰富的。比如两个同天生日的人的生命灵数对应的牌都是魔术师,那么可能一个人表现为沟通能力强,一个人表现为行动力强这样子。在这里魔术师是作为一个性格的“原型”而被参考的,这说明成千上万的同天生日的人的性格都与这一原型相似,但相互可能不相似,表现为一种家族相似性。我觉得这个补救没有从根本上解决问题,因为对原型的解读再丰富,它也是有限的,那么仍然会存在很多同日生的人,他们算出来的内在性格、外在性格、态度品质全都是相像的。\n\n我查到有些生命灵数的版本是生命灵数直接对应了一段性格描述,而不是对应塔罗牌,这个我就更排斥了。对应到塔罗牌要稍好一些,因为有解读的空间,但我并不是完全满意。\n\n这件事情有一个导火索:就是我的生命灵数对应的塔罗牌实在是太不像我了!我算出来的生命灵数和生命角色都是3(皇后),证明我表里如一,而且性格符合如下关键词:\n\n> 生育力、多产、财富。母亲、姊妹、妻子。婚姻。忠诚、理想主义。优雅、迷人魅力、亲切殷勤。喜爱交际。行动、计划、担保承诺。实际动作、进展、进步。晦涩难解、暧昧隐密、未知事物。象征、人物形象、意象、寓意。(摘自《跟着大师学塔罗逆位牌》)\n\n这是什么!!我本人没有任何母性,已经决定不生孩子。也没有什么迷人魅力。喜爱交际就更不像了,本人i值高达97%,平常最喜欢的事就是一个人呆着。\n\n群里的同学(?)跟我互相解读的时候,我告诉了她这些说得不准的地方,然后老师(?)就说那她来解读一下。然后我发现她鸡贼地避开了这些方面的大部分:\n\n> 皇后,一个富贵人家,给人的感觉就是好有气质,身边不缺朋友的感觉,和你在一起吃喝玩乐非常开心,总感觉你的点子很多,甚至觉得你的衣品都很不错。\n> 性格是皇后,这个交际能力还是很不错的,让你去热场绝对没有问题,尤其看到大家冷场的时候,你是那个调动大家情绪的高手。另外呢,你对艺术美丽的东西都是情有独钟,这方面的动手能力也是比较强的,比如画画,手工,唱歌之类的。\n> 那么从态度宝剑三和星币三,给我的感觉是你善于服务群众,就比如一针见血看到别人的问题,但又能一招致胜给对方药方的感觉。其实挺适合公关,疗愈,社区服务,设计之类的工作的,不知你自己有没这样的想法\n\n但是老师,我说了我的交际能力很差啊!这一点你怎么还是给我写上了啊!我提出抗议,结果她居然说:\n\n> 是你觉得你差而已[偷笑],当你把内心的恐惧宝剑三,转化为疗愈能力,你会很厉害的\n\n好一个“是你觉得你差而已”!什么万能模板,下次我给别人算没算准,我也跟ta说是你觉得没算准而已,我不要你觉得,我要我觉得。我开始思考她到底是真信还是骗子啊?(仔细一想,应该是真信。)\n\n# 星座\n\n与上述有关生命灵数的结论相同的结论可以推广到星座,因为星座也是由人的生日决定的。现在星座有了一个内容更丰富的版本,叫星盘,但似乎也是根据生日来的,只是精确到了时和分。\n\n星座其实就和上面所说的“直接对应到性格描述的生命灵数”类似,它的描述也是死的。所以我从来没有相信过。而且二者结合来看,星座只关乎月份,生命灵数关乎年月日,也就是说这两个没有什么对应关系,那么就有可能你星座对应的性格和生命灵数对应的性格是矛盾的!(当然要是你说“人就是矛盾的”,那我确实一点办法也没有。)\n\n总而言之我不是很相信星座和生命灵数这一套东西。总体的感觉就是它们是“死”的东西,而塔罗牌等是“活”的,有很大解读空间,也更大程度地满足了“科学”占卜所需要的随机性。\n\n# MBTI\n\n最后来说一下MBTI。这个东西不好说是否科学,但至少大部分人都没有以科学的方式去使用它。我这个科学的方式,意思是就事论事。比如一个人自称是i人,然后你据此推测出ta性格内向,这是科学的使用。但是大部分人的使用总带着一股标签化、刻板印象化的意味,比如觉得INTP不爱收拾房间,这是哪里来的刻板印象!本INTP东西都是放得整整齐齐的。这样子弄感觉有种生命灵数和星座的意思了,反正就感觉很奇怪。\n\n还有小红书上经常有类似于“xxxx(MBTI)怎么追”的问题。这不是要看每个人的喜好吗!我曾经好奇点进去看过一个“INTP怎么追”,结果满屏都是“快逃”,说跟INTP谈恋爱很没前途什么的。笑死,我和我男朋友都是INTP……相互没前途?\n\n总之,警惕MBTI星座化!\n","tags":["占卜"],"categories":["随笔"]},{"title":"最近下载的小玩意","url":"/2023/10/08/最近下载的小玩意/","content":"\n因为又菜又爱折腾,所以我下载并使用了很多现成的小工具。本文章旨在分享这些小工具的使用体验(也许会成为一个系列)。\n\n我的设备:MacBook Pro M1、iPad Air、iPhone 12 mini。另有安卓备用机一部,是日产的Sony Xperia Ace II(不推荐)。\n\n# Foldery\n\n![logo](https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/7f9e037e-878e-414a-b46d-09764a5417d8)\n\n平台:macOS\n\n价格:¥0(限免)\n\n更新时间:2023-10-8\n\nFoldery是一个给文件夹图标改颜色的小工具。应用场景大概就是希望文件夹显得更加醒目的场合吧。使用方法很简单,打开Foldery和访达,在Foldery窗口上选好颜色,再把想要改颜色的文件夹拖拽到Foldery窗口就可以了。使用效果如图:\n\n![image-20231008104357029](https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/4ddae0e1-b8fa-47e9-9965-c81c0f87de38)\n\n里面默认的颜色都蛮和谐的,当然也可以自定义颜色,但是我懒。如果想要把文件夹还原为默认的颜色,就点文件夹图标左上角的叉叉,再把想要还原颜色的文件夹拖拽过去就好:\n\n![image-20231008104557637](https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/1f2a824c-7f81-4255-9f47-e75e7e53a6ed)\n\n就是这样啦!\n\n# TotalFinder\n\n<img width=\"100\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/022bc32e-b82c-4d92-84eb-7878319d526e\">\n\n平台:macOS\n\n价格:¥0(官网的购买渠道点开是一份2021年发表的停止维护声明,没法买,所以我下了破解版。但是刚才发现最新版本更新时间是今年?不知道怎么回事。)\n\n更新时间:2023-10-8\n\n访达增强器!让访达更好用的小工具。可以让访达有tabs,以及支持dual mode。其实它还有一个功能,就是让文件夹标签的颜色成为文件夹的背景色,这个功能如果可以用的话就不用下载Foldery了,但是我开启了这个功能没反应。\n\n具体功能及使用方法可以去[官网](https://totalfinder.binaryage.com)查看。我记得用这个要给一个什么权限来着,很麻烦,印象中重启了两次。然后开启了这个权限的话,Mac上有的APP就不能用了,比如微信读书、微博轻享版。所以需要作出一些权衡。\n\ntabs和dual mode演示:\n\n![tabsanddualmode](https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/629adc35-3db8-4eed-8a44-98940bbec656)\n\n一个小tip:TotalFinder会修改访达的图标,有点丑,可以在访达 -> 设置 -> TotalFinder -> Dock里勾选“使用原Finder图标”来改回去。\n\n# Bob\n<img width=\"100\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/4ce5b05a-c5f5-4eb1-90d3-f3ebe40f96f6\">\n\n平台:macOS\n\n价格:好像是¥50\n\n更新时间:2023-10-8\n\n图标很丑但很强大的一款翻译软件,官网[在这](https://bobtranslate.com)。可以通过API Key连接到各式翻译网站,然后选择词句并按下Option+D就可以翻译(配合[PopClip](https://www.popclip.app)食用更佳)。会出来如下界面:\n\n![display](https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/eb502dd2-7a60-4c81-8030-b0b598dd48ce)\n\n不难发现,它支持ChatGPT的翻译和润色功能,但是很遗憾,我的从某一天开始就不能用了……应该是ChatGPT那边的问题,不怪Bob。我还没有排查过原因。但是DeepL经常比ChatGPT更好用,所以我感觉DeepL能用就行。\n\nBob的配置有点小麻烦,但是一旦配置好了就能一劳永逸。除了一般的翻译功能以外,它还能够截图进行OCR识别并翻译,非常好用。\n\n# OnyX\n\n![onyxlogo](https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/bc42635d-c27d-4ec2-8781-21cfcbc14946)\n\n平台:macOS\n\n价格:¥0\n\n更新时间:2023-10-8\n\n官网[在这](https://www.titanium-software.fr/en/onyx.html)。系统清理软件,没啥好说的。免费,好用。\n\n之前用它,发生了一件神奇的事情。众所周知Mac的系统文件体积庞大,且无法清理,十分神秘。以前用过[腾讯柠檬](https://lemon.qq.com),没有效果。然后我试着下载了OnyX,系统文件突然大大减小了!但我仔细一看,才发现它只是被分成了两个类:一个是iPhone和iPad的本地备份,另一个是其他的系统文件。所以OnyX其实是无法清理很多系统文件的,只是给它重新分类了,但有这个功能也比没有好(?至少我知道占据空间的其实是备份文件,而不是其他的怪东西。\n","tags":["工具"],"categories":["折腾"]},{"title":"博客搭建小记","url":"/2023/10/07/博客搭建小记/","content":"\n# 为什么要搭建博客\n\n以前用Wordpress弄了一个~~[学术主页](http://chumiaochen.com)~~(已停用),还比较满意。但是最近又在琢磨着弄一个博客,分开弄主要是想着把学术和生活分开。\n\n但我其实并没有很强的表达欲,所以还没想好博客里主要放一些什么内容。第一篇文章是关于塔罗牌的,是我最近感兴趣的东西。所以这个博客应该主打一个“一时兴起”,最近在做什么就写什么。\n\n# 做法\n首先声明:我本人没有任何的写码能力,所有的代码都是网上查阅得来或是由ChatGPT生成。所以我不知道这些代码是否是可复现的。请谨慎参考。\n\n我首先搜索的关键词是“GitHub 搭建博客”,参考的教程是[这个](https://zhuanlan.zhihu.com/p/28321740)(搜出来的第一个)。因为我npy的个人主页(不是Links里的那个博客)是用GitHub弄的,所以我只知道GitHub似乎可以搭博客的样子。用这个教程我弄出了一个简陋的页面,上书一行小字:“Hello World”。\n\n然后我发现了Hexo这个东西。不记得是怎么知道的了,可能是出现在刚才的搜索结果里。点进去看好像不是很难的样子。然而真正动起手来bug还是层出不穷……\n\n不过现在我相信使用它们是正确的做法。一个优点在于它使得我的文件都保存在本地,让人很有安全感。(我本人对非本地的存储等等都不是很放心,因此购买了一个512G、一个2T的移动硬盘用来备份我手机、iPad和电脑里的破烂。但是我设备里也没啥很珍贵的东西,其实没了就没了。某种敝帚自珍!)\n\n我参考的教程主要有[这个](https://zhuanlan.zhihu.com/p/60578464)和[这个](https://blog.csdn.net/qq_62928039/article/details/130248518)。其实都大同小异,因为步骤实在也不多。但我在建站的过程中居然屡屡受挫。我用Hexo创建并部署了站点之后,等了很久,页面还是一开始的Hello World(而不是Hexo的那个默认界面)。经过一番猜测和思考,我折腾了一通又将配置文件恢复成原来模样,结果——好了。完全不知道怎么回事。也许是我其实做了一些正确的修改,也许就是玄学。\n\n接下来开始选主题。我希望整个网站的风格比较极简,留白比较大,以及最好有夜间模式(不强求)。我最开始选择的主题叫“paper”,长下面这样:\n\n![Paper](https://d33wubrfki0l68.cloudfront.net/728712a1f41e64de505ff5828ac3e4fe1c7a6b83/7bac2/themes/screenshots/paper.jpg)\n\n结果,完全不能用……生成的页面都是无格式的样子,而且我最后也没有找到问题出在哪里。所以下一个,leedom:\n\n![leedom](https://d33wubrfki0l68.cloudfront.net/a24b24a00ebb6960b6697e1f24a04b1589bedac9/43e59/themes/screenshots/leedom.jpg)\n\n这个倒是可以用,不过它的字体对我来说有些花哨了。所以我继续寻找下一个。这次找到的是名为“july”的主题:\n\n![July](https://d33wubrfki0l68.cloudfront.net/3e136050f67788d5a51592abc70d6241b64987b7/b1257/themes/screenshots/july.jpg)\n\n多么简洁!完全!戳中了我的审美点!我立刻将其配置好,并添加了Categories和Tags页面。然后两个页面分别出现了不同的问题!\n\n先说Tags:页面上没有内容。因为我的index文档里写了“title: Tags”,所以页面上有标题格式的“Tags”字样,但除此之外就没有别的了。按道理,只要index文档里写了“type: tags”,它就会自动生成一个列举了所有标签的页面。但是并没有。我查了半天,试了无数方法,都无法解决。\n\n最后我发现:这个主题好像不包含Tags和Categories的页面……只好又换一个主题。这最后一个主题名叫“Chic”:\n\n![Chic](https://d33wubrfki0l68.cloudfront.net/e3707c8ed851e560211b81491b5cef21da46b3f9/a8675/themes/screenshots/chic.jpg)\n\n我把主页的那些图标删掉了,就显得简洁了一些。虽然我比较喜欢在主页显示Recent Post的那种主题,但是这个已经是我能找到的最好的了。而且它还有夜间模式诶!只是要手动开启就是了。\n\n说回Categories的问题。我点开Categories,页面404。然后我把问题发在闭社,社友nullptr(感谢!!)指出是大小写的问题,把链接“greendolphindance.github.io/categories”中的“categories”改成大写就好了。所以我把配置文件中的“categories”改成了大写,暂时解决了这个问题。\n\n但是!只有“Categories”是大写,而“archive”、“tags”等都是小写,这让我很不爽!我就想从根本上解决这个问题。nullptr说是文件夹名称的问题,这让我想起我一开始建立Categories文件夹的时候不小心打成了大写。但问题是!我明明早就改成小写了!于是我删掉了整个categories文件夹,重新在大小写正确的情况下建立了一遍。但问题仍然存在。所以这件事情可能就这样了……\n\n在使用“July”主题时,还出现了一个问题,就是我点击主页的文章标题没反应。社友Origakid(感谢!!)指出是URL配置得不对。我于是右键标题并复制链接,结果发现链接是<a class=\"break-link no-style\"> “https://<span></span>greendolphindance.github.io/greendolphindance.github.io/2023/10/06/塔罗牌为什么不会出错/”</a>,“greendolphindance.github.io”神秘地出现了两次!我再试着输入<a class=\"break-link no-style\">“greendolphindance.github.io/2023/10/06/塔罗牌为什么不会出错”</a>,发现可以正常打开。那么问题就很明显了。\n\n但是为什么会出现这样的问题呢?经过一番艰难思索,我突然悟了,是我很早之前跟着某个教程在URL下面添加了一行:“root: greendolphindance.github.io”,为了解决前面出现的某个问题。然后可能问题用其他的方法解决了,但是这一行就忘记删掉了。所以通过某种机制,它让我的URL出现了问题。然后这个问题也解决了。\n\n总而言之最后还是有惊无险地成功了!我之所以喜欢折腾就是因为喜欢寻找解决方案的过程以及找到解决方案带来的成就感,所以对这一过程我表示十分满意。一些小缺憾就是上述某些问题没有找到根本性的解决方法,或是解决了却不知其原理。但是我居然做出了一个可以运转的博客呢!想想就很激动。\n\n其实还想试试添加评论和浏览量功能,但经过一番考察,我发现这些功能好像是挂靠(?)在主题下的,也就是说有的主题的文件包含和评论功能相关的代码,因此可以添加评论功能,但有的主题不行(也许可能可以自己写吧但是这对我来说太超过了……)。我这个主题大概不行,所以就干脆地放弃了。\n\n# Markdown\n\n本站的所有文章都在本地以.md格式储存。所以要写文章,需要一个Markdown编辑器。\n\n我一开始使用的是Xcode,因为双击文件就自动用它打开了……它很明显完全不适合,没有高亮也不能预览,不过也不能怪它,毕竟它被发明出来并不是用来写Markdown的。\n\n然后我想着能不能利用电脑上现成的工具,于是把目光转向了Sublime Text。我平常用它写LaTeX,然后它好像插件很丰富的样子,就想会不会有插件支持Markdown高亮(我对预览的需求不是很高)。结果确实有,但我试了好几个都不太行,不知道是我的问题还是它们的问题。所以放弃了。\n\n结果最后还是下载了Typora!我对它有好感的一点是它是买断制(点名批评某U姓APP),而且14.99刀也不算太离谱。其他的功能等等都蛮好的,不过我要求不高,只要高亮就可以(当然也可以Typora这种边写边预览的模式),也许一些免费的APP也可以满足,感觉还是有折腾的空间。但是再说吧!\n\n# 访问数和评论系统\n\n在Origakid的帮助下添加了访问数和评论系统!原来跟主题无关,只要找到合适的服务,然后在相应的文档里添加代码就可以。好玩!原话如下:\n\n> @Revolver Congratulations! 另外想添加评论功能的话可以参见[giscus](https://giscus.app/zh-CN) ,浏览量可以使用[不蒜子](http://busuanzi.ibruce.info) (记得对博客关闭AdBlock等屏蔽插件),这两个都是很简洁方便的实现方式,……\n\n我于是在giscus的网站上生成了代码块,然后粘贴到<a class=\"break-link no-style\">/greendolphindance/themes/Chic/layout/_page/post.ejs</a>里。为什么是这个post.ejs而不是别的post.ejs呢?因为我本来想每个都试一遍,结果第一个试的就是这个。然后网上有些教程说复制到article.ejs,但我压根没找到这个文档,我觉得post和article应该是一个意思吧?\n\n需要注意的是Origakid在评论区指出的那一点,即要把代码块复制到文档末尾“\\</article>”之前。否则评论区和文章会不等宽。\n\n不蒜子的话,因为官网只写了两行代码,没写咋用,所以我还参考了[这个](https://cloud.tencent.com/developer/article/1669144)教程。配置并不难。同样地,最好把标签代码放在版权信息之后、“\\</div>”之前,否则访问数会在版权信息的基础上另起一行,不够美观。\n\n我本来写的是“感谢xx位访客”,然后发现太长了手机端显示成了两行。所以干脆删掉文字直接显示了“xx”。\n\n# 回到顶部\n\n试着添加了“回到顶部”按钮!参考的教程是[这个](http://wuchong.me/blog/2014/01/08/hexo-scrollup/)。\n\n首先跟着教程添加了相应的文件和代码,然后hexo s,果然不行(。我已经逐渐习惯我的这种折腾难以成功的体质了……\n\n然后求助了我亲爱的男朋友,他说可能是因为这个用了jQuery,然后需要把jQuery的js文件也添加进去。\n\n我:什么事jQuery?什么文件?添加到哪里?\n\n(省略一些解释环节……)\n\n最后终于弄懂了,要去网上下载一个叫jQuery.js的文件,添加到博客目录下放js文件的地方(我的是/greendolphindance/themes/Chic/source/js)。放进去之后,还要进行一些配置,也就是在某个文件添加某一行代码。\n\n那么是哪个文件呢?我亲爱的男朋友推测是\\_config.yml。我机智地理解成主题文件夹内的\\_config.yml,而不是根目录下的那一个,事实证明是正确的。在该文档内搜索“js”,发现这么一段代码:\n\n```text\n# scripts loaded in the end of the body\nscripts:\n\t- /js/script.js\n\t- /js/tocbot.min.js\n```\n\n我努力理解了一下,这是在body的end加载这两个js文件的意思!然后一个天才的想法就出现在我的脑海里:我把jQuery.js加进去不就得了吗!\n\n但我又经过了一番缜密的思考:这个教程又叫我创建了一个名叫totop.js的文件,难道只加载jQuery.js,不加载这个吗?最后的结论是:两个都加上!\n\n然后就好了!!(其实最后分别把两个文件名注释掉进行试验,发现起作用的只有jQuery.js。)\n\n就这样,这个问题也被我在不明所以的情况下解决了!特别鸣谢我亲爱的男朋友!\n\n## 进阶\n突然(2023-10-18)觉得手机上的“回到顶部”图标太大了,于是想到修改代码。我分别下载了长宽为48px和32px的图标,分别命名为back-top-48.png和back-top-32.png,保存到/themes/light/source/imgs目录下。\n\n将totop.ejs的代码修改如下:\n```javascript\n<div id=\"totop\" style=\"position:fixed;bottom:20px;right:30px;cursor: pointer;\">\n <a title=\"返回顶部\">\n <img src=\"/imgs/back-top-32.png\" class=\"back-top-small\"/>\n <img src=\"/imgs/back-top-48.png\" class=\"back-top-large\"/>\n </a>\n</div>\n```\n\n在任意CSS文档里添加如下代码:\n```css\n.back-top-large {\n display: none;\n}\n\n@media (min-width: 1281px) {\n .back-top-small {\n display: none;\n }\n .back-top-large {\n display: block;\n }\n}\n```\n\nJS代码无需修改。\n\n部署后发现,手机端出现了一大一小两个图标!电脑端正常。\n\n![IMG_4970](https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/6686b688-6978-4c33-a5f1-0dac5056f8f1)\n\n排查发现,手机开启无痕浏览模式时显示正常。大概是缓存问题。于是清理缓存,问题解决。\n\n## 再进阶\n这个“回到顶部”的设置是,在页面没有滚动到指定高度时,按钮不显示;只有在页面滚动了一阵之后,按钮才出现。这本身没问题。问题在于在页面没有滚动到指定高度时,按钮并不是隐藏了,而只是变得透明了,仍然可以点击。有时候会误触,很难受,遂修改totop.js的代码:\n```javascript\n(function($) { \n // When to show the scroll link\n // higher number = scroll link appears further down the page \n var upperLimit = 1000; // 您可以根据需要调整此值\n \n // Our scroll link element\n var scrollElem = $('#totop'); \n \n // Scroll to top speed\n var scrollSpeed = 500; \n \n // Hide the scroll to top link initially\n scrollElem.hide();\n \n $(window).scroll(function () { \n var scrollTop = $(document).scrollTop(); \n if (scrollTop > upperLimit) {\n $(scrollElem).stop().fadeIn(300); // fade in\n } else { \n $(scrollElem).stop().fadeOut(300); // fade out and hide\n }\n });\n \n // Scroll to top animation on click\n $(scrollElem).click(function(){\n $('html, body').animate({scrollTop:0}, scrollSpeed); return false;\n });\n})(jQuery);\n```\n问题解决。\n\n## 再再进阶\n由于PNG格式的图片显示起来不太清楚,社友茨月建议我使用svg格式。于是修改totop.ejs代码如下:\n```javascript\n<div id=\"totop\" style=\"position:fixed;bottom:20px;right:30px;cursor: pointer;\">\n <a title=\"返回顶部\">\n <svg t=\"1697771647324\" class=\"icon back-top-svg\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"2324\" width=\"32px\" height=\"32px\">\n <path d=\"M946.494 754.216c19.445-19.445 19.445-51.265 0-70.711L547.355 284.368c-19.445-19.445-51.265-19.445-70.711 0L77.506 683.506c-19.445 19.445-19.445 51.265 0 70.711\" p-id=\"2325\" fill=\"#8a8a8a\"></path>\n </svg>\n </a>\n</div>\n\n<style>\n .back-top-svg {\n width: 32px; /* or any size you want */\n height: 32px; /* or any size you want */\n }\n\n /* You can also use media queries to change the size based on screen width */\n @media (min-width: 768px) {\n .back-top-svg {\n width: 48px;\n height: 48px;\n }\n }\n</style>\n```\n并删除CSS文档里的代码。\n\n# 订阅\n\n添加了订阅功能。主要参考的教程是[这个](https://zhuanlan.zhihu.com/p/392900543)(生成RSS订阅文件)和[这个](https://backendology.com/2018/08/31/hugo-newsletter/)(自动发送邮件),实现后者使用的是[TinyLetter](https://app.tinyletter.com/)和[Zapier](https://zapier.com/)。过程中居然没出什么岔子,唯一的问题是我在测试订阅链接的时候,输入了清华邮箱想要订阅,结果一直收不到确认邮件。过了半个小时之后终于收到了,不过这时候我已经全部弄好了。\n\n~~那么,欢迎[订阅](https://tinyletter.com/greendolphindance)!~~\n\n2023-10-10更新:靠,订阅挂掉了,TinyLetter不知道为什么把我的账号ban掉了。我又从社友处了解到RSS订阅也可以采取邮件推送的形式,比如使用[Briefcake](https://app.briefcake.com)。所以就这样吧,请使用RSS订阅。\n\n# 留言板\n\n添加了留言板功能。起初搜了一些教程,但都是教你怎么建立Guestbook页面的,没有说怎么把留言板放到新页面里面去。所以自己动手吧!\n\n首先建立新页面,在博客根目录下执行:\n\n`hexo new page guestbook`\n\n然后进去把layout改成guestbook。所以我们现在需要一个叫guestbook的layout。在/greendolphindance/themes/Chic/layout里建一个叫guestbook.ejs的文档,然后把giscus上生成的代码块粘贴进去。完成了!\n\n不过怎么有点丑?这个评论框和网页是等宽的。所以接下来要调整它的宽度并且把它居中。html语法我是一点不会,于是求助了我亲爱的男朋友,他告诉了我宽度怎么调,但让我自己查居中怎么调(让我考考你.jpg)。然后我就查到了,其实很简单,用\n\n`<div style=\"width:80%; margin:auto;\">`\n\n和\n\n`</div>`\n\n把代码包起来就行了。\n\n## 进阶\n\n之前留言板的宽度设置为80%,电脑和手机端一样。这样的话,手机端似乎就有些太窄了。我想实现“电脑端宽度为80%,手机端宽度为100%”,怎么办呢?\n\n突然想起之前开了GPT-4。问问ChatGPT吧!\n\n<img width=\"845\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/d81bf1e9-ded7-4abd-9be5-40399cc69d2c\">\n\n用GPT给的代码替换掉layout文件夹里原来文档中的代码,立刻解决了(后来觉得不好看,又把手机端的宽度改成了95%)。难道我真的是天才?\n\n然后发现给的代码是错的……它直接把整个网页的宽度变成了80%和95%,导致菜单之类的东西都挤到一起了。所以又追问了一下:\n\n<img width=\"813\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/53638a87-5764-4a14-86e0-480918d24946\">\n\n这样就好了。学到了!\n## 再进阶\n今天(2023-10-17)想到留言板应该和文章等宽。用网页检查器查到电脑端和iPad端宽度都是780px,手机端是370.67px,于是修改<head>部分的代码如下:\n```html\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>Your Webpage</title>\n <style>\n .comment-box {\n width: 100%;\n max-width: 780px; /* 适用于桌面和横屏 iPad */\n margin: auto; /* 居中显示 */\n }\n\n /* 适用于竖屏 iPad 和手机 */\n @media (max-width: 1024px), (orientation: portrait) {\n .comment-box {\n width: 100%;\n max-width: 780px;\n margin: auto;\n }\n }\n\n /* 适用于手机(横屏和竖屏) */\n @media (max-width: 767px) {\n .comment-box {\n width: 100%;\n max-width: 370.67px;\n margin:auto;\n }\n }\n\n body {\n background-color: white;\n color: black;\n }\n \n </style>\n</head>\n```\n然后还是不对,因为手机竖屏时文章的宽度会根据手机型号的不同而不同。所以似乎需要找到一个相对宽度。我查找了iPhone SE、iPhone XR和iPhone 12 Pro上的文章宽度,并让ChatGPT根据手机尺寸进行计算:\n\n> - iPhone SE: 345.67 / 375 ≈ 0.922\n> - iPhone XR: 384.67 / 414 ≈ 0.929\n> - iPhone 12 Pro: 360.67 / 390 ≈ 0.925\n\n于是取了大致的中间值0.925。然后代码有点乱,又整理了一下,最后的成品是:\n```html\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>Green Doplhin Dance</title>\n<style>\n .comment-box {\n width: 100%;\n max-width: 780px; /* 适用于桌面和横屏 iPad */\n margin: auto; /* 居中显示 */\n }\n\n /* 适用于屏幕宽度小于 767px 的所有设备,无论横屏还是竖屏 */\n @media (max-width: 767px) {\n .comment-box {\n width: 92.5%; /* 相对于设备宽度的 92.5% */\n margin: auto; /* 居中显示 */\n }\n }\n</style>\n</head>\n```\n其实最好还是找到不同手机型号文章宽度的规律,但是我不知道怎么找。只好用一个近似值了。但我这个代码也挺简洁的,而且显示效果八九不离十。\n# 域名\n\n一开始决定建博客的时候,没想到付出了如此巨大的努力。为了让自己的努力得到回报,奖励自己一个域名吧!\n\n在[Godaddy](https://www.godaddy.com/en-sg)上买了一个域名,用找券插件找了一个优惠券,竟然只花了$1.17(一年)。开始配置吧——\n\n果不其然,配置失败!页面404。\n\n首先参考的是[这个教程](https://www.jianshu.com/p/da20ddc03cdf)。配置好后,GitHub上的Pages页显示DNS check successful,但是网站打不开。然后我查到了[这个](https://blog.csdn.net/i_do_not_know_you/article/details/105594269),上面说要添加的IP地址不是一个,而是四个。IP地址可以在GitHub的[这个](https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site)官方页面找到。那就加吧!加了四个name为“@”的,还是404。\n\n这个时候Godaddy的DNS页面上有四个name为@的项目和一个name为www的项目。此时我已经精神错乱,想着这个www好难受啊,删了算了,于是把它删掉了。\n\n然后GitHub的Pages页面上的DNS check突然就不行了!\n\n这让我灵机一动,会不会应该添加的name不是@,而是www呢?于是一鼓作气用www作为name添加了四个IP地址。\n\n还是不行。我垂头丧气,决定先放它一放。\n\n过了大概十五分钟,我随便刷新了一下,突然就好了!\n\n然后我在GitHub的那个官方页面上看到这么一句话:\n\n> **Note:** DNS changes can take up to 24 hours to propagate.\n\n所以其实只是等一下就好了吗!我折腾了这么久,结果不知道起作用的究竟是我的折腾还是我的等待。因为太麻烦了,我也不想去测试,所以就这样吧。暂时没有很强的求知精神。\n\n刚发现换了新域名之后评论全都消失了!冷静下来瞬间发现了问题出在哪里。把GitHub的Discussion相应标题里的“greendolphindance.github.io“改成”greendolphindance.com“就好了。\n\n(2024-11-11更新)今天写了一篇博文,结果发现直接Page not Found.\n\n# 博文整理\n\n今天(2023-10-10)一早起来,突发奇想想把本地的所有博文放在一个以年份命名的文件夹里。但是这好像会改变文章的URL,再次导致评论消失,怎么办呢?\n\n答案在[这里](https://prinsss.github.io/hexo-posts-in-subfolder/)。只需要看文章的开头就可以了,开头是此文评论区提到的简便方法,其余的都是作者在瞎折腾。方法很简单,只需要在根目录下的\\_config.yml中搜索“new_post_name“,在相应位置改成`new_post_name: :year/:title.md`就可以了,其他地方不用改,也就是保持permalink那一行为`permalink: :name/ `。\n\n这样,就可以在不改变文章URL的前提下,把本地的博文按年份分类啦。\n\n# 音乐\n\n在About页面添加了一个[歌单](https://music.163.com/#/playlist?id=8793002560)。参考了[这个](https://blog.csdn.net/weixin_58068682/article/details/116612364)教程,尤其是“为博客添加音乐页面”小标题下的内容。方法很简单,安装[hexo-tag-aplayer](https://github.com/MoePlayer/hexo-tag-aplayer)插件并根据教程配置好,然后把以下这段代码\n\n```html\n<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/[email protected]/dist/APlayer.min.css\"> \n<script src=\"https://cdn.jsdelivr.net/npm/[email protected]/dist/APlayer.min.js\"></script> \n<script src=\"https://cdn.jsdelivr.net/npm/[email protected]/dist/Meting.min.js\"></script>\n{% meting \"7868005687\" \"tencent\" \"playlist\" \"theme:#555\" \"mutex:true\" \"listmaxheight:1000px\" \"preload:auto\" %}\n```\n\n中的“7868005687”和“tencent”分别改成我自己歌单的ID和“netease”,然后放入/greendolphindance/source/about/index.md内即可。\n\n# 夜间模式\n\n## 评论框的夜间模式\n\n本来一切都好好的,直到我在guestbook页面点开了夜间模式。漆黑的背景和惨白的评论框形成的鲜明对比,让我再也坐不住了。\n\n我的需求:我想使用giscus的noborder主题,同时又想让它跟随网页的色彩模式。没有现成的东西可抄,我得自己写。谁要自己写!问问ChatGPT吧!\n\n反复询问ChatGPT,失败无数次,终于被我问出了正确的代码:\n\n```html\n<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/[email protected]/dist/APlayer.min.css\">\n<script src=\"https://cdn.jsdelivr.net/npm/[email protected]/dist/APlayer.min.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/[email protected]/dist/Meting.min.js\"></script>\n{% meting \"7868005687\" \"tencent\" \"playlist\" \"theme:#555\" \"mutex:true\" \"listmaxheight:1000px\" \"preload:auto\" %}\n<script>\n\tdocument.addEventListener('DOMContentLoaded', function() {\n\tfunction changeGiscusTheme() {\n\tconst theme = document.body.classlist.contains('dark-theme') ? 'dark' : 'light';\n\tfunction sendMessage (message) {\n\tconst iframe = document.querySelector('iframe.giscus-frame');\n\tif (liframe) return;\n\tiframe.contentWindow postMessage(f giscus: message }, 'https://giscus.app');\n\t}\n\tsendMessage ( {\n\tsetConfig: {\n\t}\n\ttheme: theme === 'dark' ? 'noborder_dark' : 'noborder_light'\n\t}):\n\t}\n\t// Initialize the theme when the page loads\n\tchangeGiscusTheme ();\n\t// Create a mutation observer to watch for changes to the body's class list\n\tconst observer = new MutationObserver(function(mutations) {\n\tmutations. forEach(function(mutation) {\n\tif (mutation.attributeName === 'class') {\n\tchangeGiscusTheme () ;\n\t}\n\t});\n\t3);\n\t// Start observing the body for changes to the class attribute\n\tobserver observe (document. body, { attributes: true });\n\t});\n</script>\n```\n\n将这段代码插入post.ejs和guestbook.ejs中的`</body>`前面即可。\n\n其中后半截代码是没有用的……是我在调试成功之后发现,如果本身打开了网页的夜间模式,再进入guestbook时,giscus是不会转换成夜间模式的。要关掉网页的夜间模式再打开,giscus才会是夜间模式。问了ChatGPT,给了我后半截代码,但是输进去还是这样。暂时放弃了,哪天闲的时候再调试吧。\n\n2023-10-12更新:明明很忙,还是手痒来调试了。花了大量时间成功了。解决方法可以看[这个页面](https://github.com/giscus/giscus/issues/1200)。\n\n啊啊啊还是没解决,电脑端好了,但是手机端还有相同的问题……我又把这个issue reopen了。\n\n2023-10-13更新:勉强解决了。我已经无力复盘了,所以以下是ChatGPT的总结:\n\n> ### 问题概述\n>\n> 当使用夜间模式切换器在桌面端切换网站的颜色模式时,嵌入的 Giscus 评论区的颜色模式也会相应地切换。然而,在移动端,尽管网站的颜色模式已切换,评论区的颜色模式却保持不变。\n>\n> ### 尝试(未成功)的解决方法\n>\n> 1. **使用 JavaScript 监听颜色模式切换并刷新评论区**\n>\n> 尝试使用 JavaScript 代码来监听颜色模式的切换,并在切换发生时刷新 Giscus 评论区。这在桌面端有效,但在移动端无效。\n>\n> 2. **使用双 iframe 切换**\n>\n> 考虑了一种方法,即在页面上放置两个 Giscus 评论区的 iframe(一个用于夜间模式,一个用于日间模式),并在颜色模式切换时在它们之间切换。这个方法被认为过于复杂且可能影响页面性能,因此没有进一步尝试。\n>\n> 3. **尝试修改 Giscus 的源代码**\n>\n> 考虑直接修改 Giscus 的源代码来解决问题。然而,由于 Giscus 是一个第三方服务,我们无法直接修改其源代码。\n>\n> ### 成功的解决方法\n>\n> 1. **确定正确的移动端切换按钮选择器**\n>\n> 通过检查 HTML 代码,我们发现移动端的颜色模式切换按钮使用了一个 `id`(`mobile-toggle-theme`)而非 `class`。因此,我们需要使用正确的选择器来选中这个元素。\n>\n> 2. **使用 JavaScript 刷新页面**\n>\n> 当颜色模式切换时,我们使用 JavaScript 来刷新整个页面,而不仅仅是评论区。这样,评论区会在新的颜色模式下重新加载。\n>\n> ### 最终的代码实现\n>\n> 在你的 HTML 或 JavaScript 文件中,添加以下代码:\n>\n> ```javascript\n> document.addEventListener('DOMContentLoaded', function () {\n> // 找到桌面端切换颜色模式的按钮\n> const toggleDesktop = document.querySelector('label[for=\"switch_default\"]');\n> // 找到移动端切换颜色模式的按钮\n> const toggleMobile = document.querySelector('#mobile-toggle-theme'); // 使用了 ID 选择器\n> \n> // 定义一个函数来处理颜色模式的切换和页面刷新\n> function handleToggle() {\n> location.reload();\n> }\n> \n> // 如果找到了桌面端的按钮,为其添加点击事件监听器\n> if (toggleDesktop) {\n> toggleDesktop.addEventListener('click', handleToggle);\n> }\n> \n> // 如果找到了移动端的按钮,为其添加点击事件监听器\n> if (toggleMobile) {\n> toggleMobile.addEventListener('click', handleToggle);\n> }\n> });\n> ```\n>\n> 这段代码首先尝试选中桌面端和移动端的颜色模式切换按钮。一旦按钮被点击,`handleToggle` 函数会被调用,刷新整个页面。这样,无论在桌面端还是移动端,评论区都会在新的颜色模式下重新加载。\n>\n> 希望这个总结能够清晰地反映整个问题解决的过程!如果你有任何进一步的问题或疑虑,随时告诉我!\n\n这个方案是我想出来的,异常丑陋,因为它导致切换主题的时候整个页面都会被刷新……不过我也没有更好的办法。所以先这样吧。想把这个方案放到GitHub Issue上去,但不close,看看有没有人有更好的方式。\n\n它给我的代码和它自己总结的有点不一样,是长下面这样:\n\n```html\n<script>\ndocument.addEventListener('DOMContentLoaded', function () {\n function getGiscusTheme() {\n const theme = document.body.classList.contains('dark-theme') ? 'dark' : 'light';\n return theme === 'dark' ? 'noborder_dark' : 'noborder_light';\n }\n\n function setGiscusTheme() {\n function sendMessage(message) {\n const iframe = document.querySelector('iframe.giscus-frame');\n if (!iframe) return;\n iframe.contentWindow.postMessage({ giscus: message }, 'https://giscus.app');\n }\n sendMessage({\n setConfig: {\n theme: getGiscusTheme(),\n },\n });\n }\n\n function handleToggle() {\n location.reload();\n }\n\n // Update giscus theme when theme switcher is clicked\n const toggleDesktop = document.querySelector('label[for=\"switch_default\"]');\n const toggleMobile = document.querySelector('#mobile-toggle-theme');\n\n if (toggleDesktop) {\n toggleDesktop.addEventListener('click', function() {\n setGiscusTheme();\n });\n }\n\n if (toggleMobile) {\n toggleMobile.addEventListener('click', function() {\n handleToggle();\n });\n }\n\n // Wait for 1000ms (1 second) before loading the Giscus comments to ensure theme is set\n setTimeout(() => {\n const giscusAttributes = {\n \"src\": \"https://giscus.app/client.js\",\n \"data-repo\": \"greendolphindance/greendolphindance.github.io\",\n \"data-repo-id\": \"R_kgDOKc-MwA\",\n \"data-category\": \"General\",\n \"data-category-id\": \"DIC_kwDOKc-MwM4CZ8oe\",\n \"data-mapping\": \"url\",\n \"data-strict\": \"0\",\n \"data-reactions-enabled\": \"1\",\n \"data-emit-metadata\": \"0\",\n \"data-input-position\": \"top\",\n \"data-theme\": getGiscusTheme(),\n \"data-lang\": \"zh-CN\",\n \"crossorigin\": \"anonymous\",\n };\n\n // Dynamically create script tag\n const giscusScript = document.createElement(\"script\");\n Object.entries(giscusAttributes).forEach(([key, value]) => giscusScript.setAttribute(key, value));\n\n // Append the script tag to the <article> element\n document.querySelector('article').appendChild(giscusScript);\n }, 1000);\n});\n\n</script>\n\n```\n\n然后我突然灵光一现,试着把中间的两个“if”里面的内容改成:\n\n```html\n if (toggleDesktop) {\n toggleDesktop.addEventListener('click', function() {\n setGiscusTheme();\n });\n }\n\n if (toggleMobile) {\n toggleMobile.addEventListener('click', function() {\n setGiscusTheme();\n });\n }\n```\n\n再deploy。然后就好了!不用刷新,评论框也会随着主题变化而改变颜色!可是我根本不知道为什么它就work了!\n\n## 歌单的夜间模式\n\n(这部分内容向社友neruko请教了很多,特别感谢!)\n\nAPlayer这个插件本来是没有夜间模式的,所以要自己弄一个。播放器块状部分和线状部分(边框等)的颜色需要分别指定。在About页面的index.md将歌单的代码改为如下:\n\n```html\n<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/[email protected]/dist/APlayer.min.css\"> \n\n<style>\nbody {\n transition: background-color 0.3s, color 0.3s; /* Smooth transition */\n}\n/* Light mode styles (default) */\nbody {\n background-color: #ffffff;\n color: #000000;\n}\n\n\n/* Dark mode styles */\nbody.dark-theme {\n background-color: #292a2d;\n color: #ffffff;\n}\n\n/* APlayer styles for light mode */\nbody .aplayer-body,\nbody .aplayer-info,\nbody .aplayer-notice,\nbody .aplayer-list {\n background-color: #ffffff;\n}\n\n/* APlayer styles for dark mode */\nbody.dark-theme .aplayer-body,\nbody.dark-theme .aplayer-info,\nbody.dark-theme .aplayer-notice,\nbody.dark-theme .aplayer-list {\n background-color: #292a2d;\n\n}\n\nbody.dark-theme .aplayer .aplayer-list .aplayer-list-light {\n background-color: #505254 !important; \n}\n\nbody.dark-theme .aplayer .aplayer-list ol li:hover {\n background: #414345; /* 或者你想要的其他颜色 */\n}\n\nbody.dark-theme .aplayer .aplayer-list ol li {\n border-top: 1px solid #414345; /* 或者你想要的其他颜色 */\n}\n\nbody.dark-theme .aplayer-lrc::before,\nbody.dark-theme .aplayer-lrc::after {\n background: linear-gradient(to bottom, #292a2d, #292a2d); /* 使用和背景相同的颜色 */\n}\n\nbody.dark-theme .aplayer-list-cur {\n background-color: #aaaaaa !important;\n}\n\nbody.dark-theme .aplayer .aplayer-icon-volume-down:hover path,\nbody.dark-theme .aplayer .aplayer-icon-order:hover path,\nbody.dark-theme .aplayer .aplayer-icon-loop:hover path,\nbody.dark-theme .aplayer .aplayer-icon-menu:hover path {\n fill: #eeeeee !important;\n}\n\nbody.dark-theme .aplayer-info {\n border-bottom: none !important;\n}\n\nbody.dark-theme .aplayer {\n box-shadow: 0 2px 4px 0 rgba(170, 170, 170, 0.2), 0 3px 10px 0 rgba(170, 170, 170, 0.19) !important;\n}\n\n</style>\n\n<script src=\"https://cdn.jsdelivr.net/npm/[email protected]/dist/APlayer.min.js\"></script> \n<script src=\"https://cdn.jsdelivr.net/npm/[email protected]/dist/Meting.min.js\"></script> \n\n{% meting \"8793002560\" \"netease\" \"playlist\" \"theme:#555\" \"mutex:true\" \"listmaxheight:2000px\" \"preload:auto\" %}\n\n```\n\n有很多乱七八糟的代码……都是我发现样式不对然后临时加上一些。然后似乎是在script.js的最后插入如下代码,但是由于我看不太懂,我也不清楚是不是确实是如下代码:\n\n```javascript\ndocument.ready(\n // toggleTheme function.\n // this script shouldn't be changed.\n () => {\n var _Blog = window._Blog || {};\n const currentTheme = window.localStorage && window.localStorage.getItem('theme');\n const isDark = currentTheme === 'dark';\n const pagebody = document.getElementsByTagName('body')[0]\n if (isDark) {\n document.getElementById(\"switch_default\").checked = true;\n // mobile\n document.getElementById(\"mobile-toggle-theme\").innerText = \"· Dark\"\n } else {\n document.getElementById(\"switch_default\").checked = false;\n // mobile\n document.getElementById(\"mobile-toggle-theme\").innerText = \"· Light\"\n }\n _Blog.toggleTheme = function () {\n if (isDark) {\n pagebody.classList.add('dark-theme');\n // mobile\n document.getElementById(\"mobile-toggle-theme\").innerText = \"· Dark\"\n } else {\n pagebody.classList.remove('dark-theme');\n // mobile\n document.getElementById(\"mobile-toggle-theme\").innerText = \"· Light\"\n }\n document.getElementsByClassName('toggleBtn')[0].addEventListener('click', () => {\n if (pagebody.classList.contains('dark-theme')) {\n pagebody.classList.remove('dark-theme');\n } else {\n pagebody.classList.add('dark-theme');\n }\n window.localStorage &&\n window.localStorage.setItem('theme', document.body.classList.contains('dark-theme') ? 'dark' : 'light',)\n })\n // moblie\n document.getElementById('mobile-toggle-theme').addEventListener('click', () => {\n if (pagebody.classList.contains('dark-theme')) {\n pagebody.classList.remove('dark-theme');\n // mobile\n document.getElementById(\"mobile-toggle-theme\").innerText = \"· Light\"\n\n } else {\n pagebody.classList.add('dark-theme');\n // mobile\n document.getElementById(\"mobile-toggle-theme\").innerText = \"· Dark\"\n }\n window.localStorage &&\n window.localStorage.setItem('theme', document.body.classList.contains('dark-theme') ? 'dark' : 'light',)\n })\n };\n _Blog.toggleTheme();\n // ready function.\n }\n);\n```\n\n应该就可以了……吧。我也不是很确定。请原谅我这个简陋的总结……\n\n## About页面夜间模式时的字体颜色\n\n突然发现About页面在夜间模式的字体是惨白色,不仅不好看,而且和其中的链接的颜色相同,不像日间模式的时候是文字黑色、链接蓝色。参考Posts中的颜色,发现在夜间模式时,标题和正文的字体颜色是#a9a9b2,链接颜色是白色。于是想统一一下颜色。\n\n根据ChatGPT的指导,在custom.styl中插入如下代码:\n\n```css\nbody.dark-theme .post-title {\n color: #a9a9b2;\n}\n\nbody.dark-theme .post-content {\n color: #a9a9b2;\n}\n\n```\n\n即可。\n\n## 夜间模式随系统颜色模式开启\n\n在/js/script.js中添加如下代码:\n\n```javascript\nwindow.onload = function() {\n const themeToggleCheckbox = document.getElementById('switch_default');\n const themeToggleButton = document.getElementById('mobile-toggle-theme');\n\n // 检测用户的系统主题偏好\n const userPrefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n\n // 根据用户的系统主题偏好设置 toggle 的状态和 body 的类\n if (userPrefersDark) {\n document.body.classList.add('dark-theme');\n themeToggleCheckbox.checked = true; // 设置 toggle 为打开状态\n themeToggleButton.textContent = '· Dark'; // 设置按钮文本\n } else {\n document.body.classList.remove('dark-theme');\n themeToggleCheckbox.checked = false; // 设置 toggle 为关闭状态\n themeToggleButton.textContent = '· Light'; // 设置按钮文本\n }\n\n // 当用户手动切换 toggle 时,更新颜色模式\n themeToggleCheckbox.addEventListener('change', function() {\n document.body.classList.toggle('dark-theme', themeToggleCheckbox.checked);\n });\n};\n\n```\n\n其中包括电脑端和移动端。一开始踩了个坑是在同一个页面中用了两个“window.onload”函数,结果前一个被后一个覆盖了。然后把两个合并成一个,就修好了。注释很详细,其中一部分代码是用于在网页随系统自动切换成夜间模式的时候,让Toggle呈打开状态(或是在移动端时,显示“Dark”)。一点小小强迫症。\n\n\n### 夜间模式下切换页面时发生白色闪烁\n这个问题虽然解决了,但是从日间自动切换到夜间模式的速度很慢,表现为屏幕会闪烁一下白色。问了ChatGPT,按道理来说这个不应该用JavaScript改,应该直接在CSS里面改,不过我懒得再重新研究了,于是问GPT能不能在我JavaScript代码的基础上进行优化。它给了这么一段代码:\n```javascript\ndocument.addEventListener('DOMContentLoaded', function() {\n const themeToggleCheckbox = document.getElementById('switch_default');\n const themeToggleButton = document.getElementById('mobile-toggle-theme');\n\n // 检测用户的系统主题偏好\n const userPrefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n\n // 根据用户的系统主题偏好设置 toggle 的状态和 body 的类\n if (userPrefersDark) {\n document.body.classList.add('dark-theme');\n themeToggleCheckbox.checked = true; // 设置 toggle 为打开状态\n themeToggleButton.textContent = '· Dark'; // 设置按钮文本\n } else {\n document.body.classList.remove('dark-theme');\n themeToggleCheckbox.checked = false; // 设置 toggle 为关闭状态\n themeToggleButton.textContent = '· Light'; // 设置按钮文本\n }\n\n // 当用户手动切换 toggle 时,更新颜色模式\n themeToggleCheckbox.addEventListener('change', function() {\n document.body.classList.toggle('dark-theme', themeToggleCheckbox.checked);\n themeToggleButton.textContent = themeToggleCheckbox.checked ? '· Dark' : '· Light'; // 更新按钮文本\n });\n});\n```\n改过之后还是有白色闪烁,不过加载速度是快一点了。\n\n### 新的问题\n结果又有了别的问题……在系统为夜间模式的情况下,将按钮调到日间模式,页面变白。但是当点击链接跳转到其他页面时,页面又会转为黑色。所以又让GPT生成了新的代码:\n\n```javascript\ndocument.addEventListener('DOMContentLoaded', function() {\n const themeToggleCheckbox = document.getElementById('switch_default');\n const themeToggleButton = document.getElementById('mobile-toggle-theme');\n\n // 检测用户的系统主题偏好\n const userPrefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n\n // 根据用户的系统主题偏好设置 toggle 的状态和 body 的类\n if (userPrefersDark) {\n document.body.classList.add('dark-theme');\n themeToggleCheckbox.checked = true; // 设置 toggle 为打开状态\n themeToggleButton.textContent = '· Dark'; // 设置按钮文本\n } else {\n document.body.classList.remove('dark-theme');\n themeToggleCheckbox.checked = false; // 设置 toggle 为关闭状态\n themeToggleButton.textContent = '· Light'; // 设置按钮文本\n }\n\n // 当用户手动切换 toggle 时,更新颜色模式\n themeToggleCheckbox.addEventListener('change', function() {\n document.body.classList.toggle('dark-theme', themeToggleCheckbox.checked);\n themeToggleButton.textContent = themeToggleCheckbox.checked ? '· Dark' : '· Light'; // 更新按钮文本\n });\n});\n```\n\n似乎暂时解决了问题。\n\n### 白色闪烁2\n(2023-10-19)又折腾了,想让GPT把相同的逻辑在ejs文件里操作完成,而不是js文件里,从而看看能不能减少闪烁。GPT给出的建议是:\n\n> 将 JavaScript 逻辑放在 HTML 文档的 `<head>` 部分,并直接在其中执行(而不是等待 DOMContentLoaded 事件),可能会帮助减少页面加载时的闪烁。以下是如何在 HTML 文档的 `<head>` 部分内嵌此逻辑的示例:\n> ```html\n> <!DOCTYPE html>\n> <html lang=\"<%= config.language %>\">\n> \n> <head>\n> <%- partial('_partial/head',{cache: true}) %>\n> <script>\n> (function() {\n> const savedTheme = sessionStorage.getItem('theme');\n> const userPrefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n> const useDarkMode = savedTheme ? savedTheme === 'dark' : userPrefersDark;\n> \n> if (useDarkMode) {\n> document.documentElement.style.backgroundColor = '#121212'; // 临时背景色,可以根据你的暗主题颜色进行更改\n> document.documentElement.classList.add('dark-theme');\n> }\n> })();\n> </script>\n> </head>\n> \n> <body>\n> <!-- 页面内容 -->\n> \n> <script>\n> document.addEventListener('DOMContentLoaded', function() {\n> const themeToggleCheckbox = document.getElementById('switch_default');\n> const themeToggleButton = document.getElementById('mobile-toggle-theme');\n> \n> themeToggleCheckbox.addEventListener('change', function() {\n> const isDark = themeToggleCheckbox.checked;\n> document.body.classList.toggle('dark-theme', isDark);\n> themeToggleButton.textContent = isDark ? '· Dark' : '· Light';\n> sessionStorage.setItem('theme', isDark ? 'dark' : 'light');\n> });\n> });\n> </script>\n> </body>\n> \n> </html>\n> ```\n> 在这里,我做了几个改动:\n> \n> 1. 我在 `<head>` 中直接执行了一个自执行的函数,该函数会尽快地(在 DOM 完全加载之前)设置页面的主题。\n> 2. 我还设置了 <a class=\"break-link no-style\"> `document.documentElement.style.backgroundColor` </a>,这可以更快地显示正确的背景颜色,减少从默认背景色到暗主题背景色的转变所导致的闪烁。\n> \n> 你可以根据自己网站的暗主题背景颜色修改临时背景色。希望这可以帮助减少闪烁问题!\n\n改完之后体感闪烁变成了有时候有,有时候没有。于是又采纳了社友nekobus的建议:\n\n> 把css里面的transition去掉\n\n于是把base.styl里有关transition的代码都删除了。删除之后,闪烁时屏幕为白色的时间缩短了,也就是闪得更快了。\n\n虽然还是没有完全解决问题,但是折腾了这么久,有这个结果我也很是欣慰了……以后看看还有没有优化的空间吧。\n\n### 从头再来\n2023-10-20更新:草,昨天博客崩了……修好之后上面的代码出问题了,只好又弄了一个,暂时还算是正确的?\n\n```html\n<script>\n (function() {\n // 在页面加载时根据存储的主题或用户的系统偏好设置主题\n const savedTheme = sessionStorage.getItem('theme') || localStorage.getItem('theme');\n const userPrefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n const useDarkMode = savedTheme ? savedTheme === 'dark' : userPrefersDark;\n\n if (useDarkMode) {\n document.documentElement.classList.add('dark-theme');\n }\n })();\n\n document.addEventListener('DOMContentLoaded', function() {\n const themeToggleMobile = document.getElementById('mobile-toggle-theme');\n\n function updateButtonText(isDark) {\n themeToggleMobile.textContent = isDark ? '· Dark' : '· Light';\n }\n\n function toggleTheme() {\n const isDark = document.documentElement.classList.toggle('dark-theme');\n document.body.classList.toggle('dark-theme', isDark);\n sessionStorage.setItem('theme', isDark ? 'dark' : 'light');\n updateButtonText(isDark);\n }\n\n // 初始化按钮文本\n const initialIsDark = document.documentElement.classList.contains('dark-theme');\n updateButtonText(initialIsDark);\n\n // 为移动端的切换按钮添加事件监听器\n themeToggleMobile.addEventListener('click', toggleTheme);\n });\n</script>\n```\n\n### html元素始终是dark-theme类\n晚上更新:随着夜幕的降临,我的系统切换成了夜间模式,结果……又出现了问题……\n\n![18782d644e33b666eda1c4a6511c6a12](https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/58490fdd-cf76-4fe6-a917-f46236449e27)\n\n啊啊啊啊啊啊啊!!崩溃!\n\n冷静下来开始解决问题。通过网页检查器调试,发现问题可以被表述为:html元素的类属性始终是“dark-theme“。于是开始调教GPT。\n\n现在写prompt愈发熟练,然后又能够看得懂一点代码了,也会了一点调试方法,所以过程虽然曲折(GPT太蠢),但稳步前进。以下是GPT的总结:\n\n> ### 解决问题总结:HTML 仍是夜间模式\n>\n> #### 问题描述\n>\n> 在尝试根据用户的系统偏好和用户切换来动态更改页面主题时,我们遇到了一个问题:即使在用户切换主题后,`html` 元素的类属性仍然被设置为 `dark-theme`。\n>\n> #### 尝试和失败的方法\n>\n> 1. **尝试1:代码位置调整**\n> \n> 首先尝试将 JavaScript 代码从 `body` 标签移到 `head` 标签,期望在页面加载前更早地应用主题。\n> \n> **结果:** `html` 元素仍然保留了 `dark-theme` 类。\n>\n> 2. **尝试2:调整 JavaScript 逻辑**\n> \n> 尝试通过优化 JavaScript 逻辑来更精确地控制主题的应用,包括在页面加载时就根据存储的用户偏好设置主题。\n> \n> **结果:** 调整后,依然没能解决 `html` 元素始终保持 `dark-theme` 类的问题。\n>\n> 3. **尝试3:使用调试语句**\n> \n> 通过在代码中添加调试语句来尝试找到问题所在,了解代码的实际执行流程和 `html` 元素类属性被修改的时机。\n> \n> **结果:** 通过调试,我们了解到了代码的执行情况,但仍然没有解决问题。\n>\n> #### 成功的方法\n>\n> **方法:专注于 `body` 标签并且改进 JavaScript 逻辑**\n>\n> 最终,我们决定集中注意力修改 `body` 元素的类属性,而不是 `html` 元素。同时,我们优化了 JavaScript 代码,使其在页面加载时更准确地根据用户的系统偏好和存储的主题偏好来设置主题。\n>\n> 在实际代码中,我们:\n>\n> - 在 DOM 加载完成后执行 JavaScript 代码。\n> - 首先根据存储的主题偏好设置主题,如果没有存储的偏好,则根据用户的系统偏好设置主题。\n> - 最终成功的代码可以实时响应用户的切换操作,并在用户重新访问页面时记住用户的主题偏好。\n>\n> 这样,我们成功解决了 `html` 元素始终保持 `dark-theme` 类的问题,并确保了网站可以根据用户的偏好和操作实时地、准确地应用日间/夜间模式。\n\n最终写出来的代码是这样的:\n\n```html\n<script>\n document.addEventListener('DOMContentLoaded', function() {\n const savedTheme = localStorage.getItem('theme');\n alert(\"Saved theme: \", savedTheme); // 输出保存的主题\n\n const userPrefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n alert(\"User prefers dark theme: \", userPrefersDark); // 输出用户的系统偏好\n \n let useDarkMode;\n if (savedTheme === 'dark' || savedTheme === 'light') { // 当有明确的保存主题时\n useDarkMode = savedTheme === 'dark';\n } else {\n useDarkMode = userPrefersDark; // 默认使用系统偏好\n }\n\n alert(\"Using dark theme: \", useDarkMode); // 输出是否使用暗主题\n\n document.body.classList.toggle('dark-theme', useDarkMode); // 应用或移除 dark-theme 类\n\n const themeToggleCheckbox = document.getElementById('switch_default');\n if (themeToggleCheckbox) {\n themeToggleCheckbox.checked = useDarkMode;\n }\n\n themeToggleCheckbox.addEventListener('change', function() {\n const isChecked = themeToggleCheckbox.checked;\n alert(\"Checkbox is checked: \", isChecked); // 输出复选框的状态\n \n document.body.classList.toggle('dark-theme', isChecked);\n localStorage.setItem('theme', isChecked ? 'dark' : 'light');\n });\n });\n</script>\n```\n\n祈祷不要再出问题了……\n\n### 白色闪烁3\n惊讶地发现移动端已经很少出现白色闪烁了(虽然有时候还是有),但是桌面端的闪烁则仍很频繁。GPT给出了两个方案,我同时采纳了,体感闪烁频率有所减少,而且闪烁速度加快,但还是时不时会有。GPT的总结如下:\n\n> **1. 优先执行主题设置的 JavaScript**:\n>\n> 将处理主题的 JavaScript 代码放在页面 `<head>` 部分并优先执行。这是为了确保在加载和应用其他 CSS 或 JavaScript 之前,根据本地存储或用户的偏好来设置相应的主题。\n>\n> ```html\n> <head>\n> <script>\n> (function() {\n> const savedTheme = localStorage.getItem('theme');\n> const userPrefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n> let useDarkMode = savedTheme ? savedTheme === 'dark' : userPrefersDark;\n> document.body.classList.toggle('dark-theme', useDarkMode);\n> })();\n> </script>\n> </head>\n> ```\n>\n> **2. 使用 CSS 隐藏内容**:\n>\n> 如果即便优先执行了主题设置代码仍然出现闪烁,可以考虑暂时使用 CSS 来隐藏页面的内容,直至 JavaScript 代码运行并应用了正确的主题。\n>\n> ```css\n> body {\n> visibility: hidden; /* 初始隐藏内容 */\n> }\n> \n> body.theme-loaded {\n> visibility: visible; /* JavaScript 设置完主题后显示内容 */\n> }\n> ```\n>\n> 在 JavaScript 中,当主题被正确设置后,您可以添加一个类(例如 `theme-loaded`)来显示页面内容。\n>\n> ```javascript\n> document.addEventListener('DOMContentLoaded', function() {\n> const themeToggleCheckbox = document.getElementById('switch_default');\n>\n> themeToggleCheckbox.addEventListener('change', function() {\n> const isChecked = themeToggleCheckbox.checked;\n> document.body.classList.toggle('dark-theme', isChecked);\n> localStorage.setItem('theme', isChecked ? 'dark' : 'light');\n> });\n>\n> document.body.classList.add('theme-loaded'); // 页面加载完成后显示内容\n> });\n> ```\n>\n> 这种方式尽可能减少了页面加载时的闪烁,通过在页面结构加载之前就确定并设置好用户的主题偏好。在全部内容加载完毕后再显示,从而避免了主题切换时的闪烁。\n\n好吧,看来这就是我的能力限度了。暂时先这样吧。\n\n# 版权声明\n\n我使用的是CC协议,在[这个](https://chooser-beta.creativecommons.org)网站上生成html代码。生成代码后,我进行了各种调整,包括去掉文字只显示图标、调整footer内容顺序、图标缩小、图标居中等等,把GPT烦死了。弄好之后我的footer.ejs部分内容如下:\n\n```html\n<footer id=\"footer\" class=\"footer\">\n <div class=\"copyright\">\n <span>\n <a href=\"http://creativecommons.org/licenses/by-nc/4.0/?ref=chooser-v1\" target=\"_blank\" rel=\"license noopener noreferrer\" style=\"display:inline-block;\">\n <img style=\"height:16px!important;margin-left:1px;vertical-align: middle; position: relative; top: -1px;\" src=\"https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1\">\n <img style=\"height:16px!important;margin-left:1px;vertical-align: middle; position: relative; top: -1px;\" src=\"https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1\">\n <img style=\"height:16px!important;margin-left:1px;vertical-align: middle; position: relative; top: -1px;\" src=\"https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1\">\n </a>\n | Powered by <a href=\"https://hexo.io\" target=\"_blank\">Hexo</a> & <a href=\"https://github.com/Siricee/hexo-theme-Chic\" target=\"_blank\">Chic</a>\n | <script async src=\"//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js\"></script><span id=\"busuanzi_value_site_uv\"></span>\n </span>\n </div>\n```\n\n其中图标的垂直位置是手动调的相对位置,因为直接居中的话,图标……居得不是很中。这部分是我的折腾中相对容易的部分了。比较遗憾的是CC协议的图标在夜间模式下比较丑,而且这没法改。\n\n## 颜色修改\n(2023-12-7更新)之前说到CC协议的图标在夜间模式下比较丑,没法改,今天鼓起勇气着手修改,最终成功。思路是先编辑SVG文档,把协议的几个图标中间改为透明色,然后再修改CSS样式,使得在夜间模式下边框颜色为#a9a9b2(夜间模式下文字的颜色)。\n\n其中,修改SVG文档用到的是[这个网站](https://www.svgviewer.dev)。具体的修改是将<circle...\\/>中的fill从原来的\"#FFFFFF\"改成\"none\"。\n\n修改后完整的footer.ejs内容如下:\n\n```html\n<footer id=\"footer\" class=\"footer\">\n <div class=\"copyright\">\n <span>\n <!-- Existing Creative Commons images and links -->\n <a href=\"http://creativecommons.org/licenses/by-nc/4.0/?ref=chooser-v1\" target=\"_blank\" rel=\"license noopener noreferrer\" style=\"display:inline-block;\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"height:16px; width:16px; margin-left:1px;vertical-align: middle; position: relative; top: -1px;\" class=\"cc-logo\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.0\" id=\"Layer_1\" x=\"0px\" y=\"0px\" width=\"64px\" height=\"64px\" viewBox=\"5.5 -3.5 64 64\" enable-background=\"new 5.5 -3.5 64 64\" xml:space=\"preserve\">\n <g>\n <circle fill=\"none\" cx=\"37.785\" cy=\"28.501\" r=\"28.836\"/>\n <path d=\"M37.441-3.5c8.951,0,16.572,3.125,22.857,9.372c3.008,3.009,5.295,6.448,6.857,10.314 c1.561,3.867,2.344,7.971,2.344,12.314c0,4.381-0.773,8.486-2.314,12.313c-1.543,3.828-3.82,7.21-6.828,10.143 c-3.123,3.085-6.666,5.448-10.629,7.086c-3.961,1.638-8.057,2.457-12.285,2.457s-8.276-0.808-12.143-2.429 c-3.866-1.618-7.333-3.961-10.4-7.027c-3.067-3.066-5.4-6.524-7-10.372S5.5,32.767,5.5,28.5c0-4.229,0.809-8.295,2.428-12.2 c1.619-3.905,3.972-7.4,7.057-10.486C21.08-0.394,28.565-3.5,37.441-3.5z M37.557,2.272c-7.314,0-13.467,2.553-18.458,7.657 c-2.515,2.553-4.448,5.419-5.8,8.6c-1.354,3.181-2.029,6.505-2.029,9.972c0,3.429,0.675,6.734,2.029,9.913 c1.353,3.183,3.285,6.021,5.8,8.516c2.514,2.496,5.351,4.399,8.515,5.715c3.161,1.314,6.476,1.971,9.943,1.971 c3.428,0,6.75-0.665,9.973-1.999c3.219-1.335,6.121-3.257,8.713-5.771c4.99-4.876,7.484-10.99,7.484-18.344 c0-3.543-0.648-6.895-1.943-10.057c-1.293-3.162-3.18-5.98-5.654-8.458C50.984,4.844,44.795,2.272,37.557,2.272z M37.156,23.187 l-4.287,2.229c-0.458-0.951-1.019-1.619-1.685-2c-0.667-0.38-1.286-0.571-1.858-0.571c-2.856,0-4.286,1.885-4.286,5.657 c0,1.714,0.362,3.084,1.085,4.113c0.724,1.029,1.791,1.544,3.201,1.544c1.867,0,3.181-0.915,3.944-2.743l3.942,2 c-0.838,1.563-2,2.791-3.486,3.686c-1.484,0.896-3.123,1.343-4.914,1.343c-2.857,0-5.163-0.875-6.915-2.629 c-1.752-1.752-2.628-4.19-2.628-7.313c0-3.048,0.886-5.466,2.657-7.257c1.771-1.79,4.009-2.686,6.715-2.686 C32.604,18.558,35.441,20.101,37.156,23.187z M55.613,23.187l-4.229,2.229c-0.457-0.951-1.02-1.619-1.686-2 c-0.668-0.38-1.307-0.571-1.914-0.571c-2.857,0-4.287,1.885-4.287,5.657c0,1.714,0.363,3.084,1.086,4.113 c0.723,1.029,1.789,1.544,3.201,1.544c1.865,0,3.18-0.915,3.941-2.743l4,2c-0.875,1.563-2.057,2.791-3.541,3.686 c-1.486,0.896-3.105,1.343-4.857,1.343c-2.896,0-5.209-0.875-6.941-2.629c-1.736-1.752-2.602-4.19-2.602-7.313 c0-3.048,0.885-5.466,2.658-7.257c1.77-1.79,4.008-2.686,6.713-2.686C51.117,18.558,53.938,20.101,55.613,23.187z\"/>\n </g>\n </svg>\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"height:16px; width:16px; margin-left:1px;vertical-align: middle; position: relative; top: -1px;\" class=\"att-logo\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.0\" id=\"Layer_1\" x=\"0px\" y=\"0px\" width=\"64px\" height=\"64px\" viewBox=\"5.5 -3.5 64 64\" enable-background=\"new 5.5 -3.5 64 64\" xml:space=\"preserve\">\n <g>\n <circle fill=\"none\" cx=\"37.637\" cy=\"28.806\" r=\"28.276\"/>\n <g>\n <path d=\"M37.443-3.5c8.988,0,16.57,3.085,22.742,9.257C66.393,11.967,69.5,19.548,69.5,28.5c0,8.991-3.049,16.476-9.145,22.456 C53.879,57.319,46.242,60.5,37.443,60.5c-8.649,0-16.153-3.144-22.514-9.43C8.644,44.784,5.5,37.262,5.5,28.5 c0-8.761,3.144-16.342,9.429-22.742C21.101-0.415,28.604-3.5,37.443-3.5z M37.557,2.272c-7.276,0-13.428,2.553-18.457,7.657 c-5.22,5.334-7.829,11.525-7.829,18.572c0,7.086,2.59,13.22,7.77,18.398c5.181,5.182,11.352,7.771,18.514,7.771 c7.123,0,13.334-2.607,18.629-7.828c5.029-4.838,7.543-10.952,7.543-18.343c0-7.276-2.553-13.465-7.656-18.571 C50.967,4.824,44.795,2.272,37.557,2.272z M46.129,20.557v13.085h-3.656v15.542h-9.944V33.643h-3.656V20.557 c0-0.572,0.2-1.057,0.599-1.457c0.401-0.399,0.887-0.6,1.457-0.6h13.144c0.533,0,1.01,0.2,1.428,0.6 C45.918,19.5,46.129,19.986,46.129,20.557z M33.042,12.329c0-3.008,1.485-4.514,4.458-4.514s4.457,1.504,4.457,4.514 c0,2.971-1.486,4.457-4.457,4.457S33.042,15.3,33.042,12.329z\"/>\n </g>\n </g>\n </svg>\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"height:16px; width:16px; margin-left:1px;vertical-align: middle; position: relative; top: -1px;\" class=\"non-logo\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.0\" id=\"Layer_1\" x=\"0px\" y=\"0px\" width=\"64px\" height=\"64px\" viewBox=\"5.5 -3.5 64 64\" enable-background=\"new 5.5 -3.5 64 64\" xml:space=\"preserve\">\n <g>\n <circle fill=\"none\" cx=\"37.47\" cy=\"28.736\" r=\"29.471\"/>\n <g>\n <path d=\"M37.442-3.5c8.99,0,16.571,3.085,22.743,9.256C66.393,11.928,69.5,19.509,69.5,28.5c0,8.992-3.048,16.476-9.145,22.458 C53.88,57.32,46.241,60.5,37.442,60.5c-8.686,0-16.19-3.162-22.513-9.485C8.644,44.728,5.5,37.225,5.5,28.5 c0-8.762,3.144-16.343,9.429-22.743C21.1-0.414,28.604-3.5,37.442-3.5z M12.7,19.872c-0.952,2.628-1.429,5.505-1.429,8.629 c0,7.086,2.59,13.22,7.77,18.4c5.219,5.144,11.391,7.715,18.514,7.715c7.201,0,13.409-2.608,18.63-7.829 c1.867-1.79,3.332-3.657,4.398-5.602l-12.056-5.371c-0.421,2.02-1.439,3.667-3.057,4.942c-1.622,1.276-3.535,2.011-5.744,2.2 v4.915h-3.714v-4.915c-3.543-0.036-6.782-1.312-9.714-3.827l4.4-4.457c2.094,1.942,4.476,2.913,7.143,2.913 c1.104,0,2.048-0.246,2.83-0.743c0.78-0.494,1.172-1.312,1.172-2.457c0-0.801-0.287-1.448-0.858-1.943l-3.085-1.315l-3.771-1.715 l-5.086-2.229L12.7,19.872z M37.557,2.214c-7.276,0-13.428,2.571-18.457,7.714c-1.258,1.258-2.439,2.686-3.543,4.287L27.786,19.7 c0.533-1.676,1.542-3.019,3.029-4.028c1.484-1.009,3.218-1.571,5.2-1.686V9.071h3.715v4.915c2.934,0.153,5.6,1.143,8,2.971 l-4.172,4.286c-1.793-1.257-3.619-1.885-5.486-1.885c-0.991,0-1.876,0.191-2.656,0.571c-0.781,0.381-1.172,1.029-1.172,1.943 c0,0.267,0.095,0.533,0.285,0.8l4.057,1.83l2.8,1.257l5.144,2.285l16.397,7.314c0.535-2.248,0.801-4.533,0.801-6.857 c0-7.353-2.552-13.543-7.656-18.573C51.005,4.785,44.831,2.214,37.557,2.214z\"/>\n </g>\n </g>\n </svg> \n </a>\n | 由 <a href=\"https://hexo.io\" target=\"_blank\">Hexo</a> & <a href=\"https://github.com/Siricee/hexo-theme-Chic\" target=\"_blank\">Chic</a> 驱动\n | <script async src=\"//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js\"></script><span id=\"busuanzi_value_site_uv\"></span>\n | <!-- Add the SVG logo wrapped in a link -->\n <a href=\"https://www.travellings.cn/go.html\" target=\"_blank\" style=\"display:inline-block;\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"kaiwang\" height=\"16\" width=\"14\" viewBox=\"0 0 448 512\" style=\"height:16px!important; margin-left:1px; vertical-align: middle; position: relative; top: -1px;\">\n <!-- SVG Path -->\n <path d=\"M96 0C43 0 0 43 0 96V352c0 48 35.2 87.7 81.1 94.9l-46 46C28.1 499.9 33.1 512 43 512H82.7c8.5 0 16.6-3.4 22.6-9.4L160 448H288l54.6 54.6c6 6 14.1 9.4 22.6 9.4H405c10 0 15-12.1 7.9-19.1l-46-46c46-7.1 81.1-46.9 81.1-94.9V96c0-53-43-96-96-96H96zM64 128c0-17.7 14.3-32 32-32h80c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V128zM272 96h80c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32H272c-17.7 0-32-14.3-32-32V128c0-17.7 14.3-32 32-32zM64 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm288-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"/>\n </svg>\n </a>\n </span>\n </div>\n\n <style>\n .dark-theme .kaiwang {\n fill: #a9a9b2;\n }\n </style>\n\n<style>\n /* Apply fill color based on currentColor for all logos */\n .cc-logo path, .att-logo path, .non-logo path {\n fill: currentColor;\n }\n\n /* Default color (black) for day mode for all logos */\n .cc-logo path, .att-logo path, .non-logo path {\n color: black;\n }\n\n /* Color (#A9A9B2) for dark theme for all logos */\n .dark-theme .cc-logo path,\n .dark-theme .att-logo path,\n .dark-theme .non-logo path {\n color: #A9A9B2;\n }\n</style>\n\n\n <%- partial('totop') %>\n <script src=\"<%- config.root %>js/totop.js\"></script>\n\n <!-- require APlayer -->\n <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css\">\n <script src=\"https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js\"></script>\n <!-- require MetingJS -->\n <script src=\"https://cdn.jsdelivr.net/npm/meting@2/dist/Meting.min.js\"></script>\n\n\n\n</footer>\n\n```\n\n# 搜索\n\n今天(2023-10-16)凌晨翻Chic主题的issues,发现一个[教程汇总](https://myoontyee.github.io/article/551b025b.html)。里面有[添加搜索功能的教程](https://myoontyee.github.io/article/1650c0d7.html#header内添加搜索框)。此前我也尝试过添加,参考的教程不是针对这个模板的,导致UI太丑,于是作罢。既然有特定的教程,那我来试一下吧!\n\n第一遍失败了,UI和之前添加过的一样,而且不能搜索。大概是之前添加的代码没删干净。于是把_partial文件夹的内容回滚到三天前,再重新操作一次,于是成功。\n\n然后觉得移动端搜索栏展开时有点丑,想要在搜索栏展开时把页面左上角的文字隐藏掉(否则就会和搜索图标重叠),但是没成功,而且还把菜单栏的样式整个弄坏了。于是准备放弃,又回滚重来,但是不知为何还原不了一开始成功时的样式。所以一气之下把移动端的搜索功能整个删除了!最终的搜索栏:电脑端有、手机端横屏竖屏都没有,平板端横屏有、竖屏没有(好麻烦)。 实现很简单,在styl文件中添加:\n\n```css\n@media (max-width: 1024px)\n .search\n display none !important\n```\n即可。\n\n后来(2023-10-20)又改成了“max-width: 800px”。实际上平板设备只有iPad Mini竖屏时不会显示搜索框了(因为实在是很丑)。\n\n## 微调(2024-1-28)\n进行了一些微调。具体来说,是(1)把移动端搜索框的背景色改为与整体背景色一致,以避免展开搜索框时搜索框和背后的文字打架的现象;(2)设定移动端时,展开的搜索框大小为屏幕的60%,而非原来设置的100%;(3)规定移动端为宽度小于等于900px。\n\n我把search.ejs里涉及移动端宽度的代码的宽度数值改为了900,并修改search.css代码如下:\n\n```css\n#u-search {\n display: none;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 60px 20px;\n z-index: 1001;\n}\n\n\n#u-search .modal {\n position: fixed;\n height: 80%;\n width: 100%;\n max-width: 640px;\n left: 50%;\n top: 0;\n margin: 64px 0px 0px -320px;\n background: #fff;\n z-index: 3;\n border-radius: 4px;\n overflow: hidden;\n}\n\n#u-search .modal-header {\n position: relative;\n width: 100%;\n height: 64px;\n z-index: 3;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n font-size: 16px;\n box-shadow: 0 1px 2px 0px rgba(0, 0, 0, 0.1);\n background: #fff;\n transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n}\n\n#u-search .modal-header .container {\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 0px;\n}\n\n#u-search .modal-header .container .u-search-modal-form {\n display: flex;\n flex-direction: row;\n align-items: center;\n flex: 1;\n}\n\n#u-search .u-search-modal-form .form-submit-btn {\n width: 50px;\n height: 64px;\n background: none;\n border: none;\n outline: none;\n margin: 0 5px 0 5px;\n}\n\n#u-search .u-search-modal-form .form-submit-btn img {\n width: 33px;\n height: 33px;\n}\n\n#u-search .modal-header .container .u-search-modal-form .form-input {\n flex: 1;\n margin-right: 15px;\n border: none;\n padding: 10px 10px;\n outline: none;\n}\n\n\n#u-search .modal-header .modal-close {\n display: block;\n width: 55px;\n height: 64px;\n top: 0;\n right: 0;\n color: #2196f3;\n cursor: pointer;\n text-align: center;\n line-height: 64px;\n vertical-align: middle;\n transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n z-index: 2;\n font-size: 22px;\n}\n\n#u-search .modal-header .search-loading {\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 2px;\n background: transparent;\n z-index: 1;\n\n}\n\n#u-search .modal-header .search-loading .search-loading-bar {\n transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n position: relative;\n display: none;\n width: 0%;\n height: 100%;\n background: #2196f3;\n\n}\n\n#u-search .modal .modal-body {\n padding: 15px;\n height: calc(100% - 85px);\n overflow: auto;\n\n}\n\n#u-search .modal .modal-body::-webkit-scrollbar {\n width: 5px;\n height: 5px;\n /**/\n}\n\n#u-search .modal .modal-body::-webkit-scrollbar-track {\n background: rgb(239, 239, 239);\n border-radius: 2px;\n}\n\n#u-search .modal .modal-body::-webkit-scrollbar-thumb {\n background: #bfbfbf;\n border-radius: 10px;\n}\n\n#u-search .modal .modal-body::-webkit-scrollbar-thumb:hover {\n background: #333;\n}\n\n#u-search .modal .modal-body::-webkit-scrollbar-corner {\n background: #179a16;\n}\n\n#u-search .modal .modal-body .modal-results {\n list-style: none;\n padding-left: 0;\n margin: 0px;\n}\n\n#u-search .modal .modal-body .modal-results .result-item {\n padding: 15px;\n}\n\n#u-search .modal .modal-body .modal-results .result-item:hover {\n background: #e8f4fd;\n}\n\n#u-search .modal .modal-body .modal-results .result-item .result-item-detail {\n display: flex;\n flex-direction: column;\n}\n\n#u-search .modal .modal-body .modal-results .result-item .result-item-detail .title {\n color: #6e6e6e;\n font-weight: 700;\n font-size: 18px;\n margin-bottom: 10px;\n}\n\n#u-search .modal .modal-body .modal-results .result-item .result-item-detail .content {\n display: block;\n white-space: inherit;\n word-break: break-all;\n text-overflow: ellipsis;\n font-size: 14px;\n color: rgba(85, 85, 85, 0.65);\n letter-spacing: 1px;\n user-select: none;\n}\n\n#u-search .search-keyword {\n color: #0c7cd5;\n text-decoration: underline;\n font-weight: bold;\n font-style: normal\n}\n\n#u-search .modal-body .no-result {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n#u-search .modal-overlay {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.7);\n z-index: 1;\n}\n\n@media screen and (max-width: 680px) {\n #u-search {\n padding: 0px;\n display: none;\n }\n\n #u-search .modal {\n box-shadow: none;\n max-width: none;\n top: 0;\n left: 0;\n margin: 0;\n height: 100%;\n border-radius: 0;\n }\n\n #u-search .modal-header {\n border-radius: 0;\n padding: 0px;\n }\n}\n\n.modal-active {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n}\n\n\n\n\n\n\n/* 以下是搜索框 */\n.search {\n margin-right: 6px;\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n\n.search .form-search {\n padding: 10px 8px;\n}\n\n.search .form-search .input {\n display: block;\n line-height: 1.3;\n color: #555;\n background: #e8e8e8;\n padding: 5px 8px;\n box-shadow: none;\n box-sizing: border-box;\n font-size: 1rem;\n border-radius: 8px;\n border: none;\n outline: none;\n}\n\n.search .search-btn {\n width: 22px;\n height: 22px;\n line-height: 22px;\n margin-right: 5px;\n}\n\n.search .search-btn .search-btn-img {\n height: 100%;\n width: 100%;\n}\n\n\n/* 搜索框修改 */\n@media screen and (max-width: 900px) {\n\n /* 此处添加了内容 */\n .mobile-title-hidden {\n transition: all 0.5s;\n transform: translateX(-300%);\n }\n\n /* 上面的是添加的内容 */\n .navbar-mobile-right {\n display: flex;\n flex-direction: row;\n align-items: center;\n }\n\n .search .search-btn {\n cursor: pointer;\n }\n\n .search .form-search {\n display: none;\n }\n\n :root {\n --background-color: white;\n --night-mode-background-color: #292a2d;\n }\n\n .mobile-search {\n transition: width 0.3s;\n position: absolute;\n top: 0px;\n left: 0px;\n right: 50px;\n padding-left: 15px;\n background: var(--background-color);\n height: 80px;\n display: flex;\n flex-direction: row;\n margin-right: 15px;\n box-sizing: border-box;\n max-width: 600px;\n /* 设置最大宽度为600px */\n width: 100%;\n /* 让宽度在小于900px时占满整个屏幕 */\n }\n\n /* Night Mode */\n body.dark-theme .mobile-search {\n background: var(--night-mode-background-color);\n }\n\n .mobile-search .form-search {\n display: block;\n flex: 1;\n }\n\n .mobile-search .input {\n width: 100%;\n }\n\n @media screen and (max-width: 900px) {\n .open-search {\n position: absolute;\n top: 0;\n right: 15px;\n }\n\n .mobile-search {\n width: 60%;\n }\n }\n\n\n .mobile-search .form-search {\n display: block;\n flex: 1;\n }\n\n .mobile-search .input {\n width: 100%;\n }\n\n /* 此处添加了内容 */\n .open-search {\n position: absolute;\n top: 0;\n right: 15px;\n }\n}\n```\n\n# 教程汇总里的其他有用教程\n\n[Archive页面过长博文名省略](https://myoontyee.github.io/article/321a7025.html):在博文名过长的时候将其省略,省略的部分用“…”表示。\n\n[Categories页面过长博文名省略](https://myoontyee.github.io/article/9ff0cec8.html):与上一个教程大同小异,只是调整的是Categories页面。\n\n[添加Emoji支持](https://myoontyee.github.io/article/a150dc7d.html):添加Emoji😈支持。\n\n[添加文章字数和阅读时长](https://myoontyee.github.io/article/11459889.html):如题。\n\n[谷歌收录](https://myoontyee.github.io/article/264c6a00.html):将博客部署到搜索引擎如Google上使得其能被搜索到。\n\n[打赏](https://myoontyee.github.io/article/cb001f78.html):如题,我暂时用不到,先存在这里。\n\n[文章置顶](https://myoontyee.github.io/article/fee5a0e2.html):也暂时用不到,先存在这里。\n\n## 过长博文名省略\n(2023-12-5更新)发现按照上面的教程操作,只有桌面端的博文名省略了,移动端依旧会超过屏幕。所以修改插入到archive.ejs中的代码如下:\n\n```css\n @media screen and (min-width: 769px){ \n li {\n width: 650px;\n height: 29.5px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n\n /* Mobile styles */\n @media screen and (max-width: 768px) {\n li {\n width: 285px; /* Adjust the width for mobile */\n /* Retain other properties or adjust as needed */\n height: 29.5px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n ```\n\n 但在“分类”页面中,某些设备不显示省略号,不知何故。\n\n (2023-12-7更新)知道是什么原因了。解决方法是微调参数。我将tag和archive页面的min-width改为768px,max-width改为767px,然后把大屏幕下的width改为600px,小屏幕下的width改为240px,问题解决。至于categories页面,我直接把所有屏幕尺寸的宽度调成了240px。\n\n (2024-5-3更新)发现大屏幕上每一个category的子页面上,宽度仍然是240px,不美观。于是修改category.ejs代码如下:\n\n ```html\n<style>\n li {\n height: 24.2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n @media screen and (max-width: 767px) {\n li {\n width: 240px;\n }\n }\n\n @media screen and (min-width: 768px) {\n li {\n width: 60vw;\n }\n }\n</style>\n ```\n\n## 置顶\n教程见上。但我发现教程缺少了一步,就是把主题文件夹下的_config.yml中“归档”按钮的跳转链接改掉:\n\n```yml\nnav:\n 归档: /top # 本来是/archive\n ```\n\n但是这样一来,归档页面的链接就会变成<span>https://greendolphindance.com/top/</span>了,有点不爽。解决方法如下。首先top.js的内容改成:\n\n```javascript\nvar pagination = require('hexo-pagination');\nhexo.extend.generator.register('top', function (locals) {\n let allPost = locals.posts;\n\n return pagination('/archives', allPost, { //这里改成/archives\n perPage: this.config.top_generator.per_page,\n layout: ['top', 'archive', 'index'],\n format: 'page' + '/%d/',\n data: {\n __index: true\n }\n });\n});\n```\n\n然后用top.ejs里的内容替换掉archive.ejs里的内容,并在“pagination”位置作如下修改:\n\n```html\n<nav class=\"pagination\">\n <%- paginator({ prev_next: false, end_size: 1, mid_size: 2, format: 'page/%d/' , <!--这里top改成archives-->\n total: Math.ceil(posts.length / perPage) }) %>\n</nav>\n```\n\n除此之外,由于我限定了桌面端li的宽度为650px,这会导致置顶栏的显示错位,于是修改CSS代码如下:\n\n```css\n@media screen and (min-width: 769px) {\n li {\n width: 650px;\n height: 29.5px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n}\n\n/* Mobile styles */\n@media screen and (max-width: 768px) {\n li {\n width: 285px;\n /* Adjust the width for mobile */\n /* Retain other properties or adjust as needed */\n height: 29.5px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n}\n\n.top-item-date {\n float: right;\n text-align: right;\n color: #a9a9b3;\n}\n\n.top-item {\n margin-left: 2rem;\n line-height: 2em;\n margin-bottom: 10px;\n}\n```\n\n### 修bug\n设置完毕发现过长博文名省略被我覆盖掉了……于是改了archive.ejs的代码。修改后的完整代码如下:\n\n```html\n <div class=\"container top\">\n <div class=\"post-wrap tags top\">\n <h2 class=\"post-title top\">- 文章 -</h2>\n <br>\n <!-- <div class=\"tag-cloud-tags top\">\n <%site.tags.forEach(item=>{%>\n <a href=\"<%-url_for(item.path)%>\"><%- item.name%><small>(<%-item.length%>)</small></a>\n <%})%>\n </div> -->\n <!-- 2022年3月29日 添加置顶功能 -->\n <div class=\"post top\">\n <hr />\n <h3>置顶</h3>\n <!-- 判断有没有 置顶 这个标签的文章 -->\n <%site.tags.forEach(item=>{%>\n <% if(item.name==\"置顶\" ){ %>\n <% item.posts.each(function (post) { %>\n <!-- 有的情况判断有没有top数值,按top从大到小排列,当然也可以用时间,目前单独写了个top -->\n <% if(post.top){ %>\n <article class=\"top-item\">\n <a class=\"top-item-link\" href=\"<%- url_for(post.path) %>\">\n <li>\n <%= post.title %>\n <span class=\"top-item-date\"><%- date(post.date, theme.date_format) %></span>\n </li>\n </a>\n\n </article>\n <% ;} %>\n <% }) %>\n <% ;} %>\n <% }) %>\n <hr />\n </div>\n <!-- 2022年3月29日 添加置顶功能为上 -->\n\n <!-- 2022年3月31日 添加每页文章数如下 -->\n <!-- 2022年3月30日 每页条数 -->\n <% var perPage=config.top_generator.per_page %>\n <% var currentPage=url.match(/page\\/(.*)\\//) ? url.match(/page\\/(.*)\\//)[1] : 1 %>\n <% var last_year='' ; %>\n <% var posts=site.posts %>\n <!-- 按date逆序排序 -->\n <% posts.data=posts.data.sort((a, b)=> b.date - a.date) %>\n <% posts.slice((currentPage - 1) * perPage, currentPage * perPage ).each(function (post) { %>\n <% var cur_year=post.date.year(); %>\n <% if(last_year !==cur_year){ %>\n <h3><%- cur_year %></h3>\n <% last_year=cur_year; } %>\n <article class=\"archive-item\">\n\n <a class=\"archive-item-link\" href=\"<%- url_for(post.path) %>\">\n <li class=\"title\">\n <%= post.title %>\n </li>\n </a>\n\n <span class=\"archive-item-date\"><%- date(post.date, theme.date_format) %></span>\n </article>\n <% }) %>\n\n <% if(Math.ceil(posts.length / perPage)> 1) { %>\n <nav class=\"pagination\">\n <%- paginator({ prev_next: false, end_size: 1, mid_size: 2, format: 'page/%d/' , total:\n Math.ceil(posts.length / perPage) }) %>\n </nav>\n <% } %>\n <!-- 2022年3月31日 添加每页文章数如上 -->\n </div>\n </div>\n\n <style>\n @media (min-width: 769px) {\n .title {\n width: 650px;\n height: 29.5px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n\n /* Mobile styles */\n @media (max-width: 768px) {\n .title {\n width: 60vw !important;\n /* Adjust the width for mobile */\n /* Retain other properties or adjust as needed */\n height: 29.5px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n\n .top-item-date {\n float: right;\n text-align: right;\n color: #a9a9b3;\n }\n\n .top-item {\n margin-left: 2rem;\n line-height: 2em;\n margin-bottom: 10px;\n }\n </style>\n```\n\n\n\n\n# 长链接\n\n这篇博文里有一些很长的链接。这些链接,尤其在移动端的时候,无法自动断行,导致页面被撑开,很丑。\n\n我首先在post_content.styl里加入如下代码:\n\n```css\n.break-link\n overflow-wrap break-word\n word-break break-all\n```\n\n然后将长链接两端分别加上“\\<a class=\"break-link\">”和“\\</a>”。有效,但是会导致该链接显示为链接样式(淡蓝色、下划线),而我不希望它如此显示。于是又在post_content.styl里加入:\n\n```css\n.no-style\n color inherit\n text-decoration none\n```\n\n再把长链接的class改成“break-link no-style”。问题解决。以后如果想要链接断行,同时让其也显示成链接样式的话,class里不写no-style即可。\n\n# 文章目录\n参考的是[这个教程](https://cloud.tencent.com/developer/article/2065866)。之前也试过别的教程,失败了。这个能用。配置很简单。但是直接设置,这个目录是无法点击跳转的,需要再加一些话:\n\n```yaml\ntoc:\n maxdepth: 3\n class: toc\n slugify: transliteration\n decodeEntities: false\n anchor:\n position: before\n symbol: ''\n style: header-anchor\n```\n\n这样即可。\n\n## 进阶\n觉得目录作为文章的内容不太方便,于是去GitHub上提了issue,希望主题的开发者能够实现相关功能。开发者推荐了[tocbot](https://tscanlin.github.io/tocbot)这个插件。配置过程如下:\n\n在post.ejs里添加了如下代码:\n\n```javascript\n<div class=\"js-toc\"></div>\n<div class=\"post-content\"> <!-- 这里的class需要根据自身情况修改 -->\n <!-- 博客文章内容将在这里渲染 -->\n</div>\n```\n然后在layout.ejs里添加了如下代码:\n```javascript\n<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/tocbot/dist/tocbot.css\" />\n<script src=\"https://cdn.jsdelivr.net/npm/tocbot/dist/tocbot.js\"></script>\n <script>\n document.addEventListener('DOMContentLoaded', (event) => {\n tocbot.init({\n tocSelector: '.js-toc',\n contentSelector: '.post-content',\n headingSelector: 'h1, h2, h3, h4',\n });\n });\n </script>\n```\n\n最后在media.styl里添加了如下代码:\n\n```css\n/* post toc Style */\n@media screen and (max-width: 1279px) // 最大宽度1279px时应用这条规则。(最大宽度小于1279px返回false,屏蔽规则。)\n .post-toc\n display none\n\n.js-toc {\n position: fixed;\n top: 150px; /* 距离顶部的距离,可以根据需要调整 */\n right: 20px; /* 距离右侧的距离,可以根据需要调整 */\n width: 150px; /* 目录的宽度,可以根据需要调整 */\n overflow-y: visible; /* 如果目录很长,这将添加滚动条 */\n max-height: 500px; /* 最大高度,可以根据需要调整 */\n padding: 20px; /* 内边距,可以根据需要调整 */\n background-color: transparent; /* 背景颜色,可以根据需要调整 */\n z-index: 1000; /* 确保目录显示在其他元素之上 */\n}\n\n/* 设置目录项为 flex 容器 */\n.toc-link {\n display: flex;\n align-items: center;\n}\n\n/* 调整线条的样式和位置 */\n.toc-link::before {\n content: \"\";\n height: 1em; /* 你可以根据需要调整这个值 */\n margin-right: 10px; /* 添加一些右边距 */\n margin-top: 0.2em; /* 控制线条距离目录项顶部的距离 */\n margin-bottom: 0.2em; /* 控制线条距离目录项底部的距离 */\n}\n\n/* 去掉目录前面的数字 */\n.toc-list li {\n list-style-type: none; /* 设置列表样式类型为 none */\n}\n\n.toc-link::before {\n display: none !important;\n}\n```\n至于为什么是media.styl而不是别的,我也不知道,随便选了一个罢了。\n\n这样实现的目录有点丑,不过我尽力了,以后再来修改。\n\n然后还想让目录在手机和平板上不显示,这个简单,在media.styl里添加\n```css\n/* 当屏幕宽度小于或等于 1280px 时应用这些样式 */\n@media screen and (max-width: 1280px) {\n .js-toc {\n display: none;\n }\n}\n```\n\n即可。\n\n2023-10-18更新:今天修改了,扒了主题设计者Demo网站上的源代码。修改后的完整代码如下:\n\n```css\n/* post toc Style */\n@media screen and (max-width: 1279px) // 最大宽度1279px时应用这条规则。(最大宽度小于1279px返回false,屏蔽规则。)\n .post-toc\n display none\n\n.js-toc {\n position: fixed;\n top: 95px; /* 距离顶部的距离,可以根据需要调整 */\n right: 2em; /* 距离右侧的距离,可以根据需要调整 */\n width: 15rem; /* 目录的宽度,可以根据需要调整 */\n font-size: 0.75rem\n overflow-y: visible; /* 如果目录很长,这将添加滚动条 */\n max-height: 500px; /* 最大高度,可以根据需要调整 */\n background-color: transparent; /* 背景颜色,可以根据需要调整 */\n z-index: 1000; /* 确保目录显示在其他元素之上 */\n}\n\n.js-toc .tocbot-list {\n max-height: 450px;\n max-width: 250px;\n overflow: auto;\n position: relative;\n padding-right: 0.875rem;\n}\n.js-toc .tocbot-list::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n.js-toc .tocbot-list::-webkit-scrollbar-thumb {\n width: 6px;\n background-color: #eee;\n border-radius: 2px;\n}\n.js-toc .tocbot-list ul {\n list-style: none;\n position: inherit;\n overflow: hidden;\n}\n.js-toc .tocbot-list ul li {\n margin-left: 0.25rem;\n}\n.js-toc .toc-link::before {\n background-color: #fff;\n}\n.js-toc .is-active-link::before {\n background-color: #2d96bd;\n}\n.js-toc .tocbot-list-menu {\n margin: 1rem 0.75rem;\n font-size: 0.75rem;\n}\n.js-toc .tocbot-list-menu a {\n display: block;\n margin: 0.375rem 0;\n color: #999;\n cursor: pointer;\n}\n.js-toc .tocbot-list-menu a:hover {\n color: #808080;\n}\n.toc{overflow-y:auto}.toc>.toc-list{overflow:hidden;position:relative}.toc>.toc-list li{list-style:none}.toc-list{margin:0;padding-left:10px}a.toc-link{color:currentColor;height:100%}.is-collapsible{max-height:1000px;overflow:hidden;transition:all 300ms ease-in-out}.is-collapsed{max-height:0}.is-position-fixed{position:fixed !important;top:0}.is-active-link{font-weight:700}.toc-link::before{background-color:#EEE;content:' ';display:inline-block;height:inherit;left:0;margin-top:-1px;position:absolute;width:2px}.is-active-link::before{background-color:#54BC4B}\n\n/* 当屏幕宽度小于或等于 1280px 时应用这些样式 */\n@media screen and (max-width: 1280px) {\n .js-toc {\n display: none;\n }\n}\n\n.back-top-large {\n display: none;\n}\n\n@media (min-width: 1281px) {\n .back-top-small {\n display: none;\n }\n .back-top-large {\n display: block;\n }\n}\n```\n\n## 移动端目录\n这篇文章越来越长,在移动端阅读感觉很费劲。想着要是把这个目录在移动端也实现就好了。想了一个简单的思路,在移动端右下角放一个目录图标,点击展开目录,再点击图标或点击页面空白部分收起目录。下面是GPT的实现:\n\n首先在post.ejs里添加:\n```html\n<button id=\"tocButton\">\n <svg t=\"1697879152903\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"5387\" width=\"32\" height=\"32\">\n <path d=\"M 863.113 0 H 160.887 A 161.064 161.064 0 0 0 0 160.887 v 702.225 a 161.064 161.064 0 0 0 160.887 160.887 h 702.225 a 161.064 161.064 0 0 0 160.887 -160.887 V 160.887 a 161.064 161.064 0 0 0 -160.887 -160.887 Z M 242.94 725.908 h -6.06545 a 24.1331 24.1331 0 0 1 0 -48.2662 H 242.94 a 24.1331 24.1331 0 0 1 0 48.2662 Z m 0 -193.58 h -6.06545 a 24.1331 24.1331 0 0 1 0 -48.2662 H 242.94 a 24.1331 24.1331 0 0 1 0 48.2662 Z M 242.94 333.037 h -6.06545 a 24.1331 24.1331 0 0 1 0 -48.2662 H 242.94 a 24.1331 24.1331 0 0 1 0 48.2662 Z m 534.146 392.839 H 416.087 a 24.1331 24.1331 0 0 1 0 -48.2662 h 360.854 a 24.1331 24.1331 0 0 1 0 48.2662 Z m 0 -193.58 H 416.087 a 24.1331 24.1331 0 0 1 0 -48.2662 h 360.854 a 24.1331 24.1331 0 0 1 0 48.2662 Z M 777.086 333.037 H 416.087 a 24.1331 24.1331 0 0 1 0 -48.2662 h 360.854 a 24.1331 24.1331 0 0 1 0 48.2662 Z\" fill=\"#8a8a8a\" p-id=\"5388\"></path>\n </svg>\n</button>\n<div class=\"overlay\" id=\"overlay\"></div>\n\n<script>\ndocument.getElementById('tocButton').addEventListener('click', function() {\n var toc = document.querySelector('.js-toc');\n var overlay = document.getElementById('overlay');\n if (toc.style.display === 'none' || toc.style.display === '') {\n toc.style.display = 'block';\n overlay.style.display = 'block';\n } else {\n toc.style.display = 'none';\n overlay.style.display = 'none';\n }\n});\n\ndocument.getElementById('overlay').addEventListener('click', function() {\n document.querySelector('.js-toc').style.display = 'none';\n document.getElementById('overlay').style.display = 'none';\n});\n</script>\n```\n\n然后在media.styl里设定样式:\n\n```css\n@media screen and (min-width: 1280px) {\n .js-toc {\n position: fixed;\n top: 140px; /* 距离顶部的距离,可以根据需要调整 */\n right: 2em; /* 距离右侧的距离,可以根据需要调整 */\n width: 13rem; /* 目录的宽度,可以根据需要调整 */\n font-size: 0.75rem\n overflow-y: auto !important; /* 如果目录很长,这将添加滚动条 */\n max-height: 500px; /* 最大高度,可以根据需要调整 */\n background-color: transparent; /* 背景颜色,可以根据需要调整 */\n z-index: 1000; /* 确保目录显示在其他元素之上 */\n }\n}\n\n.js-toc .tocbot-list {\n max-height: 450px;\n max-width: 250px;\n overflow: auto;\n position: relative;\n padding-right: 0.875rem;\n}\n.js-toc .tocbot-list::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n.js-toc .tocbot-list::-webkit-scrollbar-thumb {\n width: 6px;\n background-color: #eee;\n border-radius: 2px;\n}\n.js-toc .tocbot-list ul {\n list-style: none;\n position: inherit;\n overflow: hidden;\n}\n.js-toc .tocbot-list ul li {\n margin-left: 0.25rem;\n}\n.js-toc .toc-link::before {\n background-color: #fff;\n}\n.js-toc .is-active-link::before {\n background-color: #2d96bd;\n}\n.js-toc .tocbot-list-menu {\n margin: 1rem 0.75rem;\n font-size: 0.75rem;\n}\n.js-toc .tocbot-list-menu a {\n display: block;\n margin: 0.375rem 0;\n color: #999;\n cursor: pointer;\n}\n.js-toc .tocbot-list-menu a:hover {\n color: #808080;\n}\n.toc{overflow-y:auto}.toc>.toc-list{overflow:hidden;position:relative}.toc>.toc-list li{list-style:none}.toc-list{margin:0;padding-left:10px}a.toc-link{color:currentColor;height:100%}.is-collapsible{max-height:1000px;overflow:hidden;transition:all 300ms ease-in-out}.is-collapsed{max-height:0}.is-position-fixed{position:fixed !important;top:0}.is-active-link{font-weight:700}.toc-link::before{background-color:#EEE;content:' ';display:inline-block;height:inherit;left:0;margin-top:-1px;position:absolute;width:2px}.is-active-link::before{background-color:#54BC4B}\n\n/* 去掉目录前面的数字 */\n.toc-list li {\n list-style-type: none; /* 设置列表样式类型为 none */\n}\n\n/* 当屏幕宽度小于或等于 1279px 时应用这些样式 */\n@media screen and (max-width: 1279px) {\n #tocButton {\n display: block;\n position: fixed;\n bottom: 20px;\n right: 5vw+1.5px;\n z-index: 1001; /* 确保 tocButton 在 js-toc 上面 */\n width: 32px;\n height: 32px;\n background-color: transparent;\n border: none;\n }\n\n .overlay {\n display: none;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.7);\n z-index: 999;\n }\n\n .js-toc {\n position: fixed;\n top: 50%; /* 将元素的顶部边缘定位到屏幕的垂直中央 */\n left: 50%; /* 将元素的左边缘定位到屏幕的水平中央 */\n transform: translate(-50%, -50%); /* 微调位置,确保元素的中心位于屏幕的中央 */\n z-index: 1000;\n background-color: white !important;\n border-radius: 5px;\n padding: 10px;\n display: none;\n max-width: 85vw; /* 设置最大宽度为视口宽度的 70% */\n min-width: 60vw;\n max-height: 70vh; /* 设置最大高度为视口高度的 70% */\n overflow-y: auto !important; /* 如果内容超出最大高度或宽度,添加滚动条 */\n }\n\n body.dark-theme .js-toc {\n background-color: #292a2d !important;\n }\n}\n\n@media screen and (min-width: 1280px) {\n #tocButton {\n display: none !important;\n }\n}\n```\n\n### 目录为空时不显示目录图标\n\n实现代码如下:\n\n```html\n<script>\n window.onload = function() {\n var toc = document.querySelector('.js-toc'); // 获取目录元素\n var tocButton = document.getElementById('tocButton'); // 获取目录按钮元素\n if (toc) { // 如果目录元素存在\n if (toc.innerText.trim() === '') { // 如果目录内容为空\n tocButton.style.display = 'none'; // 隐藏目录按钮\n } else {\n tocButton.style.display = 'block'; // 显示目录按钮\n }\n } else {\n tocButton.style.display = 'none'; // 隐藏目录按钮\n }\n };\n</script>\n```\n\n### 在目录打开时禁用页面的滚动\n\nGPT生成了代码,并建议我合并一些事件监听器以使得代码整洁。以下是合并后的代码:\n\n```javascript\ndocument.getElementById('tocButton').addEventListener('click', function() {\n var toc = document.querySelector('.js-toc');\n var overlay = document.getElementById('overlay');\n var body = document.body;\n\n if (toc.style.display === 'none' || toc.style.display === '') {\n toc.style.display = 'block'; // 显示目录\n overlay.style.display = 'block'; // 显示遮罩层\n body.style.overflow = 'hidden'; // 禁用页面滚动\n } else {\n toc.style.display = 'none'; // 隐藏目录\n overlay.style.display = 'none'; // 隐藏遮罩层\n body.style.overflow = ''; // 启用页面滚动\n }\n});\n\n// 点击遮罩层时隐藏目录和遮罩层,并启用页面滚动\ndocument.getElementById('overlay').addEventListener('click', function() {\n document.querySelector('.js-toc').style.display = 'none';\n document.getElementById('overlay').style.display = 'none';\n document.body.style.overflow = ''; // 启用页面滚动\n});\n\n// 页面加载时根据目录内容的有无显示或隐藏目录按钮\nwindow.onload = function() {\n var toc = document.querySelector('.js-toc');\n var tocButton = document.getElementById('tocButton');\n if (toc) {\n tocButton.style.display = toc.innerText.trim() === '' ? 'none' : 'block';\n } else {\n tocButton.style.display = 'none';\n }\n};\n```\n\n### 允许垂直滚动\n\n发现在移动端滑动手指,目录不滚动。解决办法是修改overflow-y的值:\n\n```css\noverflow-y: auto !important;\n```\n\n这样即可。\n\n### 垂直滚动的下限(?)\n\n垂直滚动到底部时,本来理想的情况是目录文字的最后一行滑到底边框的上面一点点,就不能滑动了。但实际上还能滑动,一直滑到整个目录框变成空白(内容全部滑上去了),才不能滑动。 \n\n解决方案是在layout.ejs里添加如下代码(我一开始添加到post.ejs里,结果没有被调用?):\n\n```html\n<script> \n document.querySelector('.js-toc').addEventListener('scroll', function(e) {\n var tocList = document.querySelector('.toc-list');\n var maxHeight = tocList.scrollHeight - this.clientHeight + 20; // 计算最大可滚动高度\n if (this.scrollTop >= maxHeight) {\n this.scrollTop = maxHeight; // 如果滚动超过最大高度,则设置滚动位置为最大高度\n }\n });\n</script>\n```\n\n更新:放弃了这个功能,因为这样的话,当目录内容到达最底部不能再滑动时,右边的滑块还在中间,这个我不知道怎么解决。\n\n再更新:突然灵光一闪,我让滑块不显示不就可以了吗?反正感觉很多可以滑动的东西都不会显示滑块啊。说干就干:\n\n```css\n/* 针对 Chrome、Edge 和 Safari */\n.js-toc::-webkit-scrollbar {\n display: none;\n}\n\n/* 针对 IE 和 Edge */\n.js-toc {\n -ms-overflow-style: none;\n}\n\n/* 针对 Firefox */\n.js-toc {\n scrollbar-width: none;\n}\n```\n搞定。我可真他妈是个天才!\n\n### “目录”按钮和“回到顶部”按钮垂直对齐\n\n这个也折腾了好久。明明两个东西right的数值设置成了一样的,但是总是对不齐。一开始GPT给的方案是弄一个,叫什么,Flexbox?就是把“目录”和“回到顶部”包裹到同一个类里面去,再设定两者的相对位置。但是不知道为什么,调了很久都不行。\n\n然后看网页检查器找线索,发现鼠标放在Element中“totop”这个类时,网页中被标示出来的区域和“目录”按钮的实际位置有错位。而我是把“totop”这个类和“目录”按钮对齐的,所以造成实际显示效果没有对齐。\n\n经查,鼠标放在“totop”下面的SVG链接时,页面上标示的区域和“目录”按钮是重叠的。于是在layout.ejs增加代码如下:\n\n```html\n<style>\n #tocButton svg {\n position: fixed;\n bottom: 20px; /* 调整到你想要的位置 */\n right: 5vw;\n }\n\n #totop {\n position: fixed;\n bottom: 20px+2rem; /* 调整到你想要的位置 */\n right: 5vw;\n }\n</style>\n```\n问题解决。我还做了一些小的调整,比如调整某些情况下“回到顶部”按钮的大小。\n\n修改完之后觉得两个按钮距离太近了,就改了#totop中bottom的数值,但是没有反应。经查,这一条规则没有被应用,被应用的是“totop”类中的bottom规则。于是把这一数值由50px改为60px。\n\n### 桌面端点击目录时疯狂上下抖动!\n\n如题,死马当活马医地问了一下GPT,结果轻松就解决了!方法如下:\n\n> 这个问题可能是由于浏览器尝试在点击目录条目时保持目录的当前滚动位置所导致的。当页面内容滚动以将所选条目对齐到视口顶部时,目录的滚动位置也会相应地调整,从而导致“疯狂上下抖动”的现象。\n> \n> 为了解决这个问题,你可以尝试在点击目录条目时禁用目录的滚动事件监听器,然后在跳转完成后再重新启用。这里是一个可能的解决方案:\n> \n> ```javascript\n> <script>\n> var tocContainer = document.querySelector('.js-toc');\n> \n> tocContainer.addEventListener('scroll', handleScroll);\n> \n> function handleScroll(e) {\n> // 你原来的滚动事件处理代码\n> }\n> \n> // 当点击目录条目时\n> tocContainer.addEventListener('click', function(e) {\n> // 禁用滚动事件监听器\n> tocContainer.removeEventListener('scroll', handleScroll);\n> \n> // 在跳转完成后重新启用滚动事件监听器\n> setTimeout(function() {\n> tocContainer.addEventListener('scroll', handleScroll);\n> }, 100); // 你可以根据需要调整延迟时间\n> });\n> </script>\n> ```\n> \n> 在这段代码中,我添加了一个点击事件监听器,当点击目录条目时,它会禁用滚动事件监听器,然后在一个延迟后重新启用。这样可以防止在跳转过程中触发滚动事件,从而避免抖动的问题。\n> \n> 你可以尝试使用这段代码,并根据你的实际情况进行相应的调整。希望这能解决你的问题!\n\n2023-10-22更新:发现没解决,我是用Chrome看到仿佛解决了,但是Chrome上其实根本就没有这个问题……只有Safari有。上面这段代码需要把原来的滚动事件处理代码放进handleScroll这个函数里,我当时没看直接复制了,所以其实根本没用。然后今天我找了半天找不到这个滚动代码……所以暂时算了吧。\n\n### 点框外屏幕时隐藏目录\n\n默认的设定是在目录展开时,只有再次点击目录按钮才会收起目录,但是这样有点反直观。所以我想设置成在目录展开时,点击屏幕除目录框之外的任何地方都可以将目录收起。实现方法如下:\n\n> 我明白了,我将详细说明应该如何修改代码:\n>\n> #### 1. **添加新函数 `hideToc()`:**\n> 在 `<script>` 标签内,你可以添加一个新函数 `hideToc()`。这个函数会隐藏目录和遮罩层,并启用页面滚动。\n>\n> #### 2. **修改 `overlay` 的 HTML:**\n> 在 `overlay` div 的 HTML 中添加一个 `onclick` 事件,使其在被点击时调用 `hideToc()` 函数。\n>\n> #### 3. **修改 `tocButton` 的事件监听器:**\n> 修改 `tocButton` 的点击事件监听器,使其在目录显示时调用 `hideToc()` 函数。\n>\n> 以下是具体的代码修改:\n>\n> #### 1. 在 `<div class=\"overlay\" id=\"overlay\"></div>` 下面添加 `onclick` 事件:\n>\n> ```html\n> <div class=\"overlay\" id=\"overlay\" onclick=\"hideToc()\"></div>\n> ```\n>\n> #### 2. 在现有 `<script>` 标签内添加新函数 `hideToc()`:\n>\n> ```javascript\n> <script>\n> function hideToc() {\n> var toc = document.querySelector('.js-toc');\n> var overlay = document.getElementById('overlay');\n> var body = document.body;\n>\n> toc.style.display = 'none'; // 隐藏目录\n> overlay.style.display = 'none'; // 隐藏遮罩层\n> body.style.overflow = ''; // 启用页面滚动\n> }\n> // ... (保留其他代码)\n> </script>\n> ```\n>\n> #### 3. 修改 `tocButton` 的事件监听器:\n>\n> 找到以下代码:\n>\n> ```javascript\n> document.getElementById('tocButton').addEventListener('click', function() {\n> var toc = document.querySelector('.js-toc');\n> var overlay = document.getElementById('overlay');\n> var body = document.body;\n>\n> if (toc.style.display === 'none' || toc.style.display === '') {\n> toc.style.display = 'block'; // 显示目录\n> overlay.style.display = 'block'; // 显示遮罩层\n> body.style.overflow = 'hidden'; // 禁用页面滚动\n> } else {\n> toc.style.display = 'none'; // 隐藏目录\n> overlay.style.display = 'none'; // 隐藏遮罩层\n> body.style.overflow = ''; // 启用页面滚动\n> }\n> });\n> ```\n>\n> 并将其修改为:\n>\n> ```javascript\n> document.getElementById('tocButton').addEventListener('click', function() {\n> var toc = document.querySelector('.js-toc');\n> var overlay = document.getElementById('overlay');\n> var body = document.body;\n>\n> if (toc.style.display === 'none' || toc.style.display === '') {\n> toc.style.display = 'block'; // 显示目录\n> overlay.style.display = 'block'; // 显示遮罩层\n> body.style.overflow = 'hidden'; // 禁用页面滚动\n> } else {\n> hideToc();\n> }\n> });\n> ```\n>\n> 这样,无论是点击目录按钮还是页面的其他部分,目录都应该能够正确显示和隐藏。\n\n### 目录各条目的间距\n\n我希望目录框里,每个条目之间有0.5rem的间距。实现方式:\n\n```css\nli.toc-list-item {\n margin-bottom: 0.5rem; /* 添加间距 */\n}\n```\n\n## 代码整理\n\n其实我也不记得我是怎么整理的了,总之记录一下我确实有整理过这回事……\n\n起因是突然发现在宽度大于等于1280px的页面也会显示目录按钮,也会出现展开的目录。点击按钮会隐藏目录,再点击会显示目录,然后页面就不能滚动了。总之肯定是哪里搞错了,于是开始逐一排查,期间听从GPT的建议整理了大量代码。记得的操作有:\n\n1. 把同一个函数写了两遍的内容合并到一起。\n2. 调整边界数值。比如我一开始自己也没搞清自己到底是要宽度大于1280还是大于等于1280,所以写得很混乱。后来统一成了min-width为1280(后改成1380)和max-width为1279(后改成1379)。\n3. 调整缩进。由于我很多代码是复制来的,有时候原网页上没有缩进或缩进不对,所以这些缺陷全被我继承过来了……\n4. 想起来了再补充。\n\n整理的过程中,有一次编译后等了很久网站也没有变化,经查,在文件里已改成“1279”的数值,在网页检查器中仍是“1280”,其他修改过的属性也没有变化。我思考了很久……花了很多时间,查了很多资料,使用了很多方法,包括删库重建,均无效果。最后发现我之前用博客文件夹的本地备份替换了原来的文件夹(方式是删除原文件夹,再重命名备份文件夹),而这之后必须在终端里重新cd一下,做的更改才可以成功生效。下次一定记住……\n\n# 优化宽度<300px的手机上的显示\n不多说,放代码。代码放在media.styl里。\n```css\n/* 在封面页减小标题栏、nickname、description、copyright的字体大小 */\n@media (max-width: 299px) {\n .wrapper header .navbar-header,\n .wrapper header .navbar-header a,\n .menu-toggle {\n font-size: 12px !important;\n }\n .wrapper footer .copyright,\n .wrapper footer .copyright * {\n font-size: 10px !important;\n }\n \n .wrapper .nickname {\n font-size: 20px !important;\n }\n .wrapper .description {\n font-size: 12px !important;\n }\n}\n\n/* 在其他页面减小标题栏、copyright的字体大小 */\n@media (max-width: 299px) {\n body:not(.wrapper) .navbar-header,\n body:not(.wrapper) .navbar-header * {\n font-size: 12px !important;\n }\n body:not(.wrapper) footer .copyright,\n body:not(.wrapper) footer .copyright * {\n font-size: 10px !important;\n }\n}\n\n@media (max-width: 299px) {\n .menu.active .menu-item {\n font-size: 12px !important;\n }\n}\n\n@media (max-width: 299px) {\n .post-wrap {\n padding-top: 2rem;\n width: 80%; /* 调整内容宽度 */\n overflow: hidden; /* 防止内容溢出容器 */\n }\n}\n\n@media (max-width: 299px) {\n .archive-item-link {\n display: block; /* 确保链接作为块级元素显示 */\n overflow: hidden; /* 隐藏溢出的文本 */\n white-space: nowrap; /* 防止文本换行 */\n text-overflow: ellipsis; /* 将溢出的文本显示为省略号 */\n width: 100%; /* 确保链接元素占据全部可用宽度 */\n }\n}\n\n@media (max-width: 299px) {\n li {\n width: 100% !important;\n }\n}\n\n@media (max-width: 299px) {\n .post-wrap .post-title {\n font-size: 1.5em;\n }\n}\n```\n\n总之就是各种调整各种打补丁……\n\n调整前示例:\n\n<img width=\"300\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/0a4c3782-c9f5-444a-ac1e-66e919f62452\">\n\n调整后示例:\n\n<img width=\"300\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/d5ea8b72-7d94-40e3-91cb-4489ed8889aa\">\n\n还是有点丑,不过我尽力了。希望看我博客的没有Galaxy Fold用户……这是什么反人类手机啊。\n\n# 解决点击“About”和“Links”时页面微妙的横向晃动\n又是一个微小的细节!但是一旦注意到就忍不了!\n\n解决方案很简单,在CSS文件中添加如下代码:\n\n```css\n/* 固定页面宽度 */\nbody {\n width: 100vw; /* 设置页面宽度为视口宽度的百分比 */\n overflow-x: hidden; /* 隐藏水平滚动条,防止页面宽度变化 */\n}\n```\n即可。\n\n# 页面标题对齐\n\n今天发现Categories和Tags页面、About和Links页面、文章的标题不在同一高度上。我希望把它们全部调整成和Categories与Tags的标题等高(从网页检查器得知需要设置margin-top为2rem)。\n\nAbout和Links页面标题的高度在/themes/Chic/source/css/_page/page.styl中调整,将padding-top改为2rem即可。\n\n文章标题的高度在<a class=\"break-link no-style\"> /themes/Chic/source/css/_page/_post/post_header.styl </a>中调整,需要进行两步操作:(1)将post-title的margin-top设置为2rem;(2)将post-header h1下的“margin 0 !important”删除,否则标题高度将不会发生变化。\n\n但是,我没有改Archives页面标题的高度,即便这一页面的标题比其他的标题位置高。因为(1)Archives中的标题“2023”字号比其他页面标题的字号小,那么将前者与页面其他内容排列得更紧凑似乎要美观一些。(2)其实Archives标题的padding-top也是2rem,但是它可能是按这个标题的字号计算的,所以这个2rem的绝对长度比别的页面的2rem要短;然后我懒得计算它们的绝对高度了,所以就算了吧。\n\n# 浏览器顶栏的标题显示\n所谓的浏览器顶栏,就是这个栏,我也不知道学名应该叫什么:\n\n<img width=\"220\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/81e0ce29-52d1-40f5-bad9-2806b3716fcc\">\n\n在修改之前,顶栏标题中“|”前面的内容都乱七八糟的,有“归档”、“Categories”、“- 关于我 -”之类的。于是想把它们统一起来。\n\n首先了解到顶栏标题和md文件的title有关,于是把分类和留言板等的title改成了中文,显示正常。但是由于Chic主题默认的分类和标签页面的标题是左右带“-”的,我就把关于和友链页面的title改成了“- 关于我 -”和“- 友情链接 -”,这样顶栏标题也是带“-”的,不统一。\n\n修改方法如下:首先在md文件的FrontMatter中添加一个新的变量,如:\n\n```markdown\ntitle: \"- 关于我 -\"\nbrowser_title: \"关于\"\n```\n\n然后找到负责渲染页面标题的模板文件(我的是/themes/Chic/layout/_partial/head.ejs),修改这段代码:\n\n```html\n<title><% if (title){ %><%= title %> | <% } %><%= config.title %></title>\n```\n\n如下:\n\n```html\n<title><% if (page.browser_title){ %><%= page.browser_title %> | <% } else if (title){ %><%= title %> | <% } %><%= config.title %></title>\n```\n\n即可。\n\n# 分类和标签页面的排序\n(2023-12-11更新)首先说明一下这两个页面的结构。分类主页面如下图所示:\n\n<img width=\"600\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/d1e06696-a3f6-4fd3-9d47-621a6788d7b9\">\n\n其中,“折腾”“随笔”等分类名都可以点开,点开后出现如下界面:\n\n<img width=\"400\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/989e9276-734c-4624-9045-011ade52edff\">\n\n我希望主页面的各个分类、各个分类下的文章名,以及点开某个分类后其下的文章名,都按字母顺序排列。\n\n标签主页面如下图所示:\n\n<img width=\"600\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/80eda191-3c39-4f8b-b7de-fd474e53abc6\">\n\n其中,点开任意标签可以进入类似如下的界面:\n\n<img width=\"600\" alt=\"image\" src=\"https://github.com/greendolphindance/greendolphindance.github.io/assets/87912044/d5ac9cd6-9c67-4b4a-8feb-9d94f345e51f\">\n\n我希望每个标签,以及点开某个标签后其下的文章名,都按字母顺序排列。\n\n## 分类\n这个事情的本质是让categories页面的每个card-item按照其下h3的文本的字母顺序排列。ChatGPT解决方案的原理是:\n\n> 为了让 categories 页面的每个 card-item 按照其下 h3 标签的文本(即分类名称)的字母顺序排列,您需要在循环之前对 site.categories 进行排序。\n\n给出的代码如下,修改后blog/themes/Chic/layout/category.ejs中的代码如下:\n\n```html\n<%# single category page %>\n<% if(is_category()){ %>\n <%- partial('_page/category', {pagination: config.category, index: true}) %>\n<% }else{ %>\n\n <div class=\"container\">\n <div class=\"post-wrap categories\">\n <h2 class=\"post-title\">- 分类 -</h2>\n <div class=\"categories-card\">\n <% \n // Convert categories to an array and sort them alphabetically by name\n var sortedCategories = site.categories.toArray().sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase()));\n %>\n <% sortedCategories.forEach(category_item => { %>\n <div class=\"card-item\">\n <div class=\"categories\">\n <a href=\"<%- url_for(category_item.path) %>\">\n <h3>\n <i class=\"iconfont icon-category\" style=\"padding-right:3px\"></i>\n <%- category_item.name %>\n </h3>\n </a>\n <% category_item.posts.forEach((post_item, index = 0) => { %>\n <% if(++index <= 5){ %>\n <article class=\"archive-item\">\n <a class=\"archive-item-link\" href=\"<%- url_for(post_item.path) %>\">\n <li><%- post_item.title %></li>\n </a>\n </article>\n <% } %>\n <% }) %>\n <% if(category_item.posts.length > 5){ %>\n <a class=\"more-post-link\" href=\"<%- url_for(category_item.path) %>\">更多 >></a>\n <% } %>\n </div>\n </div>\n <% }) %>\n </div>\n </div>\n </div>\n<% } %>\n\n<!-- Style for handling ellipsis in post titles -->\n<style>\n /* Existing styles for li elements */\n</style>\n```\n\n## 各分类下的文章标题\n这个需要在blog/themes/Chic/layout/_page/category.ejs中进行修改。修改后改文件的代码如下:\n```html\n<%# single category page%>\n<div class=\"container\">\n <div class=\"post-wrap categories\">\n <h2 class=\"post-title\">- <i class=\"iconfont icon-fenlei\" style=\"font-size: 1em;\"></i>分类 · <%-page.category%>-</h2>\n \n <% var posts = site.categories.findOne({name: page.category}).posts %>\n <!-- 按title字母顺序排序 -->\n <% posts.data.sort((a, b) => a.title.toLowerCase().localeCompare(b.title.toLowerCase())) %>\n <% posts.each(function (post) { %>\n <article class=\"archive-item\">\n <a class=\"archive-item-link\" href=\"<%- url_for(post.path) %>\">\n <li class=\"category-page-post\">\n <%= post.title %>\n </li>\n </a>\n </article>\n <% }) %>\n </div>\n</div>\n```\n\n## 标签\n类似地,标签本身的顺序在blog/themes/Chic/layout/tag.ejs里改,点开每个标签后列表文章的排列顺序在blog/themes/Chic/layout/_page/tag.ejs里改。修改后,第一个文档里的代码如下:\n\n```html\n<%#\n\nthis page will judge whether current page is 'tag.'\nurl:'http://localhost:4000/tag/' return false.\nurl:'http://localhost:4000/tags/test/' return true.\n\nif you enter 'tag' page by click link will show all tags.\notherwise if you enter 'tags' by click post header link will show the single tag of this post.\n\nhow to add a tag page:\n\n 1. hexo new page \"tag\"\n 2. cd source/tag/index.md\n 3. add layout pattern like this:\n ---\n title: '''tag'''\n date: 2019-06-09 09:56:49\n layout: tag\n ---\n\n %>\n \n <% if(is_tag()){ %>\n <%- partial('_page/tag', {pagination: config.tag, index: true}) %>\n<% }else{ %>\n <div class=\"container\">\n <div class=\"post-wrap tags\">\n <h2 class=\"post-title\">- 标签 -</h2>\n\n <div class=\"tag-cloud-tags\">\n <% \n // Convert tags to an array and sort them alphabetically by name\n var sortedTags = site.tags.toArray().sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase()));\n %>\n <% sortedTags.forEach(function(tag) { %>\n <a href=\"<%- url_for(tag.path) %>\"><%- tag.name %><small>(<%- tag.length %>)</small></a>\n <% }); %>\n </div>\n </div>\n </div>\n<% } %>\n```\n\n第二个文档里的则如下:\n\n```html\n<%# single tag page %>\n<div class=\"container\">\n <div class=\"post-wrap tags\">\n <h2 class=\"post-title\">- <i class=\"iconfont icon-biaoqian\" style=\"font-size: 1em;\"></i>标签 · <%-page.tag%>-</h2>\n \n <% var posts = site.tags.findOne({name: page.tag}).posts %>\n <!-- 按title字母顺序排序 -->\n <% posts.data.sort((a, b) => a.title.toLowerCase().localeCompare(b.title.toLowerCase())) %>\n <% posts.each(function (post) { %>\n <article class=\"archive-item\">\n <a class=\"archive-item-link\" href=\"<%- url_for(post.path) %>\">\n <li class=\"tag-page-post\">\n <%= post.title %>\n </li>\n </a>\n </article>\n <% }) %>\n </div>\n</div>\n\n<!-- Style for handling ellipsis in post titles -->\n<style>\n /* Existing desktop styles */\n @media screen and (min-width: 768px){ \n li {\n width: 600px;\n height: 29.5px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n \n /* Mobile styles */\n @media screen and (max-width: 767px) {\n li {\n width: 285px; /* Adjust the width for mobile */\n height: 29.5px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n</style>\n```\n\n# 本站运行时间\n\n参考的是[这个教程](https://www.fadai.cc/posts/8fda83f9/),很简单。\n\n# 最后更新时间\n部分参考了[这个教程](https://blog.vanxnf.top/2018/09/03/Hexo-%E5%8D%9A%E5%AE%A2-Hiker-%E4%B8%BB%E9%A2%98%E5%A2%9E%E5%8A%A0%E6%96%87%E7%AB%A0%E6%9C%80%E5%90%8E%E7%BC%96%E8%BE%91%E6%97%B6%E9%97%B4%EF%BC%8C%E5%B9%B6%E6%8C%89%E7%85%A7%E6%9C%80%E5%90%8E%E7%BC%96%E8%BE%91%E6%97%B6%E9%97%B4%E6%8E%92%E5%BA%8F/)(虽然ta和我用的主题不一样)。\n\n首先修改blog/scaffolds/post.md。在frontmatter里添加一行:\n\n```markdown\nupdated: {{ date }}\n```\n\n然后每修改一次文章内容,都要手动修改一下updated后面的时间(好麻烦)。\n\n接着修改blog/themes/Chic/layout/_page/post.ejs,增加下面一段:\n\n```html\n<% if(page.updated){ %>\n <span class=\"updated-time\">\n 最后更新: <a href=\"#\"><%- date(page.updated, theme.date_format) %> <%- time(page.updated, theme.time_format)%></a>\n </span>\n<% } %>\n```\n即可。\n\n# 代码复制按钮\n首先去GitHub下载[clipboard.js文件](https://github.com/zenorocha/clipboard.js/releases)。将dist/clipboard.min.js放入博客主题目录下的source/js文件夹中。\n\n然后在post.ejs中插入如下代码:\n\n```html\n<script src=\"/js/clipboard.min.js\"></script>\n<script>\n document.addEventListener('DOMContentLoaded', function () {\n var codeBlocks = document.querySelectorAll('article pre code');\n\n codeBlocks.forEach(function (codeBlock) {\n var copyButton = document.createElement('button');\n copyButton.className = 'copy-button';\n copyButton.innerText = 'Copy';\n\n // Check if the code block is in the article content\n if (codeBlock.closest('article')) {\n codeBlock.parentNode.style.position = 'relative';\n codeBlock.parentNode.appendChild(copyButton); // 将按钮添加到 codeBlock 的父节点内\n\n var isCopying = false;\n\n copyButton.addEventListener('click', function () {\n if (!isCopying) {\n var codeText = codeBlock.innerText;\n navigator.clipboard.writeText(codeText).then(function () {\n copyButton.innerText = 'Copied!';\n isCopying = true;\n setTimeout(function () {\n copyButton.innerText = 'Copy';\n isCopying = false;\n }, 1500);\n }).catch(function (err) {\n console.error('Copy failed', err);\n });\n }\n });\n }\n });\n });\n</script>\n\n<style>\n .copy-button {\n position: absolute;\n top: 0;\n right: 0;\n background-color: #2d96bd;\n color: #fff;\n border: none;\n border-radius: 10%;\n padding: 5px 10px;\n cursor: pointer;\n }\n</style>\n```","tags":["博客","置顶"],"categories":["折腾"]},{"title":"塔罗牌为什么不会出错","url":"/2023/10/06/塔罗牌为什么不会出错/","content":"最近迷上了塔罗牌,有时候会给自己或者别人算。说是“迷上”,实际上是感兴趣其中的故事以及它的运行机制,至于相不相信则是另外一回事。\n\n前几天读到一位“科学主义者”写的批判塔罗牌的文章,其论证大致是:他利用相信塔罗牌的朋友来做实验,测试了十次,准确率仅为40%,和随机猜测的概率(50%)接近。因此他断言,塔罗牌是无效的。\n\n很多人会认为这个论证有效,是因为他们不了解塔罗牌的运行机制。包括塔罗牌在内的许多算命手段都一条重要的原则,那就是“不能戏卜”。也就是说,如果你本身不相信塔罗牌,只是为了“试一试”它,那它测算的结果是不会准的。所以,此人的实验无法证伪它的有效性。\n\n此外,此人的朋友对于这一结果的说辞是她的能力不够,如果由灵力更强的占卜师来算的话,准确率会大大提高。所以,即便一个相信塔罗牌的人算出来的结果没能应验,ta也可以归咎于占卜师,而不是牌本身。这也是很巧妙的。\n\n我当然并不是在说塔罗牌一定有效。我想说明的是,塔罗牌有自己的一套内在逻辑,根据这套逻辑,你对它只谈得上相信或不相信,而谈不上证明或证伪。任何证明或证伪其有效性的努力都会像是证明或证伪上帝存在一样,是徒劳的。\n\n这里不得不提到部分塔罗爱好者热衷于介绍的所谓“塔罗牌的原理”——荣格心理学。我对荣格没有什么了解,只通过道听途说而觉得他的理论玄之又玄,叫人不是很想相信的样子。许多塔罗爱好者想要使用这一理论来证明塔罗牌的有效性,我觉得没有必要。首先,这个理论连我都说服不了,更别说那些科学主义者了。其次,它确实就是没有必要。相信它的人自然会相信,不相信它的人也不会因为它有一些理论支撑就转而相信它。命运的存在与否仅仅关乎信仰。\n\n我自己使用塔罗牌的体验是它很少有不准的时候。最差的结果也不过是牌面给出的是一些套话,例如踏实肯干方可成功、有挫折但前途光明,等等。对于这种现象,我有一种推测:每一张塔罗牌都包含了围绕着一个主题的丰富意义,而对于每一种情况,我们基本上都可以找出一种意义,使得对于塔罗牌的这种解读符合这一情况。\n\n此外还必须补充的是,塔罗牌预测的未来不同于东方玄学的不可改变之未来,而是未来发展的一种模糊趋势,人可以通过自己的努力去改变它。因此,比起“预测未来”,塔罗牌的作用更多是“提出建议”,也就是说对于预测出的坏结果,塔罗牌要追求的反而是“不准”,期望问卜者能够成功改变坏的未来。这也使得准或不准不再是衡量占卜师水平的唯一尺度。\n\n不过这只能解释部分情况。对于为自己占卜的场合,由于每个人对自己的情况都是全知的,在解牌时就自然而然能够将自己的情况适合的牌意对应上,这样就会显得比较准。但是给别人占卜时又怎么解释呢?我前几天准确地算出了我妈最近和一个年轻男子有很多交集(实为她和比自己小的领导大吵一架,吓死,我以为她包养了男大学生x),以前也算准过一些具体的事情。我还没搞清楚其中的原理,也许根本就无法解释也说不定。\n\n我目前的态度是:我会用塔罗牌来帮我做一些比较难以选择的决定,但不会滥用,比如不会占卜今天晚上要吃什么这样的琐碎问题,当然也不会妄图用这些问题来测试其准确性。不过,我也并没有对它全盘相信。因为不知其原理,所以对它保有怀疑对我来说是一个比较安全的态度。再但是,占卜很好玩!给人一种仪式感和掌控感,解牌的过程像是有趣版的看图说话,而且如果算准了也会很开心。开心最重要!所以我应该还是会继续使用它!\n","tags":["占卜"],"categories":["随笔"]}]