Prepare Release 0.1.2 (And Release Helper) - #110

Merged
posborne merged 5 commits into
mainfrom
posborne/rel-0.1.2
Jun 3, 2026
Merged

Prepare Release 0.1.2 (And Release Helper)#110
posborne merged 5 commits into
mainfrom
posborne/rel-0.1.2

Conversation

@posborne

Copy link
Copy Markdown
Member

Release bump; so I don't forget the steps I added a helper with a Make target for doing the bumps a little bit easier. Mostly just wanted to be a bit more competent in getting all the uv.lock updates for the examples as they exist currently.

The docs were also updated to reference this and added the pre-release -> release step to get things on to PyPI.

This is not necessary but bumping the example uv.lock files
felt a bit annoying, so I decided to script it. The pre-release ->
release instructions in our notes were also missing, so I added
that in.
If the examples dependencies haven't been already pulled in by
another command, lint can fail. Run our ruff checks with those
extra bits in the environment explicitly.
Using the fancy helper.
@posborne
posborne requested a review from erikroseJune 2, 2026 22:37

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you remove the lookbehind? Then we're ready to rock.

Comment threadCONTRIBUTING.md Outdated
5. (Pending) If the release is built successfully, it will make its way to PyPI
via trusted publishing.

5. If the release workflow succeeds, a new pre-release will be avilable on

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

avilable

Comment threadCONTRIBUTING.md Outdated
via trusted publishing.

5. If the release workflow succeeds, a new pre-release will be avilable on
Github. Afer review and update of the generated changelog, use the

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GitHub

Comment threadscripts/bump_version.py Outdated
cargo_path = root_dir / "crates" / "fastly-compute-py" / "Cargo.toml"

# pyrpoject.toml: Matches `version = "X.Y.Z"` under [project]
update_file_version(pyproject_path, r'(?<=^version = ")[^"]+', new_version)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I imagine (though didn't measure) that the lookbehind is less efficient than doing this…

# pyrpoject.toml: Matches `version = "X.Y.Z"` under [project]update_file_version(pyproject_path, r'^version = "[^"]+', 'version = "'+new_version)
# Cargo.toml: Matches `version = "X.Y.Z"` under [package]update_file_version(cargo_path, r'^version = "[^"]+', 'version = "'+new_version)

…since it has to find every instance of a run of non-quote chars and then look behind it to see if it's preceded by "version = ". The forward-looking version shouldn't do any unnecessary work.

Okay, I couldn't help myself. I measured. Before:

100,000 iterations in 2.436s — 24.358 µs/iter

After:

100,000 iterations in 0.013s — 0.134 µs/iter

:-)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can remove the lookbehind; N here (the size of the file) will never be large enough for it to matter at all and this is a utility running on a controlled input run in a context that is not performance sensitive in the least.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

True, it's just that it hurts my soul. :-)

@posborne
posborne merged commit 891eb32 into mainJun 3, 2026
1 check passed
@posborne
posborne deleted the posborne/rel-0.1.2 branch June 3, 2026 16:36
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

@posborne@erikrose
, '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

Prepare Release 0.1.2 (And Release Helper) - #110

Merged
posborne merged 5 commits into
mainfrom
posborne/rel-0.1.2
Jun 3, 2026
Merged

Prepare Release 0.1.2 (And Release Helper)#110
posborne merged 5 commits into
mainfrom
posborne/rel-0.1.2

Conversation

@posborne

Copy link
Copy Markdown
Member

Release bump; so I don't forget the steps I added a helper with a Make target for doing the bumps a little bit easier. Mostly just wanted to be a bit more competent in getting all the uv.lock updates for the examples as they exist currently.

The docs were also updated to reference this and added the pre-release -> release step to get things on to PyPI.

This is not necessary but bumping the example uv.lock files
felt a bit annoying, so I decided to script it. The pre-release ->
release instructions in our notes were also missing, so I added
that in.
If the examples dependencies haven't been already pulled in by
another command, lint can fail. Run our ruff checks with those
extra bits in the environment explicitly.
Using the fancy helper.
@posborne
posborne requested a review from erikroseJune 2, 2026 22:37

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you remove the lookbehind? Then we're ready to rock.

