且行善举,莫问前程。

0%

简单介绍

因为主题出了问题,所以将next-theme升级到了7.7.0的版本,由此一来要对博客重新做一次美化。在次过程中感觉next-theme的模块化越来越好了。并且原生支持了很多功能。老版本7.x以下大多都需要通过修改源码来实现美化或增加功能,而7.x完全可以通过修改主题配置实现。仔细读以下hexo的配置,修改配置后就可以实现美化,所以不再赘述。

添加文章结束标志

在hexo目录下创建source/_data/post-body-end.swig,添加以下内容。

1
<div style="text-align:center;color: #ccc;font-size:14px;">------ 本文结束 ------</div>

然后删除主题配置文件custom_file_pathpostBodyEnd的注释。

动态显示title

在hexo配置文件中添加subtitles,内容以W分割,或者自己修改分隔符,如:

1
subtitles: 人生当苦无妨,良人当归即可。W且行善举,莫问前程。

在hexo目录下创建source/_data/header.swig,添加以下内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<script>
function GetRandomNum(Min,Max)
{
var Range = Max - Min;
var Rand = Math.random();
return(Min + Math.round(Rand * Range));
}

function setSidebarMarginTop (headerOffset) {
return $('#sidebar').css({ 'margin-top': headerOffset });
}

function getHeaderOffset () {
return $('.header-inner').height() + CONFIG.sidebar.offset;
}

window.onload=function(){
var subtitle = "{{config.subtitles}}";
var mytitle = subtitle.split("W");
var max = mytitle.length-1;
var index = GetRandomNum(0,max);
var text = mytitle[index];
$(".site-subtitle").html(text);
var headOffset = getHeaderOffset();
setSidebarMarginTop(headOffset);
}
</script>

然后删除主题配置文件custom_file_pathheader的注释。

为主题文章添加阴影效果

在hexo目录下创建source/_data/styles.styl,添加以下内容。

1
2
3
4
5
6
7
.post-block {
margin-top: 60px;
margin-bottom: 60px;
padding: 25px;
-webkit-box-shadow: 0 0 5px rgba(202, 203, 203, .5);
-moz-box-shadow: 0 0 5px rgba(202, 203, 204, .5);
}

然后删除主题配置文件custom_file_pathstyle的注释。

禁止广告拦截软件

为了保证广告能够正常投放,并且产生收益,要禁止广告拦截软件,可以使用第三方代码fuckadblock

1
npm install fuckadblock

在hexo目录下创建source/_data/header.swig,添加以下内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<script>
// Function called if AdBlock is not detected
function adBlockNotDetected() {
// console.log('AdBlock check is ok');
}
// Function called if AdBlock is detected
function adBlockDetected() {
for ( i=0; i<document.styleSheets.length; i++) {
void(document.styleSheets.item(i).disabled=true);
}
alert('本站显示不正常,可能因为您使用了广告拦截器。');
}

// We look at whether FuckAdBlock already exists.
if(typeof fuckAdBlock !== 'undefined' || typeof FuckAdBlock !== 'undefined') {
// If this is the case, it means that something tries to usurp are identity
// So, considering that it is a detection
adBlockDetected();
} else {
// Otherwise, you import the script FuckAdBlock
var importFAB = document.createElement('script');
importFAB.onload = function() {
// If all goes well, we configure FuckAdBlock
fuckAdBlock.onDetected(adBlockDetected)
// fuckAdBlock.onNotDetected(adBlockNotDetected);
};
importFAB.onerror = function() {
// If the script does not load (blocked, integrity error, ...)
// Then a detection is triggered
adBlockDetected();
};
importFAB.integrity = 'sha256-xjwKUY/NgkPjZZBOtOxRYtK20GaqTwUCf7WYCJ1z69w=';
importFAB.crossOrigin = 'anonymous';
importFAB.src = 'https://cdnjs.cloudflare.com/ajax/libs/fuckadblock/3.2.1/fuckadblock.min.js';
document.head.appendChild(importFAB);
}
</script>

检测到广告拦截程序后,会禁用所有的网站样式。

小结

我的博客,除以上自己添加代码外,都是通过修改配置实现,无需修改主题代码,如更新主题,直接git pull即可。

如需要自定义功能或样式,在source/_data/下添加即可。

2020年上班第一天,我们搭在阿里云的一个服务突然无法访问了。调查许久后,找到了原因。

想要在国内部署一个网站,是需要备案的。如果不备案还要部署可以通过域名访问的网站,只能使用https协议,也就是443端口。这也是因为https协议的优势,加密你的网站访问。

但是2020年可能大多数网站就不能这么搞了。因为2020年注定是不平凡的一年,开个玩笑。2020年之后很多浏览器就不再支持TLS 1.0/1.1,那么目前就只剩下TLS 1.2了。

具体详情点击链接查看,SSL Labs Grade Change for TLS 1.0 and TLS 1.1 Protocols

再支持TLS 1.2之后,因为SNI(Server Name Indication)并没有加密,所以很容易被国内云服务器的监控抓取到,比如阿里的云盾等。当然你也可以想办法把云服务的这些监控给关掉,关掉后是否可以使用443端口我并没有尝试过,所以不做讲解了。

所以还是老老实实的用IP访问,或者部署到香港或者日本等比较近的地方吧。也可以等待TLS 1.3普及开来,等到TLS 1.3,SNI也就可以加密了。

我们经常会使用远程服务器当跳板机和开发机,如果说你的远程开发机有很多,当要从github clone代码时要怎么办。我们不可能将每台机器的公钥添加到我们的github账号,并且将我们的私钥放到服务器是很不安全的。

其实操作很简单,但是我发现很多人都不这么做,使用ssh agent。

确保你系统上的ssh agent在运行。

1
eval `ssh-agent -s`

打印agent daemon的pid,证明服务运行成功。

.ssh/config中添加以下内容,让ssh-agent可以转发。

1
ForwardAgent yes

添加你的私钥

1
ssh-add 'your pk path'

此时你就可以本地远程连接服务器,来clone你的代码,或者连接其他服务器了。如果远程服务器也需要转发,也要重复以上操作。

博客有一年没有更新了,并不是说有多忙,是自己有了一些想法,认为自己搞的东西在谷歌都能搜索到的,并没有很高大上的研究,所以就不想写一些科普文和简单的技术文章了,毕竟都是大家可以在网络上搜索到的内容。这种想法持续了很久,不知道是不是在为自己的懒惰开脱,经过一段时间的验证,还是想坚持写博客,不管是生活上还是杂谈或者是技术博客,都可以写下来。原因有三点。

第一,是可以帮助自己提高写作能力与总结能力。写下的文章自己也要通读几遍,对文章再做修剪和纠错,再次提高语言总结能力。

第二,坚持一个好习惯。我认为写博客是一个好习惯,可以记录生活,可以帮助一些人,也能提高自己的写作能力和总结能理力。或许还可以让自己变得更不浮躁更能独立思考。坚持也能让自己变得更有毅力(还有一个提高毅力和耐力的方式,那就是去运动)。

第三,可以加强记忆,习惯用印象笔记裁剪网页进行保存,虽然说可以进行搜索,但是长久以来,阅读能力下降,感觉保存起来就变成了自己的东西,而不能真正的消化掉,囫囵吞枣的看一遍,不能深入了解。俗话说,想记得牢而且真正的理解,那就是教别人一遍。

大学的时候,还会坚持写文章,博客从emlog到WordPress,又从之前Python写的一个模板渲染到现在hexo,之前的文章经过筛选留下了现在这些,也有很多文章已经被删掉了。

所以我决定继续坚持写博客,不过不会像以前那么简单,比如在xxx系统安装yyy类型的文章了,毕竟软件的readme都会告诉你的啊。

在macOS下,使用V-Block复制粘贴行内文字时,nvim总会自己在末尾加入一个\n字符,也不算是很严重的问题,但是和vim的表现是不一致的,或者也可以用v替换^v。

我使用vim一般都是用V-Block来复制粘贴,所以自从换了neovim就一直被这个问题困扰。最近有时间研究了下这个问题。

我通过nvim -u NORC启动nvim,使用v-block模式粘贴复制,发现问题不存在了。那肯定是配置的问题,配置有一千多行,只能用二分注释法去查找是哪个配置的问题了。

最后找到是clipboard=unnamed与系统剪切板共享出了问题。google无果,issue搜索clipboard相关问题,因为issue太多未找到。所以自己提了issue。

最后才知道,其实这个问题在2015年就有人提出了,在issue#1822可以找到,并且有很多人提了相同的issue。标为了bug,放到了todo的milestone,修复无望。

有大佬给出解决方案,只要在init.vim中添加下面的配置就可以了。

1
2
3
Plug 'bfredl/nvim-miniyank'
map p <Plug>(miniyank-autoput)
map P <Plug>(miniyank-autoPut)

0x00

使用 <C-d> 可以显示补全列表

0x01

使用补全时,可以使用<C-n><Right><Tab>键选择下一个补全,使用<S-Tab><C-p><Right>键择上一个补全。

0x02

当使用Ex命令时,如:bn,可以按 @: 来重复上一次命令,运行一次后就可以使用 @@ 来重复他,如果想回到上一个文件,可以使用使用 :bp 命令,但是更好的替代方案是,使用<C-o>来反向遍历缓冲区列表。

0x03

粘贴内容时,使用 :set nopaste,这样粘贴板的内容就不会自动缩进了,而是保持原格式。

0x04

vim中,% 代表当前文件,所以可以使用 :!python % 来执行当前文件。

0x05

使用 :args 列出vim缓冲区列表。输出中的[]字符表明哪个是活动文件。:ls 也是如此,但更加好看,其中%标识当前缓冲区打开文件,#则代表轮换文件。

0x06

使用 :edit . 或者 :Explore 打开vim内置文件管理器netrw。

我的一个朋友问我,哪里有下载python的镜像源,我一直都是在是pypi下载,而且路由都已经翻墙,平时很少会碰到下载python慢的问题。不过在我们伟大的墙下,访问pypi.python.org确实会慢很多。

Pyenv

一般管理下载python除了brew还会用pyenv,推荐直接用pyenv安装python,这样就可以很方便的管理python版本。pyenv是可以设置PYTHON_BUILD_MIRROR_URL环境变量来加速下载python。添加之后也下载python会快很多,当然也要看mirror的位置,如果在github上也不会快到哪里。我都是用这个源http://pyenv.qiniudn.com/pythons,但是目前已经没人维护了。

然后我找到了淘宝python源,然后设置pyenv的mirror url环境变量,发现并没有任何作用。经过一番查找,在 pyenv issue 18知道了pyenv使用了python build。

Python Build

python build,看实现是把python包和sha256写入到配置文件,下载的时候通过sha256的值来获取python包,我写了个web sever证实了这一点。

当你使用pyenv安装python时,找不到python版本号会提示你更新pyenv,也就是git pull,更新的就是python build的映射文件。

我通过重定向讲下载跳转到具体的淘宝源url,pyenv可以成功下载。当然pyenv最终会比较下载的包的sha256的值,校验不通过依然会去python.org下载。

那么我们只需要把python build配置中的包名和sha256的值取出来做一个映射,就完全可以全部转发到淘宝镜像源了。具体怎么取偷个懒,毕竟这样的需求还真不多。或者在淘宝直接下载包放到pyenv的cache中,就可以直接安装了。

上一周Neovim发布了0.3.0版本,这次版本更新修复了很多问题。也包括我之前遇到的按键无法使用问题,还有一个困扰我许久的bug,也就是在neovim中使用!command,无法打印unicode字符。

我尝试也打印终端的编码,也修改了vimrc种的编码配置都没有任何效果,这使得我需要频繁推出neovim,切换到终端来执行一些shell命令。所以这个bug一直放到了todo list中,在neovim github的issuse中也没有搜索到相关问题。在我还没提issue的情况下,这次0.3.0的版本就已经更新了。

MacOSX中更新neovim

肯定要第一时间更新neovim。使用brew upgrade neovim来更新,发现我碰到的问题都已经解决了。真心给neovim团队点赞,今后也会为neovim尽一份力。

今天在nvim在tmux中HOME和END两个键不能使用了,vim没有任何影响。而且我并没有修改过任何Nvim配置文件。再回忆,昨天我只用了NORC模式启动过nvim。

1
nvim -u NORC -N

是不是有什么关系,在google上搜索相关信息,在NeoVim的issue里找到了答案。

*https://github.com/neovim/neovim/issues/8032

是和环境变量TERM有关,将TERM设置成tmux或者screen可以解决这个问题。而且在0.2.3版本已经修复了这个问题。不过fedroa中最新版本是0.2.2,暂时通过修改环境变量解决问题了。

如果有树莓派闲置可以考虑装一个kodi来打造成家庭影院,kodi是可以运行在Linux系统上的,所以你也可以在系统上运行其他的服务(ss或者smbd等),首先你得有个显示器或者电视。

RASPBIAN系统的安装

系统推荐使用RASPBIAN STRETCH LITE,基于DebianStretch,这个系统更加轻量级,毕竟树莓派上没必要再跑桌面了。

系统安装

打开RASPBIAN下载界面,选择RASPBIAN STRETCH LITE下载,并解压出img文件。烧录镜像在Windows下可以下载Win32DiskImager,如果是Linux可以直接使用dd命令了。

准备一张大于或等于8GB的内存卡,并且格式化内存卡。打开Win32DiskImager选择镜像和内存卡进行写入。

安装 kodi

启动树莓派,你需要一个显示器,并且连接上键盘,登陆系统用户名pi,密码raspberry。安装openssh-server,并且使用service ssh start启动ssh-server服务。这可以确保你可以使用ssh远程连接到树莓派。

安装 kodi

1
2
$ apt update
$ apt install kodi

安装 pvr client

1
$ apt install kodi-peripheral-joystick kodi-pvr-iptvsimple kodi-inputstream-adaptive kodi-inputstream-rtmp

配置 kodi 自动启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ sudo tee -a /lib/systemd/system/kodi.service <<_EOF_
[Unit]
Description = Kodi Media Center
After = remote-fs.target network-online.target
Wants = network-online.target

[Service]
User = pi
Group = pi
Type = simple
ExecStart = /usr/bin/kodi
Restart = on-abort
RestartSec = 5

[Install]
WantedBy = multi-user.target
_EOF_

启动 kodi

1
$ service kodi start

配置 kodi

kodi如果要选择中文,需要先切换字体,默认字体中文会乱码。

配置 iptv m3u,iptv源需要自己多找找,可以在高清范找找,推荐一个http://www.hdpfans.com/thread-699265-1-1.html

还有一个 iptv pool 的插件,目前我还未去尝试。现在用kodi最多是投屏播放,并且支持airplay。

(iptv pool我已经尝试了,并没有什么用)补一个可以检查iptv源的工具iptv-checker,请自行下载。

kodi 插件源

下载插件zip包到树莓派,直接通过kodi安装插件包。

开发插件

kodi插件是可以使用python来开发的,虽然我还没研究过。这里有个 xbmc-remote 可以研究下。

参考