Posted by & filed under , 開発.


Coders at Work プログラミングの技をめぐる探求の紹介の後半です。

心に残ったひとことの引用と、それに対する個人的な感想を書きます。引用は手動で書き写しているので書き間違いがあるかもしれません。何か変だったら前後から類推するか本を当たってください。

ジョー・アームストロング

今から思うとおかしいのは、現代的な小道具というのはどれも、実際にはより生産的にしてくれるものではないことです。(略)ソフトウェア開発の大部分はどのみち頭の中で行われるのです。(略)それから今日では選択の重荷が大きすぎると思います。(略)昔は選択による麻痺状態なんていうものはありませんでした。単に始めるだけのことで、言語やなんかに何を使うかという選択は、すでになされていたのです。どれにするかと考えることはなく、ただやり始めれば良かったのです。

Erlang作者のジョー・アームストロング氏の懐古主義な感想です。わからないでもないです。

うまくいかないことが何かといえばソフトウェア再利用です。あきれるくらいひどい状態です。

次の次の引用に話が続きます。

長い間私は包括的な誤りを犯していました。その包括的な誤りとは、ブラックボックスを開けないということです。(略)抽象化の境界というのは容易に通り抜けることができ、中に入るとたくさんの恩恵が得られるのです。(略)初心者プログラマがそういった抽象化をすべて開いて見るべきだとは言いません。しかし言っておきたいのは、少なくともそれを開ける可能性について考えてみるべきだということです。

御意。

再利用性の欠如はオブジェクト指向言語から来るもので、関数型言語では話が違います。オブジェクト指向言語の問題は、それが周りに引きずっている暗黙の環境にあります。

個人的にあまり納得はできません。

暗黙の環境を多く引きずるほど再利用性が低いのは同意しますが、オブジェクト指向言語だと暗黙の環境を引きずる、とまでは言えないと思うからです。JavaのPOJOなどを見れば、やりようはあると思います。

–コードを書き始めるときはトップダウンですか、ボトムアップですか? それとも真ん中から?
ボトムアップです。少し書いてはテストし、少し書いてはテストします。私は今ではテストケースを先に書くようになりました。

ボトムアップのようです。興味深い回答です。

–C++はやらないんですか?
ええ、C++は満足に読めも書けもしません。C++は嫌いなんです。何か間違っているように感じます。複雑すぎます。私は小さくてシンプルな言語が好きなんです。C++は小さくもなければシンプルでもありません。

本書に繰り返し出てくるC++嫌いですが、Erlang作者からもダメ出しされてしまいました。

–デバッグで使うテクニックは何ですか? print文ですか?
print文です。プログラミングの偉い神様が言っています。「汝プログラムの間違っていると思われる部分にprint文を置きて再コンパイルし実行せよ」(略)「ジョーのデバッグの法則」というのがあります。それは、すべてのバグは最後にプログラムを修正した箇所からプラスマイナス3ステートメント以内にある、というものです。

print文デバッグの有用性は否定しませんが、こんなに威張って言えるのはジョー・アームストロング氏が大物だからでしょう。

私は仕様書がとても好きです。「必要ないでしょ? コードを読んでよ」という人たちはプロとはいえないと思います。コードは何をするかは示しますが、何を意図しているかは教えてくれません。コードというのは問題に対する答えなのです。仕様書やドキュメンテーションがないとしたら、答えから問題を予想する必要があります。そして間違った予想をすることだってあるのです。私は問題が何なのか言ってもらったほうがありがたいですね。

ここまでドキュメンテーションに重きを置く姿勢は、本書でインタビューされた人の中でも珍しい部類です。

「コードは答えなので問題が何かを示せ」というフレーズは、ドキュメント嫌いのプログラマにドキュメントを書かせるときに使えるかもしれません。

–プログラミングと直接関係はないスキルで、プログラミングを上達させてくれたとか、プログラマとして持っていて貴重だと感じるものは何かありますか?
文章ですね。コンピュータサイエンティストの誰かが、「ところで、もし国語がうまく使えないなら、決して良いプログラマにはなれないからね」と言っています。

ミスター弓立も同じことを言っていました。

–その他に良いプログラマの特徴はありますか?
ちゃんとしたプログラマになるためには、良い記憶力が必要だと何かで読んだことがあります。これはその通りだと思います。

まあ、そうかもしれません。

サイモン・ペイトン・ジョーンズ

「関数型言語でUML図に相当するのは何ですか?」とよく聞かれます。私の思いつく一番良い答えは型システムです。オブジェクト指向プログラマが絵を描くところで、私は型のシグネチャを書きます。

Haskell作者のサイモン・ペイトン・ジョーンズ氏です。

個人的にこの回答は理解できません。理解できないとは異論があるという意味ではなく、文字どおり理解できません。図示が理解の助けになると思っているからです。図示に頼る自分は、オブジェクト指向に毒されているのでしょうか。そうは思いません。図での理解はオブジェクト指向と無関係に重要と思っているからです。

私のデフォルトは非常に一般的なものはそもそも書かないということです。私は自分のプログラムをできるだけ美しいものにしようとはしますが、必ずしも一般的にしようとはしません。これは違うことです。私はプログラムを、手にしているタスクを実行できる、可能な限り明快で分かりやすいものにしようと努めます。

コードの汎用度や抽象度の高さよりも、小さくて明解であることに重きを置く姿勢は興味深く感じます。

関数プログラムをどのようにデバッグするかというのは、ここのところしばらく関心を集める研究テーマになっています。(略)これは私が安全でないprintfによる甚だ未熟なデバッグテクニックを使うことへの、逃げ口上になっていたわけです。(略)良いデバッグ環境の重用性を過小評価したりけなしたりするつもりはありません。(略)現実世界はとてもごちゃごちゃしており、ツール的なサポートは重要だろうと思います。

私は大きなことを学ばなければならないのが嫌いなのです。大きくてぐちゃぐちゃしたものからは、本能的に身を離します。しかし同時にそれが実用的には有用で重要であることも認めています。私にとっての疑問は、そういったものの設計にもう少し時間をかければ、もっと小さく、複雑でなく、行き当たりばったりでないやり方で設計することはできなかったのかということです。

インタビューを読むと、美しい言語への志向はありつつも、現実への理解も感じます。ブレンダン・アイク氏が極小のサブセットでプログラムを書くべきと考える人を批判していますが、サイモン・ペイトン・ジョーンズ氏はその批判される側にはいないようです。

ピーター・ノーヴィグ

–業界で働こうと思う人たちのために、コードを書くこと以外で必要な、伸ばしておくべきスキルは何でしょうか?
人とうまくやっていくというのが中心的なことだと思います。

大人な回答です。jwzであれば、人とうまくやろうなんて考えている暇があればコードを書け、と言いそうです。

プログラミングの大きな部分は可能な限り多くのことを頭の中に入れる能力にかかっていますが、それには限界があります。少なくとも私の頭には。そうするとほかの人たちに依存する必要が出てきて、適切な抽象化をして人の作ったものを使えるようにする必要があります。

本書でインタビューされる人の中では、ジョシュア・ブロック氏に近いエンジニアリング志向を示す発言です。

テスト駆動設計というのは素晴らしいものです。私も以前よりずっと使うようになりました。しかし何でもテストできたとしても、問題へのアプローチの仕方が分からなければ、解にたどり着くことはできないのです。

この発言につながる話は実に秀逸です。単体テストを順々にパスするように書き進めたらボトムアップ的にコードができあがるというテスト駆動開発でありがちなエピソードを叩き斬る話です。そんなアプローチで書けるコードはそもそも簡単なコードで、書く前からおおよそどう書くかの全体像が頭にあるんだろうという見解です。テスト駆動開発信者はぜひ読んでみるべきです。

「我々がここにいるのは最も意味のあるソリューションを提供するためだ。完璧なソリューションはどこかにあったとしても、それはおそらくコストに見合わない」と考えます。「今一番重要なことをやろう」と言い、それはあきらめるのです。(略)ドイツの諺に、「完璧は良さの敵」というのがあります。(略)実践的なエンジニアはみんなこの教訓を学ぶ必要があります。

–どうして抱えてもいない問題を解こうとしたくなるんでしょうね?
賢くありたい、完全でありたいと思うのでしょう。何かを完成させてから別なものに進みたいと思うのでしょう。人は一度に一定量のものしか扱えないので、「これはもう完璧にやった。だから頭からのけて先に進むことができる」と言いたいのです。しかし完璧にやることの投資利益率を計算する必要があります。それはいつもS字型の曲線になっていて、80から90パーセントまでいくと、投資に対するリターンは逓減していきます。

これらの発言につながる話も秀逸です。簡単に言うとソフトウェア開発における収穫逓減の話です。残り10%の完璧さを目指すために多大のコストをかける姿勢を批判します。まったくそのとおりです。この罠は本当に危険です。「完璧は良さの敵」というフレーズは使えそうです。

ガイ・スティール

–自分が書いたのではない大きなコードの山には、どのようにアプローチしますか?
使い方は知っているけど中身は知らないソフトウェアの場合は、特定のコマンドや操作を1つ選んで、それをたどっていくことがよくあります。

ここではトップダウンともボトムアップとも言いませんが、各論から入って抽象化する姿勢(帰納的な発想)がうかがえます。

プログラムの全体を本当に理解する必要があるときには、腰を据えて全体を通して読もうとします。しかしこれはそのプログラムがどのように構成されているかの枠組みが頭に入っていないとできません。運が良ければ、プログラマが何かのドキュメントを残していたり、適切に名前づけをしていたり、ファイルの中で適切な順序で書いていて、通して読むことができるようになっているでしょう。

トップダウンの理解の必要性を述べています。

