Latest commit

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

rex_ws

Web server plus example REx controller using UCB1.

instructions

This repository contains a web server with multiple possible configurations; a simple single-threaded client program to generate a workload for that web server; and a learning controller which uses a reinforcement learning algorithm and the PAL framework to control the current composition of the web server.

To run the basic learning system, you'll need three command prompts, as follows:

Command prompt 1:

cd web_server
dnc .
dana pal.rest WebServer.o

Command prompt 2 (note there are multiple workload files, we just pick one of them here):

cd client
dnc .
dana .\Client.o .\client_default.txt

Command prompt 3:

cd learning
dnc .
dana Learning.o

When this is running, you will see output in all three windows which shows what the system is currently doing. Note the above assumes that all three programs are running on the same host; if the client is on a different host you'll need to update the IP address of the server in Client.dn

how it works

The command dana pal.rest WebServer.o does two things:

First, it discovers every available composition of the web server system, by finding all possible implementations of each interface and their combinations. It then starts the web server in one of those compositions.

Second, it launches a web service endpoint at http://localhost:8008/meta/ via which you can control the current composition and get runtime metrics. The learning program connects to this endpoint to control the system, but you can also use any other programming language to connect to this web service endpoint and control the system.

using the ground truth generator

When we're performing machine learning experiments, it's useful to have a ground truth - a known reward level for each possible action under each set of conditions. The ground truth tells us which action is best, and we can then measure things like how long it takes a learning algorithm to locate this known correct answer.

The stat_vis folder contains a simple program for gathering this ground truth data. It works by trying each action (composition of components) a set number of times, and reporting the average reward for that action.

You can run it in a very similar way to the above learning example, but we replace the learning element with the stat_vis program:

Command prompt 1:

cd web_server
dnc .
dana pal.rest WebServer.o

Command prompt 2 (note there are multiple workload files, we just pick one of them here):

cd client
dnc .
dana .\Client.o .\client_default.txt

Command prompt 3:

cd stat_vis
dnc .
dana StatWriter.o out.txt

This will create a file out.txt in the stat_vis directory, which contains the ground truth data for each composition. The program will exit once it has tried every composition a given number of times. You can control how man times the stat writer program tries each composition, and how long it runs each composition for, using the ITERATION_COUNT and STAT_INTERVAL constants defined near the top of StatWriter.dn.

About

Web server plus example REx controller using UCB1.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

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

12 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

rex_ws

Web server plus example REx controller using UCB1.

instructions

This repository contains a web server with multiple possible configurations; a simple single-threaded client program to generate a workload for that web server; and a learning controller which uses a reinforcement learning algorithm and the PAL framework to control the current composition of the web server.

To run the basic learning system, you'll need three command prompts, as follows:

Command prompt 1:

cd web_server
dnc .
dana pal.rest WebServer.o

Command prompt 2 (note there are multiple workload files, we just pick one of them here):

cd client
dnc .
dana .\Client.o .\client_default.txt

Command prompt 3:

cd learning
dnc .
dana Learning.o

When this is running, you will see output in all three windows which shows what the system is currently doing. Note the above assumes that all three programs are running on the same host; if the client is on a different host you'll need to update the IP address of the server in Client.dn

how it works

The command dana pal.rest WebServer.o does two things:

First, it discovers every available composition of the web server system, by finding all possible implementations of each interface and their combinations. It then starts the web server in one of those compositions.

Second, it launches a web service endpoint at http://localhost:8008/meta/ via which you can control the current composition and get runtime metrics. The learning program connects to this endpoint to control the system, but you can also use any other programming language to connect to this web service endpoint and control the system.

using the ground truth generator

When we're performing machine learning experiments, it's useful to have a ground truth - a known reward level for each possible action under each set of conditions. The ground truth tells us which action is best, and we can then measure things like how long it takes a learning algorithm to locate this known correct answer.

The stat_vis folder contains a simple program for gathering this ground truth data. It works by trying each action (composition of components) a set number of times, and reporting the average reward for that action.

You can run it in a very similar way to the above learning example, but we replace the learning element with the stat_vis program:

Command prompt 1:

cd web_server
dnc .
dana pal.rest WebServer.o

Command prompt 2 (note there are multiple workload files, we just pick one of them here):

cd client
dnc .
dana .\Client.o .\client_default.txt

Command prompt 3:

cd stat_vis
dnc .
dana StatWriter.o out.txt

This will create a file out.txt in the stat_vis directory, which contains the ground truth data for each composition. The program will exit once it has tried every composition a given number of times. You can control how man times the stat writer program tries each composition, and how long it runs each composition for, using the ITERATION_COUNT and STAT_INTERVAL constants defined near the top of StatWriter.dn.

About

Web server plus example REx controller using UCB1.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

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

