Git歪门邪道

将当前commit独立成分支

情况:已经commit了,但是想让某个commit之后的都分离到独立的分支,原来的分支恢复到那个commit。

第一步,新建分支:

1
git checkout -b newbranch

第二步,回到原分支(比如master):

1
git checkout master

第三部,reset hard:

1
git reset --hard <某commit的id>

<某commit的id>通过git reflog来看。

不小心rebase了,想恢复内容

Read More

Vscode在snippet中启用intellisense

之前一直很不爽,在使用一些code snippet的时候vscode的intellisense完全不动,搞到要手打,很绝望。今天终于突发奇想用合适的关键词搜到了解决办法:Intellisense not working in code snippets - VS Code。简单来说只需要在settings.json里添加一行"editor.suggest.snippetsPreventQuickSuggestions": false就行了。

当然,在设置界面直接搜索editor.suggest.snippetsPreventQuickSuggestions取消勾中也可以。默认是勾上的,就是true

Read More

xdg-open默认打开应用

起因是smartgit的open file打开python文件时用了mousepad,然而我想用vscode。smartgit通过xdg-open来打开文件,因此设定xdg-open的默认应用设置才有用。

参考:xdg-open default applications behavior

确定filetype

首先需要确定对于xdg来说文件的类型是什么。通过xdg-mime来做:

1
xdg-mime query filetype <文件或目录>

例子:

1
2
➜ xdg-mime query filetype hugo-encryptor.py
text/x-python

设置xdg-mime

确定了文件类型之后就可以设置默认应用:

1
xdg-mime default <xx.desktop> <文件类型>

Read More

Windows的DLL示例

官方有个WalkThrough教程。有些小东西需要注意。

sln

首先是dll的header开头的那几个ifdef。原文是这样的:

1
2
3
4
5
#ifdef MATHLIBRARY_EXPORTS
#define MATHLIBRARY_API __declspec(dllexport)
#else
#define MATHLIBRARY_API __declspec(dllimport)
#endif

第一行的MATHLIBRARY_EXPORTS要特别注意,如果自己的示范库不是叫MathLibrary,比如叫DemoDLL,那么就应该改成DEMODLL_EXPORTS。具体是什么EXPORT,可以看项目属性(Alt+Enter)的C/C++-预处理器预处理器定义里面的值。

否则就会在编译时报错C4273(inconsistent DLL linkage),因为编译器会当成是dll import。

第二个是client app,直接右键引用,把dll那个项目给引进,就可以了。

cmake

相比sln,cmake定义ifdef就自由得多,只要跟CMakeLists.txt里面target_compile_definitions的一致即可。例如CMakeLists.txt是这样:

1
target_compile_definitions(dlldemo PUBLIC MATHLIBRARY_EXPORTS)

Read More

Journald设置空间占用上限

今天登录ssh的时候,shell提示根目录已经用了79%了。第一反应是log太多了没清,检查一下,果然,占了1.8G:

1
2
➜  journalctl --disk-usage
Archived and active journals take up 1.8G in the file system.

自然是要去找怎么压缩日志文件的空间。当然,最简单的办法就是清空/var/log/journal目录

查了一下,askubuntu论坛上有解决方法。

单次清理日志,清理到只剩200M的话,用这个命令:

1
➜  journalctl --vacuum-size=200M

如果是想让系统自动控制大小,就要改/etc/systemd/journald.conf了。当然,按照传统,应该在/etc/systemd/journald.conf.d/里新建一个配置文件,填以下内容:

1
SystemMaxUse=200M

还有其他参数可以设置,参考journald.conf.d(5)

Read More

Ubuntu Set Default File Manager

参考askubuntu

但是由于时过境迁,正确的程序是gio,所以查询现在的默认应用的命令是:

1
gio mime inode/directory

在我的电脑上这个命令输出如下:

用于“inode/directory”的默认应用程序:pcmanfm.desktop
已注册的应用程序:
	code.desktop
	pcmanfm.desktop
	org.gnome.Nautilus.desktop
	org.gnome.baobab.desktop
推荐的应用程序:
	code.desktop
	pcmanfm.desktop
	org.gnome.Nautilus.desktop
	org.gnome.baobab.desktop

