From c9cae532150cbf407acd3773c7e62dc121afb993 Mon Sep 17 00:00:00 2001 From: david-ajax Date: Fri, 26 Dec 2025 00:57:07 +0800 Subject: [PATCH] =?UTF-8?q?style:=20=E5=88=A0=E9=99=A4=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E5=A4=9A=E4=BD=99=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 ++++----- src/heurams/interface/screens/dashboard.py | 8 -------- src/heurams/interface/screens/memorizor.py | 6 ------ src/heurams/interface/screens/preparation.py | 10 +--------- src/heurams/interface/widgets/cloze_puzzle.py | 1 - 5 files changed, 5 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index 1b3ef80..c5fb8d1 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ - 0.1.x: 命令行操作的调度器. - 0.2.x: 使用 Textual 构建富文本终端用户界面, 项目可行性验证, 采用 SM-2 原始算法, 评估方式为用户自评估的原型. - 0.3.x: 简单的多文件项目, 创建了记忆内容/算法数据结构, 基于 SM-2 改进算法的自动复习测评评估. 重点设计古诗文记忆理解功能, 以及 TUI 界面实现, 简单的 TTS 集成. -- 0.4.x: 使用模块管理解耦设计, 增加文档与类型标注, 采用上下文设计模式的隐式依赖注入与遵从 IoC, 注册器设计的算法与功能实现, 支持其他调度算法模块 (SM-2, FSRS) 与谜题模块, 采用日志调试, 更新文件格式, 引入动态数据模式(宏驱动的动态内容生成), 与基于文件的策略调控, 更佳的用户数据处理, 加入模块化扩展集成, 将算法数据格式换为 json 提高性能, 采用 provider-service 抽象架构, 支持切换服务提供者, 整体兼容性改进. +- 0.4.x: 使用模块管理解耦设计, 增加文档与类型标注, 采用上下文设计模式的隐式依赖注入与遵从 IoC, 注册器设计的算法与功能实现, 支持其他调度算法模块 (SM-2, SM-15M, FSRS) 与谜题模块, 采用日志调试, 更新文件格式, 引入动态数据模式(宏驱动的动态内容生成), 与基于文件的策略调控, 更佳的用户数据处理, 加入模块化扩展集成, 将算法数据格式换为 json 提高性能, 采用 provider-service 抽象架构, 支持切换服务提供者, 整体兼容性改进. > 下一步? > 使用 Flutter 构建酷酷的现代化前端, 增加云同步/文档源服务... @@ -20,7 +20,7 @@ ### 间隔迭代算法 > 许多出版物都广泛讨论了不同重复间隔对学习效果的影响. 特别是, 间隔效应被认为是一种普遍现象. 间隔效应是指, 如果重复的间隔是分散/稀疏的, 而不是集中重复, 那么学习任务的表现会更好. 因此, 有观点提出, 学习中使用的最佳重复间隔是**最长的、但不会导致遗忘的间隔**. -- 采用经实证的 SM-2 间隔迭代算法, 此算法亦用作 Anki 闪卡记忆软件的默认闪卡调度器 +- 采用经实证的 SM-2 与更先进的 SM-15M, FSRS 间隔迭代算法, 前者亦用作 Anki 闪卡记忆软件的默认闪卡调度器 - 动态规划每个记忆单元的记忆间隔时间表 - 动态跟踪记忆反馈数据, 优化长期记忆保留率与稳定性 @@ -30,7 +30,7 @@ - 自然语音: 集成微软神经网络文本转语音 (TTS) 技术 - 多种谜题类型: 选择题 (MCQ)、填空题 (Cloze)、识别题 (Recognition) - 动态内容生成: 支持宏驱动的模板系统, 根据上下文动态生成题目 -- 云同步支持: 通过 WebDAV 协议同步数据到远程服务器 +- 云同步支持: 通过多种 (如 WebDAV) 协议同步数据到远程服务器 ### 实用用户界面 - 响应式 Textual 框架构建的跨平台 TUI 界面 @@ -40,9 +40,8 @@ ### 架构特性 - 模块化设计: 算法、谜题、服务提供者可插拔替换 - 上下文管理: 使用 ContextVar 实现隐式依赖注入 -- 数据持久化: TOML 配置与内容, JSON 算法状态 +- 宏支持: 支持动态配置内容与自动化 - 服务抽象: 音频播放、TTS、LLM 通过 provider 架构支持多种后端 -- 完整日志系统: 带轮转的日志记录, 便于调试 ## 安装 diff --git a/src/heurams/interface/screens/dashboard.py b/src/heurams/interface/screens/dashboard.py index 38b0d1d..8fb53f1 100644 --- a/src/heurams/interface/screens/dashboard.py +++ b/src/heurams/interface/screens/dashboard.py @@ -70,8 +70,6 @@ class DashboardScreen(Screen): electron_dir = config_var.get()["paths"]["electron_dir"] electron_file_path = pathlib.Path(electron_dir) / f"{filestem}.json" - logger.debug(f"电子文件路径: {electron_file_path}") - # 确保电子文件存在 if not electron_file_path.exists(): electron_file_path.touch() @@ -79,16 +77,12 @@ class DashboardScreen(Screen): # 加载电子数据 electron_dict = load_electron(path=electron_file_path) - logger.debug(f"电子数据: {electron_dict}") - # 分析电子状态 is_due = 0 is_activated = 0 nextdate = 0x3F3F3F3F for electron in electron_dict.values(): - logger.debug(f"{electron}, 是否到期: {electron.is_due()}") - if electron.is_due(): is_due = 1 if electron.is_activated(): @@ -102,8 +96,6 @@ class DashboardScreen(Screen): electron_count = len(electron_dict) is_more = not (electron_count >= nucleon_count) - logger.debug(f"是否需要更多复习: {is_more}") - # 更新状态 self.nextdates[filename] = nextdate self.stay_enabled[filename] = is_due or is_more diff --git a/src/heurams/interface/screens/memorizor.py b/src/heurams/interface/screens/memorizor.py index 9bf03f7..186fe48 100644 --- a/src/heurams/interface/screens/memorizor.py +++ b/src/heurams/interface/screens/memorizor.py @@ -61,26 +61,20 @@ class MemScreen(Screen): def puzzle_widget(self): try: - logger.debug(self.phaser.state) - logger.debug(self.procession.cursor) - logger.debug(self.atom) self.fission = Fission(self.atom, self.phaser.state) puzzle_debug = next(self.fission.generate()) - # logger.debug(puzzle_debug) return shim.puzzle2widget[puzzle_debug["puzzle"]]( atom=self.atom, alia=puzzle_debug["alia"] ) except (KeyError, StopIteration, AttributeError) as e: logger.debug(f"调度展开出错: {e}") return Static("无法生成谜题") - # logger.debug(shim.puzzle2widget[puzzle_debug["puzzle"]]) def compose(self) -> ComposeResult: yield Header(show_clock=True) with ScrollableContainer(): yield Label(self._get_progress_text(), id="progress") - # self.mount(self.current_widget()) # type: ignore yield ScrollableContainer(id="puzzle-container") # yield Button("重新学习此单元", id="re-recognize", variant="warning") yield Footer() diff --git a/src/heurams/interface/screens/preparation.py b/src/heurams/interface/screens/preparation.py index 37de55f..a2b9b8c 100644 --- a/src/heurams/interface/screens/preparation.py +++ b/src/heurams/interface/screens/preparation.py @@ -65,14 +65,6 @@ class PreparationScreen(Screen): yield Markdown(self._get_full_content().replace("/", ""), classes="full") yield Footer() - # def watch_scheduled_num(self, old_scheduled_num, new_scheduled_num): - # logger.debug("响应", old_scheduled_num, "->", new_scheduled_num) - # try: - # one = self.query_one("#schnum_label") - # one.update(f"单次记忆数量: {new_scheduled_num}") # type: ignore - # except: - # pass - def _get_full_content(self): content = "" for nucleon, orbital in self.nucleons_with_orbital: @@ -129,7 +121,7 @@ class PreparationScreen(Screen): left_new -= 1 if left_new >= 0: atoms_to_provide.append(i) - logger.debug(f"ATP: {atoms_to_provide}") + logger.debug(f"传入原子对象: {atoms_to_provide}") from .memorizor import MemScreen memscreen = MemScreen(atoms_to_provide) diff --git a/src/heurams/interface/widgets/cloze_puzzle.py b/src/heurams/interface/widgets/cloze_puzzle.py index 9d8c001..7b31dbf 100644 --- a/src/heurams/interface/widgets/cloze_puzzle.py +++ b/src/heurams/interface/widgets/cloze_puzzle.py @@ -71,7 +71,6 @@ class ClozePuzzle(BasePuzzleWidget): for i in self.ans: self.hashmap[str(hash(i))] = i btnid = f"sel000-{hash(i)}" - logger.debug(f"建立按钮 {btnid}") yield Button(i, id=f"{btnid}") yield Button("退格", id="delete")