这只是官方文档的一篇翻译以及笔记,因为最近要使用到反射,故翻译此文。

Golang 中的反射

在计算中,反射是程序能检查自身结构的一种能力,这种检测通常通过类型实现。这是元编成的一种形式,也常常导致很多困扰。

这篇文章中,我们尝试通过解释在Go中反射是如何工作的以说明一些概念。每种语言的反射模型都不太一样(很多语言甚至不支持反射),但是这篇文章是关于Go的,所以下面内容中, “反射”一词都是指Golang中的反射。

类型和interfaces

因为反射建立在类型系统之上,我们先重新认识一下Go中的类型。

阅读全文 »

很多人觉得《三块广告牌》在奥斯卡的角逐输给了《水形物语》实在是太难接受了,因为很多人连《水形物语》这部片子本身就不能接受。

相比于《三块广告牌》,水形物语确实,就像电影里面的怪物一样,是个怪物。广告牌是一部风格、手法都很有创新的电影,而水形物语则更像时导演过去风格的重复,多方的杂糅;加上导演情有独钟的“人兽”的元素,实在很难被人接受,可就是这部电影力压了广告牌,拿了几乎所有广告牌志在必得的那些大奖。

有人说,水形物语在奥斯卡能压过广告牌一头,因为它实在是太过政治正确了,黑人元素,女权元素,同性恋元素,甚至人兽恋元素都不放过,简直就像白莲花一样的正确:爱压过一切;而广告牌初看起来甚至稍微有一点种族歧视和恐同元素在里面。但也许这也是为什么国内三块广告牌的口碑远超水形物语吧,我们并不那么关心黑人,女权和同性恋,我们更关心不公平得到重视,正义得到伸张。三块广告牌在豆瓣的评分高达22.7w人评出8.7分,而水形物语则是17.2w人评出7.3分(国外评分网站三块广告牌也略高一点,不像国内这么悬殊)。

电影的名字为《The shape of Water》,水是片中很重要的一个意象。水在电影中有三个主要的内含: 一是我们常说水是生命之源,人类从水中进化而来,从(羊)水中诞生出来,水代表生命,但这只在纪录片和末世科幻中比较常出现。二是朋克风格的代表,湿漉漉和烟雾朦胧是赛博朋克的典型环境因素,也常用来构造一种冷峻无感情的环境,像《银翼杀手》和《暴雪降至》。而第三个,水常用于代表爱与暗示性欲,这是最常见的一种用法,静止的水和缓慢流动的水,甚至像这部电影中的大雨,都是电影中常见的性暗示。所以水形物语,水是没有形状的,The shape of Water,大概就是The shape of Love, Love也是没有形状的。电影后面大段的水元素的场景也暗合这一主题。

这部电影是一部难得的现代童话,童话故事一般只出现在远古时代或者架空世界,以近现代为背景的比较少见。据说导演托罗对拍一部《水形物语》一样的片子预谋已久,考虑到托罗以往的影片风格,这部片子其实在情节和造型上已经是很克制了。毕竟美女与野兽这种风格本就不是所有人都能喜欢,而现代版的美女与野兽(女主也许还算不上美女还是个哑巴),还对野兽的不可描述器官“旁敲侧击”,不仅让人对导演的品位,或者恶趣味,表示怀疑(这种克制也可能是作为“墨西哥三杰”中唯一没有拿小金人的托罗对奥斯卡的妥协)。所以观影过程中,一直觉得这是一部很“冒犯”的现代童话故事,但换种思路,它其实是一种更归本溯源的表达,抛开人作为人的独特性,抛开现代文明的框架,也许影片表达的是一种更加纯粹,更加原始的情感。如果你还是不能接受故事的设定,那其实换种思路,女主本来就不是人,片子从很多情节反映了这一特点,女主看起来像人,表现的像一个哑巴人,像人一样睡觉,像人一样工作,但她其实不是人类。

