普通视图

发现新文章,点击刷新页面。
今天 — 2025年5月9日首页

刻板偏见诞生路径

2025年5月9日 11:03

经过当事人同意,想以一个案例来聊聊「刻板偏见」这件事。这个案例是最近从博客来 Telegram 上面私信我的朋友,他留言的方式很有趣:

我觉得你很有趣,想跟你聊一聊。

这句话可能也是很多人在打破社交第一层屏障惯用的台词,所以我回复对方「如果我不有趣,是不是就不想跟我聊了」,他接着回我「你如果这样说,我会觉得你确实很有趣」。

我们聊的内容,是他被自己亲密对象指控「刻板偏见」这件事,他摸不清楚到底什么是「观点的表达」、什么是「刻板偏见」?于是我问了他几个问题,也是我们日常生活中最常见的刻板偏见:

  • 开车时遇到一辆占着超车道缓行的轿车,你认为是?
  • 进电梯时,一个年轻人上下打量你后,朝着轿厢角落挪了挪,你认为是?
  • 餐厅服务员对前桌客人笑脸盈盈,轮到你点餐时却面无表情,你认为是?

他几乎无法代入场景当中,和我纠结了很久「题干」里的「人」到底是一个怎样的人。其实大部分人在听到这三个问题时,也在纠结「题干」,因为信息不全必定会导致认知偏差的出现,那干脆就利用认知偏差引发的「刻板偏见」呢?

我让他用直观感受来想象这三个题干里的人——他觉得第一个是新手女司机、第二个是身材走样的满脸络腮胡的 GAY、第三个是好色的男性因为前一个客人是女性……哇,我好爱这些答案!用刻板偏见竟然可以细化到性别、性向、外貌甚至是性格。得出这些答案的原因,是因为他在现实生活中遇到过类似的场景,所以觉得这一类人大概率是相似的。


事实上,他最开始和我建立联系的那句话也很像是「刻板偏见」,是因为定义了我对于他而言是「有趣」的,所以我才有了「资格」可以供他聊聊天。他认为这是「主观感受」且是正向的主观感受,所以也在表达一种观点。

但如果对方并不是一个有趣的人,或者他很厌恶别人说自己有趣呢?「我认为」的难点就在于,如何确定你的认为正好就是当事人所期待的呢?其实我在《为什么人们开始不会“提问”了?》有提到过「技巧」一事,核心是在于从「我认为」变成「看见对方」。但这两个抽象的语义好像又是在说同一件事,是因为我看见了你,所以我认为你很有趣。那如果「有趣」有具象化的表现了,就拿这位朋友跟我的开场白而言,想要说中我们这种创作博客又臭屁之人的内心,把「认为」后置,先从一个看似客观的事实引出「特别」:

我看你每天都更新博客,你好厉害。

不过如果他针对我说了这种话,我也会回复一个「有事说事」——是的,游戏规则他妈的都在我这里哈哈。当然啦,这是一种底层逻辑的技巧,即引出对方最「特别」的点作为开场,而不是「我觉得你是一个怎样的人」。

他问我如果是我想跟一个人聊聊天,应该如何开场,我只会以「我们可以聊聊吗」作为开场。结果他又开始多虑,觉得这样的开场会不会缺乏目的性,会让人觉得打扰,万一对方因为不清楚你来的目的而拒绝聊天呢?

看吧,是不是关注点又都回到了自己身上?


我以前做过一个星座 APP 的产品经理,产品刚上线需要伪造大量的活跃用户,就需要在不同的内容下面安插「假评论」。这个数据库的工作交给了文案处理,结果她写上来的文案都是「哇,这篇文章好棒」「很有深度」「没想到还能这样分析**座」……

一个星座 APP,上面提到了自己的星座,人们最关心的是什么?

回到最开始提到的,大部分人之所以会纠结题干,是因为信息不够充分,才无法代入场景,但利用刻板偏见又可以轻松地模拟出题干里的要件——为什么?因为当信息不够时,我们只能从自己的认知世界里寻找比对的答案。

没人会关心(全世界的)摩羯座运势如何,他们关心的是(我这个/与我相关的)摩羯座的运势如何。

这也是我帮老婆做了十年星座运势公众号发现的问题,他们不会因为一篇运势很准而转发朋友圈,因为这就意味着他们的「运势」作为一种信息差被其他人看到了。所以这么多年以来,运势相关类的图文不可能有很高的扩散程度。

「我认为」的核心是「我希望是如何的」,「我觉得你很有趣,我们可以聊一聊吗」就是我希望能跟你聊天,所谓的有趣不过是看上去的「我很懂你」罢了。换句话说,想要聊一聊不就是「目的」吗?你会觉得对方不明白这个目的?制造假评论的核心,是让这些人变成一个个「只能先看到自己的人」,比如「我男朋友是双子座求分析」「处女座今年 6 月份有复合的可能吗?」「说得太准了,我真的很讨厌我的狮子座同事!」……


但反过来,因为眼里没有别人,所以当他们真的需要互动的时候,就拿简中博客圈来说,目的性变成了「我需要到处建立我的 SEO」,所以你常常会看到那些文不对题的、或者说只是看到了文章标题或者几行关键词就开始到处评论「留爪」的评论。

另一种,就是这位朋友身上发生的「小心翼翼」,他觉得如果不把事情交代清楚,很有可能会被拒绝,只要我「够真诚」,对方就越难拒绝我——那够真诚的目的到底是想要表现真诚,还是想要促成那个我能和对方聊天的「目的」呢?

于是这件事情再加码,即如果我都只关注到自己,是不是对方也会察觉到自己的目的。所以便开始堆砌大量的「赞美」,当这些赞美又不是出于真正「看见对方」的时候,就变成了刻板偏见。然后刻板偏见又会反过来作为评价去筛选他人——她是一个女权运动者,所以她的言论不可能帮男性说话;他是一个有妇之夫,他有什么资格来聊 LGBTQ+ 的话题;她是一个不婚主义者,所以她根本不可能理解婚姻的意义……

就此,刻板偏见的路径完成闭环:

看不到对方 → 所以我认为 → 依旧没有真正看见对方 → 刻板偏见 → 我看透了对方 → 再也无法看到对方

我给这位朋友的建议是,我们尊重观点,但需要思考观点是如何诞生的——比如「开车时遇到一辆占着超车道缓行的轿车」里的司机就一定是女司机吗?结果可能有两种,一种真的是「女司机」,所以结论是「我说吧」;另一种结果发现是「男司机」,于是就会进行性别羞辱「开车开成这样是不是男人啊」。

这两种观点诞生的路径就是源自于「刻板偏见」,且修正没有意义,除非真的跟他发生了追尾,才知道这个人开车紧张兮兮的当事人拿证以来第一次开车,是因为想要送临盆的妻子去医院——当然,这是我从剧本的角度构建的冲突感,但如果真是这样的,人们又会因为这样的结果而感到内疚。


当然不能否认的是,刻板偏见是我们认知系统里的「最短路径」,可以最快地定义一件重复性人或事、甚至是对未知事件最快归纳。它更接近于一种「生物本能」,即看到老虎就会大量分泌肾上腺素准备爆发时逃跑一样。

若不需要深入交往,启动了刻板偏见划分了属性之后,或许就不会再跟这个人有任何的交集,当下这样的处理模式更像是一种大脑的省电模式,至少不会为不需要耗费精力的人浪费更多。但很可悲的是,当刚才我提到的「闭环」形成之后,这种刻板偏见的闭环将会用在生活中的方方面面,最后还要怪这个世界不理解自己,或是自我合理化——「我才是那个最特别的人」。

然后在「最短路径」里寻找成功的方式,却只能通过否定那些「长途努力」来证明自己是对的。

好了,这就是刻板偏见的底层逻辑的「底层逻辑」。

昨天以前首页

4月杂记 动物园 鱼缸电机炸机 停电

2025年4月30日 15:58

4月

4月份的记录姗姗来迟,整个4月没做什么事情,一直都是事情推着我走,上线了一个服务,做完发现有无数相同服务,等于重复造轮子,我再也不重复造轮子了,新的折腾点是最近再美化xiunobbs,准备做一个社区,不是我之前Ai开发的社区Voyseek。 这次是拿现有系统美化的。

唐山动物园

首先是去唐山玩,去了唐山动物园和唐山博物馆,到了动物园天气很好,发现大熊猫在睡觉,根本看不到,带着闺女在大熊猫玩偶前面拍照半天,看了很多东西。我很意外唐山动物园的动物明显比北京动物园生活好,吃的都胖了。北京动物园每次去,都对那些动物报以同情。

 

停电了

其次是停电后,我鱼缸的电机炸了,非常意外的意见,之前也总停电,还没有遇到电机炸的。养了一缸孔雀鱼和辣椒蟹,小螃蟹都捞出来,螃蟹无氧会死。然后立刻联系商家,品牌是Yee的2.5L侧挂过滤,去年买的,还在保质期。把点击邮寄回去,然后再寄回来,花费了大约四天左右。孔雀鱼果然结实抗造,一点事没事。完美衔接,然后再把小螃蟹们放回鱼缸。

停电那天有点坑,停了很久,晚上回家我一路从一楼爬到20层,中间歇息了一次,然后就发现楼梯应急灯都仍然给砸了,每一层砸一下,气的我在业主群大骂,也不知道哪个孙子干的,后来我看到有邻居直接在电梯憋了一个小时才出来,差点笑死😄

接触自然

天气转暖后,闺女每天都要在小区公园玩半天,之前发现闺女怕蚂蚁,这次有意识的带她玩蚂蚁。捉住小蚂蚁,然后用小棍子捅,现在已经不怕蚂蚁了,没事就直接拿手抓,这样也很好,比怕这些小蚂蚁小虫子强多了,小孩子还是要接触自然。

新的折腾

前几天看到Koobai老哥的店铺转为金牌卖家,我就想起来自己原来的宝淘店也是金牌卖家,因为和供应商的拉扯就关闭了。楼下开电商店铺的兄弟前两天换了个大奔,邻居小哥我直接🌹眼红,犹豫是否把淘宝店重新开起来。之前淘宝店还是赚钱的,就是因为供应商闹的,店铺被折腾废了,不过这个事情只作为一个副业试试,这两年的经济形势,凡事不大折腾,大折腾必挂。稳一点要比激进强太多了,凡事稳中求进。如果开店,我会厚颜在此要求博友苦力帮我刷单。

总结;4月份就这么过去了,五一马上来了。今年五一应该不会走远,还是带着孩子四处玩玩吧。提前祝福各位五一劳动节休息快乐。

自证陷阱能挖多深?

2025年4月6日 11:00

最近有一位从博客找到 Telegram 的创作者(我姑且称之为是创作者,因为他和我聊天的内容都是围绕着创作)。很可惜,我本想着今天来整理跟他的聊天记录,结果没想到他已经把我们彼此的聊天记录给删除了。

他找到我,是因为我在博客的文章里,提及过我曾坚持过 500 日写作,总计完成了 170 万字,他帮我做了一个数学题,即每天平均要完成 3400 字,这件事情本身值得质疑。所以他实际用另一种逻辑陷阱让我回答了几个看上去毫无干系的问题:

  • 我那时在做什么工作?
  • 我那时每天什么时候安排写作?
  • 我那时创作的内容是什么?

这是非常标准的「自证陷阱」的套路,因为这些问题会扯出更多的需要自证的内容。所以我用另一个方式让这个自证游戏变得更具有「参与感」。

我给了他一张截图,证明当初的《∞》坚持到了第 1700 篇文章(每天 3 篇,即 566 天左右),总计 1,741,300 个字。参与感的部分,就是让对方选择 1 到 1700 里的任意三个数字,我将这三个序号的文章内容展示出来。同时,如果该数字前后的内容是属于「系列」的,即当天的文字内容在聊一个话题,或是在完成同一部小说,他可以选择是否要看「关联性」的证据。


于是下一个自证陷阱出现了:如何证明这些内容的时效性?

因为当初的坚持写作并不是按照「日记」的形式,它和 2022 年坚持的每日写作不同,它没有一个「宏大叙事」作为背景线索,所以我能轻易地证明 2022 年每一天的坚持写作与社会正在发生的疫情闹剧的关联性。

所以我把自证游戏上升了一个层级,我需要自证「结果主义」。

我承认我无法证明时效性,就算里面确实提到了一些明确年份,但他仍然可以觉得我这是临时修改的,因为无法判别文章在「宏大叙事」里的关联性。所以我建议开始讨论「它们为什么没有被发表」。

果然,他掉入了我预设的圈套,开始质疑我为什么从未「发表」过。

我解释了当初在 LOFTER 的创作,以及最后因为敏感词审查注销 LOFTER 的情况。接着,我将这个「结果主义」的陷阱引至更难自证的「动机陷阱」。他果然开始质疑起我的动机:他显然不相信一个创作者会毅然决然地删除自己 170 万字的创作内容,以及在现在有了独立博客之后这些内容也没有再发出来,这「不符合」创作者的动机。

见他掉入圈套,主动权就回到我的手上:

以下内容我只能尽力回忆起我们的聊天内容,我对自己所说的内容记忆比较深刻,因为它本身是预设好的逻辑陷阱,关于对方的回答我只能大概还原内容。如果当事人有幸能看到这里,也可以从你的视角还原客观事实。

「你为什么觉得创作者就一定不会删除已创作的内容?」

他认为那是「作品」,是创作者的心血,它们本应该公之于世,才能体现出自己创作的价值。

「那也就是说,你赞同《写博客是为了自己就别他妈发表出来啊》的观点?」

他认为博客性质不同,别人想写什么那是别人的事。

「那我作为创作者,把已经发表的文章删除了,是否也意味着这是我的事?」

他认为这个逻辑说不通,因为我既然在博客炫耀了 170 万字的结果,那就应该证明其真实性,也应该接受他人的质疑。

「炫耀这个赛道我们先放一放,先回到我作为一个创作者是否拥有删除已发表文章的权力。」

他认为那是我的事,但是质疑我的真实性是他的事,不冲突。

「那如果这个时候,有人在自己的博客装逼,我是不是也有质疑其真实性的权力?」

「那如果对方认为这是他自己的事,发表出来的文章也是为了自己,那我是不是可以质疑你别他妈发出来?特别是还要被各种博客聚合网站抓取并公开出来。」

「除非你觉得这就是创作者普通人的区别,创作者发表出来的文章就是希望被看见、应该被质疑的,而普通人的博客就是经不起被质疑?

他认为这是当事人自己的选择,跟别人如何看待没有关系。

「那我们可以质疑那些博客主发布内容的真实性吗?」

他认为没必要,那是别人的成果。

「那你质疑我成果的原因是什么?」

「这个时候,再回到炫耀这件事,你既然觉得我是在炫耀,那我现在证明了我有实际的资格可以炫耀,那我帮你引导至动机层面,质疑我的创作动机有问题。」

「那你质疑我的到底是内容,还是质疑我的创作动机?」

推荐你质疑创作动机,因为它对我甚至是每一个创作者来说是无解的。比如之前就有人质疑我的动机其心可诛,所以我创作的内容不值得一看。

他认为这是别人的权力。

那这样的质疑可以作为定义别人成果的依据吗?

他认为不能,但同时切换了赛道,认为我写的东西太过激进,并不适合公开发表。

于是我们的赛道又被换到了「感受」层面,是因为他觉得我的内容过于激进。一旦进入到「感受」层面,就会进入到比「证明动机」还要困难的领域,即「唯主观不可破」。他只要咬死「就是不喜欢我」的结论,这个时候无论何种证明都将是越来越深的「自证陷阱」。这也是大多数情况下,吵架吵崩的根本原因:一旦就事论事被「感受」带偏进入到「唯主观不可破」的领域,那就不可能再有解决问题的机会,因为大部分的事情都变成处理「不同频争吵」

本着「参与感」贯穿始终,我最后给了这位朋友两个选择:

  • 我们双方同意立刻停止聊天,因为我们现在再聊你主观世界的事情,我无法扭转你对我、以及我的作品的看法;如果可以,你可以继续关注我的博客,如果有观点上的交流,我们随时可以在这里进行;
  • 我单方面希望结束我们现在的聊天内容,因为我无法扭转你的主观;如果你想继续聊天,我可以回复「认输」的聊天内容单方面结束我们的聊天内容,这样也让你来找我聊天这件事有个闭环;

结果,他没有回复我,就发生了最开始提到的,他删除了我们彼此的聊天记录。


以上,就是如何脱离自证陷阱,以及为对方设下主观陷阱的流程,总结一下:

  • 脱离自证陷阱
    • 避免回答毫无干系的问题;
    • 回到问题本身,你需要我「证明」什么?
    • 在证明的时候保留部分数据/内容,而不是全部公开,否则公开的数据很有可能会引发新的自证陷阱;
    • 将自证陷阱引导至「动机陷阱」;
  • 动机陷阱的陷阱
    • 质疑动机是对「个体」的质疑,将「个体」拓展到「群体」,迫使质疑动机出现自相矛盾的情况;
    • 东风破,你比东风还要破。都已经被质疑动机了,承认自己「烂」反而无敌;
    • 质疑质疑动机的动机;(字面意思)
  • 避免深陷唯主观不可破的领域
    • 如无法就事论事,一旦进入「唯主观不可破」的领域,及时抽身,不要妄图改变一个人的主观认知;
    • 比起「讨好」对方,不如联合「敌人的敌人」;
    • 你又不是人民币,为什么人人都要喜欢你;

像闪电一样加载WordPress页面:插件组和优化教程

2025年3月27日 14:16
在不使用CDN的前提下,如何提高网站的速度?想要让网站拥有像闪电一样的加载速度,最好的办法是启用缓存、无图、精简样式文件和字体文件等。我看了很多博客,几乎都是这个思路。

基础操作思路

使用对象缓存插件,比如Memcached、Redis等。
使用将WordPress等动态页面转为静态缓存的插件,比如SuperCache、LiteSpeed Cache、W3 Total Cache等。
使用图片压缩软件,如Smush、EWWW Image Optimizer、ShortPixel等。
今天我换个思路,刚刚把网站的Memcached停用,只启用SuperCache缓存,将WordPress的动态页面转为静态缓存。这是基础,毕竟动态查询还是比较慢的。在此基础上,再增加几块调整。

图片优化

目前这个优化方案针对的是我的博客。由于我比较喜欢放图,尤其是自己的臭脸图,所以图片优化就是重中之重了。
首先检查网站的首页调用的特色封面图片,质量非常大,一张就有8兆大小,首页还有很多这样的图片,无形中增加了加载的负担。这里我们的处理方法是通过钩子将首页的图片替换为缩略图,8兆的图片最后的大小变成了12k。

图片尺寸设置

在后台的设置>媒体中,你可以自己设置媒体大小。我的设置是:缩略图250px、中等580px、大图1280px。基本上这三个尺寸满足了大部分的使用场景,具体的质量大小建议你自己根据自己的博客来设置。
设置完后,使用缩略图生成插件。这里主要是特色封面生成,不需要生成其他图片,因为一般首页调用的都是封面特色图片。点击精选生成特色图片。
生成完缩略图后,小、中、大的尺寸就和你在媒体设置的保持一致了,我们就有了足够低质量的图片来作为首页和文章页面封面调用的来源了。插件名称:Regenerate Thumbnails。直接在后台插件市场搜索即可,启用然后在工具>重制缩略图中使用。
通过插件调用封面的缩略图,我没有直接修改主题代码,因为我平时总换主题。所以自己写了一个插件,用于直接选择调用首页和文章页面的特色封面质量。
你可以有三种选择,我的设置标准为首页缩略图250,文章页面580。这个插件不涉及数据库操作,不会影响网站性能,可以放心使用。
插件下载地址:optimize-thumbnails_T8GJX.zip

提前加载页面

提前加载页面这个思路,我是在@bosir的博客看到的。他提供的一个工具是instant.page,我发现一些博客主题已经集成了这个工具。提前加载的思路是:当我们访问网页的时候,鼠标悬浮在链接上,浏览器自动提取加载。当你点击的时候,其实已经加载过数据,这就造成了一种错觉,页面打开就像闪电一样。这个工具可以通过代码调用:
<script src="//instant.page/5.2.0" 
type="module" integrity="sha384-jnZyxPjiipYXnSU0ygqeac2q7CVYMbh84q0uHVRRxEtvFPiQYbXWUorga2aqZJ0z"></script>

我也尝试通过代码调用了,但是加载的时候出现的效果是:有时候能用,有时候不能用,整个流畅性有问题。后来的思路是将js文件下载到本地,然后加载到主题里。鉴于我总换主题,就容易忘记添加代码,所以写了一个插件将这个功能集成到插件里面。开启后自动启用提前加载效果。核心代码基本上就几行,这里仍然不涉及数据库操作,可以放心安装插件,不会影响数据库加载。
插件下载地址:Jef-instant-page_NfJxN.zip

整体优化思路和插件组合

整体思路也比较简单:为特色封面设置小、中、大三个尺寸。
通过插件Regenerate Thumbnails重新生成尺寸,
通过插件JefThumbnails Size调用合适的图片质量,
通过Jef Instant Loader插件提前加载页面。
本文中使用的插件有:SuperCache动态生成静态、Regenerate Thumbnails缩略图重制、JefThumbnails Size特色封面质量选择来源、Jef Instant Loader提前加载页面,就这四个插件。

 

体验效果

优点:整体优化完换,删除浏览器缓存访问博客,速度有非常明显的提升!点击页面的加载的确有闪电一样的感觉。

不足:第一次访问首页的时候,速度仍然没有那么快,和bosir的首页加载仍然有差距。限制我的有两点,我的首页图片较多,无形中增加了加载成本,第二服务器是香港服务器,受到带宽影响和bosir国内的服务器没法比。

AI辅助:

文章排版由KIMI完成,代码开发由Cursor完成。

结尾

本文感谢 @bosir@沉沦 两位博友提供了具体的方法和一些借鉴性思路。针对于本文的具体使用,建议无图的下载插件JefThumbnails Size感受提前加载页面的魅力;如果博客图片比较多,又不想通过代码改主题的,直接安装插件操作即可。
如果你真的想体验闪电的速度,还是建议使用国内服务器,同时降低首页图片使用,或者无图。cdn也是一种不错的选择,本文的像闪电一样,到这里你知道了,纯纯就是标题党,闪电是达不到的,但是确实能够提升很大幅度的访问速度。

再小的个体也要建立自己的个人品牌

2025年3月25日 00:00

土木坛子

某日听我朋友也是前同事讲,他说他身边至少有4个朋友在我的影响下,开始了写公众号,包括他自己。这倒是我没有想到的。

实际上,我已经很多次和别人讲——尤其是年轻人,建议开启自己的自媒体。正如微信公众号的官网有这样的一句话,“再小的个体,也有自己的品牌”。再小的个体也要建立自己的个人品牌,用现在时髦的话来讲就是:个人IP。

严格意义上来讲,我是从2006年开始写博客日志,到如今差不多20年了。这么多年的经历下来,这件事对我的受益或许是最大的。这么多年来,我分享记录自己的经历,这么多年的所想、所思、所见和所得,一切都是随性分享,愉悦自己,甚至也没想到给别人带来什么用处。

但是,当一个人在自己小众的范围内去研究,只要做得比别人好——哪怕好那么一点点,你的能力会得到增长,认知会提升,你分享的东西会被别人看见,当实现了这些之后,赚钱的事情也就自然水到渠成了——如果你有需要的话,财富本来就是对认知的变现,否则有了也守不住。

你的公司可能会裁掉你,甚至它自身也可能会倒闭,但是你的创作内容和创作能力永远属于你自己,这是你的个人主权。你分享自己的见解,锻炼了自己的能力,而这些原创内容在不同平台传播的边际成本很低,并且它会随着时间不断地被重复,不断地被扩散,不断地被人看见,假以时日会产生复利的作用,产生飞轮效应。

这就是我作为一个写了近20年博客文章的人的真切感受,它带给了我超乎想象的收获,而很多人都不知道或者相信自媒体的魔力,更没有去认真执行。

AI编程 20分钟Cusor创建一个WordPress网站插件

2025年3月19日 17:55

目前,AI编程非常火爆,昨天看到@沉沦暴兵,一天发好几个插件,很多人很好奇怎么做的,正好把之前的一些操作经历整理一篇文章,之前通过Cursor创建了一个社交网站 ,该网站包含了最基本的注册、讨论、发帖、前台、后台、用户管理等功能。

作为一名互联网人,虽然我不会写实际代码,也从未学习过编程,但AI编程帮助我将一些想法变成了现实,我觉得很有趣,今天把整个流程分享给出来,以便于感兴趣的人直接可以直接上手,比想象的简单的多。

产品设计

今天,我们将花费20分钟创建一个WordPress网站插件,在开始之前,我们需要明确以下几点:

  • 插件的基本功能是什么?
  • 插件的性能要求,是否需要处理网站数据,是否有前后台数据交换?
  • 插件的基本布局和界面设计是什么样的?

确定了这些之后,我们开始第二项工作:撰写提示词。以我们的插件为实际案例,整理这些提示词。提示词可以是半成品,因为我们可以通过AI再次细化。我建议第一次大家都以作品临摹为主,因为跟着操作一遍熟悉一下整个工作台。

提示词部分:

我要创建一个WordPress插件,该插件的名字为JefBookmark,作者Jeffer.Z,主页www.jeffer.xyz

该插件的主要功能是记录用户输入的网址和网址名称,支持标签功能。输入的书签使用WordPress文章自定义类型实现。

后台功能包括书签列表、添加、编辑、删除等。前台通过短代码调用,可以将短代码插入任何页面调用书签列表。

书签布局为:顶部显示“全部”和标签1、标签2、标签3等,最多支持展示10个标签。这一行的下方为书签列表,列表中的书签包括图标、书签名称(超链接形式),右侧显示该书签的标签。

底部为标签的分页,分页数量可以通过后台设置。

然后,我们打开KIMI或DeepSeek,优化一下提示词,并告诉它要放在Cursor中使用。以下是优化后的提示词:

AI返回的提示词:

插件信息
插件名称:JefBookmark
作者:Jeffer.Z
主页:www.jfnote.com

功能需求
1. 书签存储
- 使用WordPress自定义文章类型存储书签。
- 每个书签包含以下字段:
- 网址(必填)
- 网址名称(必填)
- 标签(支持多选,最多10个标签)

2. 后台管理
- 书签列表:显示所有书签,支持分页。
- 操作功能:添加、编辑、删除书签。
- 标签管理:支持最多10个标签的添加、编辑和删除。
- 分页设置:允许在后台设置分页数量。

3. 前台展示
- 使用短代码[jefbookmark]在任何页面调用书签列表。
- 布局设计:
- 顶部导航:显示“全部”和所有标签名称(最多10个)。
- 书签列表:
- 每个书签显示图标、书签名称(超链接形式)和所属标签。
- 标签显示在书签名称右侧。
- 分页功能:底部显示分页导航,分页数量可通过后台设置。

技术实现
- 自定义文章类型:jefbookmark
- 字段存储:
- 使用ACF(高级自定义字段)或自定义元数据存储书签信息。
- 短代码功能:
- [jefbookmark]:用于在前台页面调用书签列表。
- 模板文件:
- 自定义模板文件用于书签列表的前端展示。
- 样式与脚本:
- 提供基础的CSS样式和必要的JavaScript功能。

插件开发要求
- 确保插件兼容WordPress最新版本。
- 提供详细的文档说明插件的安装、使用和配置方法。
- 确保代码清晰、注释详细,便于后续维护和扩展。

编辑器操作

将这个提示词创建一个readme.md文件,然后把提示词粘贴进去。在你的项目文件夹中,新建一个名为Jefbookmark的文件夹,将md文件拖进去。

打开Cursor后,按下Ctrl + I打开对话窗口,选择支持的编程模型为Claude3.5,然后在输入框中@readme.md文件,直接对它说:“Cursor,请根据该文件创建一个网络书签插件。现在请你根据提供的信息思考下,你要如何实现并列出来插件的大纲,然后将大纲和文件结构创建一个json文件。”

这时,Cursor会开始思考,并列出实现方法,你可以看到窗口它的回复内容,以及它创建的json文件。

这里需要注意的地方,一般cursor会把项目搞得很大,你要求他以最小MVP代码量和文件量实现,如果是特别简单的插件,直接告诉他,请以一个PHP文件完成插件所有功能,根据功能去评估文件大小和数量,不要让cursor制作非常大的结构和目录,那会导致它不停的去创建目录和文件,把代码搞得非常复杂。你也可以在最初的readme文件就通过规则限制它,我一般会看一下cursor会输出多大的结构,然后才会第二次对它校正。这里考验大家的是,你要根据功能判断多少个文件足够它完成代码。如果你的项目很大,一定要自己设计文件结构,而不是让cursor给你设计,那会造成项目过载,使用一对复杂的技术,增加代码工作量。

接着,直接告诉它“请开始实现”,它会创建一些代码和文件。当所有代码完成后,

  1. @codebase在输入框再次和它对话:“请检查全部代码和文件,查看是否有功能和代码衔接的错误,如果有请修复它。” Cursor会进行修复。
  2. 然后再次@codebase,告诉它:“请你做上线之前的最后一次检查,保证插件的激活、启动、停用、卸载正常。” Cursor会做最后一次检查并修改代码。

打包安装

最后,将代码打包成zip文件,直接在WordPress网站插件上传文件包。如果插件没有正常启动,会有提示,将错误提示复制给Cursor,它会进行二次修复。再次上传覆盖插件即可。此时,你就可以在后台添加你的网络书签,并将短代码[jefbookmark]复制粘贴到你想要展示的位置,保存后,再次访问该页面就能看到你的网络书签了。

地址演示

网址:https://www.jeffer.xyz/bookmark

全程花费20分钟,包括代码修复和功能调整。对于有经验的开发者来说,可能只需半个小时就能搞定。如果你是新手,一个小时也能上线你的插件功能。

这里的网络书签只是一个演示,你可以创建任何符合规则的插件,比如表单、数据统计插件、文章伪原创插件等,具体做什么取决于你的兴趣和职业。

如果你有确定的界面和网址,也可以直接把地址丢在窗口,要求他以这种界面输出,输出级别比如1:1,比如参考整个布局,比如参考样式配色等,和Ai沟通尽量以最简洁是对话让ai理解,如果说不清楚就丢图片和网址,Cursor也可以阅读图片,然后直接按照图片创作网页。这里拿插件作为演示,是因为插件的门槛最低,一般在宝塔里面修改过PHP文件的博友,我都把这批博友视为可以直接上手Cursor编程选手。

问题修复

也会有一些博友的项目或者插件,主题出问题,修复的方法也很简单,直接将项目解压到目录,Cursor打开该项目文件,然后Ctrl I打开对话窗口,@codebase 让他遍历一遍项目代码,然后说一下这个项目的功能是什么,整个文件结构是什么样的。这是第一次对话,你需要它熟悉项目。

第二次对话,选择出问题的文件或者文件的目录,在对话窗口将问题描述,然后 @该文件或者该目录,第二次对话不要求他立刻实现代码,一定要先问他是什么问题,Cursor会定位出来问题,然后你告他,请思考几种方法可以修复,并且告诉我几种方法的优劣势,然后他会告诉你。

如果一直无法定位到问题,一般有可能出现导致的,AI当前被降智,你引用的文件位置错误,或者你提供的问题和实际的文件不匹配,一般项目越大越复杂,引入的变量越多,越难以定位到问题本身。

其他注意

  1. 账号购买:去某宝买共享版3人500条高速,不要买号池账号,号池账号不稳定会降智的。
  2. 汉化处理:随便找一个Ai问一下,会给你教程。
  3. 适合人群:编码是否适合小白和程序员,适合任何可以通过键盘打字的人。
  4. 屎山代码:创建的代码是否为屎山,如果你不规范它就是屎山,屎山与否取决于使用人在创建产品之初,给Cursor设计的代码目录结构和前提。如果你本身就可以阅读代码,这样更好,你可以要求他使用具体方法,什么框架,以什么规范创作。
  5. 产品范围:还能写什么?可以写APP,小程序,网站,脚本等等。
  6. 需要工具:www.cursor.com 直接注册,赠送免费50条额度使用,但是有一个前提,打开编辑器对话需要开魔法节点,建议使用香港节点。

End

如果遇到问题,可以评论区讨论,现在很多博友都在用,经验比我丰富的也很多,我这里写一篇作为抛砖引玉,没有过多的去截图,因为整个cursor的使用教程非常多,大家直接B站就能搜索到,基础操作熟悉一下就可以,这里更多的是提供做产品的思路。

创作需要纯粹性吗?

2025年3月5日 23:59

一位朋友因为读了《写作与创作之间的黑洞——小说创作》后,顺藤摸瓜找到了我的Telegram跟我聊了起来。他觉得我不应该去定义他人小说的「类型」,如果别人的创作初衷不是我所说的类型呢?除非创作者从一开始就有意识地规训自己,才能保持创作的纯粹性。但是一旦创作变得有目的性,是不是就失去了创作的「纯粹性」?


