Nautilus script

gphoto2 関連は何も進展しなかった…
Blog も先月は一回しか更新できなかったな…
ネタ切れもあるけど新たなプログラミングに飽きが出始めた感じ。

ということでサボりすぎな Tips ページに手を入れることにした。

Nautilus をスクリプトで拡張 – L’Isola di Niente

ココの書き換えだけで半日以上掛かってしまった。
つかスクリーンショットを GNOME3 に変更するために使っていないのを整理したり変なファイル名だったのを適切なものに変更したりよく考えたらなんで拡張子を取っ払っていないんだ?となって又ファイル名を変更したり PyGtk のまま使っていたのを PyGI に書き換えたりetc…

ソレ毎にスクリーンショットの取り直ししていたらそりゃ時間が掛かるわ。
でもおかげでゴチャゴチャだったスクリプトがスッキリと整理できた。
やって良かった、似たような状況に人はスクリーンショット付きページを作るといいよ。

後 Gedit のページも少し整理、で一日が終わってしまった。

Gedit で Python スクリプトを debug – L’Isola di Niente

ぶっちゃけ以前 Blog で書いたことの整理をしているだけだったりする。
整理しないと忘れてしまうマジで。
Seed で環境変数なんて自分で書いたのに忘れてググってしまい我が Blog がヒットしたのには泣けた…

今月というか当面は Tips ページの整理を主にする予定。

Digital camera with Linux

Canon のデジカメを買った。
写真ド素人の私がレビューしても無意味だが幸い私は Linux 使いである。
コレを Fedora 16 に USB 接続してどうなるか試してみる。

なんか Canon だということを自動認識して勝手に処理してくれた。
ちなみに Panasonic だとこうなる、カメラアイコンにならないんだが。

そこいらに売っているデジカメなら何の問題もなく認識しそうだね。
Fedora や Ubuntu なら本当に素のままで何でもできてしまうわな。
もはや Windows にできて Linux でできないことってエロゲだけかも。

でも実際にはいったいドコにマウントされているのだろう?
場所はどうなっているのか Nautilus で Ctrl+L してみる。

コレは gphoto2 プロトコルで接続していますってことかな。
gPhoto – Wikipedia

とにかく USB 接続している状態で普通に Eye of GNOME 等から観覧可能。
しかし動画は何故かサムネイル作成や再生開始まで異様に時間が掛かる。
HDD にコピーすれば何も問題なく観覧できるのだが気になる。
というか Y901x では動画が再生できなかった…

理由がよく解らないので gnome-terminal にドロップしてみる。

こんなところにマウントしていたのか!
しかし Nautilus から W クリックすると Canon Digital Camera 部に転送される。
というかツリーを辿れない、シンボリックリンクでは無いようだし。

端末からならツリーを辿って eog 等でファイルも開ける。
けど gvfs-open 指定で Tab キーを使うと gphoto2 プロトコルに変換される。
あ、GNOME3 で関連付け起動は gnome-open ではなく gvfs-open を使います。

それなら Y901x でも開けそうなんだが…
同じようにカレントディレクトリから Y901x を使っても再生できなかった。
もちろん sys.argv も同じエラー、フルパスではアクセスできない。

つまり実際にマウントされるのは ~/.gvfs 以下。
だけど GVfs 経由で参照しなきゃアクセスはできないようだ。
gphoto2:// で始まるプロトコルに変換する必要があるのね。
つか、GVfs なら GTK3 化しなきゃいけないな…

平日にハマると怖いのでコレ以上の検証は後日に続く。
久々にアプリの更新ネタができたけど最近忙しいので…

WebKit Seed imports

GNOME の JavaScript 実装は seed と gjs がある。

JavaScript – GNOME Live!

seed は WebKit の Javascript エンジン。
gjs は Spidermonkey(Firefox) の Javascript エンジン。

であるようだ。
一応書くと Google Chrome のエンジンは V8 なので違います。
ようするに普通に WebKit を GNOME で使うと Seed を利用するということかな。

Python with GTK+3 WebKit Browser 2 | PaePoi
試しに以前作った上記と Google Chrome で V8 ベンチをやってみる。
V8 Benchmark Suite

V8 はやはり早い、圧倒的な差があるのね。
まあそれはよくて、Seed なら imports が使えるはず。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>GtkWindow</title>

<script>
function test() {
    try {
        var Gtk = imports.gi.Gtk;
    }
    catch(e) {
        alert(e);
    }
}
</script>

</head>
<body>
<input type="button" onclick="test()" value="Test">
</body>
</html>

ダメじゃん、ということで。

Blogging in the wind: WebKit: Extending Javascript – Seed (V)

