最新发布
-
趣味学习助手,比番茄钟还好用的工具 card-learner 一个融合艾宾浩斯遗忘曲线学习法与抽卡玩法的趣味Web应用 学习分心怎么办?当然一边分心一边学习,比番茄钟好用的学习工具! 🤖 AI 辅助开发 本程序在开发过程中使用了 DeepSeek AI 助手进行辅助: 📝 代码生成 ⚡ 优化建议 🔍 问题排查 🏗️ 架构设计 📚 文档编写 mm4tmigw.png图片 📖 项目简介 “趣味学习助手 - 抽卡大乐透” 是一个将学习管理与抽卡游戏相结合的创新性Web应用。用户通过学习积累“通量”货币,然后使用通量进行抽卡,有机会赢取更多通量。应用基于艾宾浩斯遗忘曲线模拟记忆值的变化,让学习过程更加科学有趣,最重要的是,无需数据库(比较没打算是大规模使用) ✨ 设计理念 游戏化学习:将枯燥的学习过程转化为有趣的游戏体验 科学记忆:基于艾宾浩斯遗忘曲线,真实模拟记忆规律 风险与回报:抽卡机制带来刺激感,平衡学习与娱乐 个性化定制:丰富的参数设置,适应不同学习习惯 mm4tn0j6.png图片 🎯 核心功能 👑 管理员系统 本程序内置强大的管理员后台,方便进行全局配置和用户管理: 登录方式:访问 /admin.php 进入管理员登录页 默认账号:admin 默认密码:123admin(首次登录后请及时修改) 管理员功能 功能模块具体功能🎰 卡池管理修改五大卡池的消耗通量、奖励范围、中奖概率、颜色标识⚙️ 全局参数调整遗忘速率、学习增益、通量获得/消耗速率等核心参数👥 用户管理查看用户列表、重置用户密码、禁用/启用用户账号📊 数据统计查看全站抽卡统计、活跃用户、通量总量等数据🔒 安全设置修改管理员密码、设置登录IP限制(可选)🧠 记忆管理系统 基于艾宾浩斯遗忘曲线公式:记忆值 = 初始值 × (1 - 遗忘速率 × log10(小时数)) 记忆值:0-100% 的动态数值,随时间自然衰减 学习模式: 📚 单纯学习:每秒增加记忆值(可自定义增益) 📝 背题模式:每秒增加记忆值 + 获得通量 ✏️ 刷题助手:随机生成题数,同时增加记忆值和通量 休息模式:记忆值按遗忘曲线衰减,消耗通量 离线计算:登录时自动计算离线期间的变化 🎰 抽卡大乐透系统 五大卡池 卡池消耗通量奖励范围中奖概率颜色🎴 普通卡池101-560%灰色✨ 稀有卡池506-2025%蓝色🌟 史诗卡池20021-5010%紫色💫 传说卡池50051-2004%橙色👑 神话卡池1000201-5001%粉色以上参数均可通过管理员后台自定义修改 特殊事件 ✨ 双倍奖励:5%概率获得双倍通量 🎰 超级大奖:1%概率获得10倍通量 🎁 保底机制:最低获得1通量 统计功能 总抽卡次数 总花费通量 总获得通量 净收益计算 抽卡历史记录 各卡池抽卡次数 👤 个人管理面板 记忆参数设置 遗忘速率:控制记忆衰减速度(默认0.56) 刷题记忆增益:每刷一题增加的记忆值(默认0.5%) 单纯学习增益:每秒增加的记忆值(默认0.008%/s) 背题模式增益:每秒增加的记忆值(默认0.012%/s) 通量设置 每秒增加通量:背题时通量增长速度(默认0.2/s) 每秒消耗通量:休息时通量消耗速度(默认1.0/s) 数据管理 手动修改学习时长、通量、记忆值 清空记忆曲线历史 清空抽卡记录 重置抽卡统计 危险操作 永久注销账号(需输入DELETE确认) 📊 实时监控 学习时长:实时计时,显示今日进度 通量显示:千进制格式化(k、M、G) 记忆值:实时更新,带等级描述 记忆曲线图表:可视化最近50次变化 抽卡统计:实时更新的抽卡数据 🎮 使用指南 新手入门 注册账号:点击“注册”标签,填写用户名和密码 初始资金:注册赠送100通量 了解界面:熟悉四个主要数据卡片 尝试抽卡:从普通卡池开始试手气 管理员入门 登录后台:访问 /admin.php,使用默认账号密码登录 修改密码:首次登录后立即修改管理员密码 配置参数:根据需求调整卡池和游戏参数 管理用户:查看用户列表,处理用户问题 进阶玩法 高效学习策略 开启背题模式:同时获得记忆值和通量 使用刷题助手:随机生成题数,获得额外收益 平衡学习与休息:避免记忆值过低 抽卡策略 保守型:专注普通卡池,稳定收益 进取型:尝试高级卡池,追求高回报 混合型:根据通量余额动态选择 参数调优 根据个人学习习惯调整: 遗忘速率:记忆力好的用户可调低 学习增益:学习效率高的用户可调高 通量速率:平衡学习和休息节奏 ⚙️ 技术细节 核心算法 艾宾浩斯遗忘曲线:根据经过的小时数计算记忆保持率,公式基于对数函数 记忆值变化计算:综合考虑遗忘衰减和学习增益,确保记忆值在0-100%范围内 离线时间计算:记录最后活动时间,登录时自动计算离线期间的变化 数据存储 用户列表:加密存储用户账户信息 用户数据:每个用户独立文件,JSON格式存储 管理员配置:独立配置文件存储全局参数 安全防护:文件头部添加防护代码,防止直接访问 安全特性 密码加密存储 输入数据过滤 Session会话管理 管理员登录验证 敏感操作日志记录 🎨 界面展示 主要界面 登录/注册页:简洁的双标签切换界面 主仪表盘:四个实时数据卡片 抽卡区:五大卡池展示,带颜色标识 学习控制区:模式切换按钮 个人管理面板:多标签设置界面 管理员后台:独立的参数配置和用户管理界面 交互特性 实时数据更新 抽卡结果弹窗动画 进度条动态变化 响应式设计,支持移动端 🔧 自定义配置 可配置参数 卡池参数:卡池名称、消耗通量、奖励范围、中奖概率、颜色 特殊事件:双倍奖励概率、超级大奖倍率、保底机制 学习参数:遗忘速率、各类学习模式的增益值 通量参数:每秒获得/消耗通量 管理员参数:后台登录密码、访问权限等 默认参数参考 遗忘速率:0.56 初始通量:100 单纯学习增益:0.008%/s 背题模式增益:0.012%/s 背题通量获得:0.2/s 休息通量消耗:1.0/s 管理员账号:admin 管理员默认密码:123admin 🚀 部署教程 环境要求 PHP 7.4 或更高版本 Web服务器(Apache/Nginx) 文件读写权限 部署步骤 下载源码:从GitHub仓库下载或克隆 上传文件:将全部文件上传到网站目录 设置权限:确保 data/ 目录有读写权限(777) 访问测试:通过浏览器访问网站首页 管理员后台:访问 /admin.php 登录管理 文件结构 card-learner/ ├── index.php # 主程序文件 ├── admin.php # 管理员后台 ├── data/ # 数据目录 │ ├── users.php # 用户列表 │ ├── config.php # 管理员配置文件 │ └── user_data/ # 用户数据文件 └── README.md # 说明文档 安全建议 首次登录管理员后台后立即修改默认密码 定期备份 data/ 目录下的所有文件 如非必要,不要将管理员账号密码告知他人 考虑设置IP访问限制(可选) 🤝 贡献指南 欢迎贡献代码、报告问题或提出新想法! Fork 项目 创建功能分支 提交更改 推送到分支 开启 Pull Request 开发规范 遵循编码规范 保持代码注释完整 确保向后兼容 更新相关文档 📝 更新日志 [1.0.0] 新增 完整的用户注册登录系统 基于艾宾浩斯曲线的记忆管理系统 五大卡池抽奖系统 个人管理面板 实时数据同步 管理员后台系统 卡池参数在线修改 用户管理功能 👨💻 作者 @fghdz 🙏 致谢 艾宾浩斯遗忘曲线理论 DeepSeek AI 辅助开发 如果这个项目对你有帮助,请给一个⭐️! -
Typecho插件故障,导致无法禁用,强制删除网站首页都进不去了? 一次 Typecho 插件故障的完整自救记录:从报错到恢复 🚑 前言 前两天,我的 Typecho 博客突然就挂了😱。罪魁祸首是一个叫 WebFirewall 的插件。这玩意儿出问题后,后台那个“禁用”按钮怎么点都没反应,最后整个博客直接摆烂,给我看这个报错: mlq56so3.png图片 call_user_func_array(): Argument #1 ($callback) must be a valid callback, class "TypechoPlugin\WebFirewall\WebFirewall" not found折腾了好几个小时,总算是把它给收拾服帖了。这篇就把我完整的排查和修复过程记录下来,万一你哪天也遇到这糟心事,希望能帮你省点时间⏰。 一、事情是怎么发生的?🤔 整个过程是这样的: 我装了个 WebFirewall 插件 这货可能跟我博客里别的插件八字不合,或者它自己就有 bug 我想去后台把它禁了,结果那个“禁用”按钮就是个摆设,点了一万遍都没反应 一刷新页面,好家伙,博客直接给我脸色看,白屏报错,前台后台都进不去了 当时的状态就是: ✅ 前台:无法访问(卒) ✅ 后台:也进不去(双卒) ✅ 插件文件:虽然还在,但已经是个废物了 ✅ 禁用按钮:彻底失灵 二、试试“曲线救国 注意,请异地导出你的数据库再进行以下操作 2.1 上传一个“空壳”插件 当你强制删除了WebFirewall,报错不是说找不到 WebFirewall 这个类吗?那我给它一个不就完了! 在 /usr/plugins/WebFirewall/ 目录下创建一个 Plugin.php 文件,里面就写这几行: <?php if (!defined('__TYPECHO_ROOT_DIR__')) exit; class WebFirewall_Plugin {}上传,刷新网站——报错依然坚挺。 这说明问题根子不在文件里,而是在数据库里。 三、直捣黄龙,查数据库!🔍 3.1 登录数据库 我用的是 1Panel 面板,直接点进 phpMyAdmin 就是干。 3.2 找到关键线索表 Typecho 的插件信息都藏在 typecho_options 表里,最关键的一行是 name = 'plugins'。 点开看 value 字段,好家伙,一串长长的序列化字符串,里面果然有料: ...s:10:"WebFirewa";a:1:{s:13:"activated";b:1;s:7:"version";s:5:"1.0.0";}... 看到了吧,数据库里还死死记着这个插件是“已激活”状态呢! 3.3 地毯式搜索,不留死角 为了清干净,我执行了 SQL 语句,看看还有哪儿藏着它: SELECT * FROM typecho_options WHERE value LIKE '%WebFirewa%';结果发现: plugins 字段里有它 panelTable 字段里居然也有它的影子 四、终极清理,一招制敌 💪 4.1 清空插件列表(最暴力也最有效) 直接把 name = 'plugins' 那一行的 value 改成: a:0:{}这串代码的意思就是“没有任何启用的插件”。简单粗暴,但有效! UPDATE typecho_options SET value = 'a:0:{}' WHERE name = 'plugins';4.2 清理 panelTable 里的残留 UPDATE typecho_options SET value = REPLACE(value, 's:10:"WebFirewa";a:1:{s:13:"activated";b:1;s:7:"version";s:5:"1.0.0";}', '') WHERE name = 'panelTable' AND value LIKE '%WebFirewa%';4.3 见证奇迹的时刻✨ 修改完数据库,怀着激动的心,颤抖的手,刷新博客首页——恢复了!恢复了! 我的博客又回来了! 五、打扫战场,收尾工作 🧹 5.1 重新启用插件 赶紧登录后台 → 插件管理,把我之前用的那些正经插件(比如 pScaleUpPlus、AutoSlug 这些)重新启用起来。谢天谢地,配置都还在,不用重新设置。 六、吃一堑,长一智的经验总结 📝 6.1 插件故障时,UI 按钮就是个弟弟 插件自己都挂了,它那个“禁用”按钮的代码根本跑不起来。这时候: ✅ 直接操作数据库,那才是最根本的解决方案 ❌ 死磕后台那个按钮,只会让你怀疑人生 七、给兄弟姐妹们的几句心里话 ❤️ 数据库一定要定期备份! —— 这玩意儿关键时刻能救你老命 插件这玩意儿,够用就行,别贪多 —— 每多一个插件,就多一个潜在的雷 学会直接操作数据库 —— 这是绕过所有 UI 故障的终极大招,值得拥有 结语 这次故障从发生到解决,前前后后花了差不多半天。虽然过程挺折腾人的,但也让我对 Typecho 的插件原理、数据库结构、以及缓存策略这些,都有了更深的理解。 如果你也遇到类似的倒霉事儿,希望这篇文章能给你指条明路,少走点弯路。 有啥问题或者想交流的,欢迎在下面留言!👇 -
【AI】使用deepseek来美化你的文章/GitHub的README ✨ 一句话魔法:让AI瞬间美化你的Markdown博客! 还在为博客排版头疼吗?手动调整格式、绞尽脑汁想生动表达的日子结束啦!🎉 现在,只需一句神奇指令,就能让你的DeepSeek助手帮忙搞定一切,简直像拥有了一个专属排版小精灵!🧚♂️ 🤔 为什么要让AI帮忙美化? 省时省力 ⏰:再也不用花费大量时间手动调整格式、寻找合适的Emoji。 风格统一 🎨:AI能让你的文章风格更一致,阅读体验Up!Up! 灵感激发 💡:那些你没想到的生动表达和趣味元素,AI可能帮你“变”出来。 专注内容 ✍️:你可以更专注于思考要写的内容,而不是纠结怎么写好看。 🪄 那句“神奇指令”是什么? 核心指令其实很简单,就像下面这样: 请帮我美化下面这篇文章,要求: - 口语化一点,像真人博主在说话 - 多加点 emoji,让文章更生动 - 不要 AI 味,要像人写的 - 保持 Markdown 格式 文章内容: [在这里贴上你的草稿]🚨 但是!有个大坑要避开 如果你和我一样,经常要在文章里贴代码块,那上面这个基础版指令可能会翻车💥 为啥?因为Markdown渲染器看到三个反引号就会自动干活,把代码块给渲染了。结果就是:你想分享给别人的教程里,代码块被UI吃掉,格式全乱套😱 🛡️ 终极防渲染版魔法指令 经过无数次踩坑,我终于总结出了这个百发百中的终极版指令: 请帮我美化以下内容,要求生成Markdown.md的原格式文件: 【风格要求】 - 口语化,像真人博主在唠嗑 - 多放 emoji,让文章活起来 - 避免 AI 味,要像人写的 【防渲染规则】 - 所有代码块一律用 [code] 标签包裹 - 严禁使用三个反引号 - 如果代码内容里包含 "[code]",请用 [\code] 转义 【交付要求】 成Markdown.md的原格式文件 以下是需要处理的内容: [在这里粘贴你的原文]🎯 实战案例 假设你要写一篇Typecho插件故障修复的文章: [code] 用户:请帮我写一篇Typecho插件故障修复的教程,用上面的防渲染指令 AI: 💡 更多实用变体 极简版 帮我处理以下内容: - 口语化 + emoji - 代码用 [code] 代替反引号 - 最后给替换回来的版本批量处理版 我有10篇技术文章需要美化,要求: - 统一风格,带点幽默感 - 适当加 emoji - 所有代码块用 [code] 包裹 - 每篇最后都给一个替换回来的版本⚠️ 避坑指南 一定要说清楚防渲染规则:别指望AI默认就知道要用[code] 别忘了要替换版:最后不给反引号版本,你拿到[code]还得自己手动换 特殊字符要转义:如果代码里本身就有[code],记得说清楚 然后,你后台自己把AI给你的[code],替换成你的 (1`) [code] 请美化以下内容,口语化+emoji,代码用[code]包,最后给替换版:[粘贴内容] [/code] 1```html 请美化以下内容,口语化+emoji,代码用[code]包,最后给替换版:[粘贴内容] 1``` 把 1 全掉喵,要是我打了1又被渲染了 写在最后 这套魔法指令我已经帮好多人解决过排版问题了,只要你照着用,保证让你的博客文章又好看又好用! 有啥问题随时问我~ 😎 -
一键使用远程火狐浏览器来上Google来查收录情况 🦊 火狐浏览器还能这么玩?在服务器上跑个远程版,真香!🔥 大家熟知的 Firefox(火狐),其实还可以塞进服务器里,通过 VNC 远程访问。 简单说就是:你控制的是一个住在云端的浏览器 🌐 原仓库地址 下载地址:https://github.com/jlesage/docker-firefox 提取码: ❓ 这玩意儿能干吗?为啥不直接用电脑浏览器? 好问题!一开始我也觉得多此一举,直到发现一个神仙用法: 如果你的服务器在境外,那这个远程火狐就可以直连 Google, 不需要任何 VPN、代理,嗖的一下就能打开Google 搜索、Google Console, 检查博客收录、看 Search Console 数据,就跟在本地用一样丝滑~ 💨 mljjpbi3.png图片 👉 相当于你拥有一个永不关机的海外浏览器,随时掏出来用 VNC 连上去干活! 🚀 一键 Run 起来 先把容器环境准备好,然后执行下面这行命令 👇 docker run -d \ --name=firefox \ -p 5800:5800 \ -v /docker/appdata/firefox:/config:rw \ -e ENABLE_CJK_FONT=1 \ -e LANG=zh_CN.UTF-8 \ jlesage/firefox🧩 参数都是干啥的?拆开看看! 参数作用备注-e TZ=Asia/Hong_Kong设置时区避免时间错乱 🕒-e DISPLAY_WIDTH=1920 -e DISPLAY_HEIGHT=1080分辨率想要 4K?自己改数字~-e KEEP_APP_RUNNING=1保持运行关了浏览器窗口也不退出 ✅-e ENABLE_CJK_FONT=1中文字体支持告别乱码,舒服看中文 📝-e LANG=zh_CN.UTF-8界面语言设置成中文(舒服!)-e SECURE_CONNECTION=1启用 HTTPSWeb 访问更安全 🔒-e VNC_PASSWORD=adminVNC 密码自己改个复杂点的!-p 5800:5800HTTP 访问端口浏览器里打开网页版界面 🌍-p 5900:5900VNC 端口用 VNC 客户端连上来-v /data/firefox/config:/config:rw挂载配置目录书签、密码全存下来,重启不丢 💾--shm-size 2g共享内存跑复杂页面不卡,给足 2G 🧠🛡️ 防火墙小贴士 如果你只想本机访问,不想暴露到公网,可以把端口映射改成: -p 127.0.0.1:5800:5800 这样只有服务器自己才能连,更安全 👍 🎉 最后说两句 这种“云端火狐”其实还有很多玩法: 跑自动化脚本(搭配 Selenium) 多人共享一个浏览器环境 临时需要一个干净的浏览器,不想装软件 总之,一旦用上就回不去了 😎 你也赶紧试试吧,有问题欢迎留言交流~ -
把1panel的Docker 导出到宝塔的Docker 🐳 救命!从1panel搬家到宝塔,Docker折腾死我了!😫 今天也不知道哪根筋搭错了🤪,看着1panel那个面板越看越不顺眼,突然就想:换!马上换宝塔! 💢 📦 第一步:从1panel导出 1️⃣ 打开你的1panel面板 2️⃣ 找到 容器 → 更多 → 制作镜像 mli08umo.png图片 3️⃣ 【敲黑板!重点来了!】 🚨 1.点开 容器 → 更多 → 数据卷 2.找到挂载点,瞅一眼存档位置在哪 👀 3.然后——把所有数据卷全部压缩下载导出! 一个都别落下!💾 mli06g35.png图片 💡 别问我为啥要这一步,问就是踩过坑了😭🚚 第二步:宝塔那边怎么搞? 1️⃣ 打开你的宝塔面板 2️⃣ Docker → 镜像 → 导入镜像(把刚刚1panel导出的镜像扔进去) mli0f080.png图片 3️⃣ 创建容器 —— 这一步应该不用教了吧?🤔 4️⃣ 【第二个重点!拿小本本记下来!】 📝 Docker → 存储卷 🔍 找到你那个项目的地址 开一个新窗口,文件管理直接输入路径 mli079po.png图片 把1panel导出的文件,一股脑全覆盖进去! 💪 mli0851e.png图片 5️⃣ 【最后一步!】 重启!重启!重启! 重要的事情说三遍!🔄 🎉 搞定! 折腾了一下午,终于搞定了... 看着宝塔那个熟悉的面板,突然觉得——还是原来的配方,还是熟悉的味道~ 🥰 📌 划重点总结: ✅ 1panel导出:镜像 + 数据卷 ✅ 宝塔导入:镜像 → 容器 → 覆盖存储卷 → 重启 ❌ 别偷懒只导镜像,不然数据没了哭都来不及😱 🤔 等等,我好像悟了... 话说回来,宝塔导1panel,1panel导宝塔,不都是Docker吗? 这玩意儿难道还能有差别?🧐 💣 其实真相是这样的 很多人(包括博主本人)一开始都以为: Docker镜像 = Ghost备份 💿Ghost: 整个C盘给你端走,注册表、文档、桌面壁纸、甚至你八百年前忘删的迅雷安装包,全在里面躺着。 Docker镜像: 呵,想多了🙃 你只是把“刚装好系统的那一刻”打包了。 你后来存的论文📄、下的电影🎬、浏览器收藏夹🔖,全在另一个分区——也就是数据卷里,压根没跟你走。 🔄 所以正确的搬家姿势其实是: 🏠 1panel → 宝塔 1panel端: ✅ 导出镜像 ✅ 导出存储卷 宝塔端: ✅ 导入镜像 ✅ 导入存储卷 🏢 宝塔 → 1panel 反过来也一样: ✅ 宝塔导出镜像 ✅ 宝塔导出存储卷 ✅ 1panel导入镜像 ✅ 1panel导入存储卷