何为纯粹性?

这并不是一个好界定的东西——毕竟我当年曾「大逆不道」地说过「创作并不是为了自己」这样的论调。每个人理解的纯粹性并不相同,为自己并且能够一直通过为自己而写,寻找到自己真正的「想要」,这也是一种纯粹。

当然,纯粹这个词本身就是暧昧模糊的,因为它无法单独以绝对的方式而存在,必然需要一个与之对应的标的,才能够体现出纯粹性。

例如,那些带有功利性质的,为了市场而创作的作品与内心真实独白,是为了自己而创作的作品,本身在某种程度上是「对立」的。所以按照中国式逻辑,如果想要证明为自己而创作是「正确的」,最佳途径就是去否定那些功利性质的创作。

所以,这一小节,我很难把「纯粹性」解释清楚。包括和这位朋友在Telegram上面聊了大半天,最终也只能得出「纯粹性」是非常个人化、经验主义的。

如果我们排除纯粹性的「对错观」,如果你觉得自己正在做自己想做的事情,那纯粹性的定义又变得非常简单。但这里又引申出了一个新的问题——我们如何保持「纯粹性」,即我们如何时刻定位自己,正在做自己想做的事情?

自此,纯粹性进入到了哲学领域,变得更加无解。

写作是对当下的思维方式和思想的真实反映,如果一直坚持写作,就能根据时间线看到自己思想不断进化和演变的过程。

《如何获得取之不尽的写作灵感?》|極客死亡計劃

Eltrac的这段话,很好地诠释了「纯粹性」的定义——纯粹性是流动非固定的。需要有时间维度的存在,才能够保持所谓的纯粹性。否则,所谓的纯粹性永远都是一个过时的点,都将是上一个你信誓旦旦发下的誓言。


创作的封闭性与开放性

花了一节的内容解释「纯粹性」,是为了抬高门槛规避掉「口头创作者」,也就是所谓的「我有一个非常棒的想法,但是我还没有写出来」的人。

当创作开始,就会进入到下一个阶段——「我写出了个啥?」

也就是说,我在《写作与创作之间的黑洞——小说创作》里提到的「类型」,是结果上面的分类,而不是「纯粹性」上面的分类。这里就会引发第二个很难界定的东西——「类型」是自我认定的,还是他人认定的?

在这里,我有必要再次强调一件事——创作类型、创作的纯粹性等看上去有诸多分类,内部并没有「对错」、「优劣」之分。并不是说「内心型」的作品就一定比「人物型」的作品「差」。但是,当作品需要追加一个「观众」维度的时候,才会出现「观众能否读懂」的差别。但这个差别仍然没有「对错」之分。

那么作品到底需不需要「观众」呢?我坚持的观点是需要——并不是需要观众对作品做出评价,而是作品本身是链接创作者与观众的存在。因为我是一个需要与他人产生链接和互动的人,所以我秉持作品的公开。但不可否认的是,一些作品也具有强烈的「对内」性。区别在于,是谁作为了作品的主体,去感受了「纯粹性」的存在。

刚才提到了,「纯粹性」是流动性的,在时间轴的两端,因此存在自我见证和他者见证的区别。同时,他者见证又同时可以为自我见证带来更多的反馈。类似于你和读者在一同成长,且读者见证了你的成长。


非纯粹性创作

首先,需要明确一点:创作需要纯粹性吗?

似乎这个问题跟最开始讨论的内容重复了。但现在这个纯粹性,是「对外的」。这似乎是一个「自证陷阱」,但当人们开始怀疑你创作的纯粹性时,你要如何自证?举个例子,当作品被人质疑时,一些创作者可能会说「我的作品是给能看懂的人看的」。至于是不是真的有人能看懂,或是整个「市场」对于作品的看法都是「看不懂」的时候,要如何证明创作的纯粹性?

很显然,这件事情几乎无解。因为一旦「纯粹性」在有第三人参与的时候,就必然需要面对他人评价的考验,且我们根本无法控制别人的认知和评价。那要不要认同别人的评价、我需不需要对抗他人的评价、我要不要为自己的作品证明纯粹性,就变成了作品之外的糟心事。

很显然,一旦开始纠结这些事情,纯粹性就会受到考验。甚至连自己都很难说服自己,进入到对内攻击的死循环。

你是不是发现问题了——「纯粹性」在对内的时候,需要持续的产出,才能体现出纯粹性的流动性;而「纯粹性」在对外的时候,人们可以以任何理由来质疑你创作的「纯粹性」,这个时候「纯粹性」就不复存在了——除非,你能在「质疑」声中继续创作,坚持自己的「纯粹性」,使得纯粹性继续保持流动。

根本问题不在于你如何维护「纯粹性」,而是你得继续,通过在单向的时间线上留下足够多的印记,才能证明「纯粹性」的存在。

需要「纯粹性」的并不是创作,而是当人们在失去创作的动能时,对自我的麻痹和对外的解释——

正因为我保持了创作的纯粹性,所以我才停止创作,去寻找所谓可以证明创作纯粹的纯粹性。


因此,试图用「我不希望你定义我的小说是何种类型」来证明「纯粹性」的,是不是应该先拿出「作品」,再来聊你在坚持怎样的「纯粹性」?

别他妈倒果为因~

静态网站优化方案

2025年2月27日 10:11
最近加了不少好友的友链,认识了许多网站上的朋友。由于众所周知的原因,有些国外服务在国内访问较慢,部分朋友的站点因此影响了国内用户的访问体验。为了帮助大家提高访问速度,我写了这篇文章,简单介绍了一些我所了解的网站加速方案,希望能够帮助更多朋友改善速度问题。

Jefrss Reader Lite1.03 WP-Rss博友圈展示插件

2025年2月13日 13:35
已经版本升级,这个是老的版本,推荐使用新版本的插件,新版本插件进行重构,支持六种朋友圈展示主题方式。
新版本地址 👉Jefrss Simple
简介:@Jefrss Reader Lite 是一个轻量级的 WordPress RSS 阅读器插件,专为个人博客设计,旨在帮助用户轻松订阅和管理文章更新。它支持多种实用功能,包括 OPML 导入导出、文章内容优化、多语言支持、移动端阅读等,同时提供分组管理和定时抓取功能,非常适合个人博客用户。

本次升级版本:Version: 1.0.3

升级功能

  1. 解决图标显示问题;修复了某些地区无法展示图标的问题,增加了Favicom多服务商选择功能。用户可以在设置中心选择图标服务商,确保图标显示的稳定性和兼容性。
  2. 图标样式优化:增加了调用图标圆角设置,用户可以根据自己的喜好调整图标圆角程度。默认设置为10%,当设置为50%时,图标将变为圆形展示,提升视觉效果。
  3. 短代码调用bug :修复了短代码调用的异常情况,修改count和excerpt_length长度设置。

后续升级计划

  1. 阅读进度展示:将增加阅读和未阅读进度的展示功能,帮助用户更好地管理阅读进度。
  2. 后台阅读绑定:从订阅列表进入阅读界面时,将绑定文章列表和阅读页面的状态,提升用户体验。
  3. 短代码展示:增加多条和不同新版式展示,供博友以不同喜好使用展示界面。

功能亮点

  • OPML 导入导出:方便用户迁移和管理订阅列表。
  • 文章内容优化:提升文章阅读体验,支持多种内容格式。
  • 多语言支持:满足不同语言用户的需求。
  • 移动端阅读:优化移动端阅读体验,随时随地阅读文章。
  • 分组管理:用户可以根据自己的需求对订阅进行分组管理。
  • 定时抓取:自动定时抓取订阅内容,确保用户不会错过任何更新。

使用示例

Jefrss Reader Lite 支持将博友订阅内容展示到 WordPress 的任何页面。具体展示形式可以参考 @邻居 的使用案例。

以下是展示效果的示例:

代码调用[#jefrss_latest count=”5″ excerpt_length=”80″ ] 数量和长度控制展示效果。去掉#使用。
===================
linlinxinglinlinxing
6 小时前

四月Vlog合集

【Vlog2025.4.27】在日本逛花卉(园艺)市场是什么体验? (在Bilibili观看此视频) 返回了东...

白熊阿丸白熊阿丸
12 小时前

近况:在幻觉与无力感之间的荡秋千

这篇文章是我在前段时间心理状态比较低落时,深夜躺在床上、在昏暗的灯光下胡思乱想时,用手机语音记录下来的初稿。经过一番修改才成文。为什么要把它发出来呢?经过一番思...

印记博客印记博客
15 小时前

武汉游记

3月18日晚上,从南昌西站出发,两个小时左右的车程,到达武汉站。 这是一次较为仓促的旅行,但也是期待已久,也是我第一次真正意义上的旅行,去湖南、江西之外的省份。...

===================

下载地址 :@Jefrss Reader Lite 1.03

注意:由于网络原因和过期情况,插件的下载链接可能无法直接访问。如果您遇到问题,请联系站长,提供新的下载地址。

求助 :  大家可以留下一些自己的朋友圈地址在评论区,准备给订阅插件做个主题设置,集成各种各样板式朋友圈,回头给插件用户使用,如果你有自己的朋友圈,可以留下朋友圈地址,不胜感激。

Favicon图标获取Api评测:国内外多个对比使用

2025年2月13日 11:50

一、什么是Favicon网站图标?

Favicon(网站图标)是网站的标志性图像,通常显示在浏览器标签页、书签栏或地址栏中。它是一个小图标,通常尺寸为16×16像素或32×32像素,用于快速识别网站。Favicon不仅可以增强网站的品牌形象,还能提升用户体验,让用户在众多标签页中快速找到目标网站。

二、Favicon图标的作用

  1. 增强品牌形象:Favicon作为网站的视觉标识,有助于提升品牌识别度和记忆度。
  2. 提升用户体验:用户可以通过Favicon快速识别标签页中的网站,节省时间。
  3. 优化网站SEO:虽然Favicon对SEO的直接影响较小,但一个完整的网站结构(包括Favicon)可以提升网站的整体质量,间接影响SEO效果。
  4. 适用于多种场景:除了浏览器标签页,Favicon还用于书签、历史记录、移动应用图标等。

三、目前使用排名较高的Favicon图标获取服务

1. unavatar.io

unavatar.io 是一个功能强大的头像获取服务,支持从多个平台(如Facebook、Instagram、YouTube、Twitter、Gravatar等)获取用户头像。它不仅速度快,还支持全球200多个数据中心的缓存,每月处理超过2000万次请求。此外,它还提供优化功能,包括压缩图片大小和保持高质量。
使用方法
  • 通过邮箱获取https://unavatar.io/sindresorhus@gmail.com
  • 通过用户名获取https://unavatar.io/kikobeats
  • 通过域名获取https://unavatar.io/reddit.com
特点
  • 多功能:支持多种输入方式(邮箱、用户名、域名)。
  • 速度快:全球缓存,响应迅速。
  • 优化:自动压缩和优化图片,节省带宽。
  • 易于集成:提供详细的文档和全面支持。
实际应用案例: 许多RSS阅读器,比如Follow,也使用了 unavatar.io 服务来获取用户头像,提升用户体验。这种集成方式不仅方便开发者快速实现功能,还能确保用户在使用过程中获得高质量的头像显示。
目前本站的插件 @Jefrss Reader Lite    使用的图标服务就是unavatar.io 提供,目前国内的自建服务相对较少,这里希望大佬们多推出一些这方面的服务,我也开发了对应的图标获取服务网站,只开发了一半,目前坑还没有填完的坑太多,短时间没有精力开发它了。

2. 谷歌Favicon API

谷歌的Favicon API是一个简单易用的服务,通过域名获取网站图标。然而,由于网络环境的原因,谷歌的API在境内无法直接使用。
API地址

https://www.google.com/s2/favicons?domain_url=目标网站域名

四、国内可用的Favicon图标获取服务

1. Cravatar

Cravatar 是一个国内的Favicon图标获取服务,由文派官方团队维护。它支持通过域名获取网站图标,并提供以下特点:
  • 自建源服务器:减少第三方回源次数,提高访问速度。
  • 支持WEBP格式:提供超过70%的压缩率,确保快速加载。
  • 三级头像匹配:整合了QQ和Gravatar头像,提供更准确的头像匹配。
API地址

https://cravatar.com/favicon/api/index.php?url=目标网站域名

2. AFMax

AFMax 是一个支持多种图标格式的Favicon获取服务,适合高并发请求的场景。
API地址https://api.afmax.cn/so/ico/index.php?r=目标网站域名

3. IconHorse

IconHorse 提供自动搜索网站图标的功能,并支持隐私保护,不涉及任何cookie和跟踪。
API地址https://icon.horse/icon/目标网站域名

4. FaviconKit

FaviconKit 是一个支持高频率请求的Favicon获取服务,适用于需要大量图标获取的场景。
API地址https://api.faviconkit.com/目标网站域名/

5. Favicon.im

Favicon.im 是一个简单易用的Favicon获取服务,支持通过域名获取网站图标。
API地址https://favicon.im/目标网站域名

五、推荐使用国内服务

由于网络环境的原因,许多国外的Favicon图标获取服务在国内无法正常使用,或者访问速度较慢。因此,推荐大家使用国内的服务,如 CravatarAFMax,这些服务不仅访问速度快,还提供了丰富的功能和良好的用户体验。

六、测试具体地址速率

由于各地网络环境不同,建议在使用这些服务之前,先测试具体地址的访问速率。可以通过以下方法进行测试:
  1. 使用浏览器开发者工具:查看请求的响应时间和加载速度。
  2. 使用在线工具:如 ping.pespeedtest.net,测试不同服务的响应时间。
这类重点提示,一定要根据测试结果,选择最适合您当前网络环境的服务。建议使用前,直接通过浏览器访问尝试加载不同博友地址比如这样,https://unavatar.io/www.jeffer.xyz ,以实际的测试效果为基准。各省市网络环境不同,本文的测试结果不作为通用结果,个体速度请依据实际网络环境为准。

七、总结

在选择Favicon图标获取服务时,建议优先考虑国内的服务,如 CravatarAFMax,这些服务不仅访问速度快,还提供了丰富的功能和良好的用户体验。同时,建议在使用前测试具体地址的访问速率,以确保最佳的使用效果。
写这篇文章说有博友在使用我的插件 @Jefrss Reader Lite  时候说图标出现不展示的情况,鉴于使用的是第三方服务,这里建议替换为自己网络环境可以通路的Api服务商。

定制博客开发者工具控制台个性化输出

2025年2月12日 13:25

首先祝大家元宵节快乐啊,其实这个东西也不是什么新奇玩意儿了。

很多网站都有这个东西,例如百度:

但是就输出这么个东西明显不够高级的样子,上午访问小小小小的小的博客,发现他的主题自带的输出还是蛮有意思的:

既然如此,俺就不如直接抄过来了:

            <script>
                // 消除控制台打印
                var HoldLog = console.log;
                console.log = function() {}
                ;
                let now1 = new Date();
                queueMicrotask( () => {
                    const Log = function() {
                        HoldLog.apply(console, arguments);
                    };
                    //在恢复前输出日志
                    const grt = new Date("08/10/2009 00:00:00");
                    //此处修改你的建站时间或者网站上线时间
                    now1.setTime(now1.getTime() + 250);
                    const days = (now1 - grt) / 1000 / 60 / 60 / 24;
                    const dnum = Math.floor(days);
                    const ascll = [`欢迎访问obaby@mars!`, `爱自己,每天都要开开心心的哦`, `
 ██████  ██████   █████  ██████  ██    ██  ██████  ███    ███  █████  ██████  ███████ 
██    ██ ██   ██ ██   ██ ██   ██  ██  ██  ██    ██ ████  ████ ██   ██ ██   ██ ██      
██    ██ ██████  ███████ ██████    ████   ██ ██ ██ ██ ████ ██ ███████ ██████  ███████ 
██    ██ ██   ██ ██   ██ ██   ██    ██    ██ ██ ██ ██  ██  ██ ██   ██ ██   ██      ██ 
 ██████  ██████  ██   ██ ██████     ██     █ ████  ██      ██ ██   ██ ██   ██ ███████ 
        `, "已上线", dnum, "天", "©2025 By obaby@mars V1.8.16", ];
                    const ascll2 = [`NCC2-036`, `调用前置摄像头拍照成功,识别为【小笨蛋】.`, `Photo captured: `, `🤪`];

                    setTimeout(Log.bind(console, `\n%c${ascll[0]} %c ${ascll[1]} %c ${ascll[2]} %c${ascll[3]}%c ${ascll[4]}%c ${ascll[5]}\n\n%c ${ascll[6]}\n`, "color:#425AEF", "", "color:#ff4f87", "color:#425AEF", "", "color:#425AEF", ""));
                    setTimeout(Log.bind(console, `%c ${ascll2[0]} %c ${ascll2[1]} %c \n${ascll2[2]} %c\n${ascll2[3]}\n`, "color:white; background-color:#4fd953", "", "", 'background:url("https://npm.elemecdn.com/anzhiyu-blog@1.1.6/img/post/common/tinggge.gif") no-repeat;font-size:450%'));

                    setTimeout(Log.bind(console, "%c WELCOME %c 你好,小笨蛋.", "color:white; background-color:#4f90d9", ""));

                    setTimeout(console.warn.bind(console, "%c ⚡ Powered by obaby@mars %c 你正在访问 小妖精 的博客.", "color:white; background-color:#f0ad4e", ""));
                    setTimeout(console.warn.bind(console, "%c ❶ Blog: %c https://oba.by", "color:white; background-color:#ff7aa4", ""));
                    setTimeout(console.warn.bind(console, "%c ❷ Blog: %c https://nai.dog", "color:white; background-color:#ff7aa4", ""));
                    setTimeout(console.warn.bind(console, "%c ❸ Blog: %c https://zhongxiaojie.com", "color:white; background-color:#ff7aa4", ""));
                    setTimeout(console.warn.bind(console, "%c ❹ Blog: %c https://h4ck.org.cn", "color:white; background-color:#ff7aa4", ""));
                    setTimeout(Log.bind(console, "%c W23-12 %c 你已打开控制台.", "color:white; background-color:#4f90d9", ""));

                    setTimeout(console.warn.bind(console, "%c S013-782 %c 你现在正处于监控中,不要干坏事哦.", "color:white; background-color:#d9534f", ""));
                }
                );
            </script>

至于怎么生成上面的 ascii 字符串,可以使用下面的两个链接:

https://patorjk.com/software/taag/

http://www.network-science.de/ascii/

把上面的代码找个 js 文件写进而去,在页面 header 里面引用即可(我直接将代码添加到了 wp 的页面小工具内)。实际效果:

当然也可以直接 F12 打开开发者工具查看具体效果。嘎嘎。

独立博客“中间平台“的多种形态

2025年2月10日 23:24

今天拿手机瞎逛,忽然发现了很多新博客。然后发现独立博客作者并没有比想象中少了,只是大家不太活跃,固定的在一些独立博客里面来回晃。

有一个六度理论就说。通过六个人你能接触到全球所有人,独立博客也是这样,通过评论区你能接触所有独立博客。我也有看到,博友圈,BlogWe,个站商店,博客志,博客圈导航,十年之约这一类的中间平台。这些平台也都是博友兴趣之余创作的。

中间平台加速了独立博客的流动,友圈也加速了这种流动,自从有了友圈Rss订阅者。我每次更新几分钟就会收到评论,但是这些都没有真正的自动化,将博客文章和博客本身Push出来,这里文章博客我指的是新文章新博客。

博客圈人不多。每天看来看去就是这帮博友,看多了人也会腻掉,发现新人就是一个问题。很多新人甚至写了很久博客,才意识到有一大批同类人群可以交流,所以使用中间平台为新博客导流是非常棒的选择。

四种思路中间平台思路

第一是搜索引擎,博客专门的搜索引擎,自动汇聚内容和博文,流量和用户内部互相消化,新文章和新博客自动蜘蛛收录。但是这种形式似乎使用者很难沉淀下来,毕竟用户量和内容量都不够。

第二种去中心化社区,通过中间平台api,将所有系统博客统一化,所有博客内容和评论直接出现在平台上,类似长毛象,博客互相联邦化,互相可以选择是否出现在对方的页面上,该页面汇聚该联邦站点文章和评论,形成一个个星球社区。

第三种自动化Rss博客广场,爬虫自动爬取博客和内容,根据网站性质,收录爬取新的博客和文章,直接通过系统处理,来推送内容到平台的专题列表内,这个效率最高,但是鉴于之前的一些争议,这个也是最不好实现的(协议方面),标准化实现最简单,协议实现最难。

第四种Ar社区,所有博客通过Ar生成固定的场景,博客以坐标节点来在整个ar里面,通过行走路线,走过坐标发现博客和内容,这个最异想天开,我最想见到这样的平台。

以上四种是我想到的,可以加速博客流动的方式,已经存在的导航,Rss推荐这种也是很棒的。

我对流动有一种天然的执着,之前做插件访客插件 然后做了@订阅插件 。当前的网站首页也是一个@评论和头像展示插件,开放式评论,每个头像都带源站超链接。然后我还是用了威严威语的@走心评论 ,也是一个开放式插件,每一个页面的主旨都是流动。

其中产品形态,都是我的想法,如果你有更好的,可以评论区几句,我觉得每一位博友应该都有自己喜欢博客中间平台,或者某种想象中完美的中间平台形态。

题外:目前我博客的所有插件和主题,如果大家有兴趣可以和我要压缩包,主题带板式数据开放,插件也可以随便使用。

使用Leafletjs实现足迹地图功能

2025年2月9日 11:40

我的博客上面挂着一个使用Leaflet实现的足迹地图功能,最近又给他添加了一些功能并且进行了一些美化。之前也有人问题这个怎么实现的,趁着刚折腾完来分享一下。

代码库的选择

早前一直想要做一个足迹的功能,像是国内的百度地图和阿里地图都有js的sdk,但是他们的sdk使用不简单,并且他们的地图只有国内的。后来了解过google map以及mapbox,但是都没有深入研究。后来看到博主水八口记使用了leaflet还比较简单,就使用这个库来实现了我的足迹功能。

地图图层

使用leaflet的一大好处是,你可以自由使用你想要的地图图层,对于符合Leaflet的地图瓦片地址我们是可以直接使用的,通常是类似这种格式的地址: https://{s}.somedomain.com/{foo}/{z}/{x}/{y}.png,其中的{z}/{x}/{y}是必须要支持的,leaflet会在运行的时候替换具体的值,从而请求对应的放大级别(z,zoom), 对应坐标(x, y)的瓦片进行渲染。

一般使用cartocdn提供的openstreetmap的地图时,是可以直接使用的,但是我们如果想要使用mapbox地图或者其他地图供应商的时候,就需要借助插件了,可以在这个页面看看有没有Plugins - Leaflet - a JavaScript library for interactive maps

对于地图图层,leaflet是支持同时加载多个图层的,比如说我可以添加一层底图再添加一层天气卫星图。

我们这里先看一下如何创建一个地图并且设置我们的地图图层. 首先需要引入leaflet的css和js文件

1
2
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin=""/>
<!-- js引入一定要放到css的后面 --> <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js" integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin=""></script>

之后,在我们需要显示地图的位置放一个div元素,并且设置一个id,这样我们在后面的js代码中才能控制它:

1
<div id="footprintmap"></div>

同时我们可以通过css设置这个容器的宽度高度:

1
2
3
4
#footprintmap {
width: 100%;
 height: 180px;
}

这些做完之后就可以在javascript中去创建地图对象,并且给它添加地图图层了:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
<script type="text/javascript">

 //地图的版权声明,使用三方地图数据出于对版权的尊重最好加一下
      var cartodbAttribution = '&copy; <a href="https://www.openstreetmap.org/copyright" target="_blank">OpenStreetMap</a> contributors, &copy; <a href="https://carto.com/attribution" target="_blank">CARTO</a>';
      var map = L.map('map', {gestureHandling: true, minZoom: 1, maxZoom: 14}).setView([33.3007613,117.2345622], 4); //创建地图,设置最大最小放大级别,setView设置地图初始化时候的中心点坐标和放大级别
      map.zoomControl.setPosition('topright'); //设置放大控制按钮的位置
      map.createPane('labels');

      map.getPane('labels').style.zIndex = 650;

      map.getPane('labels').style.pointerEvents = 'none';

      L.tileLayer('https://{s}.basemaps.cartocdn.com/light_nolabels/{z}/{x}/{y}.png', {

    attribution: cartodbAttribution

}).addTo(map); //添加地图图层到map对象当中

</script>

添加足迹点到地图中

经过以上的步骤我们就可以在网页上展示一个地图了,而我们实现足迹功能一般会给我们去过的地点打上标记。一种方法是给去过的城市做一个蒙层,一种方式是加一些点标记。这里先看加点标记的方法。

标记在Leaflet中称为Marker, 我们可以使用以下代码添加默认的Market:

1
marker = new L.marker([33.3007613,117.2345622]).bindPopup("popup text").addTo(map);

效果如下:

在上面我们通过bindPopup来设置点击Marker之后弹出的内容,其中我们是可以设置HTML元素的,因此我们就可以显示图片或者超链接之类的内容了。

如果不喜欢这个默认的蓝色Marker,也可以替换为图片。比如我用如下的代码就设置类一个svg图片作为Market标记图:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
function colorMarker() {
  const svgTemplate = `
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" class="marker">
      <path fill-opacity=".25" d="M16 32s1.427-9.585 3.761-12.025c4.595-4.805 8.685-.99 8.685-.99s4.044 3.964-.526 8.743C25.514 30.245 16 32 16 32z"/>
      <path stroke="#fff" fill="#ff471a" d="M15.938 32S6 17.938 6 11.938C6 .125 15.938 0 15.938 0S26 .125 26 11.875C26 18.062 15.938 32 15.938 32zM16 6a4 4 0 100 8 4 4 0 000-8z"/>
    </svg>`;
  const icon = L.divIcon({
    className: "marker",
    html: svgTemplate,
    iconSize: [28, 28],
    iconAnchor: [12, 24],
    popupAnchor: [7, -16],
  });
  return icon;
}

marker = new L.marker([lat, lng], {
    icon: colorMarker(),
  }).bindPopup(popupText).addTo(map);

主要是在前面创建marker的时候传的这个icon,你也可以传普通的图片。

如果我们需要展示多个点的时候,我们可以把这些点的数据存储成一个json,并且把他作为一个JavaScript对象加载,再读取他把每个点添加到地图中。 我就创建了一个points.js的文件保存所有的点:

1
2
3
let points = [
    ["<b>北京</b><i>Beijing</i><a href='/2025-01-beijing/'><img src='https://img.isming.me/photo/IMG_20250101_133455.jpg' />北京游流水账</a>", 40.190632,116.412144],
    ["<b>广州</b><i>Guangzhou</i>", 23.1220615,113.3714803],];

内容大概如上:

1
2
<!--加载点数据这样我们在javascript环境中就可以拿到points这个数组-->
 <script type="text/javascript" src="/points.js"></script>

以上加载了点数据,通过下面的代码来读取并且添加点:

1
2
3
4
5
6
7
for (let i = 0; i < points.length; i++) {
//循环遍历所有点,并且保存到如下三个变量中
  const [popupText, lat, lng] = points[i];
  marker = new L.marker([lat, lng], {
    icon: colorMarker(),
  }).bindPopup(popupText).addTo(map);
}

到此为止就完成了足迹点功能的开发。

去过的区域图层开发

而我们要实现去过的城市标记,这个时候就不是一个一个的点了,我们可能给去过的城市添加遮罩,这个其实就是给地图上画一个新的图层。每一个城市本质上就是许多个点围成的多边形,我们可以使用Leaflet提供的polygon方法来绘制,但是我们需要给把每个城市的多边形的各个顶点找到并且组织成一个数组,工作量真的是巨大的。

这样的难题我们不是第一个遇到的,前人已经遇到并且帮我们解决了。在2015年就有了GeoJson这种用Json描述的地理空间数据交换格式,他支持描述点,线,多边形。而Leaflet对齐也有支持。因此,我们只需要找到我们所需要的城市的geojson数据的MultiPolygon或者Polygon数据,就可以在Leaflet中进行绘制了。

对于中国的数据,我们可以在阿里云的datev平台进行下载,你可以省份数据或者按照城市甚至更小的行政单位下载数据。对于国外的数据可以到github上面去查找,这里是一份国家数据: datasets/geo-countries: Country polygons as GeoJSON in a datapackage

对于我们下载的中国的geojson数据,因为比较详细,也就比较大,我们可以使用mapshaper这个工具来对数据进行一些处理,直接使用Simplify功能,使用它减少点的数量,从而减少我们的文件的大小。

按照geojson文件格式,我们对于多个城市需要组成一个类似如下的json:

1
2
3
4
5
6
{
"type": "FeatureCollection", features: [
{"type": "Feature", "geometry": {"type": "Polygon", "coordinates": [[[88.40590939643968,22.55522906690669],[88.36498482718275,22.494854169816982],[88.28898205570562,22.51497913551355],[88.2714429545955,22.55235407180718],[88.32990662496253,22.55235407180718],[88.36498482718275,22.60410398359836],[88.35913846014606,22.62997893949395],[88.38837029532957,22.62710394439444],[88.40590939643968,22.55522906690669]]]}},
...
]
}

对于这样的一个json对象,我们就可以直接使用Leaflet的geojson文件进行加载,代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
function onEachFeature(feature, layer) { // does this feature have a property named popupContent?
 if (feature.properties && feature.properties.popupContent) {
 layer.bindPopup(feature.properties.popupContent); //从json文件中读取属性进行popup展示
 }
}

var geojson = L.geoJSON(areas, {
 onEachFeature: onEachFeature,
  style: function (geoJsonFeature) {
    return {
      color: '#ffcc80', //设置遮罩的颜色
      fillOpacity: 0.4, //设置透明度
      stroke: false, //是否要显示边缘线
    };
  }
}).addTo(map);

对于geojson我们也可以在properties中设置弹框的内容进行展示。

总结

到这里我们就完成了基于leaflet的一个足迹地图,既包括足迹点,也包括去过的城市的遮罩。而geojson和Leaflet的功能远远不止这些,感兴趣的可以去看相关文档。另外因为我使用的地图是openstreetmap的数据,关于中国领土有争议的部分标记不正确,这个不在我的解决能力范围之内,只能暂且使用,但是不代表本人观点。

参考资料:

  1. Tutorials - Leaflet - a JavaScript library for interactive maps
  2. https://tomickigrzegorz.github.io/leaflet-examples/
  3. GeoJSON - 维基百科,自由的百科全书
  4. DataV.GeoAtlas地理小工具系列

看完评论一下吧

DeepSeek本地部署以及使用体验

2025年1月30日 20:41

最近,国内一家名为DeepSeek的初创公司通过技术迭代与升级,推出了全新一代大模型“DeepSeek-V3”。这款大模型因其卓越的性能和易用性,迅速在AI爱好者中引起了广泛关注。更令人瞩目的是,DeepSeek R1版本直接免费开源,这一举动迅速在AI发烧友圈中传播开来,并迅速扩散到海外社交平台和技术论坛。海外网友对此纷纷表示赞叹,称其为AI领域的一大突破。

它的研发成本大概600万美金,不到openai的1%,各项性能指标更是和OpenAI-o1 模型不相上下,甚至做到了小部分的超越,关键是开源的,我们可以本地部署使用。

本地部署,我们可以通过Ollama来进行安装

Ollama 官方版:点击前往

Web UI 控制端【点击安装

安装命令

1.5B Qwen DeepSeek R1

ollama run deepseek-r1:1.5b

7B Qwen DeepSeek R1

ollama run deepseek-r1:7b

8B Llama DeepSeek R1

ollama run deepseek-r1:8b

14B Qwen DeepSeek R1

ollama run deepseek-r1:14b

32B Qwen DeepSeek R1

ollama run deepseek-r1:32b

70B Llama DeepSeek R1

ollama run deepseek-r1:70b

DeepSeek和chatgpt比较,我就本地部署deepseek的时候想了一个问题,比较一下确实能分出高低,deepseek马上猜出我的电脑配置,而chatgpt没有,虽然我的电脑售卖的时候是有好几种内存和显卡配置的,当然,我的问题最好写得更具体,当我就应该是不懂的那种:

问题:

我的电脑是Lenovo Legion R7000 2020,帮我推荐安装哪个deepaeek模型:

DeepSeek回答:

根据 Lenovo Legion R7000 2020 的硬件配置(通常是 16GB 内存 + GTX 1650/1660 Ti 显卡),建议选择较小的模型,因为较大的模型需要更多的显存和计算资源。以下是适合你电脑配置的推荐:

