Here is the helpdesk of the Concurrency and Parallelism Laboratory at KAIST School of Computing. We will try to answer your questions as far as we can!
If you have a question, please ask in this repository's issue tracker. Please ask questions on computing in general, laboratory, or anything you want to ask. We will try to answer your questions as detailed as possible.
We have expertise on Rust, Coq and formal verification, compiler, and concurrent programming.
-
To study Rust, we strongly recommend you to start with "the book". The entire book is worth reading. Read the book, implement some Rust code on your own, and ask any questions you've got to have.
-
To study Coq, we strongly recommend you to start with Software Foundations Volume 1: Logical Foundations. You can clone this mirror. Don't skip (too many) exercises---they are the essence of the book. You can learn how to install Coq and setup your IDE here.
-
To study compiler, we strongly recommend you to take KAIST CS420: Compiler Design.
-
To study concurrent programming, we strongly recommend you to take KAIST CS492: Concurrent Programming.
- Please first search the web and the issue tracker and see if your question is already answered. If not, ask your question in the issue tracker.
- Please describe your question as detailed and organized as possible.
- Don't ask the solutions to the exercises.
- Don't upload codes as images.
- Format your content using GitHub's Markdown manual.
- Especially pay attention to properly formatting
code
.
Your participation would be greatly appreciated. Please watch this repository, and if there are some questions you can answer, please do so. Your help will make the helpdesk much more scalable.
-
If you're interested in joining the Concurrency and Parallelism Laboratory as a graduate or undergraduate student, please CONTACT Jeehoon (
[email protected]
) NOW. Don't wait for some events to happen. Again, contact NOW. Otherwise, the opportunity may go to the other students. -
When you contact Jeehoon, he will ask you to introduce yourself. The introduction should at least contain:
-
The most interesting experience (computing wise) you've experienced in the past. It can be about course projects, research or industry experience, or anything related to computing. Please prepare for a Google Docs document that clearly describes the experience. Please give the document's comment access to
[email protected]
. -
What you want to do in the lab. Please read the lab website and study what's going on in this lab, and write down your plan as a Google Docs document. Please give the document's comment access to
[email protected]
. -
When you and Jeehoon can meet for 30 minutes online. Please look at Jeehoon's calendar for his schedule.
-
-
After sending an email to Jeehoon, please carefully read the entirety of this document. You also need to do all the action items, e.g., watching Derek's talks (see below). Make sure you finish doing so before joining this lab. Please let Jeehoon know about your progress.
-
If your email does not contain the above information, Jeehoon will reply to you with the following message:
안녕하세요, 강지훈입니다.
먼저 연구실에 관심 가져주셔서 감사합니다.
다음을 읽어주세요: https://github.com/kaist-cp/helpdesk/#advice-for-potential-lab-members
감사합니다. 강지훈 드림
-
Jeehoon will leave a few comments to your documents. Please address them or give counterarguments against them.
-
I require all new graduate students to finish at least one of the followings before joining the lab:
-
Homework assignments of KAIST CS420: Compiler Design. Lecture videos are uploaded to YouTube, and you can ask questions in the course repository's issue tracker.
-
Homework assignments of KAIST CS492: Concurrent Programming. Lecture videos are uploaded to YouTube, and you can ask questions in the course repository's issue tracker.
-
Software Foundations Volumes 1 and 2. You can ask questions in this repository's issue tracker.
So if you're interested in joining this lab as a graduate student, please start working on one of them.
Also, I recommend new undergraduate student interns to work on one of them, too.
-
"Research is what I am doing when I don't know what I am doing," Wernher von Braun
The defining characteristic of research is everything---from motivation to methods to evaluation to goal---is tentative: in the middle of doing research, you don't know what will be the end result. As a consequence, a researcher will suffer everyday from:
-
Failures. You don't know what you're doing, so you'll fail almost always. To deal with the frustration from such failures, you should be mentally tough enough to tolerate such frustration. If successful, from time to time you will be able to understand or design small things, which accumulate to a paper and a thesis.
-
Changing plans. You don't know what you're doing, so your goal will be changing as you make progress on your project. So any long-term plan is destined to be significantly revised. Thus you should think of the goal as a ever-moving target, the current version being just the best possible approximation of the actual end result. Your goal should be neither too concrete nor too abstract: if too concrete, it will not be resilient to the revision; if too abstract, it will not guide your research.
To get things done despite the fundamental uncertainty of research, this lab (ironically) aims to keep tangential uncertainty to the minimum. All uncertainty are not created equal. Some uncertainty, such as confusion on schedule or communication, is not beneficial for productivity. On the other hand, other uncertainty, such as unexplored design spaces, is the very definition of research. To be productive, we need to keep the former to the minimum and control the latter to the appropriate amount. (The meaning of "the appropriate amount" constitutes a researcher's character; at first, please follow Jeehoon's taste.)
To minimize the unnecessary uncertainty, this lab enforces a small number of rules on communication. Rules are good at minimizing confusions. For example, is it okay to mention someone in chatting applications during night time? People have vastly different opinion on this, possibly causing unnecessary tension among them, so we want to define whether it's acceptable or rude in a rule. (FYI, we allow night-time mentions, but you're required to react to them only in work hours.) On the other hand, rules are hard to follow if there are so many. So we want to keep the number of rules as low as possible.
-
Always, strongly prefer asynchronous communication: the receiver is not required to reply promptly. If you can say something asynchronously, please do it so as early as possible. For example, you want Jeehoon to review your document, please send it to him as soon as you finish writing it. Don't wait for the meeting time to come. Please address Jeehoon's comments as soon as possible, and when it's done, please notify him of the progress.
-
Even for asynchronous communication, try to reply within 12 hours.
-
Before asking for a synchronous meeting (face-to-face or online), write down a meeting agenda and share it. In the agenda, clearly state the purpose of meeting. It can be, but not limited to: (1) reporting the progress, (2) asking questions/opinions, or (3) just chatting. If you have multiple things to discuss, enumerate them at the beginning of a meeting for better planning of the meetings.
- If you don't send an agenda, the meeting is potentially going to be canceled.
- If the meeting is to discuss a document, please send it at least by 12 hours before the meeting so that the others can review it. Share it anyway even if you couldn't finish writing the document by the time, because the others need to start making comments on it.
-
At 10am and 3pm everyday, please leave about five sentences to the daily log about what you'll do and what you've done for the day.
-
Schedule at least one meeting for at least 15 minutes a week with Jeehoon. It can be about anything such as research, coursework, TA...
-
Make sure that no feedbacks or action items get ignored. More concretely, when you receive a feedback, address it or give a counterargument against it. When you're not capable of doing action items by their deadline, please say so as early as possible.
- If you're reliable on this, the others can depend on you to get things done. If you're unreliable and you miss feedbacks or action items, the others also need to track them, which causes great management cost.
-
Right after every meeting, write down and share action items in the corresponding Zulip topics (Team stream or DM). Example:
* pr #131 적정 단계에서 끊어서 마무리하겠습니다. * XX에 대해 정리하여 공유하겠습니다. * issue #124 검토하겠습니다.
-
Don't say yes (or no) if you're not sure about this. Don't say you understood something if you don't. If there are some points that you do not understand clearly during the discussion, ask as soon as possible.
-
Don't be angry or grumpy when the discussion is getting hotter. Hot discussion is absolutely necessary for research and any other creative works, but it's hot because different opinions are clashing. It should not be hot because different emotions are clashing.
-
Cleary distinguish what you cannot agree on and what is not important. Even if you don't agree with an argument, please faithfully treat and document it (esp. that you don't agree with it).
-
Try to be direct, top-to-bottom, and conclusion-first (e.g., not "A, so B, so C", but "C, because B, because A").
-
Read how to write papers and give talks by Dr. Derek Dreyer:
- How to write papers so people can read them, PLMW@POPL 2016
- How to give talks that people can follow, PLMW@POPL 2018
- How to write papers and give talks that people can follow, PLMW@ICFP 2017
-
When you summarize an existing paper or write a proposal for a new paper, organize your document using Derek's CGI model. An example: https://docs.google.com/document/d/1W8coma11JFp0JIaVqFnZYkEa0sBkgZ1ijTSh6j8c_Gw
When you first come to the lab, please do the following instructions:
- Create {firstname}.{lastname}@kaist.ac.kr email account.
- You can add "additional account" in mail.kaist.ac.kr > Settings > My Account > Additional account.
- If it is already taken, add a number at the end of the id, e.g., {firstname}.{lastname}[email protected]
- Send your email address and GitHub ID to [email protected].
- Your GitHub ID will be invited to
kaist-cp
organization. - You'll get {firstname}.{lastname}@cp.kaist.ac.kr Google Workspace account.
- You'll get a Zulip account. Log in with your Google Workspace account.
- Make sure you finish read the entirety of this document and did all the action items, and DM Jeehoon in Zulip that you did so.
-
Instant messaging service at https://cp-chat.kaist.ac.kr.
-
Zulip is also asynchronous by default, but it is semi-synchronous in work hours. Try to reply promptly (at most by 15 minutes) in work hours. (No need to even reply in other times.)
-
Use
{firstname}.{lastname}@kaist.ac.kr
email account for all work emails (not@cp.kaist.ac.kr
). -
Forward all
{firstname}.{lastname}@kaist.ac.kr
emails to{firstname}.{lastname}@cp.kaist.ac.kr
and check emails in Gmail. -
Configure the Gmail account to send from
{firstname}.{lastname}@kaist.ac.kr
.- Go to https://mail.kaist.ac.kr > Settings - enable SMTP.
- Go to Gmail > Settings > Click See all settings > Accounts > Click Add another email address > Add
{firstname}.{lastname}@kaist.ac.kr
and set it as the default address > Set Always reply from default address
-
Write proper formal emails. Do not markup emails.
- Use
{firstname}.{lastname}@cp.kaist.ac.kr
account for calendar and other Google Workspace applications. - If you want to have a meeting, just directly invite the others in Google Calendar. In the invitation, write the meeting agenda as described above.
- Put all project-related files to Google Drive.
- Write docs/spreadsheet documents and make slides using Google's tools.
- All work should be done in the
kaist-cp
organization. - Please write your name in your public profile (Settings > Profile > Name).
- If you want to create a new repository, ask Jeehoon.
- Configure notifications for mentions and issue/PR comments. It is usually configured in Zulip, but if not, please get email notification for them.
Create and maintain your website at https://cp.kaist.ac.kr/{firstname}.{lastname}
.
- Fork the website repository and clone it.
- Install dependent libraries and run a local server to test by following commands:
bash # Make sure Ruby is installed. $ bundle install $ bundle exec jekyll serve
- Add your meta information(name, status, github ID, etc.) to
people.yml
. - Make a new file
{firstname}.{lastname}.md
under the directory_people/
. - Write your concrete information on the
{firstname}.{lastname}.md
. I recommend you refer to_people/jeehoon.kang.md
. - Make a commit, push it and PR.
-
Use the following devices (IMPORTANT: no password should be written here. It's a public repository.):
-
WiFi:
kaist-cp
at Rm. 4441, Bldg. E3-1, KAIST -
Printer:
HP Color LaserJet Pro MFP M479fdw
;10.12.255.2
in the WiFi network; AirPrint protocol -
Server:
ssh -p<port> <google-workspace-id>@cp-service.kaist.ac.kr
(e.g.,ssh -p11001 [email protected]
)-
port: 11001, 11005, password: <google-workspace-password>
-
/kaist-cp-home/<google-workspace-id>
is the home directory, but it's network-mounted. Runsudo kaist-cp-refresh.sh
, then you'll have/local-home/<google-workspace-id>
in the local SSD. -
If you want to install additional packages, make a PR to this repository, and after the PR is merged, run
sudo kaist-cp-refresh.sh
.
-
-
Desktop: We encourage you to install the latest Ubuntu.
-
Configuring Hangul input method
-
Using Ibus (Ubuntu default) (NOT recommended. Use nimf instead.)
- Alt+F1 and search "Region & Language" > Input Sources > + > Korean > Korean (Hangul)
- Alt+F1 and search "Region & Language" > Input Sources > English (US) > Remove
- You can switch between Korean/English input method by pressing shift+space.
-
Using nimf
- In "Region & Language" > Input Sources, remove other input sources and leave English (US) only.
- To check if nimf is installed, run
nimf-settings
. If it's not installed, run/usr/bin/install-packages
. - Run
im-config -n nimf
and reboot. Ensure thatnimf
process is running. - Configure nimf with
nimf-settings
. In "XKB options > Korean Hangul/Hanja keys", set "Make right Alt a Hangul key". In "Nimf > Hotkeys for rotating input method engines", add "Hangul".
-
-
-
(If needed) Lab VPN
- You can access the network inside the lab by running
ssh -p11000 <google-workspace-id>@cp-lab.kaist.ac.kr
(e.g.,ssh -p11000 [email protected]
) - You can jump right into lab resources using
-J
(ProxyJump
) option. (e.g.,ssh -J [email protected]:11000 user@target-internal-ip
) - Since editors are not installed on the VPN instance, use
scp
to edit.ssh/authorized_keys
. (e.g.,scp -P11000 ~/.ssh/authorized_keys [email protected]:~/.ssh
)
- You can access the network inside the lab by running
-
- Make sure you know how to use Git. FYI, this tutorial is a good introduction.