阅读视图

发现新文章,点击刷新页面。

OpenV**手动指定路由规则

  我们在远程办公时通常需要通过内部 OpenV** 来访问公司内部的敏感系统, 默认情况下, OpenV** 会临时修改本地路由表,将所有流量都指向了 v**_gateway,导致一些本地规则被覆盖,甚至无法打开部分国内的网站,带来了很多不便。这里记录一下手动指定路由规则的配置,仅让指定的网段或域名走 gateway。

本地模拟CNAME解析

  众所周知,我们可以通过修改本地 hosts 文件来定义一个域名的指向,这个过程我们可以简单的理解为在本机创建了一个优先级很高的 DNS A 记录,实现了某种程度上的域名劫持, 利用这种特性我们可以实现诸如广告屏蔽、本地测试、别名等需求,但 hosts 机制仅仅能定义域名与 IP 对应关系, 并不能模拟其他的 Record 类型, 比如 CNAME 记录。

写在老张博客十五周年

写在老张博客十五周年 - 第1张图片

真的没有刻意去记今天,只是今天偶尔看网站信息时,才注意到建站时间是2009年10月9日,算到今天,正好是十五周年。到我提笔止,老张博客十五年里,不包括本篇共发布了787篇文章。评论数为18412条,其中应该有一大半是我回复评论。浏览总次数为5230094次,乍看这523万浏览量蛮大的,其实这是长时间积累的,平均每天也不过千。

老张根据文章归档,来回忆下老张博客走过的十五年的路。其实老张建博客是在2008年,只不过那个时候对“数据安全”没有概念,搞个博客正常丢数据。目前的数据是从2009年10月9日一直使用到现在的,现在是每天做备份,生怕哪数把数据搞丢了。

2009.10-2010.7:摸索爬行期:

想不起来老张当初因为什么建博客了,根据2009年归档的所谓的文章来看,从2009年10月建站到2010年7月中旬,基本上是转载别人的文章或是自己简单发两句话。可能是前一年对写博客并没有什么经验,只是去折腾但并没有把折腾的过程记录下来。建站前一年,可以说是摸索爬行阶段。

2010.7-2011.4:辉煌成就期

从2010年7月28日《WordPress更换域名后所要注意的十件事》这篇文章开始,到2011年4月份,原创了大量Wordpress方面的教程,同时总结了SEO方面的技术经验文章。这一年时间里,是原创高质量文章最多的一年,很多篇教程当时被admin5等站长网站收录,当然也引来了很大的流量,可以说这一年是老张博客最为辉煌的一年。

2011.5-2018.9:歇菜苟活期

2011年5月份开始,歇菜了,这段时间应该去折腾易语言去了,因为出现了一些易语言方面的教程。也就是从那个时候开始,老张博客在“苟活期”,你说不更新吧,偶尔那么转载两篇文章,你说更新吧,一年也就是更新十来篇。老张博客的苟活期或是说“空白期”相当的长,从2011年5月一直持续到2018年9月,长达七年之久。

2018.10-今:平稳发展期

2018年10月份起,老张博客从技术型博客转到“技术生活类”博客后,才算是基本上稳定。也就是那这个时候开始,内容为记录一些自己折腾的过程,分享一些自己的生活。更新基本上算是有规律,达到每个月四五篇,一直保持到现在。也就是说,真正意义上的写博客只能算是2010年7月至2011年5月,以及2018年10月起到现在,满打满算,也就是6年时间。博客十五周年,而真正写博客也就是六年时间,也算是可悲哟。

博客大事件

结合着前段时间软云的跑路风波涉及的数据安全来讲,来说说老张博客这十五年来遇到了两件“大事件”。

第一件事就是2017年长时间不上博客,未能及时更新博客程序和各种插件,导致各项版本太旧,有黑客利用漏洞入侵了我的空间,所有网站文件全被挂马。这个技术方面的事自己是搞不来的,还是在“游子”的帮助下花了大量的时间才得以解决。

另外一件大事就是“游子失联”。游子,一个非常不错的空间商,他真的能和客户打成一片,包括我在内,他的长期客户非常多,我用他的空间有十余年时间。但是在2020年11月份,游子的所有服务器全部停机,而游子又联系不上。我在《历经一劫,博客重生!》详细介绍了整个事件的过程。好在后来在朋友的帮忙下,直接打款给IDC商后开通了一个季度的机器才把数据得以保存。对于游子的失联,我们所有群里客户并不是担心“赔偿问题”,而是考虑到游子的个人安危问题。有位客户离游子比较近,单独开车百余公里去找游子,功夫不负有心人,找到了游子的老婆。这时才知道,原来游子在给一家P2P公司做网络方面的技术顾问,最终这家公司资金断链而被起诉,被定性为诈骗,游子也被牵涉其中而被留置。到现在已经五年时间了,游子客户微信群一直还在,但是还没有游子的身影,不知道他过的怎么样了。

老张博客十五周年了,不管你的博客在大厂还是小厂,定期做数据备份,把数据牢牢的抓在自己手里,还会有下一个十五年!再下个十五年,无数个十五年。

Memos完美降级到Memos0.18.2版

Memos完美降级到Memos0.18.2版 - 第1张图片

前几天一直都在折腾Memos,原因就是我的Docker容器是利用《如何优雅的一键升级宝塔面板多个Docker容器》的watchtower项目,通过计划任务每周定时检测Docker版本并完成自动更新。所以我的所有Docker版本都是一直保持着最新。也就是这点,违背了“求稳不求新”的原则,导致出现了一些问题。最为严重是Memos,作者更新很随意导致新版本的数据库结构、API接口都发生了改变,与目前使用的“哔哔点啥”的memos页面出现不兼容。

国庆节前,折腾把《完美解决Memos页评论与博客哔哔页面评论互不显示问题。》的问题解决了,方法就是备份数据库文件后直接删除新版Memos容器,安装Memos0.18.2版老板容器,并恢复数据库文件。安装后并没有经过大久测试,结果新的问题出现了。降级后Memos不能发布内容了,乖乖,这可是个大问题。

经过分析,不能发布内容的原因就是新老版本的Memos的数据库结构发生了改变,那么解决的思路也就是把新版数据库数据结构修改为与memos0.18.2保持一致即可。

备份数据库、删除新版安装memos0.18.2版

我在《无需代码,宝塔面板Docker部署便签工具Memos》提到过,当初我们在部署Memos时,已经把Docker内的数据库文件memos_prod.db映射到服务器上,找到新版数据库文件下载到本地后,可以另存为其他名称后删除最新版本memos容器。这次我是直接使用代码安装的0.18.2版,代码如下:

docker run -d --init --name memos --publish 5230:5230 --volume /docker-data/memos/:/var/opt/memos ghcr.io/usememos/memos:0.18.2

利用Navicat Premium工具导出-修改-导入数据库文件

安装好0.18.2版之后,到/docker-data/memos/下同样把memos_prod.db文件下载到本地。

这个时候我们请出今天的主角,Navicat Premium,直接到官网下载即可,14天的试用时间,完全够你折腾了。利用Navicat Premium同时连接打开新、老数据库文件。

Memos完美降级到Memos0.18.2版 - 第2张图片

经过比较你就会发现新版数据库文件中表名为memo的字段比0.18.2版本多一列uid字段。第一思路就是在新版表memo的uid字段上直接右键点删除,结果报错,只能另寻思路,如果这一步哪位大神有什么方法,一定要分享出来,因为正面我的方法比较繁琐。

那简单方法行不通,只能通过繁琐的方法了,把数据库表的内容导出成可编辑的文件,在相应软件里把memos的uid字段删除后再导入0.18.2版的数据库。具体方法如下:

Memos完美降级到Memos0.18.2版 - 第3张图片

选中新版数据库memo表,选择工具-导出,这里我选择的是excel数据表(*.xls),导出后用ecxel打开你导出的表格,直接把uid这一列删除即可。注意,这个时候我们再连接0.18.2数据库的memo表,再选择工具导入,注意一定要选对文件类型把修改后的excel文件导入。这个时候,我们就完美地把memo这个表导入了。

其他表的内容按上步方法导出-修改-导入,其实也就是memo和表resource两个表需要删除uid字段,其他像标签、用户、用户设置、系统设置等表只需要把内容导出成excel文件后再直接导到0.18.2的数据库即可。这样就完成了所有的数据迁移工作。

停止容器,恢复数据,完美降级

在服务器上把Memos这个容器先停止,把0.18.2版数据库文件上传到你映射的目录,覆盖旧文件即可。再重新启动容器,OK,十分完美地把Memos0.22.2降到Memos0.18.2版。

经过这一周多时间的测试,再无任何问题,Memos降级完美完成!

软件工程师面试: TCP/IP协议是什么?


最近,在面试第一轮抖音(字节跳动)的伦敦职位(Site Reliability Engineer),被问到了这个问题:TCP/IP协议是什么?这个是考基本功,是每个软件工程师都要会的。

TCP/IP(传输控制协议/互联网协议)是一组网络协议,管理数据如何通过互联网和其他网络传输。它是互联网的基本通信模型,由两个主要层组成:

互联网协议 (IP)

IP 负责将数据包从源地址路由到目标地址。它工作在 OSI 模型的网络层。

  • IP 地址:互联网中的每个设备都被分配了一个唯一的 IP 地址,用于标识数据包的发送者和接收者。
  • 数据包路由:IP 将数据分成多个包,并通过不同的网络将其路由到目标地址。
  • 版本:IP 主要有两个版本:IPv4(32位地址)和 IPv6(128位地址)。

传输控制协议 (TCP)

TCP 负责确保设备之间数据传输的可靠性。它工作在 OSI 模型的传输层。

  • 面向连接:TCP 在传输数据之前会在发送方和接收方之间建立连接。
  • 数据完整性:TCP 通过确认、序列号和错误检查等机制,确保数据包按顺序无误地到达。
  • 流量控制:TCP 通过滑动窗口管理数据流,防止接收方超载。

TCP/IP 协同工作原理

  • 应用数据:应用层将数据(例如网页、电子邮件)发送到传输层(TCP)。
  • TCP 层:TCP 将数据分段,添加序列号和错误检查信息,并将其发送到 IP 层。
  • IP 层:IP 层将 TCP 段封装成 IP 包,附上源和目标 IP 地址,并通过各种网络路由数据包。
  • 接收端:在目标设备上,IP 层将数据包交给 TCP,TCP 重新排列并验证数据的完整性,然后将其传递给应用层。

TCP/IP 套件中的其他协议

  • UDP(用户数据报协议):一种无连接、速度更快的 TCP 替代方案,常用于视频流、在线游戏等实时通信。
  • HTTP/HTTPS(超文本传输协议):用于网络通信的应用层协议。
  • DNS(域名系统):将域名解析为 IP 地址。

TCP/IP 确保数据在网络间高效传输,保持可靠性、地址分配和路由,同时遵循互联网的基本通信原则。

TCP/IP 通常被描述为一个四层模型,但有时它可以与 OSI 模型(七层)进行比较。

tcp-ip-and-osi-model 软件工程师面试: TCP/IP协议是什么? 学习笔记 程序员 计算机 计算机 软件工程 面试

TCP/IP 4层协议和OSI的7层协议的比较

TCP/IP 四层模型

TCP/IP 模型简化为四层,旨在反映协议在现实网络中的工作方式。

应用层

这一层对应于 OSI 模型的前三层(应用层、表示层和会话层)。它包括 HTTP、HTTPS、FTP、DNS 和 SMTP 等协议。

传输层

负责设备之间的可靠通信。运行于这一层的协议包括 TCP(传输控制协议)和 UDP(用户数据报协议)。

互联网层

处理跨网络的数据包路由,类似于 OSI 的网络层。该层包含 IP(互联网协议),用于地址分配和数据包路由。

网络接口层(或链路层)

这一层负责物理网络(如以太网、Wi-Fi)和互联网层之间的数据传输。它对应于 OSI 的数据链路层和物理层。

OSI 七层模型

OSI(开放系统互联)模型更加细致,将网络功能分为七个层次。

  • 物理层(如电缆、交换机)
  • 数据链路层(如 MAC 地址、以太网)
  • 网络层(如 IP 路由)
  • 传输层(如 TCP、UDP)
  • 会话层(如管理应用之间的会话)
  • 表示层(如加密、数据格式转换)
  • 应用层(如 HTTP、FTP)

主要区别:TCP/IP vs OSI

TCP/IP 将一些功能合并为更少的层次(四层),反映了它在互联网通信中的实际应用。

OSI 是一个更加详细的概念模型(七层),主要用于教学和理论理解。

总结来说,TCP/IP 通常被认为是四层模型,而 OSI 模型则是七层模型。

英文:What is TCP/IP (4 Layer vs OSI 7 Layer)?

面试经历

面试题

面试技巧

面试其它

本文一共 1009 个汉字, 你数一下对不对.
软件工程师面试: TCP/IP协议是什么?. (AMP 移动加速版本)

扫描二维码,分享本文到微信朋友圈
75a5a60b9cac61e5c8c71a96e17f2d9c 软件工程师面试: TCP/IP协议是什么? 学习笔记 程序员 计算机 计算机 软件工程 面试
The post 软件工程师面试: TCP/IP协议是什么? first appeared on 小赖子的英国生活和资讯.

相关文章:

  1. 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
  2. 孩子喜欢的 cozmo 机器人 小儿子今年刚过5岁生日, 问他要啥生日礼物, 他说想要 cozmo 机器人. 我们都不知道这是啥, AMAZON一搜还不便宜, 均价200多到300多英镑都有. 估计是孩子在学校的时候知道的这机器人. 在AMAZON下了单, 很快就到了. 图像识别算法很厉害. 这机器人很厉害, 不需要告诉它, 它可以自己玩,...
  3. 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
  4. 这些年在英国开过的车 这个车是真的汽车,从2010/2011年开始学驾照,到2012年考过驾照(两次才过),到现在也有十几年的驾龄了,真的算老司机了。 现在开的是两辆车(第四和第五),分别是奥迪Q5和保时捷卡宴。目前每周加保时捷的油费大概是50英镑。 第一辆 Seat Ibiza 第一辆:在英国的第一辆小黄车 Seat Ibiza (西亚特·伊比飒) 离合很重,男人开的车,当时用来练手,最后面到谢菲而得/Sheffield因为住在市中心不太需要车,就给卖了。 第二辆 奥迪AUDI A6 这辆开了有近十年,当时从谢菲搬家到剑桥Cambourne大剑宝就是开得这车。开了近10年的奥迪A6卖给了车厂(内含开车成本) 我当时买的时候是7000左右,然后买来修了修又多花了1000多英镑,...
  5. 同一台服务器上多个WORDPRESS站点的一些设置可以移出去 我自从把所有网站都挪到一处VPS服务器上 就发现很多事情省事很多 可以同时管理多个网站 包括 WORDPRESS博客. 比如我有四个WORDPRESS博客 然后我就把通用的一些资料给移出去 移到 HTTP或者HTTPS都不能直接访问的文件夹里这样就更安全许多. 文件 wp-conn.php 存储了 相同的数据库资料. 1 2...
  6. Win10右键添加管理员权限.reg 保存以下为 *.reg 文件 双击 Windows Registry Editor Version 5.00 @="获取管理员权限" "NoWorkingDirectory"="" @="cmd.exe /c takeown /f...
  7. 老婆的配偶签证被拒 郁闷死了, 601镑签证费打水漂,一去不回!费钱费力. 去年12月份我请了律师拿到了永居.老婆是T1G签证的陪工签 (DEPENDENT VISA) 2016年4月份到期. 然后我就想说得趁早把她的签证转成配偶签(SPOUSE)这样她就可以尽快走五年永居的路线. 今天收到拒签信,原因是我没有提供 有工资进帐的那份银行帐单,我提供了我和我老婆的联名帐户, 但是工资并不是直接打到这个帐单上的.所以就这一点被拒了.完全不给解释,不给补材料的机会.601镑就这样再见了. 英国的签证寄出之后是先由另一个部门先收费, 收完费才正式审理,而且不管结果如何是不退钱的.后悔没让律师弄,也不至于到现在浪费这么多时间和金钱,签证还没过.由于原签证还没到期,所以还不能上述.估计只能等搬完家后年底请律师搞定这事. 真是郁闷, 600镑, 我可以再买一个IPHONE6,或者给我的新买的车换四个轮胎....
  8. 公司给配了台高配DELL笔记本 早上例会结束的时候我顺便说了一句 我的笔记本有点慢, 当时我并不知道我的经理远程用电话也参加会议了(他全程在听), senior staff SE 对着电话说, “peter, you hear that? btw, my disks are...

完美解决Memos页评论与博客哔哔页面评论互不显示问题。

完美解决Memos页评论与博客哔哔页面评论互不显示问题。 - 第1张图片

暑假两个月放飞自我后,近段时间开始收心了,把精力从游戏上转回到博客。第一件事就是把博客的“哔哔点啥”网页布局进行了调整,把内容的标签设置与评论图标一行,这样看上去就顺眼多了。虽然只是一个小调整,但是苦于自己的代码小白,还是找了AI帮忙。

目前我的哔哔点啥页面还是用《巧搬空白Koobai大佬Memos页面,完美与博客整合。》,哔哔点啥页面的工作原理就是直接调用Memos数据。Memos前期版本没有原生评论,而新版本即使有评论在memos的数据库里并非单独列。为了能让在memos以及博客的哔哔点啥页面有评论能力,便把《Artalk评论嵌入Memos,完美接近朋友圈、微博!暨宝塔面板Docker部署artalk评论系统》。

后来随着memos版本的升级,出现了个问题,就是在Memos在直接评论的内容与直接在哔哔点啥上评论的内容相互不显示了。因为当时评论数比较少,也并没有在意,这个问题一直也就拖到了现在。既然已经收心想折腾博客,那就索性把这个BUG也给搞定吧。

Memos的作者更新真的是很随性的,各种功能随意增减,导致很多人说Memos只是个项目不是个产品。前期版本单篇Memos显示匹配的路径是序号,用域名+M+序号形式,比如https://memos.laozhang.org/m/423;而后期版本匹配显示的路径却是内容前几个字符编码,比如https://memos.laozhang.org/m/GR65Lmbquyb5QuVuZgj9G7(打不开了,因为我的版本降了)。正是因为这次的升级,而导致了上述的问题。

老孙的帮助下,通过修改哔哔点啥的JS文件,把 var memo_id = data[i].id;修改为 var memo_id = data[i].name; ,是可以正常显示了,但是又有一个小问题,就是评论通知邮件里的链接又不匹配了。

后来询问了木木大佬、koobai大佬,才知,最为稳定的memos版本是0.18版,那解决的方法就是“降级”了!

之前我习惯于在宝塔面板下部署各种Docker,当时我是用了《无需代码,宝塔面板Docker部署便签工具Memos》。现在想来,还是代码更为方便一些。降级之前必须要很把你原来映射出来的文件夹备份并下载下来,那是你Memos全部数据。然后删除目前的Memos项目及镜像,重新用代码安装0.18.1版即可。

docker run -d --init --name memos --publish 5230:5230 --volume ~/.memos/:/var/opt/memos ghcr.io/usememos/memos:0.18.1

正常使用的这些Docker,我们应该保持一个原则“求稳不求新”,为了能正常运行,还是用稳定版本的为好!

 

停止 SSH 服务器监听 IPv6 地址

为啥要停止 SSH 服务器监听 IPv6 地址?

  许多同学家里都有软路由或者小型服务器,用来跑一些个人的小程序,或者跑 TeamTalk 等。现在 IPv6 已经基本普及,好处是每个设备甚至每个容器都能分配到一个公网 IP 地址,坏处也显而易见,那就是,之前靠路由器来充当防火墙的搞法已经不奏效了。为啥捏?因为之前基本都是在路由器上做端口映射,可以有选择地开放端口到互联网上,现在则是整个系统暴露到了互联网。

  看到这里,聪明的同学应该都已经知道俺想表达的意思啦。没错,咱们都是通过 SSH 来控制服务器的,一旦它被入侵,后果是很严重滴!删库跑路还不是最大的问题,最大的问题是骇客潜伏在服务器里,三天两头搞些事情,如果你有很多的虚拟机,仅凭一己之力,是很难彻底跟踪入侵踪迹的。

怎么停止 SSH 服务器监听 IPv6 地址?

  首先,通过终端/SSH 之类的方法登录你的服务器,并进入 /etc/ssh 目录,用 cp 命令备份一下 sshd_config 文件,具体命令俺就不多费口水了。备份好之后,用你习惯的编辑器打开 sshd_config 文件,比如俺喜欢用 nano 编辑器,命令是 nano sshd_config

  找到 #AddressFamily any 这一行,把前面的“#(警号)”删除,改成 AddressFamily inet。往下找到 #ListenAddress 0.0.0.0,再把前面的“#”删除。最后,保存 sshd_config 文件。

  这还没完!要想让修改生效,必须重启 SSH 服务端软件,在 CentOS/Debian/Ubuntu 系统上,命令是 systemctl restart sshd,在 Alpine Linux 系统上,命令是 service sshd restart

  切记!先别断开 SSH 连接,一定要看刚才执行命令后是否有报错信息,如果有,赶紧恢复之前的备份,然后重新修改配置文件并再次尝试重启。

检查 SSH 服务器是否停止监听 IPv6 地址

  当修改完成后,一定要有复查的习惯。咋复查捏?在有 IPv6 连接的内网电脑上,通过 SSH 连接服务器的 IPv6 地址,如果连接不上就表示修改成功了。为了避免误判,俺建议通过 ping 以及连接这台服务器的其他端口(例如 Web 端口)来再次确认。

更换宏碁 Swift 3 SF314-511 笔记本键盘

几年前给老婆买了这台宏碁 Swift 3 笔记本电脑,单从配置(11Gen I5/16GB RAM/512G SSD,当时四千多买的全新机)来看它的性能并不算高,但一直以来用着都还不错,不论是响应速度和续航体验都挺好,甚至超过了我那台小新 Pro…我也不知道为啥。

前不久,老婆突然要用的时候发现键盘几乎完全失灵了,我检查过后初步判定是键盘坏了…但从肉眼看不知道是什么引起的,也没见进水和挤压等等,难道是陈小果干的好事儿?事不宜迟我从万能的淘宝花了五十几块大洋下单了一个同款的原装键盘(封面图)回来,结果发现专程让老板送的螺丝刀根本没法用…笔电外壳的 12 颗螺丝是相对少见的六角花型,家里的螺丝刀也奈何不了……😒😒😒

想着省钱,于是又从拼多..... [ 阅读全文 ]


原文链接: https://www.shephe.com/post/replace-acer-swift-3-sf314-511-keyboard/
版权声明: Kevin's Space 版权所有,转载请用明链标明本文地址
本站相关: 随机文章 | 站长微博 | 关于本站 | 联系站长 | 捐助作者

不会再见,点心云!

在去年九月份的时候,写了一篇《利用家里闲置宽带,给宽带费回回血!》跟大家一起分享了如何利用PCND技术利用家里的闲置宽带给网费回回血。当时我配置了两台J4125,其中一台是all in one,里面跑了两个网心云,一个是迅雷插件版,另外一个是Docker版。而另外一台J4125则是单独跑了一个点心云。为了能有更大的收益,把家里的宽带从300M升级到了500M,上行是20M。利用爱快多拨,上行可以跑到50M。这两台设备,平均每月的收益能有150块钱左右。其实如果要是项目再早,收益还会更高,可惜没有赶上那个时候。

大概一个月前,突然发现家里的宽带卡了,不管是重启路由还是给光猫断电重拨都解决不了。用了测速软件一测下行才百十来M,上行就更低。最最为重要的是,发现公网IP也失效了,再打电信报修,客服在后台查询公网IP是正常的。以为是硬件问题,打10000报修,维修师傅来测试路线完全没有问题。后来和维修师傅聊天才知道,现在江苏电信正在大力查处PCND,只要查到宽带降速、公网IP停止。就连你长时间PT下载都会把你的宽带降速。维修师傅说你这个情况算是好了的,只是给你降速,就在我们同小区有一家查到之后就直接停宽带。我的个乖乖,真的是怕了。为了减少不必要的麻烦,经过思考,还是把点心云、网心云给下了吧。

PCND大概停了有两周后,再打电话报修。报修什么,宽带还没有给我恢复、公网IP也没有给我恢复呢。报修了,维修师傅又到现场了,但是解决不了,说是后台原因。难道就这样完蛋了?找在电信公司的朋友帮忙解决吧,他也就是一个电话的事情,一切搞定。唉,问题搞定了,又少不了一顿酒给他。

项目停掉了,那台单独跑点心云的J4125就在我身旁吃灰呢,得要把它放在海鲜上给卖掉了哟。至于宽带,也不会再去降到300M。因为以前单独300M宽带的就是800块钱一年,而现在虽然是79的套餐,但是有500M宽带、5个手机号共享500分钟通话、共享40G流量呢,还是很划算的了!

由“软云事件”想到的!

初识软云_RuanCloudf是在去年11月份大佬论坛上看到的,当时他在论坛上搞促销活动,便买了他一台香港VPS活动机,2C2G的一年133块钱。这台VPS就拿来当备用服务器,在上面折腾一些Docker待稳定运行之后再迁到CloudCone 的主服务器上。虽然是活动机,但是网络还是非常稳定的。

在今天三月份,软云找到我,说想在我的网站上投放广告,给我的报酬就是免费送一台4C4G5M的香港安畅服务器。因为之前有用他的香港活动机,对他家的机器还是比较满意,便答应了。在是否撤下我原来的CloudCone 广告时也协商一致,就是把送我的香港服务器配置提升至8C8G10M,并口头协议长期有效,当然是给他写一篇博文推广。这也就是他推出的“站长扶持计划”。

和软云合作的不止我一个,还有博客界知名度很高的杜老师说邹江博客等。如果我一人给他推广可能没有什么影响力,但是三五个一起推广,在我们这个博客圈里还是有一定有影响力。最为关键的是软云推出的活动机性价比真的是高。如果没有后续的事情发生,可以说可能还有一部分博友会入手他家的香港安畅机。

五一假期的时候,收到软云QQ通知,说是香港安畅全线下架,原因就是注册会员没有要求实名而导致很多人在香港安畅服务器做了非法的事情而被查。从这一点明眼人都可以看出来是服务商管理疏忽而导致被查服务器下架,责任在于服务商。可是很多博友要求软云退款的时候却被告之余款不能原渠道退回,只能退到软云个人中心余额。另外一种可以选择国内服务器后再补偿配置。其实于这件事对于我们做博客的来说之所以选择香港的就是想不用备案而省事的,补偿国内的服务器真的是没有什么意义。另外就是服务器下架的原因是管理不善,与博主们无关,不能因为你的管理不善的后果来让博友承担。

唉,以后不会再有这样的合作了,虽然这样只是扶持、只是广告,但是无形当中也等于给他做了“担保人”。很多博友中看着我们的“担保”才去购买的。这样一来,无疑给我们自己的声誉带来了一定的影响。

其实,作为博主们选择服务器还是很难的,大厂的服务器有保障但是太贵,而小厂的服务器便宜吧但是又没有保障,说下架就下架说跑路就跑路。还是那句话,为了自己数据的安全,一定要记做每天备份,否则后悔真的来不急。

和软云终止合作后,我还是搬回到了CloudConeCloudCone家的服务器虽然不是性价比最高,但是胜在稳定。如果你信任不过小厂,那还是来用CloudCone家的吧。

信息茧房:网络时代的迷思

信息茧房

端午假期,我和侄女聊天,我随口提起了最近网络上爆红的郭有才,我以为她也会有所耳闻。没想到,她却一脸茫然,表示从未听过这个名字。

我有些惊讶,毕竟山东菏泽的郭有才最近在网络上可谓是炙手可热。侄女打开抖音,搜索了他的名字,1000多万的粉丝数量赫然出现在眼前。侄女这才露出了惊讶的表情,感叹道:“居然有这么多人关注他,我却一点都不知道。”

我意识到,我和侄女的年龄差距,导致了我们所处的“信息圈”截然不同。她主要获取信息的方式是通过社交媒体,而我则更倾向于传统网络媒体和书籍。这不禁让我思考,在信息爆炸的时代,我们是否真的了解了世界,还是反而被困在了自己的信息茧房中?尤其是社交媒体变态的算法机制。

值得一说的是,社交媒体的注意力经济下,就更别说视频内容的浅薄化。如今,短视频平台上的内容充斥着各种娱乐八卦和无厘头的搞笑视频,这些内容虽然能够带来一时的快乐,却无法让我们获得真正的知识和思考。

长此以往,我们会逐渐失去阅读、写作和思考的能力,沦为被信息消费的对象,而不是信息的创造者。因此,我们应该减少对浅薄视频内容的依赖,多读书,多思考,多创作,才能真正提升自己的精神境界。

某国际学院最近想和德国合作,并对学生出国工作的意愿进行了一番初步调查。结果却令人意外,学生们出国工作的意愿并不高。这与我最初的预想截然不同,我以为在互联网如此发达的今天,人们对国外的情况应该更加了解,出国工作的意愿也会更高。

然而,事实却并非如此。专家说,这就是信息茧房的作用。我们每天接收到的信息,大多来自我们所关注的社交媒体和网站,这些信息往往都是迎合我们口味,甚至故意制造偏激的内容来刺激注意力。久而久之,我们就生活在一个由自身偏好所构建的信息茧房中,看不到外面的世界,也听不到不同的声音。

一位高校教师老太太,她的儿子从发达国家疫情期间留学回来,最近想去攻读博士。但她就觉得不建议她孩子去国外,疫情期间国外那种各种“惨状”让她很不放心。她甚至觉得,境外的话最多能接受去香港,其他地方都不安全,只有国内才让她放心,才是安全的。

老太太由于长期生活在自己的信息圈中,只接收到了国内媒体关于国外疫情的负面报道,因此对国外的情况产生了偏见和误解,她认为国外到处都是水深火热,不适合生活和学习。

那么,在社交媒体如此发达的今天,我们作为个体,如何才能跳出信息茧房的束缚呢?我认为,以下几点非常重要:

  • 主动探索: 除了关注自己感兴趣的内容,我们也应该主动去探索其他领域的信息,跳出自己的信息圈,到更大的世界中去寻找新的知识和观点。
  • 多方求证: 不要轻易相信单一的信息来源,要多方求证,从不同的角度去了解事情的真相。
  • 开放心态: 虚心接受不同的意见,即使与自己的观点不一致,也要保持开放的心态,进行理性的思考和判断。

信息茧房就像是一个舒适的囚笼,它让我们感到安全和满足,却也让我们失去了接触新事物、开拓眼界的机会。只有跳出信息茧房,才能真正拥抱更广阔的世界,获得更多的智慧和灵感。

在这个信息爆炸的时代,有智慧的人都应该警惕信息茧房的危害,主动跳出自己的舒适圈,去探索更大的世界,去创造更多属于自己的精彩。

银弹飞过先锋大厦

TL;DR 本文13200+字,全文阅读约需20分钟。其中2680字的示例部分为ChatGPT生成,因此可以说本文GPT含量20%,不过该部分详细内容与本文主旨关系不大,且由GPT-4生成,可略过不看。本文简要回顾了从软件及计算机诞生到当前大模型AI时代的软件工程发展历史,并试图从软件工程历史和ChatGPT实践案例中探讨在大模型时代的软件开发模式。

拿下了zhangbo.net完成ICP及公安备案,正式启用!

域名,于博主来说,这真的是一个老生常谈的东西了。对于域名的使用,我相信几乎所有的博客都不至一次的换过博客的域名吧。人,就是善变的动物,对于自己的域名也是同样,某断时间想搞个短域名玩玩,或又是某个时间想搞个主流域名玩玩,再过一段时间还又想搞一些非主流的域名玩玩,到最后手里都有那么多的域名在吃灰。曾经我迷恋过短域名,搞过bm.md这个域名,但是拿来只是放在手里吃灰,还好后来被原价卖了。

因为我的博客名称一直用“老张博客”或是“张波博客”,所以域名也就是围绕这两个名称换来换去罢了。最早的是用imzhang.com,后来在游子的帮助下注册了zhangbo.org这个域名,这个域名我使用时间最长,应该用有十来年,后来被人7000块钱收购了,收去搞什么引流去了。把zhangbo.org卖了之后用过一段时间的izhang.org。后来在邹江博客的帮助下,成功《抢注了laozhang.org》。其实对于“laozhang”这个拼音,在之前也有关注,曾经laozhang.cn可以抢注的时候我都报了名,但是因为那段时间一直使用zhangbo.org并没有打算去换域名,所以虽然报了名但在竞价的时候拍了出价,最终被人600块钱抢走了。没几天我联系的那个人想着加个一二百块钱给买过来,结果人家报价是2万一分不少。乖乖,炒域名的真的是十年不开张,开张管十年呀!

曾经我也用过一年续费1330块钱的“贵族域名”,那就是zhang.bo,结果《启用zhang.bo之后,我成了调侃的对象》,这个域名用了几个月就被我停掉了。随着时间的推移,手里的域名就慢慢的积累,那么多的域名放在手里只有两个作用,一是续费,另外就是“自慰”了。在2023年底的时候,下定决心《将博客减法进行到底!》,手里除了这个博客的域名,其他的域名不再续费。

前几天五一放假的时候,同样又是在邹江博客的帮助下拿下了我姓名全拼的域名zhangbo.net。对于这个域名,并没有十分坚定的想法换成主博客的域名,还是想着把ICP备案和公安备案给做了放在国内,这样一些国内的免费的东西也可以用用。

其实很多人,特别是新建站的朋友都会问把博客放在国内还是海外,而大部分的回答答案也是一样的。放在海外不需要备案没有管束,而放在国内需要备案,各种规矩特别多放不开等等。其实想想,网络也不是法外之地,即使你放在海外你做了不该做的事情照样会被请去喝茶。

既然要把zhangbo.net放在国内,那服务器选择又是个问题,大家都知道国内常规的服务器价格真的是太贵,还好阿里云的99一年的活动还在,搞了两年。但是两年后何去何从又不知道了。域名和服务器都在阿里云,便提交备案。现在备案真的是方便,记得以前备案的时候服务器商还会寄拍照用的背景布给你,而现在全是在网上操作。5月2日注册的域名,5月7日提交ICP备案,一周后ICP备案通过,当即便提交了公安备案,5月20日公安备案通过。公安备案当时提交的是非交互式,想着过几天申请修改给交互式的看看,因为非交互式是不给开评论的。

目前手里也就是laozhang.org和zhangbo.net这两个域名了,估计应该会长期持有下去。

利用docker-compose方式搭建极简朋友圈!

前段时间“朋友圈”还是非常火的,每天更新博客真的太累,就不如每天写两句“朋友圈”,一句话,一张图片即可。便有很多人找WordPress的“朋友圈主题”,感觉用WordPress来跑极简的朋友圈,真的是没有必要,今天老张就向大家推荐Docker版的“极简朋友圈”!

极简朋友圈项目地址是https://github.com/kingwrcy/moments,作者是Mblog的作者,我在《宝塔面板Docker部署个人微博程序Mblog-前后端不分离sqlite版》有过介绍,大家有兴趣可以移步看看。

以前我部署Docker项目时习惯地在宝塔的可视面板里部署,虽然那样看着比较直观,但是多多少少还是有些麻烦,今天老张就来简单点,利用docker-compose方式进行部署。

1.创建docker-compose目录

进入宝塔面板,打开文件管理,进入你的Docker的映射数据目录里,我们可以把所有的Docker的项目都映射到一个总目录,总目录下再分子目录,这样便于管理。比如我在服务器的根目录下创建了Dockerdata,用来放置Docker项目的映射数据,不同的Docker项目,创建不同的子目录。

2.创建docker-compose.yml

这里我们来创建Moments目录,在Moments目录下创建文件,命名为docker-compose.yml ,将下段代码复制到该文件内即可。

利用docker-compose方式搭建极简朋友圈! - 第1张图片

 

version: '3'
services:
moments:
image: kingwrcy/moments:latest 
ports:
- "3000:3000"
volumes:
- moments-data:/app/data
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
volumes:
moments-data:

3.运行docker-compose命令

利用SSH工具远程进入服务器,进入到moments目录下,一定要进入到该目录下,命令是cd /XX你的Docker映射目录/moments/,进入目录后,我们来启动docker-compose,直接输入命令docker-compose up 即可

利用docker-compose方式搭建极简朋友圈! - 第2张图片

 

命令输入后开始跑代码,最后提示“ All migrations have been successfully applied.”后该Docker项目即安装完成。用你服务器IP+3000端口即可访问。

4.反向代理

如果不想用IP加端口方式访问,可以进行反代设置,具体方法可以参考老张的《宝塔面板反向代理,用域名访问Trilium

 

 

我的“博友圈”

前段时间,利用《利用RSS订阅功能添加博友圈,实时展示博友最新文章!》给博客顶部导航菜单添加了“博友圈”这个栏目,那现在就很有必要来聊一聊我的“博友圈”!

《我的博友圈》,并不是我的博主朋友们,而是单指我的博客上顶部导航菜单“博友圈”这个栏目,它的作用就是通过RSS订阅工具FreshRSS,来实现订阅博友博客最新文章的标题、摘要输出功能。

我必须承认我的博客的流量大部分都是靠“博客互访”而来的,所以很多博友会说经常在其他博客上看到我的留言。毕竟我的博客文章质量不是太好,而想要获得流量,那博客互访是一个主要的途径,我在博友的博客上留言的,博友也会友谊性的通过留下的网址来回访。

那么问题来了,怎么样才能知道博友的博客有文章更新呢?!在没有接触RSS订阅之前,老张是在浏览器的收藏夹里分组收藏了近二百个博客网址,每天都会打开一次,而大部分博客又不能做到日更,所以这样浪费了很大的时间。后来接触到了RSS订阅工具后,就把收藏的博客网址订阅起来,博友的博客更新之后RSS订阅工具就会第一时间显示。但是也有个弊端,就是每天需要打开RSS订阅工具。有时因为种种原因,三五天都没有及时打开RSS订阅工具而导致博友的博客更新后没有第一时间访问。那么,通过RSS订阅工具实现在博客顶部导航菜单里添加“博友圈”后,就不必再每天打开RSS订阅工具了,毕竟我们每天都会看自己的博客,这样就可以通过“博友圈”是第一时间知道博友的博客文章更新。极大的增加了与博友之间的互动、增强了用户体验。

目前我的RSS订阅工具里收藏了一百五十位多博友的博客网址,那么我都是收藏了哪些博客网址呢?条件真的是非常的简单,能和我的博客互评三五次的,我基本上都会收藏,当然并不是全部,有些博友的博客一天更新十来篇文章,全是抄过来的,像这样博客不会收藏 ,至少能是写写生活、折腾折腾技术类的博客,至少能是原创博客做到一个月更新那么两三篇的。

这一百五十多个网址并不是固定不变的,会不定期的进行清理。首先清理的是“死站”,很明了,网站长期打不开;其次是清理长期不更新的,这里长期不更新的长期是半年以上的;再次是清理“我去你不来”的。重点说说“我去你不来的”,可能才“建交”时关系很好,能达到有效的“互访互评”,时间久了以后你的博客更新我都会去“关照”而我的文章更新你却从来不来了。我们做博客的,本来就是“你来我往”的,我们没有必要做“单相思”!

可能会有人说你的博友圈就这么屌嘛,有很多优质的博客也入不了你的博友圈嘛!其实不然,博友圈我只是用来展示博友最新文章而达到第一时间的互访互评,我也有另外一个RSS订阅工具,这里都是订阅一些大佬的博客,这些大佬真的是“我去他不来的”,你在他博客上评论N次也不会来你的博客上说一句话。但是,大佬毕竟是大佬,人家文章质量高、博客里干货多。像这类博客,我就用另外一个RSS订阅工具订阅。

总而言之,一个字来概况博友圈的作用:展示、互访、互评!

Anytxt Searcher:好用的桌面全文搜索软件

前两天,一前同事问我要一个“关键词扫描”工具,我给他推荐了这款好用且完全免费的桌面全文搜索软件:Anytxt Searcher。它通过检索你目标磁盘里边的*.doc/*.docx/*.ppt/*.txt/*.pdf/*.xls/*.mobi 等常用的文件,可以让你像使用网页搜索引擎一样搜索电脑文件内的关键词,支持模糊搜索、精准匹配、文件和目录排除等功能。我去年就是用这软件帮一事业单位的一百多台电脑进行了彻底的文件搜寻和清理 ,即所谓“意识形态”清理工作,在重庆的朋友可能懂是怎么回事。

什么叫全文搜索软件?

全文搜索软件是一种在大量文件(通常是储存在数据库中)中进行内容搜索的程序。它们通过创建一个包含所有单词及其位置的索引来允许快速关键字识别,匹配某个或一组指定单词的出现频率。该索引使软件能按照关键字的相关性对结果进行排序..... [ 阅读全文 ]


原文链接: https://www.shephe.com/resources/anytxt-searcher/
版权声明: Kevin's Space 版权所有,转载请用明链标明本文地址
本站相关: 随机文章 | 站长微博 | 关于本站 | 联系站长 | 捐助作者

好用免费的文件同步软件:FreeFileSync

文件同步工具千千万,用着趁手的才是爱,今儿给各位推荐一款完全免费的文件夹比较&同步软件:FreeFileSync,它界面简洁,只需简单的设置就可以实现文件夹的比较和同步工作。FreeFileSync 可以帮你轻松将不同路径或不同设备的文件夹保持一致,进一步可做到自动备份、单向 / 双向同步备份、更新指定文件夹、增量同步、定时备份等。

我个人主要用它来帮我实现相机存储卡的比对和同步,偶尔也利用它进行电脑文件夹备份。简述一下我的工作流程:作为一个非专业的摄影爱好者,我并没有很好的照片备份习惯,很长的一段时间里我都是直接把存储卡插电脑 USB 上,然后打开 Lightroom 添加进数据库进行调色(指将照片元数据导入 Lightroom 而不对原始照片文件进行复制和修改)。后来更换为 Sony A7R3A 后因单幅图片体积变大,且觉得这么直接修图频繁读写数据对卡的..... [ 阅读全文 ]


原文链接: https://www.shephe.com/resources/freefilesync/
版权声明: Kevin's Space 版权所有,转载请用明链标明本文地址
本站相关: 随机文章 | 站长微博 | 关于本站 | 联系站长 | 捐助作者

用 WinSCP 管理七牛云对象存储的文件

最近这段时间断断续续在折腾 WordPress,听广大博友的劝告,频繁地在修改 CSS/JS 脚本文件以实现更好的页面体验,因为我的静态文件是存放在七牛对象存储里边的,所以每次本地修改文件以后还得去七牛云后台操作“刷新预取”,非常繁琐。有没有更简单的办法呢?试试用 WinSCP 管理七牛云对象存储的文件吧,把它当成咱们的远程空间随意增删整改,提高折腾效率~

作为非专业用户,我但凡修改文件均是在如 WinSCP 这样的传输工具里边双击让其缓存到本地,结合 Sublime Text 直接修改(WinSCP-选项-编辑器-添加并置顶),保存后它又能自动将文件同步到远端服务器。本篇过后更进一步,咱能直接修改 CDN 上的内容了,标题虽为用 WinSCP 管理七牛云对象存储的文件,但我想你用其他的类似程序(如 finalXhell、MobaXterm 等)操作其他的对象存储系统(如 Aliyun OSS、Amazon S3、右拍云等)也能成功。


[ 阅读全文 ]

原文链接: https://www.shephe.com/tutorial/winscp-qiniu-kodo/
版权声明: Kevin's Space 版权所有,转载请用明链标明本文地址
本站相关: 随机文章 | 站长微博 | 关于本站 | 联系站长 | 捐助作者

利用RSS订阅功能添加博友圈,实时展示博友最新文章!

博友圈展示博友文章的好处

个人博客没有评论是没有灵魂的,而博客互访才是博客的运营之道。老张在《如何有效的博客互访、互评!》等众多文章里都提到博客互访的重要性。在没有接触RSS订阅工具之前,老张都是在浏览器的收藏夹里收藏了一两百个博客,每天都要打开一次,但是这近两百个博客中其实只有十来个博客更新内容,所以这样操作浪费了大量的时间。后来有了RSS工具,可以对常访的博客进行订阅,当博客有文章更新时,就会得到通知。但是这样操作也有一个弊端,你的博客每天都会打开好几次,但是RSS订阅工具却不是常打开。这个时候我们可以利用RSS订阅功能添加博友圈,在自己的博客上实时看到博友们更新的内容而可以及时的进行访问评论。

利用RSS订阅功能添加博友圈,实时展示博友最新文章的好处是不言而喻的,首先对于博主来说,不必频繁的打开RSS工具而可以第一时间知道博友的文章更新而进行访问评论,于博友来说,也可以说是得到了到别人博客上的展示,极大了增加了博客的用户体验、极大了增强博友之间的互动、极大增强了博友们博客的曝光度。

我的“博友圈”的入选标准

博友圈不是友情链接,我的博友圈是都是我常访问的一些博客,目前收集了近一百五十个博客。能和老张博客互评达到四五次的,博客原创文章能及时更新的我都会收集到我的博友圈。这样,你的最新文章也就可以展示到我的博客的博友圈里。

如何添加博友圈

搭建rss订阅服务-FreshRSS

关于RSS订阅工具,老张博客在以前折腾过很多,RSS订阅工具的文章也写了有十来篇,其实《RSS订阅工具miniflux、tiny tiny rss、freshrss使用体会》对常用的几个RSS订阅工具进行了全面的比较,有兴趣的可以看看。FreshRSS的项目地址是https://github.com/FreshRSS/FreshRSS/我按照官方的方法Doocker部署一直没有成功,用宝塔的Docker面板部署也没有成功,后来按小宋的《搭建一个自己的rss订阅服务-FreshRSS》方法得要成功,不知什么原因。

docker run -d --restart unless-stopped --log-opt max-size=10m \
-p 8880:80 \
-e TZ=Europe/Paris \
-e 'CRON_MIN=1,31' \
-v /www/dockerdata/freshrss/data:/var/www/FreshRSS/data \
-v /www/dockerdata/freshrss/extensions:/var/www/FreshRSS/extensions \
--name freshrss \
freshrss/freshrss

直接SSH到服务器,运行以上代码,常访问我的博客或是常折腾Docker的小伙伴都可以看懂上面的代码意思,这里就不再多表了。

完成后打开你的IP+端口,就可以安装FreshRss了,成功之后,一定要执行以下两步

1.安装完成后进入设置-账户-API 管理,填写api密码提交。

2.进入设置-认证,勾选允许 API 访问 (用于手机应用),提交。

实现博友圈实时展示最新文章

这里我参考了小段的《跟风利用FreshRSS实现朋友圈》文章,但是遇到了几个坑,给大家提醒下。

3.在自己站点根目录下创建一个php文件,命名为rss.php,将以下代码复制进去。此文件用于放FreshRSS api调用函数,例如:rss.php。访问https://你的博客域名/rss.php,显示数据已保存到JSON文件中。

<?php
/**
 * 获取最新订阅文章并生成JSON文件
 */
function getAllSubscribedArticlesAndSaveToJson($user, $password)
{
    $apiUrl = 'https://你部署FreshRSS的域名/api/greader.php';
    $loginUrl = $apiUrl . '/accounts/ClientLogin?Email=' . urlencode($user) . '&Passwd=' . urlencode($password);
    $loginResponse = curlRequest($loginUrl);
    if (strpos($loginResponse, 'Auth=') !== false) {
        $authToken = substr($loginResponse, strpos($loginResponse, 'Auth=') + 5);
        $articlesUrl = $apiUrl . '/reader/api/0/stream/contents/reading-list?&n=1000';
        $articlesResponse = curlRequest($articlesUrl, $authToken);
        $articles = json_decode($articlesResponse, true);
        if (isset($articles['items'])) {
            usort($articles['items'], function ($a, $b) {
                return $b['published'] - $a['published'];
            });
            $subscriptionsUrl = $apiUrl . '/reader/api/0/subscription/list?output=json';
            $subscriptionsResponse = curlRequest($subscriptionsUrl, $authToken);
            $subscriptions = json_decode($subscriptionsResponse, true);
            if (isset($subscriptions['subscriptions'])) {
                $subscriptionMap = array();
                foreach ($subscriptions['subscriptions'] as $subscription) {
                    $subscriptionMap[$subscription['id']] = $subscription;
                }
                $formattedArticles = array();
                foreach ($articles['items'] as $article) {
                    $desc_length = mb_strlen(strip_tags(html_entity_decode($article['summary']['content'], ENT_QUOTES, 'UTF-8')), 'UTF-8');
                    if ($desc_length > 20) {
                        $short_desc = mb_substr(strip_tags(html_entity_decode($article['summary']['content'], ENT_QUOTES, 'UTF-8')), 0, 99, 'UTF-8') . '...';
                    } else {
                        $short_desc = strip_tags(html_entity_decode($article['summary']['content'], ENT_QUOTES, 'UTF-8'));
                    }
                    
                    $formattedArticle = array(
                        'site_name' => $article['origin']['title'],
                        'title' => $article['title'],
                        'link' => $article['alternate'][0]['href'],
                        'time' => date('Y-m-d H:i', $article['published']),
                        'description' => $short_desc,
                    );

                    $subscriptionId = $article['origin']['streamId'];
                    if (isset($subscriptionMap[$subscriptionId])) {
                        $subscription = $subscriptionMap[$subscriptionId];
                        $iconUrl = $subscription['iconUrl'];
                        $filename = 'https://你部署FreshRSS的域名'.substr($iconUrl, strrpos($iconUrl, '/') + 1);
                        $formattedArticle['icon'] = $filename;
                    }

                    $formattedArticles[] = $formattedArticle;
                }

                saveToJsonFile($formattedArticles);
                return $formattedArticles;
            } else {
                echo 'Error retrieving articles.';
            }
        } else {
            echo 'Error retrieving articles.';
        }
    } else {
        echo 'Login failed.';
    }
    return null;
}
function curlRequest($url, $authToken = null)
{
    $ch = curl_init($url);
    if ($authToken) {
        $headers = array(
            'Authorization: GoogleLogin auth=' . $authToken,
        );
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    }
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    curl_close($ch);
    return $response;
}
/**
 * 将数据保存到JSON文件中
 */
function saveToJsonFile($data)
{
    $json = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
    file_put_contents('output.json', $json);
    echo '数据已保存到JSON文件中';
}

// 调用函数并提供用户名和密码
getAllSubscribedArticlesAndSaveToJson('这里是FreshRSS的用户名', '这里是第3步设置的api密码');

注意修改代码的几处设置。设置好处,直接用浏览器访问https://你的博客域名/rss.php,就会显示“数据已保存到JSON文件中”,表示成功了。

注意一个小坑:两处"你部署FreshRSS的域名",一定要是你的FreshRss设置-账户-API管理里的地址,如果是IP地址,可以修改Freshrss的配置文件改成域名。这个时候有部分地址是有“/p/”这个目录年,一定要看清了。

这个时候注意一个大坑,最开始我的PHP版本是8.0的,访问https://你的博客域名/rss.php死活报错,折腾好长时间也不成功,最后换服务器PHP版本是7.4成功了,不知道是什么原因造成的,但是结果我们却知道了,就是PHP8.0不成功。解决方法是把RSS.php文件放在其他网站上,在第4步代码中“./output.json”修改为“https://放rss.php文件的网站/output.json”

4.主题的funtions.php里添加以下代码:

// 在 functions.php 中添加 shortcode 函数
function display_articles_shortcode() {
    // 获取JSON数据
    $jsonData = file_get_contents('./output.json');
    // 将JSON数据解析为PHP数组
    $articles = json_decode($jsonData, true);
    // 对文章按时间排序(最新的排在前面)
    usort($articles, function ($a, $b) {
        return strtotime($b['time']) - strtotime($a['time']);
    });
    // 设置每页显示的文章数量
    $itemsPerPage = 30;

    // 生成文章列表
    ob_start(); // 开始缓存输出
    foreach (array_slice($articles, 0, $itemsPerPage) as $article) {
    ?>
        <div class="article">
            <h3>
                <img src="<?php echo htmlspecialchars($article['icon']); ?>" alt="Icon" class="icon">
                <a href="<?php echo htmlspecialchars($article['link']); ?>" target="_blank"><?php echo htmlspecialchars($article['title']); ?></a>
            </h3>
            <p>作者:<?php echo htmlspecialchars($article['site_name']); ?></p>
            <p><?php echo htmlspecialchars($article['description']); ?></p>
            <time><?php echo htmlspecialchars($article['time']); ?></time>
        </div>
    <?php
    }
    return ob_get_clean(); // 返回缓存的输出并清除缓存
}

// 注册简码
add_shortcode('display_articles', 'display_articles_shortcode');

5.自定义css样式

/* Article container */
.article {
    border: 1px solid #ccc;
    border-radius: 5px;
    padding: 15px;
    margin-bottom: 20px;
}

/* Article title */
.article h3 {
    margin-top: 0;
}

/* Article icon */
.icon {
    width: 50px;
    height: 50px;
    margin-right: 10px;
    border-radius: 50%;
}

/* Article metadata */
.article p, .article time {
    margin: 5px 0;
}

/* Article time */
.article time {
    font-style: italic;
}

/* Hover effect on article */
.article:hover {
    box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
    transition: box-shadow 0.3s ease;
}
/* Article icon */
.icon {
    width: 1.5em; /* 使用 em 单位可以根据标题字体大小调整图标大小 */
    height: auto; /* 自动调整高度以保持宽高比 */
    margin-right: 10px;
    vertical-align: middle; /* 垂直居中对齐 */
    border-radius: 50%;
}

以上代码可以直接写在主题的CSS文章里,也可以在主题的自定义样式里添加。

6.新建页面,在代码文本模式下输入[display_artices]

7.在宝塔面板下创建一个计划合作,每1小时或2小时访问一次https://你的博客域名/rss.php,这样达成生成最新的output.json文件以便博友圈调取展示。

至此,已全部完成,样式可以自行修改CSS文件!

 

 

 

 

❌