This 1-credit seminar is designed to teach the essentials of using a
computer effectively for EECS students. While the target audience is CS/CE
students, any student wishing to learn how to use their computer much more
effectively is encouraged to join. Topics covered include shells, environment,
scripting, Makefiles, compilers, debugging tools, and version control. The
last month of the course will be open to student input for remaining useful
topics to cover.
Students will be expected to install Linux on their own computers for this
course; CAEN computers will not be sufficient. (Don't worry, we'll teach you
how :) )
This course is a pass/fail course. The most important element will be
attendance in class. There are 13 required lectures (week before spring break is
optional). Missing more than 3 lectures will result in automatic failure of the
course.
There are 12 homeworks in the course. Homework is due by the
beginning of lecture the week after it is assigned. Homeworks will be
graded on a {0,1,2} scale:
A passing grade will require at least 18 total homework points (e.g. 6 1's and 6
2's). The homeworks are designed as practice exercises to reinforce concepts
covered in lecture, they will not be very difficult.
There is no final exam for this course.
| Date | Topic | Homework |
Week 1 |
Jan 11 |
Intro to Linux, distributions, etc |
- Install Linux on a personal PC
|
Week 2 |
Jan 18 |
Shells and environment, basic scripting
- bash
- $HOME, $PATH, etc
- history, Ctrl-R, etc
- .bashrc, alias, export
- shell variables and functions
- basic flow control
|
- Add class homework directory to your PATH
- Source our environment (in hw2/env.rc)
- Build a run_tests.sh (using hw2/tests/)
|
Week 3 |
Jan 25 |
File systems, permissions, AFS, SSH, Kerberos
- ntfs vs extN vs hfs+ vs fat32
- vs afs
- permissions + tools
- ssh - keygen, authorized_keys, etc
|
- Figure out what filesystem(s) are in use on your
machine
- Install AFS on your machine
- Set up SSH keys with class server
|
Week 4 |
Feb 1 |
Unix tools, advanced shell scripting, basic RegEx's
- cat, head, tail, less, more, |
- shell jobs
- grep, sort, uniq, regex's, (awk, sed)
|
- Advanced "run_tests.sh"
- Process the hw/data into human-readable format
|
Week 5 |
Feb 8 |
Effective use of text editors
- .vimrc
- s/foo/bar/
- navigation
- buffers
- :make
|
- Customize your editor's configuration file
- List the commands to open/edit/save/quit in...
- vi
- emacs
- nano
- pico
- EC: sed and ed
|
Week 6 |
Feb 15 |
Makefiles
- targets, dependencies, and rules
- implicit rules
- variables (default and otherwise)
- specials (PHONY, NOTPARALLEL, etc)
- recursive make
- Adding testbenches to Makefiles
|
- Write a Makefile for any current EECS course
- Write a Makefile hw/make_recursive/
- EC: Write the smallest Makefile possible for hw/make_challenge
|
Week 7 |
Feb 22 |
Debugging tools (gdb, valgrind)
- Compilation flags (with a quck touch on object files)
- breakpoints, watchpoints
- instruction/function stepping
- backtraces and debugging with them
- OPT: Multithreaded debugging
- gdb vs valgrind?
- how to use valgrind effectively (suppression, useful flags, instrumentation macros)
- and... the judicious printf (#define DBG and other tricks)
|
- Use gdb to fix the errors in hw/debugging/gdb
- Use valgrind to fix the errors in hw/debugging/valgrind
|
Week 8 |
Mar 1 |
Optional Lecture: Something really cool |
|
Spring Break |
Week 9 |
Mar 15 |
Revision Control -- centralized (svn)
- What is revision control?
- What does 'centralized' mean?
- Histroy, branching, merging
- Logs, blame
- Commit hooks
|
- Checkout and commit to our repositories (ssh,afs)
- Create a repository in your afs space, make sure the
group
ppannuto:298staff has access
|
Week 10 |
Mar 22 |
Revision Control -- decentralized (git)
- How is decentralized different?
- (Is it better? What's "better"?)
- git ideals - branch often, merges, cherry-picks
- branches in git, remotes, tracking
- pull vs fetch, push
- Commit hooks
|
- Checkout and commit to our repositories (ssh,afs)
- Create a repository in your afs space, make sure the group ppannuto:298staff has access
- EC: Submit a patch to the linux kernel (kernelnewbies.org)
|
Week 11 |
Mar 29 |
Compilers beyond gcc (clang, cross-compilers, static analyzers)
- Why?
- (embedded systems, smartphones,
bug-checking...)
- Why is this so hard?
- Limited user base, testing, etc
- Tips to make life less painful (combining previous materials)
- Remember all that environment talk from Week 2...?
- Then mix in some Makefile magic
- Plus automated testing
- Now add some commit hooks (post-commit background static analysis? Automated e-mail notifications, build-checking - Oh MY!)
|
- Install any compiler other than gcc for x86/x64
- Set up your Makefiles from last week to use this compiler
- EC: Have your Makefile check an environment variable to pick compilers
- EC: Show which bugs from hw/debugging/ could also have been found via static analysis
|
Week 12 |
Apr 5 |
Open: Guided by course interest |
|
Week 13 |
Apr 12 |
Open: Guided by course interest |
|
Week 14 |
Apr 19 |
Open: Guided by course interest |
- None: Good luck on exams!
|