标签归档:wordpress

纯文本笔记管理的最大漏洞:关键词污染

单一的纯文本文件作为数据存储单元,本质上是个“双字段结构”,即文件名是一个字段,文本内容是一个字段。文件名本质上是个字符串,受到长度限制,一般认为超过 256 个字节会产生潜在风险。

在个人知识管理领域,不超过 256 字节的字符串一般不宜存储重要信息。因此,纯文本笔记(无论是txt格式还是md格式),主要通过文本文件内部“较大的那个字段”存储纯文本信息。

在文本文件中存储多维信息,本质上是对不同维度的信息进行降维。

以这个纯文本文件为例:

这是个典型的卡片式摘录,存储了一个小的知识点:损益表和利润表的名称变迁。这样的文本内容,看起来没有大问题。但当问题复杂一点的时候,事情就会慢慢起变化。

这个卡片是阅读《以交易为生》这本书的摘记。笔记的内容讲的是心中没有主见、定力的人,到处寻找“救世主”。如果希望这个卡片可以在以后复用,除了通过 Random 函数随机碰撞复现,大抵是需要通过关键字检索的。这个时候,可以把原来的关键字:

tags: 
#《以交易为生》
#Alexander_Elder
#Y2013

扩展到:

tags: 
#《以交易为生》
#Alexander_Elder
#Y2013
#心态控制
#救世主

如此即可实现在探讨“救世主心态”或交易中的心态控制时,挖掘到这张卡片。事情发展到这里,so far so good。

但是,当另一个研究课题摆在面前时,事情会变得不一样:如果这时候的研究命题是,交易中的技术分析,我用“交易”这个关键字在卡片库中搜索,所有来自《以交易为生》这本书的卡片,由于书名中包含 交易这个关键字,这本书中所有的摘记都会被搜索出。在没有 Devonthink 或者 YARPP 这样的关联计算软件或插件介入时,整个搜索结果会被严重污染。

这一切的根源还是来自于前文的那句话:

在文本文件中存储多维信息,本质上是对不同维度的信息进行降维。

一个读书笔记卡片,或者叫摘记卡片,包含的信息是不同维度的:

  • 内容,即正文;
  • 出处,包括书名、作者;
  • 摘录的时间点;
  • 对主题的概括,以备“搜索”或“聚合”用
  • 批注

这些不同维度的数据,统统压缩到文本文件的文件内容中,以纯文本形式呈现,将不可避免地产生“关键字污染”。现在的新书书名有很长,作者都有“关键字意识”。比如这本书:

这本书里出现的一切奇闻异事、个人感受、名言警句,都会出现在“印象笔记”和“Evernote”的搜索结果中,而无论彼时彼刻的那张卡片、那条笔记究竟是否与“印象笔记”和“Evernote”有关。

这个问题,通过纯文本文件管理笔记,无法克服。这不取决于是否应用了 Markdown 格式,也不取决于是否自主掌握笔记内容,这是整个知识库的底层技术选型限制的。

目前的公共讨论空间,确实存在这样一种误区:

  • 长期有效的知识管理,一定要自己掌握数据;
  • 而自己掌握数据,一定要通过纯文本文件本地存储。

前一句话没问题,后一句话将所有权归属的问题,误读成了技术选型要用 Markdown、纯文本格式。我个人并不反对以纯文本保存信息。这是种很干净的格式,也是历久弥新的长期有效通用格式。但个人知识库的实质并不在于讲知识(无论是否是卡片形式或者“元素化”的形式)保存在硬盘。

知识库的本质是历久弥新。这个角度看,知识库就是“数字花园”或者“知识花园”,需要播种收获,需要时常翻土。指望着一次性烙进去一个文本文件,就巩固了一个知识点,是一种战略上的懒惰。

在前面《关于笔记的再思考》一文中,提到了一种以 WordPress 为核心的知识管理模式。这种模式完全可以通过只有的域名、租用的服务器、通用的 WordPress 平台以及自动化的网盘(及本地)备份实现“自主掌握全部数据”。而从数据存储格式上看,sql 数据库格式的年龄并不比 txt 文本文件的年龄小很多,而世界上 43% 的网站份额也决定了无论是开源社区还是插件市场,WordPress 都不会比任何一款“笔记软件”或“个人管理软件”差。

