@ledsun blog

Hのキーがhellで、Sのキーがslaveだ、と彼は思った。そしてYのキーがyouだ。

ruby.wasmに対する思いとか、企んでいることとか

ruby.wasmについて、現時点で僕が思っていることを記録しておきます。 思っていること 主にonブラウザ 僕がruby.wasmに興味があるのは、ブラウザで動かす方です。 エッジワーカーで動かす方は今のところあまり興味がありません。 また、ruby.wasmがプロダク…

EC2のvCPU数はハイパースレッディングを含む

何並列までいけるのか? - @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イン…

ruby.wasmではファイルに書き込めない

require_relativeはパッチれない - @ledsun blog で、Rubyスクリプトの実行前に、Rubyスクリプトを静的にあつかってrequire_relativeを置き換えることにしました。 そこで次のアイデアを思いつきました。 Rubyスクリプトの実行前に、require_relativeの参照…

JS::Object.await

fetchは非同期だった - @ledsun blog でfetchの完了をRuby側で待てなくて、require_relativeの順番の制御が上手く行きませんでした。 ruby.wasmでJS::Object.awaitという関数を見つけました。 名前からするとPromiseを待てそうな関数です。 これを使えばfetc…

Ractorちゃん並列化してたー。

インスタンス生成コストが大きかった - @ledsun blog までやった結果、Ractor間で受け渡しているデータ構造が大分はっきりしました。 ここまできたら、送信データを保存しておけば、Ractor化している処理だけで実行出来るはずです。 次のような感じで、Racto…

インスタンス生成コストが大きかった

Ractor化する範囲を小さくしたら遅くなった - @ledsun blog で、Ractor化する範囲を小さくしたら処理が遅くなって混乱しました。 よくよくソースコードを確認したところ、変わっている場所がありました。 aligner = TextAlignment::TextAlignment.new(msg[:r…

Ractor化する範囲を小さくしたら遅くなった

GCの影響は少なそう - @ledsun blog で、コピーする範囲を小さくすることで高速化できそうと考えました。 そこで、根本的にRactor化する範囲を小さくします。 そうすることでRactorで受け渡しするデータを最小化し、なんならmoveします。 次のようなソースコ…

GCの影響は少なそう

AWS EC2上で並列処理の時間を再々計測した - @ledsun blog で、次の3つの仮説を立てました。 コピーがボトルネックではなかった コピーは減ったが相変わらずボトルネックである コピーで作られたオブジェクトのGCがボトルネックだった また1は可能性が低いと…

AWS EC2上で並列処理の時間を再々計測した

AWS EC2上で並列処理の時間を再計測した - @ledsun blog でAWS環境で計測したデータが、その前に計測したデータと違いました。 どっちが真かわからないのでもう一度再計測しました。 AWS上で3回目の計測 AWS上で2回目の計測 AWS上で1回目の計測 1回目が明ら…

require_relativeはパッチれない

requrie_relativeをハックしたい require_relativeの相対参照の起点となるもの - @ledsun blog でRubyスクリプトのURLを保持する必要があるとわかりました。 そこで次の感じでURLを保持したVMクラスを作りました。 import { RubyScriptAndSourceURL } from "…

AWS EC2上で並列処理の時間を再計測した

Ractor間のデータのやりとりでコピーを減らすには - @ledsun blog でAWS上で再計測してみると書きました。 再計測しました。 AWS上でのコピー1回と2回の処理時間の比較 あまり効果がないようです。 ローカルPCで試したときは、次のようにもう少し明確に効果…

Ractor間のデータのやりとりでコピーを減らすには

Ractor#send move:true したときに出た3つのエラー - @ledsun blog にて、ディープコピーを減らすためにmoveオプションを使いました。 ところがエラーがでました。またエラーの内容が難解で対応出来そうにありません。 そこで、ディープコピーを減らすための…

Ractor#send move:true したときに出た3つのエラー

詰まっているのはワーカーでなくパイプ? - @ledsun blog で、「Ractor間のデータ受け渡し時のコピーがボトルネックになっている」という仮説を立てました。 これを確認するために、Ractor間のデータの受け渡しをmoveにしてみます。 次のようにRactor#sendと…

詰まっているのはワーカーでなくパイプ?

並列数をかえても処理時間が変わらない謎 - @ledsun blog で「サチっているかもしれない」と仮説を立てました。 それを検証するために並列数を変えて計測してみました。 並列数と処理時間のグラフ 処理時間なので低いほど性能が高いです。 3どころか1並列で…

並列数をかえても処理時間が変わらない謎

とあるRuby on RailsアプリケーションのSidekiqで動くバックグラウンドジョブを高速化をしています。 CPUバウンドな処理に時間が掛かっています。 並列化して高速化できるか試しています。 RactorでWoker pool - @ledsun blog で、4コアのPCで並列化できると…

wingetでPowerShellをアップデートする

PowerShellのアップデート方法が、自分のなかでイマイチ決まっていません。 おおむねwingetでアップデートすれば良いと思っています。 今回アップデートしたら不思議な現象に出くわしたのでメモっておきます。 PS C:\Users\led_l> winget upgrade PowerShell…

Distrodを使うのをやめました

WSL2にDistrodをインストールした - @ledsun blog でsystemdを使うためにDistrodを入れました。 「Windows Subsystem for Linux」が「systemd」に対応へ - 窓の杜 によるとWSL自体がsystemdをサポートするようになったので、Distrodを使うのをやめました。 …

僕の好きなプログラミングの格言

読みやすいコードのガイドライン -持続可能なソフトウェア開発のために作者:石川 宗寿技術評論社Amazon を、読んでいたら、可読性を高めるために役立つプログラミングの原則を紹介されていました。 ボーイスカウトルール YAGNI KISS 単一責務の原則 早計な最…

一回休み

火曜日から木曜日まで風邪でお休みしました。 火曜日。鼻水 木曜日。発熱 金曜日。咳・痰 奥へ奥へ進軍されました。

require_relativeの相対参照の起点となるもの

ruby.wasmのrequire_relativeでfetchする - @ledsun blog fetchは非同期だった - @ledsun blog の続きです。前回fetchで実装してみたところ、非同期APIではrequire_relativeの同期性*1を保証できないことに気が付きました。 ブラウザから同期でHTTPリクエス…

nvm.fishをアンインストール

特定バージョンのNode.jsを使うシチュエーションが減ったので、nvmをアンインストールします。 nvm(Node Version Manager)のアンインストール(削除) | WEBREEをみるとディレクトリだけ消せば良さそうです。 念のため nvm uninstall 17.0.1 してから rm -rf $…

fetchは非同期だった

ruby.wasmのrequire_relativeでfetchする - @ledsun blog で良い感じに require_relative をfetchに置き換えられました。 ところがfetchは非同期関数なのです。 次のようなRubyスクリプトがあります。 require_relative "a-1" require_relative "a-2" p 'a l…

ghコマンド

https://t.co/uEQMxttpce gh コマンドでrepo forkするのはどうでしょう— 馬美肉 (@chiastolite) October 1, 2022 で、紹介してもらいました。 今回はForkしたかったわけでなくてプルリクエストを作りたかっただけです。 試しにGitHub CLI | Take GitHub to t…

ruby.wasmのrequire_relativeでfetchする

ruby.wasmをブラウザで動かす時require_relativeを相対パスへのfetchに置き換えられる? - @ledsun blog で ruby.wasm ハックアイデアを思いつきました。 実際にやってみます。 packages/npm-packages/ruby-wasm-wasi/src/browser.script.ts に次のようなコ…

Cannot open display ":0"

WSL起動時にCannot open display ":0"が表示される どうもWSLgが上手く動いていないみたいです。 Xを使うアプリケーション起動すると同様のメッセージを表示して失敗します。 xeyesコマンドを実行するとCannot open display ":0"が表示される 試したけど直ら…

Windows 11, version 22H2に上げたらWSL更新の通知が表示された

WSLアップデートの案内 WSLのアップデート アップデート後のWSLのバージョン WSLのバージョン - @ledsun blog の時はWindowsのビルドとWSLのビルドが連動していたように記憶しています。 Microsoft Store での WSL のリリース ノート | Microsoft Learn によ…

ruby.wasmのハックの仕方

ruby.wasmをブラウザで動かす時require_relativeを相対パスへのfetchに置き換えられる? - @ledsun blog で、ruby.wasmをハックしようと考えました。 実際どうすればハック出来るのかよくわかりません。 irb.wasm がgem関数でgemインストール出来ることがわ…

ruby.wasmをブラウザで動かす時require_relativeを相対パスへのfetchに置き換えられる?

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属性の対応を追加するパッチです。 アイ…