Joplin 至今为止用过的最好的 Evernote 代替品

Joplin 是一个开源的笔记应用,曾经在调查 Evernote 代替品 的时候简单的看到过,但是当时也只是观望的态度,因为当时发现 Joplin 的插件有些不完美,有些网页 HTML 格式无法保证。

Joplin is a free, open source note taking and to-do application, which helps you write and organise your notes, and synchronise them between your devices.

但是时隔一些时间过来看,Joplin 发展已经超出我想象,不仅提供了各个平台的版本,还提供了命令行版本。虽然日常用 Vim,rg,fzf,git 来记录一些笔记,倒也还可以,但是毕竟有些管理上的问题,尤其是当笔记数量已经达到数百数千条的时候。

一些非常棒的特性:

  • 跨平台,横跨所有桌面端,移动端,甚至提供了命令行版本
  • 原生支持 markdown 格式
  • 所有的笔记都可以搜索,加标签,所有内容都保存在本地
  • Joplin 可以通过其他第三方同步工具 (Dropbox/NextCloud/OneDrive/WebDAV/etc) 进行备份以及同步
  • Web clipper, 之前就是因为无法逃脱好用的 WizNote 插件才没有转,现在用 Joplin 的扩展,非常好用了,很快,很精确
  • 纯文本文件保存支持方便导入导出

Installation

各个客户端的安装直接参考官方网站:

Client

桌面客户端没有什么可说的,从最早只支持 Markdown,到如今可以看网页原始 HTML,客户端也在进步。和大部分的笔记应用一样,左侧是笔记本,点开笔记本能查看笔记本中的内容,右侧主要部分就是笔记内容。

笔记本的层级关系支持树形结构,可以嵌套很多子目录,所以非常适合用来归类

更多内容可以查看我的笔记整理法则

在桌面版中,可以按下 Ctrl + G 然后输入笔记的标题来快速跳转到该笔记。或者在按下 Ctrl + G 后可以使用 # 跟着 Tag 名或者使用 @ 跟着笔记本标题来跳转。

External Editor

使用快捷键 Ctrl + E 或者直接点击工具栏的 External Editor 可以打开外部编辑器。个人推荐 Haroopad.

Chrome Extension

离不开 WizNote 和 Evernote 很重要的一点就是 Chrome 插件,在日常使用过程中,在 Chrome 下浏览咨询,工作的时间占用非常高,也经常需要收藏剪切一些资料。这个时候 WizNote 就成为了一个非常重要的资料保存箱。

在很早之前使用 Joplin 的时候,Chrome 插件不是完善,只能够将 HTML 剪切成 Markdown,并且很简陋,不能够满足我的日常使用。而这一次体验,发现 Chrome Extension 已经足够用,能够剪切选中内容,整个网页,截图保存,剪切网址等等,完全的覆盖了日常使用需求。不过有一点需要注意的是,Joplin 的 Chrome 插件是需要本地将 Joplin 开启一个服务的,并不是像 WizNote 先收藏到云端服务器,然后要使用时再从服务器中拉取的。

Terminal

命令行版本的安装也非常简单,界面布局和 GUI 版本相差不大。但是需要注意的是命令行版本和桌面版并不是共用的一套数据集,他们相互是独立的,在桌面版修改,并没有在命令行版本中。

Sync

关于同步是我最想说的,官方提供了 NextCloud,Dropbox,WebDav 等等同步方式,但是我个人推荐 Syncthing,在不同机器上都安装上,在服务器上也安装上,就完美的实现了 Dropbox,NextCloud 单点的问题,即使中心服务器挂了,也能够有多个备份能同步。

Conclusing

如今的 Joplin 已经能够满足日常使用了,所以我会渐渐的将 WizNote 笔记中的内容迁移到 Joplin 中。又将一个闭源产品迁移到开源工具,开心。


2019-10-28 evernote , notebook , joplin , note , note-taking