Comment threadCONTRIBUTING.md Outdated
5. (Pending) If the release is built successfully, it will make its way to PyPI
via trusted publishing.

5. If the release workflow succeeds, a new pre-release will be avilable on

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

avilable

Comment threadCONTRIBUTING.md Outdated
via trusted publishing.

5. If the release workflow succeeds, a new pre-release will be avilable on
Github. Afer review and update of the generated changelog, use the

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GitHub

Comment threadscripts/bump_version.py Outdated
cargo_path = root_dir / "crates" / "fastly-compute-py" / "Cargo.toml"

# pyrpoject.toml: Matches `version = "X.Y.Z"` under [project]
update_file_version(pyproject_path, r'(?<=^version = ")[^"]+', new_version)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I imagine (though didn't measure) that the lookbehind is less efficient than doing this…

# pyrpoject.toml: Matches `version = "X.Y.Z"` under [project]update_file_version(pyproject_path, r'^version = "[^"]+', 'version = "'+new_version)
# Cargo.toml: Matches `version = "X.Y.Z"` under [package]update_file_version(cargo_path, r'^version = "[^"]+', 'version = "'+new_version)

…since it has to find every instance of a run of non-quote chars and then look behind it to see if it's preceded by "version = ". The forward-looking version shouldn't do any unnecessary work.

Okay, I couldn't help myself. I measured. Before:

100,000 iterations in 2.436s — 24.358 µs/iter

After:

100,000 iterations in 0.013s — 0.134 µs/iter

:-)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can remove the lookbehind; N here (the size of the file) will never be large enough for it to matter at all and this is a utility running on a controlled input run in a context that is not performance sensitive in the least.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

True, it's just that it hurts my soul. :-)

@posborne
posborne merged commit 891eb32 into mainJun 3, 2026
1 check passed
@posborne
posborne deleted the posborne/rel-0.1.2 branch June 3, 2026 16:36
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

@posborne@erikrose
, '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

Prepare Release 0.1.2 (And Release Helper) - #110

Merged
posborne merged 5 commits into
mainfrom
posborne/rel-0.1.2
Jun 3, 2026
Merged

Prepare Release 0.1.2 (And Release Helper)#110
posborne merged 5 commits into
mainfrom
posborne/rel-0.1.2

Conversation

@posborne

Copy link
Copy Markdown
Member

Release bump; so I don't forget the steps I added a helper with a Make target for doing the bumps a little bit easier. Mostly just wanted to be a bit more competent in getting all the uv.lock updates for the examples as they exist currently.

The docs were also updated to reference this and added the pre-release -> release step to get things on to PyPI.

This is not necessary but bumping the example uv.lock files
felt a bit annoying, so I decided to script it. The pre-release ->
release instructions in our notes were also missing, so I added
that in.
If the examples dependencies haven't been already pulled in by
another command, lint can fail. Run our ruff checks with those
extra bits in the environment explicitly.
Using the fancy helper.
@posborne
posborne requested a review from erikroseJune 2, 2026 22:37

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you remove the lookbehind? Then we're ready to rock.

Comment threadCONTRIBUTING.md Outdated
5. (Pending) If the release is built successfully, it will make its way to PyPI
via trusted publishing.

5. If the release workflow succeeds, a new pre-release will be avilable on

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

avilable

Comment threadCONTRIBUTING.md Outdated
via trusted publishing.

5. If the release workflow succeeds, a new pre-release will be avilable on
Github. Afer review and update of the generated changelog, use the

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GitHub

Comment threadscripts/bump_version.py Outdated
cargo_path = root_dir / "crates" / "fastly-compute-py" / "Cargo.toml"

