ページ

2010-11-30

記事拾い読み:ソフトウェア・メトリクスの栄光と没落

@ITの「山浦恒央の“くみこみ”な話」で「ソフトウェア・メトリクスの栄光と没落」というサブシリーズが連載中です。ソフトウェアメトリクスの勃興から時代の変遷を追いかけたなかなかに面白いシリーズです。

その1:ソフトウェアの定量的測定の甘いワナ

このあたりはソフトウェア工学前史あたりですね。さすがにこの時期は現役では無かったので本でしか知らない時代です。

その2:構造化プログラミングの苦難の歴史

構造化プログラミングの時代。習いはじめたのがこのあたりです。言語はまだ構造化言語になっていませんでしたので、そういう言語でいかに構造化してプログラムを書くか、という点に注目していました。しかしもうこの時期には、メインストリームでこそ使われていませんでしたが、各種の構造化言語が出現していた時代です。

その3:構造化プログラミングからオブジェクト指向への進化

オブジェクト指向の時代に入りました。最初に読んだのはBYTE1981 Aug. のSmalltalk特集で、なんて便利な考え方があるのかと感激しました。ですが、誰もが使えるものではありませんでした。Cで一生懸命オブジェクト指向っぽいコードを書いていたものです。

その4:人類初のソフトウェア・メトリクスをめぐる熱い論争

ソフトウェアメトリクスの誕生あたりです。バックボーン無しで数えろ、といわれていた頃です。コメントはどうするとか、3項演算子はどうするとか、Cなら{}は同一行、別行、でいくらでも数値が変わるのに。このあたりを突っ込むとまともな回答無しで、とりあえず数えてね、になっていました。無意味なメトリクスの時代でした。

その5:「ソフトウェア・サイエンス」とは一体何ぞや?

私は懐疑派でした。というかこの頃以降メトリクスまじめに相手したことがないですね。メトリクスを気にする人もいなくなってしまいましたし。

これを読んでいたら、かつて fj.jokes にポストされていたjokeを思い出しました。
「ギョウスウ ギョウスウ タダギョウスウ タダソウギョウスウ ドダイソレシカワカラナイ」

これ以降というと、メトリクスよりプロセスに話題が移っていったのではないでしょうか。バックボーンの判らない、何の意味があるのか判らない、メトリクスより、プロセスに注目するほうがまだ効果がありそうに思えました。

連載はまだ続いています。この時期以降のメトリクス、あるいはソフトウェア工学がどのように推移していったのかは今ひとつ判っていませんので、今後の記事でそのあたりの状況が掴めれば、と思っています。

