Atom

思考、故事和创意

蜕变时节

Ghost 博客系统不停地发布新版。

我发布上一篇博客时,Ghost 才出 1.0 版没多久。现在的版本号已经到 1.18.4 了。博客系统更新的频率远大于我更新博客文章的频率。

这段时间说长不长,说短不短,三个月左右。

看了几本不怎么样的书,甚至有些后悔浪费了时间。

已经下过几次不成气候的雪。

博客评论

Ghost 这个博客系统默认不支持评论、留言功能,只能借助第三方评论系统,我在用过 Disqus, 多说和畅言之后,决定干脆还是不要评论功能了。

最首要的原因是我根本不需要关心评论和留言,因为几乎没有人来这里发表评论和留言。有些流量比较大的博客也关闭了评论功能,在知乎上“博客是否应该有评论?”这个问题里看到一个比较有价值的说法。

首先,博客始祖 http://Blogger.com 最初是没有评论的。所以不存在“博客有评论是天经地义的”这么一说。

不开评论的好处:
一、不会被读者的偏好牵着走。
二、你可以完全控制你博客上的一切(假设你的博客是自架的)。
三、发评论的智性成本太低,必然导致评论水准普遍不高。
四、关闭评论不等于关闭耳朵。想讨论的人可以另行发文讨论(反向链接机制可以确保原文作者能看到)。

作者:不鳥萬如一
链接:博客是否应该有评论?
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

有评论功能并不能带来良好的讨论氛围,也不能让自己发布更好的博客文章,关闭了评论也有其他渠道进行沟通。

还有些客观原因,让你即便想开启评论留言功能,也没有很好的办法;即便能够开启,也达不到理想的展示效果。

Disqus 界面和用户群相对来说是最好的,但是处于被墙状态。有人开发了代理,折腾一番可以使用,但是用户如果不想匿名留言,要登录 Disqus 的话,并不方便,它不像国内的第三方罢论系统可以用 QQ,微信,微博这些帐号登录,可选的有 Google, Facebook, Twitter 和 Disqus 本身的帐号体系。

国内的多说、网易云跟帖停止服务了,我选择畅言试了下。

对畅言评论框的可配置项太少了,也没有自定义 CSS 功能,我在网络上搜索能查到相关的文章,这里面甚至有畅言的官方文档。但是现在产品和文档已经有部分对不上了,似乎畅言把评论框的界面大改,把一些功能删掉了。结果就是我只能在评论框深色、浅色主题中做出选择,不是很满意。再加上前面说的主观因素,我对评论的需求很微弱,于是,畅言的评论框在这里展示了不到一天后,我就把它撤下了。

有需要交流的,可以在联系页面找我。

Thinkpad T470 安装 Ubuntu 后的调整

近几天给一台 Thinkpad T470 安装了 Ubuntu 16.04,这里记录一下我认为有必要做的一些调整,分别是字体相关的调整,使用 libinput-gestures “释放”触摸板功能,以及电池管理工具 TLP。

字体渲染

这算是一个 bug 了,已经有人发现并解决了这个问题,修复 Ubuntu 中文字体渲染

原因是

由于字体优先度配置中日文字体的优先度高于中文简体

解决方法如下:

修改下面这个文件

sudo vim /etc/fonts/conf.avail/64-language-selector-prefer.conf

把含有 SC 的行,放在含有 JP 行的前面

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
	<alias>
		<family>sans-serif</family>
		<prefer>
			<family>Noto Sans CJK SC</family>
			<family>Noto Sans CJK TC</family>
			<family>Noto Sans CJK JP</family>
		</prefer>
	</alias>
	<alias>
		<family>monospace</family>
		<prefer>
			<family>Noto Sans Mono CJK SC</family>
			<family>Noto Sans Mono CJK TC</family>
			<family>Noto Sans Mono CJK JP</family>
		</prefer>
	</alias>
</fontconfig>

字体大小

默认设置下,在这个 14 寸笔记本电脑的 Ubuntu 系统里浏览网页时,发现 12px 的字体已经非常小,看着累眼,需要调整一个 scaling factor 参数,让字体不那么小,让眼睛舒服些。

为了方便配置,首先要安装 unity-tweak-tool。