第一点,女主的生活习惯很不像人,开头的一幕,睡在水中,像鱼一样,回归正常镜头后睡在沙发,没有床。第二点,早上先洗个澡还要在水里爽一发再出出去,然后就展示出女主脖子上的三道伤痕,看起来还是很”新鲜“的刮伤;女性身上的伤痕常用来表示家庭暴力,但这部片子显然没有家庭暴力这种东西,所以不禁让人怀疑这三道奇怪的伤痕有什么特殊的意义,当然看到最结尾你会发现这确实是个有故事的设定。第三点,我们都知道聋和哑是有因果关系的,很多哑巴并不是因为声带的生理缺陷而不能说话,而是因为天生失聪没有听人说过话才不会说话,就成了哑巴;而女主只是哑,并不聋,并且天生如此也没有说有什么生理缺陷,所以女主的设定就是充满奇特的。其实开一下脑洞的话,你会觉得这部片子根本就不是什么人兽恋,女主和怪物其实是一个生物,甚至是一个而不是一种。“怪物”是女主思想化生出来的,所以才具有那些神奇的力量,才和女主的精神上那么相似相亲。这么一想,是不是觉得这部片子的可接受度就大大提高了。

如果看到这一点,这部片子就显得更有深意了,所以它能得更多的奖就并不是因为黑人元素,也不是女权元素和LGBT元素了;它真正获奖的原因是一种向内挖掘的深度,不拘泥于型,就像片名叫《水形物语》,古人说“既自以心为形役,奚惆怅而独悲?”,古人也都知道“水无常形”;不要被“形”束缚的,才能向内挖掘更深的情感,而水是无形的代表。《水形物语》就是抛开所有的规则,抛开人在自然中的独特性,抛开人反观人与人看待其他一切生物两种视角中间的隔阂,再来反思人的情感与行为;更进一步地,如果抛开人看待自己与人看待别人之间的隔阂,在来反思自己的情感与行为,是不是会有另一种体验与结论,通俗一点来说,推己及人而以。这么一看,是不是影片高度就上去了。

影片的摄影风格和叙事风格和《潘神的迷宫》很像,某些场景的设计和调度则让人想起《罪恶都市》,而优秀的配乐让人以为是在看《爱乐之城》,甚至这部片子和《爱乐之城》是有互通的。

虽然我把这部片子拔的如此之高,但我并不喜欢这部片子,在豆瓣篇分只打了三星,不喜欢的片子,分析了再多的内涵与深度,也还是不喜欢。最后以影片结尾的一首优美的古诗结尾,相信很多人都会很喜欢这首诗:

Unable to perceive the shape of You.

I find You all around me.

Your presence fills my eyes with Your love,

It humbles my heart,

For You are everywhere.

都知道Linux系统使用sar会收集系统运行的各种数据,可以用sar分析过去一段时间CPU,内存,网络使用等情况,分析系统瓶颈,在分析线上故障或性能问题时非常有用,但是一直没有好好用过,基本连io分析都不会,今天做个笔记记录以下sar的使用。

概述

sar 命令用于收集,报告,或者保存Unix/Linux系统的活动信息,一般将这些信息保存在 /var/log/sa/ 目录下,这些信息包括CPU使用率, 内存页面和使用率,网络IO和传输统计,进程创建活动,块设备活动和每秒中断计数等。

常说的sar来源于 sysstat 包,包括sar,sa1, sa2 三个工具。sar用户分析、显示 sa1 和 sa2 工具记录的日志。 sa2 工具每天在 /var/log/sa 目录下如一个报告,文件名以月份第N天命名。 sa1 工具将每天的系统活动信息以二进制数据写入到文件中。

配置

sysstat的配置文件在 /etc/sysconfig/sysstat 可以配置日至文件保存多少天,最长为一个月。各项配置在文件中都有说明。

常用命令

sar [option] [interval [count]]

