js/jsc/v8

ごめんウソ書いていた。
/usr/bin/js は mozjs だった。
JavaScriptCore は /usr/libexec/webkit2gtk-4.0/jsc です。
ということで書き直しました。

/usr/bin/js | PaePoi

せっかくなので jsc のエイリアスを .bashrc に追加。

alias jsc=/usr/libexec/webkit2gtk-4.0/jsc

せっかくだから V8 も追加したいな。
V8 をスタンドアロンで使えるコマンドはあるのかな?

Running V8 Javascript Engine Standalone – Stack Overflow

うーん。。。。。
素直に Node.js を使ったほうが良さそう。
dnf のパッケージ名は nodejs です。

#!/bin/sh

## include alias
. $HOME/.bashrc

js -e 'print(17 + "才");'

gjs -c 'print(17 + "才");'

jsc -e 'print(17 + "才");'

node -e 'console.log(17 + "才");'

echo 'print(17 + "才"); exit();' | jjs

JavaScript 実行環境が 5 つになってしまった。
いや gjs と mozjs はエンジン自体は同じものなんだけどさ。

.bashrc で指定したエイリアスって端末エミュからしか使えないのね。
こうやってドットコマンドを使って読み込むしかないのかなぁ。

Node.js だけ console.log になってしまった。
macOS なら JXA と同じだから気にならないんだろうけど。

jjs は eval できないので変なコトしているけど気にしない!
これを探していたら –language=es6 オプションで let が使えると知った。
でも Template literals は未対応のようだ、やはり無視のほうがいいかも。

JavaScript Template literals (Here Document)

さて Fedora 26 での Gjs は何か進展があるのかな?
って下記の更新適用はいつだか知らないんだけど。

gjs – GNOME JavaScript/Spidermonkey bindings

あれ、この Template literals ってなんていうか…
こういうのをヒアドキュメントというんじゃないの?

少なくとも WikiPedia では Python の DocString すらヒアドキュメント扱いだぞぃ。
筆写としては「Python のソレは流石に別物!」と言いたいが、色々な解釈があるなぁと。

テンプレート文字列 – JavaScript | MDN

Gjs の機能ではなく ES6 定義か、それなら Node.js てか V8 でも使えるだろう。
うん、どう見てもどう考えてもどう突っ込まれてもヒアドキュメントだよね。

文法とデータ型 – JavaScript | MDN

なのに上記ではヒアドキュメント未対応ですとハッキリ記述、なんだかなぁ。
しっかり定義してくださいよ Mozilla さん。

#!/usr/bin/gjs

let val = "backquote";

let heredoc = `JavaScript
${val}
Test`;

print(heredoc);

バッククォートです、シングルクォートと間違えないでね。
これは便利、プラス記号で文字列の合体って作る側は「読み難いコード」でしかない。
つか Gedit は普通に色分けするんだ、知らなかった。

Safari も対応ってことで JXA でも使えるようだ。
vscode もしっかり色分け。

ちなみに jjs ではバッククォートの時点でエラーになる。
そりゃ今でも let 宣言にすら対応していないのですし。
現状 JAVA 界隈でもまったく使われていないようだし jjs ってガン無視でいいかも。

Fedora 26 Upgrade

Fedora 26 への更新通知が来ました。
ぶっちゃけ筆者は最新の GTK+/Clutter が使えればいいのであって。
むしろ検証に時間を掛ける Fedora は不向きだと本気で思っていたりする。
でも十年後も残っていそうなトコって Fedora, SUSE, Slackware しかないし。

前回は RPM Fusion 絡みで上手くいかなかったので現時点での構成でも。
UnitedRPMs リポシトリと
Google Chrome リポシトリのみ追加
GNOME 自体の設定は全部デフォルト、サルブンツのアレ等と違ってデフォルトでも快適。
って、あんまり参考にならないと思うけど。

今回は普通に gnome-softwere からイケるようだ、ヤッタぜ。
ボタンは [ダウンロード(D)] のほうをクリック。

ダウンロードが終わると [インストール(I)] ボタンが出る。
押してルートパスワードを入力すると再起動。

通常のアップデートとほぼ変わらない感じで進んでいく、筆者の環境で約十分。
自動再起動の後で普通にログインすると Fedora 26 になっていた。
あっけなさすぎて唖然、もちろんイイ意味で。
macOS や iOS 更新に掛かる時間は何なんだ!

UnitedRPMs で入れた GStreamer codec も更新されている。
特にバックアップとかしなかったけどデフォルトアプリの変更等もそのまんま。
Apache の systemctl 指定や SELinux の変更点もそのまんま。

あれ? Gedit が 3.22 のままだ。
Wayland でログインすると Ctrl+F9 が使えないまんまだ、期待したのに。
eog は拡縮のパーセント表示が付いた、他のアプリは何が変わったかワカラン。
dconf-editor 3.23.4 ってこのバージョンは何よ。

GNOME 3.24 Release Notes

GNOME 関連は前回同様に日本語ページは無いようなので英語で確認。
ずっと使ってきた人はアイコンが変わったくらいしか感じないと思う。
GTK+ の大幅な変更は二年毎に変わったし GNOME アプリもメンテ程度っぽい。
よく見ると何故か翻訳されず放置されてきた部分がキッチリ日本語になっている。

ずっとクリーンインストールだったからかヤルこと無さすぎ、ツマラン(褒めてます)

ClutterGst Rotation

今時のスタンドアロンな動画プレイヤーには回転機能が必須だ。
なんたって回転編集していないスマホ動画を結構見かけるようになった。
昨年まではスマホ動画が主体になるなんて思いもしなかったのに。

ということで、ClutterGst で映像の回転を行う関数を探してみよう。

Clutter Gst 3.0.24 Reference Manual: Clutter Gst 3.0.24 Reference Manual

無いんカイ!

生 Gst を直で使うなら手段があった気がするんだがこれは困った。
いやまて、ClutterActor 自体を回転させればいいんでないの?
そのための OpenGL ES じゃないか、ということで実験コード。

#!/usr/bin/gjs

const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Clutter = imports.gi.Clutter;
const ClutterGst = imports.gi.ClutterGst;
const GtkClutter = imports.gi.GtkClutter;

ClutterGst.init(null);

// width:640 height:800
const PATH = "/home/sasakima-nao/movie/GF/動く苗ちゃん(1).mp4";

const RotateWindow = new Lang.Class({
    Name: 'RotateWindow',
    Extends: Gtk.ApplicationWindow,

    _init: function(app) {
        this.parent({
            application: app
        });
        // player
        this.player = new ClutterGst.Playback();
        this.player.set_filename(PATH);
        this.content = new ClutterGst.Content();
        this.content.set_player(this.player);
        this.actor = new Clutter.Actor();
        this.actor.set_content(this.content);
        // embed
        let embed = new GtkClutter.Embed();
        embed.get_stage().add_child(this.actor);
        this.add(embed);
        // size
        this.resize(450, 450);
        this.actor.set_width(320);
        this.actor.set_height(400);
        this.actor.set_position(65, 25);
        // rotation
        this.actor.set_pivot_point(0.5, 0.5);
        this.actor.set_rotation_angle(Clutter.RotateAxis.Z_AXIS, 90);
        //
        this.show_all();
        this.player.set_playing(true);
    }
});

let app = new Gtk.Application();
app.connect("activate", function() {
    new RotateWindow(app);
});
app.run(null);

ピボットポイントを中心にして Z 軸で回せば映像も普通に回転するね。
リサイズ時には 90/270 度の時に縦横の値を入れ替えるだけでイケそうだ。
もっと正しい手段があるかもだけど筆者はコレでいいや。

あぁやっと完全放置だった Y901x を更新するネタができたぞい。
だって Youtube でオッサンが田舎道をバイクで走っているだけのばかり見ていたし。
ドラマやアニメより個人制作な素人動画のほうが妙に面白いよね。

LOKDocView

本日の Fedora アップデートでこんなのが出た。

LOKDocView って何だ?

Development/Integrating LOKDocView and GNOME Documents – The Document Foundation Wiki

libreoffice 文書を GNOME Document で表示する API なのか。
ということは gir でバインドされているのかな。

普通にあったわ、コレって今まであったっけ?
まあそれはいいや、さてサンプルコードを探してみよう。

GitHub – pranavk/lokdocviewer: An application for testing LOKDocView

js/py 両方用意してくれているとは親切ですね。
しかし new メソッドの引数が PyGObject は 2 つで Gjs は 3 つ。
Gjs らしく new キーワードに書き換えるとコアダンプ。

#!/usr/bin/gjs

const Gtk = imports.gi.Gtk;
const LOKDocView = imports.gi.LOKDocView;
const Lang = imports.lang;

const LOKWindow = new Lang.Class({
    Name: 'LOKWindow',
    Extends: Gtk.ApplicationWindow,

    _init: function(app) {
        this.parent({
            application: app
        });
        // Segmentation fault
        //this.view = new LOKDocView.View();
        this.view = LOKDocView.View.new(null, null, null); // OK
        this.view.open_document(
            "/home/sasakima-nao/syokumu.odt",
            "{}",
            null,
            Lang.bind(this, function() {
                this.view.set_edit(true);
            }),
            null);
        let sw = new Gtk.ScrolledWindow();
        sw.add(this.view);
        this.add(sw);
        //
        this.show_all();
    }
});

let app = new Gtk.Application();
app.connect("activate", function() {
    new LOKWindow(app);
});
app.run(null);

前々回みたいな問題があるし…
GNOME はぶっちゃけ Gjs に全面移行したいのだろうけどまだ問題が多いなぁ。
てか Python はサードパーティなのに対応っぷりがスゲェ。
当面は Python と併用が続くのだろう。

コレを使って何か作るかな、ここんとこネタ切れなのは秘密だよ。