利用 Favicon 为 Hugo 静态站点添加图标

我们在使用 Hugo 生成静态站点时,经常会遇到一些虽不致命,但很不爽的小问题,例如没有自定义站点图标的问题。假如我们跟随了所用主题的默认配置,通常情况下生成的站点要么没有图标,要么直接套用主题自带的图标,这显然无法满足我那强烈的 DIY 欲望。 经常访问本博客的读者可能会注意到,我所使用的 Hugo 主题是一个支持自动切换明暗模式的第三方主题——AutoFuji. 今天在阅读这个主题的说明文档时,我发现原来它是支持 Favicon 图标代码的。于是经过一通简单的操作,我的博客终于有了自己的图标。 为 Hugo 站点添加 Favicon 代码的方法非常简单。首先访问这个网站上传一张图片作为网站图标的母本。其实类似的 Favicon 生成器还有很多,大家可以根据自己的习惯或喜好自由选择,基本功能都是一样的。 图片上传完成后,会自动跳转到参数配置页面。如无特殊需求,保持默认配置即可。点击页面下方的生成按钮生成我们的图标和代码。 生成完成后,点击如图所示按钮下载各类格式的图标包,再将自动生成的 HTML 代码复制到剪贴板。 之后,来到 Hugo 站点的根目录,将刚刚下载的压缩包里的所有文件解压到 /static/ 文件夹下。 用文本编辑器打开 /layouts/partials/favicon.html 文件,清空原有代码,将刚刚复制到代码粘贴进去,保存并退出。 最后,打开 /themes/正在使用的主题名/layouts/partials/head.html 文件(不同主题需要编辑的文件可能不同,例如我所使用的 Fuji 主题就是直接编辑同一目录下的 favicon.html 文件),找到下列代码: <link rel="shortcut icon" href="xxx" /> 将 xxx 替换成 favicon.ico ,保存并退出即可。 此时,我们的 favicon 图标安装工作就宣告完成了。使用 hugo 命令重新生成站点,不出意外的话,就能看到我们刚才上传的站点图标了。

2021-05-27 · Mason

桥接模式下 Openwrt 软路由直接访问光猫后台

光猫开启桥接模式后,软路由作为默认网关进行拨号与 NAT,导致客户端设备无法获取与光猫相同网段的 IP 地址,进而也就无法登陆光猫的后台管理界面。虽然在日常使用的过程中,光猫的配置几乎是一次性的,其后台管理界面的使用频率很低,但是每次登陆光猫后台都要通过有线或无线(若有)的方式将设备直接与光猫相连也着实麻烦。因此需要通过一些简单的配置,实现桥接模式下,连接软路由的同时可以随时访问光猫后台。 实现原理其实很简单,只要在现有 DHCP 服务端正常工作的前提下,为软路由的 WAN 口再行分配一个与光猫网段相同的 IP 地址即可,前提是你的软路由支持多 WAN。 以 Openwrt 系统为例,在“网络—接口”界面点击“添加新接口”,进入新接口创建页面。 接口名称随意填写,接口协议选择“静态地址”,包括的接口选择当前 WAN 口绑定的物理接口。注意,接口协议尽量不要选择 DHCP,因为桥接模式下的光猫基本都会关闭自身的 DHCP 功能,不会给新接口自动分配 IP 地址,所以此时需要通过“静态地址”协议来手动指定新接口的 IP 地址。完成上述配置后,点击“提交”按钮进入新接口的详细配置页面。 IPv4 地址一定要设置成与光猫位于相同网段的地址。例如光猫连接软路由的 LAN 口的地址(即光猫后台地址)为 192.168.1.1,那么这里新接口的静态 IP 地址就要设置为 192.168.1.x。子网掩码设为 255.255.255.0,默认网关就是光猫 LAN 口的 IP 地址。有关 IP 网段和子网掩码的相关知识,可以参考这篇文章。完成上述设置后,点击“保存&应用”按钮即可完成配置。 新接口配置完成后,DNS 缓存会有一定延迟,导致无法正常浏览网页,此时重启一下软路由即可解决问题。如果软路由之前配置了端口映射,则新接口创建完成后,所有的端口映射都将失效,此时仍需经过一番针对防火墙的额外设置才能恢复正常。 重新进入新接口的详细设置页面,在“防火墙设置”中,将原先 WAN 口的防火墙区域绑定到新接口。 然后进入“网络—防火墙—端口转发”页面,将原有的端口映射配置重新“保存&应用”一下即可。 至此,如果不出意外的话,我们便可在桥接模式下随时随地访问光猫的后台管理界面了。