12 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

rex_ws

Web server plus example REx controller using UCB1.

instructions

This repository contains a web server with multiple possible configurations; a simple single-threaded client program to generate a workload for that web server; and a learning controller which uses a reinforcement learning algorithm and the PAL framework to control the current composition of the web server.

To run the basic learning system, you'll need three command prompts, as follows:

Command prompt 1:

cd web_server
dnc .
dana pal.rest WebServer.o

Command prompt 2 (note there are multiple workload files, we just pick one of them here):

cd client
dnc .
dana .\Client.o .\client_default.txt

Command prompt 3:

cd learning
dnc .
dana Learning.o

When this is running, you will see output in all three windows which shows what the system is currently doing. Note the above assumes that all three programs are running on the same host; if the client is on a different host you'll need to update the IP address of the server in Client.dn

how it works

The command dana pal.rest WebServer.o does two things:

First, it discovers every available composition of the web server system, by finding all possible implementations of each interface and their combinations. It then starts the web server in one of those compositions.

Second, it launches a web service endpoint at http://localhost:8008/meta/ via which you can control the current composition and get runtime metrics. The learning program connects to this endpoint to control the system, but you can also use any other programming language to connect to this web service endpoint and control the system.

using the ground truth generator

When we're performing machine learning experiments, it's useful to have a ground truth - a known reward level for each possible action under each set of conditions. The ground truth tells us which action is best, and we can then measure things like how long it takes a learning algorithm to locate this known correct answer.

The stat_vis folder contains a simple program for gathering this ground truth data. It works by trying each action (composition of components) a set number of times, and reporting the average reward for that action.

You can run it in a very similar way to the above learning example, but we replace the learning element with the stat_vis program:

Command prompt 1:

cd web_server
dnc .
dana pal.rest WebServer.o

Command prompt 2 (note there are multiple workload files, we just pick one of them here):

cd client
dnc .
dana .\Client.o .\client_default.txt

Command prompt 3:

cd stat_vis
dnc .
dana StatWriter.o out.txt

This will create a file out.txt in the stat_vis directory, which contains the ground truth data for each composition. The program will exit once it has tried every composition a given number of times. You can control how man times the stat writer program tries each composition, and how long it runs each composition for, using the ITERATION_COUNT and STAT_INTERVAL constants defined near the top of StatWriter.dn.

About

Web server plus example REx controller using UCB1.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

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

12 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

rex_ws

Web server plus example REx controller using UCB1.

instructions

This repository contains a web server with multiple possible configurations; a simple single-threaded client program to generate a workload for that web server; and a learning controller which uses a reinforcement learning algorithm and the PAL framework to control the current composition of the web server.

To run the basic learning system, you'll need three command prompts, as follows:

Command prompt 1:

cd web_server
dnc .
dana pal.rest WebServer.o

Command prompt 2 (note there are multiple workload files, we just pick one of them here):

cd client
dnc .
dana .\Client.o .\client_default.txt

Command prompt 3:

cd learning
dnc .
dana Learning.o

When this is running, you will see output in all three windows which shows what the system is currently doing. Note the above assumes that all three programs are running on the same host; if the client is on a different host you'll need to update the IP address of the server in Client.dn

how it works

The command dana pal.rest WebServer.o does two things:

First, it discovers every available composition of the web server system, by finding all possible implementations of each interface and their combinations. It then starts the web server in one of those compositions.

Second, it launches a web service endpoint at http://localhost:8008/meta/ via which you can control the current composition and get runtime metrics. The learning program connects to this endpoint to control the system, but you can also use any other programming language to connect to this web service endpoint and control the system.

using the ground truth generator

When we're performing machine learning experiments, it's useful to have a ground truth - a known reward level for each possible action under each set of conditions. The ground truth tells us which action is best, and we can then measure things like how long it takes a learning algorithm to locate this known correct answer.

The stat_vis folder contains a simple program for gathering this ground truth data. It works by trying each action (composition of components) a set number of times, and reporting the average reward for that action.

You can run it in a very similar way to the above learning example, but we replace the learning element with the stat_vis program:

Command prompt 1:

cd web_server
dnc .
dana pal.rest WebServer.o

Command prompt 2 (note there are multiple workload files, we just pick one of them here):

cd client
dnc .
dana .\Client.o .\client_default.txt

Command prompt 3:

cd stat_vis
dnc .
dana StatWriter.o out.txt

This will create a file out.txt in the stat_vis directory, which contains the ground truth data for each composition. The program will exit once it has tried every composition a given number of times. You can control how man times the stat writer program tries each composition, and how long it runs each composition for, using the ITERATION_COUNT and STAT_INTERVAL constants defined near the top of StatWriter.dn.

About

Web server plus example REx controller using UCB1.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

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

12 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

rex_ws

Web server plus example REx controller using UCB1.

instructions

This repository contains a web server with multiple possible configurations; a simple single-threaded client program to generate a workload for that web server; and a learning controller which uses a reinforcement learning algorithm and the PAL framework to control the current composition of the web server.

To run the basic learning system, you'll need three command prompts, as follows:

Command prompt 1:

cd web_server
dnc .
dana pal.rest WebServer.o

Command prompt 2 (note there are multiple workload files, we just pick one of them here):

cd client
dnc .
dana .\Client.o .\client_default.txt

Command prompt 3:

cd learning
dnc .
dana Learning.o

When this is running, you will see output in all three windows which shows what the system is currently doing. Note the above assumes that all three programs are running on the same host; if the client is on a different host you'll need to update the IP address of the server in Client.dn

how it works

The command dana pal.rest WebServer.o does two things:

First, it discovers every available composition of the web server system, by finding all possible implementations of each interface and their combinations. It then starts the web server in one of those compositions.

Second, it launches a web service endpoint at http://localhost:8008/meta/ via which you can control the current composition and get runtime metrics. The learning program connects to this endpoint to control the system, but you can also use any other programming language to connect to this web service endpoint and control the system.

using the ground truth generator

When we're performing machine learning experiments, it's useful to have a ground truth - a known reward level for each possible action under each set of conditions. The ground truth tells us which action is best, and we can then measure things like how long it takes a learning algorithm to locate this known correct answer.

The stat_vis folder contains a simple program for gathering this ground truth data. It works by trying each action (composition of components) a set number of times, and reporting the average reward for that action.

You can run it in a very similar way to the above learning example, but we replace the learning element with the stat_vis program:

Command prompt 1:

cd web_server
dnc .
dana pal.rest WebServer.o

Command prompt 2 (note there are multiple workload files, we just pick one of them here):

cd client
dnc .
dana .\Client.o .\client_default.txt

Command prompt 3:

cd stat_vis
dnc .
dana StatWriter.o out.txt

This will create a file out.txt in the stat_vis directory, which contains the ground truth data for each composition. The program will exit once it has tried every composition a given number of times. You can control how man times the stat writer program tries each composition, and how long it runs each composition for, using the ITERATION_COUNT and STAT_INTERVAL constants defined near the top of StatWriter.dn.

About

Web server plus example REx controller using UCB1.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

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

12 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

rex_ws

Web server plus example REx controller using UCB1.

instructions

This repository contains a web server with multiple possible configurations; a simple single-threaded client program to generate a workload for that web server; and a learning controller which uses a reinforcement learning algorithm and the PAL framework to control the current composition of the web server.

To run the basic learning system, you'll need three command prompts, as follows:

Command prompt 1:

cd web_server
dnc .
dana pal.rest WebServer.o

Command prompt 2 (note there are multiple workload files, we just pick one of them here):

cd client
dnc .
dana .\Client.o .\client_default.txt

Command prompt 3:

cd learning
dnc .
dana Learning.o

When this is running, you will see output in all three windows which shows what the system is currently doing. Note the above assumes that all three programs are running on the same host; if the client is on a different host you'll need to update the IP address of the server in Client.dn

how it works

The command dana pal.rest WebServer.o does two things:

First, it discovers every available composition of the web server system, by finding all possible implementations of each interface and their combinations. It then starts the web server in one of those compositions.

Second, it launches a web service endpoint at http://localhost:8008/meta/ via which you can control the current composition and get runtime metrics. The learning program connects to this endpoint to control the system, but you can also use any other programming language to connect to this web service endpoint and control the system.

using the ground truth generator

When we're performing machine learning experiments, it's useful to have a ground truth - a known reward level for each possible action under each set of conditions. The ground truth tells us which action is best, and we can then measure things like how long it takes a learning algorithm to locate this known correct answer.

The stat_vis folder contains a simple program for gathering this ground truth data. It works by trying each action (composition of components) a set number of times, and reporting the average reward for that action.

You can run it in a very similar way to the above learning example, but we replace the learning element with the stat_vis program:

Command prompt 1:

cd web_server
dnc .
dana pal.rest WebServer.o

Command prompt 2 (note there are multiple workload files, we just pick one of them here):

cd client
dnc .
dana .\Client.o .\client_default.txt

Command prompt 3:

cd stat_vis
dnc .
dana StatWriter.o out.txt

This will create a file out.txt in the stat_vis directory, which contains the ground truth data for each composition. The program will exit once it has tried every composition a given number of times. You can control how man times the stat writer program tries each composition, and how long it runs each composition for, using the ITERATION_COUNT and STAT_INTERVAL constants defined near the top of StatWriter.dn.

About

Web server plus example REx controller using UCB1.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

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

12 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

rex_ws

Web server plus example REx controller using UCB1.

instructions

This repository contains a web server with multiple possible configurations; a simple single-threaded client program to generate a workload for that web server; and a learning controller which uses a reinforcement learning algorithm and the PAL framework to control the current composition of the web server.

To run the basic learning system, you'll need three command prompts, as follows:

Command prompt 1:

cd web_server
dnc .
dana pal.rest WebServer.o

Command prompt 2 (note there are multiple workload files, we just pick one of them here):

cd client
dnc .
dana .\Client.o .\client_default.txt

Command prompt 3:

cd learning
dnc .
dana Learning.o

When this is running, you will see output in all three windows which shows what the system is currently doing. Note the above assumes that all three programs are running on the same host; if the client is on a different host you'll need to update the IP address of the server in Client.dn

how it works

The command dana pal.rest WebServer.o does two things:

First, it discovers every available composition of the web server system, by finding all possible implementations of each interface and their combinations. It then starts the web server in one of those compositions.

Second, it launches a web service endpoint at http://localhost:8008/meta/ via which you can control the current composition and get runtime metrics. The learning program connects to this endpoint to control the system, but you can also use any other programming language to connect to this web service endpoint and control the system.

using the ground truth generator

When we're performing machine learning experiments, it's useful to have a ground truth - a known reward level for each possible action under each set of conditions. The ground truth tells us which action is best, and we can then measure things like how long it takes a learning algorithm to locate this known correct answer.

The stat_vis folder contains a simple program for gathering this ground truth data. It works by trying each action (composition of components) a set number of times, and reporting the average reward for that action.

You can run it in a very similar way to the above learning example, but we replace the learning element with the stat_vis program:

Command prompt 1:

cd web_server
dnc .
dana pal.rest WebServer.o

Command prompt 2 (note there are multiple workload files, we just pick one of them here):

cd client
dnc .
dana .\Client.o .\client_default.txt

Command prompt 3:

cd stat_vis
dnc .
dana StatWriter.o out.txt

This will create a file out.txt in the stat_vis directory, which contains the ground truth data for each composition. The program will exit once it has tried every composition a given number of times. You can control how man times the stat writer program tries each composition, and how long it runs each composition for, using the ITERATION_COUNT and STAT_INTERVAL constants defined near the top of StatWriter.dn.

About

Web server plus example REx controller using UCB1.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

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

12 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

rex_ws

Web server plus example REx controller using UCB1.

instructions

This repository contains a web server with multiple possible configurations; a simple single-threaded client program to generate a workload for that web server; and a learning controller which uses a reinforcement learning algorithm and the PAL framework to control the current composition of the web server.

To run the basic learning system, you'll need three command prompts, as follows:

Command prompt 1:

cd web_server
dnc .
dana pal.rest WebServer.o

Command prompt 2 (note there are multiple workload files, we just pick one of them here):

cd client
dnc .
dana .\Client.o .\client_default.txt

Command prompt 3:

cd learning
dnc .
dana Learning.o

When this is running, you will see output in all three windows which shows what the system is currently doing. Note the above assumes that all three programs are running on the same host; if the client is on a different host you'll need to update the IP address of the server in Client.dn

how it works

The command dana pal.rest WebServer.o does two things:

First, it discovers every available composition of the web server system, by finding all possible implementations of each interface and their combinations. It then starts the web server in one of those compositions.

Second, it launches a web service endpoint at http://localhost:8008/meta/ via which you can control the current composition and get runtime metrics. The learning program connects to this endpoint to control the system, but you can also use any other programming language to connect to this web service endpoint and control the system.

using the ground truth generator

When we're performing machine learning experiments, it's useful to have a ground truth - a known reward level for each possible action under each set of conditions. The ground truth tells us which action is best, and we can then measure things like how long it takes a learning algorithm to locate this known correct answer.

The stat_vis folder contains a simple program for gathering this ground truth data. It works by trying each action (composition of components) a set number of times, and reporting the average reward for that action.

You can run it in a very similar way to the above learning example, but we replace the learning element with the stat_vis program:

Command prompt 1:

cd web_server
dnc .
dana pal.rest WebServer.o

Command prompt 2 (note there are multiple workload files, we just pick one of them here):

cd client
dnc .
dana .\Client.o .\client_default.txt

Command prompt 3:

cd stat_vis
dnc .
dana StatWriter.o out.txt

This will create a file out.txt in the stat_vis directory, which contains the ground truth data for each composition. The program will exit once it has tried every composition a given number of times. You can control how man times the stat writer program tries each composition, and how long it runs each composition for, using the ITERATION_COUNT and STAT_INTERVAL constants defined near the top of StatWriter.dn.

About

Web server plus example REx controller using UCB1.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages