2013年1月2日水曜日

とりあえず過去を振り返る所からはじめてみる

Waylandについて勉強会で話をしようかと思う隠者です。

まぁ、自分でやってみたビルドとかそういう辺りの話だけしてお茶を濁すのも良いのですが、せっかくの勉強会なら、Window Systemとかプロトコルの概要とか、そういう基礎を話しておけば、手を付ける人も増えるのじゃないかとか思っています。

で、Waylandのドキュメントをちらほらとにゅあんすで〜翻訳でもしようかと思ったのですが、このドキュメント、Xとの比較による説明から入っています。まぁ、せっかくだから、X Windowについてから話を始めようかと思います。

古い話なので、古い書物をひっくり返さないとかなぁと思ってみたのですが・・・。

Wikipediaにいろいろ情報ありました・・・良い時代です。恐るべしWikipedia。寄付しておかないとな(ステマ)。
まぁ、でも、順を追って、多分勉強会で発表する部分を書き出していきましょう。

ウィンドウシステムとは

「ウィンドウシステムとは、平行動作する複数のタスクそれぞれに固有の描画領域を割り当てる事で、画面出力を多重化する技術の総称です」と言っても、WindowsからPCを触り始めた方々や、最近のLinuxから入った人には何のこっちゃと思われるかもしれません。

Linuxであれば、ちょっと設定するだけで、過去に戻る事が可能です。Linux起動時にgrubで止めて、kernel parameterを指定するだけです。Ubuntu 12.04では、起動時にSHIFTキーを押しっぱなしにしていると、grubに入れます。


Ubuntu with linux .... にカーソルを合わせて、"e"キーを押すとエディットモードに入ります。以前は、3(マルチユーザー)という指定をしていたはずなのですが、Ubuntu 12.04では textと指定するようですね。

この状態でCtrl+Xで起動すると、Xが立ち上がっていないCUIでのログイン画面となります。terminalを起動すると現れるあの画面がディスプレイいっぱいに広がってる状態ですね。


ウィンドウシステムが登場するまでは、PCの画面とはこういうモノだったのです。
ウィンドウシステムが「平行動作する複数のタスクそれぞれに固有の描画領域を割り当てる事で、画面出力を多重化する」と、以下のようになります。


X Window Systemとは

概要

X Window Systemとは、スタンフォード大学で開発されたW Window Systemをベースに、Project Athena(MIT,IBM,DECの共同研究開発プロジェクト)の一環として、1984年に開発がおこなれたネットワーク透過なウィンドウシステムの一種です。Project Athenaは、ワークステーションが増加していったとしても、異機種混在の環境でも、首尾一貫した環境を作り出すという事を目的としており、ローカルでもリモートでもウィンドウシステムを利用できるプロトコルの実現のためには、ネットワークを使っていたW Window Systemは都合が良く、Wの改良を行い、Wの次ということでXの名称となったようです。

アーキテクチャ

Xは、クライアント・サーバー方式となっており、GUIアプリケーションとしてユーザーインターフェースを規定し、描画依頼を送るXクライアントと、Xクライアンとからの描画依頼に従い、実際に出力装置に描画を行いキーボードやポインティングでバイスからの入力を適切なXクライアントへと配送するXサーバーで構成されています。

X Serverは、GUIの基本フレームワークや機構だけを提供し、ユーザーインターフェースを規定していません。X Serverにおいては、ある領域の描画と移動、マウスやキーボード等のイベントの処理を行うだけです。

実は、X Serverを起動し、ただクライアントアプリを起動するだけだと、非常にシンプルな画面しか出ないのです。先ほどのCUI画面で、xinit を実行するとxtermが1つだけで表示されます。まぁ、それだけだと寂しいので、ちょっと~/.xinitrc を設定して、xeyesも表示してみました。


真っ黒画面に、タイトル枠もメニューも、アイコンも、最大化最小化ボタンもなにもない画面がでています。ウィンドウですらないため、この状態ではマウスでドラッグしようとしても、何もできません。これは、xtermとxeyesが描画してくれと依頼しているものそのままになります。

設計思想

Xが非常に寂しい画面になった理由は、その設計思想に見て取れます。Wikipediaから転載します。
  • 実際のアプリケーションでどうしても必要という場合以外は、新機能を追加するな。
  • システムが何でないのかを定義することは、何であるのかを定義するのと同じように重要である。あらゆるニーズに答える必要はない。むしろ、互換性を維持した状態で拡張可能にしておけ。
  • 1つでも例を挙げて一般化したほうが、全く例を挙げずに一般化するよりもマシである。
  • 問題が完全に把握できないときは、解決策も提供しないのが最善の方法である。
  • 10%の作業で望みの90%の効果が得られるときには、その解法を使え。
  • 複雑さは可能な限り分離せよ。
  • ポリシーよりも機構を提供せよ。特にユーザインタフェースのポリシーはクライアント側に任せておけ。
というわけで、ユーザーインターフェースはクライアント側に任されているんですね。

ウィンドウマネージャ

さて、UIがクライアント任せとはいえ、すべてのGUIアプリケーション側で、タイトルバーや閉じるボタン、ウィンドウの移動方法、拡大縮小方法をいちいち実装していては、実装が大変ですし、何よりGUIアプリ毎に操作性がバラバラになってしまいます。

そこで登場するのがウィンドウマネージャです。ウィンドウマネージャは、アプリケーションのウィンドウの位置と見た目を制御するプログラムです。どこまでがウィンドウマネージャの機能といった規定はないため、ウィンドウマネージャ毎に色々特徴や機能が異なりますが、X Windowでアプリをウィンドウ足らしめているものがウィンドウマネージャと言えるでしょう。

描画の仕組みによって、タイル型、スタック型、コンポジット型等の区分がありますが、その辺りはまた後日。

とりあえず何種類かのウィンドウマネージャをインストールして見栄えを見てみましょう。

twm

1987年という初期の頃に作られた非常にシンプルで軽量なスタック型のウィンドウマネージャです。これを見せると古い人は大喜びですけどね。

$ sudo apt-get install twm

Enlightenment

1997年に公開されたウィンドウシステム。初期の頃はGNOMEやKDEと連携して使われる事が多かったのですが、現在では独自の基本ライブラリ EFL を使って、独立のデスクトップシェルを目指して開発が継続中となっています。EFLは軽量で非力な環境でも動作できるそうで、Tizenで採用されているんですよね。

$sudo add-apt-repository ppa:hannes-janetzek/enlightenment-svn
$sudo apt-get update
$sudo apt-get e17

D-BUSとか必要なものがあるらしくて単体で起動せず、ちょっと強引に起動しているので、ランチャーとかも起動してしまってるようです。
昔、Kondara Linuxというディストリビューションで標準として採用されていたので隠者も使っていました。あの当時、自分の中にあったLinuxは微妙にダサいというイメージをがらりと変えてくれたものです。

metacity

GNOMEに含まれているGNOMEプロジェクト製のウィンドウマネージャです。
まぁ、よく見るものなので、特に説明の必要もないでしょう。


kWin

sudo apt-get install kubuntu-desktop

KDEに含まれているKDEプロジェクト製のウィンドウマネージャです。


以前は普通に単体動作していた気がするのですが、installが悪かったのかxeyesの方はウィンドウになっていませんねぇ。

ちょっと巧く動作していない部分はありましたが、ぱっと見でも印象が違いますよね。
こういったウィンドウ枠をつくり、拡大・縮小や、位置の移動、ウィンドウメニュー等の機能を提供するのがウィンドウマネージャです。

とりあえず、本日は、以下の3点を学んだということで、本日はこの辺までにしておきます。

  • ウィンドウシステムとは
  • X Window Systemとは
  • ウィンドウマネージャとは

2013年1月1日火曜日

抱負

新年あけましておめでとうございます。
皆様、良い年を迎えられましたでしょうか。

隠者の方は、甥っ子、姪っ子にもみくちゃに弄ばれる年明けとなりました。
そんなわけで、今日書く予定だった記事が終わっていないので、本日は抱負というか決意表明のみ。

今年は、以下を勉強・開発に参加できたらなと思っていますので、とりあえず勉強開始しています。
とりあえず、本日は、SilkのMac OS X (10.8.2)で動かせるようにしたいとちらほらやってます。

今月も、関東Qt勉強会とかYAPF部とかありますから、その辺の勉強会での発表もふまえて、今週からしばらく、準備のためのメモブログを張って行こうかなと思います。


追記Memo

2012年12月31日月曜日

今年も無事に暮れましてお疲れさまでした。

実家で引きこもり中の隠者です。いえ、帰省してるだけですけどね。

TLでコミケ参加者の若さをうらやましがりつつ、実家で一人お留守番を命ぜられてまったりしています。そんなわけで、珍しく日中にブログ書き。

今年は、個人事業主に戻っての1年でした。個人事業主の寄り合いみたいな小さな会社経由で仕事を受けているのですが、ま、仕事探しは基本自分でやる事になってますし、顧客との契約があって初めて報酬が支払われる形式ですので、フリーランスのようなものですね。みんなで良い顧客をそれぞれ捕まえて、何れ若い人を育てたいよね、何か面白い開発もしたいよねって話はいつもしていますが、まだ、それぞれ生きる事に精一杯な感じです。何事も先立つものなりアイディアなりが重要です。

フリーになってからは、以前より一層緊張感を持って、多少無理を押してでも成果をあげようと努力してきました。緊張感の中で少しばかり無理をしすぎている気もしましたが、なんとかかんとか、1年は仕事が途切れずにやってこれました。

結構忙しい常駐勤務になってしまったので、複数仕事を受けられないのが辛い所ですが、来年もこの調子で、仕事途切れずに頑張りたいものです。

勉強関連としては、来年から横浜Android PF部がAndroidの垣根を越えて、色々扱いましょうという事になりました。業界が成熟してきて、仕事で深い人は十分深くやっているし、プライベートでなかなか話せない事が増えてきた人もいます。そんなわけで、発表者を集めるのに、最近部長が苦労されています。

以前は、飲み会でこのあたり知りたいんですよねって人がいると、次回発表お願いしますっていって無茶振れたのですが、参加者が固定化してくるとどうしても。

隠者自身、興味を失ったわけではないけれど、仕事に追われてなかなか発表も準備できませんし、もはや隠者程度が趣味でうろちょろしなくても、完成度が高くなったAndroidがそこにあり、趣味で画像入れ替えられるJCROMがあり、多くの情報がWebで流れて、仕事でやってる詳しい人もいる以上、忙しい中わざわざ二番煎じする事もないかなという気がしてきています。そんなわけで、隠者は、Wayland辺りを中心にしばらく攻めてみたいなと思います。

また、関東Qt勉強会は、主催が暇村村長から、鈴木さんに移行しました。いや、出発時点を考えると、隠者ががんばらなきゃならなかったのでしょうが、自分のブログでさえこの有様な現在、なかなか手が回らなくって。サイトの更新もさっぱりで、@luyikei さんにも怒られちゃいました。ごめんなさい。

来年は、仕事のペースを徐々に落として、勉強時間も作り、なんとか仕事オンリーな生活を脱却して立て直したいなと思っています。

それと、とあるものの開発もやりたいなと思ってます。過去のトラウマから、フリーソフトとか出すのは大嫌いなんですが、友人、知人が色々楽しそうにやってるのをみると、こそこそ自分だけで楽しむのはやめてもっと大きくみんなで遊べるものを作りたいなとも思う訳で。まぁ、まだまだ勉強段階なので、こちらは形になってきたらご報告ということで。

そんなわけで来年は、ちょっと新しい方面へのチャレンジな一年にしたいなと思います。