Bojie Li
2014-12-18
One afternoon in May 2013, Room 5005 of the Physics and Chemistry Building. I was holding Senior He Yu’s phone, calling Lu Yuanwei, who was in a joint training program at MSRA. Maybe I was too nervous; after the call, both the screen and my hand were covered in sweat. A few days earlier, I received a notification: I was admitted to the MSRA joint training program. I replied that I was working on a startup project and might not have time to go. Microsoft urged me to make a decision quickly. I originally wanted to decline on my own, but I thought I should listen to Boss He’s opinion.
Background: The joint training program between USTC and MSRA opens for applications every April. After resume screening and interviews, about 18 people are admitted. They intern at MSRA for their senior year, and their thesis is also done at MSRA. Among these 18 spots, 14 are for those who will continue their studies domestically, and the remaining 4 are for those going abroad or seeking employment. After two months of internship, around early September, about 7 out of the 14 will be selected to stay for a Ph.D., while the rest return to school for their master’s. The so-called joint training Ph.D. means the first year is spent taking classes at USTC, and the next four years are spent doing research at MSRA, ultimately earning a degree from USTC (so we are genuine USTC graduate students, not trainees).
Both Lu Yuanwei and Senior He Yu said it was a good opportunity and suggested I consider it carefully. I thought I would intern for a summer first, see how it goes, and then decide.
At that time, I was deeply influenced by the culture of Linux and free software and had quite a few prejudices against Microsoft. When HR called to confirm my “start date,” I asked why it was called “start date.” Only then did I realize I was going as an intern for joint training, and it felt awkward to become an employee of a company I didn’t like at the time.
2014-12-12
Here is an old article: reading notes written in June 2012 (original link). These notes were written for my own reference, and they contain many of my own ideas, which may mislead readers. However, the article is too long, and I don’t have time to revise it. Feel free to criticize.
Recently (in the first half of 2012), under the recommendation of Jiahua Guo, I read the book “The Self-Cultivation of Programmers - Linking, Loading, and Libraries” from the LUG library, and I felt like I had found a treasure. However, the final exams are approaching, and I don’t have time to finish the whole book, so I only wrote a part of it.
There are two ways to build software: one is to make it so simple that there are obviously no defects, and the other is to make it so complicated that there are no obvious defects; the former is much more difficult.——Hoare in the Turing Award speech “The Emperor’s Old Clothes”
2014-12-10
Note: On November 21, 2014, I shared some of my insights on virtualization technology at the Alibaba Tech Club’s Virtualization Technology Exchange and “USTC Cloud 3.0” launch event. After organizing and supplementing, I discuss with you. (Long text, enter with caution)
Everyone is familiar with virtualization technology, most of us have used virtual machine software such as VMWare, VirtualBox. Some people think that virtualization technology has only become popular in recent years with the trend of cloud computing, and ten years ago it was just a toy for desktop users to test other operating systems. Not really. As long as multiple tasks are running on the computer at the same time, there will be a demand for task isolation, and virtualization is the technology that makes each task appear to monopolize the entire computer and isolate the impact between tasks. As early as the 1960s when computers were still huge, virtualization technology began to develop.
IBM 7044
2014-11-28
Translator’s note: Jennifer Rexford is a professor at Princeton University and a leading figure in the field of network research. She gave a talk to new graduate students in the field of engineering in 2010: Advice for New Graduates.
Those who know me know that I have a hobby of collecting famous quotes. A sentence explains the story behind this: famous quotes are short and portable, which is a suitable hobby for me who often moved when I was a child. Two famous scientists from Princeton in the 1930s, Einstein and Thomas Lewis, made interesting and somewhat opposing comments on the role of the “individual”.
Einstein in the field of physics said: “All valuable things in human society depend on the opportunity for individual development.”
Thomas Lewis in the field of pharmacology and biology said, “In fact, there is no such thing as a single individual; his own life is not much more than a cell torn from the surface of the skin.”
These two quotes summarize well what graduate students do.
2014-11-25
Many people are confused about the difference between these two sets of concepts. Let’s use the example of Xiao Ming downloading a file.
- Synchronous Blocking: Xiao Ming keeps staring at the download progress bar until it reaches 100%.
- Synchronous Non-blocking: After Xiao Ming starts the download, he goes to do other things, occasionally glancing at the progress bar. When it reaches 100%, the download is complete.
- Asynchronous Blocking: Xiao Ming switches to a software that notifies him when the download is complete. However, he still waits for the “ding” sound (which seems silly, doesn’t it?)
- Asynchronous Non-blocking: Still using the software that “dings” when the download is complete, Xiao Ming starts the download and then goes to do other things. When he hears the “ding”, he knows the download is complete.
In other words, synchronous/asynchronous refers to the notification method of the download software, or the API being called. Blocking/non-blocking refers to Xiao Ming’s waiting method, or the API caller’s waiting method.
2014-11-20
Why does a C program need to be compiled before it can be executed? Why does a C program need to go through the four steps of preprocessing, compiling, assembling, and linking to become an executable file? Let’s start with this simple C program.
Why Compile
This is not a simple question. We know that Python code does not need to be “compiled”, and you can run the result by entering a line of code, which is very user-friendly, isn’t it! This interactive runtime environment is called REPL (Read-Evaluate-Print-Loop), which reads the user’s input statement, executes the statement, outputs the value of the statement, and then returns to the waiting input state.
2014-11-19
On September 19, 2014, at 22:30, I was dragging a suitcase half my weight, walking alone under the mottled tree shadows in the west district of USTC. Just a few hours ago, I was studying the knapsack problem: how to bring back as many valuable things as possible under the constraint of backpack volume.
At that time, only a few people knew I was back: the boss and colleagues in the group, my parents, and Zhang Jingning. Just a few days ago, the LUG buddies were still discussing whether I would come back in October: because I messed up the mirrors server, I still owe everyone a meal!
This was the original beginning of the life summary written on October 20, “Escape from the Activity Room“. But I felt it was inappropriate, so I changed it to “Escape from Microsoft”. At the beginning of this month, I changed my Renren cover photo to the staff group photo of SFD on September 20, just to commemorate the beginning of this year’s new life.
2014-11-09
When we mention Ken Thompson, the first thing that comes to mind is the UNIX operating system he invented. For this, he won the Turing Award in 1984. In his Turing Award speech, Ken Thompson raised a profound question: Does seeing the source code of software mean there are no backdoors? Could there be self-replicating backdoors in compilers?
This paper published in “ACM Communications” is only three pages long and omits many details. The principle is a bit like a C program that outputs its own code, but it’s much more difficult. Following in the footsteps of the sages, I inserted a self-replicating backdoor into an open-source C compiler—tcc. This compiler, with the backdoor, will automatically insert a backdoor when compiling the source code of the Linux login program sulogin.
2014-11-05
The day before yesterday, my classmate Zhang Qingyu told me that it’s best to use Wi-Fi and turn off the 3G network when Wi-Fi is available, which can save a lot of power. Does 3G really consume more power than Wi-Fi? I looked up the literature and found that it is indeed the case. When the data to be transmitted is less, the difference in power consumption can be as much as 10 times.
Blue line: 3G power consumption; Green line: wifi power consumption; Purple line: power consumption considering wifi scanning and establishing connection (Source: TailEnder)
The reasons are mainly two-fold:
- After the 3G network completes data transmission, it needs to maintain a high power state for a period of time;
- The transmission power of the 3G network is much greater than that of the Wi-Fi network.
2014-10-29
All active members of LUG will sooner or later be attracted to the circle of coders.
The origin and truth of this rumor are not considered for the time being. Whether it is the atmosphere of LUG that leads the buddies to the road of coders, or those who are determined to take the road of coders will be active in LUG for a long time, I can’t tell.
Why choose computer science major, in fact, is two propositions:
- Why choose computer as a future career?
- Why choose computer science major during undergraduate?
I try to interpret these two propositions with my own experience. In my youth, I once regarded scientist as my dream. In the third year of high school, I thought about doing theoretical computer research. At the juncture of freshman to sophomore, I once hesitated between mathematics and computer science, and even considered studying physics. Because I couldn’t figure it out, I didn’t apply for a change of major in the second semester of my freshman year. A week after the start of the second semester of sophomore year, I felt that I couldn’t continue to be chaotic, so I submitted an application for a change of major. From the second week, I embarked on the road of no return to coders.