Skip to content

Use translations for common constants - #166

Open
alshopov wants to merge 1 commit into
racket:masterfrom
alshopov:messagebox
Open

Use translations for common constants#166
alshopov wants to merge 1 commit into
racket:masterfrom
alshopov:messagebox

Conversation

@alshopov

Copy link
Copy Markdown
Contributor

Yes/No may lose shortcuts but these are currently non-translatable anyway.

Signed-off-by: Alexander Shopov ash@kambanaria.org

@rfindler

Copy link
Copy Markdown
Member

Two worries:

  • the bigger one is that this introduces a dependency between racket/gui and string-constants. Probably have to get @mflatt to weigh in on that one

  • the more minor one is that the yes and no string constants need the & in them (that's how the buttons get keyboard shortcuts on some platforms; the letter following the & gets an underline and is the keystroke to click the button).

@rfindler

Copy link
Copy Markdown
Member

Oh, sorry. I just looked at the diff, not your comment! How about just having a string constant yes-in-a-button where there is a note next to it saying what the & means (or similar)?

@alshopov

Copy link
Copy Markdown
ContributorAuthor

...How about just having a string constant yes-in-a-button ...
I will, though will suffix it with '-mnemonic'. Accelerators age generally available in many interface elements.

@alshopov

alshopov commented Feb 16, 2020

Copy link
Copy Markdown
ContributorAuthor

Land after racket/string-constants#44
Land after racket/string-constants#43

Yes/No may lose shortcuts but these are currently non-translatable anyway.
Signed-off-by: Alexander Shopov <ash@kambanaria.org>
@alshopov

Copy link
Copy Markdown
ContributorAuthor

The checks fail becuase the updates to the string constants have not been merged.

@rfindler

Copy link
Copy Markdown
Member

The addition of the dependency from racket/gui to string-constants is problematic. Matthew conducted an experiment and reports that string-constants adds 8MB to a 66MB heap for racket with racket/gui/base loaded. For Racket CS it’s +14MB added to 153MB and these seem to be too much.

We could try to limit the amount of memory that a dependency would bring, or we could add optional, keyword arguments to these functions and then have framework/gui-utils supply translations of those arguments (exporting functions to be called in place of get-file et al).

@alshopov

Copy link
Copy Markdown
ContributorAuthor

The addition of the dependency from racket/gui to string-constants is problematic.

Did I really do that? gui-lib/info.rkt already contained ["string-constants-lib" #:version "1.24"], I just bumped it up to 1.33. Are there so many new messages and are they loaded at the same time to take up this additional memory? I though that there is only one translation loaded at a single time so even though some more need more memory - that will be offset by the removal of the English versions.
While I did add string-constants to required of gui-lib/mred/private/messagebox.rkt, gui-lib/mrlib/terminal.rkt already did that and there are many more other files requiring the library so this package has already been used - git grep '[(]string-constant' | wc -l in the repo gives more that 360 usages. What am I missing in the picture and how can I improve things?

@rfindler

rfindler commented Feb 20, 2020 via email

Copy link
Copy Markdown
Member

@alshopov

Copy link
Copy Markdown
ContributorAuthor

the module level one wasn't, I believe.

I have not added anything on module level. The whole change was bumping the dependency at pkg level and using 3 constants. Perhaps there is something trivial I am overlooking.

@rfindler

Copy link
Copy Markdown
Member

The issue is the addition of the new line 7 in gui-lib/mred/private/messagebox.rkt. That makes the memory use of the programs that Matthew reported jump and what I mean by "adding a dependency" from racket/gui to string-constants.

Does this make more sense?

@rfindler

Copy link
Copy Markdown
Member

I don't think we can merge this one in its current state.

We could change things by some how parameterizing message-box and friends to internationalize them and then have properly internationalized versions available via the framework.

@rfindler

Copy link
Copy Markdown
Member

Would it be horrible to add optional arguments to message-box (and friends) but where their default values were determined by some mutable state and then have the framework gui library mutate that state (using string constants)?

We could document this in the docs for message-box (since a dependency in the documentation is okay), telling people that something fishy is going on.

@alshopov

alshopov commented Sep 28, 2020 via email

Copy link
Copy Markdown
ContributorAuthor

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@alshopov@rfindler
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Use translations for common constants by alshopov · Pull Request #166 · racket/gui · GitHub
Skip to content

Use translations for common constants - #166

Open
alshopov wants to merge 1 commit into
racket:masterfrom
alshopov:messagebox
Open

Use translations for common constants#166
alshopov wants to merge 1 commit into
racket:masterfrom
alshopov:messagebox

Conversation

@alshopov

Copy link
Copy Markdown
Contributor

Yes/No may lose shortcuts but these are currently non-translatable anyway.

Signed-off-by: Alexander Shopov ash@kambanaria.org

@rfindler

Copy link
Copy Markdown
Member

Two worries:

  • the bigger one is that this introduces a dependency between racket/gui and string-constants. Probably have to get @mflatt to weigh in on that one

  • the more minor one is that the yes and no string constants need the & in them (that's how the buttons get keyboard shortcuts on some platforms; the letter following the & gets an underline and is the keystroke to click the button).

@rfindler

Copy link
Copy Markdown
Member

Oh, sorry. I just looked at the diff, not your comment! How about just having a string constant yes-in-a-button where there is a note next to it saying what the & means (or similar)?

@alshopov

Copy link
Copy Markdown
ContributorAuthor

...How about just having a string constant yes-in-a-button ...
I will, though will suffix it with '-mnemonic'. Accelerators age generally available in many interface elements.

@alshopov

alshopov commented Feb 16, 2020

Copy link
Copy Markdown
ContributorAuthor

Land after racket/string-constants#44
Land after racket/string-constants#43

Yes/No may lose shortcuts but these are currently non-translatable anyway.
Signed-off-by: Alexander Shopov <ash@kambanaria.org>
@alshopov

Copy link
Copy Markdown
ContributorAuthor

The checks fail becuase the updates to the string constants have not been merged.

@rfindler

Copy link
Copy Markdown
Member

The addition of the dependency from racket/gui to string-constants is problematic. Matthew conducted an experiment and reports that string-constants adds 8MB to a 66MB heap for racket with racket/gui/base loaded. For Racket CS it’s +14MB added to 153MB and these seem to be too much.

We could try to limit the amount of memory that a dependency would bring, or we could add optional, keyword arguments to these functions and then have framework/gui-utils supply translations of those arguments (exporting functions to be called in place of get-file et al).

@alshopov

Copy link
Copy Markdown
ContributorAuthor

The addition of the dependency from racket/gui to string-constants is problematic.

Did I really do that? gui-lib/info.rkt already contained ["string-constants-lib" #:version "1.24"], I just bumped it up to 1.33. Are there so many new messages and are they loaded at the same time to take up this additional memory? I though that there is only one translation loaded at a single time so even though some more need more memory - that will be offset by the removal of the English versions.
While I did add string-constants to required of gui-lib/mred/private/messagebox.rkt, gui-lib/mrlib/terminal.rkt already did that and there are many more other files requiring the library so this package has already been used - git grep '[(]string-constant' | wc -l in the repo gives more that 360 usages. What am I missing in the picture and how can I improve things?

@rfindler

rfindler commented Feb 20, 2020 via email

Copy link
Copy Markdown
Member

@alshopov

Copy link
Copy Markdown
ContributorAuthor

the module level one wasn't, I believe.

I have not added anything on module level. The whole change was bumping the dependency at pkg level and using 3 constants. Perhaps there is something trivial I am overlooking.

@rfindler

Copy link
Copy Markdown
Member

The issue is the addition of the new line 7 in gui-lib/mred/private/messagebox.rkt. That makes the memory use of the programs that Matthew reported jump and what I mean by "adding a dependency" from racket/gui to string-constants.

Does this make more sense?

@rfindler

Copy link
Copy Markdown
Member

I don't think we can merge this one in its current state.

We could change things by some how parameterizing message-box and friends to internationalize them and then have properly internationalized versions available via the framework.

@rfindler

Copy link
Copy Markdown
Member

Would it be horrible to add optional arguments to message-box (and friends) but where their default values were determined by some mutable state and then have the framework gui library mutate that state (using string constants)?

We could document this in the docs for message-box (since a dependency in the documentation is okay), telling people that something fishy is going on.

@alshopov

alshopov commented Sep 28, 2020 via email

Copy link
Copy Markdown
ContributorAuthor

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

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

Use translations for common constants - #166

Open
alshopov wants to merge 1 commit into
racket:masterfrom
alshopov:messagebox
Open

Use translations for common constants#166
alshopov wants to merge 1 commit into
racket:masterfrom
alshopov:messagebox

Conversation

@alshopov

Copy link
Copy Markdown
Contributor

Yes/No may lose shortcuts but these are currently non-translatable anyway.

Signed-off-by: Alexander Shopov ash@kambanaria.org

@rfindler

Copy link
Copy Markdown
Member

Two worries:

  • the bigger one is that this introduces a dependency between racket/gui and string-constants. Probably have to get @mflatt to weigh in on that one

  • the more minor one is that the yes and no string constants need the & in them (that's how the buttons get keyboard shortcuts on some platforms; the letter following the & gets an underline and is the keystroke to click the button).

@rfindler

Copy link
Copy Markdown
Member

Oh, sorry. I just looked at the diff, not your comment! How about just having a string constant yes-in-a-button where there is a note next to it saying what the & means (or similar)?

@alshopov

Copy link
Copy Markdown
ContributorAuthor

...How about just having a string constant yes-in-a-button ...
I will, though will suffix it with '-mnemonic'. Accelerators age generally available in many interface elements.

@alshopov

alshopov commented Feb 16, 2020

Copy link
Copy Markdown
ContributorAuthor

Land after racket/string-constants#44
Land after racket/string-constants#43

Yes/No may lose shortcuts but these are currently non-translatable anyway.
Signed-off-by: Alexander Shopov <ash@kambanaria.org>
@alshopov

Copy link
Copy Markdown
ContributorAuthor

The checks fail becuase the updates to the string constants have not been merged.

@rfindler

Copy link
Copy Markdown
Member

The addition of the dependency from racket/gui to string-constants is problematic. Matthew conducted an experiment and reports that string-constants adds 8MB to a 66MB heap for racket with racket/gui/base loaded. For Racket CS it’s +14MB added to 153MB and these seem to be too much.

We could try to limit the amount of memory that a dependency would bring, or we could add optional, keyword arguments to these functions and then have framework/gui-utils supply translations of those arguments (exporting functions to be called in place of get-file et al).

@alshopov

Copy link
Copy Markdown
ContributorAuthor

The addition of the dependency from racket/gui to string-constants is problematic.

Did I really do that? gui-lib/info.rkt already contained ["string-constants-lib" #:version "1.24"], I just bumped it up to 1.33. Are there so many new messages and are they loaded at the same time to take up this additional memory? I though that there is only one translation loaded at a single time so even though some more need more memory - that will be offset by the removal of the English versions.
While I did add string-constants to required of gui-lib/mred/private/messagebox.rkt, gui-lib/mrlib/terminal.rkt already did that and there are many more other files requiring the library so this package has already been used - git grep '[(]string-constant' | wc -l in the repo gives more that 360 usages. What am I missing in the picture and how can I improve things?

@rfindler

rfindler commented Feb 20, 2020 via email

Copy link
Copy Markdown
Member

@alshopov

Copy link
Copy Markdown
ContributorAuthor

the module level one wasn't, I believe.

I have not added anything on module level. The whole change was bumping the dependency at pkg level and using 3 constants. Perhaps there is something trivial I am overlooking.

@rfindler

Copy link
Copy Markdown
Member

The issue is the addition of the new line 7 in gui-lib/mred/private/messagebox.rkt. That makes the memory use of the programs that Matthew reported jump and what I mean by "adding a dependency" from racket/gui to string-constants.

Does this make more sense?

@rfindler

Copy link
Copy Markdown
Member

I don't think we can merge this one in its current state.

We could change things by some how parameterizing message-box and friends to internationalize them and then have properly internationalized versions available via the framework.

@rfindler

Copy link
Copy Markdown
Member

Would it be horrible to add optional arguments to message-box (and friends) but where their default values were determined by some mutable state and then have the framework gui library mutate that state (using string constants)?

We could document this in the docs for message-box (since a dependency in the documentation is okay), telling people that something fishy is going on.

@alshopov

alshopov commented Sep 28, 2020 via email

Copy link
Copy Markdown
ContributorAuthor

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

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

Use translations for common constants - #166

Open
alshopov wants to merge 1 commit into
racket:masterfrom
alshopov:messagebox
Open

Use translations for common constants#166
alshopov wants to merge 1 commit into
racket:masterfrom
alshopov:messagebox

Conversation

@alshopov

Copy link
Copy Markdown
Contributor

Yes/No may lose shortcuts but these are currently non-translatable anyway.

Signed-off-by: Alexander Shopov ash@kambanaria.org

@rfindler

Copy link
Copy Markdown
Member

Two worries:

  • the bigger one is that this introduces a dependency between racket/gui and string-constants. Probably have to get @mflatt to weigh in on that one

  • the more minor one is that the yes and no string constants need the & in them (that's how the buttons get keyboard shortcuts on some platforms; the letter following the & gets an underline and is the keystroke to click the button).

@rfindler

Copy link
Copy Markdown
Member

Oh, sorry. I just looked at the diff, not your comment! How about just having a string constant yes-in-a-button where there is a note next to it saying what the & means (or similar)?

@alshopov

Copy link
Copy Markdown
ContributorAuthor

...How about just having a string constant yes-in-a-button ...
I will, though will suffix it with '-mnemonic'. Accelerators age generally available in many interface elements.

@alshopov

alshopov commented Feb 16, 2020

Copy link
Copy Markdown
ContributorAuthor

Land after racket/string-constants#44
Land after racket/string-constants#43

Yes/No may lose shortcuts but these are currently non-translatable anyway.
Signed-off-by: Alexander Shopov <ash@kambanaria.org>
@alshopov

Copy link
Copy Markdown
ContributorAuthor

The checks fail becuase the updates to the string constants have not been merged.

@rfindler

Copy link
Copy Markdown
Member

The addition of the dependency from racket/gui to string-constants is problematic. Matthew conducted an experiment and reports that string-constants adds 8MB to a 66MB heap for racket with racket/gui/base loaded. For Racket CS it’s +14MB added to 153MB and these seem to be too much.

We could try to limit the amount of memory that a dependency would bring, or we could add optional, keyword arguments to these functions and then have framework/gui-utils supply translations of those arguments (exporting functions to be called in place of get-file et al).

@alshopov

Copy link
Copy Markdown
ContributorAuthor

The addition of the dependency from racket/gui to string-constants is problematic.

Did I really do that? gui-lib/info.rkt already contained ["string-constants-lib" #:version "1.24"], I just bumped it up to 1.33. Are there so many new messages and are they loaded at the same time to take up this additional memory? I though that there is only one translation loaded at a single time so even though some more need more memory - that will be offset by the removal of the English versions.
While I did add string-constants to required of gui-lib/mred/private/messagebox.rkt, gui-lib/mrlib/terminal.rkt already did that and there are many more other files requiring the library so this package has already been used - git grep '[(]string-constant' | wc -l in the repo gives more that 360 usages. What am I missing in the picture and how can I improve things?

@rfindler

rfindler commented Feb 20, 2020 via email

Copy link
Copy Markdown
Member

@alshopov

Copy link
Copy Markdown
ContributorAuthor

the module level one wasn't, I believe.

I have not added anything on module level. The whole change was bumping the dependency at pkg level and using 3 constants. Perhaps there is something trivial I am overlooking.

@rfindler

Copy link
Copy Markdown
Member

The issue is the addition of the new line 7 in gui-lib/mred/private/messagebox.rkt. That makes the memory use of the programs that Matthew reported jump and what I mean by "adding a dependency" from racket/gui to string-constants.

Does this make more sense?

@rfindler

Copy link
Copy Markdown
Member

I don't think we can merge this one in its current state.

We could change things by some how parameterizing message-box and friends to internationalize them and then have properly internationalized versions available via the framework.

@rfindler

Copy link
Copy Markdown
Member

Would it be horrible to add optional arguments to message-box (and friends) but where their default values were determined by some mutable state and then have the framework gui library mutate that state (using string constants)?

We could document this in the docs for message-box (since a dependency in the documentation is okay), telling people that something fishy is going on.

@alshopov

alshopov commented Sep 28, 2020 via email

Copy link
Copy Markdown
ContributorAuthor

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

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

Use translations for common constants - #166

Open
alshopov wants to merge 1 commit into
racket:masterfrom
alshopov:messagebox
Open

Use translations for common constants#166
alshopov wants to merge 1 commit into
racket:masterfrom
alshopov:messagebox

Conversation

@alshopov

Copy link
Copy Markdown
Contributor

Yes/No may lose shortcuts but these are currently non-translatable anyway.

Signed-off-by: Alexander Shopov ash@kambanaria.org

@rfindler

Copy link
Copy Markdown
Member

Two worries:

  • the bigger one is that this introduces a dependency between racket/gui and string-constants. Probably have to get @mflatt to weigh in on that one

  • the more minor one is that the yes and no string constants need the & in them (that's how the buttons get keyboard shortcuts on some platforms; the letter following the & gets an underline and is the keystroke to click the button).

@rfindler

Copy link
Copy Markdown
Member

Oh, sorry. I just looked at the diff, not your comment! How about just having a string constant yes-in-a-button where there is a note next to it saying what the & means (or similar)?

@alshopov

Copy link
Copy Markdown
ContributorAuthor

...How about just having a string constant yes-in-a-button ...
I will, though will suffix it with '-mnemonic'. Accelerators age generally available in many interface elements.

@alshopov

alshopov commented Feb 16, 2020

Copy link
Copy Markdown
ContributorAuthor

Land after racket/string-constants#44
Land after racket/string-constants#43

Yes/No may lose shortcuts but these are currently non-translatable anyway.
Signed-off-by: Alexander Shopov <ash@kambanaria.org>
@alshopov

Copy link
Copy Markdown
ContributorAuthor

The checks fail becuase the updates to the string constants have not been merged.

@rfindler

Copy link
Copy Markdown
Member

The addition of the dependency from racket/gui to string-constants is problematic. Matthew conducted an experiment and reports that string-constants adds 8MB to a 66MB heap for racket with racket/gui/base loaded. For Racket CS it’s +14MB added to 153MB and these seem to be too much.

We could try to limit the amount of memory that a dependency would bring, or we could add optional, keyword arguments to these functions and then have framework/gui-utils supply translations of those arguments (exporting functions to be called in place of get-file et al).

@alshopov

Copy link
Copy Markdown
ContributorAuthor

The addition of the dependency from racket/gui to string-constants is problematic.

Did I really do that? gui-lib/info.rkt already contained ["string-constants-lib" #:version "1.24"], I just bumped it up to 1.33. Are there so many new messages and are they loaded at the same time to take up this additional memory? I though that there is only one translation loaded at a single time so even though some more need more memory - that will be offset by the removal of the English versions.
While I did add string-constants to required of gui-lib/mred/private/messagebox.rkt, gui-lib/mrlib/terminal.rkt already did that and there are many more other files requiring the library so this package has already been used - git grep '[(]string-constant' | wc -l in the repo gives more that 360 usages. What am I missing in the picture and how can I improve things?

@rfindler

rfindler commented Feb 20, 2020 via email

Copy link
Copy Markdown
Member

@alshopov

Copy link
Copy Markdown
ContributorAuthor

the module level one wasn't, I believe.

I have not added anything on module level. The whole change was bumping the dependency at pkg level and using 3 constants. Perhaps there is something trivial I am overlooking.

@rfindler

Copy link
Copy Markdown
Member

The issue is the addition of the new line 7 in gui-lib/mred/private/messagebox.rkt. That makes the memory use of the programs that Matthew reported jump and what I mean by "adding a dependency" from racket/gui to string-constants.

Does this make more sense?

@rfindler

Copy link
Copy Markdown
Member

I don't think we can merge this one in its current state.

We could change things by some how parameterizing message-box and friends to internationalize them and then have properly internationalized versions available via the framework.

@rfindler

Copy link
Copy Markdown
Member

Would it be horrible to add optional arguments to message-box (and friends) but where their default values were determined by some mutable state and then have the framework gui library mutate that state (using string constants)?

We could document this in the docs for message-box (since a dependency in the documentation is okay), telling people that something fishy is going on.

@alshopov

alshopov commented Sep 28, 2020 via email

Copy link
Copy Markdown
ContributorAuthor

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

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

Use translations for common constants - #166

Open
alshopov wants to merge 1 commit into
racket:masterfrom
alshopov:messagebox
Open

Use translations for common constants#166
alshopov wants to merge 1 commit into
racket:masterfrom
alshopov:messagebox

Conversation

@alshopov

Copy link
Copy Markdown
Contributor

Yes/No may lose shortcuts but these are currently non-translatable anyway.

Signed-off-by: Alexander Shopov ash@kambanaria.org

@rfindler

Copy link
Copy Markdown
Member

Two worries:

  • the bigger one is that this introduces a dependency between racket/gui and string-constants. Probably have to get @mflatt to weigh in on that one

  • the more minor one is that the yes and no string constants need the & in them (that's how the buttons get keyboard shortcuts on some platforms; the letter following the & gets an underline and is the keystroke to click the button).

@rfindler

Copy link
Copy Markdown
Member

Oh, sorry. I just looked at the diff, not your comment! How about just having a string constant yes-in-a-button where there is a note next to it saying what the & means (or similar)?

@alshopov

Copy link
Copy Markdown
ContributorAuthor

...How about just having a string constant yes-in-a-button ...
I will, though will suffix it with '-mnemonic'. Accelerators age generally available in many interface elements.

@alshopov

alshopov commented Feb 16, 2020

Copy link
Copy Markdown
ContributorAuthor

Land after racket/string-constants#44
Land after racket/string-constants#43

Yes/No may lose shortcuts but these are currently non-translatable anyway.
Signed-off-by: Alexander Shopov <ash@kambanaria.org>
@alshopov

Copy link
Copy Markdown
ContributorAuthor

The checks fail becuase the updates to the string constants have not been merged.

@rfindler

Copy link
Copy Markdown
Member

The addition of the dependency from racket/gui to string-constants is problematic. Matthew conducted an experiment and reports that string-constants adds 8MB to a 66MB heap for racket with racket/gui/base loaded. For Racket CS it’s +14MB added to 153MB and these seem to be too much.

We could try to limit the amount of memory that a dependency would bring, or we could add optional, keyword arguments to these functions and then have framework/gui-utils supply translations of those arguments (exporting functions to be called in place of get-file et al).

@alshopov

Copy link
Copy Markdown
ContributorAuthor

The addition of the dependency from racket/gui to string-constants is problematic.

Did I really do that? gui-lib/info.rkt already contained ["string-constants-lib" #:version "1.24"], I just bumped it up to 1.33. Are there so many new messages and are they loaded at the same time to take up this additional memory? I though that there is only one translation loaded at a single time so even though some more need more memory - that will be offset by the removal of the English versions.
While I did add string-constants to required of gui-lib/mred/private/messagebox.rkt, gui-lib/mrlib/terminal.rkt already did that and there are many more other files requiring the library so this package has already been used - git grep '[(]string-constant' | wc -l in the repo gives more that 360 usages. What am I missing in the picture and how can I improve things?

@rfindler

rfindler commented Feb 20, 2020 via email

Copy link
Copy Markdown
Member

@alshopov

Copy link
Copy Markdown
ContributorAuthor

the module level one wasn't, I believe.

I have not added anything on module level. The whole change was bumping the dependency at pkg level and using 3 constants. Perhaps there is something trivial I am overlooking.

@rfindler

Copy link
Copy Markdown
Member

The issue is the addition of the new line 7 in gui-lib/mred/private/messagebox.rkt. That makes the memory use of the programs that Matthew reported jump and what I mean by "adding a dependency" from racket/gui to string-constants.

Does this make more sense?

@rfindler

Copy link
Copy Markdown
Member

I don't think we can merge this one in its current state.

We could change things by some how parameterizing message-box and friends to internationalize them and then have properly internationalized versions available via the framework.

@rfindler

Copy link
Copy Markdown
Member

Would it be horrible to add optional arguments to message-box (and friends) but where their default values were determined by some mutable state and then have the framework gui library mutate that state (using string constants)?

We could document this in the docs for message-box (since a dependency in the documentation is okay), telling people that something fishy is going on.

@alshopov

alshopov commented Sep 28, 2020 via email

Copy link
Copy Markdown
ContributorAuthor

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@alshopov@rfindler
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Use translations for common constants by alshopov · Pull Request #166 · racket/gui · GitHub
Skip to content

Use translations for common constants - #166

Open
alshopov wants to merge 1 commit into
racket:masterfrom
alshopov:messagebox
Open

Use translations for common constants#166
alshopov wants to merge 1 commit into
racket:masterfrom
alshopov:messagebox

Conversation

@alshopov

Copy link
Copy Markdown
Contributor

Yes/No may lose shortcuts but these are currently non-translatable anyway.

Signed-off-by: Alexander Shopov ash@kambanaria.org

@rfindler

Copy link
Copy Markdown
Member

Two worries:

  • the bigger one is that this introduces a dependency between racket/gui and string-constants. Probably have to get @mflatt to weigh in on that one

  • the more minor one is that the yes and no string constants need the & in them (that's how the buttons get keyboard shortcuts on some platforms; the letter following the & gets an underline and is the keystroke to click the button).

@rfindler

Copy link
Copy Markdown
Member

Oh, sorry. I just looked at the diff, not your comment! How about just having a string constant yes-in-a-button where there is a note next to it saying what the & means (or similar)?

@alshopov

Copy link
Copy Markdown
ContributorAuthor

...How about just having a string constant yes-in-a-button ...
I will, though will suffix it with '-mnemonic'. Accelerators age generally available in many interface elements.

@alshopov

alshopov commented Feb 16, 2020

Copy link
Copy Markdown
ContributorAuthor

Land after racket/string-constants#44
Land after racket/string-constants#43

Yes/No may lose shortcuts but these are currently non-translatable anyway.
Signed-off-by: Alexander Shopov <ash@kambanaria.org>
@alshopov

Copy link
Copy Markdown
ContributorAuthor

The checks fail becuase the updates to the string constants have not been merged.

@rfindler

Copy link
Copy Markdown
Member

The addition of the dependency from racket/gui to string-constants is problematic. Matthew conducted an experiment and reports that string-constants adds 8MB to a 66MB heap for racket with racket/gui/base loaded. For Racket CS it’s +14MB added to 153MB and these seem to be too much.

We could try to limit the amount of memory that a dependency would bring, or we could add optional, keyword arguments to these functions and then have framework/gui-utils supply translations of those arguments (exporting functions to be called in place of get-file et al).

@alshopov

Copy link
Copy Markdown
ContributorAuthor

The addition of the dependency from racket/gui to string-constants is problematic.

Did I really do that? gui-lib/info.rkt already contained ["string-constants-lib" #:version "1.24"], I just bumped it up to 1.33. Are there so many new messages and are they loaded at the same time to take up this additional memory? I though that there is only one translation loaded at a single time so even though some more need more memory - that will be offset by the removal of the English versions.
While I did add string-constants to required of gui-lib/mred/private/messagebox.rkt, gui-lib/mrlib/terminal.rkt already did that and there are many more other files requiring the library so this package has already been used - git grep '[(]string-constant' | wc -l in the repo gives more that 360 usages. What am I missing in the picture and how can I improve things?

@rfindler

rfindler commented Feb 20, 2020 via email

Copy link
Copy Markdown
Member

@alshopov

Copy link
Copy Markdown
ContributorAuthor

the module level one wasn't, I believe.

I have not added anything on module level. The whole change was bumping the dependency at pkg level and using 3 constants. Perhaps there is something trivial I am overlooking.

@rfindler

Copy link
Copy Markdown
Member

The issue is the addition of the new line 7 in gui-lib/mred/private/messagebox.rkt. That makes the memory use of the programs that Matthew reported jump and what I mean by "adding a dependency" from racket/gui to string-constants.

Does this make more sense?

@rfindler

Copy link
Copy Markdown
Member

I don't think we can merge this one in its current state.

We could change things by some how parameterizing message-box and friends to internationalize them and then have properly internationalized versions available via the framework.

@rfindler

Copy link
Copy Markdown
Member

Would it be horrible to add optional arguments to message-box (and friends) but where their default values were determined by some mutable state and then have the framework gui library mutate that state (using string constants)?

We could document this in the docs for message-box (since a dependency in the documentation is okay), telling people that something fishy is going on.

@alshopov

alshopov commented Sep 28, 2020 via email

Copy link
Copy Markdown
ContributorAuthor

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

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

Use translations for common constants - #166

Open
alshopov wants to merge 1 commit into
racket:masterfrom
alshopov:messagebox
Open

Use translations for common constants#166
alshopov wants to merge 1 commit into
racket:masterfrom
alshopov:messagebox

Conversation

@alshopov

Copy link
Copy Markdown
Contributor

Yes/No may lose shortcuts but these are currently non-translatable anyway.

Signed-off-by: Alexander Shopov ash@kambanaria.org

@rfindler

Copy link
Copy Markdown
Member

Two worries:

  • the bigger one is that this introduces a dependency between racket/gui and string-constants. Probably have to get @mflatt to weigh in on that one

  • the more minor one is that the yes and no string constants need the & in them (that's how the buttons get keyboard shortcuts on some platforms; the letter following the & gets an underline and is the keystroke to click the button).

@rfindler

Copy link
Copy Markdown
Member

Oh, sorry. I just looked at the diff, not your comment! How about just having a string constant yes-in-a-button where there is a note next to it saying what the & means (or similar)?

@alshopov

Copy link
Copy Markdown
ContributorAuthor

...How about just having a string constant yes-in-a-button ...
I will, though will suffix it with '-mnemonic'. Accelerators age generally available in many interface elements.

@alshopov

alshopov commented Feb 16, 2020

Copy link
Copy Markdown
ContributorAuthor

Land after racket/string-constants#44
Land after racket/string-constants#43

Yes/No may lose shortcuts but these are currently non-translatable anyway.
Signed-off-by: Alexander Shopov <ash@kambanaria.org>
@alshopov

Copy link
Copy Markdown
ContributorAuthor

The checks fail becuase the updates to the string constants have not been merged.

@rfindler

Copy link
Copy Markdown
Member

The addition of the dependency from racket/gui to string-constants is problematic. Matthew conducted an experiment and reports that string-constants adds 8MB to a 66MB heap for racket with racket/gui/base loaded. For Racket CS it’s +14MB added to 153MB and these seem to be too much.

We could try to limit the amount of memory that a dependency would bring, or we could add optional, keyword arguments to these functions and then have framework/gui-utils supply translations of those arguments (exporting functions to be called in place of get-file et al).

@alshopov

Copy link
Copy Markdown
ContributorAuthor

The addition of the dependency from racket/gui to string-constants is problematic.

Did I really do that? gui-lib/info.rkt already contained ["string-constants-lib" #:version "1.24"], I just bumped it up to 1.33. Are there so many new messages and are they loaded at the same time to take up this additional memory? I though that there is only one translation loaded at a single time so even though some more need more memory - that will be offset by the removal of the English versions.
While I did add string-constants to required of gui-lib/mred/private/messagebox.rkt, gui-lib/mrlib/terminal.rkt already did that and there are many more other files requiring the library so this package has already been used - git grep '[(]string-constant' | wc -l in the repo gives more that 360 usages. What am I missing in the picture and how can I improve things?

@rfindler

rfindler commented Feb 20, 2020 via email

Copy link
Copy Markdown
Member

@alshopov

Copy link
Copy Markdown
ContributorAuthor

the module level one wasn't, I believe.

I have not added anything on module level. The whole change was bumping the dependency at pkg level and using 3 constants. Perhaps there is something trivial I am overlooking.

@rfindler

Copy link
Copy Markdown
Member

The issue is the addition of the new line 7 in gui-lib/mred/private/messagebox.rkt. That makes the memory use of the programs that Matthew reported jump and what I mean by "adding a dependency" from racket/gui to string-constants.

Does this make more sense?

@rfindler

Copy link
Copy Markdown
Member

I don't think we can merge this one in its current state.

We could change things by some how parameterizing message-box and friends to internationalize them and then have properly internationalized versions available via the framework.

@rfindler

Copy link
Copy Markdown
Member

Would it be horrible to add optional arguments to message-box (and friends) but where their default values were determined by some mutable state and then have the framework gui library mutate that state (using string constants)?

We could document this in the docs for message-box (since a dependency in the documentation is okay), telling people that something fishy is going on.

@alshopov

alshopov commented Sep 28, 2020 via email

Copy link
Copy Markdown
ContributorAuthor

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@alshopov@rfindler