2013年1月3日木曜日

Ubuntu for Phone

3日坊主を自称する以上、3日間は日記を続けなければと思う隠者です。

Ubuntuのサイトで何かカウントダウンされていたのに気がついていた人は多いでしょう。ついに公開された情報に、twitterは湧いていました。

Ubuntu for Phoneの発表があったのです。

特徴についてよくまとまった記事が既にありましたので、Ubuntu for Phoneの概要はそちらを参照するとよいでしょう。

上記の記事では触れられていませんが、このUbuntu for Phoneに、非常に重要なニュースが含まれていました。himamuraさんのツイートの通りです。

話題のubuntu PnoneはQt5+QMLで開発されているらしいゾ!
   

きたーーっというわけで、Qt+QMLがアプリケーションの作成に利用されているのです。いやぁ、年明け早々、Qt大好き〜な人には楽しそうな話がきましたね。

いつか見たあの夢・・・。Mの悪夢・・・。まぁ、QMLだとコードみえちゃうんじゃとか、Qt5-beta1を使ってるけど、Qt5.0.0までに機能削られてなかったかとか、QMLを賛美し過ぎだとか、色々懸念事項はあるものの、何よりまず、こういうモノが出てきた事が重要です。

Ubuntu for Phoneでは、アプリケーションの開発は、QMLあるいはHTML5という記載が、Go Mobiletというページに記載されています。

QML向けに、Ubuntu for Phoneと親和性の高いToolkitを提供するということで、既にpreview版が公開されています。

Preview晩のToolkit環境は、Ubuntu 12.10であれば、以下の2ステップでインストールできます。
  1. Qt5のインストール
    $ sudo add-apt-repository ppa:canonical-qt5-edgers/qt5-beta1 && sudo apt-get update && sudo apt-get install qt5-meta-full && echo 'export PATH=/opt/qt5/bin:$PATH' >> ~/.bashrc
  2. Ubuntu QML Toolkitのインストール
    $ sudo add-apt-repository ppa:ui-toolkit/ppa && sudo apt-get update && sudo apt-get install qt-components-ubuntu qt-components-ubuntu-demos qt-components-ubuntu-examples qt-components-ubuntu-doc notepad-qml

サイト通りだと、ここでアプリを開発してみましょうとチュートリアルに誘っていますが、とりあえず、どんなパーツがあるのか見てみましょう。ちなみに、あくまでPC版Ubuntu 上でのデモなのでさくさく動きます。
$ /usr/lib/qt-components-ubuntu/demos/launch_componentshowcase

Theming

あるアイテムのカスタム表示のスイッチですかねぇ。


Resolution Independence

スライダーを操作すると拡大縮小されますね。


Ubuntu Shape


Buttons

ボタンは色や中身、大きさも自由ですといったデモですね。Disable状態がわかりにくい気はしますけど、まぁ、背景色が悪いよなぁ。

Tabs(Old)

旧来のタブ機能ですね。タブを押す意外にも、外部のボタンでのタブ移動ができ、タブ表示した内部にFlickableなコンテンツを入れたり、Listを入れたりもできます。スクロールするコンテンツは、iOSやAndroidでよく見る、引っ張るとゴムみたいに弾む感じで戻るようなアニメーションも行われています。


Tabs(new)

フリック操作で切り替わるタブ表示です。表示上、フリックで切り替わるという事がいまいちわかりにくい気はしますが、小さい画面でタブを押すよりは、ずっと楽だと思います。



List Item

List には、タイトル、画像のほか、ListのValue表示をしたり、選択で表示・非表示にして選択できるようにしたり、スイッチやボタン、スライダ等も設置できるようです。




Page Stack

Android端末だと設定画面等によく使われている、スタックページですね。


Switch, Check Box, Activity Indicator, Progress Bar

まぁ、この辺は外観だけ。Activity Indicatorはくるくる回ってます。




Slider

Sliderは通常の離して値が決定した段階で更新通知されるものと、変更中も更新通知されるものの2種類があるようです。

Text Input, Text Area

Text InputとText Areaです。リッチテキストも使う事ができ、ダブルクリックで範囲を選択、Text Areaは任意の行数までの拡大を許したりもでき、Ubuntu上では、日本語も入力できました。



Scrollbar

Scrollbarは、スクロール中にちょこっとオレンジ色で表示されるだけで、いまいち見えにくいです。

Popup

あとは、ポップアップする機能ですかね。位置が自動なもの、位置指定なもの、問い合わせ用にボタンが配置されたものや、modal的に他の部分を一時無効にして表示するものなど、色々と機能があるようです。





GIcon Image Provider

"image://gicon/preferences-color" 等の指定で使えるIcon


ちなみに、以下で起動すると電話画面サイズでのデモが2画面分あるようです。
$ /usr/lib/qt-components-ubuntu/demos/launch_componentshowcase_phone

画面サイズかわっただけやん!って気もしないではないですが。

なお、チュートリアルは、以下のURLになります。
http://developer.ubuntu.com/resources/app-developer-cookbook/mobile/currency-converter-phone-app/

Qt Creatorのインストール手順のためには、上記のURLをUbuntu 12.10上のfirefoxか何かで表示した方がいいでしょうね。apt://qtcreator って指定で、ソフトウェアインストール用のGUIが開くんですねぇ。

$ sudo apt-get install qtcreator qtcreator-doc

と書けば良い気がするのですけど・・・。

ま、実際の所、こういうパーツは使う事は使うのだけど、本格的なアプリを書こうと思うと全然たりないわけで。そんな時どうしたら良いのかが重要なんですが、QMLは残念ながらまだメジャーではないし、exampleも2つしか入ってないし、まだまだこれから感でいっぱいですね。

タイミング的には1年遅いって気がしないでもないんですが。QMLでこういうの作りたいと思って、色々夢の語られたQt5 を待ってたら今頃になったんですかねぇ。
おそらく、正式版のQt5に移行して公開しようと思ったら、Qt5のQMLから色々削られてて辛い状況もあるのかもしれません。

Qt押しで、MeeGoで悲しい思いをした隠者としては、なんとか頑張って欲しいと思っています。

本日は、ほんと画像撮って貼付けるだけでしたけど、結構手間な作業だったので、今夜はここまでということで。

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