about.me/acgtyrant

2017 Aug 31
代码,编码,编程,规范和风格

我最近下定决心不再拖延博客的更新,但也懒得重启独立的技术博客,于是以后技术博文就在这里发表。

计算机科学基础老生常谈,编程语言也是如此。我没兴趣当 language lawyer, 就讲讲颇为人文的编程规范吧。

大家过去应该也看到过不少类似的关键词:代码风格、编码风格、编程风格和编程规范等等。光一家著名的 Google Coding Guide Style 的民间翻译就囊括了以上用词。最初,李开复先生称它为「编码规范」,且我以前翻译 Google C++ Guide Style 时,没仔细琢磨好翻译用词,就同时用到了「风格」,「编码」,「编程」等等,不一致啊。

咬文嚼字了一会,先从「代码」、「编码」、「编程」汰劣存优开始吧。「代码」只是一个名词,不如动词来得亲切;「编码」即是表示一系列机器级别指令的名词,又是表示手动转换机器码与汇编码的动词;然而人类死跟机器码较劲的时代已经结束了,现在是高级编程语言的天下了,我们不想拘泥于表面的「编码」,而只关心足够抽象的 Program, 即程序,所以现在看来「编程」是最理想的翻译用词。

至于「风格」与「规范」又如何呢?我倾向于 The conventions we follow 对此的分析:「风格」只讲究代码的格式化形式,比如缩进啊空白啊注释形式啊,然而「规范」涉及的更为广泛,即同时包括了编程风格和其它规范,就像该不该用某语言特性,用什么编译工具链,甚至如何版本控制等等。

编程可谓一门艺术,又是一项工程。若要运用得炉火纯青,可不能光划个风格就了事,还要相当洞悉所用编程语言的特性,以及开发环境的理想部署等等,这时「规范」就很重要了。从此以后,我将不时地探讨种种编程规范。

2017 Aug 30
C++ 怎么念

我有听力障碍,于是就算三次元里周围有人谈及 C++ 且把它读成「C加加」,我也不怎么有印象。倒是长期以来受英文资料薰陶,英文上的 C++ 便先入为主了,毕竟 + 在英文里就是 “plus”. 于是我凡看到这词时,脑海就默默地响起 “C plus plus”, 也难怪我在上北京大学的公开课时,不由得呵呵一笑。不过推上大多数人不以为然,有的猜读为 “C double plus”, 有的搞怪成「C艹」,有的恶俗地叫「C屁屁」。

其实 C++ 到底读成什么并不重要,就看你和谁打交道了。如果就只局限于品读谭浩强大师著作、不会上 StackOverflow、天天百度 C++98/03 文档、从来没去过官网 isocpp.org、靠 Visual C++ 6 开发的小圈子里,大家约定俗成地一起读成C加加,也挺好;如果你向来满口污言秽语,「C艹」很适合你;如果你想和 Bjarne Stroustrup 之风流谈笑风生,小心点别念错 cplusplus 是了。

其实查 C++, C#, TeX 之类的英文读法也不难:去英文维基百科看条目即可,一般开头就有音标,C++ 念 /siː plʌs plʌs/.

2017 Aug 29
如何跟进深度学习的研究前沿?

起步

一开始没必要就读论文,而是通过 cs231n, deep learning 等教程打好基础。其实由于深度学习这领域刚发展起来,所以 CS213n 给了不少论文的对应关键词,比如 AlexNet, VGGNet, ZFNet, GoogLeNet, ResNet 等等。可以从这相当基本的论文开始读,如果作为本科生且没有接受过学术训练,花一周以上才免强读懂一篇论文也不奇怪,但读多了就越来越快,我现在刚两小时略读完一篇论文,如果是很水的论文大概可能在半小时就全读完。

如果很难读懂论文,可以先搜搜别人的论文笔记(当然是中文),来源经常包括 CSDN 博客,简书,知乎问答,知乎专栏甚至个人博客等等,我都订阅了它们的 RSS, 其中知乎专栏可以直接用 Inoreader 订阅。

用 Zotero 管理论文

我用 Zotero 管理论文,它有三个优势:可以通过浏览器插件在相关网页上(比如 arXiv, Google Scorlar, Microsoft Research 等等)一键收录论文到 Zotero; 可以在论文条目下写笔记;论文分类、归档、排序十分方便。怎么用 Zotero 管理网上满是教程,我就不赘述了,我只给大家看看我的分类树以及时间排序界面:

Zotero 界面

于是读的论文可以按时间和重要性排序递增,顺便一提,分类树随时要修改以符合你当前心中的最佳分类,比如我以前把 AlexNet, VGGNet, ZFNet, GoogLeNet, ResNet 等都是放到「年度论文」的,但现在我把它们改移到「网络结构」里了,同时该分类还有 Network in Network, Highway Networks 等等;此外我曾经有个分类「奇技淫巧」,旗下又有「训练算法」,「防过拟合」,「权重初始化」和「激活函数」等等,但我最近嫌分类太散乱,于是又花了点时间苦思冥想,终于想出更合适的分类「优化理论」,我便取消「奇技淫巧」这分类,把大部分论文都归档到这新分类。

收集论文、开始跟进研究前沿

读论文多了,你就会越来越熟悉你所从事领域的学术大牛,比如物体检测的 Ross Girshick, 语义识别的 Jifeng Dai, 对抗学习的 Goodfellow 等等。这时可以直接在 Google Scholar 的学术用户页面上关注他们的新文章,这样可以在第一时间收到他们发表论文的最新动态。或者干脆天天刷 arxiv 也可以,当初 Focal Loss 那篇论文我晚了好几天才收到 Google 快讯,而别人早在知乎相关问题讨论起来了,一问才知道他们习惯天天刷 arxiv, 可惜我连 Zotero 里的论文都没读完,更别说天天刷新论文了。

在知乎上也可以关注顶级会议、学术竞赛的相关问题,比如 CVPR 2017 有什么值得关注的亮点?如何评价ILSVRC2016的比赛结果? 上面会有别人帮你总结好的答案,直接按图索骥即可。

也可以直接去学术竞赛看天梯排名,看看当前战斗力最强的模型对应的论文是啥,扒下来读,比如 PASCAL VOC 2012 Segmentation Competition 当前的首席 DeepLabv3 和第五席 PSPNet.

如果打算专心用 PyTorch 做研究,可以订阅 awesome-pytorch 的 RSS, 对其他 GitHub 上的类似 awesome 项目也可如法炮制。

最后,若有人能带你就更好,比如导师会收集论文并传给学生,据我所知商汤他们每周有论文分享会,以跟进论文最新前沿。

Written with StackEdit.

2017 Jun 27
如何打分

豆瓣对书籍和电影的评分是五星制,即一星到五星的字面意义分别为:很差——较差——还行——推荐——力荐。

我对这评分制很满意,因为它的评级是奇数,即存在中间值,又向高低延伸了恰到好处的两个评级。这么以来我可以如此进一步阐释该评分机制:

三星:可有可无,即看了没啥快感,不看也没损失。
二星:反感,即有负面评价。
四星:好看,使我产生了愉悦感,自然愿意向他人推荐。
五星:特别好看,让我十分狂喜,以致愿意给出远超四星的高评价,证明这是佳作中的佳作。
一星:负面情绪更为强烈,即对其抱有纯粹的敌意,我也许会为此破口大骂,执行制裁。

一星和二星的区别很关键,世界那么大,我不喜欢的东西自然也多了去,对于二星作品,我讨厌它,但可以老死不相往来,于是彼此的互动也就到此为止了。不过我若给作品一星,说明这作品不光惹我讨厌,而且还彻底激怒了我,以致我竟然产生纯粹的敌意来。所以我不会轻易给作品打一星,如果打了,说明性质很严重。

我回顾了下我到目前为止看过的 179 部电影,其中被我打一星的作品只有「美丽中国乡村行」和「嫁给大山的女人」,一个涉及抄袭,另一个在宣传我所敌视的拐卖价值观。

此外,我在回顾中又重新审视了下四星和五星的区别,其实它们应该贯彻二八定律:即五星只给一堆已经达到四星水准的作品中特别出色的部分,即佳作中的佳作。且如果五星评价次数与四星的比例越小,说明其评价越愈发稀缺,份量自然也越高。于是我重新把过多的五星评价打回三四星,留下了极少数我觉得愿意给出五星评价的上乘作品。

我决定每年不光归档当年已观看的作品,还要集中重新回顾作品一次,原本好看且被评为四星的作品要么继续保留四星,要么因为我审美观进一步提高而被降星,给出五星的评价次数一定要控制在百分之二十以内。原则上来说五星评价应该越少越好,且大多数作品的得分集中在三星四星,毕竟若看的二星作品过多,说明我自己在自讨苦吃,没有意义。

我给出五星评价的作品到目前为止有:狩猎、地心引力、降临、你的名字、革命机、疯狂动物城、火星救援、西游记之大圣归来、迷雾、消失的爱人、海洋天堂、辩护人、僵尸世界大战、环太平洋、福音战士新剧场版:Q、守法公民、美丽心灵、万能钥匙、调音师。

最后我要批评大众点评的评分机制,得分制也是五星,但中间值竟然是二星,即差——一般——好——很好——非常好。

「差」这一星可不能有效区分「我吃到了苍蝇,激怒了我!」和「难吃」这两种评价;为了区分「好」、「很好」和「非常好」三种评价,按照二八定律,顾客需要先光顾二十五多种不同的商户,才能从中挑出五种达到「很好」的商户,以及仅一种达到「非常好」的商户。显然若顾客的消费经验不足,容易被这三种评价弄得手足无措,以致只能随便打分了事,没法有效科学区分。

Written with StackEdit.

2017 Jun 24
我怎么借钱给朋友

一开始问清楚对方想借多少,设为 A; 然后我要想一想,我愿意白送给他多少钱,即有借无还,设为 B. 最后借他 min(A, B) 钱。

如果是老朋友,不打借条,我会信赖口头承诺;反之则反。

就我目前的财力来看,B 少得比不上银行贷款,自然也没收什么利息的余地,就算如此,我愿意免息,这其实已经是友谊的象征了。

如果对方故意不还钱,我也不会提,毕竟一开始就把借钱金额控制在「我愿意白送他多少」条件下了,自然也不会坏什么心情,于是照常和对方怎么打交道就怎么打交道。但是,若对方依然要借钱且总借款已超过 B 上限,我不会答应,如果对方变本加厉以断交为威胁,那友谊的小船说翻就翻吧,毕竟这从来只是他单方面的个人问题,我的损失也不疼不痒。

其实,比起我向别人借钱,我更愿意向正规银行借钱,信用卡或银行贷款都是好东西,银行给你评估风险,设置的额度也相应科学,好说;借车也向商业公司租赁,以免发生这些狗血破事;重大人身事故直接上社会保险和商业保险而不是到处向亲戚朋友拉众筹。我希望我的朋友们也是这样的聪明人。

Written with StackEdit.

2017 Jun 12
少鉴定他人,多表达偏好

开门见山,所谓「鉴定」,即是 judge.

我在 about 上如此介绍自己「超・完美無瑕之守序中立」,在称呼上尤其如此。我现在凡称呼每一样东西,都尽量用相当中性,不带任何色彩的词语。副作用是,我已经一本正经到已经不爱用「帝都魔都妖都」这些诙谐的称呼了。

我不打算讨论繁体中文与简体中文之间所谓的高下之分,大家用让自己愉悦的中文就好,谁挑衅就静默拉黑谁。可是 @xatierlikeLee 放着「简体中文」不用,而是把它叫成「残体中文」,这称呼自然颇为贬低。此外这构成了一个鉴定,且容易让所有人陷入一个「非黑极白」的谬误。因为既然一开始他把它叫成「残体中文」,那么议题往往会变成对「残体中文」的鉴定,即「它到底是不是残体中文」的是非题,而不是更为具体客观的「它有什么残缺」。

同理,天朝、五毛、美分、圣母、理中客等一样是简单粗暴的鉴定,即我所理解的 judge. 当然,我向来不轻易鉴定他人,也不接受他人的恶意鉴定,无礼之徒一律静默拉黑。此外我并不喜欢菊苣大神等这些正面鉴定,虽无冒犯之意,但也没诚意,毕竟通货膨胀到贬值,只有当面赞美并肯定他人做了怎样的壮举与善举,或是用稀贵的敬辞,如阁下先生老师等,才情真意切。可惜,如今现在大部分中国互联网企业连用「您」这简单的客套话都做不到了

同理同理,想必有些人会对知乎上所谓「利益相关」声明反感无比吧,因为当事人直接自我鉴定成非黑即白的个体,比如「我是上海人」,那么议题同时就塌缩成二元了,即他的答案只在「你也是上海人」时正确,反之则反。于是说到底既然对方都自我鉴定成那样了,还继续讨论议题,只会浪费彼此的时间。另一方面,若当事人不涉及对双方的鉴定,而是精准地讨论何种行为对彼此有何利弊,于是博弈起来又快又直,这样我才喜欢。

然而,人能表达自己偏好何人何物,并进一步解释。比如 xatierlikeLee 可以表达:「我不喜欢简体中文,因为它有缺陷」,情有可原。这样大家就能相互理解,且道不同不相为谋,更加节约彼此的时间,让彼此进一步找到自己所偏好的人物,开心就好。

Written with StackEdit.)

2017 Jun 8
你只不过是我们的产品罢了,毕竟又不是您

互联网时代里,名为「免费」的商业模式大行其道,知乎上的苏莉安就分析得妙:如果商家为你提供免费服务,那你就不是他们的客户,而是他们的产品。

如同苏莉安所说,免费只是一种商业模式罢了,用户要自己琢磨到底好不好用。不过我却要对国内大部分互联网产品打零分:光从「你/您」措辞之分上,就已经没什么诚意了。因为我从来没看到过这些产品有恭恭敬敬地用「您」来称呼客户,说到底后者确确实实只是个产品罢了,实际体验也不出所料。

再次,客户的身份不光被如此降格,而且互联网产品更变本加厉地拟人化,即不按「用户协议」认真办事,偏要取闹,哗众取宠:

不过专门运营社区的互联网产品就可以不讲究「您」敬辞了,毕竟社区贵在平等的气氛,比如知乎果壳豆瓣等。

2017 Jun 3
习惯掀翻棋盘

很久很久以前看到过一个问题:一个上帝、狼、狮子和羊的故事。其实选择权根本无谓,甚至对天敌的反抗也无谓,我的第一反应就是如何干掉上帝,毕竟从一开始的选择问题是他说了算,同时也意味着他可以随时玩死羊群,他才是真正的威胁。人的强大可不能单单是拘泥于他人施舍的权利,而是自己之所以有权利是因为我能有权利。

所以我一直对「给你一千万,你会不会卖掉你的老婆?为什么? 」这种问题嗤之以鼻,因为若真遇上了有能力付出这价码的强人,同时意味着他也能轻而易举地从你身上收走同一种等级的代价,非常危险,所以第一反应不是认真思考这蠢问题而是小心翼翼且低调地从他的视线中消失,避免被他随意的行动波及,除非你也足够强悍。

可惜大多数凡人没我这样的大局观,容易随波逐流。比如国家防火墙因为一些人的行为而封锁 GitHub, 于是有另一些人指责他们而不是国家防火墙本身;再顺便扔个我的看法:有好多人严厉指责 EVA 里的真嗣或三体的程心,都有上帝视角了还没有大局观,这样的观众放到棋盘里面恐怕也只是一个棋子罢了,我不相信他们会比主人公做得更好。

2017 Jan 17
对行不对事不对人

对人悲剧

最近知乎上 H1Z1 火起来了,我对这样的零和游戏向来不感兴趣,毕竟我不习惯滥杀无辜,不过正好有非常切题的对人悲剧可以拿出来讲一讲。

这视频里发生什么了?一个「自称来自江苏」的玩家「发现他遇到的 twodollar0624 自称胡建人」,且对方装备比较差,就「带领他并冲锋陷阵地与其他玩家交战」;twodollar0624 「偷袭并杀死」江苏玩家,「洗劫掉对方的装备」、「发表胜利的欢呼并辱骂对方」;此外在 twodollar0624 「欺诈」的过程中,好多「使用繁体字」的观众「在幸灾乐祸地嘲笑」。

注意我的措辞,所引用的描述皆是行为,你可以看出我没说 twodollar0624 是一个住在台湾的玩家,即没说「他是台湾人」,毕竟我只知道「他在游戏自称胡建人、习惯用繁体字」这若干事实等等而已;同理,我也不强调江苏玩家是大陆人。

说到底我不关心 twodollar0624 是不是台湾人 ,然而他却在另一个玩家做了一件好事即「友好地与 twodollar0624 结盟并保护他」的情况下,主动背叛了另一个玩家并杀死他,就仅仅因为后者是他所认定且仇视的大陆人。是的,世界上有很多人全然不顾他人畜无害甚至反而给予帮助的事实,就仅仅因为对方的身份而莫名地仇视后者,这样的悲剧太多了,一些人集中屠杀犹太人没完没了、一些人抱炸弹冲进一些异教徒没完没了、一些男人恶意歧视一些女人没完没了。比如有好多住在中国的人就跟 twodollar0624 做的这事一样龌龊,即习惯仇视住在日本的人,哪怕后者绝大部分仅仅出生在战后时代的日本而已,不一定有做了什么损于前者利益的坏事,当然有一些人参拜神社修改历史教材等等现象另当别论。

对事悲剧

所以一百年前,胡适先生提倡对事不对人,即只看对方所涉及的事件,不看对方是什么人,这样可以杜绝很多对人悲剧,比如 twodollar0624 就可以接受如此可靠的结盟,一起开开心心地行动,功利更加最大化,大陆与台湾更加团结和谐一点点点点点。但是,其实还可以再更进步一点,即对行不对事

这时就要给读者布置一个作业:观看《狩猎》。完成后再回来继续阅读,下文自然有涉及剧透!

你要知道,「事件」往往没你想的那么简单,即并不一定真实。先搞清楚何为「事件」,它可以有四个要素,即时间、地点、人物和行为,即谁在哪里什么时候做了什么行为。其实还可以再进一步简化,即谁做了什么

「卢卡斯性侵了未成年的卡拉」,这是对一件事实的描述,但这事实就是真实发生的吗,卢卡斯真「性侵了未成年的儿童」了吗?影片中的小镇居民认定为真,处于上帝视角的我们则反。但是,现实中的你并没有上帝视角,你真敢认定你过去所认为的所有事件也一定真实无误吗?万一却导致过卢卡斯那样受人排挤的对伪事悲剧你却浑然不知呢?那么到底该怎么办呢?顺便一提,影片也发生了「一些小镇居民恶意对待没做坏事、仅仅是卢卡斯儿子的马库斯」这对人悲剧。

影片中的警察检察院等行政机构其实做了好榜样,即由于证据不足而无罪释放卢卡斯。那么关键答案来了,「性侵犯未成年的儿童」这行为,大家自然毋庸置疑要始终地所反对所抵制所制裁,即对行;至于对「某人性侵犯了未成年的儿童」一事,则就要慎之又慎了,即必须先找到构成这事实的客观证据。在你没有证据之前,不要果断对你所不熟悉的事实下结论,但是,你可以先对行为下结论,即你坚决反对「性侵犯未成年的儿童」。事实上,我过去对事实的任何评价也几乎都贯彻了这原则,自然也从来不怕「事件反转」这狗血展开,毕竟我首先只在评价恶劣的行为,极少评价「大家所认为的事实」。

此外,对行不对事其实还带来了一处意外的好处,即可以回避他人的一些审查。试想,当局屏蔽了「三鹿牛奶」,你没法大喊「我抗议三鹿牛奶事件!」,但是,你可以改大喊「我抗议牛奶作假!」,毕竟你在抗议社会所公认的贬义动词即不齿行为,当局若要屏蔽这些词语,比如「牛奶作假」,成本就极其沉重且更加司马昭之心路人皆知。

新难题

其实,尚有些难题,光靠对行不对事依然没法有效解决,我也不知道怎么办,你只需要知道它的存在即可。

成都漫展CD15出现穿日本军装者 网传该活动将因此遭取缔

有人实行了「穿日本军服」这行为,那么难题来了,这样的行为有什么危害?讲道理,这位观众不可能是出来杀中国人的, 现实里也没杀中国人,刀枪应该也是玩具,咋一看没什么危害。但是,却也有人连同「穿日本军服」都无法接受,即严重伤害了后者的心理。所以,何为善行何为恶行本身就是价值观上的难题,仁者见仁智者见智且大家要靠自己与他人较量了。

Written with StackEdit.

2017 Jan 16
知乎乱象

用知乎久了,我总结出三个乱象,此外我开始戒知乎了。

反对加没有帮助

官方对「没有帮助」按钮有本末倒置的解释:「没有帮助」表示该答案对你没有价值。在我看来,每一个对题的答案自然是要解决「问题」。若读者认为这答案能解答问题,赞同即可,反之则反对;若答案本身不对题,自然则是没有帮助了。于是答案只能处于这三种状态之其一,不可共存两种以上状态。

可是居然有读者习惯反对加没有帮助,有时还要特意跑去评论宣言这行为一番,即不认为这答案能解决问题,又不对题。于是这导致了可悲的现象——大部分人不关心问题,只想解决他所偏好所厌恶,说难听点就是要斗臭他所厌恶的答案。如果是我的话,我当然只会关注我所偏好的问题,再挑有在解答问题的好答案,而不是如此本末倒置。

讲故事大赛

当校内已经出现校园暴力事件时,学校应该采取怎样的行动才能将伤害降至最低?下面有一堆答主自顾自地讲述自己所遭遇的校园暴力故事,博取同情,于是前四个答案愣是答不对题还高票。类似的现象已经发生很多次了,说到底有不少用户喜欢把问题变成讲故事大赛,一些答主讲故事爽了,一些读者听听他所偏好的故事爽了,终究不关心怎么解决问题。再结合「反对加没有帮助」现象来看就特别喜感,一部分人所「赞同」或「反对加没有帮助」的答案,竟然都没有在解答问题。于是校园暴力恐怕一如既往地大行其道,毕竟没多少人解答怎么解决或赞同解决办法。

利益相关

我每次凡是看到答案声明「利益相关」且后缀往往是身份时,我就往往跳过去不看了。因为这些答案往往把问题扭曲且坍缩成如此狭隘的二元问题,即「你和答主是否属于同一种共同利益群体」,这自然已经脱离了原问题的初衷了,且答案自然要么为是要么为非。于是当问题下的答案普遍发表利益相关声明,那么问题就很容易变成站队大战,且那些和读者利益无关的答案自然没有解答原问题。我没兴趣知道也不想拘泥于答案的答主身份,一个问题下的好答案应该是多元化的,都和答主或读者的身份没有关系。若用户关心在某问题,那么这问题下的好答案应该无关乎利益群体身份,而是认认真真地在解决问题。

Written with StackEdit.