–コードを書くときには、低レベルの関数からではなく、高レベルの関数からトップダウンに構成していくんですか?
私は高レベルのアイディアを提示しようと努めます。

上に同じく、トップダウンのアプローチをうかがわせます。

–Javaのような言語で仕事するときには、設計をインターフェースから取りかかるのですか?
ええ。昔よりインターフェース指向になりました。実装コードのない、メソッドの入力とアクションと出力についての記述です。(略)インターフェースを設計しているときには、実装がどのようなものになるかイメージを持っているべきです。少なくとも実装のためのアイディアは必要です。

ここにも、トップダウンのアプローチが見られます。

あらゆる面で優れた言語を作るというのは本当に難しく、それはある部分では簡潔な記法がそうたくさんはないためです。ハフマン符号の問題です。
(略)
–その問題を解決するためにLispが取った方法は、あらゆることを一様に半簡潔にするということでした。この一様性によって、ユーザが言語に自分で一様に半簡潔なファーストクラスの構文上の拡張を導入できるという利点が得られますが、S式の構文に抵抗を持っている人もたくさんいます。(略)あなた自身は、「みんな本当にLispを理解すればカッコを嫌うなんてことはなくなる」と思う、高慢なLisp屋なのでしょうか。
いいえ、私は高慢な見方はしていないつもりです。

ただひとつのプログラミング言語があらゆる用途に渡って最適になることはない、という見解を話したガイ・スティール氏に対して、Lispは例外ではないか、と問いかける対話です。ふたりともLispの世界の偉人であることを指摘しておきます。

Perlは批判できるほど本格的に使ったと言えるか分かりませんが、この言語には引かれませんでした。C++も引かれませんでした。C++のほうは結構書いていますが。(略)しかし私はビョーン・ストラウストラップの努力に対する批判者とは見られたくありません。(略)Cの型システムは根本的に壊れていますから。

本書で何人目かわからないほどのC++嫌い発言ですが、ストラウストラップ氏に配慮してC++ではなくCに責任転嫁しました。

–あなたが好んで使うデバッグテクニックは何ですか? シンボリックデバッガか、print文か、アサーションか、形式的証明か、あるいはその全部でしょうか?
私は怠け者であることを認めなければなりません。私が最初に試すのは、print文を突っ込んで何か分かるかやってみるということです。(略)一方で、私のプログラミングに対する考え方の発展の中で大きな転機は、あるHaskellで開発するプロジェクトに取り組んでいたときに得られました。Haskellは純粋関数型言語なので、print文をだた突っ込むというわけにはいかなかったのです。それでユニットテストの世界に100パーセント浸ることを強いられました。

この発言と、サイモン・ペイトン・ジョーンズ氏(Haskell作者)がprint文デバッグを告白する発言(上記参照)がなんとも興味深い部分です。

ダン・インガルス

–Smalltalkの別な側面として、アラン・ケイが最近特に強調しているのは、それがオブジェクトの話ではなかったということです。重要なのはメッセージパッシングだと言っています。(略)それがどうしてそんなに中心的なアイディアだと言うのでしょう?
それは本当の分離をもたらしてくれるからです。アランの最近の言い方だと、これは適切なものだと思いますが、ずっと下までインターネットのようであるべきだということです。

昔書いた話のことだと思います。

クヌースがTEXに取り組んだ方法を見ると、すごく数学的で、美しくエレガントです。それと比べて、Smalltalkの最初のエンジンはまったく場当たり的でした。ただ必要なものをまとめただけです。

クヌース先生の前ではみんな大人しくなります。

–優れた技術的リーダーになるための秘訣みたいなものはありますか?
第一に、何をしようとしているのかについて明確であること。明確なビジョンを得るのが仕事です。(略)彼らが自分の担当部分をどのようにやるか自由にさせておくことができます。必要なところにだけ立ち入ってマイクロマネジメントすればいいのです。

大人です。

–Smalltalkの素敵な環境を使って開発するときにはシンボリックデバッガを使っていると思うのですが、print文に頼ることはありますか?
優れたデバッガという選択肢があるときにそのようなことをする人が果たしているのかと思いますね。どこにprint文を入れるんですか?(略)最近はprint文スタイルのデバッグを随分やるようになりました。それというのも、JavaScriptだと十分優れたデバッガがない場合がよくあるからです。

本書では様々な人にデバッグ方法を質問する場面があります。時代もあるかもしれませんが、ほとんどの人がprint文デバッグを告白します。ダン・インガルス氏は例外的にprint文デバッグは時代遅れと言い切ります。もっともJavaScriptへの皮肉も忘れていませんが。

型というのは実質的にプログラムに関するアサーションです。私は物事を可能な限りシンプルにすることに価値を置いていて、型が何かをあえて言わないというのもその一部です。(略)アサーションは非常に役に立ちます。

ぜひ、ジョシュア・ブロック氏の静的型付け支持の発言と比べてください。個人的には、ジョシュア・ブロック氏に共感します。

–コードリーディングについてですが、初めて見るコードにはどのように取り組みますか?
(略)それが何をするのか分かっているところから出発するとしましょう。私はたぶんトップダウンでいくと思います。それぞれの部分が何で、どのように連携するのかを理解しようとします。

トップダウンだそうです。

L・ピーター・ドイチュ

分かっているのは、ソフトウェアが基礎的な部分へと下りていくほど、非常に優れた人間によって作られていることがより重要になるということです。エリート主義的な見方かもしれませんが、私はそう思っています。

御意。

我々の持つ基本的にすべてのプログラミング言語の世界が、我々の感覚や脳や社会がそれを扱うよう共進化してきた物理的な世界と、非常に根本的に異なっているということです。だから人々がそれをうまくやれると期待するのはそもそも馬鹿げているのです。本当に良いプログラマになれるというのは、どこかちょっとおかしいところがあるはずです。「おかしい」というのは言い過ぎかもしれませんが、人を人間として良く機能させる資質と、人をプログラマとして非常に優れたものにする資質とは、重なる部分があまりないのです。

言いたい放題です。本書の中ではjwzに準ずる過激派です。

始めからやり直す必要があるでしょう。ポインタの概念を持った言語をすべて捨てることです。現実の世界にはポインタのようなものはないのですから。

ここでのポインタとはCの生のポインタ批判ではなく、参照のような言語機能を含めた広義の意味でのポインタを批判しています。言外に、値だけを扱うプログラミング(狭義の関数型プログラミング)をほのめかしているのだと思います。

非常に良いプログラマであり、良い設計者だったと思います。しかしシステム思考者ではなかったのです。変更が及ぼす影響や帰結という考え方に慣れていないだけでなく、それが必須な問であるという認識も欠いているようでした。私から見ると、大規模設計をするときに問わなければならない質問を理解している人と、どういう理由でかそういう質問がよく分からない人の間にはっきりした違いがあります。

システム思考者ではなかったあるプログラマのエピソードから上記発言につながります。コードが書けることとシステム思考は、確かに、必ずしも両立するとは限らないと思います。

エリート主義的に聞こえるかもしれませんが、プログラミングをすべきなのは記号の世界にいて快適に感じる人です。記号の世界を飛び回っているのがすごく快適に感じるのでなければ、その人はプログラミングをすべきではないのかもしれません。

またまた言いたい放題ですが、わかるような気がします。

もはやLispでプログラムを書かなくなったのは、あのシンタックスに我慢できなくなったからです。シンタックスが重要だというのは紛れもない人生の真実です。

本書の中でLispを真っ向から批判する人はL・ピーター・ドイチュ氏ぐらいでしょうか。シンタックスが重要というのは個人的には同意見です。

ラリー・ウォールが言語設計について語るというのもいい神経です。Perlは言語として醜悪です。

まさに言いたい放題…

ケン・トンプソン

計算の理論の基礎がちょうど現れたころです。シェルソートが現れ、それがnの2乗ソートよりも速い理由が誰にも分かりませんでした。それでみんな実験して解明しようとしていました。

こんな時代があったのか、という軽い驚きがあります。

–ソフトウェアはどのように設計しますか? グラフ用紙に落書きするのか、UMLツールを立ち上げるのか、ただコードを書き始めるのか?
どれくらい大きいのかによりますね。多くの場合、しばらくの間は頭の中に収まっていて、紙には何も書きません。そして難しい部分に集中します。簡単な部分は自然に消えます。(略)ある時点で、断片が底から落ち始め、その断片からピラミッドが出来上がっていくのを目にします。頭の中でピラミッドが十分な高さになったら、下から手をつけ始めます。

ブレンダン・アイク氏のゲシュタルトなプロセスの発言に通じます。

私は一番下を見、階層を想像すること、そのオペコードの下で何が効率的で何が効率的でないかをイメージすることができます。(略)現代的なプログラミングはいろいろな面で私をおびえさせます。変換以外の何もしない階層を何層も何層もひたすら積み重ねています。トップダウンに読まなきゃいけないプログラムというのは私を混乱させます。(略)ただ深いところへ深いところへ問題を先送りしているだけです。私はそういうのを頭に入れることができません。理解できないのです。(略)しかしただコードの塊を渡されて「これを読んで改良しろ」とか「別なことをするように変えろ」と言われたなら、通常トップダウンで読みます。

わかります。一方、現代に生きる我々は現代的なプログラミングに適応する必要があります。

–コードを書き始める前に何か書くことはありますか?
コードを書く前に通常データ構造を書き出します。
(略)
–Cのプログラムを書く場合、そのデータ構造の定義はCのコードということになるんでしょうか?
いいえ。箱と矢印です。

やはり図です。サイモン・ペイトン・ジョーンズ氏の発言と比較すると興味深い話です。

それから私はボトムアップのドキュメンテーションを好みます。
(略)
–では書くのと同じようにコードをボトムアップで理解するのですね?
ええ。それが頭の中で把握し、記憶するための方法です。

