WDTP:一款“三合一”的写作工具和桌面版静态网站生成器

2017-02-04 23:36:24 +08:00
 SwingCoder

谢谢 Akkuman 和 CoderZh 两位朋友的介绍和推荐,让我得知了 V2EX 这个尊重原创,热爱分享与创造的好网站。我想在此和大家分享一款我刚刚开发完成的软件(目前是内测版,正在不断完善更新),如有不妥,请管理员批评指正并谅解。

WDTP 是一款“三合一”的另类写作工具与桌面 GUI 单机性质的静态网站(博客)生成器,这个项目的主页是:

http://underwaysoft.com/works/wdtp/index.html

WDTP 昨天首发于国内的凯迪论坛,我将原帖复制粘贴在此吧。


WDTP :源于凯迪论坛的又一款写作利器

2016 年年初,我在凯迪论坛看帖的时候,意外地发现了一座高楼,所讨论的话题是我前几年很感兴趣的。于是开始关注,时不时也掺和几句,然后就和几位骨干帖友混了个脸熟——其中一位是陈坪先生。有天我去拜访他的博客,浏览文章的时候突然冒出一个 idea ,可能更像是一些自我觉察,大致如下:

诸如此类。相信其他一大批小众也会有这些想法。说实话,以上这些真心不好用,尤其是学习与使用成本,还有使用时的心情,数据的随时检视、备份、管理与迁移,远程修改、调试与刷新等等。很折磨人。它们或许非常适合更广泛的一大批用户,某些情况下肯定也是非用不可,但很多时候确实不再适合我,也没必要时时动用这些怪兽级的庞然大物。

更进一步,笔记、写书、博客、网站这几件看似互相割裂的事,其实完全可以也早就应该简简单单、清清爽爽地合而为一了。而写作时,“内容与样式分离、样式与模板分离”等程序员最熟悉的理念与常规做法,这么多年以来,我为什么没有在自己的文字写作过程中更深入地理解和贯彻呢?有点不应该。

想法中还包括了其他。比如:“静态网站生成器( Static Site Generator )”,这东西近两年在喜欢尝鲜的技术类博主中很受推崇。有媒体放言:“下一批互联网大事件中,新型的静态网页及其生成将位列其中”……据我所知,这类程序目前至少上百,采用了各种各样的编程语言,它们中比较知名的有: Jeklly 、 Hugo 、 Hexo 、 Octopress 、 Pelican 、 Hyde 等等。尤其是 Jekyll ,背靠 Github 这棵大树,几乎一夜之间风靡全球。我对此做了一些肤浅的调查,一个匪夷所思的事实是:就我所接触到的“对口者”,竟无一例外——清一色的命令行程序!没有 GUI ,没有文本编辑器与可视化的 TreeView ,有的居然还要安装整个语言环境或依赖库。动辄百兆以上,太让人愤慨了。大不说,还麻烦。无论获取、安装,还是设置、使用,都不直观,也不方便,对一般人来说门槛有点高。这就势必将更广泛的用户群(比如普通的写作者)排斥在外,使他们很难享受到文本标记语法、内容 /样式分离、高自由度和灵活随意的静态博客等另类而好玩的写作 /分享模式。

既然尚无,那迟早就会有人下手,不妨等等,于是我就把这个事搁置了。此期间,我曾加入一个推广某静态生成器的国内群,也在 Stack Overflow 上转了转,四下打探一番,无果。有人曾抱怨过,但最终也是不了了之。

浏览陈坪先生的文章时,以上想法突然变得强烈起来。我琢磨了一下,这个事技术含量虽不高,但并不轻巧。脏活总是让同行包揽始终让人过意不去,干脆我自己趟一次浑水,再造个轮子吧:写一款跨平台且简洁清爽的桌面版静态网页生成器,顺便糅合上面提到的那几个功能,尽量将它们捏到一起,争取做的轻巧点、优雅点,先把基础和架子搭起来,后续事务和细化处理慢慢再捯饬。

琢磨的七七八八后,就立项动工了。关于编程语言的选择,脚本不考虑,平台相关的谢绝,数据库滚蛋。这么一来,似乎只有 Java 或 C++了。 Java 一贯不是我篮子里的菜,就 C++吧。

然后……然后就是今天 WDTP 内测版的首发,地点就在凯迪论坛的猫眼看人版块。可能有点唐突违和,请允许我解释一下:一方面这个程序的诞生确实与凯迪有直接的关系;另一方面此处风云际会、藏龙卧虎,能写、会写、喜欢写的人非常多,给这批笔友提供另一件顺手的写作工具应该是一件有意思的事。此外,似乎还没有哪位同行在这样的大杂烩论坛里做过这种类型的“主播”。这事有挑战性,风险并不小。但我想试试。

产品的首发式上,一般都会真真假假、虚虚实实地谈谈愿景、希望什么的。我这会儿有点忐忑,不敢满口火车。现在最大的希望是:值班编辑此刻心情不错,不删改这个贴,也不打算将它转移到凯迪的其他版块里。

