Esper 发布的文章

本来还想玩一下Kaldi的,结果发现门槛太高(指文档看起来比较难受,以及Windows下编译大小>20GiB),而且CUDA支持还有点问题(不知道是不是还是msvc14.25的锅)。再加上例子里给的全是Shell脚本,懒得重新看一遍,就弃坑了。

但是编译过程中遇到少许坑,记录如下:

  1. 不要使用CMake,而是使用windows文件夹中的generate_solution.pl来生成VS的解决方案;
  2. 额外扩展(比如OpenBLAS)等的文件夹结构可以参考tools目录下;
  3. Windows支持做的人估计不多,还是只支持CUDA 7。如果使用CUDA版本不是7的话,可以从自己的CUDA目录中找到一个名字类似cuda_7.0.props(比如CUDA 10.1.props)的文件,替换该文件即可;
  4. 如果使用的是官方openfstportaudio自己编译的话,可能需要修改对应props文件里的库文件位置和名字,其中portaudio可能需要按照windows/INSTALL.md中提供的网址去Steinberg下载ASIO驱动,否则编译会报错;
  5. 使用cmd运行generate-solution.pl,千万不要用MSYS!通过--vsver参数确定VS版本(格式为vs20xx,支持15、17和19三个版本),--enable-openblas使用OpenBLAS而不是Intel MKL,以及--enable-cuda提供CUDA支持。

按照官方文档,使用的是Kolla-Ansible快速配置方案。

  1. 需要一台有两个网络接口的服务器,一个配ip,不要求外网,填给network_interface;另一个不配ip,给neutron_external_interface,用于给虚拟机连接外网;
  2. sudo转化为root用户的正确姿势是sudo -i,表示以root身份登陆Shell,这样才会进行source /etc/profile的工作;
  3. 完成配置,执行precheck命令时,RabbitMQ部分可能会报错,这是因为RabbitMQ不允许有hosts记录解析到本机,到/etc/hosts中删除解析到127.0.0.1::1的记录即可解决该问题;
  4. 默认的用户名和密码在/etc/kolla/admin-openrc.sh里,执行后续操作的时候需要source这个文件;
  5. OpenStack跑起来之后,可能会出现只有英文的情况(即使在设置中将语言设置为了简体中文)。这是因为koala的horizon(OpenStack仪表盘项目的名称)编译的时候,(估计是为了缩小镜像体积)把所有的翻译都删掉了,只留下英语。解决方法是去Github上弄一份horizon项目的源码,把其中openstack_dashboard/locale文件夹使用docker cp命令复制到对应的horizondocker容器中,理论上目标位置是/usr/share/openstack-dashboard/openstack_dashboard/locale;然后在容器中使用django-admin compilemessages编译这些UI消息后,重启该容器,语言设置即可恢复正常。

在命令行使用openstack管理员操作之前,要先source含有管理员用户密码等配置信息的脚本文件。使用Ansible-Kolla方式的配置文件为/etc/kolla/admin-openrc.sh

显示已有镜像

openstack image list

添加镜像

openstack image create --public --disk-format qcow2 CentOS-8-GenericCloud-8.2.2004-20200611.2.x86_64.qcow2

重命名在网页端的显示名称(不知道为啥网页端不能直接改)

openstack image set CentOS-8-GenericCloud-8.2.2004-20200611.2.x86_64 --name 'CentOS 8'

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.3 10
表示注册一个文件位置为/usr/bin/gcc、名叫gcc、目标文件位置为/usr/bin/gcc-4.3、自动模式下优先级为10的条目。

update-alternatives --config gcc
表示修改gcc的默认链接条目。

update-alternatives --get-selections
列出当前所有链接条目。

看了题目之后,第一反应是有点像分形,对着样例画了一下,感觉和Sierpiński三角形很像。然后就觉得,虽然模拟是肯定能够完成任务的,但是能使用简单的数学规律表达的图形,肯定就存在简单的数学公式将其绘制出来,想了一阵子发现没想出来,无фак说,题解启动!

事实证明,方法是存在的,关键就在二进制。仔细观察题目中给出的样例数据,并不存在什么对称性质的规律,仔细核实后,发现图形和分形的Sierpiński三角形也是不完全一致的,但是可以发现的是,右半个正方形的01分布规律似乎和2的倍数存在某些不可描述的问题——实际上这就意味着,可能可以通过二进制解决这个问题。而这个时候,就要拓宽思维,把所有可能的表示都写出来,不要因为未知而束手束脚(指自己)。

话不多说,上图解决一切问题:

本图将这个二维点阵以0开始进行编址,给出其二进制数值,将标记为1的格子上色。仔细观察标黄的格子,不难发现,有一个很简单的特征,可以将上色和未上色的格子区分开来:所有上色的格子,对写成两行的二进制坐标进行或操作,得到“全1”,即111;未上色的格子,则得不到“全1”。为什么是三个1?这是由矩阵大小决定的,在这个样例中,矩阵大小为2^{3}

那么,最后就是设计一个点阵大小的循环,对于每一个坐标进行这个与计算,并且进行判断并输出0或1。因为指数函数增长实在太快,题中只给了一个很小的数据范围(10位),其中一个取巧的办法就是使用位运算,long long类型的甚至可以装到64位,虽然这里10位就够了。

挖藕,厉害了

================
来自我的Armbian on Rock64(大雾)


第一次在Linux环境下配置中文输入法。为啥呢?因为Fedora已经自带装好了,用服务器也不用打汉字啊

实属懒得回寝室拿电脑的神奇操作

然后看到网上的教程,全都零零碎碎的,从ArchWiki看到博客,好像都没说完整= =

简而言之的话安装包括大致5个部分,fcitx本体、输入法(实现方式)、输入法UI实现、输入法皮肤和设置UI:

sudo apt install fcitx fcitx-libpinyin fcitx-tools fcitx-frontend-gtk3 fcitx-ui-classic fcitx-config-gtk