Latest commit

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Distributed Hash Table - PPCA 2022

Overview

  • A DHT can be viewed as a dictionary service distributed over a network: it provides access to a common shared key->value data store, distributed over participating nodes with great performance and scalability.
  • From a user perspective, a DHT essentially provides a map interface, with two main operations: put(key, value) and get(key). Get will retrieve values stored at a certain key while put (often called announce) will store a value on the network. Note that many values can be stored under the same key.
  • There are many algorithms to implement DHT. For this project, you are required to implement Chord protocol and Kademlia protocol. You are also required to implement an application of DHT. Finally, you should write a report for about one page, probably about your architecture, innovation, features and references.
  • Some helpful documents under \doc
  • TA: RainyMemoryhappypig Feel free to contact us : )

Assignment

  • Use Go to implement a Chord DHT and a Kademlia DHT with basic functions.
  • Use this DHT to implement an application.
  • Write a report for your whole project.

Syllabus

4 weeks is plenty of time : Please feel free to arrange your time : )

  • Learn GoLang (Or learn when you need it).
  • Install the development environment (Recommended : Ubuntu).
  • Learn and implement Chord protocol.
  • Learn and implement Kademlia protocol.
  • Implement an application of DHT with your imagination.

Score

GitHub repository for test: DHT-2022

  • 35% for the Chord Test
    • 30% + 5%: 30% for basic test and 5% for advance test.
    • Basic test: naive test without "force quit".
    • Advance test: "Force quit" will be tested. There will be some more complex tests.
  • 35% for the Kademlia Test (Same as above)
  • 20% for the application
  • 10% for a short report and code review

Tests

Unluckily, DHT tests cannot run successfully under Windows. So if you want to run tests by yourself, it is recommended to run tests under a Linux virtual machine, or employ a remote server.

If you want to debug tests by yourself, you can still use GoLand under virtual machine, or use Delve (a GoLang debugger) + GoLand if you employed a remote server.

Contact TA if you find any bug in the test program, or if you have some test ideas, or if you think the tests are too hard and you want TA to make it easier.

Basic Test

The current test procedure is:

  • There are 5 rounds of test in total.
  • In each round,
    1. 20 nodes join the network. Then sleep for 10 seconds.
    2. Put 150 key-value pairs, query for 120 pairs, and then delete 75 pairs. There is no sleep time between contiguous two operations.
    3. 10 nodes quit from the network. Then sleep for 10 seconds.
    4. (The same as 2.) Put 150 key-value pairs, query for 120 pairs, and then delete 75 pairs. There is no sleep time between contiguous two operations.

Advance Test

The advance test consists of "Force-Quit Test" and "Quit & Stabilize Test".

Force-Quit Test

The current test procedure is:

  • In the beginning, 50 nodes join the network.
  • Then put 500 key-value pairs.
  • It follows by 9 rounds of force quit. In each round,
    1. 5 nodes force-quit from the network. There is 500ms of sleep time between each force-quit operation.
    2. Query for all key-value pairs.

Quit & Stabilize Test

The current test procedure is:

  • In the beginning, 50 nodes join the network.
  • Then put 500 key-value pairs.
  • Next, every node will quit from the network:
    1. One node quits.
    2. After the node quitting from the network, there is 80ms of sleep time. And then 20 key-value pairs will be queried for.

How to Test Your Protocol?

See this

About

PPCA 2022 Project Repo

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Distributed Hash Table - PPCA 2022

Overview

  • A DHT can be viewed as a dictionary service distributed over a network: it provides access to a common shared key->value data store, distributed over participating nodes with great performance and scalability.
  • From a user perspective, a DHT essentially provides a map interface, with two main operations: put(key, value) and get(key). Get will retrieve values stored at a certain key while put (often called announce) will store a value on the network. Note that many values can be stored under the same key.
  • There are many algorithms to implement DHT. For this project, you are required to implement Chord protocol and Kademlia protocol. You are also required to implement an application of DHT. Finally, you should write a report for about one page, probably about your architecture, innovation, features and references.
  • Some helpful documents under \doc
  • TA: RainyMemoryhappypig Feel free to contact us : )

Assignment

  • Use Go to implement a Chord DHT and a Kademlia DHT with basic functions.
  • Use this DHT to implement an application.
  • Write a report for your whole project.

Syllabus

4 weeks is plenty of time : Please feel free to arrange your time : )

  • Learn GoLang (Or learn when you need it).
  • Install the development environment (Recommended : Ubuntu).
  • Learn and implement Chord protocol.
  • Learn and implement Kademlia protocol.
  • Implement an application of DHT with your imagination.

