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

2017 年 2 月 4 日
 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

35276 次点击
所在节点    分享创造
651 条回复
TheKiteRunner
2017 年 3 月 3 日
@SwingCoder 感谢。感觉您的作品很好,但是一直觉得,开篇推广突出猫眼论坛和陈坪先生很奇怪。如果你直接分析,之前用过的写作软件问题在哪儿,你在写作过程中的需求是什么,三合一能够让各种类型的用户收获什么,就可以了。猫眼论坛和陈坪先生博文,实在不是我口味。

另外,感觉您可能也像刘未鹏阮一峰这种,有经常写作博客的习惯,如果有的话而且方便,其实也可以考虑让用户来关注一下您有关这方面的博文,这样就不用费力解释很多东西。
SwingCoder
2017 年 3 月 4 日
- 新增: Markdown 扩展标记“[keywords]”。作用:提取并显示本项目的所有关键词。**注**:这个标记是另类意义上的“真正的扩展”。原因:传统的文本标记语言,所有语法均针对当前文档的内容,没有任何外联性。而 WDTP 的核心特点就是处理结构与层次较复杂的多文档(将多个文档以项目和树形视图等形式组织起来并集中管理)。这种情况下,文档间的关联性变得比较重要。对网页浏览者和项目管理者而言,无论“内外”,均需要多个宏观把握的入口点。而对静态网页生成和所有内容的“全局浏览”等功能来说,也急需一个简单明了的解决方案来处理网站所有内容的“高效搜索”、“精准定位”等问题。再三考虑后,我决定借鉴传统出版业的书尾“索引”这个思路,进一步提升文档关键词的重要性与正相关性,一并将其作为索引字对待(传统上,网页关键词仅面对搜索引擎,而不面对访客,甚至不在网页中出现。 WDTP 在此方面已经做了改进。比如:每篇文档均可以在正文内容之前醒目显示本文的关键词)。

- 用户利用"[keywords]"这个扩展标记,可自行确定:是否生成网站的索引页,索引页的标题是否作为菜单项名称出现在网站菜单栏中。
SwingCoder
2017 年 3 月 4 日
@TheKiteRunner 先生,谢谢您的宝贵建议。我尝试解释一下您的问题,如有不妥,请海涵。

凯迪是我经常访问的一个国内论坛,我在那里有多个注册账号,为了该论坛付出过巨大的心血与精力,至少写过不下 50 万字的文章和回复……虽然现在凯迪的文章质量和高素质会员均大不如前,但一直都难以完全舍弃它:) WDTP 的诞生,潜意识中有我多年来的一些思考和琢磨,有我个人所需的因素……但是,真正的立项原因是因为陈坪先生。他是一位文学评论家,孤独的斗士,令人钦佩的当代知识分子。如果不是认真通读他的网上文章,我不会在一瞬间强烈爆发出写一款软件为他造福的思想。没错,就是为了他一个人。我想为这位可敬的中国当代知识分子做一点绵薄的贡献。如果仅仅是为了我个人,我不太可能专门立项写一款规模超过 5000 行、维护时间至少 3 年预算的程序。特别是,项目动工后,我家里出了古今罕见的人间惨剧,一度停工 3 个多月(您可以从我的 GitHub 首页 contributions 图示中看到这块空白)。期间,我个人完全崩溃……到现在我都不知道自己是如何挺过来的。可能撑着我活下来的一个主要理由就是我的承诺尚未完成,我就算死,也得把这个承诺实现了。而且,我要把首发地点定在凯迪论坛,并且要写一篇首发辞。

这就是 WDTP 幕后的故事……我做到了。不容易。我用最后的、全部的激情和我的所有生命来写这个软件。

但是,截至目前,陈坪对此依然一无所知。 WDTP 还太嫩,我想再进一步完善一下,至少 1 万使用量,而后再呈给他。这个心愿了了之后,我死而无憾。

问得比较多、有普遍意义的问题,我有时也整理一下发到网站上(这个很消耗精力)。零星的,临时性的问题,我觉得有义务和责任逐一、认真回复。这不是态度问题,这是一个软件工程师的职业素养与职业尊严的问题。我选择了这个职业,就得承受它的代价,这是必须的。
SwingCoder
2017 年 3 月 4 日
- 改进:仅提取文档中的关键词,忽略目录( index 页)的关键词
TheKiteRunner
2017 年 3 月 4 日
@SwingCoder 不知详情,但肯定是不可承受之痛了。能支撑人信念的是好的,也祝您能从中走出来,承诺实现不在一天。
SwingCoder
2017 年 3 月 4 日
实现:生成关键词索引页。操作步骤请参阅:
http://underwaysoft.com/works/wdtp/faq.html#如何生成项目的关键词索引页?

索引页的默认效果请参阅:
http://underwaysoft.com/keywords.html
SwingCoder
2017 年 3 月 4 日
谢谢 @TheKiteRunner 先生!事情已经过去快半年了,目前我的身心都在慢慢恢复。因为有 WDTP 这个软件在心里挂着,有个事情做,努力不让自己胡思乱想,所以康复的速度比医生预计的要好很多:)我现在很乐观,希望能保持下去:)
SwingCoder
2017 年 3 月 4 日
如何生成项目的关键词索引页?

1. 在项目根目录或一级目录下新建一个文档。
2. 编辑该文档,在适当的地方输入或粘贴一个 Markdown 扩展标记“[keywords]”。
3. 预览该文档,整个项目(网站)的关键词索引页已经生成。
4. 右侧的属性面板中,将该文档设置为“网站菜单”(此步骤可选)。
5. 系统菜单 - 重新生成整个网站。

注 1 :如索引页的菜单项顺序不符合您的要求,可修改该文档的创建日期,而后重新生成整站。创建日期越早,一级菜单栏中的位置越靠右,二级弹出式菜单中的位置越靠下(其它要作为菜单项的文档或目录,其排序原理与此一致)。

注 2 :日常增删改文档,或者修改某个文档的关键词之后,无需通过重新生成整站的办法来更新索引页。只需在浏览索引页时重新生成该网页即可(系统菜单 - 重新生成并刷新当前页面,快捷键: F5 )。

注 3 :软件默认生成的索引页,出现多次的关键词,将给出频次(小括号括住的阿拉伯数字),鼠标指向这些关键词,自动弹出下拉菜单,菜单项是所有使用了该关键词的文档,点击即可浏览。只出现了一次的关键词,不给出频次,直接点击该关键词即可浏览对应的文档。
SwingCoder
2017 年 3 月 4 日
一并,更新软件默认的样式表。
TheKiteRunner
2017 年 3 月 4 日
@SwingCoder 加油,您这么好,都会有人牵挂有事可做的。
SwingCoder
2017 年 3 月 4 日
•完善:软件内部生成的 404 错误预览页中的 meta 中添加字符集属性( UTF-8 ),使中文不再乱码。
•修复:可以解压但无法正确识别并加载项目打包文件的 bug 。
SwingCoder
2017 年 3 月 5 日
•实现:检查本软件的新版本。详情:

◦如果当前有新版本,则工具栏中的“齿轮”图标变红。
◦点击“齿轮”,弹出的系统菜单中将出现“下载新版本...”菜单项。
◦如果当前所用的已经是最新版本,或者计算机尚未联网,或者网络不可用等,则“齿轮”图标不会变红,系统菜单中也不会出现“下载新版本...”菜单项。
◦ 无论是否有新版本,无论是否检查成功,均不影响本机正常使用 WDTP 。
◦仅在启动时检查是否有新版本。
SwingCoder
2017 年 3 月 5 日
谢谢 @TheKiteRunner 先生的鼓励与支持!
SwingCoder
2017 年 3 月 5 日
新增:系统菜单中增加一个菜单项“反馈意见 /讨论交流”,点击后可进入 UnderwaySoft 官网留言板。
SwingCoder
2017 年 3 月 5 日
•优化:网页渲染时获取根路径(相对路径)的算法。
SwingCoder
2017 年 3 月 5 日
SwingCoder
2017 年 3 月 5 日
•改进: Markdown 插入图片语法的解析,确保网页中鼠标指向图片时显示其 title 文本(如已经指定)。
SwingCoder
2017 年 3 月 5 日
•新增: Markdown 扩展标记:播放音频文件。语法格式:~[](音频文件的地址)
SwingCoder
2017 年 3 月 5 日
鼠标指向网页中的音频播放组件时,如需显示其 title ,可在中括号中输入文本。
SwingCoder
2017 年 3 月 5 日
新增:文本编辑器右键菜单“插入-音频”。可一次性插入多个音频文件。

新增:智能粘贴( Ctrl + V )可识别并插入网络音频的 Markdown 标记。

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

https://study.congcong.us/t/338138

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

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

© 2021 V2EX