纪念|买了个新键盘

抛弃以前的键盘的原因:服役了很久的罗技键鼠套装,甚至鼠标都不知道飞到哪里去了。服役年龄长带来的问题:

  1. 键面有点黏,粘了一些尘,手感很差
  2. 按下去的时候很硬,反弹的时候又黏滞,导致错漏很多;最严重的是尾指控制的键,由于尾指的力量本来就弱,按z和ctrl的时候手掌也没办法辅助给力,经常漏按这两个键。

所以看知乎的建议,买了个达尔优的87键茶轴。初步体验感觉不错:

  1. 87键没有了数字区,刚好适合面积有限的桌面,鼠标再也不需要和键盘抢位置了
  2. 有背光,虽然是无法更改颜色的普通背光,但是至少照明效果有了(可以调亮度,多级)
  3. 茶轴的两段式手感没特别的感觉,但是比起原来的键盘实在是好太多了,打起来带劲
  4. 声音还是有点出乎意料的(大)
  5. 有Fn键,可以控制媒体播放(这条出乎意料,解决了听歌的各种问题)

总而言之,109块买到一个这样的键盘,确实是小确幸。

vscode使用clangd(Makefile)

clangd最大的特点是需要一个json格式的compilation database,通过这个文件才能让其他的lint、智能补全之类的功能正常运作。关于如何生成“compilation_database.json”,官方有针对不同的build工具对应的文档

类似CMake这类的高级工具自然是不需要其他插件,它内置了这个功能。对于其他类型的构建工具,比如Makefile,就要借助额外的工具来生成这个文件了。

这里使用的是scan-build工具来辅助,这东西是用python来写的,所以要用pip安装:

pip install scan-build

而调用的命令的名字是intercept-build,结合make的调用方法是:

intercept-build make

其实就是在正常的make命令前面加个intercept-build就可以了。

vscode的libstdc++的debug问题

今天用linux下的vscode,通过gdb和lldb做debug,在单点调试的时候总是会在new一个对象的时候报错,表示找不到libstdc++-v3之类的文件在哪,没法debug。解决这个问题的办法之一是把/usr/lib/libstdc++.so.6的debug symbol给strip了,debug的时候就不会尝试去解析标准库了,问题就解决。

由于strip会导致很多应用崩掉,所以建议在tty下面做这个:

sudo strip /usr/lib/libstdc++.so.6

解决方案来源于stackexchange。第二种方法没有成功,不知为何。

CMake的一些基础写法

不要想着骚操作。基本参考维基教科书:CMake入门。然而因为这个教科书已经停止更新了,所以参考CMake官方网站的教程CMake Tutorial

最简单的编译一个源文件的CMakeLists.txt

天才第一步,“Hello world”。写一个输出hello world的main.cc(这里用的是谷歌代码规范的命名规则)。然后同目录放一个包含以下内容的CMakeLists.txt:

cmake_minimum_required (VERSION 2.6)

project(helloworld)
add_executable(helloworld main.cc)

第一行指示要求的cmake最低版本,没有也行;第二行是project名字;第三行是指示编译一个可执行文件helloworld涉及的源代码文件是main.cc。

在这个目录下cmake .,cmake就会输出一个包含makefile的build文件夹,在build文件夹里make,就会输出可执行文件helloworld。

这种叫做In-source build(虽然实际上已经有点out-source的感觉了)。

Out-Source Build

为了不污染源代码,首先把main.cc和CMakeLists.txt放到src文件夹里,然后在src文件夹同目录自己建一个build文件夹,然后build文件夹里cmake ../src,这样就把cmake生成的build需要的东西和源代码分开了。

如果需要调整什么,只需要把build里面的直接删掉,重新cmake就可以了,不会影响源代码那边。

markdown页面内跳转

今天想看看markdown怎么实现在页面内跳来跳去。虽然是没有onenote那么方便可以在不同笔记本之间跳来跳去,但是页面内跳转也是很切实的需要。

其实这是基于html的特性,来源于stackoverflow。首先要用a标签来设置一个anchor(锚点):

<a name="后面要用到的名字">可能是一些要显示的文字</a>

然后就可以在后文中使用markdown语法来跳回来了:

[回到上边](#后面要用到的名字)

评论里说用id=也可以,尽可以试试。

NextCloud手动升级版本

首先进网站根目录,把nextcloud的维护模式打开:

sudo -u www-data php occ maintenance:mode --on

然后手动运行updater/updater.phar:

sudo -u www-data php updater.phar

它会提示你它会做什么,然后问你要不要继续,按y回车就会开始。

如果一切顺利,就会问你要不要马上运行occ upgrade来完成升级维护,但是在我的配置里它调用的function被禁用了,所以只能手动运行occ,选n。

然后会问是否保持维护模式打开,因为要手动运行occ,所以选y,然后updater就会退出了。

回到网站根目录,完成occ upgrade:

sudo -u www-data php occ upgrade

等它做完事情就可以了,一般不会问其他东西的。最后把维护模式关掉:

sudo -u www-data php occ maintenance:mode --off

updater只会一次升级一个大版本号,比如13到14,而不是一次直接跨到18,所以如果要从低版本跨几个版本号升级到最新,就要重复前面的过程一级一级升,一次一次occ upgrade。

nextcloud的php升级暴毙问题

今天忍不住不想再看WordPress天天抱怨要升级php,决定升tm的。从5.6升到7.2(因为lnmp 1.6官配支持7.2,1.7才是支持7.3,不敢冒险),然后WordPress无压力运行,nextcloud成功暴毙500.

面对这个老问题,这次好好查了论坛,终于找到了解决办法

Had the same issue, was able to load nextcloud with php7.0, and it broke when switching to 7.1 and 7.2; it was an opcache issue.

I suggest you remove the lines relating to Redis and memcache from your config:

    "memcache.local": "\\OC\\Memcache\\Redis",
    "memcache.distributed": "\\OC\\Memcache\\Redis",
    "memcache.locking": "\\OC\\Memcache\\Redis",

就是把config/config.php里面的三行关于OPcache的配置删掉 (如果配置了redis也把redis的删掉)。删了之后果然成功运行起来了。

无聊时的无聊程序

今天突发奇想——其实也不是突发,是想着一个大project,将写在excel里面的一个计算程序写成C++的。但是因为要涉及比较大的数字的运算,就要考虑用什么类型的变量来装载。又不记得C++的各种类型有多大——倒不如说一直不记各种语言的各种变量有多大。所以就想着写个程序来输出大小。

阅读更多无聊时的无聊程序