@ledsun blog

無味の味は佳境に入らざればすなわち知れず

Windows 11で日本語入力ON/OFFをCtrl + Spaceで切り替える

Windowsのキーボードレイアウト切り替えショートカットを絶対殺すマン - @ledsun blog でキーボードレイアウト切り替え設定を行いました。 このとき[入力言語の切り替え]を間違って設定しました。 [入力言語の切り替え]を[割り当てなし]に設定すると、IMEが…

Windowsのキーボードレイアウト切り替えショートカットを絶対殺すマン

Windows 11にはキーボードレイアウト切り替えのショートカットが存在します。 IMEにATOKを使っていると、ふと気がつくとIMEがMS-IMEに切り替わっていることがあります。 意図せずにキーボードレイアウト切り替えショートカットを触っているのが原因です。 キ…

WSL上のUbuntuにrustをインストールする

Ruby 3.2.0がリリースされました。 rbenv + ruby-buildをつかってインストールできます。 Ruby 3.2.0のYJITを有効にするにはrustcがある環境でコンパイルする必要があります。 WSLにrustをインストールしていませんでした。 インストールします。 www.rust-l…

WSLgでGitKrakenを使う

現在はFork-gitとwslgitを組み合わせて使っています。 Windows上のリポジトリを見るときはFork-gitの設定を変更してwslgitを外しています。 少し面倒です。 GitのGUIクライアントをWindows用とWSL用でわけてしまえば、面倒な設定が不要になるのではないでし…

仕事で必要なのは技術力ではなく仕事力ではないか

yuheinakasaka.github.io より 先日「育児など家庭の色々があって自分の時間が確保できなくなった。技術力を高めるための勉強ができなくて不安。」みたいな話を聞いた それよりも「技術力を高めるための勉強ができなくて不安」という点が個人的には気になっ…

DockerイメージのベースをAlpineからDebianに変えた