ケン・トンプソン氏はボトムアップで理解する派のようです。

–デバッグするときには、どんなツールを使いますか?
ほとんどの場合値をprintするだけです。

ケン・トンプソン氏はprint文デバッグ派のようです。

コンパイラは最悪です。GCCが出すコードを見てご覧なさい。ひどいもんです。本当にひどい。しかも遅いし。

GCCが何より遅いかと言うと、手で書いたアセンブリ言語との比較です。

–今なら、C++が良い言語か悪い言語かおっしゃることはできますか?
間違いなく良いところはあります。しかし全体としては悪い言語だと思います。

本書では珍しく少しC++を褒めてくれました。総論としてはダメ出しですが。

–私がクヌースにインタビューしたとき、彼は技術的な文章のコツは、すべてを2度、補い合うように書くことだと言っていました。だから彼はそれを文芸的プログラミングのバグではなく機能だと考えているわけです。
2つの方法があるなら、一方が本当であり、それはマシンが実行するほうです。もう一方は本当ではありません。一方が他方よりも極端に簡潔であるのでない限り、それに価値はありません。(略)アルゴリズムの微細な記述をしようとし、それを1つはプログラミング言語で、もう1つは文章でしようとするのは、クヌースにはできるのでしょうが、私にはできません。

本書でインタビューされる人たちで、ドキュメントに関する見解の別れ方はとてもおもしろい部分です。「クヌースにはできますが、私にはできません」は、ドキュメントを書きたくないプログラマが使えるフレーズです。

フラン・アレン

–コードはどのように読みますか?
(略)
私は通常直感が働くか、あるいはそのソリューションの構造がどうなっているかあらかじめ知っていて、真ん中あたりから始めて核になる部分を探します。

これも、ブレンダン・アイク氏のゲシュタルトなプロセスの発言に近いかもしれません。

–少なくともIBM360プロジェクトに関しては、ソフトウェア開発プロセスを持ち込んだことでプロジェクトが救われたと感じているわけですね?
まったく必要なことでした。しかしソフトウェアの人たちにとっては、そういった人たちが入ってくるのは、ものすごく苦痛なことでした。ソフトウェアについて何も知らず、ただひたすら設計レビューや設計仕様といったものを要求してくるのですから。
–ではプロジェクトを救う助けになったわけですね。それがその人たちを勇気づけて、クリーンルームプロセスという次の段階へと進み、行きすぎることになったのでしょうか?
ええ、そう思います。
(略)
私たちソフトウェアの作りについてある程度経験のある人間たちには、彼らの主張はぎょっとするものでした。しかし何かを売り込もうと思ったら、時に大胆な主張をする必要もあるのでしょう。

この発言の前にブルックス(「人月の神話」)の話があって、ここにつながります。

–(略)技術的マネジメントの難しさの1つは、物事をどうやるべきかについて自分の考えを持つことと、みんなが自分のアイディアを入れられる余地を空けておくことの間で適切なバランスを取ることでしょう。
(略)2人やってきて、シンボルテーブルにハッシュを使いたいと言ったんです。私は「それはできないわ。どうやればいいのか分からないんだから」とか何とか答えました。次の月曜に出てきたら、彼らがもう作っていました。(略)うまく行ったし、ずっと速くなっていました。私には大きな教訓になりました。新しい考えに対してもっと心を開かなきゃいけないと。
(略)
下請け会社で働いていた人の1人がオブジェクト指向プログラミングを最近知って、それを究極まで適用してやろうと決めたんです。請負業者の監督は私の仕事だったんですが、彼を止めることができませんでした。そしてプロジェクトは頓挫しました。

示唆に富みます。自分の無知を知る必要もありますが、任せてうまく行く保証もありません。

若い人にすぐマネージャになろうとしないよう勧めるということです。そういう方向に才能のある人は引かれることでしょうが、まずは技術的な仕事で評判を確立することです。
(略)
–技術的に高いものを持っていないけどほかの人の力をまとめあげるのが上手な優れたマネージャというのはあり得るのでしょうか?
あり得るでしょう。自分が技術に優れていると勘違いをせず、部下の誰が優れていて誰がそうでないか見分けられるのであれば。

技術リーダーについての話が続きます。

1960年代までには、見事な言語のリストができていました。Lisp、APL、Fortran、COBOL、Algo60。Cよりも高級な言語です。Cが開発されて、私たちは大きく後退したのです。Cは自動最適化、自動並列化、高級言語からマシンへの自動的なマッピングといった私たちの能力を壊してしまいました。

こういう視点でのC言語批判は初めて読みました(低レイヤすぎるという批判はいくつも読んでいますが)。

–最近のもっと新しい言語はCよりも高級になっていますよね。JavaとかC#とかPythonとかRubyとか。
それでも依然として指定しすぎです。根本にある問題はデータの場所を指定するということです。ほかの言語を見てもらえば、データの場所や、それをどう動かすか、マシンのどこに置くかということまで指定しようとはしないのが分かるでしょう。どの時点でも、究極的には値が問題にされていたのです。

L・ピーター・ドイチュ氏の発言(「ポインタの概念を持った言語をすべて捨てることです」)とシンクロします。

–あなたが仕事を始めたころは、女性は詳細志向だから良いプログラマになると思われていました。最近では、ほかのことすべてをおろそかにしても何かに集中するという奇妙な能力のために、プログラマの大半が男性なのだと考えられています。
ええ。

興味深い話です。

バーニー・コーセル

–クヌースを通して読んだんですか?
当時はあれがホットだったんですよ。私が一番脂ののっていた時期でした。私たちはみんな新しい巻が出るごとに、頭を突っ込んで隅から隅まで読んでいました。

こんな時代があったようです。

プログラムは読まれることを意図しているということです。(略)ソースコードはコンピュータではなく人間のためのものだと思うようになりました。(略)反抗を示す人もいます。自分が優れたプログラマであることに絶対的な自信を持っていて、私を自分のやっていることが理解できないただの老いぼれだと思っています。私もそう遠くない昔に同じことを言っていたので分かります。「プログラムは動くだろ。何の問題があるんだ?」と。私が「プログラムが動くからって誉めてはもらえないぞ。我々が目指しているのはその次のレベルだ。プログラムが動くのは当然の条件だ」と言うと、彼らは驚きます。

「プログラムが動くのは当然の条件だ」って発言はクールです。今後、使わせてもらいます。

–コードの大きな山を前にしたとき、どのように取り組んでいたんですか?
(略)私はコードを本のようには読みません。そのプログラムが何をしているか解明しようと、トップダウンでコードのヒントを見つけようとします。プログラムを読むのと並行して、自分ならその問題をどう解くかを考えます。

トップダウンに理解するようです。自分ならどう書くかという視点でコードリーディングするのは新鮮な意見です(自分でも無意識にやっていたかもしれませんが)。

–リファクタリングについて聞かれたことはありますか?
いいえ。何ですかそれ?
–あなたが今ちょうど説明したことです。

バーニー・コーセル氏ほど大物になると、「リファクタリング」という用語を知らなくても堂々としたものです。

彼(注:ケン・トンプソン)と剣を交わすのは気が進みませんが、私のコンピュータセキュリティの授業では、現代のコンピュータで起きた最大のセキュリティ問題はCだと教えています。

仕方ありません。

Javaは正しくない感じがします。私の古い反射神経がそう言っています。Javaは権威主義的すぎます。これはPerlが良いと感じられる理由の1つです。(略)私が最初にJavaをいじったとき、まだ小さな言語だったときのことですが、「ああ、これはまた例によって、あんまりできのよくないプログラマを助けようと、できることを制限してまっすぐな細い道を歩かせる言語だな」と思いました。しかし私たちはそういうのが正しい地点に来ているのかもしれません。

Java批判です。一方で、必要悪として認める冷静さもあります。

ドナルド・クヌース

TEXを開発している間に膨大なことを学びました。学んだことの1つは、ソフトウェアが脳のどれほど大きな部分を占めるかということです。(略)ソフトウェアが私の頭の大部分を満たしてしまい、ほかのことが追い出されることになりました。

指摘したのが誰だったのか確信がありませんが(略)「スーパープログラマとして生まれついた人間は世界の人口の2パーセント足らずであり、スーパーライターとして生まれついた人間は世界の人口の2パーセント足らずだ。クヌースはみんなにその両方であることを求めている」

–不変条件や様々なアサーションに関して、ダイクストラのような人たちは、プログラムのステップごとに非常にフォーマルなアサーションをつけ、プログラムの正しさを証明できるようにすべきだと言っています。(略)フォーマルにプログラムの正しさを証明すべきだという考えに対してはどのように思いますか?
1つには何かを証明するということの不可能性があります。(略)正しいと信じる理由が増えはするかもしれませんが、決してループから出られはせず、それは理論的に不可能なのです。


関連文書:

  • 関連文書は見つからんがな

Posted by & filed under , 開発.


Coders at Work プログラミングの技をめぐる探求を読みました。文字が小さめでかつびっしりと文字ばかりの本なので、ページ数の割に読むのに時間がかかりました(ページ数の割にと言っても、600ページ弱なので薄い本ではありませんが)。

これは良い本です。名文ぞろいです。

心に残ったひとことの引用と、それに対する個人的な感想を書きます。引用は手動で書き写しているので書き間違いがあるかもしれません。何か変だったら前後から類推するか本を当たってください。

長いので何回かに分割します。

ジェイミー・ザウィンスキー

C++には嫌悪しか感じません。あらゆることがあらゆる仕方で間違っています。だからNetscapeでは可能な限りC++を避け、何でもCでやっていました。

XEmacsやMozilla(辞めた件)で有名なjwzの言葉です。本を読む前からjwzのC++嫌いは知っていましたが、相変わらずの過激な物言いが笑えるので引用します。