推荐选择:

  1. 1.5B Qwen DeepSeek R1
    • 模型较小,适合 16GB 内存和 GTX 1650/1660 Ti 级别的显卡。
    • 运行速度快,对硬件要求较低。
    • 命令:ollama run deepseek-r1:1.5b
  2. 7B Qwen DeepSeek R1
    • 如果你的显卡显存较大(如 6GB 以上),可以尝试 7B 模型。
    • 可能需要降低批处理大小(batch size)以避免显存不足。
    • 命令:ollama run deepseek-r1:7b
  3. 8B Llama DeepSeek R1
    • 类似于 7B 模型,适合显存较大的配置。
    • 命令:ollama run deepseek-r1:8b

不推荐选择:

  • 14B、32B、70B 模型
    这些模型对显存和计算资源要求非常高,通常需要 24GB 以上显存的高端显卡(如 RTX 3090、A100 等),不适合你的电脑配置。

总结:

如果你的显卡显存较小(如 4GB),建议选择 1.5B 模型;如果显存较大(6GB 以上),可以尝试 7B 或 8B 模型。运行前请确保安装了最新的显卡驱动,并关闭不必要的后台程序以释放资源。

chatgpt回答:

要选择适合你 Lenovo Legion R7000 2020 配置的本地 AI 模型,主要需要考虑你的计算机硬件配置,尤其是显卡(GPU)和内存(RAM)的性能。你提供的机器大致配置应该包括较强的处理能力,但具体能跑哪些模型,取决于内存和显卡性能。

通常来说,模型越大,占用的显存和内存就越多。如果你的电脑配备了高性能的显卡(例如 NVIDIA RTX 3060 或更高),并且有足够的内存(16GB 或更高),可以考虑使用较大的模型。以下是对比这些模型的建议:

1. 1.5B Qwen DeepSeek R1

  • 适用条件:这是一个相对较小的模型,对显卡和内存要求较低。基本上,几乎所有配置的电脑都可以运行它,特别适合资源有限的机器。

2. 7B Qwen DeepSeek R1

  • 适用条件:虽然较大一些,但如果你的电脑有较强的 GPU(比如 RTX 3060 及以上)和至少 16GB 内存,它是一个可以运行的模型。

3. 8B Llama DeepSeek R1

  • 适用条件:这个模型对显卡要求更高,可能需要更多的显存和更快的 GPU。如果你的电脑配备了强大的显卡和 16GB 以上的内存,可以考虑。

4. 14B Qwen DeepSeek R1

  • 适用条件:这个模型较大,通常需要更强的 GPU 和较大的内存(可能需要 24GB 或更高的显存)。适合高端配置的机器。

5. 32B Qwen DeepSeek R1

  • 适用条件:32B 的模型非常庞大,可能需要顶级显卡和至少 32GB 内存。一般来说,普通玩家的机器可能难以运行此类模型。

6. 70B Llama DeepSeek R1

  • 适用条件:这是一个极为庞大的模型,只有配备顶级硬件的机器(例如 A100 GPU 或等效硬件)才能够高效运行此类模型。普通游戏笔记本不适合运行如此大的模型。

综合建议:

  • 如果你有较好的 GPU(例如 RTX 3060 或更高)和 16GB 或更多内存,7B Qwen DeepSeek R18B Llama DeepSeek R1 会是比较合适的选择。
  • 如果你是低端显卡或内存较少的配置,选择 1.5B Qwen DeepSeek R1 会更为合适。

最终选择哪个模型,还是要依据你电脑的具体硬件配置来决定。如果你不确定具体的硬件要求,可以先尝试运行小模型,看是否能够稳定运行,再逐步增加模型的规模。

代码测试:

对我来说,更多的是在编程方面的应用,这也是为什么,本来ai可以帮助写作的这段期间,写作应该更简单更快,但我的博客更新率反而降低,因为我最近几乎都在用ai编程,忙得停不下来,最近又做了一套预约系统(客户需求),一个不精通编程的人,因为有了ai便有了希望。

目前利用ai编程,尤其是我这样的水平,很多时候需要丢一大堆代码来进行功能的添加,为的也是不想拆分一段段的代码去解释和修改,虽然ai也能给你答案,但是折腾起来挺费时费力,所以一开始就要想好全部需要的功能,一次性让ai都考虑在内,当然,如果你的系统太复杂,目前有些ai免费版输出的代码有字数限制。

根据我目前的使用心得,在deepaeek还没出来的时候,claude.ai的编程能力最强,但由于字数限制,有经常还得把代码搬到kimi.ai那边去继续修复,kimi.ai主要特点是输出内容比较长,但是编程能力相对会低一些,现在由于deepseek的出现,经过测试,输出内容好像比kimi.ai更长,编程能力和claude不相上下,我测试过一段mercadopago的支付,写出来的代码可用,说明编程能力还是可以的,虽然感觉过去和claude还是有一丁点差距,不过已经非常好了,至少是免费而且没有限制,真的狂喜。

我也看到过做中文文案的人的评测,说DeepSeek的中文能力比chatgpt强,语言组织上更适合中国人的思维,这点也是做自媒体文案的人的总结。

这几天因为deepseek太火,以至于受到海外的网络攻击,也因为访问量太大,各种卡顿,所以本地部署也是一个选择,经过测试,配置选择越大效果会越好。

榨干最后一点表达欲

2025年1月17日 13:57

之前一直在坚持写博客,到第三年的时候,终于开始有了所谓的「名气」和「回应」。虽然很漫长但是还是坚持下来了。去年12月开始,又把播客的事情做起来了,几乎做到了日更内容。

这两件事都遭到了「质疑」——你不可能每天都坚持写作、你不可能做到播客日更、要么这些不是你用AI制作的、要么就是你人「有问题」。好一个从问题上解决问题的思路。

跟一个同样在做播客的人聊起「更新频率」,在得知我们一周日更六期的时候,他首先确定这是「不可能」的事情,除非这个播客的后面是好几个创作团队的并发设定;于是我们又告诉对方,这个团队除了邀请来的嘉宾,就只有三个人,而且后期剪辑也只是一个人完成的;他仍然不相信,便开始怀疑我们创作的内容「有问题」;于是我们介绍了自己是从事什么行业,为什么会做播客以及为什么可以做到高产;他便站在「过来人」的视角,爹味浓郁地总结:「你们这样做播客是不行的,不能一开始就把内容都发了。」

这套行云流水的逻辑闭环,我在2022年坚持每日写作时,也常常见识到。

——《多数人无法理解得坏世界》

之前还能做到博客和播客两边不耽误,最近稍微缓了缓,优先保证了录制和剪辑播客,然后是看书,沉淀的思考给了写作,以至于按照这个层级下来,还有点点精力分给了答疑博客收到的私信,朋友圈就几乎很少发了,更别说其他那些社交软件了,完全没有更新的欲望。

想了下,如果按照圈层来说。博客和播客,是最外圈的,而朋友圈(我只有、且会随时删增保持100个微信好友)才是最内圈的。那该精装修的是外圈,还是内圈呢?

WordPress 极简主题 Dear v1.2.0

2025年1月15日 15:53

独立博客至今仍是不少热爱分享的博主珍贵的自留地,会愿意投入精力去维护和滋养。通过博客,可以分享自己的专业知识、经验和见解,向读者提供有价值的信息,或展现魅力,或暗自陶醉。

来自读者的评论,有意义的互动,可能就是很多人坚持的原因。甚至有人提出,关闭了评论的博客,还叫博客吗?但总有利弊,开启评论意味着你需要投入更多的时间去回复和管理,抵抗 Spam 和无聊评论的骚扰,甚至引发言语攻击的事件。

所以,Dear 主题评论功能已增加,按需自取,哈哈。本次仅更新 WordPress 版本, Typecho 版本择日再改。

主要更新内容:

- 增加评论功能及样式(请在"设置">"评论"中关闭头像显示)
- 可选回复评论框跟随,默认禁用
- 部分样式优化

新版本请从主题发布页面获取 Github 链接:WordPress 版本

新年给博客迁新服

2025年1月6日 22:48

✨1/8日更新:3天AWS新服体验不佳,吃灰已久的Jetpack宕机监控功能3天下来跳了几次,已迁至阿里云港服。从 🇸🇬🇯🇵 再到 🇭🇰,博客站物理位置离自己更近了👏


博客重新上线时用的是Amazon Lightsail最低标准,配置是512MB内存 2vCPU,每月3刀,一个WordPress小博客站点够用了。用了一段时间有了折腾后发现不够用,就单单一次上传多个图片就能给整爆失联,得重启服务器恢复。后来干脆快照形式搬迁至1GB内存 2vCPU配置,每月5刀,用到现在没出现什么问题,期间亚马逊AWS还涨过一次价至7刀。

以上用的实例位置均在新加坡,期间有博友发现其无法畅通访问得挂梯子并告诉我(其实我自己用的网络环境中并没有遇到过,网络运营商处理这些在我看来有点玄学)。之后就心念着想换位置,理想位置是香港,毕竟是没有备案的最佳选择。还有一个想换的原因是用Bitnami栈打包的Apache服,怎么说呢,Bitnami非常好非常安全非常稳定,但对我来说太麻烦了,修改一些文件权限要整来整去,一些服务版本的更新还得大动干戈,就想换成原味。主要是自己的懒惰,就一直搁着。

新年嘛,就趁新年第一个周末给站点搬家。看了阿里云ECS和腾讯云CVM,最终选择了老东家亚马逊。亚马逊的EC2有港服,但没港服的Lightsail它更便宜!选了和原来一样的配置7刀/月,不同的是位置从新加坡换到了日本,离中国近一点哈哈,经过测试真的是快了一点~阿里云和腾讯云的轻量应用服务器也便宜且有港服,但当我看到“建站内容也是受限制的,出现违规域名会被封禁。”时总觉得会缺少点什么,虽然自己爱国守法,但还是算了,这些年使用过和正在使用的服全是外面的,也无所谓运营商玄学,就对搬回来这欲望并不是那么强烈。

周六上午就开好实例,用Debian12作服务器系统,习惯了Debian,很好。下午只需要旧服备份数据新服搭建环境后一气呵成。然而过程中出了一些状况,需要放下手头其他事,搁置了已经进行到一半的搬迁事宜。当时就连把域名解析回旧服ip从而恢复访问的操作都不想做,出现502 404 TIMED OUT之类已经无所谓了,因为儿子生病了。

周六当天儿子出现两次呕吐症状,第一次呕吐物比较少,里面有少许上午吃的水果。期间儿子还说过自己肚子痛痛,但我们仅凭他当时精神状态很正常,并就有没太多处理,只是揉揉肚子和各种无知的揣测原因。隔三四个小时后出现第二次呕吐,我们这时才意识到问题的严重性,并立马带他去医院,医生给的诊断结果是小儿病毒性肠炎。晚上儿子就出现发热症状,又是一个不眠夜。第二天还在发热,但属于低烧范围,已经不会再呕吐,也说肚子不痛痛了,状态也不错。

周日下午才有完全属于自己的时间接着去处理搬新服后续的事,算是比较顺利。出现问题是服务器莫名过载让网站无法访问,SSH也连接不上且持续很长时间,得重启服务器恢复。线索来源于“PHP message:Connection refused”,先排查插件发现W3TC所使用的缓存方式会导致此问题,Redis与Memcached都试过但问题依旧,干脆先停用,反正新服速度不错。病根应该是php,先搁置,等有空再处理~ //已解决,PHP权限问题

Lightsail真的很Light很轻量,CPU给压的死死的,便宜嘛,这货持续高负载就卡挂。属于突增型,就是说你平时使用CPU的利用率低于10%时(性能基准,实例配置不同基准百分比不同),能积累一种“能量”,当CPU利用率高于10%时,累积的“能量”就会消耗,如果持续高负载直至“能量”耗尽,CPU最大利用率就会压回10%,这就是为什么会挂掉的原因。以上是我对突增型服务器的理解,也罢,够用!

2025年了,看到大家都在写总结,晒清单,立新年Flag,由衷佩服大家的行动力,这是身为一个博主应该拥有的积极人生态度啊,反观自己真的是弱爆了。我属于是佛系,博客更新频率低,写的东西也属于肤浅的记录。时间是有的,陪小朋友、玩游戏、刷手机是我工作时间以外最放松的时候,所以不想“浪费”在写博文上。偶尔打开Follow看看大家写了啥,说真的点开订阅也成为另一种心理负担,因为每次点开后这么多的未读文章,每篇都想点进去瞄一眼,这时间就刷刷走了~

2024 – 2025 跨年博客

2024年12月31日 19:39
2025

按照惯例,每年这个时候我都会写一篇跨年博客来大谈特谈,今年是第十三年,能坚持这么长时间我很高兴。

首先要说的是时间过的实在是太快了,标题上已经是2025,内心却仍感觉是19 年的,好像covid 之后的日子都被偷走了,2024 一晃而过,2024 又好像从未来过。我关于页面的照片都已经超过了10张,真的过于可怕。

2024

先围绕着去年列的目标说一下

  • 体重65kg
  • 家庭出游两次以上
  • 拍下胶片,设备 M6 / 11663 / 11891
  • 不添置新的数码产品
  • 去五个国家
  • 不添置新的数码产品

上半年其实还做了很好的体重控制,明显感觉状态好不少,后半年状态下降,直接摆烂了,现在能感觉自己又回到了一摊烂肉的状态了,年初说的十分想要完成的小目标也是在这个目标的基础上,显然也泡汤了。

年初本来计划上带两家父母各出行一次,实际上一次都没有实现,只是给父母安排了一次上海的行程,本人并没有陪同,最近几年发现和父母的生活理念还是有很大的不同,有时候也会劝说一下,基本是无果,当然自己也不一定是对的,每个人都有自己的生活方式。

年初的时候想玩胶片机,综合考虑最后还是选择了宝丽来,很好,就是太贵,差不多拍了三十盒相纸,准备弃坑了,数码产品不但添置了,而且还没少更新,照例更新苹果,还买了理光,不过把富士卖的差不多了。

得益于深航随心飞和快线,今年又把大部份省会都逛了一遍,多年前为了实现去过全部省份强刷了一波,多年后再游故地,心态不同。

再就是生活其实发生了不少变化,因为现在业务不好做,办公地点再次降级,对我来说交通已经算是不太方便了,索性就开启半远程模式,偶尔会直接在家办公了。太太因为工作特殊性变得更加忙碌了,真的非常辛苦,感觉失去了很多快乐。猫因为一些原因寄养在有钱人家里了,算是家里混的最好的了。

接下来继承新的传统,每月选出一张代表。

一月,去了巴厘岛。
二月,去了新加坡。
三月,丽江,日照金山。
四月,去了胡志明市。
五月,无锡苏州,重游园林。
六月,青岛瑞吉。
七月,去了大阪。
八月,回了一趟农村。
九月,麦积山仿古。
十月,澳门city walk。
冬月,高才、美签,和香港关系紧密起来。
腊月,南京。

最近两年每到年底的时候都会有一种这一年什么都没干的感觉,靠着翻照片才能慢慢回忆起来自己干了什么,仔细一看,原来自己做了不少事情呢。去年我写到在大环境不是那么好的情况下发现自己还能积极去探索生活,今年貌似还能复用一下,但要说的是心态已经发生了不小的变化,对现在的生活感到疲倦,对未来的生活感到迷茫。

2025

本来想着新年计划多写一点,真正想写的时候发现又没那么大的劲头了,以前我都是活在当下,今年第一次有了长期主义的想法。收集了所有以前列出来未完成的目标,准备在新的一年完成,有些目标如今看来已是微不足道,但它们实打实是自己认真生活的见证,生活挺苦的,需要这些仪式感来点缀。

  • 体重65kg 2024
  • 不添置新的数码产品 2024
  • 家庭出游两次以上 2024
  • 精简生活 2021
  • 做菜 2020
  • 跑步十公里 2019
  • 学习语言 2018 2020
  • 去一次马尔代夫 – 出去走走 2015

新的坑

  • 尝试录播客
  • 纯远程工作
  • 开源项目再挣扎下

同时参考去年,继续列两个隐藏的小目标,希望明年的跨年博客的完成列表里可以出现它们的身影。

以及

写在最后

其实总结和展望早已写好,只是一直想在结尾再加几句,特意吃饱了饭才来写。这些年来,作为一个普通人,我的运气其实还算不错,虽然走过不少弯路,做出过一些错误的选择,但总体来说,生活并没有遇到太大的挫折,进展得还算顺利。当然,运气何尝不是实力的一种呢,不管怎样,还是要坚信明天会更好。

最后祝所有关注以及不关注我的朋友们新年新气象。

2024 年个人博客回顾

2024年12月25日 00:08

捣腾

本年度共捣腾自己的博客主题6次,见“更新日志”。新年第一天全新改版,半年后首页又换回了原来的样式。当前这个主题从2017年开始使用,至今快7年,期间捣腾很多个版本,但主旋律还是“移除”、“简化”和“禁用”。虽然7年后样式没有太大的变化,但主题从1.5M精简至100多K,插件使用量从12个精简到2个。现在我可以安心的把精力放在别的事情上了。

 

克制

今年努力克制自己不捣鼓新应用/程序,成功逃过 Memos、TiddlyWiki、Calibre-web、Freshrss、Follow、CouchDB、NAS 等等对我的诱惑。明年我可能也不会尝试。太容易安装部署的 Docker 容器,眼花缭乱的功能,耗时,收益太少。爱做笔记的朋友们,今年应该换过不少笔记程序。所谓开源、离线、块编辑、白板、多维表、点对点、自托管、一键部署、全平台,确实强大,但很累人。

 

主题

自2023年底一个月发了3个主题(DearPaperWriting)之后,今年只发了一个新主题(Text Only),各个主题都进行了一次的版本更新。明年暂时只计划对 Dear 进行更新。感谢使用和支持的朋友们,感谢厚爱!

 

发文

今年文章发表量比去年多一倍,共62篇,但水文居多,很多都是拍照凑数。无心插柳,弄了个“独立博客自省问卷15题”,最终收集答卷 46 份,是年度最高评论数文章,89条评论(别笑,已知足)。写了三篇关于“纯文本生产力”的探讨,是年度最高阅读量文章,1万7千多阅读次数。我一般不在网络上吐槽,但“都是浮云”一文成为年度最多评论的纯图片文章。

共发布 62 篇文章,浏览最多的 10 篇文章如下:
值得拥有的纯文本生产力 (17,358)
再见 2023, 2024 笃志不倦 (11,058)
2024 龙年春节出游小结 (10,573)
微言雅语 @2024-01 (9,940)
我的几个小坚持 (8,054)
如何在Bing和Baidu屏蔽CSDN和知乎的搜索结果 (6,168)
日常山野漫步 Vol.5 之凤凰山 (6,006)
日常山野漫步之大镜山至香山湖 (5,962)
珠海母亲河前山河 (5,859)
纯文本生产力方案探讨 (5,458)

共收到 1740 条评论,评论最多的 10 篇文章如下:
独立博客自省问卷15题 (89)
再见 2023, 2024 笃志不倦 (80)
都是浮云 (73)
值得拥有的纯文本生产力 (70)
2024 龙年春节出游小结 (66)
我的几个小坚持 (54)
博客2024年的最后小迭代 (46)
游中山收音机博物馆 (44)
如何在Bing和Baidu屏蔽CSDN和知乎的搜索结果 (42)
《独立博客自省问卷15题》答卷收集 (41)

 

不足

就不吐槽自己了,心知肚明就好。

 

致敬

明年,希望自己在力所能及的范围内给中文博客圈作出更多一点点的贡献。致敬热爱分享,尊重知识产权,充满正能力的小伙伴们!@印记@陈仓颉@S@风清@1900@响石潭老师@夜未央@网友小宋@老何@ACEVS@粽叶加米,还有更多,不一一罗列。

2025,继续努力。

写在2025年新年之前

2024年12月23日 11:00

每年这个时候,差不多就要发布《写在新年之前》了。这是从世界末日那一年开始的记录,像是在记录真正遭受了世界末日后的平行世界,每一年都会发生什么。

据说,2012年的世界末日被玛雅人谱写在神谕之中,世界能躲过这一劫,是因为另一个平行世界的地球替代了那一刻的「世界」,于是从那一年开始,我们感觉到了时间的加速、错乱的记忆、奇怪的即视感。

虽然这是玩笑,但也多少有些魔幻现实,所以今年的《写在新年之前》,就用玛雅文明的「圣经」《波波尔·乌》的结构吧。从这一刻开始,魔幻现实主义就深深扎根在了拉丁美洲的土壤里。


创世

养狗也是一场巨大的个体实验

今年做出最大的决定,是养了一只柴犬。我们一直不考虑养狗的原因,是怕自己无法尽全责照顾这种「眼里只有对方」的宠物。决定养的那天,我就有意识地开始记录「发生了什么」。

狗和猫不同,猫没有眉毛肌肉,所以很难看出它想要实际表达的情感,但因为狗有这个区域的肌肉,它能给予主人的回应就要明确很多,喜怒哀乐都可以从它藏不住的眉毛、尾巴表达得淋漓精致。

正是因为这种时刻都能得到的全方位的回应,狗给人类提供的催产素介于猫和婴儿之间。催产素过量,带来的心理变化也非常明显,比如送狗去狗学校上学时,产生分离焦虑的竟然是我跟老婆两个成年人,躲在车上忍不住地偷偷抹眼泪。

催产素的影响是持续的,比如情绪稳定、攻击性降低、男性的责任感、女性的非冒险性,激素影响的身体机能都是为了「养育」这个主题。比如我真的在今年一整年,除了狗送去上学和寄养的一个半月,我每天都是准时准点地遛狗两次。

我小时候,短暂拥有过一段时间的狗,但很快它被送走了,我难过了很久,甚至要被送走的那天,我下午逃课回家,抱着狗哭了很久。成年后,决定养的这只狗,也是对童年那一刻的重新补偿吧。


@西安 童年的花园

接着童年的话题——人们会在成年之后,努力地复刻童年的那个花园,因为那是他最熟悉的,也是安全感的来源。

安全感缺失症,几乎都能回到「童年」寻找出苗头。童年就好比是一个从早玩到晚的花园,或许在里面种着一棵高大的树。每次玩时,都会被这棵树裸露在土壤外表的树根绊倒,但是并不妨碍这棵树在我们记忆里的模样。成年之后,我们开始重建这座花园,那棵常常绊倒自己的树,也成了熟悉和安全的一部分。

如果那棵树代表的是「父亲」这个符号,就解释了一些童年在父亲高压下长大的女孩子,在成年恋爱时,也会潜意识地寻找跟自己父亲类似的男性。

正是因为有这座花园存在,人们才有了「重建」的规划图——是要重新寻找那棵树、还是改成别的替代、或是亲手斩断那些盘根错节的根茎,让自己从束缚之中获得自由。

我必须承认,我拥有一个幸福童年,大部分时间我可以自己做决定。虽然父亲长期出差,但缺席的只是符号,而我用自己的「少年老成」填补了这个家庭缺失的符号,我既需要照顾自己,也需要时刻关注母亲的情绪。所以我逃到了「写作」,初中开始我把自己的想象力、攻击性和无法消解的情绪都变成了文字。

当我意识到,我需要重建那座花园时,我不想回到原本的样子。所以我开始寻找后天的父母、玩伴、亲密关系、甚至是那只我仍然记得名字和模样的小狗。


下界

@香港 权利的花园

接着花园的话题——人类追求的极致权利,是对自然的改造;但在这个过程中,他们又在寻找那些自然创造的、绝非人为的「怪胎」。

年初,陪老婆去了趟香港看苏打绿的演唱会。这和我多年前去过的「香港」变化了很多,这种变化不是物理上的,而是某种抽象的、但又肉眼可见的改变。我思考了很久,终于找到了那个再简单不过的东西——政治。

疫情三年,让所有人都确信一件事——原来政治离我们的生活并不遥远。距离2022年疫情解封,我们又过了2年,似乎人们已经忘记了那一刻。我恰好在2022年坚持写作,记录下了那时每天都在上演的荒诞、丑陋、政治、谎言、真相……

对,记忆是可以被篡改的,无论是个体对于记忆里「取向对自己更有利的部分」,还是被驯化出的集体潜意识。但个体的记忆越来越稀碎,人们就可以站在相对应的位置,指着虚假的「法典」,宣誓当初的历史「本就是」如何。

记忆固然不可信,但是历史就可信吗?


@重庆 Mayday

有的时候,历史比现实更残忍。你们还记得东航空难是什么时候吗?

马上要2025年了,我还是没能克服「恐飞」这件事情。当初一场大病,在经历了濒死体验之后,我突然开始恐惧坐飞机,2022年3月21日的空难,是我午睡突然惊醒,点开手机看到的突发新闻,紧接着老婆告诉我这件事,我一下子被全方位的恐惧裹挟。之后,就彻底恐飞了——我不是对飞行器不信任,更多是对「人」的不信任。

2023年去日本的时候,为了克服恐惧,吃了晕机药,感官被强制切断,对飞机的摇晃颠簸失去了感知——但是我老婆知道,她还是特地选择了ANA的航班,因为我是对「人」的不信任。

我依旧找不到治愈「恐飞」的办法,渐渐地,我也不觉得这是需要「治愈」的事情,它并不是疾病,只是大脑错误地将航司工作时参加过的安全培训、濒死体验时的无重力噩梦、东航空难、政治不信任纠缠结合,变成了一个几乎无法解决的心结,凝视着空无一物的深渊。

当深渊里什么都不存在时,那才是深渊最可怕的时刻,因为它里面可以是任何存在。


日出

@重庆 向上坠落

今年做了很多从未想过的新尝试,比如制作视频类的谈话节目、和脱口秀合作、开始创作播客。工作室也开掉员工只剩下三个人,最后发现其实就算是三个人,也搞定了以前所有的工作。

小时候有次理发,我现在还记得那个巷子里的理发店,老板是个跛脚的女人,我爸在她那里理了七、八年的头发。有一次,她帮我理发时,正在剃我后颈窝连到背上的汗毛,她对我爸说:「这个孩子,长大了也是个闲不下来的劳碌命。」

我爸当作玩笑在听,倒是我一直记得这句话。

果不其然,我很害怕「停下来」,害怕那种一眼能望到头的日子,像是身处深渊,眼睁睁看着那个光点越来越远。所以总是在折腾不同的事情,看上去有些三分钟热度,但总觉得它会不会在某一天成为那种、可以让人电流过脊般爽快的「callback」。

而停不下来的,就是写作这件事,时隔多年,我依旧觉得这才是我来这一世的目的。

我爸不相信这样的玄学,倒是我觉得或许这就是命。


@杭州 白日出没的月球

在剧本里,结局到来之前,会有一个叫做「灵魂暗夜」的时刻。往往这个时刻,角色们都会经历某一种「死亡」时刻。有角色为了主角的计划慷慨赴死,也有主角一直努力维系的关系就此终结。死亡带来的并不一定是「悲剧」,也有可能是真正的希望。

我很怕死,这种死不是肉体上的,而是精神上的荡然无存。所以我当初在反复阅读《美国众神》时,非常共情那种旧神被遗忘于世的恐惧。所以我一直在试图留下「什么」,当我留下的东西越多,它们渐渐在时间的规则之中形成了一个又一个的莫比乌斯。

这就是我会不停记录下来想法的原因,因为创作过程也可以看到变化过程。这也就是我之所以称「写作是一场自我悖驳的旅程」,因为三年前写的文字很有可能会在三年后因为经历不同而产生完全自我反对的观念。这也是我认为记录最为关键的过程,它是一个自观的过程,也是一个自我修正和不断认识自己的过程。

文字是有时间性的,且是永远无法被改变的单向规则;但是思考不是,它可以突破时间的规则,去回顾、去预判,可以回到几千年前的世界,也可以前往几百年后的未来。

但它又被固定在那个焦点之上,死亡的那一天则是重新开始的时刻,像是月亮被潮汐锁定在地球和太阳的规则之中。而人们又可以尽情地思考,在月球的背面,藏着怎样的幻想。


应许

@宁波 人类图腾

博客创作第三年,终于有了所谓的「流量」。

从今年年初开始,我其实一直在寻找「博客的意义」,它不过是我继续坚持写作的载体,我在任何一个地方都可以做到,但为什么一定要选择这个过时的互联网产物?

直到最近,我才意识到核心并不在于「坚持写作」这件事,因为它在哪里都可以完成,而博客的意义,是我可以和他人建立链接。人们很容易在逃避真实问题时,去纠结「题干」的对错性。比如,我说到写博客是为了让人看见自己,但这道题的题干并没有说「写博客不是为了自己」。这两者并不冲突,也并不是非黑即白的存在,或许有一天,你突然意识到你写博客确实是为了自己,但同时也希望被人看见。

承认这件事很难吗?其实很难,因为你还需要同时接受「没多少人看的」现实,从而被一个「我是为自己而写」的表象给包裹。

所以我才提出那个角度——如果你是为了自己而写,为什么一定要发表出来呢?

没错,这是个循环论证,特别是当人们夹在了「我为自己」「我为别人」「我希望被看见」的狭缝之中时,它们是彼此的最终解释权。

如果你现在还在纠结我说的结论是「错」的,那或许你得从最初的那个题干开始理解起——我有说过对与错这件事吗?


@重庆 三角座星云

我很多年前,写过一部年度小说《每个人,都是一团星云》,它是在绝望情绪中,写的全是错别字的意识流小说,写完结尾的那一天也吃了一顿寿喜烧。

其实那是一部告白小说,是完成上一轮五百日写作,送给她的作品。把一个充满死亡焦虑的自己,塞进一部小说里,充满了对她的「控诉」,我不希望我们彼此的关系靠得太近过于窒息,也不希望我失去轨迹逃逸她所在的星云。

那个时候我把自己比作是「卫星」,这么多年过去了,我觉得我和她彼此都是一枚恒星,在一望无际的宇宙,我们各自拥有一团独立系统的星云,将彼此的星云交错,他们共享着轨迹,但又不会互相吞并彼此的生活和个体。

我不知道现在也算不算是表白,这是我在有天夜里,拍下星空时,想到的关于那部小说的最终结局。

每个人都是拯救自己的神,但也是毁灭他人的地狱直到两个世界融合,变成「我们」,我们是彼此拯救的神,也是毁灭他们的地狱。


@宁波 感染

我不是个招人喜欢的人,无论是学生时代、还是进入职场之后,我永远是那个挑事和不服规则的人。所以我会较真「为什么」,从为什么要学习思想与品德,到为什么我完成了我的工作还要留下来假装和他们加班。

我很喜欢那些认为我脱离常识的人,因为他们对我的评价往往是他们能够找到最具有杀伤力、但对我而言毫无攻击性的用词。我不认为自己是特别的人,但我在进入某一个群体时,因为拒绝全盘接受群体的认知,而变成了那个特别存在的异教徒。

于是,我在这种脱离群体的方式里,也寻找到了另一些「异教徒」。

我不是个善于言辞的人,所以跟他们的交流方式会在最开始就说明白——我们彼此留言,有空再回复,在这种一来一回的存在着「时差」的问答之中,思绪爬满主轴,结出了我们谁都没有意料到的花与果。

很有幸认识你们。


一年到头,难得有一篇完全为自己而写的文章,也算是完成了每年对自己的承诺,毕竟又活过一年!

最后,还是老规矩:新年快乐!

在2024年1月1日就留在了灵感记录箱里的时间胶囊

MySQL参数一键配置脚本: 有效提升数据库性能

2024年12月23日 03:15

我一直是自己租用VPS服务器,然后搭建各种服务,比如博客就是Apache2+MySQL数据库。一般来说就是默认参数,没有去管,不过最近发现MySQL的性能参数都很保守,不能发挥整个服务器的性能。

然后我就网上搜索了一下,根据参数配置建议,用ChatGPT写了以下Python和BASH脚本。只需要在需要优化的服务器上,跑一下该脚本,然后就会显示参数配置,然后直接把参数添加到MySQL数据库配置参数文件上: /etc/mysql/mysql.conf.d/mysqld.cnf

然后运行: service mysql restart 重启MySQL服务器。

运行了几周,发现效果很好,博客反应速度也快了很多,这很大原因是根据了内存增加了MySQL缓存大小。

Python脚本优化MySQL数据库参数

把下面的Python脚本存成 mysql_config.py 然后运行 python3 mysql_config.py

def get_total_ram():
    with open('/proc/meminfo', 'r') as f:
        for line in f:
            if line.startswith("MemTotal:"):
                total_ram_kb = int(line.split()[1])
                return total_ram_kb * 1024  # 转换为字节(bytes)
    return 0  # 如果未找到 MemTotal,则返回 0