2021-05-05 · Mason

利用 Parsec 实现远程游戏串流

最近,我终于放弃了 Steam 或 Epic Games 等平台的买断制游戏模式,转而投靠了 Xbox Game Pass (XGP) 这样的订阅制模式。尽管买断制可以极大地满足“喜加一”式的收集欲,但自从开始实习之后,我已经很难抽出整块的时间来通关各类单机游戏,以致于我的游戏库中屯了大量已购买的但未通关的游戏,这不仅降低了我购买和尝试最新游戏的欲望,也在资金上造成了很大的浪费。不知从什么时候起,玩游戏竟也成了一种待完成的“任务”,失去了工作之余放松心情的初衷。 因此,我纠结许久,终于决定以后不再购买任何单机游戏。如果某段时间我不是那么忙了(例如辞职在家的现在),就去订阅一个月的 XGP,体验一下最新的单机游戏。事实上,Xbox 账户是可以随时切换区域的。因此我们可以简单地通过将 Win10 的系统区域切换成香港的方式来享受港区 XGP 79 港元每月(首月10港币)的优惠价格。在一个单机游戏动辄就要三百块以上的当下,XGP 确实是一种非常合算方案。毕竟,一个月的时间,完全够我通关一个中型单机游戏,而买断这款游戏的价格远远不止 79 港币。 开通了 XGP 之后,我又开始琢磨如何在出差的时候利用“零碎的时间”玩游戏。例如驻场期间每天下班以后,住在酒店里的我只有一台性能羸弱的 MacBook,如何利用现有设备在酒店里玩上 XGP 上的单机游戏呢?其实解决方案只有一个:远程桌面。只要在家里的 PC 上开启网络唤醒功能,在将某款远程桌面软件设置成开机自动启动,我就可以在任何地方,通过网络唤醒 + 远程操控的方式随时随地游玩家里电脑上的游戏。 思路虽然很简单,但找到合适的远程桌面软件着实费了我一番工夫。经过仔细的搜索,我发现了一款叫做 Parsec 的远程桌面软件。它不仅同时支持 Windows 和 macOS 双平台,还专门针对远程游戏进行了优化。不仅如此,Parsec 还支持 Hevc 编码。只要客户端设备支持 Hevc 解码,就能大大降低串流数据体积,减少网络带宽和流量的消耗,提升远程游戏的体验。 Parsec 的使用方式非常简单,只要去官网注册一个账号并分别在服务端(用于运行游戏的设备)和客户端(用于远程操控的设备)下载安装 Parsec 客户端即可。在两台设备上同时安装并登陆软件后,软件界面应该是这样的: 此时只要点击相应设备上的 Connect 按钮即可建立远程连接了。但为了提升我们的游戏体验,在正式使用前还需要进行一些简单的设置。点击左侧的齿轮图标进入设置界面,将客户端设备的“硬件解码”和“Hevc 编码”功能打开即可。 连接成功后,软件会自动将被操控的设备调至静音,而将所有系统声音转到操控的设备上播放,这一细节非常人性化。经测试,在局域网(千兆带宽)环境下,两台设备基本可以实现零延迟的远程控制,但在广域网环境下,由于带宽和延迟的限制,远程控制略有延迟和卡顿,但仍能满足一些对操作要求不是那么高的游戏。例如,我最近正在补完的《歧路旅人》。这是一款“高清马赛克”游戏,且所有战斗均为回合制,非常适合远程游玩。 由于 macOS 原生支持 Xbox 和 switch pro 手柄,同时 Parsec 也能直接识别上述两款手柄的所有按键,因此在远程游戏时,可以直接通过将手柄连接客户端设备的方式来操控服务端的游戏。网络状况较好的时候,远程游戏的体验和本地几乎没有区别。

2021-05-02 · Mason

解决蜗牛星际B双安装黑群晖失败“文件已损毁(13)”