You quiz on the block 一则小感

总有那么一种节目,总会在不经意之间想起,《You quiz on the block》就是这样一个节目。因为刘在石,一路从无限挑战,Running Man 过来,在看过了太多室内综艺后开始对这个类型的节目有天然的抵制,街头随机采访路人,快速回答问题,最初的时候节目质量并不能维持一定的水准,但是节目在摸索的过程中渐渐进化。从原来的答题渐渐地向街头脱口秀进化,通过每一期不同的主题,将整个一集的进度链接起来。终于在上一期让我又有提起键盘写下这篇的动力。虽然每一次看《You Quiz》都会被生活在世界各个角落的普通人打动,从街头饭店的社长,到独自开理发店的老板,到为了考公务员边打工边学习的大学生,各色各样的普通人编织出不同的人生。而这一期,主题为 That’s Life,在上岩洞附近,在这个有着 25000 名电视台工作人员的地方,聚集着韩国主要的电视放送局,在电视艺能式微的今天,仍然坚守在自己热爱的岗位,淋雨拍摄的 MC,摄像,录音工作人员,熬夜编辑的 PD,后期制作,音效编辑,用一周的时间,给出 90 分钟的节目,周而复始。

或许很多人会被标题或者预告中的金泰浩 PD 和 罗英石 PD 吸引过来,但是真正让我感动的是,这两位令人最近的 PD,都是非常诚恳的普通人。金泰浩 PD 可能有些腹黑,罗英石 PD 可能有些害羞,但他们的成就对于向往 PD 这个职业,对电视台有着美好想象人来说无疑是一种鼓励。或许很多人会和我一样对 MBC 《我的小电视》助理 PD 印象深刻。在刘在石问到她想要成为一个什么样的 PD 时,这位只有着两年工作经历的 PD 说自己想要做那些不仅带来欢笑,也能带来社会意义的节目,像无限挑战一样,这一瞬间突然让我一下子出神了。让我想起了最近在看的 《Argon》,让我想起了《共犯者们》,让我想起了曾经的无限挑战,让我想起了为了新闻自由而奋斗过的各个 PD。可能对于现在的《小电视》来说只是简单的直播放送娱乐节目,但往往越被关注,需要担负的责任也越重,无挑无疑是一档为了搞笑而诞生的节目,但是其作为综艺史上的伟大作品,不仅曾经推动立法,甚至在环境保护等等各行各业给出了自己的态度。曾经追过《无挑》的人不会忘记 MBC 历史上的几次罢工,国内的新闻很少也不会特意的去报道,PD 们在背后的争取我们无从得知,但从他们的作品中我们或许能猜测到,自由的选题,自由的编辑,自由的放送,才让这个节目的名字印在历史上。也让后来的许许多多人向往着 PD 这个职业,即使知道艺能局艰辛,但依然不顾一切。或许这么说显得冠冕堂皇,那用罗英石朴素的答案来回答,当刘在石问成功的秘诀时,罗 PD 说,只是在原来擅长的基础上做一些创新,十年如一日的坚持,从最早的为各个节目打杂的助理,做到如今拥有无数档当红综艺的主 PD,他在背后的付出鲜有人知。也幸好有这样的节目,这样偶然的机会,让罗 PD 自己坐到了摄像机前。在聊天的过程中,这期的公共提问,是受到哪位公众人物的影响。金泰浩说的是刘在石,而罗 PD 说的是姜虎东,对他们赞美最多的就是如何能在这样不停变换的社会中坚持自己的职业,坚持自己的想法,从默默无闻做到如今的国名 MC。我不经想到我自己的生活,从学校步入社会,已经快 3 年,却依然还在徘徊,倒不是止步不前,但却像是在走 8 字,我无法想象往后 10 年,20 年,甚至 50 年。这一期的主题中还包含着 《You Quiz》PD 自己的私心,在如今被各种新兴媒体包围的电视上,如何还能收获足够的眼球,大部分的人早已经不看电视,被身边各种各样的内容包围,时间一旦不抓住就像水一样溜走了。如今也很少节目能真的做到如此用心,如此直白的说自己所面临的问题了。