def calculate_mysql_settings():
    # 获取总内存(以字节为单位)
    total_ram = get_total_ram()

    # 根据总内存(以字节为单位)计算 MySQL 配置
    innodb_buffer_pool_size = int(total_ram * 0.3)  # 使用内存的 30%
    key_buffer_size = min(total_ram * 20 // 100, 512 * 1024 * 1024)  # 使用内存的 20%,最大限制为 512MB
    sort_buffer_size = min(total_ram * 25 // 1000, 4 * 1024 * 1024)  # 使用内存的 0.25%,最大限制为 4MB
    read_rnd_buffer_size = min(total_ram * 625 // 100000, 512 * 1024)  # 使用内存的 0.0625%,最大限制为 512KB
    tmp_table_size = max_heap_table_size = min(total_ram * 5 // 100, 64 * 1024 * 1024)  # 使用内存的 5%,最大限制为 64MB
    join_buffer_size = min(total_ram * 2 // 1000, 4 * 1024 * 1024)  # 使用内存的 0.2%,最大限制为 4MB
    table_open_cache = min(400 + (total_ram // 64), 2000)  # 根据内存动态计算,最大限制为 2000
    thread_cache_size = min(total_ram * 15 // 1000, 100)  # 使用内存的 1.5%,最大限制为 100
    innodb_log_buffer_size = min(total_ram * 5 // 100, 16 * 1024 * 1024)  # 使用内存的 5%,最大限制为 16MB

    # 以字节为单位打印配置
    print(f"MySQL 配置(基于总内存 {total_ram / (1024 * 1024):.2f} MB):")
    print("将以下内容添加到 /etc/mysql/mysql.conf.d/mysqld.cnf 的末尾\n")
    
    print(f"innodb_buffer_pool_size = {innodb_buffer_pool_size}")
    print(f"key_buffer_size = {key_buffer_size}")
    print(f"sort_buffer_size = {sort_buffer_size}")
    print(f"read_rnd_buffer_size = {read_rnd_buffer_size}")
    print(f"tmp_table_size = {tmp_table_size}")
    print(f"max_heap_table_size = {max_heap_table_size}")
    print(f"join_buffer_size = {join_buffer_size}")
    print(f"table_open_cache = {table_open_cache}")
    print(f"thread_cache_size = {thread_cache_size}")
    print(f"innodb_log_buffer_size = {innodb_log_buffer_size}")

    # 打印自定义设置
    print("expire_logs_days = 3")
    print("max_binlog_size = 100M")

if __name__ == "__main__":
    calculate_mysql_settings()

会打印出类似以下的配置:

innodb_buffer_pool_size = 626468044
key_buffer_size = 417645363
sort_buffer_size = 4194304
read_rnd_buffer_size = 524288
tmp_table_size = 67108864
max_heap_table_size = 67108864
join_buffer_size = 4176453
table_open_cache = 2000
thread_cache_size = 100
innodb_log_buffer_size = 16777216
expire_logs_days = 3
max_binlog_size = 100M

添加到MySQL的配置文件:/etc/mysql/mysql.conf.d/mysqld.cnf 然后重启数据库即可:service mysql restart

BASH脚本优化MySQL数据库参数

以下是完成同样功能的BASH脚本。

#!/bin/bash

# 获取总内存大小(以字节为单位)
get_total_ram() {
    # 从 /proc/meminfo 中提取总内存(以 kB 为单位)
    total_ram_kb=$(awk '/^MemTotal:/ {print $2}' /proc/meminfo)
    if [[ -z "$total_ram_kb" ]]; then
        echo 0  # 如果未找到 MemTotal,则返回 0
    else
        echo $((total_ram_kb * 1024))  # 将 kB 转换为字节
    fi
}

# 根据总内存大小计算 MySQL 配置
calculate_mysql_settings() {
    # 获取总内存(以字节为单位)
    total_ram=$(get_total_ram)

    # 计算 MySQL 配置参数
    innodb_buffer_pool_size=$((total_ram * 30 / 100))  # 使用内存的 30%
    key_buffer_size=$(($((total_ram * 20 / 100)) < $((512 * 1024 * 1024)) ? $((total_ram * 20 / 100)) : $((512 * 1024 * 1024))))  # 使用内存的 20%,最大限制为 512MB
    sort_buffer_size=$(($((total_ram * 25 / 1000)) < $((4 * 1024 * 1024)) ? $((total_ram * 25 / 1000)) : $((4 * 1024 * 1024))))  # 使用内存的 0.25%,最大限制为 4MB
    read_rnd_buffer_size=$(($((total_ram * 625 / 100000)) < $((512 * 1024)) ? $((total_ram * 625 / 100000)) : $((512 * 1024))))  # 使用内存的 0.0625%,最大限制为 512KB
    tmp_table_size=$((total_ram * 5 / 100 < 64 * 1024 * 1024 ? total_ram * 5 / 100 : 64 * 1024 * 1024))  # 使用内存的 5%,最大限制为 64MB
    max_heap_table_size=$tmp_table_size  # 临时表大小等于最大堆表大小
    join_buffer_size=$(($((total_ram * 2 / 1000)) < $((4 * 1024 * 1024)) ? $((total_ram * 2 / 1000)) : $((4 * 1024 * 1024))))  # 使用内存的 0.2%,最大限制为 4MB
    table_open_cache=$(($((400 + total_ram / 64)) < 2000 ? $((400 + total_ram / 64)) : 2000))  # 根据内存动态计算,最大限制为 2000
    thread_cache_size=$(($((total_ram * 15 / 1000)) < 100 ? $((total_ram * 15 / 1000)) : 100))  # 使用内存的 1.5%,最大限制为 100
    innodb_log_buffer_size=$(($((total_ram * 5 / 100)) < $((16 * 1024 * 1024)) ? $((total_ram * 5 / 100)) : $((16 * 1024 * 1024))))  # 使用内存的 5%,最大限制为 16MB

    # 打印配置(以字节为单位)
    echo "MySQL 配置(基于总内存 $((total_ram / (1024 * 1024))) MB):"
    echo "将以下内容添加到 /etc/mysql/mysql.conf.d/mysqld.cnf 的末尾"
    echo
    echo "innodb_buffer_pool_size = $innodb_buffer_pool_size"
    echo "key_buffer_size = $key_buffer_size"
    echo "sort_buffer_size = $sort_buffer_size"
    echo "read_rnd_buffer_size = $read_rnd_buffer_size"
    echo "tmp_table_size = $tmp_table_size"
    echo "max_heap_table_size = $max_heap_table_size"
    echo "join_buffer_size = $join_buffer_size"
    echo "table_open_cache = $table_open_cache"
    echo "thread_cache_size = $thread_cache_size"
    echo "innodb_log_buffer_size = $innodb_log_buffer_size"
    echo
    echo "expire_logs_days = 3"  # 日志过期天数设置为 3 天
    echo "max_binlog_size = 100M"  # 最大二进制日志大小设置为 100M
}

# 主函数调用
calculate_mysql_settings

需要注意的是,我在脚本后面加入了一些我自定义的配置,根据需求自行修改即可。在配置文件里,后面定义的会覆盖前面的,这就是为什么要添加到文件尾的原因。

其中最关键的配置 innodb_buffer_pool_size 我设置为使用当前内存的30%,如果服务器只有数据库/博客这个功能,可以适当的提高比例,比如60%-80%。

英文:Python/Bash Script to Print the Optimized Parameters for MySQL Servers

运维/DevOps

本文一共 812 个汉字, 你数一下对不对.
MySQL参数一键配置脚本: 有效提升数据库性能. (AMP 移动加速版本)

扫描二维码,分享本文到微信朋友圈
75a5a60b9cac61e5c8c71a96e17f2d9c MySQL参数一键配置脚本: 有效提升数据库性能 MySQL 学习笔记 数据库 计算机 计算机 运维 运维 DevOps
The post MySQL参数一键配置脚本: 有效提升数据库性能 first appeared on 小赖子的英国生活和资讯.

相关文章:

  1. 步步高学生电脑上 Basic 编程语言 peek 用法示例 步步高学生电脑 是8位FC机的经典之作.它上面的BASIC有三个版本 1.0, 2.0 和 2.1 2.1 版本有个在线帮助,实际上是 help.cmd 1.0 是用 Esc 键退回到 DOS 的,...
  2. 一张图告诉你北京的雾霾有多严重 一北京的朋友朋友圈发的: 左上为全新口罩;右上为全新口罩本周一到周五每天室外戴20分钟左右;左下为全新口罩今早室外+公交车戴一个半小时;右下为全新口罩今早开车戴一小时左右. 还有这图 空气污染 – 红色的是严重的.中国,尤其是华北地区,是全球最红的地区,没有”之一”. 本文一共 113 个汉字, 你数一下对不对. 一张图告诉你北京的雾霾有多严重. (AMP 移动加速版本) 赞赏我的几个理由. ¥...
  3. 你给SteemIt中文微信群拖后腿了么? 这年头不缺算法, 就缺数据. 这两天花了很多时间在整API上, 整完之后自己用了一下还觉得真是挺方便的. 今天就突然想看一看自己是否给大家拖后腿了, 于是调用每日中文区微信群排行榜单的API, 刷刷拿着 NodeJs 练手: 1 2 3 4 5 6...
  4. 穷举算法的应用 – 去除EXCEL文件中的保护 EXCEL 是可以用密码来保护的. 比如 这个EXCEL 就用了密码保护. 打开EXCEL文件 你会注意到 无法编辑 无法查看宏(VBA)的代码. 去除保护很简单 第一步先编辑宏 VBA 把下面的VBA代码拷贝到VBA编辑器里 并按下F5运行 1...
  5. 谈谈 Utopian 成立公司 就在刚刚 Utopian 的老板 @elear 在 帖子和 discord 上宣布在 意大利成立 Utopian 公司. 可喜可贺! 这开始只是 Steem 上的一个小项目,...
  6. 步步高多媒体学生电脑 汇编程序设计 – 1 英文同步 90年代后期步步高生产的软驱一号(又称步步高多媒体学生电脑)和98型学生电脑都带了软驱,一按电源件, 都从软盘启动(98型可以从内置的电子盘启动) 步步高提供了直接在学习机上写汇编开发的工具 BASM. BASM 可以用来写 6502 汇编,并可以编译成 CMD 小型可执行程序 不支持 EXC 程序. CMD...
  7. 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
  8. 舍得给员工培训的公司是好公司 最近出差比较多, 很多人问我都干嘛去. 各种开会, 各种培训. 公司从剑桥一个软件公司请了一个专业的软件专家来做软件工程上的顾问. 我是 R&D 研发经理, 所以很自然的就要和他经常讨论, 然后目标是把当前公司的软件开发流程给完善, 提高, 把以前做的不对的得整对了. 培训的内容很多, 让我觉得以前公司完全就是在瞎搞, 什么...

创作者的灵感从哪里来的?

2024年12月11日 11:36

前序文章是《创作灵感从哪里来的?》,里面提到了「前脑」和「后脑」,这其实更像是你先要对自己有一个惯用脑的定位,这样就可以确定你更容易被什么东西所吸引。其实你会发现,那篇文章是「方法论」,也是我个人认为「最不值钱」的东西。因为你可以在互联网上检索到任何形式的「方法论」,甚至有的人还会将「方法论」打包伪装成课程,让这种「买到就等于学到」的仪式感变得更强。


关于创作,我们在聊什么?

这几天的文章有一个内部逻辑,也是我故意安排的。

  • 《知识越多越堕落》是「Why」,解释了为什么「写作」并不是最佳的「感受-知识-回应」路径,以及我们到底要追寻怎样的「感受-知识-回应」;
  • 《作为创作者,你能分清写作、创作和工作吗?》是「What」,将「写作」从「创作」、「工作」中分离,定位创作者所处的位置,以及将要去哪里;得出结论「创作」更符合「感受-知识-回应」的路径;
  • 《写作与创作之间的黑洞——小说创作》是「How-Why」,小说是通往「创作」的路径,也是容易迷失自己的路径,所以我先呈现了这个黑洞的原貌,以及如何不掉进黑洞里;
  • 当然,以上内容均是我的观点,并不意味着它就适合你,我只是提供了一个「自我定位」的视角。如果你分不清楚「事实」和「观点」的区别,请看《油漆未干是事实还是观点?》
  • 如果你都懒得读,没关系,我也准备好了只需要用听的播客版哦~

创作者灵感从哪里来,看上去像是「How」,实则不然,我会尽量通过内核的方式聊一聊方法论。我之所以会创作这个系列,也是因为今年年初的「实验」已经结束了,这不仅仅是对中文博客圈的实验,也是我坚持写作这么久以来的一次总结。

在「写作圈」停滞不前并不是可耻的事情,只是会有长期处于此圈层的「写作者」,会通过集合乌合之众的方式,去讨伐「创作者」的居心叵测。因为「写」和「创」之间的沟壑,就是很多人难以接受的「我希望被看见」。但是任何人又无法欺骗自己——否则就没有必要在互联网上营造不同的公开身份,找个本地的记事本写写日记也是一种自我的对话。


所谓灵感不是「我能写什么」而是「我想写什么」

在《创作灵感从哪里来的?》里面,一直有一个我还没来得及回复的匿名留言:

我喜欢为了生活而写作,这样感觉有东西可写,但是,如果写作就是我的生活的话我就是为了写作而写作。其实,有时候,写字,感觉就像是读书时代,写检讨一样,心情很复杂,心里在斗争。

我相信这则匿名评论代表了很多人的感受——「我原本以为我可以为了生活写些什么,但是又害怕变成为了写作而写作」。先玩一个「文字游戏」,我小时候写过很多「检讨」,甚至还有当着全班念的「检讨」。大概是脸皮越来越厚,我开始越来越喜欢写「检讨」——因为我知道有人真的会看、聆听、甚至评价我的检讨,那这件事就开始有了「互动」的乐趣。

我相信没有人愿意写「检讨」,因为要检讨的是为了让别人看见自己「认罪伏法」罢了——那如果换一个思路,如果你可以通过文字表达的方式,在认错的同时,也不带脏字地羞辱了这些期待看你出丑、认罪的人,那这就是「创作」的意义了。

回到这个评论,其实恰恰值得创作的是「心情很复杂、心里在斗争」的部分,因为这是内观的开始,先得出自己的结果,然后通过观察他人变成观点,最后再通过观点影响他人。

举个例子:我能不能骂这个人——这需要通过理性思考,去考虑诸多后果,最后很有可能不了了之,告诉自己不要跟这种人一般见识;但是如果换成我想不想骂这个人——那就把骂变得有理有据,甚至能够说服对方自己骂得对。「想的冲动」要比「能的动机」强得多,否则维多利亚时期也不会出现那么多影响整个世纪的情色官能小说。


从「想不想写」再回到「如何写」

我之所以认为「想」很重要,因为它同时需要一个人保持好奇心、善于观察生活、独立思考为什么。找回「想」的能力,会在最后的「方法论」提到。

抽离主轴

把想法变成内容,第一步需要抽离主轴——主轴并不是完全意义上的「大纲」。主轴埋在大量的表象之下,像是一个人翻来覆去地说起他的「流水账」,望不到头地抱怨。情绪虽然是「创作」,也是小说创作需要有的技能,但并不代表情绪就可以贯穿整个写作创作过程。因为没人在乎你的情绪是什么,除非你真的能通过实际案例,调动他人与之共情和感同身受。

这个抽离的方法也很简单,就是问「为什么」。

当然, 也并不是所有类型的作品都适用于这个方法,比如你发一篇游记,就没有必要问自己「为什么」——虽然我很喜欢在看到这些游记之后问一句「你为什么要让我看到这些东西」。

举一些常见例子:情绪的为什么,往往是跟某一个认知有关(参考情绪ABC);观点的为什么,就需要你切换到对方视角去思考,或是寻找「最终受益人」(参考阴谋论);陷入死循环的为什么,往往要及时提醒自己没必要再想下去(参考抑郁情绪);

寻找内核

独断和「一言以蔽之」是两回事,只是现代人混为了一谈。一言以蔽之需要我们有足够的能力,能够发现事物的本质。并不是说任何一部作品都需要呈现出「内核」,而是当你意识到内核在哪里后,它就可以将你的生活进行归类。归类的目的是了避免前面提到的「流水账」。

包括我在做播客节目,和不同人聊起他们遇到的「困境」,一上来都会立马想要得到「方法论」。人们已经习惯性地将事物简单地归类,并统一采用「解决方案」的方式进行拆解。不是不可以,只是这种方法导致的结果,就是在同一种类型的坑里反复摔,直到摔出了快感。

据我观察,人们不愿意接受内核的拆解,一方面是担心自己被窥探,另一方面是害怕自己的问题与原本适用的「方法论」出现了偏差。就好比一个人感冒了就开始吃感冒灵,但感冒同时分为风热、风寒、中风、细菌、病毒等等,每一种分类的解决方案是完全不同的,但感冒灵只适用于其中一种。

内核就是告诉你感冒的分类。但人们更偏向于对「感冒」进行集合,采用简单理解的方式无视内核,只通过表象理解世界。


灵感到底是什么?怎么获得它?

我们抛开灵感的定义,就简单地理解成「你想写」和「你为什么想写」。他们分别指向的是「事实」和「观点」。

为什么「你想写」是事实?因为我们需要将读者代入其中时,是需要提供一个客观的故事背景,从而得出你对这件事情的理解和认知,以及得出的观点。而这个观点如果是内核,又可以推导出其他的同内核的事实(或类比)。

灵感之所以无处不在,是因为如果你多问一句「为什么」,就会发现很多。但值得注意的是,「为什么」不是「抬杠」,而是在尊重事实、观点、独立个体的基础上去提出猜测、寻找证据、得出结论。

另一些灵感,是你可以通过对观点作出认同、补充、个体视角的重新理解、反驳、对抗等方式,得出一个新的观点。或是你认真听完、看完播客或文字,通过检索过往经验的方式,找到类似的、或违背的事实,重新理解、补充观点。

虽然这些看上去很简单,但难的是,你能不能摒弃情绪,避免客观偏见。

当然,这只是其中一种可以通过训练的方式,保持独立思考、持续获得灵感的方式。其他的「方法论」,我会在之后的内容提到。比如,我会觉得时间管理其实是一个伪命题,在没有搞清楚自己为什么需要时间管理的情况下,我们很难坚持下去。而时间管理的例子,恰好就是「我们可以通过什么方式获取灵感」一样的内核。

作为创作者,你能分清写作、创作和工作吗?

2024年12月9日 14:00

这段时间,收到了一位朋友给博客发来的私信,因为评论区引发了他的继续思考。于是,我们聊起了“写作”的内核是什么。

我觉得不存在不想被人阅读的文学作品。不管我怎么辩驳我写作是为了自己,也无法自我欺骗说不想被别人看见。不想被看见的理由,我本可以列出来很多,但我觉得核心原因还是害怕被评价,害怕被读者影响。如果我知道有人在看,我会情不禁地想写些别人想看的内容,而不是自己真正想写的内容。我担心我的作品会难免媚俗。当然我也害怕被批评,怕我的孤芳自赏被打破。但如果没有评价,没有批判,我就永远不会有所进步,永远地孤芳自赏。我心底也不想这样。


我也曾经历过这个时期,我找到一个精准的形容词——“自我驯化”。写作是自我驯化的过程,从一开始的“为自己写”,到渐渐失去对内的动力,便开始寻求“被人看见”。但看见后的反馈并不都是好的,所以我们又会缩回到“为自己写”的硬壳里。这个过程就是“自我驯化”:既想要保证写作的纯粹性,又想被人看见,也害怕被人看见。直到一些人在这个过程中放弃了通过“写作”的方式完成自我认同和他人关注——这也是很多人无法坚持写作的原因。

我跟很多搞创作的人聊起过,是不是都有这样一个时期,创作者会坚守“为自己写”的原则——对,在那个没有办法获得任何、互动和讨论的时期,这是最好的说辞,能够让自己坚持下去。我不反对“为自己写”,因为这是创作者的必经过程。只是这个时期何时结束,因人而异,更关键的是人们是否能够意识到自己正在贪图“为自己写”的硬壳保护。

当然,我们不能在这里讨论作品的“价值”。每个人在为自己创作时,作品都是无价的,因为那是属于个人经历、思考和人格的集合。所以当时博客志对于博客“价值”讨论时,引发了博客主们的争论——

相反,你洋洋洒洒写一通美文,说得尽是些神神叨叨自怨自艾的个人情绪,除了你妈爱看以外,对别人没多少价值。你想开个博客靠抒发个人情感而不为别人的生活增值,却盘算着博客能有前途,这是无知,自以为是的痴人说梦。

《个人博客内容的价值》——博客志

这段话并没有错,只是因为他追加了“被人看见”的条件,所以才有了讨论“价值”的必要。这段话当然会惹怒“为自己写”的创作者们,因为他人的价值标准并不能覆盖作品本身的心血和思考。

这里,也不能排除另一种博客创造的逻辑——为了获得流量,一些创作者希望通过大量关键词、文章基数来获得博客的检索流量,比如如何下载信用卡消费记录都可以水好几篇文章。我其实非常建议他们采用AI创作的方式,让博客获得更多、更容易理解的流量。这时,反而要考虑的不是内容,而是如何吸引更多的人。


以上,就是今天要聊到的三件事:写作、创作、和工作。(也是我在回复私信时的内容)

写作:更多是我们自己与自己的对话,这种写作是自私的、封闭的,却是非常好的自观过程。但是对应的“感-知-应”,是切断了应这件事情的(甚至有的时候还切断了知,只是以为地发泄情绪),因为我们不太希望自己这种比较私人的作品会被他人审视和评价,所以我们会主动切断他人“回应”这件事。因为个人写作更像是为自己贴上某个人格标签;

创作:首先需要我们创造“价值”。比如你的文章实际帮助到别人、让别人产生了共鸣思考、甚至是因为你的观点改变了被人的行为。创作是比写作更看重他人“回应”这件事,他需要我们动用更多的感受和知识,而不是简单地传递“我做了什么”,而是“我为什么会这样做”。所以,当进入到创作的领域,我们就必须要考虑“观众”,要时刻从第三人视角观察自己是否在自嗨、是否能与观众建立连接、务必压制我们想要装逼的冲动变得更加的亲近、能否通过我们的能力将一个复杂的定义构成的知识点,变成普通用户也能看懂的内容等等。另外,在进入到创作阶段时,我们会因为外界的回应开始变得更加的谦卑、反向输入知识、突破创作的“滞后性”主动和他人建立连接;

工作(我另称为“量产”):工作的目的性更强,我是为了获得流量、赚取广告收入、提高点击率。那这个时候,我们需要考虑的是如何让文字能够更吸引人地被人点开、阅读、互动。这个时候我们不可能在追求“内观”这件事。创作是需要“时间沉淀”的,因为我们希望将更好的内容呈现给别人。但是工作不是,它需要更快更高效,甚至可以利用AI自动生成文字。那我们作为创作者进行思考的环节就会变弱,但却是变现的手段;


“你害怕被批评,害怕孤芳自赏被打破”,很有可能是因为你还在“写作”阶段,但你内心其实又是渴望被看见的(这是对“回应”的追求)。

也就是说,你需要跳出的第一个圈层,就是从“写作圈”进入到“创作圈”。创作圈依然可以为自己而写,依然不用考虑任何形式的作品,但同时你也要做好被人审视被人赞美或批评的准备,我们不可能做到尽善尽美,也不可能被所有人喜欢。但是在100个人里,有1个人作为你的“应”,你就可以得到一个“感-知-应”带来的成就感。然而,我刚才也说了,创作是需要时间沉淀的,它确实是一个经典路径,但也是很辛苦、孤独的路径。我们只能不断创作,从1个人给与回应,到10个人给予回应,这就是一个不小的进步。

赞美也好、咒骂也罢,是因为你的“作品”足够有力量,才会让他们鼓掌欢呼和咬牙切齿。

而如何“写作”进入到“创作”,唯一的路径即是——独立思考。

使用自己的域名

2024年12月9日 12:08

在 RSS 阅读器里读到一篇介绍「博主」的文章,点开链接跳转到了一篇微信公众号里的文章,从头翻到尾也没有发现作者的博客链接。我不确定只在微信公众号里写文章能不能被称为博主,我是说,其实妳做不了主,不是吗?被删除、被禁止关注、被封禁……妳可能觉得这些事情不会落在自己头上,但是比这些措施更温和地排挤和压制,时刻都发生在妳身上,总之妳要写它们希望妳写的内容才能在那里生存。这就是为什么我永远鼓励还在写文章的朋友们把文字存放到自己可以掌管的空间。

自建博客的确有不少困难需要克服,甚至有时会影响妳写作的心情。那就选择一个给妳足够多自主权的服务提供商,在妳想要迁移时可以不受阻碍地导出自己的数据。所以,不管是自建博客,还是使用现有服务,拥有一个自己的域名吧,这样就算是更换服务商,妳的读者依然可以通过妳自己的域名找到妳。

fin.

Dec.2 – Dec.8 人生没有一段经历是会被浪费的

2024年12月8日 22:19

因为琼瑶去世的消息,原本打算囤点节目再上线的小宇宙播客,“被迫”启动了。

这两年我尝试了各种将“感-知-应”绕在其上的事情,话剧疗愈、录音视频节目、跟脱口秀演员录制谈话节目、到现在录制播客,贯穿始终的是坚持创作。博客并不是一个可以及时提供“回应”的地方,也是因为坚持创作第三年开始,博客的互动不再是打卡式的留言,开始有了针对观点的交流;认识了一些有趣的、独立思考的创作者;也收到了别人发来询问创作一事的私信。

或许对很多人而言,博客并不是一个需要“社交”的地方,但我们不能否认无论是作品需要得到“回应”的事实。反而值得讨论的是你我们到底在坚持“写作”、“创作”还是“工作”?这个话题是爱博客收到的私信里聊起的,正好我也打算下周来聊聊。

工作室的小黑屋是我用来寻找灵感的地方(大概)

每天,会去工作室的小黑屋录制两段或三段的素材,从30分钟到1小时不等,而我也可以在1小时左右剪完一期播客的节目。播客是另一个“感-知-应”更强烈的事情。而且播客的很多文案内容、话题,又是我坚持写了三年博客600多篇文章唾手可得的。

人生没有一段经历是会被浪费的,而浪费人生的,始终是我们自己。

奶子也会陪我们录制节目

博客2024年的最后小迭代

2024年12月8日 15:15

利用周末对博客的服务器及程序进行了一次升级。切换了 PHP 的版本,并对 Nginx 和 Memcached 都进行了升级。

此次更新主要还是为了启用 AVIF 格式的图片,AVIF 需要 PHP8 才支持。考虑到 92.9% 的主流浏览器已经支持 AVIF 格式,所以我没有考虑对低版本的浏览器进行兼容,直接整站图片替换为 AVIF 格式,删除了原图。整站图片从压缩前的 1.3GB 直接降到了 700MB,效果显著。

我的方法是使用 XnConvert 软件在本地全量压缩后上传至服务器进行切换,再使用 SQL 命令对 wp_posts 和 wp_postmeta 两个表进行图片后缀更新。主要涉及 wp_posts 表的 post_content, guid, post_mime_type 字段,和 wp_postmeta 表的 meta_value 字段。

切换 PHP 版本后,程序扩展还是 Memcached 搭配 opcache,切换 Redis 感觉没必要。WordPress 插件还是 object-cache 搭配 Autoptimize,目前也只使用这两个插件,其他都删除了,更多依赖在服务器端进行优化。

本次是2024年的最后一次折腾博客啦。

主要更新记录如下:
- PHP 版本切换至 PHP8
- 对 PHP8 进行代码适配
- 升级 Nginx 至最新版
- 升级 Memcached 至最新版
- 整站图片替换为 AVIF 格式
- 其他一些小细节优化

年底最忙的一个月

2024年12月5日 09:23

从这周开始,今年最忙的一个月已经到来了。忙碌的时间会持续到1月中旬。这一个月,除了吃饭和睡觉,其他时间都在工作。甚至工作时间会影响吃饭和睡觉。对于我来说,可能会导致精神状态继续变差。

今早,我误操作,将Gravatar头像删了。由于wordpress.com的政策要求,需要1个月以后才能重新注册,因此这1个月之内我的Gravatar头像会变成默认头像。

Gravatar头像消失的1个月,似乎也与我最忙的1个月相映衬了。

2025年1月中旬以后,我会写一篇新文章的——目前这篇文章已经构思了大纲。

帮我测试一下开发的网站VoySeek

2024年12月3日 18:08

玩闹一下

上一阵子用Cursor开发了一个网站,最开始是直接怼HackerNews,但是做完了出来,有点奇怪。因为HackNews本身是一个目录链接网站,并不算社区。

然后我开发完之后,觉得不美观。就找了国内几个社区和网站走了一圈,看了大佬论坛,吸收了点灵感,主要是首页列表方式。看了推特的个人页面,又吸收了点灵感。

然后帖子里面又看了linux.do感觉也不错,又吸收了一点东西。整个网站的技术栈就是最简单PHP+MySql.然后动态缓存,就没有太多高深技术了。

最后就出来这么一个网站,网站的整体设计和功能是我做的,包括配色。但是后台实现全靠CurSor给我码出来的。感觉是个缝合怪,但是本质其实还是一个网站目录集合。

我对他的定位是,发现好玩的网站。互联网上最好玩的就是折腾,大家可以发一切折腾的内容到这个上面。当然科技和互联网为主。不欢迎娱乐政治金融。

开发一切

Cursor是真的不错,用Cursor做完两个项目后的体会是,理论来说不考虑性能和研发时间,我能把世界上所有存在的网站都能开发出来。

网站做完就放着了,昨天浏览大佬论坛,手痒评论了几个帖子,发现很有趣,虽然我做的是一个社区形式,但是本质还是网站目录,所以想就把网站扔出来尝试运营一下。

简洁发布

Hacknews大家有的应该知道,发帖方式就是直接输入帖子链接和标题,自动获取网页描述,这就完活了。我又加了一个富文本发帖,大家也可以不用。

博友可以注册一下,然后发点科技,博客,技术类的内容。最简单的帮我测试的方式就是,直接在自己博客找几个偏向技术和互联网的帖子,然后复制粘贴到VoySeek就行。

地址是这个:https://www.voyseek.com/

不要跑,能注册的都去尝试注册下,拉下老脸让大家给我测试下,正在开发一个AI的资料库,准备把chat,书签,清单,订阅,文档库,memos这种全部写入进去,大家踊跃帮忙测试,拿到测试结果,回头我给大家拉坨大的玩,那个更有意思。

就这样 ,Ending。

 

Follow、或许是博客创作者的暂时解药

2024年12月2日 08:00

原标题是“独立博客创作者的暂时解药”,讨论“独立博客”是个浩大的工程,它是个标准无法统一的、令人不悦的、观点纠缠的话题。它的定义可以先留在这里,就单单从博客创作者来讨论这件事,在今天的话题里,或许又能在过程中找到“独立博客创作者”的定义。

我想从另一个视角来聊聊火了一阵的信息流整合订阅平台Follow。


Follow是治疗信息焦虑的良药吗?

每个人都有自己使用Follow的方法,在这里就不赘述。我跟@杜郎俊赏一样,一开始是希望利用这个软件整合不同平台的信息源,从而解决“红点”带来的信息焦虑感。但事实上,信息订阅软件并不会因为订阅的方式和流程变化,从而缩减或取代人在阅读时所需要付出的时间和思考。

或许一直害怕被主流社会淘汰,这只是下意识的抵抗。但最终不得不承认,这个时代的信息过载越来越严重,即便我主动追寻都赶不上最新业态了,我的精力也跟不上。接受这种必然之后,心态平和了一些,但留下信息焦虑的病根治不好了。

——《Follow 治不好我的信息焦虑》|杜郎俊赏

目前,Follow已经接入了简单的AI功能,无论多长的文章,都可以提炼成简单易读的一段话。我不知道有多少人是依赖这个功能的,用这种方式最快地读“完”他人的文章。我个人对AI的依赖程度不大,AI总结或许是一个不错的“导读”,但阅读全文我是为了理解创作者的内在逻辑和观点的推演过程。

我相信未来AI接入会更加的彻底和丝滑,甚至可以通过“重构”的方式将创作者的内容完全拆解,压缩内容、精简逻辑、拆除个人情感。那时候,会不会完全变成一个充满恐怖谷效应的AI加工品?


AI是否是创作者的毒药?

这是一节题外话,接续上面的话题。我相信未来AI的功能会更加强大,并形成“创作者-AI-读者”的关系。AI或许可以为读者提供越来越多的便利,但如果读者完全依赖AI的功能时,那还需要“创作者”吗?

前段时间,大量的创作者从X平台逃离。是因为新版X服务条款提到,平台打算把用户的文字、图像、视频用来训练AI,而且会出售给第三方合作伙伴。其中并未提到退出机制,换句话说,在11月条款正式生效后,用户在X里发布的内容都将成为训练AI的素材。

如果AI将创作者的内容作为“血液”不停榨取,这或许是对创作者的一种不尊重。特别是当读者完全依赖AI,就算创作者统统离开,AI因为收集了足够的作品,是否也可以创造出读者已经习惯阅读的作品?

单从「写作场景」来看,这种“普遍认知”会持续分化“能写作的人”和“完全依赖 AI 的人”。这种分化不仅关乎写作技能,更关乎思考模式、思维能力、逻辑能力、认知能力、组织结构能力批判思维能力等等,甚至包括底层/本质的学习力和竞争力。

——废话集 ℠

中文博客圈的无可救药

我在《无聊的中文博客圈》提到一个点——博客因为严重的滞后性,从创作发布、到被人看见、再到引发共鸣互动,因为观点的互动,本身会受限于“沉默螺旋”。最近我找到一个非常精准的名词来形容中文博客圈——递归岛屿

图片由ChatGPT生成

中文博客圈首先就是一个巨大的孤岛,过时的载体、技术开发门槛及成本过高、备案后的“自我审查机制”、非即时性地信息呈现、普通阅读者获取路径复杂等;孤岛的内部是另一个海域里再分布着的不同孤岛,这些孤岛正是我们这些所谓的“独立博客”。有把域名当做宝的、有三天两头就捣鼓模板的、有不停创作孤芳自赏的、也有很长时间失联的……大部分时间,都是孤岛之间的自娱自乐,久而久之的抱团,互动的人群、模式、甚至是评论内容都变得公式化。

递归岛屿的内部孤岛之间翻起再大的浪花,也只能在这个孤岛内部的海域里无人问津。而中文博客圈孤岛以外的海域发生着朝代更迭的战争,个体的独立博客又还在自娱自乐。但是战火迟早会延烧到孤岛,但那个时候为时已晚——博客时代最终的结束,一定是当递归岛屿内部的所有所谓创作者都在玩一样的自问自答游戏、发出一样的声音、群体吞并群体、乌合之众猎巫独立个体的那一天。

这样看起来,中文博客圈真的无可救药了。


概念式春药只管勃起不管活好

最近有一个特别的现象。当我的博客开始在Follow上作为一个信息源出现后,它在短时间内得到的关注度、阅读总量已经接近博客的三年运营。在递归岛屿的中文博客圈,独立博客很难做到真正的“被看见”或者说是“引发共鸣地被看见”。

因为Follow的曝光,越来越多人关注到内容本身,甚至会有人透过文章预留的Telegram参与互动,或是跟我直接就文章的观点进行交流和讨论。Follow是通过RSS抓取博客的的文章发布,并不会就博客关于里的生平小作文、设计风格、创作概念进行抓取,独立博客的“内容”回归到了本位。

概念,是一个非常抽象、私人的存在。特别是当作品未完成、完成度有困难、无法坚持完成、甚至作品根本不存在时,概念就成了暂时的春药——不停地向人阐述自己将会创造多么牛逼的作品、能够给社会带来多大的启示、能够引发众人多深的思考——但是作品呢?“还没写出来呢,你先看看这个概念,看看这设计风格,多牛逼啊!”

没有“创作内容”,自然就不会被抓取,不被抓取就不会被看见,也不会点进原本的博客里看到那牛逼的“概念”。


Follow或许是博客创作者的暂时解药

既然Follow抓取的是博客的内容,且是按照时间线抓取的内容。博客内容发布即成,变成了期刊的概念,这是信息流遵循的规则。于是在这个规则之中,也能直观地看到博客本身的创作频率;回归内容后,读者可以免于博客设计元素的打扰,看到博客本身的创作质量。

我之所以提到了“暂时”这个词,也是保留了对AI的态度——如果真的形成了“创作者-AI-读者”的结构,创作者会不会因为AI的吸血而再一次出现孤岛化的情况。另外,我在《中文博客圈的“鸩酒”与止不了的“渴”》里也提到,创作者对AI的依赖,也是一个不能忽视的问题。

Follow的用户群远超过原本中文博客圈的量级,确实可以让独立博客暂时脱离递归岛屿的困境,但Follow能够走多远,会不会也因为无法真正解决信息焦虑,很快沦为“概念”。另外,Follow依赖的并不是社交属性,所以无法让读者和创作者形成互动。互动缺失本身也是孤岛化的构成要件之一,但如果通过订阅可以引发思考,进而引导至互动空间,这又是博客功能对Follow功能的弥补。

当然,也可以通过利用RSS只抓取摘要的方式,避免Follow可以显示全文,使得用户需要进入博客阅读完全文。但用户是否愿意跳出APP,特别是手机端的Follow上线后,这是需要另说的事情了。

但这一切都是“暂时”的,核心不是平台本身,而是创作者本身是否真的能够坚持创作、坚持高质量创作。当独立博客的内容被丢入全面的信息海洋时——那些自娱自乐的部分,就必然要接受更多受众的审视和裁判。


那独立博客到底是什么?

在中文博客圈的递归岛屿里,孤岛之间可以按照占领的时间、岛屿大小、抱团的程度来选出“最有话语权”的“主岛”。或许在孤岛内,还会有见面三分情、大佬要面子的规则。一旦信息完全公开至孤岛以外的平台,就必然要接受来自他人“价值标准”的认定。

问题就立马从“我为什么要创作博客”变成了“我为什么要订阅你的博客”。这和创作者的创作初衷并不矛盾,而是来自外界的价值认定我们既不能统一标准、也不能让别人闭嘴。除非我选择关闭博客的RSS抓取、拒绝自己写给自己的作品被投放至公共领域。Follow的信息可没有“先来后到”一说,用户完全是根据自己的喜好订阅信息源,不是靠你我形成几个创作联盟就可以垄断,将他人拒之门外的。

举个话糙理不糙的例子。一百个人都在写日记,用户就算订阅了全部日记,也会挑选有趣的查看——对一些人而言,“性爱日记”当然要比那些“吃喝拉撒日记”更吸引人眼球。如何从这一百个人里脱颖而出,不仅仅是标题党这么简单,Follow回归“内容”,那内容就变成了当下的直接评判标准。

每个人对独立博客的定义不同,但“内容”又是大家无论如何都无法绕过的核心,否则大家只需要批量生产概念即可。这个话题可以留在以后细聊。如果你有任何想要分享的观点,欢迎透过莫比乌斯频道或博客内联系方式进行互动。

徐州客户

2024年11月22日 12:20

周三上午9点收到客户信息,疑似产品问题,我问了几个可能发生的情况,都说没有,那就奇怪了,我想着干脆去一趟吧,无锡到徐州,5小时路程,10点出发的,买了10只大闸蟹礼盒(5雌5雄,55元/只),到客户公司已经下午3点,我检查了一下产品,确实坏了,但不是我方原因造成的,给对方指出了问题所在,给我的感觉是,客户没觉得这事很严重,那就好。拉着我一顿闲扯,说晚上要带我去吃当地有名的烧烤,徐州烧烤,喝点酒,拿了瓶黄酒出来,他说“只能喝1两,剩下的你喝”,结果他真是喝了一两,脸红了。。烧烤味道不错,肉质很新鲜,价格也便宜,上了好几盘羊肉串,没吃完。周四一早就回来。


首页,有过留言的博友链接做了一些修改,把头像改成名字显示,因为有些头像看着不知道是谁,名字就非常清晰直接,看着清爽,留言数量大于等于50条的,颜色为蓝底,大于等于100条的,颜色为红底。

AI巴别塔与信息焦虑 III

2024年11月28日 11:00

前段时间,一个未留下联系方式的朋友,后台私信了我Follow的邀请码。我试了试这个信息源订阅工具,确实要比一般的RSS订阅方便很多,但同时我也对自己发出了一个疑问——我对RSS订阅软件在期待什么?

你对这些信息源的软件又在期待什么?


2021年年底,我在注销豆瓣之前,把“想读”的书单特地导出备档,书单到今年才陆陆续续读完。也算是完成了对自己的一项承诺——所谓的“想读”不是在标注完之后就代表我读完了这本书,更不代表这本书反映了我想要装小我的符号。在Follow之前,我也会用RSS订阅软件,订阅我常看的博客和几个单一的总数不超过10的信息源平台。我对“未读红点”这东西非常反感,就像是皮肤上的红疹,它在未留意的时候成倍增长,但是我的阅读精力每天只有这么多,久而久之就变成了999+,像是约定俗成的规则,又一次宣告这个信息订阅软件变成了手机应用里的图标装饰。

试着回想一下,你在折腾笔记软件时,是不是也非常享受笔记从一个笔记软件导入另一个笔记软件的过程?为它们挨个打上tag,然后让笔记和笔记之间形成网络关系图。然后,又开始寻找下一个别人口中“更好用”的笔记软件。工具并不会让创作变得容易,反而会变成停滞创作的借口——因为下一个软件或许才是最好用的。

对此,我会建议你先确定一个核心问题:你的仪式感是为效率服务,还是你迟迟不愿意迈出第一步的借口?写作很简单:记下灵感→把它完成。但是迈出第一步很难,所以仪式感成了一个非常完美的借口。

——《创作灵感从哪里来的?》

写文章没那么难,去掉一些仪式感,扔掉那些不存在的门槛。只要清晰地表达你的想法,很简单的点子也可以写成文章。

——《我与社交媒体》|極客死亡計劃

如今,创作或许还在变得更加举步维艰。信息源持续爆炸式增长、AI量产作品混入其中、甚至是创作者习惯性依赖AI辅助,这些正在发生的事实,我们很难评判它的对错。但我们也实际看到了纷杂信息、AI作品对个体带来的破坏性的影响——失去独立思考、失去“深度”、失去属于个人的“系统性”、对“稍后阅读”的依赖形成多巴胺效应。


失去独立思考能力与思考“深度”

从看书、到视频演讲,从微博到抖音,文字内容越来越短、视频内容无限细化切割;现在甚至还发展出了有声读书,包括Follow有一个让我翻白眼的功能:我今早不小心打开了我博客文章的“朗读”功能,于是,一个别扭的男性合成音无情地读着我的博客文章——这他妈是什么恐怖谷效应啊!AI朗读剥夺了阅读所有的“思考瑕隙”,段落与段落之间预留的停顿,原本是让读者有时间去检索自己的经历,并找到类似的情况。完全没有留白的空间,不去思考也变成了惯性。

不是说有声不好,而是在没有“系统性”的框架下,这些朗读的内容不过是一听而过的白噪音。它和谈话类播客不同,播客本身因为有聊天气口和互动,会让思考从主持嘉宾回到听众的思考范围。

我有时候会开玩笑说“抖音其实是佛教产品”,这句玩笑蕴含了非常恐怖的“个体主体性丧失”过程。因为切碎的视频,一无法引起深度思考;二就算你正打算要思考,下一个被切碎的烂肉又出现在你面前,打断你的深度思考。这仿佛就是佛教里的“戒断”,让你放弃追问和恼人的深思,享受当下的感受和回应。

从「信息传播者」的角度,利用信息受众“偷懒(不愿高度专注)”的心理,音频、视频的作者能够更高效地收割受众的注意力,但受众却很难从中获得深度思考。从「信息受众」的角度,听音频、看视频比读书可以更轻松地获取信息,耗费的心理能量少,不需要高度专注。但获取信息的单位时间效率和准确度都不高。好书好比我们吃荤素搭配的大餐,我们的大脑好比是整个消化系统。而音频、视频则就像是我们不吃饭,改输营养液。

——《如何快速阅读「闲书」及有效「输出」》

当深度被切断,就像是无法继续生长的树根,只汲取浅表的营养,树无法生长、也无法扎根,更无法形成个人的“系统性”。说白了,这些知识都不是你的,在你点开、未读红点消失、变成阅读者数值之一后,它又消失了茫茫的数据海洋之中。

要我说,Follow就应该开发一个“阅后即焚”的功能,看过的文章不应该是“归档”,而是彻底被删除——“免费的,才是最贵的”。


系统性知识框架是为了随时扩展的认知边界

图为丁锐给我的《动力系统》,原本是用于创作剧本时构建人物原型的工具,如今我在上面添添补补,已经变成我能够轻松拿取的知识框架。

《AI巴别塔与信息焦虑》这个系列正是我今年上半年陷入到严重信息焦虑后的思考,在此过程中,我用脑图整理过自己的“知识框架”。比如,我之前在博客和频道提过的“贱人总是成对出现”,这是一句在知识框下联动了好几个知识之后浓缩成的一句“吐槽”。比如它涵盖了安全缺失症、神经官能症、亲密关系中的虐恋关系、群体关系里的乌合之众、意识形态-社会道德中的自由主义、以及认知束缚里的情绪ABC原则等等。

为什么需要系统性知识框架?我无论是在阅读信息流、书籍、甚至是无聊时刷到的短视频,都能试着将它们分门别类地放回到这个知识框架的书架上,因为共同的底层逻辑,要理解这些碎片化的东西就变得更加容易。而当我需要创作内容时,我又可以从这个知识框架的书架上,按照分门别类的方式取下对应的书籍。比如《中年男人的独处时刻》里,就是一个同时抽取好几本书的思考结果。

不能忽视的是,系统性知识框架本身也是“认知束缚”和“确认性偏差”的罪魁祸首。如果这个知识框架非常狭隘,认为美帝国主义就是导致中国一切矛盾的罪魁祸首,那这个知识框架可能会运作得非常好,但同时也会有失偏颇地越走越狭窄。所以,才需要“社交”和阅读来作为保持边界的持续拓展。

系统性知识框架就跟自动驾驶一样,它要收集的数据不是那些符合认知规则的、包含在知识框架内的东西,而是要不停地收集“事故”,通过“决策逻辑透明性”的方式,尽可能地、客观地、摒除情绪地分析事故发生的原理。比如,这是一个完全超脱知识框架认知的事件,它为何发生;我对一个人或事分析偏差,是我的认知偏差还是超脱了系统。但这样的自查结果常常伴有强烈的羞耻感,因为我既要承认自己的系统性知识框架出错(甚至全盘出错),又要接受他人的观点并理解观点形成的过程。

光是这一点,我并不觉得大部分人做得到,甚至是有些所谓的独立博客创作者也做不到——因为他们连接受不同的声音都很难,更别说要重新修正自己已经固有的认知,和放弃因为“资历”得到的群体领袖地位。

但是我又不赞同人们去做系统性知识框架,我会在下一期的《AI巴别塔与信息焦虑》着重提到。

除了系统性知识框架,其实你只需要做到,重新发现自己的生活、过往完成的“作品”(至少是你经过思考后所完成的),从这些只属于你的宝贵经验里抽出“内核”,也就是所谓的“底层逻辑”;但在此之前还有一个更重要的过程:摒除情绪。所谓的摒除不是压制,而是通过识别、分析成因、引导情绪的方式让自己越来越客观理性地看待人或事,而不是用条件反射的方式去攻击他人,捍卫自己脆弱不堪的尊严——这才是所谓的“打败自己”。

所谓“赤脚的不怕穿鞋的”,并不一定是指他们不害怕“失去”,而是因为他们有“重新开始”的能力和勇气。


“稍后阅读”的稍后到底是多久?

标记“稍后阅读”是一件非常容易成瘾的行为,因为在你存入容器里时,你的大脑已经完成了“奖励机制”——“我要把这个东西存起来,之后慢慢读,哇我真是一个爱阅读的人啊”。说不定你的大脑伏隔核正在习惯了这样的刺激,点“稍后阅读”的那个行为就已经可以完成奖励带来的快感。

现在,打开你所有用于保存“稍后阅读”的容器,例如豆瓣的“想读”、浏览器的“稍后阅读”、Notion里的网页保存,数一数有多少“稍后阅读”到最后事实上都没有读过。那么,现在就去把它们读了吧!

我在steemit平台上写文章的原因

2024年11月26日 23:38

过去几年里,我除了维护几个 WordPress 博客外,还经常在 Steemit 上写博客。我更喜欢在 Steemit 上写作,因为它有以下几个独特的优势:

区块链存储内容

在 Steemit 上,所有的帖子和评论都会被永久存储在区块链上。这意味着内容不仅持久存在,还能抵抗丢失或审查。与传统平台不同,这些平台的内容可能因人为删除或服务器故障而丢失,而区块链的去中心化特性确保了我的作品始终可以访问。

图片上传便捷

Steemit 的编辑器大大简化了图片上传的过程。我只需将图片直接粘贴到编辑器中,它就能无缝地嵌入到文章中。这种无阻碍的操作比需要手动上传或依赖外部图床的方式更加省时省力。

搜索引擎可见性更高

在 Steemit 上发布的文章通常在搜索引擎中排名更高。这可能得益于 Steemit 的域名权重和区块链存储内容的公开可见性,这让我的作品能够触及更广泛的受众,提升了内容的曝光率。

获取创作和点赞奖励

Steemit 独特的奖励机制让我通过社区点赞赚取 STEEM 代币和 STEEM Power。这些奖励为我的内容带来了实际价值,使得在 Steemit 上写博客不仅在创作上令人满足,也在经济上具有回报。这种激励机制鼓励优质内容的产生,同时也促进了志趣相投的社区之间的互动。

英文:Why I like to Blog on Steemit?

whale-300x200 我在steemit平台上写文章的原因 STEEM 区块链 SteemIt 区块链 资讯

Steem 坐火箭🚀!

本文一共 443 个汉字, 你数一下对不对.
我在steemit平台上写文章的原因. (AMP 移动加速版本)

扫描二维码,分享本文到微信朋友圈
75a5a60b9cac61e5c8c71a96e17f2d9c 我在steemit平台上写文章的原因 STEEM 区块链 SteemIt 区块链 资讯
The post 我在steemit平台上写文章的原因 first appeared on 小赖子的英国生活和资讯.

相关文章:

  1. 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
  2. LOGO 海龟作画 系列三 递归画一个国际象棋棋盘 今天我们要来讲一讲递归. 递归就是函数自己调用自己, 我们可以定义一个过程, 然后这只海龟不停的画, 结束的时候再调用自身再继续画. 再次调用的时候参数变化了, 至到参数满足一定的条件则停止. 比如 下面定义的这个过程可以用来画一个实现的正方形. TO FK :B IF :B>15 ;...
  3. 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
  4. 有个兄弟姐妹是件很好的事情 越来越觉得两男孩子真心好. 好处有: 两孩子年纪相仿: 我家老大6个月的时候 媳妇一不小心意外怀孕了, 这才有了老二. 最开始两人一起带很累, 但是并快乐着, 现在两娃可以兴趣一样 可以玩到一起, 一起成长. 老大的衣服鞋子可以给老二穿哈, 不浪费. 玩具可以一起玩, 但是.....
  5. STEEMIT 简易SP代理工具 当前, 加入STEEMIT CN区低保银行的一共有40个人, 一共代理给 @justyy 银行大约 6400 SP. 好处是每天能收利息 (14.6% 年化率) 并且能获得至少一次的双倍点赞. 代理的方式是通过 steemlogin.com 但是很多人都搞错,...
  6. 《Steem 指南》之 justyy 在线工具与 API 系列 – 查看被删除的帖子或评论 前言 大家都知道, STEEM上的一言一行都是会被记录在STEEM区块链上的, 哪怕是7天内可以修改(或者删除)文章或者评论, 修改的记录也都是会被忠实的记录的. 不相信? 这个在线工具就可以做到把删除过的评论给列出来. 工具地址 中文: Steemit 查看被删除的评论 英文: Steemit Deleted-Comments Checker...
  7. 你给SteemIt中文微信群拖后腿了么? 这年头不缺算法, 就缺数据. 这两天花了很多时间在整API上, 整完之后自己用了一下还觉得真是挺方便的. 今天就突然想看一看自己是否给大家拖后腿了, 于是调用每日中文区微信群排行榜单的API, 刷刷拿着 NodeJs 练手: 1 2 3 4 5 6...
  8. 在英国的第13个圣诞节 Merry Christmas 2017! 2017, 这是我在英国的第13年. 从2004年来, 每年圣诞节都是在英国渡过的. 最开始几年担心过节了商店没开门在家饿死所以早早屯了年货过年. 在英国感觉时间过得特别快, 也许和冬天天黑得早有关吧, 一天黑, 除了大伦敦和其它几个大城市, 其它小城镇几乎没有夜生活, 岁月静好. 这几年日子稍微好过些, 圣诞节总是要吃火鸡肉. 媳妇做了西式的晚餐, 烤箱烤熟了然后放上卤肉酱,...

回答一则有趣的私信 II

2024年11月26日 16:33

我怎么没想到,这个内容可以做成一个系列的。自年初挑战了中文博客圈“大佬”们的价值观之后,时常会有人通过私信辱骂我,但是骂归骂,多少没创意,骂来骂去都是介绍他们自己是傻逼,或者自己的妈要死了。今天倒是收到一条比较有趣的“辩护”。

有可能是@白熊阿丸 最近两篇文章,都提到了我博客上比较有争议性的文章,例如讨论中文博客圈无聊的原因,还有将友情链接类比成“小学生”行为。以至于我阴魂不散地出现在了别人的博客,所以对方顺藤摸瓜找到了我,并找到了私信入口。(我个人觉得是一种真爱黑粉)

我爱怎么写博客怎么写,我爱怎么交换友情链接怎么交换,你算什么东西来质疑我,关你屁事!傻逼死妈玩意!

傻逼莫比乌斯

你看,你不留下你的博客网址,我怎么来质疑你的动机呢?

我觉得我有必要集中聊聊了,我们在这里讨论什么:

  • 这个博客的任何一个观点,都没有在阐述对与错。我的观点不和你一致、没有赞同你的观点、甚至没有顺着你得意思说,都不代表我在否定你;
  • 当然,也有可能,你连“事实”和“观点”都分不清楚,那么请看《油漆未干是事实还是观点》
  • 我很欢迎你在这里进行观点的交流,但不是为了反驳而反驳。比如私信里的这位朋友,他觉得切断了我的观点,就可以证明自己的行为是正确的。如果你习惯性地通过否定他人来证明自己的正确性,那么请看《中国人的A与B》
  • 如果你非常不爽我,希望通过召集一群乌合之众对我进行讨伐,甚至是联名要求各大中文博客圈网站将我除名,我也可以教大家一些具体的“挂人”方法,那么请看《捧臭脚的真谛是说它香还是夸它臭 II》
  • 如果你想给我扣帽子,那么你可以学习一下阴谋论的内部结构,好让我陷入到无法自拔的自证陷阱。那么请看《阴谋论是非黑即白的最后一层遮羞布》《让别人跳进他为你亲手挖的自证陷阱》

被骂我倒不介意,我比较介意的是我们能不能保持同频去聊彼此的观点,而不是一上来就咒骂对方,甚至是评价对方“走火入魔”而切断了所有的交流,你看,我这不“走火入魔”得有理有据,甚至还有方法论。

最不自量力的,是打算通过诋毁我的道德水准(我当然也没有)的方式,否定我所有的创作内容,认为是我心术不正在先,所以我的作品也没有必要阅读。那这我就不乐意了,这是核武器级别的对抗,甚至不给我任何发言的机会,那么与之相对应的核武器反制手段也有:

  • 要怀疑我的创作动机?那你先坚持五百日写作之后我们再平等讨论。总不可能你拿着五篇无人问津的文章,来讽刺我写的超过五百篇引发过他人思考的文章吧。

另外,值得称赞的是,这位私信的陌生朋友,在称谓一栏填写的是“傻逼莫比乌斯”,而不是“傻逼”,此前我已经收到过太多自己称自己“傻逼”的私信了。

下一期再见。

Nov.18 – Nov.24 如有冒犯,你觉得是故意那就是故意

2024年11月24日 11:00

“你真是太好了,想付费给你都不收。”

一位想购买我的博客主题的博主

并不是我不想买卖主题,而是“我没有准备好”。最后我在没有收取任何费用的情况下,将打包好的数据交给了对方。事后,我有认真思考其中原因——我不是在抵触交易本身,而是在抵触“我要负责到底”这件事。

在我的人生规则里,个体的自由排在第一,其二就是契约精神/程序正义。如果我收取了对方费用,我必然会为他的博客呈现至他想要的结果负责到底,甚至还会为他制作后续的操作流程图、为可能发生的错误/需求进行预判并提前制作方案,以及提供必要的“售后服务”等等。

若我还没有准备好“交付”,我很难承诺我会帮忙,所以“举手之劳”的底线就会放宽很多。因此我这种人的bug会发生在“以人情世故作为规则”的人身上,酒桌上可以吹嘘答应任何事情,但真要推进的时候拉跨得不行,最后还倒欠了对方人情。


人言可畏

当我们谈起阮玲玉自杀

阮玲玉的自杀一直是个“谜”,与其说是谜,不如说是人们希望她因何而死。所谓的“人言可畏”,也正是阮玲玉在自杀前最后遭受的社会各方的舆论压力,导致的最后结果。这是一场“没有一片雪花是无辜”的社会事件,所以但整个社会都成为被指控的罪人时——谁才是造成沙堆效应的最后一片雪花,就成了“谜”的内核。

人言可畏,成为一个法不责众的游戏,分摊到每一个“人”身上,所谓的“言”也不过是一片轻如鸿毛的雪花罢了。


CNN失去了一半的观众。

现代新闻媒体现状

每次回父母家吃饭,我都会特别关注现在电视频道的广告内容。特别是地方台,广告已经完全“老龄化”。不仅仅是针对人的“老”,例如种植牙、心脑血管疾病、养老院等广告,也会针对物件的“老”,比如房屋换新、管道改造等广告。

电视台在以肉眼可见速度丧失它的观众群体,不仅仅是因为新媒体的冲击,也是因为新闻媒体到最后走向了某种“单一性”的必然结果,这其中也包括CNN。小时候,我会非常羡慕新闻、报业、杂志从业者,认为他们在为真相发声。后来在报业兼职过一段时间,每一次收到“行业舆论指导建议”邮件的时候,我就会祛魅一次——这个邮件就是在针对每一次突发事件后,统一媒体之间的“口径”所用的“命令”。

新闻确实是为了发声,但发的是谁的声,我在那个时候才意识到。


“为什么一定要让别人意识到自己的真实想法呢?”

《无聊的中文博客圈》后和朋友继续下去的聊天

这并不是“一定”,而是如果因为我的博客开始思考问题的人,自然而然会被引发思考,留言或是写一篇博文阐述他们的想法,甚至是咒骂一篇站站队。

我接触过太多“泥鳅”,之所以称之为泥鳅,是因为他们太容易滑走。特别是涉及到一些需要他直面的真相时,总是会本能地切换赛道、或是用一个外因来作为最终解释权。就好比,你问一个“买服务器、域名,研究模板做jb的友情链接”(感谢三十里海河的清晰表达)的人,他是不是希望自己的博客被更多人看见,他会立马纠正你“我的博客是写给我自己的”,那这句话是希望我们继续交流、还是他自娱自乐不希望被人看见、还是他只希望听到对他的赞美而不是质疑?

这就是所谓的“不真诚”——当然,不真诚也没有对错。只是在这个过程中,因为维系人设的不真诚而无法将其他的真诚连接,然后又变成了一个巨大的外归因——是因为你们不真诚,所以我也没有必要表达真诚。

这里,我不仅仅值得是博客,它可以延展到我们社交的任何一个环节,比如很多人不再当作朋友圈使用的“朋友圈”。


“當公理無需證明的時候,它就變成了信仰。”

那个写色情小说的家伙,这样对我说道

我们需要证明自己的“潜意识”吗?显然不需要,大部分时候我们都不需要屈从、甚至是弄清楚为什么地做一件事。当然,这里又必须强调,这样的做事逻辑没有对错。但是什么时候需要开始“证明”呢?

比如我们重复在同一类型的坑里摔跤、爱上同一类型的人渣、总是因为一类事情情绪失控甚至无差别伤害自己的亲人或朋友、总是逃避某一类型的选择、总是无法将一件事情坚持到底……

与其浑浑噩噩不明所以地经历这一生,我觉得不去考察是一件浪费的事情——当然,这里又必须强调,浑浑噩噩不明所以地经历这一生没有对错。但是“考察”也不意味着全是好事,虽然苏格拉底认为“未经考察的人生是不值得过的人生”,但是过度考察是否意味着无法再“随心”而过了?——这便是休谟反对苏格拉底“考察”的理由。在哲学的世界,对错变得更加模糊,无论用哪一种方法,都可以过完这一生,只是看你选择什么,且这些选项之间根本就不是“矛盾存在”的。

很显然,我或许是在对抗“信仰”,因为大部分人认为没有必要去“考察”和“证明”自己写博客的初心,甚至不允许颠覆这种“为自己”的纯粹。当我提出了“人希望被看见”所以“作品也希望被看见”的新观点时,自然就是在颠覆已经无需证明的公理罢了。

当然,这里又必须强调,不去“考察”和“证明”的创作也没有对错。我只是提供了一个路径,去“考察”作为创作者时的另一个自己。


“是的,这个博客所表达的一切内容,都没有在讨论对与错。”

如有冒犯,你觉得是故意那就是故意。

RevolverMaps下线了

2024年11月24日 01:09

我的访客记录页面本有一个3D的地球图案,用以记录和实时显示当前正在浏览此页面的用户,是个非常漂亮的动态组件,今天发现不显示了,一开始以为是DNS解析的问题,结果排查下来发现是这个服务下线了,官网也关了,只留下了两句话:

RevolverMaps has shut down.
Many thanks to all users and supporters of the service!

—— https://www.revolvermaps.com/

自从玩博客以来,从Web 2.0时代至今,用过了很多有意思的插件、组件,还有许多的主题、第三方图床、音乐服务。这个3D地图是我自接触它就一直用到今天从未想过舍弃的组件,至少有10年以上,不知道RevolverMaps团队是资金出了问题还是单纯地不玩了。在网页存档网站搜索了一番,favicon11月7日都还是正常的,favicon11月16日已经下线服务了,关站应该就是在这期间里的某一天。

实在惋惜,虽然再次印证了第三方服务随时会跑路的定律,但还是感谢RevolverMaps的陪伴!

以前的截图,上面的3D地球图案就是RevolverMaps


除非注明,三棵树阁文章均为原创,转载请以链接形式标明本文地址
本文链接:http://www.sksren.com/archives/1994.html

独立博客自省问卷15题

2024年11月23日 15:07
感谢雅余同学发人深省的15问,看到不少博友都回复了,挺有意义故而也参与下,顺便扩散下。 1、你的博客更新频率是多少? 答:这个不一定,一是看心情,二是看时间,三是看有没有想写来的东西,三个碰巧都有了,那就会更新下,一般来说,短则一月两三更,...

读《莫比乌斯先生和他的读者》后的谢罪书

2024年11月22日 21:34

看到来了这么多流量和观点的互动,我就知道我大概是又炸了坑了。

这个时候就收到了一些观点,比如认为我其心可诛地批判了既可以是自我表达(写给自己),和观点交流(给他人看)的博客。认为我当初创作的《写博客是为了自己就别他妈发表出来啊》,是在扯淡,认为我在对这一类博客主赶尽杀绝。

我在文章里提到了“如果写给自己的,干嘛还要公开发布呢?”这个问题,是为了让创作者思考一个切实的问题——自己的作品到底希不希望被他人看见?

当你承认“写博客”就是为了“得到关注之后”,自然也会反向敦促自己是不是不应该写那些自话自说的“日记”,因为人们包括我自己,最关注的始终是自己,才会因为找到了臭味相投的人、或是引起共鸣的事而产生链接。如果“写博客是为了自己”卡在那里,就会变成一股拧巴的能量,一方面因为得不到关注而自我安慰,但另一方面又因为自我安慰带来不了实际的成就感而自我攻击……

我并不是说所有写博客的人都是为了得到他人关注,但是公开发布作品的人,有必要问清楚自己这个切实的问题——自己是不是希望得到关注。我相信,人类作为社会动物,都是需要被看见的,否则他的存在性会完全丧失,自观是一个路径,他观也是一个路径,这两种没有对与错,只是看个人取舍。自观是难得的自省,但也容易孤芳自赏、闭门造车;他观能够看到更多不为人知的自己,但也容易过度在乎他人目光而活得疲惫。而人们拧巴的点就在于明明希望被看见,却又逢人便说自己不在乎他人眼光。当然啦,这种拧巴当然也没有对错,也是一种选择,成年人应该为自己的选择承担其“代价”。

如果真要承认个罪行,那就是“标题党罪”?这我认,毕竟大家都希望做好人,那我就做做坏人来讨论些大家容易拧巴,却又不愿意直面的真相。

我认为这种观点的互动有必要的,因为凡真实的,必会相遇。


补充一下:所谓的“互为借口”

“我其实内心希望被看见”和“我是为了写给我自己”,这两者并不是非黑即白的存在,它们在某些特定条件下是共生的。比如,我既希望“被看见”,但是又强调我是“写给自己”。但是既要又要的结果就是“互为借口”。

当我希望被看见的时候,一旦效果不好无人关注、收不到我希望的正面评价,我就会逃到“写给自己”这个领域,以它作为借口,开始闭门造成固步自封;而当我开始“写给自己”的时候,其实内心又无时无刻在想想它被看见时,能给别人带来的印象,于是我又逃到了“希望被看见”,以它作为借口,开始泯灭真实献媚虚荣;

互为借口的结果,就是反复横跳,到最后什么都得不到。每过一段时间,删掉所有的创作或是重建博客,决定为自己活;然后过一段时间发现无人问津又删了所有创作或是重购域名,决定找回自我——那最后什么也留不下。当然,我举例的是戏剧化的例子,并不是指每个人都这样。

博客二十年

2024年11月22日 12:55

不准确,但差不多。我还是在 RSS 阅读器里接连看到几篇「写博客 X 周年」的文章才想起自己写博客有二十年了——转瞬即逝。我写第一篇博客文章大概是在 2004 年 5、6 月份,初时无从下笔,便把动画课拉片时看的一部短片改编成了两段小故事。但是后来几次更换域名、服务器,导出、导入的时候有些损失,加之每次做这种搬迁的工作难免要回顾旧文,看了感觉羞耻的古早文章也删掉了一部分。现在难说有没有后悔的情绪,不过应该不会再做这种事了。完全不是不舍得再删,其实全部归零也无妨,只不过,删删减减,像是还在修补颜料早就干裂的自画像。

扯远了,但不算跑题。写博客当然是一种写作,不管是像我这样写自己想些什么、做些什么,还是写技术博客记录心得、制作教程。写作总归会让写作者从日常不自觉的行为和思考模式里跳出来,去和读者对话,哪怕读者就只有自己。妳会用写作,尝试着和读者沟通,挑战她也好、说服她也好……就连哪些留哪些删,这个动作,或者决定全然不删,这种态度,其实也都是沟通的一部分。或许正是二十年里的无数次和自己的沟通,让我接受了曾经的自己,找到了想成为的自己。

fin.

无聊的中文博客圈

2024年11月22日 10:42

有的时候,从局外人的视角看局内,会更有趣。

最近一朋友得知我“还”在写博客后,询问我现在的中文博客都是哪些人在创作,又都在写些什么。说实话,我并没有关注和研究过,我收集的博客本身也是从别人的“友情链接”网里,发现的有趣的、我能看懂的(技术以外的内容)、和能够引起共鸣的博客。所以我收集的样本并不能完全代表中文博客的现状。

最后我把几个博客集合网站丢给了对方,这或许能够代表大部分写博客的人在做什么。过了好几天,他真的认认真真过看完了每个集合网站首页抓取的文章,然后给我留下了一句话:

挺无聊的。

这句话很“冒犯”,因为他是个“局外人”,并不能理解我们在“自嗨”什么。当然,“自嗨”这个词听上去也挺讽刺和贬义的——没错,就是在讽刺。听到这个结论,我试图“反击”——“你既然觉得无聊,总要说服我为什么无聊吧。”

我花了三天时间,看了你给我的网站首页的每一篇文章,除了技术就是日记,不是说它们不能做成博客,而是这些功能早就有了更多流量聚集的平台,为什么还要单独做成独立博客呢?

这应该不是冒犯了,而是“膈应”吧。听到这话我有点着急,必须为自己辩白——“不是我不想去些公众号、豆瓣,而是我发布的内容常常因为敏感词而被封禁,我没办法做到自我审查,但是我又想要写,我总得有个平台吧。”

你有想过吗,或许写博客是一种逃避行为,逃避流量对作品的审视?如果同样的内容发布在小红书,你会在乎没人看吗?

别骂了,别骂了。其实我考虑过这个问题,写博客有严重的“滞后性”,特别是非技术、非日志类博客,它跟别人的互动是完全切断的。从创作发布、到被人看见、再到引发共鸣互动,因为是观点的互动,它本身会受限于“沉默螺旋”。即人们会更愿意在支持自己观点的内容下互动,如果无人互动,就算引起个体的共鸣也无法产生互动。


我现在创作的博客,其实也有这种“讨巧”的行为。因为它不是即时性的,所以我可以在发布文章后做到单方面的“爽”,而不去考虑流量和互动的问题。也正是如此,我会特别希望与互动者本身建立某种即时交流的机会,比如对于一些观点在Telegram上面进行讨论。

说实话,这个博客也是因为坚持创作到了第三年,才开始陆陆续续被人发掘。虽然每天能够保持几百上千的流量,但是互动仍然是“滞后的”,极少会遇到@三十里海河 这种跟我沆瀣一气的家伙,会主动找我聊起原生家庭的事情。

另一个关键,是因为独立博客的“人设”功能,迫使它需要按照某种“姿态”去表达自我。哪怕是对现实的抱怨,也因为有了一层对外展示的需求,而自然而然地附着上了“表演的意图”,目的是为了获得肯定、赞美、关注这些站在聚光灯下才能得到的东西——我当然也有表演的意图。大部分时候我在现实比博客上的“人设”更嘴毒,总喜欢拆解底层逻辑。但是在建立社交关系之中,这种人设又会慢慢褪去变得无下限的有趣(但是还是很少会提供情绪价值)。起初,我可能还会考虑自己的哪句话会不会惹到别人,这么三年过去了,我发现与其去新建一个“人设”努力地维系他的表演性,不如就让把博客当做是我现实折射的一部分——所以,就会说更多难听的话和真相,惹到更多人。

所以这种确实互动的交流,也会得到反噬的评价:

挺无聊的。


一直以来,我很想跟几个熟悉的博主,做一对一的社交关系,至少先脱去“博客”这个外衣,来聊些彼此对世界不同视角的看法。但因为博客的滞后性也会延展到现实层面,造成断层。比如,我们之间要产生共鸣,至少要彼此关注过对方的博客,如果对方并不喜欢我的观点,这岂不是就给对方造成了困扰;再比如,别人的博客本身就是保护壳,并不希望自己的真是内心被看见,如果我一味地入侵对方,那就太不礼貌了。

久而久之,这种无法进入下一个“社交领域”的交流,会越来越梳理和冷淡——比如我的博客在互动环节并不能给对方带来流量。于是,无聊诞生了——标题的“无聊”并不是指中文博客圈的内容,而是人们以为可以通过博客构建的社交,到最后也只能剩些鸡毛蒜皮的“无聊”。

如果可以,我打算做一期“递苹果”的游戏,把它交给几位熟悉的博主。

博客五周年回顾

2024年11月18日 08:37

时间很快,转眼间博客五周年了,时间很慢,回望每一篇文字,都是一步步走过的痕迹。

“本站创建于2019年11月18日 18时27分”,五年前,我搭建完网站之后,在关于页面写下了这句话,一挂就是五年。

网站最初是运行在搬瓦工DC3的服务器上,直到今年10月30日备案完成后迁移到了国内阿里云。

网站最初的名字是叫“吴杰博客”,直到今年10月30日备案完成后改名为“慢读时光”。

网站的内容最初是记录编程和生活,2023年改为记录生活和读书,今年10月份,我把编程相关的内容放到了另一个专门的技术网站。

网站的主题由建站时自带的默认主题Twenty Twenty一直用到今年,在11月13日WordPress6.7发布后改为默认块主题 Twenty Twenty-Five。

网站的版本由刚建站时的WordPress5.3用到了现在的6.7。

这大概就是网站五年来的全部变化,一切都在稳步前进。

未来如果没有什么意外,我会让这个站一直运行下去,人在塔在!

博客升级为 WordPress 6.7

2024年11月13日 16:14

WordPress 大版本 6.7 今天发布了,随之而来的是 2025 主题,我已经升级了,并且换上了最新的主题,正如你所看到的一样。

原来我是一直嫌弃块主题的,今天摸索了下,不知道是6.7的块主题变好了还是我会用了,总之就是真香。

全站编辑真的很方便。最明显的体会就是页脚悬挂备案编号。之前我是通过建立子主题,然后在子主题里修改footer.php文件来实现的,为了挂一个备案编号而专门建立一个子主题,有点高射炮打蚊子的感觉。现在好了,直接编辑网站,修改页脚文字就可以实现了,真的很方便!

前段时间以来,一直在反思自己,随着年龄的增长,会有一点守旧,其实应该更开放一点,多拥抱新事物,才不至于被时代落下。

虽然古腾堡和全站编辑在互联网上风评不好,很多人觉得不好用,但我觉得还好,拖拖点点就能实现一些想法。方便用户使用,总是好的,最起码方向应该是没有错。至于为什么有那么多人喷,我想大概是幸存者偏差,用的好的人不会专门发个帖子赞扬它,只有觉得不好用的人才会去发帖抱怨,所以造成了看到的都是抱怨贴。

现在 WordPress 全力 all in 古腾堡,我相信未来会变得越来越好用,越来越成熟。

写在博客第三年——摘下苹果以后

2024年11月12日 00:00

2021年10月1日,在我开设独立博客以来,一直希望自己能够复刻自己在几年前完成的一次不可能的任务——五百日写作计划。因为工作关系,坚持每日写作至2023年2月1日中止了。按照约定,五百日产出五百篇文章,中间因为工作室开设的项目,我将“观察人和群体”的视角从《△》拆出作为新的类别《棱镜》直到今天,《△》加上《棱镜》的文章数量已经超过了500篇,也算是勉为其难地完成了五百日写作计划。

后台统计,莫比乌斯在3年的时间里,发布了648篇文章,我算是有“资格”,可以告诉别人如何创作、如何收集灵感、通过自我炫耀的方式玩自问自答的游戏,但这不是创作的最终目的。

写作对我来说,是将思维围绕在主轴上避免抑郁的自救行为。观察他人、也观察自己,文章因为时间戳形成了见证历史、预言未来、甚至是找到矛盾的自我。所以我将写作称之为”自我悖驳的旅程”,这是一个单向的时间轴,既能看到过去的自己,也能预言未来的自己。


创作第三年,我也算是见证了博客圈的人来人往。创作本身是孤独的,特别是当某一个言论出现”沉默螺旋”以后,不敢发言或是抱团生存的人就会越来越多。说来惭愧,第三年我依旧没有找到”创收”的思路。有人建议我开设犒赏入口,或是在公众号同步发布,如果有共鸣自然会有人打赏——但是我好像很少会为了迎合共鸣而专门写一篇文章。

但最近有好几篇文章被推到了不同的平台,反而又是因为共鸣而获得了认可。这便是创作者孤独之余的”纠结”。

“继续写作吧,趁自己还没死。”

——这是上一次五百日写作计划最后的总结,写作对我来说就是一种“存在感”的证明,只是它现在还很微弱。或许下一个三年,WordPress服务器的费用就能够通过犒赏的方式cover了呢。


《△》也算是告一段落了,思来想去,总要换个新面貌继续接下来的坚持写作,于是就有了副标题的想法——摘下苹果以后。

我的电脑桌上有一个“灵感收集箱”,我会把脑子里的瞬间灵感写在纸上投入箱子内。每过一段时间会把这些灵感一张一张地查看,经过一段时间缓冲的灵感,会带来更多的思考,甚至因为经历不同而有了更多视角的切入。

我把这种灵感称之为“苹果”,它们还在树上时,都是一个模样分不出区别。但当它们成熟落地时,一些苹果腐烂成泥,成为苹果树的养分;一些果子被动物摘走,带着种子去了不同地方发芽;而有一些苹果因为蛇的诱惑,让夏娃摘了下来;而有的落在了天才的头上,变成了一道公式……

这个世界有各式各样的苹果,你大可说自己早就吃过了苹果,所以再多的苹果都是“一个样”。但我更希望看到苹果被摘下之后经历了什么。这便是继《△》之后的新的坚持写作的类目《/ˈæpl/》。

20241110

2024年11月11日 13:36

2024年11月10日,晚饭喝了半瓶红酒,回到家就开始头疼,洗完澡在沙发上躺了一会,没想到睡着了,儿子来叫我,我居然没听见,从来不会这样,不知道怎么回事,难道喝了劣质酒?睡了一觉后还是那样,不舒服,今早起来还是有点,上午又睡了2小时,直到中午饭后才算好。下次红酒还是不要喝了,不会分辨好坏。

今天尧哥去拈花湾秋游,周末给他准备了一些吃的,放书包,带了一些零钱,天气不错,暖阳,应该玩的很快乐。上周有人抓到一只甲鱼,买来红烧,尧哥要吃的,不排斥,6年级暑假,小家伙长高不少,除了虾不大愿意吃,其它都还行。

小区里面有好多野猫,越生越多,有个别爱猫人士在夜间角落里偷偷喂着一些吃的。业主群里面好些人都比较反感这事,包括我,白天因为上班上学,所以没什么感觉,晚上,猫们就开始出来闲逛,有的在负一停车场瞎逛,有的甚至把人家的车搞坏(哪里的线路咬断抓破),还有好几只在垃圾桶旁转悠,我有几次去扔垃圾,那个猫都不怕人的,往人这边走,还龇牙咧嘴叫,像要马上跳到身上来一样,我感觉很讨厌,有一只这样,被我打了一下,踢它,跑掉了,如果是小孩的话,非常危险,病毒不说,爪子很锋利,只得跟物业多反应反应怎么处理这些猫。

独立博客自省问卷 15 题

2024年10月12日 10:27

看到RSS订阅的博友圈里,大大的小蜗牛发的《独立博客自省问卷 15 题》,很有意思,于是凑个热闹。


独立博客自省问卷

1、你的博客更新频率是多少?

A.每周更新

B.一周数篇

C.一月1-2篇 ✅

D.几个月一篇

实际情况是介于A和C之间吧,勤快的时候每周都有更新,时间间隔长的时候一个月1、2篇。
严格来说是随缘更新,并没有制定一个更新计划之类的东西。

2、你的博客上次更新是什么时候?

A.本周 ✅

B.上周

C.上个月

D.上季度

可能因为上上篇关于博客被镜像的文章惹到一些人了,最近博客总有 CC 攻击,所以发了一篇短文抱怨

3、你的博客文章是原创的吗?

A.坚持原创

B.部分借鉴 ✅

C.AI 帮我写的

D.搬运别人的,而且不署名

狭义来说,最近这几年除了一篇介绍中国国内至国际骨干 ISP 线路整理的文章是搬运存档的,其他文章内容都是自己原创的。
广义来说,除了写身边的事情。其他文章 100% 原创,查重率为 0% 的应该不存在吧,比如这个篇文章,问卷里的题也不是我原创的吧。技术类教程类纯原创的就很难的,除非这是自己开发的东西。资讯类都更不用说了,又没到现场采访,只能有感想能是真原创的。

4、你觉得自己的文章对他人有帮助吗?

A.旨在对他人有启示

B.多少有点意义 ✅

C.每日每周流水账

D.自我陶醉就好,管他呢

写作一定不能陷入自我陶醉。作者、作品、读者,是一个写作三角,需要三存在并协调好关系写作才能进入良心循环。写作是纸笔上的表演。哪怕是写日记,那也是写给未来的自己(读者),而不是写给当下的自己(作者)的。是基于在未来的有一有人(未来的自己)会看到这篇日记的前提下而写作的。

5、你上次换博客主题/程序是什么时候?

A.上周

B.上个月

C.去年

D.凭良心说,我多年都是一个主题 ✅

其实是想换的,基本每年都在本地倒腾新主题,试图给本站换一个主题的时候,但一直没实际装。主要是我既想要简洁轻量,又想要一些现代功能。现成的主题,要么过于简洁,要么花里胡哨,一直没发现合适的,尝试了几款,修修改改还是没让自己满意。于是就一直凑合用现有的主题了。

6、你上一次捣腾博客主题代码是什么时候?

A.昨天,撸代码到凌晨

B.每周必捣腾

C.每月有那么一次 ✅

D.一年有那么一次

基本属于维护性质的。

7、你会对博客主题进行二次开发?

A.直接配置使用,省心不折腾

B.时不时自己改改,搞点新花样,换图片,换字体,爽 ✅

C.删除主题作者版权信息,改改样式,然后自我感觉良好

D.改得面目全非,但保留原作者版权信息或注明

那肯定是要改一下的,一点不改搞不好都跑不起来,比如这个主题直接配置使用的话,起码评论头像是铁出不来的。字体和样式的加载也会出问题。

8、你多久打开自己博客自我陶醉一次?

A.每天数次

B.每周一次

C.看心情 ✅

D.一般都是照镜子,不看博客

有评论那我肯定是会看的,时不时会再读一遍,毕竟我写博客一般不太检查就发了,不回头看的话,会有不少错别字和语病出现。

9、你近期对自己博客域名什么感受?

A.想搞到一个 .COM 的域名

B.如果域名能再短几个字符就更好了

C.今年才换双拼域名了,明年再看看

D.目前挺好,没想法 ✅

应该是不会换的,虽然我还有几个域名,但这个站应该是不会换的。

10、你每天都会看网站的流量统计吗?

A.每天看几次,今天又多了100PV

B.每周回顾,看看流量趋势

C.记得就看看 ✅

D.没有搞流量统计,都是浮云

流量统计这玩意吧,在这种每天千级 PV 量级下,滞后性很强,如果靠这个追热点,追关键词没任何意义。最多就是发现“上上个月月写的某个文章莫名就火了呢”

11、你通过博客的广告赚到钱了吗?

A.有,能覆盖建站费用 ✅

B.有,但付出大于收入

C.没考虑通过博客流量赚钱

D.拒绝广告,保证阅读体验

能是能,依靠谷歌广告就可覆盖基础成本,但这建立在我佛系和机器够便宜的前提下。实际上是完全没打算依靠广告渠道盈利,广告也是控制在最低限度数量。毕竟把精力放到其他平台(短视频,长视频,微信公众号,知乎回答),收入远比这个多。

12、你去浏览别人的博客/网站主要为什么?

A.学习别人分享的知识 ✅

B.搬运别人的内容

C.看看别人怎么装修博客,自己也抄一下,感觉都比自己的好

D.不爱看别人博客,自己爱写啥写啥

目前是依靠博友圈(有更新页,自建抓取),十年之约(有现成的聚合RSS源),个站商店(有更新页,自建抓取)这三个项目的RSS实现博客订阅。

13、看到别人分享了一篇文章,你打开第一反应是什么?

A.哇,这域名真不错,怎么我没想到

B.哇,这网站速度真快,图片延迟加载丝滑

C.哇,这程序/主题不错,我也要抄一抄/留言问问哪里搞的

D.看看文章内容

当然是为了看文章内容,除非站点有很特别的地方。

14、你觉得博客哪方面更重要?

A.域名

B.服务器

C.主题

D.内容

必须是内容啊

15、近期通过写博客有哪些新收获?

A.知识面有拓展

B.认识了新朋友 ✅

C.写作水平提升

D.通过知识变现

现在选择认真经营个人博客的人,都是很棒的人,只要不是内容农场和满屏广告乱飞,都是值得交往的站长。而且个站订阅什么,看什么都是自己决定的事情,不会出现大数据怼脸投送的问题。

The post 独立博客自省问卷 15 题 appeared first on 秋风于渭水.

关于博友链接

2024年11月9日 13:28

抱歉各位,我换一种方式显示博友的链接,之前是单独一个页面显示,现在改为首页隐藏显示,点击★下划显示来留言过的所有访问者,并有相关链接,右上角是留言次数,自动记录,按留言时间顺序排列,原有页面的链接全部移至浏览器收藏夹并多端同步,会不定期浏览访问,嗯,如果您对我的这个操作介意的话,可以单方面删除我,愿博客和折腾继续,愿生活愉快,一切顺利。


2024年11月28日更新:

为了实现 仅显示最近6个月内有新留言的访客,我们需要对代码进行一些修改,基于评论时间过滤出符合条件的评论者,并只显示最近6个月内有新留言的访客。这个逻辑是通过获取每个评论的时间,并与当前时间进行比较来实现的。

主要修改点:

  1. 计算6个月前的时间戳
  2. 过滤掉6个月前没有新留言的访客
  3. 显示符合条件的访客信息

完整代码修改:

php
<?php
// 获取所有评论并按照评论ID排序
$comments = get_comments(array(
    'number' => 99999, // 获取评论数量
    'status' => 'approve', // 只获取已经被批准的留言
    'order' => 'DESC', // 倒序排列
    'author__not_in' => array(1), // 排除博主的ID,这里假设博主ID是1
));

// 用来存储不重复的评论者信息及留言次数
$unique_comments = array();

// 获取当前时间戳(秒级)
$current_time = current_time('timestamp');

// 定义6个月的时间戳(6个月 = 180天)
$six_months_ago = strtotime('-6 months', $current_time);

// 遍历评论
foreach ($comments as $comment) {
    $email = $comment->comment_author_email;
    $comment_date = strtotime($comment->comment_date); // 获取评论的时间戳

    // 如果评论日期在6个月前,则跳过
    if ($comment_date < $six_months_ago) {
        continue;
    }

    // 如果没有记录该评论者的信息,则添加到数组中
    if (!isset($unique_comments[$email])) {
        $unique_comments[$email] = array(
            'count' => 0,
            'url' => $comment->comment_author_url,
            'comment' => $comment,
            'latest_comment_date' => $comment_date // 记录最新留言的时间
        );
    }

    // 更新该评论者的最新留言时间
    if ($comment_date > $unique_comments[$email]['latest_comment_date']) {
        $unique_comments[$email]['latest_comment_date'] = $comment_date;
    }

    // 增加该邮箱的留言次数
    $unique_comments[$email]['count']++;
}

// 显示每个评论者的名称和留言次数
foreach ($unique_comments as $email => $data) {
    $count = $data['count'];
    $comment = $data['comment'];
    $comment_author_url = $data['url'];
    $comment_author_name = esc_html($comment->comment_author); // 获取评论者名称并进行转义
    $latest_comment_date = $data['latest_comment_date'];

    // 判断该评论者是否超过6个月没有新留言
    if ($latest_comment_date < $six_months_ago) {
        // 如果该评论者的最新留言时间超过6个月,则不显示名字和链接
        continue;
    }

    // 生成评论者名称和链接的代码
    echo '<div style="position: relative; display: inline-block; margin-right: 20px; padding: 0;">';
    if (!empty($comment_author_url)) {
        echo '<a rel="nofollow" target="_blank" href="' . home_url() . "/goto?url=" . base64_encode($comment_author_url) . '">';
    }

    // 显示评论者的名称
    echo '<span style="font-size: 1em; padding: 0 3px;">' . $comment_author_name . '</span>';

    if (!empty($comment_author_url)) {
        echo '</a>';
    }

    // 根据留言次数设置背景颜色和字体颜色
    if ($count >= 50) {
        // 背景为红色,字体为白色
        echo '<span style="font-size: 0.7em; color: #fff; background: #f7828a; border-radius: 2px;">'
            . esc_html($count) . '</span>';
    } elseif ($count > 30) {
        // 背景为绿色,字体为白色
        echo '<span style="font-size: 0.7em; color: #fff; background: #90b47f; border-radius: 2px;">'
            . esc_html($count) . '</span>';
    } else {
        // 默认样式
        echo '<span style="font-size: 0.7em; color: #29d;">'
            . esc_html($count) . '</span>';
    }

    echo '</div>';
}
?>

代码分析:

  1. 计算6个月前的时间戳
    • 使用 strtotime('-6 months', $current_time) 获取当前时间戳的6个月前的时间戳,用于后续判断。
  2. 遍历评论并过滤
    • 在遍历所有评论时,通过 strtotime($comment->comment_date) 获取每条评论的时间戳,并与 $six_months_ago 进行比较。
    • 如果评论的时间戳早于6个月前,则跳过该评论(即不显示该评论者的名字和链接)。
  3. 记录每个评论者的最新留言时间
    • 对于每个评论者,保留其最新的评论时间,并与后续的评论进行比较,确保只显示最近6个月内有留言的评论者。
  4. 判断评论者是否符合条件
    • 在显示评论者信息之前,检查评论者的最新留言时间,如果该时间早于6个月前,则跳过显示。
  5. 生成评论者的显示内容
    • 如果评论者符合条件,会显示评论者的名字、链接以及留言次数。留言次数的不同背景颜色根据条件设置:
      • 50条及以上:红色背景
      • 30条至50条:绿色背景
      • 小于30条:默认字体蓝色

给博客加了个书架和归档页

2024年11月8日 15:37

今天给博客加了个书架页面,用的是古腾堡的“图库”块,如果是经典编辑器对应的功能应该是“相册”吧。

加这个页面主要用来集中记录一下读过的书,不加不知道,一加吓一跳,两年多才读了13本书,这TM可真是名副其实的慢读了……以后要多读一点,没事不要瞎折腾。

归档页是用代码写的一个页面模板,然后在页面里面选择使用。也是不加不知道,一加吓一跳!快5年了才写了107篇文章……以后要多写一点,没事不要瞎折腾!

书架页是使用 WordPress 的内置功能做的,是可以跟着主题走的,归档页是自己写的,换主题就没了,或者需要把代码移植到新主题上才能用。以后也可能直接去掉,用系统自带的归档也行,除了单调点不能自定义外也没什么毛病。

另外,页脚还加了一个网站运行时间,这个时间是从2019年11月18日 18时27分开始统计的。

PS:2024.11.13 由于更换了2025主题,归档页删除,网站运行时间删除。(其实也是有点多余的东西)

2024进入11月

2024年11月7日 10:55

已入11月,时间总是一晃而过,这几天暖阳,很舒服,出行是外套+T恤,短袖收起来,牛仔裤也换了稍厚的,看了日历,1月底过年,还有3个月不到,这一年一年的过的好快,近期虽说有点忙,但还是有点忙里偷闲,自我放松,昨日上午去老同学家喝茶聊天,他工作自由,基本在家,所以我以后多了一个喝茶聊天的去处,下午回公司处理事情。由于每天要送儿子去学校,7点到校,所以到公司基本是7点半左右,今天有点困,到公司停好车后,把座椅躺下,眯睡了一会,结果睡着了,醒来已是8点40,赶紧起来回办公室,泡杯红茶,开始工作。

上周把车子的4条轮胎换了,3年7万4千公里,花纹磨浅,想着年底出差要跑高速,还是换了吧。原厂米其林换成马牌。新轮胎果然好使,开起来感觉稍有轻巧,制动距离也稍有变短,能感受出来。胎噪未感觉有变化。

尧哥七年级期中考试全班第五,数学全班第一。离他自己的目标还有差距,还需努力。

写博客的心态

2024年11月7日 16:03

我发现我最近写博客的心态变了。感觉有必要水一篇文章来反思一下这个问题。

我的博客还差十天就五年整了,这五年中的前四年,博客基本处于单机状态,访客也基本只有我自己,所以,前四年的我,对于博客还是把它当作一个数字日记本来用的。对于内容是想写就写,想写什么就写什么,并没有什么顾虑。

然而,今年的时候,开放了评论,也偶尔去别人的博客里留言,慢慢的,博客就有人来看了。所以,这个时候写博客,心里总会或多或少地考虑别人看到的感受,最后写出来的文字已经不是自己的了,没有了以前那样无拘无束。

是的,我说的就是这点心态的转变。

其实,在我意识到这点变化后,也思考过这个问题,一直到写这篇文章之前,还没有调整过来,有几次写了几篇文章发出来又删掉。

现在想想,其实也没有必要,博客是自己的,独立博客,自己拥有绝对的自由,想写什么就可以写什么,可以不理会别人怎么想,是的,我可以的,有这个困扰的人,我们都可以。

这么想过之后,感觉就好多了。

在博客圈,经常看到有做了十多年甚至二十多年的博客大佬,或许我现在所经历的,正是他们曾经经过的或想过的。

现在,对博客又有了更多的认识。我写或不写,我的博客就在那里,只要我续费,它就一直在,它对于我的意义,就是我拥有一个独立博客,我可以绝对地控制它。

先写到这里,摆正心态,等有时间再写一篇博客五周年的文章。

蹭了一波美国大选的热度

2024年11月6日 17:54

沉寂了许久的老达博客的访问量,今天终于又爆发了一回。受美国大选影响,老达博客访问量今日有望突破1000IP!重回人生巅峰,哈哈

美国大选给老达博客带来一波流量

看看老达博客今天的百度统计,访客来源几乎全部都是美国大选有关的搜索关键词,可惜现在百度已经把老达博客抛弃了,来源大部分都是360搜索,如果有百度加持的话,这一波流量上3000ip也很正常。

美国大选相关关键词带来一波流量
美国大选相关关键词带来一波流量

给老达博客带来流量的是老达在2022年6月写的一篇文章:《2024年美国总统大选时间-美国总统选举日》,当时的更新风格就是广大网友们关心什么,咱就更新什么问题,一切为网友服务!知道美国大选是个周期性的热门,所以更新了几篇有关美国大选的文章,包括美国大选时间,美国大选程序等等,提前种下的瓜结果了,哈哈。

看来,以后要继续更新2028年美国大选时间、2028年美国大选结果发布之类的文章了。

就在老达更新这边文章的时候,美国那边的总统选举结果基本已经出来了,特朗普同志已经获得超过270个选票,顺利当选下一届美国总统!这里顺便恭喜一下川建国同志!之后的四年,可能又是充满戏剧性的四年,看着美国大选的闹剧,越来越感觉到,马斯克说的特别对,整个世界就是一个草台班子。

所以,我们自己都不要妄自菲薄,遇事不用紧张,大家都一样,都是草台班子,干就完了!

热力图

2024年11月6日 14:43

文章更新热力图

类似的热力图,我最早是在 GitHub 看到的,用来展示开发者的更新频率。现在看到不少博客也做了这种小组件:就是从当前日期向前追溯一年,每一天显示成一个灰色的小方块,如果当天有文章发布,就显示成浅绿色,如果当天发布的文章不止一篇,就显示成深绿色。我想了一下,用 Hugo 的模版系统,加上一点 CSS 做布局和显示优化,应该就能实现,动手试了一下,果然效果还算可以。目前可以在首页看到实际演示。

fin.

Hugo添加搜索

2024年11月5日 15:04

感谢:ZISHU ,分享了“用原生 js 给网站写个搜索功能”这篇文章。

大体步骤差不多,但是按照上面链接操作,打开搜索页面为空。以下为修改后的顺序。

具体操作步骤:

1,在主题\layouts文件夹,新建index.json文件,此时本地预览http://localhost:1313/index.json查看,如有显示标题,地址这些就表示这一步成功。

{{- $.Scratch.Set "posts" slice -}}
{{- range where .Site.RegularPages "Type" "post" -}}
    {{- $.Scratch.Add "posts" (dict "title" .Title "permalink" .Permalink "summary" .Summary "content" .Content) -}}
{{- end -}}
{{- $.Scratch.Get "posts" | jsonify -}}

2,在\layouts\page文件夹,新建search.html文件,每个主题文件有差异,可参考同主题的single.html

{{ partial "header.html" . }}
<main>
  <div class="header">
   
  </div>

  <article class="post-content markdown-body">
    {{ .Site.Params.postHeaderContent | safeHTML }}
    {{ .Content }}

    <form id="searchForm">
      <input autocomplete="off" type="text" id="searchInput" placeholder="输入搜索内容..." required>
      <button type="submit">Saerch</button>
    </form>

    <ul id="resultsList" style="list-style-type: none;padding: 20px 0;word-wrap: break-word;color: #6b7280;"></ul>
 
  </article>
  <script>
    let data = [];
  
    // 从 /index.json 加载数据
    fetch('/index.json')
      .then(response => response.json())
      .then(json => {
        data = json; // 保存数据
      })
      .catch(error => console.error('Error loading data:', error));
  
    document.getElementById('searchForm').addEventListener('submit', function (event) {
      event.preventDefault();
      const query = document.getElementById('searchInput').value.toLowerCase();
      const resultsList = document.getElementById('resultsList');
  
      resultsList.innerHTML = ''; // 清空之前的结果
  
      if (query) {
        const results = data.filter(item =>
          item.title.toLowerCase().includes(query) ||
          item.summary.toLowerCase().includes(query) ||
          item.content.toLowerCase().includes(query) // 添加全文内容的搜索
        );
  
        if (results.length > 0) {
          results.forEach(item => {
            const listItem = document.createElement('li');
            const truncatedContent = getTruncatedContent(item.content, query);
            listItem.innerHTML = `
                  <a href="${item.permalink}" target="_blank">${highlightKeywords('<h999 style="color: #f7828a;margin-right: 10px;">➤</h999> ' + item.title, query)}</a>
                  <p>${highlightKeywords(truncatedContent, query)}</p>
              `;
            resultsList.appendChild(listItem);
          });
        } else {
          resultsList.innerHTML = '<li>没有找到相关内容。</li>';
        }
      }
    });
  
    function highlightKeywords(text, query) {
      const regex = new RegExp(`(${query})`, 'gi');
      return text.replace(regex, '<span class="keyword-highlight">$1</span>');
    }
  
    function getTruncatedContent(content, query) {
      const index = content.toLowerCase().indexOf(query);
      if (index === -1) return highlightKeywords(content, query); // 如果没有找到关键词,返回高亮的内容
  
      const start = Math.max(0, index - 50); // 前50个字符
      const end = Math.min(content.length, index + query.length + 50); // 后50个字符
      const truncated = content.substring(start, end);
  
      // 添加省略号
      if (start > 0) {
        return '...' + highlightKeywords(truncated, query); // 在开头添加省略号
      } else if (end < content.length) {
        return highlightKeywords(truncated, query) + '...'; // 在结尾添加省略号
      }
  
      return highlightKeywords(truncated, query); // 返回高亮的截断内容
    }
</script>
</main>

3,在\content,新建search.md

---
slug: search
title: search
layout: search
---

4,在config.toml设置

[[params.socials]]
name = "搜索"
link = "/search/"

[outputs]
  home = ["HTML", "JSON"]

5,最后一步,添加相应的css

#searchForm {
  margin-top: 20px;
  display: flex;
  align-items: center;
  max-width: 800px;
  width: 100%;
}
#searchForm input {
  flex: 1;
  height: 50px;
  padding: 0 15px;
  outline: none;
  border: 2px solid #ccc;
  border-radius: 3px;
}
#searchForm input:focus {
  border-color: #666;
}
#searchForm button {
  height: 50px;
  padding: 0 15px;
  cursor: pointer;
  background: #c4c3c3;
  outline: none;
  border: 2px solid #ccc;
  margin-left: 10px;
  border-radius: 3px;
  width: 20%;
}

#resultsList {
  padding-left: 18px;
}
#resultsList .keyword-highlight {
  background: #f6f694;
  padding: 0 2px;
  border-radius: 3px;
}
#resultsList > li {
  margin-bottom: 20px;
  padding-bottom: 20px;
  border-bottom: 2px solid #ccc;
}
#resultsList > li > a {
  color: #6b7280;
}
#resultsList * {
  padding: 0;
  margin: 0;
  font-size: inherit;
  color: inherit;
}

