This course covers command-line interfaces, UNIX, shell scripting, open-source tools (e.g. git, make), systems programming, compilers, security/encryption, Python programming, parallelism, faults, emacs, vim, C programming, and regex.
- Multiuser and multiprocess operating systems
- Unix File System
- Makefiles
- Pipelines and Redirection
- C compilation & Linking
Description of the following homeworks:
This project covers multiuser and multiprocess operating systems, GUI basics (e.g., X, Wayland, GNOME, KDE), CLI basics (e.g., Bash), Unix file system layout, device files, Unix permissions, Basic commands: ls; pwd, cd, mkdir, rmdir; echo, cat; cp, mv, ln, rm; chmod, kill, ps, man pages, emacs basics, basic editing, directory editing, running shell commands, building programs, and Emacs Lisp.
This project covers unix wildcards, basic regular expressions, more advanced commands (e.g., grep, find), pipelines and redirection, simple shell scripting, and interpreted languages
This project covers the basics of Python, Java as a compromise between interpreted and compiled languages, and how to build our source code using make
, automake
, and autoconf
.
This project covers the basics of Makefiles, diff
and patch
, retrieving a package to build and install, basic version control (Git, Subversion), committing a change
and dealing with merge conflicts.
This project covers the C compilation and linking process, an introduction to C, debuggers and debugging tools (GDB, Valgrind, strace).
This project covers C and system programming and Library calls vs. system calls.
This project covers ways in which a program can go wrong, buffer overruns, and techniques for avoiding them.
This project covers threats (including eavesdropping, tampering, forgery, and denial of service), authentication, authorization, accounting Chains of Trust, firewalls, kernels, sandboxes, intrusion detection, backups, and security policies.
This project covers commits branching and merging, rebasing branching workflows, searching, advanced merging and conflict resolution, remote branches, submodules, and git internals
This project covers trends in computing research and development. This topic covers how machine learning software has helped to predict the occurences of earthquakes. This algorithm uses decision trees to examine how much strain is being up on the Earth's crust.