Score

GitHub repository for test: DHT-2022

  • 35% for the Chord Test
    • 30% + 5%: 30% for basic test and 5% for advance test.
    • Basic test: naive test without "force quit".
    • Advance test: "Force quit" will be tested. There will be some more complex tests.
  • 35% for the Kademlia Test (Same as above)
  • 20% for the application
  • 10% for a short report and code review

Tests

Unluckily, DHT tests cannot run successfully under Windows. So if you want to run tests by yourself, it is recommended to run tests under a Linux virtual machine, or employ a remote server.

If you want to debug tests by yourself, you can still use GoLand under virtual machine, or use Delve (a GoLang debugger) + GoLand if you employed a remote server.

Contact TA if you find any bug in the test program, or if you have some test ideas, or if you think the tests are too hard and you want TA to make it easier.

Basic Test

The current test procedure is:

  • There are 5 rounds of test in total.
  • In each round,
    1. 20 nodes join the network. Then sleep for 10 seconds.
    2. Put 150 key-value pairs, query for 120 pairs, and then delete 75 pairs. There is no sleep time between contiguous two operations.
    3. 10 nodes quit from the network. Then sleep for 10 seconds.
    4. (The same as 2.) Put 150 key-value pairs, query for 120 pairs, and then delete 75 pairs. There is no sleep time between contiguous two operations.

Advance Test

The advance test consists of "Force-Quit Test" and "Quit & Stabilize Test".

Force-Quit Test

The current test procedure is:

  • In the beginning, 50 nodes join the network.
  • Then put 500 key-value pairs.
  • It follows by 9 rounds of force quit. In each round,
    1. 5 nodes force-quit from the network. There is 500ms of sleep time between each force-quit operation.
    2. Query for all key-value pairs.

Quit & Stabilize Test

The current test procedure is:

  • In the beginning, 50 nodes join the network.
  • Then put 500 key-value pairs.
  • Next, every node will quit from the network:
    1. One node quits.
    2. After the node quitting from the network, there is 80ms of sleep time. And then 20 key-value pairs will be queried for.

How to Test Your Protocol?

See this

About

PPCA 2022 Project Repo

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Distributed Hash Table - PPCA 2022

Overview

  • A DHT can be viewed as a dictionary service distributed over a network: it provides access to a common shared key->value data store, distributed over participating nodes with great performance and scalability.
  • From a user perspective, a DHT essentially provides a map interface, with two main operations: put(key, value) and get(key). Get will retrieve values stored at a certain key while put (often called announce) will store a value on the network. Note that many values can be stored under the same key.
  • There are many algorithms to implement DHT. For this project, you are required to implement Chord protocol and Kademlia protocol. You are also required to implement an application of DHT. Finally, you should write a report for about one page, probably about your architecture, innovation, features and references.
  • Some helpful documents under \doc
  • TA: RainyMemoryhappypig Feel free to contact us : )

Assignment

  • Use Go to implement a Chord DHT and a Kademlia DHT with basic functions.
  • Use this DHT to implement an application.
  • Write a report for your whole project.

Syllabus

4 weeks is plenty of time : Please feel free to arrange your time : )

  • Learn GoLang (Or learn when you need it).
  • Install the development environment (Recommended : Ubuntu).
  • Learn and implement Chord protocol.
  • Learn and implement Kademlia protocol.
  • Implement an application of DHT with your imagination.

Score

GitHub repository for test: DHT-2022

  • 35% for the Chord Test
    • 30% + 5%: 30% for basic test and 5% for advance test.
    • Basic test: naive test without "force quit".
    • Advance test: "Force quit" will be tested. There will be some more complex tests.
  • 35% for the Kademlia Test (Same as above)
  • 20% for the application
  • 10% for a short report and code review

Tests

Unluckily, DHT tests cannot run successfully under Windows. So if you want to run tests by yourself, it is recommended to run tests under a Linux virtual machine, or employ a remote server.

If you want to debug tests by yourself, you can still use GoLand under virtual machine, or use Delve (a GoLang debugger) + GoLand if you employed a remote server.

Contact TA if you find any bug in the test program, or if you have some test ideas, or if you think the tests are too hard and you want TA to make it easier.

Basic Test

