Easy Breezy Beautiful GNOME Shell (in Japanese).

The GNOME Journal記事より、残っている課題の多さからリリースが遅れ、さらに G30 のリリース持ち越しにも影響を与えることになった GNOME シェルの紹介。
「ユーザはデスクトップに気を遣いながら使う」といった旧態依然の概念 (呪縛?) から卒業する時がやっと来たかという感じ。ここでスクリーンショットには実際にベータ版を使いたかったけど、開発版のライブラリをインストールしている自分の環境では Ubuntu 版はどうもうまく動いてくれなかった :$


超かんたんで素敵な GNOME シェル
開発メンバの Marina Zhurakhinskaya が紹介する GNOME シェルの概要とそれが目標としていること
GNOME シェルは新しい GNOME の「顔」と言えます。このプロジェクトの目標は、今のデスクトップよりももっとましな設計思想を持つルック&フィールと、その主要な機能をゼロから作り上げることにあります。そのような機能の中には、アプリケーションやドキュメントなどを見つけ出して起動したり (または開いたり)、いろいろな状態を切り替えたり、あるいはチャットのアプリケーションで受け取ったメッセージや株価の変動などを表示できるようなことが含まれています。それらの多くは、既存の GNOME デスクトップを構成するいろいろなモジュールで別個に実現されている機能ではありますが、GNOME シェルではそれら複数のモジュールを1個の大きな設計思想の中に統合したものになっています。
筆者は GNOME UI ハッキング大会 (Hackfest) に参加して、GNOME シェルの概念を設計するフェーズから作業しているハッカーの1人です。この大会は2008年10月の「GNOME ボストン・サミット」が開催される前の週に開かれました。筆者の作業には、コードの作成やスケジュールの検討、GNOME シェルをテストするための情報や本プロジェクトに参加する際の参考情報を wiki にまとめたり更新するといったことが含まれています。また、筆者はソフトウェア開発チームの一人であり、そして RedHat を紹介するプロジェクトのデザイナの一人でもあります。これらのチームは、GNOME シェルがお手本としている (Clutter や Mutter、そして GObject Introspection といった) プロジェクトのメンバら、そして実際にこのプロジェクトに貢献してくれるコミュニティのメンバらと一緒に積極的に作業を推し進めています。ご存じのように、GNOME シェルのお試し版的なパッケージがいろいろな Linux ディストリビューションからリリースされていますし、きたる GNOME のバージョン3.0ではデフォルトで取り込まれる予定になっています (現在のところリリースは2010年9月)。
GNOME シェルの設計を開始したきっかけは、ユーザのデスクトップで日常的に発生する作業 (Task) に基づいて、自動的に学習し進化していくようなユーザ・インタフェースを提供できるようにしたいということでした。時間を追う毎に、ユーザはデスクトップの使い途を広げていけるようにしなければなりません。例えば、高度な機能を順を追って見つけやすくしたり、パタン化した自分たちの作業や個人的な嗜好をデスクトップに反映させることで、よりユーザ個人に特化したデスクトップを組み立てれるようにする必要があるでしょう。ユーザがこれまで使用してきて習得した情報や経験 (いわゆる User Experience) をまるまる面倒みてやるということ以外にも、先進的なグラフィックス技術を活用し見た目にも豪華な視覚効果でユーザに楽しんでもらおうという目的もあります。さらに、ユーザのために他の作業の優先順位を落として、ユーザの好みに応じたイベントの通知をフィルタリングし、現在の作業 (とそのために利用しているアプリケーション) にフォーカスを当てやすくすることができればよいのではと考えています。

256.jpg

GNOME シェルで、まず最初に目をひく部分は、GNOME バージョン2.x で提供されていた2個のパネルが1個のパネルで置き換えられているということです (これは画面の上端におかれている黒いパネルのことです)。このパネルには、お馴染みの時計や通知スペースといったオブジェクトが配置されていますが、アプリケーションや設定などを含んだGNOMEメニューが1個のボタンで置き換えられているのがお分かりでしょうか (画面の左上端にある「Activities」というボタンで、このボタンをクリックすることで「アクティビティ概要モード」(Activities Overview Mode)に入れます)。これがユーザに「アクティビティ」(現在の作業) の概要を知らせてくれるボタンになります。その隣にあるのが、実際のアクティビティに関連づけられているボタンでアプリケーションの名前が付いています。最終的にはアプリケーション専用のメニューや設定オプションの他に一般的な (アプリケーションを終了したり、新しいウィンドウを開いたりする) オプションなど用意される予定です。GNOME バージョン2.x で提供されていたパネルに配置されていた、いろいろなコントロールが無くなったことで画面全体が広くなりましたし、あまり使用する機会のないオプションや現在の作業で利用しているアプリケーションとは関係のないオブジェクトがなくなってすっきりしました。ユーザがアプリケーションを切り替える方法は、従来の [Alt]+[Tab] キーで表示されるダイアログを改良した方法が採用されています (このダイアログには起動中の全てのアプリケーションが表示されるようになっています)。

255.jpg

GNOME シェルで一番重要で革新的な部分は「アクティビティ概要モード」(Activities Overview Mode) です。これは現在の作業から新しい別の作業へデスクトップ画面全体を利用しながら切り替える操作です (複数個用意されています)。このモードでは、ユーザが開いたウィンドウや起動したお気に入りのアプリケーションをプレビュー表示したり、ユーザのホーム・フォルダやコンピュータに接続されているいろいろなデバイス (「場所」(Places) としてまとめられています) や最近開いたドキュメントなどを、現在の状況に応じて表示してくれます。さらに、ユーザが望めば検索機能とウェブ閲覧機能を統合することもできます。
ユーザはパネルにある「Activities」ボタンをクリックするか、あるいは単にマウス・カーソルを画面の左上端 (「ホット・コーナー」と呼びます) に移動するだけでアクティビティ概要モードに切り替えることができます。このホット・コーナーは素早く簡単にアクティビティ概要モードにアクセスする方法を提供してくれます。

253.jpg

GNOME バージョン2同様に、デスクトップにあるいろいろなウィンドウは「ワークスペース」に結びつけて管理することができますが、GNOME シェルのアクティビティ概要モードではそれ以上に直感的なワークスペースを作成してくれます。ユーザは、現在ワークスペース上にある全てのオブジェクトを簡単に参照することができ、新しいアプリケーションやドキュメントを特定のワークスペースにドラッグして、そのワークスペースで起動したりオープンしたり、あるいは複数のウィンドウをドラッグしながらワークスペースとワークスペースの間を移動させることができます。ユーザはデフォルトで1個のワークスペースを所有しており、必要に応じて追加したり削除することができます。直感的なワークスペースを作成できる機能の以外にも、全てのワークスペース上にあるオブジェクトの一覧を表示する機能を使えば、ユーザが以前と同じワークスペースで作業をしていたかどうかに関係なく、目的のアクティビティがあるワークスペースに1回の操作で切り替えることができます。同様に、[Alt]+[Tab] キーで表示されるダイアログの中でも1回の操作でワークスペースを切り替えることができます (このダイアログの中には全てのワークスペースに配置しているアプリケーションの一覧が表示されます)。
GNOME シェルでは、アプリケーションが持つウィンドウを1つ1つ管理するというよりは、アプリケーション本体 (Firefox だとか Evolution だとか端末だとか) に注目するような設計になっています。アクティビティ概要モードの中で表示されているアプリケーションのアイコンにはアプリケーションを起動するランチャの役目と、アプリケーションが実行中かどうかのステータスを通知する役目があります。この機能は、例えば GNOME バージョン2でパネルの中に配置されていたアプリケーション・ランチャや「ウィンドウの一覧」アプレットに相当します。一覧表示されているアプリケーションの中で、現在実行中のものはそのアプリケーション名の背後からスポットライトで当てたような光が付与されて表示され、もしアプリケーションが複数のウィンドウをオープンしているのであれば複数の丸い光が表示されるようになっています。この一覧にあるアプリケーションのアイコンをクリックすると、未だ起動されていないのであれば新しいアプリケーションのウィンドウがオープンされ、もし既に実行中であれば最後に使用したそのアプリケーションのウィンドウに切り替わります。

255.jpg

