2007年2月27日火曜日

まずは自作Spreadsheetからのデータ取得

Google Spreadsheets Data API Developer's Guideを参考に、自分のSpreadsheetからのデータ取得を目指す。

■Spreadsheetの作成
Create a spreadsheetに従って、まずはTaskListというSpreadsheetを作成。
カラム名は、とりあえず以下のようにした。

  • priority
  • title
  • status
  • startDate
  • limitDate
  • finishDate
  • note
  • tag
ところが、publishされていないSpreadsheetにアクセスするにはauthentication tokenとやらが必要らしい。正直、タスクリストはできればPublishしたくない。ので、Get an authentication tokenの項を読んで、認証方法を探してみる。
どうやらClientLoginとAuthSubという二つの認証方式が用意されている模様。詳細はGoogle Account Authenticationを見ろとのことで、結構面倒くさい。

・ClientLogin
 HTTPのPostリクエストで、EMailアドレス(アカウント名)・パスワード・アクセス先サービス名・アプリケーションの識別文字列などなどを送信し、レスポンスとして認証トークンを受け取るという方式。いったん認証トークンを受け取れば、以降はリクエストにこのトークンを付加することでGoogleサービスのデータを取得できるということらしい。
 Webアプリケーションでこの認証方式を利用する場合、Post先はGoogleドメインのサーバーなので、Googleサーバーにホストしない限りはクロスドメインのアクセスとなる。よって、XMLHttpRequestによるバックグラウンドのログインとかはできない。
 なので(だけかは知らないが)、基本的にこの方式はローカルコンピュータにインストールするようなクライアントアプリケーション向けとされている。

・AuthSub
 リクエストパラメータとしてリダイレクト先のURL(=自分のアプリのURL)を付与した上で、Googleの認証用ページにユーザーを飛ばし、ユーザーデータに対するアプリアクセスをユーザー自身に承認させるという方式。ユーザーが了解したら、付与されたリダイレクト先URLにtoken付きで飛ばす。仕組み上、サーバーサイドで動作するロジックがないとtokenを取得できないのでHTML+JavaScriptじゃ難しそうだ。主に、サーバーサイドの動作環境を持つWebアプリケーション向け。

 認証方式を色々試していて気づいたが、BloggerやGoogle Docs & Spreadsheetsで作業しつつブラウザのアドレスバーにフィードURIを打ち込んむと、Publishしていないデータに対してもアクセスできる。GoogleAccountにログインしていれば大丈夫ってことだろうか。

http://spreadsheets.google.com/feeds/list/key/worksheetId/private/full

これにアクセスできるかどうか、条件を変えて試してみたところ…
-Google Personalized Homeにログイン済み&Google Docs & Spreadsheetsには未ログイン
→ トークンがない、みたいな感じの認証エラーが出た
-Google Personalized Homeにログイン済み&Google Docs & Spreadsheetsにログイン済み
→ フィード取得成功
-いったんブラウザを終了し、再度アクセス
→ フィード取得成功
→ この状態でGoogle Docs & Spreadsheetsにアクセスすると、ログイン画面が出ずにいきなり文書一覧画面に。

 どうやら、Google Accountのログイン状態というのはサービスごとに保存されているみたいで、privateフィードが取得できるかどうかは、Google Docs & Spreadsheetsにログイン済みであるかどうかで決まる模様。おそらく、Google Docs & Spreadsheetsのログイン画面で「ログイン状態を保存」すると、認証トークンがCookieに保存されるのだと思われる。

■privateとpublicの違い
 どうも認証ロジックを組み込むのは面倒なので、別にタスクリストくらい見られてもいいからSpreadsheetはpublicにしてしまえばいい、と思っていた。が、publicにすると読み取り操作しかできなくなるらしい。ドキュメントには詳しく書いていなかったので、ざっと試したところ、こんな感じだった。

・public
-読み取り専用
-JSONによる取得可能