# pyrpoject.toml: Matches `version = "X.Y.Z"` under [project]
update_file_version(pyproject_path, r'(?<=^version = ")[^"]+', new_version)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I imagine (though didn't measure) that the lookbehind is less efficient than doing this…

# pyrpoject.toml: Matches `version = "X.Y.Z"` under [project]update_file_version(pyproject_path, r'^version = "[^"]+', 'version = "'+new_version)
# Cargo.toml: Matches `version = "X.Y.Z"` under [package]update_file_version(cargo_path, r'^version = "[^"]+', 'version = "'+new_version)

…since it has to find every instance of a run of non-quote chars and then look behind it to see if it's preceded by "version = ". The forward-looking version shouldn't do any unnecessary work.

Okay, I couldn't help myself. I measured. Before:

100,000 iterations in 2.436s — 24.358 µs/iter

After:

100,000 iterations in 0.013s — 0.134 µs/iter

:-)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can remove the lookbehind; N here (the size of the file) will never be large enough for it to matter at all and this is a utility running on a controlled input run in a context that is not performance sensitive in the least.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

True, it's just that it hurts my soul. :-)

@posborne
posborne merged commit 891eb32 into mainJun 3, 2026
1 check passed
@posborne
posborne deleted the posborne/rel-0.1.2 branch June 3, 2026 16:36
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

@posborne@erikrose
, '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

Prepare Release 0.1.2 (And Release Helper) - #110

Merged
posborne merged 5 commits into
mainfrom
posborne/rel-0.1.2
Jun 3, 2026
Merged

Prepare Release 0.1.2 (And Release Helper)#110
posborne merged 5 commits into
mainfrom
posborne/rel-0.1.2

Conversation

@posborne

Copy link
Copy Markdown
Member

Release bump; so I don't forget the steps I added a helper with a Make target for doing the bumps a little bit easier. Mostly just wanted to be a bit more competent in getting all the uv.lock updates for the examples as they exist currently.

The docs were also updated to reference this and added the pre-release -> release step to get things on to PyPI.

This is not necessary but bumping the example uv.lock files
felt a bit annoying, so I decided to script it. The pre-release ->
release instructions in our notes were also missing, so I added
that in.
If the examples dependencies haven't been already pulled in by
another command, lint can fail. Run our ruff checks with those
extra bits in the environment explicitly.
Using the fancy helper.
@posborne
posborne requested a review from erikroseJune 2, 2026 22:37

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you remove the lookbehind? Then we're ready to rock.

Comment threadCONTRIBUTING.md Outdated
5. (Pending) If the release is built successfully, it will make its way to PyPI
via trusted publishing.

5. If the release workflow succeeds, a new pre-release will be avilable on

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

avilable

Comment threadCONTRIBUTING.md Outdated
via trusted publishing.

5. If the release workflow succeeds, a new pre-release will be avilable on
Github. Afer review and update of the generated changelog, use the

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GitHub

Comment threadscripts/bump_version.py Outdated
cargo_path = root_dir / "crates" / "fastly-compute-py" / "Cargo.toml"

# pyrpoject.toml: Matches `version = "X.Y.Z"` under [project]
update_file_version(pyproject_path, r'(?<=^version = ")[^"]+', new_version)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I imagine (though didn't measure) that the lookbehind is less efficient than doing this…

# pyrpoject.toml: Matches `version = "X.Y.Z"` under [project]update_file_version(pyproject_path, r'^version = "[^"]+', 'version = "'+new_version)
# Cargo.toml: Matches `version = "X.Y.Z"` under [package]update_file_version(cargo_path, r'^version = "[^"]+', 'version = "'+new_version)

…since it has to find every instance of a run of non-quote chars and then look behind it to see if it's preceded by "version = ". The forward-looking version shouldn't do any unnecessary work.

Okay, I couldn't help myself. I measured. Before:

100,000 iterations in 2.436s — 24.358 µs/iter

After:

100,000 iterations in 0.013s — 0.134 µs/iter

:-)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can remove the lookbehind; N here (the size of the file) will never be large enough for it to matter at all and this is a utility running on a controlled input run in a context that is not performance sensitive in the least.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

True, it's just that it hurts my soul. :-)

@posborne
posborne merged commit 891eb32 into mainJun 3, 2026
1 check passed
@posborne
posborne deleted the posborne/rel-0.1.2 branch June 3, 2026 16:36
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

@posborne@erikrose
, '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

