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

29685 次点击
所在节点    分享创造
651 条回复
SwingCoder
2017-02-04 23:42:40 +08:00
# WDTP-主要更新记录

- 2017.02.04
- 编辑器右键菜单,插入,新增“插入图注 /表注”
- 插入图片或表格时一并插入图注和表注行
- Markdown 解析新增语法:图注和表注,语法格式“^^ 注解文字”

- 2017.02.03
- 发布 macOS 和 Windows 两个平台下的内测版( 0.9.170201 )
SwingCoder
2017-02-04 23:47:04 +08:00
WDTP 这个软件是严格遵循 GPL v3 协议的开源免费程序,不是收费的商业软件。

希望管理员和版主高抬贵手,不要当成广告删掉了。

如有不妥,敬请批评或编辑!

谢谢!
Akkuman
2017-02-04 23:49:29 +08:00
希望尽快上 github😁
SwingCoder
2017-02-04 23:56:29 +08:00
谢谢 Akkuman 兄的鼓励和建议,这个项目目前的 github 地址是:
https://github.com/LegendRhine/WDTP

我现在还没想好,可能过一段时间将它单独拉出来,或者放在另一个账户下,或者拉到国内,这样方便大家访问和 PR 。
我最近会尽快规整代码,完善注释和开发文档,便于各位同行、老师审阅代码并无私贡献。
SwingCoder
2017-02-05 02:08:00 +08:00
• 系统菜单新增:重置 /修复系统默认的模板及样式表
SwingCoder
2017-02-05 06:42:56 +08:00
• 实现:项目数据的打包与解包
SwingCoder
2017-02-05 11:57:13 +08:00
文档内搜索所选内容添加快捷键。 F3 :下一个, Shift + F3 :上一个
Akkuman
2017-02-05 11:57:25 +08:00
可以写个接口文档,让别人比较好开发静态博客的主题模板
Akkuman
2017-02-05 12:01:24 +08:00
还有,这个好像没有文章的分类和标签,我觉得可以借鉴小书匠的那种模式
SwingCoder
2017-02-05 12:05:31 +08:00
好的。谢谢 Akkuman 兄的建议。目前可用的模板标签还不多,开发文档(目前可能只相当于一个备注)也比较简略,里面给出了可用的模板标签。直接将标签写在 html 文件中,该文件即可成为模板。很简单,不需要调用接口。还可以参考系统自带的模板文件,位于 themes 文件夹下。

文档:
https://github.com/LegendRhine/WDTP/blob/master/Source/memo.md
SwingCoder
2017-02-05 12:09:59 +08:00
Akkuman 兄,文章分类标签的应用场景和效果能简单说一下吗?


目前的{{blogList}}和{{bookList}}是智能化的,哪个目录的 index 调用它,它就自动生成哪个目录下的 list (递归算法,含其下所有子目录及所有子目录所包含的文档)
Akkuman
2017-02-06 00:50:14 +08:00
文章分类和标签可以作为博客的标签归档和分类归档,效果可以在博客上显示标签云啊之类的。就类似于 hugo 里面的
-----
tilte : xxx
categories : [xxx,xxx]
tags : [xxx,xxx]
-----
这是 toml 格式的
还有 yaml 格式比如
-----
title : xxx
categories :
- xxx
- xxx
tags :
-xxx
-xxx
-----
类似于这样,可以设置为模板,当文档被创建直接按格式生成,然后叫用户自己改,类似于 Hugo 的方式
然后这就可以用来生成博客更多样化了
Akkuman
2017-02-06 00:52:05 +08:00
我才发现我上面发的那段没有格式,反正我表达的就是这种目录和标签定义的方式,当然,如果你用目录来作为分类也一样,不过我觉得标签还是是个可以加上的功能
SwingCoder
2017-02-06 02:15:20 +08:00
谢谢 Akkuman 兄,我基本明白了:)我尝试解释一下:

WDTP 没有采用这种形式的“标签”(网页项)定义和提取方式,或者说思路与理念与目前的静态生成器不一样。

