GTX690战术核显卡导弹 - 2025年11月
type: channel
link: https://www.nekopara.uk/2025/11/
description: GTX690战术核显卡导弹的猫窝
items: 用 Python 破解网易云 iframe 反爬，全自动构建本地音乐库
items: 自制二次元主题显卡：猫娘乐园巧克力 RTX 2080 Ti
items: 思考•锐评：手机——新时代的电子牢笼
items: 个性化Typecho VisitorLoggerPro插件，二次元浓度拉满！
items: 个人博客低成本CC防护：抵御85%+常见CC攻击

用 Python 破解网易云 iframe 反爬，全自动构建本地音乐库
type: item
date: 2025-11-23T17:21:00+08:00
description: Python实现网易云音乐自动抓取整理事情的缘起很简单，我的jellyfin音乐库听腻的差不多了，想抓点新歌。虽然说之前已经抓取过1000多首歌曲，但是很多是我因为强迫症，为了媒体库的完整性，把整个专辑都抓下来了，实际上常听的就是两三百首。正因如此，我就想给我的媒体库补充点库存，于是开始折腾，有了这篇文章。实现思路上次因为没能自动化搞下载，且因为心急，所以几乎是半自动半手动收集的，费时费力，花费了差不多一个星期。而这次，我决定使用Python自动化完成，下面是工作流实现思路：当遇到喜欢的音乐后，我就保存其网易云的URL到文本文件，例如https://music.163.com/#/song?id=1499823984你可以点开看看是什么曲子（，每个曲子放一行，随听随收集。读取这个歌曲列表文件，逐行解析，获取专辑的ID，例如https://music.163.com/#/album?id=99010037，取出99010037，以及歌手KOTOKO。然后去解析专辑的页面，获取其中所有歌曲的song?id，例如1499823984，1499826814，1499823975和1499826811。调用第三方API进行歌曲解析，获取音频文件，歌词和封面。例如这次我用的就是https://jx.chksz.top/按照jellyfin要求的格式保存歌曲文件，也就是歌手/专辑/01.歌曲.flac，如：[chocola@Neko-Server KOTOKO]$ tree . └── ネコぱら vol.4 OP ⁄ ED ├── 01.SWEET×SWEET.flac ├── 01.SWEET×SWEET.lrc ├── 02.NEGAIGOTO.flac ├── 02.NEGAIGOTO.lrc ├── 03.SWEET×SWEET (Instrumental).flac ├── 03.SWEET×SWEET (Instrumental).lrc ├── 04.NEGAIGOTO (Instrumental).flac ├── 04.NEGAIGOTO (Instrumental).lrc └── cover.jpg最后还要打上艺术家，专辑，歌曲名的标签既然确定了思路和方法，接下来开始逐个攻破吧！观察网页布局打开音乐网页，开启F12大法，检查元素，迅速就定位到了目标：其实，后面发现在页面的meta标签其实也有信息：对于专辑部分，抓取列表就好了：看起来并不难，使用Python的requests模块获取html，然后解析内容就好了。尝试实现爬虫逻辑和LLM友好交流后，得出了每一部分的代码逻辑函数，例如解析歌曲页面信息的：def extract_music_info(url): # 模拟浏览器请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' } try: # 获取HTML内容 response = requests.get(url, headers=headers) response.raise_for_status() html = response.text print(html) # 提取艺术家（og:music:artist） artist_match = re.search(r'<meta property="og:music:artist" content="([^"]+)"', html) artist = artist_match.group(1) if artist_match else None # 提取专辑名称（og:music:album） album_name_match = re.search(r'<meta property="og:music:album" content="([^"]+)"', html) album_name = album_name_match.group(1) if album_name_match else None # 提取专辑ID（从music:album的URL中解析） album_url_match = re.search(r'<meta property="music:album" content="([^"]+)"', html) album_id = None if album_url_match: url_content = album_url_match.group(1) id_match = re.search(r'id=(…