最后要感谢 tvN 能够让这样一档节目播出,也感谢刘在石能够坚持,才能让我坐在电脑前看到,体验到世界那个角落的人的生活。也感谢制作这几十期内容的工作者们,这一集让我集中的看到了他们背后的付出。


2019-10-26 thinking

WordPress 主题收集

Kratos

开源的响应式主题

Sakura

WordPress Git

Git 主题,由云落基于 yusi 主题基础上二次开发的一款功能强大具有超强自定义能力的主题。 响应式,短代码,绿色,多彩,双栏,博客主题,小清新,代码高亮,强大,免费主题,CMS 主题,卡片式,图片主题


2019-10-24 wordpress , themes , php , design , blog

记一次修复安装 Magisk 模块后的 bootloop

昨天看到系统通知有 Android 10 的 OTA,就顺手把系统升级了,也知道可能有些 Magisk Module 不兼容,所以把所有的 Module 都先关闭了,升级的过程倒是非常顺利。所以也就没有多想就依次想试试 Magisk 模块能不能启用,尤其是 EdXposed。可是就是没有想到这个启用让手机停留在了 OnePlus 的开机 Logo 无限开机中。这个问题倒也不是很大,之前也就遇到过,只要刷入一个 uninstall 的包就可以了。所以就想要进入 recovery。

这里插入一下一加的几个组合按键。

  • 在开机状态下 Volume Up + Boot 按键长按可以强制关机
  • 在关机状态下 Volumn Down + Boot 按键长按可以进入 recovery 模式
  • 在关机状态下 Volumn Up + Volumn Down + Boot 三个按键同时按住可以进入 fastboot 模式

因为之前就刷入了 TWRP 的 recovery 所以也不是很怕,但是当我进入 TWRP 的 recovery 的时候,我发现 TWRP 没有要求我输入 PIN 密码,并且进入后也无法加载 data 分区,所以手机内部的所有内容都无法读取,这一下就有点慌了,因为我不想丢失数据。经过一番搜索,尝试了重新刷 boot.img,后来发现 Android 10 的 TWRP recovery 可能需要升级,所以在 xda 上找到了 unofficial 的 Android 10 的 recovery,刷入后果然能够解锁了。

然后再把 Magisk 的 uninstall 的包刷入,开机果然就没事了。然后不甘心,从头开始,重刷了最新的 TWRP 3.3.1-xx Unified Unofficial by mauronofrio,然后刷入 Magisk,不过没有启用任何 Module,然后一个个尝试启用 Module,果然 EdXposed 启用之后还是会卡在 Logo,但是这个时候我就不需要重新刷入 uninstall magisk 的包了,我只需要进入 recovery.

  • 进入 TWRP
  • Advanced > File Manager > data > adb > modules
  • 然后找到对应新安装的 module,进入文件夹,然后点击右下角的勾
  • 在弹出的对话框中选择 Delete

再重启进入系统即可。

reference


2019-10-20 magisk , oneplus-7-pro , android , recovery , root

Java 类加载器

虚拟机把描述类的数据从 Class 文件加载到内存中,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是 Java 虚拟机的类加载机制。

类加载的时机,整个生命周期包括:

  • Loading
  • Verifacation
  • Preparation
  • Resolution
  • Initialization 初始化
  • Using
  • Unloading

其中 Verifacation, Preparation, Resolution 三个部分称为 Linking。

四种情况必须对类进行“初始化”。

  • 遇到 new, getstatic, putstatic 或者 invokestatic 四条字节码指令时
  • 使用 java.lang.reflect 包方法对类进行反射调用时
  • 初始化类时,如果发现其父类没有初始化,则需要先触发其父类的初始化 auto
  • 当虚拟机启动时,用户需要指定一个执行的主类(包含 main 方法的那个类),虚拟机会初始化这个类

Loading

虚拟机会:

  • 通过一个类的全限定名获取定义此类的二进制字节流偶 iu
  • 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
  • Java 堆中生成一个代表这个类的 java.lang.Class 对象,作为方法区这些数据的访问入口

Verifacation

Linking 的第一步,为了确保 Class 文件字节流中包含的信息符合当前虚拟机的要求,并且不会危害到虚拟机自身的安全。

文件格式验证

验证字节流是否符合 Class 文件格式规划。

元数据验证

字节码描述的信息进行语义分析,以保证符合 Java 语言规范。

字节码验证

进行数据流和控制流分析。

符号应用验证

符号引用验证的目的是确保解析动作能正常执行,如果无法通过符号引用验证,会抛出一个 java.lang.IncompatibleClassChangeError 异常的子类,比如 java.lang.IllegalAccessError, java.lang.NoSuchFieldError, java.lang.NoSuchMethodError 等等。

Preparation

准备阶段正式为变量分配内存并设置类变量初始值的阶段,这些内存都将在方法区中进行分配。这个阶段中有两个容易产生混淆的概念,这个时候进行内存分配的仅仅包括类变量(被 static 修饰的变量),不包括实例变量。实例变量将会在对象实例化时随着对象一起分配在 Java 堆中。其次初始值“通常”指的是数据类型的零值。

public static int value = 123;

那么变量 value 在准备阶段后,初始化为 0 而不是 123. 但是

public static final int value = 123;

编译时 Javac 将会为 value 生成 ConstantValue 属性,在准备阶段虚拟机就会根据 ConstantValue 设置,将 value 值设置为 123.

Resolution

虚拟机将常量池内的符号引用替换为直接应用的过程。

初始化

到初始化阶段,才真正开始执行类中定义的 Java 程序代码。

初始化阶段是执行类构造器 clinit() 方法的过程。

双亲委派模型

Java 虚拟机角度,只存在两种不同的类加载器:

  • 启动类加载器 Bootstrap ClassLoader , C++ 实现
  • 其他类加载器,Java 实现,独立于虚拟机之外,继承抽象类 java.lang.ClassLoader.

工作过程,如果一个类加载器收到类加载的请求,将这个请求委派给父类加载器完成,每一个层次的类加载器都如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父加载器反馈无法完成这个加载请求时,子加载器才会尝试自己去加载。 实现双亲委派的代码都在 java.lang.ClassLoader 的 loadClass() 方法中。


2019-10-16 java , class , class-loader , jvm

解压和打包 jar 并手动上传到 Nexus 记录

解压和打包 jar 包,使用如下的方式。

unpack

jar xf filename.jar

pack

jar cf filename.jar path/to/dir

手动上传到 nexus

将打包好的 jar 包上传到 Nexus

mvn deploy:deploy-file -DgroupId=my.group.id \
	-DartifactId=my-artifact-id \
	-Dversion=1.0.1 \
	-Dpackaging=jar \
	-Dfile=realfilename.jar \
	-DgeneratePom=true \
	-DrepositoryId=my-repo \
	-Durl=http://my-nexus-server.com:8081/repository/maven-releases/

记住这里的 repositoryId 一定是 ~/.m2/settings.xml 文件中的 ID, 另外 url 也要区分一下 releases 和 snapshots.

<servers>
  <server>
	<id>my-repo</id>
	<username>admin</username>
	<password>admin123</password>
  </server>
</servers>

reference


2019-10-12 nexus , jar , maven , java

在 Linux 上测试硬盘读写速度

记录一下在 Linux 下测试硬盘读写速度的命令和方法。

dd

使用 dd 测试写速度,千万有注意 of 后接的文件必须是一个不存在的文件,否则可能造成数据丢失!

sync; dd if=/dev/zero of=/tmp/tempfile bs=1M count=1024; sync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 2.55331 s, 421 MB/s

同样的道理,如果要测试一个外部存储,需要知道挂载点,然后用 dd 命令:

sync; dd if=/dev/zero of=/media/user/MyUSB/tempfile bs=1M count=1024; sync

使用 dd 测试读取速度,注意这里的 if 后需要接上一个命令生成的文件:

dd if=/tmp/tempfile of=/dev/null bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.271083 s, 4.0 GB/s

清楚 cache,准确的测试真实的读速度:

sudo /sbin/sysctl -w vm.drop_caches=3
dd if=/tmp/tempfile of=/dev/null bs=1M count=1024

hdparm

使用 hdparm 也可以对硬盘进行测试。

apt install hdparm

先用 lsblk 或者 fdisk -l 来查看设备信息,一般磁盘都是 /dev/sda 这样。

然后用如下命令测试:

sudo hdparm -Tt /dev/sda

/dev/sda:
 Timing cached reads:   31236 MB in  1.99 seconds = 15733.75 MB/sec
 Timing buffered disk reads: 504 MB in  3.01 seconds = 167.51 MB/sec

reference


2019-10-11 linux , dd , hdd , ssd

Syncthing 又一款同步工具

昨天在整理同步工具的时候接触到了 Syncthing,简直秒杀了我现在使用的任何同步工具,所以不得不花一些篇幅来记录一下。

在看到 Syncthing 的介绍时,就非常好奇它的同步原理。也幸亏它的官方文档也有非常详细的 QA

几个比较重要的点:

  • 和 BitTorrent/Resilio Sync 的区别在于,Syncthing 开放源代码,使用开放协议,避免 Resilio Sync 闭源协议的安全问题
  • Syncthing 的同步原理,和 BT 类似,会将文件分片传输,当越多设备在线,那么共享速度越快
  • Syncthing 依赖于一个全局发现服务器,用来通过 Device ID 来发现设备 IP 和 端口,任何人都可以自己架设全局 Discovery 服务器,然后将自己的节点指向该服务器,这样就不必共享全局的服务器了,更甚至不需要依赖与因特网就能够实现局域网内文件同步
  • 关于安全性的说明 已经列举的非常详细了,所有内容通过 TLS 加密传输

下载安装

下载及安装过程不再赘述,官网已经非常详细了。

端口

Syncthing 有个端口需要注意一下

  • 8384 端口是网页 GUI 监听端口,默认监听 127.0.0.1
  • tcp://0.0.0.0:22000 服务监听地址
  • udp://0.0.0.0:21027 本地发现服务端口

配置文件

在 Unix 下在 $HOME/.config/syncthing

vi ~/.config/syncthing/config.xml

然后修改本地监听地址从 127.0.0.1 到 0.0.0.0.

设置 Syncthing 开机启动

如果熟悉 supervisord 可以使用官方提供的文档配置,如果在 Linux 下可以尝试使用 Systemd

sudo systemctl enable syncthing@yourname.service
sudo systemctl start syncthing@yourname.service

记得把 yourname 替换成用户名。

Syncthing 服务启动后端口是 8384.

推荐理由

推荐的理由:

  • 无需额外的服务器资源,以前使用 NextCloud 的时候,有一个很不方便的便是需要保证服务器 24h 不停地在线,放在家里 NAS 如果遇到停电就很不方便
  • 同步速度非常快,使用中心化的同步服务,中心服务器的网速限制了同步的速度,如果客户端越多速度越慢,但是 Syncthing 做到了点对点传输,也就意味着客户端越多那么同步速度越快,因为这一个节点的文件内容可以并行分片的从不同的节点获取
  • 丰富的客户端,除了 iOS 没有官方支持,三大桌面端,Android,路由器,NAS 几乎都有支持,因为 Go 写的嘛
  • Syncthing 完美的替换了 Dropbox 等等服务

Syncthing 配置本地 Discovery 服务器

有一种情况是,加入只想要在本地局域网中传输数据,那么可以关闭全局 Discovery 服务器,然后在设置中手动指定某一态服务器的 IP 和 端口,而不是使用默认的 dynamic。这样所有的数据就会在本地传输。

Syncthing File Versioning

Syncthing 支持文件的版本控制,当从 cluster 同步,删除或者同步一个新版本之后备份之前的老版本。

Syncthing 使用过程中的一些问题

发送和接收模式

Syncthing 支持三种工作模式:1

  • 发送和接收,Send & Receive Folder,这是文件夹的默认模式,对文件夹的修改会发送,其他设备的修改也会同步回来
  • 仅发送 Send Only,这种模式表示仅仅将当前设备上的文件夹的改动发送到其他设备,用来隐式地表示其他同步设备上的文件不会被修改,或者其他设备上的修改可以被忽略。这种模式非常适合,将当前设备设定为工作设备,然后设定一台设备作为此设备的备份。
    • 在 Send Only 模式下,集群中其他设备的修改都会被忽略,修改依然会接收,文件夹可能会出现 「out of sync」,但是没有修改会被应用到本地
    • 当 Send Only 文件夹出现 out of sync,那么一个红色的 Override Changes 会出现在文件夹详情中,点击该按钮会强制将当前主机的状态同步到其他剩余节点。任何对文件的修改,都会被当前主机上的版本所覆盖,任何不存在于当前主机节点的文件都会被删除,其他类似
  • 仅接收 Receive Only,这种模式下所有的修改都会被接收并应用,然后重新分发给其他使用 send-receive 模式的设备。但是本地的修改不会被分发给其他设备。这种模式适合于建立备份镜像(replication mirrors),或者备份目的主机的场景,这些情况下不期望有本地修改或者本地的修改是不允许的
    • 当本地文件被删除时,Syncthing 会显示一个 Revert Local Changes 按钮。使用这个按钮会将本地的修改回撤,所有添加的文件会被删除,修改或删除的文件会重新从其他节点同步

比较容易理解,但是假如 A 设备设置仅发送,B 设备设置发送和接收,A 是不会同步 B 的更改的!

.stignore

忽略列表,和 gitignore 类似。每一台设备上的 .stignore 都是分别设置的,不会进行同步。

如果A的.stignore忽略了 test ,而B没有这样做,实际上会发生这样的事情:

  • A 不会扫描和通知B(广播)关于test的变动;
  • B 对关于test的变动持开放的姿态,但不会收到任何关于A上面test的变动信息(可能接收到其它同步设备的);
  • B 会扫描test以及推送其关于test变动的信息,但会被A忽略,A也会忽略其它同步设备关于test的信息;
  • B 会接收来自其它同步设备推送的关于test的信息;

同步状态

管理后台显示的最后更改(Lastest Change)是指的,根据【别人的变动】【对自己做修改】的情况和时间。或许用英语来解释稍微易懂一些, The “Latest Change” on the folder only shows incoming changes.

管理后台显示的最后扫描或者Last Scan是指对【自己的目录】最后扫描的时间。

管理后台显示的 Out Of Sync 或者未同步指的是「尚未接他方推送的变动」,如果已收到对方关于变动的通知,但因为下载问题或者.stignore的设定而未能下载这些变动,就会出现这个情况。

Override Changes

Override Changes 或者撤销变动,中文译法有些不准确。出现这个提示的原因通常是设为仅发送的一方(A,master)认为自己的资料是最新的,认为对方(B)推送的变动是应该被撤销的,即使B关于特定资料的修订时间要晚于本地;点这个按钮会强迫B对方撤销自己的变动,以其收到的A的版本为准更改资料。

228/SECCOMP

当我在一台比较老的机器上安装 Syncthing, systemd status 发现无法启动 Syncthing,查看日志说是:228/SECCOMP 错误。

