Rongbin Fan

Notes

DPS 退押金时的 Statutory Declaration

请尽量指定仍在当地的室友为 nominated tenant

快速上手 QGIS

一款开源、 流畅、 多插件的地图软件

Github Actions + fonttools 拉取字符并创建中文字体子集

帮助解决中文字体体积过大的问题

Hugo Markdownify 无法生成 <p> tag

加个条件判断

用 Webmention 接收 Mastodon 互动

长毛象作为 Hugo 评论系统、 加入联邦宇宙, 还讨论了使用 Github Actions 自动化

斜交策略 Oblique Strategies

当创作变成工作

使用 Github Actions 自动部署 Hugo

随时随地上传或修改博文

汉字标准格式

支持中英文混排间距、 标点挤压与悬挂

높임법:韩语敬语梳理

主体/客体/相对敬语法、 压尊法、 事物尊称

주다, 드리다, 주시다 + 간접인용 명령문

“给” 的敬语变化, 以及在间接引语命令文 (-(으)라고 하다) 中引入 “달다”

Windows 11 的新字体:Segoe UI Variable

微软在 2021 年 5 月 6 日于 Windows 10 Insider Preview Build 21376 发布 了 Segoe UI 的可变字体版本:Segoe UI Variable, 在 Windows 11 正式作为系统默认字体。 得益于可变字体特性, Segoe UI Variable 可以根据不同的字重选择做出调整, 在低分屏下也具有较高可读性。 此次还同步推出了 Text 和 Display 两个版本, 前者常用于内文, 后者的装饰性元素或字体的风格更加突出, 所以更常用于标题。 Text 版本增加字重, x-字高更高, 字母的开口以及间距更大。 Display 版本字母尾部曲度更大, 字间距对应缩紧, 存在感更强。

风格上与旧 Segoe UI 相比, Segoe UI Variable 更圆, 字母尾部增加曲度并切平, 同时去掉了字母 I 和数字 1 的 crossbars, 字母 Q 的小尾巴缩短改平直, 整体更干练和紧凑, 看起来也更像 Product Sans 了。

可以通过 Windows 的官方文档, 或直接访问此链接 下载 Segoe UI Variable。

C++ 模版类重载流输入输出运算符

在 C++ 中只能通过友元函数来重载流输入输出运算符 << >>。 由于搭配模板类的使用, 编译器可能在对应编译友元函数时无法确定其为模版, 需要事先声明。

方法 1:提前声明并使用 <> 确认

#include <iostream>
using namespace std;

//需要提前进行声明,以使类中对友元函数的声明进一步确认函数为模板函数
template <class A> class complex;
template <class A> ostream & operator << (ostream &newout, const complex<A> &m);

template <class A>
class complex{ //以复数类为例
  private:
  	A real, image;
	public:
		complex(A a, A b):real(a),image(b){
		}

//在运算符 << 后加入 <> 以帮助编译器进一步确定该友元函数为模板函数
		friend ostream & operator << <>(ostream &newout, const complex<A> &m); 
}; 

template <class A>
ostream & operator << (ostream &newout, const complex<A> &m){
	newout<<"("<<m.real<<","<<m.image<<")";
	return newout;
}

int main(){
	complex<int> a(1,2);
	cout<<a<<endl;
	return 0;
} 

方法 2:在声明友元函数的同时定义友元函数

#include <iostream>
using namespace std;

template <class A>
class complex{
	private:
		A real, image;
	public:
		complex(A a, A b):real(a),image(b){
		}

//在声明友元函数的同时定义友元函数
		friend ostream & operator << (ostream &newout, const complex<A> &m){
			newout<<"("<<m.real<<","<<m.image<<")";
			return newout;
		}
}; 

int main(){
	complex<int> a(1,2);
	cout<<a<<endl;
	return 0;
} 

如果可以不使用友元函数

如果模板类中的成员为公有, 则完全不需要在模板类中声明友元。

C++ 的浅拷贝和深拷贝

什么时候会调用拷贝构造函数

默认拷贝构造函数:浅拷贝

即:将被拷贝对象的数据成员的值一一赋值给新创建的对象

实例

class Rect{
private:
		int *p;     // 一指针成员
public:
    Rect(){      // 构造函数,p 指向堆中分配的一内存
        p = new int(100); // new 动态分配
    }
    ~Rect(){     // 析构函数,释放动态分配的内存
        if(p != NULL){
            delete p; // delete 释放 p 所指向的内存
        }
    }
};

int main(){
    Rect rect1;
    Rect rect2(rect1);   // 拷贝 rect1 来构造 rect2
		// 也即: Rect rect2 = rect1;
		// 浅拷贝,将成员的值进行拷贝 rect2.p = rect1.p (地址 = 地址)

		// 会出现错误
		// 在 delete 时既要 delete rect2.p 指向的空间,又要 delete rect1.p 指向的内存。但这是同一个内存(地址 = 地址),导致同一个内存被释放两次

    return 0;
}

同时还造成另外两个错误:

初探 Fluent Design System

微软在 Build 2017 Day Two 主旨演讲中正式宣布 Fluent Design System, 即先前传言为 Project Neon 的设计语言。 通用, 可拓展, 横跨多种设备, 可以说微软这一设计语言就是为 Mixed Reality 的发展做好准备。 该设计语言涵盖五种理念, 分别是 Light, Depth, Motion, Material, Scale。

microsoft-fluent-design-elements.png

宣传视频

官方网页 (无法在以中文为界面语言的 Chrome 正常浏览) | 优酷 (来自 Livesino)

Light (光)

2040_VRG0158.jpg

利用光线引导用户使用, 增强现实感, 使得目标和行动更加集中和准确。 将光作为设计理念的一部分, 或许是一种高出平面、 回归自然的目的。 实际应用中, 设计人员需要充分考虑场景光线排布和导向性操作是否可行, 需要基于用户心理的考察得出最终的设计。

Light has a way of drawing our attention. It’s warm and inviting; it’s fluid and purposeful. Light creates atmosphere and a sense of place, and it’s a practical tool to illuminate information.

引用部分是微软官方的定义。

光线引起人们注意, 而其特点也正是温和友好、 流畅、 目的性明确。 光能创造氛围更能营造范围, 是阐述信息的实用工具。

Depth (深)

Material Design 为 UI 元素引入高度。 高度将帮助用户了解每个元素的相对重要性, 让他们能够集中于手边的工作, 即引入了 Z 轴这一属性。 Fluent Design System 中体现为 Depth, 在微软尚未公布更多细节前, 我们可以参考 Material Design 中相关的规范得出初步思考。