The current test procedure is:

  • There are 5 rounds of test in total.
  • In each round,
    1. 20 nodes join the network. Then sleep for 10 seconds.
    2. Put 150 key-value pairs, query for 120 pairs, and then delete 75 pairs. There is no sleep time between contiguous two operations.
    3. 10 nodes quit from the network. Then sleep for 10 seconds.
    4. (The same as 2.) Put 150 key-value pairs, query for 120 pairs, and then delete 75 pairs. There is no sleep time between contiguous two operations.

Advance Test

The advance test consists of "Force-Quit Test" and "Quit & Stabilize Test".

Force-Quit Test

The current test procedure is:

  • In the beginning, 50 nodes join the network.
  • Then put 500 key-value pairs.
  • It follows by 9 rounds of force quit. In each round,
    1. 5 nodes force-quit from the network. There is 500ms of sleep time between each force-quit operation.
    2. Query for all key-value pairs.

Quit & Stabilize Test

The current test procedure is:

  • In the beginning, 50 nodes join the network.
  • Then put 500 key-value pairs.
  • Next, every node will quit from the network:
    1. One node quits.
    2. After the node quitting from the network, there is 80ms of sleep time. And then 20 key-value pairs will be queried for.

How to Test Your Protocol?

See this

About

PPCA 2022 Project Repo

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Distributed Hash Table - PPCA 2022

Overview

  • A DHT can be viewed as a dictionary service distributed over a network: it provides access to a common shared key->value data store, distributed over participating nodes with great performance and scalability.
  • From a user perspective, a DHT essentially provides a map interface, with two main operations: put(key, value) and get(key). Get will retrieve values stored at a certain key while put (often called announce) will store a value on the network. Note that many values can be stored under the same key.
  • There are many algorithms to implement DHT. For this project, you are required to implement Chord protocol and Kademlia protocol. You are also required to implement an application of DHT. Finally, you should write a report for about one page, probably about your architecture, innovation, features and references.
  • Some helpful documents under \doc
  • TA: RainyMemoryhappypig Feel free to contact us : )

Assignment

  • Use Go to implement a Chord DHT and a Kademlia DHT with basic functions.
  • Use this DHT to implement an application.
  • Write a report for your whole project.

Syllabus

4 weeks is plenty of time : Please feel free to arrange your time : )

  • Learn GoLang (Or learn when you need it).
  • Install the development environment (Recommended : Ubuntu).
  • Learn and implement Chord protocol.
  • Learn and implement Kademlia protocol.
  • Implement an application of DHT with your imagination.

Score

GitHub repository for test: DHT-2022

  • 35% for the Chord Test
    • 30% + 5%: 30% for basic test and 5% for advance test.
    • Basic test: naive test without "force quit".
    • Advance test: "Force quit" will be tested. There will be some more complex tests.
  • 35% for the Kademlia Test (Same as above)
  • 20% for the application
  • 10% for a short report and code review

Tests

Unluckily, DHT tests cannot run successfully under Windows. So if you want to run tests by yourself, it is recommended to run tests under a Linux virtual machine, or employ a remote server.

If you want to debug tests by yourself, you can still use GoLand under virtual machine, or use Delve (a GoLang debugger) + GoLand if you employed a remote server.

Contact TA if you find any bug in the test program, or if you have some test ideas, or if you think the tests are too hard and you want TA to make it easier.

Basic Test

The current test procedure is:

  • There are 5 rounds of test in total.
  • In each round,
    1. 20 nodes join the network. Then sleep for 10 seconds.
    2. Put 150 key-value pairs, query for 120 pairs, and then delete 75 pairs. There is no sleep time between contiguous two operations.
    3. 10 nodes quit from the network. Then sleep for 10 seconds.
    4. (The same as 2.) Put 150 key-value pairs, query for 120 pairs, and then delete 75 pairs. There is no sleep time between contiguous two operations.

Advance Test

The advance test consists of "Force-Quit Test" and "Quit & Stabilize Test".

Force-Quit Test

The current test procedure is:

  • In the beginning, 50 nodes join the network.
  • Then put 500 key-value pairs.
  • It follows by 9 rounds of force quit. In each round,
    1. 5 nodes force-quit from the network. There is 500ms of sleep time between each force-quit operation.
    2. Query for all key-value pairs.

Quit & Stabilize Test

The current test procedure is:

  • In the beginning, 50 nodes join the network.
  • Then put 500 key-value pairs.
  • Next, every node will quit from the network:
    1. One node quits.
    2. After the node quitting from the network, there is 80ms of sleep time. And then 20 key-value pairs will be queried for.

How to Test Your Protocol?

See this

About

PPCA 2022 Project Repo

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Distributed Hash Table - PPCA 2022

Overview

  • A DHT can be viewed as a dictionary service distributed over a network: it provides access to a common shared key->value data store, distributed over participating nodes with great performance and scalability.
  • From a user perspective, a DHT essentially provides a map interface, with two main operations: put(key, value) and get(key). Get will retrieve values stored at a certain key while put (often called announce) will store a value on the network. Note that many values can be stored under the same key.
  • There are many algorithms to implement DHT. For this project, you are required to implement Chord protocol and Kademlia protocol. You are also required to implement an application of DHT. Finally, you should write a report for about one page, probably about your architecture, innovation, features and references.
  • Some helpful documents under \doc
  • TA: RainyMemoryhappypig Feel free to contact us : )

Assignment

  • Use Go to implement a Chord DHT and a Kademlia DHT with basic functions.
  • Use this DHT to implement an application.
  • Write a report for your whole project.

Syllabus

4 weeks is plenty of time : Please feel free to arrange your time : )

  • Learn GoLang (Or learn when you need it).
  • Install the development environment (Recommended : Ubuntu).
  • Learn and implement Chord protocol.
  • Learn and implement Kademlia protocol.
  • Implement an application of DHT with your imagination.

Score

GitHub repository for test: DHT-2022

  • 35% for the Chord Test
    • 30% + 5%: 30% for basic test and 5% for advance test.
    • Basic test: naive test without "force quit".
    • Advance test: "Force quit" will be tested. There will be some more complex tests.
  • 35% for the Kademlia Test (Same as above)
  • 20% for the application
  • 10% for a short report and code review

Tests

Unluckily, DHT tests cannot run successfully under Windows. So if you want to run tests by yourself, it is recommended to run tests under a Linux virtual machine, or employ a remote server.

If you want to debug tests by yourself, you can still use GoLand under virtual machine, or use Delve (a GoLang debugger) + GoLand if you employed a remote server.

Contact TA if you find any bug in the test program, or if you have some test ideas, or if you think the tests are too hard and you want TA to make it easier.

Basic Test

The current test procedure is:

  • There are 5 rounds of test in total.
  • In each round,
    1. 20 nodes join the network. Then sleep for 10 seconds.
    2. Put 150 key-value pairs, query for 120 pairs, and then delete 75 pairs. There is no sleep time between contiguous two operations.
    3. 10 nodes quit from the network. Then sleep for 10 seconds.
    4. (The same as 2.) Put 150 key-value pairs, query for 120 pairs, and then delete 75 pairs. There is no sleep time between contiguous two operations.

Advance Test

The advance test consists of "Force-Quit Test" and "Quit & Stabilize Test".

Force-Quit Test

The current test procedure is:

  • In the beginning, 50 nodes join the network.
  • Then put 500 key-value pairs.
  • It follows by 9 rounds of force quit. In each round,
    1. 5 nodes force-quit from the network. There is 500ms of sleep time between each force-quit operation.
    2. Query for all key-value pairs.

Quit & Stabilize Test

The current test procedure is:

  • In the beginning, 50 nodes join the network.
  • Then put 500 key-value pairs.
  • Next, every node will quit from the network:
    1. One node quits.
    2. After the node quitting from the network, there is 80ms of sleep time. And then 20 key-value pairs will be queried for.

How to Test Your Protocol?

See this

About

PPCA 2022 Project Repo

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Distributed Hash Table - PPCA 2022

Overview

  • A DHT can be viewed as a dictionary service distributed over a network: it provides access to a common shared key->value data store, distributed over participating nodes with great performance and scalability.
  • From a user perspective, a DHT essentially provides a map interface, with two main operations: put(key, value) and get(key). Get will retrieve values stored at a certain key while put (often called announce) will store a value on the network. Note that many values can be stored under the same key.
  • There are many algorithms to implement DHT. For this project, you are required to implement Chord protocol and Kademlia protocol. You are also required to implement an application of DHT. Finally, you should write a report for about one page, probably about your architecture, innovation, features and references.
  • Some helpful documents under \doc
  • TA: RainyMemoryhappypig Feel free to contact us : )

Assignment

  • Use Go to implement a Chord DHT and a Kademlia DHT with basic functions.
  • Use this DHT to implement an application.
  • Write a report for your whole project.

Syllabus

4 weeks is plenty of time : Please feel free to arrange your time : )

  • Learn GoLang (Or learn when you need it).
  • Install the development environment (Recommended : Ubuntu).
  • Learn and implement Chord protocol.
  • Learn and implement Kademlia protocol.
  • Implement an application of DHT with your imagination.

