1.2.5 文件 (夹) 名称 ID 化,是否与本地化的初衷渐行渐远?

本贴最后更新于 1066 天前,其中的信息可能已经东海扬尘
  • 每次大本版更新,都是提心吊胆,因为新特性总是在负面影响甚至破坏已有的工作流
  • 1.2.5 最大的改动便是文件名 ID 化,这直接导致
    • 除思源外任何工具对思源文件的管理不具备可读性和可操作性性
    • 系统资源管理器几乎变为资源管理空气
    • 文件级,文件夹级拷贝分享变的异常艰难,以至不可能
    • 第三方同步盘的同步日志变得没有丝毫可读性,同样文件级的版本恢复变得异常艰难(特别是思源自身的同步仍然只能作为 plan B, 即便一直改进,应该也无法和专业软件(坚果云)比肩)
  • 对系统工具,对第三方工具的友好性,不正是本地化的一大便利么(另一大便利是安全)
  • 如果 ID 化是子文档的代价的话,那真是子文档的一个最糟糕的本地化实现,更何况子文档也丝毫不会对笔记带来本质的提升。纯在线的 ID 化无所谓,用户根本不关心这个。可用思源就是冲着本地来的
  • 特性的引入伴随思源一直在收紧自由度,从资源的统一管理到文档名的 ID 化,收紧的方向正常,但方法真是一言难尽
  • “思源用户不关心本地文件名,软件能打开就行”,但还是有一部分用户关心文件名的,越是深度用户越关心,随着笔记的数量提升,协作需求的提升,也许会有越来越多的用户看到这一串 ID 而苦恼吧
  • 实现同样的功能,应该有比文件名 ID 化更高效,更平和的实现吧?希望两位主创能考虑下这个问题
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    20174 引用 • 77870 回帖 • 1 关注

相关帖子

优质回帖
  • 88250 4 10 赞同

    你好,是时候和大家分享一些这方面我们的设计考虑了。

    从使用角度

    思源不是文本编辑器,而是知识管理系统。如果以编辑器的方式来使用,肯定会感到别扭的。

    • 同一层级下需要支持同名文档,这样能将新建、重命名、移动等操作的同名阻断问题降低,使用起来更流畅
    • 子文档形式比文件夹形式效率更高,能够充分利用文档树的空间,从概念上也统一为文档,减少不必要的实体
    • 分享和协作不是思源现阶段的目标,现在就这样用的话是肯定不会好用的,协作大概在 v3 阶段会开始设计

    从技术实现角度

    优先考虑稳定性。

    • 通过文件实现易变数据的互操作性是一个糟糕和错误的方向,因为多个进程各自直接读写易变文件有概率会导致数据损坏。概括一点讲就是试图通过共享文件、共享内存来实现互操作性的方案都存在一致性问题,正确的方案是通过 API 进行交互,各进程内自己保证一致性
    • 使用人类可读的文本在跨系统平台时存在大小写问题,比如 Linux 上允许同时存在 SiYuansiyuan 文件,但是 Windows 上则不允许,该情况一旦发生数据就可能会被损坏

    寻求平衡

    我们一直在寻求对普通用户和对社区开发者都友好的平衡点。

    • 对普通用户尽量屏蔽底层细节,所以思源迟早要覆盖一些在文件系统上的常规操作,比如批量移动、删除文档,最终目标是用户不必关心文件结构,专注于使用
    • 对开发者而言,需要的是稳定的方案,如果某个方案可能存在某个问题,那么这个问题一定会在将来的某个时候发生

    忒修斯之船

    思源这样一直更新下去,还是当初的思源吗?

    在发布 v1.2.0 的时候我们说过,如果没有更好的替代方案,不会轻易删除已有特性,这次变更我们觉得并没有违背这个承诺。

    一个产品如果没有明确的产品方向和架构思路,这个产品就算做到能用也不会是个好产品。至于个性鲜明或者说思路清奇的产品能否被用户接受,这只能用市场来检验了。好产品无需推广,烂产品就算被骂死也不会有所改变。

    最后,我们作为主创团队,直接劝退用户的话不太礼貌,然后还会有人说:“你看他们,傲慢得不得了,容不得半点意见”。但这样的评价并不重要,重要的是我们觉得浪费了大家的时间精力,与其忍着用,不如早点换。

    以上。

    @participants

  • programfan 2 3 赞同

    说几点看法和期望:

    1. 如果关心修改历史,但又只关心文件名,这个只能说是“叶公好龙”。我不用思源的历史功能,也不用第三方同步的历史功能,自己建了一个 git 仓库,手工管理历史,清清楚楚。只要思源维持“本地 + 文本”这种技术路线,想要修改历史有无数种办法,为什么要纠结文件名?
    2. 如果确实对 id 和文件名的对应关系有需求,在 sy 文件里面有,随便找个 json 解析工具一提取就搞定了,只是稍微费一点功夫而已。
    3. 我们作为软件的用户,要区分软件的「内部实现」和「外部接口」的边界。简单地说,思源如何组织笔记文件、如何存储笔记数据,这个是软件的内部实现,本来就是会随软件发展不断变化的。但思源将笔记「按目录和文本文件组织为本地磁盘的数据」,这是软件给用户和开发者的保证,可以预期是不会急剧变化的,可以理解为是一种外部接口。我们搭建自己的工作流,要基于软件的「外部接口」而非「内部实现」。如果真要基于「内部实现」,就要做好持续跟随改变的准备,而不是不断给软件开发者提要求说「内部实现」变化不合理。
    4. 期望思源笔记尽快梳理出一个稳定的开发接口,包括数据格式、数据存储、查询修改等,在能给出稳定预期的地方,尽量给出稳定预期,这样大家知道什么会变,什么不变,搭建工作流和开发额外工具也就比较放心。
  • audiolabj 2 2 赞同

    深以为然!

    1. 文件名的纠结,我们实践里的理解是:习惯于一段内容在一个可见的文件里,然后以文件名看更新,以文件或文件夹移动或复制内容,习惯这样的话,文件名不用改成 ID,随便改动一些都会不好找;如果是以内容块来组织的话,移动,查找和复制都是块的内容(包括块的嵌套),习惯了这样,焦点就在内容里,而且是每个组织好的要点里(在 RemNote 里是一个 Rem),这对于知识的组织管理而言,是更顺畅的。文档名,只是应用内一个大容器块的标签管理,,如果需要文件级的交换,用导出 md 后的 pandoc 类的方法,转成 ppt 也行。
    2. 修改历史管理,我们也是用 git 来做的,而且是团队协作,十几个成员,从需求到设计到开发代码到测试,直到交付和销售支持材料,甚至开发者自己的学习笔记,都用思源做源头内容管理,3 个月时间我们用思源已经发布了两个产品都在 B 端客户进入部署阶段。git 管理协同,相对于飞书和语雀的在线历史管理,优势不仅在于可以管理到每个 commit 的每个要点,而且在于文档的发布范围,可以多分支管理,小组的 feature 开发的需求文档,和主版本分离,没啥问题。
    3. 思源的 json 格式,是我们团队选择思源并且每人购买会员的理由,不仅 ID 和标签的对应可以管理,而且节点间的关系,完全可以还原;如果改了数据库作为主存,反倒会引起我们很大担心,且不说如何用范式化 schema 适应 nosql 的定义场景,字段映射的管理,元数据和实际内容的对应查看,引用完整性的潜在风险这些坑,光是实时分享版本改动引起的数据字段结构和值域定义更新问题,就成了一个麻烦。
    4. 还是那句话,思源笔记作为知识管理工具,而不是编辑排版工具的方向,非常认同;知识图谱的 schema,就是图;比起范式化的二维表,protege 这类知识定义 rdf 工具,是和 json 这种格式具有好得多的亲和力的,而且思源支持的 graphviz,可以直接和 protege 进行转换。
    5. 同样,也是期望思源尽快梳理出稳定的开发接口,sql 查询的数据库元数据和字典文档开放程度能更好一些,便于跟进;如果有一天,思源把主存储改为封闭数据库,不再坚持“本地 + 文本格式”,也希望及时告知,恕不能够继续一路升级同行了。
    6. 思源用户圈子建立很难得,大家场景不同,需求各异,求同存异不容易,一方面让开发者协调取舍,一方面多交流,理解,分享一些不改版本条件下解决问题的方法吧。

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • leiyuy

    1.2.31 的文件名存贮不能够避免文件名重复引发的数据丢失问题,这可能是思源优化的一个出发点。

    1 回复
  • 其他回帖
  • buzzingbee 1

    虽然我也是第一次用这种设计的笔记软件,但我还是感觉用 id 作为文档名和块名,是目前最正确的方向。只有 id 才具有可管理性,而文件名,路径等等肯定不行。因为只有 id 才具有唯一性,不管文档标题变化不变化,或者移动了位置, id 都能保持不变,这是追塑文档必须要解决的基础问题。

    作为用户,我觉得文档或文件夹 id 化应该是用户可以接受的选择。不然,很多功能估计不好实现,最后的产品可能更难用。将块与文档,文档与文件夹打通,是简化数据结构,降低程序复杂度,从而最终创建功能更强的软件的基础。人的创造力(智力)是有限的,一个简单但不平凡的基础,应该是通向更高层复杂度而不导致混乱的方法保证。

    我喜欢笔记软件本地化的原因主要是它不依赖网络,它不需要因网络延迟而等待,同时它还具有许多网络编辑器不易实现的文档间切换特性。

    选择思源,那就放心让思源去管吧,我相信这是正确的道路。

    @88250

    1. 其实比较认同作者的观点的,每次大版本更新,我也是提心吊胆。最近几次的版本的改动还是挺大的,1.2.5 我第一次迁移就直接把数据丢失了,幸好有备份,通过回到老版本还原数据再重新安装才搞定。之前还在工作群里推荐过思源,后来主动说明思源的不稳定性问题,避免别人上车结果把人坑了。不是忠实粉丝,是经不起这样折腾的。
    2. 文件名 ID 的最大问题,除了资源管理器外,第三方同步盘的同步日志就直接无法看了。我平时公司和家两台电脑,每天都需要使用到同步功能,原先就打开同步盘看下最新同步的文件名,现在基本上实现不了这点了。思源的同步功能尝试过,中间爆出来好多次连不到服务器,直接弃用了。
    3. 关于子文档,到底有啥好处?什么场景下有用?这方面在更新说明中完全没有体现,说实在话,我现在都不知道子文档的用处是啥?有大佬能指导一下嘛。
    1 回复
  • 支持并理解 D 大的部分想法,但并不完全认同,子文档是挺精致的,也好看,但是没有配套的措施出来前,无法凸显出它的好处(如何更好的利用好原来的文件夹)。

    当然,因为每个人的工作流不同,所以肯定会误伤部分用户,所以其实重大更新前可以来个预告。

    支持知识主帖作者认为的思源逐渐丧失了本地资源管理的功能的观点,因为在某个版本把 asset 文件统一合并的时候,我就体会到了,包括现在,打开本地文件夹,打开的全是一堆 id 化的文件,很难轻易区分哪个是哪个了。
    那这样会不会有大的影响呢?个人认为,要想用户接受,思源需要做到的是,不断提升稳定性和对附件管理的更友好地支持,以及便利好用的导出功能。这样我不管理文件夹其实无所谓。

    那么,似乎 1.2 后,思源的确不太有丢图片的情况了(这也是我当初不支持 asset 文件统一的原因,因为丢图了在当前文件夹,我还能找到并补救)

    另外,附件,我觉得目前而言,思源的附件管理并不很方便,可能我倾向的是为知笔记那种管理方式。

    最后,导出的话,应该也是一致需要努力的方向,因为很多问题容易反复。

    总之,希望思源越来越好,也希望大家保持沟通,不要轻易离开或指责,大家一起为更好的知识管理而努力!

  • 查看全部回帖

推荐标签 标签

  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖 • 2 关注
  • abitmean

    有点意思就行了

    39 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    41 引用 • 130 回帖 • 283 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    109 引用 • 54 回帖 • 2 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 16 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 354 关注
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    17 引用 • 236 回帖 • 373 关注
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 52 关注
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    76 引用 • 390 回帖
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 322 关注
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    11 引用 • 5 回帖 • 580 关注
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    103 引用 • 126 回帖 • 443 关注
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    130 引用 • 793 回帖
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    402 引用 • 3522 回帖
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    21 引用 • 58 回帖 • 1 关注
  • 负能量

    上帝为你关上了一扇门,然后就去睡觉了....努力不一定能成功,但不努力一定很轻松 (° ー °〃)

    88 引用 • 1234 回帖 • 441 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    675 引用 • 535 回帖
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    96 引用 • 330 回帖
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 648 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3169 引用 • 8208 回帖 • 1 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    942 引用 • 1458 回帖 • 108 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    116 引用 • 99 回帖 • 249 关注
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 430 关注
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    16 引用 • 7 回帖 • 2 关注
  • 博客

    记录并分享人生的经历。

    272 引用 • 2386 回帖 • 1 关注
  • 自由行