博文

目前显示的是 2025的博文

AutoHotKey将剪贴板转换为键盘输入用于VNC

图片
看到有人求助 VNC 中无法粘贴. 在 google 上搜索了一下, 找到一个这样的结果 https://ardalis.com/use-autohotkey-to-paste-text-as-typing/ #NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases. ; #Warn  ; Enable warnings to assist with detecting common errors. SendMode Event  ; Recommended for new scripts due to its superior speed and reliability. SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory. setkeydelay 70 ^+v::GoTo, CMD CMD: ;Send {Raw}%Clipboard% vText := Clipboard Clipboard := vText Loop Parse, vText, % "`n", % "`r" {     Send, % "{Text}" A_LoopField     Send, % "+{Enter}" } return 试用了一下, 效果不对. 但是 AutoHotKey 这个思路是对的. 所以让GPT写了一个. #F3:: ; 快速键 win + f3     TextToSend := Clipboard     ; 检查剪贴板是否为空     if (TextToSend = "") {         MsgBox, clipboard empty         Return     }          DelayMs := 500 ; 设置您想要的延迟时间(毫秒...

电报防广告机器人 telegram antispam bot 我的博客最新一期博文的标题是什么 html解析 rss xml解析

图片
上一期中, 我们实现了自定义 问题-答案 . 但是过于死板. 那么, 除了算术题, 还有什么可以生成灵活 问题-答案 的方式呢? 比如, 我的博客最新一期博文的标题是什么? html解析 如果是人, 怎么找到我的博客的最新一期博文呢?  打开  https://crazypeace.eu.org/ 找到这个位置, 标题就是答案了. 那么, 计算机程序怎么获取这一条呢? 我们 按 F12 打开浏览器开发者工具. 使用选择工具, 选中我们需要的博文标题.  可以看到在html中, 博文标题对应元素是 class="post-title entry-title" 那么, 我们使用GPT编程. python实现如下功能, 访问 https://crazypeace.eu.org/ 在 html 中找到 第1个 class="post-title entry-title" 元素,  输出该元素的文本内容 把GPT编程的结果和原来的 youtube.py 里面的4行代码融合一下, 就得到这样的 blog.py  放到 pset 目录下就生效了.  import requests from bs4 import BeautifulSoup def buildQA():   question = '我的博客的最新一期博文标题是什么?'   correct_answer = ''   url = "https://crazypeace.eu.org/"   # 请求网页   response = requests.get(url)   # 解析 HTML   soup = BeautifulSoup(response.text, "html.parser")   # 找到第一个 class="post-title entry-title" 的元素   element = soup.find(class_="post-title entry-title")   if element:     correct_answer = element.get_text(strip=True)   e...

Cloudflare worker 反代 blogspot 实现免翻墙域名镜像站 path关键词屏蔽

图片
前面实现了一个反代 blogspot 实现免翻墙域名镜像站 .  用KV中保存需要屏蔽的path的方式, 做到了, 指定path显示固定页面, 而不是原页面的功能. 有的用户也许会觉得, 写了一篇不想在墙内显示的博文, 还要去KV里面添加一条记录, 好麻烦呀. 还有一个办法, 就是对path先进行关键字筛选, 含有关键字的path, 直接就显示固定页面, 不需要去查KV了. 比如, 我在写博文的时候, 就有自定义链接的习惯, 会在 xxx.html 的这个xxx里面 包含博文的主题 https://crazypeace.eu.org//2022/01/v2ray-caddy-ws-tls-cdn.html 利用GPT开发, 把 项目的work.js 丢进去, 附上这么一段话 GPT返回的结果有问题. 直接return Response 再多打几句. 这样的结果就对了. 更新到Github https://github.com/crazypeace/cf-worker-proxy-blogspot

Cloudflare worker 反代 blogspot 实现免翻墙域名镜像站 绑定KV屏蔽path列表

