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 了。

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++ 的浅拷贝和深拷贝
什么时候会调用拷贝构造函数
- 一个对象以值传递的方式传入函数体
- 一个对象以值传递的方式从函数返回
- 一个对象通过另一个对象以进行初始化
默认拷贝构造函数:浅拷贝
即:将被拷贝对象的数据成员的值一一赋值给新创建的对象
- 如果数据成员中有指针成员
- 浅拷贝只是增加了一个指针指向已经存在的内存
- 则新对象的指针所指向的地址与被拷贝对象的指针所指向的地址相同
- 则析构 delete 对象时会重复 delete 两次同一个内存空间而出错
实例
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。

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

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