一是我认为应该最大限度保证原始 MD 文档的简洁性与可读性,不增加任何冗余信息。

二是原始文档所对应的网页,其 head 区等等里面的网页项( meta ),在 WDTP 的属性面板中体现和设置(包括目录的。目录对应 index )。其中,标题(默认原始文档的第一行)、描述(默认原始文档的非空第二段),关键字,作者,页面标题等等信息,都是自动提取的,用户也可以手工 pickup 、输入或编辑修改等等。预览文档或目录时,软件实时生成对应的 html ,该 html 由三者构成:原始文档的内容与 md 标记(有无均可),属性面板中的设置信息,模板文件。

也就是说,每个 item 的属性信息记录在项目文档中(.wdtp ),这些信息与原始文档是完全分离的。
SwingCoder
2017-02-06 02:22:41 +08:00
传统的博客 tags , WDTP 没有考虑。“关键字”这个设置项,对应该网页 meta 中的 Keywords. 这个目前也并没有作为 WDTP 文档生成、检索和分类的依据。

按正规的学术文章,每篇文章都应该有关键字、简述、索引和引用。每个领域的关键字有严格规定和使用范围的。引用这一块,可以用内链或外链的思路解决,很简单(此处的引用,不同于 MD 标记中的引用)。关键字这一块,我有更多的思考,下一步可能体现在具体的功能里。我认为目前博客、网站、网络文章等等,用 tags (关键字)作为主要分类依据,是不科学的,也低效,很混乱。随意性太大,不够规范,也极易导致混淆。
SwingCoder
2017-02-06 04:29:08 +08:00
WDTP 2 月 6 日更新:

- 改进:将所选目录(含其下所有文档及所有子目录的文档)导出为一个独立的 HTML 文件,以供格式转换、生成各种类型的电子文档、外部浏览器中打印、打印预览或在其他外部编辑器中进行更精细的处理(比如进行出版印刷前的专业排版)。此功能非常适合作家、剧作家写作完成后的“章节集成”、“全书集成”,也非常适合使用 WDTP 做笔记的用户(可定期将全部笔记或某个分类下的所有笔记“装订成册”),也适合于将个人博客或网站的内容(全部或某个分类)集中“装订成册”。
- 文档内容在该 HTML 中出现的顺序依照当前文件树的排序。
- 所导出的 HTML ,默认使用本项目当前所用的样式表。
SwingCoder
2017-02-06 06:50:16 +08:00
• 实现:网站数据打包。不仅可将整站数据打包,还可将任意目录的网站数据进行打包。打包结果为 zip 压缩文档。此功能既可用于网站备份(注意,不是项目文档数据的备份),也可用来传播或分享网站数据,还可大大提高发布效率(比如:某些 FTP 服务器允许用户远程解压上传后的 zip ,或者提供网页版的在线文件管理界面,可在此界面中上传并解压 zip 文档。这样比在 FTP 软件中上传大量的零星文件要快得多)。高级用户,还可利用此功能实现:同一套数据、应用不同的模板后,多站点同时发布。

◦ 数据打包之前,无需重新生成网页。程序会自动生成所选目录(或整站)所有需要重新生成的网站数据。没有改动或未受影响者保持不变,从而最大限度提高程序的运行效率并节约用户的等待时间。
SwingCoder
2017-02-06 08:11:33 +08:00
改进:预览模式下的滚屏行为(同一文档切换编辑 /预览模式后,不再每次都滚到最顶部,而是记忆并保持切换前的位置)。
SwingCoder
2017-02-06 09:59:00 +08:00
实现:左侧的文件树面板中双击某个条目后,如果该条目是项目的根条目,则创建新文件夹;如果该条目是文件夹,则在该文件夹下创建新文档;如果该条目是文档,则可重命名之。
loser
2017-02-06 14:48:57 +08:00
感觉很赞的样子,对了 mac 版下载链接失效啦
这个: http://www.underwaysoft.com/works/wdtp/wdtp-osx.zip

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

https://www.v2ex.com/t/338138

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

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

© 2021 V2EX