图片
灵感 我有了一个想法, 想提高我这个博客在GFW墙内搜索引擎的曝光. 思路 1. 需要有一个没有被墙的域名, 用来访问我的博客 2. 我不想使用blogspot的自定义域名方案.  一是, 我原来的域名已经在墙外的搜索引擎中存在多年. 二是, 如果改为使用自己的域名, 我就需要维护域名的解析. 如果遇到攻击, 域名解析受影响, 我需要额外做不少工作.  3. 所以我需要一个没有被墙的域名作为镜像站 4. 作为墙内可以直接访问的域名, 显示的内容也应该是不涉及翻墙的. 所以需要屏蔽掉直接描述翻墙节点搭建, 翻墙工具使用的博文. 具体细节 1. Cloudflare worker反代是好多年的技术了. 可以做到显示 html 的效果. 2. 图片 来自 https://img.crazypeace.eu.org/https://blogger.googleusercontent.com 可以用 uniproxy 的技术. 在第1步获得html之后, 把里面所有访问 https://img.crazypeace.eu.org/https://blogger.googleusercontent.com 的链接前面加上 uniproxy  3. CSS 对于 blogspot 来说, 是内嵌在html中的. 4. js 我不想管了, 在我的blogspot中, 对页面的阅读影响不大.  5. 跳转到其它页面的链接 在第1步获得html之后, 查找替换, 把blogspot域名替换为免翻墙域名. 6. worker绑定一个KV, 里面保存我不希望在墙内显示的链接. 当访问这些链接时, 显示一个固定的页面. 落实 反代 worker 在google中搜索"cloudflare worker 反代 代码", 没想到直接就给了AI结果 因为本项目体量不大, 而现在的各个GPT上下文都足够大, 哪怕我的M$ copilot使用受限了, 我也可以直接把全量代码复制粘贴, 再附上我的功能描述, 丢给gemini啊 chatgpt啊 去生成代码. chatgpt 5.0 有限额, 但是我的项目比较简单, 哪怕降级成 GPT-4 也有用. 具体的调试过程还是有点繁琐的, 就是遇到个问题, 复制代码加上报错信息(或者是自己想要做到什么功能的描述), 丢给GPT, 得到答案, 再部署应用, 再测试, ... 不断循环, ... 最终成果 Github htt...

电报防广告机器人 telegram antispam bot 重构产生问题和回答的方式

图片
上一期我们实现了防广告机器人的基本框架 如果我们想实现丰富的 问题-答案 生成方式, 怎么做呢? 看一下目前的代码. 是生成了 问题-答案 后, 保存起来, 然后新成员再回答问题, 并检查答案. 那么, 我们来做这样一件事. 在一个python文件 main.py 的目录下, 有一个 pset 目录.  pset 目录下有多份 .py 文件.  这些 .py 文件中, 都至少包含1个函数. buildQA buildQA 返回2个字符串, 一个是 question, 一个是 correct_answer 我要在 main.py 中随机调用 pset 目录下的一个 .py 文件中的 buildQA 函数 把这段文字丢给 M$ copilot (或者你手边的任意一个GPT), 很容易就得到答案. 把修改方案应用到项目中. 主 py 文件中. 增加这样一个函数 def get_random_module():     # 找出 pset 目录下的所有 .py 文件(排除 __init__.py)     files = [         f[:-3] for f in os.listdir("pset")         if f.endswith(".py") and f != "__init__.py"     ]     # 随机选择一个     chosen = random.choice(files)     # 动态导入     module = importlib.import_module(f"pset.{chosen}")     return module 再把原来生成 问题-答案的地方改成这样 # 生成验证问题和答案 mod = get_random_module() question, correct_answer = mod.buildQA() 然后在 pset 目录下, 新建一个 add.py 文件. 内容如下: import random def buildQA():...

电报防广告机器人 telegram antispam bot 用回复文本的方式增加发广告的成本