新釈(Programmer's)般若波羅密多心経 from fj.jokes

昔も昔(1990、20年前!)に fj.jokes にポストされたジョークです。ソフトウェアメトリクスの記事読んでいたら思い出してしまいました。

Subject: Han-nya Singyou
From: Kuniharu TSUBOI
Date: 1990/ 8/24 13:39:21

新釈般若波羅密多心経

観自在菩薩行深般若波羅密多時
プログラマにして偉大なる先覚者であった菩薩が
般若波羅密多を学んだ時,

照見五蘊皆空
プログラムの五つの構成要素はみな空であると見抜いてしまった。

度一切苦厄
それにより,一切の苦しみから解放されたのである。

舎利子
シャーリプトラよ。

色不異空
実体をよく表すと考えられるカラー画像でさえ,実は空しいのだ。

空不異色
つまらん情報だからこそカラーなぞにする。

色即是空空即是色
カラー画像すなわち空であり,空すなわちカラー画像となる。

受想行識亦復如是
あらゆるセンサ入力(受)も,推論(想)も,
外界へのフィードバック(行)も,
人工知能における知識処理(識)でさえも,
これと同じように空しいのである。

舎利子
シャーリプトラよ。

是諸法空相
よって,すべてのプログラミング技法などというものは
空しいのである。

不生不滅
新たに開発されることはなく,使えなくなってしまうこともない。

不垢不浄
汚いプログラムはないし,エレガントなプログラムもない。

不増不減
納期が延びることはなく,仕様が減ることもない。

是故空中無色無受想行識
このようにすべて空しいという観点からは,
カラー画像もセンサも推論も制御も知識も無い。

無眼耳鼻舌身意
画像処理も音楽情報処理も花子も Smalltalk も
ロボット工学も意味ネットワークも無い。

無色声香味触法
パターン認識も音声合成も Flavors も
センサ工学もソフトウェア書法も無い。

無限界乃至無意識界
画像処理分野から人工知能分野にいたるまで無い。

無無明亦無無明盡
認知科学が無用だということは無いが
認知科学が無用でなくなることも無い。

乃至無老死亦無老死盡
プログラムが古くなって使えなくなることはないが,
古くなって使えなくなることがなくなることも無い。

無苦集滅道
バグもバグの原因もバグの撲滅もバグ撲滅の方法も無い。

無智亦無得
深い知識も知識獲得も無い。

以無所得故
どうせなにも得るところはないのであるから,

菩提薩捶
悟りをひらいたすぐれたプログラマは

依般若波羅密多故
般若波羅密多に帰依してしまった故に,

心無圭礙
その心に迷いは無いのである。

無圭礙故無有恐怖
心になんの迷いもない故に,恐れることも無い。

遠離一切顛倒夢想
一切の倒錯した夢想からは無縁である。

究竟涅槃
そして,心穏やかに暮らしている。

三世諸仏依般若波羅密多故
過去現在未来の優れた先達は般若波羅密多に帰依したが故に

得阿耨多羅三藐三菩提
完全な悟り(メタ知識)を得たのである。

故知般若波羅密多
それ故,すべてのプログラマは般若波羅密多を知るべきである。

是大神咒是大明咒是無上咒是無等等咒
これは大いなるマントラ(真言)であり
大いなる悟りのマントラであり
この上無いマントラであり
他に比ぶべきもののないマントラである。

能除一切苦真実不虚故
これは真実であって虚偽ではないから,
一切の苦しみを取り除いてくれる。

説般若波羅密多咒
それではいよいよ般若波羅密多のマントラを説く。

即説咒曰
すなわちそのマントラとは,

掲諦掲諦波羅掲諦波羅僧掲諦菩提薩婆訶

ギョウスウ ギョウスウ タダギョウスウ
タダソウギョウスウ ドダイソレシカワカラナイ

般若心経
これにて般若波羅密多のマントラを終わる。

2010-11-28

HYBRID W-ZERO3 Maniac

ぱふっ♪ブログ」の記事経由で「HYBRID W-ZERO3 Maniac 」を読みました。素晴らしいの一言です。これこそ最初に読むべきドキュメントです。スマートフォン、多機能だけあって使ったことがない機能が一杯ありました。こういうまとまった情報があると色々と試してみようという気になってきます。これを参考に色々といじくりまわしてみようと思っています。

2010-11-27

拾い読み 信頼性モニタでVistaシステムの安定性をチェックする

信頼性モニタでVistaシステムの安定性をチェックする - @IT

VSデバッグ手法シリーズで紹介されていた管理ツール。

試しに起動してみました。が、役に立ちますかね。たしかに「windowsの場合」イベントを時系列で調べるのは非常に面倒でした(ただのテキストなら簡単だったんですがね)ので、これで時系列表示可能になる点は便利でしょう。とはいうものの記録されているイベントの中身がスカスカなので、これで何が判るのかかなり疑問です。Windows7ではそれなりの詳細が表示されるようですが、Vistaの場合にはエラーの詳細情報は出てきませんので、あまり役に立ちません。まあ、Vistaでなら無いよりはまし、程度でしょう。多分、そのあたりの批判を受けてWindows7ではましになっているのではないですかね。できればVistaにもそのあたりをフィードバックしてほしいものです。

拾い読み 連載:Visual Studioデバッグ手法

@IT連載:Visual Studioデバッグ手法をまとめ読みしましたのでコメントを。

第1回 Visual Studio 2010のデバッグ機能をまとめる

一般的なデバッグ手法というより、IDEの利用、使用方法のガイドといった方向のようです。たしかに知っている人は使っているけど、といった機能は、特に高機能IDEには、多いのでそのあたりが紹介されているといい勉強になります。

デバッグの事前準備:バグ情報の収集方法

ここで、MSエラーコードの構成が記載されています。ちょっと役に立つかも知れません。ただ、良く見るエラーって、「その他」扱いのものばかりなんですが。

Visual Studio 2010を使用したデバッグ作業の基本

ブレークポイントについてはVS2008と変わりありません。まあ、このあたりは普段使いの範囲でしょう。ただ、一部では「特定の条件を満たした場合に停止する」機能があるようです。これは便利といえば便利なのですが、使い勝手は設定可能な条件次第です。いままではこういう特別な条件でログ、トレースを呼び出すようにしていて、そちらのブレークポイントを設定していました。前準備無しでいけるのは便利でしょうが、あらかじめある程度のデバッグサポートを想定したコードを作るのとどちらがいいのか悩むところです。

トレースポイントはVS2010で追加された新機能ですね(VS2008にはありません)。まあ、実際には状況によりけりですが、printfデバッグが簡単になるのはいいことでしょう。状況によってはログ、トレースコードとして残しておくべき場合もありますので、無条件に、というわけにはいきません。そのあたりは設計方針etcに依存するところです。単純なデバッグ専用の実行トレース程度でしたら、この機能は便利でしょう。

高機能IDE自体は悪いものではないのですが、インテリセンスと強力なデバッガの組み合わせの所為で(といったら失礼かもしれませんが)、理解しやすい(覚えやすい)名前を付けるとか、バグの取りやすさを想定したコーディング、といった技能が失われていく面もあります。単体レベルのテストならともかく、結合、システムテストレベルでは、このあたりを想定しているコードと想定していないコードではデバッグのはかどり方が違ってきますからね。

第2回 Visual Studio 2010の新機能「IntelliTrace」

Ultimate専用の機能ですと試しようがないですね。

最初にIntelliTraceの概要を exception 時のコールスタックトレースで解説していますが、これは変ですね。コールスタックトレース自体は既存の機能で、UI付きになって見やすくなったに過ぎません。この例では有難味が感じられません。

本来の有難味は後半に記述されているような、テストケースの(自動的な)再実行が可能になるところにあるように思えます。イベントベースで実行系列を保存しているというのは、(前半で紹介されたような)単純なトレースバックではなく、それを再実行するとこにあるはずです。ですが、この機能がUltimate+Team Foundation Server必須となると、それこそ滅多なことでは試すことができませんね。残念です。

第3回 Visual Studio 2010による高度なデバッグを極める

今回は特殊なデバッグ技法満載のようです。

(1).dllファイル(=アセンブリ)のデバッグ

dll用のデバッグ情報が付属していれば、ですよね。.NETあたりは確か付属していたと思いますが、サードパーティものだとついていないケースもありますから。基本的には自作(インハウス)DLL限定の話でしょうか。

(2)リモート・デバッグ

へえーこれは知らなかった。リモートデバッガなんかがあったんですね。ですが、「サーバ環境なんかで余計なものを入れることができない」ような環境だと、リモートデバッガ自体も禁止されそうですが、どうなんでしょう。まあ、多くの場合はそこまでうるさいわけではなく、ライセンス上の問題で環境が制限される場合のほうが多いかとおもいます。そういう場合にはリモートデバッガ便利ですね。

(3)別サーバのIIS上で実行されるプロジェクトのデバッグ

Webサービスデバッグはリモートデバッグとは別になるんですか。リモートデバッグといってまず想定したのがこの組み合わせだったので、ちょっとびっくり。以前の仕事の時は簡単なログ機能だけでこなしましたが、どこまでできるんでしょうね?ソースレベルいじることなく対処できるのであれば、色々と都合がいいわけですが。

(4)コードからのデバッガ制御

これはタイトルがミスリーディングですね。コード側で現在デバッガ制御下にいるかどうかを判定できる機能のようです。たしかにデバッガ使用時はユーザインタラクションが入るために通常のタイムアウトでは引っかかって処理が進まなくなることがありますから、そういう場合のみタイムアウト増大(あるいは無効化)できるのは有難い機能です。

(5)Internet Explorer 8の拡張機能デバッグ

これこそ思いっきり特殊例。まあ、こういう技法があるとだけ覚えておきます。

(6)並列プログラムの可視化機能

これはどうでしょう。並列系はデバッガでどうなるものではないですから。それは無いよりはましですよ。しかし並列系の障害って、おそろしく再現性が低く、またタイミング依存するので、デバッガで追っても無駄になることの方が多いものです。むろん、ここで例に挙げられているような障害なら見つけられるでしょうが、これはレベルが低すぎませんかね。並列系についてはひたすら設計時の検証にかかっている、と思っています。

さて、色々な便利な機能が紹介されているのですが、難点は、バージョンによって使えたり使えなかったりする点ですね。個別にそのあたりをまとめてくれていればずいぶんと助かるのに、と思いました。フルバージョンのVSがないと試すことのできないものが含まれているのが残念なところです。あるいは、こう便利なんだからフルセットを手にいれようよ、というお誘いなのかもしれません。

2010-11-22

evernote 4.0.2 のリリースアナウンスの抄訳

先日自動更新でバージョンアップしたevernoteですが、開発元の日本語ブログに新しいバージョン4.0.2 のリリースアナウンスの抄訳が上がっています。当然ですが、英語での記述そのものです。

ですが、コメント欄に障害報告が上がっています。言われてみると確かに日本語入力時に選択候補のリストが変にプルプル動きますね。特にタグ入力の時には、既存タグの選択リストとIMEの選択リストが競合しているような雰囲気があります。まあ、多少気持ち悪いかな、レベルなので気にしなければそれまででしょう。勿論、直れば嬉しいですが。

windows 関連コラム拾い読み

次期Visual Studio 2010と.NET Framework 4.0の新機能 - @IT

年初の記事だけど、読まれた記事で再出現。まあ、NET4系の新機能がきれいにまとめられていますが。最初に読んだ時には気づかなかったのですが、UML設計機能が追加されているのですね。まあ、VSはバージョンによってサポートされている機能にかなりの違いがあるから。MS系勉強会でVSのUltimateをたまに配っているますが、そんなのでも当たらないと試せないかもしれません。普段使いはExpress版ですからね。Expressでサポートされていない機能はなかなか試すことができません。

VB開発者のためのインターフェイス入門 - @IT

インターフェースは、その使い方そのものよりも、普通のクラス、抽象クラス、あたりの使い分けのルールの方が重要です。なぜそのようなインターフェースが定義されているのか、どういう考え方に基づいているのか、という点を中心に解説してほしいですね。システムが提供するようなものですと割合納得出来るものが多いのですが、プロジェクト独自のものなんかだと、何を考えているんだ、レベルのものがありますからね。あ、良く読むとツブヤキ欄に同じことが書かれてますね。誰も考えることは同じなようです。

リモート・デスクトップ接続中にリモート・コンピュータを再起動する - @IT

普通にリブートしていたのにどうして、と思ったら、サーバ機以外のものでは「再起動」が出ないのですね。まあ、多くの場合、操作対象はサーバ機でしょうから気にならなかったのですね。でもクライアント機に対してリモートで再起動かけるというのはどのようなシチュエーションなのでしょう?遠隔サポートみたいなシチュエーションですかね。

Microsoft Web Platform

Microsoft版のPHPですか。MSも結構手を広げていますね。しかしWEBプラットフォーム(フレームワーク)の散らばり具合といったらどこまでばらけていくのでしょう。これを知っていればOK、という感じのフレームワークが出てくればいいのですが、現在は百家争鳴状態で、細分化されてしまっています。知識の蓄積という面から見ると壮大な無駄になっているように思えます。

2010-11-21

Microsoft Network Monitor

Microsoft Network Monitor を使ってみよう | Tech Fielders コラム

こんなのがあったんですね。知りませんでした。ネットワークモニタ/アナライザっていうと、無条件でWireShark(A.K.A Ethereal)使っていたのですが、マイクロソフト謹製のものもあるのですね。まあ、解説記事を見る限り(あたりまえですが)Wiresharkと同じような使い勝手のようです。Wiresharkとの比較が欲しいところです。

で、すごく気になるのですが、この記事の筆者は Wireshark 知っているのでしょうか?MS向けの記事なのであえて Wireshark については触れなかったのか、全く知らなかったのか。一般向けの記事であれば、Wireshark との比較が入らないなどということは有り得ないでしょう。

情けない話ですが、最近のITエンジニアは生息する分野で細分化されてきているところがあります。私はMS系には疎いのでWiresharkは知っていてもこちらのは知りませんでした。でも、逆にこっちしか知らずにWireshark知らない人もいるのかと思うとちょっと怖くなります。

Thin Client の話題

日本HPが Thin Clinet に熱心なようです。こんな広告 (1) (2) (3) を見かけました。まとめて見ると以下のようになります。ちなみに最後のは (3) のページからリンクされていた HP の netbook
t5740e Windows Embedded Standard 7 50,400円~
t5570 Windows Embedded Standard 7 30,450円~
t5745 HP ThinPro(Linux Base) 37,800円~
HP MultiSeat MS MultiPoint Server 2010 1台当たり3万程度
HP ProBook 4515s/CT Windows 7 3万円台(キャンペーン価格)

これは事業部が別にでもなっているのでしょうか。同じ会社から出していながら、システム構成からOSから別々になっています。

で、こう熱心に発売されているわけですが、そもそも Thin Client の専用機って需要あるんですかね?それは、管理面(あるいはTCO)から見れば Thin Clinet は都合がいいのでしょうが、導入コストからだけだと netbook あたりと変わりません。それも当然で必要となるHW構成は netbook も Thin Clinet もほぼ同じですからね。

昔からこういう機能を絞った専用機が管理の容易さを売りに出されてきた(汎用機の専用端末、X端末)わけですが、PC出現以来、PC+端末ソフトの組み合わせに常に負けてきています。なんといっても出る個数が違うので専用機はどうしてもコスト的に不利になりますから。個人的にはNetbookをThin Clinetのアクセスユニットとして使う方が正解だろうと考えています。Netbookを Thin Clinet化する統合パッケージ(サーバ側管理+クライアント側の遠隔設定)みたいなもの、出ませんかね。HWメーカ的にはあまり面白くないでしょうが。

個別の機能であれば VNC RDP あたりを載せればすむことなのですが、各自が個別にインストール、セットアップするのは一般的にはとても大変なことと考えられているようですので。

タスクバーの通知アイコンがたまに消える件

Windows使っていて、タスクバーの通知アイコンがたまに消えてしまうことがあります。

復旧させるには、タスクバーのプロパティ→通知領域タブでシステムアイコンを再選択してやればいいのですが、そもそもなぜ勝手に通知アイコンが消える(あるいは表示されない)のか不明のままでは気持ち悪いですし、また、たまに通知領域タブで選択項目自体がグレイアウトしている(選択不可)こともあります。

まず、通知アイコンが表示されない件ですが、調べていたらこういうページ Systray icons missing | Windows Problem Solver を見つけました。これによると、通知アイコンを表示させるために Shell_NotifyIcon API を使うのですが、内部的にはタスクバーとのある種の通信を行なうため、タイムアウトが設定されていて、一定時間内に応答がないと処理をキャンセルするようになっているそうです。このため、システム負荷が重い場合には、このタイムアウトによって通知アイコンの登録に失敗してしまい、結果として通知アイコンが表示されなくなる、ということのようです。本質的な問題は、どうもこのタイムアウトが固定になっていて(4秒)、高負荷状況ではちょくちょくタイムアウトに引っ掛かってしまう点にあるようです。上の記事によるとDLLにパッチを当てて直した人がいるようですが(良くやる!)、Windows UpdateでDLLが更新されて元に戻ってしまったそうで。最終的にはMSが直すしかないわけですが、タイムアウトは長くすればいいというものでもありません(実際にトラブル起きた時に困ります)。ユーザレベルでの対処としては、情けない話ですが、ログオンのプロンプトが出た時(には裏で各種の処理が進行中)、即時にログオンするのではなく、裏での処理がおちついてから(ディスクアクセスランプを見ていれば判ります)ログオンすると、比較的ですが、確実に通知アイコンが出るようになる、ということでした。

選択項目がグレイアウトしている件の方は、ある意味では単純な話しで、当該機能が使用不能になっていると、選択自体無効になるのでグレイアウト表示されるようです。大抵は、その機能が必要とするサービスが停止してしまっている場合ですね。問題はどのサービスがどの機能にとって必要とされているかの説明が結構いいかげんなことです。以前に(システム負荷軽減のため)Function Discovery Resource Publication サービスを停めてみたことがあります。サービスのプロパティでは、このサービスに依存しているシステムコンポーネントは無いことになっていますが、これを停めたらネットワークアイコンも消えてしまいました(選択自体無効表示になりました)。無論、サービスを再開させて再起動したらネットワークアイコンは現れてきましたが。結構こういう問題があり、サービスをいじる時にはこわごわになってしまいます。

2010-11-20

WebSocketの紹介記事

WebSocket、名前だけで興味があったのですが、まとまった紹介記事がでていましたのでじっくりと読んでみました。ただ、寄り道が多くて。

第1回 node.jsの衝撃とWebSocketが拓く未来

まずはnode.js (JavaScriptの実行エンジン)の話で寄り道。パラメタとして指定されたJSファイルを実行するもののようですね。実行環境としてTCPサーバ、HTTPサーバ機能を持っているため、JavaScriptで簡単にサーバ(機能)を作成することができるようです。サンプルがでていますが、単純なHTTPサーバ、TCPのエコーバックサーバあたりであれば本当に簡単にかけています。

とりあえず、上の範囲で、「ネットワークサーバをJavaScriptで」というところまではOK。後は「イベント駆動でハイパフォーマンス」のところですね。

こちらについては、サーバを構成するJavaScriptでイベントが使える、というのがポイントのようです。サンプルでは(イベントを使う)setTimeoutを使ったケースと、スレッドをブロックするSleepを使ったケースとで速度比較しています。が、これは解り難いですね。

じっくり読むと、setTimeoutのケースでは、あるHTTPリクエストに対する処理の一部が(この場合はタイマーイベントの)イベントハンドラに渡されていて、イベントによって実行されるようになっています。その一方で、サーバ本体はイベント処理の完了を待つこと無く次のリクエストの処理に入っています。Sleepでは、シーケンシャル実行なのでSleepが完了して残りの処理を終えるまでは次のリクエストの処理に移れない、というところを見せるサンプルになっています。

ノンブロッキング、イベント駆動は、普通の(コンベンショナルな)言語で実装しようとすると死ぬほど面倒になるのですが(ずっと以前にVB2.0でそういうのを書きました)、最近の言語だと簡単でいいですね。実行時の環境がそのままイベント処理に渡されるので、面倒なデータ管理が一切不要になっています。

元々HTTPは、リクエスト/レスポンスをシーケンシャルに処理していくことを前提にしたプロトコルです。各々のリクエスト/レスポンスは独立している(ステートレス)と想定していて、並列性は個別のリクエストの処理の中ではなく、リクエスト受付レベルで担当するようになっていました(httpdレベルでの並列動作)。ところが現在ではHTTPはこのような当初の前提から外れたところで酷使されています。記事で紹介されているチャットなんぞはもろにHTTP想定外の使われ方ですね。本来であれば、専用プロトコルを使うべきシチュエーションなのですが、みなさん、そういうものでも何でも無理やりHTTPで実現しようとする傾向があり、その結果HTTPサーバに無理をいうようになってきているわけです。

と、延々とサーバサイドの話をしてきて、実はこれはWebSocketとは無関係(とまではいいきれませんが)の前置きでした。この記事の著者の説明、いいたいことはわかるのですが、微妙に説明のポイントがずれているような気がします。

WebSocketは、概念的には、プロトコルそのもの(IETF規定だそうで)と、それをクライアントサイドで使うためのAPI(はW3C規定)から構成されているそうです。

APIは随分と単純です(ということはその先が面倒を一手に引き受けているわけですね)。サーバとバインディングする形でWebSocketオブジェクトを作り、接続、切断、受信についてはイベントハンドラで、送信については関数呼び出しの形式で使うようになっています(書いていませんが、エラー処理もイベント扱いでしょうね)。

記事ではnode.jsとWebSocketコードの比較の話がでていますが、両者ともソケット通信をイベント駆動でモデル化している点で似通った構成になっているのでしょう。でも、たしかにこの二つを組み合わせてサーバサイド、クライアントサイドを作るのは見通しがよくなりますね。

Ajax、Comet、WebSocket(Server Push)の比較図、WebSocketだけ塗り潰されているので却って見づらくなっていますが、まあ違いはわかるでしょう。Ajax(Polling)、Comet(Long Polling)はある意味HTTPそのままの使い型であって、そのため、サーバに無理をかけているところがあります。これに対してWebSocketは、概念的にはもうHTTPではないですね。むしろTCPベースのサーバの概念を無理やりHTTP上に持ってきたものといえるでしょう。ですが、逆にコード的には無理のないきれいな実装が可能になります(というか汚いところがすべて隠蔽されているわけですが)。

WikiPedia WebSocket
W3C WebSocket API こちらもまだドラフト。シンプルですね。
IETF WebSocket Protocol まだI-Dです。おもしろいプロトコルです。

これが広まるとTCPベースのサーバ消えてしまいそうな気がします。

第2回 WebSocketの現状と技術的課題

続編。こちらは標準化の状況と課題の話です。まあ標準化され、どこでも使えるようになるにはまだかかりますよ、ということで。そういえばJS自体だってどのブラウザでもそこそこ安定して動作するようになるまでにどれだけかかったことか。というか、未だにJSを止めないとマシンに負荷がかかってどうしょうもなくなるサイトが多数あるわけですか。

で、プロトコルメッセージ例が出ていますが、ヘッダとボディの間は1行空けておきましょうね。要らぬ誤解を招きます。

個人ドラフトからWGドラフトへの切り替わりで互換性が失われたとのことですが、そのああたりはセキュリティ周りの要請のようです。今時の実用プロトコルとしてはそのあたりに充分留意しなければいけないのでしょう。今後はこのレベルの大修正は無いのではないですかね。

ブラウザーサポートについては、新しいものは順次サポートされて行くのでしょうが、問題は(いままでにもありましたが)古いブラウザを使い続ける人の存在ですよね。こればかりはしょうがないですが。まあ、逆にWebSocketが古いブラウザを捨てるいい切っ掛けになるかも知れません。

WebSocketはステートフルサーバなのでスケール問題が出てきます。記事ではHTTPサーバなら単純に、とか書いていますが、今のHTTPサーバはそんなに単純ではないはずで、ロードバランサーなんかもセッションベースで動作してたりするわけですから、WebSocketが広まれば(技術的には同レベルなので)それなりの対策が取られることでしょう。もうひとつ挙げられているブロードキャスト問題はWebSocket限定ですね。まあ、このあたりも含めてスケーラブルWebSocketといったものが開発課題にになってくることでしょう。

次はNew Bamboo's Pusherの話。WebSocketへのruby wrapperだそうです。WebSocket APIまでは標準化されるので、そのレイヤーで書いたほうが移植性がありそうなものですが、やはり面倒なんでしょうか?イベントハンドラは確かに書きやすそうです。onmessgeでの集中処理って実際面倒ですからね。rubyだけでなく多数の言語バインディングがあるのですね。有名処は網羅されています。

既存のメッセージングプロトコルのWebSocket対応状況。メッセージングプロトコル(XMPP等)がWebSocketに対応してくれると、ブラウザUIで使えるようになるわけですね。WebSocketが広まってくると(対応ブラウザが増えてくると)既存プロトコルのWebSocket化が流行るのかもしれません。次の記事で紹介されているnoVNCなんかもその類ですね。

第3回 WebSocketでWebは変わる? 大胆予想!

最終回ということで使われている例が挙げられています。最初はNoVNC、HTML5(Canvas)とWebSocketで実装した(というかしてしまった、といいたいですね)VNCクライアントです。ちょっと前に他のところで紹介記事を見て、実装方針とかを読んだのですが、まあよくやる、といったものでした。VNCプロトコルデータをHTTP上でエンコードして送受信しているようです。

さてこういう実装例が出てくるといつもの(恒例の)綱引きがはじまります。例えばVNCの場合、JavaViewerがあれば、クライアントのブラウザ上で任意のGUIアプリケーションを、そこそこ高速/リアルタイムに表示させることができます。JavaViewerで同じことができるのにあえてWebSocket化するのはどういう理由なのでしょう?

VNCのJavaViewerはRIAに対するある意味究極の回答になっています。それこそ任意のGUIプログラムをそのままで使うことができるわけですから。ですが、時代に流れ的にはWEBアプリ化の方が主流ですよね。まあ、新しいGUIプログラムを作るよりWEBアプリを作る方が簡単、というのがあるのかも知れません。しかし、WebSocketを使うようなWEBアプリになった場合に、はたして「簡単」になるんでしょうか?旧来のHTTPベースのWEBアプリは確かに簡単でした(細かなUI制御を捨てれば)。しかし、凝ったUIを欲しがった場合、WEBアプリとネイティブアプリ(をブラウザ上で操作)とどちらが簡単になるんでしょうね。このあたりの流れの行き着く先がどうなるかは非常に興味深いところです。

2010-11-19

スマートフォンの記事

それでもなお、スマートフォンに“真の1台目”として欠けているもの - デジタル - 日経トレンディネット

タイトルがミスリーディングですな。スマートフォン化によるキャリア、サービス提供側への問題提起と捉えたいですね。今までキャリア、サービス提供側がスマートフォンを無視してきたのが、「真の1台目」になれなかった理由ではないですか?私は長くWillcomユーザなので、Willcom対象外のサービスに何度腹をたてたことか。逆にスマートフォンが対象になれば、このような機種/キャリアによる制限が解消されるのではないかと期待しています。

スマートフォン戦争、行方を左右する重要な2つのカギ - デジタル - 日経トレンディネット

HTML5によるWEBアプリケーション化によって端末の差異が意味を無くしていく、という論ですが、どうでしょう?現状ではそこまブラウザの規格統一が進むとは思えません。この手の話はWEBが一般化してから何度も繰り返されてきていますが、結局のところ一向に改善されていません。HTML5になったところでいきなり改善されるとは思えませんね。また回線速度あるいは料金問題もあります。WEBアプリのような回線速度依存のシステムを携帯系で多用するのはどうかと思います。むしろ通信を最低限に絞ったネットワークアプリに期待したいところです。

「Android」の躍進を後押しする5つの原動力 - page3 - CNET Japan

問題は本当に分断化を防げるかどうかですよね。メーカの思惑が絡んでくると分断化に走りやすいから。
iPhoneを追いかけている内はともかく,あるい程度のシェアを持ってくるとどうでしょうね?ベースがOSSの分差異が埋まりやすいかな?

スマホユーザーは将来「あんな蒲鉾板に…」と将来後悔するか - 速報:@niftyニュース

Twitterの話とスマートフォンの話は本質的には独立事象でしょう。それにスマートフォンなら(携帯よりは)Twitterだけに使われているわけでもないし。Palm時代との最大の差はモバイルネットワークの進展でしょう。今やスマートフォン上のデータはネットワーク上でバックアップされているのが普通になっているのではないでしょうか。少なくともスマートフォンの中に眠ったままになることはないでしょう。

ですが逆に考えると、特定のスマートフォンでしか扱えないデータがあれば、それは将来ゴミになる可能性が高いということになりますね。使用するサービス、アプリの選択においてはこの点(相互運用性)に注意をはらう必要がありそうです。

スマートフォンのビジネス利用は安全か?クラウドとHTML5 の普及で浮かび上がるセキュリティリスク(4/4):企業のIT・経営・ビジネスをつなぐ情報サイト EnterpriseZine (EZ)

クラウドとHTML5普及時に考慮すべきセキュリティリスクとしてはごもっとも、なのですが、あまりスマートフォンとは関係なさそうな気がします。ただ、PCとの比較でスマートフォンもセキュリティメージャーが弱いという問題はあるでしょうね。なお、この記事自体ではセキュリティリスクの説明がほとんど無いので、詳しくはこちらを参照

Thunderbird用のevernote clipper プラグイン

EvernoteはThunderbirdからも登録可能 - 移り気プログラマーの航海日誌

むろん私のところのTBにはそんなメニューはありません。最初から入っているものではないでしょう。

TBの「ツール→オプション→アドオン→プラグイン→新しいプラグイン」といってTBのプラグイン検索ページにいき、evernoteで検索するとちゃんと(TB用の)クリッパーが見つかります。これ(evernote_web_clipper-4.0.0.106602-fx+tb.xpi)をダウンロードして、TBのアドオンウィンドウで「拡張機能→インストール」でインストールします。そしTBを再起動するとツールメニューに「Evernoteに追加」が出現します。動き、使い方はブラウザ用のクリッパーと全く同じですね。

ただ、evernoteへのクリップは、メイル送信でも可能ですし(ユーザ登録で割り当てられるアドレスにフォワードするだけ)、メイルの一部をマークして Window+A キーでもクリップできるので、MUAでのクリッパーの必要性はあまり感じられません。メイル送信やマークして Window+A キーの方が負荷が軽いですし。ボタンひとつで、という辺りがメリットでしょうか。いまひとつ使いでの判らないプラグインです。

evernote 自動更新 4.0.1 → 4.0.2

自動更新の通知がきました。いろいろと修正がはいっていますが、通知のガイドメッセージではcopy&paste、IME周りの修正、が含まれているようです。このあたり、少々動きが不安定なところがありましたので、直されているのかも知れません。早速入れてみます。

で、入れ替わったバージョンで追記してみましたが。まあ、このレベルでは違いは殆どわかりませんね。使い込んではじめて分かるレベルの修正なのでしょう。

2010-11-16

evernoteニュース Evernote Partners with DOCOMO in Japan

ちょっと調べ物があってevernoteサイトを覗きにいったところ、「Evernote Partners with DOCOMO in Japan」のアナウンスが。日本では11/8開始の「DOCOMO×Evernoteプレミアムキャンペーン」のはなしのようです。DOCOMO/evernoteユーザの間では結構話題になっているようですね。メジャーどころではあまりニュースになっていないようですが。Premiumサービス無料提供というのは羨ましい話です。ただ、アナウンスの最後の方にあった、キャリアの差別化に、というのはどんなものでしょうね。Evernoteは多数のプラットフォームで使えるので、乗り換えても利用し続けることができるわけです。MNP敗者のDOCOMOにとってどういうメリットがあるのでしょうかね?iPhoneに流れたユーザを取り込むつもりなのでしょうか?

GoogleDocsへの直接リンク

前の会社を辞めるまえに(その会社の個人ページとして)公開していたWEBページを再構築し直して再公開しようと、WEBページをちょこちょこと書き直してきました。置き場所はプロバイダの無料ページですので容量的にあまり余裕がありません。そこで、プログラム類はGoogleDocsに置いて(ZIPもおけるようになりましたので)、WEBページからリンクするようにしてみました。

無論、GoogleDocsの共有設定はログイン無しで誰でも参照可能、にしてあります。PCからアクセスした場合には、(私以外のアカウントでも)問題なくアクセスできたのですが、WM携帯のOperaからアクセスするとGoogleのログインページにリダイレクトされてしまいました。どういうことかと調べたところ、Google support forumで「everyone is required to signin to see the google spreadsheet」というスレを見つけました。文書のタイプこそ違いますが、同じようにログインが要求される、という問題についてのスレです。

このスレは既にクローズされていますが、確実な回答は得られていません。ただ、best answerとして、GoogleDocsのバグだろう、ということにされていました。何でも全くGoogleアカウントにログインしたことが無い場合に限って発生する問題のようです。スレは今年の頭のものですが、結局この問題は未解決のまま放置されているようですね。まあ、Googleにとって、一度もGoogleアカウントを使ったことの無い人間は存在しないも同然なのでしょう。

というわけで再構築したページの宣伝です。Googleアカウントにログインしたことの無い人はアーカイブにアクセスできません。悪しからず。
OS/2プログラム
VNCガイド

2010-11-13

evernoteユーザ500万人突破

Evernote便利すぎワロタ 500万ユーザー突破!! - ガジェッターニュース

つい先日400万人突破とかいう記事を読んだ気がするのですが、今度は500万人突破だそうで。ユーザの増加のペースが一気に加速してきたかんじです。このニュースのコメントにも出ていますが、3.5で躊躇していた人がいるならぜひにもバージョン4を試して欲しいですね。私もバージョン3.5のままだったらここまで使う気になれなかったと思います。やはりこの手のツールは軽さが命、と思います。

なお。先週中にevernoteが自動更新でちょっとだけバージョンが上がっていますね。更新履歴まじめに読まなかったのですが、WebClipperの動作がずいぶんと安定した気がします。

2010-11-10

Hybrid W-ZERO3 Mailer設定、Willcomサポートに問い合わせ

Hybrid W-ZERO3ですが、MUAがOutlookベースのもの(だけ、esではWillcom版MUAもありました)になって、サーバ側のMBOXと同期するようになりました。初期設定では、メッセージを受信してもサーバのMBOXに残ったままになります。ところがサーバ側MBOX容量が初期設定では1MBしか無いので直ぐにMBOXが溢れてしまい、受信限度に達しましたとかいうライトメイルがわんさかと来てしまいます。 

サーバ側では一ヶ月以上経過したメイル、あるいは端末側で削除されたメイルに対する同期処理、によってメイルが削除されます。このためサーバ側のメイルを消すには一ヶ月待つか、受信したメイルを消す必要があります。しかし普通に使っていればサーバのMBOXは一月を待たずに溢れてしまいます。さりとて端末側でメッセージを削除しなければならない(残しておけない)というのもしゃくな話しです。

一ヶ月より古いメイルは、放っておくと端末側から勝手に消えてしまいます。これを防ぐ方法はHybrid W-ZERO3のFAQに出ていました。受信フォルダとは別のフォルダ(受信フォルダの下では駄目)を作ってそこに移しておけばサーバとの同期がおこなわれず、一ヶ月たってサーバから消去されても端末側には残せるようです。

ですが、これでは端末側にメイルは残せますが、サーバ側にはメイルが残ったままになるので、サーバ側MBOXが溢れる可能性が残ります。端末側の受信フォルダから消去(移動ではなく)したならサーバ側でも消去されるのですが、それでは端末側でメッセージを残すことができません。
で、端末側にはメッセージを残した状態でサーバ側からは消すにはどうしたらいいのか、をウィルコムサポートに聞いてみました。

ちなみにPOPでもIMAPでもサーバにメッセージを残すか消去するかはクライアント側から指示できるようになっていますので、原理的には可能なはずです。問題はMUAがサポートしているかどうか、です。

で聞いてみたところ、「電子メールの設定」の5画面目、「自動送受信」の選択を行なう画面の下の「詳細設定」で「メッセージの削除時」の設定をデフォルトの「サーバから削除」→「サーバに残しておく」に変えると、とても理解しがたい話ですが、サーバから随時削除されるようになる、とのことでした。普通に考えれば有り得ない設定変更ですが、ひょっとすると選択項目の文言がいいかげんで、端末側での削除との同期を取るかどうかの設定なのかもしれません。

あまりに怪しい設定なので、一応いわれた通りに設定を変更して、どうなるかを見守ってみることにします。これでMBOXフル(受信限度)のライトメイルが来なくなれば、設定変更は正しかった、ということになります。なお、同時にサーバ側のMBOXサイズをデフォルトの1MBから15MBに上げています。こちらの名前としてどうよ、という「オンラインサインアップ」から設定できます。普通「オンラインサインアップ」といったら何かの契約を結ぶことになりそうで不安になるネーミングです。実態はサーバ側構成コマンドですね。最初からそういう名前にしておけば安心なんですがね。

で、1MBの時は数日でMBOXが溢れていました。15MBなら計算上は1ヶ月近く持つはずです。ということは、実際にはちゃんとサーバから削除されたのか、時間経過で削除されたのかは判定できない、ということになります。まあ、どこかで大きめのメイルを送りつけてみて、状況を見てみるしかないでしょう。結果については、そのあたりが判明したときに報告します。

2010-11-07

ImageResizer

Hybrid W-ZERO3にPCの画像データを持っていったのですが、W-ZERO3側の表示プログラムではある程度以上大きな画像ファイルは読み込めないのですね。そこで、画像を(できればまとめて)縮小させるプログラムを探してみました。まあ、個別に手動で縮小ならいくらでもあるのですが、まとめて、となると意外と少ないものです。探して(半分は思い出して)見つけたのが Windows PowerToys に含まれている ImageResizer。エクスプローラのコンテキストメニューから呼び出せ、複数選択にも対応しているので実に都合の良いプログラムです。ですが、残念ながらこれはXP専用で Vista では(Windows7でも)動かないのですね。

で、代替品はと探したら、CodePlexImageResize の Vsita/7 版がありました。ここからダウンロードできます。開発中の新版もあるようです。安定版の方をいれましたが、実に具合がいいです。

エクスプローラの「開く」とか「Edit」メニューで起動されるプログラムを変更するには?

エクスプローラの「開く」とか「Edit」メニューで起動されるプログラムを変更するには?

Open(開く)については知っているし情報も結構あって、assoc/ftypeコマンドで指定できるわけですが、じゃあ、Editメニューの方は、というとこれが見つかりません(探し方の問題かも知れませんが)。で調べていったら vim の wiki にそのあたりの解説が載っていました。vimのインストーラはEditメニューでvimが起動されるように設定する機能を持っているので、その背景説明のようです。これによると、Windows Registry の HKEY_CLASSES_ROOT下のレジストリ項目で設定可能とされていました。

そこで、HTMLファイルについてEditでテキストエディタが起動されるように変更してみました。

まずは、.html エクステンションに対するファイルタイプのマップを見ます。これはまあ、ftype でもいいのですが、上のレジストリパスの下に .html エントリ(HKEY_CLASSES_ROOT\.html)がありますので、そこを見ます。私のマシンでは(Chrome入っていますので)、ファイルタイプは ChromeHTML になっています。で、今度はChromeHTMLのエントリを見に行きます。この下の「HKEY_CLASSES_ROOT\ChromeHTML\shell」の下の「Open」「Edit」「Print」がエクスプローラメニューのそれぞれに対応するコマンドの設定になっています。で今回はEditで起動されるcommandを変更します。

現状では「"C:\Program Files\Microsoft Office\Office12\msohtmed.exe" %1」となっています。これは、MSオフィスのHTMLエディタですね。これをテキストエディタ、TeraPadに変えてみましょう。設定する値は「"C:\Program Files\TeraPad\terapad.exe" %1」です。この変更によって、エクスプローラのコンテキストメニューのEdit で無事 TeraPad が起動されるようになりました。だいたい、Editのデフォルトコマンドって気に入らないものが多いのですよね。これで随時好みにあわせて設定していこうかと思います。

なお恒例の注意ですが、レジストリエディタによる設定変更は間違えるとシステムが正常に動作しなくなる可能性があります。以前の値をちゃんとメモしておく、あるいはエクスポートする、などして、元に戻せるようにし、また注意深く編集するようにしてください。

2010-11-06

evernote 最新版の案内

Evernote 4 for Windowsが完成しました! « Evernote日本語版ブログ

というリリース報告がありましたが、リリース報告を読む前にインストールして使っていますので、ちょっとタイミングを逃してしまっています。実際に「さくさく」動くし「シンプル」になっています。ソフトの世界でバージョンが上がって「さくさく」「シンプル」に進化することって滅多にないことですからね。なぜかバージョン上がる→重くなった、動きがとろい、が普通の世界。あと、evernoteのWebClipper(for Chrome)が軽くなってくれれば最高なんですがね。(高速な)Chromeで使っていてもいまひとつ反応が遅いのです。

これを見た後、evernoteのサイトを見に行ったら Windows版が微妙にバージョンアップ(4.0.1.2912→4.0.1.2927)していました。どこが変わったのかなと調べたところ、ユーザフォーラム

  • Improved highlighting
  • Improved handling of tabbing
  • Change the representation of font sizes from pixels to points
  • Improved entry of geo-location
  • Improved copy/paste of plain text
  • Improved default font selection based on language
と書かれていました。基本的にはimprovementレベルで大きな修正はないのでしょう。その証拠にビルド番号は上がってもバージョン番号は上がっていません。一応ダウンロードしたものの入れ替えようかどうしようか考え中です。

2010-11-04

C#勉強中 SQL Server

永らく中断していたC#入門ですがそろそろ再開しようかと。現状、LINQ to SQLに入ったところで中断しています。ここまでは簡単なプログラムを書いて確認しながらやって来たのですが、LINQ to SQLではプログラムだけでは済みません。どうしても実際にDBをいじってみないと話しになりません。で、ではどのようなDBを用意しようかと悩んだところで停まってしまいました。というわけで再開するには実験用のDBが必要になります。で考えたのが、ファイルの重複チェックプログラム。ファイル情報をDBに格納し、DB検索で重複をリストしてみようかと。将来的には重複ファイルのサムネイル表示、削除、移動、とかができるようになるといいかなと。

というわけで、VS Expressでプログラムを書き始めてみました。が、DBマネージャに繋がりません。いつか、どこかでSQLサーバ Express の自動起動を止めてしまっていたようです。まずはSQLサーバ Express の起動からですね。ところが調べてみると以前に入れたはずのSQL Server Expressが行方不明になっています。スタートメニューから消えてしまっています。以前に仕事でSQLサーバ入れて終わって削除した時に一緒に消されてしまったのかも知れません。この辺りの管理メカニズム、いまひとつ信用できません。無条件にExpressからのアップグレードとみなしてExpress版消しているのかもしれません。迷惑な話です。

まずは、残っているSQL Serverのゴミを削除してから、Express版を再インストールしてみることにしました。なんか、ID登録上は以前にインストールしたものが残っていたようで、デフォルトIDではインストール不可でした。変に上書きインストールされたか、消し漏れがあったのか。まあ、このあたり「完璧」なものは滅多にありませんからね。導入、削除を繰り返していると大抵変になってきます。手動だとなんとかできるのですが、誤動作する自動ツール、って最悪ですな。
  
でIDを変更して(後ろに1を付けただけですが)インストールして見たのですが「同一言語ルール」とやらに引っ掛かってインストール失敗しました。インストールメディアとセットアップの言語が一致しないとのことですが、具体的には何のことやら。一致しないならどちらが何の言語か明示して欲しいですね。で、「プログラムと機能」を見ると「Microsoft SQL Server 2008 セットアップサポートファイル(英語)」があります。入れた記憶ないのですがね。とりあえずはこれを削除してから再挑戦してみました。

再インストール途中で確認すると、これはインストーラが勝手に(まあインストールの流れで)入れたものですね。しかし今回は英語版セットアップサポートファイルがインストールされたままでも、最後まで進みました。不思議です。で、インストール後、パッチ等の確認のためWindowsUpdateかけると、また300MB程の更新が。いやはや時間がかかることです。

とトラブルに遭いながら SQL Server Express入れ終わり、自動起動されました。次回はDB操作に挑戦です。

2010-11-03

Hybrid W-ZERO3でPCを繋げる

Hybrid W-ZERO3経由でPCをネットワークに繋いでみようと少々調べ物を。活用記事の、PC接続編が参考になりました。

この記事によれば、Hybrid W-ZERO3では、インターネット共有なる機能でUSB,またはBT経由でのネットワーク共有が可能になるようです。端末側で「インターネット共有」を起動するとPCとの接続(USB/BT)、ネットワーク接続(PHS/3G)の選択画面がでてきます。ここで、対PC、対ネットワークの接続形態を選択して、下の接続ボタンを押下すれば、共有が可能になるとのことです。

まずは、USB/PHSの組み合わせで試してみました(PHSなら変に接続しても追加コスト0ですので)。PC接続の選択ですが、USBで実際に繋がっていないと選択できませんでした。USBケーブルでつないでおけば選択可能になります。ここから接続ボタンを押すとダイアルアップしてPHSでデータ通信が繋がった状態になります(端末側)。なお、選択された状態でUSBが外れているときは、USBケーブルチェック、というメッセージが出るだけで端末側は接続させることができます。最初の選択時のみの制限のようです。

この時PC側ではRNDISドライバが自動インストールされ、RNDISドライバ経由でネットワークに接続します。分類的にはローカル接続(固定LAN)にされています。そういえば昔にパラレルポート経由のネットワーク接続とかがありましたが、それと同じ形式ですね。ですが、最初に試したときはローカル接続のみになって外部に繋がりませんでした。PC側でこのメッセージが出るのはどうもDNSとの通信に失敗した時のようです(DNSサーバにpingして導通確認しているようです)。多分、最初につないだ時は端末側の準備が間に合わなくて最初のDNSとの導通確認に(タイミング的に)失敗したのでしょう。

というわけで、安定して繋げるには、まずはUSBケーブルが繋がっていない状態で端末側を接続状態にしてから、おもむろにUSBケーブルを繋ぐのがよさそうです。こうすれば、ケーブルを繋いだタイミングでPC側でネットワークが有効になって最初のDNS問い合わせが飛びますが、その時点で端末側が既に繋がっているので、無事にDNSからの応答が得られるようです。こうなれば後は安定して外部ネットワークで通信が可能になります。メイルチェック程度でしたらPHSのデータ通信でも充分いけますね。