Everything you care about in one place

Follow feeds: blogs, news, RSS and more. An effortless way to read and digest content of your choice.

Get Feeder

mabbs.github.io

Mayx的博客

Get the latest updates from Mayx的博客 directly as they happen.

Follow now 29 followers

Latest posts

Last updated 18 days ago

关于ZIP Quine与自产生程序的探索

18 days ago

描述自己的代码……是一种什么样的感觉? 起因 前段时间我在折腾博客部署的时候,回顾起了好久以前写的部署脚本。对于全站打包的这个步骤,本来我打算利用这个压缩包结合Service Worker做离线浏览,但因为没有合适的方案所以放弃了。而现在对于这个压缩包,我又有了一个特别的想法。事实上在这个下载全站的压缩包中,里面的内容和实际的网站并不完全相同,因为在这个压缩包里缺少了压缩包本身。所以把这个压缩包解压之后直接当作网站打开,会发现下载压缩包的链接是无效的,除非在解压之后把压缩包移动到网站里才行…… 于是我就在想有没有一种可能可以让压缩包解压之后里面又包含了这个压缩包本身?似乎是个不太可能的事情,但我以前听过类似的东西,也许并非不可能?所以这次就来探索一下吧。 自包含压缩包的探索 在很久之前,我见到过一个很知名的自包含压缩包(又称为ZIP Quine),叫做droste.zip,是由Erling Ellingsen在2005年制作出来的。当时我只知道它很神奇,原理什么的并不清楚,另外在网上也基本上找不到类似的压缩包。现在再回看时发现介绍里包含了一些相关的链接,甚至还有一篇能自己制作类似压缩包的论文,所以接下来就可以看一下这些链接来理解这种压缩包是如何制作的了。 关于原理方面,先看Will Greenberg制作的一个示例,在这里面有一个谜题,使用“print M”(原样输出接下来的M行输入内容)和“repeat...

在Tilde社区的游玩体验

about 1 month ago

Tilde社区,如“家”一般的感受😝 起因 在上一篇文章里,我说到给我的博客增加了不少网站镜像,也在这个过程中发现了不少Git平台实例。顺便一提,我找到了个不错的仓库,可以全网搜索各种Git平台实例。在这探索的过程中,我发现了一种神奇的社区——Tilde社区,体验之后感觉非常有意思,所以来分享一下。 什么是Tilde社区 Tilde社区之所以叫Tilde,是因为在类Unix系统(如Linux、BSD)中,波浪号(Tilde)“~”代表家目录。因此,Tilde社区就是基于类Unix系统环境,并且可以公共登录的服务器,又被称为pubnixes。一般这些社区的管理员会预装很多软件、开发环境以及一些公共服务,比如聊天室、邮件、BBS论坛等,这些构成了社区互动的基础。不过并不是所有类似这样提供Shell访问的公共服务器都可以被称作社区,比如知名的免费网站托管商Serv00虽然也提供可以登录的FreeBSD服务器,并且在服务器上安装了非常多的工具和环境,从表面来看和Tilde社区提供的服务几乎一模一样,但是它少了一个很重要的东西,那就是社区,它的权限管理非常严格,不允许服务器的用户互相串门,也没有互相交流的平台,而且它的本质是商业服务(尽管是免费的),所以它不算Tilde社区。 至于Tilde社区的加入方式,一般可以通过填写在线申请表、私信或发送邮件申请,有些比较有特色的社区会用SSH交互等方式。审核通过后,管理员就会在服务器上为你创建账户,即可获得属于自己的“家”,一般的Tilde社区在这个过程中不需要付一分钱,因为他们通常都是反商业化的,如果遇到了需要付钱才能激活账户的公共服务器,那就不是Tilde社区,即使它历史悠久,可能是别的什么东西😆。 那么在哪里可以找到它们呢?有一个不错的网站,叫做tildeverse,这不仅是一个Tilde社区的集合,它自身也提供了很多服务。不过总的来说各个社区之间也是互相独立的,tildeverse只是提供了一个平台让大家可以互相沟通,所以这个网站叫做“loose association”,就相当于博客中的博客圈一样。 于是我在tildeverse的成员列表中随便挑选了几个Tilde社区提交了注册申请,过了一段时间申请通过了,那么接下来就来说说我在Tilde社区的体验吧。 Tilde社区的体验 虽然我加入了不少Tilde社区,不过各个社区提供的服务都差不多,首先最重要的就是个人主页,一般Tilde社区基本上都会提供一个像~/public_html这样的目录存放个人主页的网页文件,并且可以通过类似example.com/~username这样的地址访问,还有些社区会允许通过二级域名的方式访问,类似username.example.com这样,像我博客好多地方写的都是从根路径开始,就很适合用二级域名的方式。这些主页大多也支持使用PHP之类的网页,不过不像虚拟主机那样有个面板可以轻松安装扩展和切换版本,有些可能要自己写配置文件,有些可能要管理员才可以操作,毕竟是社区,所以不太注重用户体验。 当然除了HTTP协议的个人主页,通常他们还可以创建一些Gemini协议和Gopher协议的个人主页,这些协议不支持普通浏览器访问,需要用ELinks之类的文本浏览器才能打开,这个浏览器甚至可以在终端里用鼠标操作😆。不过因为协议非常简单,所以内容也就只能整些文本内容了。...