图片
用了这么久的telegram, 看到的防广告机器人, 都是用选按钮的方式回答问题, 理论上有被穷举题库的可能性. 如果你的群足够有吸引力, 想加群的广告机器人足够多, 总是可以找到入群问题的答案的. 而入群问题如果太变态 ( https://github.com/XTLS/Xray-core/discussions/3487 ) 反而拒绝了一些能力不强的正常人类 (TA们本身并不是想发广告, 只是想入群提问或交流) 所以我有了一个思路, 如果这个人机检查的问题需要回答文本呢? 用干就干, 利用claude进行初步构建. 我要开发这样的一个telegram机器人 机器人在群组中工作 当机器人检测到有新成员加入时, 机器人将新成员设置禁言. 机器人要求新成员在与机器人的私聊过程中完成人机检测. 如果通过人机检测, 那么机器人解除新成员的禁言状态. 人机检测的具体过程是这样的 当新成员向机器人发送/start时, 机器人提问, 新成员输入文本回答. 得到的结果放到 VS Code, 和 M$ Copilot 合作, 进行调试. 效果 Github https://github.com/crazypeace/tg-join-group-exam-bot/ 总代表量(算上空行和注释)不到300行, 是不是很轻量! * 考虑到后续还会有几期更新. 所以本期的代码也复制了一份  tg-join-group-exam-bot1.py 在项目里. 部署方法见项目 readme 目前这只是一个最基础的架子, 后续我们再慢慢优化. 欢迎关注我的博客 https://crazypeace.eu.org/p/icdyct.html

商业化电报关键词提醒机器人 telegram keyword monitor bot

图片
书接止文. 今天接着说商业化电报关键词提醒机器人 telegram keyword monitor bot 的一些思考. 也就是, 你可以怎样用项目去卖钱. Github https://github.com/crazypeace/tg-keyword-monitor-bot 再复习一下本项目的架构 卖的是搭建项目的劳动 对于项目的使用者来说, 如果还要操作linux系统, 修改配置文件来修改关键字, 使用起来会不方便. 本项目提供向机器人发命令来修改关键字的操作方式, 使用者不需要接触linux环境. 示例, 甲方 提供 tg账号, 作为采集者, 把信息源的群都加好. 你把这个项目搭起来, 把甲方的tg账号设置为 管理员 和 消费者. 使用方式就是, 如果要监听更多的群, 甲方自己操作tg账号去加群. 如果要修改关键字, 甲方自己操作tg账号和机器人交互修改关键字. 甲方在tg账号上接收机器人发送的关键字消息. 卖的是信息源 比如, 某些群 加群要收费, 或者不接收新群成员了.  而你手里有已经加了这些群的tg账号, 作为 采集者. 示例,  在同一个大圈子里, 不同的甲方有不同的关键字需求. 你的采集者是同一个tg账号. 你为每一个甲方, 分别 运行一个项目. (可以共用VPS, python环境. 建不同的目录就行了) 其它设置都和标准流程一样, 只是设置同样的 采集者 (配置文件中的 user_phone 参数) 卖消费者权限 如果这个行业关注的关键字相当同质化, 你也掌握了信息源. 想降低维护成本, 你可以直接卖消费者权限. 示例, 你可以直接修改配置文件的 result_id_list 列表, 添加不同的 接收关键字消息的 tg 账号的ID. 你也可以把一个tg频道的id 设置为 result_id_list. 然后把 发布者的 bot 添加为频道的管理员, 这样就可以发关键字通知了. 你可以把频道设置为私有的, 你控制订阅这个频道的权限就行. 你收了钱, 再把某个tg用户添加进频道. 我自己公开了一个关键字消息的频道示例: https://t.me/FuckGFWNewbieNeedHelp 使用多个采集者 不希望一个tg账号加太多的群, 担心一下子被封号的风险. 或者是你已经触达500个群组的上限. 运行多套程序, 分别使用不同的采...

Win环境下编译 Forkgram 安装Visual Studio 2022 C++桌面开发 Python Git

图片
参考 telegram 官方项目的指南 https://github.com/telegramdesktop/tdesktop/blob/dev/docs/building-win-x64.md 申请 api_id, api_hash https://my.telegram.org/apps 安装 Visual Studio 2022 的 C++ 环境 M$ Store 安装 Visual Studio https://apps.microsoft.com/detail/XPDCFJDKLZJLP8 选择 C++ 桌面开发环境 安装 Python https://www.python.org/downloads/ 安装 Git https://git-scm.com/download/win 建议你新建一个开发目录 比如 c:\dev\ 找个翻墙客户端 开 tun 模式 *  比如 nekoray 或者 clash-party(mihomo-party) 打开 "x64 Native Tools Command Prompt for VS 2022" 工具 开始菜单 在上面这个工具的命令行窗口中, 进入你的开发目录 cd c:\dev\ git clone forkgram的源代码 git clone --recursive https://github.com/forkgram/tdesktop.git 准备环境 在工具的命令行窗口中,  tdesktop\Telegram\build\prepare\win.bat * 这个过程时间比较长, 建议你设置电脑不休眠, 翻墙网络一直保持畅通. 生成 .sln 工程文件 在工具的命令行窗口中,  tdesktop\Telegram\configure.bat x64 -D TDESKTOP_API_ID= 你的api_id -D TDESKTOP_API_HASH= 你的api_hash 在 c:\dev\tdesktop\out 目录下, 找到 Telegram.sln 双击此文件, 应该会以 Visual Studio 打开. 接下来, 你可以使用你习惯的方式 编译项目, 生成可执行文件. * 这个过程时间比较长, 建议你设置电脑不休眠 编译结果在 c:\dev\tdeskt...

搭建电报关键词提醒机器人 telegram keyword monitor bot

图片
前几天 开发了一个电报关键词提醒机器人 已上传Github https://github.com/crazypeace/tg-keyword-monitor-bot 本文描述搭建过程. 首先, 你可以看看Github项目的readme, 那是一个从头到尾按操作顺序手把手的图文教程. 如果你觉得那篇教程有点云里雾里, 那么下面, 我换一个角度来描述. 系统架构 信息源 -> 采集者 -> 本程序 -> 发布者 -> 消费者 系统中的各部分 信息源 是 你想监听的各个tg群组, 频道 采集者 是 一个tg账户   * 推荐你注册一个新tg账户来玩. 本程序 是 本项目 main.py   * 本程序需要 api_id, api_hash. 需要到  https://my.telegram.org/apps 申请. 这里需要登录tg账户, 可以是 采集者同账户, 也可以是不同的账户.  发布者 是 一个tg机器人   * 本程序需要 bot_token, 需要向  https://t.me/BotFather 申请. 向 @BotFather 发起机器人申请的tg账户, 可以和前面同账户, 也可以是不同的账户. 消费者 是 接收关键字通知消息 的用户或群组或频道 本项目的运行环境 安装python 一般你用的比较新版本的操作系统 Debian / Ubuntu, 已经自带了.  略 安装 pip apt install -y python3-pip 拉取项目 apt install -y git git clone https://github.com/crazypeace/tg-keyword-monitor-bot cd tg-keyword-monitor-bot 安装python依赖 pip3 install -r requirements.txt --break-system-packages config.yaml.default 复制为 config.yaml 系统中各部分之间的关系 信息源 与 采集者 之间的关系 你自己登录 采集者账户 的身份, 加入信息源. 入群验证, 不公开群需要别人拉你, 需要管理员审批, ... 等等等等 这些问题, 需要你自己解决. ...

新手使用Debian 安装中文语言 设置主用中文 安装command-not-found 解决"命令找不到"的问题

图片
问题 经常遇到新手小白问下面这样的问题怎么解决. TL;DR apt update apt install -y command-not-found apt update sed -i 's/^# *\(zh_CN.UTF-8 UTF-8\)/\1/' /etc/locale.gen locale-gen 断开SSH连接, 重新SSH登录 export LANG=zh_CN.UTF-8 开始你的linux命令行操作.  效果 解释 安装 command-not-found apt update apt install -y command-not-found 要 command-not-found 起作用, 需要再更新一下 apt 软件源信息 apt update 安装中文语言 sed -i 's/^# *\(zh_CN.UTF-8 UTF-8\)/\1/' /etc/locale.gen locale-gen 要 command-not-found 起作用, 需要新建SSH会话 断开SSH连接, 重新SSH登录 设置系统使用中文语言 export LANG=zh_CN.UTF-8 ======== 后记 为什么我不让 export LANG=zh_CN.UTF-8 持久化? 首先, 将这个设置持久化的方法, google 或 gpt 随便一搜就有答案. 其次, 对于特别新手小白的人来说, 如果系统语言修改了, 以后在参考其它教程的时候, 显示内容与教程不一样, 会不会搞不明白了. ======== 在执行一键命令时的其它问题, 请参考 https://crazypeace.eu.org/2022/05/bash-curl-error.html

隐形眼镜 的 包装 和 直径 对使用的影响

图片
隐形眼镜 用了比较久的一段时间了. 今天我分享一下隐形眼镜 的 包装 和 直径 对使用的影响吧. 1. 盛装隐形眼镜 的"容器"的内边缘 爱尔康 库博光学 可以看到, 库博光学的边缘转角的角度更大, 而且边缘有一条小边向内延伸, 摸起来还有点刮手. 那 这样的边缘使得 用户 把镜片拿出来的过程, 需要更小心, 不要让镜片被 这个边 刮到. 而 爱尔康 没有这个问题. 博士伦 我手里目前没有实物, 我使用过的 博士伦 也是没有这个问题的. 2. 镊子取镜片时的角度 爱尔康 的 "容器" 的外型外形是水滴型, 如下: 水滴的尖的位置就方便镊子插进去取镜片, 如下: 库博光学 的"容器"的外形是个圆型, 如下: 所以镊子插入的角度会更陡, 也就更不方便夹取镜片. 3. 镜片的直径 爱尔康 水润 Alcon Dailies All Day Comfort 白盒 镜片直径 13.8mm (区别于 爱尔康 多水润 Alcon Dailies Aqua Comfort 蓝盒) 库博光学 清氧清/珂朗清 CooperVision clariti 镜片直径 14.1mm 就这 0.3mm 的差别, 就使得我的较小的那一只眼睛, 佩戴体验有明显的区别. 我的观点不是说直径小的就更好. 我是说, 不要小看隐形眼镜的参数的一点点差别, 多试试不同的品牌和型号, 找到适合你的那一个. 对于我自己而言, 目前看来 爱尔康 多水润 Alcon Dailies 就是比较好的选择, 又便宜又好用. 4. 其它参数 材质啊, 含水率啊, 透氧量啊, ... 我实际佩戴过程中, 眼睛的感觉没有明显的区别.

The Hot3 in Last 7 Days

隐形眼镜 的 包装 和 直径 对使用的影响

RackNerd VPS搭Xray Reality梯子 年付 $10.98 1G端口 3T流量 17G存储 1GB内存

商业化电报关键词提醒机器人 telegram keyword monitor bot