在结构化的 WordPress 平台上,Category 分类和 Tag 标签完全可以对内容实现“京东自营购物”似的筛选、过滤、搜索,全文检索数据库也不需要从中文分词的角度做出任何二次开发。很多时候,找出一个,或者是一类内容,甚至不需要通过搜索框。这背后的底层逻辑是,WordPress 是基于 SQL 数据库技术的、多维度、大容量的内容管理(分发)平台。

这才是目前个人知识管理最好的选择,也是解决前文所述的“关键词污染”这个纯文本系统固有缺陷的直接办法。当然,WordPress 的技术门槛比起 Obsidian/LogSeq 是略高一些的。这是另一个话题了。

原创文章,转载请注明: 转载自风云居 | Less is more

本文链接地址: https://kangjian.net/blog/2340/

关于笔记的再思考

“元素化”与“纯文本文件”是一组不可得兼的矛盾。笔记的数量达到万条级别后,散见的文本文件无法实现有效率的搜索。要么忍受动辄几秒十几秒的耗时,要么将文本库转义为“镜像”,如 Mac 系统的 devonthink,或 Win 系统的各种本地检索软件。总之,磁盘文件夹级别,或者叫目录级别的库管理效率极低,如果考虑到批量添加/删除/替换等操作,还需要掌握复杂的正则表达式,学习成本已经不低于掌握 vim/emacs 了。

以 Obsidian 为代表的编辑器软件在开源社区的加持下,作为编辑器的用户体验很好,但作为“笔记管理系统”,管理性能的上限明显。而以 evernote/印象笔记为代表的数据库软件,建立在类似 sql-lite 等数据库架构,可以保证日常管理的效率,却完全不具备开放性,甚至因为封闭属性,已经产生了负向的用户价值。

什么才是合理的中间道路呢?

——一方面,保持类似纯文本文件管理的普世开放性,起码满足达到不低于现在(24H1)Obsidian 社区规模的条件;

——另一方面,建立在数据库架构上,却不会受限于封闭的文件格式或者吝啬的商业模式(印象笔记是其中的典型),可以由用户进行合理范围内的自定义设置/二度开发。

答案呼之欲出,没错,WordPress——地球上超过三分之一的 web 站市场份额,合理的免费/付费模式,无以伦比的开发者社区,mysql 数据库规范架构。

论功能,笔记软件的搜索、分类、tag 标签、时间戳,甚至双向链接(trackback 机制比近年大火的双向链接早了大概 15-20 年),WordPress 作为 cms 领域的行业标准,都可以实现;

论开放,WordPress 社区的规模和开发水平要远超 Obsidian 社区,主题和插件数量极为丰富;

论稳定,WordPress 每天支撑着这世界上近半网站的运转,稳定性较之个人开发者成果,要高上几个数量级;

论预期寿命,WordPress 更是远超现存任何一款“知识管理软件”,即使 PHP 底层技术式微,也会有无数成型的解决方案,继续维护 WordPress 界面背后的那个数据库。毕竟不同于前端技术三年五载迭代更新,数据库技术几十年来一直保持了主干不变。

作为个人笔记库, WordPress 的弊端也很鲜明。

一是初始门槛相对高。现实的方案,免费的 WordPress 程序要配合域名(在大陆地区还需要完成备案)和主机空间(或 vps 甚至服务器),这两个门槛就隔绝了大量使用者。

二是备份/同步相对复杂。作为在线程序,WordPress 的一键化备份一直是个大生意。技术上备份要分为 WordPress 程序/文件系统,和数据库两个分支分别备份,复杂性远超各类个人知识管理软件。

三是作为在线程序,离线无法使用。这一点类似于早期的 roam research。

四是编辑界面相对简陋,不如 Obsidian/Logseq 等编辑软件用户友好,更不如 VS-Code 功能强大。

好在,这些问题除了问题一属于硬资源约束,其他大都可以解决。

备份同步问题,可以设置相应软件的 SOP 定期同步虚拟主机文件夹,备份全站,并在 Mac/Win 的终端界面写好导出-下载数据库的脚本定期执行。门槛稍高,但并不麻烦。

