I am a tower crane engineer
十月 10, 2025
当您尝试从 PDF 中删除页面时,您会看到错误消息“参数错误”。当您尝试向 PDF 中插入或添加页面时,也可能会出现相同的错误消息。
当 Acrobat 发现 PDF 文件中的标记的底层结构存在某些问题时,就会出现“参数错误”错误。请尝试以下解决方案。
选择添加文件。
浏览并选择显示错误消息“参数错误”的 PDF 文件,然后选择打开。
从合并文件栏中,选择添加文件下拉菜单,然后选择添加文件。
浏览并选择另一个 PDF 文件,最好是一个单页的空白 PDF 文件,然后选择打开。
选择合并或合并文件。选定的文件将合并为一个 PDF,并在 Acrobat 中打开该文件 (Binder1.pdf)。
保存文件。使用“合并文件”操作选择您添加到 PDF 的所有页面(合并文件时您选择的另一个 PDF 的页面)。删除选定的页面:
再次保存文件。要查看是否仍然出现错误,请尝试从 PDF 中删除页面。
八月 22, 2025
不知从什么时候开始,大量AI生成的图片和视频开始充斥网络世界,有些甚至能达到以假乱真的程度,当然更多的是那种一眼假、一眼AI的。似乎是一场AI技术的狂欢,大家都在比拼谁的技术更强,谁能用AI生成最棒的图片或视频。技术大佬们也在一刻不停的迭代自己的技术,各种AI大厂轮番登场,颇有百家争鸣的景象。不可否认,AI技术的发展为我们带来了很多便利,但是任何事物都有正反两面,在狂欢之余,是不是也该停下来思考一下,我们到底需要AI做什么?
八月 05, 2025

共和国之辉网页版https://game.gongheguozhihui.com/
修改方法:
进入游戏后,打开浏览器的开发人员工具,打开控制台,输入Game.localPlayer._credits=999999回车,金钱数量999999随你定
七月 28, 2025
最近使用Edge浏览器,目前有各种攒积分的任务,其中就有拼图游戏,就像这样:

玩过几次后我就思考有没有最优的解法,也就是步骤最少的复原方法。通过网上搜索,发现使用 A*(A-star)搜索算法 来找最短路径,是最常用的 8-puzzle 解法。
借助chatgpt,我这个编程入门选手也可以很快得到一个可执行的程序代码。
from heapq import heappush, heappop
# 目标状态
goal = "12345678_"
# 空格移动方向及其索引变化量
moves = {
'U': -3,
'D': 3,
'L': -1,
'R': 1,
}
# 特殊情况:哪些位置不能向左/右/上/下移动
invalid_moves = {
'L': [0, 3, 6],
'R': [2, 5, 8],
'U': [0, 1, 2],
'D': [6, 7, 8],
}
# 启发函数:曼哈顿距离
def manhattan(state):
distance = 0
for idx, val in enumerate(state):
if val != "_":
goal_idx = goal.index(val)
distance += abs(idx // 3 - goal_idx // 3) + abs(idx % 3 - goal_idx % 3)
return distance
# A* 求解函数
def solve_puzzle(start):
visited = set()
heap = []
heappush(heap, (manhattan(start), 0, start, "")) # (估值, 步数, 状态, 路径)
while heap:
priority, steps, state, path = heappop(heap)
if state == goal:
return steps, path
if state in visited:
continue
visited.add(state)
empty_idx = state.index("_")
for move, delta in moves.items():
new_idx = empty_idx + delta
if empty_idx in invalid_moves[move] or not (0 <= new_idx < 9):
continue
# 交换空格与相邻数字
state_list = list(state)
state_list[empty_idx], state_list[new_idx] = state_list[new_idx], state_list[empty_idx]
new_state = ''.join(state_list)
if new_state not in visited:
heappush(heap, (steps + 1 + manhattan(new_state), steps + 1, new_state, path + move))
return -1, "" # 无解
# 示例用法
if __name__ == "__main__":
initial_state = "3754182_6"
steps, solution = solve_puzzle(initial_state)
print(f"最少步数: {steps}")
print(f"操作路径: {solution}")
得到输出如下:
最少步数: 21
操作路径: ULDRUULDDRURULLDDRURD
🔁 操作说明(空格的移动方向)
每个字母代表一次点击使空格与相邻数字交换:
七月 25, 2025
WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音通话、视频通话以及P2P文件分享的技术规范和开源项目,目的是让开发者可以在网页和移动应用中实现不依赖第三方插件的实时通信功能。
WebRTC 为了实现端对端通信(P2P),必须知道用户设备的 真实 IP 地址,包括:
它会使用一个机制叫 ICE(Interactive Connectivity Establishment) 来尝试连接路径,这需要收集所有候选网络地址(ICE candidates),包括:
这些信息是通过浏览器的 JavaScript API 中的 RTCPeerConnection 自动收集并暴露的。
一个恶意网页可以运行如下 JS 代码,不经用户同意即可收集你的内网和公网 IP:
let pc = new RTCPeerConnection({iceServers: []});
pc.createDataChannel('');
pc.createOffer().then(offer => pc.setLocalDescription(offer));
pc.onicecandidate = event => {
if (event.candidate) {
console.log(event.candidate.candidate);
}
};
输出结果类似:
candidate:0 1 udp 2122252543 192.168.1.10 12345 typ host
candidate:1 1 udp 1686052863 203.0.113.45 45678 typ srflx raddr 192.168.1.10 rport 12345
这些数据是用来进行 NAT 穿透用的,但也可能被窃取。
一些 VPN 服务(如 NordVPN、ExpressVPN)会专门防止 WebRTC 泄漏公网 IP