# Class Requirements
- attend class
- contribute to the discussion
- present a paper
- write [blog](http://dss.kelehers.me/blog.rb) entries
- build massive and awesome projects in Go

# Grading
- Projects: 65%
  - There will six projects, each with a two-three week time window.
  - P1 10%, rest 11%
  - All projects must get at least half credit to pass the course.
- Paper presentation: 5%
- Blog entries: 10%
  - You are required to upload a blog entry before each class except the first. More details in class.
- Midterm/Final: 20%


# Projects
1. User-level in-memory FS
    1. no permanence
    2. http interface for directory nav and photos
    3. fuse for mac 
        1. git clone https://github.com/bazil/fuse
        2. git log --since=2019-12-01 --until=2019-12-31
        3. git checkout 426713be6d4814ddb9291ff191b4714ad3bd0b99

2. FS permanence
    1. reading and writing to/from a log of hashes
        1. files/directories are protobuf of same object, named by hash of protobuf
            1. date, block/file children, creating replica ID
        2. files divided into blocks, named by hash of data

3. Log synchronization
    1. pages (both recipes and  sync’d by merkel tree
        1. log head also propagated
    2. gRPC

4. shared log via raft
    1. client interfaces
        1. put(block)
        2. consume(consumerHandler(indexFirstBlock, [blocks]))
            1. test by spewing from consumerHandler

5. High-Level abstractions from shared logs

6. Transactions from shared logs

	
# Things of Note

- [Piazza](https://piazza.com/class/kszbb5h3ttq6pw)
  - Do not post code, other than small snippets to illustrate a problem, *no
    code answering question*.
  - I do encourage posting questions about Go usage, FUSE weirdness, etc.
- [Web page](https://sedna.cs.umd.edu/818/)
  - one-stop shop for all info goodness