至此hugo即可。

 

VPS宕机事件,我被确诊双相情感障碍

2024年11月4日 14:51

博客很久没更新,我也很久没有和博友们互动,是有原因的。在讲述这个原因之前,先来说说前几天发生的VPS宕机事件。

VPS宕机事件

2024年10月底的一天,我发现我的VPS宕机了。当我收到提醒邮件时,通过SSH、VNC均无法登录该VPS。此时,VPS上的所有网站均无法访问,CyberPanel面板后台也无法访问。

登录主机商后台,可以看到VPS的双核CPU利用率持续100%,但已用流量是正常的。当时我用手机拍了电脑屏幕,却忘记截图了。

CPU占用
CPU利用率

在VPS宕机后,我立刻查看该VPS上所有网站的数据备份,最近的每周备份是10月27日产生的,数据完整。这个VPS上的几个网站都是其他博友的,做了备份,以防不测。当这次的不测发生之后,数据备份的重要性立刻凸显出来。

问题发生后,我立刻联系这几位博友说明情况。随后给客服提交工单。客服经过排查,最终建议我重装系统。以下是客服回复原文:

Do you have any important data stored on the server? If not, I recommend rebuilding the server and checking again.
Please note that rebuilding will delete all existing data on the server.

最终我选择重装系统。重新安装CyberPanel,并恢复数据。