sudo apt install unity-tweak-tool

安装之后运行它,找到 Fonts 这一项,把 Text Scaling Factor 设置为 1.25。立刻就会发现系统的字体大小看上去合适多了。

然而用 Chrome 浏览网页时,字体大小并没有变化,因为 Chrome 的字体并不受前面配置参数的影响,需要在 Chrome 的启动参数里设置上 scaling factor 参数。方法如下:

修改这个文件

sudo vim /usr/share/applications/google-chrome.desktop

找到其中包含 Exec=/usr/bin/google-chrome-stable 的行(总共有三行),在 google-chrome-stable 后面加上 --force-device-scale-factor=1.25这个参数。

Exec=/usr/bin/google-chrome-stable --force-device-scale-factor=1.25 %U
Exec=/usr/bin/google-chrome-stable --force-device-scale-factor=1.25
Exec=/usr/bin/google-chrome-stable --force-device-scale-factor=1.25 --incognito

增强触摸板功能

Ubuntu 本身就支持这款笔记本电脑触摸板双指滚动的功能,但是想要在浏览网页时通过触摸板来前进和后退,就不行了。需要借助额外的工具来实现。

我使用的工具是 libinput-gestures,按照 Github 上的说明安装即可。

  1. 把当前用户加入到 input 组里,并且注销当前会话,或者重启。再进系统进行下一步。
sudo gpasswd -a $USER input
  1. 安装必要的依赖
sudo apt-get install xdotool wmctrl libinput-tools
  1. 安装 libinput-gestures
git clone http://github.com/bulletmark/libinput-gestures
cd libinput-gestures
sudo ./libinput-gestures-setup install

之后再注销重新进来一次。

  1. 启动 libinput-gestures
libinput-gestures-setup start
libinput-gestures-setup autostart   # 设置 libinput-gestures 自动启动

这样就可以用三指左右滑动来实现浏览器的前进和后退了。

Github 的页面上同样介绍了停止、升级和卸载 libinput-gestures 的方法,有必要可以去参考。

电池管理 - TLP

这一项其实并不是特别必要,就是为了省电。

在系统默认源里就要 TLP 的包,但是我在安装时出现了问题,因此建议使用官方的 PPA 源。

sudo add-apt-repository ppa:linrunner/tlp
sudo apt-get update

安装下面这几个包

sudo apt-get install tlp tlp-rdw

Thinkpad 再安装额外的两个包(使用默认源安装时,就是这一步出了错,使用 PPA 源安装的新版没有问题)。另外要注意的是必须进 BIOS 关闭 Thinkpad 的 Secure Boot 功能,TLP 才能完全发挥作用。

sudo apt-get install tp-smapi-dkms acpi-call-dkms

各个包的用途在官网有介绍

  • tlp (PPA or universe) – Power saving
  • tlp-rdw (PPA or universe) – optional, Radio Device Wizard
  • tp-smapi-dkms (PPA or universe) – optional ThinkPad only, tp-smapi is needed for battery charge thresholds, recalibration and specific status output of tlp-stat
  • acpi-call-dkms (PPA or universe) – optional ThinkPad only, acpi-call is needed for battery charge thresholds and recalibration on Sandy Bridge and newer models (X220/T420, X230/T430 et al.)

安装完第一次启动 TLP 需要手动执行,之后 TLP 会自动启动。

sudo tlp start

查看当前状态的命令是

sudo tlp-stat -s

TLP 默认的配置已经足够,更多的命令以及配置请参阅官方文档 TLP - Linux Advanced Power Management

又用回了 Ghost

用 Hugo 作为博客工具已经有挺长一段时间了,当时是从 Ghost 转向了 Hugo,在前段时间,我终于又转回了 Ghost。

主要原因是 Ghost 出了 1.0 版,并且一同发布了一个用于安装、更新 Ghost 的命令行工具,非常方便好用。以往更新 Ghost 程序的麻烦事,现在基本上遇不到了。安装就是 ghost install, 更新就是 ghost update,安装时连 nginx 配置,SSL 证书等都给弄好了,在某些时候会要求 sudo,比如添加 nginx 配置,比如添加系统的启动项,让 Ghost 开机启动。整个过程比以往安装 Ghost 简单不少。以往更新 Ghost 时需要手工或者脚本跑若干条命令,现在只需要 ghost update 就可以了。

