Bojie Li (李博杰)
2014-12-18
2013 年 5 月的一个下午,理化大楼 5005。我拿着贺羽学长的手机给在 MSRA 联合培养的陆元伟打电话。可能是太紧张吧,打完电话,屏幕上和手上都满是汗珠。几天前,我接到通知:我被 MSRA 联合培养项目录取了,我回复说我正在做创业项目,可能没有时间过去。微软方面催我尽快作出决定,我本来想自己拒掉的,不过想想还是该听听贺老板的意见。
故事背景:科大与 MSRA 的联合培养项目是每年 4 月报名,通过简历初筛和面试,录取 18 人左右,大四一年到 MSRA 实习,毕设也在 MSRA 做。这 18 个名额中,14 人是要求保研到国内的,剩下 4 个名额是出国或者就业的。经过两个月的实习,大概在 9 月初,14 个人中大概能选出 7 个人留下来读博,剩下的回学校保研。所谓的联合培养博士,就是头一年在科大上课,后面四年在 MSRA 做研究,最后拿到的是科大的学位(所以我们是正宗科大研究生,不是代培生)。
陆元伟和贺羽师兄都说这是个不错的机会,建议我慎重考虑。我当时想的是,先去实习一个暑假,看看情况,再做决定。
当时我深受 Linux 和自由软件的文化熏陶,对微软是有不少偏见的。HR 给我打电话,让我确定一下 “入职” 时间,我问怎么成 “入职” 了,这才知道我是以实习生的身份去联合培养的,感觉成为了一家当时并不喜欢的公司员工,还是蛮别扭的。
2014-12-12
贴一篇旧文:2012 年 6 月写的读书笔记(原文链接)。这个笔记是写给自己看的,里面掺进了太多自己的设想,有可能会对读者造成误导。不过文章太长了,没有时间修订。欢迎吐槽。
近来(2012 年上半年)在郭家华的推荐下,读了LUG书库的《程序员的自我修养——链接、装载与库》一书,有种相见恨晚的感觉。然而快到期末考试了,没有时间把全书读完,因此只写了一部分。
有两种方式构建软件:一种是把它设计得如此简单以至于明显没有缺陷,另一种是把它设计得如此复杂以至于没有明显的缺陷;前一种的难度大得多。——Hoare 于图灵奖演讲《皇帝的旧衣》
2014-12-10
按:2014 年 11 月 21 日,笔者在阿里巴巴技术俱乐部的虚拟化技术交流会暨 “科大云 3.0” 发布会上分享了一些对虚拟化技术的浅见,整理、补充后与诸位探讨。(长文慎入)
虚拟化技术大家都不陌生,我们大都使用过诸如 VMWare、VirtualBox 的虚拟机软件。一些人认为,虚拟化技术是近几年跟着云计算的潮流才火起来的,十年前只是桌面用户测试其他操作系统的玩具。非也。只要计算机上同时运行着多个任务,就会有任务隔离的需求,虚拟化就是让每个任务看起来独占整个计算机、隔离任务之间影响的技术。早在计算机还是庞然大物的 20 世纪 60 年代,虚拟化技术就开始发展了。
IBM 7044
2014-11-28
译者按:Jennifer Rexford 是普林斯顿大学教授、网络研究圈子里呼风唤雨的大牛。她在 2010 年给新入学的工程领域研究生做了个报告:Advice for New Graduates。
了解我的人都知道我有收集名言的爱好。一句话解释这背后的故事:名言短小便携,对小时候经常搬家的我来说是一个合适的爱好。20 世纪 30 年代普林斯顿的两个著名科学家,爱因斯坦和托马斯·路易斯,分别对 “个体” 所处的角色发表了有趣而有些对立的评论。
物理领域的爱因斯坦说:“人类社会所有有价值的东西依赖于个体发展的机会。”
药学、生物学领域的托马斯·路易斯则说,“事实上不存在单个个体这样的生物;他自己的生命并不比从皮肤表面上扯下来的一个细胞多什么。”
这两句名言很好地概括了研究生是干什么的。
2014-11-25
好多人搞不清这两组概念之间的区别。我们拿小明下载文件打个比方。
- 同步阻塞:小明一直盯着下载进度条,到 100% 的时候就完成。
- 同步非阻塞:小明提交下载任务后就去干别的,每过一段时间就去瞄一眼进度条,看到 100% 就完成。
- 异步阻塞:小明换了个有下载完成通知功能的软件,下载完成就“叮”一声。不过小明仍然一直等待“叮”的声音(看起来很傻,不是吗)
- 异步非阻塞:仍然是那个会“叮”一声的下载软件,小明提交下载任务后就去干别的,听到“叮”的一声就知道完成了。
也就是说,同步/异步是下载软件的通知方式,或者说 API 被调用者的通知方式。阻塞/非阻塞则是小明的等待方式,或者说 API 调用者的等待方式。
2014-11-20
C 程序为什么要编译才能执行?一个 C 程序在变成可执行文件的过程中,为什么要经过预处理、编译、汇编、链接这四道工序?让我们从这段简单的 C 程序开始。
为什么要编译
这并不是一个简单的问题。我们知道 Python 代码不需要 “编译”,输入一行代码就可以运行出结果了,对用户很友好有木有!这种交互式的运行环境被称为 REPL(Read-Evaluate-Print-Loop),也就是读取用户输入的语句,执行语句,输出语句的值,再返回到等待输入状态。
2014-11-19
2014 年 9 月 19 日 22:30。我拖着半人重的行李箱,在科大西区斑驳的树影里独行。就在几个小时前,我还在研究背包问题:在背包容积限制下,如何把尽可能有价值的东西带回来。
当时,只有很少几个人知道我回来了:组里的老板和同事、我爸妈,还有张静宁。就在几天前,LUG 小伙伴们还在讨论我十月份会不会回来:由于搞挂 mirrors 服务器,我还欠大伙一顿饭呢!
这是 10 月 20 日写的生活总结《逃离活动室》本来的开头。但觉得不合适,就换成了 “逃离微软”。本月初我把人人封面照片换成了 9 月 20 日 SFD 的工作人员合影,就是为了纪念这一年新生活的开始。
2014-11-09
说起 Ken Thompson,我们首先想到的是他发明的 UNIX 操作系统。他因此获得 1984 年的图灵奖。在图灵奖演讲上,Ken Thompson 提出了一个深刻的问题:看到了软件的源码,就意味着没有后门吗?编译器是否可能存在能自我复制的后门?
这篇发表在《ACM 通讯》上的论文只有短短三页,省略了很多细节。原理上有点像输出自身代码的 C 程序,但又比它难很多。我追随先哲的脚步,给一个开源 C 编译器——tcc 插入了能自我复制的后门,这个插入了后门的编译器在编译 Linux 登录程序 sulogin 的源码时,会自动插入一个后门。
2014-11-05
前天张擎宇同学告诉我,在有 Wi-Fi 的时候最好使用 Wi-Fi 并关掉 3G 网络,可以省很多电。3G 真的比 Wi-Fi 费电吗?我查阅了文献,发现果真如此。当要传输的数据较少时,电源消耗的差距可以大到 10 倍之多。
蓝线:3G 功耗;绿线:wifi 功耗;紫线:考虑了 wifi 扫描和建立连接之后的功耗(来源:TailEnder)
原因主要有两方面:
- 3G 网络完成数据传输后要保持一段时间的高功率状态;
- 3G 网络的发射功率远大于 Wi-Fi 网络。
2014-10-29
凡是 LUG 的活跃会员,都早晚会被吸引进码农的圈子。
这个谣言的出处及真假暂不考证。到底是 LUG 的氛围把小伙伴们引上了码农这条不归路,还是打定了主意走码农路的才会长期活跃在 LUG,我说不清。
为什么选择计算机专业,事实上是两个命题:
- 为什么选择计算机作为未来的职业?
- 为什么本科期间选择计算机专业?
我试图用自己的经历来解读这两个命题。少年时代,我曾把科学家作为自己的梦想,高三那会儿想的是做理论计算机研究。在大一升大二的关头,我曾在数学和计算机之间徘徊抉择,还曾考虑过学物理。因为想不清楚,大一下学期的时候我并没有申请转专业。在大二上学期开学一周后,我感觉不能继续混沌下去了,于是提交了转专业申请,从第二周开始,踏上了码农的不归路。