重新安装CyberPanel时,我在官网得知,该面板已经支持AlmaLinux 9系统。于是重装系统时,我选择安装为AlmaLinux 9,并更新到AlmaLinux 9.4。在此之前,系统是AlmaLinux 8系列。

安装好以后,我发现面板内关于PHP 8.3默认安装模块的bug已经修复了,不再需要手动排查未安装的必要模块了。

随后,第一时间重新设置了每周备份到Google Drive,这是最重要的。

这次VPS宕机,我个人猜测也许是由于较长时间未更新系统和面板程序,被找到漏洞从而入侵,导致系统崩溃。由于流量正常,因此用来发包的可能性应该不大。

这次VPS宕机,本博客的访问没有受到影响,因为这个博客仍然放在之前购买的虚拟主机上,该主机尚未过期。待该主机临近到期时,我再决定这个博客的托管问题如何处理。


确诊双相情感障碍

今年5月份,我的精神状态便已很差。今年9月初,在我刚刚返校4天之后,家里出现一些情况,我立刻请假回家处理,在家停留半个月。再次返校后,我的精神状态更差,但相较2017年后半年,以及2018、2019这两年的精神状态要好一些。

诊断结果

2024年9月26日,我前往一所精神病专科医院进行诊断,诊断结果如下:

诊断结果
诊断结果