Score

GitHub repository for test: DHT-2022

  • 35% for the Chord Test
    • 30% + 5%: 30% for basic test and 5% for advance test.
    • Basic test: naive test without "force quit".
    • Advance test: "Force quit" will be tested. There will be some more complex tests.
  • 35% for the Kademlia Test (Same as above)
  • 20% for the application
  • 10% for a short report and code review

Tests

Unluckily, DHT tests cannot run successfully under Windows. So if you want to run tests by yourself, it is recommended to run tests under a Linux virtual machine, or employ a remote server.

If you want to debug tests by yourself, you can still use GoLand under virtual machine, or use Delve (a GoLang debugger) + GoLand if you employed a remote server.

Contact TA if you find any bug in the test program, or if you have some test ideas, or if you think the tests are too hard and you want TA to make it easier.

Basic Test

The current test procedure is:

  • There are 5 rounds of test in total.
  • In each round,
    1. 20 nodes join the network. Then sleep for 10 seconds.
    2. Put 150 key-value pairs, query for 120 pairs, and then delete 75 pairs. There is no sleep time between contiguous two operations.
    3. 10 nodes quit from the network. Then sleep for 10 seconds.
    4. (The same as 2.) Put 150 key-value pairs, query for 120 pairs, and then delete 75 pairs. There is no sleep time between contiguous two operations.

Advance Test

The advance test consists of "Force-Quit Test" and "Quit & Stabilize Test".

Force-Quit Test

The current test procedure is:

  • In the beginning, 50 nodes join the network.
  • Then put 500 key-value pairs.
  • It follows by 9 rounds of force quit. In each round,
    1. 5 nodes force-quit from the network. There is 500ms of sleep time between each force-quit operation.
    2. Query for all key-value pairs.

Quit & Stabilize Test

The current test procedure is:

  • In the beginning, 50 nodes join the network.
  • Then put 500 key-value pairs.
  • Next, every node will quit from the network:
    1. One node quits.
    2. After the node quitting from the network, there is 80ms of sleep time. And then 20 key-value pairs will be queried for.

How to Test Your Protocol?

See this

About

PPCA 2022 Project Repo

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Distributed Hash Table - PPCA 2022

Overview

  • A DHT can be viewed as a dictionary service distributed over a network: it provides access to a common shared key->value data store, distributed over participating nodes with great performance and scalability.
  • From a user perspective, a DHT essentially provides a map interface, with two main operations: put(key, value) and get(key). Get will retrieve values stored at a certain key while put (often called announce) will store a value on the network. Note that many values can be stored under the same key.
  • There are many algorithms to implement DHT. For this project, you are required to implement Chord protocol and Kademlia protocol. You are also required to implement an application of DHT. Finally, you should write a report for about one page, probably about your architecture, innovation, features and references.
  • Some helpful documents under \doc
  • TA: RainyMemoryhappypig Feel free to contact us : )

Assignment

  • Use Go to implement a Chord DHT and a Kademlia DHT with basic functions.
  • Use this DHT to implement an application.
  • Write a report for your whole project.

Syllabus

4 weeks is plenty of time : Please feel free to arrange your time : )

  • Learn GoLang (Or learn when you need it).
  • Install the development environment (Recommended : Ubuntu).
  • Learn and implement Chord protocol.
  • Learn and implement Kademlia protocol.
  • Implement an application of DHT with your imagination.

Score

GitHub repository for test: DHT-2022

  • 35% for the Chord Test
    • 30% + 5%: 30% for basic test and 5% for advance test.
    • Basic test: naive test without "force quit".
    • Advance test: "Force quit" will be tested. There will be some more complex tests.
  • 35% for the Kademlia Test (Same as above)
  • 20% for the application
  • 10% for a short report and code review

Tests

Unluckily, DHT tests cannot run successfully under Windows. So if you want to run tests by yourself, it is recommended to run tests under a Linux virtual machine, or employ a remote server.

If you want to debug tests by yourself, you can still use GoLand under virtual machine, or use Delve (a GoLang debugger) + GoLand if you employed a remote server.

Contact TA if you find any bug in the test program, or if you have some test ideas, or if you think the tests are too hard and you want TA to make it easier.

Basic Test

The current test procedure is:

  • There are 5 rounds of test in total.
  • In each round,
    1. 20 nodes join the network. Then sleep for 10 seconds.
    2. Put 150 key-value pairs, query for 120 pairs, and then delete 75 pairs. There is no sleep time between contiguous two operations.
    3. 10 nodes quit from the network. Then sleep for 10 seconds.
    4. (The same as 2.) Put 150 key-value pairs, query for 120 pairs, and then delete 75 pairs. There is no sleep time between contiguous two operations.

Advance Test

The advance test consists of "Force-Quit Test" and "Quit & Stabilize Test".

Force-Quit Test

The current test procedure is:

  • In the beginning, 50 nodes join the network.
  • Then put 500 key-value pairs.
  • It follows by 9 rounds of force quit. In each round,
    1. 5 nodes force-quit from the network. There is 500ms of sleep time between each force-quit operation.
    2. Query for all key-value pairs.

Quit & Stabilize Test

The current test procedure is:

  • In the beginning, 50 nodes join the network.
  • Then put 500 key-value pairs.
  • Next, every node will quit from the network:
    1. One node quits.
    2. After the node quitting from the network, there is 80ms of sleep time. And then 20 key-value pairs will be queried for.

How to Test Your Protocol?

See this

About

PPCA 2022 Project Repo

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Distributed Hash Table - PPCA 2022

Overview

  • A DHT can be viewed as a dictionary service distributed over a network: it provides access to a common shared key->value data store, distributed over participating nodes with great performance and scalability.
  • From a user perspective, a DHT essentially provides a map interface, with two main operations: put(key, value) and get(key). Get will retrieve values stored at a certain key while put (often called announce) will store a value on the network. Note that many values can be stored under the same key.
  • There are many algorithms to implement DHT. For this project, you are required to implement Chord protocol and Kademlia protocol. You are also required to implement an application of DHT. Finally, you should write a report for about one page, probably about your architecture, innovation, features and references.
  • Some helpful documents under \doc
  • TA: RainyMemoryhappypig Feel free to contact us : )

Assignment

  • Use Go to implement a Chord DHT and a Kademlia DHT with basic functions.
  • Use this DHT to implement an application.
  • Write a report for your whole project.

Syllabus

4 weeks is plenty of time : Please feel free to arrange your time : )

  • Learn GoLang (Or learn when you need it).
  • Install the development environment (Recommended : Ubuntu).
  • Learn and implement Chord protocol.
  • Learn and implement Kademlia protocol.
  • Implement an application of DHT with your imagination.

Score

GitHub repository for test: DHT-2022

  • 35% for the Chord Test
    • 30% + 5%: 30% for basic test and 5% for advance test.
    • Basic test: naive test without "force quit".
    • Advance test: "Force quit" will be tested. There will be some more complex tests.
  • 35% for the Kademlia Test (Same as above)
  • 20% for the application
  • 10% for a short report and code review

Tests

Unluckily, DHT tests cannot run successfully under Windows. So if you want to run tests by yourself, it is recommended to run tests under a Linux virtual machine, or employ a remote server.

If you want to debug tests by yourself, you can still use GoLand under virtual machine, or use Delve (a GoLang debugger) + GoLand if you employed a remote server.

Contact TA if you find any bug in the test program, or if you have some test ideas, or if you think the tests are too hard and you want TA to make it easier.

Basic Test

The current test procedure is:

  • There are 5 rounds of test in total.
  • In each round,
    1. 20 nodes join the network. Then sleep for 10 seconds.
    2. Put 150 key-value pairs, query for 120 pairs, and then delete 75 pairs. There is no sleep time between contiguous two operations.
    3. 10 nodes quit from the network. Then sleep for 10 seconds.
    4. (The same as 2.) Put 150 key-value pairs, query for 120 pairs, and then delete 75 pairs. There is no sleep time between contiguous two operations.

Advance Test

The advance test consists of "Force-Quit Test" and "Quit & Stabilize Test".

Force-Quit Test

The current test procedure is:

  • In the beginning, 50 nodes join the network.
  • Then put 500 key-value pairs.
  • It follows by 9 rounds of force quit. In each round,
    1. 5 nodes force-quit from the network. There is 500ms of sleep time between each force-quit operation.
    2. Query for all key-value pairs.

Quit & Stabilize Test

The current test procedure is:

  • In the beginning, 50 nodes join the network.
  • Then put 500 key-value pairs.
  • Next, every node will quit from the network:
    1. One node quits.
    2. After the node quitting from the network, there is 80ms of sleep time. And then 20 key-value pairs will be queried for.

How to Test Your Protocol?

See this

About

PPCA 2022 Project Repo

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages