Deprecated: Creation of dynamic property Typecho\Widget\Request::$feed is deprecated in /www/wwwroot/blog.iletter.top/var/Widget/Archive.php on line 246
白荼日记 - DelLevin
https://blog.iletter.top/author/1/
DelLevin
-
红米k20刷入ubuntu
https://blog.iletter.top/archives/526/
2026-06-03T01:00:00+08:00
建议刷机前将设备使用官方线刷包线刷为 安卓 10 底层。 一、前置准备1.设备已完成 Bootloader 解锁。2.电脑端配置好 adb/fastboot 环境变量。3.解压 rootfs-ubuntu-gnome-7.0-resolute.zip,获取 rootfs.img 和内核驱动镜像。二、刷机指令1. 进入 Fastboot 模式adb reboot bootloader2. 清空分区(清除旧数据冲突)fastboot erase dtbo
fastboot erase boot
fastboot erase cache
fastboot erase userdata3. 刷入底层引导fastboot flash boot u-boot.img4. 刷入系统主镜像 (压缩包内解压获取)fastboot flash userdata rootfs.img如果报错libc++abi: terminating due to uncaught exception of type std::bad_alloc: std::bad_alloc:使用转换.\img2simg rootfs.img rootfs_sparse.img在进行fastboot flash userdata rootfs_sparse.img下载地址:https://github.com/thka2016/lpunpack_and_lpmake_cmake/releases5. 刷入内核和驱动 (压缩包内解压获取)fastboot flash cache xiaomi-k20pro-boot.img6. 重启设备fastboot rebootuser用户默认密码:1234设置root用户密码:sudo passwd
-
人生就是一场硬着头皮上的演出。
https://blog.iletter.top/archives/525/
2026-04-01T21:21:01+08:00
公司的业务被砍了一大半,昨天老板还说“你合同还有一个月要到期了,要不还是仔细考虑一下,是否续签吧。”话里过了很多的无奈。今天就把之前长期合作的技术公司解约了,准备自己干了。然后找外援,更加疯了一样的拓展业务。我的内心从未有如此的焦急感,不管是被辞退找工作,还是继续干加班熬夜。这次让我想到了之前我同学不和我一起租房子的事情。原来所有的事情都不是让你做好准备去做的,也许是平平淡淡的一纸空文,也许是幽幽的叹息。人生的命运就被社会的大浪下拍在了沙滩。我好像什么都没有做,人生就被判下了死刑。慢慢来吧,人生的路还很长,这一辈子,没有什么让你准备充足去做的,硬着头皮上就行了,能干多少算多少。跌跌撞撞的走下去总比烂在荒野里要好吧。平芜尽处是春山,与君共勉
-
在“终端”中设置 Mac 定时开关机
https://blog.iletter.top/archives/524/
2026-04-01T20:46:58+08:00
设置每日定时开关机在您的Mac上打开"终端"(Terminal)应用,然后输入以下命令:查看当前设置pmset -g sched设置每天定时开关机要设置每天早上8点开机,晚上12点(24:00)关机,请运行以下命令:sudo pmset repeat poweron MTWRFSU 08:00:00 shutdown MTWRFSU 00:00:00这里参数的含义:poweron 表示开机shutdown 表示关机MTWRFSU 代表每天(Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)08:00:00 表示早上8点整00:00:00 表示午夜12点整输入密码执行上述命令后,系统会要求您输入管理员密码,输入完成后按回车确认。验证设置再次运行以下命令来确认设置是否成功:pmset -g sched如何取消定时任务如果您以后想取消这些定时任务,可以运行:sudo pmset repeat cancel注意事项M1芯片兼容性:M1芯片的Mac电脑支持pmset的定时功能,但某些旧的参数可能不适用。上面提供的命令适用于M1芯片Mac。电源要求:为了确保定时开机功能正常工作,建议将Mac连接到电源适配器。系统版本:在较新的macOS版本中,您也可以通过"系统设置" > "电池" > "调度"来设置定时开关机,但使用终端命令提供了更多灵活性。
-
MookNote:为记录而生
https://blog.iletter.top/archives/522/
2026-03-09T22:06:00+08:00
一款专注于个人记录的极简工具,让每一份感动与思考都有迹可循。在这个信息爆炸的时代,我们每天都在消费大量的内容——看一部电影、读一本书、产生一个灵感。然而,这些内容往往如流水般逝去,留下的只有模糊的记忆。MookNote 诞生于对简洁工具的追求。我相信,好的工具应该像纸笔一样自然,不打扰思考,只记录生活。它不应该有繁琐的注册流程,不应该将你的数据存储在陌生的服务器上,更不应该用花哨的功能分散你的注意力。我厌烦了一款软件让用户不断地注册来注册去,使用手机号验证来验证去,数据部不于自己,甚至自己写的笔记也不属于自己,我不喜欢这样,我想一款优秀的软件应该抛去繁杂的设计,就像太极一般的黑白两色。就像专业的人做专业的事情一样,MookNote主打记录生活一切有迹可循的影视娱乐,想法笔记。MookNote名字的由来也是让我冥思苦想,Mo取自Movie的前两个字母ok取自book的后两个字母,Note则名为笔记,名字就这么来了。影视,书籍,笔记的三项生活记录,因为热爱,所以记录,因为想法,所以书写。目前笔记还处于基础功能的版本,希望各位能多给我提提建议,我也会在其中做一些取舍,能与不能我都会一一记录下来的。在此,希望大家能多多帮助我这一个不知名的小开发者。最后的最后,感谢阿里千问的通义灵码,让我一个小小的java开发者接触到Android开发,帮了我的大忙,帮了我最纯真的梦想。下载地址:https://mooknote.iletter.top/#/
-
安卓模拟器无法连接网络问题
https://blog.iletter.top/archives/521/
2026-03-08T12:11:00+08:00
简短解释打开你安卓SDK的存放目录,然后找到emulator文件夹并进入打开终端调用emulator程序修改模拟器DNS配置 , 命令如下emulator -avd 模拟器名称 -dns-server 8.8.8.8 114.114.114.114如果你不知道模拟器名称可以使用下面命令emulator -list-avds步骤及命令1.打开终端键盘win+R,输入cmd2.切换到Android SDK目录下的emulator文件夹下cd 盘符:存放路径/sdk/emulator3.获取模拟器名称emulator -list-avds4.设置模拟器DNSemulator -avd 模拟器名称 -dns-server 8.8.8.8 114.114.114.114
-
immich搭建随笔docker-compose版
https://blog.iletter.top/archives/520/
2026-02-23T19:12:00+08:00
家里有一个二十年前的主机,自从改成服务器之后加装了好几块硬盘使用。今天心血来潮想装一下immich相册服务,结果抛弃了cpu满载了,更别说immich的机器学习了。所以改用了自己的macmini主机作为一个服务器使用。折腾了一天,也算是折腾好了,因为好多地方需要运行的时候下载模型文件,所以我选择下载好了,通过映射的方式挂载进去。docker-compose.ymlname: immich_server
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:v2
volumes:
- /Users/mac/Documents/docker/dockge/docker/stacks/immich/data:/data
- /Users/mac/Documents/docker/dockge/docker/stacks/immich/img:/img
- /etc/localtime:/etc/localtime:ro
environment:
- REDIS_HOSTNAME=
- REDIS_PORT=
- REDIS_PASSWORD=
- REDIS_DBINDEX=2
# 如果 Immich Server 本身还需要数据库连接信息(通常需要),请添加
- DB_HOSTNAME=database # 使用内部服务名
- DB_PORT=5432
- DB_USERNAME=
- DB_PASSWORD=
- DB_DATABASE_NAME=
ports:
- 2283:2283
depends_on:
- database
restart: always
healthcheck:
disable: false
immich-machine-learning:
container_name: immich_machine_learning
image: ghcr.io/immich-app/immich-machine-learning:v2
volumes:
- model-cache:/cache
# 将你存放模型的目录挂载到容器的 /cache/clip
- /Users/mac/Documents/docker/dockge/docker/stacks/immich/ViT-B-32__openai:/cache/clip/ViT-B-32__openai
- /Users/mac/Documents/docker/dockge/docker/stacks/immich/XLM-Roberta-Large-Vit-B-16Plus:/cache/clip/XLM-Roberta-Large-Vit-B-16Plus
- /Users/mac/Documents/docker/dockge/docker/stacks/immich/facial-recognition:/cache/facial-recognition
environment:
- REDIS_HOSTNAME=
- REDIS_PORT=
- REDIS_PASSWORD=
- REDIS_DBINDEX=2
# 如果 ML 服务也需要数据库连接信息,请添加
- DB_HOSTNAME=database
- DB_PORT=5432
- DB_USERNAME=
- DB_PASSWORD=
- DB_DATABASE_NAME=
restart: always
healthcheck:
disable: false
database:
container_name: immich_postgres
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23
environment:
POSTGRES_PASSWORD:
POSTGRES_USER:
POSTGRES_DB:
POSTGRES_INITDB_ARGS: --data-checksums
volumes:
- /Users/mac/Documents/docker/dockge/docker/stacks/immich/db:/var/lib/postgresql/data
shm_size: 128mb
restart: always
healthcheck:
disable: false
volumes:
model-cache: null
networks: {}
服务详解 (Services)immich-server (主服务器)作用: 这是 Immich 的核心应用服务器,处理所有主要逻辑,如 API 请求、用户界面、照片上传/下载等。镜像: ghcr.io/immich-app/immich-server:v2 - 拉取并使用 Immich 官方 v2 版本的服务器镜像。卷 (Volumes):/Users/mac/.../data:/data: 将宿主机上的 /Users/mac/.../data 目录挂载到容器内的 /data 路径,用于存储用户上传的原始媒体文件。/Users/mac/.../img:/img: 将宿主机上的 /Users/mac/.../img 目录挂载到容器内的 /img 路径,这里是用于机器学习使用的(如缩略图)。/etc/localtime:/etc/localtime:ro: 将宿主机的本地时间文件挂载到容器内,并设置为只读 (ro),确保容器内的时间与宿主机同步。环境变量 (Environment):REDIS_*: 配置服务器如何连接到外部的 Redis 服务DB_*: 配置服务器如何连接到内部的 PostgreSQL 数据库(服务名为 database,端口 5432,用户名/密码/数据库名均为 postgres/postgres/immich)。数据库存储元数据、用户信息等。端口 (Ports): - 2283:2283 - 将宿主机的 2283 端口映射到容器的 2283 端口。这意味着您可以通过 http://localhost:2283 访问 Immich 的 Web 界面。依赖 (depends_on): depends_on: [database] - 确保在启动 immich-server 之前,database 服务必须先启动并运行。重启策略 (restart): always - 无论退出状态如何,Docker 总是尝试重启该容器。健康检查 (healthcheck): disable: false - 启用默认的健康检查机制,以监控容器是否正常运行。immich-machine-learning (机器学习服务)作用: 负责执行图像分析任务,如人脸识别、物体识别、场景分类等。这些任务基于预先训练好的 AI 模型。镜像: ghcr.io/immich-app/immich-machine-learning:v2 - Immich 官方的 v2 版本机器学习服务镜像。卷 (Volumes):model-cache:/cache: 挂载一个名为 model-cache 的命名卷到容器的 /cache 路径,用于存放模型文件。接下来的三行将宿主机上特定的模型文件夹直接挂载到容器内的对应路径:ViT-B-32__openai: CLIP 模型,用于图像和文本匹配。XLM-Roberta-Large-Vit-B-16Plus: 另一个 CLIP 模型,支持多语言。facial-recognition: 人脸识别模型。环境变量 (Environment): 与 immich-server 类似,配置了相同的 Redis 和数据库连接信息,以便它能与主服务和数据库交互。database (PostgreSQL 数据库)作用: 存储 Immich 的所有非媒体数据,如用户账户、相册信息、文件元数据、人脸识别结果等。镜像: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:... - 这是一个经过特殊定制的 PostgreSQL 14 镜像,内置了 vectorchord 和 pgvectors 扩展,专门用于高效处理向量相似性搜索(这是 AI 图像分析功能的关键)。环境变量 (Environment): 设置了数据库的超级用户密码、用户名和默认数据库名。卷 (Volumes): - /Users/mac/.../db:/var/lib/postgresql/data - 持久化数据库文件到宿主机,防止容器删除后数据丢失。共享内存 (shm_size): 设置为 128mb,为数据库提供必要的共享内存空间,提升性能。重启策略 & 健康检查: 同样设置了 always 重启和启用健康检查。卷 (Volumes)model-cache: 这是一个命名卷 (named volume)。它不直接映射到宿主机的特定路径,而是由 Docker 在其管理的目录下创建和维护。在这里,它主要用于给机器学习服务提供一个持久化的空间来缓存模型或中间计算结果,保证容器重启后模型数据依然可用。网络 (Networks)networks: {}: 这里没有显式定义任何网络。Docker 会自动为这个 immich_server 项目创建一个默认的桥接网络 (bridge network)。immich-server 和 immich-machine-learning 通过 DB_HOSTNAME=database 这个环境变量,利用 Docker 的内部 DNS 功能,可以直接通过服务名 database 在这个默认网络上找到并连接到 immich_postgres 容器。总结: 这个 docker-compose.yml 文件定义了一个完整的 Immich 运行环境,包含一个 Web 服务器、一个机器学习分析服务和一个专用的 PostgreSQL 数据库。它通过卷实现了数据持久化,并通过环境变量配置了各组件间的连接信息。
-
Win11打开文件夹显示找不到应用程序
https://blog.iletter.top/archives/519/
2026-01-04T14:05:00+08:00
按【 Win + R 】组合键,打开运行,输入【regedit】命令,按【确定或回车】打开注册表编辑器;注册表编辑器窗口,依次展开到以下路径:HKEY_CLASSES_ROOT\Folder\shell在【Shell】下通常默认有下图几项,如果有其它第三方软件命名项,我们可以【右键删除】;左侧列表中,点击【shell】,在右侧双击名称为【默认】的项;将数值数据【清空】,最后点击【确定】;以上设置完成后,重启电脑再看是否正常。
-
linux服务器实现webdav挂载
https://blog.iletter.top/archives/518/
2025-12-30T14:35:53+08:00
使用 davfs2 (推荐用于标准WebDAV)安装 davfs2在 Debian/Ubuntu:sudo apt update && sudo apt install davfs2在 CentOS/RHEL (可能需要EPEL源):sudo yum install davfs2创建挂载点sudo mkdir /home/dellevin/zhang/jellyfin/media/webdav/g3配置 davfs2 凭证编辑 /etc/davfs2/secrets 文件,添加一行:/home/dellevin/zhang/jellyfin/media/webdav/g3 webdav账户 webdav密码设置文件权限:sudo chmod 600 /etc/davfs2/secrets挂载 WebDAVsudo mount -t davfs http://webdav地址/path /home/dellevin/zhang/jellyfin/media/webdav/g3卸载sudo umount /home/dellevin/zhang/jellyfin/media/webdav/g3
-
碎片化时代构筑的一个碎片的人
https://blog.iletter.top/archives/517/
2025-12-27T00:03:00+08:00
碎片化时代构筑的一个碎片的人我有一个习惯,就是喜好回顾自己的曾经。虽然我对我的同学和好友常说“人生本就应该往前看,一直回头,永远不会长大。”可是真到自己的头上我却是做不到。曾经的我喜好写日记,随笔,虽然烂的不行,但是每当我回顾的时候,不管当时是喜是忧。那份曾经用自己残缺的文笔封印住的悸动,在回顾的时候总会有些松动。自从工作以后,日记随笔的频率越来越低的,多的反倒是工作的日志。我就像是丢失了近两年的记忆一般,在今晚回顾的时候竟然空无一物,望着空荡荡的日记,我不禁一次又一次的问自己,我到底是谁?在这个碎片化的时代,信息爆炸的初期,良莠不齐的信息大批量的涌入我们的视野。我们看着,嬉笑着,怒骂着,感叹着,然后继续面无表情的获取下一条信息,这些残缺无比的信息构筑了一个个残缺无比的人。一碰就碎。贫瘠的知识,片面的视野还有一个麻木的青年。我不禁一次又一次的问自己,“你愿做一位痛苦的苏格拉底还是一只快乐的猪?”。我一遍又一遍的告诉自己,“我要做一位痛苦的苏格拉底”。可是这样真的好累啊。这两年我的生活如同“一只快乐的猪”,可是这真的是我自己吗?我也不知道了。或许我不应该上学的。我应该像村里的其他人一样,辍学,外出打工,最后遇见一位女生,结婚生子,然后慢慢的老去,结束自己的一生。谁能告诉我,人生到底是什么?
-
宝塔面板V11.4精简去除vip以及其他推广功能
https://blog.iletter.top/archives/516/
2025-12-21T22:57:03+08:00
该操作仅适用于宝塔面板 V11.4,其他版本需要自行测试。功能隐藏:关闭不必要的功能设置->常用设置->面板栏隐藏,隐藏如下功能WAF、WP Tools、多用户、邮局、节点管理不想用,隐藏就行了。去除首页的软件推荐功能。一开始我本以为这个是在utils-lib.js里面带着的,后来通过减慢请求查看到是在请求里面带着的。通过搜索关键词get_pay_type发现,是通过getRecommendContent这个请求函数带过来的。所以我们需要在这里设置返还值为空即将getRecommendContent=()=>useAxios.post("ajax/get_pay_type")替换成getRecommendContent=()=>{return []}去除日志部分的 SSH 登录日志删掉如下部分{path:"ssh",name:"ssh",meta:{title:"SSH登录日志"},component:()=>__vitePreload(()=>import("./index57.js?v=1766131796"),__vite__mapDeps([]),import.meta.url)},去除 SSL 部分的 自动部署删掉如下部分{path:"auto-deploy",name:"auto-deploy",meta:{title:"自动部署"},component:()=>__vitePreload(()=>import("./index89.js?v=1766131796").then(e=>e.i),__vite__mapDeps([]),import.meta.url)},去除 安全部分的 安全检测和违规词检测删掉如下部分{path:"safe-detect",name:"safe-detect",meta:{title:"安全检测"},component:()=>__vitePreload(()=>import("./index46.js?v=1766131796"),__vite__mapDeps([]),import.meta.url)},{path:"keyword",name:"keyword",meta:{title:"违规词检测"},component:()=>__vitePreload(()=>import("./index47.js?v=1766131796"),__vite__mapDeps([]),import.meta.url)},去除 PHP网站安全 入侵防御 系统加固 扫描感知 部分删掉如下部分,{path:"php-safe",name:"php-safe",meta:{title:"PHP网站安全"},component:()=>__vitePreload(()=>import("./index48.js?v=1766131796"),__vite__mapDeps([]),import.meta.url)},{path:"intrusion",name:"intrusion",meta:{title:"入侵防御"},component:()=>__vitePreload(()=>import("./index49.js?v=1766131796"),__vite__mapDeps([]),import.meta.url)},{path:"fixed",name:"fixed",meta:{title:"系统加固"},component:()=>__vitePreload(()=>import("./index50.js?v=1766131796"),__vite__mapDeps([]),import.meta.url)},{path:"network-scan",name:"network-scan",meta:{title:"扫描感知"},component:()=>__vitePreload(()=>import("./index51.js?v=1766131796"),__vite__mapDeps([]),import.meta.url)}去除网站界面 的漏洞扫描 和 网站安全找到 index74.js漏洞扫描删除如下部分{type:"custom",render:()=>w(P,{onClick:ee},{default:()=>{var e,t;return[S("漏洞扫描"),w("span",{class:"ml-4px py-1px px-4px text-center font-bold ".concat((null==(e=Se.value)?void 0:e.loophole_num)>0?"text-danger":"text-warning")},[null==(t=Se.value)?void 0:t.loophole_num])]}})},网站安全删除如下部分,{type:"custom",render:()=>w(P,{onClick:te},{default:()=>{var e,t;return[S("网站安全"),w("span",{class:"ml-4px py-1px px-4px text-center font-bold ".concat((null==(e=Se.value)?void 0:e.web_scaning_times)>0?"text-danger":"text-warning")},[null==(t=Se.value)?void 0:t.web_scaning_times])]}})}去除 table 表格的右侧的统计和 waf{onClick:e=>{le(e,"monitor-setting")},title:"统计"},{onClick:e=>{le(e,"bt_waf")},title:"WAF"},去除网站安全和防篡改找到 index235.js删除该部分{label:"防篡改",name:"antiTamper",lazy:!0,render:()=>r(()=>import("./index463.js?v=1766131796"),__vite__mapDeps([]),import.meta.url)},{label:"网站安全",lazy:!0,name:"siteSecurity",render:()=>r(()=>import("./index464.js?v=1766131796"),__vite__mapDeps([]),import.meta.url)},Css隐藏:主要路径为/www/server/panel/BTPanel/static/css/style.css 一下更改需要在此文件内进行调整,如需更改其他部分会另作说明去除顶部的企业版tag.icon-end-time-free[data-v-402b09ab]{ 后面添加 display:none;软件商店的推广 banner.recom-view[data-v-81e888c5]{ 后面添加 display:none去除底部的vip推广找到如下路径的/www/server/panel/BTPanel/static/css里面的style.css搜索advantage-view吧这里面的display:flex改成display:none去除网站里面的 waf 图标.svgtofont-left-waf:before{content:""} 替换成 .svgtofont-left-waf:before{dispaly:none;content:""}