最终被医生确诊为中度双相情感障碍。

其实,中度双相情感障碍这个诊断结果并不让我感到意外,因为早在2017年后半年开始,我便觉得自己非常符合这个疾病的特征。根据问卷内容,我可以判断,在2017-2019年,我患有双相情感障碍的程度可能为重度。

寻找病因

我患上这个疾病,和许多人一样,根源在于原生家庭。如果你看过这个博客上《人生前三十年》系列文章,也许你会更容易理解接下来我要讲述的内容。

我的父母都是NPD,在外人面前表现一切正常,但在家中却是另外的样子——控制欲极强,脾气极度暴躁,对我施加无穷无尽的语言和肢体暴力,对我从不信任……还有很多我目前暂时无法用语言准确描述的恶劣表现和行为。

如果说父母身上好的一面,也就是母亲至少还会关心我,相比之下,父亲的心里只有他自己。家庭氛围可以说是鸡飞狗跳、乌烟瘴气……

在这样的家庭中长大,我战战兢兢、如履薄冰,我的人格具有非常大的缺陷,无法正常社交,无法正常表达自己的所有感受,胆小怕事,脾气却极度暴躁,内向,有讨好型人格……在面对校园霸凌时无力还击,在面对父母和亲人的加害时同样无力还击……和他人相处时,我的表现伤害了很多要好的朋友,因此被孤立、被欺负,美好的友情被我那扭曲的人格无情摧毁……

从小到大,在家庭中、在学校的学习中,我被父母和老师灌输着“父母都是无条件爱孩子”、“天下无不是的父母”、“父母都是永远为你好”……等等等等,我真的信了。当我身上出现种种恶劣的表现时,包括父母在内的所有人都认为是我自己的问题,父母会用更加暴力的方式对待我,老师、朋友和同学会对我进行无情的指责。我也始终觉得,这仅仅是我自己的问题,我尝试去改变,却仅仅是压制住了一些暴力的表现,增加了内耗,而没有明显的效果。

2016年8月,我进入中等职业学校工作之后,面对那些品行恶劣的学生们,我身上的种种劣行彻底暴露。在2017年8月离职后,我患上双相情感障碍。从那时起,我切断了和绝大部分同学和朋友的联系。

当时的我,依然认为仅仅是我自己的问题,陷入无穷无尽的内耗中。2017年秋天,在一位研究生同学(已失联)的指引下,我才知道父母的性格有缺陷,但没有认清问题的本质。

直到近两年,我才逐渐认识到,这一切的根源在父母,在我这个非常糟糕的原生家庭。我也终于认识到,不是所有的父母都爱自己的孩子。而我,就是在家庭中地位低下、严重缺乏家庭的关爱,却无时无刻不在承受家庭暴力的孩子,直到今天。

在我年过三旬才终于认识到这一切,是多么可悲的事情。这些年,我一直走在自我疗愈,自我康复的路上。多少机会被错过,多少岁月被蹉跎……

恶劣的症状及药物治疗

经过数年的调节,如今的我,人格上的很多缺陷已经修复,但是仍被很多问题困扰。

双相情感障碍在我身上出现了很多症状,包括但不限于记忆力减退、睡眠障碍、多梦、情绪不稳定、精力不足、兴趣的减退或缺失等。

这影响到了博客的写作和更新,以及与博友的互动。当我在休息时,由于双相的影响,我对很多事情都缺少了执行的能力,以至于更新博客的次数减少了——我有很多东西要写,有些内容写了一部分,有些内容列出了大概的提纲,但是都没有写出来。

同时,我还有很多身体上的问题,包括但不限于食欲减退或暴饮暴食、心脏不适、脾胃失调、胆囊炎、肝郁气滞、肾气亏虚等。

这几年,我曾数次去就医。西医无法解决这些问题,三甲医院中医科的中医利用中药很好的对我的这些问题进行了调理。可是,每次调理好之后只能维持三个月甚至更短的时间,反反复复发作之下,我一度成为了药罐子,医保卡个人帐户那可怜的余额数次被刷完。我一直不清楚自己的身体为何会这样,让我很是苦恼。

前不久,我终于明白,这些都是双相情感障碍的躯体化症状。如果这个问题处理不好,我的身体就永远不会彻底好起来。

在发病时,发生过很多破坏性的行为。很多行为我无法用语言准确描述,这里面掺杂着眼泪和鲜血,就像这个视频中记录的那样。

让我印象最为深刻的是,在2018年春节前后,在发病时,我弄坏了自己的手机——坚果3,虽然后来我自己尝试维修,但依然有部分配件再次损坏。这让我很自责。

另外,我曾数次有自杀想法,我想过很多种死法,试图寻找痛苦最小的方法去自我了断。当我出现严重躯体化表现时,我曾写过遗书,托付给我的妹妹。好在我控制住了自己。

2024年9月26日,在精神病医院诊断结束后,医生询问我是否当场开药,药物费用每个月大约400元,至少需服用一年以上。医生表示,如果无法完全脱离原生家庭,这些药需要长期服用。我虽是兽医且不在临床一线,但我很清楚精神类药品的副作用可能造成的伤害,我拒绝了。医生最后交代说,如果我出现严重狂躁,如想打人或杀人时,务必立刻前去复诊。

在此之前,中医通过把脉诊断出我有焦虑的问题,让我自己购买柴胡疏肝丸服用。我遵从建议,长期服用柴胡疏肝丸或逍遥丸,副作用几乎为零,可以随时停药。这个中药方剂,可以很好的治疗焦虑,可以很好的治疗抑郁,但无法治疗躁狂。

针对心脏不适的躯体化症状,我还在服用复方丹参滴丸。

柴胡疏肝丸和复方丹参滴丸照片
柴胡疏肝丸和复方丹参滴丸

庆幸的是,随着持续服药,并自行购买补气的药物茶包泡水喝,我的睡眠状况稍有改善。虽然只是稍有改善,但发病次数却因此减少,发病时的表现也减轻了,虽没有彻底痊愈,但已能够基本正常地去工作和生活。当然,我没有因此掉以轻心,我在持续服用药物。我也清楚,如果情况严重恶化,我会接受长期服用西药来治疗。


感谢妹妹

在我陷入发病的痛苦之中时,我的妹妹给了我很多帮助,让我非常感动。

我拿其中两件事情来说吧。

在我9月初因家里的事情再次返乡,在省会停留的当晚,妹妹在晚上9点半下班之后,打车来到我住宿的地方看望我。此时的我,因前一天晚上几乎一夜没睡,当天又舟车劳顿,精神状态极差,她一直陪伴我,陪我聊天,安抚我的情绪,几次推后返回公司宿舍的时间。最后她起身回公司宿舍时,已经是夜里十一点多了。

在9月下旬的一天,我在学校门口吃完晚饭后去操场闲逛。走完半圈,我突然发病,浑身无力,躺在了操场的草坪之上。随后,我在绿色聊天软件给妹妹发了消息,跟她说了详细的情况,告诉她我已经出现很严重的躯体化表现。我知道,她在动物医院的工作非常繁忙,我并没有指望能立刻看到我的消息。然而天不绝我,此时她恰好在休息,立刻给我打电话,安慰我,鼓励我,劝我不要想不开,要我将她的好朋友叫出来到操场陪我,同时建议我尽快去专科医院进行诊断,勇敢面对自己的病情。随后,我把她的好朋友叫出来到操场陪我聊天。这时,我从抑郁转变为躁狂状态,大概两个小时以后才有所好转。要不是有妹妹的帮助,我不敢想象当天晚上我会发生什么事情。

我的妹妹不是亲生妹妹,也幸好不是亲生妹妹。

妹妹同样命运多舛,遭遇多个小人陷害,几度陷入抑郁,让我非常心疼。幸好她的周围有好朋友帮助,幸好她有个温馨的家庭环境,能够帮助她走出困境。

但如果她是我的亲生妹妹,根据我在上文的叙述,你可以想象会发生什么吗?

我们从师生变为朋友,从朋友变成家人, 妹妹是上天赐予我的礼物。

前两天我们联系时,看到她不仅已经走出困境,且有了又高又帅的男朋友,可谓是郎才女貌,我非常开心。


云朵
拍摄时间:2024年8月,拍摄地点:某个县城

现在,我能够将这些事情平和地说出,说明我已经完全接受这个现实。我相信一切自有天意,每时每刻发生的所有事情,都是命中注定,无法违逆,只能无条件的接受。

我必须要知道的是,我遭遇这一切,是我的业力使然。

欲知前世因,今生受者是。 欲知后世果,今生作者是。

我不能白白经受这些苦难,我必须要知道这些苦难会让我有何成就。

我会尽力活下去,去追寻苦难的意义……

下一代静态博客框架 Valaxy

2023年6月1日 00:00

杜老师一直在找 Hexo 替代框架,因为杜老师说博客文章量比较多,站点页面生成速度太慢,经晓雨童靴的推荐,了解到 Valaxy 框架。本文介绍 Valaxy 的特点,以及部署方式,感兴趣的小伙伴可以尝试下!

框架介绍

Valaxy 的目标是成为新一代静态博客框架与生成器。提供更好热更新与用户加载体验、更强大更便捷自定义开发可能性。支持配置、文章的热更新,而不像 Hexo 一样重新加载页面。

它与 Hexo 相比开发体验和速度上都更胜一筹,且与 VitePress/VuePress 相比拥有更多针对博客的集成功能,譬如文章列表钩子、自动路由、组件注册、可覆盖的布局与主题等。

Valaxy 基于 Vite 提供热更新与打包功能,基于 Vue 实现视图等客户端的功能。因此 Valaxy 兼容并可自由使用 Vite 与 Vue 生态所有插件。

Valaxy 已经默认集成 Open Graph 的 SEO 优化。需要注意的是,对于许多搜索引擎来说,它们可能只青睐 SSG 构建模式。

部署过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
penn@penn-PC:~/Desktop$ sudo npm i -g pnpm
请输入密码:
验证成功

added 1 package in 13s

1 package is looking for funding
run `npm fund` for details
penn@penn-PC:~/Desktop$ npm init valaxy
Need to install the following packages:
create-valaxy@0.14.30
Ok to proceed? (y)

🌌 Valaxy v0.14.30

Project name: … valaxy-blog
📁 /home/penn/Desktop/valaxy-blog

Scaffolding project in valaxy-blog ...
Done.

✔ Install and start it now? … yes
✔ Choose the agent › pnpm
Downloading registry.npmjs.org/typescript/4.8.4: 11.9 MB/11.9 MB, done
Packages: +435
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Packages are hard linked from the content-addressable store to the virtual store.
Content-addressable store is at: /home/penn/.local/share/pnpm/store/v3
Virtual store is at: node_modules/.pnpm
node_modules/.pnpm/vue-demi@0.14.5_vue@3.3.4/node_modules/vue-demi: Running postinstall script, done in 119ms
Progress: resolved 457, reused 0, downloaded 435, added 435, done
node_modules/.pnpm/esbuild@0.17.19/node_modules/esbuild: Running postinstall script, done in 73ms

dependencies:
+ valaxy 0.14.30
+ valaxy-theme-yun 0.14.30

devDependencies:
+ typescript 4.8.4 (5.1.3 is available)

 WARN  Issues with peer dependencies found
.
├─┬ valaxy 0.14.30
│ └─┬ vite-ssg 0.22.2
│ └── ✕ unmet peer critters@^0.0.16: found 0.0.17 in valaxy
└─┬ valaxy-theme-yun 0.14.30
└─┬ valaxy-addon-waline 0.1.0
└── ✕ unmet peer valaxy@latest: found 0.14.30

Done in 1m 34.2s

> valaxy-blog@0.14.30 dev /home/penn/Desktop/valaxy-blog
> valaxy

ℹ Resolve valaxyConfig from /home/penn/Desktop/valaxy-blog/valaxy.config.ts 03:31:05
ℹ Resolve siteConfig from /home/penn/Desktop/valaxy-blog/site.config.ts 03:31:05
ℹ Resolve valaxy.config.ts from theme(yun) 03:31:05
ℹ Resolve addons: 03:31:06

🌌 Valaxy v0.14.30

🪐 theme > yun
📁 /home/penn/Desktop/valaxy-blog

Preview > http://localhost:4859/
Network > http://192.168.36.141:4859/

shortcuts > restart | open | edit

注意:官方推荐使用 pnpm 来部署,所以杜老师第一步安装了 pnpm。另外在 Choose the agent 一步,需要选 pnpm。完成 Valaxy 的部署后会自动运行,默认端口号 4859。

博客更新

如需发布文章,进入到博客根目录的 pages/posts,新建.md 文件就行了,内容结构如下:

1
2
3
4
5
6
7
8
9
10
11
---
title: Title
hide: true
excerpt_type: text
---

这是摘要

<!-- more -->

这是正文

参数作用详见下表:

参数作用阈值
title文章标题暂无
hide临时隐藏某篇文章当设置为 true 或 all 时,文章仍然会被渲染,可以直接访问链接进行查看。但不会被显示在展示的文章卡片与归档中;当设置为 index 时,将只在首页隐藏归档中仍然展示。
excerpt_type预览列表摘要渲染类型md 展示原始 Markdown;html 以 HTML 的形式展示;text 以纯文本的形式展示。

从 Hexo 迁移

Hexo 博客目录与 Valaxy 博客目录对应的关系如下,将相关的内容复制至对应文件夹即可:

用途HexoValaxy
文章source/_postspages/posts
页面sourcepages
静态资源sourcepublic

托管部署

  1. GitHub Pages: 在创建模版项目时,已内置文件 .github/workflows/gh-pages.yml 以实现 GitHub Actions 的自动部署工作流。

  2. Netlify: 已内置 netlify.toml。

  3. Vercel: 将 Framework Preset 设置为 Other,并更改 Build and Output Settings,将 Output Directory 设置为 dist 后点击 Deploy。

  4. Cloudflare Pages: 点击创建应用程序——连接到 Git,然后选择点击开始设置,将构建输出目录设置为 dist 后添加一个环境变量。变量名称设置为 NODE_VERSION,阈值为 16.0,最后点击保存并部署就行了。

使用体验

杜老师将已发布的 590 篇文章迁移到 Valaxy,仅需 20 秒即可生成站点页面文件,而通过 Hexo 则需要 8 分钟「大概是因为杜老师说使用了太多插件」

不过毕竟是新型的框架,目前主题及插件比较少,并不足以满足杜老师的使用需求,想折腾的小伙伴可以尝试下,杜老师也在坐等着更多模板。

讨论如何通过移动设备更新博客

2023年1月23日 00:00

今天农历正月初二,刚由一个城市,转到了另一个城市,趁着手边恰好有电脑的机会,更新此文,并希望看到的小伙伴可一同讨论!

写在前面

细心的小伙伴可能发现,平时杜老师发布的博文,都会在更新日零点 52 分刷新,那是因为博文已在前一日准备好,GitHub Actions 的计划任务零点 52 分触发自动部署更新博客内容。

今天已经快结束了,博文仍未更新,是因为之前的几天,杜老师身边一直没电脑,所以只好通过移动设备回复评论,但没条件更新博文,故写此文,讨论一下如何通过移动设备更新博客。

智能手机

现在一提手机,没人能想到不智能款式,不过杜老师写下此文时,奶奶刚好在旁边通过老年机听收音机「部分老年机具备FM功能」为了严谨,此段落强调是智能手机。

之前做过一些统计,发现杜老师接触 Hexo 博主,大多都是学生。除了休息日回家用电脑更新,绝大多数时间都是通过手机更新博客。

杜老师使用的工具是 Termux,这是一个终端的模拟器,可使用 Shell 命令,并能通过安装软件添加功能,如 Git。

杜老师会拉取文章仓库到手机中,然后在手机上更新站点内容,再提交至仓库完成更新。一般使用该种方法,都是少量更新需求,如友链等。

平板电脑

为了方便数据跨设备及平台传输,杜老师使用的安卓平板,使用博客维护工具为 AidLux,AidLux 是一个构建在 ARM 硬件上,基于创新性跨 Android+Linux 融合系统环境的智能物联网应用开发和部署平台。

借助 AidLux 不仅可以实现更好的终端操作体验,且通过内置的插件中心,还可安装 Visual Studio Code 等程序,更新博客更加方便!一般使用该种方法,是需要博文更新时,但手边无可用电脑设备。

写在最后

以上是杜老师如何通过移动设备更新博客,因为平时使用移送设备较少「虽然杜老师是一枚狂热的数码爱好者,但手机确实占用了杜老师不少精力和时间,所以在繁忙的工作和学习时,几乎不使用移动设备接收和处理信息」所以了解到的工具较少,希望经常使用移动设备更新博客的小伙伴可以多提建议、参与讨论!

另外杜老师说全年无休,每三天会更新内容,并会满足一些小伙伴的需求,提供宣传及图文教程类博文,欢迎关注!

使用 MeiliSearch 实现 Volantis 主题博客搜索「保姆教程」

2022年9月14日 00:00

感谢柚子童鞋在杜老师的疯狂怂恿下为 Volantis 主题整合了 MeiliSearch 搜索引擎,并花费大量心思编写了相关教程,反正杜老师照着柚子童鞋的教程没做出来,不过在柚子童鞋的耐心帮助下最后还是成功实现了,这里记录下部署过程中可能遇到的坑。

写在前面

习惯水文的杜老师花了很长时间才下决心写下此文,教程太长没耐心看,看了又不愿意自行搭建,搭建了又遇到了更多的问题……

正文开始前先卖下队友,点击 这里 访问柚子童鞋写的教程。

历史背景

杜老师的博客再水,也将近 300 万字,检索文件 content.json 大小 1.42MB「还是调整后的,原有的超过 4M」

当有小伙伴使用搜索功能时,需完整加载 content.json 文件才可显示搜索结果,不仅影响体验还会产生较大流量。

之后换成了 Algolia 服务,但其最近节点位于香港,大陆访问速度较慢,且有 API 调用数限制。

在百度上疯狂谷歌之后,发现一款可自建的开源搜索引擎,就是 MeiliSearch 了。

杜老师第一时间推给了柚子童鞋,对方回复能搞!

再次感谢柚子童鞋,很快写好了教程并推送调用代码至 Volantis 主题库中。

服务搭建

杜老师是忠实的容器党,能用 Docker 的绝不考虑其它部署方法,以下是官方的部署命令,其中 MASTER_KEY 自定义,版本号 v0.28 可换成 latest

1
2
3
4
5
6
docker run -it --rm \
-p 7700:7700 \
-e MEILI_MASTER_KEY='MASTER_KEY' \
-v $(pwd)/meili_data:/meili_data \
getmeili/meilisearch \
meilisearch --env="development"

如果想用某塔 Docker 管理器部署,配置如图。但墙裂建议使用命令行部署,杜老师尝试用 Docker 管理器部署几次失败,最后定位问题属于玄学:

获取密钥

部署完成后通过 IP:7700,如能看到下图页面说明部署成功:

这页面好看吧,然而没啥卵用!官方建议使用 Postman 调试 MeiliSearch,并提供了调试文件,点击 这里 跳转至 Postman 页面,复制官方调试文件链接 https://docs.meilisearch.com/postman/meilisearch-collection.json 到 Link 标签项,导入即可:

将上文的 MASTER_KEY 填入 Token 框中:

切换至 Variables,将 url 处替换为 MeiliSearch 的域名,indexUID 建议使用 hexo,记得点击右上方 Save:

展开 MeiliSearch 进入 Key Management-Get keys,点击右侧 Send 即可获取 searchKey:

如若长期使用,建议使用生产模式部署,停用上面的实例后,使用下面命令重新部署:

1
2
3
4
5
6
docker run -d --restart=always \
-p 7700:7700 \
-e MEILI_MASTER_KEY='MASTER_KEY' \
-v $(pwd)/meili_data:/meili_data \
getmeili/meilisearch \
meilisearch --env="production" --no-analytics

调试使用

为保证每篇文章拥有一个唯一值,推荐用 hexo-uuid 插件,进入到博客目录后使用如下命令按照:

1
npm install hexo-uuid

安装完后,需要 blog/_config.yml 配置文件为如下内容:

1
2
3
4
5
6
7
8
jsonContent: 
meta: false
pages: false
posts:
title: true
path: true
text: true
uuid: true

使用如下命令完成检索文件推送:

1
2
3
4
curl -X POST 'https://yoursdomain.com/indexes/hexo/documents/?primaryKey=uuid' \
-H "Authorization: Bearer MASTER_KEY" \
-H "Content-Type: application/json" \
--data-binary '@public/content.json'

参考下面代码修改主题配置文件即可:

1
2
3
4
5
6
7
8
search:
enable: true
service: meilisearch # hexo, algolia, meilisearch
meilisearch:
placeholder: 'Search...'
searchKey: 'searchKey'
indexName: 'hexo'
hostUrl: 'https://m.dusays.com'

注意事项

杜老师在推送检索文件时遇到了全量推送问题,表现为搜索时出现大量重复结果,杜老师选择了最简单粗暴的解决方法,上传前调用删除接口清空数据库:

1
curl -X DELETE 'https://m.dusays.com/indexes/hexo' -H "Authorization: Bearer MASTER_KEY"

最后分享下杜老师的 GitHub Actions 配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
name: CI
on:
push:
branches: [ "main" ]
workflow_dispatch:
schedule:
- cron: '30 16 * * *'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions/setup-node@v1
with:
node-version: '16.17'
- name: npm
run: |
npm i -g hexo-cli
npm i
- name: hexo
run: |
hexo g --silent
gulp
curl -X DELETE 'https://m.dusays.com/indexes/hexo' -H "Authorization: Bearer ${{secrets.MEILISEARCH_KEY}}"
curl -X POST 'https://m.dusays.com/indexes/hexo/documents/?primaryKey=uuid' -H "Authorization: Bearer ${{secrets.MEILISEARCH_KEY}}" -H "Content-Type: application/json" --data-binary '@public/content.json'
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
external_repository: penndu/my-website
publish_branch: master
publish_dir: ./public

通过 GitHub Actions 实现 Hexo 定时发布

2022年9月11日 00:00

经常会有小伙伴说杜老师总发穿越文,确实这种发布方式会让新伙伴一脸懵,且对搜索引擎不大友好。本文讲解如何通过 GitHub Actions 变相实现 Hexo 定时发布功能!

隐藏功能

其实 Hexo 根配置文件有个隐藏功能,通过调整 future 值可以实现是否显示当前时间点之后的文章。

为什么说隐藏功能,因为杜老师曾问了一圈,没一个知道的!

默认 future: true 时发布所有文章,改为 future: false 则隐藏当前时间点之后的文章。

需要注意的是,这里的隐藏指不生成该文章页面,而不是主页不显示。且到了文章的时间点后还需手动生成页面文件才可显示。

定时发布

这里借助 GitHub Actions 的计划任务功能实现,workflow 配置文件中加入如下代码即可:

1
2
schedule:
- cron: '30 16 * * *'

提示一下,GitHub Actions 和国内有时间差,杜老师设置每天 16 点 30 分部署后,实际部署时间为第二天 0 点 52 分,完整参考代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
name: CI
on:
push:
branches: [ "main" ]
workflow_dispatch:
schedule:
- cron: '30 16 * * *'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions/setup-node@v1
with:
node-version: '16.17'
- name: npm
run: |
npm i -g hexo-cli
npm i
- name: hexo
run: |
hexo g --silent
gulp
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
external_repository: penndu/my-website
publish_branch: master
publish_dir: ./public

通过 GitHub Actions 将 Hexo 部署至良心云 CloudBase

2022年9月8日 00:00

部分主题如 Volantis 对 node 有版本要求,而 Web 应用托管无法指定 node 的版本,且直接推送 public 文件部署还会因为网络问题导致无法及时触发,本文讲解如何通过 GitHub Actions 解决该问题。

准备工作

首先登录良心云 CloudBase,获取 Web 应用托管对应环境 ID,记录一下等会要用:

进入访问管理——访问密钥,进入到 API 密钥管理,获取 SecretId 以及 SecretKey:

登录 GitHub 并进入博客的源码库,切换到 Settings-Secrets-Actions,分别添加红框变量,如 ENVID/SECRETID/SECRETKEY:

最后切换到 Actions-New workflow-set up a workflow yourself:

数据走向

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
name: CI
on:
push:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions/setup-node@v1
with:
node-version: '16.17'
- name: npm
run: |
npm i -g hexo-cli
npm i
- name: hexo
run: hexo g --silent
- name: Deploy to Tencent CloudBase
uses: TencentCloudBase/cloudbase-action@v2.0.1
with:
secretId: ${{secrets.secretId}}
secretKey: ${{secrets.secretKey}}
envId: ${{secrets.envId}}

注意:以上为杜老师所用代码,替换原有内容,或根据现有内容做修改即可。

文件限制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"envId": "{{secrets.envId}}",
"version": "2.0",
"framework": {
"name": "gh-actions-test",
"plugins": {
"func": {
"use": "@cloudbase/framework-plugin-website",
"inputs": {
"outputPath": "public",
"ignore": [
".git",
".github",
"cloudbaserc.json"
]
}
}
}
}
}

注意:TencentCloudBase/cloudbase-action@v1 传输的文件不能超过一千,所以这里选择了 TencentCloudBase/cloudbase-action@v2.0.1,该版本执行需要在博客源码根目录中创建文件 cloudbaserc.json 并加入上面代码。

写在最后

  1. 以上方法适用于将博客所有源码托管至 GitHub 上,如只托管 public 目录内文件则需修改配置;

  2. 如 public 目录内的文件不超过 1000,可选择使用 TencentCloudBase/cloudbase-action@v1,该版本不需要在博客源码根目录中创建文件 cloudbaserc.json

  3. 默认强制全量推送策略,会删除 CloudBase 中原有的文件,使用该教程前请先做好数据备份;

  4. 偶尔会出现推送失败的提示,但实际测试已完成推送,无视即可。

中文博客列表导航项目

2022年8月15日 00:00

这是木木木木小朋友的一个项目,之前让我推荐来着,趁着最近集中推荐公益项目,就一起发出来好了。这个项目立志要链接全部的中文独立博客,感兴趣的小伙伴可去项目中找找是否收录了自己的博客!

项目原文地址

原文地址:

项目地址「鼠标放在下面即可查看」

https://github.com/zh-blogs/blog-daohang

这项目是什么

这个项目立志要链接全部的中文独立博客「做中文博客的全集」

之后会向上游库提交它们没有收录的博客网站,互通有无。

如何发现博客

  1. 根据链接,可以从种子博客中找到十多个不等的网站地址,这些地址中符合要求的会自动成为新种子博客。理论上说,博主无需提交网址,就可以被发现;

  2. 同时会使用一些上游库。

如何支持项目

  1. 可为本项目做宣传,让更多人知道项目;

  2. 程序员可帮忙实现本项目的功能目标,也可以加入共同维护地址库。

博客收录标准

  • 中文网站。

  • 是博客网站且有 3 篇及以上公开博文。

  • 具有博客网站基本属性:

    1. 具有主观和知识积累性,尊重科学、公认事实、约定俗成、伦理道德,在给出依据和尊重他人的前提下挑战权威除外;
    2. 具有独立和自主性,拥有独立域名;
    3. 有交互性,提供评论功能或提供博主的个人联系方式;
    4. 收录博客网站时,会以非专业的角度评定网站是否符合收录标准,不能排除存在疏漏的可能性。
  • 不在本项目收录范围内:

    1. 内容农场;
    2. 资源分享。

需要注意细节

  1. 在头部用 link 标签指向 RSS,或通过告诉项目你使用的网站程序尝试该程序默认的 feed 地址;

  2. 用 generator 元数据标签告诉项目你的网站所使用的程序。

坚持更新博客的动力是什么

2022年6月16日 00:00

博客圈子不断有新人的加入,也不断有老人退出。几乎每个月杜老师都会检查一下友情链接,看看哪些网站测掉了杜老师说的链接。而在这过程中,总会发现一些网站长久没有更新,还有一些网站,已然无法访问~

强迫症者

经常有小伙伴说文章的时间错了,为什么杜老师一直在更新穿越文「提前发布」

其实杜老师就是个强迫症加拖延症的患者,曾在《留言》中声称每三天更新一篇,不做到会浑身难受。

但有时候真的不知道该写什么好,有的时候又研究出有意思的技术,加上一些小伙伴的需求,总会突然更新多篇,而 Hexo 并没有定时发布的功能,所以杜老师就按照排期,一并发了出来,这就是各位小伙伴看到的穿越文!

不知道有多少的小伙伴和杜老师一样,通过强迫症迫使自己去更新博客,如果恰巧和杜老师一样,欢迎留言让杜老师知道,不是一个人在战斗!

习惯记录

朋友圈里不少的小伙伴,喜欢研究一些新奇的小玩意,有时候还会找到我交流。

在研究的过程中难免会遇到一些问题,每次解决之后,都会留下一篇笔记文章。

还有的小伙伴,会经常记录自己的生活。杜老师站在读者的角度,更加了解这些小伙伴的生活!

