Skip to content

Instantly share code, notes, and snippets.

View bee-san's full-sized avatar
🌻
Tending to my plants

Autumn (Bee) bee-san

🌻
Tending to my plants
View GitHub Profile
@bee-san
bee-san / after-dark.png
Last active September 16, 2026 11:01
Hachidori Fluent icon PR visual evidence
after-dark.png
@bee-san
bee-san / INDEPENDENT-REVIEW.md
Last active September 15, 2026 22:37
Hachidori PR 208 benchmark evidence, final head 57529a0c (not a software release)

Independent review — t_61d4226f

Verdict and final revision

Correctness review complete; one reproducible Escape defect fixed and independently approved. Final dedicated-branch HEAD: 57529a0c3e9bbd3d77566a132bee9e503f2e5895, pushed and read back from origin. Existing PR bee-san/hachidori#208 remains OPEN, draft, autoMergeRequest null. No merge, no auto-merge, no bot comments. Downstream t_5238f262 owns PR publication, CI and hosted quality/review gates; those are NOT certified by this report.

Original reviewed implementation 892f38e2ad6006577cf0bb8a19c7111410fc1cdc was verified in a fresh detached review-clean worktree. Landed origin/main c1a007aa32c1dd49532b4d082ddbf3e39f2f3a98 was integrated as cc9469004888966b373a71ebc4442a9bf48acb81, preserving mouse resizing and compact UI without absorbing open branches. Integrated and final checks each used separate clean detached worktrees (review-integrated and review-final), not untracked source in the working checkout.

Findings an

