デスクトップ

gThumb 2.12.x Image Viewer and Image Browser.

GNOME の バージョン 1.0 系から使っている「息の長い」画像ブラウザ。
単独プロジェクトから始まった後に GNOME プロジェクトに加わり、新しいバージョンの GTK+2 にも対応してきた gThumb は、画像ビューアというよりは複数の画像をまとめて閲覧するファイル・ブラウザみたいな位置づけから始まったアプリだった (そもそもファイル・ブラウザである Nautilus があまりに貧弱だった時代でもあったので)。さらに1個の画像を表示する画像ビューアとは異なり、「複数枚からなる写真」を対象にしていた視点がよかった。たとえば、いろいろな場所に格納した複数の画像をカタログという仮想的なアルバムを使って関連付けたり、USB ストレージやデジタル・カメラなどの外部のデバイスから画像を取り込んだりと (当時のファイル・ブラウザにはない) なかなか便利な機能が簡単に利用できたので、他にも魅力的なアプリがいろいろあったけど、今でも gThumb を常用している。

gthumb-20101128-01.png

このアプリ、最近バージョンがアップグレードしたということで、パッケージをビルドしてインストールしたみたら、そのメイン・フレームが大きく変わっていて驚いた。ほぼ全ての機能が拡張機能としてモジュール化されており、必要な機能を必要な時に有効にするスタイルになっている。なので、初めてインストールした時は何も有効になっていなかったのでちょっととまどったけれど :$:

gthumb-20101128-02.png

拡張機能は従来のものに加え、今風にクラウド対応したり、さまざまな条件で画像を検索したり、なぜか楽曲や動画の再生なんかもできるようになっているのはデジタル・カメラとの接続を意識してのことか。デスクトップの仮想ファイルシステムでサポートしていれば、もちろん iphone4 といったスマートフォンもマウントしてカメラ同様に参照できる。
とはいえメッセージの翻訳状況はこれまた大変な状態になっていたけど、昨日なんとか完了し commit しておいた。

GNOME Boston Summit 2009 (in Japanese) – TAKE 1.

The GNOME JournalIssu #18 より、昨年は2009年の10月に開催された GNOME Boston Summit 2009 のいろいろなセッションの概要や話題についてまとめている「Jason Clinton 氏のメモ」を数回に分けて翻訳し紹介してみる (一部、原文にはないリンクなどを適宜挿入してある)。
その内容は、GNOME 3.0GLib/GTK+-3.0 などに関連した技術的なお話などが対象になっている。
ところで今回の原文は難解で、途中で主語が省略されたりでかなり手こずった :$。正直なところ読み物というレベルではないな、コレ (Natives は理解できるのかな)。


GNOME ボストン・サミット 2009
2010/02/05
Jason Clinton 氏が、昨年は2009年の10月に開催されたボストン・サミットで話し合われた内容について補足しつつまとめてくれました。
はじめに
毎年、コロンバス・デイのある週末に、(主に北米に滞在する) GNOME の開発者らがマサチューセッツ州のボストンにて一同に会し、形式に縛られず自由なハッキングを楽しむイベントがあります。それは普段着で、そして和やかに進行していきます。この参加者は既に別の GNOME イベントで互いに顔なじみになっていることが多いです。イベントっぽい展示ブースはありません。たいていの企業は自分たちの従業員を参加者として派遣しているだけです。
今年のサミットは特に「実りの多い」話題や議論が多かったです。はっきりと、そして間近に迫った目標 (すなわち、GNOME バージョン3.0) があるので、参加者はみな自分たちの作業に没頭しているようでした。しっかりとまじめに議論が行われたため、議題からそれた話はほとんどありませんでした。アイディアはすぐに共有されて皆に知れ渡りました。そして見解の一致を受けて新しい目標が設定されました。おそらく今までの開催を含め今回のサミットで一番際だったのが結束力の現れでしょう: 今回のサミットでは、必要ならば、参加者はほぼ全てのセッションに参加することができる日程でした。
筆者は、本サミットの開催中と開催直後に自分が参加したセッションについてのメモ (規模は7,500語ほど) をいくつかブログに投稿しました。ここで紹介することはサミットの概要を短く要約したものです。但しセッションの結果そのものや、ある意味興味深い factoid (疑わしさが残る事実) 関係は除いてあります。むしろサミットの内容をを「ストレート」に伝えると言うよりは、可能ならば複数のセッションをまとめたりして中身の濃い話にまとめてみました。
会場への移動
土曜日から始まった初日は、午前9:30くらいになるとサミットに出席する人達がケンブリッジの MIT Sloan の建物の中へ移動し始め、Red Hat 社が用意してくれたベーグルやコーヒーやお茶を頂きながらセッション開始までのひとときを楽しんでいました (Red Hat はこのボストンに本社があり、サミットの主催者でもありました)。今年のサミットは、午前10:00に Red Hat の Jon MaCann 氏が議長を勤めた短いセッションから始まりました。このサミットの参加者は30分または1時間ほどのセッションに (頭のスイッチを切り換えながら) 順番に出席していきました。参加者は人気があるセッションが衝突しないよう確認し、それぞれのセッションで提案することを準備し、そして議論の末に到達した結果を票決するといった流れで、サミット前半の2日間のスケジュールを組み立てていました。そして、月曜日の最終日は終日ハッキングに当てられました。
Plumbing” (フレームワーク)
GTK+ 3.0 とクライアント・サイドでのウィンドウ装飾
Matthias Clasen 氏は GTK+ 3.0 のために「現在あるAPIを意図的に分解し見直していこう」という計画と、バージョンの後方互換性の新しい機能について語ってくれました: XInput2 や描画用 API、アプリケーションに手を加えることなくテーマ・エンジンを変更するといった機能など。まず最初の目標は、凝ったハッキングをあまり魅力的なものにしないこと、そして GNOME の新しいリリース毎に変更されてきた出来損ないのテーマ・エンジンの汚名を挽回すること、さらに上位のアプリケーションを安定して動作させるために充実したフレームワークを提供することでした。
Cody Russell 氏は「クライアントサイドでの装飾」(Client-Side-Decorations: CSD) という、既に別のブランチで開発が続けられている機能を話題にしました。彼の目標は現在の作業結果を GTK+ 3.0 にマージするということです。CSD を使えば GTK+ は、例えば Google の Chrome に搭載されているような Tabs-In-Window-Decorator (ウィンドウの装飾としてタブを提供する) をサポートできるようになり、それにより GTK+ はウィンドウとウィンドウ以外の領域との間にある境界にテーマを導入することができるようになります (従来はウィンドウ・マネージャに全て委ねていました)。Cody 氏曰く、自分は Nokia と一緒に作業してきているので Qt と同じようなアプローチになるであろうこと、そして独自の CSD をそれぞれ提供している Qt と GTK+ のアプリケーションの間にある互換性の問題を回避することができるようになるとのことでした。これは、例えばアプリケーションがフリーズしても確実にウィンドウを終了しクローズできるようにするために、多くの人達が EHWM の拡張について議論を行い、「ウィンドウを閉じる」というイベントを発行できる領域を指定できるようにしました。CSD の実装でウィンドウの大きさを変更できるイベントを処理できるようにすると、X11でウィンドウの境界線の描画が完了する前にそのウィンドウの大きさを変更しようとした場合の描画上の不具合を改善できます。一方、Glib 3.0 には特に大きな変更計画はありません。
Glib/D-Bus と GSettings
Ryan Lortie 氏は、まず始めに GNOME で D-Bus にアクセスするために提供されてきたいろいろなメソッドについて、その提供経緯などを簡単に語ってくれました。”gvariant” をベースにした “gbus” は libdbus ライブラリの代替えでした。libdbus は dbus デーモンの中でも重要なプロトコルを実装したライブラリであり、glib や Qt、そして python などのバインディングが利用しています。また、とある2人のハッカーがそれぞれ別々に “gdbu” と “eggdbus” という実装を行っていたそうですが、これらの実装の完成度は十分ではなかったため、Ryan 氏はそれを改善するために3つの作業を提案しました。

  1. GVariant (D-Bus のデータ型の1つ) を Glib へマージする
  2. libgio と libdbus1 をリンクさせる (おそらく GIO のモジュールの拡張ポイントを利用することで実現可能)
  3. “gbus” と “eggbus” から妥当な実装を抜き出して、GDbus 型として GIO のライブラリへマージする

