常用设置代理命令

本文整理了 Windows 命令行 和 Linux 终端中设置代理的命令。以本地 HTTP/HTTPS 代理 127.0.0.1:8888 和 SOCKS5 代理 127.0.0.1:8889 为例。

Windows 命令行代理设置

HTTP 代理设置:

1
2
set http_proxy=http://127.0.0.1:8888
set https_proxy=http://127.0.0.1:8888

SOCKS5 代理设置:

1
2
set http_proxy=socks5://127.0.0.1:8889
set https_proxy=socks5://127.0.0.1:8889

查看更多

C++智能指针:原理与实现

若问起 Java 与 C++ 在使用体验上的差别,许多人都会提到「垃圾回收」这个词,Java 自带垃圾回收机制,而 C++ 没有。同样是面向对象的程序语言,这一点上的设计理念却如此大相径庭。有个古老的段子说,Java 的设计者认为:“内存管理这么重要的事情怎么能交给愚蠢的程序员呢!”,而 C++ 设计者认为:“内存管理这么重要的事情怎么能交给愚蠢的机器呢!”二者好像都有些道理。

C/C++ 的指针把计算机底层暴露给了程序员,在使其变得灵活强大的同时也增加了程序员的负担,特别是对初学者来说,内存忘记释放、野指针满天飞都是常见问题,而且没那么容易克服。即使是对有经验的程序员来说,随着项目规模变大,资源管理也会成为一个令人头疼的问题。

为了解决内存泄漏的难题,C++ 11 标准引入了三种智能指针:std::shared_ptrstd::unique_ptrstd::weak_ptr。但只会用是不足够的,这篇文章就来说说智能指针的基本思想与实现方法。注意,文章中的代码自然与 std 的实现有所不同,旨在抓住思想本质,免去为了适应特殊情况而引入的更多细节。若实际项目中真遇到那些所谓「特殊情况」,则仔细研读 std 的代码是很好的方案。

裸指针有什么问题?

首先要明确的是我们究竟想要解决什么问题。在 C++ 中通过 new 关键字在堆上申请空间后,除非使用 delete 关键字释放这块资源,否则这块资源对系统来说就是被占用的,直到整个程序结束才会被回收。即使当前程序已经不再需要这块资源,或者已经丧失了对这块资源的控制,也是如此。一个简单的例子:

1
2
for(int i=0; i<100; i++)
char* p = new char[100];

查看更多

VS Code 中配置 Anaconda

首先安装 Anaconda 与 VS Code,以及 Python 插件。然后在 VS Code 配置文件中增加两行:

1
2
"python.pythonPath": "C:\\Users\\Alan\\Anaconda3\\python.exe",
"python.condaPath": "C:\\Users\\Alan\\Anaconda3"

其中路径更换为自己机器上的。这样配置可以无视掉系统上的其它 Python,另外诸如代码补全以及 import 等都可以正常工作。

vtkMath 旋转向量

VTK 中有两个用以旋转向量的方法:

1
2
3
4
// 根据转轴与角度旋转
static void vtkMath::RotateVectorByWXYZ(const float v[3], const float q[4], float r[3]);
// 根据四元数旋转
static void vtkMath::RotateVectorByNormalizedQuaternion(const float v[3], const float q[4], float r[3]);

其中 v 是原向量,q 为参数向量,r 为旋转后向量。

其中根据转轴与角度旋转时,首先需要知道转轴向量 norm,并归一化。向量方向依据右手定则。然后指定转动角度 angle,构造转动参数 q:

1
float q[4] = {angle, norm[0], norm[1], norm[2]};

查看更多

C++ 保证某个 Class 在全程序仅有一个实例

定义这样一个类a

1
2
3
4
5
6
7
8
9
10
11
12
class a
{
public:
a(){};
~a(){};
static a* theInstance();
};
a* a::theInstance()
{
static a *b = new a;
return b;
}

那么在全程序任何地方使用 a::theInstance()来获取实例,就总能得到唯一的类 a 的实例。这大概是比较基础的技巧,但是我第一次知道时还是很惊讶的。原理是利用了类的静态成员函数和静态变量的性质。

自定义 Hexo 文章链接形式

Hexo 文章默认采用 年/月/日/标题 这样的永久链接形式。这个在站点_config.yml中的permalink字段即可更改。可以使用任何的字符作为路径,例如,我希望所有的文章链接形式都是:

1
2
http://imalan.cn/archives/1
http://imalan.cn/archives/2

也就是

1
http://imalan.cn/archives/[cid]

那么就把permalink改为archives/:cid。其中的 :cidhexo g 这一步时 Hexo 会从文章的头部提取,因此需要在每篇文章的头部添加 cid 信息,例如:

查看更多