I’m devising a study plan to establish a knowledge base for myself comprised of computer science topics, architectural design, and programming skills for the network.
- Improve effectiveness as a core front-end developer
- Understand low-level core libraries while learning Rust and network programming
- Gain ability to answer questions more accurately on the forums and at meetup events
Although still in the process of discovery, I do know that during the process of learning I need a certain amount of my own experience coding and then solving errors. Just as importantly, however, I absolutely need a foundation in fundamental computer science concepts, documentation, and architectural design in order to understand why I’m coding and what I’m coding.
The following may take me a great deal of time as several pieces of the network are PhD research subjects on their own, for which I lack the formal training. Learning some of the more complex code bases inevitably will require many hours (years) of hands-on experience for me to grasp as well.
Anyone else whom is also on this path, there is the potential here for study groups. For example, we can choose a paper to read over a week and then convene on Google hangouts to discuss learned terms and concepts. In the case of a code repository, we could do the same, discussing purpose, function, and flow.
Subsequent posts in this thread will be more detailed summaries and questions about the article, subject, or repository that I’m learning as I work through the list.
I’ll start by taking the following introductory articles separately:
(For each, I’ll research terms that I don’t know, write questions for clarification, draw or recreate visual aids to experience concepts, and continue to refine my questions.)
Moving on to focus on repositories:
Each repository will be taken on separately as a chunk of study, although at some point I imagine I’ll need to understand how they work together as a whole. Perhaps I’ll reorder this list and begin with the root crate that the others depend on: Crust?:
- How does accumulator work?
- What does it mean to accumulate multiple values under one key? Does that mean that a key represents a vector of values?
- Experiment with code to experience accumulation
- Our base for cryptography
- Read, study, write questions, recreate visual aids: https://www.lvh.io/posts/nonce-misuse-resistance-101.html
- Learn: https://www.crypto101.io/
- Make a decision about how deeply I need to explore this subject as is useful to data encryption, weighed against my lack of mathematical training in the area
- Is the purpose of this to parse JSON configuration file for use by programs?
- What else? What am I missing?
- “Creates and supplies nonce in message.”
- What exactly is a nonce? Why is it important in encryption?
- What are transient nacl key pairs?
- What is a box, in the context of encryption?
- What else does this repo provide that I’m missing?
- Basis for files that are saved to the network to be split into pieces, encrypted, and indexed to a map
- Research: https://en.wikipedia.org/wiki/Data_deduplication
- Research: https://en.wikipedia.org/wiki/Convergent_encryption
- “parallelised approach can actually be faster than reading/writing data as a single stream”: What is the difference between single stream and parallel approach? Single thread vs multi threads?
- How does the additional obfuscation step work? https://www.youtube.com/watch?v=Jnvwv4z17b4
- Run and play with tests: https://github.com/maidsafe/self_encryption/blob/master/tests/lib.rs
- What is optional compression? How does it work?
- The basis for declaring basic network data types (MutableData and Immutable Data)
- Basis for handling data look ups and placement on the network?
- Research: http://en.wikipedia.org/wiki/Distributed_hash_table
- Research: https://en.wikipedia.org/wiki/Kademlia
- Watch series of talks: https://www.youtube.com/watch?v=Lr9FJRDcNzk&list=PLiYqQVdgdw_sSDkdIZzDRQR9xZlsukIxD
- What am I missing? What else do I need to know about routing?
- Basis for connecting peers?
- What is the difference between crust and routing?
- Research term: TCP
- Research term: TCP hole punching
- Research term: UDP
- Research term: UDP hole punching
- Research term: NAT
- Write questions, research unknown terms, create visual aids to help conceptualize
- Research term: UCP
- Research term: UPnP
- Study and run examples: https://github.com/maidsafe/crust/blob/master/examples/crust_peer.rs
- Study and run tests: https://github.com/maidsafe/crust/blob/master/src/tests/mod.rs
- What are the points I’ve missed about Crust?
- Handles regisration of uniform resource locators based on the platform
For example, registers
safe://with Windows registry, just as
- What am I missing?
- The basis for for creating a node on the network that can store data, access data for data that is assigned to it via routing?
- Vaults will eventually, autonomously, sign a block along with others in a section to build data chains?
- Research disjoint sections
- Research groups versus sections
- Disjoint: https://en.wikipedia.org/wiki/Disjoint-set_data_structure
- A vault (node) can be a part of multiple groups but belong to only one section?
- What am I missing?
- Run and play with tests
- Look into data visualization to watch node network in action
- Basis for setting up a client that creates a user account, authenticates applications, handles requests to the network?
- Provides foreign function interface in order to be able to write libraries in various programming languages that will then allow applications to interface with the network, using standard C data types?
- The term self-authentication seems to be an important term to the network. What exactly does that mean?
- Continue to understand client libs as necessary for font end work.
- Create a project using libraries to build client for command line on Rasperry pi.
Become acquainted with and follow rfc statuses: https://github.com/maidsafe/rfcs/blob/master/RFCs-by-status.md#active-rfcs