ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Joplin GSoC 2023 项目提案全解:九个开发方向、选题建议与源码落点

Joplin GSoC 2023 项目提案全解:九个开发方向、选题建议与源码落点 Joplin GSoC 2023 项目提案全解九个开发方向、选题建议与源码落点【免费下载链接】joplinJoplin - the privacy-focused note taking app with sync capabilities for Windows, macOS, Linux, Android and iOS.项目地址: https://gitcode.com/GitHub_Trending/jo/joplin本文为 Joplin 参加 2023 年 Google Summer of Code第三次参与时官方发布的九个项目提案做逐条拆解结合开源仓库中的实际源码目录与实现文件说明每个提案对应的技术现状、预期产出与难度要求。读完后你将清楚这些提案分别落在 Joplin 的哪个代码区域、需要具备哪些技能栈以及如何按照官方规范完成选题、沟通与 Pull Request 提交。一、2023 年的总体主题与提案机制Joplin 在 2023 年第三次参加 GSoC。官方在 GSoC 2023 提案文档 中明确文档中列出的条目全部是提案proposals官方欢迎学生提出文档之外的新想法但前提是尽早与导师mentor取得联系并确认项目在 Joplin 的范围内且具备可行性。当年的选题主题有四类Plugins插件——利用 Joplin 插件 API 添加新能力External apps外部应用——利用 Joplin 公开 API 创建外部应用Independent modules独立模块——在核心应用内创建自包含的模块学生自提想法welcome to suggest your own ideas。官方在贡献者须知中特别强调这些想法来自开发者与用户有时模糊或不完整如果基于某个想法提交申请应主动联系开发者了解更多细节。官方还直接点明单纯复制粘贴文档里的想法是无法通过评审的而被录取的贡献者通常是对所提项目技术做了彻底调研、并与潜在导师保持频繁沟通的人。与提案配套的两份文档值得与本文配合阅读GSoC 2023 总览规定了技术栈——新应用或插件一律使用TypeScriptUI 使用React/Redux新组件要求使用 React Hooks样式使用SASS桌面端基于Electron移动端基于React Native且所有应用共享同一套本地运行的 TypeScript/JavaScriptNode.js后端Pull Request 规范只允许同时开一个 PR、PR 必须附带单元测试、不接受 WIP 状态、禁止 force push、不得自行创建 issue 再提交修复等硬性规则。下表汇总九条提案的难度、技能要求与预估工时文档中仅部分条目标注了工时编号提案难度技能要求预估工时1移动端插件系统高TypeScript, React Native350 小时2桌面端无缝自动更新中TypeScript, React, Electron/electron-builder175 小时3改进 PDF 导出中TypeScript, JavaScript350 小时4桌面端集成测试高TypeScript, JavaScript, Electron350 小时5OCR 插件高JavaScript, 图像处理未标注6移动端语音转文字高JavaScript, React Native未标注7PDF 批注高JavaScript未标注8插件检查器inspector高JavaScript, Electron未标注9模板插入工具高JavaScript, Windows/macOS 编程未标注二、提案 1移动端插件系统Plugin system on mobile文档原文要点插件系统当时只在桌面端和 CLI 端可用官方判断移动端也可以支持但需要两方面工作——让插件 API 在移动端兼容以及增加加载插件的机制。预期产出是允许在移动端加载并运行插件难度高要求 TypeScript 与 React Native预估 350 小时。源码落点插件机制的桌面端实现位于 插件服务目录这是移动端要对齐的主要对象官方示例插件 ToggleSidebars 展示了插件的最小工程结构含 manifest、TypeScript 源码与资源可作为研究插件 API 的起点移动端应用整体位于 app-mobile 包从目录结构看它由components/约 257 个 React Native 组件文件、utils/、locales/与 Android/iOS 原生工程组成插件加载机制若落地需要在这套 React Native 环境中运行插件沙箱这正是文档所说API 兼容性工作的难点所在。从源码结构看提案的合理性在于桌面端已经验证了插件作为隔离进程运行的模式移动端要复用它核心挑战是把 Electron 下的进程隔离方案替换为 React Native 环境下的等价机制。三、提案 2桌面端无缝自动更新Seamless desktop application updates文档原文要点当时的更新流程是弹窗提示 → 用户点击 Download → 打开默认浏览器下载安装包 → 手动运行安装程序体验割裂。期望改进为三点安装程序在后台自动下载下次启动时自动完成安装至少覆盖Windows 与 macOSLinux 因发行版分发方式差异可能特殊处理。预期产出还要求探索live update免重启热更新是否可行以及在用户正在使用文件的情况下如何替换文件、如何解决冲突。难度中等要求 TypeScript、React以及对 Electron 和 electron-builder 的了解预估 175 小时。源码落点这条提案在当前仓库中已有对应实现主体可作为提案如何演进为实际代码的范本AutoUpdaterService.ts 是基于electron-updater的自动更新服务。其中可以看到与提案高度呼应的三个开关enableAutoDownload发现更新后自动下载、autoInstallOnAppQuit用户关闭应用时自动安装已下载的更新、以及AutoUpdaterEvents事件枚举UpdateAvailable、DownloadProgress、UpdateDownloaded等完整覆盖了后台下载 启动/退出时安装的交互链路同文件中定义了平台-架构到版本清单文件的映射supportedPlatformAssetsdarwin的x64/arm64分别对应latest-mac.yml/latest-mac-arm64.ymlwin32的x64/ia32对应latest.yml——这正是提案中至少支持 Windows 和 macOS在代码层面的体现见 第 28-37 行检查更新的主入口在 checkForUpdates.ts它从远端发布清单接口拉取 release 列表并比较版本第 27-37 行并用 KvStore 维护已跳过版本列表避免对同一旧版本反复提示该服务配有单元测试 AutoUpdaterService.test.ts符合 GSoC PR 规范中必须附带单元测试的要求。四、提案 3改进 PDF 导出Improve PDF export文档原文要点Joplin 当时使用 Chrome 内置的 print-to-PDF 能力功能受限。改进思路是改用第三方库把笔记转换为 PDF适用范围为桌面端与 CLI 端。文档列出了三项潜在收益将多篇笔记导出为单个 PDF嵌入附件原文引用了一个 GitHub issue 讨论延迟导出直到笔记渲染完成方便插件先把内容渲染好再导出。预期产出是PDF 导出不再依赖 Chrome print-to-pdf难度中等要求 TypeScript/JavaScript预估 350 小时。源码落点桌面端调用打印能力的桥接入口在 InteropServiceHelper.ts 中可检索printToPDF相关调用说明走 Chromium 打印管线的现状确实存在于此CLI 端则共享同一套joplin/lib后端见 lib 包任何导出管线的改造都需要同时照顾两端。这条提案的价值点在于导出质量字体嵌入、分页、多笔记合并、附件图片内联本质上是一个独立于 UI 的渲染管线问题适合作为独立模块主题下的高内聚项目。五、提案 4桌面端集成测试Desktop application integration testing文档原文要点桌面端前端当时只有一些针对 React hooks 和工具函数的单元测试没有集成测试来验证某个组件的改动没有破坏另一个组件。项目内容是搭建桌面应用的集成测试体系并完成 setup、再写若干测试证明体系可用。预期产出包括对自动化测试方法的掌握以及至少覆盖一部分应用文档点名了Markdown 编辑器与 WYSIWYG 编辑器。难度高要求 TypeScript、JavaScript、Electron预估 350 小时。源码落点这条提案在当前仓库中留下了非常完整的落地痕迹几乎可以视为该提案或同类提案成果的直接延续Playwright 配置 playwright.config.ts 将testDir指向./integration-tests只匹配*.spec.ts开启fullyParallel并行注释说明每个 Joplin 实例使用独立 profile 目录以避免状态串扰CI 上失败重试 2 次、单 worker 串行执行并对 CI 机器放宽了超时测试 70s、断言 15s本地 60s/5s失败重试时自动收集 tracetrace: on-first-retry集成测试目录 中的用例与文档点名的目标高度吻合markdownEditor.spec.tsMarkdown 编辑器、richTextEditor.spec.tsWYSIWYG 编辑器以及pluginApi.spec.ts插件 API 场景、noteList.spec.ts、sidebar.spec.ts、settings.spec.ts、multiWindow.spec.ts、wcag.spec.ts无障碍等十余个 spec 文件并配有 CI 运行脚本run-ci.sh桌面端单测与集成测并存的结构顶层app.test.ts、app.reducer.test.ts等 Jest 单测 上述 Playwright 集成测试恰好对应文档中单元测试 集成测试双层验证的设想。从源码结构看这套 Playwright 体系正是对真实启动的 Electron 应用做端到端验证的典型实现是研究该提案从 0 到 1 如何落地的最佳参照。六、提案 5OCR 插件OCR plugin文档原文要点通过 Tesseract 库为 Joplin 增加 OCR 能力。第一步是可行性评估——把库集成进桌面应用并成功识别一张图片。OCR 应实现为桌面应用的一个服务从图片中提取文字并以纯文本形式追加到笔记中。预期产出是一个能从图片提取文字并附到笔记上的桌面插件。难度高要求 JavaScript 与图像处理。源码落点这条提案在后来的版本中演进为内置 OCR 服务当前仓库中可以对照OcrService.ts 位于共享后端joplin/lib中印证了OCR 作为服务的设计方向——服务放后端而不是某个 UI 层桌面/CLI 才能复用OcrDriverTesseract.ts 基于tesseract.js按语言维护 worker 池workers_: Recordstring, WorkerWrapper[]并设置了置信度阈值minConfidence第 37 行源码注释记录了阈值从 70 调整到 55 的实验过程是识别结果过滤这一 OCR 工程细节的真实案例用户侧文档见 OCR 使用说明。对想复现该提案的学生而言这个演进路径说明了官方期待的先评估可行性再服务化的路线先在桌面端打通 Tesseract 识别链路再抽象为可测试的 driver/service 结构。七、提案 6移动端语音转文字Voice to text on mobile文档原文要点在移动端增加语音转文字能力。交互描述很具体打开笔记 → 选择Voice to text功能 → 开始录音 → 音频自动转成文字并追加到笔记。难度高要求 JavaScript 与 React Native。源码落点当前仓库存在独立的语音输入包 whisper-voice-typing从目录结构看它同时提供了 AndroidKotlin、iOS 桥接头文件与 C 核心cpp/下含 Whisper 相关实现并通过nitro.json配置跨平台绑定——这表明移动端本地语音转写方向已经从提案演进为仓库内的独立原生模块其跨平台架构JS 层 原生桥接 C 核心正是当年提案落地后最值得研究的形态。移动端集成点则位于 app-mobile 的 React Native 组件树中。八、提案 7PDF 批注PDF annotations文档原文要点为桌面端的 beta PDF 查看器增加批注功能工具形态参照 Apple Preview在 PDF 上自由绘制、添加文本框、画线与箭头等且批注必须保存到文件中。难度高要求 JavaScript。源码落点PDF 查看器是一个独立的渲染端 pdf-viewer 包包含PdfDocument.ts文档加载与源处理、Page.tsx单页渲染含textLayer.css文本层、VerticalPages.tsx、FullViewer.tsx与miniViewer.tsx完整/内嵌两种查看形态并有 pdfSource.test.ts 验证 PDF 源逻辑。批注保存到文件意味着不能只在查看器层画 overlay而需要把标注写回 PDF 字节流——这是该提案的核心技术难点也是其被定为高难度的原因。九、提案 8插件检查器Plugin inspector文档原文要点利用 Electron 可以检查其派生子进程的 API监控每个插件的 CPU、内存等资源占用并且当某个插件在较长时间内占用过多资源时在应用内弹出告警。预期产出三件一个与 Electron API 交互、收集插件进程信息的模块一个展示插件列表及 CPU/内存信息的窗口一个资源超限告警机制。难度高要求 JavaScript 与 Electron。源码落点插件在桌面端以独立进程运行服务位于 services/plugins主进程负责拉起与回收这些子进程因此从 Electron 主进程枚举子进程并采样资源的 API 触达点在 app-desktop 主进程 一侧已经具备基础检查器要做的增量工作是把每个插件进程与其资源指标关联起来、周期性采样并在 UI 层React呈现列表与告警。从源码结构看这是一个典型的Electron 主进程能力 前端展示的跨层项目与 2023 年Independent modules主题契合。十、提案 9模板插入工具Template insertion tool文档原文要点Joplin 可以把通用模板存为笔记用于各种上下文如插入 Thunderbird 邮件的代码片段、插入文本编辑器。文档给出的交互流程是用户在任意文本编辑器邮件客户端、代码编辑器等中按下全局快捷键例如CtrlAltT弹出一个浮动窗口用户从中选择一个笔记选中后笔记内容被插入到当前文本编辑器中。预期产出说明这可以作为外部应用开发也可能并入核心应用但核心需要相应改造至少要在 Windows 与 macOS 上工作。难度高要求 JavaScript 与 Windows/macOS 编程。源码落点这条提案直接落在 2023 年的External apps主题上——通过 Joplin 公开 API 与 Joplin 数据交互、但自身独立运行的应用形态。仓库中的 app-clipper 包带manifest.json、service_worker.mjs的浏览器扩展是外部应用通过 Joplin API 集成的一个现实样例展示了外部客户端与 Joplin 通信的工程骨架。而提案本身的难点在操作系统层全局热键监听、无焦点浮动窗口、以及把文本注入目标编辑器的剪贴板/模拟输入方案都超出 Web 技术栈需要平台编程能力这也是其技能要求中特别列出 Windows/macOS 编程的原因。十一、从提案文档看选题方法九条提案虽然方向各异但官方文档的写法本身传递了几条选题方法值得归纳每条提案都给出可验收的 Expected Outcome——例如提案 2 明确到下次启动时后台完成安装、提案 6 明确到录音自动转写并追加进笔记。写自己的提案时应把完成定义到这种粒度而不是停留在改进更新体验这类模糊表述难度与工时匹配——175 小时的条目提案 2只要求中等难度且复用 Electron 成熟生态350 小时的条目要么是平台级改造移动端插件、PDF 导出管线要么需要建设新体系集成测试。学生应据此评估自己的时间预算技能要求都锚定仓库技术栈——TypeScript 是基线Electron桌面、React Native移动、图像处理/平台编程专项。对照 GSoC 2023 总览中的技术栈规定任何偏离该栈的语言选择都必须在提案中专门说明理由流程约束要提前内化——PR 规范要求同一时间只能有一个 PR、必须附单元测试、禁止 WIP 与 force push、不得引用他人代写代码而不披露。这些规则意味着项目计划里要为评审往返预留时间而不是把编码排满整个周期。最后重申文档原文对贡献者的告诫这些提案有时模糊或不完整提交基于某条提案的申请前务必先与开发者建立联系而完全绕开导师自造新想法的路径很少奏效。九条提案加上仓库中它们的后续演进代码自动更新服务、Playwright 集成测试、OCR 服务、语音输入模块、PDF 查看器共同构成了一份从开源选题到工程落地的完整研究样本。【免费下载链接】joplinJoplin - the privacy-focused note taking app with sync capabilities for Windows, macOS, Linux, Android and iOS.项目地址: https://gitcode.com/GitHub_Trending/jo/joplin创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表