IMGUI 中文支持方案

没学过 c++,单纯想头铁汉化个东西,就查资料折腾了一下,这里做一个小的总结。如果有更好的方案请指正。

加载字体

首先需要加载支持中文的字体。 网上最多的解决方案是读取外部的.ttf/.otf字体,亲测可用。但需要用户的目录读取权限,而且可能出现字体不存在的情况。 对于源码内嵌字体,IMGUI 的作者其实也给出了一个解决方案:将 binary 转换为 C array 的工具。如果软件只是使用拉丁字集的话,文件不大应该也没什么问题,我打算汉化的软件本身用的也是这个解决方案,但将中文字集转换为 C Array 的话大小至少是西文字集的几千倍吧。

ImGuiIO& io = ImGui::GetIO();
IMFont* ttf_font = io.Fonts->AddFontFromFileTTF("res/simhei.ttf", 16.0f, Null, io.Fonts->GetGlyphRangesChinese());
IMFont* compressed_font = io.Fonts->AddFontFromMemoryCompressedTTF(SimHei_compressed_data,SimHei_compressed_size, 16.f, Null, io.Fonts->GetGlyphRangesChinese());

这里解释一下,GetGlyphRangesChinese() 用来指定加载字符集,我需要改动的软件基于 IMGUI 1.4,所以只有这个方法,在更新的版本中,这个被加载常用汉字的GetGlyphRangesChineseSimplifiedCommon()和加载所有汉字的GetGlyphRangesChineseFull()所取代。

汉字编码

如果是 c++11,直接给中文字符串添加u8前缀就可以了,源代码本身应该也是UTF-8。之前的版本可以上网找个转换函数复制下来用。

调整 OverSampling 配置

参考 Github 上的这个 Issue。之前提到过中文字集特别占内存,而 IMGUI 的字体基于 FontAlas,至少在我这个版本(1.4)中不能动态加载,所以可能编译跑起来之后发现满屏黑白方块。 在作者提供的解决办法中,其中看起来最简单粗暴的方法是减少 OverSampling。

ImFontConfig config_words;
config_words.OversampleV = 1;
config_words.OversampleH = 1; // 默认为3
font_14 = io.Fonts->AddFontFromMemoryCompressedTTF(SimHei_compressed_data,SimHei_compressed_size, 16.f, &config_words, io.Fonts->GetGlyphRangesChinese());

除此之外还可以请求 Alpha Texture (超出我能力范围了 QvQ)或者手动缩小 glyphRange ,只保留自己用到的字符。

关于熵的简短科普(?)

咱一个同学想把文科生社科生艺术生理科生(我)凑在一起聊一下这学期学到的有趣的东西,我寻思着这学期也没讲啥能够激发脑洞的东西啊……于是就找了物理基础课热力学那一章里面的东西准备讲讲,其实大部分内容都和课程本身没什么关系了。以下是粗劣的讲稿,如果有物理大佬帮我订正肯定是极好的 www

熵(entropy)在热力学的定义中是热量除以温度的商,所以翻译这个名词的时候就在「商」这个字的左边加了一个火字旁成为了「熵」。这个概念首先出现在热力学,以便于描述系统的稳定程度,但在今天,这个概念被很多学科借鉴并进一步应用。

通俗地来讲,这个叫做「熵」的东西指的是一个系统的混乱程度——墨水散入水中是熵增、整齐排列的积木倒塌是熵增、甚至刚开学的时候把房间收拾得干干净净、到了期末一坨稀烂也是熵增。

热力学第二定律

等等,我刚刚举了几个例子都是「熵增」,难道就没有「熵减」和「熵不变」吗?

利用 IFTTT 将 Toggl Report 发送到 Telegram Channel

主要思路

生写一个 Telegram Bot 也不是不行但我就是想找借口玩 IFTTT

VPS 或树莓派:写一个自动化的程序并定时运行,从 Toggl Report API 获取数据,整理之后 Post 给 IFTTT 的 Webhook。

IFTTT:if 收到服务器端的 Post then 发消息到 Telegram 指定 chat

Telegram:利用@IFTTT实现 IFTTT 与 Telegram 的联动

本记录使用的是目前的 Toggl API v8 以及 Toggl Report API v2。

以学年总结为题的未来展望

在大二学年的末尾,我觉得自己又多上了两年高中。

大一我没有像以前那样装模作样地写一篇学年总结,唯一写过的东西大概是一条朋友圈,大意是「今年就像做梦一样幸福希望明年也能够继续这样的生活」,而大二也如愿以偿地,基本上就是大一生活的延续——一整个学校都没有我讨厌或者讨厌我的人、有每天能见到的有男有女的三五好友、小圈子里她喜欢他喜欢她的捕风捉影的绯闻、虽然也努力学习但没有名为「高考」的压力、出成绩之后同学之间的商业互吹和自贬……

虽然听上去有些滑稽,但初中时向往的「玫瑰色的高中生活」正是如此。

齿轮化的我们

读英语言文学专业的同学写的小说,里面某个人物说了这么一句话:

I don’t think about what the world really is like. I learn a skill and I make a living out of that skill.

这让我想起了在『现代社会』的『中国』遇到的很多人。就是几乎『全盘接受普世价值观』,有点精致利己,但往好里夸能算作努力上进,但就没什么同理心,尤其是对和自己没有关系的人和事物。然后莫名其妙就写了一堆其实和这篇小说本身并没有什么卵关系的感想。

首先是关于『现代社会』。我感觉我认识的很多人,其实都把自己给『齿轮化』了。假设世界,或者社会是一个很大的机器,那么其中的很多人就将自己当作这个机器上的一个齿轮(或者螺丝钉也行)——这并不是说他们麻木,因为他们当中的很多人也想要成为一个好的齿轮,或者能够到这个机器更重要的部分中去当一个齿轮;这也并不是说他们眼界狭隘,只能看到自己作为齿轮对这个机器的贡献,因为『努力成为一个好的齿轮』就已经占据了他们的全部身心和精力了,即使有点空闲也去做一些轻松愉快的事情了(比如哲 ♂ 学),因此很难从『齿轮』这个思维定势中跳脱出去考虑一些别的事情,比如整个机器本身。

我果然一直都在无效学习

高中的时候,由于被整个大环境洗了脑,我拿出了前所未有的干劲,开始随着全日制高中每一个小时都被安排好的作息,做出一副每时每刻都在好好学习的样子,但我很快就意识到,自己对所谓『知识』的掌握程度并不好,以至于到底学到了什么,我自己也说不出来。虽然隐约地觉得自己的学习方式可能出了些问题,但那时的我更认为自己只是还不够努力,只要没有学到死就没有资格去考虑这个问题,至于那些取得好成绩的同学,我统统将他们纳入天赋异禀的范畴。

直到这个春假忙里偷闲地看了本叫做『Make It Stick』的书,自己隐约的猜想才算成了现实——是的,我之前接近二十年的人生中,很多时候的所谓『学习』都是无效的,为什么?因为没有动脑。现在想来,正如高中的我相信自己可以靠一点睡五点半起来取得好成绩一样,其实只是自己感动自己罢了——因为认真地去分析、去记忆很累,因此把时间用来不断地反复理解或记忆表层的内容,然后觉得自己应该掌握了,然后直接跳到下一个知识点。

这本书里面提到了一个叫做 effortful learning 的概念,其实这东西没什么可解释的,就是动脑子学的意思,基本上是个学生可能都能明白『真正动脑子学』是什么意思。我先解释一下为什么很多人都做不到 effortful learning,然后再直接上方法论,至于 effortful learning 的益处暂时略去不谈,一些心理学和神经科学的原理我也不解释了。另外,书中针对教育者(父母、老师、培训机构等)也有一些针对性的建议,这里也略去不谈,以下内容主要针对像我这样的(苦逼)学生。

2018年度书单

我觉得我今年没怎么读书,准确来讲是没逼着自己读书,结果就是读了好多虚构类(其实就是小说……)

史记商君列传

之前一直觉得商鞅的故事挺让人费解的,尤其是他这么拉仇恨。但这只是一个现代人的理解——虽然现在也没好到哪里去,但至少我们还标榜法制社会嘛,民主法治不算深入人心但基本上都懂。我无法想象在一个统治阶级啥都说了算(现在不是?)的世界里,一个人跑出来说要法治要法治在什么程度上触及了既得利益者的利益。

一个不算结论的结论:读古书的时候,不要站在一个穿越者的角度上去思考,结合时代背景才会不那么容易去纠结无关痛痒的点。这是在纵向层次上说的,不同文化间的横向的比较也同理。

深圳小纪行

虽然之前没去过,但基本上和自己的预想没什么区别,除了真的没想到五月份就这么热 QvQ 就业环境什么的没条件实地考察,也就远远看个 logo 什么的,感觉和其他城市并没有太大差别。不过好在基础设施和城区都比较新,空气和绿化炒鸡棒,感觉是一个很积极向上的地方? 本来也不能用一个旅游城市来衡量它,所以其实本身作为旅行的体验的确好像也不怎么样,再加上正好没赶上双年双城展和设计周,感觉就是文化上的荒漠。 城区的一些小细节还是很有设计感的,感觉政府对文化产业也有一定投入,但因为太年轻总感觉这城市没啥底蕴…… 总之就是一个适合工作但真心不适合享受的地方。

2017年度书单

拖了很久才动笔写,一口气全写完感觉快要吐了。今年按理来说真的不算特别忙,但所有的品类加在一起也就读了二十本左右(不过小说类比往年低了很多……真的是一年比一年小说看得少),而且回顾思考也远远不到位,希望 2018 能够养成抽空读书的好习惯。

1. 《仲夏之死》by 三岛由纪夫

不是很懂文学,不太好评判。比起彻底厌世的太宰,三岛的文笔有一种昭和味道的纤细,还带点贵族气息。一边是繁华的市井,一边是放弃人生的人,平凡人的幻灭其实也没什么可说的,但加上了不知道该说时冗杂还是细腻的心里描写,这些破碎的故事反而别有一番风味。

2. 《人间草木》by 汪曾祺

一直觉得散文很无聊,冲着『夏天』中关于栀子花的描写买了这本书,然后才发现汪曾祺老爷子还真可爱,字里行间总有股朴实劲儿,从来找不出什么空话套话,也从来不讲什么大道理,简简单单像个孩子,还有很多幽默的字眼,读着特顺溜。除了各种有趣的日常观察之外,关于西南联大的各种你不知道的事情也蛮有意思的,强烈推荐。