去年疫情期间,由于滞留家中实在无聊,我开始折腾软路由和 DIY NAS,而被折腾得最多的莫过于黑群晖系统。为此,我特意买来两台蜗牛星际(B双和C),其中B双用作软路由,C则用于黑群晖。时隔一年,忙于工作的我已不再有闲暇时间折腾黑群晖,而出于对数据安全和便捷性的考虑,我于今年年初购买了一台威联通的 NAS 主机。俗话说得好,黑群晖折腾到头,就会转去白群辉。但奈何威联通的性价比要比群晖高太多,因此我只好无耻地叛变了革命。 昨天心血来潮,想把放在角落吃灰许久的蜗牛星际B双刷成黑群晖,用作重要数据的冷备工具,平常都会处于关机状态,只有冷备的时候才会开机。由于我的B双之前一直都用作软路由,因此从来都没有刷过黑群晖。但鉴于蜗牛星际的配置都差不多,我简单地以为直接用之前C上现成的黑群晖引导U盘即可直接安装黑群晖系统。然而天真的我还是遇到了困难。 问题出在新系统安装的过程中,每当进度走到 56% 的时候,都会跳出编号为 13 的错误,提示“系统安装失败,文件可能已经损毁(13)”。为了解决这一问题,我尝试了很多方法,包括但不限于格式化所有硬盘(包括 SSD)以及更换各个版本的官方或非官方 DSM 安装包,但都不奏效,错误 13 依然存在。 最后,在电报群里高人的指点下,我终于解决了这一问题。其实,新系统安装的过程中之所以会出现错误 13, 是因为机器主板的 BIOS 没设置好。只要给主机插上键盘和显示器,在开机时进入 BIOS 界面(通常是在开机后显示主板厂商 logo 时按键盘上的 DEL 键进入),然后依次进入 Advanced—Miscellaneous Configuration—OS Selection,将 Win 7 改为 Win 8.x 即可。 忙活了半天,最后才知道原来只是这么简单的一个问题。为了不让后来的小白们像我一样浪费时间,特此记录一下。本文也谈不上什么教程了。

2021-04-23 · Mason

告别,为了新的开始:记一次迂回的返乡行