这个时候需要修改 sudo vi /lib/systemd/system/syncthing@.service,并将其中两行注释。

# SystemCallArchitectures=native
# MemoryDenyWriteExecute=true

然后重新 sudo systemctl daemon-reload,并重新启动 Syncthing:

sudo systemctl start syncthing@einverne.service

reference


2019-10-11 syncthing , sync , tools , linux , cross-platform , application

同步工具整理总结

陆陆续续用过不少同步工具,资料备份,各个设备间同步文件,从商业化的工具到命令行工具,但总还是一直在寻找一款足于满足我所有需求的工具。这里就整理一下,顺便整理一下我自己的思路。不久前就一直在思考一个问题,数字文件的生命有多长,以前看到过一句话,几十年前父母写下的日记如今依然能从旧书柜中翻出,数十年前的胶卷照片依然还很清晰,但往往几年前的网络文章,或者数字照片可能如今随着网络服务的关闭,物理硬盘的损坏而无法恢复。有人尝试使用多地备份,有人尝试云服务备份,却都无法从根本上解决这个问题,当然现在的我依然没有办法完全的解决这个问题。

目前我从两个方面来规避这个问题,一方面物理备份一份,一方面网络存储一份。虽然可以从大部分情况下解决一些问题,不过并不能保证 100 % 数据安全。

中心化的同步工具

中心化的同步工具就像是那个时候的 SVN,使用体验完全依赖于中心服务器,网速,磁盘大小都决定了最后的使用体验。

Dropbox vs pCloud vs NextCloud

最早接触到同步工具应该就是 Dropbox 了,PC 上,手机上都是使用 Dropbox 来同步的,并且我的 Dropbox 利用率一直都还是很高。但是 Dropbox 因为网络问题原因,有些时候可能会比较慢。所以一直作为保留项目。

在 Dropbox 之后,也用过 pCloud 不过也并没有深度使用。

之后就是尝试在 VPS 上建了 NextCloud,然后买了 NAS 之后把内容备份到了 NAS 上,并且开始深度使用 NextCloud

不过以上这些工具都有一些问题,比如我都只用来同步一些相对比较小的文件,比如文件,图片,文档等等内容。因为受到同步服务器容量的限制,所以有些文件我会有意识的不同步。

去中心化的同步服务

去中心化的服务有很多,这些年陆陆续续也都用过很多。就我个人而言,如果使用命令行,我会用 rsync, 如果要有一个比较友好的界面,我会用 Syncthing。

Rsync

rsync 之前的文章 已经提到过,很多使用方法那篇文章中也有提及,这里就不赘述了。

unison

unison 没怎么用过,但是 unison 经常被用来和 rsync, syncthing 一起比较,想必也有他的过人之处。

Resilio Sync

曾经用过很长一段时间,说是去中心化的,但是国内把中心服务的节点屏蔽之后就很难连接上其他地址了,所以后来就放弃了。不过 NAS 上还一直留着,使用起来也非常不错。

如果想要分享只读大文件给很多人,不妨体验一下。

VerySync

之前也有写过一篇文章 威联通上使用 verySync,但是这个同步工具毕竟还是用的人少,并且还是国产闭源应用,可信度不高。作为 Resilio Sync 的国产代替品使用。

Syncthings

开源,跨平台,Go 语言编写,其他就不用多说了。这可能是这一次整理收获最大的一个工具。

添加 Linux 启动项,可以参考官方的文档,非常详细

这个工具足以代替 Dropbox 完成同步任务,支持增量备份,支持版本管理,各个平台都有完美的解决了同步的问题。

Other

insync 是一个可以将本地文件夹和 Google Drive 同步的工具,收费

GoodSync 又一款同步工具,支持很多平台,不过有些功能需要收费。

reference


2019-10-10 sync , tools , linux , rsync

lsb init scripts

I found someone submit a pull-request to redis, which modify the init.d script. The modification make me curious about the init script. So this is the research result.

LSB stand for Linux Standard Base.

LSB-compliant init scripts need to:

  • provide, at least, the following actions: start, stop, restart, force-reload, and status.
  • return proper exit status codes
  • document runtime dependencies
  • [optionally] Log messages using the Init.d functions: log_success_msg, log_failure_msg and log_warning_msg

    #!/bin/sh ### BEGIN INIT INFO # Provides: scriptname # Required-Start: $all # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start daemon at boot time # Description: Enable service provided by daemon. ### END INIT INFO

解释:

  • Provides 可识别名字
  • Required-Start 启动此程序前要先启动那个项目
  • Required-Stop 在哪一个项目前停止,可留白
  • Default-Start 在哪些 run level 下启动程序 ,比如 2 3 4 5
  • Default-Stop 在哪些 run level 下停止此程序,一般 0 1 6

几个虚设项目,以 $ 开头

  • $local_fs 本地文件系统被挂载,用到 /var 目录的启动项都需要依赖此
  • $network 网络被启用
  • $named 名称功能被启用
  • $remote_fs 所有文件系统被挂载,包含 /usr
  • $syslog 系统记录功能启用
  • $time 系统时间被设定
  • $all 所有项目

一般的 daemon 应该依赖 $remote_fs$syslog ,核心模块驱动程序等,需要依赖 $local_fs

Edit

/etc/init.d 目录下有一个 skeleton 文件,可以以此作为文件的基础来进行编辑。

Actions

一个脚本需要提供 start, stop, restart, force-reload, status 这几个动作。

reference


2019-10-09 lsb , init , debian , ubuntu , linux , startup , script

电子书

最近文章

  • 读书是否是唯一重要的事? 不久之前和朋友约去了趟植物园,聊起读书是否是第一要务的时候产生了一些分歧,关于是否要去学习如何学习这一件事情产生了一些分歧。我站在的立场是读书是必须的,而我朋友则认为在有限的时间里面实践要优先于读书。而关于要不要学习如何学习这一件事情,他仍然坚持自己的实践而非去了解如何学习。
  • Android 上的 RIME 输入法 trime 同文输入法使用 早之前就已经在 Linux 和 macOS 上配置了 RIME 并且一直使用到现在,但是在主力的 Android 上从最早的触宝输入法,后来切换成 Gboard,日常使用倒是没什么大问题,就是有一些词总是需要翻页才能找到,这让我非常不爽,就想手机上能不能用 RIME,于是就有了这篇水文。
  • Obsidian 使用篇一:使用 markdown-clipper 全文保存网页 之前使用整理 Evernote 代替品 的时候就提出了我自己的一个需求,就是有一个完善的 Web Clip 系统,Evernote 和 WizNote 都做的比较不错。但 Obsidian 并没有提供类似的工具,不过幸好 Obsidian 使用 Markdown 来管理文档,这样的开放程度使得我可以寻找一个将网页变为 Markdown 的浏览器扩展就能做到。
  • 使用了半年 macOS 之后 我又回到了 Linux 的怀抱 我在使用了半年 macOS 之后,又回到了 Linux 的怀抱,虽然 macOS 有其自身的优势,我也不否认 macOS 系统上软件生态的友好,但我发现即使我将日常开发主力机器装回到 Linux,也没有丧失操作系统的便捷性和易用性。这或许和我下意识的只使用跨平台的软件有关,并且最长使用的软件几乎都是一套快捷键。
  • 重置 macOS S.M.C 和 NVRAM 今天用得好好的电脑突然三次黑屏,两次发生在早上刚刚使用的时候,一次发生在晚上回家之后。所以一怒之下就直接上官网联系了 Apple Support,但是也不知道是不是我直接登录的 .com 网站,在我提交了 Support 之后一分钟一个外国小哥打了电话过来,我一下子没反应过来,只能用着不那么熟练的英语开始了 macOS 修复之路。