タブ付きのウェブ・ブラウザの場合をとりあげみると、タブが開かれているかどうかに応じてそのウィンドウのタイトルや外観が変わります。例えば Firefox という名前とアイコンを強調表示させることで、「アプリケーション (Activity) を切り替えて使う」という一貫した GNOME シェルの目的 (機能) を実現しています。さらにアプリケーションのアイコンを右クリックすると、そのアプリケーションがオープンしている全てのウィンドウのプレビューが表示されるようになっています。これは、GNOME バージョン2のウィンドウの一覧アプレットを使って最小化したウィンドウを元の状態に戻す際にどのウィンドウをクリックすればよいのか迷ってしまうくらい「みすぼらしいインタフェース」と比較して、かなり改善されているのが分かります。新しいウィンドウをオープンする際のオプションは、現在のウィンドウのタイトルを右クリックして表示されるメニューから利用できます。同様に、[Alt]+[Tab] キーで表示されるダイアログではアプリケーションがオープンしている複数のウィンドウをグループ化して表示し、アプリケーションのアイコンを選択するとウィンドウを大きくプレビューしてくれます。
XChat IRC や Empathy、Evolution、電卓、チェスとったアプリケーションの場合、それらのインスタンスが1個だけしか起動されないことが保証されているので、アプリケーションが既に実行中であればユーザが想定していたウィンドウに切り替わるようになっています。それに対し GNOME バージョン2の場合だと、ウィンドウを切り替える前に目的のアプリケーションを起動していたかどうかを知っておく必要があります。間違って同じアプリケーションを2個起動してしまう、例えば電卓を2個立ち上げてしまった場合は不要なアプリケーションのために貴重なデスクトップ領域が狭くなってしまうとか、IRC で2回もログインしてしまうといったつまらない問題が発生する可能性がありました。アプリケーションの起動と切り替えをまとめて管理し、デフォルトの操作では実行中のアプリケーションの複製に切り替えるようにすることで、アプリケーションのアイコンをクリックして作業を進めるという流れにおいて、ユーザに対し妥当な (期待した) 振る舞いを保証することができるようになりました。
GNOME シェルは気軽に試してみることができます。現在の開発ステータスとしては、比較的安定した開発バージョンを気軽に利用できる状態でリリースしており、多くのユーザに使って貰っています。また、いろいろな Linux ディストリビューションでもプレビュー版の GNOME シェル・パッケージが利用できます。
Fedora 12 の場合であれば:

# sudo yum install gnome-shell

してから GNOME メニューから [システム]->[設定]->[デスクトップの効果] を選択して表示されるダイアログで GNOME シェルを選択してみて下さい。
Ubuntu 9.10 の場合であれば:

# sudo apt-get install gnome-shell
# gnome-shell --replace

を実行します。さらに:

# gconftool-2 --set /desktop/gnome/session/required_components/windowmanager --type string gnome-shell

しておけばログインする度に GNOME シェルが利用できるようになります。また:

# gconftool-2 --unset /desktop/gnome/session/required_components/windowmanager

するだけで上で変更した設定を元に戻せます。
パッケージを利用する代わりに、jhbuild というシンプルなビルド・ツールを使って、GNOME シェルのソースをビルドして実行し、定期的に最新の開発版にアップデートすることもできます。
そして、できあがった GNOME シェルを起動する前にその「カンニング・ペーパー」(使い方) を確認しておいて下さい。
現在の開発状況ですが、その作業アイテムには新しいメッセージ通知スペース (Message Tray) とその通知システムの開発だとか、アプリケーションやドキュメントの閲覧機能の改善、GNOME シェルを拡張するプラグインを開発するための開発キットの導入などが追加されました。これらの機能に対する設計や開発に対するヘルプは大歓迎です。プロジェクトのメーリング・リストに登録したり、IRC を使って irc.gnome.org の #gnome-shell チャンネルに合わせるなどして本プロジェクトに是非参加して下さい。あるいは、本プロジェクトの開発ページにある設計書を読んで詳細を理解したり、メッセージの翻訳に協力したり、Bugzilla でバグの報告やバグの修正に貢献するといったタスクもあります。ご自身が貢献したいことやヘルプが必要であれば前述の IRC チャンネルで問い合わせてみて下さい。隠れていろいろやって貰っても構いません!
原文の筆者について
Marina Zhurakhinskaya は RedHat のデスクトップ・チームで、次世代の GNOME シェルの開発を行っているシニア・ソフトウェア・エンジニアの1人です。彼女は主に GNOME デスクトップが直感的にユーザの要望に応答できているかどうかを確認したり、プロジェクトに貢献してくれる人達のためにドキュメントをまとめておく作業を行っています。職場の外では、友人や家族とブラブラして時を過ごしたり、旅行へ行ったり、オーディオブックを聴いたり、Yelp や TripAdvisor や Amazon のレビューを読んでいます。