こんなページを見つけた。
これは面白そうだ、ヘッダを揃えてビルドしてみよう。
webkitgtk-devel, seed-devel を入れればいいかな。

環境が揃ったのでビルド、問題なく実行ファイルが作成された。
ということで、GtkWindow を作成する HTML5 ファイルを読み込ませてみる。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>GtkWindow</title>

<script>
var on_clicked = function() {
    //
};
function create() {
    try {
        var Gtk = imports.gi.Gtk;
        Gtk.init (null, null);
        var gtkwin = new Gtk.Window();
        gtkwin.signal.hide.connect(Gtk.main_quit);
        var label = new Gtk.Label({label:"Button Click -> WARNING"});
        var button = new Gtk.Button({label:"Button Clicked"});
        button.signal.clicked.connect(on_clicked);
        var vbox = new Gtk.VBox();
        vbox.pack_start(label);
        vbox.pack_start(button);
        gtkwin.add(vbox);
        gtkwin.show_all();
        Gtk.main()
    }
    catch(e) {
        alert(e);
    }
}
</script>

</head>

<body>
<div>First time an error</div>
<input type="button" onclick="create()" value="Do GtkWindow">
</body>
</html>

ボタンの初回クリックで例外を吐く。
けど2回めからは問題なく GtkWindow が作成された。
body.onLoad() で imports なんかも試してみたが同じだった。

それよりシグナルのハンドラがうまくいかない。
RangeError って意味がよく解らないんですけど…
Seed の例外は何が悪いのかが PyGI より理解し辛いのが難点だよな。

うーイマイチだ。
でもとにかくコレで WebKit から imports が使えることは解った。
利用場面があるかどうかは別の話として。

Trigraph

先日書いたように半月前に Fedora マシンを英語キーボードに変えた。
VirtualBox 仮想マシンの Windows Vista, XP も英語配列に変更。
「英語キーボード Vista」と検索すればワラワラ見つかるレジストリ書き換えで。
XP は簡単、どちらも仮想マシン状態でも方法は同じで変更できるようだ。

IME も問題ない、Windows では Alt+~ で切り替えなのね。
ホストの GNOME3 複数ウインドウ切り替え機能より優先されるようだ。
てゆーか間違えるわ、あんまり使わないからいいけど。

ついでなのでキーボードネタでも少し。

有名かもしれないけど C 言語では Trigraph という三文字表記が使える。
Digraphs and trigraphs – Wikipedia, the free encyclopedia

??=include <stdio.h>

main() ??<
    printf("%s??/n", "はろーわーるど");
??>

スッゲエ読みにくい、なんだこりゃですが使えるんです。
ただ gcc では無効になっているので -trigraphs オプションが必要。

gcc -trigraphs test.c

日本語をリテラルに使っても何も問題無い。
ついでに試したら VC++ ならオプション無しで普通にビルドできる。
もしかして C# でも使えるかな?と思ったけどダメだった。

どうでもいいが wprintf ってどんな時に使うのだ?
内部が UTF-16 で local が CP932 で .NET 読み書きが UTF-8 ってアホか。
結局コンソールを使う場合はマルチバイトビルドしか選べないわけで…
それは本当にどうでもよくて。

問題があるようで代わりに Digraph というのが C99 で既定されたようだ。
表現できるものが減っているけどコレで全世界でも問題ないと判明したのだろう。

%:include <stdio.h>

main() <%
    printf("%s\n", "はろーわーるど");
%>

gcc ならオプション無しでイケる、Visual Studio 2008 ではダメだった。
Visual Studio 2010 ならイケるのかはシラネ。
そして C#, Python は関係無かった。

つーか何故こんなもんがあるかというと。
フランス語やドイツ語キーボードにはシャープや角括弧や中括弧が無いから。
キー配列 – Wikipedia

でも実は右 Alt キーを利用して打つことはできるようです。
京都産業大学 外国語学部 フランス語学科/Windowsでのフランス語入力
ドイツ語キーボードの配列

ということで C 言語以外は三文字表記なんか気にしなかったようだ。
いや UTF-8 が普及したってのが大きいんだろうけど…
よく考えたら C# なんて # が使えないと言語名さえ変えなくてはいけないもん。
ぶっちゃけ誰もこんな表記方法は使わないだろう、と思うんだが。

ついでに。
「Gedit キーカスタマイズ」とかのワードで検索している人がいるんだな…
それ Windows の文化だから。

Gedit で検索は Ctrl+F で次を検索は Ctrl+G ですよね。
これ、たとえば devhelp もまったく同じなんです。
一つ覚えてしまえば他でも同じキーが使える環境のほうがいいと思うのだが。
そういうところが気に入って GNOME を選んでいる人って少ないのかな…

English Keyboard in japan (Fedora 16)

先月の終わりにキーボードを買った。
そう、Majestouch のチャタリングが耐えられないレベルになって…
半年くらいから T キーが少しおかしくなる、変なクセでも付いたかなと軽く思っていたが。
そのうちアレもコレもとチャタるキーが増えていって…

Majestouch Tenkeyless Keyboard | PaePoi

キータッチは最高だったのに一年しか持たなかった YO!
多分私はヘヴィに使う人だと思うので一年というのは参考値に。

買い換えるにしてもテンキーレスでないとイラッとする体になってしまって。
っってマジェを避けるならもう RealForce しか選択肢がない。
でも多分誰もが気になるあの小さすぎるスペースキー。

ん、英語キーボードにすればいいんでないの。?

無変換とか前候補とか存在理由不明なキーを取っ払うだけでこんなにデカくなる。
そういえば右の Super キーも無いな、コレも一度も押したことが無いことに気がつく。
逆に Enter は小さく長くなる、コレが実は曲者で。
ミニノートなんかのキーだと英語配列なら違和感が無いものが多すぎる。

それよりプログラマーが気になるのは記号。
記号の大半は日本語キーボードとは位置が違う、レビューの検索でもしよう。

驚いた Super キーと Menu キーがいらない人ってこんなに多いんだ。
アクティビティを開くのは Alt+F1 より Super キーのほうが楽だし Nautilus から Ctrl+A して Menu キーを叩いて tar.gz のアーカイブを作成とかフル活用している私は異端なのか?

と思ったけど Linux なんて仮想マシン上で遊んでいる人が大半だから当然だったわ。
Windows しか知らなかった頃は私も滅多に使ったことが無かったわ。

てか記号位置の違いとかのレビューなんて見つからないわ。
ソレが怖いので黒ではなく上記のキーが白とグレーの色分けされた奴を選んで購入。
見た目より少しは迷うことが少なくなるだろうことを優先でポチっと。

というわけで自分でレビュー。

地域と言語のレイアウト設定で「英語(US)」のみにしてシャットダウン。
キーボードを取り替えて起動、見事英語キーボードになる。
日本語設定を残して切り替え可能だけど日本語レイアウトが優先されてウザイ。

日本語切り替えは Super+Space で。
実は US 配列 Mac と同じ(command+space)。

キータッチは今更なので割愛。
打鍵音は家で使うと以外に大きかった、マジェの半分以下ではあるけど。
Alt+` は Alt+全角/半角同様に GNOME3 では多重ウインドウの切り替えなのね。

問題なく英語キーボードになったので打ち込んでみる。

最初に使って気がついた、テンキーレスは CapsLock インジケータが無い。
定数指定でたまに使うんだが、打ち込めば解ることだけどパッと確認できない。
秀丸作者の秀Caps ってこういうキーボードために作られたのか。
他のインジケータはいらないけど、テンキー無いし。

日本語は Enter キーの位置さえ気をつければ問題なく打ち込める。
Space キーはやはり長いほうがイイ、無変換とか前候補とかマジでいらない。

bash スクリプトや Python コードを書いてみる。
記号で間違えまくる、イコールを打つ時に無意識に Shift を押している。

アンダースコア、アスタリスク、チルダ、シングルクォートで必ず迷う。
他の記号は意外と間違えない、位置が以前と近いものは見つけやすいようだ。
@ も遠いな、メールアドレスくらいにしか使わないからいいけど。

こんな状態で早く慣れるために年末から正月にかけて memopoli の作成。

そして半月たった現在。

無意識に「全角/半角」だった位置を叩いたり Enter で \ を打つことは無くなった。
日本語のみを打ち込むことに関してはもう何も怖くない。

アプリケーションでキーボードショートカットを使う時にはむしろ重宝する。
右の BackSpace, Shift, Ctrl, Alt がデカいということは素晴らしい。

しかしいまだにアンダースコアは無意識に右下の Shift を叩いている。
スネークケースを多用する Python with GTK+ 屋には鬼門。

他の記号はかなり慣れたけどチルダとバッククォートは毎回迷う。
「全角/半角」だった位置は目で探す時に省いているんですね無意識で。
gnome-terminal で移動だけやって nautilus `pwd` とかよくやるんだが。

ということは…
GTK+ を使わない、シェルスクリプトなんて書かないという人。
つまり Windows しか使わない人なら全然迷わないんじゃないかいな。
てかプログラミングをしないなら記号なんてほとんど使わないからね。

結論。
半月も使えば慣れる、Enter キーと「全角/半角」はあまり気にする必要は無い。
これから英語キーボードに挑戦という人は最初は絶対に色分けタイプにしておけ。
真っ黒を買っていたら私は多分後悔していた。
ただラスボスがまさかアンダースコアだったとは思わなかった YO!