离线使用问题,可以分为离线读取和离线写入分别处理。“离线读取”角度,可以应用 WordPress 静态化插件生成 HTML 文件夹,在备份同步环节本地化,再套用 devonthink 等软件救急。“离线写入”角度,可以临时将录入内容放在其他地方,恢复网络连接再补录到 WordPress。毕竟在现在的生活中,离线环境大多是飞机高铁等临时性环境,应急从权即可。

编辑界面问题,大可“重器轻用”,大大方方用 Obsidian 等写作“IDE”,在 Obsidian 建立一个文件夹叫“写作台”专门放置临时文件,处理一时写不完的长篇思考,写好输出 HTML 复制到 MarsEdit 等 WordPress 编辑端。零碎闪光、摘录,直接进入 MarsEdit,写好直接发表。这样做的好处是,连带着图床功能也可以沾光 Obsidian,尽量保持 WordPress 不存附件,保持在线内容尽可能存放在数据库。毕竟虚拟主机的可靠性比起阿里云腾讯云等图床服务还是差了不少。

理顺这些逻辑,最后就是形成稳定的 SOP 了。哪怕没有上面这些辨析,仅仅是在微信订阅号写作,也是有 SOP 可以梳理的。“重器轻用”后,复杂的流程,SOP 之后不一定真的复杂;有时,“All-in-one”的方案,由于不断调动外部资源,事实上也并非简单。

原创文章,转载请注明: 转载自风云居 | Less is more

本文链接地址: https://kangjian.net/blog/2337/

VPS升级 LNMP(Oneinstack版本)设置笔记,重点排除rewrite伪静态问题

这几天抽空把博客升级,用了Oneinstack的套件。大部分的时间用来排除blog的伪静态rewrite。成功了才发现,之前早已经记录过这个问题。

Oneinstack的官网上好像还没有记载。照录在这里。

正常安装。编辑

usr/local/nginx/conf/rewrite/wordpress.conf

代码是这个:

location / {

if (-f $request_filename/index.html){

rewrite (.*) $1/index.html break;
}

if (-f $request_filename/index.php){

rewrite (.*) $1/index.php;
}

if (!-f $request_filename){

rewrite (.*) /blog/index.php;
}

}

要特别注意上面代码的最后,加粗的部分,这里的“blog”的放Wordpress的目录名称。然后重启服务:

service nginx restart

搞定。

原创文章,转载请注明: 转载自风云居 | Less is more

本文链接地址: https://kangjian.net/blog/1658/

WordPress默认主题Twenty Ten的blockquote引用样式修改

WordPress默认主题Twenty Ten的默认blockquote引用样式为“斜体+缩进”,在排版上不太醒目。如图:

image

通过修改主题样式,可以使排版更加醒目、清晰。如图:

image

修改主题的Style.css:

查找“blockquote”,找到下面的代码:

blockquote {
font-style: italic;
padding: 0 3em;
}

这段代码有两个作用:一个句定义了斜体,一句定义了偏移的位置。我们在这段代码的前后通过注释符将代码注释掉:

/*
blockquote {
font-style: italic;
padding: 0 3em;
}
*/

在css文件末尾加入下面的代码:

blockquote {
background:#f9f9f9;
border-left:10px solid #ccc;
margin:1.5em 10px;
padding:.5em 10px;
width: 90%;
font: 微软雅黑, Georgia;
color: #888;
}
blockquote p {
display:inline;
}

其中,width宽度、font字体等处可根据实际情况修改。改完保存即可。如果需要恢复原状,只需要去掉最后一段代码,再把前面的注释符号去掉就可以。

20120211

20120529:经土木坛子兄提醒,如将上述代码最后三行去除,引用段落内可以完成换行。

原创文章,转载请注明: 转载自风云居 | Less is more

本文链接地址: https://kangjian.net/blog/892/

Linode VPS主机设置sendmail实现WordPress邮件通知

购买VPS后,一切系统功能都要自己动手实现。Wordpress通过mail()实现邮件发送。在VPS上,需要通过sendmail模块予以实现。

以Ubuntu为例:

1.安装sendmail

apt-get install sendmail
service sendmail start

2.设置sendmail开机自动运行

apt-get install chkconfig
chkconfig sendmail on

3.修改下php.ini的配置,调用sendmail功能

vim /usr/local/php/etc/php.ini 

找到有关sendmail_path的那一行,去掉行首注释,并改成如下的样子:

sendmail_path = /usr/sbin/sendmail -t –i

4.重新启动VPS主机

原创文章,转载请注明: 转载自风云居 | Less is more

本文链接地址: https://kangjian.net/blog/883/

更正了WordPress媒体库中两处图片链接错误

晚上写了一篇中期票据的Memo,临睡顺手更正了Wordpress媒体库中两处图片链接错误,涉及旧时Post两篇:

不能用UTF-8的汉字做附件文件名了。

yunnanganlanba.jpeg

再次向云南生产建设兵团第三水利团的知青们致敬!

原创文章,转载请注明: 转载自风云居 | Less is more

本文链接地址: https://kangjian.net/blog/803/

Linode VPS 设置LNMP (Linux + Nginx + Mysql + PHP) + WordPress伪静态笔记

Lunarpages实在是过慢了。服务行业就是这样,低价格一定是低品质。500ms以上的ping值无论如何不具有实用价值。于是挑战一下,从零开始试用了一下Linode的VPS。门户博客就像宾馆,拎包入住;虚拟主机就像毛坯房,尽管作何用很自由,但毕竟格局已定,条条框框就在那里,简单装修即可;VPS则彻底是地皮一块——裸机一台,需要自己选择系统究竟是CentOS还是Ubuntu,再通过SSH远程操作,从装系统开始,逐步搭建一个生产环境。 自从进了法学院,久违了这种码农似的研究。Linux的操作感果然很好,尽管没有GUI界面,依然是高效的。记录一下设置VPS的过程,方便以后的自己,也方便有缘读到这些文字的朋友。

一、牢记几个关键密码

这些密码层级不同,用处各异,必要的话用纸写下来。无论是操作虚拟主机还是VPS,千万不要因为记错不同的密码浪费时间。

  • 登录linode的账号、密码
  • 主机root密码
  • MySQL的root密码
  • FTP用户的密码
  • MySQl的FTP数据库(PureFTPd)密码
  • PhpMyAdmin的root密码

二、安装系统,搭建环境

这里我选择的是Ubuntu 11。这是我唯一接触过的Linux系统,使用者也多,google的资源丰富。 ssh环境下,vim或Linux操作时,鼠标右键单击=Ctrl+V,Ctrl+Inster=Ctrl+C。下面的所有指令都可以复制到剪贴板然后再ssh中右击粘贴,不要一个字母一个字母录入。

1.直接运行以下命令:

apt-get upgrade apt-get update

2.使用以下命令修改主机名称:

echo "YourVPSName" > /etc/hostname hostname -F /etc/hostname

其中YourVPSName可以替换成你自己的名字。

3.设置时区

tzselect

根据提示选择,一般5-9-1-1设置Beijing即可。

4.获取lnmp一键安装包并解压

wget -c http://soft.vpser.net/lnmp/lnmp0.8.tar.gz tar zxvf lnmp0.8.tar.gz

5.安装lnmp

cd lnmp0.8/ ./ubuntu.sh

这一步需要输入一个绑定的域名,根据lnmp.org的建议,使用一个二级域名lnmp.xxx.xxx,这个域名是互联网上不存在的,修改本地hosts可以使用。 马上要设定几个密码,准备好纸笔,写清楚即可。 这一步耗时大概30分钟左右。程序会自动安装编译Nginx、PHP、MySQL、phpMyAdmin、Zend这几个软件。

6.安装几个必要组件

这一步基本没什么难度,相当于Windows下的一路Next。这一阶段要安装eAccelerator、ionCube、imageMagick、memcached、PureFTPd等。

7.升级Nginx版本

./upgrade_nginx.sh

按提示输入nginx的版本号,如1.1.13。

8.升级PHP版本

./upgrade_php.sh

按提示输入php版本号,如5.3.9。这一步很重要,据说老版本的PHP有比较严重的漏洞。5.3.9比较安全。

9.添加虚拟主机

/root/vhost.sh

这里会要求输入一次rewrite的程序。输入即可。伪静态不管用,后面需要重新写rewrite规则。

10.至此,系统环境基本搭建完毕。

三、几个必须要做的调整

1.设置ftp自动运行

这一步是必需的,否则一旦VPS重新启动,FTP将无法直接登录。如果你几周以后Reboot了系统,忘了FTP不能自动运行,导出找原因会找到死。 执行如下命令使开机启动:

cat >/etc/init.d/pureftpd.sh<<eof /root/pureftpd start eof update-rc.d pureftpd.sh defaults

2.设置目录写入权限

之前我们的操作是以root账户完成的,所有文件/文件夹的所有者都是root。如果保持这个状态,之后我们将无法以ftp账户的名义执行很多操作——比如任何形式的写入;同样,Wordpress等程序也无法上传附件。

chown -R www /home/wwwroot

chown指令将后面的目录的所有权限指派给了www用户。在前面设置ftp你已经将ftp账号的uid和gid设置成www组了。至此,一个Wordpress的环境设置结束,可以“自豪的使用Wordpress了”。

3.设置可用的rewrite伪静态规则

网上有很多Nginx的rewrite伪静态规则笔记。在我的实践中发现,大多不能用——不仅仅没有效果,有可能连累系统无法运行。rewrite设置得我几欲放弃,已经甘心宁愿用“?p=**”的传统默认链接了,最后一试成功了。下面的代码可以直接解决单域名单一目录或多子目录(多Wordpress,比如kangjian.net)的伪静态rewrite问题:

vim usr/local/nginx/conf/wordpress.conf

单一目录rewrite伪静态规则:(根据WP所在目录改写/blog部分)

location / { if (-f $request_filename/index.html){ rewrite (.*) $1/index.html break; } if (-f $request_filename/index.php){ rewrite (.*) $1/index.php; } if (!-f $request_filename){ rewrite (.*) /blog/index.php; } }

多个wordpress程序,多个子目录:(根据WP所在目录改写/blog和/paste部分)

location /blog/ { if (-f $request_filename/index.html){ rewrite (.*) $1/index.html break; } if (-f $request_filename/index.php){ rewrite (.*) $1/index.php; } if (!-f $request_filename){ rewrite (.*) /blog/index.php; } } location /paste/ { if (-f $request_filename/index.html){ rewrite (.*) $1/index.html break; } if (-f $request_filename/index.php){ rewrite (.*) $1/index.php; } if (!-f $request_filename){ rewrite (.*) /paste/index.php; } }

改写完wordpress.conf,执行下列语句重新启动Nginx的web环境:

/usr/local/nginx/sbin/nginx -s  reload

四、安装Wordpress程序

现在,安装Wordpress还是恢复别处备份来的Wordpress就看具体情况了。 感谢lnmp.org

后续文章:

Nginx下设置www.kangjian.net访问kangjian.net》 - 2012-1-30
Linode VPS主机设置sendmail实现WordPress邮件通知》 - 2012-2-11
Linode VPS升级 LNMP(Oneinstack版本)设置笔记,重点排除rewrite伪静态问题》 - 2016-8-23

WordPress程序中的Trackback

一直以来觉得blog最伟大的功能就是trackback,尽管这个词目前还没有统一的翻译。前几天还在做专家状给初级zbloger普及 trackback的功能,却发现其实自己还没搞清楚Wordpress下的trackback地址究竟是什么。以至于信誓旦旦的说,Wordpress 就不像Zblog那样单独有一个trackback地址,日志地址就是trackback的URL。完全记错了。

WordPress下面的trackback地址是每篇日志的url后面加上“/trackback/”。

例如这篇日志的URL是:

http://kangjian.net/blog/439

这篇日志的trackback地址就是:

http://kangjian.net/blog/439/trackback/

WordPress下面的很多模板都不会默认设置显示trackback地址,可以手动添加到single.php的适当位置中去:

本文Trackback引用地址,欢迎通过Trackback与我一起讨论

顺便多说几句,一直以来鄙视新浪博客的最主要原因就是新浪把类似trackback这样的blog基本功能阉割了,好端端的博客变成了“网络日记+留言板”,十足的落后生产力的代表。为什么这么说,可以参看这篇文章

写这篇日志参考了几位朋友的文章(1,2),在此一并表示感谢。

原创文章,转载请注明: 转载自风云居 | Less is more

本文链接地址: https://kangjian.net/blog/439/