;-)

Welcome! 欢迎光临!

Research and Projects on the top exhibit what I am doing or what I have done. In "What Am I Thinking" on your right, you can read my latest tweets. The "Topics" on the right and the "My Role" on the top categorize my posts by the topics or the roles I involved for the issues. Most posts on this website are in both English and Chinese.

在上方导航条中的研究项目中,您可以查看我正在做什么;在右侧的“What Am I Thinking”中,您可以阅读我最新的推文;右侧的“Topics”和上方的“My Roles”则将我的日志按照题目和我在里面涉及的角色进行归类。本站大部分日志使用中、英文双语。

12/15

Almost two years ago, I've announced a small tool called Course Schedule Exporter, which exports the course schedule as ical format from BIT's internal banner system, based on a formerly private tool developed by myself to do such kind of exporting work. To bring it online, I've started a semi-private project called DPRBIT to bridge into the intranet of Beijing Institute of Technology so that our tool can access the data residing in the banner within the intranet.

DPRBIT provided an HTTP proxy as the interface to users. When a users tried to access any address via this proxy, our system would redirect the user to our authentication portal to verify the identity via the Central Authentication Service (CAS) maintained by the Network Service Center of BIT. After finishing up the authentication, the user would be granted to use the tunnel to access the intranet for 30 minutes. Course Schedule Exporter was based on this infrastructure with some minor exemptions mostly on the authentication part.

Both of them worked well. DPRBIT helped a number of exchange/study-abroad students that year to access the intranet to finish up their compulsory capstone project filings, as the university's VPN was authenticated based on the billing status of the student's campus Internet account, which is ridiculous as those study-abroad students would not be on-campus to use the campus Internet let alone paying the monthly fees.

These systems have been there for two years, while the public interface for DPRBIT had been taken offline shortly after a port scanning activity from our server reported to our ISP, which was suspected to be due to any potential backdoor residing in the front-tier of DPRBIT.

Recently, our link to BIT's intranet went off presumably due to a network topology change at BIT, and the CAS maintained by the Network Service Center is no longer open to any developer but restricted only to their "official" services without any other possibility to gain the access to the CAS. Since these two services have been running for two years and some of the designs have been proved to be lack of scalability, I've decided to terminate these two services.

The user interfaces to them are still left running, but the core services have been taken down permanently. I am happy to resume these services with any current BIT student who is interested in this project.

12/03

I've recently been working on the installation of a bio software called Whole-Genome Shotgun Assembler (wgs-assembler) on the cluster I am working with. This error took us a while to fix, so I am writing the details here hopefully to help other system administrators on installing this software.

As most research software does, wgs contains a bunch of bash scripts to call all the different bio software programs (we call as dependencies) to finish the processing on different stages. Research software projects are generally poorly documented, so it is very hard to figure out what is going on if any error message occurs. There is a tool script called PacBio Corrected Reads (PBcR) which yields the following error message on the user's execution:

ERROR: Overlap prep job /users/**/tempsciara/1-overlapper/correct_reads_part 1
FAILED.
ERROR: Overlap prep job /users/**/tempsciara/1-overlapper/correct_reads_part 2
FAILED.
...
8 overlap partitioning jobs failed.

This issue is hard to deal with because I couldn't reproduce it on my end, since the exact same command works on my end. There were apparently some funny things happening that were different on my run from the user's run. Reproduction is important in this case, as there is not much documentation to reference for research software and the error message didn't provide very useful information. The best way to deal with such kind of ad-hoc scripts is to debug the script which causes the trouble. By using debugger or simply tentatively modifying the script to get more information, we could figure out the behaviors of the scripts and then the direct causes of the failures.

Finally, we made to reproduce the error on our end, and it turned out that the script is hard-coding an absolute path for an external command `/usr/bin/time`. It is understandable in this case because `time` is a basic utility command distributed via core-utils package. For most Linux users, they should have `time` installed on their default executable path `/usr/bin`. However, the problem for clusters is that a clusters normally need to host as many compute nodes as possible. Putting too much thing in the core (i.e. storing too much time locally) would really obstruct this goal and slow down the system. Therefore, in our case, we installed some non-essential utilities somewhere else accessible via NFS. The user was running the job on a compute node that does not have `time` installed at `/usr/bin`, while we were attempting to reproduce on a fully-functional master node which has the command installed locally. The script did write the error message as the result from a problem called at an intermediate step, but it was not documented anywhere, so we couldn't only figure it out until going through the source code.

The fix for this issue would be replacing all `/usr/bin/time` in PBcR (or PBcR.pl in the installation source code) to `/usr/bin/env time`. A bug report has been created to the author.

In summary, from this issue, we can see the efficient steps to deal with the error of research software are:

  1. reproduce the errors;
  2. go through the source code and debug the code to figure out what those error messages mean and what causes the errors.

Another takeaway is that script software developers should not pose assumptions on the path of any command. `/usr/bin/env` is a great tool to help figure out the path of a desired command.

11/05

The Monkey has recently reinstalled the operating system on his personal laptop to deal with some resource depletion. After the re-installation, he was not able to utilize the SkyDrive feature builtin Microsoft OneNote 2010.

OneNote firstly complained about WebDAV, and later on, after a reboot, the software turned to show the following message at File->Open menu:

This service is disabled by policy. Contact your system administrator to enable it.

The Monkey started the WebDAV service and tried to edit the WebIntegratedEnabled and DisableSkydriveSetupOnFirstBoot in the registry as suggested by a post, but none of them worked out. He installed the "spamy" Microsoft SkyDrive client, which didn't resolve the OneNote issue at all.

Driven by the most naive idea, he decided to reinstall Microsoft Office, and it didn't help too much. However, this time the "policy" error message on OneNote disappeared, but he still could not open OneNote even through the "Launch in OneNote" links on the web UI of SkyDrive.

The SkyDrive client complained about "Internet Connectivity", but the Monkey is sure that the Internet was on and the firewalls were set to be open to the corresponding software, and his roommate was not Skyping or playing video games. Finally, it turned out to be a configuration issue. So, SkyDrive integration requires TLS to establish connections. However, for some reasons, some Windows installations have disabled TLS supports by default, which causes the weird connectivity issue.

The solution is to select the options to allow TLS under the Advanced tab in Internet Settings on the Control Panel. The problem resolved immediately when the Monkey made this change. Since he couldn't find any direct information about this issue related to OneNote, we are posting this report, and hopefully it would help others. The Monkey has denied to comment on this bad design though.

03/19

Recently, I am learning Web security issues. Cross-Site Request Forgery (CSRF) forges users behaviors to utilize stored Cookies to act as the users or steal information.

The same-origin-policies (SOPs) is a mechanism enforced by browsers to protect their users. However, I find that it is hard to get a clear English description of SOPs behaviors as well as what SOPs can give and what it cannot give. After struggling couples of hours on this mechanism, I am trying to put my understand here to request for comments or corrections.

Scope: Script-Initiated Requests

SOPs is only enforced on the requests initiated by client-side scripts. Therefore, those CSRFs initiated by resource references, such as loading an "image" or an iframe will not be enforced on this rule. That is also the reason why we can reference arbitrary images from arbitrary external websites on our websites.

Browser: Enforcement after Requesting

For each script-initiated request, the browser will request to the server. However, before delivering the response back to the initiator, the browser will check if this request violates the same-origin policies. If it violates, the browser will not deliver back the information to the script. Note that the request is actually made by the browser to the server.

Why browsers cannot stop those requests before sending them out? Because we may also want to allow someone to do such kind of script-initiated requests (for example, at client-side API calls), which is called as cross-origin resource sharing (CORS). When a server responds the request, it includes headers like Access-Control-Allow-Origin to tell browsers which origins the server allows. This information can only be retrieved after making such request. That's why browsers have to request the "suspicious" requests.

SOPs: Avoid Information Leakage

So, what is protected then? When I first time got this formal name of CSRF, I was very anxious about someone making HTTP requests on my behalf. However, now we see that the browser does not stop this.

Well, the browser is actually protecting us from information leakage. Whether the request is initiated by a resource reference or by a script without a correct response due to browser's SOPs, the malicious script does not get any information from the other website. So, it is defending us from utilizing the Cookies stored in the browser to do unauthorized access.

Server: Origin Headers and CSRF Tokens

So, what can protect us from making unauthorized requests? As a part of the CORS standard, all state-modifying requests (POST/DELETE methods...) should include a Origin header for the server. The server then can determine if it should execute the request with its accepted origin lists on the server-side.

However, in the real Internet, state-modifying happens also in GET requests. The standard does not require browsers to send Origin header to the server, so the server needs a way to protect itself. There are multiple options, such as adding CAPTCHA or checking Referrer. Unfortunately, none of them solves the problem without changing the user behaviors.

SOPs + CSRF Tokens: Avoid Unauthorized Requests

CSRF Tokens solves this issue by creating in a preliminary page a token which won't be stored in the browser. A malicious script cannot get any information from the victim website due to SOPs, so it cannot get the token by requesting the preliminary page. Therefore, it cannot pass the CSRF token checking on the server-side.

Now, we see that the browser protects users in their privacy aspects, while the server protects users from unauthorized request.

Remark: I am sure that there should be inaccuracy or mistakes, as CSRF is not my expertise. Please correct me if there is anything wrong.

01/18

Goodbye, the year of 2014! I still remember the time when I was celebrating the Chinese New Year in Boston during my exchange program. All my memory seems still fresh, but everything has become a part of the history.

The year of 2014 is quite special to me. I was a state-sponsored exchange student from Beijing Institute of Technology at Northeastern University studying Electrical Engineering at the same time in 2014. Now,  I am a graduate student at Brown University studying my favorite major -- Computer Science. My life has changed dramatically, believe or not.

The year of 2014 also witnessed the launch of Chang'e III and the missing Malaysian 370 Flight. Those were my first times to feel like being with my homeland. My friend commented me as never feeling such patriotic before leaving the home country. It is true. Homeland is our comfort zone, where we have friends, family, and familiar metropolitan systems.

I was experiencing the pain of changing, since I was trying to jump out of my comfortable zone. I changed my major as well as the school of my study, while I decided to terminate my BEng/PhD track and was forced by some arrogant idiots to give up my fast-track graduate school offers in my home country's higher education system.

I chose to challenge myself to try a more competitive track of my life. No matter what, I will continue it. I believe it is always good to have more opportunities. (at Beijing Capital International Airport)

再见啦,2014年!我还记得去年的这个时候,我还在波士顿第一次庆祝农历新年。所有的记忆都还很清晰,但是所有的事情都成为了历史。

2014年对我来说非常特别,我年初的时候还是一名国家公派交换生,而现在我已经成为美国布朗大学的一门研究生,并学习了我最爱的计算机。不管信不信,我的生活有了很大的变化。

2014年同样见证了嫦娥三号的发射和马航370航班的失踪,这是我第一次感受到与我的祖国同在。我的朋友曾经说我是出了国才感受到更加爱国。

我也经历着变化带来的痛苦,因为我正尝试跳出自己的舒适圈儿——我改变了我的专业和学校,我决定终止我的本硕博连读项目并在某些自以为是的愚蠢的人的压力下放弃了保研。

我选择去挑战自己以便尝试一个更加有竞争力的路,不管怎么样我都会继续,因为我坚信多一些机会总是好的!(于北京首都国际机场)

09/14

As promised, I am posting my graduate study resolutions. It's actually not possible to design everything beforehand, so this would act as a guidance of my study in the coming two years.

Time & Efficiency

  • Do work purposely all the time. Always know what I want when doing something.
  • Review after class, and check the references. Make sure to understand all the covered things.
  • Keep a regular schedule, and avoid staying up late.

Behavior & Social

  • Stop mentioning or thinking the past anymore. Think for and look to the future.
  • Be helpful to friends. Make couples of close friends here.
  • Never get angry due to other's behaviors which are not related to me.

Actions

  • Be happy and cheerful everyday.
  • Don't be shy. Be proactive.
  • Take part in social activities.

Life

  • Keep a budget, and report my expense monthly.
  • Find a part-time on-campus job.
  • Cook by myself at least twice a week.
  • Workout/jogging/swimming regularly.
  • Read/study interesting topics always. Reading at library at least twice a week.

Academic

  • Fill up my gap in CS at graphics, compilers, AI, ...
  • Participate in the research groups in NLP/AI, Data, and Networks.
  • Do a technical internship and a research internship.
  • Leave out time for reading about the latest innovations.
09/04

I have been a lazy guy for updating my blog, and I apologize for it. If you take a look at the posts I've posted, you will see how infrequently I post.

It is not in purpose. Some of friends may have already noticed my upset when I came back to Beijing. In the recent year, I have been in troubles related to the life of studying abroad, the bureaucracy in BIT, friendships, the relationship, graduate school admission, and my family.

I think I am probably the kind of person who has very strict requirements on and expectations to myself. I really want to work hard, but meanwhile, I also expect the great outcome afterward. However, hard-working may not always produce good results (or saying expected results). I should have understood this thing.

I had been very alert to the illusions accompanied with studying in a self-capsuled college, but keeping a good sense to myself for four years is relatively hard. For now, I don't want to express any regret to anything which has been done or has not got chance to be done. As I posted on social networks couples days before, just let the past go, no matter how unclear I am feeling about my future, since it's the time to cheer up to start the new journey.

Yes, I am in a kind of strange state now. Academically, I used to be one of the best Electrical Engineering students in the Bachelor/Doctoral Program of Beijing Institute of Technology, but now, I am a Computer Science master candidate who know just a little bit more than those sophomore students in Computer Science. I probably have to treat my two years here as another compressed "undergraduate" studying, since I must fill up my gap in CS. It is a really hard turn to me, and I am still trying to get it, even though Computer Science has been my interested major for more than five years and I was really enjoying having fun with it. Studying as a major is a very different thing. I must take a risk after the realization of my dream of formally studying Computer Science.

Personally, I have not been ready to the new period of my life. I am still thinking about my close friends everyday, and I even have a lot of plans or goals, even relationship, remained unsolved after the sudden end of my undergraduate years. I don't want to talk about BIT anymore.

As for long-term, I had not got chance to think thoroughly about my future and career due to the interference from my family and hard workload due to study. Now, I have some, and I am going to make resolutions in my next post for my new semester as well as my graduate study in Brown.

如果看一看我发表过的日志,你就会看到我发得有多么不频繁。我已经变身更新博客的懒汉了,非常抱歉。这真的不是故意的,我的一些朋友很可能已经注意到我这次回国后的心烦意乱状态了。在最近一年中,我遇到了一些麻烦,这有关于留学生活、北理的官僚主义、友情、关系、研究生录取、家庭。

我应该是那种对自己有非常严格的要求和期望的人,我真的希望能够努力工作,但与此同时我也期望好的结果。然而,事实并非如此,我早就应该理解到这一点。我曾经十分警觉自我封闭的学校里容易产生的那种自我良好的幻觉,但坚持这种感觉四年还是挺难的。而现在,我不想再表达我最自己做了或者没做什么事情的遗憾,就像我前段时间在社交网站上写的一样,“是时候振作起来了,过去的事情就让它过去吧,不管未来多么迷茫,路还是要自己走的”。

我承认我现在处于一个比较尴尬的境地。学术方面,我曾经是北京理工大学本硕博连读实验班里优秀的电子工程学生,但是现在作为一个计算机科学硕士研究生,我只比计算机本科二年级的学生多懂一丁点儿东西。我恐怕得把在这儿的两年当做另一个“压缩”的本科来弥补我在专业上的差距,尽管计算机作为我感兴趣的专业已经有很多年了、我也弄了一些很有趣的东西,这依然是一个很难的转变——我必须承担实现我正经学习计算机这一梦想的风险。

(此部分不译)

所以,我会在我后续的日志中写出我新学期乃至这两年的计划。

07/09

学校在申报优秀军训,所以我们军训了一个月,而且我们在指挥部参与拍摄了很多细节性的东西。军训指挥部是在图书馆的报告厅里,报告厅的二层同传、转播室被用作值班老师的休息室,一层导播间被用作会议室,作为军训摄制组,我们的工位自然是在老师前面。我们隔壁是那栋大楼的电力、动力、空调、消防系统值班室,这个地方后来被我们抱怨了好长一段时间。

那个报告厅到图书馆的花园有一扇常年锁闭的门,门锁是在我们一侧,所以指挥部的人们经常为了抄小道从这扇门穿过图书馆去食堂。这个安保问题后来引起了图书馆馆长的注意,于是后来那个门的锁芯干脆被拆了——反正怎么也打不开了。军训各个连队每天都可以获得一定量的桶装纯净水,指挥部边上有一个纯净水的储存区用来分发纯净水,一些体质不适合军训的同学便在这里担任管理和送水的工作。指挥部经常出现几位领导,学工处处长、武装部部长、保卫部部长、分管副校长、团委分管副书记等人物,这也是后来校长接见本硕博班同学的时候才知道的。

我因为任务缘故,认识了水站的几个同学,包括大黄的同学相成,后来因为身高的缘故我们被征调到枪库,负责在分发模型枪支的时候清点出入人数和枪支数目。“枪库”是在一个宿舍楼的地下室内,阴暗的灯光下摆放着一排又一排的步枪模型,还有一些假的弹药箱。很有趣味。

军训自然是很快就接近了尾声,所有人都以为苦日子快熬出头了,班里同学决定去(良乡)镇上聚一次,于是我们一群人浩浩荡荡地在镇上闲逛,最后找到了一家“小肥羊”餐厅分两桌开吃。我一贯对于喝酒这个事情比较谨慎,很少在外面跟别人一起喝酒,班里的菜花同学后来还帮我挡了酒。只觉得大家聊天声音都很大,有的时候还冲着服务员喊——这在我看来是有些粗鲁的。

军训结束时有一个汇演仪式,我跟少帅在指挥部留守。少帅是水库那边的,因为有技术特长而在我们摄制组参与一些工作。中间一个老师跑回来,说军旗用的旗杆断了,鸡飞狗跳地找了找军旗旗杆。印象中我们军训时候大家经常一块儿去良乡2号食堂吃饭,还是很快乐的。

军训后是个周末,正好又赶上一个假期,图书馆没有开。我受大黄的启发,找了离宿舍最远的良乡2号教学楼(综合教学楼)四层一个角落看了看新学期的书,主要是在看《数学分析》,其间还跟高中同学张导电话咨询了这坨课应该怎么学。张导对我帮助很大,他数学造诣很深,而且很乐于跟别人将问题,总是讲得非常有趣。我数分这门课开始的时候上手快,一定程度上得谢谢张导的“启蒙教育”。

第一天上课前的那天早上,我在楼道里晃悠串寝,跟隔壁班长他们宿舍聊起是不是需要去占个座之类的。于是我们一拍即合,没想到居然掀起了本硕博三个班整整两年的占座狂潮!

大学第一节课是方教授的数学分析,是在良乡1-105那个小黑屋里,我们班人自然干练地把教室的前三排扫入囊中。我则找了第一排中区最左边那个最靠近老师的座位,因为我觉得如果要听课当然就要找一个最近的座位——听得最清也看得最清,有问题还能直接交流。后来这个座位成了我们三个本硕博班一起上课时候我的专座。

方教授讲课完全使用板书,不过印象中第一节课是例外,她说一般用板书是因为内容难,她怕讲得太快了学生跟不上。方老师讲课条理很清楚,跟书上的内容几乎一字不差——毕竟那本书是她自己写的。课下提问也怎么也问不到她,我们每周有一个助教答疑时间,那个吴学长对我们真是循循善诱,而且一脉相承了方老师的风格,怎么也问不到。有的时候一个简单的问题,吴助教能讲出来一系列相关的类似的理论出来,最开始答疑我是不去的,后来去过一次津津有味听过一次以后,就每次都不落了。可惜他只带了我们一个学期,后来换了一个很没意思的助教。

大一第一学期的课表还是很轻松的,很少有两节课连着上的情况发生——这在后来简直就是奢侈,因为从早上8点连着上到晚上9:30的情况很常见。我很快跟我熟悉的人——高中同学建博——会合,他带着他的室友冠群、宇航,我们几个人说去找个空教室写写作业,于是我们居然傻乎乎地跨过良乡东路跑到北校区的良乡2号楼顶层(似乎是我前一天看书的那个教室),然后就聊起课上老师讲的内容了。

我当时对集合的可数性质非常不理解,胆子可能也是当时那帮同学中最大的了(现在这帮同学里胆子比我大的多了去),直接给方教授去了条短信咨询。方教授居然打过来了,然后给我讲了好久,记得当时背景噪音很重,似乎是在等公交车。时间很快就过去了,我们快快乐乐地冲向食堂吃饭。

下午是高飞教授的C语言课,出乎我们预料的是高教授居然是女的……课堂上还有一位留学生,我当时比较羞涩,不过班里似乎有同学跟他关系搞得不错。还有几个上一届的来听课或者通过某种途径选上这门课的。这门课的上机是要在一个类似于OJ (Online Judge) 的系统上完成的,作为资深NOIP选手和资深NOI选拔赛选手,这对我当然不在话下。于是我吭哧吭哧地很快搞定了所有的上机作业题……然后飞设他们班的葛同学就主动认识我,然后给我起了“大神”这个外号。后来证明葛同学是他们班的大神。

晚上去我很早就回去了,因为作业我白天已经都搞定了——这是高三养成的习惯,我一般一有时间就先写作业,不然要么写不完,要么质量没有保证。结果宿舍居然一个人也没有,真的是空空的楼道一个人也没有!好吧,在宿舍无聊了一会儿,只好走到图书馆基础科学区(O类)去看书啦,然后在这里遇见了建博的室友冠群。这小子还穿了件衬衫,打扮得很是正式呢!我们就这么认识了,没想到他成了我前两年里最最重要的朋友,我们整整1年里每天一起上自习,后来虽然因为专业课程不同时间凑不上了,但是我们还是非常要好的朋友。

再说回占座,飞设和安工这两班被我们班汹涌的占座大军搞得忍无可忍了——我们班占座大师、我的室友主席同学每天早晨5点多爬起来,等到宿舍门一开就窜到教室去占好前三排……他们两个班的班长联合起来要跟我们班“谈判”,我们班自然是视而不见了,毕竟我们班还是很占优势的——这些是听那两个班的同学描述的。后来,他们两个班的辅导员(是同一个人)给我们三个班(我们的辅导员跟他们两个班的不是一个人,也不属于一个学部)定出了一条规矩,就是只能用课本占座。我们班出于礼节就接受了,不过主席总是能让这两个班“魂飞丧胆”,于是后面出现了隔夜占座、隔夜占座书被收、隔夜占座守着不让书被收之类的事情。

周二只有一节课——高等代数,是孙教授的课。当时孙教授很早就来教室了,看见我们三个班因为前一天数分课上的事情而占的满教室的座位,非常感动。孙教授上课前还跟我们这些坐在前面的同学聊了聊,因为是阶梯教室我就坐在了第二排。我问:“您是××老师吗?”孙教授说:“正是在下。”后面还有帮他调讲稿放映模式的事情,让我们感觉这个老师非常有意思,应该工作有年头了,而且在他们学院应该也算个领导。

孙老师积极性很高,他自己编了一套英文讲义,他说他用中文讲,英文讲义我们自己看一看可以作为参考。考试取讲义、他讲过的、教科书的交集。最后考试也是很厚道,第一学期到头来其实没奖多少内容,就是讲了讲矩阵的四则运算而已。结果我们三个班好多人都挂了——按照规定挂科是要退回普通班的,后来据说对孙教授打击也很大,第二个学期他再也不提那个英文讲义的事情了。不过平心而论,他的英文讲义还是很有用的,我学了很多数学词汇和表述方式呢!这在后来搞数学建模的时候,尤为明显。

这节课后是大学生心理课,这是恐怕是我大学中唯一一门自始至终都没听过讲的课了,我课上一直都在跟冠群聊天“交流感情”,于是期末成绩也很“漂亮”——唯一一门低于70分的课。马上要登场的另一个最重要的朋友楷哥貌似还比我第几分,这让我心里些许有些安慰(哈哈哈)。

我们学院第一学期开工程制图课,那是我头一次跟实验班、双语班的同学一起上课,大家都还不太熟悉。教我们的老师不但是教科书的编写者,还是国家标准的参与人,他不但能告诉我们应该怎么做,还会告诉我们为什么国家标准要求我们这样标注尺寸。这门课的期末考试是第一个出成绩的,当时普通班挂了一大片,我则拿了98分的好成绩。那门课的老师出成绩后跟我说,我那2分应该是属于从严扣掉的了,我整张卷子答得很好,他还说他特别欣赏我这种考完试还关心错在哪里的学生,说以后学习生活上有什么困难都可以去找他。

正是这次成绩刺激到了我,让我认识到并不是所有人都跟我一样的,有相当一部分人根本就不听课。因为我无非就是每节课认真听讲、按时上课、不早退、按时交作业、不抄袭,考前简单看了看书、考试的时候维持着一个稳定的心态。说起这门课的考试,我当时记得有道10分的大题我是怎么也搞不出来,根据高中惨痛的经验教训,我果断跳了过去,之后淡定地再回来做,当时还有些小紧张呢。监考老师不知道为什么老在我身边转悠,还不止一次的把我的证件拿起来仔细端详——后来我知道了,可能是我当时做的比较好、而且别人都卡住的时候我还按时做完了。

冠群、楷哥他们两个班是第二学期才开这门课的,居然很多人都挂了,包括我特别看好的同学曹老师——后来他只得退班了,最近两年一直没什么联系,据说后来是工作了。

我们学院还开了一个专业导论课,是我们学院上下两届本硕博班一起上的,于是我有机会认识上一届的学长和学院这帮老师们。第一节课下课后,我在教室里坐着等食堂人少一点儿再去吃午饭,教室里还有睿恒和一个学长凯成,于是我们跟学长聊起来,我便认识了他。再到后来寒假一起参加数学建模,我就又认识了晶阳学长等等。导论课内容还是比较有趣的,至少我大概知道学院都是在干些啥的了,我之前到处听讲座积累的知识面这时候发挥了作用,它们帮助我很快地接受了这些新的东西。不过当时好像只有我在认真听这个课…… 当时我还在犹豫是不是转学去滑铁卢大学读计算机,所以这门课也对我用处很大。

第一周很快就过去了,第二周就是十一黄金周了,于是我抽空回家玩了玩。据说冠群同学一个假期把整本高代给啃完了,十一回来以后我一听说就感到了压力山大啊!

第三周开始我们要开始上解析几何课了,是柱哥教。他是板书、幻灯混合大神,每次推导的时候都会好好板书,两个黑板上下换来换去的。忘了说了,按照本硕博的设计目标,我们的数学基础课是跟数学系相同标准的,我们院本硕博的物理基础课跟物理系也是相同标准的,所以我们证明做了很多很多,想当一些人说这些东西没用——但是现在看来,这些证明训练了我们的逻辑思维能力和严谨的态度,至少对于我是这样的。

柱哥非常敬业,我们当时在良乡,老师们上课都是要从市区坐班车过去,讲完课以后还要赶班车回市区。每次课后我们去找柱哥问问题,他总是不会打断我们,耐心地用黑板给我们解答完所有的问题,又一次甚至讲了整整一小节的时间,然后他自然是每次都赶不上班车了,但是他从来都不会说什么,甚至我们都不知道——直到后来我们专业课的老师拒绝回答问题我们才知道。

第一次解析几何课上,我们几个同学照例抓住宝贵的课间休息时间去找老师问问题,我观察到每次都会有个小个子的同学凑过来听一听,有时候还会参与一些比较有价值的观点、提一些有深度的问题,他就是楷哥,来自安工本硕博班,重庆江津人。这个人在我印象中总是一副卡通人物形象出现,有时候还偶尔卖个萌,每天都很开朗。我们前两年聊学术问题聊得不太多,毕竟有冠群在;后两年我们联系比较密切,有时候我会拉着他出来自习、拉着他去找外教练口语,上数值分析的时候还组队上去展示,他上魔电(模电)的时候我在考前给他讲过静态工作点的分析方法,我在国外的时候我们经常聊一些生活上的话题。可以他是我大学生活中最重要的朋友之一了。

外教课这时候也出现了,第一次课上老师问谁出过国,结果全班就我一个人出国(其实也就是那个假期,以前也没出过),后来在另一个高中同学Stanley的提示下,每周找外教练口语,后来还选了他夫人的选修课,在他家做过饼干,交换在国外的时候他们还曾经邀请过我去他们家。前几天听说他们下个学期要去越南教英语了,希望以后还能再见吧。他说他依然记得我在班上是非常“闪耀”、“聪颖”的学生,是他在我们班唯一一个两个学期都是A的学生。

就写到这里吧,四年的回忆怎么可能一下就写完呢?等我连载吧,要是有啥补充的,可以在原始链接下面评论、留言。

(未完待续)

07/07

7月1日,我从北理工毕业了。

从毕业前鸡飞狗跳地赶毕业论文,到眼巴巴地看着好友们一个个毕业旅行归来,再到毕业前拍照的喧嚣、毕业后送同学回家的感伤,3天过去了,一切似乎都回归了平静。

四年里,我没怎么回过家,不论在良乡还是魏公村,不论在国内还是在国外,我的大部分时间都是在学校跟这些同学们度过的。这或许就是为什么我交换项目一结束就跑回来、在家里没呆几天就发了疯地蹿回了学校的原因。

其实我早已筹划过大学最后这几个月应该怎么度过,可惜事非人愿。首先,我没有当年上课的感觉了,我们的研教自习小分队5个人中有3个人都在实验室有工位,我们常去的研教5层也早已被封闭拆除;最开始的几周,我总是在熟悉的教学楼里看着一群不认识的人有心无心地思考毕业设计的事情。后来,我的校内挂靠导师给我找到了一个工位让我能够有一个稳定的环境完成毕业设计。

经历了教务处、学院几次三番五次地提前查重稿截止日期后,我及时赶出来了毕业设计论文。原计划跟最要好的朋友楷哥出去玩的,然而他似乎之前玩儿得太多了,毕业设计最后这段时间特别忙,不管是长途、中途、短途旅行,还是说出来吃顿饭的时间都没有。我们只好在每周找外教练口语的时候才有机会见个面聊聊天。

跟家人出去玩儿了一趟,回来以后继续修改论文、准备毕业答辩。6月初,答辩完成了,我想我所有的事情都解决了,等着朋友们答辩完之后出去旅行。班里的毕业旅行组织不起来,因为人太少了(现在想想其实完全可以几个班一块儿搞)。原来计划要出去玩的几个同学要么忙着班里的旅行、要么就是还有社会工作,总之最后什么都没有做。

这段时间里,我通过跟研教小分队的龙儿同学一块儿去教室“自习”来消磨最后这点儿仅存的时光。小分队的同学还出去游了两次泳,我们找到了新的娱乐方式。忙碌了四年的我还跟班里同学在楼道里看了一次世界杯比赛。

一些美好的东西总有结束的时候,正当我终于把这一切弄得越来越有趣的时候,毕业的时间终于到了。

毕业典礼结束的第二天,我就送走了楷哥。我认识楷哥四年了,他乐观阳光的态度经常能够激励我,可惜这一别再见就是明年了。第三天,我领到了毕业证、学位证,告别了老邓、翔哥。第四天,我收拾了我所有的东西,坐上了回家的公交车。

吃了顿晚饭,我又想跑回学校参与龙儿跟飞哥的台球娱乐,可惜公交车抛锚了,我到的时候他们结束了。到了那栋熟悉的宿舍楼,看到楼道里大家搬走时遗弃的东西,一切记忆都变成了永恒。我最终没有坐最后一班回家的公交车,而是在龙儿的室友清空的床位上住了一夜。我从我们班的一个宿舍找到了当年运动会做标牌剩下的瓦楞纸板作为床垫,用了我们班一个同学遗弃的蚊帐、龙儿室友遗弃的风扇、我遗弃的枕头。最后一夜,我回想着这四年的点点滴滴,居然醒了很多次。

第五天,我送走了龙儿。

本科四年生活就这样匆匆过去了,尽管我们还有说好了的毕业旅行没有去,尽管我跟楷哥还有“去哪儿玩儿我定”的约定,尽管我们研教小分队还说好了再游一次泳、再合一次影,尽管我还计划跟冠群再去一次良乡校区图书馆一起自习一次,尽管我还没跟龙儿一块儿看完那部美剧,尽管我还计划坐下来好好听听楷哥、冠群、祥哥这些朋友们好好讲讲我不在的这一年他们的故事,尽管北京城里还有很多好玩儿的地方我没有带他们去过,尽管……

我怀念,是因为我怀念这些一同奋斗了四年的朋友和我们打拼下来的熟悉的环境。不圆满的句号既是终点,也是起点。

06/27

手机上的倒计时提醒着我:距离毕业只剩下几天了,距离新的学期也不足两个月了。

四年前,也大约是这个时间,我就曾经来过中关村南大街5号的北京理工大学,看一看这所我未来将要上的大学究竟是什么样,最后决定报到、复读还是出国。那时,我还是刚刚拿到高考成绩,血气方刚,已经料想到自己的成绩录取我的第一志愿专业板上钉钉,此时的主动权在我手中。炎炎夏日,我在国家图书馆登上了特8路。只记得这个学校特别不好找,校园里脏乱差,设施特别破,标识混乱。我竟然相信了中心教学楼里面那个楼层标示牌,在那栋楼里撞来撞去。

几个月后,我还是决定来这里看看,至少先待一个学期,等有学上了再转学出去。报到那一天,我跟着我的高中同学大黄在家长的护送下,直奔北京市房山区良乡镇的北理工良乡校区。迎新自然一切都很美好,我认识了上一届实验班的理辰学长,也为信息工程这一大堆乱七八糟的分支感到纠结。室友略有些低于我的期望,可能是高中住校的缘故吧,当时觉得会挂科退回普通班的人最后都没挂,反倒是觉得靠谱的人最后挂了。因为当时没有打算真的在北理读下去,所以报到的时候也就没有拍照留念。

按照《兵役法》,我们必须参加军事训练。我在高中的时候有幸在军营里货真价实地训了一把,所以对这个军训真是一点儿兴趣也没有。报到之前,在QQ群里就听说军训宣传部门每年都会招募一些非线编辑人员;体检完了以后,我在教学楼里闲逛,搭讪认识了同听说这个事情的宏伟,于是我们一拍即合,互通有无。没想到我最后入选了,而他虽然没有入选,但却与我在另一个社团共事了。

说起军训,当时我们开一个大会跟辅导员和军训的指导员见面,因为两个教学楼名字很像,我们宿舍几个人过去找不到地方,然后就随便问了一个路人甲——于是我就结识了阳光辅导员昊哥,虽然当时只是因为他是软件、计算机专业的辅导员,但是他在后来给了我很大的帮助。我们开了很多很多的会,有的是介绍学院的、有的是介绍本硕博班制度的、有的是介绍辅导员和军训指导员的,已经都记不清了。

报到的第一天晚上,我拉着另一个北京的同学帆哥串寝,我们每进一个宿舍介绍一下自己,然后也让同学自我介绍一下,结果我们串寝队伍人数越来越多,最后我和帆哥总共自我介绍了不下七八遍!然后我们突然才想起来把所有人拉到大厅里围个圈圈自我介绍的办法。记得问题主要是自我介绍、个人兴趣、喜欢的运动、有什么打算,我跟帆哥开头说了不少,包括羽毛球什么的,结果到后面就都是“我就喜欢学习”这样的答案了,唯独有一个“我想要当官”的小坤给我的印象最深。

北京生源地的学生恐怕没有什么老乡会这一说,老家那边的同乡会当时也没有信息——其实应该参加一下的。于是,我们一帮高中同学就互相闲侃,消磨时光。

  • 跟同学讨论聚餐)我就打算开学再去了。我现在还有点酒精中毒的样子,意识还有点模糊……等我好受点再聊吧……现在浑身痉挛……
  • 激活学校发的银行卡)欢迎使用××银行网上个人银行专业版,请登录下载专业版并安装激活,激活授权码见申请回执,请妥善保存,切莫告知他人。[××银行]
  • 我去北理啊...你觉得还能去哪啊...?应该是去信息工程...我还没想好呢...还得再考虑考虑...
  • 没…我也想要有意思的事情…他们聊我被孤立~呃我还没找着北京的呢
  • 班主任通知开第一次会)九点半,体检后在校医院门口集合,请转告别的同学!
  • 给高中班主任说一说现在的情况)好孩子啊~好好学习,心态要好,将来的结果跟学校如何没有绝对关系,主要还看自己的本事…加油!
  • 怪不得高中不让用电~刚洗澡去了一个人都没有,因为他们打疫苗北京的不用~
  • 不是跟你说了...我们要排练晚会内容...然后就不用去了...还能拿到90多分的成绩啊~哦哈哈哈~
  • 体检先交费,105,大家速度;12:45图书馆旁广场集合领军装,互相提醒
  • 宏伟告诉我军训宣传部门招募信息)我是宏伟,13点去综合教学楼205教室(学生电视中心)。以后多多联系!
  • 认识了阳光辅导员昊哥)好的,以后多沟通:)
  • 跟军训指导员搭讪)你好,头发长度不要超过你的手指直径宽度 。衣服晚上六点半可以补领
  • 给辅导员反映附近建筑噪音的问题)好的,先转告大家克服一下,霍老师
  • 入选军训宣传部门)这里是电视中心编辑部,恭喜你入选北京理工大学学生电视中心,并成为其中的精英加入本学期军训摄制组,我们将于今日起(29日)进行集体培训,地点为良A205(今天面试地点),时间晚8点,请尽量带电脑。收到请回复。
  • 吐槽——他后来出国了,这也是我三年后在国外才知道)传祺:成都的大学太差了!
  • 老白赴美了——三年后我居然阴差阳错的去了他们学校交换)委座电,明日正午赴美,此号保留,欢迎校内、邮箱联系,各位珍重!特封你为党国北平站电讯处处长,兼良乡乡长,好好干!
  • 北大的同学吐槽课表)数分,高代,力学,电磁学,计算基础,程序设计……
  • 晨:通知:从今天开始你们正式被北京理工大学指挥部征调,理论课及考试必须正常上,其实时间归指挥部统一调配,今天中午十一点五十必须在指挥部集合(图书馆后门进入)
  • 军训初期
    • ——呃……宿舍一人看上一个女的……还有一帮人在聊游戏,你说我咋办?他们商量要四点起来……
    • ——这就是典型的欠练…过两天觉得没这精神头了~你让他们悠着点
  • 喔……你什么专业来着?我在弄托福……想一起背单词吗?
  • 班主任:各位同学好!我中午时会到你们宿舍收一下材料,请大家作好准备。请相关的同学准备以下三种材料:已收到的更改后的户口迁移卡、上次没有交的新生信息表、家庭经济情况调查表。谢谢!
  • 班主任:明天是大家离家进京求学后的第一个中秋节了,在这样一个团圆节日里,大家难免有独在异乡的感觉吧?不妨就把老师和身边的同学当成家人吧!老师祝你们的大学生涯象十五的月亮一样圆满!生活象月光一样绵长!心灵象秋天的夜空一样深邃宁静!别忘了跟家人通个电话,休息外出时注意安全!

军训尾声中有一次中秋节,有的同学约着去街上、城里转一转。我本来打算回家的,结果被家长斥为不思进取、没有独立生活能力,只好自己在良乡大学城那几个学校附近走走转转,去了那个奇葩的良乡镇公交车站。这便是我大学四年的前奏。

(未完待续)