关于程序的授权方式和性质, GPL v3 ,开源免费。不光凯迪的网友,全世界任何个人和组织都可以随意使用、传播、解剖源码或 PR 贡献,也接受来自任何方面的捐助。这些没什么需要多解释的。该有的,《授权协议》里都提到了,不够我再加几条:)

项目开工后,中间曾停工 3 个多月。 2016 年我周围发生了几件悲伤的事,让人心碎,这几乎导致了项目的夭折。费了很大劲我才将自己振作起来,硬挺着把 WDTP 的第一个版本敲了出来。活干得如何,横竖不论,交给诸位评说。目前 Bugs 肯定一堆,代码急需规整,很多细节也亟待完善。我实在不好意思说自己是一个敲了整整 30 年代码的老一代苦逼程序员——面老色衰,人狗远之。大江东去,属于我们的时代过去了……滚出这个行业之前,尽力散发点余温吧。希望热情还在,理想还在,更希望能听到真实而有价值的反馈与意见,以及各位同行的 PR 提交、无私贡献。

可能有人对大部分开源软件的维护更新感到不放心。我在此表个态吧:未来很长一段时间内,我可能每天都要用它,而且是重度使用。无论作为设计人、开发者、项目的第一责任人,还是作为用户之一,我肯定不愿意为了它而过分难堪或郁闷,更不会让它在七歪八扭、一团乱麻的失控状态下无果而终。

关于 WDTP ,还有几个必须要感谢的人——期待未来会更多,以后有机会一定专门提及。

That's it. 谢谢所有看了此贴的人,谢谢即将成为 WDTP 用户的每一个人,谢谢陈坪先生和那个高楼长贴,以及该贴中所有让我感到温馨的人。

今日立春,使用愉快!

SwingCoder 2017.02.03 于凯迪论坛

本文已发布在凯迪论坛的猫眼看人版块: http://club.kdnet.net/dispbbs.asp?id=12102372&boardid=1


欢迎大家下载试用并提出宝贵意见!

谢谢!

SwingCoder

31012 次点击
所在节点    分享创造
651 条回复
SwingCoder
2017-02-21 14:02:49 +08:00
•新增:一个内置的 blog 模板。默认的 article 模板中给出 cc 2.5 通用共享协议(位于文章末尾)。如文章末尾不打算显示本文的共享协议,则可使用新增的 article-p 模板。
SwingCoder
2017-02-21 15:38:31 +08:00
•新增:模板 tag :{{siteLink}}。该 tag 可给出网站首页的文字型链接,文字内容为网站首页的标题(项目标题)。
TheKiteRunner
2017-02-21 15:50:43 +08:00
建议标题默认与文档名称一致。作此需求是因为我的文档标题一般就是文档名,对于比较长的书名,打起来很累。右侧栏文档名称暗显不可复制;左侧栏左键修改名称, ctrl+V 又不起作用,需要点两次右键。
TheKiteRunner
2017-02-21 15:56:46 +08:00
@SwingCoder 缩略语跟 sublime text 的 snippet 比较像,可以参考 http://docs.sublimetext.info/en/latest/extensibility/snippets.html 。右侧栏其实可以考虑成为一个配置文件,而不一定要显示在旁边,这样更像一个标准的文档管理界面。
TheKiteRunner
2017-02-21 16:40:50 +08:00
不知道可否考虑通过关键字快速筛选出多个文件夹下的同主题文档,从而形成一种跨文件夹多维视图结构。
SwingCoder
2017-02-21 21:48:11 +08:00
@TheKiteRunner 先生,谢谢您的回复和建议。第一个问题做了修改,新建文档时,文档标题默认为文件名。

文本编辑状态,右键菜单,也可将选中的内容作为(添加为)标题、描述和关键字。属性设置面板中文档名称暗显,是防止用户轻易修改。如果项目用于网上传播或建站,修改文档名后会带来很多麻烦(比如死链接、冗余数据等等)。左侧文件树,右键菜单可对所选目录 /文档重命名。弹出的改名对话框中可复制或粘贴任意合法字符, Ctrl + c , x , v , a 等快捷键均可用。

计算机文件系统的文件名、该文件实际内容的标题、网页 meta 中的 title 字段、网页中显示的文本名称等等,这些都是(也应该是)各自独立的。 WDTP 出于简化和高效等方面考虑,对后三者做了关联性统一。这已经很“强制”了,并不是好的软件设计思想,也不太像开源软件的做法。

如果建站、分享、传播您的文字型作品,或者多个操作系统下的文档交换(特别是 Unix 平台和所有纯粹的英文操作系统下),我个人强烈不推荐使用非标字符作为文件名,特别是 CJK 字符。

缩略语可以扩充出很多强大的功能,它是一种处理问题和解决问题的思想,而不是具体的模式——并不仅仅相当于编译型计算机语言的宏定义。宏思想(包括复用)可能是计算机提高人类生产效率的最强大武器之一,如果您熟悉 C 和 C++,肯定对宏不陌生。宏的功能并不仅仅限于代换……