・private
-CRUD可能
-JSONによる取得不可能

 privateな(Publishしていない)Spreadsheetはpublicとしてアクセスできないのは言うまでもないが、publicな(Publishした)Spreadsheetをprivateとしてアクセスすることもできない。データを表示するところはJSONのが楽なんだが…。だからといってpublicにすると更新ができなくなるとはどういうことだ。これじゃろくなアプリが作れないぞ。データに対する更新操作が必要なら、Spreadsheetはprivateにするしかなさそうだ。がっかり。

Google Data API クライアントライブラリ

Google Data APIの仕様一から読もうと思ったら、クライアントライブラリがあった。

■クライアントライブラリ
http://code.google.com/apis/gdata/clientlibs.html

JavaScriptはないけど、JSONでフィードを取得できるみたいだ。
Using JSON with Google Data APIs

リクエストパラメータに
alt=json

を追加すればレスポンス形式がJSONになるらしい。

scriptタグから呼び出す場合は、
alt=json-in-script&callback=myFunction

で、myFunctionがコールバックされる。シンプルでよい。

GDataAPI概要

http://code.google.com/apis/gdata/overview.html

要約すると、GDataはAtomを拡張したもの。Atomが提供する、HTTPのGET/POST/PUT/DELETEを使った本的なCRUD機能に以下の機能を追加している。ということらしい。
  • Queryを用いた絞込み参照
  • 楽観的同時実行制御
  • 認証

タスク管理Webアプリが欲しい

忘れっぽいのでタスク管理システムは必須だけど、なかなかいいのが見つからない。
具体的には、こんな感じの機能が欲しい。
  • Google Personalized Homeから使いたい
    • デフォルトビューは、今日のタスク状態を表示
    • ドラッグアンドドロップで表示制御可能
      • Yahoo!UIライブラリとかでなんとかならんか
  • あわよくば、デスクトップWidgetとして使いたい
  • 指定した日付のタスクの状態を表示したい
    • その日に登録したタスク
    • その日にまだ未完了なタスク
    • その日に完了させたタスク
  • プライオリティは、できれば7つの習慣方式で

ないので結局、自分で作ることにする。項目的にはこんな感じで、UIはもっと綺麗に。




















← TODAY →(カレンダーならなおよし)
優先度残り日数状態タグリストタスク内容メモ
あと2日未着手work, privateXXXXをやるXXXはXXXX参照


要素技術は…
  • 自宅サーバーもないし、レンタルサーバーは金がかかるから嫌だ
    • データストアはGoogle Spreadsheet GDataAPI使ったことないけど
  • WebベースのいろんなUIから使いたい
    • 勉強もかねて、とりあえずJavaScriptで作る
できるかな…。まずは、Google SpreadsheetのAPIとGDataのAPIを調査する。

@ITがおかしい

RSSリーダーでチェックしているが、昨日から怒涛の広告ラッシュ。記事より広告の方が多い。昔は硬派な技術記事/プロジェクトマネジメント関連記事がほとんどだったが、ここ1年ほどは単なるITニュースサイトになってしまった感がある@IT。もしかして相当苦しいのだろうか?

技術的には以前ほど新しいトピックがなくなってしまったのかもしれないが、JavaWorldが休刊したりしてるあたり、細かなまとめ記事はまだまだ需要がありそうな気がするけど…

2007年2月26日月曜日

Wii Media Center Xのその後

 なかなか有望だと思ったので以前とりあげてみたRed KawaのWii Media Center X。FLVの再生が数分で止まるという致命的な出来を見せてくれたが、その後全然バージョンアップしないうえに、なんかサイトに広告が増えてきたような…大丈夫か?Apple TVとかXBoxとかBRAVIAのおまけとか、競合がどんどん出てきてやばいのでは?
 そもそも、ちょっと時間かければその辺のサンデープログラマが作れそうなレベルの製品だったわけで、スタートアップならどんどん改善してがんがんリリースするべきだし、出せると思うんだけど。それに、製品情報にバージョンが載ってないから、更新されたかどうかもわからんよ。もうちょっとがんばってくれよー。

リンク:
Wii Media Center Xを使ってみる -セットアップ-
Wii Media Center Xでビデオを見るために -Wii Video 9-
Wii Media Center Xを使ってみる -画像閲覧-
Wii Media Center Xを使ってみる -動画閲覧-