另外一个回归 Ghost 的原因是,Ghost 作为一个博客系统,可谓是“恰到好处”。不像 Wordpress 那样功能繁多到臃肿,也不像一票静态博客生成工具那样总让我感觉缺点什么,比如方便的标签功能,对多个作者的支持,统一的后台管理……静态博客生成工具有它的好处,但是上面提得这些功能,绝不是它的优势。有个后台可以浏览管理文章、标签,修改主题,个人资料,这种体验比静态博客生成工具那种所谓 GEEK 的体验好多了。可能是因为我年纪大了吧。

Ghost 后台的编辑器非常好用。用静态博客生成工具,你可以选择任何你喜欢的 Markdown 编辑器,这是个经常听说的噱头,实际上,在写博客时,我需要有一个可以跟其他编辑任务区分开来的编辑器,让我在写博客时,有区别于其他任务的感受。所以,在打开某个我惯用的 Markdown 编辑器时,很可能我的意识并没有在认真写博客。而 Ghost 后台的编辑器给了我最好的写博客的体验。

总之,我是懒得折腾了,也不在乎静态页面的“极端性能”了,更多是在乎自己的使用体验。

TTRSS 的一个图片插件

有些网站页面中在 HTML 刚刚加载完成时,其中的 img 图片标签并没有 src 属性,而是把图片链接放在一个自定义的属性里,比如这样,放在 data-url 里:

<img data-url="http://example.com/aaa.jpg">

然后由 js 来对 img 标签里的属性进行修改,把 data-url 的内容,放到 src 里,以此来实现图片的懒加载。当通过 RSS 订阅,在 RSS 阅读器里看这种文章内容时,因为 js 的缺失,图片标签里就一直都不会有 src 属性,也就看不到图片了。好在 TTRSS 支持插件扩展,可以比较方便地解决这个小问题。

在 TTRSS 官方有个非常简略的页面 Making plugins 介绍如何写它的插件。大意是提供了从抓取数据、到数据库、到页面展示之间几个可以 HOOK 的点,在这些位置,对库中的内容进行处理。看完这点介绍,仍然一头雾水,不过还有一些插件的例子可以学习和模仿。

在 TTRSS 的主目录下 plugins 目录,创建一个新的目录,新目录名就是要写的会显示在 TTRSS 后台的插件名,在这个目录里新建 init.php 文件作为入口,根据不同的 HOOK 点以及要做的不同功能,在里面实现几个指定的函数,就算完成了。

最终照虎话猫写了一个这样的 TTRSS 插件:

// ttrss/plugins/af_imgdataurl/init.php

<?php
class Af_ImgDataUrl extends Plugin {
    private $host;

    function about() {
        return array(1.0,
                "Convert data-url in img tag to src",
                "noodles");
    }

    function init($host) {
        $this->host = $host;
        $host->add_hook($host::HOOK_ARTICLE_FILTER, $this);
    }

    function hook_article_filter($article) {
        $charset_hack = '<head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        </head>';

        $doc = new DOMDocument();
        $doc->loadHTML($charset_hack . $article["content"]);
                $found = false;
        if ($doc) {
            $xpath = new DOMXpath($doc);
            $images = $xpath->query('(//img[@data-url])');
            foreach ($images as $img) {
                $src = $img->getAttribute("data-url");
                $img->removeAttribute("data-url");
                $img->setAttribute("src", $src);
                $found = true;
            }
            $images = $xpath->query('(//img[@data-original])');
            foreach ($images as $img) {
                $src = $img->getAttribute("data-original");
                $img->removeAttribute("data-original");
                $img->setAttribute("src", $src);
                $found = true;
            }
            if ($found) {
                $doc->removeChild($doc->firstChild);
                $article["content"] = $doc->saveHTML();
            }
        }

        return $article;
    }

    function api_version() {
        return 2;
    }
}
?>

主要逻辑在 hook_article_filter 函数里:解析 HTML,获取图片 url,设置 src 属性,生成新的 HTML 返回出去。

然后去 TTRSS 后台偏好设置里给这个插件打勾选中启用就可以了。

选中,启用插件