自制二次元主题显卡：猫娘乐园巧克力 RTX 2080 Ti
type: item
date: 2025-11-18T22:39:00+08:00
description: 给显卡换上自己最爱的猫娘乐园巧克力主题说实话，这件事我老早就想做了——因为我的显卡是RTX 2080 Ti，正巧因为是涡轮卡，所以可以覆盖贴纸的面积很大。正巧咸鱼看到了便宜的背板——25包邮的映众RTX2080Ti背板：关键还是全新！于是，一拍即合，我拿下了背板，开始设计显卡皮肤。测量显卡尺寸背板到货后，我先用A3纸放在显卡背板下面，然后用针管笔描出背板的轮廓，并点出螺丝的孔位。然后再拆开显卡的导风罩（因为我是涡轮卡），将导风罩放在A3纸上面，固定好位置依次描边，描了三个面，描出了它的展开图。然后使用扫描仪进行扫描得出准确的设计参考轮廓图，扫描时设置的分辨率为300PPI。下面是扫描原稿：当然了，因为是用要贴贴纸的目标面按在纸上面描的，所以和贴纸的设计轮廓是完全相反的，所以要进行镜像处理，把描边的线稿翻转过来，才是正确的。寻找风格参考图因为我并没有设计过显卡皮肤贴纸，所以我决定从案例借鉴作为切入点，去找适合我的参考风格。在咸鱼高强度刷显卡个性化贴纸相关的页面，看了几十个案例后，有一个案例我觉得是可以参考和借鉴的，就是这个：为什么这么说呢，因为总体比较简单，画面不复杂，意味着我的设计的工作量会比较少。虽然我肯定是喜欢更华丽的画面，有一些别的显卡皮肤也非常的好看，我也想做出来，但是奈何技术水平和设计能力也就那样了，这种简单好看的设计对我来说更有可操作性——用简单的画面换取还不错的设计效果。解构这个设计稿，组成非常简单：角色立绘+配色色块+角色名字艺术字+作品LOGO所以，照着葫芦画瓢，我要做一个猫娘乐园巧克力主题的显卡，只需要搞到这几个要素，将其根据实际的设计尺寸组合起来，确保符合自己的审美和尺寸构图，让角色尽可能避开一些螺丝孔的位置，就可以了。开始设计我打算先从背板开始设计。背板贴纸设计万事开头难，这个设计工作一开始就犯难了——找不到特别合适的立绘图：因为猫娘乐园好看的同人图本来就很少，基本上要好看的只能解包游戏拿CG图，但是游戏的CG图始终是有限的，并没有多少。找来找去，我还是觉得用这张图比较合适：算是游戏CG里面很好看的一张图了，然后交给AI抠图，把角色扣出来：这样子，立绘就有了。本来我像在另一边把香草也放上的，但是放上后感觉构图混乱，也难以驾驭，最终还是践行了建筑大师路德维希·密斯·凡德罗的观点：“Less is more”——“少即是多”，只保留了巧克力，把香草去掉了（呜呜呜我的香草）。然而，接着往下设计，我发现这样子反而更好驾驭，因为就可以直接使用巧克力的主题色——粉色，然后使用整个粉色系装饰显卡：和参考的案例一样。调好缩放大小，只保留了角色上半身，避开螺丝孔后，得到了初步设计的方案：画面的粉色是直接从角色的衣服上提取的颜色，确保了整体的协调，有一说一，粉色配白色还挺搭配的。但是感觉画面空空的，好像少了点什么。然后继续观察参考图，发现是一些小细节元素没有没有，导致整个画面看起来很空，于是，我加上了系列名称的艺术字，再加上猫爪和星星等可爱风格元素，并且针对性的减淡调色，确保只是作为装饰，而不抢占视觉注意力。另外，我看到很多二次元风的排版都喜欢用角色立绘做成半透明减淡后叠在背景增强效果，我也试了一下，感觉这个方法还是挺好用的，这是最终的画面效果：就算是放当作背景的半透明减淡立绘，我也尽可能避免角色的脸落到螺丝孔的位置，不然看着自己喜欢的角色脸上被打个洞确实不爽。导风罩贴纸设计一开始其实我也想再弄一个立绘，但是翻遍了解包的CG图，似乎没有合适的了。正巧有一大堆Q版立绘，不如拿去试试。结果发现意外的合适，而且背板是角色立绘，正面散热器上是Q版立绘，也能形成差别和对比，效果还是不错的。再设计的时候，我特地把背板的设计稿放在对应位置的上面，确保能让整体设计协调，先设计个初版看看效果：细心的读者应该发现了，颜色分割线是延续了下来的，这就是我保证整体设计协调的手段之一。另外，粉色色块区域正好位于涡轮进风口，能削弱一下与内部黑色涡轮扇的颜色对比。后面考虑到粉色块太大可能有点单调，做了一下切分，最右边又露出来白色。最后像背板那样如法炮制，加上一点细节，导风罩的设计稿就完工了：哦，忘了说了，作为自由软件运动的拥护者，这个设计稿是使用GIMP制作的。如果你碰巧有顶部供电的涡轮卡RTX2080Ti，并且喜欢Chocola的话，我的设计稿你可以拿去直接用：RTX2080Ti_Dseign.7z解压密码是：www.nekopara.uk打印贴纸不得不说，这种小量打印订单是真的贵！问了一下群里面做广告相关行业的群友，他说最适合的材料是车贴，基本上耐受显卡六七十度的高温没什么问题。但是，问题来了，去淘宝定制车贴，居然一张A3大小的车贴要收我40块钱？！怎么不去抢？！而且找了四五个店铺，都差不多这个价……关键是，贵就算了，找了一家店铺，客服谈好后下单就没…