如果要修改成别的,比如改成code,那就执行:

1
gio mime inode/directory code.desktop

不需要像原文一样–query和–set。

Read More

.desktop文件标准格式

.desktop文件的文档链接是:gnome - desktop files。简单来说,一个合格的.desktop文件需要定义至少四个内容:

1
2
3
4
5
6
[Desktop Entry]
Name=快捷方式显示的名字
Exec=双击快捷方式时执行的命令
Icon=就算没有也要制定一个,比如application.png
Type=Application
Categories=GTK;GNOME;Utility;

显示在桌面上的快捷方式的名字是由Name决定的,跟.desktop文件的名字没有关系。

所以写一个Name是Intel但是文件名是AMD的.desktop也不是不可以

实际上这跟hugo的特点是一样的,hugo也是文件名跟实际标题可以完全不一样

hugo居然拒绝渲染.开头的文件,真是无语了

Read More

2021拜山

上星期六去了妈妈那边拜山,今天去拜爷爷。地方不太记得是哪里,可能是南海殡仪馆?是去火葬场的纪念楼拿的骨灰。

去到的时候被告知,2019年新规定,不能再拿骨灰出来拜,以后都只能拿个牌位出来。这次因为是新规定之后的第一次,所以就最后一次可以拿出来拜。

点上香烛之后,突然开始下雨,就跟爷爷去世那天一样的大雨。不得不说有一种奇怪的感觉。撑了伞挡雨,等烧完之后,我和爸爸一起去办事大厅交钱先做个牌位。大家都很不满,觉得要去西樵的墓园买个墓地,一方面好让奶奶也来拜,另一方面也不用受这鸟气。

听说要十几万一个,确实挺贵的

下午吃完饭,再去旧屋烧纸钱。虽然不给在火葬场烧,但是仪式还是要的。今天大风,烧起来烟不大;但是因为以前没遇到风这种情况,所以我挑起还没烧完的灰想让它们接触空气继续烧的时候搞到到处都是,被骂了一顿。姑妈和姑丈给旧屋打扫了一下,但是后边也不会经常有人来,可能下次来又会满了灰尘。

很累,回到家之后睡了一个半钟,超沉,就像模拟人生里的一个描述:睡得跟死人一样(形容吸血鬼睡了个好觉的心情)。

Read More

MathJax与Hugo

Markdown里显示公式一般用的是MathJax。用中文搜索Hugo上的MathJax,都是比较老的教程,比如知乎 - 使用了静态网页生成器:从WordPress 到 Hugo

MathJax是发布在Github上的,项目地址:MathJax。根据它的README.md可知可以把需要用到的js放到服务器上,用自己的服务器来提供所需的组件。

还不是因为不喜欢让cdn加载

1
2
3
git clone https://github.com/mathjax/MathJax.git mj-tmp
mv mj-tmp/es5 <hugo的static目录>/mathjax
rm -rf mj-tmp

随后,在主题提供的header-addtion或者类似的提供往html的header里添加代码的文件里添加script。比如对于官方推荐的ananke主题,这个添加header的文件是themes/ananke/layouts/partials/head-additions.html。往该文件中添加:

1
<script id="MathJax-script" async src="/mathjax/tex-chtml.js"></script>

即可让博客实现显示公式的功能。

Read More

修改virtualbox共享文件夹的权限

virtualbox可以方便地分配共享文件夹,但是文件权限默认是777,owner也不太好看。为了修改默认权限,需要用mount -o。

假设分配的文件夹名字是nugo,挂载点是/mnt/nugo,那么用到的挂载命令是:

1
mount -t vboxfs -o fmask=133,dmask=0222,uid=你的用户的uid nugo /mnt/nugo

用7减去fmask和dmask的值就是chmod中的权限值,r=4,w=2,x=1。

可以写一个systemd unit file来在开机时设定好权限:

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=fix share folder permission
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/bin/mount -t vboxsf -o fmask=133,dmask=022,uid=你的用户的uid nugo /mnt/nugo
# disable timeout logic
TimeoutSec=0
#StandardOutput=tty
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Read More