常用选项:

  • -A 所用,等价于 -bBdFHqSuvwWy -I SUM -I ALL -m ALL -n ALL -r ALL -u ALL -P ALL
  • -B 报告换页(pagging)统计
  • -b 报告IO和数据传输速率统计
  • -d 报告每个块设备的活动
  • -F [MOUNT] 显示当前挂载文件系统的统计,伪文件系统(pseudo-fs)会被忽略。
  • -f [filename] 从指定文件获取信息,默认使用当前时间对应的文件
  • --human 对大小数值使用易读的单位打印
  • -P {cpu_list|ALL} 报告CPU统计,可以指定某个或某几个CPU。0是第一个CPU。
  • -p pretty print device name。
  • -q 报告队列长度和平均负载
  • -r 报告内存使用统计
  • -S 报告swap空间使用统计
  • -s [hh:mm[:ss]] 设置数据的开始时间,只有指定从文件读取数据时可用,时间使用24小时形式。默认开始时间时 08:00:00
  • -e [hh:mm[:ss]] 设置结束时间
  • -I {int_list|SUM|ALL} 统计中断信息,指定中断列表或打印统计信息或所有中断统计。
  • -n {keyword [,...]|ALL} 显示网络统计,可用的keyword包括 DEV, EDEV, FC, ICMP, EICMP, ICMP6, EICMP6, IP, EIP, IP6, EIP6, NFS, NFSD, SOCK, SOCK6, SOFT, TCP, ETCP, UDP and UDP6. 使用 sar -n ALL 1 查看当前网络情况,每秒刷新一次。
  • -t 使用用户本地时间显示记录
  • -u [ALL] 报告CPU使用率统计
  • -v 报告inode,文件和其它内核表的状态。
  • -W 报告 swapping 统计
  • -w 报告任务创建和系统切换活动
  • -y 报告 TTY 设备活动

Ref:

在远端服务器执行某些很耗时的操作的时候,我们习惯使用tmux(或者scree)来保持远端的进程不因为ssh连接断开而终止。更复杂一点的情况,我们希望使用在tmux中连接一个远端服务器上的tmux会话,这在有些场景下会很方便。

首先描述一下这个场景,我们有一个开发机器A,这是一台局域网服务器,有root权限,用户独立,可以配置无密码登陆的。但是还有一个连接到现网服务的跳板机B,这是一台安全加强的服务器,无root权限并且严格限制用户权限,必须使用token登陆的服务器。每一次登陆B服务器都需要输入变化的Token作为密码,当然我们在B服务器上可以运行tmux会话复用终端,现在的场景是,希望在A服务器保持一个到B服务器的连接,以保证部分任务可以利用这个连接实现无密码在B 服务器上操作。

Local => A => B

直接的方法可以在一个tmux会话中ssh到服务器,然后使用ssh连接,然后在服务器 attach 到一个会话,但是这样有一个问题,tmux快捷键前缀复用的问题,一般我们习惯使用 Ctrl+a作为第二前缀,并且一般不怎么使用默认的 Ctrl+b 前缀。在上面的场景中,可以 SSH 到 A 服务器,然后在 A 服务器开启一个tmux会话,在会话中登陆到B服务器(输入一次Token),但是这样不能在这个连接终端复用,需要在这个到B 的连接开启一个Tmux会话,但是用两个问题要解决:

  1. 上面说的tmux快捷键前缀操作符重复
  2. 在显示界面有两个状态栏

第一个问题一般可以通过按两次前缀快捷键操作嵌套的B服务器的tmux会话,但是这样很麻烦,像老妈妈操作电脑一样,第二个问题其实比较好解决,可以通过tmux命令隐藏一个状态栏。

一直想怎么能比较“优雅”地解决第一个问题,但是都没有好的方法。之前同事推荐了一个github上面的配置,可以通过一个开关似的快捷键在A的tmux会话和B 的tmux会话之间切换,比按两次前缀好一些,但是要记住当前处于什么会话,也有点不好。

一直有一个想法是通过配置不同的前缀操作键(prefix)实现直接操作B端的会话。理解tmux的快捷键捕获的话这个思路就比较好理解,其实tmux是只捕获前缀按键(prefix)的,如果按下的快捷键不是前缀健就会发送给会话的连接。如果A的没有Ctrl-a 这个前缀,那么“寄居”在A的tux会话中的B 中的tmux会话就可以直接使用 Ctrl+a作为前缀操作了。

但是,有一个问题是tmux的前缀按键是在tmux服务中生效的。我们知道tmux能保持断开ssh连接继续执行,是因为tmux是一个BS架构的服务(tmux二进制文件本身既是服务器端有时客户端),后台运行一个tmux的服务,每次运行tmux,如果没有后台服务则启动一个服务,然后attach上去。如果后台已经有服务了则作为客户端连接到该服务。而prefix是服务启动时绑定的。也就是说prefix不是session级别的,所有的连接都一个服务的session都是一个前缀。

那是否可以通过开启多个tmux服务实现,之前捣鼓的时候尝试在一台服务器上运行两个版本的tmux服务,但是都失败了,如果已运行一个低版本的tmux,不能使用高版本的tmux作为客户端,并且创始使用高版本的tmux启动服务议会报Lost connection。但是对于同一个版本的tmux使用下面的命令可以启动两个服务:

tmux -L t2

但是tmux默认会找 $HOME/.tmux.conf 作为配置文件启动服务,所以会导致新的服务的prefix和之前的一样,所以我们要使用一个别的配置,或者直接使用一个空的配置文件,这样 Ctrl-a就不是新服务的prefix了。

tmux -L t2 -f /dev/null

这样,我们只需要在这个服务上创建会话,然后通过这个会话连接到B服务的tmux session就可以用 Ctrl-a 作为前缀了,这样一个近乎透明的tmux嵌套就实现了。几个关键的命令如下:

# 创建服务
tmux -L t2 -f /dev/null

# 连接到新的服务创建会话
tmux -L t2 [new-session -s jump]

# 在会话中连接到B服务器

# 在B中连接到新的会话
tmux attach session-name

这样可以用 Ctrl-b作为A上面的会话的前缀,用Ctrl-a作为B 的会话的前缀,一般来说不需要使用 Ctrl-b的。

可以在A服务器创建一个别名,更快捷地连接B的会话

# 在A 的 bashrc
alias sshb='tmux -L t2 attach -t jump'

当然可以关闭A上面的tmux的status-bar: Ctrl+b :进入tmux命令输入界面, set status off,就OK了。这样就像是直接连接到B服务器的tmux会话了,实际上是通过A服务器的tmux跳转一层的。

这是一篇旧的笔记,最近Append了一些内容,发出来可能对有的人有用

Fedora在7月发布了版本号为26的新版本,在上周把家里的笔记本先升级到26踩坑,基本上平滑升级,没有太多问题,gnome的插件也兼容的比较好,除了几个不太常用的基本没有broken的。

可惜的是升级之后VirtualBox不能用,报的是比较常见的kernel driver not installed 的错误,以往按照给的提示操作一下安装好kernel driver就没问题了的,这次折腾了好久也不行。期间尝试过:

  1. 更新/重装 virtualbox
  2. 换到Oracle的源安装VirtualBox
  3. 手动运行 /sbin/vboxconfig,编译kernel driver
  4. 禁用modprobe kvm_intel Ref 再重装
    5.安装旧版本内核后重装virtaulbox

毫无意外以上的方法都失败了,经过一顿折腾感觉问题应该处在 secure boot上面, 想进BIOS把secure boot关掉,但是发现笔记本的BIOS密码忘记了,这条路也走不通了,不过我感觉就算关掉secure boot应该也不行。

后来找到一篇文章,自己对这个mod签名”骗过”操作系统,其实之前也看到了这篇文章,但是觉得有点麻烦就没怎么细看,今天研究了一下,其实也挺好处理的,就是生成一个key,然后用这个key给未签名的module签名,再通过mokutil导入key,重启系统就可以了,关键命令记录如下,具体细节可以查看原文。

sudo modprobe -v vboxdrv        # 查看mod信息,在这可以看到报错信息
# 生成key, 包括der和priv文件
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Akrog/"

# 使用生成的key为mod签名
sudo /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxdrv)
sudo mokutil --import MOK.der # 导入,注意这里要用sudo执行,前面可以用普通用户执行
# 这里会提示输入密码,这个是重启时导入证书需要输入的密码

sudo reboot # 重启进入导入证书的界面,按照操作即可
dmesg | grep 'EFI: Loaded cert' # 启动后查看我们刚刚生成的证书已经加载

# 重启后vboxdrv会自动加载,直接启动virtualbox即可。

VirtualBox可能会再运行时导致Host的CPU利用率飙升至100%,可能的原因是开启了vb的nested paging设置,再设置里面关掉可能就好了,该项设置可能需要先关闭虚拟机,设置路径在: Setting - System - Acceleration。go to the system tab, click on Acceleration and then uncheck the Enable Nested Paging checkbox. Click OK and start the virtual machine up and you should quickly notice some performance improvements 参考: DotNetMafia
和有一个CPU 飙升到100%的问题可能时虚拟机内某些程序有bug,比如我常用的为知笔记的后台进程就经常发疯到100%,在windows task manager 中kill掉就好了。

APPEND:

每次升级内核会出现模块签名无效的问题,所以升级内核需要使用对应新内核的 sign-file 脚本执行一遍,可能除了 vboxdrv,还有其他模块需要签名的,这些需要签名的列表可以在 执行 sudo systemctl restart systemd-modules-load.service 之后(这时通常会失败),通过 journalctl -xe 命令查看,只需要找出加在失败的模块然后使用之前使用过的 MOK.priv 和 MOK.der 两个文件签名一下就可以了,如果旧的密钥文件丢失了,就重新走一遍上面的流程,如果有旧的MOK文件则不需要 import MOK.der 的阶段了,比如升级 4.13.16内核之后就需要重新签名好几个module:

sudo /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxnetflt)
sudo /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxnetadp)
sudo /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxnetpci)
sudo /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxpci)
sudo systemctl restart systemd-modules-load.service

当然也可以禁用内核的升级省得麻烦,毕竟个人系统对内核版本要要求也没有那么严格,只要在 /etc/dnf/dnf.conf中加入 exclude=kernel* 这样的一行就会在 dnf update的时候排除kernel的更新了。

暴雪降至剧照
吃完一堆垃圾食品,又写了几行代码之后,去看了这部把段奕宏送上东京电影节影帝的《暴雪降至》。

在之前就看了几篇短评,大部分无非是拿这部电影和韩国的《杀人回忆》做比较,是中国版的《杀人回忆》云云,但是看到海报就感觉这应该是部不错的片子,就买了附近最晚的一场,正好看完回家。

片子的开头是有点平庸的惯用手法,男主在第一镜以一个背影出场,没有人露脸,台词冷冰冰地带出故事。当然很多人乐于称道的对于男主人公名字“余国伟”的解释,算是第一个小亮点吧。从派出所出来,男主走在街上听到车的声音而回头等车的现身,漫长的等待之后,看到的却是10年前的自己,一个漂亮的剪切,故事正是开始了。有人说这个片子不会剪辑,真的是在搞笑,这个镜头扔他脸上。

这个片子一个很大的亮点就是各种伏笔、隐喻和前后呼应,比如刚出场男主老余的车坏了,自己推到案发现场,然后让徒弟小刘把车推回去这一个场景,到后面警察局的车也坏了,李警官让老余下去推车,李警官和老警察老张坐在车里。这两个镜组合起来就可以表达很多东西了吧。老余是一个厂子里抓小偷的保安科长,一心想进入体制内的警察局,老余的小徒弟一心想成为老余那样“神探”, 而警察局的李警官呢,估计是想早点调到市局、省局去,但是可惜他们的车都容易坏。这里有一个设计的很好的镜头,老余在后面推车,摄影机在车子里面往后面拍,仿佛我们是在车里的人,老余是外面的人,我们把老余扔到了外面。

还有一个场景,老警察推测凶手作案是先把受害者打晕绑在自行车上运送到案发地点,然后一个镜头切换,老余骑着自行车,把徒弟小刘的手绑在自己身上,这不就是爱森斯坦的一加一等于三?这里就暗示了小刘和那写被杀害的女性没有什么区别,而小刘被害凶手可以说就是老余,当然这里每个人可以有自己的解读,要说过分解读也没错。但是一个老警察描述的场景,一个拍摄的真实场景,两个直接对比冲撞之下,意义凸显:他们什么地方是一样的,什么地方是不一样的?肯定是为了要表现出一些东西的。这里也是整个片子很多伏笔中的一个。

刚开始看,段奕宏有点出戏,但是慢慢的就能感觉到段奕宏表演的技巧很强,很稳健,有时候会担心某个场景会崩塌,但是一转眼段奕宏就处理的非常好,怪不得可以拿到东京电影节的最佳男演员了。这样的演员就是基本不会失手的那种级别了,因为他不是局限于某一种类型某一类角色的演员了,有自己的一套表演方法,也就是说以后只要是段奕宏演的角色,就算剧本崩塌,他这个角色也应该是能撑起来的那种。

老余和燕子(江一燕)在理发店的几个场景是最好的几场戏。江一燕的演技有点不稳定,总的来说在理发店的戏是她发挥最好的地方了。还有就是在桥上的几个镜头,贯穿整个戏,天空总是阴着的,似乎永远不会停止的雨水,很少见到阳光,烟囱冒出浓烟,和人印象中的一样总蒙着一层灰的工厂,所有的人都是青黑色的雨衣,灰色的雨伞,灰色的工作服,黑色的鞋子,脏兮兮的街道和布满水坑的泥泞的马路;只有几处暖色调的景,一个是在燕子原来的住所,但那是一个进行皮肉交易的地方,在一个道德认为最肮脏的地方,却是全片暖色调最集中的地方;当然这可能并没有什么特别的意味,因为使用暖色调表现暧昧情调是惯用的手法,但是放在这个片子里面却有了意外的惊喜的效果了。

除了理发店的戏,就是老余和燕子在桥上的几个场景最喜欢了,天空仍旧是阴灰的,似乎没有下雨,但也没有放晴,云压的很低,老余仍然是灰色的衣服,一眼望去,城市是灰色的,房子都很老且破,老旧的火车开过,桥也是老旧的。但是燕子的衣服是暖色的,一次是黄色的线衣,一次是深红色的外套,很漂亮的对比。在这桥上还有全片最浪漫的一个错位镜头,可能很多人没有注意到,通过一个两人延长线上的机位的摄影,老余和燕子似乎拥抱在一起,并且燕子坐在桥墩上,位置偏高一点,这样就成了老余的头靠在了燕子的肩上,这肯定是一个特意设计的镜头,很浪漫是不是,但是一段蒙太奇剪辑回来之后,燕子像一片羽毛一样轻盈地倒身从桥上跳下去,下面是正疾驰而过的火车。这是全片最震撼、最大胆的一个镜头,看到这吓了一跳。

就电影工业水平而言,在工厂的那场追逐的戏可以担起重任,非常精彩。很少在国产电影中看到这样的,至少看起来很真实的工厂追逐的大场景戏码,除去精彩的追逐戏,这里也埋下了一个伏笔:凶手是一个身手矫健的人,和老余认定的“凶手”完全不可能是一个人,但是老余还是认定了那个宛如智障的话都说不清楚的人是凶手,这更加表现出了老余的迷失和注定的悲剧。片子还有很多的类似的细节,非常多有些也记不清楚了,以后出资源了可以再拉一遍。

还是要说一下和《杀人回忆》的事情,很多人都拿这部片子和《杀人回忆》对比,甚至说什么低配版,什么拙劣的模仿,什么段奕宏努力地要成为一个宋康昊,真是太搞笑了,这片子和《杀人回忆》就不是一类,要表现的主题都完全不一样,更不要说背景和角色设定,剧情推进各个方面的差异。非要说有一样的地方,雨多算一个,但是《暴雪降至》贯穿全片的阴雨,大半时间都在暴雨,这么大胆的设计就比《杀人回忆》走的更远了,而另一个相似的地方就是连环杀人的设定,这个并不能作为两个影片类同的依据不想多说。而《暴雪降至》明显比《杀人回忆》想要表现更多的东西,或者有不一样的东西,这些东西是和我们的环境、和当时的历史情节绑定在一起的。

且不说宋康昊除了在韩国自己的电影节拿奖拿到手软,在国际A类电影节的竞赛单元成就基本是零,连提名都没几个,段奕宏怎么说两个A类电影节影帝,宋说破天算个前辈而已,何以就段奕宏要努力地成为一个宋康昊。虽然几年前我也吹韩国电影,但是现在发现有的人吹的过分了;韩国电影就一个好:故事讲的好,拍一个大家看完觉得还不错的片子很容易,而国产的很多片子就是连故事都讲不好。但是要说高水平,格局和突破性,国产片不要虚的啊。

如果要说《暴雪降至》的缺点,那就是故事差点火候,就是没有那种很硬很惊艳的感觉,后期略显乏力,这似乎是所有国产电影的弱项,不过并不是说这个片子故事性不强,只是相对而言这一方面弱一点,总的来说瑕不掩瑜。还有一点是结局的处理有点可惜,本来老余背起包上了大巴车准备离开,但是大巴车熄火,天下起了雪,暴雪即将到来,是一个我非常喜欢的设计,有很多的暗示和隐喻在里面,如果体验过湖南2008年的那场大雪,估计能有更多的想法。但是最后一幕文字说明雪灾有多严重却有点突兀和多余,可能对没有经历过那场雪灾的观众是一个补充,但是这一幕的破坏性也很强的。

最后,不是所有看不懂的片子都是文艺片,不是说所有有警察和罪犯的片子都是罪案推理片。

最近还在学习怎么看电影,如果你也感兴趣,推荐看看纪录片《电影史话》,在Bilibili有电影频道的国语配音版,网上也有原版的资源,还有经典的《认识电影》和《世界电影史》都是了解电影的入门书籍,都值得推荐。

水一篇水一篇,要不要发霉了
平时的整轨音乐文件作者在发布的时候使用的播放列表文件(cue/m3u/m3u8)大部分都是 BGK编码的,在qmmp播放时不能正确识别GBK编码的文件,之前都是用vscode一个个复制转码保存,今天处理歌神的一个合集时发现文件实在太多了,就想着用bash处理以下,发现非常简单的一个命令就能搞定了:

while read -r f; do echo "Processing $f..."; iconv -f GBK -t utf8 -o "${f%%cue}utf8.cue"  $f; done <<< $(find ./ -name '*.cue');
`

就是用iconv命令进行转码,上面的命令可以将当前目录下的所有 .cue 文件从 BGK 转码为 UTF8 并保存为一个带 .utf8.cue 的同目录下的文件,这样使用起来就很方便了。

虽然很简单也很水,但很好用啊。。。。

再附一个处理所有的的详细版(要排除了一些之前手动处理过的文件):

#! /bin/bash

# mydir=$(readlink -e `dirname $0`)
skip_count=0
work_count=0

while read -r f; do
if [[ -n `echo "$f" | grep utf8` || -f "${f%%cue}utf8.cue" || -f "${f%%.cue} utf8.cue" ]]; then
echo "skiping $f"
skip_count=$((skip_count+1))
continue
fi

echo "Processing $f..."
iconv -f GBK -t utf8 -o "${f%%cue}utf8.cue" "$f"
work_count=$((work_count+1))
done < <(find ./ -name '*.cue')

echo "done: skipped: $skip_count, Processed: $work_count."

之前一直使用gnome自带的terminal,感觉也挺好用的,就是多开tab的时候有点丑,习惯了其实也没事,但是偶尔就是想换掉它。。更早的时候使用的 roxterm也是很好用的,但是不知道为什么从F23开始,border样式变得很奇怪,有一圈没法去掉的大边界。

找了好几次terminal替代品,昨天试了好几个,有 st, roxterm, terminology, ternimator,xfce terminal, guake 等,都各有好处,但是没有一个完全满意的。。。要是有早期的roxterm的效果也就很满意了。

其中有一个 terminology 挺有特色的,有很多华丽的效果,简直duang duang的,但是有几个问题,一个是配色调起来很诡异,一个是远程的tmux缩放窗口不能自动调节,多tab倒是挺好看的,非常适合我的土鳖审美,经过一顿调教,总算比较好用了。

  1. 首先配色选 solarized, 但是这时文件夹和文件的配色很难分清楚,还得在 color项目下,重新选一下配色,并勾上 use
  2. 字体得慢慢调,粗看起来会比较糙,字体和大小都得慢慢调,现在用 droid sans mono(Regular) 14号字,感觉还可以
  3. 针对tmux的配色,需要在 behavior 选项勾选 set TERM to xterm-256color, 否则配色会很糟糕,勾选后似乎重启才能生效,关掉ring bell也在这里面
  4. 针对tmux自动缩放的问题,似乎需要kill session重新启一个session才正常,这个有点麻烦,不过弄好了就很舒服了
  5. 终端透明在video中调一下就ok了
  6. 还可以设置终端的壁纸,这功能看个人需要,感觉设置了有点非主流,还是朴素一点比较好
  7. 快捷键的设置很方便,也算是一个优势

terminology还有样式看起来很舒服的分栏功能,比绝大部分终端软件的分栏看起来都舒服,但是习惯了tmux的分栏还是不推荐再使用terminal的分栏功能,太弱了,并且容易搞混。

一个截图:
terminology screenshot

一个致命的缺点: 不能使用fcitx-rime输入法,不能输入中文。测试了一下,ibus和fcitx都不能输入中文,如果有中文输入的需求。。。还是暂时不要用这个了,用gnome terminal吧。

又一个致命缺点 :快捷键冲突,terminology本身有还多快捷键,没有快捷的禁用其快捷键的方法,而terminal本身的快捷键容易覆盖掉程序的快捷键,如vim和tmux的。发现没有办法在vim的panel之间快速跳转了,所以我放弃这个terminal了。