@bee-san
bee-san / popup-resize.html
Created September 15, 2026 20:31
Hachidori PR 197: real Chrome popup resize screenshots (PR evidence only)
<html><meta charset=utf-8><title>Hachidori PR 197 popup resize</title><h1>Physical popup resize, Chrome 152</h1><h2>before</h2><img width=960 src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAAOECAIAAABxdwtUAAAQAElEQVR4nOzdB2AT5f/H8UuadO9CF7vsvfcWARmCLBFkuBURByoOEOXnxC0qoiIoG0SQJXvvvfcu0L33zu9pD8KR1bQU2pL3659f/ndPbuRS9fLJ97nnNDqdTgIAAAAA4EGnlgAAAAAAsAEEYAAAAACATSAAAwAAAABsAgEYAAAAAGATCMAAAAAAAJtAAAYAAAAA2AQCMAAAAADAJhCAAQAAAAA2gQAMAAAAALAJBGAAAAAAgE0gAAMAAAAAbAIBGAAAAABgEwjAAAAAAACbQAAGAAAAANgEAjAAAAAAwCYQgAEAAAAANoEADAAAAACwCQRgAAAAAIBNIAADAAAAAGwCARgAAAAAYBMIwAAAAAAAm0AABgAAAADYBAIwAAAAAMAmEIABAAAAADaBAAwAAAAAsAkEYAAAAACATSAAAwAAAABsAgEYAAAAAGATCMAAAAAAAJugke6ZBk8fkWB7js1sJAEAAABAyUMFGAAAAABgEwjAAAAAAACbcA+7QBc5nU4nocTjzwTgLqlUKgkAAOAeKBEBmMgEANCz8qRATgYAAAV1/wIwKRcAUIQsnFbIxgAAwKR7FYB1eSQAAO474xMQkRgAAEhFGIALF3erBDi8N6y8i6Pd/jNJ3/8dIgEAcA8YnKTIwwAA2Ka7CsB3WeNtVcfty1GVPV3txHT9IOcAH+27v14tUWXjtV/X1WpU4TEZQ/53TrIxtnzsAB54yvMXYRgAANtRmNsg6W6RCstBq3rricCpY6uK9HslLP3P1RFiYz1aes2ZUKNaOUepZHByUItMXsZDo1YX5Xe
@bee-san
bee-san / pr-198-screenshots.html
Created September 15, 2026 20:21
Hachidori PR 198: real Chrome before/after screenshots (download HTML to view)
This file has been truncated, but you can view the full file.
<html><meta charset="utf-8"><title>PR 198 screenshots</title><body><h2>Before: dirty state (26px shift)</h2><img style="max-width:100%" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAPoCAIAAACnGc6kAAAQAElEQVR4nOzdBWATd98H8Lt4mrq7lyJFiru7+wZjzMfc5Zm7vHNXxoApDHd3d2kLpe6uaRrPvb/LtSHUKBsFCt/P25fncrncXS6XW/7fv5wkPCKGAbjeIiKic3OyGAAAAAAAAIAr5x8QJGIAAAAAAAAAAFo5BBwAAAAAAAAA0Ooh4AAAAAAAAACAVg8BBwAAAAAAAAC0egg4AAAAAAAAAKDVQ8ABAAAAAAAAAK0eAg4AAAAAAAAAaPUQcAAAAAAAAABAq4eAAwAAAAAAAABaPQQcAAAAAAAAANDqIeAAAAAAAAAAgFYPAQcAAAAAAAAAtHoIOAAAAAAAAACg1UPAAQAAAAAAAACtHgIOAAAAAAAAAGj1EHAAAAAAAAAAQKuHgAMAAAAAAAAAWj0EHAAAAAAAAADQ6iHgAAAAAAAAAIBWDwEHAAAAAAAAALR6CDgAAAAAAAAAoNVDwAEAAAAAAAAArR4CDgAAAAAAAABo9RBwAAAAAAAAAECrh4ADAAAAAAAAAFo9BBwAAAAAAAAA0Ooh4AAAAAAAAACAVg8BBwAAAAAAAAC0egg4AAAAAAAAAKDVQ8ABAAAAAAAAAK0eAg4AAAAAAAAAaPUQcAAAAAAAAABAq4eAAwAAAAAAAABaPQkDADeeB+6/Z9SIYbl5+T/9vCAuPoEBAAAAAACAJiHgAODNnD513oP31Zmp1VZXVKrLy8oPHz2+dt2GsrIy5poI8Pe/feZ0mnBzc7v9thmvvv4WAwAAAAAAAE1CwAHQKKXSgf58fXzato2+Y9bMNWs3/PjzLyaTiQEAAAAAAIAbD
@bee-san
bee-san / benchmark-summary.mjs
Created September 15, 2026 20:12
Hachidori PR195 compact summary before/after screenshot evidence (PNG embedded losslessly in SVG), reproduction and targeted timings
import puppeteer from '../tooling/node_modules/puppeteer-core/lib/puppeteer/puppeteer-core.js';
import {resolve} from 'node:path';
const browser = await puppeteer.launch({executablePath:resolve('test/tmp/browsers/chrome/linux-152.0.7977.75/chrome-linux64/chrome'),headless:true,args:['--no-sandbox']});
try {
const page=await browser.newPage();
await page.setViewport({width:900,height:700});
await page.setContent('<p>漢字表記</p><div id="host"></div>');
for(const file of ['external-links.js','render/glossary.js','render/popup.js']) await page.addScriptTag({path:resolve('extension',file)});
const {readFileSync}=await import('node:fs');
const {execFileSync}=await import('node:child_process');
@bee-san
bee-san / bg3-get-paks-guide.md
Created September 14, 2026 09:29
BG3 modding: copying Shared.pak / Models.pak from your own install to a Linux box (rsync/scp, checksums, LSLib filtered extract)

Getting Shared.pak + Models.pak from your own BG3 install onto a Linux box

For personal modding (custom summon / model work). Everything below reads files from your own installed copy of Baldur's Gate 3 — nothing is downloaded from third parties.

Target on the Linux box: ~/Documents/bg3/

0. Before you copy

  • Let Steam/GOG finish any pending BG3 update so the files match what you actually play. Don't start the game or an update mid-copy.
  • Note the version string shown in the bottom corner of the game's main menu (e.g. 4.1.1.xxxxxxx) — it's useful for checking that any reference data (UUIDs, stats) matches your build.
These are published in p3rpc.nativetypes/Xrd777.cs and the message structures later in that file.
So P3R already maintains:
The current visible page.
Its lines and individual UTF-8 characters.
A separate color for every character.
That last field explains the yellow highlight: change the selected letters’ FSprColor, let P3R render its normal frame, then restore the colors.
# Small Experimental Hoshidicts Reader and Mining Integration
## Summary
- Add Hoshidicts behind enable_experimental_features && enable_hoshidicts; both default off. Changing the Hoshidicts toggle requires restarting the overlay.
- When enabled, Hoshidicts handles Japanese term scanning and the Hoshi Reader popup. Yomitan scanning/popups are disabled, but its GSM bridge remains loaded for minimal Anki mining. When
disabled, existing Yomitan behavior is unchanged.
- V1 includes dictionary import/removal, scheduled updates, Japanese word lookup, and one mouse-driven mining button. Exclude controllers, hotkeys, kanji lookup, nested popup scanning,
word audio, dictionary media, frequency/pitch export, note browsing, and multiple mining formats.
import azure.functions as func
import logging
import azure.cognitiveservices.speech as speechsdk
# Azure Speech API key and region
azure_region = "XXXX"
azure_key = "XXXX"
app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)

Note: If you are not comfortable with tech / python please do not follow this guide nor ask me for help. I am too busy immersing to teach someone to use Python, but if you are experienced you can ask :)

Why do this?

I work in tech and love tech.

When you love tech, sometimes you make something just because you can. There is no real reason as to why you want to do this, but perhaps if you are not familar with having fun there are some reasons:

  1. You may be in the military and need to go 1+ years without internet.
  2. You are in a country with good internet and have to go back to a country with old internet.
  3. You work as a researcher in Antartica and only have access to the internet for a few minutes a day, and most of that time will be needed for downloading research datasets.