月別アーカイブ: 2016年5月

array.forEach (this == array)

JavaScript は本当に奇妙な言語です。

#!/usr/bin/gjs

const Lang = imports.lang;

const TestClass = new Lang.Class({
    Name: 'TestClass',

    _init: function() {

        this.arr = [12, 34, 56];
        this.str = "String";

        for (let i=0; i<this.arr.length; i++) {
            print(this.str);
            print(this.arr[i]);
        }
        this.arr.forEach(function(s) {
            print(this.str);
            print(s);
        });
    }
});
new TestClass();

/* output
String
12
String
34
String
56
undefined
12
undefined
34
undefined
56
*/

ループは forEach が解かり易いので多用していたけどコレにハマった。
Gjs はそもそも class が無い JavaScript にアクロバットな対応をしている。
this は C++ の this では無いと気が付くまで半日近く使ってしまった。

JavaScript の this は呼び出し元という意味。
つまり上記では forEach の this は this.arr である。
this.arr.str なんて宣言していないから undefined ということです。

foreach

こんな深い階層で this を使おうとした筆者が悪いんだけどさ。
Gjs だけではないので注意しようね。

set_accels_for_action

前回書いたように Y901x の ClutterGst 化をしているのですが。
マジで何を今更なことを見つけた。

GtkApplication: GTK+ 3 Reference Manual#gtk-application-add-accelerator

add_accelerator は 3.14 以降は使うなってさ。
おぃおぃ Gedit 標準プラグインが今でも普通に使っているんですけど。

とりあえず Gjs だとこんな感じでいいみたいみたい。
Gio.SimpleAction のほうは今までどおりでいい。
次回の更新で自作の奴も書き換えるか。

const Y901Application = new Lang.Class({
    Name: 'Y901Application',
    Extends: Gtk.Application,

    _init: function() {
        this.parent({});
        //this.add_accelerator("<Control>Q", "win.ctrl_q_action", null);
        this.set_accels_for_action("win.ctrl_q_action", ["<Control>Q"]);
    },
    vfunc_open: function(files, n_file, hint) {
        let uri = files[0].get_uri();
        let w = new Y901Window(this);
        w.set_uri(uri);
    },
    vfunc_activate: function() {
        new Y901Window(this);
    }
});

ついでに Gjs で上記のように open をオーバーライドするには。

let argv = ["y901main.js"];
ARGV.forEach(function(s) {
    argv.push(s);
});
GtkClutter.init(null);
ClutterGst.init(null);
let application = new Y901Application();
application.run(argv);

みたいに配列の先頭に何か突っ込まないと動作しない。
何故こんな仕様にしてしまったんだろう?

他色々と苦しみながらこんな所までやってみた。
DnD で再生、スペースキーでポーズ、シークバーも一応使える。

zep

我ながら以前の面影が何も無いけどどうしよう、名前は変えようか?
シークバーはコラム無しだしポーズボタンも無いし拡大はマウスのみだし。
シークバーも Clutter で作っているので、まだ手探り中なので。

y901x-1.1.x0.tar.gz

ここまでのソースを置いておきます、単なるバックアップですけど。
もし筆者が死んだら誰か続きをやってね。

SKYLAKE on Fedora

GNOME 3.20 が公開されているわけですが。

GNOME 3.20 リリースノート
> OS のアップグレードを簡単に

ということで多分次回以降の Fedora もコレに乗っかってくると思う。
毎回クリーンインストールだった筆者もアップグレードに変更する予定。

ということで、いいかげんにマシンを新しくしようと考えた。
毎回クリーンインストールなのに Phenom2 X4 955, AMD 880G のまま。
AMD 690G to 880G for Ubuntu | PaePoi
五年も使い続けたのか、今時のパソコンは全然壊れないね。

たしか以前 UEFI BIOS とやらで Linux が起動できなくなるとか…
それも全然話題にならなくなったし多分大丈夫、人柱でも上等。

以前電源ボタンの調子が悪かった時に恵安の激安ケースは買ってある。
結局直ったのでそのまんま放置していたけどやっと出番がきた。
SSD, BD-R, その他は使い回し。

Intel CORE I5 6500 (3.2GHz) CPU
ASUS B150M-A マザーボード
CFD DDR4 PC4-17000 4G メモリ x2

セットが昨日 PC DEPOT で 35k だったのを見つけたのでとっとと購入。
おっとマザーボードには日本語マニュアルが付いていたぜ。
早速読んでみるとやはり UEFI か、さてどうなるか。

マニュアルどおりに慎重に組み上げ Fedora 22 入りの SSD を仮組み。
いざ起動、画面に何も映らずビープ音がピー、ピ、ピ、ピー、ピ、ピ…

起動時のBEEP音について|テックウインド株式会社

かなり迷った後に見つけたけどこんな機能があるんだね。
メモリの差し直しで解決したがまだディスプレイには何も映らない。
CMOS クリアとか配線やり直し等色々試すが駄目、夜になったので中断。
今朝起きて駄目元でディスプレイ接続を DVI から HDMI に変更したら映った。
理由は解らないけど参考までに。

F1 を押して UEFI BIOS 画面に、F5 を押してデフォルト設定を適用。
するとあれ?Fedora 22 の起動画面が普通に出て来たぞ。
Fedora 側は何もやっていないのに。

一旦電源を落とし Fedora 23 の SSD に換装、マウスやスピーカーも接続。
Fedora 24 の準備のつもりがまさかの引越し完了、今時の Linux 恐るべし
UEFI は Fedora では何も問題ないようです。

skylake_fedora

しかし速い、同じ 3.2GHz 4 コア CPU のはずなのにまるで違う。
Linux だからと諦めていた Google 画像検索の引っ掛かりが皆無になった。
SKYLAKE のグラフィックはこんなに速いのか、グラボいらねぇ。

起きた問題は一つだけ。
我が Y901x で拡大やフルスクリーンができなくなった。
おまけにメニューが表示されない、何でだよ!

AMD と Intel というグラフィックの違いだろうけど。
ClutterGst 3.0 and GtkHeaderBar | PaePoi
で ClutterGst を使った奴は問題なく拡大できる、Totem も問題ない。
Clutter はグラフィックの違いを気にしなくても大丈夫なのか。

結局もう古い手段では新しいグラフィックに対応できないということのようだ。
マジで ClutterGst 化だな、余計な仕事が増えたぜイエーィ。