ちなみに本書にでてくる人たちのほとんどがC++をけなします。ストラウストラップ氏にもインタビューしないと不公平な気がするぐらいC++ダメのオンパレードです。

–過剰なエンジニアリングというのには我慢ならないようですね。
ええ。最後にはプログラムをリリースしろって言うんです! コードなら後で書き直してきれいにすりゃいいんです。3度目にはすっかりきれいになっているだろうから。

この本でインタビューされる人は基本的に現場主義で実践派です(偶然ではなく、そういう人を選んでインタビューした本なので)。

現場主義にも幅があります。ソフトウェア開発には動くコード以外にも重要な要素があると言うエンジニアリングな立場(たとえばコードの保守性やドキュメンテーションなど)の人もいれば、コード至上主義に近い立場の人もいます。jwzはコード至上主義のもっとも極にいる人です。

ある意味では潔いですが、残念ながらすべての人に当てはまるとは思えません。個人的な見解では、普通の人はjwzを真似しないほうがいいと思います。

–あなたの場合、コードをトップダウンに構成しますか、それともボトムアップに構成しますか?
私はふつう、葉のノードをファイルの上のほうに置きます。基本的にそのように構造化しようと努めます。そして一番上でAPIについての説明を書きます。

回答が少しわかりづらいですが、基本的にはボトムアップに書くようです。コードをどう書くかやどう読むかの質問は、他の人のインタビューでも繰り返されます。興味深い回答がそれぞれの人から返ってくるのでとてもおもしろく感じます。

同時期に書かれた本でみんなが最高だと言っていた本に「デザインパターン」があります。私はくだらないと思いましたけど。あれはいわばカッとアンドペーストによるプログラミングです。自分のタスクについてじっくり考えるのではなく、レシピ集を眺めて、何かそれっぽいものを見つけ、単に猿まねするんです。そんなのプログラミングじゃありません。塗り絵ですよ。

「デザインパターン」に関しては、本書でインタビューされる人の中でも、くだらないと切り捨てる人(jwzは代表)と高い評価を与える人と中庸な人(共通理解のためのツールとして評価)に3分されます。

–プログラマが持つべき鍵となるスキルは何でしょうか?
好奇心です。分解するということ。中では何が起こっているのか知りたいと思うこと。それがプログラミングの本当の基本だと思います。

個人的には共感する部分です。一方、必ずしもこのタイプでない優秀な開発者もいる気がします。

ブラッド・フィッツパトリック

–ソフトウェアはどのように設計しているんですか?
僕はものの間のインターフェースから取りかかります。共通のメソッドは何か、共通のRPCは何か、共通のクエリーは何かと考えます。(途中略)それからそれぞれの部分のモックを作り、だんだんと中身を埋めていきます。

オーソドックスなプログラミングスタイルです。比較的抽象度の高い大規模開発に適応した姿勢がうかがえます。

–プログラマにとって最も重要なスキルは何でしょうか?
科学者のように考えること。一度に1つのことだけ変え、我慢強く根本原因を理解しようと努めることです。

この回答も、マシン寄りというより、少しレイヤの高いシステム寄りの印象を感じます。

ダグラス・クロックフォード

–見た目はぐちゃぐちゃだけど、きれいにしてみたら下に良いコードが埋もれているのを見つけたというようなことはありますか?
そういうのは見たことがありません。良いコードをルーズなやり方で書くというのはすごく難しいのだと思います。良いコードというのは、読めるコードということです。

同じ現場主義でもjwzとは少しベクトルの違いを感じます。個人的には、ダグラス・クロックフォード氏に共感します。

私に言わせるなら、自ら職業プログラマを名乗る者は、クヌースの本を読んでいるか、せめて本棚に置くくらいのことはすべきです。

…だそうです。

–ソフトウェアを設計するとき、トップダウンとボトムアップとその中間とで、どれがお好みですか?
全部です。これは頭の中にシステムを入れておくということです。最終的には分割統治して手に負えるものにする必要があります。私は問題のあらゆる部分を一緒に考え、これらのテクニックを同時に使います。

たぶんこれがプログラミングの真実の姿です。一方、プログラマ初心者にとってみれば答えがこれだと答えをごまかされたように感じる部分かもしれません。

–形式的証明に関心を持ったことはありますか?
70年代を通して注意して見ていました。それが果たして何ものかになるのかどうか。そして割に合わないと分かりました。ソフトウェアはあまりに複雑で、失敗し得る方法があまりにたくさんあります。

ダグラス・クロックフォード氏の言葉には重みがあります。

ブレンダン・アイク

もっと衒学的な反対派もいます。「プリミティブを最小限にしてシュガーを取り除くべきだ。ラムダさえあれば何だってできる。人々はそういう書き方を学ぶべきなのだ。それが私の考え方なのだから」とか「それが最良の考え方なのだから」と主張しています。非常に還元主義的で、多くの人には合いません。すべて切り詰め、言語をサブセット化するというのは、思考上の証明システムを作る1つの方法です。サブセット化は強力です。しかしみんなそのような極小のサブセットでプログラムを書くべきだと言っても、そんなのは使い物になりません。

JavaScriptの父がLisp派を切り捨てた印象深いひと言です。

もう1つ影響を受けたものとして、これは少し恥ずかしいのです、awkがあります。(略)ファーストクラス関数をどう名づけることもできたのですが、それを”function”としたのは主にawkのためでした。

多くの人が長いと文句を言うJavaScriptのfunctionですが、awk由来とのことです。だったら仕方ありません。我慢しましょう。

Javaのような労働者階級の言語はいかれたジェネリックシステムなど持つべきではありません。労働者たちは共変、半変のような型制約の構文がいったい何を意味するのか理解できないでしょう。(略)JavaScriptをラムダの機械語みたいに使おうとする荒々しく毛深いフランス人のスーパーハッカーたちから守らなければなりません。

Javaプログラマをバカにして切り捨てた後、返す刀でLisp派も切り捨てます。

インタビューを読むと、ラムダラムダと言ってJavaScriptを難しい言語にしようと考える人たちにうんざりしている様子がうかがえます。ブレンダン・アイク氏は、正しく美しい言語にするよりも、現実に普通の人に受け入れられることに重きを置いているようです。

デバッグの技術の研究というのはがっかりするぐらい進んでいません。これも業界と学界の間に大きなギャップのある例です。学界の人たちは証明を手でやっていたりしますが、(略)現実の世界ではみんなデバッガに頼っており、使っているのはGDBのような70年代からの遺物なのです。

御意。GDBが遺物扱いされました。

–プログラムの設計はどのようにやっていますか?
プロトタイピングをたくさんやります。以前は高レベルの擬似コードを使い、ボトムアップで作っていました。(略)ほとんどの場合ボトムアップでやります。(略)ボトムアップとトップダウンで進めて真ん中で行き会うようにします。

トップダウンとボトムアップの両方、という典型的な回答です。個人的にも、こうとしか言いようがない気がしています。

私は象牙の塔の設計とデザインパターンにはアレルギーを持っています。ピーター・ノーヴィグはHarlequin社にいたとき、デザインパターンは実際のところプログラミング言語の欠陥を示すものであり、もっと良い言語を求めるべきだという論文を書きました。彼はまったく正しいと思います。パターンを聖典のようにありがたがり、ことあるごとに「そうだ、Xパターンを使おう」などと考えるのはどうかと思います。

jwzに続いてのデザインパターン切り捨て派です。デザインパターンが言語の欠陥を示している話は、かつてJavaOneで聞いてなるほどと思いましたが、原典があったようです。まだまだ業界で知らないことがたくさんあります。

–大きなコードの塊を読むときは、どのように取り組みますか?
以前はトップダウンでやっていました。ある程度大きくなると、関数ポインタなんかが出てきて制御の流れが分かりにくくなります。デバッガを使って追いかけたりいじり回すこともあります。それからボトムアップに識別できるパターンを探します。(略)しかし本当に理解するにはゲシュタルトなプロセスを経る必要があります。トップダウン、ボトムアップ、様々な異なる視点から見、デバッガでステップ実行し、…うんざりするぐらい手間がかかることもあります。

トップダウンとボトムアップの組み合わせという回答はお馴染みですが、ゲシュタルトなプロセスという表現はいいです。誰かに、どうやってコードを理解しますか、と聞かれたときには使おうと思います。

ジョシュア・ブロック

–プログラマすべてが読むべき本というのは何かあるでしょうか?
(略)「デザインパターン」はすべてのプログラマが読むべきだと思います。この本は共通のボキャブラリを与えてくれます。良いアイディアがたくさん詰まっています。

ここまで本書で散々こけにされたデザインパターンですが、ついに支持派がでてきました。本書で最後の最後までこけにされ続けるC++とは違います。

(略)単に動くようにするのではいけないということです。読めて、保守できて、効率的な作品を作る必要があります。

御意。

ある程度複雑なプログラミングにはAPIデザインが必要になります。大きな問題はモジュール化する必要があり、モジュール間インターフェースの設計が必要になるからです。

御意。

私がマーチンと考えが違っている点は、テストはドキュメンテーションの代替とは到底なり得ないということです。ほかの人が実装できる何かを書こうと思うなら、正確な仕様が必要であり、テストはそのコードが仕様を満たすか確認するものであるべきです。

マーチンというのはマーチン・ファウラーのことです。ジョシュア・ブロック氏は一貫して手堅いエンジニアリング主義の代表です。

–自分が書いたのではない大きなプログラムをどのように読みますか?
(略)良く書かれたコードを読む場合には、1万フィート上空からの視点を得ようとします。通常誰かがどこかにシステム全体の形を記述してくれているものです。それが見つかれば、どれが重要なモジュールか分かるので、それを最初に読みます。そして時折下のレベルのモジュールへの潜っていき、理解を深めます。

