Skip to content

Lesson 0 环境搭建

Ryannnnnnn edited this page Sep 26, 2014 · 11 revisions

一、基本环境搭建

1.1 建议环境:
  • 实体机装一个Ubuntu(推荐), Ubuntu虚拟机 or Wubi Ubuntu镜像 (建议)(wubi就是个逗,不建议)。注:需要使用虚拟机可以在Fudan mvls平台下载VMWare
  • 建议Editor:Vim, 安装 (建议)
  • Git中文简单手册 安装Git (必须)
  • 建议调试方法: 不要用调试器 通过输出信息来调试 (建议)
  • 建议编译方法: gcc HelloWord.c or g++ HelloWord.cpp (建议)
1.2 其他环境:

你要是大神的话,可以无视上面建议,请随意使用任何方法配置自己的环境,只要你可以把作业最终提交到这个仓库,只要你能Getting Things Done.

1.3 Why not Windows? Why Ubuntu?
  • TA可能会写评分脚本,或者给你们写测试工具,在Linux上使用自然,而Windows上使用不那么方便(可能需要借助msyscygwinGnuWinBatsh等工具)
  • Ubuntu是Linux比较流行的一个分支
  • Windows不是很好的学习环境,其他课程(比如Operating System)也会用到Ubuntu(严格说是Linux Kernel)的;到了具体的生产环境,或多或少也都需要接触到Linux。
  • 如果你想学习Linux的话,建议尝试ArchlinuxGentoo,甚至LFS。但是么,这是神坑,非学有余力且有兴趣者,就算了吧。

二、如何使用Github (必须)

2.1 Why Github?
  1. Git是目前业界最流行的VCS(版本控制系统)之一,具有去中心化,blabla,blabla等优点,并且还是Linus Torvalds为了管理Linux Kernel代码开发的,作为脑残粉。。(大雾
  2. Github是非常一个非常流行的使用Git作为版本管理系统的代码托管网站,提供了非常多方便的功能,托管了非常多非常流行的开源软件
  3. 代码提交方便
  4. Peer Accessment. 需要用它的代码评论功能,大家互相Review代码,互相学习
  5. Wiki信息发布平台+ Issues一个小型论坛了。 课程问题可以在上面提
2.2 约定(操作示例可见2.3,Git的使用参见2.4中所列资源)
  • 每个同学在codebase根目录下,以自己学号创建目录(例:mkdir 11300240057),只允许操作该目录,否则TA将不会把它Merge到主干
  • 在每个同学自己的根目录(113000240057/)下按照题目布置时的标题创建目录,如mkdir assignment0
  • assignment*目录下包含src/testcase/两个目录,分别包含你的源码和你自己构造的测试数据
  • 测试数据的文件名最好能够体现出数据特征,如:测试边界条件的数据可以使用boundary_0.txt作为文件名

这么约定的目的有两个:

  1. 目录结构清晰,不会造成冲突
  2. 方便评分脚本,测试工具脚本的使用
2.3 本课程中的使用
  1. https://github.com/ 登录注册一个账号
  2. 到我们课程仓库https://github.com/ds-sww/codebase 去fork一份到你的仓库。(戳一下右上角的Fork按钮即可)
  3. 把仓库拉到本地,编写代码,并把改动Push到你Fork的仓库。(代码见下)
  4. 接下来需要创建一个pull-requests,让管理员来Merge(请戳 右边导航 -> Pull Request -> Create Pull Request)
  5. 等待管理员Code Review及Merge. 可以到这里去查看其他人对你的pull request的评论;同时查看其他人提交的代码,若对代码有疑问或修改建议的,请戳那行代码,并留言!
  6. Create Issue. 在课程仓库的右边导航 -> Issues,这里相当于一个论坛,大家可以在这上面提问题,讨论 etc.

下面是步骤3的示例:

# Step 3's Code Snippet

cd ~
mkdir DataStructure                                        # Some place for your repo
cd DataStructure

git clone https://github.com/{your username}/codebase.git  # Clone your repo to local

mkdir -p 11300240057/assignment0                           # Make your own project directory
cd 11300240057/assignment0

vim HelloWorld.cpp                                         # Edit HellWorld.cpp

git status                                                 # Make sure your changes are correct
git add .                                                  # Add all changes to snapshot
git commit -am "assignment0 commit by 11300240057"         # Commit it
git push origin master                                     # Push to your own repository
2.4 Git的一些学习资源

三、Advanced:配置你的vim环境 (Optional)

3.1 把Vim配置成简单IDE(建议)

为了使用ssh递归下载子模块(而不需要一直输入账号密码),我们必须:

  1. 生成SSH KEY 为了能够顺利执行以下命令。
  2. 可以参见 https://github.com/Ryannnnnnn/.vim ,来配置自己的vim
3.2 Why Vim or Why not other editor?
  • 我们需要理解IDE为我们做了什么。IDE为我们屏蔽了具体的细节,而我们需要了解细节。所以要用editor 不用 IDE.
  • IDE适用大型项目,有很多不需要的功能。为什么要忍受IDE(如Visual Studio)带来的电脑性能压力。
  • Vim 小而快,而且够用。
  • 和Ubuntu一样, Vim大家最终都是要会用的
  • Vim 比其他Editor 好用(个人观点) Emacs党表示不服

路人甲:不要说得这么恐怖嘛,在Linux里面还可以选择ed, nano, Gedit, Sublime(配置起来比较蛋疼?)等


四、评分说明

4.1 发布Assignment可能的形式
  1. TA发布题目到Wiki
  2. 题目通常会给出TA的baseline测试数据,通常会要求大家写出solution,同时构造测试数据。
  3. 根据题目复杂度1~2周内,同学们提交pull-request. 这期间互相code review. TA会尽量Review大家代码。
  4. 在deadline之后,TA Merge大家pull-request, baseline数据+同学们构造的测试数据,对大家的代码进行评测。 评分
  5. 在Wiki上公布结果,推荐分享优秀代码
  6. Review其他人构造的优秀数据和代码
4.2 评分规则
  1. 构造测试数据正确性和fail掉的其他人的程序数
  2. 代码的正确性和美观程度 (待议)

五、工具 Tools (待完善)

5.1 runTest.sh(待完善)

功能: 运行TA准备的测试数据和自己的测试数据

example

Chenweidongs-MacBook-Pro:tools whimsy$ runTest 11300240057 assignment0 Add
./11300240057/assignment0/testcase/Add_large.in [AC]
./11300240057/assignment0/testcase/Add_small.in [AC]
./11300240057/assignment0/testcase/Add_wrongCase.in [WA]
./TA/assignment0/testcase/Add_normal.in [AC]

How to :

Step One: TA/tools/runTesth.sh 修改根路径Root
Step Two: alias runTest='${ROOT}/TA/tools/runTest.sh' ( need to replace ROOT with actual value)