Node.js stdin

せっかく Node.js を入れたので覚書ページに追記してみようと考えた。

ちなみに筆者が今まで Node.js を嫌っていた理由、検索すると。。。
npm でインストール、インストール、インストール、インストール、イン(以下略
ばかりでゲンナリしたからです。

そうか、Node.js でプログラミングってインストールすることなのか!
っっって、アホか!!!
実は Python でも pip を使ったことが無い、てか必要になったことが無い。
つまり何もインストールせずに使える Gjs や JXA のほうがいいや、ということで。

Gjs があるのに何故こんなのを作る人がいるのかまったく理解できないし。
GitHub – WebReflection/node-gtk: GNOME Gtk+ bindings for NodeJS

悪口ばかり書いてもしょーがないので本題。
そんなこんなで、素の Node.js だけで何ができるか試してみよう。
とりあえず stdin はどうやるのだろう。

readline – Node.js v0.4.12 Manual & Documentation

readline モジュールがあるのか、コピペしてみよう。

なんじゃそりゃ!

node.js – How to read from stdin line by line in Node – Stack Overflow

createInterface の引数は JSON でってことなのね。
公式が間違えてどうすると思ったけど v0.4 って古いにもほどがあるページだった。
v6 の公式ドキュメントはしっかり JSON で ES6 フル活用になっている。
英語ですが。

Readline | Node.js v6.11.1 Documentation

isatty も使えるようだ。
それならパイプからの入力との振り分けも簡単だな。

#!/usr/bin/env node

const ReadLine = require('readline');
const Tty = require('tty');

let readline = ReadLine.createInterface({
    input: process.stdin,
    output: process.stdout,
    terminal: false
});

let prompt = "";

if (Tty.isatty(0))
    prompt = "May I ask your name?\n> ";

readline.question(prompt, function(answer) {
    console.log(`Hello ${answer}`);
    readline.close();
    //process.stdin.destroy();
});

Gjs 風にしてみました。

terminal: false を入れないとパイプで渡した文字列が表示されるので注意。
readline.close() しないと readline が終了しない場合があるので注意。
process.stdin.destroy() はいらないみたい。

あれ?意外に面白そうだぞ Node.js も。

gvfs-open to gio open

Fedora 26 では gvfs-open が非推奨になっていた。

man gio で見ると gvfs-*** コマンドが全部まとめられたようだ。
ぶっちゃけ xdg-*** だけでイイじゃんみたいなものだったし。
UNIX らしくないかもだけど筆者はコッチのほうがいい。

gvfs-open と同じなんだけど少し違うようだ。

Nautilus Window を開いた状態でないとパス名を開けない。
Gedit Window を開いた状態でないとテキストファイルを開けない。

http://localhost/ や画像なんかは普通にデフォルトアプリが立ち上がる。
自作アプリにデフォルトを変更した動画や CBZ も自作アプリが立ち上がる。

多分バグではなく仕様だと思うんだけど、よくわからない。
とりあえずウインドウを開いておけば今迄どおり使えるってことで。

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 アプリもメンテ程度っぽい。
よく見ると何故か翻訳されず放置されてきた部分がキッチリ日本語になっている。

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