How to build custom kernel for Ubuntu.

64bit 版の G28 デスクトップのビルド・インストールがほぼ完了し、メモリ障害が発生する前の状態までなんとか復旧できた後に、VMware workstation 5 を vmware-update (vmware-any-any-update みたいな拡張パッケージ) を使ってインストールしようしたのだけどモジュールのビルド・エラーが発生した:

/tmp/vmware-update-2.6.31-5.5.9> sudo ./runme.pl
Updating /usr/bin/vmware-config.pl ... corrupted
Updating /usr/bin/vmware ... No patch needed/available
Updating /usr/bin/vmnet-bridge ... No patch needed/available
...(snip)...
make[1]: ディレクトリ `/usr/src/linux-headers-2.6.31-17-generic' から出ます
cp -f vmmon.ko ./../vmmon.o
make: ディレクトリ `/tmp/vmware-config1/vmmon-only' から出ます
Unable to make a vmmon module that can be loaded in the running kernel:
insmod: error inserting '/tmp/vmware-config1/vmmon.o': -1 Unknown symbol in module
There is probably a slight difference in the kernel configuration between the
set of C header files you specified and your running kernel.  You may want to
rebuild a kernel based on that directory, or specify another directory.
For more information on how to troubleshoot module-related problems, please visit our Web site at "http://www.vmware.com/download/modules/modules.html" and "http://www.vmware.com/support/reference/linux/prebuilt_modules_linux.html".
Execution aborted.

vmware-update を提供しているサイトのコメントを読んでいくと、”See the README file.” とのこと:

init_mm (2.6.29 and above):
----------------------
You must re-export init_mm to use this vmware version with newer kernels
For this, you must apply the patch 2.6.29-export-init_mm.patch (or kernel-version-export-init_mm.patch) to your kernel sources and re
build your kernel. (unless your distribution did this for you). To check its kinda easy. If the build fails with "unknown symbol" and
"init_mm not found", then you know you're missing it.
it would be nicer, to recode without using mm. this probably takes too much work, for an unsupported vmware version that have been ou t for many years anyway. If you really don't want to patch the kernel, either make your own patch or upgrade vmware/use an alternativ e.

ということで、kernel にパッチしてリビルドが必要だとか。巷にある Debian 系 Kernel パッケージの作り方なんかを参考にパッケージ作成してインストールするも Linux-Restricted-Modules (略してl-r-m) も併せてビルドする必要があるとの警告メッセージが出る。
ということで、KernelCompileCustomRestrictedModules なんかを読んで見るも、Karmic では l-r-m は提供されていないのだが…:O
See Also KernelCompile の日本語訳: Ubuntu でカスタム Kernel パッケージをビルドする手順 (その1)
See Also CustomRestrictedModules の日本語訳: Ubuntu でカスタム Kernel パッケージをビルドする手順 (その2)

Got 64bit Linux box.

だいぶ前の話になるけど、自宅のメイン・マシンを x86_64 にした。
メイン・マシンで Dual ブートしていた Windows XP で、久々に 新作ゲームをやっていたら突然ブルースクリーンになり、再び Windows XP を起動するもすぐにリブートしてしまうようになった。Windows XP の復旧は諦めて、 Linux で G28 のパッケージでもビルドしようとしたが、こちらでも問題発生。何かコマンドを実行する度に Kernel が繰り返しクラッシュするようになってしまった:

Sep 24 07:19:23 XXX kernel: [  819.992105] Recursive core dump detected, aborting
Sep 24 07:19:24 XXX kernel: [  820.222617] Recursive core dump detected, aborting
Sep 24 07:19:25 XXX kernel: [  821.426607] Recursive core dump detected, aborting
Sep 24 07:19:26 XXX kernel: [  822.356806] Recursive core dump detected, aborting
Sep 24 07:19:26 XXX kernel: [  822.574389] Recursive core dump detected, aborting
Sep 24 07:19:26 XXX kernel: [  822.776187] Recursive core dump detected, aborting
Sep 24 07:19:58 XXX kernel: [  854.869206] __ratelimit: 25 callbacks suppressed
Sep 24 07:19:58 XXX kernel: [  854.869211] evolution-data-[3575]: segfault at f86014 ip 007473e2 sp bf818b84 error 6 in ld-2.10.1.so[73d000+
1d000]
Sep 24 07:20:00 XXX kernel: [  856.861927] evolution[3569]: segfault at 5 ip 00000005 sp bfadc914 error 4 in libhal.so.1.0.0[110000+11000]
Sep 24 07:20:09 XXX kernel: [  865.493222] gvfsd-metadata[3353]: segfault at 7cfbe5d4 ip 08051a44 sp bfcd2370 error 4 in gvfsd-metadata[8048
000+d000]
Sep 24 07:20:17 XXX kernel: [  873.403943] evolution[3637]: segfault at abc014 ip 001cf3e2 sp bff566b4 error 6 in ld-2.10.1.so[1c5000+1d000]
Sep 24 07:20:30 XXX ntpd[2682]: synchronized to 91.189.94.4, stratum 2
Sep 24 07:21:44 XXX kernel: [  960.580036] INFO: task nautilus:3518 blocked for more than 120 seconds.
Sep 24 07:21:44 XXX kernel: [  960.580039] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
Sep 24 07:21:44 XXX kernel: [  960.580042] nautilus      D c080c380     0  3518   3000 0x00000000
Sep 24 07:21:44 XXX kernel: [  960.580047]  f4dfde58 00000086 f4e02000 c080c380 f6bcc168 c080c380 a9554f22 000000bf
Sep 24 07:21:44 XXX kernel: [  960.580053]  c080c380 c080c380 f6bcc168 c080c380 00000003 000000bf c080c380 f6bb1dc0
Sep 24 07:21:44 XXX kernel: [  960.580059]  f6bcbed0 f6bb1dc0 f6bcbed0 00000002 f4dfde78 c01431e5 f6bb1df8 f6bcbed0
Sep 24 07:21:44 XXX kernel: [  960.580065] Call Trace:
Sep 24 07:21:44 XXX kernel: [  960.580073]  [<c01431e5>] exit_mm+0x75/0x120
Sep 24 07:21:44 XXX kernel: [  960.580077]  [<c014347c>] do_exit+0xfc/0x300
Sep 24 07:21:44 XXX kernel: [  960.580081]  [<c014de9d>] ? dequeue_signal+0x2d/0x170
Sep 24 07:21:44 XXX kernel: [  960.580085]  [<c01436ba>] do_group_exit+0x3a/0xb0
Sep 24 07:21:44 XXX kernel: [  960.580088]  [<c014f6ff>] get_signal_to_deliver+0x18f/0x300
Sep 24 07:21:44 XXX kernel: [  960.580091]  [<c010304b>] do_signal+0x6b/0x160
Sep 24 07:21:44 XXX kernel: [  960.580095]  [<c01ea583>] ? do_pipe_flags+0x3/0x100
Sep 24 07:21:44 XXX kernel: [  960.580100]  [<c01697fe>] ? do_futex+0xde/0x1e0
Sep 24 07:21:44 XXX kernel: [  960.580104]  [<c01de233>] ? mem_cgroup_get_local_stat+0x3/0x1f0
Sep 24 07:21:44 XXX kernel: [  960.580107]  [<c0169992>] ? sys_futex+0x92/0x110
Sep 24 07:21:44 XXX kernel: [  960.580111]  [<c01de233>] ? mem_cgroup_get_local_stat+0x3/0x1f0
Sep 24 07:21:44 XXX kernel: [  960.580114]  [<c0103178>] do_notify_resume+0x38/0x40
Sep 24 07:21:44 XXX kernel: [  960.580117]  [<c0103428>] work_notifysig+0x13/0x1b
Sep 24 07:21:50 XXX kernel: [  966.841541] evolution[3667]: segfault at 72b014 ip 009783e2 sp bf8cf244 error 6 in ld-2.10.1.so[96e000+1d000

最悪なことに apt のデータベース (/var/lib/dpkg/info/ 以下) が破壊され update する度におかしなデータが埋め込まれてしまってどうすることもできず:

Log started: 2009-09-24  01:23:18
dpkg: parse error, in file '/var/lib/dpkg/status' near line 168 package 'libexempi3':
`zlib1g' の `Depends' フィールド: バージョンが `)' を含んでいます
Log ended: 2009-09-24  01:23:18

この時点で HDD ディスクが逝ってしまったか思い、連休中ということもあり、近くのPCショップで 1TB の HDD を購入し、 当時α版だった Ubuntu Karmic の 64ビット版をインストールすることに。巷でも x86_64 版に関する情報が広まっていたし、Flash が動かないなんかもあまり聞かなくなったので良い機会かなぁと。HDD を購入した時にメモリも安かったので合わせて購入し増量したことも理由の1つか。一番の理由は、Core2 Extreme CPU X9650 を十分に活用していなかったことだけど。
Linux をインストールして前のディスクから可能な限り環境とデータを復旧させ、Windows XP も AHCI で利用できるようドライバを組み込んだインストールディスクを作成して同様に復旧した。
あとで思ったけど、ディスクそのものには大きな障害が見つからなかったため、今回の障害はおそらくメモリに問題があったのではないかと思う。
64bit にしてよかったのは、とにかくビルドが速くなったと言うこと。あと文字列の処理が大半な deb パッケージの作成処理や apt 操作もかなり快適になった。同じマシンで 32bit の環境を経験しているからか高速化というだけでもかなりありがたい。

Yokota Friendship Festival 2009.

一昨年昨年に引き続き今年も参加する。これまでの経験から最終日、それも朝一番 (9:00〜) を目指して移動するのが楽だろうな。天気が良くても朝は暑くないし、人もそれほど多くない。途中、福生公園を横切る Shortcut Route がお奨め。
で、お昼過ぎには撤退して最寄り駅まで移動したんだけど、駅のホームは次々とやってくる人達で酷いありさまだった :o。この駅の構造も酷いけどねぇ:

YokotaFriendship2009-20090823-140.jpg
YokotaFriendship2009-20090823-142.jpg

車での移動が楽かもしれないけど、第5ゲートまで向かう道路もこれまた人の波になっていて、それ沿いにあるぼったくり臨時駐車場で良ければ。ちなみに第5ゲートは向かって左側の信号から渡らないと進めないので注意。

YokotaFriendship2009-20090823-01.jpg

とはいえ、10:00am くらいでもこんなに人がいますがね…

YokotaFriendship2009-20090823-09.jpg

PJ (Para Jumper: 空軍の救難チーム) ブースは兵器を手にとることができ人気があって毎年人だかり:

YokotaFriendship2009-20090823-16.jpg

そのまま滑走路を移動して、航空機展示場所へ移動し順番に見ていく。F16、A10、F15、F18 などお馴染みの戦闘機がどーんと展示されている:

YokotaFriendship2009-20090823-24.jpg
YokotaFriendship2009-20090823-26.jpg
YokotaFriendship2009-20090823-31.jpg
YokotaFriendship2009-20090823-35.jpg

自衛隊機もさりげなく展示されていたり:

YokotaFriendship2009-20090823-40.jpg
YokotaFriendship2009-20090823-41.jpg

で、ドンドン進むとお目当ての F22 が見えてきた。これはちょっと Excite したな 8):

YokotaFriendship2009-20090823-52.jpg

かっこいい..

YokotaFriendship2009-20090823-55.jpg

さすがに、この一角は警備が厳重で、横からちょっとでもロープを出たりしたら怒鳴られる。結構ぴりぴりしていて質問にも答えてくれない。エンジンの詳細を見せないようにしているっぽいが:

YokotaFriendship2009-20090823-59.jpg

といった感じで滑走路の半分を移動していたらお腹が空いてきたので、飲み食いモードに入る。Beer とのセットも安くて良い感じ:

YokotaFriendship2009-20090823-103.jpg

佐世保バーガー、初めて食べたけど大味すぎて少し残してしまった:

YokotaFriendship2009-20090823-123.jpg

で、今年はステーキは挑戦できなかった…:

YokotaFriendship2009-20090823-124.jpg

K9の訓練風景を横目に第5ゲートに向かう:

YokotaFriendship2009-20090823-134.jpg

その他のフォトはいつものギャラーにて:
See Also 横田友好祭2009