動画の整理-ビデオテープとビデオデッキの廃棄

 Wiiを買って、テレビまわりのスペースがさらに貴重に。昔ながらのブラウン管モノラル14インチだから、ビデオ入力の数も2個しかなくて、PS2とWiiつないだら終わりだ。
そういえば、ビデオデッキはもう何年も使ってないからしまうことにした。しかし、ネックなのは結構な本数になっているビデオテープ。幸いVAIOが外部入力をMPEG2にできるみたいなので、全部HDに取り込んでしまうことにした。
  • 見られれば良いもの/最悪消えてもYouTubeでみれそうなもの…MPEG4でHDに保存
  • オリジナルなもの/品質を落としたくないもの…MPEG2で保存
  • エンコードツール…TMPGEnc+DivX
しかし、VAIOで録ったMPEG2ファイルを他のPCのTMPGEncでは開けないことが判明。
おそらくは
http://missinglink.systems.ne.jp/008.html
の問題で、VaioがMPEG2作成時に使うエンコーダ/デコーダと、TMPGEncが使うエンコーダ・デコーダが違っていてデコードできないからっぽい。で、メディアプレーヤで再生できるのは、メディアプレイヤーのデコーダ選択方法とTMPGEncの(というかDirectShowFilterの)デコーダ選択方法が違い、メディアプレイヤーはあたりなのにTMPGEncではハズレってことが起きるからっぽい。面倒くさいなぁ…。
まぁWorkAroundはいくらでもありそうなのでMPEG4化はVaioでやって、MPEG2保存するものは最悪圧縮したくなった場合にVaioが残っていることを祈るか、だめなら有償ソフトを検討するってことで保留。

というわけで、3倍録画がほとんどのビデオテープをおおよそ30本程度HDに取り込んでみた。ビデオからMPEG2への取り込みには実時間が必要で、さらにMPEG2をMPEG4に変換するのにもかなりかかるので、結局全部で2ヶ月近くかかった…。

ビデオは好きなところに飛べないから、ビデオ→MPEG2でうまいことやろうとすると手戻りが多くなってしまう。なので、ビデオ→MPEG2取り込みは何も考えずに1本をまるごと1ファイルとして取り込んでしまい、MPEG2をTMPGEncで切り貼りしつつMPEG4にするのが作業効率がいい。
ただし、MPEG2の録画時間があまりに長くなりすぎると、TMPGEncでカット編集する際に、スライダで微調整しづらくなってしまうので、番組の間くらいで適当に切っておくのが良い。あー…めんどくさかった。

「みんなの意見」は案外正しい

★★★★☆

 いわゆる「集団の叡知」が成立するための「多様性」・「独立性」・「分散性」の必要性と、「集団の叡知」の働き方が、認知の問題、協調の問題、調整の問題といった問題の種類によって異なることを、いろんな事例を交えながら紹介している本。エッセンスはほんとにこれだけで、あとはこれらの条件が整った場合の素晴らしい事例と、整わなかった場合の悲惨な事例の紹介で埋められている。

 読んでいくと、条件がそろった場合の素晴らしい事例よりも、条件がそろわなかった場合の悲惨な事例の方が、サラリーマンとして仕事をしている自分のような人間にとっては身近に感じられてくる。何度も議論を重ねることで独立性・多様性・分散性を低めていき、最終的にとんでもない結論を導き出す旧日本的組織の例など、今の自分の状況と符合しすぎていて怖いぐらいだ。意志決定がうまくいかないように見えたら、この本が提示している枠組みでうまくWorkしていない部分がないか考えてみる価値はありそうだ。意志決定が対象としている問題ははどういう問題(認知・協調・調整)なのか。失われているのはどういう特性(多様性・独立性・分散性)なのか。
 自分のまわりのことでちょっと考えてみると、これらの特性を失わせる要素としてマスメディアが頭に浮かぶ。マスメディアは、政府の監督者として民主主義にはなくてはならないことになっているが、多様性や独立性を低減させることで民衆が正しい政治的判断を下すことを妨げている面もあるんじゃなかろうか。また、あるある大辞典の事件を見ていても、マスになりすぎるとマイナスの影響が強くなる気がする。

 分散性が役に立つのは、現場に近い人間の方が適切な判断ができるためだという。本の中では、「ローカルな知識は善」と書かれている。ただし、ローカルな知識を生かすためには、ローカルな知識を集約するメカニズムが必要で、これがなかなか 難しい…。最近はWeb2.0的ツールとか言われている、ローカルな知識を生かす(と言われている)ツールが増えてきているみたいだけど、どうにも集約の メカニズムが不足しているような印象。