用Service Worker实现一个反向代理

about 2 months ago

现代浏览器真是强大,可以替代一些服务器的功能了! 起因 前段时间在和群友聊天的时候,提到了我博客的分发方案,这么多年过去之后我已经在很多平台上分发了我的博客,不过这只是多重冗余,并不算去中心化(虽然我也有向IPFS同步,不过IPFS还得pin,也不太可靠)……所以这么看来,我的博客似乎还不算极其可靠😂?但其实不完全是这样。因为除了向不同平台的分发,我的博客还有一个全文搜索的功能。更重要的是,之前做文章推荐功能时,会把整个博客所有文章的文字存到访客浏览器的localStorage中。这么说来,只要有人访问了我博客的文章,他们的浏览器中就会保存一份我博客文章的完整文本副本。从这个角度看,可靠性应该算是相当高了吧? 不过我之前的分发方案里还记录了一点,在GitHub Pages以外的平台我还打包了一份全站生成后的代码,之所以要全站打包,也是希望我的博客能尽可能的分发,考虑到几乎所有的Linux发行版一定有tar,而不一定有zip,所以我最终打包成了tgz格式。如果能让访客下载这个全站打包好的副本,相比于浏览器里只存储了文章文字的全文数据,这应该是一个更好的备份方式吧?毕竟我的博客本身也是我的作品……所以这个压缩包到底有什么地方可以用到呢? 这时候我想起来,现代的浏览器功能已经非常强大了,甚至在浏览器里直接运行一个Web服务器也完全没问题。如果能让访客在浏览器里下载那个压缩包并运行一个Web服务器,那就相当于在他们本地设备上部署了一份我的博客副本。这样一来,除了我自己搭建的网站之外,这些访客的本地也运行着一个我的博客实例😆(当然,这份副本只有访客自己能看到)。 研究实现方案 想要在浏览器上运行Web服务器其实很简单,那就是使用Service Worker,它可以完全离线在浏览器上工作。格式的话和以前写过的Cloudflare Worker非常相似,毕竟Cloudflare Worker就是模仿Service Worker的方式运行啊😂,所以我要是想写Service...

使用Cloudflare制作自动更新的网站预览图

about 2 months ago

