Windows下Git的HOME环境变量冲突的解决方法

前几天装上了 Cadence, 然后使用 Git 的时候发现配置信息全没了。仔细一看,系统环境变量 HOME 变量不对,变成了 Cadence 的工作目录。

解决方法也很简单。我们不能直接修改系统的环境变量,否则 Cadence 可能就不能正确工作了。因此从 Git Bash 的配置文件入手就行了。

进入 Git 的安装目录,打开 etc/profile 文件,在文档第一块注释下面添加一行:

其中的 /c/Users/yourname 就是你原本的 HOME 路径。保存即可。

异步编程简介与C#中基于任务的异步编程入门

(注:这是我在系科协写的第一篇 Weekly, 同步到这里来)

一、什么是异步编程

请不要着急,在介绍异步编程前,让我们先耐心了解一下下面的几个概念,虽然可能会有些枯燥,但这对后面的学习是非常有必要的。

 

概念一 进程与线程、并发

进程 (process), 是运行中的可执行程序的实例。打开“任务管理器”,你会看到许多进程。如果你切换到“详细信息”选项卡,你还会看到每个进程含有的“线程”数目(如果看不到可以右键列表标题栏,在“选择列”中勾选“线程”)。那么“线程”又是什么呢?

任务管理器中显示的进程与线程信息

 

线程 (thread), 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。默认情况,一个进程只包含一个线程,从程序的开始到执行结束。但线程可以派生自其它线程,并且它们共享该进程所拥有的全部资源。所以一个进程可以包含不同状态的多个线程,来执行程序的不同部分,最重要的是,它们是并发执行的。

 

所以“并发”是什么意思呢?想一想你平常使用电脑的时候,是不是能够一边听音乐一边上网呢?这种看上去像是在同时执行的情形就是所谓的“并发”(之所以说“看上去”是因为大多数情况下各线程所含的指令只是在逻辑上是同时执行的,而在物理上并不是真正地同时执行的(即不是并行的),这涉及到现代操作系统的 CPU 调度机制,有兴趣的同学可以去了解)。

 

所以说,线程的并发性不仅使得我们能够同时运行不同的程序,还保证了每个程序能够通过多线程同时执行不同的任务,这是十分重要的。

阅读全文→

Let’s Encrypt: 让Certbot续期证书后重新加载Nginx

普通用户使用 Let's Encrypt 证书有 90 天有效期的限制,但通过 Certbot 可以实现证书的自动续期。不过,更新证书后必须重新加载 nginx 配置文件才能生效。遗憾的是,Certbot 的默认定时任务并没有包含重载配置文件的命令。

 

为了避免未重载配置文件导致的服务不可用,我们需要对 Certbot 任务配置文件做出修改。其位于 /etc/cron.d/certbot.

默认配置大概是这样:

 

我们只需要将向最后一行命令末尾添加 --renew-hook "/etc/init.d/nginx reload" 即可。即:

--renew-hook 后面的命令会在每次成功续期证书后运行。此处即为重新加载 nginx 配置文件。

 

参考链接:https://www.guyrutenberg.com/2017/01/01/lets-encrypt-reload-nginx-after-renewing-certificates/

Seventeen主题404页面错误的解决办法

使用这款Seventeen主题有很久了,但是一直有一个问题,就是它的404页面有bug。对于某些不存在的链接,它并不显示预置的404页面,而显示的是网站主页。今天研究了下代码,给出我的解决方案:

在Seventeen主题的路径下新建一个叫做404.php的文件,输入以下代码:

 

(莫名多出了一个</div>标签,但是原作者是这么写的,就不去深究了)

【WordPress小改】将没有Gravatar但使用QQ邮箱的用户的头像替换为QQ头像并缓存

Gravatar在中国使用的人很少,所以评论里常常会看见顶着Gravatar的丑丑的默认头像的人。但是,这部分人有很多都使用QQ邮箱,于是我想到了可以用他们的QQ头像代替。

三年前我写了一个放在functions.php里的小函数来实现这个功能,但是有些Bug。今天终于重写了一下,大家可以拿去用。

具体功能就是将没有Gravatar但使用QQ邮箱的用户的头像替换为QQ头像,我使用的是 http://q2.qlogo.cn(q2可以换成q1, q3, ...)来获取,但是我没有辨别出它对于QQ邮箱那个参数使用的加密方式,所以只能以明文的形式去请求QQ头像(貌似本来是同时支持加密和明文的)。因此,为了保护用户隐私,我只能将这些头像按照加密的文件名存到本地,顺便也就添加了Gravatar的缓存功能。

阅读全文→