実際、プロジェクトにWikiやポータルを入れるとそれなりに情報の流通は改善されるが、単に当たり障りのない情報が一元管理されるだけで意志決定に良い影響を与えるところまで至らなかったり、各自が書き込んだ情報が氾濫し、逆に使い物にならなくなってしまっていることもかなり多い。
 情報を選別するためのCoolなアプローチとしては、Google MiniとかBIみたいな分析が使えそう。たくさんの人が手軽に情報を評価できるようなものも必要だろう。ただそれ以前に、こういうアプローチで情報を利用するという文化的素地がまったくないのが頭が痛い点だ。加えて、そもそもこういうアプローチで処理していいケースとそうでないケースがあるかもしれない。このあたり、もう少し検討が必要だ。

 「自分一人で最前の意志決定をなそう」という気負いをなくしてくれるという意味で、肩の力を抜いて仕事ができるようにしてくれる本だと思う。

ウェブ人間論

 またしても、図書館から。これは、梅田氏のブログで刊行を知って予約、手元に届くまでに約1ヶ月半というところだろうか。ウェブ進化論は僕にとって「新しい事実を仕入れられた」本で、それはそれでおもしろかったんだけど、このウェブ人間論の方がおもしろい。平野氏という、僕とほぼ同世代の人間が梅田氏と対談することで見せる色んな面が、「新しい事実を仕入れる」以上のものを与えてくれた。

 そういえば平野氏は僕と同じ大学で、ほぼ同じ時期に大学にいて(といっても僕はほとんど大学に行かなかったが…)、賞を取った時には僕のまわりでもずいぶん騒がれていた。そりゃ単に、僕の友達に小説家志望がいたせいかもしれないけど。
…境遇が近いせいか、対談の中で出てくる梅田氏と平野氏の意見が対立するいくつかのテーマでは、どちらかというと平野氏にシンパシーを感じた。こんな感じで。

平野氏 >>自分>>>>>>梅田氏

 自分は一応(古い)IT業界にいるビジネスパーソンとして、小説家としての平野氏が持つ独特の重さからは少し離れた位置にいる。「情報を適度に扱って、うまくやっていければいい」というようなライトなスタンスの梅田氏に比べ、平野氏は「情報であふれたこの世の中で自分という人間もなにかしら新しいあるべき姿を追い求めなければならない」というような自省的とも言える態度が見え隠れしているように感じる。たぶんこれは、職業的なものに負うところが大きいんだろう。平野氏の作品は読んだことがなくて聞きかじりの知識しかないけど、比較的自分の人格を出すというか、「人格を使って情報を再構成する」ような作品の作り方をしている人のように思えるので。梅田氏はコンサルタントなので、そこまで全霊をかけて情報の編集メカニズムを人格にまで組み込む必要はないんだろう、たぶん。
 一方で、平野氏は、テクノロジによる社会の変化に関しては、梅田氏を遙かに超えた急進的な見通しを持っている。むしろ、そこまで考えた上で人はどう変わっていくべきなのか、自分はどう変わっていくべきなのかを模索しているよう。そう、全体的にみて、梅田氏は「他人事」として語り、平野氏は(もしかしたら必要以上に)「当事者」として語っている。

 平野氏が、テクノロジがもたらす社会的な変化について、急進的な意見を持っているかと思えば妙に保守的であったりするのは、自らが小説家という既存メディアに属している人間であるということと、若者として社会の変化を受け入れる姿勢が入り交じっているせいなんじゃなかろうか。正直なところ、小説をソフトウェアに変えれば、ほとんど同じ感覚を自分も持っている、と気づいた。梅田氏のこの、悟りにも似た軽さは結構うらやましいなぁ。

2007年2月23日金曜日

大規模プロジェクトでアーキテクトがやるべきこと覚え書き

今かかわっているプロジェクトから拾ってきた、大規模(プロジェクトメンバが多い)プロジェクトでアーキテクトがやった方がいいと思えるもの。未熟なので見えてないところもかなり多いですが。小さなプロジェクトならいらないものや自明なものも結構ありそう。

■システム基盤の構築
・処理パターン(同期型オンライントランザクション/非同期型オンライントランザクション/バッチ)の選定
・処理パターンごとのシステム/ソフトウェアアーキテクチャ設計
・アーキテクチャ設計のための非機能要件収集計画の策定
・基盤プロトタイプによる、機能および非機能要件(特に性能)の早期検証
・システム運用設計および業務運用設計の収集計画
・セキュリティ設計もある程度勘案しておくこと
・既に適したアーキテクチャが構築済みであれば可能な限り利用し、開発プロセスはアーキテクチャにあわせてしまうこと。開発の自動化サポートが容易になり、生産性がかなり向上する。

■開発プロセスの策定
・アプリケーションパターンに対応した成果物群および成果物作成手順設計
・成果物および成果物間の関連を定義
・開発標準文書や参照する他者が作成した成果物のリリース計画を決める。内部リリース向けのマイルストーンを策定し、リリース済みの最新文書を参照するような運用にしないと大混乱に陥る。

■開発環境の選定・構築
・成果物フォーマットおよび作成ソフトウェア決定
・開発プロセス自動化戦略の策定と実装

■コミュニケーション設計および基盤の配備
・体制やロール、開発プロセスから、意思決定と意思決定に必要な情報をラフに洗い出し
・意思決定の種類(認知・調整・協調・創造)を特定し、意思決定に最適な形(中央集権/分散)を選択
・それぞれの意思決定をサポートするメカニズムを選定、配置

とりあえずメモということで。

"政治"に対する認識、パラダイムシフト

政治に関するエントリを二つ。

皆の力を集める3つの要素 - 経済、政治、文化-arclamp.jp アークランプ

http://d.hatena.ne.jp/fromdusktildawn/20061208/1165539947

この2つを読んで、政治に対する考えが決定的に変わった。
特に後者。この、坂本君に対する指摘はほぼすべて自分にも当てはまる。自分は…
・すべての可能性を詳細に検討する
・自分の好む選択肢に固執し、その他の可能性を検討しない。現実的でないと切り捨てる
この2つの反応にぶちあたりまくり、前者のスピード感の欠如に疲れ、自称経験豊富な後者の意見にいいくるめられてきた。まさに坂本君と同じ状況。で、自分も後者のような立場になろうと考えてやってきたが、どうも後者のような人間も特に正しいかどうかとは関係なく動いているようだ。経験で、何かが見えているので自信たっぷりに他人の意見を切り捨てているわけでもないらしい。結局みんな、何を考えて動いているのかさっぱりわからなくなっていた。
後者の中にも2種類いた。知ったかぶりな馬鹿と、政治を知っている人。どちらにせよ、自分が正しいと思うことややりたいことを通す際に、知ったかぶりにただ言いくるめられたり、政治ゲームで一方的にたたきのめされたりするのは割に合わない。もちろん事前に深い状況把握と、ディスカッションは必要だろう。だが、その先で簡単にあきらめるのは間違っていたと思えてきた。

不毛な政治ゲームが少しでも減るように心がけながらも、現実的には、政治ゲームには政治ゲームで対抗しながら、自分の理想を実現していかなければならないことを、肝に銘じて生きていくべきだろう。

どうやら僕はゲームから降りていたようだ。自分に決定的に不足していたものは、これだったのだ。これは、自分の仕事に対する態度の劇的変換をも意味する。何が正しいかで思い悩むのに多くの時間を割くのも、やりたいことを実現できない政治的状況をただ嘆くのももうやめにする。必要以上に人間的になろうとして、状況把握を放棄するのももうやめる。良いと思うことをし、どうしようもなければ…ゲームを楽しもう。