Cloudflare的功能真是越来越多了,而且还免费! 起因 前段时间我在登录Cloudflare的时候发现Workers上多了一个“浏览器呈现”的功能(可能已经出来一段时间了,不过之前一直没关注),看介绍,这个功能可以让Worker操作运行在Cloudflare服务器上的浏览器。这功能挺有意思,而且免费用户也能用,不如想个办法好好利用一下。 一般来说这个功能可以干什么呢?既然是在AI盛行的时候出现……估计是为了搞Agent之类的吧,不过看文档对免费用户来说一天也只有10分钟的使用时间,估计也没什么应用价值……那除了这个之外还能做些什么?我发现有好多博客主题喜欢给自己的README里添加一个能查看主题在多种设备上显示效果的预览图,以展示主题的自适应能力。那么既然现在能在Cloudflare上操作浏览器,那么我也可以做一个类似的,而且这个预览图还可以自动更新。 制作自适应的网站预览 既然打算做预览图,那么我应该用什么方案?按照不同尺寸的视口截几张图再拼起来吗?这显然就太复杂了,况且在Cloudflare Workers中处理图片也相当困难。这时我想起来曾经见到过一个工具,只要输入网址,就可以在一个页面中同时展示网站在四种不同设备(手机、平板、笔记本电脑、台式机)上的显示效果,叫做“多合一网页缩略图”,实现原理是使用iframe和CSS缩放模拟多种设备视口。搜了一下发现这套代码被不少网站使用,所以就随便找了其中一个工具站把代码和素材扒了下来,稍微改了一下,然后放到GitHub上,方便等一会用Cloudflare访问这个部署在GitHub Pages上的页面来进行截图。 使用Cloudflare浏览器呈现进行截图 接下来截图就简单了,不过Cloudflare有两种截图的办法,用Workers的话可以直接用Puppeteer之类的库连接浏览器,但用这个库需要安装,要本地搭环境……我毕竟不是专门搞JS开发的,一点也不想在本地安装Node.js环境,所以就不想用这种方式。另外一种是通过调用Cloudflare的接口,这种非常简单,只需要填几个参数请求就行,唯一的问题就是要填一个Token……我一直觉得Worker调用Cloudflare自己的服务不应该需要Token之类的东西,毕竟内部就能验证了,没必要自己搞,但是我看了半天文档貌似无论如何只要想调接口就必须搞个Token……那没办法就搞吧,其实也很简单,只需要在“账户API令牌”里添加一个有浏览器呈现编辑权限的令牌就行。 至于展示……这个接口调用比较耗时,而且一天只能调用10分钟,截图的话估计也就够30次左右,还有每分钟3次的限制😓,所以实时更新肯定是不行了,图片肯定得缓存,一天更新一次感觉应该就够了。另外次数这么少的话写成接口给大伙用貌似也没啥意义,所以我就把地址写死了,于是以下就是最终实现的代码: export...

一次服务器被入侵的经历

2 months ago

即使是被入侵了也可以学到一些知识! 起因 前几天,我闲来无事登录了一下一台之前一直闲置的服务器,登录上去后,乍一看似乎没有任何问题,然后习惯性的执行了一下top命令看了一眼。从进程列表来看,似乎没有什么明显异常的地方,但是服务器的load值很高,cpu的us值也很高。 以前我倒也遇到过几次load值很高的情况,一般是硬盘或NFS等网络存储挂了但是依然有程序在读写挂载的目录会有这种问题,但那种情况一般高的是cpu的wa值,而不是us值,us值是软件正常用掉的……但是进程列表里根本没有占CPU的程序啊……看来服务器是被入侵了😰。 检查服务器 虽然说是要查,但其实我根本不知道进程隐藏的原理😂,虽然听说过有恶意软件会这样做,现在遇到了一时半会又想不出来怎么找。还好这是台闲置的服务器,上面什么东西都没有跑,所以正常来说除了ssh连接之外,这个服务器不该有任何其他的连接,于是我执行了一下netstat -tanp看了一眼,发现有个奇怪的进程使用一个境外的IP和我的服务器建立了连接,用ps -ef查了一下这个 PID,结果进程名显示为[kcached]……这下给我整不会了。 后来查了些资料知道了可以用lsof -p查看进程读取的文件,才看到木马的本体:/usr/bin/gs-dbus。不过如果我只是杀掉这个进程然后删除文件,那攻击者肯定会重新回来,所以我得排除一下是不是还有别的木马文件。 一般来说攻击者权限维持的方式大多是crontab,不过我看了一下配置文件里似乎没有,root下的authorized_keys倒是有个陌生的公钥于是顺手删掉了……也没有其他文件夹下有gs-dbus文件……难道没有别的木马文件了吗?后来我仔细找了一下,发现有个很可疑的文件/usr/local/lib/libprocesshider.so,一看就不是什么好东西🤣,后来在GitHub上搜了一下,是libprocesshider这个项目,就是它让我在top中什么也没找到的,看文档中应用是添加一个/etc/ld.so.preload文件,所以解除隐藏效果我也只需要删掉这个文件就好啦。...

使用XSLT为博客XML文件编写主题一致的样式

3 months ago