基本的にはトップダウンから、ということでしょうか。

特にケビン・ブリリオンの言うところの「共感の遺伝子を欠いた」人がいます。そういう人は良いAPI設計者や言語設計者にはならないでしょう。そのAPIを使おうとする、あるいはその言語で何かをしようとする普通のプログラマの気持ちになって考えることができないとしたら、良い仕事はできないからです。

御意。個人的に、ジョシュア・ブロック氏の発言には共感できる部分が多くあります。自分はJava派なんでしょうか。

正しいプログラムを書くのがどれほど難しいかを考えれば、私たちには得られる限りのあらゆる助けが必要です。だからバグを取り除いてくれる可能性があるものは何であれありがたいのです。それが私の静的型付けや静的解析を支持する理由です。ある種のバグが起きる可能性をあらかじめ取りのけるものは、何であれとても良いものなんです。

まったくそのとおり。

–難解なコードを書くことについて言うと、そういう人は、ある特定の次元において頭が良すぎるためにまずいコードを書くことに気がつきました。彼らはそれを全部頭の中に入れておけるため、そういう膨大なスパゲッティコードを書くことができるわけです。
そういう人たちは、膨大な複雑さと折り合えるくらいに頭が良いと同時に、ほかの人たちがその餌食になることへの共感を欠いているということには私も同意します。

ジョシュア・ブロック氏はぶれません。

APIを設計するときには共感の遺伝子を持ち続け、しかしそれを極限まで速くしようとするときには、パズルの宮殿へと自由に降りて行ってかまわないのです。

パズルの宮殿と言っているのは、マシン寄りのコードだったり、ハッカー気質の凝ったコードの世界を指した言葉です。ジョシュア・ブロック氏は一貫して手堅いエンジニアリングを支持していますが、ハッカー気質を否定しているわけではありません。ハッカー気質とエンジニアリング視点の明確な使い分けを主張しています。


関連文書:

  • 関連文書は見つからんがな

Posted by & filed under いろいろ, 開発.


苦悩からユーザビリティテストに希望を託すまでの道のり

井上誠一郎

アリエルネットワークCTO

自己紹介の代わりに著書紹介

  • 「P2P教科書」
  • 「パーフェクトJava」
  • 「実践JS サーバサイドJavaScript入門」
  • 「パーフェクトJavaScript」

目次

  • ユーザビリティ改善の苦悩の歴史
  • ユーザビリティテストの教養
  • ユーザビリティテストの実践

ユーザビリティ改善の苦悩の歴史

  1. プログラマを信じた時代
  2. アジャイル開発を信じた時代
  3. 救世主の到来を信じた時代
  4. ユーザビリティテストを信じる時代(< --今ここ)

プログラマを信じた時代

  • アリエルはプログラマだけで創業
  • とりあえずコード書いた
  • ソフトウェア動いた
  • 自分たちで使った(ドッグフード)
  • 使いにくいと感じたら、自分を信じて直した
  • なぜなら、自分たちが製品を一番よくわかっているから
  • (と信じていたから)

プログラマを信じた時代(結果)

  • ユーザから「使いにくい」「難しい」と言われた
  • 散々言われた

アジャイル開発を信じた時代

  • ユーザから、使いにくい部分、難しいと感じる部分を個別具体的に指摘してもらい
  • (ある程度)そしゃくした上で改善を続けた
  • 小さな改善を継続すれば、(部分最適化のリスクはあっても)今より悪くはならないと信じて直した

アジャイル開発を信じた時代(結果)

  • むしろ悪化?
  • 色々なユーザの意見を聞きすぎて機能過多?
  • (工数の都合で)古い操作方法が残ったりして、全体として一貫性がなくなった?
  • だんだん、個別意見が信じられなくなってきた
  • そのユーザ、本当に普通のユーザを代表してるの?

救世主の到来を信じた時代

  • 世の中にはUXデザイナという救世主がいるらしい
  • 採用に向けて、募集して面接した

救世主の到来を信じた時代(結果)

  • Webサイトのデザイナは大勢いても、WebアプリのUXデザイナは希少すぎて見つからない
  • いたとしても、その才能を見極める目がこちらにない

ユーザビリティテストを信じる時代

  • 救世主の到来は待ちつつも、今、できることをやりたい
  • 現実解としてのユーザビリティテスト

ユーザビリティテストの教養

ISO/IEC 9241-11

  • ISO/IEC 9241-11 (1998) Ergonomic requirements for office work with visual display terminals (VDTs) – Part 11 : Guidance on usability
  • 古典
  • エルゴノミクス: 「人間工学」と訳される
  • 位置づけの参考: http://www.usabilitynet.org/tools/r_international.htm
  • ISO/IEC 9241-11から学べること: 「ユーザビリティ」の用語を(とりあえず)定義した(CIFに合わせて後ページで解説)

CIF: Common Industry Format

  • ISO/IEC 25062:2006 Software engineering – Software product Quality Requirements and Evaluation (SQuaRE) – Common Industry Format (CIF) for usability test reports

CIFの主なレポート項目

  • 製品概要とテスト目的
  • 被験者の一覧(性別、年齢、etc)
  • テスト環境
  • テストシナリオ
  • 結果
  • 分析

ISO/IEC 9241-11とCIF

ISO 9241-11のユーザビリティの定義:

  • Effectiveness + Efficiency + Satisfaction

CIFの評価方法例:

  • Effectiveness: タスクの成功率、エラー率、ヘルプやドキュメントの参照率
  • Efficiency: タスク完了までの時間
  • Satisfaction: アンケート

アンケート手法(参考)

リッカート尺度(Likert scale):提示された文に回答者がどの程度合意できるかを回答する

  1. 全く同意できない
  2. 同意できない
  3. どちらともいえない
  4. 同意できる
  5. 非常に同意できる

SD法(semantic differential scale):相対する意味の言葉を用意し、その間を何段階かに分けて回答する

ISO 13407

  • ISO 13407:1999 Human-centred design processes for interactive systems ISO/TR 16982:2002 Usability methods supporting human-centred design

ユーザビリティ評価手法

  • 思考発話プロトコル法
  • 共同作業による問題発見
  • 質問プロトコル
  • ロギングツール
  • 作業状況の自己申告
  • 写真による記録
  • NEM(Novice Expert ratio Method):設計者の操作時間を 1 とした場合に一般のユーザーの操作時間がその何倍になるかの比)
  • SUMI:Software Usability Measurement Inventor

ユーザビリティテストの実践

  1. とりあえずやってみた
  2. 課題と改善
  3. 残る課題

とりあえずやってみた

参加者:

  • モデレータ(ひとり)
  • 被験者(ひとり)
  • 観測者(複数)

手法:

  • 思考発話プロトコル法:ソフトをさわりながら被験者に何でも思ったことを口に出してもらう
  • 観測者は絶対に話してはいけない

とりあえずやってみて感じた課題

  • 被験者の緊張感をどうほぐすか
  • 人間の観測問題
  • 観測者のメモが間に合わない

改善

  • モデレータを女性にする
  • 「テスト」の用語を使わない
  • 撮影する(スマートフォン操作の撮影は大変ですが)
  • 最初に被験者に声出しの練習をさせる
  • 最初に被験者に自由にさわらせる時間を作る
  • インタビュースクリプトを事前に作成する(汎用的に作ったので改変自由で公開予定)
  • シナリオライターとモデレータを別の人にする(客観的にするため)

手順

  • step1.被験者に意図を伝える
  • step2.どんなアプリかを伝える
  • step3.ソフトをさわりながら声を出す練習をしてもらう
  • step4.個別指示を出してソフトを操作してもらう
  • step5.感想や意見の聴取(観測者も含めたフリーディスカッション)

残る課題

  • 人間の観測問題との闘い(たぶん解決不能。cf. ホーソン効果)
  • ソフトウェアを改善した後、同じ人で試すべき?

最後に

某CTOいわく「CTOの主責務は、仕事を作って誰かに引き渡すこと」

  • 継続してくれる人募集
  • (次回以降のありえるえりあ勉強会、UXに興味があるとコメントして参加してください)

関連文書:

  • 関連文書は見つからんがな

Posted by & filed under 開発.


先週の金曜日、弊社セミナールームにて、第二回目のありえるえりあミニ勉強会を開催しました。今回のテーマは、Sencha Touch アプリの見た目をカスタマイズする方法です。Sencha Touch で作ったアプリは、デフォルトのままでも十分綺麗ですが、アプリの個性を伝えるためにも、見た目はこだわりたい部分ですよね。

前回同様、今回も勉強会の内容を振り返りつつ、補足記事を書かせて頂きたいと思います。

勉強会で利用したスライド:
http://kawanoshinobu.github.com/arielarea-2

当日の Ustream 中継:
http://www.ustream.tv/recorded/22836796

Native vs Web

Sencha Touch の勉強会に参加するのは今回が初めてという方も多数いらっしゃったので、いきなり具体的な解説を始める前に、少し抽象的なところからお話を始めさせて頂きました。「Native vs Web」ということで、ネイティブアプリ(端末にインストールする形式のアプリ)に比べて、WEB アプリが優れている点・劣っている点、またその短所をカバーする手段として、Sencha Touch が頼りになることを紹介しました。

Sencha Touch のサンプルとしてご紹介した Watch List はなかなかインパクトがあったようです。Watch List は Sencha.Inc が開発したデモアプリで、バックエンドのコード(アプリ層に Node.js、ストレージに MongoDB、デプロイ先に Heroku を利用)も含めて、ソースコードが公開されています。
https://github.com/senchalearn/Watchlist

Powerd by Sass / Compass

