今天就把之前长期合作的技术公司解约了,准备自己干了。然后找外援,更加疯了一样的拓展业务。我的内心从未有如此的焦急感,不管是被辞退找工作,还是继续干加班熬夜。
这次让我想到了之前我同学不和我一起租房子的事情。原来所有的事情都不是让你做好准备去做的,也许是平平淡淡的一纸空文,也许是幽幽的叹息。人生的命运就被社会的大浪下拍在了沙滩。
我好像什么都没有做,人生就被判下了死刑。
慢慢来吧,人生的路还很长,这一辈子,没有什么让你准备充足去做的,硬着头皮上就行了,能干多少算多少。跌跌撞撞的走下去总比烂在荒野里要好吧。
平芜尽处是春山,与君共勉
]]>在您的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 诞生于对简洁工具的追求。
我相信,好的工具应该像纸笔一样自然,不打扰思考,只记录生活。它不应该有繁琐的注册流程,不应该将你的数据存储在陌生的服务器上,更不应该用花哨的功能分散你的注意力。
我厌烦了一款软件让用户不断地注册来注册去,使用手机号验证来验证去,数据部不于自己,甚至自己写的笔记也不属于自己,我不喜欢这样,我想一款优秀的软件应该抛去繁杂的设计,就像太极一般的黑白两色。就像专业的人做专业的事情一样,MookNote主打记录生活一切有迹可循的影视娱乐,想法笔记。
MookNote名字的由来也是让我冥思苦想,Mo取自Movie的前两个字母ok取自book的后两个字母,Note则名为笔记,名字就这么来了。影视,书籍,笔记的三项生活记录,因为热爱,所以记录,因为想法,所以书写。
目前笔记还处于基础功能的版本,希望各位能多给我提提建议,我也会在其中做一些取舍,能与不能我都会一一记录下来的。在此,希望大家能多多帮助我这一个不知名的小开发者。
最后的最后,感谢阿里千问的通义灵码,让我一个小小的java开发者接触到Android开发,帮了我的大忙,帮了我最纯真的梦想。
]]>emulator文件夹并进入emulator程序修改模拟器DNS配置 , 命令如下emulator -avd 模拟器名称 -dns-server 8.8.8.8 114.114.114.114emulator -list-avds键盘win+R,输入cmd
cd 盘符:存放路径/sdk/emulatoremulator -list-avdsemulator -avd 模拟器名称 -dns-server 8.8.8.8 114.114.114.114
]]>docker-compose.yml
name: 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)
HKEY_CLASSES_ROOT\Folder\shell在 Debian/Ubuntu:
sudo apt update && sudo apt install davfs2在 CentOS/RHEL (可能需要EPEL源):
sudo yum install davfs2sudo mkdir /home/dellevin/zhang/jellyfin/media/webdav/g3编辑 /etc/davfs2/secrets 文件,添加一行:
/home/dellevin/zhang/jellyfin/media/webdav/g3 webdav账户 webdav密码sudo chmod 600 /etc/davfs2/secretssudo mount -t davfs http://webdav地址/path /home/dellevin/zhang/jellyfin/media/webdav/g3sudo umount /home/dellevin/zhang/jellyfin/media/webdav/g3
]]>我有一个习惯,就是喜好回顾自己的曾经。虽然我对我的同学和好友常说“人生本就应该往前看,一直回头,永远不会长大。”可是真到自己的头上我却是做不到。
曾经的我喜好写日记,随笔,虽然烂的不行,但是每当我回顾的时候,不管当时是喜是忧。那份曾经用自己残缺的文笔封印住的悸动,在回顾的时候总会有些松动。
自从工作以后,日记随笔的频率越来越低的,多的反倒是工作的日志。我就像是丢失了近两年的记忆一般,在今晚回顾的时候竟然空无一物,望着空荡荡的日记,我不禁一次又一次的问自己,我到底是谁?
在这个碎片化的时代,信息爆炸的初期,良莠不齐的信息大批量的涌入我们的视野。我们看着,嬉笑着,怒骂着,感叹着,然后继续面无表情的获取下一条信息,这些残缺无比的信息构筑了一个个残缺无比的人。一碰就碎。贫瘠的知识,片面的视野还有一个麻木的青年。
我不禁一次又一次的问自己,“你愿做一位痛苦的苏格拉底还是一只快乐的猪?”。我一遍又一遍的告诉自己,“我要做一位痛苦的苏格拉底”。可是这样真的好累啊。这两年我的生活如同“一只快乐的猪”,可是这真的是我自己吗?我也不知道了。或许我不应该上学的。我应该像村里的其他人一样,辍学,外出打工,最后遇见一位女生,结婚生子,然后慢慢的老去,结束自己的一生。
谁能告诉我,人生到底是什么?
]]>设置->常用设置->面板栏隐藏,隐藏如下功能
WAF、WP Tools、多用户、邮局、节点管理
不想用,隐藏就行了。

一开始我本以为这个是在utils-lib.js里面带着的,后来通过减慢请求查看到是在请求里面带着的。通过搜索关键词get_pay_type发现,是通过getRecommendContent这个请求函数带过来的。所以我们需要在这里设置返还值为空即将
getRecommendContent=()=>useAxios.post("ajax/get_pay_type")替换成
getRecommendContent=()=>{return []}
删掉如下部分
{path:"ssh",name:"ssh",meta:{title:"SSH登录日志"},component:()=>__vitePreload(()=>import("./index57.js?v=1766131796"),__vite__mapDeps([]),import.meta.url)},
删掉如下部分
{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)},
删掉如下部分
,{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)},主要路径为/www/server/panel/BTPanel/static/css/style.css 一下更改需要在此文件内进行调整,如需更改其他部分会另作说明

.icon-end-time-free[data-v-402b09ab]{ 后面添加 display:none;

.recom-view[data-v-81e888c5]{ 后面添加 display:none

找到如下路径的/www/server/panel/BTPanel/static/css里面的style.css搜索advantage-view吧这里面的display:flex改成display:none

.svgtofont-left-waf:before{content:""} 替换成 .svgtofont-left-waf:before{dispaly:none;content:""}
]]>后来更改电源计划,99%的时候进行关机,但是盖上盖子,断开远程的时候,睡眠状态了就,不会进行关机操作。索性写了这个python代码
import sys
import win32api
import win32gui
import win32con
import pythoncom
import psutil
import threading
import time
import subprocess
SHUTDOWN_DELAY_SECONDS = 60
class PowerListenerWindow:
def __init__(self):
self.is_plugged_in = True # 初始假设为连接电源
self.shutdown_timer = None
self.last_unplugged_time = None
wc = win32gui.WNDCLASS()
wc.lpfnWndProc = self.wnd_proc
wc.lpszClassName = 'MyPowerListenerClass'
wc.hInstance = win32api.GetModuleHandle(None)
class_atom = win32gui.RegisterClass(wc)
# Create a hidden window
self.hwnd = win32gui.CreateWindow(
class_atom,
'PowerListener',
0, 0, 0, 0, 0,
0, 0, wc.hInstance, None
)
def wnd_proc(self, hwnd, msg, wparam, lparam):
if msg == win32con.WM_POWERBROADCAST:
if wparam == win32con.PBT_APMPOWERSTATUSCHANGE:
# print("[WM_POWERBROADCAST] 电源状态可能已更改 (PBT_APMPOWERSTATUSCHANGE)") # 简化日志
self.check_and_print_status() # 调用更新后的检查函数
elif wparam == win32con.PBT_ACPIRESUMEAUTOMATIC or wparam == win32con.PBT_ACPIRESUMESUSPEND:
# print(f"[WM_POWERBROADCAST] 系统从睡眠/休眠恢复 (wParam={wparam})") # 简化日志
pass # 可根据需要添加恢复逻辑
elif wparam == win32con.PBT_APMSUSPEND:
# print("[WM_POWERBROADCAST] 系统即将进入睡眠/休眠 (PBT_APMSUSPEND)") # 简化日志
pass # 可根据需要添加休眠前逻辑
return win32gui.DefWindowProc(hwnd, msg, wparam, lparam)
def cancel_pending_shutdown(self):
"""取消任何待定的关机操作"""
if self.shutdown_timer and self.shutdown_timer.is_alive():
self.shutdown_timer.cancel()
self.shutdown_timer = None
def schedule_shutdown(self):
"""在指定延迟后执行关机"""
print(f"警告:设备未充电,将在 {SHUTDOWN_DELAY_SECONDS} 秒后关机!")
self.execute_shutdown()
def execute_shutdown(self):
"""实际执行关机操作"""
# 再次确认是否仍然未充电,避免在检查间隙插上了电源
try:
battery_check = psutil.sensors_battery()
if battery_check and not battery_check.power_plugged:
print("--- 执行关机 ---")
# 使用 subprocess 调用 Windows 关机命令
# /s 关机, /t 5 延迟5秒, /c 添加消息
subprocess.run(["shutdown", "/s", "/t", "5", "/c", "Battery low and not charging. Shutting down in 5 seconds..."], check=True)
# 等待一下,让关机命令生效
time.sleep(10)
sys.exit(0) # 正常退出监听器
else:
print("--- 电源状态已恢复,取消关机 ---")
except psutil.Error as e:
print(f"查询电源状态失败: {e}")
# 查询失败,出于安全考虑,可以选择不关机或记录日志
except subprocess.CalledProcessError as e:
print(f"执行关机命令失败: {e}")
except Exception as e:
print(f"执行关机时发生未知错误: {e}")
def check_and_print_status(self):
"""Helper function to query and print current status and manage shutdown timer"""
try:
battery = psutil.sensors_battery()
was_plugged_in = self.is_plugged_in # 记录之前的状态
if battery:
self.is_plugged_in = battery.power_plugged
# 简化状态打印,仅在状态变化时提示
# plugged_status_str = "已充电/接入电源" if self.is_plugged_in else "未在充电"
# print(f"当前电源状态: {plugged_status_str}, 电量: {battery.percent}%")
if not self.is_plugged_in:
# 检测到未充电
if was_plugged_in or self.shutdown_timer is None:
# 如果之前是充电的,或者是第一次检测到未充电且无定时器
print(f"提示:笔记本电脑当前未在充电! 电量: {battery.percent}%. 将在 {SHUTDOWN_DELAY_SECONDS} 秒后关机.")
self.cancel_pending_shutdown() # 先取消旧的(理论上不应该有)
# 启动新的 60 秒关机定时器
self.shutdown_timer = threading.Timer(SHUTDOWN_DELAY_SECONDS, self.schedule_shutdown)
self.shutdown_timer.start()
# else: 已经在倒计时中,无需重复启动
else:
# 检测到已充电
if not was_plugged_in: # 如果之前是未充电的
print("提示:电源已连接,取消关机计划。")
# 取消任何待定的关机
self.cancel_pending_shutdown()
else:
# print("无法获取电池信息,可能不是笔记本电脑或传感器不可用。") # 简化日志
self.is_plugged_in = True # 默认为连接(安全起见)
self.cancel_pending_shutdown() # 取消关机
except Exception as e:
print(f"查询电源状态时出错: {e}")
# 出错时也应取消关机以防万一
self.cancel_pending_shutdown()
def start_message_loop(self):
print("Windows 电源监听器已启动...")
print("请插拔电源测试功能。按 Ctrl+C 退出。")
# 初始检查一次状态
self.check_and_print_status()
try:
while True:
pythoncom.PumpWaitingMessages()
win32api.Sleep(5000) # 每5秒处理一次消息队列
except KeyboardInterrupt:
print("\n收到退出指令,正在关闭...")
finally:
self.cancel_pending_shutdown() # 确保退出时取消定时器
win32gui.DestroyWindow(self.hwnd)
print("监听器已关闭。")
# 编译
# pyinstaller --noconfirm --onefile --hidden-import=win32timezone powerOffShutDown.py
if __name__ == "__main__":
listener = PowerListenerWindow()
listener.start_message_loop()
]]>