WDTP 下一步有可能向前端开发、编码、调试等简易 IDE 方面拓展。届时,缩略语功能在此方面也会有很大用途。

筛选、弹窗列表或醒目提示包含某个或某些关键字的条目,这个实现起来很简单。但是,我不太理解这么做的目的。人类处理问题,特别是编辑处理文档,基本是线性模式,做不到计算机处理问题时的那种多进程 /多线程并发。强制分心,害大于利。很多传统的文档编辑软件的某些功能或信息反馈,其实非常不科学,甚至反人类,并不能提高人们利用工具完成工作的效率,甚至降低效率。如果为了宏观了解项目的具体情况,或者特殊用途的数据统计、概率分析与趋势预测,这个可以用其它思路或工具来完成。 WDTP 在这些方面,我还没想好侧重点与具体的实现模式。以后如有时间,我会在这方面多思考一下。欢迎大家提供好的想法和算法。

谢谢。
SwingCoder
2017-02-21 22:04:23 +08:00
抱歉,刚才的回复中漏掉了您的一个建议。右侧属性面板中设置每个目录 /文档的各项属性或“附加值”,这种模式比较直观和简洁,也比较传统。大多数用户操作起来,比编辑额外保存的配置文件要高效和安全。

项目中所有目录和文档的额外属性,集中保存在项目文档中,与原始文档本身是分离的。

界面布局与设计方面,如果去掉右侧的面板,正常模式下,编辑和预览区会太宽,并不利于编辑或预览文档。安静模式下,两侧的面板都不显示,主界面大致是 43 比例。这个之前解释了:)

还可以手工调整主窗口的宽度。宽度小于某个值,右侧的属性面板自动隐藏。继续减少宽度,左侧的文件树面板也会自动隐藏。
SwingCoder
2017-02-21 23:24:48 +08:00
•修复:批量替换时 ASCII 字母大小写校验方面的一个 bug 。
SwingCoder
2017-02-22 02:33:20 +08:00
更改:编辑器右键菜单-插入,原“插入作者及日期”变更为仅“插入作者”。快捷键不变: Ctrl + O 。该变更的原因:默认的 blog 模板已包含了文档的创建日期与最后修改日期。
TheKiteRunner
2017-02-22 09:46:03 +08:00
@SwingCoder 感谢回复!举例来说,如果多篇文章,同时包含`wdtp`这个关键字,就希望能够在管理器内像博客里面一样,点击标签`wdtp`就看到与之对应的所有文章。

另外,预览界面可否考虑文本界面最大,即过滤掉重复出现的网页信息( logo ,背景等)。
SwingCoder
2017-02-22 13:19:27 +08:00
•改进:表格最左侧的单元格内容自动靠右。更新默认的样式表。
SwingCoder
2017-02-22 14:02:56 +08:00
@TheKiteRunner 先生,谢谢您的建议。

第一个问题,看到所有包含某个关键字的文章,明确的目的是什么?编辑?替换?数据统计和概率分析?
第二个问题,可自定义或修改模板,去掉不想参与渲染的 tags 即可。
TheKiteRunner
2017-02-22 15:08:37 +08:00
@SwingCoder 1 不是这个意思。相当于筛选多个文档中的几个,集中来阅读或者编辑。比如我有多文件夹管理文档,但若干文档有同样的属性,就想用关键字来标识这一属性,实现跨文件夹筛选。
2 我试试吧。
SwingCoder
2017-02-22 19:45:33 +08:00
@TheKiteRunner 先生,谢谢您的建议。 WDTP 是多文档管理、单文档视图类型的软件。目前不支持将编辑区或预览区分割为多个子区。

文档集成可文件树右键菜单:批量集成。如果针对某个目录集成,则要集成的文档需位于该目录下。
SwingCoder
2017-02-23 15:15:32 +08:00
•改进:数据统计的显示结果(项目本身不再给出目录名)。
SwingCoder
2017-02-23 21:15:54 +08:00
新增:文本编辑模式下,标准 ASCII 标点符号‘<’的自动匹配
SwingCoder
2017-02-24 04:29:59 +08:00
- 改进:提取或修改文档的标题 /描述后,该文档的所有父级目录同步标记为需要重新生成。
SwingCoder
2017-02-24 05:27:52 +08:00
- 改进:批量替换功能
- 自动获取系统剪贴板中的数据并设置为要替换的原始内容
- 键盘焦点自动位于“替换为”文本框
- 调整 TAB 键转移焦点的顺序
- “替换为”文本框输入内容后按回车键,直接触发 [替换] 操作
SwingCoder
2017-02-24 06:17:02 +08:00
- 改进:启动程序后,文件树面板自动滚屏,确保上次退出时的条目在本面板中可视。
SwingCoder
2017-02-24 19:43:18 +08:00
- 修复:无法自动打开操作系统文件浏览器来查看所选条目的 bug 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/338138

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX