外行 R 包开发手记:mindr

in #cn2 years ago

在 CRAN 发布的几个包里, 我对 mindr 情有独钟。它像 pinyin 包一样,结构简单清晰。它得到的用户反馈不像 bookdownplus 包那样让我手足无措。相反,在跟用户的互动中,mindr 在成长,越来越酷。开发升级 mindr,是个很愉快的过程。

(1)

mindr 最初的功能只有两个:一是把 markdown 文本里的标题提取出来,转成思维导图;二是反向操作,把思维导图里的节点按级别转换成 markdown。

想不起来当初是什么让我萌生了开发 mindr 的念头。最大的可能,是在写《学 R》的时候,我想给出版社呈现一个漂亮的大纲。


对,应该就是这样的,要不然还能是什么?记得我打开 Xmind,把书稿里的标题一个一个拷贝粘贴进来。这时老毛病又犯了:这个过程很机械枯燥,为什么不能自动完成呢?

于是搜索了一下现成的 R 语言包,没找到。我曾经怀疑是不是被我漏掉了,直到后来 mindr 的用户给我发信,说 mindr 是他发现的唯一一个做思维导图的包。这印证了我当时没找到确实是因为不存在。

既然不存在,那么能不能自己动手写一个?目标是思维导图,它的文件结构是什么样的?

我电脑里总共就装了两个思维导图软件,一个是 XMind,另一个就是 FreeMind。

XMind 生成的思维导图文件,用文本编辑器打开后,是一团乱麻。

而 FreeMind 的文件,打开后是逻辑清晰的可读代码。

更关键的是,XMind 可以导入 FreeMind 的文件。不仅 XMind,各大思维导图软件都支持 FreeMind。

这就好办了。几条正则表达式查找替换,核心代码只有几十行,mindr 就这样轻松诞生了。

(2)

刚一诞生,就出了件怪事:mindr 突然得到了很多星星 (star)。

原来,在一个名叫黑客新闻的地方,它被人围观,评头论足。

我不知道这是个什么论坛,但是我猜,围观的这些人可能都是专业程序员。所以我的感觉就像是一个小孩第一天上幼儿园。

有人上来就说,mindr 没用。思维导图应该用手拿笔画才有用。然后就有人说,现在很多人都用电脑软件画,谁还手绘呀……

有人说,有很多现成的库可以用,pandoc 加个什么 filter 就能转换了,为啥又用 R 写了一个?然后有人说,可能作者只会 R 吧……

更有人说,mindr 带给他的最大收获,是获悉了 bookdown 这个神器……

有意思。非常有意思。


(3)

mindr 基本没遇见太大的 bug。因为它太简单了,而且用户很少,下载量不过几千。

要说最大的 bug,就是益辉提出的,mindr 错把某处代码里以 “#” 开头的注释当成了章节标题。

这个我有点意外,因为mindr 从一开始就考虑到将三个反引号开头、三个反引号结束的代码块排除在外了,并且拿我自己的书试验过,都把代码块正确干掉了。莫非是我正则表达式用错了?

仔细一查,原来是 mindr 出错的这本书比较特殊,是有关编程的教程,里面出现了四个反引号开始和结束的代码块,里面还嵌着代码块,像个俄罗斯套娃,把没见过世面的 mindr 吓傻了。

等镇定下来,升级之后,这个问题基本解决。之所以说“基本”,是因为 mindr 仍然处理不了三个反引号开头,四个反引号结尾的代码块。mindr 认为他们没有成双成对。这种情况,不仅 mindr 处理不了,typora 也处理不了,sublime 的markdown 插件也处理不了。然而 pandoc 似乎完美处理了。

没啥好说的,业余就是业余。


(4)

用户给 mindr 提了很多建议。

有人说,能不能把 tibble 数据表转换成思维导图。我都不知道什么是 tibble 数据表,也不知道这样做的意义,本想敷衍了事,那人却详细地提出了他的需求,并给了贴心的示例,弄得我不好意思泼冷水。于是花了点工夫,可以从一个近似的数据生成他想要的图。


有人说,能不能别借助第三方软件,而是直接在 R 的界面来展示 markdown 和 FreeMind 的思维导图?这个对我来说超纲了,但是搜了一下,有人开源了一个叫 markup 的包,我修改了一番,就拿来用了。


还有人说,能不能在 markdown 和 FreeMind 相互转换时,保留标题里的超级链接?还有人说,能不能用思维导图来展示电脑里文件夹和子文件夹的结构?还有人说,能不能添加一个过滤器,来指定把某个扩展名的文件参加转换?这些功能,虽然我觉得用到的人少之又少,但一听我就知道该如何下手,就当练手,一个一个都实现了。

现在只剩下最后一个问题了:能不能将 markdown 里的 LaTeX 公式在转换得到的思维导图里保留下来?

有这种想法的人真疯狂,不过我喜欢。

因为我已经找到了一个很绝妙的解决方案,简答得令人发指。

可惜这里写不下。



Posted from my blog with SteemPress : http://dapengde.com/archives/19789
Sort:  

唉,书算是白买了~~~

何出此言?书当然不会白买,至少可以用来垫枕头。

能不能做个库,一运行就把大鹏钱包里的钱转到我这里来?

Posted using Partiko iOS

有钱人多的是,大鹏的钱包瘪得很……是什么限制了你的想象力

千里之行始于足下,不积跬步无以至千里啊🤓

Posted using Partiko iOS

我比较习惯用XMind,简单又方便

XMind 确实是个好软件!

Hi @dapeng!

Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation!
Your UA account score is currently 4.143 which ranks you at #3032 across all Steem accounts.
Your rank has improved 33 places in the last three days (old rank 3065).

In our last Algorithmic Curation Round, consisting of 299 contributions, your post is ranked at #84.

Evaluation of your UA score:
  • Some people are already following you, keep going!
  • The readers like your work!
  • You have already shown user engagement, try to improve it further.

Feel free to join our @steem-ua Discord server

Congratulations @dapeng! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

Award for the total payout received

Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word STOP

Do not miss the last post from @steemitboard:

SteemitBoard Ranking update - Resteem and Resteemed added

Support SteemitBoard's project! Vote for its witness and get one more award!

Coin Marketplace

STEEM 0.20
TRX 0.03
JST 0.030
SBD 3.22