C++11 中返回一个空list-initalizer

今天在看夏幻菊苣的NatsuLib中看到这么一句代码:

natThread::ResultType natThread::ThreadJob()
{
    return {};
}

这是一个什么意思呢,可以理解为:

natThread::ResultType natThread::ThreadJob()
{
    return {}; // It returns natThread::ResultType();
}

例子:

int testInt()
{
    return {}; // It returns 0
}
std::string testString()
{
    return {}; // It returns std::string();
}

参考

http://en.cppreference.com/w/cpp/language/list%20initialization
https://github.com/akemimadoka/NatsuLib/blob/master/NatsuLib/natMultiThread.cpp#L68

Arch Linux 折腾记

声卡

装好了 i3wm 和 Arch Linux 之后,发现没有声音。
alsamixer 看了一下,也没有问题。
aplay -l 命令,发现笔记本自带的声卡在 card 1 上,窝猜它默认是 HDMI,所以才没有声音。
解决:
在 ~/.asoundrc 中写入如下文本:

defaults.pcm.card 1
defaults.pcm.device 0
defaults.ctl.card 1

另外,如果没有 ~/.soundrc 文件,新建就可以了。
还有,Master 默认是静音的,按 m 键可以解除。

显卡

窝的笔记本是双显卡的,要想用独立显卡怎么办捏。 [3]
安装NVIDIA驱动程序:

# pacman -S bumblebee xf86-video-intel dkms bbswitch nvidia primus mesa-demos

然后把自己的用户加到 bumblebee 组里:

# gpasswd -a <name> bumblebee

启用服务:

# systemctl enable bumblebeed.service
# systemctl start bumblebeed.service

测试下显卡:

# primusrun glxspheres64


另外,建议不要使用 optirun,因为 primusrun 的性能和电源优化已经超越 optirun,有更好地东西为什么不用呢? [1]

风扇一直在疯狂工作

把这个加到你的内核启动参数里 : [2] [4]

acpi_osi =! acpi_osi="Windows 2009"

输入法

输入法窝用 fcitx-rime,参考这些就可以了:

显示器 DPI

首先算出显示器的 DPI,可以用这个网站http://pxcalc.com
Resolution 是你的分辨率,比如窝的是 1920x1080,Diagonal Size是英寸,窝的是13。
然后得出的 DPI 是 169.45,后面那个小数点可以去掉。
然后把这个写到你的 ~/.Xresources:

Xft.dpi: 169                                                                      
Xft.autohint: 0                                                                   
Xft.lcdfilter: lcddefault                                                         
Xft.hintstyle: hintfull                                                           
Xft.hinting: 1                                                                                
Xft.antialias: 1                                                                              
Xft.rgba: rgb    

把 Xft.dpi 改成你的 DPI,然后重启电脑或者 systemctl restart sddm(如果你用的lightdm就systemctl restart lightdm)。

触摸板

奇怪的是,我的笔记本的触摸板它不工作,驱动也正常,可以尝试这个:
https://kernel.moe/index.php/414.html

浏览器

浏览器用 Firefox ESR。

插件(s)

  • NoScript

  • HTTPS Everywhere

科学上网

ShadowSocks + obfs4proxy

i3wm

原版的 i3-wm 功能比较弱,不能满足窝,所以用这个加强版的:

# pacman -S i3-gaps

配置文件:https://github.com/jingjinghack/config/blob/master/i3/config

笔记本盖子操作

可以用 xss-lock 来实现这些工作,它位于 AUR,可以用 AUR 包管理器来安装,比如用 yaourt:

$ yaourt -S xss-lock

在 i3 配置文件中添加这些:

exec --no-startup-id xss-lock -- i3lock -i <background_image> &

background_image 是背景图片,可以根据自己的需要修改。

vim

https://github.com/jingjinghack/oh-my-vim

WiFi

# pacman -S dialog wpa_supplicant wifi-menu 

然后用 wifi-menu 来生成 netctl 配置文件。

自动连接

netctl-auto 这东西依赖 wpa_actiond,所以要安装:

# pacman -S wpa_actiond

然后添加到开机启动:

# systemctl enable netctl-auto@<网卡>

参考(s)

[1] https://github.com/Bumblebee-Project/Bumblebee/issues/808
[2] https://wiki.archlinux.org/index.php/Kernel_parameters
[3] https://wiki.archlinux.org/index.php/Alienware_13
[4] https://wiki.archlinux.org/index.php/Bumblebee#Primusrun

Create a L2TP/IPSec Server on Arch Linux via Docker

Requirement

  • Arch Linux

Getting Started

Configure

First, load the IPsec NETKEY kernel module on the Docker(host主机) host:

# modprobe af_key

Then, write following to ~/vpn_config.env:

VPN_IPSEC_PSK=<IPsec pre-shared key>
VPN_USER=<VPN Username>
VPN_PASSWORD=<VPN Password>

Then, Create a new Docker container:

# docker run \
    --name ipsec-vpn-server \
    --env-file ~/vpn_config.env \
    --restart=always \
    -p 500:500/udp \
    -p 4500:4500/udp \
    -v /lib/modules:/lib/modules:ro \
    -d --privileged \
    hwdsl2/ipsec-vpn-server

Enter the command to show config:

# docker logs ipsec-vpn-server

Output:

================================================

IPsec VPN server is now ready for use!

Connect to your new VPN with these details:

Server IP: xxx.xxx.xxx.xxx
IPsec PSK: xxx
Username: xxx
Password: xxx

Write these down. You'll need them to connect!

Important notes:   https://git.io/vpnnotes2
Setup VPN clients: https://git.io/vpnclients

================================================
......

Arch Linux 下搭建ss服务端

安装

# pacman -S shadowsocks

配置

# vim /etc/shadowsocks/<name>.json

name可以随便取,比如jingjing.json。
jingjing.json 内容如下:

{
        "server":"0.0.0.0",
        "server_port":2333, // 端口
        "local_port":1080,
        "password":"gfjsdoighjioh", // 密码
        "timeout":300,
        "method":"chacha20" // 加密
}

把端口、密码和加密改下就可以了。
哦对了,要用 chacha20 的话需要安装这个包:

# pacman -S libsodium

开启 ShadowSocks Server

# systemctl start shadowsocks-server@<name>
# systemctl enable shadowsocks-server@<name>

注:这个 name 就是刚才的json文件名(没有.json后缀)。
第一行启动 Shadowsocks server,第二行将 Shadowsocks server 加入启动项(开机启动)。