Building GNOME 3.14 release (TAKE 1).

一応 gsettings-desktop-schemas までビルドした。GLib や GTK+ といったコア層は完了したので、ちょうどプラットフォーム層のコンポーネントに移行し始めたといったところ。まぁ、この辺りから GNOME 以外の依存関係が広がってくるし、(1回分のリリースを飛ばしている分) ja.po の方も未訳数が桁違いになってくるので、本当に「面倒」なビルド作業はこれからなんだけど。
で、ここまでのビルドで一番気になるのは GTK+ 3.14 のリリースで正式に組み込まれた GtkInspector という内蔵型の対話式デバッガ。その他にも色々あるのだけれどバージョン 3.12 をスキップしちゃっているので実際にどのバージョンで追加されたのか詳細は不明ではあるが、例えば gtk-launch なるコマンドを使うと URI を指定してアプリケーションを起動できるようになっているので、そういった (かなり使うケースが限定される) クラスが追加されているようだ。他には、画像編集系のアプリで使いそうな十字カーソルをキャンバス上で移動させてイベントを発行する Event Axes クラスとか、目的が今ひとつ不明な FlowBox クラス、ジェスチャーをサポートした Gesture クラス、UI 系だと Header Bar クラスや Popover クラスなんかがある。
GtkInspector は、以前は .Parasaite といった GTK+ のアプリケーション一つとして実装され、他のアプリにアタッチしてウィジェットの階層やクラスのプロパティをランタイムで調査できるものだったようさ。そういえば、その昔に似たような機能を持った ginspector なる GObject 系のクラス調査ツールがあった記憶がある (確か日本人が開発していたような)。GtkInspector は、chrome とか firefox といった最近のウェブアプリには標準で実装され Web 開発で HTML ページや CSS のレイアウト調査を行う「インスペクタ」と同様の位置づけだ。従って GTK+ のアプリで、このデバッガを起動する場合は chrome や firefox のそれと同様に [Control]+[Shift]+[I]というショートカットが利用できる。もしくは環境変数として GTK_DEBUG=interactive を指定する。すると GtkWindow を持つアプリから次のようなインスペクタが起動される:
BuildingGNOME3.14-2014122401.png
ここで OK をクリックすると、インスペクタのウィンドウから GTK+ のクラスについて様々な情報を収集できるようになる:
BuildingGNOME3.14-2014122402.png
BuildingGNOME3.14-2014122403.png
CSS エディタではリアルタイムで設定を変更させて確認することが可能になっている。他にもフォントやテーマなんかも変更して即座に確認できるようになっている。
そして、それ以外に気づいた点は gdk-pixbuf を最新版 (2.31系以上) にすると Deprecated な API やクラスが削除されているため GTK+3.0 ではなく GTK+2.0 の方がビルドできなくなるのには注意が必要。その他に NetworkManager の 1.0.0 がリリースされた。その際に今までのクライアント・ライブラリが GObject 化されて libnm という一個のライブラリに統合・置き換えられるようになった。但し、この 1.0.0 では従来の libnm-glib や libnm-gtk などのライブラリも混在できるようになっている。あとベースが Ubuntu 14.04 LTS なので gcc がちょっと古いため 4.9 をインストールしている。あと -fstack-protector-strong というオプションは、このバージョンからサポートされていたようだし。
といったところで、ここまでは特に大きな問題は無し :D

Start to build GNOME 3.14, but….

もう2014年もあと一ヶ月となってしまった所で、昨年のアップグレード以来ほとんどビルドしていなかった GNOME リリースの最新版でもビルドしてインストールでも始めようかと環境を整えていたら、なんと GNOME.org のアカウントが無効になっていた。最後にアクセスしたのは確か今年の7月くらいなんだけど、それから半年近く経ってから checkout してもアクセス権が無いとかで弾かれてしまう。アカウントの連絡先のメールアドレスは gnome.gr.jp ドメインであり、最後に引っ越しした後に forwarding 設定をしていたような記憶もあるが、まったく No Any Notifications だった。まぁ、いいか :|
ということで、今迄は常に Ubuntu の最新版のリリース上でビルドしていたけど、これからは LTS リリースをベースにビルドすることにした。Security Packages 以外のアップグレードの寿命がかなり短いから。

Fixed iconview number in g-c-c.

GNOME 3.10 へアップグレードした際に発生していた「巨大化する GtkDialog」の件。具体的には gnome-control-center のシェルの幅が大きくなる現象だけれども、先日アップグレードした GTK+ バージョン 3.10.7 でも直らないなぁと半ば諦めていたのだけど、実は g-c-c 側の問題で、既にリポジトリ上では直っていた:(
こんな状態:
gcc-wrong-iconview-number-20140202.png
から、上記のパッチを当てると:
gcc-fixed-wrong-iconview-number-20140202.png
シェルの大きさが6個のアイコン毎にまとめられるように修正される。
だけれども、アイコンをクリックして機能別のダイアログに移行すると、そこでも幅を制御しないといけないようで、例えば「オンライン・アカウント」なんかは未だ巨大化する。
というか、なぜサッサと修正したバージョンをリリースしないんだろうか:|

File-Roller Dirty Hacking.

書庫マネージャって、GNOME 最新版でも、未だ Windows の SJIS エンコーディングを含んだ zip ファイルをまともに扱えないんだねぇ…:|。未だに文字化けする:
FileRoller_and_SJIS-Encoding-01.png
ちょっと仕事でそういう書庫ファイルを扱うことが多くなってきて、それを毎回手動で変換するのがだんだんと面倒になってきたので Web で調べてみたんだけど、上位にあがってくる検索結果としては、例えば “p7zip-full” をインストールしていると文字化けするとか、”unzip” を日本語対応のパッチ付きのもので置き換えるとか、古くて信ぴょう性の低い情報ばかり (例えば、前者のパッケージをインストールしていない環境でも文字化けは発生しているとか)。
で、一体正解は何なのだろうかと :$。ちなみに、今の環境はと言うと:

$ dpkg -l file-roller  unzip
ii  file-roller             3.10.2.1-mikeforce1 amd64            archive manager for GNOME
ii  unzip                   6.0-9ubuntu1        amd64            De-archiver for .zip files

おそらくは “unzip” 側が怪しいだろうということで、その deb-src をダウンロードしてみると、changelog に以下のような記述が:

unzip (6.0-9ubuntu1) saucy; urgency=low
* Resynchronise with Debian.  Remaining changes:
- Add patch from archlinux which adds the -O option, allowing a charset
to be specified for the proper unzipping of non-Latin and non-Unicode
filenames.
-- Colin Watson   Mon, 13 May 2013 13:00:12 +0100

この -O オプションに対するパッチファイルは:

06-unzip60-alt-iconv-utf8

で、実際のコマンドライン・オプションは:

$ unzip -h
UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.
Usage: unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir]
Default action is to extract files in list, except those in xlist, to exdir;
file[.zip] may be a wildcard.  -Z => ZipInfo mode ("unzip -Z" for usage).
-p  extract files to pipe, no messages     -l  list files (short format)
-f  freshen existing files, create none    -t  test compressed archive data
-u  update files, create if necessary      -z  display archive comment only
-v  list verbosely/show version info       -T  timestamp archive to latest
-x  exclude files that follow (in xlist)   -d  extract files into exdir
modifiers:
-n  never overwrite existing files         -q  quiet mode (-qq => quieter)
-o  overwrite files WITHOUT prompting      -a  auto-convert any text files
-j  junk paths (do not make directories)   -aa treat ALL files as text
-U  use escapes for all non-ASCII Unicode  -UU ignore any Unicode fields
-C  match filenames case-insensitively     -L  make (some) names lowercase
-X  restore UID/GID info                   -V  retain VMS version numbers
-K  keep setuid/setgid/tacky permissions   -M  pipe through "more" pager
-O CHARSET  specify a character encoding for DOS, Windows and OS/2 archives
-I CHARSET  specify a character encoding for UNIX and other archives
See "unzip -hh" or unzip.txt for more help.  Examples:
unzip data1 -x joe   => extract all files except joe from zipfile data1.zip
unzip -p foo | more  => send contents of foo.zip via pipe into program more
unzip -fo foo ReadMe => quietly replace existing ReadMe if archive file newer

太字のオプション」を使うと日本語SJISなどを正しくエンコーディングしてくれるっぽい。実際に試してみると:

$ uznip -l test-zip-from-winxp.zip
Archive:  test-zip-from-winxp.zip
Length      Date    Time    Name
---------  ---------- -----   ----
0  2013-12-30 15:45   test-zip-from-winxp/ГEГBГУГhГEГYВ┼НьРмВ╡В╜ГtГ@ГCГЛ.txt
277040  2013-12-28 13:38   test-zip-from-winxp/У·Ц{МъВ╠ZIPГtГHГЛГ_.zip
0  2013-12-30 15:45   test-zip-from-winxp/У·Ц{МъВ╠ГtГHГЛГ_/
---------                     -------
277040                     3 files
$ unzip -l -O shift-jis test-zip-from-winxp.zip
Archive:  test-zip-from-winxp.zip
Length      Date    Time    Name
---------  ---------- -----   ----
0  2013-12-30 15:45   test-zip-from-winxp/ウィンドウズで作成したファイル.txt
277040  2013-12-28 13:38   test-zip-from-winxp/日本語のZIPフォルダ.zip
0  2013-12-30 15:45   test-zip-from-winxp/日本語のフォルダ/
---------                     -------
277040                     3 files

ということで、このオプションは利用できるっぽいので試しに書庫マネージャの zip コマンドクラスにオプションを追加してみる:

diff -uNrdp file-roller-3.10.2.1~/src/fr-command-zip.c file-roller-3.10.2.1/src/fr-command-zip.c
--- file-roller-3.10.2.1~/src/fr-command-zip.c  2013-10-27 21:28:46.000000000 +0900
+++ file-roller-3.10.2.1/src/fr-command-zip.c   2013-12-30 09:35:10.193504249 +0900
@@ -182,6 +182,10 @@ fr_command_zip_list (FrCommand  *comm)
fr_process_begin_command (comm->process, "unzip");
fr_process_set_begin_func (comm->process, list__begin, comm);
fr_process_add_arg (comm->process, "-ZTs");
+
+       fr_process_add_arg (comm->process, "-O");
+       fr_process_add_arg (comm->process, "shift-jis");
+
fr_process_add_arg (comm->process, "--");
fr_process_add_arg (comm->process, comm->filename);
fr_process_end_command (comm->process);
@@ -315,6 +319,9 @@ fr_command_zip_extract (FrCommand  *comm
fr_process_add_arg (comm->process, "-j");
add_password_arg (comm, FR_ARCHIVE (comm)->password);
+       fr_process_add_arg (comm->process, "-O");
+       fr_process_add_arg (comm->process, "shift-jis");
+
fr_process_add_arg (comm->process, "--");
fr_process_add_arg (comm->process, comm->filename);

で、リビルドして実際に開いてみると:
FileRoller_and_SJIS-Encoding-02.png
ちなみに、Linux (UTF-8) と WindowsXP (Shift-JIS) の双方で作成した書庫の閲覧や展開も問題なかった。iconv で実装されたパッチなので Shift-JIS 以外のエンコーディングもちゃんと処理してくれているようだ。こんな Dirty なパッチに対して、Dirty なハックで対応してみたけれど、当分このまま使ってみることにする。

Up to GNOME 3.10 (TAKE 2).

前回の続き。
GNOME シェルとデスクトップ全般(つづき)
やはり書き忘れていたことがあったので :X
まず、トップバーの右端にあるメニューはメイン・メニューではなくて「システム・ステータス・メニュー」と言うそうで:
G310-GNOME_Shell_MainMenuButton.png
なぜこんな形になったかというと、GNOME 3.8 ではユーザ名を表示していたけど、実際のところ、これが結構な幅を専有してしまい (ノートパソコン系のような) 画面の小さいデスクトップでは不評だったことと、(若干後つけ感があるけど) ユーザ名をおおっぴろげに表示するのはセキュリティ上いかがなものかということだったらしい。ステータスというだけあって設計段階ではいろいろ検討されていた模様
次は 3.8 から導入された、アクティビティ画面のメイン・ビュー (全てのアプリ) で表示されるカテゴリ別のフォルダ:
GNOME-shell-3.10-app_folder_categories-sample.png
これはグループ化したいくつかのアプリのランチャが「iOSみたいに」フォルダ形式として表示され、クリックすると次のようにフォルダが開いてアプリののランチャが表示される仕組み (ちょっと見づらいけど):
GNOME-shell-3.10-app_folder_categories.png
デフォルトでは「Utilities (ユーティリティ)」というカテゴリなんかがフォルダとして表示される。このフォルダは手動ながら指定することが可能で、org.gnome.shell::app-folder-categories というキーがリスト型になっており、そこにフォルダとして表示したいカテゴリ名を追加する。カテゴリ名はおそらく alacarte といったメニュー編集ツールで使用する .desktop ファイルの Categories に相当する名前 (但し英語表記) を使用できると思う。現在、何のグループがフォルダ表示されているか確認して、新たにゲーム・アプリをフォルダ表示する場合は:

$ gsettings get org.gnome.shell app-folder-categories
['Utilities', 'Sundry', 'Internet']
$ gsettings set org.gnome.shell app-folder-categories "[ 'Utilities', 'Sundry', 'Internet', 'Games' ]"
$ gsettings get org.gnome.shell app-folder-categories
['Utilities', 'Sundry', 'Internet', 'Games']

リスト型の指定がちょっと厳密だけど (リスト全体を double quotation で括り、リストを表す記号の ‘[‘ と ‘]’、そして先頭と末尾の要素の間にそれぞれスペースを挿入しないと怒られる) :$…。
まぁ iOS ほどの機能や完成ではないけど。というか、あんまり使わないかな。
Evolution
前バージョンと比較して、特に目新しい大きな変更は無いのだけど、メールの送受信のショートカットが従来の [F9] から [F12] に変更になってしまい、他のアプリと衝突したりしていろいろ面倒だったので、パッチ当てて対処した。
続きはまた気が向いたら:D