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

35283 次点击
所在节点    分享创造
651 条回复
SwingCoder
2017 年 4 月 6 日
@izgnod 朋友,您好。感谢试用 WDTP 并提出宝贵意见。

1. 文件树面板中,目录和文档的显示顺序可随意设置,右键菜单-排序基于。 WDTP 没有 category 这个概念,所组织和管理的目录文档与本机磁盘文件结构严格对应,完全一致。如果某些目录或文档作为静站菜单项(导航菜单),其默认的排序依据是该目录 /文档的创建时间。所有目录和文档均可在右侧属性面板中设置创建时间(这个不同于实际磁盘文件的创建时间)。

2. 确认有这个问题,是前段时间提升整站生成执行效率后的又一处“遗漏”,稍后我将解决。

3. 无法全面理解您的反馈,也无法重现。浏览模式下,文档重命名后,对应的网页一并重命名并实时刷新。任何情况下,不建议在 WDTP 之外对它所组织并管理的磁盘目录及文件进行任何操作。如需调用外部编辑器编辑某个文档,可通过文件树右键菜单“外部编辑器打开”来完成。外部编辑结束后,如文档内容发生改变, WDTP 会自动更新编辑器中该文档的所有内容。

4. 与主题(图片、样式表、模板文件等)修改、自定义有关的事宜,请参见:
http://underwaysoft.com/works/wdtp/faq.html#如何修改 /制作 /备份 /发布 /加载主题?

5. 网站功能方面,实现评论、浏览次数、更多统计和分析信息等等,有多种思路和解决方案。可以直接编程实现( WDTP 本身就是一个简单直观的前端开发 IDE );可以使用第三方提供的社会化评论系统,将该系统提供的代码粘贴到任意文档中;可以嵌入外部网页(该网址是一个独立的论坛或评论页面);可以在文档中给出外部链接……

6. 各平台下 release 版本的二进制程序,可以做到每次 git 提交都自动构建并发布,但是这么做不太合适。最主要的, C++程序需要静态编译,不是动态解析并执行的脚本类语言,每次 Release 编译及随后的黑盒测试、二次编译等等相当浪费时间,也很难保证每次提交后的源码都编译并运行无误。目前 WDTP 的做法是每隔一段时间发布一个新版本,发布之前,各个平台下都会做相对全面和仔细的测试,非常耗时。 git pull 源码后本地自行编译,对熟悉 C++开发和编译的朋友来说很简单,所需的库、 IDE 、步骤和流程我都给出了,基本上无需多说。但是,对不熟悉的朋友来说,掌握这些技术不是几句话能说清楚的,也和 WDTP 这个软件本身关系不大,只能等待新版本二进制程序的发布。如果不是非常急需新版本的新增功能或与己有关的 bug 修复,其实没必要频繁更新。使用软件的目的是出活,提高出活的效率,不是为了使用而使用。
SwingCoder
2017 年 4 月 6 日
第二个问题确认错了。正常使用 WDTP ,不会出现此问题。

我能想到的出现此问题的情况是:在目录或文档改名的一瞬间(不会超过 1000 个 CPU 运转周期),计算机掉电或磁盘物理性损坏。或者外部修改了 WDTP 所组织并管理的磁盘数据——这一点绝对不推荐。

正常使用 WDTP ,根本无需关心磁盘目录和文件的一切情况,甚至无需知道磁盘上存在这么一堆数据。面向普通用户的现代计算机桌面操作系统及运行其上的普通应用程序有一个发展趋势是黑盒化(沙箱化),我个人赞成这一点。 WDTP 在设计和架构时遵循了这个开发原则(目前不太严格,下一步可能会逐渐严格并规范起来)。
izgnod
2017 年 4 月 6 日
嗯,又折腾了一晚上,发现大部分是由于我的使用方法不正确所致,多谢细心的回答。
SwingCoder
2017 年 4 月 6 日
完善:重置 /修复系统主题时,保留用户自定义的网站 ico 和 logo (不予覆盖)。
SwingCoder
2017 年 4 月 7 日
@izgnod 朋友,祝您使用愉快!如有问题,敬请随时垂询。如能一事一议,更加欢迎和感谢:)
SwingCoder
2017 年 4 月 7 日
完善:模板标签{{siteLogo}}的解析,增加 title 属性(网站标题)并固定 logo 的显示宽度为 165 像素。
SwingCoder
2017 年 4 月 7 日
新增:源码新添一个结构体: SwingRegex ,静态函数全部内联执行,用于封装并使用 C++ 11 标准库中的正则表达式功能。
SwingCoder
2017 年 4 月 7 日
改写 C++ 11 标准库中的 Regex 正则表达式模块,使之更加简洁、执行效率更高,以适应 WDTP 的独特需求。

这部分改写的代码,目前尚未最后定型,未加入(也不太方便加入) WDTP 的 git 仓库。改写后不影响标准库中的原有接口。任何用户均可直接 include 原库文件进行 WDTP 的编译。
SwingCoder
2017 年 4 月 7 日
正则表达式的底层架构与接口基本就绪。有条件和能力的朋友可直接使用 SwingRegex 结构体提供的接口,修改 WDTP 中搜索与替换等方面的代码,以实现个人所需。

WDTP 提供的此架构与接口应该是目前世界上执行效率最高、最强悍和最成熟稳定的正则功能(应该没有之一)。如目前所提供的不能满足所需,或者抽象层次太高,需要面对更具体的问题域,请提出建议,我将酌情修改或增加这方面的代码与接口。
SwingCoder
2017 年 4 月 7 日
实现:设置网站 ico 和项目 LOGO 。详情:

•点击工具栏“齿轮”图标,弹出系统菜单。“修改当前主题”下新增两个菜单项:“设置网站图标”和“设置项目 LOGO ”。
•点击上述菜单项后,弹出文件选择对话框,选择一个图像文件,确定。注:网站图标需是 ico 类型的图像,项目 LOGO 需是 png 类型的图像。类型如不对,系统会给出提示。所选择图像的文件名随便。
•网站图标的大小建议 32x32 像素。该图标将出现在外部浏览器标签页的左侧( WDTP 的任何界面中都不会显示该图标)。
•项目 LOGO 的宽度建议不大于 200 像素, 165 像素最适宜。该图像默认将出现在每个预览页面(网页)的左上方。
izgnod
2017 年 4 月 7 日
@SwingCoder 注意身体呀,你这是一晚上没睡么
SwingCoder
2017 年 4 月 7 日
关于 WDTP 封装的 C++ 11 正则表达式模块,补充一点说明:

封装后的几个静态函数中,异常捕获采用了“就地处置”的方式,捕获后的处理比较“粗暴蛮横”,可能部分比较“传统”的同行对此不太习惯,请自行修改这部分代码。
SwingCoder
2017 年 4 月 7 日
@izgnod 朋友,谢谢您的关心:)
SwingCoder
2017 年 4 月 7 日
更新:系统默认的样式表及 blog 与 book 两个主题下的所有模板文件。
izgnod
2017 年 4 月 7 日
MarkDown 中写入这个会出现问题。
# Nginx HTTP2.0
浏览的时候:
Nginx" target="_blank">HTTP2.0 ">Nginx HTTP2.0
Damaidaner
2017 年 4 月 7 日
佩服 LZ ,赞一个! 主题模板 能再丰富一些就更好了!
izgnod
2017 年 4 月 7 日
@SwingCoder ![]( ) 红圈部分是被修改过的文件名称,一直显示在这里,不知道如何删除掉,这些链接对应的文件现在也不存在了。
SwingCoder
2017 年 4 月 7 日
完善: Markdown 文本超链接的解析。如网址中包含英文右小括号“)”等“特殊字符”,可使用小写引号将网址引起来(否则解析时会提前截断网址,导致链接文本显示不正确,解析后的网址也不正确等问题)。示例:

[链接文本]("https://xxx.com/abc(120).html") 显示效果:链接文本

如需新窗加载“引号网址”,则将“ -”写在引号内(注意减号前面有空格):
[新窗加载]("https://xxx.com/abc(120).html -") 显示效果:新窗加载

WDTP 有标点符号的自动匹配和自动包裹功能,高亮选择网址后只需输入一次小写引号即可完成引号配对与包裹。
SwingCoder
2017 年 4 月 7 日
@izgnod 朋友,确认有这个问题。稍后我就解决它:)
SwingCoder
2017 年 4 月 7 日
谢谢 @Damaidaner 朋友的支持和鼓励:)

模板的问题,我之前的粗浅想法在和朋友、热心用户讨论的时候说过一点:
http://underwaysoft.com/works/wdtp/faq.html#关于众口难调的网页渲染结果

目前我正在考虑是否有另外一些更好的解决方案,几个方面能多管齐下就比较理想了:)
如有好的思路和点子,欢迎提供:)

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

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

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

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

© 2021 V2EX