2022-01-01から1年間の記事一覧
ruby.wasmについて、現時点で僕が思っていることを記録しておきます。 思っていること 主にonブラウザ 僕がruby.wasmに興味があるのは、ブラウザで動かす方です。 エッジワーカーで動かす方は今のところあまり興味がありません。 また、ruby.wasmがプロダク…
何並列までいけるのか? - @ledsun blog で4並列で頭打ちになりました。 IOの影響をさらにそぎ落とすために、計測スクリプトを次のように改良しました。 require 'benchmark' require 'text_alignment' require 'active_support' require_relative 'config/i…
Ractorちゃん並列化してたー。 - @ledsun blog でRactorで並列に動かせていることを確認しました。 しかし4コアのマシンで確認したため、並列数の上限がわかりませんでした。 そこでAWS上のEC2インスタンスを使って並列数の上限を調べます。 t3.2xlargeイン…
require_relativeはパッチれない - @ledsun blog で、Rubyスクリプトの実行前に、Rubyスクリプトを静的にあつかってrequire_relativeを置き換えることにしました。 そこで次のアイデアを思いつきました。 Rubyスクリプトの実行前に、require_relativeの参照…
fetchは非同期だった - @ledsun blog でfetchの完了をRuby側で待てなくて、require_relativeの順番の制御が上手く行きませんでした。 ruby.wasmでJS::Object.awaitという関数を見つけました。 名前からするとPromiseを待てそうな関数です。 これを使えばfetc…
インスタンス生成コストが大きかった - @ledsun blog までやった結果、Ractor間で受け渡しているデータ構造が大分はっきりしました。 ここまできたら、送信データを保存しておけば、Ractor化している処理だけで実行出来るはずです。 次のような感じで、Racto…
Ractor化する範囲を小さくしたら遅くなった - @ledsun blog で、Ractor化する範囲を小さくしたら処理が遅くなって混乱しました。 よくよくソースコードを確認したところ、変わっている場所がありました。 aligner = TextAlignment::TextAlignment.new(msg[:r…
GCの影響は少なそう - @ledsun blog で、コピーする範囲を小さくすることで高速化できそうと考えました。 そこで、根本的にRactor化する範囲を小さくします。 そうすることでRactorで受け渡しするデータを最小化し、なんならmoveします。 次のようなソースコ…
AWS EC2上で並列処理の時間を再々計測した - @ledsun blog で、次の3つの仮説を立てました。 コピーがボトルネックではなかった コピーは減ったが相変わらずボトルネックである コピーで作られたオブジェクトのGCがボトルネックだった また1は可能性が低いと…
AWS EC2上で並列処理の時間を再計測した - @ledsun blog でAWS環境で計測したデータが、その前に計測したデータと違いました。 どっちが真かわからないのでもう一度再計測しました。 AWS上で3回目の計測 AWS上で2回目の計測 AWS上で1回目の計測 1回目が明ら…
requrie_relativeをハックしたい require_relativeの相対参照の起点となるもの - @ledsun blog でRubyスクリプトのURLを保持する必要があるとわかりました。 そこで次の感じでURLを保持したVMクラスを作りました。 import { RubyScriptAndSourceURL } from "…
Ractor間のデータのやりとりでコピーを減らすには - @ledsun blog でAWS上で再計測してみると書きました。 再計測しました。 AWS上でのコピー1回と2回の処理時間の比較 あまり効果がないようです。 ローカルPCで試したときは、次のようにもう少し明確に効果…
Ractor#send move:true したときに出た3つのエラー - @ledsun blog にて、ディープコピーを減らすためにmoveオプションを使いました。 ところがエラーがでました。またエラーの内容が難解で対応出来そうにありません。 そこで、ディープコピーを減らすための…
詰まっているのはワーカーでなくパイプ? - @ledsun blog で、「Ractor間のデータ受け渡し時のコピーがボトルネックになっている」という仮説を立てました。 これを確認するために、Ractor間のデータの受け渡しをmoveにしてみます。 次のようにRactor#sendと…
並列数をかえても処理時間が変わらない謎 - @ledsun blog で「サチっているかもしれない」と仮説を立てました。 それを検証するために並列数を変えて計測してみました。 並列数と処理時間のグラフ 処理時間なので低いほど性能が高いです。 3どころか1並列で…
とあるRuby on RailsアプリケーションのSidekiqで動くバックグラウンドジョブを高速化をしています。 CPUバウンドな処理に時間が掛かっています。 並列化して高速化できるか試しています。 RactorでWoker pool - @ledsun blog で、4コアのPCで並列化できると…
PowerShellのアップデート方法が、自分のなかでイマイチ決まっていません。 おおむねwingetでアップデートすれば良いと思っています。 今回アップデートしたら不思議な現象に出くわしたのでメモっておきます。 PS C:\Users\led_l> winget upgrade PowerShell…
WSL2にDistrodをインストールした - @ledsun blog でsystemdを使うためにDistrodを入れました。 「Windows Subsystem for Linux」が「systemd」に対応へ - 窓の杜 によるとWSL自体がsystemdをサポートするようになったので、Distrodを使うのをやめました。 …
読みやすいコードのガイドライン -持続可能なソフトウェア開発のために作者:石川 宗寿技術評論社Amazon を、読んでいたら、可読性を高めるために役立つプログラミングの原則を紹介されていました。 ボーイスカウトルール YAGNI KISS 単一責務の原則 早計な最…
火曜日から木曜日まで風邪でお休みしました。 火曜日。鼻水 木曜日。発熱 金曜日。咳・痰 奥へ奥へ進軍されました。
ruby.wasmのrequire_relativeでfetchする - @ledsun blog fetchは非同期だった - @ledsun blog の続きです。前回fetchで実装してみたところ、非同期APIではrequire_relativeの同期性*1を保証できないことに気が付きました。 ブラウザから同期でHTTPリクエス…
特定バージョンのNode.jsを使うシチュエーションが減ったので、nvmをアンインストールします。 nvm(Node Version Manager)のアンインストール(削除) | WEBREEをみるとディレクトリだけ消せば良さそうです。 念のため nvm uninstall 17.0.1 してから rm -rf $…
ruby.wasmのrequire_relativeでfetchする - @ledsun blog で良い感じに require_relative をfetchに置き換えられました。 ところがfetchは非同期関数なのです。 次のようなRubyスクリプトがあります。 require_relative "a-1" require_relative "a-2" p 'a l…
https://t.co/uEQMxttpce gh コマンドでrepo forkするのはどうでしょう— 馬美肉 (@chiastolite) October 1, 2022 で、紹介してもらいました。 今回はForkしたかったわけでなくてプルリクエストを作りたかっただけです。 試しにGitHub CLI | Take GitHub to t…
ruby.wasmをブラウザで動かす時require_relativeを相対パスへのfetchに置き換えられる? - @ledsun blog で ruby.wasm ハックアイデアを思いつきました。 実際にやってみます。 packages/npm-packages/ruby-wasm-wasi/src/browser.script.ts に次のようなコ…
WSL起動時にCannot open display ":0"が表示される どうもWSLgが上手く動いていないみたいです。 Xを使うアプリケーション起動すると同様のメッセージを表示して失敗します。 xeyesコマンドを実行するとCannot open display ":0"が表示される 試したけど直ら…
WSLアップデートの案内 WSLのアップデート アップデート後のWSLのバージョン WSLのバージョン - @ledsun blog の時はWindowsのビルドとWSLのビルドが連動していたように記憶しています。 Microsoft Store での WSL のリリース ノート | Microsoft Learn によ…
ruby.wasmをブラウザで動かす時require_relativeを相対パスへのfetchに置き換えられる? - @ledsun blog で、ruby.wasmをハックしようと考えました。 実際どうすればハック出来るのかよくわかりません。 irb.wasm がgem関数でgemインストール出来ることがわ…
Enable src attribute in script tag in browser.script.iife.js. by ledsun · Pull Request #49 · ruby/ruby.wasm · GitHub が取り込まれたので使ってみました。 <script defer src="https://cdn.jsdelivr.net/npm/ruby-head-wasm-wasi@0.3.0-2022-10-01-a/dist/browser.script.iife.js"></script> <script type="text/ruby" src="main.rb">…
プルリクエストを作りました RubyをWebAssemblyで動かすruby.wasmを、ブラウザで動かす時に便利なJavaScriptにbrowser.script.iife.jsがあります。 <script type="text/ruby">にインラインで書いたRubyスクリプトを実行してくれます。 これにsrc属性の対応を追加するパッチです。 アイ…