思考•锐评：手机——新时代的电子牢笼
type: item
date: 2025-11-16T14:05:38+08:00
description: 当手机“反客为主”：是工具，还是牢笼？文章开头先叠甲：文章仅代表个人观点，如果你有不同的思考也欢迎评论区讨论。近日听闻国内手机厂商计划进一步限制系统级 VPN 功能，不禁感慨：我们手中的智能手机，究竟是解放我们的工具，还是精心设计的牢笼？作为一个见证过开放互联网余晖和亲历过安卓手机开放时代的人，我想记录下对这一“日常必需品”的深层思考——你的手机，真的属于你吗？你的手机真的属于你吗？如果是普通不太了解手机技术细节的读者，或许看到这个标题会纳闷：我自己购买的手机，我自己使用，为什么不属于我？但是，很遗憾，对于绝大部分读者而言，你的手机就是不属于你。除非……你解锁了手机的Bootloader。Bootloader：手机的第0道枷锁首先，既然提到了Bootloader这个词，那就先解释一下这是什么东西：手机 Bootloader 是固化在 ROM 中的开机引导程序，开机后优先运行。核心功能是初始化手机硬件（如处理器、内存），验证系统完整性，随后引导操作系统启动。默认通常锁定，防止未授权修改；解锁后可刷机、安装第三方系统，但可能影响设备保修与安全性，是手机启动和系统定制的关键环节。正如介绍那样，默认Bootloader是锁定状态，也就是无法更改手机的操作系统。虽然手机厂商美名其曰提高系统安全性，防止未授权修改；但是，如果手机厂商做的手机操作系统本身就是一坨狗屎，那你也会因为这个锁定的Bootloader被套牢——无法自行更换其他的操作系统。这是正是手机厂商胆敢其在用户头上拉屎的一个重要原因，尤其是国内厂商，因为这坨屎你吃定了，除非你能解锁Bootloader，要么就换手机。而所谓的未授权修改，如果我是机主本人，希望修改呢？我的设备连修改的权利都没有了吗？对于相当一部分不支持用户解锁Bootloader的厂商而言，就是没有——例如华为。更加雪上加霜的是，近年来曾经允许用户自由解锁Bootloader进行折腾的手机厂商也在收紧——例如小米。当然了，如果是苹果用户，那就是地牢，没有任何硬件和操作系统层面的自由，基本上没办法解锁，甚至不能自己安装软件。这些Bootloader限制，完完全全就是厂商故意干的，因为原本的安卓系统，只需要在设置里面进入开发者选项打开OEM解锁选项，重启进fastboot，连接电脑后执行fastboot oem unlock就可以解锁手机的Bootloader并开始愉快的玩耍了。所谓什么未授权修改完全不成立，因为这是手机用户自己的行为，他们完全有对自己设备的处置权。而很多手机厂商，特别是国内手机厂商，把这个最基本的用户权利给剥夺了。他们打着保护用户数据和隐私，优化用户体验等名号，故意限制用户拥有设备的完整控制权，将用户圈养和绑死在自家煞费苦心搞出来的广告ROM里面使劲割韭菜，属实龌龊！题外话：有一说一，户晨风在贬低安卓吹捧苹果，说什么安卓人，苹果人，也不完全是空穴来风；因为对于普通不会折腾的用户而言，同样是绑死生态和系统，苹果手机的使用体验确实吊打了安卓几条街。但是，如果你真会折腾和优化安卓，那将爆杀苹果。ARM 生态：手机的第1道枷锁或许你会觉得，只要解锁了 Bootloader，就能像装电脑系统一样自由更换操作系统了吧？很遗憾，手机的硬件通用性一坨狗屎，这几乎是个奢望。 手机的硬件生态高度碎片化，系统专机专用——每个型号都必须刷对应的定制 ROM，稍有不慎就是黑砖。你根本没法像在 PC 上那样，想装什么系统就装什么系统，Windows，GNU/Linux，Unix，甚至MacOS，想换就换。 所以，就算你费尽千辛万苦解锁了 Bootloader，如果没有开发者为你这台设备专门适配系统包，你依然只能被迫继续吃厂商预制的狗屎 ROM。当然，既然都解锁了，root 是必须的——把那些藏在系统深处的云控组件、后台监控、性能限制统统扬了，体验才能好一大截。那么，为什么手机就不能像电脑一样通用？ 问题不在 ARM 架构本身，而在围绕 ARM 构建的整个封闭生态。 ARM 作为一种指令集架构，本质上只是定义了 CPU 如何执行指令，它本身并不阻止系统通用。真正的问题在于：手机厂商使用高度定制化的 SoC（系统级芯片），集成自家或供应商的基带、GPU、ISP、电源管理模块等；这些关键组件的驱动程序几乎全部闭源，且只提供给特定 Android 版本；没有统一的固件标准（比如 PC 上的 UEFI/ACPI），导致操作系统无法跨设备识别和调用硬件；厂商有意为之：一个机型一个 ROM，既能控制用户体验，又能制造“升级换代”的刚需。于是，明明是同一套 Android 底层，每家厂商、每款机型都要单独维护一套系统镜像，用户则被牢牢绑死在厂商的更新节奏和功能取舍上。这不是技术限制，这是人为制造的割裂。反观 x86 PC 生态，尽管也有驱动兼…