Sencha Touch アプリといっても、実体は普通の WEB ページなので、CSS や HTML の Style 属性を使って見た目を変更できます。

コンポーネントの見た目を変更する一番手軽な手段は、コンフィグオブジェクトに見た目に関わるプロパティを指定する方法です。Style プロパティにスタイルシートのコードを記述することで、生成される HTML の Style 属性にその内容を反映させることができます。もしくは、各種プロパティ(width、height、margin、border、etc..)を利用しても同様のことが実現できます。その他、cls プロパティに CSS のクラス名を指定して、生成される HTML にクラス属性を埋め込み、CSS を使って見た目を変更する、ということも可能です。

このようにコンフィグオブジェクトで直接見た目に関わる定義を行うのはお手軽で便利ではあるのですが、全体的な色合いを変更したい場合に指定箇所が多くなったり、コードが大きくなるとメンテナンスが大変になったりと、煩わしい部分もあります。そんなときに出番なのが、Sencha Touch のテーマシステムです。テーマシステムを利用することで、少ない記述で、見た目を大きくカスタマイズすることができます。

Sencha Touch のテーマシステムは、Sass / Compass をベースに作られているので、それぞれの概要について簡単に紹介させて頂きました。Sass / Compass を基盤にして、その上に Sencha Touch 独自の変数・ミックスイン、そしてアイコンのセットを加えたものが、Sencha Touch のテーマシステムになります。

Theming is wicked easy!

Sencha Touch のテーマシステムを開発した David Kaneda さんは、いかに簡単に見た目を変更できるか、を意識してシステムを作られたようです。一番分かりやすいところで言うと、$base-color という変数をひとつ指定するだけで、アプリ全体の見た目を大きく変更することができます。また、全てのコンポーネントのグラデーションスタイルを変更する $base-gradient も強力な変数です。

テーマシステムで利用可能な変数は、ドキュメントに記載されているので、そちらを参照下さい。
http://docs.sencha.com/touch/2-0/#!/api/Global_CSS

また、コンポーネント毎にカスタムテーマを作ることができます。カスタムテーマはミックスインを利用して作成します。作成したカスタムテーマは、コンポーネントのコンフィグオブジェクトの ui プロパティにテーマ名を指定して利用します。一例として、sencha-toolbar-ui というミックスインを利用することで、ツールバーコンポーネントで利用可能なテーマが作成できることを紹介しました。

コンポーネント独自テーマの作成方法は、各コンポーネントのドキュメントに記載があります。以下は sencha-toolbar-ui の説明ページのリンクです。
http://docs.sencha.com/touch/2-0/#!/api/Ext.Toolbar-css_mixin-sencha-toolbar-ui

Sencha Touch のアイコンは画像ファイルではなく、CSS に base64形式のデータを埋め込んで、表示時に復元する、という方式を取っています。そのため、アイコンは、pictos-iconmask というミックスインを利用して base64形式にエンコードして CSS に埋め込みます。アイコンを利用するためには、 コンフィグオブジェクトの iconCls プロパティに CSS に埋め込んだファイル名(拡張子 .png を除いたもの)を指定します。

CSS の最適化も簡単にできるようになっています。コンポーネント毎に必要な定義を分割してくれていますので、アプリケーション用の scss ファイルから、不要なコンポーネント用のミックスインをコメントアウトするだけで、CSS から不要な定義を取り除くことができます。その他、デフォルトの定義(いくつかのアイコンを予め含めている、など)を変更する変数が用意されているので、それらを利用して、さらにファイルサイズを小さくすることも可能です。

Sass / Compass の活用方法について

WEB ページ制作のお仕事をされている @kamem さんに、Sass / Compass についての、さらに詳しい解説を行って頂きました。

発表資料は以下になります。
http://develo.org/sass_compass

便利そうだとは思いつつ、私自身、Sass や Compass をうまく活用できていないので、いろんなことができることを知って楽しくなりました。@kamem さんはご自身のWEBサイトでも、とても分かりやすく Sass / Compass について紹介されているので、ぜひご覧下さい!
http://develo.org/2012/02/26/2335.html

Sass / Compass はやり過ぎず、適材適所で使うべき、といったお話をされていて、なるほどと思いました。

まとめ

その後、弊社CTOの井上から、スマートフォンのユーザビリティテストについてお話させて頂きました。非常に面白い内容だったのですが、私の不手際で、Ustream の中継に失敗していました。申し訳ありません。。内容については、また別途ありえるえりあに記事を書く予定になっています。

次回のありえるえりあミニ勉強会では、Sencha Touch のコンポーネントシステムについて、若干マニアックな内容を扱ってみようかと考えています。他に発表して下さる方も探していますので、なにかネタがある方は、@kawanoshinobu 宛にご連絡頂けると嬉しいです。

時期は来月を予定していましたが、アルエルの年度末の都合で、開催が少し延びるかもです。HTML5 のメーリングリストなどで、また別途告知したいと思います。


関連文書:

adwords

Posted by & filed under いろいろ.


誰の陰謀か知りませんが、ある日、会社のデスクの上にGoogle Adwordsの無料クーポンが置いてありました。せっかくなので使ってみました。

Googleでemacsを検索するとありえるえりあの広告がでます。証拠のスクリーンショットです。


関連文書:

  • 関連文書は見つからんがな

before-search-field

Posted by & filed under 開発.


先日、開発した Sencha Touch アプリのユーザビリティテストを社内で行ったところ、多くの被験者が、検索機能を正しく使うことができませんでした。

確認したところ、iPhone で Sencha Touch の検索コンポーネントを利用する際、入力キーボードの右下が検索ボタンにならず、改行ボタンになっていることが原因の模様。

具体的には、以下のような状態です(※右下に注目)。

改行ボタンを押すと検索アクションが実行されるのですが、普通は気づかないですよね。。

検索コンポーネントの入力フィールドは、input タグで、HTML5 から新たに追加された type=”search” 属性を指定しています。この type 属性に応じて、キーボードのボタンを切り替えることができるのですが、実は、input タグは form タグで囲われている必要があるようです。ところが、Sencha Touch が生成する HTML は input タグ単体で form タグで囲われていませんでした。

操作を中断させてしまうクリティカルなバグなので対応が必要です。パッチのあて方はいろいろあるのですが、今回は Sencha Touch のプラグイン機能を利用しました。

Problem:

Solution:

Sencha Touch のプラグイン機能を利用してパッチをあてます。

// プラグインを定義します

Ext.define('Ext.plugin.IosKeybordSearch', {
  extend: 'Ext.Component',
  alias: 'plugin.ioskeybordsearch',
  init: function (search) {
    var component = search.getComponent()
      , tmpEl = component.element.dom
      , formEl = document.createElement('form');
    formEl.appendChild(tmpEl);
    formEl.action = 'javascript:void(0)';
    search.element.down('div[class=x-component-outer]').appendChild(formEl)
  }
});

// プラグインを利用します
// ファイルを動的ロードしている場合は、読み込むプラグインファイルの定義も追加します

Ext.define...
    ...
    requires: [
        ...
        'Ext.plugin.IosKeybordSearch'
    ],
    ...
 
  {
    xtype      : 'searchfield',
    placeHolder: 'Search',
    name       : 'searchfield',
    plugins: [
      {
        xclass: 'Ext.plugin.IosKeybordSearch'
      }
    ]
  },
  ...

無事に検索ボタンが出るようになりました(※右下に注目)。

Discussion:

プラグイン機能は、コンポーネントが生成された後、そのコンポーネントに対して、任意の加工を施す機能です。本来の用途としては、リストコンポーネントにページング機能を追加したり、再読み込み機能を追加したりと、標準では備わっていない機能を付与するのに使われます。

今回のプラグインは、生成されたコンポーネントの dom 要素に対して form タグでラップするもので、パッチが目的ですが、影響範囲を狭めつつ、ロジックの再利用が可能なので、なかなかおすすめです。

Sencha Touch にはフレームワークのロジックを上書きするための Override 機能があるのですが、これは影響範囲が大きいため、なかなか積極的に使う気分になれません。

また、特殊な処理を行うための親クラスを作って、それを各々のコンポーネントで継承する、という方法もあるのですが、メンテナンスのことを考えると、クラス階層はできるだけシンプルにしたい。フレームワークのバグ回避のためだけにクラスを作って継承させるのはナンセンスな気がしますし。

そんなときに、もしかすると使えるかもな Tips でした。

See Also:

最新の Sencha Touch(2.0.1 – 2012.4.23リリース)でも、まだこのバグは残っているので、必要な方向けにプラグインを公開します。
https://github.com/kawanoshinobu/Ext.plugin.IosKeybordSearch

このバグは、近々修正される予定です。
http://www.sencha.com/forum/showthread.php?151529-searchfield-not-showing-quot-Search-quot-button-on-iOS-keyboard.-Bug


関連文書:

Posted by & filed under いろいろ.


 先日開発した Jaxon (Java 版 OpenFlow コントローラ) ですが. 早くも, オワコンの様相がどうにも拭えません.
 
 これと言うのも Jaxon が依存している OpenFlow コントローラ NOX が, 新しいフレームワーク “POX” の開発に移行したことに起因します.
 
 NOX 公式サイトのトップに, 次の絶望的な文書が掲載されています (以下抜粋).

 もう POX に完全移行したと思ってまず間違いないでしょう.
 github のリポジトリを見ても, POX はむちゃくちゃホットであるのに対して. NOX はというと完全に放置されています.
 
 POX というのは, NOX チームが開発した Python ベースで OpenFlow コントローラを記述するフレームワークです. POX 自体も Python で書かれています.
 
 これまでも NOX では Python によるコントローラの記述が行えました (これには “NOX-Classic” と名付けられたようです).
 
 しかし NOX-Classic は, 本体が C/C++ なので, せっかく Python で書いたのに移植性が悪く, また設計上遅いという問題がありました.

 どいうことかというと, NOX-Classic の Python コンポーネントは, C++ でかかれた NOX 本体固有で, 且つ全ての Python コンポーネントに対して共通のコントローラから SWIG 経由で, ユーザ定義の Python コードを呼び出す設計になっています.
 
 これに対して POX は, それまで C/C++ で書かれていた OpenFlow コントローラ機能を Python で実装したことで, プラットフォーム間でのポータビリティの向上に加え, PyPy といった JIT による高速実行エンジンによって, 高速化が実現できたりしています.

 ただ Jaxon にしてみれば. せっかく試行錯誤の末 NOX 本体のコードには一切手を触れずに, NOX-Java 連携を実現したというのに. こうもあっさり NOX コードを捨るとは…
 
 彼らの思い切りの良さと, 自分のあまりの先見の明のなさにショックを隠しきれません.
 失意のあまり, これを期に Java をやめたいくらいです.