杜老师就非常喜欢记录,但自己的文笔不好,所以不会经常记录生活,加上本博主题就是技术分享,所以在本博中很少可以看到杜老师的生活分享,以后也许会有,敬请期待!

希望盈利

杜老师的友链圈中,还有一类博友,他们喜欢收集一些资源,然后付费分享。

或者提供一些收费服务,亦或站中加入大量广告。

首先杜老师要说明一点,本人不反感任何盈利性行为,毕竟建站本身就需要成本的。有些人可能不赞同,毕竟现在免费资源遍地都是。但大家都需要知道,维护时的精力和时间也算是成本,所以只要合理合法,大家应该都会支持。

杜老师目前的收费项目只有图床,实在是没办法,运营成本太大!而目前的付费收入远远不够支出,不过好在没有人再传违禁图片了,图片审核的成本降低了,而且每天不用提心吊胆担心链接被封,也知足了!

喜欢互动

常来杜老师博客的小伙伴都知道,在本博的每条评论,杜老师都会用心去回复,并且都会回访、留言。

杜老师很喜欢十年之约的一句话:一个人的寂寞,一群人的狂欢。

在社交平台如此繁多的时代,只有互访才能让博客不寂寞。

也喜欢杜老师说的博文,可以给小伙伴带来更多话题,让更多小伙伴加入互动,实现一群人的狂欢。

通过 Webify 部署 Hexo

2021年10月7日 00:00

Vercel 虽是免费的,但因为其服务器在国外,常会遇到访问不稳定的问题。最近良心云推出了个人站点扶持计划,不少已备案的小伙伴转到了国内托管,今天就分享下通过 Webify 部署 Hexo。

服务介绍

CloudBase Webify 为您的 Web 应用提供一站式托管服务,支持包括态网静站、动态 Web 服务等各种类型的 Web 应用,提供默认域名、可自定义域名、安全证书、CDN 加速等,提升 Web 应用的性能和安全性,此外提供基于 Git 的工作流、自动部署流程、加速开发部署流程,提供极佳体验。

可将博客/论坛/官网等任意形式的个人站点部署到 Webify,即可以申请获得扶持代金券,即实现零成本网站托管。

在线部署

进入良心云 Web 应用托管页面,点击页面中的新建应用:

在右侧从模板创建中找到 Hexo:

选择源码托管平台,并设置托管仓库名,然后点下一步:

在框架预设中,选择 Hexo 项,然后点击部署应用:

服务开始部署应用,待页面提示发布成功后,即可正常访问博客:

服务会免费送一个访问地址,不过该支持较长不容易记忆,可以自行添加域名,且支持 SSL:

通过 Vercel 部署 Hexo「主题」

2021年10月4日 00:00

如果不喜欢 Hexo 自带的默认主题,想换一个心仪的主题如何操作呢?今天就以杜老师用的这款 Volantis 作为演示,说一下如何更换 Hexo 主题。

写在前面

通过前两篇的教程,大家应该发现除了发布文章时固定的文章格式代码外,并没有其它的命令。参考杜老师的教程,可以实现仅用鼠标点击,就能创建一个博客。

本文较之前的教程相比,需要借助 GitHub 官方的 Desktop 工具才可实现无代码操作。如果了解 Git 的相关命令,也可直接通过命令操作。本站不提供 GitHub Desktop 下载地址,请自行搜索并下载安装,如需帮助可以在页面下留言。

操作步骤

安装好 GitHub Desktop 并打开后,首先需要登录账号,就可在工具中看到博客的部署源码所在仓库了,选择其并点击下方的 Clone:

点击 Clone 后,工具会提示仓库的地址,以及本地存放路径,根据需求可以修改本地存放路径:

通过浏览器访问心仪模板的页面,点击 Code 后选择 Download ZIP 下载模板文件:

返回 GitHub Desktop 点击 Repository,选择 Show in Explorer 即可打开博客的部署源码所在文件夹:

找到刚刚下好的模板压缩包,将里面的文件解压到 themes 目录:

记得修改下目录的名称,将其改为模板名称,下图中是未修改的演示:

返回到 GitHub Desktop,在图示的位置输入任意字符,点击 Commit to master 即可将模板文件上传至 GitHub:

通过 GitHub 访问博客的部署源码页面,点击进入到_config.yml 文件:

点击右侧的笔,即可进入修改模式:

将文件中设置项 theme 后的值改为主题的名称,最后点击 Commit changes 就行了。Vercel 会自动部署,待部署完成后即可看到博客换了新的主题:

通过 Vercel 部署 Hexo「发表」

2021年10月1日 00:00

我们在上文中讲解了如何部署 Hexo,本文主要说明如何通过 GitHub 在线更新博客的内容。当然,如果您熟悉 Git 相关操作,也可以 clone 到本地编辑并提交。

在线更新

登录自己的 GitHub 账号,在 Repositories 列表中找到存放源码的仓库:

进入保存博文的目录 source/_posts:

点击 Add file 添加一个新文件:

填写文件名称:

按照下图格式添加内容模板,并添加自己的内容:

编辑好内容后,点击 Commit new file 提交并自动部署:

博文模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
---
title: 标题
tags:
- 标签
categories:
- 分类
date: 2021-10-01 00:00:00
---

> 导语

<!-- more -->

正文

注意:可以添加多个标签、分类,按照上面格式,每行一个。导语一行可以省略。

通过 Vercel 部署 Hexo「部署」

2021年9月28日 00:00

也许您也想拥有一套自己的博客,方便面试的时候想展示自我,或者想记录自己的生活,但是一直没找到合适的平台;也许有一些自己的小玩意想部署到服务器,但是服务器又有点小贵,打工人又舍不得买,那么 Vercel 平台可能是您不错的选择,不用花钱,访问速度不错,域名也有!本文的主要目的是帮助想拥有自己的博客的小伙伴,提供一套完整博客搭建方案,那么现在就开干吧!

前言

以 Vercel 和 Hexo 作为关键词去搜索,会搜到一大堆教程,而且每一篇都非常详细。就会小伙伴会问了:杜老师为什么要重复的造轮子呢?

说实话我也不想这么做,奈何再详细的教程,还是会有些小伙伴不会操作,一个劲追问为什么。既然如此,贴心的杜老师就把每一步骤都截图在下面,并且尽量减少代码出现,让需要的小伙伴仅通过鼠标点击就可以完成 Hexo 部署。

介绍

Vercel 提供一个云平台,可优化整个项目开发和部署体验,它有强大的功能值得去探索,个人使用是免费的,提供域名访问,使用方便快捷:

Hexo 是一个基于 Node.js 的静态博客网站生成工具,命令操作简单,直接开箱使用,支持丰富主题,支持高度自定义化,主要用 Markdown 语法:

部署

首先使用 GitHub 用户登录 Vercel,如果没有 GitHub 可注册一个,这里就不再叙述了。如果不会操作,可在下面评论留言,杜老师会第一时间协助注册:

因为杜老师之前部署过一个站点,所以该页面会有所不同。不过都能看到右上方的新建项目:

支持从 GitHub 导入项目,但本次我们主题是通过 Vercel 全新部署 Hexo 博客,所以我们选右侧的查看所有模板:

在刷新的页面下方,即可看到 Hexo 项,点击开始部署:

我们首先将部署的代码,保存在 GitHub:

设置在 GitHub 仓库名称,点击创建,Vercel 会自动在 GitHub 中创建对应仓库,并将相关的代码存储在其中:

这里不做过多解释,问就是要收费,直接跳过即可:

接着 Vercel 开始全自动部署博客,稍等一会即可:

部署完成之后,页面会自动跳转并跳出烟花,杜老师手慢了没有截到,点击去仪表盘即可查看部署结果:

仪表盘中,我们能看到 Vercel 为我们提供的免费二级域名,使用该域名即可访问刚搭建好的博客:

结尾

杜老师不喜欢读长文更不喜欢写长文,所以完整搭建流程,会分为四个章节来更新,本篇仅讲述如何部署 Hexo,下一篇将更新如何更新文章,再一篇会更新如何安装插件,最后一篇更新如何使用模板。

杜老师会根据小伙伴的需求,考虑更新进阶教程,不过最终目标就是使用最少的代码完成 Hexo 的搭建和后期更新。有任何的问题及建议请在评论区留言,杜老师会尽快回复!

Blogger 选程序的那些事

2021年8月20日 00:00

杜老师之前就是一枚 WPer,后来因为 WordPress 太过于臃肿,不想再折腾了,所以选择了 Hexo。不过最近又遇到了新的问题……

WordPress 的优缺

WordPress 的优点可真不少,首先使用人群基数较大。据不完全统计,十个网站就有三个是 WordPress 创建,而且还不都是博客。这也带出其第二个优点,拓展性强,几乎我们所需要的功能,都可以通过插件来实现,甚至某些大牛,可以直接上手修改代码。因为人群基数关系,也有不少前端工程师们为其开发模板,所以我们可以很容易在 WordPress 平台中,找到心仪模板。

再说一个优点,也是因为人群基数大的关系,技术支持丰富,随便找个博客圈里问问,都能解决当下问题,省时省力。

夸赞完了该说说缺点了。第一个缺点是臃肿,为了让其更具备扩展性,程序作者为其加入不少函数,很多都是普通用户不需要的,所以代码十分臃肿。接下来是效率,WordPress 不仅耗费服务器资源,而且执行效率低下,作为一个依赖 MySQL 数据存储的程序,竟然不做 SQL 的优化,在服务器上经常可以看到关于 WordPress 的慢查询语句,而且偷偷的说,MySQL 的临时缓存加速对其无效,别问我为什么。

最后一个就是用出问题。你本想安静的这篇文章,却经常因为程序或插件,亦或者是模板升级带来一些问题,轻则无法正常使用,重则数据丢失,你的时间都浪费在处理这些问题上了。导致杜老师放弃 WordPress 最主要的原因是它的量级比较重,700 篇博客竟然需要 4H8G 的配置才能带动,也可能是杜老师没优化好的关系。

Hexo 的优缺

轻量部署、成本很低、定制性强、安全性高。

轻量部署,Hexo 并不需要复杂的网站运行环境,只需要支持 Node.js 即可,几条命令就可实现 Hexo 的安装使用。

成本很低,如果只是为了记录,对服务端的要求并不高,可以选择免费网站托管平台。如想自建托管平台,也不需要太高的服务器配置,入门级云主机配置即可实现超强并发。

定制性强,Hexo 外观及功能实现,大多都依赖于模板,而模板的使用及修改都非常简单,并不像 WordPress 那样需要掌握 PHP 语言才可以。

安全性高,生成的页面为 HTML 的格式,没有动态文件产生,不会出现 SQL 语句注入等安全问题。

功能有限、模板有限、容易出错、需要扩展。

功能有限,既然是 HTML,没有数据库的支持,功能方面必然有限。

模板有限,相比较 WordPress,Hexo 的模板不是很多,而且大多都是个人作者,不像 WordPress 有企业级模板作者。

容易出错,Hexo 本身还好些,不过其依赖的 Node.js 可能会报错,而且某些报错比较神奇,同样的环境有人没问题,有人就会报错。

需要扩展,很多功能都依赖第三方服务,如评论等。

目前状况

上述缺点还是比较好的,毕竟玩博客这么久,早已没有折腾的心,就想安静的写个文。且目前 Hexo 具备的功能可以满足杜老师需求,所以对 Hexo 来说还是比较满意。

只是随着文章数量增多,生成页面时间越来越长,其中优化过很多次「升级版本、修改参数」均未能提高其效率,所以想换一个程序。

我的需求

希望这款程序可以将.md 文件直接转换博客文章,毕竟.md 的备份修改都很方便。可以的话,最好是拥有自身的评论系统,依赖第三方整合性较差,且 Hexo 目前支持的第三方评论工具,大多都需要将数据存于其它位置,这种动态数据不管备份还是管理起来都很麻烦,数据放在自己手里才更放心。

之前有小伙伴推荐过 Ghost 以及 Hugo 等,但测试的效果不尽人意,期待有天能遇到心仪的博客程序,也欢迎大家的推荐!

运行在云主机的 Hexo

2020年12月27日 00:00

很多选择 Hexo 的朋友,都会将其架设到 GitHub 上面,毕竟 GitHub 提供 Web 服务是免费的,但其访问的速度确实不太尽人意。我们如果想将 Hexo 运行在云主机上,又该如何去操作呢?

准备工作

首先拥有一台主机,在这里我们选择硅云的主机作为演示,并安装 CentOS 最新版本,感兴趣的小伙伴也可以通过本站右侧广告栏进入到官网选购。

其次准备一个远程控制工具,像杜老师用的是 FinalShell。这里并无明确软件要求,可以连接并控制主机就行了。

运行环境

第一步安装 Node.js 及 npm,Node.js 是 Hexo 的环境支持,npm 可以安装 Hexo,一般安装其中一个,另一个会自动安装:

1
2
yum -y install nodejs
yum -y install npm

第二步安装 Git 工具,npm 安装 Hexo 时通过 Git 进行下载操作,默认安装 git 时会自动安装 git-core:

1
2
yum -y install git-core
yum -y install git

第三部开始安装 Hexo,并初始化博客目录,BLOGDIR 处可自定义:

1
2
npm install hexo-cli -g
hexo init BLOGDIR

最后生成站点页面文件即可,这里我们定义 BLOGDIR 项为 blog:

1
2
cd blog/
hexo g

设置访问

接下来安装 Web 引擎,这里我们选 Apache,记得安装好后启用服务:

1
2
yum -y install httpd
systemctl start httpd

通过软链形式替换掉 Web 站点目录,使 Apache 可以读取 Hexo 生成的页面文件,这里我们假设 blog 目录在 root 中:

1
2
3
4
cd /root/blog/
rm -rf /var/www/html/
mv public/ /var/www/html
ln -s /var/www/html/ public

流程演示

点击播放:

asciicast

Hexo 指定不进行渲染的文件或目录

2020年7月29日 00:00

有时候需要放一些已经做好的页面到博客上去,而默认情况下,Hexo 也会将这些页面进行处理,导致这些页面渲染上了博客主题,如何不处理这些页面呢?

设置方法

1
skip_render: DIRNAME/FILENAME.html

注意:假设 source 里面有个 DIRNAME 目录,要忽略该目录下的 FILENAME.html 页面,可以通过在_config.yml 设置 skip_render 来忽略,具体如上。

设置扩展

单个文件夹下全部文件:

1
skip_render: DIRNAME/*

单个文件夹下指定类型文件:

1
skip_render: DIRNAME/*.html

单个文件夹下全部文件及子目录:

1
skip_render: DIRNAME/**

多个文件夹及各种复杂情况:

1
2
3
skip_render:
- "DIRNAME/*.html"
- "DIRNAME/**/*"

Hexo 生成页面出现问题 WARN No layout

2020年7月26日 00:00

今天杜老师在更新本站的主题时,遇到了空白页面的问题,并弹出 WARN No layout 错误提示。记录一下以本站主题为例如何解决该问题!

问题原因

Hexo 本地测试运行重启后页面空白,终端上提示 WARN No layout。使用 hexo clean 然后重新 hexo g 再次运行还是空白。

运行 git clone 指令获得主题后,在 theme 主题下保存目录的名称为 volantis-x,如果在_config.yml 里设置的是 volantis,就会出现这样的 WARN,页面显示的是空白。

解决方法

  1. 把 theme 下的文件夹名称改为 volantis;

  2. 将_config.yml 里设置改为 volantis-x。

让 Hexo 支持在线编辑

2019年7月19日 00:00

每次发布博文都要登录到服务器太过麻烦,有没有什么方法可以让 Hexo 支持在线编辑呢?今天杜老师教大家通过第三方插件实现在线编辑 Hexo 博文!

插件安装

1
npm install --save hexo-admin

注意:上面的命令需要在 Hexo 根目录执行,过程中可能会报错,是因为版本兼容性关系,无需理会!

插件使用

1
hexo s

注意:每次在使用插件时,都需要使用 Hexo 集成的 server 引擎,运行上面的命令后,可通过浏览器打开 http://DOMAIN:4000/admin 访问编辑器。

登录验证

该插件不需要身份验证即可访问,所以为了安全,最好添加身份验证。访问插件页面,点击导航栏中的 Settings,点击页面的 Setup authentification here,根据提示依次输入用户名和密码,最后验证无需理会。输入后会在页面下生成代码,将其复制到 Hexo 博客根目录下的_config.yml 即可。

下次再登录时,需要输入用户名和密码!

在线部署

每次编辑好文章后,需登录到服务器的 Hexo 根目录中执行部署命令才可以,这样非常麻烦。插件集成自动部署功能,不过需要进行一些简单配置,将下面的代码复制到 Hexo 博客根目录下的_config.yml:

1
deployCommand: './g.sh'

然后依次执行以下命令。执行后即可通过导航栏中 Deploy,然后在页面输入框输入任意字符后点击 Deploy 即可:

1
2
echo 'hexo g' > g.sh
chmod +x g.sh

将 Hexo 部署到 CODING

2019年7月18日 00:00

GitHub 虽然免费和稳定,但因为其服务器在国外,故访问时会因为线路等原因发生访问缓慢,甚至超时等等问题。国内的 CODING 同样提供免费的代码托管和页面展示服务,我们可以将代码上传到 CODING 上展示!

准备工作

如果没有账号,请前往 CODING 注册一个账号。然后新建一个公开仓库,仓库名称格式为 USERNAME.coding.me

创建完成后记下该仓库的 HTTPS/SSH 地址,一般格式为 https://coding.net/USERNAME/USERNAME.coding.me.git,下一步会用到。

配置环境

1
2
git config --global user.email "EMAILADDRESS"
git config --global user.name "USERNAME"

注意:如果你只是安装好了 Git 但没有配置过,那么现在需要做的第一件事情就是设置你的 Git 用户名和邮箱。在 Git Bash 执行以上两条命令配置你的用户名和邮箱,这里需要用户名和邮箱与你的 CODING 用户名和邮箱保持一致。

配置文件

1
2
3
deploy:
type: git
repo: https://coding.net/USERNAME/USERNAME.coding.me.git

注意:进入到 Hexo 博客的根目录,编辑站点的配置文件_config.yml,将上面的代码填入文件末尾。

博客发布

1
hexo d

注意:输入这个命令即可将本地的博客文件,上传到 CODING,不过每次需要输入用户名和密码!

将 Hexo 部署到 GitHub

2019年7月17日 00:00

GitHub 可为用户免费提供静态页面的展示空间,我们可以将生成好的博客文件部署到 GitHub 上展示,就可以节省一部分空间及域名的费用!

准备工作

如果没有账号,请前往 GitHub 注册一个账号。然后新建一个公开仓库,仓库名称格式为 USERNAME.github.io

创建完成后记下该仓库的 HTTPS/SSH 地址,一般格式为 https://github.com/USERNAME/USERNAME.github.io.git,下一步会用到。

配置环境

1
2
git config --global user.email "EMAILADDRESS"
git config --global user.name "USERNAME"

注意:如果你只是安装好了 Git 但没有配置过,那么现在需要做的第一件事情就是设置你的 Git 用户名和邮箱。在 Git Bash 执行以上两条命令配置你的用户名和邮箱,这里需要用户名和邮箱与你的 GitHub 用户名和邮箱保持一致。

配置文件

1
2
3
deploy:
type: git
repo: https://github.com/USERNAME/USERNAME.github.io.git

注意:进入到 Hexo 博客的根目录,编辑站点的配置文件_config.yml,将上面的代码填入文件末尾。

博客发布

1
hexo d

注意:输入这个命令即可将本地的博客文件,上传到 GitHub,不过每次需要输入用户名和密码!

如何上线一个博客「下篇」

2019年7月13日 00:00

经过十多天的折腾,杜老师的私人技术博客终于和大家见面了。上线一个博客真的很困难吗?今天我们来聊聊吧!

服务系统选择

杜老师的学生大部分用的都是 CentOS 系统,这是一款重量级 Linux 操作系统,用作静态博客网站太过大材小用,所以杜老师选择了较为轻量的 Ubuntu 系统,这款麻雀虽小五脏俱全的系统深受杜老师喜爱。

版本没有严格要求,杜老师选择了 18.04TLS 这一版,TLS 是技术长期支持,表示官方会在很长一段时间内维护系统的更新升级。

运行环境搭建

我们需要使用 npm 软件管理器安装 Hexo 命令行,所以需要先安装 npm:

1
apt -y install npm

然后通过 npm 软件管理器安装 Hexo 命令行:

1
npm install hexo-cli -g

接下来就可以使用 Hexo 来配置博客网站,不过 Hexo 程序源码位于 GitHub,部署之前需要先安装 Git 工具:

1
apt -y install git

之后就可以使用 Hexo 命令来生成博客网站文件,命令执行后会自动创建一个目录为 blog,里面就是博客网站文件,你也可以将 blog 改成其它名称,不过不可以使用中文哦:

1
hexo init blog

生成博客网页

上面的命令是生成博客程序文件,我们还需运行下面的命令生成可以访问的网页文件。首先生成网页文件:

1
2
cd blog/
hexo g

有个网页文件之后,我们还需要可以访问该网页,我们通过 Nginx 来实现,安装的命令是:

1
apt -y install nginx

使用 hexo 的网页文件目录替换掉 Nginx 的默认网站根目录,并建立持续集成的关系:

1
2
3
4
cd /var/www/
mv html/ html.bak
mv ~/blog/public/ html
ln -s /var/www/html /root/blog/public

最后启动 Nginx 并设置开机启动即可:

1
2
systemctl start nginx
systemctl enable nginx

如何更新博客

经过上面的步骤后,就可以通过域名访问到刚创建好的博客了。如何更新博客的内容呢?通过 Hexo 自带的命令,就可以实现更新配置等操作,不过记得要在 blog 目录才可以:

1
2
cd blog/
hexo new TITLE

TITLE 为文章标题,你可以自定义,执行完上面的命令后系统会生成一个文件,并以红色字体提示,使用编辑器修改该文件内容即可,最后使用 Hexo 命令生成并更新网页文件即可:

1
hexo g

如何上线一个博客「中篇」

2019年7月12日 00:00

经过十多天的折腾,杜老师的私人技术博客终于和大家见面了。上线一个博客真的很困难吗?今天我们来聊聊吧!

为什么选择 Hexo

在上一篇博文中杜老师曾说过这款博客程序的名字是 Hexo,那么为什么会选择这款博客程序呢?它又有什么优点呢?

Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown 解析文章,在几秒内,即可利用靓丽的主题生成静态的网站。它在国外很受开发者的欢迎,因为开发者们可以使用这款程序,在 GitHub 上快速免费的搭建个人博客网站。

任性的杜老师

我考虑的当然不是免费搭建个人博客网站,而是这款博客程序的框架和设计理念,它可以快速生成静态的页面,不仅可以减少服务器的压力,而且可以更快相应请求,使访客获得更好的浏览体验。好比一家饭店事先准备好顾客所需的美食,当走到座位时佳肴已然端了过来,顾客少了等待,厨师少了繁忙。

GitHub 是开发者的天堂,里面有非常多的技术大牛分享的源码程序,但它对国内网络的支持不是很好,访问慢都是小事情,偶尔还会出现超时等无法访问的问题,这对于一个网站来说可是致命伤。毕竟大家不会选择一家动不动就关门谢客的小餐馆。

杜老师的选择

程序固然重要,但运行程序的环境更加重要。英雄联盟这款游戏很多人都喜欢,但如果要在运行于服务器的 Linux 系统上面玩,保证你会分分钟哭出来。

所以杜老师选择了阿里云服务器,虽然价格贵了一些,但为了网站的稳定、速度,还是很值得的。

都用哪些服务

除了 Hexo 博客程序和阿里云的服务器外,杜老师还注册了独立域名 dusays.com,开通了阿里云的 OSS 存储服务,及 CDN 网站加速服务。

最后我要说下,并不是每个人都需要花钱开通这些服务的,通过免费的 GitHub 也能搭建博客网站,杜老师只是想提供更好浏览体验。

如何上线一个博客「上篇」

2019年7月11日 00:00

经过十多天的折腾,杜老师的私人技术博客终于和大家见面了。上线一个博客真的很困难吗?今天我们来聊聊吧!

上线是何意思

在技术界,总有一个我们平时没听过的专业术语,上线就是其中一个。

所谓上线,简单理解就是将存于本地的已经设计好的作品放到互联网上,供他人访问和体验。

上线准备工作

上线之前,我们首先需要准备好相关的作品。比如我想上线一个博客,就需要预先设计好博客程序、模板等等。

虽然杜老师可以自行开发博客类程序,但同时很认同一个观点:不要重复的造轮子!既然网络上已经有非常多的博客程序,就不用再多一个了,拿来主义这时是不被谴责的。

手伸向了何方

我之前的网站程序是 WordPress,它是一款强大的博客类程序。但我这次并不想继续使用它,人生贵在尝试。

我选择了一款之前只是听说,但从未尝试过的博客程序 Hexo。这是一款基于 Node.js 语言开发的网站程序,说实话对这门语言我是一窍不通,但仍然无法阻止我想尝试的热情。

最后一些叮嘱

我会在接下来的文章中,发布我上线博客的教程,希望阅读过文章的朋友都可以拥有属于自己的博客。在这里我有句话想说:对于博客来说,我们享受的并不是搭建过程,而是随着内容更新,上面堆满了知识和经验。

这款 Hexo 博客在搭建过程并不轻松,杜老师在尝试的过程中备受折磨,好在本人越挫越勇的性格使得该博客能够成功上线。技术这种东西,一是靠练,二是靠试,三是坚持,希望大家都能成功!

博客更名

2024年10月30日 16:59

今天备案完成了,由于原来的博客名字“吴杰博客”不符合个人备案要求,所以不能再继续使用了。虽然可以“偷偷”的用,但万一被核查到最后还是要改,与其等着被查到再改,还不如索性现在就改了。

这个名字改完,还是有点怀念、有点纠结,但最后还是想通了,名字只是一个代号而已,博客最主要的还是内容,不是吗?

新的名字如你所见——慢读时光,这个名字在备案完成之前就想了好多天,本来想叫“慢时光”,作为一个记录生活的博客还是挺契合的,但是后来又考虑到还会记录一些读书的内容,所以就又加了一个“读”字,最后就成了“慢读时光”。

其实对于这个名字,也不是很满意,但备案的事情总要往前推进,如果一直卡在名字上,等想到了满意的名字,可能这案也就不用备了,因为我知道我大概很久很久也不会想出一个完美的名字。世界上本就没有什么完美的东西,差不多就这样吧。

对于这个名字的解读,其实也没有什么特别的含义,就像上面创建它的过程一样,初心只是记录生活和读书的内容。这个名字起完后,反而有点担心被误认为成一个专门读书的博客,不管了,就这样,案都备完了,再改也晚三秋了,将就用吧。

把主题首页改成两栏显示

2024年10月27日 20:01

今天周末,在家休息,外面阴雨绵绵,上午8:30送儿子去课外培训班,就在家附近,走过去5分钟,上课到11:30接,然后回家跟老婆两人看了一部电影,烧了一壶热水,喝茶,中午饭后睡了一小会,被骚扰电话吵醒,我生气的在电话里骂人。。真的很烦,最近银行贷款的营销电话好多,一天能接好几个,周末都要打来!!睡不着了。。起床折腾主题代码,想把首页文章显示为两栏(Wordpress首页改成两栏显示),没有着急敲键盘,思考了一会,突然灵感来了,马上整起来,嗯,好像效果还行,心情瞬间大好。

第一步:在index.php的 <?php if(have_posts()):?> 下一行添加<div class=”posts-container” style=”display: flex;flex-wrap: wrap;gap: 5px 40px;”> ,在 <ol class=”page-navigator”>上一行添加</div>。意思就是,给它定义一个框,并且给它style css。

第二步:在css末尾添加以下代码,在宽屏和窄屏上都能正确显示。

.post{width: calc(50% - 20px);box-sizing: border-box;} 
 
/* Switch to single-column layout on mobile */
@media (max-width: 800px) {.post {width: 100%;}}

第三步:把single,page和search的class=”post”添加style=”width: 100%;”

20241025

2024年10月25日 11:58

最近一直在小范围修改hugo主题,目前已经成为我满意的样子,以后应该不再大改主题,昨天下午帽子叔打电话来要求GONG AN BEI AN,加了微信,我也是第一时间做处理并发消息告知,到昨天傍晚收到短信已通过,这速度绝对赞。

Wordpress的站点,基本每天有人来攻击,就这么好玩嘛,目前也没什么应对方案,暂时还能顶住,就是查看对方ip怎么经常变更,反正发现一次加一次黑名单。安全方面,hugo确实可能要好很多,不排除以后再次全部使用hugo的可能,至少现在已经做好完全准备。上一次由hugo转回wp是因为主题even由于长期未更新导致不兼容最新的hugo版本,经过这一年多的摸索,我认为只有让主题精简(删除一些不必要的东西,主题文件清晰),简单一些才适配新的版本,也做了一些主题的测试,证明我的想法目前来看没有问题,当然,升级版本前先备份一下旧版本,万一出什么问题还能换回去。

目前两种程序都在使用着,两者都喜欢。

Hugo一些设置

2024年10月20日 10:09

做了一些安全设置:

阻止hugo站点被rss订阅 ✔

阻止hugo站点被搜索引擎收录 ✔

阻止hugo站点被其它网站iframe嵌入 ✔

设置hugo站点防盗链 ✔

手动设置站内第三方链接不显示网址并用base64跳转 ✔

<a rel="nofollow" target="_blank" href="#" onclick="window.location.href=atob('aHR0cHM6Ly90aGlyZC1wYXJ05rLmNvbS8='); return false;">链接文本</a>

假设您的链接是 https://third-party-link.coom,转换结果为 aHR0cHM6Ly90aGlyZC1wYXJ05rLmNvbS8=

极简没什么不好,用来自己简单的记录挺好。

修改主题

2024年10月17日 14:06

对于折腾主题这事,有点强迫症,一定要弄到yes,反正自己觉得满意,舒服了才行。一直喜欢清爽一点的界面,能隐藏的就隐藏,能不显示就不显示:

1,在首页加入最近留言者的头像,并用base64显示其站点链接,方便回访。

2,留言者头像用下拉的形式显示。

3,头像设置半透明opacity: 0.6

4,header同样设置半透明opacity: 0.6

5,整站字体加大

折腾暂时停止,又或许过段时间有新的想法出来,然后再小范围打磨。

这运气

2024年10月14日 11:37

这运气是没谁了,加油卡积分换的康师傅方便面,想吃,拆一盒吧,有2把叉子,加量不加价嘛?

这运气吧,挺奇怪。

有次出差,中午吃面,鸡腿面,付了一个鸡腿的钱,服务员端来面,上面摆着一个鸡腿,吃了一半,发现碗底还有一个。。这可如何是好?

有次在kfc买了一个鸡肉汉堡套餐,服务员拿给我,当时比较饿,没注意,打开直接就吃起来,吃了两口发现不对呀,不是鸡肉,是牛肉汉堡,服务员也是不好意思什么什么的。。有点忘了,好像当时还补给我一个鸡肉汉堡的。

有次下班后,在路边捡到一个钻戒,钻石挺小个,刮一下挺硬,至今还在我办公抽屉里,有人出价1000,我没卖,我不知道真假,真的倒也算了,如果是假的,那我就坑人了,我不愿意做那事,所以一直放着。

。。。

解决福建地区无法访问网站及无法显示Gravatar头像的问题

2024年10月25日 23:24

最近终于抽出时间来整理我的博客,并解决了一个令我头疼的问题:由于服务器位于海外,我的博客在福建地区无法访问。经过一番调查,我发现这是因为泉州防诈骗中心屏蔽了大部分海外服务器(尝试了其他城市访问正常),导致包括手机宽带、电信、联通、铁通以及移动在内的福建所有网络都无法访问。然后我搜到有人微信上关注了防诈中心并提交了网站申诉,这样福建的用户就能够正常访问我的博客了。

昨天提交申诉,今天博客就能访问了,效率还是挺高。

然而,访问恢复后,我遇到了另一个问题:Gravatar头像无法显示。

解决方法:

自己修改,把gravatar的服务器改成国内的cravatar.cn服务器即可。

另外祈祷不要再有其他xx城市的防诈骗中心。

OK,废话少说,马上进入正题,如何修改?

functions.php 文件中添加这段代码即可:

// 定义 my_get_avatar 函数
function my_get_avatar($avatar_url) {
// 替换为新的CDN地址
$new_avatar_url = str_replace('secure.gravatar.com', 'cravatar.cn', $avatar_url);
// 返回新的头像URL
return $new_avatar_url;
}

// 添加钩子到 get_avatar 过滤器
add_filter('get_avatar', 'my_get_avatar');

最后,我计划恢复博客的更新频率。在四处浏览时,我发现许多博客的头像都显示异常。如果不申诉,这些博客在福建的读者将无法正常访问。希望我的解决方案能对遇到类似问题的博主有所帮助。

❌
❌