威联通折腾篇十七:Docker 安装的 NextCloud 升级、备份及恢复

之前有文章写过如何在 Qnap 上使用 Container Station 来安装 NextCloud,之前重度使用 NextCloud,里面已经存了近 70G 的文件内容,这次系统重建后,下载新的镜像,然后重新恢复,费了一番时间,主要是恢复数据库,然后还有本地挂载的文件,以及升级版本。

从备份的角度来看,也正是这三个部分比较重要:

  • 数据库备份
  • 本地数据备份,也就是 /var/www/html 挂载的目录,我的是 /share/NextCloud
  • Docker 镜像备份

以上三个内容,前两个需要完全备份,否则会造成数据丢失。第三个则可以从 Docker Hub 上拉下来。

docker pull nextcloud:latest

我是从 13.0.4 版本的镜像升级到 14.0.9 版本,升级后重启容器,出现了如下的错误:

AH00169: caught SIGTERM, shutting down

调查发现,NextCloud 在升级过程中将自己变成了维护状态,这个配置在数据目录下的 config/config.php 文件中,打开该文件,搜索 maintenance:

'maintenance' => true

将 true 改成 false, 然后重启容器,即可进入 NextCloud 应用。

从 17 升级到 18 版本

使用同样的方式,将 NextCloud 从 17 版本升级到 18 版本。

访问 ip/status.php 会看到:

{"installed":true,"maintenance":true,"needsDbUpgrade":true,"version":"18.0.11.2","versionstring":"18.0.11","edition":"","productname":"Nextcloud","extendedSupport":false}

升级过程中发现数据库表字段问题

报错内容:

InvalidArgumentException: Column name “oc_flow_operations”.”entity” is NotNull, but has empty string or null as default.

解决方法,见 issue,因为我使用的是 MariaDB 所以:

alter table oc_flow_operations add column entity character varying(256) not null;

如果是其他数据库可能需要对应的 SQL 语句。

从 18 版本升级到 19 版本

从 NextCloud 18 升级到 NextCloud 19 没有遇到什么坑。

从 19 版本升级到 20.0

将 Nextcloud docker 镜像升级到 20.0 没有遇到问题。

从 20.0 升级到 21

同样也没有遇到问题。


2020-01-16 qnap , qnap-tutorial , nextcloud , file-sync , dropbox , backup , restore , mysql , sql

威联通折腾篇十六:为 Container Station 更换镜像

都知道其实 QNAP 的 Container Station 就是 Docker,所以桌面版可以修改的国内镜像地址,QNAP 系统上也能够修改,可以快速提高镜像的下载速度。

其实在网页管理段也能够手动添加,在 Container Station 属性中,Registry 服务器可以手动添加。

或者我们可以 SSH 登录到后台,然后手动编辑配置文件,docker 的路径是 /share/CACHEDEV1_DATA/.qpkg/container-station/

然后在该目录下有 etc/docker.json 文件,手动修改该文件:

{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

然后重启 Container Station 服务:

/etc/init.d/container-station.sh restart

可用的镜像地址,可以参考我另外一篇文章。

备份一下用的 Docker Container

bookstack

version: "2"
services:
  bookstack:
	image: linuxserver/bookstack
	container_name: bookstack
	environment:
	  - PUID=1000
	  - PGID=1000
	  - DB_HOST=10.0.3.1:3306
	  - DB_USER=bookstack
	  - DB_PASS=password
	  - DB_DATABASE=bookstack
	volumes:
	  - /share/Container/bookstack_config:/config
	ports:
	  - 6875:80
	restart: unless-stopped

FileRun

version: '2'

services:
  filerun:
    image: afian/filerun
    container_name: filerun
    environment:
      FR_DB_HOST: 10.0.3.1
      FR_DB_PORT: 3306
      FR_DB_NAME: filerun
      FR_DB_USER: filerun
      FR_DB_PASS: password
      APACHE_RUN_USER: www-data
      APACHE_RUN_USER_ID: 1000
      APACHE_RUN_GROUP: www-data
      APACHE_RUN_GROUP_ID: 100
    ports:
      - "30080:80"
    volumes:
      - /share/filerun/html:/var/www/html
      - /share/filerun/user-files:/user-files
    restart: unless-stopped

Calibre-web

docker run --name=calibre-web --restart=always \
-v /share/vol4Book/CalibreBooks:/books \
-v /share/Container/calibre-web/app:/calibre-web/app \
-v /share/Container/calibre-web/kindlegen:/calibre-web/kindlegen \
-v /share/Container/calibre-web/config:/calibre-web/config \
-e USE_CONFIG_DIR=true \
-e APP_REPO=https://github.com/janeczku/calibre-web.git \
-e APP_BRANCH=master \
-e SET_CONTAINER_TIMEZONE=true \
-e CONTAINER_TIMEZONE=Asia/Shanghai \
[-e PGID=100 -e PUID=1000 \]
-p 8083:8083 \
technosoft2000/calibre-web

Nextcloud

docker run -d \
    -v /share/NextCloud:/var/www/html \
	-p 20080:80 \
    nextcloud

Gogs

docker run --name=gogs \
-p 10022:22 \
-p 10080:3000 \
-v /share/gogs:/data \
gogs/gogs

TT RSS

Tiny Tiny RSS

docker run -d --name ttrss --restart=unless-stopped \
-e SELF_URL_PATH=http://192.168.2.200:181 \
-e DB_HOST=10.0.3.1 \
-e DB_PORT=5432 \
-e DB_NAME=ttrss \
-p 181:80 \
wangqiru/ttrss

全文插件:

docker run -d \
--name=mercury-parser-api \
-p 3080:3000 \
wangqiru/mercury-parser-api

weblate

version: '3'
services:
  weblate:
    image: weblate/weblate
    volumes:
      - /share/Container/weblate/weblate-data:/app/data
    env_file:
      - ./environment
    restart: always
	ports:
	  - 5080: 8080
    depends_on:
      - database
      - cache
  database:
    image: postgres:11-alpine
    env_file:
      - ./environment
    volumes:
      - /share/Container/weblate/postgres-data:/var/lib/postgresql/data
    restart: always
  cache:
    image: redis:4-alpine
    restart: always
    command: ["redis-server", "--appendonly", "yes"]
    volumes:
      - /share/Container/weblate/redis-data:/data

还需要把这个项目 中的 environment 文件拷贝过来,然后再:

docker-compose build
docker-compose up

rrshare

docker run -d \
--name rrshare \
-p 3001:3001 \
-v /share/rrshare:/opt/work/store \
oldiy/rrshare64:latest

Lychee

docker run -d \
--name=lychee-laravel \
--restart always \
-v /share/Container/lychee/conf:/conf \
-v /share/Picture/Lychee:/uploads \
-e PHP_TZ=Asia/Shanghai \
-e PHP_MAX_EXECUTION_TIME=600 \
-e DB_CONNECTION=sqlite \
-e DB_DATABASE=/conf/lychee.db \
-p 90:80 \
80x86/lychee:latest

flexget

docker run -d \
    --name=flexget \
    -p 3539:3539 \
    -v /share/Container/flexget/data:/data \
    -v /share/Container/flexget/config:/config \
    -e FG_WEBUI_PASSWD=password \
    -e FG_LOG_LEVEL=info \
    -e PUID=1000 \
    -e PGID=1000 \
    -e TZ=Asia/Shanghai \
    wiserain/flexget

2020-01-16 qnap , qnap-tutorial , linux , docker , mirror

我的备份方案

上周五 NAS 系统盘挂掉后一个周末都没有过好,一边忙着备份数据,一边要忙着整理系统应用和配置。早以前除了云端同步数据曾经出现过一两次数据丢失的情况,本地保存的数据还没有出现过管理的问题,系统会用 Clonezilla 全量备份,笔电日常数据则辅以同步工具 Dropbox(后替换成 Syncthing) 和自建的 NextCloud,平时丢数据的可能倒是比较小,但唯一疏漏的 NAS,因为硬盘不是一次性买全而是分了几次购买,所以从一开始就没有规划好如何存储与备份,而系统的酷狼 4T 盘可能经过几次家里停电,SMART INFO 出现警告的时候也没有想到备份,所以造成了从周五开始突然系统盘变成只读状态,无奈只能立即开启 rsync 手动先将系统盘中的数据备份到其他盘。等到周日把损坏的系统盘送修之后,是时候来思考一下如何管理及备份本地数据了。

经过这一次的“事故”,倒是没有丢数据,但是却是一件非常闹心的事情,去年花了一年的时间渐渐的逃离了云端服务,将照片从 Google Photos 离线到本地,将音乐从网易云音乐离线备份了一份到本地,想想这一切非常美好,没想到发生这么一件事情,所以也渐渐感受到本地 RAID 的重要性,对于重要的数据在本地一定要有一份备份。

数据划分等级

原来我对数据的划分非常模糊,一股脑的备份笔电磁盘中所有数据,当然这种不会出现漏备份某些文件的情况,但这也是成本比较高的一种做法,不仅备份数据量大,并且备份的过程也比较长。而经过这次的事故,渐渐的对需要备份的数据有了一定区分度,由我产生的文件一定是最重要的,备份等级最高,包括我自己写下的文本(笔记,博客,TODO),拍摄的照片视频,代码文件,配置以及数据库文件(当然绝大部分代码都是 git 在另外有备份),不过还有一种非常容易忽略的就是,创建的比如音乐歌单,读书列表,在 Trello 中的 Task 等等,当然大部分情况下都是对应的服务中,网易云音乐就曾经莫名其妙地弄丢我一个歌单,这些”文件”都需要提高备份级别。

数据分类存储

所以简单的来说数据需要分类处理,依据重要程度不同需要备份的方法也可以有对应不同,就目前我个人遇到的情况而言。

几大类由我产生的重要数据:

  • 出门拍摄的照片,视频
  • 代码,配置(dotfiles, vim, tmux, zsh, Rime 配置,Docker 配置,程序配置等等)
  • MySQL 等数据库数据
  • 个人整理的笔记

几类由我整理收集的数据:

  • 电影、音乐,以及产生的列表
  • 曾经下载的 PDF,电子书等
  • 各种类型的安装包(apk, exe, dmg etc)

几种备份方法

针对上面这些数据,分别有不同的备份方法:

  • Git
  • Syncthing 多地冗余备份(rsync)
  • 磁盘阵列备份(SnapRAID)
  • Time Machine (Clonezilla) 全盘备份

代码等文本使用 git 备份

对于纯文本的内容,适合 git 来备份,commit && push 就能够至少在两地有备份了。Git 的分布式特性天然的适合文本的存档和备份管理。

适合 git 来备份的有:

  • code
  • dotfiles
  • rime config
  • IntelliJ IDEA config
  • software config

Syncthing 或 Dropbox NextCloud

对于云同步工具,适合同步二进制文件,比如文档或者图片。

从 2020 年中开始,就陆陆续续将 Dropbox,NextCloud 替换成了 Syncthing,几乎是无缝的迁移,将同步的文件夹添加到 Syncthing 中,我的所有设备都加上 Syncthing 的客户端进行同步。

  • Documents, 常用的 word, ppt, pdf 等
  • Photo,常用照片
  • Backup,自动脚本备份的网站数据,或者 SQL
  • Joplin,Obsidian 等等笔记数据
  • 各种二进制导出的配置
  • 日常需要同步的文件

Hard Drive backup

对于需要备份,但是查看次数非频繁的文档,适合单独使用硬盘来备份,比如:

  • 一段时间拍摄的照片,视频等
  • 整理的电子书
  • 音乐
  • 电影,电视剧

对于媒体文件,尤其是较大的电影,电视剧,图片,等等适合使用单独的备份盘来备份。

使用 OpenMediaVault 的系统使用 SnapRAID 来对磁盘做冗余备份,以防止一块硬盘挂掉。

Time Machine 或者 Clonezilla

macOS 下有 Time Machine 备份,Linux Mint 下可以使用 rsync 来备份,如果是 Windows 或 [[Proxmox VE]] 我就是用 Clonezilla 来备份一个分区。

根据作用隔离磁盘

对磁盘的管理,对数据的种类进行划分,对不同的数据进行不同的备份处理。

如果磁盘存放的是个人数据,则要尽量减少磁盘的写入,尽量在备份的时候对磁盘写入,从而延长磁盘的寿命,如果可能这部分个人数据尽量使用 RAID1 或者 RAID5,做到即使有一块磁盘故障时数据不会丢失。

而另外一类场景则是下载电影,当使用 BT 或者 PT 时,磁盘会有大量的读写会大大减少磁盘的寿命,所以我的建议是单独使用一块磁盘作为下载盘,有对磁盘的大量不间断读写时都存放到该磁盘,并周期性对磁盘进行维护,比如使用同步工具定时将数据移动或者拷贝到另外的磁盘中进行保存。

网上有一种说法,说家用 RAID 实际用途并不大,这句话并不完全正确,如果家用 24h 挂机 PT 的话,如果数据是写到 RAID5 中,那么实际上三块磁盘都在工作,无形中就同时降低了三块磁盘的寿命。如果是常年 PT 的话,还是根据个人情况来选择最合适的方案。


2020-01-12 backup , data , system , nas , rsync , syncthing

QNAP 上 SQL server 数据备份

平时没有注意备份 QNAP 上系统盘的数据,从昨天开始系统盘突然只读,而无法写入,发现磁盘有问题了,无奈只能边申请售后,边想着怎么备份数据,还要恢复这么多的配置。

平常的哪些文件备份倒是还好说,但是一直有用 QNAP 提供的 SQL server 服务,这部分数据平时也没有 mysqldump 下来,所以这就变得比较尴尬,但是 sql server 还有一种方法可以从物理文件中恢复。

用 ps 工具查看可以看到 1

/bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/var --pid-file=/var/lock/qmysql.pid --user=admin

datadir 就是 marialdb 真正存放数据的地方,ssh 进后台,备份该部分数据。

在该目录中能看到不同的文件

  • FRM 表定义
  • MYD 文件保存真实数据
  • MYI 是索引文件

通常情况下 linux 是在 /var/lib/mysql/ 文件夹下,QNAP 的地址是 /usr/local/mysql/var 目录下。

Backup

使用 rsync 将该目录下的数据全部备份到另外的磁盘上

rsync -azvhP --progress /usr/local/mysql/var/ /share/Backup/mysql_var/

Restore

等 QTS 系统安装完成后,再使用 rsync 来将数据恢复回来。


2020-01-11 qnap , sql-server , mysql , maria , sql , backup

云服务 free tier

AWS

EC2

750 小时的运行时间,Amazon Elastic Compute Cloud (Amazon EC2) 是一种 Web 服务,可以在云中提供安全并且可调整大小的计算容量。

S3

对象存储服务

  • 5G 存储
  • 20000 GET
  • 2000 PUT

RDS

MySQL、PostgreSQL、MariaDB、Oracle BYOL 或 SQL Server 的托管关系数据库服务。

  • 750 小时 / 月
  • 20G SSD
  • 20G 备份

Amazon DynamoDB

快速灵活的 NoSQL 数据库,具有无缝可扩展性。

  • 25G
  • 足以处理每月最多 2 亿次请求

Lambda

计算服务

  • 1000000 次请求
  • 320 万秒免费

SNS

快速、灵活、完全托管的推送消息收发服务。

腾讯云


2020-01-05 cloud , aws , amazon , tencent

在 Linux Mint 上使用 PlayOnLinux 安装网易云音乐

虽然网易云音乐发布了 Linux 版本的客户端,但网易隐藏的云音乐的上传入口只有 Windows 版本的也有,所以这里记录一下如何在 Linux Mint 下使用 PlayOnLinux 来安装网易云音乐 Windows 客户端。

准备工作

  1. Linux Mint 中准备好 PlayOnLinux,并准备好 3.x 以上版本的 Wine
  2. 下载好网易云音乐的 exe 安装包

安装

安装过程比较简单,我个人使用 Wine 3.20 版本,然后按照 PlayOnLinux 提示的步骤一步步执行即可。

playonlinux install netease music


2020-01-01 playonlinux , wine , linux , linux-mint , netease-music

2019 读书记录

2019 年没有系统性阅读,只是把早先想看的书,看到什么感兴趣就直接看了,也没有目的性,有政治的,有历史的,也有专业书,还有小说。

原来是想在 2019 年 12 月底来整理这篇文章的,大纲已经列好,但是一直躺在了草稿里面,现在是 2020 年年底的时候突然想起来,就着大纲,以及今年在重新整理自己的笔记之后,重新回顾一下自己的 2019 。

之间几年的读书笔记:

通识

言论的边界

五星推荐,这本书是我关于[[言论自由]]进行认知的第一本启蒙书,之后陆陆续续看过的书,《言论的边界》,《九人》,《牛津通识读本:托克维尔》,《大法官说了算 - 美国司法观察笔记》,《牛津通识读本 - 法哲学》,《美国宪政历程 影响美国的 25 个司法大案》,《美国国会》,《联邦党人文集》,《美国政党与选举》大多也能够进行关联。

关于言论自由的边界,从美国建国之初到今天,虽然都一个基本的共识,但细节部分仍然在不断地被完善。

说自由会带来混乱的人,必定是没有了解过美国的宪政历程,关于言论自由的方方面面,不对言论进行事先的限制是多少人花了多少代时间争取到的权利。纽约时报诉沙利文案中的法院意见,「在自由辩论中,错误意见不可避免,如果自由表达要找到赖以生存的呼吸空间,就必须保护错误意见。」

而对言论的事后审查则多多少少走过一些弯路,其中霍姆斯大法官在其中扮演着重要的角色,他首先使用了,对于事后的言论审查中,只有「明显而即刻的危险」才能进行惩罚。而另一位影响深远的勒尼德汉德法官认为,只有直接煽动暴力的言论才应当受到惩罚,仅只是批评政府政策的言论,无论是委婉的还是露骨的,都不能惩罚。意见的自由表达是权力的最终来源。

而对于媒体,法院的判决更加强了媒体的重要性。人民有权获得政府作为或者不作为的全部信息,公共意见的交流和传播是遏制腐败最有效的方法。而媒体正是在这样的过程中扮演着至关重要的角色。布伦南大法官这样写到,「对公共事务的讨论不应当受到阻碍,即使那些对政府和公职人员的言论包含激烈、苛刻、有时甚至令人不悦的言论,这些言论也不应该被阻止」。

关于言论自由和隐私权上,虽然最高法院已经将媒体的言论自由对象扩展到了公众人物,包括社会名流,影视明星等等,但对于普通人,是否可以声称自己的隐私权而状告媒体,最高法院虽然至今依然偏向媒体,但无疑隐私权已经作为一个实际上的权利被不断的提起。言论和出版的自由对于保障人类的自由来说,无疑是重要的;但对于构建一个健康的社会,这不是唯一需要考量的。

虽然宪法给予了媒体,以及从事媒体行业的记者以巨大的权利,但遇到记者需要保守信息来源,以及法庭命令其公布信息来源的时候,也会遇到冲突。记者拥有的只是「有限特权」,在遇到具体的案例时,依然有可能失败。

书中的最后几章在讲述思想的自由。思想自由和言论自由同样重要,政府不得仅仅以为社会中认为某种思想令人厌恶就禁止人们对这种思想的表达。霍姆斯大法官有一句话流传甚广,那些为我们所痛恨的思想,同样自由。

论美国的民主

托克维尔在非常年轻的时候根据自己的游历就写出了如此观察细致的巨作。这可能是我系统的观察美国而看的第一本书,但也正是这本书为我在 2020 年看其他相关著作的时候打下了基础,托克维尔以非常平和的心态写下了对美国的观察,既没有过分的赞美,也没有恶意的贬损。更甚至比谁都看出美国制度中可能存在的问题。

《论美国的民主》分成了上下两部,托克维尔在上部中描绘了他看到的美国现状,包括风土人情,制度设计,司法权利,出版自由,公民自治等等,下部中将自己的观察和思考进一步的凝练,描述了美国的思想潮流,以及宗教信仰,科学艺术,文学戏剧等等方面可能的影响。也进一步的预言了在这样的社会环境中对生活在其中的人可能带来的改表。

艾希曼在耶路撒冷

汉娜阿伦特在这本书中提出了著名的「平庸之恶」,一个人不是想要做极恶的事情才会实施暴行,恶行的发生可能仅仅是一个人不思考,这个人不是道德败坏或者心理变态,而只是屈服了自己的惰性,放弃了思考,选择了无条件的顺从,这样的人同样会做出极恶的事情。

在一个高度技术化和官僚化的世界里,无声无息地铲除「多余」的民众同时又不引起公众的道德愤怒,可能会变得司空见惯。

阅读这本书,最大的收获便是获知了汉娜阿伦特这位作者,在编辑完其中文的维基百科后,又陆陆续续的看了她的其他作品,《极权主义的起源》,《过去与未来之间》。

牛津通识读本 美国国会

美国制度中的三权分立,行政,立法和司法,最早看得是司法分支的《牛津通识读本 最高法院》,觉得牛津通识读本这一系列的书,短小精炼,不失为入门首选。所以就在 Kindle 上看完了这一部。这一本书也相对完整的介绍了国内的诞生,竞选方式,参众两院的运行方式,以及国会在整个美国的位置,以及和其他两个分支的相互制约,最后一章讲述了国会大厦。相较于白宫,国会大厦和最高院出现在影视剧作中的画面没有那么多,但围绕在议会大厦周围的建筑群还是别具特色的。

论法的精神

孟德斯鸠花了 20 年时间撰写的著作,在这部书中提出了著名的三权分立,但孟德斯鸠所说远不止于此,在政治理论方面提出了:

  • 关于政治分类,将政体划分为共和、君主、专制,原则分别是品德、荣誉和恐惧
  • 分权说和君主立宪,行政、立法和司法分权理论,相互制衡,才能保障公民的自由
  • 地理说,地理环境,尤其是气候、土壤等因素与人民的性格、感情相关,法律应该考虑这些因素

在法律理论上,反对酷刑、主张量刑适度,刑罚应该富有教化意义,舆论威慑可以作为阻止犯罪的工具,只惩罚行为,不惩罚思想、语言。在经济理论上,认为私有财产是人类的自然权利,主张工业和贸易。这是一本让我看完之后第一次感受到我们确确实实活在了过去思想家的思考中。孟德斯鸠通过对历史和当时社会的观察便能思考出如此超前的观点,着实令人钦佩。

极权主义的起源

汉娜阿伦特的另外一部作品,对我来说有些艰深,如果不了解那个时代,或者不了解阿伦特本人,第一遍读的时候对我来说很难提炼出阿伦特的观点,虽然这几个名词已经被无数的作品反复的解释过了,但要真正的去定义什么是「极权主义」,还略微有些难度,而阿伦特说,极权主义就是将世界上的所有界限抹平,不考虑人的多元性,将人认为是集体中的一员来对待。极权主义不同于以往的专制,在 20 世纪对人类历史造成的巨大的伤害,但对其的研究,这是我看的第一本。

传记

  • 命运:文在寅自传,影视作品中对卢武铉的描述要多过这一位现任的韩国总统,所以去年准备去韩国之前比较匆忙的快速过了一遍这位总统的自传,如果说是自传的话,可能还不准确,书中虽然记叙了文在寅小时候到青年时期的事,但自文在寅遇到卢武铉之后便有了大量和卢的往事。
  • 永不放弃,Trump 的传记
  • 永久档案,斯诺登的传记

摄影

一般也不会特意去找摄影相关的书籍,只是看到有对应的题材,在看其他类别的书的中间带着看了一下。

  • 摄影的精神
  • 完美构图

日本

谋划着想要去日本走一走,所以大量的阅读了相关的书籍,只不过到现在也依然只能说对日本的了解九牛一毛,对日本近现代史的了解稍微多一些。

  • 战后日本经济史
  • 日本制造
  • 日本史
  • 现代日本
  • 日本人的活法
  • 走遍日本
  • 日本
  • [[静观日本]]
  • 日本论
  • 日本常识
  • 菊与刀
  • 游牧东京

其他

  • 悲剧人偶
  • 82 年生的金智英
  • [[通过知识获得解放]]
  • 日本漫画为什么有趣
  • 而已集
  • 韩国电影
  • 一网打尽:贝佐斯与亚马逊时代
  • Lonely Planet 韩国
  • Lonely Planet 台湾
  • 从陈桥到厓山,宋朝历史
  • 韩国研究二十年
  • 畅游首尔
  • 人生的意义
  • 重新发现宋朝
  • 大韩民国史
  • 这就是韩国

2019-12-31 reading , book , douban

关于 Rime 输入法思考和整理

很多年前写过一篇 Rime 配置,这几年陆陆续续,用过搜狗,也用回过 Rime,还试过 Linux 上其他的输入法,但是最后终于在 2019 年完全的切换到 Rime 下,并且经过一系列的折腾发现 Rime 的能力远远超过我的想象。其实输入法是一个及其有依赖性的工具,输入习惯,输入的常用词等等,都累积在了输入法中。这些年输入法引入了云同步功能,但我倒是觉得带来的便利性甚至不如其带来的缺点,唯一的好处是记录输入习惯,和常用词库,但是实际上可能带来的问题更多,比如

  • 隐私没有得到有效保护,有没有发现有的时候输入了某些词,可能一会儿广告就来了
  • 安全问题,甚至有过报道输入法将用户输入的内容不加密传输到服务器,假如真的能够拿到一个用户的输入历史记录,真的可以查到这个用户非常多的习惯,甚至有可能会泄漏用户密码等等
  • 我在弃用搜狗的时候甚至不允许用户删除自己的云端词库,这一部分原本属于用户的资产,无形中变成了一个商业公司的资产

多输入法

就像 Rime 自己说的那样,Rime 是一个输入方案的合集。所以只要有合适的输入方案,就可以输入对应的语言,从方言,到世界其他各国的语言,Rime 都可以轻松的实现,甚至可以借助 Rime 来实现一套自己的输入编码方案,比如官网教学中的一套输入中文大写数字的输入方案,定义 schema, 字典,然后就实现了一套中文大写数字的输入法。

安全

Rime 输入法不会联网,所有的配置都以文本的方式保存在本地,虽然一定成都上削弱了 Rime 的便捷性,但实际上就加强了 Rime 的安全性。只要保证自己的电脑安全,所有的数据都是安全的。

完全可配置

Rime 输入法从外观到词库,到甚至到输入方案都可以自己定制。熟悉 Rime 的机制后,完全可以使用 Git 将一整套配置管理起来。你可以使用一个输入法输入多国语言,Ctrl + ` 切换 Schema,非常轻松可以实现。

自定义短语

输入的候选词也能够配置,

可以在 custom_phrase.txt 中配置:

地平线:黎明时分	hzd	2

这样在输入法中输入 hzd 就可以直接出现前面的短语,只要在配置方案中配置了 custom_phrase,就可以使用。

custom_phrase:
  db_class: stabledb
  dictionary: ""
  enable_completion: false
  enable_sentence: false
  initial_quality: 1
  user_dict: custom_phrase

然后在 translators 中加入该词典:

translators:
  - xxxxx
  - "table_translator@custom_phrase"

lua

如果在 macOS 上还可以添加 lua 扩展,在输入的过程中通过定制关键字,触发 lua 函数的调用,生成输入法结果返回,比如经常在输入法中输入日期,那么可以定义输入 rq 的时候,自动返回当前的日期。


2019-12-30 rime , linux , input-method , fcitx

终端的输入历史以及管理

配置终端历史文件地址

bash 会将所有终端的输入历史保存在 ~/.bash_history 中,同理,zsh 会保存在 ~/.zsh_history 中。

zsh 使用 HISTFILE 变量来管理保存的 zsh_history 文件,默认一般保存在 ~/.zsh_history 中。

配置 zsh 中记录的终端历史条数

在 zsh 的配置中:1

说明:

  • HISTSIZE 是终端历史中保存的最大行数 2
  • SAVEHIST 是保存在历史文件中的最大行数
  1. https://unix.stackexchange.com/a/273863/115007

    HISTFILE=”$HOME/.zsh_history” HISTSIZE=10000000 SAVEHIST=10000000 setopt BANG_HIST # Treat the ‘!’ character specially during expansion. setopt EXTENDED_HISTORY # Write the history file in the “:start:elapsed;command” format. setopt INC_APPEND_HISTORY # Write to the history file immediately, not when the shell exits. setopt SHARE_HISTORY # Share history between all sessions. setopt HIST_EXPIRE_DUPS_FIRST # Expire duplicate entries first when trimming history. setopt HIST_IGNORE_DUPS # Don’t record an entry that was just recorded again. setopt HIST_IGNORE_ALL_DUPS # Delete old recorded entry if new entry is a duplicate. setopt HIST_FIND_NO_DUPS # Do not display a line previously found. setopt HIST_IGNORE_SPACE # Don’t record an entry starting with a space. setopt HIST_SAVE_NO_DUPS # Don’t write duplicate entries in the history file. setopt HIST_REDUCE_BLANKS # Remove superfluous blanks before recording entry. setopt HIST_VERIFY # Don’t execute immediately upon history expansion. setopt HIST_BEEP # Beep when accessing nonexistent history. 

  2. http://zsh.sourceforge.net/Doc/Release/Parameters.html#index-HISTSIZE 


2019-12-26 terminal , history , clear , command , cli

重拾 Wikipedia

时隔这么多年再来说 Wikipedia, 甚至显得有些落伍,毕竟这个时代,甚至说起 Wikipedia 就像是再谈论一个上世纪的东西,但是其实想想 Wikipedia 诞生也快靠近 20 年。就像之前发出的感慨一样,这些年用了很多的应用,很多的网络服务,但仔细想想曾经 Web2.0 所谓的人人可贡献,就我自己的感受来说,那些我曾经大量使用的服务, 在 Google+ 上分享的内容,在 Google Reader 上分享的文章,都随着关闭烟消云散,反而是我曾经不经意间在 Wikipedia 写下的词条,上传的照片这么多年还依然在,并且曾经的词条在经过更多人修订过后更加可信,更加丰富。

所以上个月开始,我不再给豆瓣添加词条,而把所有的条目内容整理到了 Wikipedia,真的开始了解 Wikipedia 之后我才发现, Wikipedia 的世界看似无秩序,但实际对词条的撰写有着比较严格的要求。

想象在这个世界里每个人都能自由分享所有人类知识的总和。 – 吉米·威尔士

在此,推荐每一个人都去尝试编辑一下 Wikipedia,在这里你能学到尊重他人,你能学到如何搜寻信息,你能学会如何书写可靠来源,你能学到如何保持中立,能学到如何培养版权意识。

可靠来源

在编辑 Wikipedia 的时候最常被编辑提及的就是缺乏“可靠来源”,在编辑每个词条内容的时候,每一句写下的话都要有可靠来源,Wikipedia 毕竟不是个人抒发观点的地方,所以给每句话写下可靠的引用。而可靠的引用又指的什么呢,不能是用户产生的内容,我被拒的其中一个原因就是,引用过多的豆瓣信息,而我也知道豆瓣的条目都是用户贡献的。

The fact that the info is not user-generated is certainly encouraging.

说实话要做到“正确”是非常困难的,但是要做到 Fact-Check 还是比较容易的。某一些内容可能放在现在是正确的,但是可能过一段时间就不正确了,所以 Wikipedia 要时时刻刻准备着被修改。

关于版权保护

之所以上面提到为什么编辑 Wikipedia 会学习到版权保护,那是因为,每一个编辑都需要为自己写下的每一句话负责,严禁复制粘贴原文,并且引用的图片必须要做到合理使用,在上传每一个文件时,Wikipedia 都会列出非常详细的说明。也就是在这个过程中,我知道了维基百科对版权重视。

版权法保护的是思想的表现形式(比如一段介绍“相对论”的文字敘述),而不是思想本身(比如相对论本身這一理論)

创建新条目

像我一样的新手,有些时候看到中文 Wikipedia 没有一个词条,便直接新建了一个词条,不妨用新词条向导来新建,如果不清楚该词条是否满足关注度等等要求,甚至可以先编辑 Draft 然后让其他编辑来审核,或者来一同修改。

reference


2019-12-26 wikipedia , wiki , knowledge

电子书

本站提供服务

最近文章

  • AI Shell 让 AI 在命令行下提供 Shell 命令 AI Shell 是一款在命令行下的 AI 自动补全工具,当你想要实现一个功能,敲一大段命令又记不住的时候,使用自然语言让 AI 给你生成一个可执行的命令,然后确认之后执行。
  • 最棒的 Navidrome 音乐客户端 Sonixd(Feishin) Sonixd 是一款跨平台的音乐播放器,可以使用 [[Subsonic API]],兼容 Jellyfin,[[Navidrome]],Airsonic,Airsonic-Advanced,Gonic,Astiga 等等服务端。 Sonixd 是一款跨平台的音乐播放器,可以使用 [[Subsonic API]],兼容 Jellyfin,[[Navidrome]],Airsonic,Airsonic-Advanced,Gonic,Astiga 等等服务端。
  • 中心化加密货币交易所 Gate 注册以及认证 Gate.io 是一个中心化的加密货币交易所。Gate 中文通常被称为「芝麻开门」,Gate 创立于 2013 年,前身是比特儿,是一家致力于安全、稳定的数字货币交易所,支持超过 1600 种数字货币的交易,提供超过 2700 个交易对。
  • 不重启的情况下重新加载 rTorrent 配置文件 因为我在 Screen 下使用 rTorrent,最近经常调试修改 rtorrent.rc 配置文件,所以想要找一个方法可以在不重启 rTorrent 的情况重新加载配置文件,网上调查了一下之后发现原来挺简单的。
  • Go 语言编写的网络穿透工具 chisel chisel 是一个在 HTTP 协议上的 TCP/UDP 隧道,使用 Go 语言编写,10.9 K 星星。