ruby:3.0.1-alpine Dockerイメージでsimstring gemがビルドできない - @ledsun blog でRuby 3.0.1 はAlpine上でC拡張Gemのビルドに失敗することがあるとわかりました。 では、3.0.5ではどうでしょうか? config.status: error: in `/simstring': config.stat…

ruby:3.0.1-alpine Dockerイメージでsimstring gemがビルドできない

simstringとswigの問題の切り分け - @ledsun blog で、simstringのgemをビルドするときはprepare.shに--swigオプションをつける必要があることがわかりました。 simstring gemをDocker上で使いたいです。 Dockerコンテナを小さめにするために、Alpine Linux…

simstringとswigの問題の切り分け

Rubyからsimstringを使うにはSWIGが必要です。 - @ledsun blog でビルドしたsimstring gemをRubyから実行時に次のエラーが出ていました。 ledsun@MSI:~/pubdictionaries►ruby -e 'require "simstring"' <internal:/home/ledsun/.rbenv/versions/3.0.1/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require': /home/ledsun/.rbenv/versions/3.0.</internal:/home/ledsun/.rbenv/versions/3.0.1/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>…

Rubyからsimstringを使うにはSWIGが必要です。

GitHub - chokkan/simstring: SimString という文字列を検索するライブラリーがあります。 Rubyから使うことができます。 というわけでインストールしてみたのですが次のエラーが起きました。 ledsun@MSI:~/pubdictionaries►ruby -e 'require "simstring"' <internal:/home/ledsun/.rbenv/versions/3.0.1/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:</internal:/home/ledsun/.rbenv/versions/3.0.1/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>…

Fork-gitが壊れたのかと思ったらwslgitの問題だった

Forkを1.18.0.0にバージョンアップしたら、画面の一部がエラーになりました。 GitHubでそれっぽいissueを見つけました。 github.com Duplicate, closing て、書いてあります。 何と重複しているのかわからなかったので、コメント書いてみました。 そしたら別…

WSL 1.0.3.0でCannot open display ":0"が直りました。

Cannot open display ":0" - @ledsun blog で起きました。 Distrodを使うのをやめました - @ledsun blog で直りました。 11月16日に再発しました。 Cannot open display ":0:がでています。 このときのWSLのバージョンです。 PS C:\Users\led_l> wsl.exe --v…

RubyVM.evalAsyncの中でRubyVM.evalAsyncを呼ぶとエラーが起きる

JS::Object.awaitが返らないときがある? - @ledsun blog にて次のような疑問を持ちました。 this.vm.evalAsync(script.ScriptBody)の中でthis.vm.evalAsync(script.ScriptBody)するのがよくないのでしょうか? 素朴にevalAsyncの中でevalAsyncを呼ぶとどう…

JS::Object.awaitが返らないときがある?

JS::Object.await ふたたび - @ledsun blog で、JS::Object.awaitの使い方がわかりました。 そこでfetchを使ってrequire_relativeを実装します。 import { RubyScript } from "./RubyScript"; import { EvaluatedScriptStack } from "./EvaluatedScriptStack…

ruby.wasmクイズ

次のスクリプトはエラーになるでしょうか? <html> <script src="https://cdn.jsdelivr.net/npm/ruby-head-wasm-wasi@0.5.0/dist/browser.script.iife.js"></script> <script type="text/ruby"> require "js" JS::global.send(:require, 'erb') erb = ERB.new("Hello <%= val %>!") puts erb.result_with_hash val: "world" </script> </html> ヒ…

Microsoft People はアンインストールできない

Microsoft Storeで「更新プログラムを取得する」と高頻度でMicrosoft Peopleというアプリが出てきます。 意識的に使った事が無いアプリをたびたび更新するのは癪に障ります。 アンインストールできないでしょうか? How to Uninstall Microsoft People in Wi…

「デバッガーでの例外設定」とfinallyブロック内のブレークポイント

C#をデバッグ実行するとfinallyブロックに入らない - @ledsun blogを書いたら、つぎのような情報をもらいました。 「例外発生時に停止する」みたいな設定がONになってるんじゃないかしらhttps://t.co/pFsNahAN1B https://t.co/x5w89PxzzH— いわた (@wonderfu…

RubyVMインストラクション1日目

25日間で理解するRubyVMインストラクション - @ledsun blog の1日目が公開されました。 RubyVMはスタックベース仮想マシンです。 スタックに入る値はRubyのオブジェクトがそのまま入る点が特徴的なようです。 例えばduparrayという命令では配列[1, 2, 3]がそ…

JS::Object.await ふたたび

JS::Object.await - @ledsun blog に対してフォローをもらいました。 すごーく遅レスですが、最近追加したメソッドまで追っていただいてありがとうございます!コメントが大変紛らわしい書き方だったんですが、Ruby側でJSのPromiseを待てるもの、という認識…

C#をデバッグ実行するとfinallyブロックに入らない

こういうC#のソースコードがあります。 using System; namespace ConsoleApp1 { internal class Program { static void Main(string[] args) { try { var hoge = 0; var fuga = 1; var piyo = fuga / hoge; } finally { Console.WriteLine("finally"); } } }…

Vladimir MakarovさんのRubyKaigi 2022での発表を記事にしたもの?

developers.redhat.com ruby-jp slackで教えてもらいました。 A Faster CRuby interpreter with dynamically specialized IR - RubyKaigi 2022 の内容を記事にしたものらしいです。 この発表をみた僕の感想は A Faster CRuby interpreter with dynamically s…

25日間で理解するRubyVMインストラクション

kddnewton.com ruby-jp slackで教えてもらいました。 Syntax Tree - RubyKaigi 2022 を発表したケビン・ニュートンさんが25日間でRubyVMについて解説してくれるようです。 プロローグの本記事によるとRubyVMのインストラクションを表示する方法が挙げられて…

コア数を増やすと並列数は伸びるか?

8並列で3倍速 - @ledsun blog で、8並列で動くことがわかりました。 コア数を変えて計測してみました。 つかったEC2インスタンスは次の通りです。 インスタンスタイプ vCPU数 コア数 m6i.2xlarge 8 4 m6i.4xlarge 16 8 m6i.8xlarge 32 16 計測結果 4コアだと…

8並列で3倍速

EC2のvCPU数はハイパースレッディングを含む - @ledsun blog にて計測に使っているEC2インスタンスタイプが不適切であることがわかりました。 今度はm6i.4xlargeを使って計測します。 m6i.4xlargeは16vCPUあります。 コア数は8のはずです。 m6i.4xlargeの計…

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します。 次のようなソースコ…