个性化Typecho VisitorLoggerPro插件，二次元浓度拉满！
type: item
date: 2025-11-04T20:08:00+08:00
description: 二次开发萌化VisitorLoggerPro插件其实之前我一直在用VisitorLoggerPro这个插件，但是由于之前的版本不够完善，也没想着进一步提升改造。前几天偶然翻了翻这个项目的GitHub仓库，发现基本上更新完善了，上一次更改已经是三个月之前，遂下了最新版回来尝试一下，发现功能非常满意。但是，美中不足的是，插件从jsdelivr.net下载相关的静态文件容易卡半天加载不出来。虽然插件写有智能回退使用网站的服务器进行加载，但是我发现它缺失了文件且返回路径不对，导致如果jsdelivr.net无法访问，页面会加载异常。于是，就萌生了修复这个插件的问题并且改造进行个性化的想法。打开了后台页面观摩了一下，并用浏览器的开发者工具随手调了一下CSS样式，最终明确了个性化的路径：设置一个全局背景图看板卡片进行半透明化于是说干就干，我先Fork了原项目，想了想要不就取名VisitorLoggerPro-Enhanced吧！然后开始了我的折腾和修改之旅。Github项目地址：VisitorLoggerPro-Enhanced可以去直接下载使用。修复静态文件回退到本地失败这肯定是最先需要解决的问题。如果不解决这个问题，该插件在我这里就处于不可用状态。补回缺失的本地文件这一步对于有网站搭建经验的人很简单，F12打开浏览器开发者工具，然后刷新页面观察网页都发送了那些外链请求，一下子就抓出来了：本地缺失的js：https://cdn.jsdelivr.net/npm/flatpickr本地缺失的css：https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css其中，flatpickr抓取回来是没有后缀的，得加上个.js后缀变成flatpickr.js。然后对号入座，flatpickr.js放到js/目录，新建一个css/目录放置flatpickr.min.css。补回文件后的插件目录文件树应该是这样的：tree . ├── action │ └── visitor-stats.php ├── Action.php ├── adapter.php ├── css │ └── flatpickr.min.css ├── getTrendData.php ├── getVisitStatistic.php ├── ip2region │ └── src │ ├── ip2region.xdb │ └── XdbSearcher.php ├── ipdata │ └── src │ ├── ipdbv6.func.php │ ├── IpLocation.php │ ├── ipv6wry-country.db │ ├── ipv6wrys.db │ ├── qqwry.dat │ ├── qqwrye.dat │ └── zxipv6wry.db ├── js │ ├── echarts.min.js │ ├── flatpickr.js │ └── README.md ├── panel.php ├── Plugin.php ├── README.md ├── trend.php └── visitor-stats.php 8 directories, 23 files修复完善静态文件获取逻辑原本插件本地静态文件的相对链接写法是：localScript.src = './js/echarts.min.js';这会导致获取文件时发生404错误，因为在插件页面上下文中，该相对路径会被解析为https://www.nekopara.uk/admin/js/echarts.min.js，那包404的。正确的URL连接位置应该是https://www.nekopara.uk/usr/plugins/VisitorLoggerPro/js/echarts.min.js，所以，这个相对链接应该改成../usr/plugins/VisitorLoggerPro/js/echarts.min.js。而且，原插件仅实现了echarts.min.js的本地回退逻辑，未处理另外两个静态文件（flatpickr.js和flatpickr.min.css），因此即使修复了路径，还是会卡加载。还有一个致命的缺陷是，原本的回退本地源的逻辑是等待失败，但是一等就是大几十秒，非常影响体验。于是我就设置了超时时间，一旦第三方的静态文件加载时间超过2秒，立即回退到本地，避免长时间等待。以下是完善后的逻辑代码：对于panel.php内嵌js部分的修改，在原文件64行的地方开始修改： 对于visitor-stats.php内嵌js部分的修改，在原文件90行的地方开始修改： 对于trend.php内嵌js部分的修改，在原文件12…

个人博客低成本CC防护：抵御85%+常见CC攻击
type: item
date: 2025-11-02T16:47:03+08:00
description: 低成本CC防护：我的实战配置与效果喜报：被大规模CC了！平常的一天，突然受到了来自衣食父母华为云的服务器告警：虚拟机网络连接数突破15400个，CPU占用超过 85% 。就知道肯定是被CC了。果然网站被打是催更技术类博主最好的方式（雾不过我之前是设置过缓存的，有点好奇怎么绕过缓存，事后我抓取了对应时间的Nginx日志access.log：43.152.29.37 - - [30/Oct/2025:23:27:16 +0800] "GET /3bb6bfea9/90a2c9c9fc?limit=ef616a8b1b145df&token=176fe0f01f&utm_source=a5d4f247077b HTTP/1.0" 404 29335 "http://www.nekopara.uk/3bb6bfea9/90a2c9c9fc?limit=ef616a8b1b145df&token=176fe0f01f&utm_source=a5d4f247077b" "Mozilla/5.0 (Windows NT 11.0; Win64; x64; rv:135.0) Gecko/20100101 Firefox/135.0" "91.209.77.93, 43.152.29.37" 43.152.24.20 - - [30/Oct/2025:23:27:16 +0800] "GET /profile/config/delete?search=9844b7e151&version=504397e6490c&utm_campaign=bd5783ef290&page=4b9e8cc670d HTTP/1.0" 404 29335 "http://www.nekopara.uk/profile/config/delete?search=9844b7e151&version=504397e6490c&utm_campaign=bd5783ef290&page=4b9e8cc670d" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36" "138.2.109.39, 43.152.24.20" 43.152.143.43 - - [30/Oct/2025:23:27:16 +0800] "GET /health/admin?utm_medium=eb37025 HTTP/1.0" 404 29335 "http://www.nekopara.uk/health/admin?utm_medium=eb37025" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36" "163.61.245.58, 43.152.143.43" 43.174.55.12 - - [30/Oct/2025:23:27:16 +0800] "GET /5de3c/0727afb/info?type=f06d22885b8 HTTP/1.0" 404 29335 "http://www.nekopara.uk/5de3c/0727afb/info?type=f06d22885b8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.2 Safari/605.1.15" "103.184.54.67, 43.174.55.12" 43.152.14.36 - - [30/Oct/2025:23:27:16 +0800] "GET /edit/a97b/cba81414/content.htm?offset=09cd68b44dd60&key=030f41284 HTTP/1.0" 404 29335 "http://www.nekopara.uk/edit/a97b/cba81414/content.htm?offset=09cd68b44dd60&key=030f41284" "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_7_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36" "49.145.113.40, 43.152.14.36" 43.152.…