起因 我不知道此时的我正带着怎样的心情写这篇游记,因为它本来算不上游记——返回自己的家乡怎么能算旅行呢?但当我终于站在凌晨一点的芜湖站东广场时,我才明确意识到:终于回家了。 一切开始于一周前。在一个阴郁的下午,我独自走在成都大熊猫基地的竹荫路上,漫无目的地思考着——关于工作、关于婚姻,甚至关于一些无关紧要的东西。大熊猫并没有太吸引我,毕竟都是长相相似的生物,看一会、拍几张照就会觉得无聊。所以这时就非常适合将脑子装满,不管装的是什么。 这场思考的结果,就是决定辞职。虽然单就职业发展前景来说,目前的这份工作非常不错。但其较低的起薪,以及长期出差的性质使得我不得不面对“工作与家庭平衡”的问题。如果我选择回到老家附近的省会城市,将会有一份起薪较高、无需出差的工作等着我。于是在经过激烈的思想斗争以后,我得出结论:所谓的“发展前景”都是相对的,即使回到老家,也不意味着完全没有发展前景,但与生活本身相比,目前这份工作的“前景”不值得我继续追求。如果努力赚钱的最终目的是为了生活得更好,那当自己完全另有选择余地的情况下,不应该为了挣钱而放弃生活本身,这是本末倒置的做法。 因此我决定,4月15日从重庆返回深圳,办完最后的工作交接手续后,再经珠海飞回老家安徽。至于为什么要途径珠海,完全是因为最后返程的机票无法报销。为了节省费用,我购买了相对较为便宜的珠海飞合肥的航班。而在此前的绝大多数时候(公司报销机票的时候),我都是直接从深圳飞往南京,而后者才是最快捷的路线。 启程 说做就做。平日里养成的“极简生活“的习惯此时显出了它的威力——我在重庆和深圳两个住所的所有个人物品加起来,也不过一个20寸旅行箱外加一个双肩背包的体量。因此我得以在短短一天半的时间里,清空两个住所,跨越三千多公里的路程返回故乡。 办好该办的手续,已经是上午十点。我背着包走出公司大楼,打了辆车回公寓。上车前,我给身后的公司大楼拍了可能是最后一张照片。 我们的公寓是公司为实习生免费提供的四人间宿舍,距公司约半小时车程(坐公交要一小时才能到达)。到公寓后,我火速上楼取下旅行箱,并在前台办理了退押金手续(入住宿舍时缴了一百元押金)。然后步行至临近的地铁站,经一次换成后,抵达“蛇口港”站。 出站后步行了大约二十分钟,终于抵达此次返乡行的第一站——蛇口邮轮中心。这是个内外装修都很别致的码头,内部构造与高铁站或机场非常相似:一楼是进站口,二楼以上是餐饮或休息区。取票方式也很简单,将购票时登记的身份证号码对应的身份证放在进站口附近的自助机器上即可。 我所乘坐的航班是从蛇口港往横琴港的客轮——迅隆号。仓位分普通仓和头等舱两种,价格只相差三十元。头等舱不仅客人较少,而且座位更舒适、视野也更好。上船后我发现了一个很有趣的标牌,上面写着“招商局,创办于1872年”的字样,瞬间给我一种梦回大清的感觉。 航程经过了港珠澳大桥和澳门友谊大桥,并从珠海与澳门间的狭窄航路穿过。期间手机信号一度飘到澳门,还收到了海关发送的警示短信。虽然短短几分钟的时间不足以使我的行程码变红,但这短暂的“出境”仍使我感慨万千。经过一个多小时的航行后,客轮在珠海横琴港稳稳靠岸。很久之前就听人说起珠海环境之优美、空气之纯净,这回我总算亲身感受到了这点。 曲折 但就在我带着愉悦的心情走出美丽的横琴码头时,收到了航班延迟三小时的短信。今年一月的时候,海航正式传出破产重组的消息,当时我还产生了“眼看他起高楼,眼看他楼塌了”的感慨。但这航班一口气延迟三小时,并且航空公司又刚好是海航的时候,我便又有了“时代的尘埃落在个人头上”时的无措感。 由于时间瞬间变得无比宽裕,因此我也放慢了赶路的脚步,一边欣赏珠海沿途的风景,一边坐公交往机场大巴站去。离横琴港最近的机场大巴车站位于横琴假日酒店。这是一座外观装修得很像童话城堡的酒店,虽然我没有入住过这家酒店,但单看外部环境感觉很适合度假时居住。 在酒店一楼等了近四十分钟,终于等来了机场大巴。在去机场的途中,大巴会在澳门大学横琴校区短暂停留。这所大学与澳门隔海相望,虽然地址位于珠海,但行政上归澳门管辖。无论从哪一方面来说,这也都算“一国两制”的典范了吧。于是在去机场路程的后半段,我便与一群澳门大学的学生同行。这些人虽然还是学生,但已经沾染上“在大巴车上外放看视频”的社会恶习。 到达珠海金湾机场后,我又无所事事地分别在肯德基和候机厅等待了两个多小时。期间广播曾略带歉意地表示,要为所有被延误了的海航乘客发放晚餐。但当我看到候机厅邻座的中年男人手拿一盒热腾腾的盒饭套餐悻悻然归来时,便放弃了这“免费的晚餐”。相比而言,还是飞机上的“海南特色鸡肉粉”更吸引我。 等到晚上七点半,广播里终于通知我们准备登机。我于是重新拖起行李箱,排进长长的队伍里,等待登上这趟原本应在三小时前起飞的航班。 尾声 除了上海虹桥机场以外,几乎所有我去过的城市的机场都位于偏僻的郊外。这或许符合某些经济学原理,但实在与乘机人的便利性背道而驰。可能也是因为考虑到了便利性这个问题,合肥新桥机场设置了专门的城市班车,定时将旅客送往火车站等市内地址。晚上九点半,飞机缓缓着陆以后,我便跟着人群,火速前往机场到达大厅外的城市班车上车点。花十五块钱买了张去合肥火车站的票。班车等到十点才“准时”出发,晃晃悠悠到十一点零八分才到达距离合肥火车站还有两百多米的地方。 是的,你没有听错。目的地为合肥火车站的班车居然没有真正进入合肥火车站,而是在离火车站老远的地方把我们放了下来。当天晚上最后一班火车的发车时间是十一点二十一分,这也就意味着,我要在十三分钟内,拖着箱子和背包,跑过两百多米的距离,过安检,上楼,再找到正确的站台后挤进火车。虽然以上过程非常艰难且疲惫,但我好歹在火车车门关上的前一秒成功上了车。 由于时间过晚,我只能坐绿皮车回家。因此我在满是难闻气味的绿皮车车厢里又待了一个半小时。最终,我终于在凌晨一点回到了芜湖。

2021-04-16 · Mason