Prepare Release 0.1.2 (And Release Helper) - #110

Merged
posborne merged 5 commits into
mainfrom
posborne/rel-0.1.2
Jun 3, 2026
Merged

Prepare Release 0.1.2 (And Release Helper)#110
posborne merged 5 commits into
mainfrom
posborne/rel-0.1.2

Conversation

@posborne

Copy link
Copy Markdown
Member

Release bump; so I don't forget the steps I added a helper with a Make target for doing the bumps a little bit easier. Mostly just wanted to be a bit more competent in getting all the uv.lock updates for the examples as they exist currently.

The docs were also updated to reference this and added the pre-release -> release step to get things on to PyPI.

This is not necessary but bumping the example uv.lock files
felt a bit annoying, so I decided to script it. The pre-release ->
release instructions in our notes were also missing, so I added
that in.
If the examples dependencies haven't been already pulled in by
another command, lint can fail. Run our ruff checks with those
extra bits in the environment explicitly.
Using the fancy helper.
@posborne
posborne requested a review from erikroseJune 2, 2026 22:37

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you remove the lookbehind? Then we're ready to rock.

Comment threadCONTRIBUTING.md Outdated
5. (Pending) If the release is built successfully, it will make its way to PyPI
via trusted publishing.

5. If the release workflow succeeds, a new pre-release will be avilable on

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

avilable

Comment threadCONTRIBUTING.md Outdated
via trusted publishing.

5. If the release workflow succeeds, a new pre-release will be avilable on
Github. Afer review and update of the generated changelog, use the

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GitHub

Comment threadscripts/bump_version.py Outdated
cargo_path = root_dir / "crates" / "fastly-compute-py" / "Cargo.toml"

# pyrpoject.toml: Matches `version = "X.Y.Z"` under [project]
update_file_version(pyproject_path, r'(?<=^version = ")[^"]+', new_version)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I imagine (though didn't measure) that the lookbehind is less efficient than doing this…

# pyrpoject.toml: Matches `version = "X.Y.Z"` under [project]update_file_version(pyproject_path, r'^version = "[^"]+', 'version = "'+new_version)
# Cargo.toml: Matches `version = "X.Y.Z"` under [package]update_file_version(cargo_path, r'^version = "[^"]+', 'version = "'+new_version)

…since it has to find every instance of a run of non-quote chars and then look behind it to see if it's preceded by "version = ". The forward-looking version shouldn't do any unnecessary work.

Okay, I couldn't help myself. I measured. Before:

100,000 iterations in 2.436s — 24.358 µs/iter

After:

100,000 iterations in 0.013s — 0.134 µs/iter

:-)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can remove the lookbehind; N here (the size of the file) will never be large enough for it to matter at all and this is a utility running on a controlled input run in a context that is not performance sensitive in the least.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

True, it's just that it hurts my soul. :-)

@posborne
posborne merged commit 891eb32 into mainJun 3, 2026
1 check passed
@posborne
posborne deleted the posborne/rel-0.1.2 branch June 3, 2026 16:36
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

@posborne@erikrose
, '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

Prepare Release 0.1.2 (And Release Helper) - #110

Merged
posborne merged 5 commits into
mainfrom
posborne/rel-0.1.2
Jun 3, 2026
Merged

Prepare Release 0.1.2 (And Release Helper)#110
posborne merged 5 commits into
mainfrom
posborne/rel-0.1.2

Conversation

@posborne

Copy link
Copy Markdown
Member

Release bump; so I don't forget the steps I added a helper with a Make target for doing the bumps a little bit easier. Mostly just wanted to be a bit more competent in getting all the uv.lock updates for the examples as they exist currently.

The docs were also updated to reference this and added the pre-release -> release step to get things on to PyPI.

This is not necessary but bumping the example uv.lock files
felt a bit annoying, so I decided to script it. The pre-release ->
release instructions in our notes were also missing, so I added
that in.
If the examples dependencies haven't been already pulled in by
another command, lint can fail. Run our ruff checks with those
extra bits in the environment explicitly.
Using the fancy helper.
@posborne
posborne requested a review from erikroseJune 2, 2026 22:37

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you remove the lookbehind? Then we're ready to rock.

Comment threadCONTRIBUTING.md Outdated
5. (Pending) If the release is built successfully, it will make its way to PyPI
via trusted publishing.

5. If the release workflow succeeds, a new pre-release will be avilable on

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

avilable

Comment threadCONTRIBUTING.md Outdated
via trusted publishing.

5. If the release workflow succeeds, a new pre-release will be avilable on
Github. Afer review and update of the generated changelog, use the

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GitHub

Comment threadscripts/bump_version.py Outdated
cargo_path = root_dir / "crates" / "fastly-compute-py" / "Cargo.toml"

# pyrpoject.toml: Matches `version = "X.Y.Z"` under [project]
update_file_version(pyproject_path, r'(?<=^version = ")[^"]+', new_version)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I imagine (though didn't measure) that the lookbehind is less efficient than doing this…

# pyrpoject.toml: Matches `version = "X.Y.Z"` under [project]update_file_version(pyproject_path, r'^version = "[^"]+', 'version = "'+new_version)
# Cargo.toml: Matches `version = "X.Y.Z"` under [package]update_file_version(cargo_path, r'^version = "[^"]+', 'version = "'+new_version)

…since it has to find every instance of a run of non-quote chars and then look behind it to see if it's preceded by "version = ". The forward-looking version shouldn't do any unnecessary work.

Okay, I couldn't help myself. I measured. Before:

100,000 iterations in 2.436s — 24.358 µs/iter

After:

100,000 iterations in 0.013s — 0.134 µs/iter

:-)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can remove the lookbehind; N here (the size of the file) will never be large enough for it to matter at all and this is a utility running on a controlled input run in a context that is not performance sensitive in the least.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

True, it's just that it hurts my soul. :-)

@posborne
posborne merged commit 891eb32 into mainJun 3, 2026
1 check passed
@posborne
posborne deleted the posborne/rel-0.1.2 branch June 3, 2026 16:36
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

@posborne@erikrose
, '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

Prepare Release 0.1.2 (And Release Helper) - #110

Merged
posborne merged 5 commits into
mainfrom
posborne/rel-0.1.2
Jun 3, 2026
Merged

Prepare Release 0.1.2 (And Release Helper)#110
posborne merged 5 commits into
mainfrom
posborne/rel-0.1.2

Conversation

@posborne

Copy link
Copy Markdown
Member

Release bump; so I don't forget the steps I added a helper with a Make target for doing the bumps a little bit easier. Mostly just wanted to be a bit more competent in getting all the uv.lock updates for the examples as they exist currently.

The docs were also updated to reference this and added the pre-release -> release step to get things on to PyPI.

This is not necessary but bumping the example uv.lock files
felt a bit annoying, so I decided to script it. The pre-release ->
release instructions in our notes were also missing, so I added
that in.
If the examples dependencies haven't been already pulled in by
another command, lint can fail. Run our ruff checks with those
extra bits in the environment explicitly.
Using the fancy helper.
@posborne
posborne requested a review from erikroseJune 2, 2026 22:37

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you remove the lookbehind? Then we're ready to rock.

Comment threadCONTRIBUTING.md Outdated
5. (Pending) If the release is built successfully, it will make its way to PyPI
via trusted publishing.

5. If the release workflow succeeds, a new pre-release will be avilable on

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

avilable

Comment threadCONTRIBUTING.md Outdated
via trusted publishing.

5. If the release workflow succeeds, a new pre-release will be avilable on
Github. Afer review and update of the generated changelog, use the

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GitHub

Comment threadscripts/bump_version.py Outdated
cargo_path = root_dir / "crates" / "fastly-compute-py" / "Cargo.toml"

# pyrpoject.toml: Matches `version = "X.Y.Z"` under [project]
update_file_version(pyproject_path, r'(?<=^version = ")[^"]+', new_version)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I imagine (though didn't measure) that the lookbehind is less efficient than doing this…

# pyrpoject.toml: Matches `version = "X.Y.Z"` under [project]update_file_version(pyproject_path, r'^version = "[^"]+', 'version = "'+new_version)
# Cargo.toml: Matches `version = "X.Y.Z"` under [package]update_file_version(cargo_path, r'^version = "[^"]+', 'version = "'+new_version)

…since it has to find every instance of a run of non-quote chars and then look behind it to see if it's preceded by "version = ". The forward-looking version shouldn't do any unnecessary work.

Okay, I couldn't help myself. I measured. Before:

100,000 iterations in 2.436s — 24.358 µs/iter

After:

100,000 iterations in 0.013s — 0.134 µs/iter

:-)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can remove the lookbehind; N here (the size of the file) will never be large enough for it to matter at all and this is a utility running on a controlled input run in a context that is not performance sensitive in the least.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

True, it's just that it hurts my soul. :-)

@posborne
posborne merged commit 891eb32 into mainJun 3, 2026
1 check passed
@posborne
posborne deleted the posborne/rel-0.1.2 branch June 3, 2026 16:36
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

@posborne@erikrose
, '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

Prepare Release 0.1.2 (And Release Helper) - #110

Merged
posborne merged 5 commits into
mainfrom
posborne/rel-0.1.2
Jun 3, 2026
Merged

Prepare Release 0.1.2 (And Release Helper)#110
posborne merged 5 commits into
mainfrom
posborne/rel-0.1.2

Conversation

@posborne

Copy link
Copy Markdown
Member

Release bump; so I don't forget the steps I added a helper with a Make target for doing the bumps a little bit easier. Mostly just wanted to be a bit more competent in getting all the uv.lock updates for the examples as they exist currently.

The docs were also updated to reference this and added the pre-release -> release step to get things on to PyPI.

This is not necessary but bumping the example uv.lock files
felt a bit annoying, so I decided to script it. The pre-release ->
release instructions in our notes were also missing, so I added
that in.
If the examples dependencies haven't been already pulled in by
another command, lint can fail. Run our ruff checks with those
extra bits in the environment explicitly.
Using the fancy helper.
@posborne
posborne requested a review from erikroseJune 2, 2026 22:37

@erikroseerikrose left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you remove the lookbehind? Then we're ready to rock.

Comment threadCONTRIBUTING.md Outdated
5. (Pending) If the release is built successfully, it will make its way to PyPI
via trusted publishing.

5. If the release workflow succeeds, a new pre-release will be avilable on

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

avilable

Comment threadCONTRIBUTING.md Outdated
via trusted publishing.

5. If the release workflow succeeds, a new pre-release will be avilable on
Github. Afer review and update of the generated changelog, use the

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GitHub

Comment threadscripts/bump_version.py Outdated
cargo_path = root_dir / "crates" / "fastly-compute-py" / "Cargo.toml"

# pyrpoject.toml: Matches `version = "X.Y.Z"` under [project]
update_file_version(pyproject_path, r'(?<=^version = ")[^"]+', new_version)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I imagine (though didn't measure) that the lookbehind is less efficient than doing this…

# pyrpoject.toml: Matches `version = "X.Y.Z"` under [project]update_file_version(pyproject_path, r'^version = "[^"]+', 'version = "'+new_version)
# Cargo.toml: Matches `version = "X.Y.Z"` under [package]update_file_version(cargo_path, r'^version = "[^"]+', 'version = "'+new_version)

…since it has to find every instance of a run of non-quote chars and then look behind it to see if it's preceded by "version = ". The forward-looking version shouldn't do any unnecessary work.

Okay, I couldn't help myself. I measured. Before:

100,000 iterations in 2.436s — 24.358 µs/iter

After:

100,000 iterations in 0.013s — 0.134 µs/iter

:-)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can remove the lookbehind; N here (the size of the file) will never be large enough for it to matter at all and this is a utility running on a controlled input run in a context that is not performance sensitive in the least.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

True, it's just that it hurts my soul. :-)

@posborne
posborne merged commit 891eb32 into mainJun 3, 2026
1 check passed
@posborne
posborne deleted the posborne/rel-0.1.2 branch June 3, 2026 16:36
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

@posborne@erikrose