虽然XML是机器读的内容……不过加上和主题一致的XSLT样式也算是一种细节吧~ 起因 在上一篇文章中,我提到在提高订阅源兼容性的时候给博客的订阅文件增加了一个XSLT样式。当时使用的样式是从About Feeds下的一个Issue中找的,里面有个基于Pretty Feed修改成能同时支持RSS和Atom格式的样式。虽然那个样式倒也说不上难看,但总觉得与我的博客整体风格有些割裂,所以这次打算制作一个和我博客主题完全一致的XSLT样式。 制作订阅文件的XSLT样式 虽然想搞这么一个样式,但是我用的Jekyll引擎不能在引用的布局外添加额外内容……如果我要自己写,要么把我的默认布局拆成头和尾两部分然后用include引用,要么把默认布局的代码直接复制一份到XSLT样式中。这两个方案我都不太满意,第一种我以后在修改默认布局时需要同时从两个文件检查上下文,很不方便;而第二种方案违反了DRY原则,也会增加以后修改的难度。所以要怎么办呢? 后来我想了想,如果不能通过直接引用默认布局在外面增加XSLT的代码,那干脆让默认布局引用一个XSLT布局吧!这样我就能在不复制默认布局也不进行过多修改的情况下在外面套XSLT的代码了。于是我就在最外面写了个符合XSLT格式的XML布局,让默认布局引用它。然后再写一个布局引用默认布局,让最外面的布局根据这个布局的名字来判断是否需要使用XSLT的布局,具体的实现可以看我的layout目录。另外有一些地方需要注意一下,作为XML,内容中不能包含未闭合的标签,所有自闭合标签结尾必须添加斜杠,属性必须有值,以及所有标签和属性大小写要一致……还好我平时修改布局文件以及编写内容的时候基本上都遵循了这些规则,所以没什么太多需要改动的地方。 当时修改时,是模仿之前的那个样式进行的,原来那个样式在html元素上加了XML命名空间,但是xsl:output配置的输出却是按照HTML的方式输出,结果导致内容中用于换行的br标签在实际转换中全部变成了两个标签……我猜应该是转换???看到XML命名空间后,先按照XHTML的规则把br解析成了一开一闭的一对标签,然后又根据HTML的转换规则把这对标签当作两个单独的标签输出了吧……但奇怪的是,只有br标签出现了这个问题,像hr等其他自闭合标签则没有……既然如此,只要把XML命名空间删掉就OK了。 在改完之后虽然整体看上去和其他页面似乎已经很相似了,但总感觉还有些样式不太对劲……我猜应该是和文档类型声明有关系,我平时写的是HTML5,而XSLT默认转出来是HTML4.0……但是我不太清楚怎么解决这个问题,于是问了问AI,AI说在xsl:output中加上doctype-system="about:legacy-compat"就行。最终改完试了下确实有效😂,样式上也没有出现奇怪的偏移了。 最后把写好的布局应用到/feed.xslt.xml中就可以了,之所以是这个路径是因为我用的jekyll-feed只支持这个位置,至于我自己搞的RSS格式的订阅只需要在开头用xml-stylesheet指令声明一下就行了。 给XSLT样式自己的样式...

近期对博客的修改与优化记录

4 months ago

在修改博客的时候也能学到不少新知识啊~ 起因 在两个月前,我写了一篇针对博客搜索功能优化的记录。在写完之后没几天,有位名叫@xymoryn的大佬看到了我的博客并且进行了吐槽,内容很值得参考。不过我自从用minimal主题以来从来没有改过样式的原因主要还是写不来CSS😂,并不是真的不想改,但其中提到可以让AI优化,我觉得也很有道理,现在AI这么发达实在不会用AI改就好啦~ 对博客样式的优化 虽然大佬给出了参考的CSS,但我不太喜欢那种风格,尤其还把之前的左右布局改成了上下布局。我当年之所以选择minimal主题就是因为它是左右布局的,如果选择上下布局的话我还不如用hacker这个主题,另外那个参考的CSS可能是因为AI写的,有很多没有考虑到的地方,比如主题自带的CSS鼠标放到链接上字体会变粗,然后可能会变宽,导致影响整体的布局,而参考的CSS选择直接让所有的链接放到上面都变细,即使原来是粗字体也变细,比如标题之类的,这就更难受了。像这种情况要怎么改呢?我还是希望能用minimal主题的CSS,但让链接变粗的体验确实不太好,所以我选择问问AI。 最后AI给出的答复是使用font-weight: inherit;,看起来确实解决了问题,不过如果鼠标移到链接上没有任何反应也不太好,所以就学GitHub在鼠标移到链接时加上了下划线。 除此之外就是字号、行高和布局,字号和行高我也不希望改的太激进,所以就稍微加了一点点,看起来没那么密就好。至于布局,之前minimal主题的宽度是写死的,左边是270px,右边是500px,对于我的MacBook看起来也还好,因为MacBook的屏幕比较小,屏幕的利用率还是比较高的。不过对于更大的屏幕总共860px大小的区域确实不太够,尤其是4K屏幕可能只有中间一点点的区域有内容,会看着很难受,所以我想了一下还是改成百分比布局比较好,这样无论屏幕有多宽也能利用得到。 还有一点就是分段,虽然我也知道在Markdown中两个换行是分段,但是感觉在文本中两个换行隔得太远了,所以一开始写文章的时候就选择只换行。不过在中文里确实不分段也不太好看,但是又不想去动之前写的文章,那该怎么办呢?思来想去干脆把换行全部替换成分段好啦,在Jekyll中可以用replace过滤器把所有的“<br>”替换成“</p><p>”,因为Markdown解析本来就会有一个段落,所以直接闭合加开始就能分割成多个段落了。那么加了分段是为了什么?其实主要是为了首行缩进,有首行缩进对阅读还是有挺大帮助的,至于怎么做也非常简单,直接给p标签设置text-indent: 2em;就可以了。 最后就是评论授权的问题,我用的Gitalk也有人问了这个问题,我仔细看了一下GitHub官方文档中OAuth可以授权的作用域发现确实是没办法限制只写Issues😥,至于其他的评论系统对后端的依赖又太多了,尤其是Giscus,居然是直接用iframe引用Giscus网站中的页面😅,如果Giscus哪天挂了,那评论系统不也挂了(虽然GitHub也不可靠……),至于自托管就更不可能了,我能让服务器持续运营可比不上大厂😆。所以最后我选择给Gitalk加个提示,不想登录也可以跳转到GitHub上进行评论,至于怎么加?还是让AI来吧,最后AI给我写了这么一串CSS: .gt-btn-login::after...

Mac Studio M3 Ultra使用体验

4 months ago

使用最强的Macintosh是一种什么样的感受? 起因 在两个月前苹果公司出了一款可以选配超大统一内存(512GiB)的Mac Studio,那时候我还想着如果市场反应好就整台玩玩,现在从网上的各种反应来看这确实是一个很不错的产品,所以这次我就整来啦!所以这次就来谈谈初上手的体验吧~ 远程体验 虽然Mac Studio理论上拿来剪电影之类的应该是更好的选择,但是显然我不会剪电影🤣,而且也没有合适的屏幕给它用,所以拿到手之后我需要让它可以远程使用。 macOS配置远程还是挺简单的,只需要在设置 -> 通用 -> 共享中打开远程管理就可以了(似乎现在Ubuntu也可以像这样轻松地配置远程桌面),配置好之后需要启用“任何人都可以请求取得控制屏幕的权限”选项,不然可能会连不上……...

关于LLM上限的探索

5 months ago

还有什么是AI不能干的? 起因 在最近对LLM的探索中,能感觉到它真的是什么都能干,尤其最近GPT-4o的画图能力实在是太强了。不过对于画图我倒不是很关心,主要是没什么想让它画的图😂。我更关心的是LLM在文本生成中的能力,毕竟这才是它的本职工作。虽然现在的AI解决问题的能力确实很强,但从它还没有大规模的把人替换掉来看,它肯定是还有一些做不到的事情,所以我想对这一点进行一些探索。 对于超长文本分析的探索 对于现在的LLM来说,虽然不少模型已经能做到很长的上下文了,但这个所谓的“长”不过是几万字而已。对于读一篇论文或者几篇文章当然没有问题,但是如果是分析上百篇文章就不太行了,比如我希望AI阅读完我所有的文章,然后对我进行评价。 我的博客现在已经有一百多篇文章了,之前做过全文搜索的功能,可以在search.json中获取所有的文章,用来让AI分析的材料是个不错的选择,不过把所有文章输入到上下文中显然是不太现实,这个JSON文件的大小有1MiB左右,但是大多数比较厉害的AI上下文只有100多k,根本读不完。而对于一些超长上下文多模型,比如阿里云有一个10M上下文的模型,效果又很差,并没有参考几条上文的内容😓。另外我还试过一些AI通过附件的方式阅读文章内容,那种好像是把文件切片之后再读?应该是类似RAG那种,从中查找和问题最相关的文本段落进行回答,但是那种方法不能解决对所有文章进行分析……除此之外我也试过一些Agent,不过它们只会写代码来分析我的文章,比如绘制文章字数随时间变化曲线、不同年份的文章数量、还有词频分析啥的,对我来说并没有什么卵用😅。 使用AI摘要来解决问题 那难道就没办法了吗?先不急,最近还发生了一件事情,不知道Cloudflare犯什么毛病了,近期用Worker请求我的D1数据库时不时会报“internal error”的错误,我还在他们论坛发了条帖子问了一下,然而并没有人搭理我😅,这时候我才意识到我似乎没有Cloudflare的替代品……出问题了也没办法😰。这个东西导致我的AI摘要、文章推荐、以及点击计数器全都用不了了,我应该避免太过依赖Cloudflare Worker啊~ 那么我该做些什么?点击计数器是没什么好办法了,不过对于AI摘要,既然摘要在我写完文章之后根本就不会变,不如隔段时间我就把摘要内容缓存到我博客本地吧,这样不仅可以极速展???摘要内容,而且不需要请求接口,就不会受到Cloudflare出问题的影响了。所以我把数据库摘要内容导了出来,放到了ai-cache.json中,如果有存在的摘要内容就不再请求接口了。 当我做完摘要缓存之后,我发现,这不就是让AI读我所有文章的最好方法嘛,让AI读AI总结的内容,然后再进行一次总结,就能尽可能的让AI完全了解我的文章然后对我评价了啊~而且这个摘要文件也只有100KiB左右,正好够AI读了。本来我想试试DeepSeek来做这件事情的,但是不知道里面命中了什么关键词,被拒绝生成了🤣,那我只好让GPT-4o来完成这件事了。...

如何使用JS通过订阅源查看文章?

5 months ago

懒得写代码?那就让AI写! 起因 前段时间,我看到有些博客给自己的友链页面做了通过订阅源查看友链最近更新文章的功能,看起来挺有意思的,有点想整一个。不过对于我的博客来说,作为静态博客想要做到这样的功能估计没那么简单吧……毕竟一般的订阅软件需要隔段时间请求一下对应博客的订阅链接,然后再把结果存到数据库才行。但是我想了想,对我来说没必要做成订阅啊,我又不需要知道对应博客是什么时候更新的,只要在有人想知道的时候去请求一下订阅链接,然后展示出来就行,感觉似乎又没有那么复杂。 既然不复杂,那这个功能就让AI来做吧,正好前段时间有个朋友买了一个月的Devin.ai订阅,据说是可以自己调试代码,还能操作浏览器,而且代码基本上写出来就能用。我对这个挺感兴趣的,所以这次的功能就让它来写吧! 让AI编写代码 既然是让AI来写,至少得把我的需求说清楚,所以首先我应该告诉它: 创建一个JavaScript函数来实现Links表格中链接的RSS/Atom源预览。 当鼠标悬停在表中的链接上时,检查该网站是否有RSS/Atom源,并将结果显示在一个浮动窗口中 在鼠标光标后的浮动窗口中显示提要中的5篇最新文章 在窗口中只包含标题和时间,不需要链接和内容 跳过所有不包含RSS/Atom源的链接,而不显示任何错误 当鼠标离开链接时,浮动预览应该消失...

最近对博客搜索功能的优化记录

6 months ago

看看其他的博客也会有新的灵感啊~ 起因 前段时间,我闲来无事在GitHub上搜和我使用相同模板minimal的博客。但搜索结果中有许多人用这个模板制作简历或作品集,这让我有些失望。这倒也能理解,因为这个模版并不算博客模板,没有文章列表之类的代码,这些都只能自己写。不过多找找还是能找到一些的,毕竟这个模板在GitHub Pages中算是最受欢迎,至少符合大众的审美。像我就搜到了一个叫Guanzhou Hu的博客,他对模板的样式做了不少的改动,而且改的还挺好看的,尤其是右上角的导航栏,看起来挺有意思,不过这个源代码……导航栏有点硬编码的感觉,我不是很喜欢这种实现方式…… 使用标签作为关键词进行搜索 之后我又看了看其他博客,看到了Matt Walker Blog。他没有对模板做很多改动,只是把section元素变得更宽了,但是他没有改手机版自适应的样式,导致界面基本上没法在手机上查看。不过在他的首页中,我对他把文章标签放在文章列表这个操作非常感兴趣,因为每次我都有给文章打标签,但是几乎没什么用。他的标签点进去之后会跳转到该标签下的所有文章,我其实很早就想做这个功能了,但是在不用插件的情况下Jekyll基本上做不出来这种功能,因为没有插件的情况下是不能使用Liquid标签创建文件的,我看了下他的实现,原来是提前创建好的标签页面然后进行筛选的,这个实现我也不喜欢,这样的话我每次打标签都要新建一个标签对应的页面,这种事情不让程序做我会很不爽……(其实现在的GitHub Pages构建网站都是用的Actions了,完全可以自己写一个可以使用插件的Actions来进行构建,不过我也懒得折腾了🤣) 要么还有一个选择,可以单独搞一个页面,里面有所有标签对应的文章,点击文章的标签之后使用锚链接定位到对应标签所在的位置。不过这样会导致一个页面有可能有一堆相同的文章链接,结果这个页面比归档页面的链接还多,那就感觉有点糟糕了…… 不过我想起来以前做的博客全文搜索功能,如果把标签作为关键词进行查询,那也能起到筛选出标签对应文章的作用吧?而且这样即使我没给那个文章打标签也能搜出来,其实也算不错的选择,而且自从我做出来那个全文搜索的功能之后也没用过几次,没有关键词的话也一时半会想不出来搜什么比较好。于是说做就做,直接把Matt...

在UTM中使用苹果虚拟化的各种尝试

6 months ago

用官方的方式做非官方的事! 起因 在几年前刚收到MacBook Pro的时候,我曾安装过虚拟机软件UTM。但是因为我的Mac内存很小,用虚拟机的体验很差,所以就把UTM卸载掉了。不过以前还我还装过一台黑苹果,在上面也安装了UTM。 最近正好由于某些原因我需要在macOS上安装虚拟机,既然有UTM用就继续用UTM了。当然正常情况就是按正常的方式安装系统然后正常的用,这并没有什么意思。所以我想整点有意思的事情,想试试不太正常的使用UTM😝。 在UTM中使用苹果虚拟化框架安装Windows 如果用过UTM的话应该知道,UTM有很多选项,比如底层的虚拟化框架可以用QEMU或者Virtualization.framework(VZ),而QEMU的后端可以选TCG或者是Hypervisor.framework(HVF)。它们有很多特色,像TCG的兼容性最好,可以模拟任何架构的CPU,但是性能最差,HVF使用硬件虚拟化加速,只能运行宿主机架构的程序,但是性能比较好,而VZ经过了苹果官方优化,性能最好。 那么现在我想安装Windows,又想有最好的性能,那我应该选择VZ吧?可是UTM不允许我这样选择,如果选择安装Windows就会强制使用QEMU……只有Linux或者macOS(在ARM处理器)才能使用VZ……那我应该如何绕过这个限制呢? 我想起来之前让没用的主机感染木马的文章中使用了一键DD/重装脚本把我服务器的Linux系统重装成了Windows系统,那么我能不能用相同的方式先按照正常的方式用VZ安装一个Linux系统然后使用这个脚本重装成Windows?我觉得理论上应该没问题,所以就尝试了一下。 我在这之前已经安装过了一个用了VZ的Ubuntu虚拟机,新建比较费时间所以就直接把这个虚拟机复制了一份。然后下载了重装脚本准备重装系统,但是看说明现在不能让脚本自己查找系统镜像安装了,不过没关系,前段时间我下了一份Windows 10的镜像,接下来我只需要在镜像所在目录执行“python3 -m...