関連文書:

Posted by & filed under 開発.


社内で新卒向けに講義をしました。社内固有の情報を削除した上で、下記に講義資料を公開します。

ソフトウェア開発における開発者の仕事を理解してもらうために話をしました。

講義対象者の半数以上が開発志望ではなかったので、開発者でない人が、今後、IT業界の中でどう開発者と向き合っていくかを主眼にして話しました。IT業界にいながら、開発者のことを理解できない人たち、あるいは何をしているのか分からない、と偏見を持つ人がいるからです。彼らにそうなって欲しくないからです。共感できるかは別です。考え方や価値観が違うなら違うでもいいと思います。はじめから理解を拒否していたら、いつまでもコミュニケーションが生まれません。

ついでに、半数以上が女性だったので、裏の意図として、プログラマがモテるようになって欲しいと思って話しました。プログラマがモテる世界にしたいと思っているからです。若い女性の前で話す機会を得られた今、プログラマの世界で育てられた自分にとって果たさなければいけない責務だと思っています。

==========================================================
新卒向けの講義:

ソフトウェア開発という仕事

* この講義の目的

– ソフトウェアの開発者の生態の理解

(原則)開発者志望ではない人を想定します

* 目次

– ソフトウェア開発にはどんな職種があるのか?(世間一般)
– 開発者は普段何をしているのか?
– ソフトウェア開発とは?

* ソフトウェア開発にはどんな職種があるのか?(世間一般)

** IPAのITスキル標準(ITSS)

– http://www.ipa.go.jp/jinzai/itss/index.html
– 職種名、必要スキル、業務内容を整理した一覧
– 職種と専門分野が横軸、スキルレベル(7段階)が縦軸
– 資格ではなく、スキルの指標

** ITSSの特徴

– 単線キャリアパス(PG=>SE=>PM)から、複線キャリアパス(下級PG=>上級PG、下級SE=>上級SE、下級PM=>上級PM)へ転換

** ITSSの職種

– マーケティング
– セールス
– コンサルタント
– ITアーキテクト
– プロジェクトマネジメント
– ITスペシャリスト
– アプリケーションスペシャリスト
– ソフトウェアデベロップメント
– カスタマサービス
– ITサービスマネジメント
– エデュケーション

詳細は
http://www.ipa.go.jp/jinzai/itss/download_V3_2011.html
「2部 キャリア編の補足A」を参照

** ITSSのスキルレベル

– レベル7: 世界で通用するプレーヤ
– レベル6: 国内のハイエンドプレーヤ
– レベル5: 企業内のハイエンドプレーヤ
– レベル4: 社内においてプロフェッショナルとして認められる
– レベル3: 要求された作業を全て独力で遂行
– レベル2: 上位者の指導の下に、要求された作業を担当
– レベル1: 最低限必要な基礎知識を有す

** スキルのジレンマ

– 固有の知識(特定の製品・サービスや特定のプログラミング言語)だけでは、いずれ古びるリスク
– 固有の知識を伴わない知識や技能だけでは単なる評論家

古びないように自分のスキルを常に見直す必要

** ITSSの使い方

– 「普通の人」は、ITSSの知識体系から自分に必要なスキルを具体化する
– 「普通でない人」は、自分のスキルを抽象化して、ITSSの知識体系のどこに位置するか知る

– 職種の分類にこだわる必要はない

* 開発者は普段何をしているのか?

** 開発部内の主な職種

– プログラマ: ソフトウェアを書く人
– テスト担当者: ソフトウェアの正しさを検証する人
– インフラ担当者: ソフトウェアが正しく動く環境を整備する人

** プログラマが普段していること

– コードを書く(新機能開発、バグ修正)
– コードを読む(壊れないようにするため)
– テストする
– 調べる(どうやって実現するか調べる)
– 考える(どうやって実現するか考える)
– 新機能を提案する
– 技術の先行調査(知識のストック)
– 情報伝達(成果を披露)
– 営業協力(実現可能性の相談)
– 製品サポート(トラブル対応)

** 製品開発の段階とプログラマの役割

1. 要求を聞き出す or 発見する
2. 何を作るか考える(いわゆる要件定義)
3. どう実現するか考える(いわゆる設計)
4. コードで実現する(いわゆる実装)
5. 要求を満たす品質にする

– アリエルの多くのプログラマ: 3と4を担当
– アリエルの一部のプログラマ: 2と3と4を担当
– アリエルの古老プログラマ: 1から4まで担当
– アリエルの伝説的プログラマ: 1から5まで担当

** テスト担当者が普段していること

– 製品のテストをする
– バグを報告する
– 機能提案をする
– 修正されたバグを検証する
– 製品の品質を見える化する(リリース判断の情報提供)
– テストを効率化する
– プログラマの情報を翻訳して情報伝達
– プログラマにプレッシャーをかける
– プログラマを励ます
– 製品サポート(トラブル対応)

** プログラマとテスト担当者のまじわり(新機能開発編)

1. プログラマが機能について課題管理システムにチケットを作成して仕様を記載
2. プログラマが自分の手元でコードを書く
3. プログラマが自分の手元で動作を確認する
4. プログラマがソースコード管理システム(SCM)にコードをコミットする
5. プログラマがチケットの仕様を最終確認してステータスをfixedにする
6. 自動で単体テストなどのチェックが走る
7. 毎日、自動でビルド(コードから完成物を生成)が走る
8. できたソフトウェアを動かす(一部のテスト環境は自動デプロイ、一部は手動デプロイ)
9. テスト担当者がソフトウェアが想定どおりに動くか確認(verify)
10. 想定どおりの動きをしない場合、チケットをreopenする
(reopenされたチケットはプログラマに戻る)
11. 動作およびチケットに記載された仕様に問題がなければチケットを閉じる

** プログラマとテスト担当者のまじわり(バグ修正編)

1. 毎日、自動でビルド(コードから完成物を生成)が走る
2. できたソフトウェアを動かす(一部のテスト環境は自動デプロイ、一部は手動デプロイ)
3. テスト担当者がテスト仕様書をもとに、ソフトウェアが想定どおりに動くか確認する(システムテスト)
4. 想定どおりの動きをしない場合、チケットを作成してバグ報告する
(作成されたチケットはプログラマに行く)
5. プログラマがチケットに記載されたバグを修正する
6. 以下、略

** インフラ担当者が普段していること

– パフォーマンス計測
– 営業協力(実現可能性の相談)
– 導入支援(キャパシティプラニング)
– 情報伝達(導入や運用のマニュアル化)
– 技術の先行調査(知識のストック)
– 製品サポート(トラブル対応)
– 管理コスト軽減の側面での機能提案

* ソフトウェア開発とは?

** 様々な見方

– 製造?
– 設計?
– サービス?

業界での完全なコンセンサスをまだ得ていない
ソフトウェア開発が未成熟な証

** 製造業アプローチ

建築や製造業のようにソフトウェアの故障率の予測可能を目指す考え方

– プロセスモデル(cf. CMMI)
– ウォーターフォール
– クリーンルーム手法
– ソフトウェアファクトリー
– ハッカー気質や職人の否定

周期的に盛り上がっては消えていくソフトウェア業界の青い鳥

** 設計業アプローチ

建築や製造業と比較した時、コードは設計図に当たるという考え方(故障率という発想そのものの否定)

– 設計図なので試行錯誤は必然と見なす
– 製造に相当する工程はコンパイルやビルド(自動化済み)
– プロセスよりツールや技法(職人)を重視
– ハッカー気質の肯定

現実にもっとも適合したアプローチ。あるがままを受け入れる禅の世界

** サービス業アプローチ

ソフトウェア故障率の予測ではなく、使う人の満足度の向上の予測可能を目指す考え方

– プロセスより顧客との対話を重視
– アジャイル(cf. スクラム、XP)

コミュニケーションや顧客満足度を出されると誰も反論できない最強兵器
(熟考の末ここにたどりつく玄人と、歴史を知らず雰囲気だけでここに飛びつく素人が共存する世界)

** 開発プロセスと用語

– 要求(wish or desire)とは?
利用者の願い
(本当の要求は言語化されるとは限らない。マーケティングの領域に近い)
– 要件(requirement)とは?
技術的な裏付け(実現可能性:feasibility)をもとに要求を定義したもの(広義)
かつ関係者で合意したもの(狭義)
– 仕様(specification/spec.)とは?
ソフトウェア動作を記述したもの
完全な仕様はコード以外に存在しえないジレンマ
– コード(code)とは?
ソフトウェアの記述そのもの
– 設計(design)とは?
広義には、仕様作成からコード記述まですべての行為を指す用語
狭義には人それぞれ(仕様書とコードの中間生成物の設計書を書く行為など)
語源に忠実になれば、概念を記述(コトバ、コード、図など)して伝達すること
– 実装(implementation)とは?
一般にコードを書く行為のこと
– ビルド(build)とは?
コードから動くプログラムを生成する工程(一般に自動化される)
==========================================================


関連文書:

  • 関連文書は見つからんがな

Posted by & filed under いろいろ.


 先日, とある飲み屋で「OpenFlow って何?」と聞かれた際に, 『SDN を実現する一手法』とか『スイッチをプログラマブルに制御する手法』といった辞書的な説明しかその場でできなかった時, 自分の未熟さを痛感しました.
 
 その分野に精通するという事は, 相手に平易な言葉で容易に理解させる事も含んでいると思うので, この場で先日の屈辱を晴らしたいと思います.
 
 『OpenFlow の本質とは?』
 
 NEC の OpenFlow 事業の大物. 岩田氏曰く OpenFlowの本質は「プログラマブルであること」 だそうです.
 ここでの話は, OpenFlow での L2 から L4 までのプログラマブル制御により, ヘテロジニアスなネットワークを柔軟かつフレキシブルに設計できるという内容です.
 OpenFlow の出発点となった, ネットワーク系のトップカンファレンスの ACM SIGCOMM で発表された論文 においても, オープンプラットフォームにおけるプログラマブルなネットワーク制御という内容が強調されています.
 
 『仕組みや動作はわかったから. じゃあ OpenFlow で一体なにが (実現) できるの?』『既存ネットワークとの決定的な違いは何なの?』という単純な問いに, 長らく簡潔な答えを見出せずにいました.
 
 ”ネットワークをプログラマブル制御できる” という命題において「何ができるのか?」という問いは, 「C で何が作れるの?」という問いにほぼ置き換えて考えられるので, 明確な答えを出すのは難しいですが.
 プログラミングという手段で, ネットワーク制御の目的のいくつかに的を絞って考えると, 答えは出そうです.
 
 改めて「OpenFlow とは何か?」

 僕が考える『ネットワークが OpenFlow である必然性』は次の3つです.
 
 (1) 仮想ネットワークの構築
 (2) トラフィックの分散
 (3) ネットワークの集中管理
 
 まず, 仮想ネットワークについて.
 OpenFlow では, ネットワークに接続する全ての端末をフラットな L2 のセグメントにぶら下がっているものとして扱えます.
 またルーティングテーブルにしろ NetFilter にしろ, プロトコルスタックを意識した構造になっていますが. OpenFlow は L2 から L4 までのヘッダ情報を同時に扱えるので, 任意の L3, L4 の仮想論理ネットワークを仮想的に構築でき, そしてこれらをプログラマブルに制御できます.
 
 またトラフィックの分散と, 集中制御を同時に実現できるのが OpenFlow です.
 「”分散” と “集中” を同時にって何言うとるんや?」と思われるかもしれませんが. OpenFlow ではデータが流れる経路 (Data Plane) と, OpenFlow スイッチを制御するための経路 (Control Plane) が仕様上完全に分離されているので, 集中制御をしつつトラフィックの分散が実現できます.
 
 ここで本題の OpenFlow v1.1 について.
 さて書こうか…と思ったら, 既に内容的に優れている上に日本語で書かれているドキュメントがありました.
 
 OpenFlow ver1.1およびver1.2の追加機能と活用例
 
 これに補足する形で書くと.
 OpenFlow v1.1 において取り立てて注目すべき, 特にすさまじい (と個人的に思える) 機能が “グループ” です.
 
 リンク先のページでも書かれているように OpenFlow v1.1 から登場したグループの機能において (スイッチでリンクの死活管理機能がスイッチによってサポートされている場合に限られますが) ネットワーク障害を想定したフロールールの記述も可能になり, コントローラ側でリンクや機器の死活管理処理を記述しなくても, 障害が発生したケースだけを想定すればいいので, より簡単に堅牢なネットワークの設計ができます.
 
 また同じくグループの select タイプの処理によって, v1.0 ではコントローラにパケットを運ばないと実現できなかったロードバランサのような機能も, スイッチ側だけで実現できるようになっています.
 
 さらに同じメカニズムで, 物理的に並列に這わせたリンクを仮想的に一つのパスとして扱い, 回線能力以上のスループットと冗長性を上げる link aggregation (UNIX では bonding と呼ばれている) 処理を実現できます.
 
 OpenFlow v1.1 によって, 制御の自由度や柔軟性はグッと上がりました. また, これまでコントローラ側で行わなければできなかった事も, スイッチに適切なフローを定義してやればスイッチ単体で実現できてしまうので, パフォーマンスも格段に上がることが期待できます.
 
 ただこれを実現できるまともな環境が無いのが, 現時点での悲しいところです. もちろん全く環境がないわけではありません. Stanford Reference Switch として知られる OpenFlow スイッチのソフトウェア実装では, 早くから OpenFlow v1.1 に対応されているので実験的な事はこれを使ってできるのですが. これ自体がユーザランドのプログラムなので, スイッチがボトルネックになる懸念があります.
 また, NOX にしろ Floodlight にしろ Trema にしろ 現時点での最新版において各コントローラが OpenFlow v1.1 に対応してないので, そもそも v1.1 機能は使えません.
 先日 GNU/Linux のメインラインにマージされた頼みの OpenVSwitch の最新版 (v1.4.1) もまだ OpenFlow v1.0 ベースです.
 しかし 前回 紹介したように, OpenFlow 1.1 及び 1.2 対応は OVS コミュニティにおいて進められているようなので, スイッチ/コントローラ双方における OpenFlow v1.1 完全サポート版の登場が待ち遠しいです.


関連文書:

Posted by & filed under 開発.


先週4/25、弊社セミナールームにて、第一回目のありえるえりあミニ勉強会を開催しました。悪天候の中、ご参加下さった皆様どうもありがとうございました。勉強会では伝え切れなかった部分もあるので、内容を振り返りつつ、補足記事を書かせて頂こうかと思います。

勉強会で利用したスライド:
http://kawanoshinobu.github.com/arielarea-1

当日の Ustream 中継:
http://www.ustream.tv/recorded/22110265

Sencha Touch ひとめぐり

Sencha Touch の概要について、簡単にお話しました。Sencha Touch はスマートフォン・タブレットのネイティブアプリライクな WEB アプリが作れる JavaScript のフレームワークで、今年の3月に 2.0 にメジャーバージョンアップしました。対応しているデバイスは、iPhone、iPad、Android、BlackBerry、Kindle Fire。商用利用も「無料」で可能です。

他のモバイル WEB アプリ用の JavaScript ライブラリと比較してパフォーマンスがよく、機能が豊富にあること、HTML ではなく JavaScript を使って UI を構築していくことが特徴です。Sencha は、元々は ExtJS という JavaScript フレームワークを開発していたベンダーで、モバイル WEB アプリ分野への事業拡大をきっかけに社名を Sencha に変更しました。

開発準備

Sencha Touch 2.0」「Sencha SDK Tools」「Web サーバー」「ブラウザ(Chrome か Safari)」を準備します。

上記のリンクからダウンロードする Sencha Touch のソースコードが含まれたファイル一式も SDK と呼ぶので混乱を招いてしまったようです、、すみません。Sencha SDK Tools は開発を便利にするコマンドラインツールで、インストールは必須ではありません。ただ、プロジェクトの Scaffold やビルドタスクなど便利な機能があるので利用をおすすめします。

開発デモ

Instagram の API を利用した写真ビューアを作るデモを行いました。上述の Sencha SDK Tools の Scaffold 機能を使ってプロジェクトの雛形を作成し、Sencha Touch ドキュメントを参考に開発を進めます。デモでは、結局完成まで至りませんでしたが、完成形はこちら。デモアプリのソースコードは以下に置いてあります。
https://github.com/kawanoshinobu/tiny-instagram-viewer

実は、今回やった内容のネタ元は、Sencha Touch のドキュメントに掲載されている Getting Started with Sencha Touch 2 になります。実際に開発される際は、以下の動画を参考にして頂ければよいかと思います。。
http://docs.sencha.com/touch/2-0/#!/guide/getting_started

iPad 用 Webアプリ Inkpod Web の紹介

@dsuket さんに Sencha Touch を使って複雑なアプリケーションを開発した経験から、苦労話や Sencha Touch の魅力などについて語って頂きました。

開発された Inkpod Web の完成度は必見です。こちらのデモ画面をご覧下さい!
# iPad での利用を想定したものですが、PC でも Chrome や Safari から動作を確認できました。

発表内容も大変面白く、フレームワークのコアな挙動の説明なども織り交ぜつつお話されていて、とても勉強になりました。

まとめ

勉強会自体は実施の面でいろいろ反省材料の多いものでした。。次回以降、改善に努めたいと思います。個人的には、Sencha Touch を使って開発しているエンジニアの方々と交流できたことが大変楽しかったです。Sencha Touch は海外では結構使われているのに国内での利用事例が少ない、Sencha Touch の競合は、jQuery Mobile ではなくて Titanium Mobile では?など、なるほど!、と思う意見をたくさんお聴きすることができました。

勉強会の後、参加者の方から要望があったので、Facebook で Sencha Touch 開発者のページを作ってみました。
http://www.facebook.com/senchatouch
# URL が公式っぽい感じですが、あくまで非公式なページです。Sencha Touch 好きの方はぜひ「いいね」して下さい :)

さて、そんなありえるえりミニ勉強会ですが、早速第二回を5月に開催します。おかげさまで募集を始めてあっという間に定員に達してしまいましたが、前回は当日までに 24 名のキャンセルがあったので、いま申し込めば、繰り上がる可能性は大きいと思います。WEB 開発のスキルだけで、かっこいいモバイルアプリを開発できる Sencha Touch、この機会にぜひ始めてみてはいかがでしょうか〜?


関連文書: