実録コンピュータ物語

趣味で使っているコンピュータ&ソフトの情報を発信するブログです。

Rakudo、MoarVM、Rakuの読み方を調べてみた

Perl 6が名称変更でRakuになるというので、なんとなく関連用語の読み方(発音)が気になって調べてみました(ソースはYouTubePerl関連動画)。

Rakudo
Raku言語コンパイラ、実行環境。読み方は強いて言うなら「ラクード」が近い。
MoarVM
Raku言語用の仮想マシン。MoarはMoreを表すネットスラングなので読み方はそのまま「モアブイエム」となる。
Raku
読み方ははっきりしていない。「楽」は英語だと「ラクー」と読むようなので「ラクー言語」になるのか?
TIMTOWTDI
Perlのモットーである「There's more than one way to do it 」の頭文字で「ティムトディ」。発音で書くとTimToadyとなる。GitHubなどで見かけるTimToadyという人物はLarry Wallである(失礼ながら最近になって知りました)

Raku言語(Perl 6)のクックブック「Using Raku」が無料で公開。他にも学習本を紹介

100問のプログラミングの課題に対し、Raku言語ではどのように解決するかを解説した本「Using Raku」が公開されました。PDFで無料で読めます。

raku.online

上記のUsing Rakuは既にRaku言語を知っている人向けの本です。著者のAndrew Shitov氏は「Perl 6 at a Glance」という入門本も無料公開しています。

raku.online

入門書から先に進んでRaku言語をしっかり学習したいのであれば「Perl 6 Deep Dive」がおすすめです。こちらは無料ではありませんが、Packtのセール時は10ドルくらいで購入できます。

Raku言語の学習本は他にも「Learning Perl 6」があります。内容的にはPerl 6 Deep Diveと重複する部分が多いです。

www.packtpub.com

もっとディープな本として、Raku言語のGrammarに特化した「Parsing with Perl 6 Regexes and Grammars」も紹介します。

Grammarは正規表現より更に高次元の文字列解析機能で、この本では1冊丸ごとGrammarについて説明しています。Raku言語と正規表現の基本が分かっていないと理解は難しく、初心者向けではありません。

Parsing with Perl 6 Regexes and Grammars: A Recursive Descent into Parsing

Parsing with Perl 6 Regexes and Grammars: A Recursive Descent into Parsing

Perl 6の名称が変更され、今後はRaku言語に

ここ最近Perl 6の言語名変更について議論が起こっていたらしく、Larry Wallも変更に賛成する意向を示しています。

名称変更に関する情報は以下の記事から raku.online

名称変更による影響は色々と考えられますが、「Perl 5」と「Raku (Perl 6)」が別言語であると明示されるのが大きいでしょう。名前は似ていても仕様としては別物と言っていいくらい違いますし。

悲しいことにPerl 6は全く話題にならないので、日本では混乱は起こらないだろうと思っています。

既に公式サイトのURLはraku.orgでアクセスできるようになっています。RakudoのリポジトリPerl 6からRakuに変更が始まりました。

Firefox 68のWebRender機能をRyzen APUで有効化する

2019年7月にリリースされたFirefox 68.0で、新レンダリングエンジンのWebRenderがAMDGPUでも有効化されました(リリースノート)。

同じ頃に新APUのRyzen 5 3400gを購入していて、ブラウジングが高速化すると期待していました。しかしよく確認してみると、7月末現在ではRyzen APUの内蔵GPUではWebRenderが有効化されないことが分かりました。

APU内蔵とは言え、Radeon VegaならWebRenderが使えるはずでは?と思ったら有効化されないのはバグで、既にレポートが出ていました。

WebRenderの強制有効化

将来的にはバグが修正されるでしょう。WebRenderを有効化する設定値があるので、今のところはこれで使用します。 参考:https://www.askvg.com/tip-how-to-enable-or-disable-new-webrender-feature-in-mozilla-firefox/

  1. アドレスバーにabout:configと入力
  2. gfx.webrender.allを検索し、「値」をダブルクリックしてtrueに変更
  3. Firefoxを再起動
  4. アドレスバーにabout:supportと入力し、グラフィックの画像処理がWebRenderになっていればOK

f:id:bosh:20190727095645p:plain
WebRenderが有効化された

自分の場合は上記の変更でDirect 3D 11からWebRenderに切り替わりました。試してみると、ページが描画される瞬間の間が体感できるレベルで短くなっていて、キビキビ動くようになったという感触です。

WebRenderベンチマーク

本当に高速化しているのか、念のためにベンチマークを実行しました。参考:Firefox 67.0 WebRenderを有効にして高速描画 - とある人柱のblog

動作確認環境

  • Windows 10 Home 1903
  • AMD Ryzen 5 3400g with Radeon Vega Graphics (RX Vega 11)
  • Radeon ソフトウェア エディション Adrenalin 2019 19.7.3

f:id:bosh:20190727102117p:plain
Direct 3D (37.23sec)

f:id:bosh:20190727102210p:plain
WebRender (8.61sec)

物凄く速くなっています。Ryzen APUでも高速化できることが確認できました。

Windows上のVSCode + Code RunnerでWSLのコマンドを実行する

Visual Studio CodeCode Runner拡張機能Windows側から WSL(Windows Subsystem for Linux)のコマンドを実行する設定方法です。

実行環境

設定方法その1 - カレントディレクトリを移動して実行

例としてWSLのperlを実行するようにします。Visual Studio Codeのユーザー設定(settings.json)に以下のように入力します。WSLのコマンドの呼び方は 「Windows 10のコマンドプロンプトからWSL上のLinuxコマンドを呼び出す(バージョン1803対応版):Tech TIPS - @IT」が詳しいです。

{
    "code-runner.executorMap": {
        "perl": "cd $dir && wsl perl $fileName"
    },
}

試しに実行中のOSを出力するperlスクリプトを実行してみます。Windows版のperlだと「MSWin32」となる所が「linux」になり、WSL上で実行されている事がわかります。

f:id:bosh:20190609152116p:plain
WSL上のperlが実行された

補足

ちなみに単純化して以下のようにしても、パスがWindowsのフォーマットで渡されるため動作しません。これを避けるために上記の設定ではcd $dirを入れてカレントディレクトリを移動し、ファイルのフルパスを渡さないようにしています。

{
    "code-runner.executorMap": {
        # 動作しない
        "perl": "wsl perl"
    },
}

f:id:bosh:20190609153116p:plain
パスのフォーマットがWindowsのままなので実行に失敗する

設定方法その2 - wslpathを使用

最初の設定では「wsl.exeは実行時のカレントディレクトリをそのまま引き継ぐ」ということを利用してcd $dirを入れていました。もう1つ、wslpathを使ってきちんとパスを変換する方法もあります。

{
    "code-runner.executorMap": {
        "perl": "bash -c \"perl $(wslpath $fullFileName)\""
    },
}

この場合のbashLinux上ではなく、WSLをセットアップするとインストールされるbash.exeが実行されます。-cオプションのコマンドはWSL上で実行されるので、Code Runnerのパラメータである$fullFileNamewslpathでWSLフォーマットに変換すればいいということになります。カレントディレクトリを変更しないという点では、こちらの方が本来の動作に近いと言えます。

ただし、このパスの途中に空白を含むファイルは実行できません。「方法その1」のcd $dir方式では問題なく実行できます。

f:id:bosh:20190609160225p:plain
wslpathでパスを変換して実行

設定方法その3 - 自力でWSLのパスに変換

パスに空白文字が含まれていても動作するように改良したバージョンです。sedでバックスラッシュをスラッシュに置換→ドライブレター(C:など)を/mnt/cに置換→シングルクオートで囲む、という処理を行っています。エスケープシーケンスが多すぎて分かりづらくなってしまいました。

{
    "code-runner.executorMap": {
        "perl": "bash -c \"perl '$( echo $fullFileName | sed 's%\\\\%/%g' | sed 's%^\\([a-zA-Z]\\):%/mnt/\\L\\1%' )'\""
    },
}

ASUSのファンレスマザーボード「PRIME J4005I-C」でゲームリモートプレイ用PCを作ってみた

ASUSのGemini Lake SoC搭載マザーボードPRIME J4005I-Cを購入しました。目的は「寝ながらPCゲームをプレイする」です。ポータブルモニターとタブレットアームを使い、Steamでホームストリーミングすることを狙いました。この記事ではマザーボードの特徴と使用感を紹介していきます。

www.asus.com

実はHDMI 2.0対応

PRIME J4005I-Cを使ってみて意外だったのが、HDMI端子が4K 3840 x 2160 60Hzに対応していることでした。

スペックに ”Supports HDMI with max. resolution 4096 x 2304 @ 24 Hz” と記載されているので勝手にHDMI 1.4だと思っていました。

f:id:bosh:20180908025130p:plain
4K 60Hz出力に対応

ただし4K 60Hz対応と言ってもヌルヌル動くわけではなく、ブラウザーのスクロールなどは多少カクつきます。

Steamホームストリーミングは1080pで充分快適。Moonlight PCだとさらに綺麗

目的であるゲームのストリーミングプレイは思ったよりラグが少なく、自分の環境では22ms程度の遅延でした。タイミングがシビアなゲームでなければ充分だと思います。ストリーミングはDXVA2のハードウェアデコードが有効になっていました。

NVIDIA SHIELDのゲームストリームがPCでも使えるようになるMoonlight PCも試してみると、さらに綺麗で安定したフレームレートでプレイできました。SteamがH.264エンコードしているのに対してSHIELDはH.265を使っているので差が出ているのかもしれません。

github.com

ケースファンのセミファンレス化が可能

BIOSで呼び出せるQ-Fan controlでは、CPU温度が閾値以下に下がるとケースファンを停止するように設定できます。停止できるのはDC 3ピンコネクターのファンをマニュアル制御で「Fan off」にした場合のみで、PWM 4ピンのファンでは設定できませんでした。

PRIME J4005I-Cその他の特徴

  • モリーはデスクトップ用のUDIMMを使用します。対してASRockのGemini LakeマザーはノートPC用のSODIMMです。
  • NVMeのM.2 SSDを使用できます。ただしPCIE 2.0 x 2接続なので、x 4のSSDでは性能をフルに発揮できません。
  • このマザーボードに限ったことではないですが、Intel graphicsは初期設定でRGBがリミテッドレンジになっています。「量子化の範囲」という設定を「全範囲」にすることでフルレンジにできます。

XboxワイヤレスコントローラーがBluetoothで検出できない場合の対処法

PCのシステムを新調し、Windows 10も再インストールしたのでXboxワイヤレスコントローラーをBlutooth接続しようとしたら・・・検出できないぞ?となったので解決法を載せておきます。

BluetoothXboxコントローラーを接続するときは「マウス、キーボード、ペン、オーディオまたはその他の種類のBluetoothバイス」を選択します。

下の「その他すべて」という項目に「Xboxコントローラーとワイヤレスアダプター、DLNAなど」と記載されていますが、こちらではコントローラーは検出されません

久しぶりで忘れていたとは言え、表記が紛らわしいので修正したほうがいいのでは?と思いました。

f:id:bosh:20180501124518p:plain