Colin Walters 氏の要請に応じる形で、このステップに従って実装された新しいバインディングがフィルタリングとパス登録を得るだろうことで意見が一致しました。さらにセッションの参加者らは GIO の中に libunique を (新しいバインディングの上位として) マージすることについて同意してくれました。
それから Ryan 氏は Glib の GSetting とその API のデモを行いました。GSettings はちょうど GConf の代替えとして提案されていたメカニズムでした: 今現在は了承済になりました。このセッションの参加者は、GVariant を Glib にマージした後に、GSettings のメカニズムも GIO へ追加することを希望しました。GSettings は、複数の設定を一度に変更するといったイベントに対して発行されるアトミックなシグナルを利用します (複数の設定変更に対してそれぞれシグナルを発行するのではなく)。GSettings のシグナルは再帰では発行されることはなく、受け取ったシグナルをフィルタリングできる機能の計画もあります。GSettings のスキーマは普通のテキストファイルです (書式は python のようにインデントとコロンを使います)。GSettings は継承をスキーマの表現としてサポートしています (「スキーマの継承」)。
Ryan 氏は GConf の代替えである dconf のデモを行いました。それから簡単な API について説明してくれました。従来の GConf と dconf を比較するとデータの読み取りだけで 10〜50 倍高速であり、同様にデータの書き込みも高いパフォーマンスがあるとのことでした。dconf のメモリ使用量は GConf よりも「かなり小さくなる」(magnitude smaller) よう設計されているだけでなく、書き込み処理の時にだけメモリを使用するようになっています。dconf によるデータの書き込みでは fsync() 関数を大量に使用していますが、アプリケーションの処理をブロックすることはないので気にしなくても良いでしょう。
dconf を利用しているアプリケーションのテスト (主にデグレードしているかどうかの確認) を行う際は、まずユーザのデスクトップ・セッションに影響しないようプロキシを設定するか、あるいは独自の GSetting プラグインを利用して dconf のリクエストを一時的に使用する作業用のデータベースへ転送するという方法があります。さらに Ryan 氏は、まもなく dconf に PolKit のサポートが追加されることを発表しました。
ディストリビュータがパッケージを作成する場合、GNOME オリジナルのデフォルト設定を自分達のポリシーに従って上書きすることが多いですが、それについても Ryan 氏は、(標準のデフォルト・データベースを無視して) ベンダ独自のデフォルトのデータベースをシステムに追加するよりは、パッケージにパッチをあてることでデフォルトのスキーマを変更する方法を提案しました。
最後に、セッションのまとめで少しだけ補足がありました。NFS 経由のホームディレクトリを持つユーザが dconf を使うと問題が発生することがあります。一般的に NFS 越しに mmap() 関数を呼び出すことに問題があるからです (mmap() 関数はそのような利用を想定していない)。Ryan 氏はその問題にも着手しており、解決方法を見つけることを約束したそうです; GConf からの移行を説明したドキュメントを含め、dconf の API リファレンス・マニュアルもまもなく library.gnome.org にアップロードされる予定です (訳注:翻訳時現在は既に「dconf Reference Manual」として公開済でした)。GConf と dconf とのブリッジの作成もまた作業中だそうです。このブリッジは簡単なアプリケーションを実行できますが、まだ解決しなければならない重要な問題が残っているようです。Ryan 氏は、また、まだまだ皆さんの助けが必要であることを参加者に訴えていました (特にブリッジの問題)。
Hallway Track: GTK+ のフォント・ダイアログの改良
休憩時に通路で催されたセッションの中で、Alberto Ruiz 氏と Máirín Duffy さんのチームはフォント・ダイアログのユーザビリティ改善について語ってくれました。Máirín さんはいくつかのモックアップを用意し、Alberto 氏はそれを pygtk を使って実装してくれていました。そしてそれらのプロトタイプを使ってユーザビリティのテストを実施して見せてくれました。彼らはこの1週間以内に最初のプロタイプを公開することを約束してくれ、数日後には Máirín さんがモックアップとプロタイプのいくつかと、コメントを書き込むページを公開してくれました。
GObject イントロスペクション
Colin Walters 氏はセッションの冒頭で GObject introspection を簡単に紹介してくれました。彼は自分の意見として、GObject は既にイントロスペクションを導入できる段階にきていると語りました。イントロスペクションのツールを導入するにあたり、GObject の型システムは既にたくさんの必要条件を満たしています (C言語のライブラリを作成しやすくしてくれる設計になっているおかげで)。とはいえ、イントロスペクションを実現するにはこれ以外にもいろいろなものが必要でした – 大部分はアノテーションの機能です。これを受けて、Colin 氏はC言語のライブラリにメタデータを付与し GObject イントロスペクションからそれらのライブラリにアクセスする方法をデモしてくれました。このアノテーションのデータは、例えばどのポインタによって何のコンテナが渡されたのか、そしてそれが完了した後にアプリケーション側でポインタを破棄する必要があるのかどうかなどを定義します。
GObject イントロスペクションのツールには *.gir という XML ファイルに記載されたアノテーションを解析するパーサがあります。その *.gir というファイルをコンパイルして *.typelib というファイルを生成します。このファイルには解析したアノテーションと同じ情報がバイナリ形式で格納されます (読み込みの効率が良いので)。その後にプログラミング言語のバインディングを呼び出します。言語バインディングはいろいろ用意されており、GJS という Javascript のバインディングも利用できます。PyBank という GObject イントロスペクション・ベースの Python バインディングがあります (訳注: PyBank は PyGI という名前になったので、これ以降は PyGI と記述します)。このバインディングは完成当時は問題ありませんでしたが、いくつかの呼び出し規則の中に互換性に対して解決しなければならない課題があります。Colin 氏は従来の古いバインディングを置き換えるべきではないと考えていました。新しいバインディングは PyGI を利用すべきで、PyGI は古いバインディングと新しいバインディングとの間にある互換性を維持することになるとのことです。
Colin 氏は、gtkdoc ツールにアノテーションのデータを理解する機能が追加されることを期待していましたが、そこまで到達する前にすべき作業がまだいくつか残っているようです。最後に彼は GObject イントロスペクションのプロジェクトの中で複数の言語が混ざったプログラミングに挑戦するという提案を上げました: GObject を使うだけで既にその 85% は完成していると言えるのではないでしょうか。
Clutter バージョン 1.2 の API
このセッションでは「Clutter のバージョン 1.2 に追加して欲しい API」について話し合いました。Emmanuele Bassi 氏が視覚効果を含む新しい機能を上げてくれました: Texture Atlasing (複数の小さなテクスチャをまとめて大きなテクスチャを生成する技法) や統一規格に則ったテクスチャのキャッシュ、レイアウト管理などがありました。彼はモジュール式のプラグイン・アーキテクチャを追加して入力メソッドを扱えるようにしたいという考えも披露してくれました (このプラグインは GIO が使用しているものに似ています): すなわち、継承したクラスの中で API スタブを実装できるようにするということです。これにより、GtkModules 経由で追加された全ての機能を ClutterModules 型のモジュールの中で再実装することができるようになります。
今度のバージョンはパフォーマンスも注目に値するそうです。フレームバッファ・オブジェクト上で処理することで、変更のあったウィンドウを部分的にそのオブジェクトへアップロードすることができるので更に効率が良くなるであろうとのことです (例えば、Evolution の Throbber がアニメーションしている時は、再び Evolution のウィンドウ全体をフレームバッファ・オブジェクトにアップロードする必要はありません。テクスチャで変更のあった部分だけをアップロードすべきです)。但し、どれだけ効率が良くなるのかといったデータの提示はありませんでした。多くの人達がバグだらけのハードウェアの上に OpenGL で作ったウィンドウ・マネージャをのせ、その上でアプリケーションが正しく動作するように VSync の値を取得することに取り組んでいました。問題はハードウェアのドライバの奥深くに横たわっていましたし、まれにハードウェアそのものに問題があったとのことです。ユーザがクリックしたオブジェクトを探し出す性能を改善する方法について3つのアイディアが提案されました。
さらに、特別なことを考えずに Clutter と GTK+ とが共存できればよいとか、いろいろな種類のアプリケーションを対象にして欲しいとか、GNOME で Clutter を完全にサポートして欲しいとかという提案に議論が移ろうとしているのを感じ取ったところで、彼はセッションを終了しました。可能な限りコードを共有し、各ツールキットに対するユーザビリティ・ガイドや API リファレンス・マニュアル、プログラミング・ガイドを提供してもらえれば、私たちはハッカーは Clutter と GTK+ で作ったアプリケーションを一緒に組み合わせることが可能なプラットフォームをいろいろ提供することができるようになるのですが。


という感じで読みながらなんとか日本語の文章にしてみたけど、かなり面倒なので、もしかしたら次回の翻訳はないかもしれません :P

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 の環境を経験しているからか高速化というだけでもかなりありがたい。