diff --git a/config.toml b/config.toml index 11e9eab..7f4ef0a 100644 --- a/config.toml +++ b/config.toml @@ -10,7 +10,7 @@ enableRobotsTXT = true # init theme sub module by this command # git submodule update --init --recursive [markup.goldmark.renderer] -unsafe = true #避免MarkDown内嵌的HTML被优化掉,尤其是Typora缩放过的图片 +unsafe = true #避免 MarkDown 内嵌的 HTML 被优化掉,尤其是 Typora 缩放过的图片 [params] # dir name of your blog content (default is `content/posts`) diff --git a/content/aboutme.md b/content/aboutme.md index ec5d5f2..4486d3f 100644 --- a/content/aboutme.md +++ b/content/aboutme.md @@ -8,7 +8,7 @@ lastmod: 2021-05-10 ## About Me -00 后,性别男,爱好女,CS专业,软件攻城狮一枚,业余摄影师、音乐制作人,RSS 爱好者 +00 后,性别男,爱好女,CS 专业,软件攻城狮一枚,业余摄影师、音乐制作人,RSS 爱好者 ### I Like @@ -19,7 +19,7 @@ lastmod: 2021-05-10 ## Catch Me - 博客主页:https://blog.colinx.one -- Github 主页: https://github.com/Colin-XKL +- Github 主页:https://github.com/Colin-XKL - Email: Colin_XKL#outlook.com @@ -27,6 +27,6 @@ lastmod: 2021-05-10 获取支持/服务 -支持公益事业发展, 如任何非盈利机构有 IT 服务部署 / 网站托管或维护 / 架构咨询 / 问题排障 等需求可直接联系, 在能力范围内提供无偿支持 +支持公益事业发展,如任何非盈利机构有 IT 服务部署 / 网站托管或维护 / 架构咨询 / 问题排障 等需求可直接联系,在能力范围内提供无偿支持 -其他个人或企业有相关需求的可通过email免费咨询或以其他形式提供付费支持 \ No newline at end of file +其他个人或企业有相关需求的可通过 email 免费咨询或以其他形式提供付费支持 \ No newline at end of file diff --git a/content/posts/2020年度总结.md b/content/posts/2020年度总结.md index 0c3bca6..005794d 100644 --- a/content/posts/2020年度总结.md +++ b/content/posts/2020年度总结.md @@ -3,7 +3,7 @@ title: 2020 年度总结 date: 2020-12-26 lastmod: 2020-12-31 -description: 新冠疫情侵袭下的2020过的额外的快,仿佛上一秒还在家里上完课,下一刻就是秋季复学,一晃眼又是一年圣诞,2020就快过完了。这里记录一下我的2020. +description: 新冠疫情侵袭下的 2020 过的额外的快,仿佛上一秒还在家里上完课,下一刻就是秋季复学,一晃眼又是一年圣诞,2020 就快过完了。这里记录一下我的 2020. categories: - 杂记 - 年度总结 @@ -14,17 +14,17 @@ tags: --- - + ## 序 -新冠疫情侵袭下的2020过的额外的快,仿佛上一秒还在家里上完课,下一刻就是秋季复学,一晃眼又是一年圣诞,2020就快过完了。这里记录一下我的2020. +新冠疫情侵袭下的 2020 过的额外的快,仿佛上一秒还在家里上完课,下一刻就是秋季复学,一晃眼又是一年圣诞,2020 就快过完了。这里记录一下我的 2020. -## 我的2020简述 +## 我的 2020 简述 -* 博客2.0、3.0 +* 博客 2.0、3.0 * 刷完了几部经典动漫 * 刷完了我的三体和三体三部曲 * 上半年在家中了花花草草 @@ -36,30 +36,30 @@ tags: -## 2020的遗憾 +## 2020 的遗憾 * 挖了好些坑都没填 * 种的花没能看到开花,人又在学校了 * 没能集齐老家四季的照片 -* 2020唯一的Logic作品没能上线,还没到令自己满意的程度 +* 2020 唯一的 Logic 作品没能上线,还没到令自己满意的程度 ## - -疫情给所有人都带来了冲击,很庆幸的是,疫情于我,于我的家庭,都没有造成任何大的影响。2020有再多遗憾,在这一条面前都不值一提。曾经一度想逃离这个地区,在后疫情时代看来,大的灾难面前,不发达的内陆地区和偏远郊区是不可多得的避难所。人口和资源会自然地聚集在大城市那些经济发达的地区,但除此之外的地区并不是荒无人烟自有他的道理。 +疫情给所有人都带来了冲击,很庆幸的是,疫情于我,于我的家庭,都没有造成任何大的影响。2020 有再多遗憾,在这一条面前都不值一提。曾经一度想逃离这个地区,在后疫情时代看来,大的灾难面前,不发达的内陆地区和偏远郊区是不可多得的避难所。人口和资源会自然地聚集在大城市那些经济发达的地区,但除此之外的地区并不是荒无人烟自有他的道理。 -2020下的中国无疑是值得肯定的,社会主义集中力量办大事的特征在这一场风波中展现地淋漓尽致,资本主义过渡不香了,所有的固有印象都被打破,疫情揭开了这层虚伪的面具,我能够以几乎为0的代价得到这个经验是我人生莫大的荣幸。 +2020 下的中国无疑是值得肯定的,社会主义集中力量办大事的特征在这一场风波中展现地淋漓尽致,资本主义过渡不香了,所有的固有印象都被打破,疫情揭开了这层虚伪的面具,我能够以几乎为 0 的代价得到这个经验是我人生莫大的荣幸。 -除了对制度的认知的变化,2020我也在重新思考两个问题。 +除了对制度的认知的变化,2020 我也在重新思考两个问题。 1. **什么是我想要的?** -2. **如何逃离IT业的内卷** +2. **如何逃离 IT 业的内卷** 这两个问题本质上是同一个。十年来我想要的一直都没有变,在学生时代也一直没有足够的眼界、见识、能力和精力去仔细思考这个问题。 -但这两个问题,在2020年的结束,我还是不能给自己一个答案。但是,正如 *数码宝贝:羁绊* 中所阐述的那样,我会努力去寻求自身更多的可能性,不放弃希望与初心。在没有答案之前,我选择 +但这两个问题,在 2020 年的结束,我还是不能给自己一个答案。但是,正如 *数码宝贝:羁绊* 中所阐述的那样,我会努力去寻求自身更多的可能性,不放弃希望与初心。在没有答案之前,我选择 * **保持健康的身体**,虽然近视了没办法,但只要我还有良好的听觉,我就还能欣赏世界上美妙的音乐;只要我还有良好的味觉,我就还能品尝世界上美味的食物;只要我还有良好的嗅觉,我就还能品味大自然的芬芳;只要我还能唱,我就还有机会把心中的旋律唱出来;只要我还能说,我就还有机会把脑海的故事说出来;还有只要我还有双脚,我就还有机会丈量世界;只要我还有双手,我就还有机会创造世界; * **读更多的书,看更多的电影**。也许这些迷茫只是因为我太久没有阅读,思想僵化了吧。但我想,这个问题,书中一定有答案。我的人生是有限的,但是我可以通过书籍、电影和音乐来感受别人的人生。 @@ -74,7 +74,7 @@ tags: ## 终 -最后的最后,2020年度流水账 +最后的最后,2020 年度流水账 * 不拜年的春节,开心😄 * 寒假放完了,直接线上教学,懵逼 @@ -84,11 +84,11 @@ tags: * 快递初步解封,买了花种子 * 发小高三无心复习,我又不能放开耍 * 每天照料种子,感受初生的喜悦,超有成就感 -* 折腾docker +* 折腾 docker * 折腾博客,Hugo * 刷红七 * 水水的网页设计比赛拿了个一等奖,奖品自选,我们队选了三大箱零食哈哈 -* 折腾RSS +* 折腾 RSS * 复学 * 一头雾水的组原实验,可是看看四周好像只有自己在做 * 水水的中青杯,说好的组队到头来基本是自己一个人写 @@ -99,16 +99,16 @@ tags: * 小一个月过了科二科三,刺激 * 刷了三体三部曲,必须点赞 * 开学数模比赛,很辛苦,但是挺考验人的 -* 捡垃圾组了第一台主机,吃上了Catalina黑苹果 +* 捡垃圾组了第一台主机,吃上了 Catalina 黑苹果 * 十一过后每天学习吉他 -* 继续折腾RSS +* 继续折腾 RSS * 实验室开通了微信公众号 * CFC 四级小班课,消灭了四级 (updated) -* 正式开始做Logic项目,但是发现思绪混乱不堪,工作方式与预期相差甚远 +* 正式开始做 Logic 项目,但是发现思绪混乱不堪,工作方式与预期相差甚远 * 第一次穿西装 * 挖了又没填完的几个坑 * 肝课设 * 写这篇文章 -* 抓住2020的尾巴上线了https://coding-step-one.colinx.one/ -* 2020终 +* 抓住 2020 的尾巴上线了 https://coding-step-one.colinx.one/ +* 2020 终 diff --git a/content/posts/2021年度总结.md b/content/posts/2021年度总结.md index db5c6ba..c3b35b7 100755 --- a/content/posts/2021年度总结.md +++ b/content/posts/2021年度总结.md @@ -3,7 +3,7 @@ title: 2021 年度总结 date: 2021-12-31 lastmod: 2021-12-31 -description: 转眼又快是新的一年,似乎岁数越大,会感觉时间过得越快。想起小时候下课前的三分钟都无比漫长,现在在学校待两个月却仿佛只是两天。纵有万分感慨,但无法阻挡的事实是,2021结束了,我又长了一岁,父母又老了一岁,我的大学时光又少了一年,我在自己的道路上又行走了一年。 +description: 转眼又快是新的一年,似乎岁数越大,会感觉时间过得越快。想起小时候下课前的三分钟都无比漫长,现在在学校待两个月却仿佛只是两天。纵有万分感慨,但无法阻挡的事实是,2021 结束了,我又长了一岁,父母又老了一岁,我的大学时光又少了一年,我在自己的道路上又行走了一年。 categories: - 杂记 - 年度总结 @@ -18,98 +18,98 @@ tags: ## 序 -转眼又快是新的一年,似乎岁数越大,会感觉时间过得越快。想起小时候下课前的三分钟都无比漫长,现在在学校待两个月却仿佛只是两天。纵有万分感慨,但无法阻挡的事实是,2021结束了,我又长了一岁,父母又老了一岁,我的大学时光又少了一年,我在自己的道路上又行走了一年。 +转眼又快是新的一年,似乎岁数越大,会感觉时间过得越快。想起小时候下课前的三分钟都无比漫长,现在在学校待两个月却仿佛只是两天。纵有万分感慨,但无法阻挡的事实是,2021 结束了,我又长了一岁,父母又老了一岁,我的大学时光又少了一年,我在自己的道路上又行走了一年。 -## 我的2021简述 +## 我的 2021 简述 **印象·2021** -* 拿到BATJ实习 -* 与公司CEO一起吃饭,认识了很多有趣的人和事 -* 开源项目RSS Man获得认可,有20+ star -* 完成年初的flag,阅读了10本书 +* 拿到 BATJ 实习 +* 与公司 CEO 一起吃饭,认识了很多有趣的人和事 +* 开源项目 RSS Man 获得认可,有 20+ star +* 完成年初的 flag,阅读了 10 本书 * 入坑并追完了星际宝贝系列 -* 买了HomePod mini作为自己的生日礼物,立体声组合相当nice +* 买了 HomePod mini 作为自己的生日礼物,立体声组合相当 nice * 爬长城,游故宫,打卡北京 -* 体验了烫染,get枯草般的头发,get另一种自己 -* 体验了打飞的,还全报销了,有种超级忙的boss赶脚 -* 入手XBOX和极米投影仪,备战寒假`真·躺平`生活 +* 体验了烫染,get 枯草般的头发,get 另一种自己 +* 体验了打飞的,还全报销了,有种超级忙的 boss 赶脚 +* 入手 XBOX 和极米投影仪,备战寒假`真·躺平`生活 **年度遗憾:** -* 博客4.0又咕咕咕了 -* CFC官网4.0又咕咕咕了 +* 博客 4.0 又咕咕咕了 +* CFC 官网 4.0 又咕咕咕了 * RSS Man 3.0 又又又咕咕咕了。。。 -* 没能完成6.828 +* 没能完成 6.828 -## 2021关键词:工作、健康 +## 2021 关键词:工作、健康 -2021对我而言是特殊的一年,大三的我一只脚迈进了职场,体验了社会的酸甜。回学校的第二天着手开始面试,很荣幸,先后拿到了BATJ四家的实习offer,最终选择了把我最后一个暑假给阿里高德事业群。我的实习生活算是比较轻松的,没有pua,没有疯狂加班,以一种温和的方式熟悉了职场,对技术和资本有了新的理解,见到了不一样的世界,也破灭了北京的幻想。有些人生在罗马,有些人穷其一生也到不了罗马,但还是很庆幸,这是一个通过自己的努力就可以到达罗马的时代。 +2021 对我而言是特殊的一年,大三的我一只脚迈进了职场,体验了社会的酸甜。回学校的第二天着手开始面试,很荣幸,先后拿到了 BATJ 四家的实习 offer,最终选择了把我最后一个暑假给阿里高德事业群。我的实习生活算是比较轻松的,没有 pua,没有疯狂加班,以一种温和的方式熟悉了职场,对技术和资本有了新的理解,见到了不一样的世界,也破灭了北京的幻想。有些人生在罗马,有些人穷其一生也到不了罗马,但还是很庆幸,这是一个通过自己的努力就可以到达罗马的时代。 -在北京实习的日子过得很快,也很愉快。leader和mentor都很nice。不过在实习的日子里身边发生了好几件事,让我对健康这个问题又有了新的看法。我看到公司CEO日理万机,事业蒸蒸日上,而他自己坚持锻炼,精力旺盛。我又看到接连几个朋友罹患肿瘤,昔日同学频频心里障碍,影响学业。平日里不起眼的几条消息,现在到了我身边,一时间竟无所适从。健康是一种隐形的财富,无病无痛时感知不到它,甚至认为毫无价值,只有病痛落到自己头上,才知道健康的可贵。单说起病痛其实并没有什么,疼哪医哪,问题不大。但是当我们谈及的是肿瘤和癌症,问题就变得复杂了起来。并不是被感染、受伤了才会有肿瘤,也并不是岁数大了抵抗力弱了一定会得癌症。甚至目前来看,它没有贫富之分,众生平等,有钱有势也无力回天。联合国世界卫生组织有长长一串致癌物清单,但这只是一小部分,现阶段被人类从统计学角度认知的一小部分,而且列表上的致癌物也并不是毒素,摄入即罹患癌症。 +在北京实习的日子过得很快,也很愉快。leader 和 mentor 都很 nice。不过在实习的日子里身边发生了好几件事,让我对健康这个问题又有了新的看法。我看到公司 CEO 日理万机,事业蒸蒸日上,而他自己坚持锻炼,精力旺盛。我又看到接连几个朋友罹患肿瘤,昔日同学频频心里障碍,影响学业。平日里不起眼的几条消息,现在到了我身边,一时间竟无所适从。健康是一种隐形的财富,无病无痛时感知不到它,甚至认为毫无价值,只有病痛落到自己头上,才知道健康的可贵。单说起病痛其实并没有什么,疼哪医哪,问题不大。但是当我们谈及的是肿瘤和癌症,问题就变得复杂了起来。并不是被感染、受伤了才会有肿瘤,也并不是岁数大了抵抗力弱了一定会得癌症。甚至目前来看,它没有贫富之分,众生平等,有钱有势也无力回天。联合国世界卫生组织有长长一串致癌物清单,但这只是一小部分,现阶段被人类从统计学角度认知的一小部分,而且列表上的致癌物也并不是毒素,摄入即罹患癌症。 对于肿瘤和癌症这类问题,现在最有效的防治手段应该只有一个,早发现早治疗。而要减少患病的几率,我想环境应该是非常重要的一点。这里包括两个:居住环境和饮食环境。居住环境也包括物理上的,也有心理上的。物理上减少致癌物,保持通风,保持光照,减少不必要、明显不适的电磁场。心理上保持积极,保持开朗。 --- -关于电磁场,我个人观点一向是认为,这的确会对生物体有影响。网络上大多数科普电磁辐射对人体没有危害的论点主要有两个:一是现在没有确切的实验数据说明电磁辐射对人体有明显的危害,二是论剂量,电磁辐射对人体的危害主要是热效应、升温,只有剂量非常大才会影响到人体。这两条放到现在来说没有什么问题,并不是说他们正确,而是不能说他们错了。电磁辐射的热效应的确是对人体造成最大伤害的一种途径,现阶段实验的确没有证据可以表明电磁辐射有害。但是电磁波不仅仅有振幅,还要考虑频率和他的波形,当年3G升4G就有很多人说打电话时间长了会头痛,而之前不会,我也有类似体感;现阶段实验不可能有长达二三十年的关于电磁场对生物体健康的实验,就算有确凿证据也不可能放出来,因为这触及资本利益,参考汽油产业和铅的故事。此外我们也不可能全部放弃无线时代带给我们的便利。 +关于电磁场,我个人观点一向是认为,这的确会对生物体有影响。网络上大多数科普电磁辐射对人体没有危害的论点主要有两个:一是现在没有确切的实验数据说明电磁辐射对人体有明显的危害,二是论剂量,电磁辐射对人体的危害主要是热效应、升温,只有剂量非常大才会影响到人体。这两条放到现在来说没有什么问题,并不是说他们正确,而是不能说他们错了。电磁辐射的热效应的确是对人体造成最大伤害的一种途径,现阶段实验的确没有证据可以表明电磁辐射有害。但是电磁波不仅仅有振幅,还要考虑频率和他的波形,当年 3G 升 4G 就有很多人说打电话时间长了会头痛,而之前不会,我也有类似体感;现阶段实验不可能有长达二三十年的关于电磁场对生物体健康的实验,就算有确凿证据也不可能放出来,因为这触及资本利益,参考汽油产业和铅的故事。此外我们也不可能全部放弃无线时代带给我们的便利。 --- ## Answers to 2020 -2020年底我的一个疑问是逃离IT业的内卷,这个问题我有了一个阶段性的答案。目前来看有两个方向,一是选择不同的赛道,另一个是选择资源富裕开发程度不高的领域。今年我选择了前者。 +2020 年底我的一个疑问是逃离 IT 业的内卷,这个问题我有了一个阶段性的答案。目前来看有两个方向,一是选择不同的赛道,另一个是选择资源富裕开发程度不高的领域。今年我选择了前者。 ## Flags for 2022 -* 阅读12本书 -* 打卡5个景点 +* 阅读 12 本书 +* 打卡 5 个景点 ## 流水账时间 * 一个挺暖和的春节 -* 过年在家有天晚上睡不着,翻身起来做了个数码宝贝的MV,但是咕咕咕又不想投稿。。 +* 过年在家有天晚上睡不着,翻身起来做了个数码宝贝的 MV,但是咕咕咕又不想投稿。。 * 拿云台坐在电动车上给老家拍了个视频,等十年后再回来看 * 游万佛湖,几年没去没想到景区建设得很快 -* MC私服,云服务器好友联机爽歪歪,还有1.5个外国友人沟通变得奇妙了起来 -* 返校第二天拿到jd实习offer +* MC 私服,云服务器好友联机爽歪歪,还有 1.5 个外国友人沟通变得奇妙了起来 +* 返校第二天拿到 jd 实习 offer * 无聊的编译原理课 * 各种上课接电话 -* 各种准备面试和被面试,最终拿到BAT实习offer -* 📕深入理解Java虚拟机👍 -* 折腾RSS,对RSS Man做了不少优化 +* 各种准备面试和被面试,最终拿到 BAT 实习 offer +* 📕深入理解 Java 虚拟机👍 +* 折腾 RSS,对 RSS Man 做了不少优化 * CFC 六级冲关小班课 * 前往北京实习 * 打飞的回来考试 * 平平无奇的暑假,体验公司生活 -* 搭建ARK私服,天天开黑 -* 参加Linux平台的一个开发比赛,没想到白天上班晚上回来写点东西这么累 -* 周末拿公司的mbp回去听歌爽歪歪,想买个homepod结果停产了。。 +* 搭建 ARK 私服,天天开黑 +* 参加 Linux 平台的一个开发比赛,没想到白天上班晚上回来写点东西这么累 +* 周末拿公司的 mbp 回去听歌爽歪歪,想买个 homepod 结果停产了。。 * 入坑鲁邦三世系列,很有魅力的一部剧 * 📕《凤凰架构》👍 * 龟龟到家 -* 过生日入了一对homepod mini,立体声效果很nice +* 过生日入了一对 homepod mini,立体声效果很 nice * 第一次体验现场器乐表演 * 天气转凉,爬长城游故宫打卡北京 * 同学来北京玩,天天吃好的,才发现稍微奢侈一点点可以吃到超棒的美食 * 回学校体验隔离套餐:( * 博客上线评论 -* 随手做的RSS Man项目渐渐获得关注和认可,感觉超棒 +* 随手做的 RSS Man 项目渐渐获得关注和认可,感觉超棒 * 第一次体验翻,土蔷,真墙 * 入坑并追完星际宝贝系列 -* 入手XBOX,XGP真香 -* 最后一次参加CFC招新 +* 入手 XBOX,XGP 真香 +* 最后一次参加 CFC 招新 * 入手极米投影仪,躺在宿舍床上看电影美滋滋 * 📕《编码:隐匿在计算机软硬件背后的语言》👍 -* Linux&Git小班课,一周从`ls`到nginx -* 搞到了三百块4c16g的服务器,y1s1真的给力 +* Linux&Git 小班课,一周从`ls`到 nginx +* 搞到了三百块 4c16g 的服务器,y1s1 真的给力 * 赶在年末疫情没严重溜回家,保住我的最后一个寒假 * 2021 the end diff --git a/content/posts/2023静态网站托管服务速度对比.md b/content/posts/2023静态网站托管服务速度对比.md index 9e1f291..eda3964 100644 --- a/content/posts/2023静态网站托管服务速度对比.md +++ b/content/posts/2023静态网站托管服务速度对比.md @@ -1,5 +1,5 @@ --- -title: 2023静态网站托管服务速度对比 +title: 2023 静态网站托管服务速度对比 date: 2022-12-25 description: 对几家喜闻乐见的静态网站托管服务商 Vercel、Netlify、Cloudflare Pages、Azure Static Pages 测个速, 2023 版 categories: @@ -13,7 +13,7 @@ tags: - Azure --- - + 对几家喜闻乐见的静态网站托管服务商 Vercel、Netlify、Cloudflare Pages、Azure Static Pages 测个速 @@ -108,7 +108,7 @@ TX 海外 CDN 红绿参半,不过可以看到很强的地域特性 - 移动走 Netlify 和腾讯云海外 CDN - 联通走 Netlify、Cloudflare、腾讯云海外 CDN -博客的几个镜像站点我也挂在了仓库的README页面,加了几个badge可以快速看到几个mirror的联通性情况。[https://github.com/Colin-XKL/Colinx-Blog](https://github.com/Colin-XKL/Colinx-Blog) +博客的几个镜像站点我也挂在了仓库的 README 页面,加了几个 badge 可以快速看到几个 mirror 的联通性情况。[https://github.com/Colin-XKL/Colinx-Blog](https://github.com/Colin-XKL/Colinx-Blog) diff --git a/content/posts/Colin's 实验室 - 2021春.md b/content/posts/Colin's 实验室 - 2021春.md index c722f04..93fcea9 100644 --- a/content/posts/Colin's 实验室 - 2021春.md +++ b/content/posts/Colin's 实验室 - 2021春.md @@ -1,8 +1,8 @@ --- -title: Colin's实验室 - 2021春 +title: Colin's 实验室 - 2021 春 date: 2021-02-25 lastmod: 2021-03-30 -description: 小玩具及他们的demo +description: 小玩具及他们的 demo categories: - 技术 tags: @@ -12,9 +12,9 @@ tags: - Flutter --- - + -> 小玩具及他们的demo +> 小玩具及他们的 demo > > @@ -22,35 +22,35 @@ tags: > 自动分割给定的英文文本,提取词元后在数据库中搜索,根据给定的词汇量和难度等级进行筛选,只能提取阅读障碍词汇并高亮当前备考项目(如四级)的重点单词 - ![360截图20210206210445677](https://blog-1301127393.file.myqcloud.com/BlogImgs/20210330233722.jpg) + ![360 截图 20210206210445677](https://blog-1301127393.file.myqcloud.com/BlogImgs/20210330233722.jpg) -## 知乎爬虫及JS逆向 +## 知乎爬虫及 JS 逆向 -> 日常用RSS订阅知乎的一些高质量专栏。但由于知乎本事并不支持RSS,内容大多通过RSShub来的,其本质是个爬虫,经常会受到前端页面结构变更的影响。为了应对这个变化,RSShub中对于知乎相关页面的爬取规则必须得重写。 +> 日常用 RSS 订阅知乎的一些高质量专栏。但由于知乎本事并不支持 RSS,内容大多通过 RSShub 来的,其本质是个爬虫,经常会受到前端页面结构变更的影响。为了应对这个变化,RSShub 中对于知乎相关页面的爬取规则必须得重写。 > -> 分析了一通知乎的页面,发现有个接口可以直接请求,但是会检验header。header里面有几项特殊的自定义参数,`x-zse-83` 和 `x-zse-86`等。为了搞清楚这里面的数值怎么来的,就必须对知乎前端页面资源中的一个js文件进行逆向分析。 +> 分析了一通知乎的页面,发现有个接口可以直接请求,但是会检验 header。header 里面有几项特殊的自定义参数,`x-zse-83` 和 `x-zse-86`等。为了搞清楚这里面的数值怎么来的,就必须对知乎前端页面资源中的一个 js 文件进行逆向分析。 > -> 逆向折腾了大半天,就快要成功提取核心加密函数的时候,发现知乎的前端页面为了SEO有加入一页的文章列表数据,可以直接用上。考虑到逆向的工作量和潜在的法律问题,遂放弃原本的方案。 +> 逆向折腾了大半天,就快要成功提取核心加密函数的时候,发现知乎的前端页面为了 SEO 有加入一页的文章列表数据,可以直接用上。考虑到逆向的工作量和潜在的法律问题,遂放弃原本的方案。 > -> 新的方案完成后,已向RSShub提交PR并已被合并。 +> 新的方案完成后,已向 RSShub 提交 PR 并已被合并。 -## MC服务器搭建与极限优化 +## MC 服务器搭建与极限优化 -> 1核2G学生机,从2人联机频频崩溃到8人挖矿毫无压力,学习了JVM GC种种,对服务端程序的一些参数也渐渐熟悉。优化效果喜人,总有还能压榨的性能,就像资本家看手下的骡子一样hhh +> 1 核 2G 学生机,从 2 人联机频频崩溃到 8 人挖矿毫无压力,学习了 JVM GC 种种,对服务端程序的一些参数也渐渐熟悉。优化效果喜人,总有还能压榨的性能,就像资本家看手下的骡子一样 hhh -![屏幕截图(12)](https://blog-1301127393.file.myqcloud.com/BlogImgs20210207205949.png) +![屏幕截图 (12)](https://blog-1301127393.file.myqcloud.com/BlogImgs20210207205949.png) ## 洞洞板/冰箱贴/CVPRO/(...没想好名字) -> 一款跨平台的灵感素材收集与简易管理App,基于Flutter构建,跨平台,颜值在线。 +> 一款跨平台的灵感素材收集与简易管理 App,基于 Flutter 构建,跨平台,颜值在线。 -![截屏2021-03-30 23.21.32](https://blog-1301127393.file.myqcloud.com/BlogImgs/20210330233350.png) +![截屏 2021-03-30 23.21.32](https://blog-1301127393.file.myqcloud.com/BlogImgs/20210330233350.png) -> 持续开发中,附roadmap +> 持续开发中,附 roadmap > > version 1.0 > diff --git a/content/posts/Flutter 拖动排序列表与跨平台优化实践.md b/content/posts/Flutter 拖动排序列表与跨平台优化实践.md index 8ae14ba..a81e679 100644 --- a/content/posts/Flutter 拖动排序列表与跨平台优化实践.md +++ b/content/posts/Flutter 拖动排序列表与跨平台优化实践.md @@ -14,7 +14,7 @@ tags: -Flutter中实现拖动排序的列表非常简单,使用官方的`ReorderableListView`替代原本的`ListView`即可,`ListView.builder`同理。 +Flutter 中实现拖动排序的列表非常简单,使用官方的`ReorderableListView`替代原本的`ListView`即可,`ListView.builder`同理。 @@ -42,30 +42,30 @@ Flutter中实现拖动排序的列表非常简单,使用官方的`ReorderableL } ``` -上面是官方给的demo,简洁明了。[官方介绍视频](https://www.youtube.com/watch?v=yll3SNXvQCw)下面的评论里,人家直呼比原生Android写的过瘾的多。阅读文档后我给我的App的界面也加上了可拖动排序的功能。效果如下图 +上面是官方给的 demo,简洁明了。[官方介绍视频](https://www.youtube.com/watch?v=yll3SNXvQCw)下面的评论里,人家直呼比原生 Android 写的过瘾的多。阅读文档后我给我的 App 的界面也加上了可拖动排序的功能。效果如下图 -![截屏2021-03-30 23.04.59](https://blog-1301127393.file.myqcloud.com/BlogImgs/20210330234001.png) +![截屏 2021-03-30 23.04.59](https://blog-1301127393.file.myqcloud.com/BlogImgs/20210330234001.png) 虽然可以实现拖动了,但是右边有一个按钮很碍眼。不过这个是用来控制拖动的,鼠标移上去才能触发拖动。 -翻了翻文档发现,这个地方`ReorderableListView`在移动端和桌面端的处理是不一样的,上图(桌面macos)右边会出现一个dragHandler,而移动端则是靠长按列表项触发拖动。 +翻了翻文档发现,这个地方`ReorderableListView`在移动端和桌面端的处理是不一样的,上图(桌面 macos)右边会出现一个 dragHandler,而移动端则是靠长按列表项触发拖动。 要把这个碍眼的图标去掉,有两个方案: -- 找到定义这个图标的地方,更换一个合适的图标,并在外面包裹一层,仅在鼠标hover时将图标显示以进行拖动,其他情况下隐藏 +- 找到定义这个图标的地方,更换一个合适的图标,并在外面包裹一层,仅在鼠标 hover 时将图标显示以进行拖动,其他情况下隐藏 - 将拖动的实现定义为和移动端相同,即都通过长按列表项触发拖动 针对方案一,以`ReorderableListView` 和`Icon`为关键词搜索,很遗憾的是并没有这方面的资料,又翻了翻源码,并没有找到可以自定义右边这个拖拽按钮的实现。 -在Flutter官方的Github仓库的issue中,[https://github.com/flutter/flutter/issues/66080#issuecomment-771123430](https://github.com/flutter/flutter/issues/66080#issuecomment-771123430) 对相关问题做了阐述,并有提案对`ReorderableListView`进行了改进。该issue对应的pr已经被合并到stable channel,查阅相关API后了解到可以使用`buildDefaultDragHandles: false`,关闭默认的拖拽触发实现,再使用`ReorderableDelayedDragStartListener`包裹原先的`ListTile`即可实现桌面端和移动端都通过长按列表项触发拖拽排序。 +在 Flutter 官方的 Github 仓库的 issue 中,[https://github.com/flutter/flutter/issues/66080#issuecomment-771123430](https://github.com/flutter/flutter/issues/66080#issuecomment-771123430) 对相关问题做了阐述,并有提案对`ReorderableListView`进行了改进。该 issue 对应的 pr 已经被合并到 stable channel,查阅相关 API 后了解到可以使用`buildDefaultDragHandles: false`,关闭默认的拖拽触发实现,再使用`ReorderableDelayedDragStartListener`包裹原先的`ListTile`即可实现桌面端和移动端都通过长按列表项触发拖拽排序。 -不过相应的,ListTile的`onLongPress`就不能再有响应了。刚好今天完成了滑动删除的实现,现在列表也的删除、排序已经高度可用且多平台统一了。 +不过相应的,ListTile 的`onLongPress`就不能再有响应了。刚好今天完成了滑动删除的实现,现在列表也的删除、排序已经高度可用且多平台统一了。 -![截屏2021-03-30 23.21.32](https://blog-1301127393.file.myqcloud.com/BlogImgs/20210330233350.png) +![截屏 2021-03-30 23.21.32](https://blog-1301127393.file.myqcloud.com/BlogImgs/20210330233350.png) 附相关代码实现: diff --git a/content/posts/Huginn指南:为任意网站制作RSS.md b/content/posts/Huginn指南:为任意网站制作RSS.md index 7e1a629..add317e 100644 --- a/content/posts/Huginn指南:为任意网站制作RSS.md +++ b/content/posts/Huginn指南:为任意网站制作RSS.md @@ -1,8 +1,8 @@ --- -title: Huginn指南:为任意网站制作RSS +title: Huginn 指南:为任意网站制作 RSS date: 2022-05-08 lastmod: 2022-05-08 -description: 又一篇介绍使用Huginn制作RSS的教程🕶️ +description: 又一篇介绍使用 Huginn 制作 RSS 的教程🕶️ categories: - 技术 - 指南 @@ -14,35 +14,35 @@ tags: - 技术 --- - + -Huginn使用多个不同功能的Agent组合搭配来实现一系列功能,一个Agent可以执行特定的操作,并产生一个Event,你可以指定他产生的Event由哪个Agent接收处理。 +Huginn 使用多个不同功能的 Agent 组合搭配来实现一系列功能,一个 Agent 可以执行特定的操作,并产生一个 Event,你可以指定他产生的 Event 由哪个 Agent 接收处理。 -比如我们需要使用WebSite Agent来爬取某个网站上的列表内容,爬取后列表的每一项会生成一个Event,我们可以指定一个Output Agent来接收这些Event,并将其转换为RSS的格式进行输出,复制Output Agent返回给你的URL就可以进行订阅啦,Huginn爬取网站生成RSS的基本原理就是这样。 +比如我们需要使用 WebSite Agent 来爬取某个网站上的列表内容,爬取后列表的每一项会生成一个 Event,我们可以指定一个 Output Agent 来接收这些 Event,并将其转换为 RSS 的格式进行输出,复制 Output Agent 返回给你的 URL 就可以进行订阅啦,Huginn 爬取网站生成 RSS 的基本原理就是这样。 -## Huginn爬取普通网页制作RSS +## Huginn 爬取普通网页制作 RSS -右键网页打开开发者工具,屏幕会分出一部分空间显示开发者工具窗口,点击左上角的按钮再把鼠标移动到页面上可以选择页面的某一个元素,比如这里我们要爬取推荐文章列表,推荐文章列表的每一项都有同样的样式,我们可以使用CSS选择器来指定爬取该项 +右键网页打开开发者工具,屏幕会分出一部分空间显示开发者工具窗口,点击左上角的按钮再把鼠标移动到页面上可以选择页面的某一个元素,比如这里我们要爬取推荐文章列表,推荐文章列表的每一项都有同样的样式,我们可以使用 CSS 选择器来指定爬取该项 ![image-20220508160659378](https://blog-1301127393.file.myqcloud.com/BlogImgs/202205082207138.png) -该元素可以用CSS选择器`.meiwen`选择到。 +该元素可以用 CSS 选择器`.meiwen`选择到。 **Tips:** class=xxx则使用`.xxx`,如果为id=xxx则使用`#xxx` -该标签是a标签,我们可以继续限定一下条件,使用`a.meiwen` +该标签是 a 标签,我们可以继续限定一下条件,使用`a.meiwen` -如果要限制必须是h2 标签下的带有meiwen的class属性的a标签,可以使用`h2 a.meiwen` +如果要限制必须是 h2 标签下的带有 meiwen 的 class 属性的 a 标签,可以使用`h2 a.meiwen` -如果要再加一个限制,是列表元素li下面的h2标签里带有meiwen的class属性的a标签,可以使用`li h2 a.meiwen` +如果要再加一个限制,是列表元素 li 下面的 h2 标签里带有 meiwen 的 class 属性的 a 标签,可以使用`li h2 a.meiwen` 添加其他附加限定条件以此类推 -你也可以在右侧Style面板里点击加号添加一个自定义样式,输入CSS选择器,浏览器会自动高亮符合条件的网页元素,你可以使用这个功能来检验你写的CSS选择器是否正确以及是不是提取的你想要的内容 +你也可以在右侧 Style 面板里点击加号添加一个自定义样式,输入 CSS 选择器,浏览器会自动高亮符合条件的网页元素,你可以使用这个功能来检验你写的 CSS 选择器是否正确以及是不是提取的你想要的内容 ![image-20220508163359806](https://blog-1301127393.file.myqcloud.com/BlogImgs/202205082207716.png) @@ -50,7 +50,7 @@ Huginn使用多个不同功能的Agent组合搭配来实现一系列功能,一 -接下来在Huginn里创建一个Scenario,然后点击新建一个Agent,类型选择WebSite Agent,填写一个名称,并在最下面的配置处指定你要爬取的网页元素 +接下来在 Huginn 里创建一个 Scenario,然后点击新建一个 Agent,类型选择 WebSite Agent,填写一个名称,并在最下面的配置处指定你要爬取的网页元素 > ###### **Website Agent** > @@ -63,35 +63,35 @@ url: { } ``` -以爬取url为例,css表示使用css选择器选择网页元素,value表示从哪里获取对应的值,对于刚才我们选取的一个元素来说 +以爬取 url 为例,css 表示使用 css 选择器选择网页元素,value 表示从哪里获取对应的值,对于刚才我们选取的一个元素来说 ```html 缘起则聚,缘灭则散 ``` -href属性里面的内容是他的链接,title属性里面的内容则是他的标题。接下来在value中填写`@href`指定从href属性提取内容,就可以取到链接地址了 +href 属性里面的内容是他的链接,title 属性里面的内容则是他的标题。接下来在 value 中填写`@href`指定从 href 属性提取内容,就可以取到链接地址了 > **Pro Tips:** > -> 如果是纯文本节点或是想提取标签内嵌的文本,value里可以填写`string(.)` +> 如果是纯文本节点或是想提取标签内嵌的文本,value 里可以填写`string(.)` > > 如果想删除多余的空格,可以使用`normalize-space(.)` > **Pro Tips 2:** > -> 字符串处理函数和标签属性值变量可以一起使用,如`normalize-space(@title)`可以获取该标签的title属性值并删除多余的空白字符 +> 字符串处理函数和标签属性值变量可以一起使用,如`normalize-space(@title)`可以获取该标签的 title 属性值并删除多余的空白字符 ![image-20220508163714342](https://blog-1301127393.file.myqcloud.com/BlogImgs/202205082207717.png) -接下来点击Dry Run按钮进行测试,不出意外我们会得到一个json的输出,里面包括我们爬取到的每一项他的url和title。 +接下来点击 Dry Run 按钮进行测试,不出意外我们会得到一个 json 的输出,里面包括我们爬取到的每一项他的 url 和 title。 -如果没有成功,你可能需要删掉上面没有使用到的hovertext节点,因为该项指定的内容在我们刚才的网页中并不存在。 +如果没有成功,你可能需要删掉上面没有使用到的 hovertext 节点,因为该项指定的内容在我们刚才的网页中并不存在。 ![image-20220508164259295](https://blog-1301127393.file.myqcloud.com/BlogImgs/202205082207718.png) -点击Save保存,我们开始下一步输出RSS。在刚才的Scenario中再新建一个Agent,选择Data Output Agent,并设置他的名字和Source Agent +点击 Save 保存,我们开始下一步输出 RSS。在刚才的 Scenario 中再新建一个 Agent,选择 Data Output Agent,并设置他的名字和 Source Agent > ###### Data output Agent > @@ -101,13 +101,13 @@ href属性里面的内容是他的链接,title属性里面的内容则是他 -**Propagate immediately**是指即时处理来自Source Agent的Event,启用他方便我们调试,但会略微增加服务器负载,你可以自行决定是否使用。 +**Propagate immediately**是指即时处理来自 Source Agent 的 Event,启用他方便我们调试,但会略微增加服务器负载,你可以自行决定是否使用。 ![image-20220508165345792](https://blog-1301127393.file.myqcloud.com/BlogImgs/202205082207720.png) -在secret字段中为你的这个RSS标注一个英文的名字,修改title字段标注你的RSS的名字。item字段是每条文章会有的属性,一般来说主要就title和link,分别设置为上文我们提取的值的变量名。这里添加一个guid字段,这是一篇文章的唯一标识符,避免RSS阅读器读到的文章标题不同但是内容相同,常见于某篇文章的标题被修改,这会导致RSS阅读器内出现多篇重复文章。 +在 secret 字段中为你的这个 RSS 标注一个英文的名字,修改 title 字段标注你的 RSS 的名字。item 字段是每条文章会有的属性,一般来说主要就 title 和 link,分别设置为上文我们提取的值的变量名。这里添加一个 guid 字段,这是一篇文章的唯一标识符,避免 RSS 阅读器读到的文章标题不同但是内容相同,常见于某篇文章的标题被修改,这会导致 RSS 阅读器内出现多篇重复文章。 -此外建议增加一个link字段,值设置为与爬取的网站的主域名一致,避免网站内使用相对链接开头的资源无法正常加载。 +此外建议增加一个 link 字段,值设置为与爬取的网站的主域名一致,避免网站内使用相对链接开头的资源无法正常加载。 ![image-20220508170038722](https://blog-1301127393.file.myqcloud.com/BlogImgs/202205082207721.png) @@ -115,7 +115,7 @@ href属性里面的内容是他的链接,title属性里面的内容则是他 ![image-20220508170115192](https://blog-1301127393.file.myqcloud.com/BlogImgs/202205082207722.png) -点击Save保存,回到Scenario界面,第一次需要手动点击运行一下刚才的Website Agent。稍等片刻后台会进行爬取,右上角会显示产生了多少个Event。再点开刚才设置的Data Output Agent查看详情,vola!右侧就会显示生成的RSS链接了,复制以xml结尾的链接到RSS阅读器中就可以订阅啦🎉 +点击 Save 保存,回到 Scenario 界面,第一次需要手动点击运行一下刚才的 Website Agent。稍等片刻后台会进行爬取,右上角会显示产生了多少个 Event。再点开刚才设置的 Data Output Agent 查看详情,vola!右侧就会显示生成的 RSS 链接了,复制以 xml 结尾的链接到 RSS 阅读器中就可以订阅啦🎉 ![image-20220508170212112](https://blog-1301127393.file.myqcloud.com/BlogImgs/202205082207723.png) @@ -123,33 +123,33 @@ href属性里面的内容是他的链接,title属性里面的内容则是他 -如果你的配置正确但是WebSite Agent又没有输出任何内容的话,那么你要爬取的站点的内容应该是通过JavaScript在你带开浏览器时动态生成的。 +如果你的配置正确但是 WebSite Agent 又没有输出任何内容的话,那么你要爬取的站点的内容应该是通过 JavaScript 在你带开浏览器时动态生成的。 > **Pro Tips:** > -> 你可以右键网页在开发人员菜单中点击显示源代码,然后用Ctrl+F搜索你在页面上见到的想爬取的某一条内容,如果有说明该网站的页面时静态的,否则说明你要爬取的内容并不是静态的。 +> 你可以右键网页在开发人员菜单中点击显示源代码,然后用 Ctrl+F 搜索你在页面上见到的想爬取的某一条内容,如果有说明该网站的页面时静态的,否则说明你要爬取的内容并不是静态的。 -要爬取这样的站点,我们需要模拟浏览器操作,执行页面上的JavaScript脚本,待数据生成完毕后再使用上面的方法去爬取内容。要模拟浏览器操作,这里介绍两个方案:一个是利用browserless的无头浏览器,另一个是使用在线PhatomJS服务。 +要爬取这样的站点,我们需要模拟浏览器操作,执行页面上的 JavaScript 脚本,待数据生成完毕后再使用上面的方法去爬取内容。要模拟浏览器操作,这里介绍两个方案:一个是利用 browserless 的无头浏览器,另一个是使用在线 PhatomJS 服务。 -## 使用Huginn+Browserless为动态网页生成RSS +## 使用 Huginn+Browserless 为动态网页生成 RSS -部署了[RSS Man X](https://github.com/Colin-XKL/RSSmanX)的完整版的话默认已经包含huginn和browserless服务,无需重复安装。且huginn可以通过`service.browserless:3000`访问到browserless服务。 +部署了[RSS Man X](https://github.com/Colin-XKL/RSSmanX)的完整版的话默认已经包含 huginn 和 browserless 服务,无需重复安装。且 huginn 可以通过`service.browserless:3000`访问到 browserless 服务。 -总体步骤与上文一样,不过因为被抓取的内容是通过JavaScript动态生成的,所以直接使用WebSite Agent是抓取不到东西的,我们需要先使用Post Agent向browserless服务发送指令,让他帮我们模拟浏览器操作,再将最终完整的网页返回给我们,再使用WebSite Agent进行后续处理。 +总体步骤与上文一样,不过因为被抓取的内容是通过 JavaScript 动态生成的,所以直接使用 WebSite Agent 是抓取不到东西的,我们需要先使用 Post Agent 向 browserless 服务发送指令,让他帮我们模拟浏览器操作,再将最终完整的网页返回给我们,再使用 WebSite Agent 进行后续处理。 > ###### **Post Agent** > > A Post Agent receives events from other agents (or runs periodically), merges those events with the Liquid-interpolated contents of payload, and sends the results as POST (or GET) requests to a specified url. To skip merging in the incoming event, but still send the interpolated payload, set no_merge to true. -接下来以[这个网站](https://pccz.court.gov.cn/pcajxxw/pcgg/ggdh?lx=0)为例介绍一下,这个列表页的内容是由JavaScript动态生成的 +接下来以[这个网站](https://pccz.court.gov.cn/pcajxxw/pcgg/ggdh?lx=0)为例介绍一下,这个列表页的内容是由 JavaScript 动态生成的 ![image-20220508205159783](https://blog-1301127393.file.myqcloud.com/BlogImgs/202205082207724.png) -按照以下内容设置你的Post Agent +按照以下内容设置你的 Post Agent ```json { @@ -170,15 +170,15 @@ href属性里面的内容是他的链接,title属性里面的内容则是他 } ``` -其中`post_url`为你的browserless实例地址,如果你使用了RSS MAN X里的Huginn可以直接向上面一样填写。`payload`中的`url`字段填写你需要的网页地址。注意emit_events要设置为`true`,这样才方便我们后续使用WebSite Agent操作。 +其中`post_url`为你的 browserless 实例地址,如果你使用了 RSS MAN X 里的 Huginn 可以直接向上面一样填写。`payload`中的`url`字段填写你需要的网页地址。注意 emit_events 要设置为`true`,这样才方便我们后续使用 WebSite Agent 操作。 -点击Dry Run,如果能返回一个带有`body`字段且里面有文本内容说明调用成功。 +点击 Dry Run,如果能返回一个带有`body`字段且里面有文本内容说明调用成功。 调用不成功检查一下配置,以及是不是我们的爬虫被目标网站拦截了。若是爬虫被拦截可参考文末的解决方案。 ![image-20220508195731732](https://blog-1301127393.file.myqcloud.com/BlogImgs/202205082207725.png) -接下来点击Save保存,再新建一个Website Agent,Source设置为刚才的Post Agent。 +接下来点击 Save 保存,再新建一个 Website Agent,Source 设置为刚才的 Post Agent。 ```json { @@ -205,17 +205,17 @@ href属性里面的内容是他的链接,title属性里面的内容则是他 -注意修改`data_from_event`的值,其他地方与爬取普通网站一样。再新建并配置一下Output Agent,RSS的链接就出来了 +注意修改`data_from_event`的值,其他地方与爬取普通网站一样。再新建并配置一下 Output Agent,RSS 的链接就出来了 ![image-20220508205856407](https://blog-1301127393.file.myqcloud.com/BlogImgs/202205082207726.png) -## 使用PhantomJS为动态页面生成RSS +## 使用 PhantomJS 为动态页面生成 RSS -首先需要到[Phantom Js Cloud的官网](https://phantomjscloud.com)注册一个账户,每个账户官方提供了一定的免费额度,每天大概可以爬取500个页面,对于做RSS来说妥妥的够用了。注册之后可以得到一个API KEY,这个待会会使用到。 +首先需要到[Phantom Js Cloud 的官网](https://phantomjscloud.com)注册一个账户,每个账户官方提供了一定的免费额度,每天大概可以爬取 500 个页面,对于做 RSS 来说妥妥的够用了。注册之后可以得到一个 API KEY,这个待会会使用到。 -接下来新建一个Phantom JS Cloud Agent,填写基本的名称、API KEY和目标URL,render type选择html。底下User Agent建议改用真实的浏览器UA,减少触发反爬虫的可能性。如果不知道自己的UA可以到这个网站查看当前浏览器的UA,复制字符串即可。如果懒得查也可以用这个 +接下来新建一个 Phantom JS Cloud Agent,填写基本的名称、API KEY 和目标 URL,render type 选择 html。底下 User Agent 建议改用真实的浏览器 UA,减少触发反爬虫的可能性。如果不知道自己的 UA 可以到这个网站查看当前浏览器的 UA,复制字符串即可。如果懒得查也可以用这个 ``` Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.81 Safari/537.36 @@ -227,7 +227,7 @@ Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like > > URLs generated by this Agent are formulated in accordance with the PhantomJs Cloud API. The generated URLs can then be supplied to a Website Agent to fetch and parse the content. Sign up to get an api key, and add it in Huginn credentials. -点击Dry Run后会返回一条url,返回格式类似这样 +点击 Dry Run 后会返回一条 url,返回格式类似这样 ```json [ @@ -237,7 +237,7 @@ Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like ] ``` -之后创建一个WebSite Agent,Source Agent设置为上面的Phantom JS Cloud Agent,然后稍微改一下url的部分 +之后创建一个 WebSite Agent,Source Agent 设置为上面的 Phantom JS Cloud Agent,然后稍微改一下 url 的部分 ```json { @@ -255,7 +255,7 @@ Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like -这里是刚才的Agent产生的一个Event。这里除了url和title我还提取了date字段。在Output Agent中,可以配置为每一条文章输出发布时间的信息。对于这种规整的日期字母串,可以使用`{{ date | date: %F }}`进行解析并格式化输出为rss规范的时间格式如果没有配置的话,每篇文章的发布时间显示的都是一样的,为Huginn爬虫更新的时间。 +这里是刚才的 Agent 产生的一个 Event。这里除了 url 和 title 我还提取了 date 字段。在 Output Agent 中,可以配置为每一条文章输出发布时间的信息。对于这种规整的日期字母串,可以使用`{{ date | date: %F }}`进行解析并格式化输出为 rss 规范的时间格式如果没有配置的话,每篇文章的发布时间显示的都是一样的,为 Huginn 爬虫更新的时间。 ```json "item": { @@ -267,9 +267,9 @@ Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like > **Pro Tips:** > -> Huginn解析日期 +> Huginn 解析日期 > -> 注意`{{ date | date: %F }}`里面,第一个`date`是上面的Website Agent产生的Event里面的变量名,第二个`date`是Huginn使用的Liquid模版引擎语法里内置的一个filter,可以理解为有特定功能的函数 +> 注意`{{ date | date: %F }}`里面,第一个`date`是上面的 Website Agent 产生的 Event 里面的变量名,第二个`date`是 Huginn 使用的 Liquid 模版引擎语法里内置的一个 filter,可以理解为有特定功能的函数 @@ -283,33 +283,33 @@ Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like ## FAQ -* **为什么启动docker容器后访问Huginn显示网络错误?** +* **为什么启动 docker 容器后访问 Huginn 显示网络错误?** - Huignn冷启动较慢,需要等待三五分钟。如果还是不行,检查端口映射和防火墙设置 + Huignn 冷启动较慢,需要等待三五分钟。如果还是不行,检查端口映射和防火墙设置 -* **为什么抓取到的包含相对路径的结果,网页上可以点击访问,但是生成的RSS不能正常使用?** +* **为什么抓取到的包含相对路径的结果,网页上可以点击访问,但是生成的 RSS 不能正常使用?** - 检查link的设置,有些网站只是域名,有些网站有子目录,具体查看该网页源码中head节点里base url的设置 + 检查 link 的设置,有些网站只是域名,有些网站有子目录,具体查看该网页源码中 head 节点里 base url 的设置 * **如何对爬取到的某一项的字符串做更高级更复杂的处理?** - 可以参考[Hugnn官方对Liquid语法的文档](https://github.com/huginn/huginn/wiki/Formatting-Events-using-Liquid)以及[Shopify官方关于Liquid模板的语法文档](https://shopify.dev/api/liquid) + 可以参考[Hugnn 官方对 Liquid 语法的文档](https://github.com/huginn/huginn/wiki/Formatting-Events-using-Liquid)以及[Shopify 官方关于 Liquid 模板的语法文档](https://shopify.dev/api/liquid) -* **为什么部署了Huginn,等了很长时间都无法访问后台页面?** +* **为什么部署了 Huginn,等了很长时间都无法访问后台页面?** - 若部署后某个应用一直无法通过浏览器访问,请检查是否绑定到了6000/6666等特殊端口,浏览器会拦截对这些端口的访问参见[这里](https://blog.colinx.one/posts/docker-compose%E7%9A%84%E9%94%99%E8%AF%AF%E4%BD%BF%E7%94%A8%E5%A7%BF%E5%8A%BF/) + 若部署后某个应用一直无法通过浏览器访问,请检查是否绑定到了 6000/6666 等特殊端口,浏览器会拦截对这些端口的访问参见[这里](https://blog.colinx.one/posts/docker-compose%E7%9A%84%E9%94%99%E8%AF%AF%E4%BD%BF%E7%94%A8%E5%A7%BF%E5%8A%BF/) * **Huginn 爬虫访问目标网站被拦截了怎么解决** 介绍几个基本的反反爬虫策略: - 1. 带上User Agent,要求是真实的浏览器UA。 - 2. Browserless去掉默认会和请求一起发送的可以被识别为爬虫的特征参数,设置browserless的环境变量`DEFAULT_HEADLESS=false` - 3. 使用随机代理IP,适用于因爬取频率达到爬虫阈值 + 1. 带上 User Agent,要求是真实的浏览器 UA。 + 2. Browserless 去掉默认会和请求一起发送的可以被识别为爬虫的特征参数,设置 browserless 的环境变量`DEFAULT_HEADLESS=false` + 3. 使用随机代理 IP,适用于因爬取频率达到爬虫阈值 ## 扩展阅读 -* [Huginn官方文档](https://github.com/huginn/huginn/wiki/) -* [Liquid模板引擎语法官方文档](https://shopify.dev/api/liquid/filters/) -* [RSS Man X部署指南](https://blog.colinx.one/posts/rssmanx%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97/) +* [Huginn 官方文档](https://github.com/huginn/huginn/wiki/) +* [Liquid 模板引擎语法官方文档](https://shopify.dev/api/liquid/filters/) +* [RSS Man X 部署指南](https://blog.colinx.one/posts/rssmanx%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97/) * [docker compose 的错误使用姿势](https://blog.colinx.one/posts/docker-compose%E7%9A%84%E9%94%99%E8%AF%AF%E4%BD%BF%E7%94%A8%E5%A7%BF%E5%8A%BF/) diff --git a/content/posts/JAMStack初体验 - 基于Pocket 和 Gatsby 构建你的「网络日志」.md b/content/posts/JAMStack初体验 - 基于Pocket 和 Gatsby 构建你的「网络日志」.md index 6aa4082..1db05d5 100644 --- a/content/posts/JAMStack初体验 - 基于Pocket 和 Gatsby 构建你的「网络日志」.md +++ b/content/posts/JAMStack初体验 - 基于Pocket 和 Gatsby 构建你的「网络日志」.md @@ -1,8 +1,8 @@ --- -title: JAMStack初体验 - 基于 Pocket 和 Gatsby 构建你的「网络日志」 +title: JAMStack 初体验 - 基于 Pocket 和 Gatsby 构建你的「网络日志」 date: 2021-01-09 lastmod: 2021-01-10 -description: 折腾了自己的专属RSS信息流,每天都能从那些高质量的信息源中获得不少干货知识,一般就会顺手收藏一下。有一天突然想起自己收藏的那些文章,本身不就是经过二次筛选的高质量文章吗?于是便在构想能不能通过某种方式将这个信息源也公开出来,一方面是记录,另一方面也是间接地展示自己。恰逢遇见JAMStack,最近在国外非常火,国内的阿里和腾讯也在跟进,搞静态托管那一套。经多方物色,最终确定基于Pocket API+Gatsby来构建这样一个自己的「网络日志」。 +description: 折腾了自己的专属 RSS 信息流,每天都能从那些高质量的信息源中获得不少干货知识,一般就会顺手收藏一下。有一天突然想起自己收藏的那些文章,本身不就是经过二次筛选的高质量文章吗?于是便在构想能不能通过某种方式将这个信息源也公开出来,一方面是记录,另一方面也是间接地展示自己。恰逢遇见 JAMStack,最近在国外非常火,国内的阿里和腾讯也在跟进,搞静态托管那一套。经多方物色,最终确定基于 Pocket API+Gatsby 来构建这样一个自己的「网络日志」。 categories: - 技术 tags: @@ -13,30 +13,30 @@ tags: - Github --- - + -折腾了自己的专属RSS信息流,每天都能从那些高质量的信息源中获得不少干货知识,一般就会顺手收藏一下。有一天突然想起自己收藏的那些文章,本身不就是经过二次筛选的高质量文章吗?于是便在构想能不能通过某种方式将这个信息源也公开出来,一方面是记录,另一方面也是间接地展示自己。恰逢遇见**JAMStack**,最近在国外非常火,国内的阿里和腾讯也在跟进,搞静态托管那一套。经多方物色,最终确定基于`Pocket API`+`Gatsby`来构建这样一个自己的「网络日志」。 +折腾了自己的专属 RSS 信息流,每天都能从那些高质量的信息源中获得不少干货知识,一般就会顺手收藏一下。有一天突然想起自己收藏的那些文章,本身不就是经过二次筛选的高质量文章吗?于是便在构想能不能通过某种方式将这个信息源也公开出来,一方面是记录,另一方面也是间接地展示自己。恰逢遇见**JAMStack**,最近在国外非常火,国内的阿里和腾讯也在跟进,搞静态托管那一套。经多方物色,最终确定基于`Pocket API`+`Gatsby`来构建这样一个自己的「网络日志」。 > You are what you read. -## 简谈JAMStack +## 简谈 JAMStack -> JAMStack 即基于客户端 **J**avaScript,可重用 **A**PI 和预先构建 **M**arkup 的现代 Web 开发架构。当我们谈论 “堆栈” 时,我们不再谈论操作系统,特定 Web JAMStack 与特定技术无关。这是一种构建网站和应用程序的新方法,可提供更好的性能,更高的安全性,更低的扩展成本以及更好的开发人员体验。 +> JAMStack 即基于客户端 **J**avaScript,可重用 **A**PI 和预先构建 **M**arkup 的现代 Web 开发架构。当我们谈论“堆栈”时,我们不再谈论操作系统,特定 Web JAMStack 与特定技术无关。这是一种构建网站和应用程序的新方法,可提供更好的性能,更高的安全性,更低的扩展成本以及更好的开发人员体验。 -JAMStack是一种新颖的网站架构,与传统的服务端渲染和近些年国内流行的前后端分离等架构不同的是,他的网页是静态的,可以托管在CDN上,内容是动态的,可以方便地进行修改。 +JAMStack 是一种新颖的网站架构,与传统的服务端渲染和近些年国内流行的前后端分离等架构不同的是,他的网页是静态的,可以托管在 CDN 上,内容是动态的,可以方便地进行修改。 -**JAMStack几个显著的优势**: +**JAMStack 几个显著的优势**: * 页面为静态,TTFT(TimeToFirstByte)的时间可以降到非常低 * 页面为静态,服务器遭受的安全风险要低得多 -* 不同于客户端渲染,JAMStack对SEO会非常友好 +* 不同于客户端渲染,JAMStack 对 SEO 会非常友好 * 不同于传统纯静态网站,内容可以方便地动态更新 -## 为什么选择Gatsby +## 为什么选择 Gatsby -作为一个网站生成器Site Generator,Gastby的入门门槛其实是较高的,相对于Hexo、Hugo那种简简单单配置下就是一个站点,Gatsby的难度要更高,因为其灵活度更大,所有的配置、页面都是Javascript来配置的,当然你也可以使用Typescript。其基于React,生态丰富且灵活度高,天生`GarphQL`是选择它的主要原因。 +作为一个网站生成器 Site Generator,Gastby 的入门门槛其实是较高的,相对于 Hexo、Hugo 那种简简单单配置下就是一个站点,Gatsby 的难度要更高,因为其灵活度更大,所有的配置、页面都是 Javascript 来配置的,当然你也可以使用 Typescript。其基于 React,生态丰富且灵活度高,天生`GarphQL`是选择它的主要原因。 @@ -46,22 +46,22 @@ JAMStack是一种新颖的网站架构,与传统的服务端渲染和近些年 流程: -1. 我在其他地方看到不错的文章,将其收藏到Pocket -2. 定时任务,从`Pocket API`获取文章数据,交给Gatsby生成站点 -3. 自动部署,将生成的静态文件部署到CDN +1. 我在其他地方看到不错的文章,将其收藏到 Pocket +2. 定时任务,从`Pocket API`获取文章数据,交给 Gatsby 生成站点 +3. 自动部署,将生成的静态文件部署到 CDN 4. [reading.colinx.one](https://reading.colinx.one)站点主页就会出现我收藏的文章啦 -这其中,Gastby充当的是**Site Generator**的角色,而数据来源为我的`Pocket API`,也就是我把Pocket作为**Headless CMS**来管理我的数据,可以方便地进行更新和管理。 +这其中,Gastby 充当的是**Site Generator**的角色,而数据来源为我的`Pocket API`,也就是我把 Pocket 作为**Headless CMS**来管理我的数据,可以方便地进行更新和管理。 ## 总结 -项目已经开源,地址在[https://github.com/Colin-XKL/Colinx-Reading.git](https://github.com/Colin-XKL/Colinx-Reading)。你也可以去申请自己的Pocket API然后部署你自己的站点。 +项目已经开源,地址在[https://github.com/Colin-XKL/Colinx-Reading.git](https://github.com/Colin-XKL/Colinx-Reading)。你也可以去申请自己的 Pocket API 然后部署你自己的站点。 -初始尝试JAMStack,感觉对于博客、文档这类的站点会非常友好,国外比较火的像Shopify这种的无头电商也不错,国内的碍于国情应该不大可能了。 +初始尝试 JAMStack,感觉对于博客、文档这类的站点会非常友好,国外比较火的像 Shopify 这种的无头电商也不错,国内的碍于国情应该不大可能了。 diff --git a/content/posts/Mac平台配置学习环境.md b/content/posts/Mac平台配置学习环境.md index fb66036..6d7e1ac 100644 --- a/content/posts/Mac平台配置学习环境.md +++ b/content/posts/Mac平台配置学习环境.md @@ -28,31 +28,31 @@ tags: -## 配置C语言环境 +## 配置 C 语言环境 -下面以clang+VSCode+CodeRunner为例,搭建一个简单的C语言学习环境。 +下面以 clang+VSCode+CodeRunner 为例,搭建一个简单的 C 语言学习环境。 ### 检查编译器支持 -C语言的编译需要编译器,一般可以选择gcc或是clang。Mac系统默认安装了clang同时兼容了gcc的指令。在终端中进行查看: +C 语言的编译需要编译器,一般可以选择 gcc 或是 clang。Mac 系统默认安装了 clang 同时兼容了 gcc 的指令。在终端中进行查看: ![screenshot](https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015258.png) -输入`gcc -v`指令测试gcc命令是否可用并查看其版本,由上图输出可以看到,该命令可用,版本信息显示的则是clang的信息。一般来说,刚学习C语言无需关注两者的异同。 +输入`gcc -v`指令测试 gcc 命令是否可用并查看其版本,由上图输出可以看到,该命令可用,版本信息显示的则是 clang 的信息。一般来说,刚学习 C 语言无需关注两者的异同。 -### 配置VSCode +### 配置 VSCode VSCode是由微软主导开发的一款开源免费、轻巧简单、功能强大的代码编辑器。配合各式各样的插件可以方便地实现各种你想得到和你想不到的功能。 -前往[VSCode官网](https://code.visualstudio.com/)下载Mac 版VScode。并按照安装程序的指引进行安装。 +前往[VSCode 官网](https://code.visualstudio.com/)下载 Mac 版 VScode。并按照安装程序的指引进行安装。 如果下载速度太慢,可以参考[这篇文章](https://zhuanlan.zhihu.com/p/112215618)。 -![截屏2020-12-18 22.20.00](https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015416.png) +![截屏 2020-12-18 22.20.00](https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015416.png) 安装完毕后,打开会看到如下图所示的界面。默认界面为英文,下面对其进行汉化并安装一些必要的插件。 -![截屏2020-12-18 22.21.59](https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015546.png) +![截屏 2020-12-18 22.21.59](https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015546.png) 单击方形图标,打开扩展面板。 @@ -64,11 +64,11 @@ C语言的编译需要编译器,一般可以选择gcc或是clang。Mac系统 ![image-20201218222747511](https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015622.png) -搜索`code runner`安装Code Runner插件。并按指示重启应用(Reload字样) +搜索`code runner`安装 Code Runner 插件。并按指示重启应用(Reload 字样) -image-20201218222511011(截图中因为本地已安装故只显示了Uninstall卸载按钮。未安装的情况下会显示Install按钮可点击安装) +image-20201218222511011(截图中因为本地已安装故只显示了 Uninstall 卸载按钮。未安装的情况下会显示 Install 按钮可点击安装) -其他插件可根据需要安装。此处推荐安装C/C++插件以实现C代码的高亮和补全等功能。 +其他插件可根据需要安装。此处推荐安装 C/C++插件以实现 C 代码的高亮和补全等功能。 image-20201218223432859 @@ -80,7 +80,7 @@ C语言的编译需要编译器,一般可以选择gcc或是clang。Mac系统 -完成了上述的设置,我们就可以来编写C语言的程序了。 +完成了上述的设置,我们就可以来编写 C 语言的程序了。 ### Hello,C! @@ -96,53 +96,53 @@ C语言的编译需要编译器,一般可以选择gcc或是clang。Mac系统 ![image-20201218224343393](https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015628.png) -点击右上角的三角形按钮即可自动编译运行你的C语言代码。在窗口下方的终端即可看到输出的`Hello,C!`字样。 +点击右上角的三角形按钮即可自动编译运行你的 C 语言代码。在窗口下方的终端即可看到输出的`Hello,C!`字样。 ![image-20201219021624927](https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219021631.png) ### 完成✅ -现在,开始你的C语言学习之旅吧! +现在,开始你的 C 语言学习之旅吧! -## 配置Python语言学习环境 +## 配置 Python 语言学习环境 -### 检查Python环境 +### 检查 Python 环境 -Mac系统会自带有Python环境。在终端中输入python并回车。 +Mac 系统会自带有 Python 环境。在终端中输入 python 并回车。 -![截屏2020-12-18 22.54.54](https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015630.png) +![截屏 2020-12-18 22.54.54](https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015630.png) -可以看到系统已经安装有Python,但是显示版本为2.7。现在的主流版本是Python3,Python2与Python3的语法并不兼容。 +可以看到系统已经安装有 Python,但是显示版本为 2.7。现在的主流版本是 Python3,Python2 与 Python3 的语法并不兼容。 -在`>>>`后面键入`exit()`退出python2的交互程序。再次在终端输入`python3` +在`>>>`后面键入`exit()`退出 python2 的交互程序。再次在终端输入`python3` ![image-20201218231954777](https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015634.png) -此时显示的版本为3.8.6。 +此时显示的版本为 3.8.6。 ### Hello, Python! -在交互式命令行界面,我们可以直接输入python语句并执行。 +在交互式命令行界面,我们可以直接输入 python 语句并执行。 -![截屏2020-12-18 23.00.54](https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219021016.png) +![截屏 2020-12-18 23.00.54](https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219021016.png) 一句一句地输入代码再执行显然太低效了。我们需要一个趁手的代码编辑器。 -下面以VSCode为例。 +下面以 VSCode 为例。 -**VSCode的下载和基本配置**请参考上文C语言环境配置中VSCode的配置环节。 +**VSCode 的下载和基本配置**请参考上文 C 语言环境配置中 VSCode 的配置环节。 -完成基本的设置后,来安装Python的专属插件,以实现Python代码的高亮、补全等功能。 +完成基本的设置后,来安装 Python 的专属插件,以实现 Python 代码的高亮、补全等功能。 @@ -160,11 +160,11 @@ Mac系统会自带有Python环境。在终端中输入python并回车。 键入代码。 -![截屏2020-12-18 22.58.44](https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015631.png) +![截屏 2020-12-18 22.58.44](https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015631.png) 点击右上角的三角形按钮开始运行我们编写的代码 -![截屏2020-12-18 23.00.54](https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015632.png) +![截屏 2020-12-18 23.00.54](https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015632.png) @@ -172,32 +172,32 @@ Mac系统会自带有Python环境。在终端中输入python并回车。 ### 完成✅ -现在,开始你的Python语言学习之旅吧! +现在,开始你的 Python 语言学习之旅吧! -## 配置Java 语言学习环境 +## 配置 Java 语言学习环境 -### 安装JDK +### 安装 JDK -Mac OS并没有内置Java语言的支持,需要我们另外安装。 +Mac OS 并没有内置 Java 语言的支持,需要我们另外安装。 -直接在终端输入`java`,系统会提示Java未安装并跳转到Oracle官方的下载页面。在官网下载会强制要求你注册并登陆Oracle账户,网站连接缓慢且步骤繁琐。此处我们到清华大学的TUNA开源软件镜像站下载相关软件。 +直接在终端输入`java`,系统会提示 Java 未安装并跳转到 Oracle 官方的下载页面。在官网下载会强制要求你注册并登陆 Oracle 账户,网站连接缓慢且步骤繁琐。此处我们到清华大学的 TUNA 开源软件镜像站下载相关软件。 -首先到TUNA开源软件镜像站,来到[AdoptOpenJDK的下载页面](https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/)。在列表中找到你需要的版本,点击进入后依次选择处理器架构和平台。 +首先到 TUNA 开源软件镜像站,来到[AdoptOpenJDK 的下载页面](https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/)。在列表中找到你需要的版本,点击进入后依次选择处理器架构和平台。 -此处以Java 11 为例,其Mac OS 下安装程序的下载地址为[https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/11/jdk/x64/mac/OpenJDK11U-jdk_x64_mac_hotspot_11.0.9.1_1.pkg](https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/11/jdk/x64/mac/OpenJDK11U-jdk_x64_mac_hotspot_11.0.9.1_1.pkg)。需要其他版本的也可以自行选择。 +此处以 Java 11 为例,其 Mac OS 下安装程序的下载地址为[https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/11/jdk/x64/mac/OpenJDK11U-jdk_x64_mac_hotspot_11.0.9.1_1.pkg](https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/11/jdk/x64/mac/OpenJDK11U-jdk_x64_mac_hotspot_11.0.9.1_1.pkg)。需要其他版本的也可以自行选择。 > 自行选择时请注意: > -> * jre只是java运行环境,并不包括对java代码的编译功能。下载时请认准**jdk** +> * jre 只是 java 运行环境,并不包括对 java 代码的编译功能。下载时请认准**jdk** > -> * 选择处理器架构时,传统Intel内核Mac请选择**x86**,对于M1内核的Mac,截止本文写作,暂无相关支持,请关注后续更新。 -> * 最内层下载资源的列表中,jdk的资源文件名会有`hotspot`和 `openj9`两种字样。Java入门请选择`hotspot`,文件后缀名请选择`.pkg` +> * 选择处理器架构时,传统 Intel 内核 Mac 请选择**x86**,对于 M1 内核的 Mac,截止本文写作,暂无相关支持,请关注后续更新。 +> * 最内层下载资源的列表中,jdk 的资源文件名会有`hotspot`和 `openj9`两种字样。Java 入门请选择`hotspot`,文件后缀名请选择`.pkg` 下载完成后点击打开,出现如下的安装界面。根据指引完成安装。 @@ -205,19 +205,19 @@ Mac OS并没有内置Java语言的支持,需要我们另外安装。 -安装完成后,在终端中输入`java -version`并回车确认。看到如下输出说明已经正确安装且Java的版本为`11.0.9.1`即Java 11. +安装完成后,在终端中输入`java -version`并回车确认。看到如下输出说明已经正确安装且 Java 的版本为`11.0.9.1`即 Java 11. ![image-20201218235233365](https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015640.png) -下面来为Java的学习配置一个趁手的代码编辑器,以VSCode为例。 +下面来为 Java 的学习配置一个趁手的代码编辑器,以 VSCode 为例。 -### 为Java语言学习配置VSCode +### 为 Java 语言学习配置 VSCode -**VSCode的下载和基本配置**请参考上文C语言环境配置中VSCode的配置环节。 +**VSCode 的下载和基本配置**请参考上文 C 语言环境配置中 VSCode 的配置环节。 -完成基本的设置后,来安装Java的专属插件,以实现Java代码的高亮、补全等功能。 +完成基本的设置后,来安装 Java 的专属插件,以实现 Java 代码的高亮、补全等功能。 在左侧扩展面板的搜索栏中搜索`java`,选择`Language Support for Java`并安装。 @@ -237,11 +237,11 @@ Mac OS并没有内置Java语言的支持,需要我们另外安装。 可以看到,在窗口下方的终端面板中,已经成功出现了**Hello, Java!**字样,代码运行成功。 -![截屏2020-12-19 00.05.33](https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015637.png) +![截屏 2020-12-19 00.05.33](https://blog-1301127393.file.myqcloud.com/BlogImgs/20201219015637.png) ### 完成✅ -至此,Mac平台下的Java语言学习环境配置完毕,开始你的Java学习之旅吧! +至此,Mac 平台下的 Java 语言学习环境配置完毕,开始你的 Java 学习之旅吧! @@ -249,11 +249,11 @@ Mac OS并没有内置Java语言的支持,需要我们另外安装。 ## 常见问题 -### 1. Java扩展安装弹出提示JDK版本过低 +### 1. Java 扩展安装弹出提示 JDK 版本过低 image-20201218234917588 -这是因为插件内置的一些功能需要Java来运行,而这些功能又依赖于一些较新的特性,这些特性最早出现在Java 11中。为了更好地学习和使用Java,这里推荐安装Java 11 或Java 12。网站教程或学校授课常常以Java 8为例,但对于初学者来说,几者无太大区别,Java 8的代码都可以被很好地支持。 +这是因为插件内置的一些功能需要 Java 来运行,而这些功能又依赖于一些较新的特性,这些特性最早出现在 Java 11 中。为了更好地学习和使用 Java,这里推荐安装 Java 11 或 Java 12。网站教程或学校授课常常以 Java 8 为例,但对于初学者来说,几者无太大区别,Java 8 的代码都可以被很好地支持。 diff --git a/content/posts/Minecraft上云笔记 - MC服务器快速搭建&MOD推荐&性能优化.md b/content/posts/Minecraft上云笔记 - MC服务器快速搭建&MOD推荐&性能优化.md index 786a5f3..01457d0 100644 --- a/content/posts/Minecraft上云笔记 - MC服务器快速搭建&MOD推荐&性能优化.md +++ b/content/posts/Minecraft上云笔记 - MC服务器快速搭建&MOD推荐&性能优化.md @@ -1,15 +1,15 @@ --- -title: Minecraft上云笔记 - MC服务器快速搭建&MOD推荐&性能优化 +title: Minecraft 上云笔记 - MC 服务器快速搭建&MOD 推荐&性能优化 date: 2021-02-07 lastmod: 2021-02-07 -description: Minecraft上云笔记 - MC服务器快速搭建&MOD推荐&性能优化。MC快速上云,学生机轻松带动,三五好友,畅快联机 +description: Minecraft 上云笔记 - MC 服务器快速搭建&MOD 推荐&性能优化。MC 快速上云,学生机轻松带动,三五好友,畅快联机 categories: - 技术 - 指南 tags: - Java - MC -- MC服务器 +- MC 服务器 - Minecraft - 我的世界 - 游戏 @@ -19,36 +19,36 @@ tags: --- - + -> MC快速上云,学生机轻松带动,三五好友,畅快联机 +> MC 快速上云,学生机轻松带动,三五好友,畅快联机 ## 前言&踩坑 -距离上一次玩MC已有四年之久,上次玩的时候还用的是家里的老爷机,连独显都没有,玩个整合包都费劲。如今设备早已更新换代,B站不少做MC的UP主的内容挺有趣,于是尝试重新拾起MC。 +距离上一次玩 MC 已有四年之久,上次玩的时候还用的是家里的老爷机,连独显都没有,玩个整合包都费劲。如今设备早已更新换代,B 站不少做 MC 的 UP 主的内容挺有趣,于是尝试重新拾起 MC。 -手机端国内只有网易代理,APP卡顿严重,生态封闭,体验奇差。安卓下载的国际服倒是还不错,不过身为基岩版,与Java版的生态并不相通。Github上找到了可以让基岩版进Java版服务器的轮子,不过手机端连接服务器又是一个麻烦事。连接远程服务器又需要登录Xbox,但是登上了连接的时候又出现奇怪的问题。 +手机端国内只有网易代理,APP 卡顿严重,生态封闭,体验奇差。安卓下载的国际服倒是还不错,不过身为基岩版,与 Java 版的生态并不相通。Github 上找到了可以让基岩版进 Java 版服务器的轮子,不过手机端连接服务器又是一个麻烦事。连接远程服务器又需要登录 Xbox,但是登上了连接的时候又出现奇怪的问题。 -贴吧有人给出解决方案,搭建VPN,形成局域网,那样服务器会被视为局域网内开放的MC服务端。但天朝政策收紧,搭建PPTP、L2TP等隧道均未果,严重怀疑云服务商干扰了对应服务的端口。几番权衡决定投归PC端的Java版,生态丰富而且可以充分利用好硬件性能。 +贴吧有人给出解决方案,搭建 VPN,形成局域网,那样服务器会被视为局域网内开放的 MC 服务端。但天朝政策收紧,搭建 PPTP、L2TP 等隧道均未果,严重怀疑云服务商干扰了对应服务的端口。几番权衡决定投归 PC 端的 Java 版,生态丰富而且可以充分利用好硬件性能。 -## MC服务器快速搭建 +## MC 服务器快速搭建 -### MC服务端选择 +### MC 服务端选择 -物色了很多MC服务端,但看了下主要可用且被应用广泛的就两类, +物色了很多 MC 服务端,但看了下主要可用且被应用广泛的就两类, -1. Spigot、PaperSpigot这类加装插件的 -2. SpongeForge这类可以加装Mod的 +1. Spigot、PaperSpigot 这类加装插件的 +2. SpongeForge 这类可以加装 Mod 的 -前者生态目测更丰富些,MCBBS上的开服板块大部分都是PaperSpigot搭建的。但是好像都是那种几十上百人的公用服务器,什么权限控制、小游戏、防作弊的插件居多,而我只是想要一个能够装Mod的可以供三五好友方便联机的服务器。我的选择是后者 +前者生态目测更丰富些,MCBBS 上的开服板块大部分都是 PaperSpigot 搭建的。但是好像都是那种几十上百人的公用服务器,什么权限控制、小游戏、防作弊的插件居多,而我只是想要一个能够装 Mod 的可以供三五好友方便联机的服务器。我的选择是后者 -### MC服务器快速搭建 +### MC 服务器快速搭建 -搭建方案千千万,不过Docker来的最实在。Github找到一个非常方便的镜像,[itzg/minecraft-server](https://github.com/itzg/docker-minecraft-server)。这个镜像是运行时构建的,会根据指定的环境变量下载和安装对应的MC服务端程序。支持的服务端有Bukkit、Spigot、PaperSpigot、SpongeForge等等,MC的版本和各项参数均支持通过环境变量自定义,非常方便。而且可以通过更换不同的Tag来使用不同的JDK版本,从8到15,Hotspot和OpenJ9都有,可以按需选用。有arm版本,树莓派也可食用。 +搭建方案千千万,不过 Docker 来的最实在。Github 找到一个非常方便的镜像,[itzg/minecraft-server](https://github.com/itzg/docker-minecraft-server)。这个镜像是运行时构建的,会根据指定的环境变量下载和安装对应的 MC 服务端程序。支持的服务端有 Bukkit、Spigot、PaperSpigot、SpongeForge 等等,MC 的版本和各项参数均支持通过环境变量自定义,非常方便。而且可以通过更换不同的 Tag 来使用不同的 JDK 版本,从 8 到 15,Hotspot 和 OpenJ9 都有,可以按需选用。有 arm 版本,树莓派也可食用。 -安装Docker和docker-compose后,可以方便地编写脚本来快速启动一个MC服务器。这里放上我的`docker-compose.yml`文件 +安装 Docker 和 docker-compose 后,可以方便地编写脚本来快速启动一个 MC 服务器。这里放上我的`docker-compose.yml`文件 ```yaml version: "3" @@ -64,15 +64,15 @@ services: - "25565:25565" volumes: - "mc:/data" # 主要数据,包括存档数据等 - - "~/.minecraft/forgemods/:/data/mods/" #Forge Mod位置 + - "~/.minecraft/forgemods/:/data/mods/" #Forge Mod 位置 # - "~/.minecraft/sponegemods/:/data/mods/plugins" - - "~/.minecraft/tmp/:/tmp" # Forge下载失败可以自己放进去 + - "~/.minecraft/tmp/:/tmp" # Forge 下载失败可以自己放进去 - /etc/timezone:/etc/timezone:ro #绑定本机的时区,方便看日志 environment: SERVER_NAME: "MCServer" EULA: "TRUE" VERSION: "1.12.2" #(Ensure this is compatbile with the version of SpongeForge you are using!) - TYPE: "FORGE" # 这里以SpongeForge的服务端为例,其他服务端也支持 + TYPE: "FORGE" # 这里以 SpongeForge 的服务端为例,其他服务端也支持 FORGEVERSION: "RECOMMENDED" # FORGEVERSION: "14.23.5.2854" CONSOLE: "false" @@ -83,13 +83,13 @@ services: MAX_MEMORY: 1536M # 内存根据实际需要修改 OVERRIDE_SERVER_PROPERTIES: "true" SNOOPER_ENABLED: "false" # 统计数据 - VIEW_DISTANCE: 8 #加载区块范围,默认10,建议4~8 + VIEW_DISTANCE: 8 #加载区块范围,默认 10,建议 4~8 SEED: "-505794890" # 初始生成世界的种子 PVP: "true" ONLINE_MODE: "FALSE" #正版校验开关 ALLOW_FLIGHT: "FALSE" USE_AIKAR_FLAGS: "false" # 一些优化 - RESOURCE_PACK: "https://blog-1301127393.file.myqcloud.com/MC/Distribution/VNR-1.0.1.zip" # 我自己会用的资源包,这里填url + RESOURCE_PACK: "https://blog-1301127393.file.myqcloud.com/MC/Distribution/VNR-1.0.1.zip" # 我自己会用的资源包,这里填 url NETWORK_COMPRESSION_THRESHOLD: 512 # 网络优化 restart: unless-stopped rcon: @@ -120,131 +120,131 @@ volumes: -环境变量可以设置的地方非常多,可以到项目主页的README查看。https://github.com/itzg/docker-minecraft-server +环境变量可以设置的地方非常多,可以到项目主页的 README 查看。https://github.com/itzg/docker-minecraft-server -`docker-compose up -d` 启动,第一次启动他会下载MC、下载MC服务端、初始化世界。之后就可以在MC客户端连接了。(启动完毕就测试一下,测试没问题再进行后面安装mod、服务器调优(按需)的步骤!) +`docker-compose up -d` 启动,第一次启动他会下载 MC、下载 MC 服务端、初始化世界。之后就可以在 MC 客户端连接了。(启动完毕就测试一下,测试没问题再进行后面安装 mod、服务器调优(按需)的步骤!) -## MC客户端安装 +## MC 客户端安装 -### MC启动器选择 +### MC 启动器选择 (正版玩家略过,现在貌似正版购买的只支持官方启动器) -对于服务器选择,MCBBS有一篇讲的挺详细,可以到这里挑选: +对于服务器选择,MCBBS 有一篇讲的挺详细,可以到这里挑选: -> 我的世界Minecraft Java版 下载指南|文件结构说明|推荐启动器 - 软件资源 - Minecraft(我的世界)中文论坛 - +> 我的世界 Minecraft Java 版 下载指南 | 文件结构说明 | 推荐启动器 - 软件资源 - Minecraft(我的世界) 中文论坛 - > https://www.mcbbs.net/forum.php?mod=viewthread&tid=38297&page=1#pid547821 我推荐的启动器: -* **HMCL**(力荐!跨平台、颜值高、功能完备,不过需要先装Java) +* **HMCL**(力荐!跨平台、颜值高、功能完备,不过需要先装 Java) * **BMCL**(次推荐,颜值略低,基于.Net,功能完备) 我不推荐的启动器: -* **Nsiso** (页面倒是做的漂亮,但是我装完mod启动竟然启动不了,兼容性或者说功能完备性欠缺,不知道后续版本如何。当时出问题之后我换HMCL就可以完美启动) +* **Nsiso** (页面倒是做的漂亮,但是我装完 mod 启动竟然启动不了,兼容性或者说功能完备性欠缺,不知道后续版本如何。当时出问题之后我换 HMCL 就可以完美启动) -上一张HMCL的主页的图: +上一张 HMCL 的主页的图: ![image-20210129172401421](https://blog-1301127393.file.myqcloud.com/BlogImgs20210207205913.png) 其他没有使用过的启动器暂时不予评价。 -### MC本体安装 +### MC 本体安装 (正版玩家略过、整合包玩家略过) -推荐方式为启动器内安装,还可以顺带把Forge和OptiFine也安装了。 +推荐方式为启动器内安装,还可以顺带把 Forge 和 OptiFine 也安装了。 -* Forge:安装第三方Mod需要 +* Forge:安装第三方 Mod 需要 * OptiFine:游戏显示调优,有些光影会需要。 -版本选择的话,我的选择是1.12.2。目前Mod支持比较完备,生态也很丰富。很多Mod最高只支持1.12.2,目测是后面官方更新了API啥的。当然倾向于原版的同学可以选择更新的1.16,后面的版本有很多有意思的更新。 +版本选择的话,我的选择是 1.12.2。目前 Mod 支持比较完备,生态也很丰富。很多 Mod 最高只支持 1.12.2,目测是后面官方更新了 API 啥的。当然倾向于原版的同学可以选择更新的 1.16,后面的版本有很多有意思的更新。 > **踩坑笔记**: > -> 1. 这些启动器大多带有三个下载源:官方服务器、MCBBS镜像和BMCL镜像。不过我当时安装的时候BMCL的镜像抽风了,下载一直没进度。建议选择MCBBS的源(虽然可能部分内容更新没有很勤) -> 2. 通过启动器自动安装OptiFine的时候一直报错,换版本也是一样。后来的解决方案是选择窗口上方的【从本地文件安装/升级】 +> 1. 这些启动器大多带有三个下载源:官方服务器、MCBBS 镜像和 BMCL 镜像。不过我当时安装的时候 BMCL 的镜像抽风了,下载一直没进度。建议选择 MCBBS 的源(虽然可能部分内容更新没有很勤) +> 2. 通过启动器自动安装 OptiFine 的时候一直报错,换版本也是一样。后来的解决方案是选择窗口上方的【从本地文件安装/升级】 > > -## Mod推荐 +## Mod 推荐 -针对我实际使用和测试的情况做一些推荐。下文所有Mod均在1.12.2下测试并实际使用过,兼容性良好。 +针对我实际使用和测试的情况做一些推荐。下文所有 Mod 均在 1.12.2 下测试并实际使用过,兼容性良好。 -### 功能增强型Mod(客户端必装) +### 功能增强型 Mod(客户端必装) -这部分Mod主要是部分音效和部分不涉及多人游戏的功能的增强,可以随意安装,装不装都不影响好友联机与进服务器。 +这部分 Mod 主要是部分音效和部分不涉及多人游戏的功能的增强,可以随意安装,装不装都不影响好友联机与进服务器。 -| Mod名称 | 说明 | +| Mod 名称 | 说明 | | -------------------- | ------------------------------------------------------------ | | DynamicSurroundings | 动态环境音效,比如草地有蟋蟀的声音,夜晚有狼的声音,使游戏很有沉浸感 | -| SoundFilters | 环绕音效,使得MC里所有的声音更真实,比如矿洞里的脚步声会有回音,房子里面听外面的声音会更小等等 | -| BetterHUD | 加强版的HUD信息显示,比如方位信息、坐标信息、时间信息、人物护甲、健康状态信息等等很多功能,而且可自定义程度也很高。 | +| SoundFilters | 环绕音效,使得 MC 里所有的声音更真实,比如矿洞里的脚步声会有回音,房子里面听外面的声音会更小等等 | +| BetterHUD | 加强版的 HUD 信息显示,比如方位信息、坐标信息、时间信息、人物护甲、健康状态信息等等很多功能,而且可自定义程度也很高。 | | JEI | 可以方便地查看物品的合成表,一般整合包必备的插件 | -| JustEnoughCharacters | JEI的扩展,支持按拼音、简拼搜索物品 | +| JustEnoughCharacters | JEI 的扩展,支持按拼音、简拼搜索物品 | | Journeymap | 旅行地图,貌似已经停更,但是功能上没有什么欠缺。支持小地图显示、快速传送等。也是一般整合包必备的插件 | -| InventoryTweaks | 按R键整理背包 | +| InventoryTweaks | 按 R 键整理背包 | -### 功能增强型Mod(服务端&客户端都必装) +### 功能增强型 Mod(服务端&客户端都必装) -| Mod名称 | 说明 | +| Mod 名称 | 说明 | | ---------------- | ------------------------------------------------------------ | | FTB-Ultimine | 超级挖掘,挖矿、清理场地好帮手 | | Doubledoors | 双开门可以一键开关,不用挨个点击开关啦 | | OpenGlider | 滑翔翼,经济实用的交通工具 | -| Quark | 对原版MC的很多地方进行了一些加强,我最喜欢的是他增加了纸墙和纸灯笼这类物品,可以建造一些日系的建筑(文末有图) | +| Quark | 对原版 MC 的很多地方进行了一些加强,我最喜欢的是他增加了纸墙和纸灯笼这类物品,可以建造一些日系的建筑(文末有图) | | KeepingInventory | 死亡不掉落,不解释,小白福音 | -### 内容增强型Mod(服务端&客户端都必装) +### 内容增强型 Mod(服务端&客户端都必装) -| Mod名称 | 说明 | +| Mod 名称 | 说明 | | ------------------------ | ------------------------------------------------------------ | | Natura | 添加了很多有意思的植物,整个世界变得生机勃勃,可以种樱花树,初期没食物还可以野外采蓝莓吃 | -| MrCrayfish`s Vehicle Mod | 载具Mod,可以在MC开车哦 | +| MrCrayfish`s Vehicle Mod | 载具 Mod,可以在 MC 开车哦 | | Animania | 动物谷,更多的小动物、更加真实的动物喂养与繁殖 | | Twilightforest | 鼎鼎有名的暮色森林,不解释 | -### 谨慎选用的Mod +### 谨慎选用的 Mod -| Mod名称 | 说明 | +| Mod 名称 | 说明 | | -------- | ------------------------------------------------------------ | | LootBags | 击杀怪物得到战利品带,随机开出各种物品。不过你的箱子很快就会被一堆奇奇怪怪的东西堆满(比如我有一大箱无用的钻石马铠) | -| Cuisine | 中文名烹饪工艺,默认开发的Mod,挺有趣,很好地还原了做菜的过程,做完之后的菜会获得药水一样的效果。不过目测已经停更,而且没有很好的教程 | +| Cuisine | 中文名烹饪工艺,默认开发的 Mod,挺有趣,很好地还原了做菜的过程,做完之后的菜会获得药水一样的效果。不过目测已经停更,而且没有很好的教程 | -**注意**:上面列举的所有Mod都是Mod本体,有些Mod的功能还依赖于其他Mod,在安装时必须同时安装Mod本体和他依赖的Mod。具体的依赖关系可以参考mcmod.cn上对Mod介绍页的Mod关系选项卡,CurseForge的Mod介绍页的Relation选项卡。 +**注意**:上面列举的所有 Mod 都是 Mod 本体,有些 Mod 的功能还依赖于其他 Mod,在安装时必须同时安装 Mod 本体和他依赖的 Mod。具体的依赖关系可以参考 mcmod.cn 上对 Mod 介绍页的 Mod 关系选项卡,CurseForge 的 Mod 介绍页的 Relation 选项卡。 > **踩坑笔记** > -> 1. R键整理的快捷键与JEI的部分功能冲突,可自行修改快捷键 -> 2. R键整理对烹饪工艺中生产出来的菜品没辙 -> 3. 推荐仅将FTB-Ultimine用于挖泥巴和挖沙,实际使用时可能会出现挖了矿不掉东西的情况┭┮﹏┭┮ -> 4. 不要用铁镐、钻石镐开FTB-Ultimine挖东西!耐久掉的飞快 -> 5. DynamicSurroundings可以在设置里按需屏蔽特定的声音,比如装上后发现我家所在的地形会有乌鸦叫,就很烦。屏蔽之后整个世界都好起来了 -> 6. DynamicSurroundings与Animania有bug,对Animania的某些特有生物进行交互时会触发找不到特定媒体资源的bug,导致游戏崩溃,重新进入又会触发这个bug,只有在进去的一瞬间用指令将玩家杀死才能勉强逃离这个无尽的循环(血泪的教训)(最新版本已修复) -> 7. Animania会对每个维度的世界进行注入,比较耗费资源。在同时安装虚无世界AoA的情况下,每次服务器启动Animania需要对其包含的二十多的世界维度进行注入,严重拖慢启动速度 -> 8. Quark模组对1.12的MC只有1.6版本而没有后续版本的内容更新和bug修复。实际使用中有点吃性能 +> 1. R 键整理的快捷键与 JEI 的部分功能冲突,可自行修改快捷键 +> 2. R 键整理对烹饪工艺中生产出来的菜品没辙 +> 3. 推荐仅将 FTB-Ultimine 用于挖泥巴和挖沙,实际使用时可能会出现挖了矿不掉东西的情况┭┮﹏┭┮ +> 4. 不要用铁镐、钻石镐开 FTB-Ultimine 挖东西!耐久掉的飞快 +> 5. DynamicSurroundings 可以在设置里按需屏蔽特定的声音,比如装上后发现我家所在的地形会有乌鸦叫,就很烦。屏蔽之后整个世界都好起来了 +> 6. DynamicSurroundings 与 Animania 有 bug,对 Animania 的某些特有生物进行交互时会触发找不到特定媒体资源的 bug,导致游戏崩溃,重新进入又会触发这个 bug,只有在进去的一瞬间用指令将玩家杀死才能勉强逃离这个无尽的循环(血泪的教训)(最新版本已修复) +> 7. Animania 会对每个维度的世界进行注入,比较耗费资源。在同时安装虚无世界 AoA 的情况下,每次服务器启动 Animania 需要对其包含的二十多的世界维度进行注入,严重拖慢启动速度 +> 8. Quark 模组对 1.12 的 MC 只有 1.6 版本而没有后续版本的内容更新和 bug 修复。实际使用中有点吃性能 -## MC服务器优化 +## MC 服务器优化 -> 我使用的是SpongeForge,因此只对一些通用的优化手段和原版服务器的一些参数做介绍。使用Spigot等的可以参考MCBBS的帖子进行更加深入的调优: +> 我使用的是 SpongeForge,因此只对一些通用的优化手段和原版服务器的一些参数做介绍。使用 Spigot 等的可以参考 MCBBS 的帖子进行更加深入的调优: > -> Minecraft服务器优化教程 —— 让多带50%的玩家不再是梦 - 联机教程 - Minecraft(我的世界)中文论坛 +> Minecraft 服务器优化教程 —— 让多带 50% 的玩家不再是梦 - 联机教程 - Minecraft(我的世界) 中文论坛 > https://www.mcbbs.net/forum.php?mod=viewthread&tid=478126 -对于一台长期运行的MC服务器,我们需要关注的主要是下面几点 +对于一台长期运行的 MC 服务器,我们需要关注的主要是下面几点 ### 1. 稳定性 @@ -252,13 +252,13 @@ volumes: **防止服务端程序自己崩溃**的方法有: -* 尽量使用稳定版的MC和稳定版的Forge -* 避免使用评分较低的Mod -* 加载大量Mod前先在本地做好测试,避免冲突,同时保障所有依赖项已安装好 +* 尽量使用稳定版的 MC 和稳定版的 Forge +* 避免使用评分较低的 Mod +* 加载大量 Mod 前先在本地做好测试,避免冲突,同时保障所有依赖项已安装好 -**避免外在影响致MC服务器崩溃**的方法有: +**避免外在影响致 MC 服务器崩溃**的方法有: -* 为JVM设置合适的内存限制,避免因`OutOfMemory`导致MC服务端进程被系统杀掉 +* 为 JVM 设置合适的内存限制,避免因`OutOfMemory`导致 MC 服务端进程被系统杀掉 * 开放的服务器最好限制下权限并封堵一些游戏内的漏洞,避免熊孩子炸服 ### 2. 可维护性 @@ -267,62 +267,62 @@ volumes: 我的建议有以下几点: -* **使用Docker**。这样可以方便地进行服务的停启与迁移、升级。 -* **使用Docker-Compose**并保存`docker-coompose.yml`文件,这样你可以方便地更改一些参数而不用每次都输入一串长长的`docker run`指令。 +* **使用 Docker**。这样可以方便地进行服务的停启与迁移、升级。 +* **使用 Docker-Compose**并保存`docker-coompose.yml`文件,这样你可以方便地更改一些参数而不用每次都输入一串长长的`docker run`指令。 * **经常备份**。数据无价。 -* **尽量避免使用已经停止维护的Mod**。到时候要是出了奇怪的Bug,你就只能含泪把这个Mod所有相关的内容从你的世界剥离。 +* **尽量避免使用已经停止维护的 Mod**。到时候要是出了奇怪的 Bug,你就只能含泪把这个 Mod 所有相关的内容从你的世界剥离。 ### 3. 响应及时性 响应及时性也体现在几个方面: -* CPU运算能力够强,复杂的时间(战斗、爆炸)等能很快地处理过来 -* 存储设备IO速度快,服务启动、区块加载可以非常迅速 +* CPU 运算能力够强,复杂的时间(战斗、爆炸)等能很快地处理过来 +* 存储设备 IO 速度快,服务启动、区块加载可以非常迅速 * 网络连接稳定、延迟低,波动小 上面三点可以通过堆硬件来实现。不过有没有不辛苦钱包又能提高游戏体验的方法呢? 自然是有的。我们可以通过修改服务端程序的部分配置来实现。不过本质上是牺牲一小部分游戏体验换取一大部分游戏体验,就看你能忍受的牺牲的部分能有多少咯。 -MC服务器的优化主要聚焦在两个地方 +MC 服务器的优化主要聚焦在两个地方 -1. MC服务端程序的参数优化 -2. JVM参数调优 +1. MC 服务端程序的参数优化 +2. JVM 参数调优 -#### MC服务端优化 +#### MC 服务端优化 **VIEW_DISTANCE: 8** -这一项可以更改加载的**区块**的数量。这个数值越大,就会加载更多的区块,占用的内存和CPU就会更多。这个数值过小可能会导致你家的作物不长以及怪物刷不出来,会显著影响游戏体验。减小这一项的数值可以显著减少内存和CPU占用。 +这一项可以更改加载的**区块**的数量。这个数值越大,就会加载更多的区块,占用的内存和 CPU 就会更多。这个数值过小可能会导致你家的作物不长以及怪物刷不出来,会显著影响游戏体验。减小这一项的数值可以显著减少内存和 CPU 占用。 -默认值10,建议值4~8。 +默认值 10,建议值 4~8。 -> **注意**:1个***区块***并不是指一个方块,而是指一个`16*16`的区域。这个数值对可视区域的影响并不会很大,你可以放心地减小这个数值。这一项的值每减小1,你的服务器每次就可以少计算​`16*16*256`个方块 +> **注意**:1 个***区块***并不是指一个方块,而是指一个`16*16`的区域。这个数值对可视区域的影响并不会很大,你可以放心地减小这个数值。这一项的值每减小 1,你的服务器每次就可以少计算​`16*16*256`个方块 **NETWORK_COMPRESSION_THRESHOLD: 512** -这一项的含义是对大于特定大小的数据包进行压缩。压缩会消耗一定量的CPU资源,不过可以减缓网络的压力。如果你的网络条件较差,可以减小这一项的数值。 +这一项的含义是对大于特定大小的数据包进行压缩。压缩会消耗一定量的 CPU 资源,不过可以减缓网络的压力。如果你的网络条件较差,可以减小这一项的数值。 默认值:256 -#### JVM调优 +#### JVM 调优 -> 首先需要声明的是,我不是JVM调参专业户,下文的数据也并不是严格的评测。结论并不严谨,仅仅从一个技术人员的视角出发,结合我实际的使用体验,给出的一些建议,供大家参考。 +> 首先需要声明的是,我不是 JVM 调参专业户,下文的数据也并不是严格的评测。结论并不严谨,仅仅从一个技术人员的视角出发,结合我实际的使用体验,给出的一些建议,供大家参考。 -##### 当我们在讨论JVM调优时,我们在谈论什么? +##### 当我们在讨论 JVM 调优时,我们在谈论什么? -**垃圾回收**(**G**arbage **C**ollection)一直以来都是众多JVM调优教程的核心所在。Java运行于VM上,运行过程中不可避免的垃圾回收是最影响应用整体性能的存在。 +**垃圾回收**(**G**arbage **C**ollection)一直以来都是众多 JVM 调优教程的核心所在。Java 运行于 VM 上,运行过程中不可避免的垃圾回收是最影响应用整体性能的存在。 这里我们不去纠结那些新生代、老年代的划分、各种比率、各种单元的大小,我们只需要明白几点: -1. 不要觉得你比JVM的开发人员牛X -2. 不要觉得网上各路JVM调参大神的方法就适用于你 +1. 不要觉得你比 JVM 的开发人员牛 X +2. 不要觉得网上各路 JVM 调参大神的方法就适用于你 -众多顶级公司都在使用Java,其母公司Oracle自然会招聘全球最优秀的一批开发人员去开发,所以**JVM的大部分设置都是开箱即用的,默认最佳的。**在你不了解某一项参数的含义、不知道更改某一项配置的目的时,最好是不要做改动。 +众多顶级公司都在使用 Java,其母公司 Oracle 自然会招聘全球最优秀的一批开发人员去开发,所以**JVM 的大部分设置都是开箱即用的,默认最佳的。**在你不了解某一项参数的含义、不知道更改某一项配置的目的时,最好是不要做改动。 -其次,网络上大部分JVM的调优教程都是应对“面试造火箭”的,即便是以实际应用为主的JVM优化教程,人家那都是几十核几百G内存的机器,一秒钟要承担几百万的访问量,他们做优化的出发点、目标都**不一定适用于你。** +其次,网络上大部分 JVM 的调优教程都是应对“面试造火箭”的,即便是以实际应用为主的 JVM 优化教程,人家那都是几十核几百 G 内存的机器,一秒钟要承担几百万的访问量,他们做优化的出发点、目标都**不一定适用于你。** @@ -330,17 +330,17 @@ MC服务器的优化主要聚焦在两个地方 明确了上面两点我们可以开始着手进行优化了。 -首先需要明确你开MC服务器的机器是什么配置。以我的为例,我使用的是腾讯云的**1核2G的云服务器**,**带宽2M**,即峰值速度为256k/s。 +首先需要明确你开 MC 服务器的机器是什么配置。以我的为例,我使用的是腾讯云的**1 核 2G 的云服务器**,**带宽 2M**,即峰值速度为 256k/s。 -其次需要知道你的优化目标。网络上大多数JVM的优化教程都是追求更低的响应时间,以便能够承载更多的并发访问。 +其次需要知道你的优化目标。网络上大多数 JVM 的优化教程都是追求更低的响应时间,以便能够承载更多的并发访问。 -以我的情况为例:我开这个MC服务器的目的,只是希望能够与**不超过5个好友**联机,玩带一些暮色森林这样的**Mod**的MC。 +以我的情况为例:我开这个 MC 服务器的目的,只是希望能够与**不超过 5 个好友**联机,玩带一些暮色森林这样的**Mod**的 MC。 搭建完服务器后,观察了了一段时间后发现, -* 只有在MC服务器刚启动的时候CPU占用率会达到100%,空载(没有玩家在线,后台没有高负荷任务)只有2%左右,两人联机时CPU平均负载在30%左右。 -* 加装了十几个Mod的情况下,空载占用CPU资源在1G左右,两人联机1.4G左右。 -* 只有在客户端刚进入的时候会跑满带宽,之后正常游戏时,每台客户端需要占用10K/s左右的带宽。 +* 只有在 MC 服务器刚启动的时候 CPU 占用率会达到 100%,空载(没有玩家在线,后台没有高负荷任务)只有 2% 左右,两人联机时 CPU 平均负载在 30% 左右。 +* 加装了十几个 Mod 的情况下,空载占用 CPU 资源在 1G 左右,两人联机 1.4G 左右。 +* 只有在客户端刚进入的时候会跑满带宽,之后正常游戏时,每台客户端需要占用 10K/s 左右的带宽。 * 联机游戏间或卡顿,但很快恢复 * 查看日志发现空载时时竟然仍会`can't keep up` @@ -350,38 +350,38 @@ MC服务器的优化主要聚焦在两个地方 那么以我的情况来看 -* CPU性能富余 +* CPU 性能富余 * 内存吃紧 * 带宽够用 -那么**我的优化目标**就是:利用好CPU资源,尽力减少内存占用,以便为其他程序让路,并且为未来可能要添加的新Mod留出空间。 +那么**我的优化目标**就是:利用好 CPU 资源,尽力减少内存占用,以便为其他程序让路,并且为未来可能要添加的新 Mod 留出空间。 ##### 优化 -JVM优化的大头是GC。网上吹的漫天飞的G1GC的确有他的可取之处,一些腐竹的测试数据也表明其实际效果优秀。但是在我的案例中,使用G1GC是有问题的: +JVM 优化的大头是 GC。网上吹的漫天飞的 G1GC 的确有他的可取之处,一些腐竹的测试数据也表明其实际效果优秀。但是在我的案例中,使用 G1GC 是有问题的: -* **G1GC天生是为了现代互联网应用环境而设计的**,需要开很多个线程协同来完成垃圾回收工作。他适用于多核处理器+大内存机器上的高负荷运算。而我的服务器是单核,内存也并不富裕。 -* **多线程的GC模式跑在单核机器上**时出现的问题就是:单核机器无法并行处理多个任务,其本质上只是在多个任务之间快速切换,来实现各个任务基本“实时”“并行”运行。但是线程之间的切换是有代价的,**性能损耗积少成多**。 -* **G1GC追求在延迟可控的情况下达到更高的吞吐量**。但他的**代价是[更多的内存占用](https://segmentfault.com/q/1010000021658061)。**小内存机器并不适合使用G1GC。 +* **G1GC 天生是为了现代互联网应用环境而设计的**,需要开很多个线程协同来完成垃圾回收工作。他适用于多核处理器 + 大内存机器上的高负荷运算。而我的服务器是单核,内存也并不富裕。 +* **多线程的 GC 模式跑在单核机器上**时出现的问题就是:单核机器无法并行处理多个任务,其本质上只是在多个任务之间快速切换,来实现各个任务基本“实时”“并行”运行。但是线程之间的切换是有代价的,**性能损耗积少成多**。 +* **G1GC 追求在延迟可控的情况下达到更高的吞吐量**。但他的**代价是[更多的内存占用](https://segmentfault.com/q/1010000021658061)。**小内存机器并不适合使用 G1GC。 -物色了一番,我最终选择换用Serial GC代替原本的G1GC。 +物色了一番,我最终选择换用 Serial GC 代替原本的 G1GC。 > **Serial(-XX:+UseSerialGC)** > > 从名字我们可以看出,这是一个串行收集器。 > -> Serial 收集器是 Java 虚拟机中最基本、历史最悠久的收集器。在 JDK1.3 之前是 Java 虚拟机新生代收集器的唯一选择。目前也是 ClientVM 、 ServerVM 4 核 4GB 以下机器默认垃圾回收器。Serial 收集器并不是只能使用一个 CPU 进行收集,而是当 JVM 需要进行垃圾回收的时候,需暂停所有的用户线程,直到回收结束。 +> Serial 收集器是 Java 虚拟机中最基本、历史最悠久的收集器。在 JDK1.3 之前是 Java 虚拟机新生代收集器的唯一选择。目前也是 ClientVM、ServerVM 4 核 4GB 以下机器默认垃圾回收器。Serial 收集器并不是只能使用一个 CPU 进行收集,而是当 JVM 需要进行垃圾回收的时候,需暂停所有的用户线程,直到回收结束。 > ##### 优化前后对比 -1. 优化前MC服务器的资源占用情况 +1. 优化前 MC 服务器的资源占用情况 -![360截图20210129163301881](https://blog-1301127393.file.myqcloud.com/BlogImgs20210207205932.jpg) +![360 截图 20210129163301881](https://blog-1301127393.file.myqcloud.com/BlogImgs20210207205932.jpg) @@ -391,7 +391,7 @@ JVM优化的大头是GC。网上吹的漫天飞的G1GC的确有他的可取之 -3. 进一步对mod优化后,2 online +3. 进一步对 mod 优化后,2 online ![image-20210202221554906](https://blog-1301127393.file.myqcloud.com/BlogImgs20210207205939.png) @@ -399,7 +399,7 @@ JVM优化的大头是GC。网上吹的漫天飞的G1GC的确有他的可取之 ##### 其他优化方法 -更换GC只是众多优化方法中的一种,其他的诸如换用OpenJ9虚拟机也可以有不错的效果,可惜的是Forge对其的支持并不友好,只得作罢。还有启用指针压缩也可以获得不错的性能提升,不过JDK6_u23之后 `UseCompressedOops` 就已经被默认启用了,使用新版本Java基本不用关注这方面的优化了。 +更换 GC 只是众多优化方法中的一种,其他的诸如换用 OpenJ9 虚拟机也可以有不错的效果,可惜的是 Forge 对其的支持并不友好,只得作罢。还有启用指针压缩也可以获得不错的性能提升,不过 JDK6_u23 之后 `UseCompressedOops` 就已经被默认启用了,使用新版本 Java 基本不用关注这方面的优化了。 @@ -411,11 +411,11 @@ JVM优化的大头是GC。网上吹的漫天飞的G1GC的确有他的可取之 我家: -![屏幕截图(13)](https://blog-1301127393.file.myqcloud.com/BlogImgs20210207205942.png) +![屏幕截图 (13)](https://blog-1301127393.file.myqcloud.com/BlogImgs20210207205942.png) -![屏幕截图(16)](https://blog-1301127393.file.myqcloud.com/BlogImgs20210207205946.png) +![屏幕截图 (16)](https://blog-1301127393.file.myqcloud.com/BlogImgs20210207205946.png) @@ -423,13 +423,13 @@ JVM优化的大头是GC。网上吹的漫天飞的G1GC的确有他的可取之 我安装的光影 Sildurs Vibrant Shaders v1.281 High 效果图 -![屏幕截图(12)](https://blog-1301127393.file.myqcloud.com/BlogImgs20210207205949.png) +![屏幕截图 (12)](https://blog-1301127393.file.myqcloud.com/BlogImgs20210207205949.png) Better HUD + 旅行地图效果图 -![屏幕截图(17)](https://blog-1301127393.file.myqcloud.com/BlogImgs20210207205953.png) +![屏幕截图 (17)](https://blog-1301127393.file.myqcloud.com/BlogImgs20210207205953.png) @@ -441,7 +441,7 @@ Better HUD + 旅行地图效果图 https://www.zhihu.com/question/54048310 * View Distance: optimize your Minecraft server https://mtxserv.com/article/12535/view_distance_optimize_your_minecraft_server -* Minecraft服务器优化教程 —— 让多带50%的玩家不再是梦 - 联机教程 - Minecraft(我的世界)中文论坛 +* Minecraft 服务器优化教程 —— 让多带 50% 的玩家不再是梦 - 联机教程 - Minecraft(我的世界) 中文论坛 https://www.mcbbs.net/forum.php?mod=viewthread&tid=478126 * itzg/docker-minecraft-server: Docker image that provides a Minecraft Server that will automatically download selected version at startup https://github.com/itzg/docker-minecraft-server diff --git a/content/posts/Minecraft上云笔记 - MC自定义皮肤并支持联机.md b/content/posts/Minecraft上云笔记 - MC自定义皮肤并支持联机.md index 2914912..3210531 100644 --- a/content/posts/Minecraft上云笔记 - MC自定义皮肤并支持联机.md +++ b/content/posts/Minecraft上云笔记 - MC自定义皮肤并支持联机.md @@ -1,15 +1,15 @@ --- -title: Minecraft上云笔记 - MC自定义皮肤并支持联机 +title: Minecraft 上云笔记 - MC 自定义皮肤并支持联机 date: 2021-02-22 lastmod: 2021-02-22 -description: Minecraft上云笔记 - MC自定义皮肤并支持联机 +description: Minecraft 上云笔记 - MC 自定义皮肤并支持联机 categories: - 技术 - 指南 tags: - Java - MC -- MC服务器 +- MC 服务器 - Minecraft - 我的世界 - 游戏 @@ -17,7 +17,7 @@ tags: --- - + @@ -27,7 +27,7 @@ tags: https://mcskin.cn/user * [CSL] 万用皮肤补丁 (CustomSkinLoader) - MC 百科 | 最大的 Minecraft 中文 MOD 百科 https://www.mcmod.cn/class/883.html -* 全员安装皮肤mod,即可保证所有人都可以看见对方的皮肤 +* 全员安装皮肤 mod,即可保证所有人都可以看见对方的皮肤 @@ -35,11 +35,11 @@ tags: 使用: -1. 安装好forge +1. 安装好 forge -2. 安装好皮肤补丁的mod +2. 安装好皮肤补丁的 mod -3. 启动一次MC,让他自动生成配置文件 +3. 启动一次 MC,让他自动生成配置文件 4. 在皮肤站注册,并建立与游戏中角色名字相同的角色并设定皮肤 @@ -63,7 +63,7 @@ tags: > **注意**: > - > 自定义皮肤站最好排在Mojang API的前面,不然的话如果有正版用户起的角色名字和你的一样,就会默认载入他的皮肤(巨坑+1) + > 自定义皮肤站最好排在 Mojang API 的前面,不然的话如果有正版用户起的角色名字和你的一样,就会默认载入他的皮肤(巨坑 +1) > > diff --git a/content/posts/RSSManX.md b/content/posts/RSSManX.md index 3cde324..a8dd709 100644 --- a/content/posts/RSSManX.md +++ b/content/posts/RSSManX.md @@ -1,8 +1,8 @@ --- -title: RSSManX - 一套RSS综合解决方案 +title: RSSManX - 一套 RSS 综合解决方案 date: 2021-05-08 lastmod: 2021-05-08 -description: 网站没有源,海外站的源看不了?这也许是第一个自带海外加速的RSS解决方案 +description: 网站没有源,海外站的源看不了?这也许是第一个自带海外加速的 RSS 解决方案 categories: - 技术 - 指南 @@ -23,7 +23,7 @@ tags: [RSSman X](https://github.com/Colin-XKL/RSSmanX) 基于 docker-compsoe 提供容器化 TTRSS 与 RSSHUB 等组件的一键部署,整合实用组件为你带来最佳 RSS 体验 -**Feature: 简单一键部署,常用组件支持,自动更新支持,服务健康自检支持,海外站点 RSS 解锁** +**Feature:简单一键部署,常用组件支持,自动更新支持,服务健康自检支持,海外站点 RSS 解锁** ### 快速开始 diff --git a/content/posts/RSSManX安装部署指南.md b/content/posts/RSSManX安装部署指南.md index 9d3e5e3..3a25aa1 100644 --- a/content/posts/RSSManX安装部署指南.md +++ b/content/posts/RSSManX安装部署指南.md @@ -1,7 +1,7 @@ --- -title: RSSManX安装部署指南 +title: RSSManX 安装部署指南 date: 2022-05-07 -description: RSS Man X是我两年前入坑RSS后,为了方便更多人更方便地使用RSS所发起的一个项目,主要是用docker-compose整合了一些常用的服务如TTRSS、RSSHub、Huginn、OpenCC等并进行了一些优化调整,如自动更新,反反爬虫等。这篇文章会尽可能详尽地讲解安装部署的步骤以及安装过程中可能会遇到的一些问题。 +description: RSS Man X 是我两年前入坑 RSS 后,为了方便更多人更方便地使用 RSS 所发起的一个项目,主要是用 docker-compose 整合了一些常用的服务如 TTRSS、RSSHub、Huginn、OpenCC 等并进行了一些优化调整,如自动更新,反反爬虫等。这篇文章会尽可能详尽地讲解安装部署的步骤以及安装过程中可能会遇到的一些问题。 categories: - 技术 - 指南 @@ -13,17 +13,17 @@ tags: --- - + -RSS Man X是我两年前入坑RSS后,为了方便更多人更方便地使用RSS所发起的一个项目,主要是用docker-compose整合了一些常用的服务如TTRSS、RSSHub、Huginn、OpenCC等并进行了一些优化调整,如自动更新,反反爬虫等。这篇文章会尽可能详尽地讲解安装部署的步骤以及安装过程中可能会遇到的一些问题。 +RSS Man X 是我两年前入坑 RSS 后,为了方便更多人更方便地使用 RSS 所发起的一个项目,主要是用 docker-compose 整合了一些常用的服务如 TTRSS、RSSHub、Huginn、OpenCC 等并进行了一些优化调整,如自动更新,反反爬虫等。这篇文章会尽可能详尽地讲解安装部署的步骤以及安装过程中可能会遇到的一些问题。 -RSS Man X会利用到docker和docker-compose,首先需要确保你的服务器正确安装了这些软件 +RSS Man X 会利用到 docker 和 docker-compose,首先需要确保你的服务器正确安装了这些软件 -## 1. Docker环境准备 +## 1. Docker 环境准备 -检查服务器中是否已经安装了docker和docker-compose,并检查他们的版本是否太老。比如输入`docker --version`来检查docker的版本 +检查服务器中是否已经安装了 docker 和 docker-compose,并检查他们的版本是否太老。比如输入`docker --version`来检查 docker 的版本 -docker的版本建议不要低于19,docker-compose的版本建议不要低于1.20 +docker 的版本建议不要低于 19,docker-compose 的版本建议不要低于 1.20 ```shell ~ » docker --version @@ -35,11 +35,11 @@ Docker version 20.10.12, build 20.10.12-0ubuntu2~20.04.1 docker-compose version 1.25.0, build unknown ``` -如果上面命令执行后提示`command not found`,那么说明并没有安装对应的软件包(或是安装的路径并不在当前用户的PATH变量中,尝试切换到root操作,详细的原因和解决方法见后文) +如果上面命令执行后提示`command not found`,那么说明并没有安装对应的软件包(或是安装的路径并不在当前用户的 PATH 变量中,尝试切换到 root 操作,详细的原因和解决方法见后文) ### 1.1 Ubuntu/Debian安装Docker -ubuntu和debian主要是用apt安装和管理软件包,可以使用以下命令来安装,根据实际情况选择是否要加sudo。下面以Ubuntu为例。Debian下的安装略有不同,可以参见[Docker官方文档](https://docs.docker.com/engine/install/debian/),以及[清华镜像源](https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/)。其中`download.docker.com`连接不同的可以尝试讲域名部分更换为[中科大提供的镜像](https://mirrors.ustc.edu.cn/help/docker-ce.html)地址`mirrors.ustc.edu.cn/docker-ce` +ubuntu 和 debian 主要是用 apt 安装和管理软件包,可以使用以下命令来安装,根据实际情况选择是否要加 sudo。下面以 Ubuntu 为例。Debian 下的安装略有不同,可以参见[Docker 官方文档](https://docs.docker.com/engine/install/debian/),以及[清华镜像源](https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/)。其中`download.docker.com`连接不同的可以尝试讲域名部分更换为[中科大提供的镜像](https://mirrors.ustc.edu.cn/help/docker-ce.html)地址`mirrors.ustc.edu.cn/docker-ce` ```shell # 首先移除老旧的软件包 @@ -54,7 +54,7 @@ sudo apt-get install \ lsb-release ``` -如果你的服务器在墙外,可以直接使用docker官方的软件源 +如果你的服务器在墙外,可以直接使用 docker 官方的软件源 ```shell curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg @@ -74,7 +74,7 @@ echo \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null ``` -导入docker软件源后即可开始安装docker,安装完成后可以输入`docker --version`来检查docker的版本 +导入 docker 软件源后即可开始安装 docker,安装完成后可以输入`docker --version`来检查 docker 的版本 ```shell sudo apt-get update @@ -83,7 +83,7 @@ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin ### 1.2 CentOS/Fedora安装Docker -CentOS和Fedora使用yum安装和管理软件包,新版本则是使用dnf,不过两者功能一致且高度兼容。下面以CentOS为例,Fedora可参见[官方文档](https://docs.docker.com/engine/install/fedora/)或[清华镜像源](https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/) +CentOS 和 Fedora 使用 yum 安装和管理软件包,新版本则是使用 dnf,不过两者功能一致且高度兼容。下面以 CentOS 为例,Fedora 可参见[官方文档](https://docs.docker.com/engine/install/fedora/)或[清华镜像源](https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/) ```shell # 1. 首先移除老旧的软件包 @@ -116,18 +116,18 @@ sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin -### 1.3 安装或更新docker-compose +### 1.3 安装或更新 docker-compose -docker-compose目前有两个主要版本V1和V2,都是可用的。V1使用Python编写,使用时类似`sudo docker-compose up -d`,V2则是Golang编写,与前者高度兼容,但是是作为docker的插件安装的,使用时类似`sudo docker compose up -d`,中间的短杠不需要了。 +docker-compose 目前有两个主要版本 V1 和 V2,都是可用的。V1 使用 Python 编写,使用时类似`sudo docker-compose up -d`,V2 则是 Golang 编写,与前者高度兼容,但是是作为 docker 的插件安装的,使用时类似`sudo docker compose up -d`,中间的短杠不需要了。 -如果是按照上文的步骤安装的docker,那么默认已经安装了docker compose v2,可以通过`docker compose version`查看版本 +如果是按照上文的步骤安装的 docker,那么默认已经安装了 docker compose v2,可以通过`docker compose version`查看版本 ```shell ~ » docker compose version Docker Compose version v2.3.3 ``` -如果需要是安装的比较老的v1版本的docker-compose,想要单纯更新docker-compose而又不想动其他东西的话,可以更新安装v1版本的docker-compose。 +如果需要是安装的比较老的 v1 版本的 docker-compose,想要单纯更新 docker-compose 而又不想动其他东西的话,可以更新安装 v1 版本的 docker-compose。 首先删除老旧版本(如果有的话) @@ -137,7 +137,7 @@ sudo rm /usr/local/lib/docker/cli-plugins/docker-compose pip uninstall docker-compose ``` -然后使用pip来安装 +然后使用 pip 来安装 ```shell pip3 install docker-compose @@ -149,7 +149,7 @@ pip3 install docker-compose pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple ``` -如果提示pip命令不存在需要先安装一下 +如果提示 pip 命令不存在需要先安装一下 ```shell # Ubuntu/Debian sudo apt install python3-pip @@ -158,7 +158,7 @@ sudo apt install python3-pip sudo yum install python3-pip ``` -如果pip报错试着升级一下pip的版本 +如果 pip 报错试着升级一下 pip 的版本 ```shell python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip @@ -166,14 +166,14 @@ python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip -### 1.4 为Docker配置镜像源 +### 1.4 为 Docker 配置镜像源 -如果Docker下载镜像非常慢,你可能需要单独配置一下Docker的镜像源。==**注意:Docker安装软件源的镜像和Docker镜像或者说映像的国内源并不是同一个,英文表述可能更准确一些:**== +如果 Docker 下载镜像非常慢,你可能需要单独配置一下 Docker 的镜像源。==**注意:Docker 安装软件源的镜像和 Docker 镜像或者说映像的国内源并不是同一个,英文表述可能更准确一些:**== -* 上文安装docker时配置的是docker的repo,repo里含有docker的软件包,[国内的镜像](https://mirrors.ustc.edu.cn/help/docker-ce.html)为Docker CE安装软件包的镜像 -* 现在我们要配置的是Docker Hub的Mirror,Docker里拉取Image默认会访问[Docker Hub](https://hub.docker.com),国内有多个Docker Hub镜像或是Docker镜像加速器,如[中科大的源](https://mirrors.ustc.edu.cn/help/dockerhub.html) +* 上文安装 docker 时配置的是 docker 的 repo,repo 里含有 docker 的软件包,[国内的镜像](https://mirrors.ustc.edu.cn/help/docker-ce.html)为 Docker CE 安装软件包的镜像 +* 现在我们要配置的是 Docker Hub 的 Mirror,Docker 里拉取 Image 默认会访问[Docker Hub](https://hub.docker.com),国内有多个 Docker Hub 镜像或是 Docker 镜像加速器,如[中科大的源](https://mirrors.ustc.edu.cn/help/dockerhub.html) -在`/etc/docker/daemon.json`文件中写入以下内容,如不存在可先行创建,注意json中列表的最后一项末尾是没有逗号的 +在`/etc/docker/daemon.json`文件中写入以下内容,如不存在可先行创建,注意 json 中列表的最后一项末尾是没有逗号的 ```json { @@ -184,13 +184,13 @@ python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip } ``` -配置完成后`sudo systemctl restart docker`重启docker服务,然后输入`sudo docker info`,在输出结果的末尾可以看到`Registry Mirrors`里会出现我们刚刚配置的Docker Hub镜像 +配置完成后`sudo systemctl restart docker`重启 docker 服务,然后输入`sudo docker info`,在输出结果的末尾可以看到`Registry Mirrors`里会出现我们刚刚配置的 Docker Hub 镜像 -群辉等NAS的系统并不是标准版Linux,安装的也是魔改版docker,上面的配置文件地址并不适用,建议自行搜索对应的文档或教程。 +群辉等 NAS 的系统并不是标准版 Linux,安装的也是魔改版 docker,上面的配置文件地址并不适用,建议自行搜索对应的文档或教程。 -## 2. 安装RSS Man X +## 2. 安装 RSS Man X -[RSS MAN X项目](https://github.com/Colin-XKL/RSSmanX)旨在为 RSS 的同好提供一个方便地搭建自己的 RSS 服务的捷径,毕竟不是所有 RSS 爱好者都懂代码 😂。RSS Man X能够有 RSS 订阅管理、RSS 在线阅读界面,进阶功能包括服务健康自检、海外站点 RSS 解锁等,提供不同的版本供选择,三个版本的 `docker-compose` 文件对应不同的需求,包含的组件和服务有差异。 +[RSS MAN X 项目](https://github.com/Colin-XKL/RSSmanX)旨在为 RSS 的同好提供一个方便地搭建自己的 RSS 服务的捷径,毕竟不是所有 RSS 爱好者都懂代码 😂。RSS Man X 能够有 RSS 订阅管理、RSS 在线阅读界面,进阶功能包括服务健康自检、海外站点 RSS 解锁等,提供不同的版本供选择,三个版本的 `docker-compose` 文件对应不同的需求,包含的组件和服务有差异。 | 组件 / 服务 / 功能名称 | 标准版 | Lite 版 | Ultimate 版 ✨ | | ---------------------- | ------ | ------- | ------------- | @@ -210,9 +210,9 @@ python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip ### 2.1 安装流程 -安装好了 `docker` 和 `docker-compose` 后,可以使用`git clone https://github.com/Colin-XKL/RSSmanX --depth=1`快速克隆本仓库,也可以通过[这个镜像地址](https://archive.fastgit.org/Colin-XKL/RSSmanX/archive/refs/heads/master.zip)下载仓库zip文件,[Gitee上也有镜像](https://gitee.com/colin-xkl/RSSmanX)不过不经常更新。 +安装好了 `docker` 和 `docker-compose` 后,可以使用`git clone https://github.com/Colin-XKL/RSSmanX --depth=1`快速克隆本仓库,也可以通过[这个镜像地址](https://archive.fastgit.org/Colin-XKL/RSSmanX/archive/refs/heads/master.zip)下载仓库 zip 文件,[Gitee 上也有镜像](https://gitee.com/colin-xkl/RSSmanX)不过不经常更新。 -1. cd 进入文件夹,修改`.env`中的值,如密码和TTRSS入口URL等 +1. cd 进入文件夹,修改`.env`中的值,如密码和 TTRSS 入口 URL 等 2. 运行 `sudo docker-compose up -d` 3. 等待程序跑完 4. 安装完成 ✅ @@ -223,23 +223,23 @@ python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip 2. 如开启海外站点解锁支持,第一次冷启动需要等待 3-5 分钟才能完全启动所有组件。 -3. 数据默认保存位置`~/.docker/Database`(注意以执行docker命令的用户为准,如使用root账户执行,则文件位于root用户home目录) +3. 数据默认保存位置`~/.docker/Database`(注意以执行 docker 命令的用户为准,如使用 root 账户执行,则文件位于 root 用户 home 目录) 4. 默认情况下只有 TTRSS 和 Huginn 可以从外部访问,其他组件互相可以访问但不能直接从外部访问以提高安全性。组件间互相访问可以使用`容器名+指定端口`,端口默认为 80,如`http://rsshub/xxxxx`即可访问到 RSS Man X 内的监听 80 端口的 rsshub 实例。 -5. 在 TTRSS 中将原来订阅的 `https://rsshub.app/*` 更改为 `http://rsshub/*` 即可使用 RSS Man X内的自建 RSSHub 实例,并激活反反爬虫和海外源加速等功能 +5. 在 TTRSS 中将原来订阅的 `https://rsshub.app/*` 更改为 `http://rsshub/*` 即可使用 RSS Man X 内的自建 RSSHub 实例,并激活反反爬虫和海外源加速等功能 -6. 如无法访问rsshub的官方文档站点,可以使用我维护的反代站点[https://rsshub-doc.azure.colinx.one/](https://rsshub-doc.azure.colinx.one/) +6. 如无法访问 rsshub 的官方文档站点,可以使用我维护的反代站点[https://rsshub-doc.azure.colinx.one/](https://rsshub-doc.azure.colinx.one/) -7. 关于 ARM 平台的支持可查阅[置顶的 issue](https://github.com/Colin-XKL/RSSmanX/issues/5),替换部分不支持arm架构的docker镜像为支持arm的镜像即可。 +7. 关于 ARM 平台的支持可查阅[置顶的 issue](https://github.com/Colin-XKL/RSSmanX/issues/5),替换部分不支持 arm 架构的 docker 镜像为支持 arm 的镜像即可。 -8. RSS Man X的除 lite 以外的版本默认包含了自托管的 mercury 实例,你只需要在插件配置页面设置 mercury 实例地址为 `service.mercury:3000` 即可,同理,OpenCC实例地址为`service.opencc:3000` +8. RSS Man X 的除 lite 以外的版本默认包含了自托管的 mercury 实例,你只需要在插件配置页面设置 mercury 实例地址为 `service.mercury:3000` 即可,同理,OpenCC 实例地址为`service.opencc:3000` -9. 如果部分RSS源不能订阅,检查是否使用了非常规端口。在`.env`文件中设置`RSS_ALLOEW_PORTS` +9. 如果部分 RSS 源不能订阅,检查是否使用了非常规端口。在`.env`文件中设置`RSS_ALLOEW_PORTS` 10. 若部署后某个应用一直无法通过浏览器访问,请检查是否绑定到了`6000`/`6666`等特殊端口,浏览器会拦截对这些端口的访问参见[这里](https://blog.colinx.one/posts/docker-compose%E7%9A%84%E9%94%99%E8%AF%AF%E4%BD%BF%E7%94%A8%E5%A7%BF%E5%8A%BF/) -11. `ls`没有显示`.env`文件是因为以点开头的文件在Linux中都是默认隐藏的,可以使用`ls -a`查看到 +11. `ls`没有显示`.env`文件是因为以点开头的文件在 Linux 中都是默认隐藏的,可以使用`ls -a`查看到 12. vi/vim编辑文本太麻烦可以尝试使用nano diff --git a/content/posts/Win 10配置C语言环境的正确姿势.md b/content/posts/Win 10配置C语言环境的正确姿势.md index 6117e4c..4ca4b08 100644 --- a/content/posts/Win 10配置C语言环境的正确姿势.md +++ b/content/posts/Win 10配置C语言环境的正确姿势.md @@ -1,8 +1,8 @@ --- -title: Win 10配置C语言环境的正确姿势 +title: Win 10 配置 C 语言环境的正确姿势 date: 2020-12-27 lastmod: 2020-12-27 -description: VC6.0太古老,Dev C++没补全不友好,MinGW安装太烦恼?你用着最新的电脑,最新的系统,却在用着上个世纪的软件开始你人生第一门编程课?你需要这篇指南:在现代化的硬件和平台上使用现代化工具学习C语言 +description: VC6.0 太古老,Dev C++没补全不友好,MinGW 安装太烦恼?你用着最新的电脑,最新的系统,却在用着上个世纪的软件开始你人生第一门编程课?你需要这篇指南:在现代化的硬件和平台上使用现代化工具学习 C 语言 categories: - 技术 - 指南 @@ -12,52 +12,52 @@ tags: - 环境配置 --- - + > 本系列教程旨在为刚入门的编程语言学习者做好指南工作,开始编码,本应很简单 > > The PAINLESS way to start coding! -VC6.0太古老,Dev C++没补全不友好,MinGW安装太烦恼? +VC6.0 太古老,Dev C++没补全不友好,MinGW 安装太烦恼? 你用着最新的电脑,最新的系统,却在用着上个世纪的软件开始你人生第一门编程课? -你需要这篇指南:**在现代化的硬件和平台上使用现代化工具学习C语言** +你需要这篇指南:**在现代化的硬件和平台上使用现代化工具学习 C 语言** -*aka*:**Win10配置C语言环境的正确姿势** +*aka*:**Win10 配置 C 语言环境的正确姿势** ->截止2020年末,Win10配置C语言环境的常见方案有: +>截止 2020 年末,Win10 配置 C 语言环境的常见方案有: > ->* 使用scoop来便捷地安装所需的环境 ->* 使用Winget来安装所需的环境 *[不成熟]* ->* 使用国内镜像Cygwin+VSCode配置C语言环境 【快速】 ->* 使用WSL+VSCode ->* 使用WSL+Clion +>* 使用 scoop 来便捷地安装所需的环境 +>* 使用 Winget 来安装所需的环境 *[不成熟]* +>* 使用国内镜像 Cygwin+VSCode 配置 C 语言环境【快速】 +>* 使用 WSL+VSCode +>* 使用 WSL+Clion 综合考虑可行性与小白友好性,我们推荐的方案是: -## 使用国内镜像Cygwin+VSCode快速配置C语言环境 +## 使用国内镜像 Cygwin+VSCode 快速配置 C 语言环境 -C语言编写的`.c`源代码文件需要通过编译器编译生成可执行文件`.exe`后才能运行。Windows系统默认没有自带C语言的编译器,这里我们需要手动下载配置才行。 +C 语言编写的`.c`源代码文件需要通过编译器编译生成可执行文件`.exe`后才能运行。Windows 系统默认没有自带 C 语言的编译器,这里我们需要手动下载配置才行。 -C语言编译器在Win平台下的选择多种多样,但要么配置麻烦,使用门槛高;要么就是下载源在国外,国内下载慢如龟,甚至直接下不成。这里给出基于国内镜像Cygwin+VSCode配置C语言环境的方案,**实测可用,步骤清晰易懂,国内网络也可在几分钟内配置好!** +C 语言编译器在 Win 平台下的选择多种多样,但要么配置麻烦,使用门槛高;要么就是下载源在国外,国内下载慢如龟,甚至直接下不成。这里给出基于国内镜像 Cygwin+VSCode 配置 C 语言环境的方案,**实测可用,步骤清晰易懂,国内网络也可在几分钟内配置好!** ### 编译器的下载与配置 -Cygwin的下载安装分为两个部分: +Cygwin 的下载安装分为两个部分: -1. Cygwin安装程序的下载(~1MB) +1. Cygwin 安装程序的下载(~1MB) 2. 安装器来完整后续的编译器核心部分的安装(~100MB) -#### Cygwin的下载安装 +#### Cygwin 的下载安装 -Cygwin的安装程序可以[从其官方站点下载](https://cygwin.com/install.html)。不过站点为全英文且国内访问速度堪忧,这里给出快速下载链接 +Cygwin 的安装程序可以[从其官方站点下载](https://cygwin.com/install.html)。不过站点为全英文且国内访问速度堪忧,这里给出快速下载链接 -> Cygwin安装程序**快速下载**(不限速,免登陆) +> Cygwin 安装程序**快速下载**(不限速,免登陆) > > https://wws.lanzous.com/iUpUKjojq5i @@ -77,7 +77,7 @@ Cygwin的安装程序可以[从其官方站点下载](https://cygwin.com/install -如果让你选择安装路径的话,可以不用改,不过默认在C盘。自己改的话,一个尽量避免使用中文路径,还有一个就是要记住你自己自定义的路径,后面会用到。 +如果让你选择安装路径的话,可以不用改,不过默认在 C 盘。自己改的话,一个尽量避免使用中文路径,还有一个就是要记住你自己自定义的路径,后面会用到。 网络好的话,点击下一步会出来一个可用的国内镜像列表,那样的话随便选一个都可以直接进行后面的步骤。 @@ -85,7 +85,7 @@ Cygwin的安装程序可以[从其官方站点下载](https://cygwin.com/install image-20201224235644342 -在User URL的输入框输入`https://mirrors.tuna.tsinghua.edu.cn/cygwin/`并点击Add添加。之后点击下一步继续。 +在 User URL 的输入框输入`https://mirrors.tuna.tsinghua.edu.cn/cygwin/`并点击 Add 添加。之后点击下一步继续。 @@ -95,7 +95,7 @@ Cygwin的安装程序可以[从其官方站点下载](https://cygwin.com/install -之后会进入一个选择界面。这里选择要安装的组件。我们只需要C语言的编译器,这里在搜索框内输入`gcc`,然后在下方找到`gcc-core` 和 `gcc-g++`,点击右侧的三角形打开下拉菜单,选择9开头的版本。如下图所示。 +之后会进入一个选择界面。这里选择要安装的组件。我们只需要 C 语言的编译器,这里在搜索框内输入`gcc`,然后在下方找到`gcc-core` 和 `gcc-g++`,点击右侧的三角形打开下拉菜单,选择 9 开头的版本。如下图所示。 image-20201225000518139 @@ -109,7 +109,7 @@ Cygwin的安装程序可以[从其官方站点下载](https://cygwin.com/install 一般一到两分钟之内就可以下载完毕。如果过了很久还没有装完,要么是网络太垃圾,要么就是不小心勾了其他的软件,一直在安装。。。 -#### 配置Cygwin +#### 配置 Cygwin 下面要更改环境变量。如果你之前没有自定义安装目录的话,默认路径`C:\cygwin64\bin`。否则下文对应的地方使用你自定义的目录。 @@ -137,7 +137,7 @@ Cygwin的安装程序可以[从其官方站点下载](https://cygwin.com/install image-20201225000949291 -输入Cygwin安装路径下的bin目录。如果你之前没有自定义安装路径,直接设置如图即可。否则设置为你自定义的路径。 +输入 Cygwin 安装路径下的 bin 目录。如果你之前没有自定义安装路径,直接设置如图即可。否则设置为你自定义的路径。 **注意:这一步只要添加这一个就好**,不要看我截图里面的很干净,就把其他的都删了 @@ -145,41 +145,41 @@ Cygwin的安装程序可以[从其官方站点下载](https://cygwin.com/install 一路点击确定。修改完之后重启下电脑确保改动生效。 -在PowerShell中或者命令提示符中输入gcc并回车。如果显示no input files则表示安装成功。 +在 PowerShell 中或者命令提示符中输入 gcc 并回车。如果显示 no input files 则表示安装成功。 image-20201225001234917 ### 配置编辑器 -安装完了编译器,可以先来Hello world了 +安装完了编译器,可以先来 Hello world 了 ![image-20201225001723920](https://blog-1301127393.file.myqcloud.com/BlogImgs/20201227164924.png) -按住Shift键,右键点击文件夹空白处,会出现在此处打开Powershell窗口的选项。 +按住 Shift 键,右键点击文件夹空白处,会出现在此处打开 Powershell 窗口的选项。 image-20201225001744160 -`gcc hello.c` 命令就会在当前目录下生成一个exe可执行文件。如果要指定文件名,可以`gcc hello.c -o hello.exe` +`gcc hello.c` 命令就会在当前目录下生成一个 exe 可执行文件。如果要指定文件名,可以`gcc hello.c -o hello.exe` -输入`./hello.exe`即可执行该exe文件。 +输入`./hello.exe`即可执行该 exe 文件。 ![image-20201225002338213](https://blog-1301127393.file.myqcloud.com/BlogImgs/20201227164937.png) -如果直接双击exe也可以,不过运行窗口会一闪而过,解决方案是在main函数末尾,return语句前,加一句getchar()。 +如果直接双击 exe 也可以,不过运行窗口会一闪而过,解决方案是在 main 函数末尾,return 语句前,加一句 getchar()。 -配置VSCode的作为C语言学习环境 +配置 VSCode 的作为 C 语言学习环境 VSCode是由微软主导开发的一款开源免费、轻巧简单、功能强大的代码编辑器。配合各式各样的插件可以方便地实现各种你想得到和你想不到的功能。 -前往[VSCode官网](https://code.visualstudio.com/)下载Windows 版VScode。并按照安装程序的指引进行安装。 +前往[VSCode 官网](https://code.visualstudio.com/)下载 Windows 版 VScode。并按照安装程序的指引进行安装。 直接下载链接 @@ -191,7 +191,7 @@ https://code.visualstudio.com/sha/download?build=stable&os=win32-x64-user > > https://az764295.vo.msecnd.net/stable/ea3859d4ba2f3e577a159bc91e3074c5d85c0523/VSCodeUserSetup-x64-1.52.1.exe > -> 将开头的az764295.vo.msecnd.net替换掉,如下。 +> 将开头的 az764295.vo.msecnd.net 替换掉,如下。 > > https://vscode.cdn.azure.cn/stable/ea3859d4ba2f3e577a159bc91e3074c5d85c0523/VSCodeUserSetup-x64-1.52.1.exe > @@ -239,7 +239,7 @@ https://code.visualstudio.com/sha/download?build=stable&os=win32-x64-user -完成了上述的设置,我们就可以来编写C语言的程序了。 +完成了上述的设置,我们就可以来编写 C 语言的程序了。 ### Hello,C! @@ -255,7 +255,7 @@ https://code.visualstudio.com/sha/download?build=stable&os=win32-x64-user -点击右上角的三角形按钮即可自动编译运行你的C语言代码。在窗口下方的终端即可看到输出的`Hello,C!`字样。 +点击右上角的三角形按钮即可自动编译运行你的 C 语言代码。在窗口下方的终端即可看到输出的`Hello,C!`字样。 image-20201227164041803 @@ -264,4 +264,4 @@ https://code.visualstudio.com/sha/download?build=stable&os=win32-x64-user ### 完成✅ -现在,开始你的C语言学习之旅吧! +现在,开始你的 C 语言学习之旅吧! diff --git a/content/posts/docker-compose的错误使用姿势.md b/content/posts/docker-compose的错误使用姿势.md index 898bde0..d02dd4b 100644 --- a/content/posts/docker-compose的错误使用姿势.md +++ b/content/posts/docker-compose的错误使用姿势.md @@ -1,7 +1,7 @@ --- -title: docker compose的错误使用姿势 +title: docker compose 的错误使用姿势 date: 2022-05-11 -description: 这篇文章记录几个docker compose使用过程中几个难以察觉的错误使用姿势。1. 变量值使用`@`符号开头 2. 使用6000或6666端口 +description: 这篇文章记录几个 docker compose 使用过程中几个难以察觉的错误使用姿势。1. 变量值使用`@`符号开头 2. 使用 6000 或 6666 端口 categories: - 技术 - 指南 @@ -16,11 +16,11 @@ tags: -这篇文章记录几个docker compose使用过程中几个难以察觉的错误使用姿势 +这篇文章记录几个 docker compose 使用过程中几个难以察觉的错误使用姿势 ## 1. 变量值使用`@`符号开头 -我在RSS MAN X的docker-compose配置文件中,huignn的环境变量出来时是这样写的 +我在 RSS MAN X 的 docker-compose 配置文件中,huignn 的环境变量出来时是这样写的 ```yaml environment: @@ -35,7 +35,7 @@ environment: 自己使用的时候没发现什么问题,别人从零创建容器的时候报错了。刚开始排查了很久,后面发现我默认密码这样写其实是有问题的。 -上面的使用列表来描述环境变量在docker-compose解析的时候没有任何报错信息。但是使用下面这种key-value的map的形式时,`docker-compose up`命令报错了,说YAML解析时出现问题 +上面的使用列表来描述环境变量在 docker-compose 解析的时候没有任何报错信息。但是使用下面这种 key-value 的 map 的形式时,`docker-compose up`命令报错了,说 YAML 解析时出现问题 ```yaml environment: @@ -92,7 +92,7 @@ DATABASE_PASSWORD: ${DB_Password:-'@pass_for_DB'} DB_Password=A@www_123 ``` -最终发现无论是否使用docker-compose变量替换,只要最终设定值的时候,包含前导@符号,最终一定会失败。Huginn的这边的报错为解析容器内的一个YAML文件时失败 +最终发现无论是否使用 docker-compose 变量替换,只要最终设定值的时候,包含前导@符号,最终一定会失败。Huginn 的这边的报错为解析容器内的一个 YAML 文件时失败 ``` huginn1 | foreman stderr | @@ -123,25 +123,25 @@ default@42e19e692b24:~$ echo $DATABASE_PASSWORD '@pass_for_DB' ``` -可以看到,如果以`@`符号开头,最终的环境变量会加上引号,这对于某些应用来说会产生预期之外的结果,如此处测试的Huginn。 +可以看到,如果以`@`符号开头,最终的环境变量会加上引号,这对于某些应用来说会产生预期之外的结果,如此处测试的 Huginn。 -## 2. 使用6000或6666端口 +## 2. 使用 6000 或 6666 端口 -这也是一定挺特殊的场景,虽然与docker compose关系不大,但是难免会遇到。在映射端口的时候有一个很坑的地方,如果你要部署一个web服务,然后映射的时候填写的是`6000`端口或者是`6666`端口,你会发现无论怎么重启容器、更改容器设置、更换Edge/Chrome,浏览器就是访问不了页面。 +这也是一定挺特殊的场景,虽然与 docker compose 关系不大,但是难免会遇到。在映射端口的时候有一个很坑的地方,如果你要部署一个 web 服务,然后映射的时候填写的是`6000`端口或者是`6666`端口,你会发现无论怎么重启容器、更改容器设置、更换 Edge/Chrome,浏览器就是访问不了页面。 -实在折腾地快疯了,点开Chrome的错误详情,才发现这么一句 +实在折腾地快疯了,点开 Chrome 的错误详情,才发现这么一句 ***ERR_UNSAFE_PORT*** -一查才发现,Chrome等浏览器会限制部分特殊端口的网页访问,这些端口一般都已经有特殊的作用。 +一查才发现,Chrome 等浏览器会限制部分特殊端口的网页访问,这些端口一般都已经有特殊的作用。 https://www.jianshu.com/p/40f79f584eae -这里列出1000以上的部分会有相关问题的端口,别的不说,感觉`6000`和`6666`还是很容易一不小心就会设置的端口。。。。 +这里列出 1000 以上的部分会有相关问题的端口,别的不说,感觉`6000`和`6666`还是很容易一不小心就会设置的端口。。。。 ```c 2049, // nfs @@ -155,7 +155,7 @@ https://www.jianshu.com/p/40f79f584eae 6669, // Alternate IRC ``` -Chrome、FireFox等都会有类似的行为,换多少浏览器、换多少版本可能也都不行。。。 +Chrome、FireFox 等都会有类似的行为,换多少浏览器、换多少版本可能也都不行。。。 根据网友描述,部分特殊情况下,其他可能会被拦截的端口也包括`8080`,`8443`,`10080`。 diff --git a/content/posts/个人向Linux新服务器初始化清单.md b/content/posts/个人向Linux新服务器初始化清单.md index f666330..9f29ed5 100644 --- a/content/posts/个人向Linux新服务器初始化清单.md +++ b/content/posts/个人向Linux新服务器初始化清单.md @@ -13,15 +13,15 @@ tags: --- -一份 Linux 初始化清单, 避免每次拿到新的服务器都要一个个去各种地方搜集指令, 以做备忘 & 供有需要的朋友参考. +一份 Linux 初始化清单,避免每次拿到新的服务器都要一个个去各种地方搜集指令,以做备忘 & 供有需要的朋友参考。 -服务器发行版我个人推荐 Debian 系列, CentOS 系现在已经开始分裂而且说实话对新手其实并不友好. Debian 是在兼容性, 易用性和稳定性之间都取得不错平衡的发行版. 新手推荐 Ubuntu, 不过最近商业化有点过度, 夹带了越来越多的私活, 我个人所有新安装的 Linux 已经全线转向 Debian. 下文以目前最新的 Debian 11 Bullseye 为例 +服务器发行版我个人推荐 Debian 系列,CentOS 系现在已经开始分裂而且说实话对新手其实并不友好。Debian 是在兼容性,易用性和稳定性之间都取得不错平衡的发行版。新手推荐 Ubuntu, 不过最近商业化有点过度,夹带了越来越多的私活,我个人所有新安装的 Linux 已经全线转向 Debian. 下文以目前最新的 Debian 11 Bullseye 为例 -> azure 干净的 debian 11 镜像, 资源使用情况供参考 +> azure 干净的 debian 11 镜像,资源使用情况供参考 > > ~1G Disk, ~100M RAM, ~300 packages -本文仅列举主要事项和操作, 新手可先行阅读这篇文章熟悉概念. [云服务器入门指南](https://blog.colinx.one/posts/%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97/) +本文仅列举主要事项和操作,新手可先行阅读这篇文章熟悉概念。[云服务器入门指南](https://blog.colinx.one/posts/%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97/) 正文开始 @@ -29,7 +29,7 @@ tags: ### 1.1 防火墙 -检查服务商防火墙和系统自带防火墙(debian 系一般为 `ufw`, cent os 系一般为 `firewall-cmd`).放行 SSH(22), 新的 SSH(自定义), HTTP, HTTPS, 以及其他常用开发端口 +检查服务商防火墙和系统自带防火墙 (debian 系一般为 `ufw`, cent os 系一般为 `firewall-cmd`).放行 SSH(22), 新的 SSH(自定义), HTTP, HTTPS, 以及其他常用开发端口 ### 1.2 新建用户与检查 sudoer @@ -41,7 +41,7 @@ useradd -m --groups wheel colin ``` -也可直接编辑`/etc/sudoers` 文件为新用户添加 sudo 权限, 使用 `visudo` 指令可以自动帮你校验, 避免配置写错把系统搞崩 +也可直接编辑`/etc/sudoers` 文件为新用户添加 sudo 权限,使用 `visudo` 指令可以自动帮你校验,避免配置写错把系统搞崩 ### 1.3 镜像源与基础软件 @@ -61,7 +61,7 @@ sudo sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list sudo sed -i 's@//.*archive.ubuntu.com@//mirrors.ustc.edu.cn@g' /etc/apt/sources.list ``` -CentOS 系建议启用 EPEL, PowerTools 等 repo 以更方便地安装常用软件和工具. 此处不再赘述 +CentOS 系建议启用 EPEL, PowerTools 等 repo 以更方便地安装常用软件和工具。此处不再赘述 推荐的几个国内镜像站: [清华大学 TUNA 镜像站](https://mirrors.tuna.tsinghua.edu.cn/), [中科大 USTC LUG 镜像站](https://mirrors.ustc.edu.cn/), [腾讯镜像站](https://mirrors.cloud.tencent.com/) @@ -75,20 +75,20 @@ sudo apt install zsh tmux htop duf htop tldr screenfetch tree ### 1.4 SSH 安全 -修改端口, 配置文件`/etc/ssh/sshd_config`. 重启机器或 sshd 服务后生效 +修改端口,配置文件`/etc/ssh/sshd_config`. 重启机器或 sshd 服务后生效 在本机检查`~/.ssh/`有无 id_rsa 等已生成的 key. 如没有再使用 `ssh-keygen` 生成私钥 -将本机的公钥上传到远端, 再写入远端的 `authorized_keys` 中 +将本机的公钥上传到远端,再写入远端的 `authorized_keys` 中 `cat ~/id_rsa.pub >> ~/.ssh/authorized_keys` -注意修改权限, `~/.ssh/authorized_keys` 权限为 600. `~/.ssh/`为 400 +注意修改权限,`~/.ssh/authorized_keys` 权限为 600. `~/.ssh/`为 400 如失败可参考这篇文章 debug. [https://superuser.com/questions/1137438/ssh-key-authentication-fails](https://superuser.com/questions/1137438/ssh-key-authentication-fails) ### 1.5 设置 hostname -可选, 为了便于识别和后续配置 oh-my-zsh 更美观 +可选,为了便于识别和后续配置 oh-my-zsh 更美观 ```shell sudo hostnamectl set-hostname my-new-server @@ -101,7 +101,7 @@ sudo hostnamectl status ### 1.6 SWAP -可选, 建议内存<2G 配置 swap, 大小至少为 2 倍物理内存 +可选,建议内存<2G 配置 swap, 大小至少为 2 倍物理内存 推荐用 `fallocate` , 因为这个是最简单、最快速的创建交换空间的方法。 `fallocate`  命令用于为文件预分配块 / 大小。 @@ -141,7 +141,7 @@ sudo swapon -s ### 1.7 绑定域名   -可选, 绑定一个域名或者改下本地 host 便于后续访问 +可选,绑定一个域名或者改下本地 host 便于后续访问 ### 1.8 添加本地 SSH 别名 @@ -160,7 +160,7 @@ Host serverA #### Docker 安装 -可参考官网文档, 注意是 docker engine 的安装. [Docker 官方安装文档](https://docs.docker.com/engine/install/debian/) +可参考官网文档,注意是 docker engine 的安装。[Docker 官方安装文档](https://docs.docker.com/engine/install/debian/) 或者我之前写的 RSS MAN 部署文档中 docker 安装的部分 [RSS MAN X 安装部署指南/#1-docker 环境准备](https://blog.colinx.one/posts/rssmanx%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97/#1-docker%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87) @@ -180,11 +180,11 @@ Host serverA } ``` -修改完保存重启 docker 服务即可生效. 可使用 `docker info` 命令检查是否生效 +修改完保存重启 docker 服务即可生效。可使用 `docker info` 命令检查是否生效 ### 2.2 OH-MY-ZSH -安装OH-MY-ZSH, 在此之前确保已安装 `git` 和 `zsh` +安装 OH-MY-ZSH, 在此之前确保已安装 `git` 和 `zsh` ```shell sh -c "$(curl -fsSL [https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh](https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh))" @@ -199,7 +199,7 @@ git clone https://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/z git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting --depth=1 ``` -按需修改配置. 文件位置`~/.zshrc`, 下面为个人常用配置供参考. 注意去源文件修改对应项, 没有再到末尾加 +按需修改配置。文件位置`~/.zshrc`, 下面为个人常用配置供参考。注意去源文件修改对应项,没有再到末尾加 ```shell # custom conf override @@ -210,7 +210,7 @@ plugins=(git z zsh-autosuggestions zsh-syntax-highlighting sudo) ``` -自定义配置, 添加到末尾 +自定义配置,添加到末尾 ```shell export ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=20 @@ -224,7 +224,7 @@ source ~/.zshrc ### 2.3 nano 代码文件规则 -日常常用文本编辑器为 nano, 轻量级编辑需求完全满足. +日常常用文本编辑器为 nano, 轻量级编辑需求完全满足。 ```shell curl https://cdn.jsdelivr.net/gh/scopatz/nanorc/install.sh | sh @@ -232,9 +232,9 @@ curl https://cdn.jsdelivr.net/gh/scopatz/nanorc/install.sh | sh ### 2.4 时区调整 -一般安装完都是 UTC+0, 看日志什么的不方便. 服务器初始化的时候配置好后面可以免去很多麻烦 +一般安装完都是 UTC+0, 看日志什么的不方便。服务器初始化的时候配置好后面可以免去很多麻烦 -debian 系可用过 `timedatectl` 命令调整时区. 东八区可以用这个命令 +debian 系可用过 `timedatectl` 命令调整时区。东八区可以用这个命令 ```shell sudo timedatectl set-timezone Asia/Shanghai @@ -242,13 +242,13 @@ sudo timedatectl set-timezone Asia/Shanghai ### 2.5 厂商监控/SDK 卸载 -懂得都懂, 自己搜 +懂得都懂,自己搜 ## 3 - 进阶内容 ### 3.1 内核参数调优 -一些内核参数调整, 交换内存阈值和 bbr, tcp fast open 等, 按需启用. 启用前务必确认自己了解对应字段的含义, 否则不如保留系统初始值. +一些内核参数调整,交换内存阈值和 bbr, tcp fast open 等,按需启用。启用前务必确认自己了解对应字段的含义,否则不如保留系统初始值。 配置文件位置 `/etc/sysctl.conf` @@ -271,18 +271,18 @@ sudo sysctl -p ### 3.2 其他进阶配置 -一些其他的系统维护技巧与策略,如 +一些其他的系统维护技巧与策略,如 **配置文件管理** -所有应用 docker 化,通过 `docker compose` 文件管理 -配置共享存储, `rclone` 挂载 webdav, 同步 docker compose 等配置文件; -traefik 网关作为统一出口, 负责服务发现和自动维护 HTTPS 证书, 自定义配置通过 headless CMS 如 directus 管理, traefik 设定为通过 http 方式获取远端配置即可. +所有应用 docker 化,通过 `docker compose` 文件管理 +配置共享存储,`rclone` 挂载 webdav, 同步 docker compose 等配置文件; +traefik 网关作为统一出口,负责服务发现和自动维护 HTTPS 证书,自定义配置通过 headless CMS 如 directus 管理,traefik 设定为通过 http 方式获取远端配置即可。 **数据库备份** 所有数据相关的统一挂载到`/data/database/xxx`, 配置定时任务进行备份 -以及配置 s3 等, 上传到其他存储介质和其他地域. +以及配置 s3 等,上传到其他存储介质和其他地域。 -这些内容此处不再赘述, 有机会再单独写篇文章分享吧 +这些内容此处不再赘述,有机会再单独写篇文章分享吧 END diff --git a/content/posts/云服务器入门指南.md b/content/posts/云服务器入门指南.md index 2f60aef..a83ae3b 100644 --- a/content/posts/云服务器入门指南.md +++ b/content/posts/云服务器入门指南.md @@ -20,41 +20,41 @@ tags: ## 云服务器相关的几个概念 ### 服务器的操作系统 -主要分为两大阵营:Windows Server和Linux Server。前者一般自带可视化界面,基本兼容平时使用的exe程序,某种程度上也可以作为“云电脑”使用。后者一般不自带图形化界面,操作都通过特定命令完成,上手难度较高,但配置各种开发环境、安装各类高级工具比win平台更容易。没有Linux基础的用户建议先在本地建立虚拟机练习。 +主要分为两大阵营:Windows Server 和 Linux Server。前者一般自带可视化界面,基本兼容平时使用的 exe 程序,某种程度上也可以作为“云电脑”使用。后者一般不自带图形化界面,操作都通过特定命令完成,上手难度较高,但配置各种开发环境、安装各类高级工具比 win 平台更容易。没有 Linux 基础的用户建议先在本地建立虚拟机练习。 -Linux Server主要的两个阵营为Debian系、RedHat系。主要的发行版 +Linux Server 主要的两个阵营为 Debian 系、RedHat 系。主要的发行版 -- Debian系:Debian, Ubuntu -- RedHat系:RedHat, CentOS, Fedora +- Debian 系:Debian, Ubuntu +- RedHat 系:RedHat, CentOS, Fedora 对于初学者来说,最明显的区别在于前者使用 `apt install xxx`  来安装软件,而后者是通过 `yum install xxx`  来安装。 -### 公网IP -IP可以理解为一台设备在互联网世界中的门牌号和地址,相当于知道某个具体的地址就能发快递包裹。IP分为公网IP和内网IP。顾名思义,内网IP一般用于公司或学校内部。一般来说,只知道一台设备的内网IP的情况下并不能准确定位这台设备,就类似于只知道你的朋友的名字,并不能直接给他寄快递,你必须要知道他学校/单位/家的地址才行。 +### 公网 IP +IP 可以理解为一台设备在互联网世界中的门牌号和地址,相当于知道某个具体的地址就能发快递包裹。IP 分为公网 IP 和内网 IP。顾名思义,内网 IP 一般用于公司或学校内部。一般来说,只知道一台设备的内网 IP 的情况下并不能准确定位这台设备,就类似于只知道你的朋友的名字,并不能直接给他寄快递,你必须要知道他学校/单位/家的地址才行。 -服务器拥有公网IP的好处在于,你可以直接通过这个IP定位到你的服务器,相当于你的服务器在互联网世界中拥有了响当当的名号,只要说出这个名号,互联网世界的公民都能知道他,给他发消息。 +服务器拥有公网 IP 的好处在于,你可以直接通过这个 IP 定位到你的服务器,相当于你的服务器在互联网世界中拥有了响当当的名号,只要说出这个名号,互联网世界的公民都能知道他,给他发消息。 -_*此处公网内网IP的叙述仅适用于IPv4地址。更多关于IPv4地址和IPv6地址的相关信息参见文末扩展阅读。_ +_*此处公网内网 IP 的叙述仅适用于 IPv4 地址。更多关于 IPv4 地址和 IPv6 地址的相关信息参见文末扩展阅读。_ ### 端口  -端口的英文为port,有港口的意思。一般来说,一台设备不同的端口运行着不同的服务,我们可以很好的控制特定端口的开放与关闭,从而控制不同的服务是否对外开放,正如开放一个通商口岸。常见的服务端口有 `HTTP  80`   `HTTPS  443`   `DNS  53`   `SSH 22`   +端口的英文为 port,有港口的意思。一般来说,一台设备不同的端口运行着不同的服务,我们可以很好的控制特定端口的开放与关闭,从而控制不同的服务是否对外开放,正如开放一个通商口岸。常见的服务端口有 `HTTP  80`   `HTTPS  443`   `DNS  53`   `SSH 22`   -一个服务也可能不是仅仅通过一个端口提供服务,他可能会将一个大的功能拆分为几个子功能,通过不同的端口与外界通讯。如FTP,SMB等。你可以通过关闭指定端口来详细控制特定服务。当然如果你想想外面提供像FTP这样通过多个端口与外界通讯的端口,就要注意要确保他使用的所有端口都要设置为开放才能保证外界的正常访问。 +一个服务也可能不是仅仅通过一个端口提供服务,他可能会将一个大的功能拆分为几个子功能,通过不同的端口与外界通讯。如 FTP,SMB 等。你可以通过关闭指定端口来详细控制特定服务。当然如果你想想外面提供像 FTP 这样通过多个端口与外界通讯的端口,就要注意要确保他使用的所有端口都要设置为开放才能保证外界的正常访问。 -_*FTP是一种文件传输协议,你可以在某些电影资源的下载链接里看见以 `ftp://`  开头的链接。这说明这个电影资源是存放在某个FTP服务器上。_ -_*关于FTP、SMB的端口使用及配置参见文末扩展阅读_ +_*FTP 是一种文件传输协议,你可以在某些电影资源的下载链接里看见以 `ftp://`  开头的链接。这说明这个电影资源是存放在某个 FTP 服务器上。_ +_*关于 FTP、SMB 的端口使用及配置参见文末扩展阅读_ ### 防火墙 防火墙(Firewall)某种程度上是控制本机与外界通讯的工具。下面以几个具体的实例来介绍下防火墙: -- 你的服务器建了个网站,需要向外提供HTTP服务,那么你需要在防火墙中设置开放80端口,允许其他所有IP访问。 -- 公司有一台服务器搭载了一个仅面向公司员工的网站,希望仅允许公司内的员工访问。而公司内员工的内网IP个格式为192.168.*.*,那么就可以在防火墙中设置,仅允许来自IP为192.168.*.*的设备访问这台服务器的80端口,其他一律禁止 -- 近期互联网上流行一种病毒X通过计算机的1234端口感染其他机器。那么为了保护本机不受病毒影响,你可以在防火墙中设置关闭1234端口,禁止任何来源访问1234端口,从而将病毒X阻挡在防火墙外。 +- 你的服务器建了个网站,需要向外提供 HTTP 服务,那么你需要在防火墙中设置开放 80 端口,允许其他所有 IP 访问。 +- 公司有一台服务器搭载了一个仅面向公司员工的网站,希望仅允许公司内的员工访问。而公司内员工的内网 IP 个格式为 192.168.*.*,那么就可以在防火墙中设置,仅允许来自 IP 为 192.168.*.*的设备访问这台服务器的 80 端口,其他一律禁止 +- 近期互联网上流行一种病毒 X 通过计算机的 1234 端口感染其他机器。那么为了保护本机不受病毒影响,你可以在防火墙中设置关闭 1234 端口,禁止任何来源访问 1234 端口,从而将病毒 X 阻挡在防火墙外。 -**注意:对于云服务器来说,可能会存在多重防火墙。一般Linux系统自身会有一套防火墙(firewalld/ufw等),云服务商会有一套网络防火墙(一般为网络安全组/网络访问控制等)** +**注意:对于云服务器来说,可能会存在多重防火墙。一般 Linux 系统自身会有一套防火墙(firewalld/ufw 等),云服务商会有一套网络防火墙(一般为网络安全组/网络访问控制等)** ### 几种远程连接方式对比 @@ -66,38 +66,38 @@ _*关于FTP、SMB的端口使用及配置参见文末扩展阅读_ | **网络要求** | 极低 | 高 | 较高 | | **配置难度** | ★ | ★★★ | ★★ | -- 1 部分Linux发行版自带VNC连接,不过大部分需手动启用 -- 2 RDP连接对于同为Win的机器更为容易,对于平台不一样的情况,配置比较麻烦 +- 1 部分 Linux 发行版自带 VNC 连接,不过大部分需手动启用 +- 2 RDP 连接对于同为 Win 的机器更为容易,对于平台不一样的情况,配置比较麻烦 ## 快速入门须知 -当你拥有了一台属于自己的云服务器,你发现面对复杂的控制台手足无措,不知道怎么连接,不知道能拿来干什么。那么你可以参考一下的步骤。**下文仅适用于Linux Server & 有一点点Linux操作经验的选手**。 +当你拥有了一台属于自己的云服务器,你发现面对复杂的控制台手足无措,不知道怎么连接,不知道能拿来干什么。那么你可以参考一下的步骤。**下文仅适用于 Linux Server & 有一点点 Linux 操作经验的选手**。 -### 开启SSH远程连接 +### 开启 SSH 远程连接 #### 服务器端设置 1.首先,登陆你的账户,打开云服务器的控制台,开机(不解释)   2.定位到你的云服务器,一般新的账户只有一台云服务器实例,点击其菜单,找到远程连接选项   3.接下来会打开一个网页端的黑框,根据其提示,设置实例密码等等。这里记录你的系统用户名和密码。 -4.一般网页端会有提示,根据具体情况开启SSH服务,设置允许root权限远程登录。具体的操作因平台和操作系统不同而不同,此处不再赘述。 -5.现在到服务器菜单里找到网络设置/防火墙设置/网络安全组设置,点击进入,**开启服务器22端口的访问权限**。 +4.一般网页端会有提示,根据具体情况开启 SSH 服务,设置允许 root 权限远程登录。具体的操作因平台和操作系统不同而不同,此处不再赘述。 +5.现在到服务器菜单里找到网络设置/防火墙设置/网络安全组设置,点击进入,**开启服务器 22 端口的访问权限**。 -接下来在你的电脑上配置SSH远程访问。  +接下来在你的电脑上配置 SSH 远程访问。  #### 本地电脑设置 -1.1 Win10用户和Linux用户、Mac OS用户一般系统会预装ssh客户端。打开CMD命令控制符/PowerShell,输入ssh回车看是否有反应。**如果没有提示xxx找不到,可以直接到步骤2.1**。 +1.1 Win10 用户和 Linux 用户、Mac OS 用户一般系统会预装 ssh 客户端。打开 CMD 命令控制符/PowerShell,输入 ssh 回车看是否有反应。**如果没有提示 xxx 找不到,可以直接到步骤 2.1**。 -1.2 如果没有反应,你需要到 设置-应用-可选功能 中,安装SSH客户端。 +1.2 如果没有反应,你需要到 设置 - 应用 - 可选功能 中,安装 SSH 客户端。 -1.3 Windows其他版本用户需要安装第三方SSH客户端。这里推荐使用Putty。 +1.3 Windows 其他版本用户需要安装第三方 SSH 客户端。这里推荐使用 Putty。 -2.1 接下来使用 `ssh 你的用户名@你的服务器IP` 来连接到你的服务器。注意**At符号@前后没有空格 ,输完回车确认**。正常情况下可以成功连接到。 +2.1 接下来使用 `ssh 你的用户名@你的服务器IP` 来连接到你的服务器。注意**At 符号@前后没有空格,输完回车确认**。正常情况下可以成功连接到。 -2.2 如果出现Permission denied,可能的原因有`用户名密码错误` / `未开启root账户远程登录`。 +2.2 如果出现 Permission denied,可能的原因有`用户名密码错误` / `未开启root账户远程登录`。 -2.3 如果出现Connection time out,则大概率是你`IP地址填写错误`,也有可能是你的`服务器没开机`/ `你的服务器系统没有默认开启ssh服务 `/ `防火墙未放行22端口`。 +2.3 如果出现 Connection time out,则大概率是你`IP地址填写错误`,也有可能是你的`服务器没开机`/ `你的服务器系统没有默认开启ssh服务 `/ `防火墙未放行22端口`。 排查相关问题请带上相关关键字去搜索引擎搜索。 @@ -106,34 +106,34 @@ _*关于FTP、SMB的端口使用及配置参见文末扩展阅读_ #### 安装软件的命令及常见问题 -参见上文介绍操作系统的部分。不过具体安装的时候,经常会遇到的问题为安装需要root权限。一般来说,日常使用时为了安全期间,我们不会直接用root账户进行操作。通常的做法为创建一个普通的账户,当执行需要高权限的指令时在命令前加上sudo,或是使用 `su root`  来临时切换为root用户*,并输入密码来进行二次确认,以确保安全性。此处涉及到的操作有:   +参见上文介绍操作系统的部分。不过具体安装的时候,经常会遇到的问题为安装需要 root 权限。一般来说,日常使用时为了安全期间,我们不会直接用 root 账户进行操作。通常的做法为创建一个普通的账户,当执行需要高权限的指令时在命令前加上 sudo,或是使用 `su root`  来临时切换为 root 用户*,并输入密码来进行二次确认,以确保安全性。此处涉及到的操作有:   - 添加一个普通用户 ( `useradd NEWUSERNAME`  /  `adduser NEWUSERNAME`  ) - 设置新用户的密码  ( `passwd USERNAME`  ) -- 将新用户添加到sudoers的列表中  ( 修改 `/etc/sudoers`  )  +- 将新用户添加到 sudoers 的列表中  ( 修改 `/etc/sudoers`  )  具体操作可以以  `操作系统名称+操作关键字`  为关键字在搜索引擎中自行搜索详细教程。 -_*临时切换为root用户,执行完命令后,记得用exit命令退出root账户_ +_*临时切换为 root 用户,执行完命令后,记得用 exit 命令退出 root 账户_ #### 镜像源的设置 -执行完上述命令,当你尝试安装一个软件时,如果你云服务器提供商没有为你的系统进行“优化”的话,你会发现安装软件的速度非常慢。这是因为这些Linux系统基本都是由国外的厂商/组织进行开发,安装软件时需要到位于国外的服务器获取数据,你的网络请求可能会跨越大半个地球,网络速度也随着传输距离的增加不断减小*。国内有很多组织建立了公益性质的镜像站点,我们可以将安装程序的软件源设置为位于国内的镜像站点以大大提高软件安装下载的速度。 -国内的镜像站点有**阿里云镜像站**、**清华大学tuna镜像站**、**中国科学技术大学开源镜像站**等。这些站点提供多种主流Linux发行版的软件安装源的镜像。不同操作系统更换软件源的操作有所不同,可以到以上镜像站点中查找特定系统更换软件源的详细步骤。 +执行完上述命令,当你尝试安装一个软件时,如果你云服务器提供商没有为你的系统进行“优化”的话,你会发现安装软件的速度非常慢。这是因为这些 Linux 系统基本都是由国外的厂商/组织进行开发,安装软件时需要到位于国外的服务器获取数据,你的网络请求可能会跨越大半个地球,网络速度也随着传输距离的增加不断减小*。国内有很多组织建立了公益性质的镜像站点,我们可以将安装程序的软件源设置为位于国内的镜像站点以大大提高软件安装下载的速度。 +国内的镜像站点有**阿里云镜像站**、**清华大学 tuna 镜像站**、**中国科学技术大学开源镜像站**等。这些站点提供多种主流 Linux 发行版的软件安装源的镜像。不同操作系统更换软件源的操作有所不同,可以到以上镜像站点中查找特定系统更换软件源的详细步骤。 _*请注意此处叙述并不准确,与一个站点通信的速度取决于很多因素。_ #### 常用工具的安装 更换好了软件源后,我们就可以愉快的安装软件了。你可以尝试安装一下 `screenfetch`  的软件包进行测试,安装完成后输入 `screenfetch`  命令,他会在你的屏幕上输出字符画形式的系统图标和系统配置信息。 -部分Linux发行版可能并没有预置很多的软件包,你可以根据自己的需要进行安装,如文本编辑工具 `nano`  `vim`  等*。C编译工具 `gcc`  ,C++编译工具 `g++`  ,Java开发组件 `openjdk`  等。 +部分 Linux 发行版可能并没有预置很多的软件包,你可以根据自己的需要进行安装,如文本编辑工具 `nano`  `vim`  等*。C 编译工具 `gcc`  ,C++编译工具 `g++`  ,Java 开发组件 `openjdk`  等。 -_*推荐初学者使用易于上手的 `nano`  文本编辑器。大部分Linux发行版都有预置。_ +_*推荐初学者使用易于上手的 `nano`  文本编辑器。大部分 Linux 发行版都有预置。_ ## 初级玩法 -- **搭建Wordpress网站**:为服务器安装好基础设施,部署wordpress服务。参见 [服务器LAMP部署](https://help.aliyun.com/document_detail/50774.html?spm=a2c4g.11186623.6.1134.26fc7ed9zbIv5a),[Wordpress搭建](https://segmentfault.com/a/1190000013035065) -- **作为远程开发环境**:  [VSCode进行远程开发](https://www.jianshu.com/p/0f2fb935a9a1) +- **搭建 Wordpress 网站**:为服务器安装好基础设施,部署 wordpress 服务。参见 [服务器 LAMP 部署](https://help.aliyun.com/document_detail/50774.html?spm=a2c4g.11186623.6.1134.26fc7ed9zbIv5a),[Wordpress 搭建](https://segmentfault.com/a/1190000013035065) +- **作为远程开发环境**:  [VSCode 进行远程开发](https://www.jianshu.com/p/0f2fb935a9a1) @@ -146,7 +146,7 @@ _*推荐初学者使用易于上手的 `nano`  文本编辑器。大部分Linux ## 扩展阅读 -- [IPv6是什么?](https://zhuanlan.zhihu.com/p/36542469) +- [IPv6 是什么?](https://zhuanlan.zhihu.com/p/36542469) - [CentOS7 firewall 开放服务 / 端口](https://www.jianshu.com/p/016ee3b7ff97) - [在 Ubuntu 中用 UFW 配置防火墙](https://linux.cn/article-8087-1.html) - [让你的 WordPress 网站更快的 16 条建议](https://www.wpdaxue.com/make-your-wordpress-site-faster.html) diff --git a/content/posts/从一次异常断网谈防火墙配置.md b/content/posts/从一次异常断网谈防火墙配置.md index c9d441a..04bd6a7 100644 --- a/content/posts/从一次异常断网谈防火墙配置.md +++ b/content/posts/从一次异常断网谈防火墙配置.md @@ -54,4 +54,4 @@ sudo ufw default deny incoming ``` -这样设置可以保证我们能够正常访问互联网上的绝大多数服务,且阻挡大部分外部的攻击。不过这种情况下,如果你的系统被植入了后门,那么这台机器依然可以向外发送请求。如之前爆发的 “永恒之蓝”,如果你的机器被感染了,那么他依然可以经由特定的端口,向外传送数据,从而感染局域网中的其他设备。防火墙的规则就要根据实际的情况来进行设置了。 \ No newline at end of file +这样设置可以保证我们能够正常访问互联网上的绝大多数服务,且阻挡大部分外部的攻击。不过这种情况下,如果你的系统被植入了后门,那么这台机器依然可以向外发送请求。如之前爆发的“永恒之蓝”,如果你的机器被感染了,那么他依然可以经由特定的端口,向外传送数据,从而感染局域网中的其他设备。防火墙的规则就要根据实际的情况来进行设置了。 \ No newline at end of file diff --git a/content/posts/伪·苹果全家桶喜添新成员:小米手环6使用体验.md b/content/posts/伪·苹果全家桶喜添新成员:小米手环6使用体验.md index 45e5a66..c8f7f86 100755 --- a/content/posts/伪·苹果全家桶喜添新成员:小米手环6使用体验.md +++ b/content/posts/伪·苹果全家桶喜添新成员:小米手环6使用体验.md @@ -1,8 +1,8 @@ --- -title: 伪·苹果全家桶喜添新成员:小米手环6使用体验 +title: 伪·苹果全家桶喜添新成员:小米手环 6 使用体验 date: 2021-07-25 lastmod: 2021-07-25 -description: 继iPad 2018,iPhone SE2,漫步者无线耳机(伪·AirPods),黑苹果Dell G3 3579(伪·MacBook Pro),千元捡垃圾华强北黑苹果主机+4K显示器(伪·iMac)后,我的伪·苹果全家桶终于迎来了新成员:智能穿戴设备,小米手环6。 +description: 继 iPad 2018,iPhone SE2,漫步者无线耳机(伪·AirPods),黑苹果 Dell G3 3579(伪·MacBook Pro),千元捡垃圾华强北黑苹果主机 +4K 显示器(伪·iMac)后,我的伪·苹果全家桶终于迎来了新成员:智能穿戴设备,小米手环 6。 categories: - 分享 tags: @@ -13,18 +13,18 @@ tags: --- - + -继iPad 2018,iPhone Se2,漫步者无线耳机(伪·AirPods),黑苹果Dell G3 3579(伪·MacBook Pro),千元捡垃圾华强北黑苹果主机+4K显示器(伪·iMac)后,我的伪·苹果全家桶终于迎来了新成员:智能穿戴设备,小米手环6。 +继 iPad 2018,iPhone Se2,漫步者无线耳机(伪·AirPods),黑苹果 Dell G3 3579(伪·MacBook Pro),千元捡垃圾华强北黑苹果主机 +4K 显示器(伪·iMac)后,我的伪·苹果全家桶终于迎来了新成员:智能穿戴设备,小米手环 6。 ## 选购原因 -我购买电子产品一向是非常谨慎的,而且来回确认必要性和对比参数、价格通常都要很久,但这一次,吃个午饭的功夫我就下单了小米手环6。严格意义上来说,他对我并不是一个必需品,促使我这么快下单的因素主要有两个: +我购买电子产品一向是非常谨慎的,而且来回确认必要性和对比参数、价格通常都要很久,但这一次,吃个午饭的功夫我就下单了小米手环 6。严格意义上来说,他对我并不是一个必需品,促使我这么快下单的因素主要有两个: 1. 近期对健康的重视 2. 对睡眠质量不满意,对白天的工作学习效率和状态不满意 -在与公司几个我很钦佩的leader和boss的饭局中,我发觉到那些很厉害的人,他们在学习和生活的时候总是以一种全情投入、高效专注的姿态投入进去,而让他们保持精力旺盛和高效的秘诀,或者说这几位牛人的共同点,就是他们都非常**关注健康,保持运动,注重效率**。 +在与公司几个我很钦佩的 leader 和 boss 的饭局中,我发觉到那些很厉害的人,他们在学习和生活的时候总是以一种全情投入、高效专注的姿态投入进去,而让他们保持精力旺盛和高效的秘诀,或者说这几位牛人的共同点,就是他们都非常**关注健康,保持运动,注重效率**。 同时身边几位朋友各种身体原因,耽误学习、工作的真实案例,也让我愈发感受到健康的重要性,包括但不限于心理健康、口腔健康、心肺能力、睡眠质量等方面。 @@ -32,13 +32,13 @@ tags: ## 我最关注的功能 -通知提醒、运动统计、心率检测,这些都已经是目前市面上的绝大多智能手环、手表的标配了,小米手环6代还支持的功能包括睡眠监测、遥控拍照、血氧检测、支付宝离线支付、音乐切换、闹钟、番茄钟、倒计时以及多种运动模式的检测与支持,NFC版还额外支持NFC刷卡以及小爱同学,不过没有扬声器小爱同学不能发声😂。我购入的是无NFC的普通版,谈一下我个人认为很实用的以及几个非常鸡肋的功能。 +通知提醒、运动统计、心率检测,这些都已经是目前市面上的绝大多智能手环、手表的标配了,小米手环 6 代还支持的功能包括睡眠监测、遥控拍照、血氧检测、支付宝离线支付、音乐切换、闹钟、番茄钟、倒计时以及多种运动模式的检测与支持,NFC 版还额外支持 NFC 刷卡以及小爱同学,不过没有扬声器小爱同学不能发声😂。我购入的是无 NFC 的普通版,谈一下我个人认为很实用的以及几个非常鸡肋的功能。 1. 🎯**平时使用的核心功能**:运动目标(步数和卡路里),睡眠监测 2. 😃**经常使用的实用工具**:倒计时,番茄钟,事件提醒 -3. 👎🏻**营销效果>实用**:血氧检测,心率检测,压力检测,PAI趋势 +3. 👎🏻**营销效果>实用**:血氧检测,心率检测,压力检测,PAI 趋势 -**几天实际体验下来,血氧检测、心率这些东西对于一个正常生活的年轻人没有必要**,测了几次血氧都是98%,晚上也没有呼吸不畅,心率也不会突然变动,压力也没必要全天候检测,自己心里烦躁的时候自己还不知道吗。。。PAI是一个需要全天候检测的东西,1分钟检测1次,续航崩的厉害,而且也没啥必要。。。 +**几天实际体验下来,血氧检测、心率这些东西对于一个正常生活的年轻人没有必要**,测了几次血氧都是 98%,晚上也没有呼吸不畅,心率也不会突然变动,压力也没必要全天候检测,自己心里烦躁的时候自己还不知道吗。。。PAI 是一个需要全天候检测的东西,1 分钟检测 1 次,续航崩的厉害,而且也没啥必要。。。 **最令我惊喜的是倒计时、番茄钟和事件提醒功能**。拿我最近的使用场景举例,近期开始重点关注口腔健康,每次刷牙时可以定个三分钟的倒计时,每次刷牙必须满三分钟;再设定一个每日重复的事件提醒,每天提醒我十一点刷牙,保持口腔清洁。这些事固然用手机都可以办到,只是**用手环进行这些操作出乎意料的方便**。番茄钟也是非常非常好用的一个工具,这个功能是近期更新才添加的,现在在手环上设定番茄钟,接收到时提醒更加轻量、便捷,也减少了手机的干扰,大大滴实用~😄 @@ -48,7 +48,7 @@ tags: **重量**:几乎可以忽略,没有坠手感 -**续航**:没有打开PAI等高度崩续航的功能,十分钟检测一次,日常使用一到两次运动模式,一周一充没有压力 +**续航**:没有打开 PAI 等高度崩续航的功能,十分钟检测一次,日常使用一到两次运动模式,一周一充没有压力 **充电**:磁吸充电真的超香 @@ -56,22 +56,22 @@ tags: **腕带佩戴体验**:不是很透气,夏天出汗或是沾了水会有点难受 -**腕表卡扣**:一只手轻松扣上,很久以前佩戴的1代手环真的是两只手都扣不上 +**腕表卡扣**:一只手轻松扣上,很久以前佩戴的 1 代手环真的是两只手都扣不上 **硌手程度**:低,正常佩戴,一天下来皮肤上不会有印记 ## 使用体验 -iOS兼容性:尚可,APP功能完备,部分健康数据可写入苹果健康应用。据说一众国产手环手表中,小米家的是对苹果支持最友好的 +iOS 兼容性:尚可,APP 功能完备,部分健康数据可写入苹果健康应用。据说一众国产手环手表中,小米家的是对苹果支持最友好的 -设备联动:无,毕竟只是手环,没法安装三方APP。不过听说NFC版的小爱同学可以控制智能家居,听起来还不错 +设备联动:无,毕竟只是手环,没法安装三方 APP。不过听说 NFC 版的小爱同学可以控制智能家居,听起来还不错 响应速度:尚可,抬腕亮屏的灵敏度和速度都还可以,偶有不灵,正常范围内 ## 购买建议 -Apple生态内用户,Apple Watch少有的平价替代品(两百块要什么自行车) +Apple 生态内用户,Apple Watch 少有的平价替代品(两百块要什么自行车) 腕上空空选手的智能穿戴尝鲜优选 -小米手环123代用户无脑升级(磁吸充电真香) +小米手环 123 代用户无脑升级(磁吸充电真香) diff --git a/content/posts/写在毕业季.md b/content/posts/写在毕业季.md index b1b26e7..3d2af4c 100644 --- a/content/posts/写在毕业季.md +++ b/content/posts/写在毕业季.md @@ -26,7 +26,7 @@ categories: ## 答案 -我想要什么? +我想要什么? 这个问题困扰了我很久。 @@ -92,7 +92,7 @@ categories: 从这个误区中走出来后,我感觉做起事来变得更加轻松了,不用再费心费力去计划什么,也不用为事情发展脱离预期而焦躁,坦然的心态也有利于我专注于这个事情本身。 -最近看的《嫌疑人X的献身》中提到一个有趣的观点:证明一个答案是错误的,比找出一个问题的正确答案可能要更难。 +最近看的《嫌疑人 X 的献身》中提到一个有趣的观点:证明一个答案是错误的,比找出一个问题的正确答案可能要更难。 我已全然忘记我意识到这个误区是什么时间,什么场景,有什么契机。或许我根本就不是在某一个特定的时间点顿悟的,我更倾向于将这一点归于我的积累。毕竟,在你一无所有的时候,你能投资的只有你自己。 @@ -102,9 +102,9 @@ You are what you read. 孟母三迁、“近朱者赤近墨者黑”讲的也都是类似的道理。 -大二的时候我开始接触到RSS,开始有意识地掌控我的信息源。卸载了知乎,关闭了所有算法驱动的信息推送流。我订阅的信息源主要有两大类:编辑精挑细选的文章和优秀作者或优质站点的文章。我认识到自己的时间很值钱,我不希望把时间浪费在没有意义和低质量的信息以及一些琐事上。 +大二的时候我开始接触到 RSS,开始有意识地掌控我的信息源。卸载了知乎,关闭了所有算法驱动的信息推送流。我订阅的信息源主要有两大类:编辑精挑细选的文章和优秀作者或优质站点的文章。我认识到自己的时间很值钱,我不希望把时间浪费在没有意义和低质量的信息以及一些琐事上。 -我们生活的时代早已不是那个信息匮乏的年代,现在的人们普遍都面临信息过载的问题。但是问题是,咨询类App给你推荐的xx国新闻,xx地的xx奇葩事件,与你有何干系?浏览这些信息能得到什么?满足人类与生俱来的猎奇心理,让你变得“学富五车”吗? +我们生活的时代早已不是那个信息匮乏的年代,现在的人们普遍都面临信息过载的问题。但是问题是,咨询类 App 给你推荐的 xx 国新闻,xx 地的 xx 奇葩事件,与你有何干系?浏览这些信息能得到什么?满足人类与生俱来的猎奇心理,让你变得“学富五车”吗? 我发现一个很有趣的现象:有那么一群人,尤其是出租车司机和中年男性,喜欢对近期的事件、政治或是某个特定领域高谈阔论,试图吹嘘自己对这个领域有多么多么了解。典型的无非出租车师傅指点江山,大谈特谈世界局势,以及我教张小龙做微信系列。 @@ -112,7 +112,7 @@ You are what you read. 我挺钦佩这个同事,因为他知道自己做了什么,在做什么,想做什么。某种程度上来说,是“活得明白”。 -相较而言,同期一起工作的另外几名同事虽然有更好的学历,更优秀的履历,更强的工作能力,但是他们更像是依仗着自己的硬实力和资本,在随波逐流。C9高校本硕学历,一线城市大厂工作,相当耀眼。但是他们走到这里,可能并没有什么漂亮的逆袭,有什么决定命运的重要转折,人家只是到了顺风顺水的得到了保研资格就读了个研,刚好有用人单位看上了就进了大公司。但是在与他们聊天的过程中,我发觉他们对自己,对世界,对人生并没有什么比较深刻的认知或者想法,对很多问题依然很迷茫,平时也没有什么热爱的事业,给我的感觉就是很干巴巴的,很浅薄的一个灵魂,在一个光鲜亮丽的身体里。 +相较而言,同期一起工作的另外几名同事虽然有更好的学历,更优秀的履历,更强的工作能力,但是他们更像是依仗着自己的硬实力和资本,在随波逐流。C9 高校本硕学历,一线城市大厂工作,相当耀眼。但是他们走到这里,可能并没有什么漂亮的逆袭,有什么决定命运的重要转折,人家只是到了顺风顺水的得到了保研资格就读了个研,刚好有用人单位看上了就进了大公司。但是在与他们聊天的过程中,我发觉他们对自己,对世界,对人生并没有什么比较深刻的认知或者想法,对很多问题依然很迷茫,平时也没有什么热爱的事业,给我的感觉就是很干巴巴的,很浅薄的一个灵魂,在一个光鲜亮丽的身体里。 你可能会说,人家只是一个普通人,只是起点比我们其他人更高罢了。或者你会说,我完全只是嫉妒人家所拥有的,尝试安慰自己罢了。 @@ -126,9 +126,9 @@ You are what you read. 有一张图很有意思,三个人分别站在不同高度的书上,看到的是截然不同的风景。书最少的那个人看到的都是矮墙地下的花花草草,书稍微多些的人跨国墙头看到了远处阴云密布的天空,眼前一片黑暗。而最右侧的人站在一摞高高垒起的书上,看到了云层之上璀璨的星空。 -这张图显然是在暗指读书多少决定了眼中世界的模样。我曾经也是认为对这个世界的认知越通透的人越厉害,这也是以前我judge别人的主要标准。不过后面我发现生活中有一类人即便并没有深刻的思想,但是仍然能让我感觉很“Wow”。后面发现这类人有一个共同的特征,那就是他们都有各自热爱的人或事,或是生活本身。 +这张图显然是在暗指读书多少决定了眼中世界的模样。我曾经也是认为对这个世界的认知越通透的人越厉害,这也是以前我 judge 别人的主要标准。不过后面我发现生活中有一类人即便并没有深刻的思想,但是仍然能让我感觉很“Wow”。后面发现这类人有一个共同的特征,那就是他们都有各自热爱的人或事,或是生活本身。 -这个热爱显然不是简单的“我喜欢xxx”,那只是喜欢,称不上热爱。我不知道应该给热爱下一个什么样的定义,但是有一点是可以确定的,心怀热爱的人,眼里有光。他们愿意去为了自己热爱的事业去付出,去不断尝试,去不断深入学习,不断进步。 +这个热爱显然不是简单的“我喜欢 xxx”,那只是喜欢,称不上热爱。我不知道应该给热爱下一个什么样的定义,但是有一点是可以确定的,心怀热爱的人,眼里有光。他们愿意去为了自己热爱的事业去付出,去不断尝试,去不断深入学习,不断进步。 我敬佩一切心怀热爱的人,他们眼里有光,拥有可以跨越苦难的人生勇气。 @@ -138,13 +138,13 @@ You are what you read. ## 关于兴趣 -KnowYourself有[一期文章](https://www.zhihu.com/question/299527411)谈到了人们对于“兴趣”的几个误区 +KnowYourself 有[一期文章](https://www.zhihu.com/question/299527411)谈到了人们对于“兴趣”的几个误区 **误解 1:“不需要做什么,我就可以对某件事物一直感兴趣。”** **误解 2: “兴趣一定可以被‘找到’。”** -我曾经也认为兴趣是与生俱来的,一定可以被找到的,记忆中我很小的时候就对科技类的理工类的东西很感兴趣,这些兴趣驱使着我不断学习这些知识和技能,一路走到今天。后面发现这并不是我与生俱来的刻在DNA里面的某种原始本能,也不是某种“一见钟情”,小时候那些高质量的动漫节目、书籍、电影,都对我产生了深远的影响。 +我曾经也认为兴趣是与生俱来的,一定可以被找到的,记忆中我很小的时候就对科技类的理工类的东西很感兴趣,这些兴趣驱使着我不断学习这些知识和技能,一路走到今天。后面发现这并不是我与生俱来的刻在 DNA 里面的某种原始本能,也不是某种“一见钟情”,小时候那些高质量的动漫节目、书籍、电影,都对我产生了深远的影响。 兴趣是需要被培养的,是可以培养的。我觉得兴趣更像是一段友情,或是一团火,需要投入时间和精力,予以恰当的方式,才能让其不断发展。不断尝试,不断突破,取得进展,可以获得正向的反馈,从而不断学习,不断进步。 @@ -156,7 +156,7 @@ KnowYourself有[一期文章](https://www.zhihu.com/question/299527411)谈到了 兴趣需要培养,而培养需要长时间持续的投入。 -想要真正觉得一些事情 “很有意思”,产生“反复做这件事都不会厌倦” 的状态,需要我们有 “能力” 足够充分地感受到这件事的美妙之处。用拥有这个能力需要持续投入,而品尝到美妙之处也需要长期的投入。 +想要真正觉得一些事情“很有意思”,产生“反复做这件事都不会厌倦”的状态,需要我们有“能力”足够充分地感受到这件事的美妙之处。用拥有这个能力需要持续投入,而品尝到美妙之处也需要长期的投入。 习惯了高频高刺激的短视频后,是很难投入到这样长期的活动当中的。我认为短视频会消磨一个人对于事物的兴趣。 @@ -175,7 +175,7 @@ KnowYourself有[一期文章](https://www.zhihu.com/question/299527411)谈到了 --- -## 关于 “人生苦短,及时行乐” +## 关于“人生苦短,及时行乐” diff --git a/content/posts/前端静态资源加载的一些优化.md b/content/posts/前端静态资源加载的一些优化.md index c0a54f5..feb5862 100644 --- a/content/posts/前端静态资源加载的一些优化.md +++ b/content/posts/前端静态资源加载的一些优化.md @@ -1,7 +1,7 @@ --- title: 前端静态资源加载的一些优化 date: 2022-05-06 -description: 最近在折腾优化博客,由于全站都是部署在Netlify、Vercel的CDN上,都是海外节点,国内访问延迟高,在想办法优化下访问速度和体验。这篇文章来探讨下前端CSS和JS资源的加载。优化目标主要就两个:1. 尽可能快,但是不希望我引入的辅助性第三方库影响到页面体验,不要阻塞主要内容渲染. 2. 为了快第三方静态资源肯定是上CDN,但是要有容灾,CDN挂了要能fallback到其他url +description: 最近在折腾优化博客,由于全站都是部署在 Netlify、Vercel 的 CDN 上,都是海外节点,国内访问延迟高,在想办法优化下访问速度和体验。这篇文章来探讨下前端 CSS 和 JS 资源的加载。优化目标主要就两个:1. 尽可能快,但是不希望我引入的辅助性第三方库影响到页面体验,不要阻塞主要内容渲染。2. 为了快第三方静态资源肯定是上 CDN,但是要有容灾,CDN 挂了要能 fallback 到其他 url categories: - 技术 tags: @@ -13,22 +13,22 @@ tags: -最近在折腾优化博客,由于全站都是部署在Netlify、Vercel的CDN上,都是海外节点,国内访问延迟高,在想办法优化下访问速度和体验。线路部分的优化可以看另一篇文章[国外静态网站托管服务商国内速度对比及线路优化](https://blog.colinx.one/posts/%E5%9B%BD%E5%A4%96%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99%E6%89%98%E7%AE%A1%E5%9C%A8%E5%9B%BD%E5%86%85%E9%80%9F%E5%BA%A6%E5%AF%B9%E6%AF%94%E5%8F%8A%E7%BA%BF%E8%B7%AF%E4%BC%98%E5%8C%96/)。这篇文章来探讨下前端CSS和JS资源的加载。 +最近在折腾优化博客,由于全站都是部署在 Netlify、Vercel 的 CDN 上,都是海外节点,国内访问延迟高,在想办法优化下访问速度和体验。线路部分的优化可以看另一篇文章[国外静态网站托管服务商国内速度对比及线路优化](https://blog.colinx.one/posts/%E5%9B%BD%E5%A4%96%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99%E6%89%98%E7%AE%A1%E5%9C%A8%E5%9B%BD%E5%86%85%E9%80%9F%E5%BA%A6%E5%AF%B9%E6%AF%94%E5%8F%8A%E7%BA%BF%E8%B7%AF%E4%BC%98%E5%8C%96/)。这篇文章来探讨下前端 CSS 和 JS 资源的加载。 优化目标主要就两个: * 尽可能快,但是不希望我引入的辅助性第三方库影响到页面体验,不要阻塞主要内容渲染 -* 为了快第三方静态资源肯定是上CDN,但是要有容灾,CDN挂了要能fallback到其他url +* 为了快第三方静态资源肯定是上 CDN,但是要有容灾,CDN 挂了要能 fallback 到其他 url ## 静态资源异步加载 -`prefetch`、`preload`这些预加载技术暂且不谈,博客站点没那么多资源。这里主要是用`async`和`defer`来控制脚本异步加载,以避免阻塞DOM解析和页面渲染。 +`prefetch`、`preload`这些预加载技术暂且不谈,博客站点没那么多资源。这里主要是用`async`和`defer`来控制脚本异步加载,以避免阻塞 DOM 解析和页面渲染。 -使用`async`异步加载,对于[pangu](https://github.com/vinta/pangu.js/)这种会影响到内容呈现的使用`async`,对于统计类第三方库使用`defer`延迟加载,到DOM加载完再执行 +使用`async`异步加载,对于[pangu](https://github.com/vinta/pangu.js/)这种会影响到内容呈现的使用`async`,对于统计类第三方库使用`defer`延迟加载,到 DOM 加载完再执行 -有些第三方库需要手动init,这样就不能使用`defer`、`async`关键字加载资源了,**`defer`和`async`关键字只适用于远程资源**,本以为把远程资源的`