ペンタブでうまく描けない問題

中間原因:ドローイングしているとpointercancelイベント(からのpointerleaveイベント)が定期的に勝手に発生していることが間接的原因であることが判明


根本原因:touch-actionがnoneになっていないことによりpointercancelイベントが引き起こされてドローイングが中断させられていた


参考記事

javascript - Pointer Event issue: pointercancel with pressure input (pen) - Stack Overflow

Windows向けにElectronアプリをビルド時にrcedit-x64.exe関連のエラー

結論:WSLを使うな。windows power shell上でビルドすると上手くいった

ちなみにこの解決策はChatGPT4が提案してくれたもので、ググるよりも圧倒的に早く答えに辿り着けた。(最初はwindows power shell使うのが嫌で、ググって別の解決策がないか1,2時間粘った)


ビルド時だけでなく、開発中もwslからアプリを起動すると画面にグリッチが入ったり細かいエラーがでたりで困っていたが、windows power shellからnpm startするとネイティブのWindowsのネイティブwindowが開いてエラーも出ずにすんなりいろいろな問題が解決した。

こういうのを体験すると、Unityとかのクロスプラットフォーム出力をやってくれる裏には、泥臭いことをいろいろ面倒みてくれているんだろうな、という感想。

nvmなどでnodeをダウングレードすると、webpack実行でMODULE_NOT_FOUNDがでる問題

解決方法:node_modulesディレクトリを消してもう一度npm installからやり直すとうまくいった

ChatGPT4に聞くと

npm cache clean --force

を実行すると治るかもというヒントでnodeのバージョンをダウングレードしたことが原因かもとピンと来たが、上のcache cleanだけではうまくいかなかった。
そこでnode_modulesディレクトリを消すとうまく行った。

NW.jsで描画に関するパフォーマンスがWEBブラウザより落ちる問題

結論:SDK版はdevtool表示しなくても遅い
このことに気づかずにはまった。runtime版を使うとWEBブラウザで表示した時と同じようなパフォーマンスになった

web3.js + web3j でmetamaskの署名検証

web3.js と web3jの組み合わせは地雷が多い。

ここにいろいろまとめられているが、要するにfrontとbackend間にprefixやエンコードなどのルールに差があることでうまくいかない。
https://lyhistory.com/docs/blockchain/ethereum/eth_web3.html

解決方法

この記事のコメントに解決方法がかかれていた。
https://www.toptal.com/ethereum/one-click-login-flows-a-metamask-tutorial


曰く

Sebestyén Csorba • 3 years ago
Thx for the article! Side note: I had a hard time with the web3j backend integration (the java library), until I found out, that

web3.personal.sign(web3.fromUtf8("aaaa"), web3.eth.coinbase, console.log);

means singing the original message prefixed with a constant and the length of the message, like this:

web3.eth.sign(web3.eth.coinbase, web3.sha3("\x19Ethereum Signed Message:\n4aaaa"), console.log)

frontは↑のやり方で署名する。
で、backendは下のやり方で検証する。
https://www.jianshu.com/p/f781cf3e8fc7

この組み合わせでうまくいった。

headless chrome で認証付きproxyを使う方法

headlessでないならこのやり方
how to set proxy with authentication in selenium chromedriver python? - Stack Overflow

headlessのchromeなら下のやり方しかなさげ。

os.environ['https_proxy'] = "http://user:pass@host:port"
os.environ['http_proxy'] = "http://user:pass@host:port"
os.environ['HTTPS_PROXY'] = "http://user:pass@host:port"
os.environ['HTTP_PROXY'] = "http://user:pass@host:port"

ただしdriverをインスタンス化する前に上記を定義しておく必要があり、その後は変更できないので、プログラム中で動的にプロキシーを変更することができない。


また、remote-debugging-portを使い場合はすでに存在するプロセスが使われることがあるが、そのプロセスがproxy適用前に生成されたものだと、proxyが適用されていない挙動をするので注意。
以下のコマンドで古いプロセスがあるかを調べ、あればkillする。

netstat -pna | grep 9222