W 0 騰 P 電単Ⅷ m 町 TIPS tatsuya(tatsuya@exnetcom.com) メッセージのフック (Part1 ) 今回は , メッセージフックがテーマです。 Windows はいろいろなメッセージを元に動作をし ています。何げなくクリックしたマウスの情報 , キー入力したときのキーイベント情報 , タイ 第 18 回 マなどの時間情報。このようなさまざまなメッセージが Widnows を支えています。 Widnows メッセージング W1ndows のメッセージの流れは Fig. 1 の ようになっています。 Wmdows のシステム と各アプリケーションの間にはメッセージ キューなるものが存在し , アプリケーショ ンやシステムが発行する各種メッセージ類 を制御 , 分配しています。メッセージキュ ーがキーポードメッセージやマウスメッセ ージなどを蓄積しています。 マウスメッセージを例にとると , Windo ws のシステムはどこでクリックしたか ? マ ウスは今どこにあるか ? などのマウスメッ セージを常に監視し , 必要なアプリケーシ ョンへそのマウスメッセージを送信してい ます。このときの情報として , ・マウスポタンがクリックされたという 情報 ・マウスの右または左ボタンがクリック されたという情報 ・画面上のどの場所でクリックされたと いう情報 などの複数の情報がメッセージキューに入 ります。 メッセージキューに入ったマウスメッセ ージは , アプリケーションがこのマウスメ ッセージを取得するのを待っています。具 List マウスメッセージの取得 while (GetMessage(&msg, NULL, 0 を 0 ) ) { TranslateMessage(&msg); DispatchMessage ( &msg 体的には List1 のようなループでメッセーシ を取得しています。 メッセージのフック そのまま次のアプリケーションに渡すこと す。利用したメッセージを破棄することも , 何かしらの処理を行うことが可能になりま プリケーションにメッセージを渡す前に 渡すメッセージを横取りする機能です。ア システムが受け取ってアプリケーションに どういうことでしようか ? 簡単にいえば , W1ndows のメッセージをフックするとは WM MBUTTONUP WM_MBUTTONDOWN WM_MBUTTONDBLCLK WM LBUTTONUP WM_LBUTTONDOWN WM LBUTTONDBLCLK マウスポタンクリック関連のメ、、セージ TabIe 1 マウスメッセージ も可能です。また , 俗にいう「サプクラス 化」という仕組みを使っても同じようなこ とができます。サプクラス化とは , もとも とのウインドウブロシージャに新しいウィ ンドウブロシージャをかぶせて使うという イメージです。 フックを利用したアプリケーションでよ くあるものは , キーボード入力やマウス入 力をフックしたものでしよう。指定したキ ーを入力すると , アクテイプなアプリケー ションに関係なく決まった処理を行うなど が考えれらます。 またフックは , システム全体にかけるも マウスの左ボタンをダブルクリックしたことを示す 左のマウスポタンがいつ押されたかを示す 左のマウスポタンがいつ離されたかを示す マウスの中央ボタンをダブルクリックしたことを示す 中央のマウスポタンがいつ押されたかを示す 中央のマウスポタンがいつ離されたかを示す 非クライアント領域での操作を行った場合のマウスメッセージ WM_NCHITTEST WM_NCLBUTTONDBLCLK WM_NCLBUTTONDOWN WM NCLBUTTONUP WM_NCMBUTTONDBLCLK WM_NCMBUTTONDOWN WM NCMBUTTONUP WM_NCMOUSEMOVE そのほかマウスメッセージ類 WM MOUSEACTIVATE WM_MOUSEMOVE マウスカーソルが移動したことを示す 非クライアント領域でマウスの左ボタンをダブルクリックしたことを示す 非クライアント領域でマウスの左ボタンが押されたことを示す 非クライアント領域でマウスの左ボタンが離されたことを示す 非クライアント領域でマウスの中央ボタンをダブルクリックしたことを示す 非クライアント領域でマウスの中央ボタンが押されたことを示す 非クライアント領域でマウスの中央ボタンが離されたことを示す 非クライアント領域でマウスカーソルが移動したことを示す 非アクテイプウインドウ内でマウスがクリックされたことを示す マウスカーソルが移動したことを示す Fig. 1 Windows のメッセージの流れ ・アプリケーションからのメッセージ Windows アプリケーション→メッセージキュー → システム ・ノステムからのメッセー システム→メッセージキュー→ ン Windows アプリケー ション Windows Programming Tips 1 33
Enj0Y Perl Programming モジュレを活用はう HTM L の解析 結城浩 本連載では , モジュールを使って Perl プログラミングを楽しみ ます。今回は HTML ファイルの内容を解析するモジュールを作 ってみます。 っている人は HTML ファイルの管理に頭を スト処理・ファイル処理にも便利な言語な 今回は「 HTML の解析」 悩ませます。レイアウトやサイトデザイン ので , 誰しも「手元のこの HTML ファイル が変わったとしても , HTML ファイルには の山を何とか PerI で処理したい」と考えた こんにちは , 結城浩です。今回は HTML 有益な情報が含まれているので , うまく再 くなります。そして , 汎用性があり , 誰し ファイルの解析を行うモジュールを扱って 利用したいものです。 も欲しがるプログラムは CPAN にいけば見 みます。 HTML ファイルの内容を調べて , また , 日々インターネットのさまざまな つかるものです。 有益な情報を抽出したり , 多数の HTML フ Web サイトをめぐっていると , 手元には 今回紹介するモジュールは , HTML ファ ァイルを統合した別の HTML ファイルを作 たくさんの量の HTML ファイルがプラウザ イルを解析し , そこから必要な情報を取り 成したりします。今回は , Table 1 に示す のキャッシュとして蓄積されます。オフラ 出すためのモジュールです。 モジュールを扱います。 インで読む場合にはもちろん有効ですが HTML ファイルを表示する ここに含まれている情報をうまく抽出して , 自分なりのデータベースとして活用したい ものです。 filter_cat. 個人にせよ法人にせよ , Web サイトを扱 PerI は強力な正規表現を持ち , またテキ まずは , 与えられた HTML ファイルを表 TabIe 1 今回扱うモジュール 示するだけの処理を行ってみましよう。 Li 名前 stl のような HTML ファイルを題材に使い HTML::HeadPa 「 se 「 ます (Fig. 1 ) 。 HTML::Filte 「 HTML::LinkExto 「 List 2 (filter—cat. (l) は , このファイル tom Fig. 1 ファイル tomu 「 a. htm をブラウザで見た様子 ファイル編集仮 ) 表示お知 ; 入リ「ツ—ルー、” アドレス 0 Welcome to My Home Page! 一地 0 ! 動機 解説 HTML の head 部分を解析するモジュール HTML から有益な情報を抽出するモジュール HTML からリンク情報を抽出するモジュール List サンプル HTML ファイル (tomura. html) く mCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 / / 風 5 <htm ト く head> く title>Welcome tO Tomura's home page く /title> く /head> く ! ーー This iS a comment. く h1>WeIcome tO MY Home page!</hl> く h2 > He Ⅱ 0 ! く / h2 > O>Visit <a target=n-blank" href="http://www.textfile.0てqだ>げ甜.textfile.0てgく/少 page and <a target="—topn href="http://www.hyuki.com/">Yuki-sanく/a>'s page. く /P> く address> く a href=nmailto:tomura@textfile.org/>tomura@textfile.0てgく/a> く /address> くP〉く img src=nsmile. gif" wid セ h = ″ 50 ″ height="50"> く /P> く / bod く /html> 物に 00 ! 0 を 1 いト 0 0 pe ( ー灯い 0 に ! E プはを ! ー [ - 向ロ V 朝」Ⅱ設 0 0 はコ知 0 86 C MAGAZINE 2 1 6
る程度まとまった文字を総合的に処理しな いか , というような問題です。このような ければならないからです。プログラムにた 問題は簡単には答えが出せない性質を持っ とえるなら , 入力から 1 文字ずつ文字を読 ていますが , 1 つ重要なことがあります。同 み取り , 作業用のバッフアに保存しておく じ操作を繰り返すと人間は「学習」するの ようなものです で , 結果として熟練することになるのです。 このように記憶された情報は , とくに理 その結果 , 最初は使い勝手のよくない UI だ 由がなければ , そのまま自然に忘れてしま と思っていたものが , 使い込んでいるうち うはずです。 2 ページ前の最初の行が何だ に意外と使いやすいものだと感じるように ったか覚えている人はまずいないでしよう。 なることがあるのです。 これは , 一時的な変数に情報が入っていて , 一度慣れてしまうと , その人にとっては 作業後には使い回されている状態だと考え 慣れた UI はすなわち非常に使いやすい UI と ればよいと思います。人間の行動を観察す なります。本質的には使いにくい UI であっ ると , このようにごく短期間だけ記憶する たせるとおよそ 5 ~ 9 というのが説なのです。 ても , それに慣れている人にとっては , 「本 機能があることがわかります。これを短期 これはプログラム的にいえば , List1 のよ 質的に使いやすいそのほかの UI 」よりも , 現 己憶と呼ぶのです。 うな構造体が短期記憶の処理部分で使われ にずっと使いやすい , ということになって これに対して , 文章を一度暗記したら , ていて , 7 つ以上の情報をリンクするため しまうのです。 ずっと後でも思い出すことができることも には , 負荷の高い別の処理が必要になる , 極端な例ですが , 携帯電話でメールを送 ご存じのとおりです。プログラム的にいえ と考えればよいと思います。 るのに慣れている人はキーポードで文章入 ば , 情報が永続化したのです。ハードティ 力するよりも , 携帯電話のテンキー操作の 慣れと無意識 スクに情報が書き込まれているという感じ ほうが速く操作できる , というようなマン でもよいでしよう。このような記憶は長期 ガがありました。携帯電話のメールが流行 己憶と呼ばれています。 人間は , 同じことを繰り返すとうまくな している現在 , 絵空事と言い切ることもで 今紹介した短期記憶と長期記憶の説明 る , あるいはその動作に慣れるという性質 きない話です。もちろん , 10 あまりの小さ は , かなり大ざっぱなので , もし詳細を知 を持っています。慣れるというのもあいま なボタンだけの操作を強いられる携帯電話 りたいのなら , 専門書を調べてみてくださ いな言い方ですが , 最初のうちは頭でよく よりも , キーポードを使ったほうが効率も 考えて判断しながら行動するが , それを反 操作性もいいことはほとんどわかりきって 復するうちに , あまり考えなくても実現で います [ 。 チャンク きるようなパターン化された行動がとれる 慣れに関していちばん気をつけなければ ようになると考えるとよいと思います。「あ ならないのは , 自分が慣れていることに気 短期記憶を説明するためによく使われる まり考えなくても」を言い換えると , 「途中 づくことです。たとえば , みなさんがもし 概念として , チャンク (chunk) というもの の判断を省略している」ことになります。判 自分の Web サイトをインターネットで公開 があります。チャンクとは情報の塊のこと 断回路のどこかにショートカットが形成さ しているなら , そのデザインが使いやすい です。「人間は一度に 7 つのことを記憶でき れるようなイメージでしようか。理屈はと ものかどうか考えたことがあるかもしれま る」という説を聞いたことのある人もいる もかく , 人間に学習能力があることは , み せん。そのときに , 実際に使ってみて「使 でしよう。その昔 , 東京や大阪の電話番号 いやすいからいいだろう」と感じただけで なさんも体験的に理解していると思うので , は市外局番を除いて 7 桁でしたが , 今では 8 説明は省きましよう。 は不十分なのです。なぜなら , その「使い UI に関して「慣れ」を考えるにあたって重 やすい」という状況は , デザインが優れて 桁になっています。この変更がなされたとき , 要なのは , 「慣れ」がその人にとっての使い いるためではなくて , 単にあなたがそのペ 7 桁なら記憶しやすいが 8 桁だと難しいので はないか , というような意見がありました 勝手を大きく左右するファクタであるとい ージを見慣れているのがその理由かもしれ 実際はそこまで細かい話ではありませんが うことです。 ないからです。 UI のテストにおいては , 第 この 7 というマジックナンノヾ ーには実験的 UI の世界では「どちらが優れているか」が 三者に使ってもらうことも基本になります。 な根拠があるといわれています。短期記憶 問題になることがよくあります。たとえば , 使い慣れた UI を自分でテストすると , 正し で保持できるチャンクの数は 7 個 , 幅を持 Macintosh と Windows はどちらが使いやす い結果が得られないからです。 14 C MAGAZINE 2001 6 List チャンク構造体 1 struct chunk { void *datal ー void *data2; void *data3; void *data4; void *data5; void *data6; void *data7 ー 0 1 一一 1 ロ 一三ロ
その昔パソコン通信というサービスがあっ て ( 今もあるらしい ) , 双方向性があるメデ ィアということで一躍話題になったものだ が , 実はインターネットの場合もフィ バックが簡単だというのがきわめて大きな メリットである。サイトの中に , ちょっと 気付いたことでもお知らせくださいとか 連絡先のメールアドレスを書いておくだけ で , けっこう教えてくれる人もいる。 実は私の場合はメインのサイトがどうも 凍結状態で , 裏ページと呼んでいる戯言日 記のようなサイトが真のメイン状態なのだ が , この日記にちょっとしたことを書いた ら全然知らない方からメールが来ることが あってありがたい。できるだけ返事は書き たいと思っているのだが , ずばらなもので 忘れてしまっているのもあると思う。申し わけありません。でも , メールはちゃんと 読んでいるし , ウイルスメールはちゃんと プロバイダに連絡しています。 どうもアドレスを書いたら spam とかウ イルスメールもわんさか来るのは仕方ない らしい。ウイルスメールが来た場合 , 送信 元のプロバイダに連絡してみると , プロバ イダによって対応の方法が違っておもしろ 今までいちばんウケた某プロバイダの場 合 , まずメールのヘッダを送ってみたら , それだけではわからないからメールまるご と回送しろという指示が来た。たしかに ヘッダだけでは内容がウイルスなのか , そ Fig. 1 メールのヘッダ れとも単なる人騒がせな無害のプログラム なのかわからない。にしても , ウイルスそ のものが添付されているメールを回送する なんてのは , どうも穏やかではない。回送 したあとに裏切られて , phinloda からウィ ルスが送られてきた ( いや , そりやそのと おりなんだけど ) などとその筋に報告され たらどうしよう , とか奇妙なことも一瞬考 えたりしたが , とりあえず送れというのだ から送らないとかえって怪しいかと思って まるごと回送してみた。 すると , ていねいな返事がさっそく返っ てきて , 添付ファイルは次のようなウイル スであると思われます , とかいう。それは 私が最初に教えた情報のとおりだろ。ずっ こけた話だが , 対応としてはべつにおかし くない。なお , 削除することをお勧めしま すとのことで , たしかにそのとおりですけ のない場所 ちなみに , ウイルスらしきメールという のは , 私の経験では本文内容なしの添付フ ァイルだけでやってくる。これをウイルス 検査ソフトで調べると何か感染していると いうレポートが出るので , 具体的なウイル スの名前をメモしておいて , 該当のメール のヘッダ部分を調べる。 Netscape Messen ger なら , 「表示」メニューの「ヘッダ」を「す べて」に指定すればヘッダが表示される。 Received: f 「 0n1 aaaaa. aa. aaa. aa. jp (aaaaa [nnn. nnn. nnn. nnn]) by * * * . * * * . * * . jp ( 8.9.3 + Sun / 3.7W ) with ESMTP id RAA01737 fo 「 <phinloda@* * . * * . * * . * * > : Sun, 15Ap 「 2001 17 : 49 : 59 + 0900 (JST) Received: from bbbbb. bbb. bb. jp by aaaaa. aa. aaa. aa. jp (3.7W/HMX-13 ) id RAA04116f0 「く phinloda@* * . * * . * * . * * > : Sun, 15Ap 「 2001 17 : 49 : 58 + 0900 (JST) Received: f 「 om computer (XXXXX-XXXXX XXXX 0 「 . jp [nnn. nnn. nnn. nnnl) by bbbbb. bbb. bb. jp ( 8.9.3 / 3.7W ) id 日 AA24645 fo 「 く phinloda@* * . * * . * * . * * > : Sun. 15Ap 「 2001 17 : 49 : 49 + 0900 (JST) その最初のいくつかは , 「 Received: 」で始 まっていると思うのだが , おそらく , 時刻 が新しいものから順に並んでいると思う。 メールがサーバを経由するごとに「 Rece ⅳ e d: 」の情報が追加されるのだ。もっとも新 しいものは , おそらく使っているプロバイ ダのメールサーバから送られてきたという 情報になっているだろう。問題は , もっと も古いもの , つまり最初に送った情報であ る。 Fig. 1 は実際に送られてきたウイルスメ ールのヘッダの一部を伏せて紹介したもの だが , Received: 行を見ると from ( 1 ) by ( 2 ) with ( 3 ) fo 「 ( 4 ) のような 4 つの情報のあとに日付が付いて いる こで問題は , いちばん下の行の「 Recei ved: from computer (XXXXX-XXXXX. XXX X. or.jp [nnn. nnn. nnn. nnn] ) 」という情報だ こがウイルスメールの送信元である。そ こで , こんなメール来たけど , どうよ , と いう問い合わせをプロバイダに送るわけだ が , じゃあどこに送るかというと , この例 だと XXXXX-XXXXX. XXXX. or.jp を管理して いるプロバイダに送ればよい。たとえば , 何々 @nifty.ne.jp というメールアドレスな ら , プロバイダが@ni卿だとわかるから , @ni卿のしかるべき部署に連絡すればよい のである。 ところが , この「しかるべき」宛先が実際 どこなのかわからないのだ。ちなみに , ウ イルスメールを受け取ったら連絡を , とい うような指示が書いてあるサイトはまだ見 たことがない。経験的に , プロバイダの連 絡先は「お問い合わせ」という名前のリンク 先にメールアドレスが書いてある場合が多 いのだが , 個人的にはこういうときはどう するかといえば , そりやもう黙って削除し て何もなかったことにするのがいちばん楽 だと思う。 ( フィンローダ @nifty FPROG SYSOP) フィンローダのあつばれご意見番 167
00 ① ユーンタフェイス 求めて r¯使いやすい 「あ」「か」「さ」・・・のように , 各段の見出しを くれる仕組みになっています。もちろん , ザがどう考えるかを想定できるので , UI は 付けてみます。 Fig. 12 のようになりました。 「五十音順」と書いておいてもかまわないし , それに基づいたデザインにするのが望まし このページには「五十音順」という情報は 原則的にそのようにすべきだと思います。 いのです。それをあえてしなかった理由は , 表記されていませんが , 見出しを付けるこ もちろん , 実際に五十音順に並んでいるこ 最初の画面上にできるだけ多くのリンクを とで , 利用者は勝手にそのことを想像して とは重要です。見出しを付けた結果 , ュー 表示した状態にしたかったからです。五十 音順だという情報は , このページを 1 度使 Fig. 13 1 画面に収める えばわかるので , 2 度目からは有益な情報 とはなりません。そのことを表示すること ファイル ) 編集転 ) 表示ジャンプゆ O 。ⅧⅧ朝 0 ヘルプ は、〉 3 蝨のは 0 第 で , 画面が狭くなってしまうと , むしろ使 ' カクマーグ 颯所 : れは / D c ui / j 叩 5-3 い勝手に影響を与えるような気がしたので 都道府県 す。 実は , このリンクベージに使った表記は , 各 Web サイトのタイトルをそのまま引用し ています。リンクがタイトルではなく , 都 道府県名の五十音順に並べていることは重 要です。おそらく , 岡山県のサイトを見よ うと思った人は , 「岡山県」という情報を意 識しながら検索するはずです。実際には , 岡山県の公式サイトの名称は「晴れの国お かやまへようこそ - 岡山県 - 」なのですが そうだとしても , 岡山県のサイトを探そう としている人が , 「岡山」ではなく「晴れの 国」で探すということはめったにないはず です [ 注 15 ] [ 注 15 ] 検索サイトを考えると , 公式サイト名 は , 都道府県名で始めるのが望ましいと思う。 1 画面に収める Fig. 12 のような修正によって , 少しは探 しやすいデザインになったでしようか。ま だこのページには大きな欠点がいくつもあ ります。画面のサイズにも依存しています が , スクロールしなければ画面上に現れな いサイトが多数あるということは , 操作性 を大きく損ねています。画面をスクロール させるという操作は , いったんマウスポイ ンタをスクロールバーの上に持っていき , ドラッグまたはクリックの操作を行うこと になります。これはユーザにとってかなり の負担になります。スクロールという処理 自体が , 画面に表示されている内容の大幅 な変化を伴うので , 操作性を大きく損なう 特集 1 使いやすいユーザインタフェイスを求めて 29 都県 - Netscape ( 関連サイト わ あ た 月い E; 第も忘二 ; 獗 ! 証を反 ARA ペペペ . 可コさ Fig. 14 見出し文字の位置 ファイル編集表示 ( Ⅵジャンプ 0 ヘルプ凹 は ) 3 のはは 0 第 ' 、第 ' ブックマーりえ場所 filew D cm ん醜 1-33. h 都道府県 都垣府県一 Netscape ャ ( 関達サイト 朝コ : た あ ペペペ な 一ペべペペ ま や わ和歌ⅲ県市ームページ
5. 専門誌の広告 6. 書籍 7. 各メーカー・べンダのホームページ 8. 各メーカー・べンダの営業担当の説明 9. 各メーカー・べンダ・ SI 企業のセミナー 10. 展示会の情報 11. メーリングリスト等の意見 12. SI 企業のアドバイス 13. その他 ( Q8. 職場におけるハード / ソフトの決済可能金額はいくらですか。 1.5 万円未満 2.5 ~ 10 万円未満 3. 10 ~ 20 万円未満 4.20 ~ 30 万円未満 5.30 ~ 50 万円未満 6.50 ~ 1 冊万円未満 7 コ開万円以上 8. 該当予算なし Q9. 本誌の購入スタイルは ? 1. 定期購読している 2. 毎月書店で購入している 3. 記事内容によってときどき購入 4. 付録 CD - ROM 内容によってときどき購入 5. 今回初めて購入 Q10. 今月号で , よかった記事の番号とその理由をお選びください。 ( 3 つ まで ) 己事タイトル 1. 特集 1 「ユーザインタフェイス」 2. 特集 2 「 MacOSX 」 4. 実践 C + + ゼミナール 3. Get lnfo C World 6. プログラミング相談室 5. スタートアップ Java 8. こび「ククのオプジェクト工房 7. Standard C/C + + 10. Ruby マスターへの道 9. E 可 oy PerI Programming 12. アルゴリズムラボ 11. プログラミングの宝 14. ネットワークプログラミング 13. Enter The 3D Programm ing 15. Linux Programming Tips 16. Windows Programming Tips 18. ローテク講座 17. Java Programming Tips 19. 特別記事「 i アプリの作成」 20. レポート「 Forte for Java 2.0 」 21. MONTHLY HEADLINE 22. C MAGA Bookends 23. 学問のススメ 24. あつばれご意見番 25 ℃マガ電脳クラブ 26. READERS'ROOM 選んだ理由 l. 業務に役立った 2. 読みやすく , 基礎知識が身についた 3. テクニックが理解できた 4. 最新技術動向がわかった 5. 興味を持っている分野・内容だった 6. 疑問が解決した Q11. どのような分野に興味をお持ちですか。 3 つまでお選びください。 1. 文字処理 2. 画像処理 / CG 3. AI / 知識情報処理 4. ミドルウェア 5. web/ インターネット 6. ファイル管理 / データベース 7. アルゴリズム全般 8. 暗号化・セキュリティ 9. 移植 ( 機種間 / 言語間 ) 10. 音楽 /MIDI Ⅱ . 開発環境 12. CASE ツール 13. 組み込みシステム ードウェア制御 15. デノヾッガ・テストツール 16. 通信 18. ゲーム 19. デモ ロ . GUI 20. Java 21. UNIX 22. Linux 23. X-Window 24. 情報処理試験 / 資格試験 25. コンポーネント Q12. 以下のリストのうち , ご購読されている雑誌をお選びください。 ( 4 つ まで ) 1 . NETWORK MAGAZINE 2. lnterface 3. Java World 4. Linux JAPAN 5. Linux 、 Vorld 6. MSDN Magazine 7. Software Design 8. UNIX Magazine 9. UNIX USER 10. Visual Basic Magazine 11. Windows2000 World 12. 日経 Linux 13. 日経 Windows 2000 凵 . 日経インターネットテクノロジー . 日経オープンシステム 16. 日経コンピュータ ロ . 日経ソフトウェア 18. 日経バイト 19. その他 ( QI 3. 本誌のホームページ「 C MAGAZINE fo 「 Web (http://cmaga.zdnet.co. jp / ) 」をご存じですか。 1. 利用したことがある 2. 知っているが , 利用したことはない 3. 知らない 「 C MAGAZlNEforWeb 」に望むことはなんですか。 ( 3 つまで ) Q 14. 1. 製品情報 2. イベント情報 3. プログラマ向けの最新ニュース記事 4. プログラマに役立つツール・ライプラリなどのダウンロード 5. ソースファイルのダウンロード 6. 最新のニュースやプログラミング活用情報をお届けする電子メール 7. プログラミング関連の掲示板・質問コーナー 8. 読者メーリングリスト 9. 本誌バックナンバー記事の検索 IO. 本誌バックナンバー記事のデータダウンロード ( PDF など ) 11. その他 ( 0 アンケート項目 Q 1 . C ℃ + + のプログラミング歴 : 該当するものをお選びください。 I. 未経験 2. 1 年以内 3. 3 年以内 4. 5 年以内 5. 10 年以内 6. Ⅱ年以上 Q2. C 言語の習熟度 : 該当するものをお選びください。 1. これから学習 2. 文法を理解できる 3. 小型のツールが組める 4. 中型アプリケーションが組める 5. システムの記述ができる Q3. あなたのプログラミングの目的は何ですか。 1. 業務として , ソフト開発を専門としているため 2. 業務の一部として , 必要に応じて開発を担当している 3. 技術研究開発のため 4. 学習・スキルアップの一環として 5. 仕事とは関係なく , 個人の趣味で 6. プログラミングはしない Q4. 主に使用されているプログラミング・ツールを 3 つまでお選びください。 1. Visual C + + 2. Watcom C/C 十十 3. C + + B uilder 4. Power 十十 5. CodeWarrior 6. VisualBasic 8. Java/Java 系 RAD 7. Microsoft Office の VBA 9. DeIphi Ⅱ . Web 開発ツール 10. PowerBuilder に . COBOL 13. アセンプラ言品 14. その他 ( 15. 使用していない Q5. 現在 , 業務または個人で使用されている OS マシン環境は何ですか。 3 つまでお 選びください。 I. Windows 95 / 98 2. Windows Me 3. Windows NT 4. x 4. Windows NT 3. x 5. Windows 2000 6. Linux 8. その他の PC-UNIX 9. PC 以外の UNIX 7. Free BSD 川 . メインフレーム 12. その他 11. Mac OS Q6. 職場でのソフト / ハード購入の際の役割を教えてください。 I. 購入を決定・承認する 2. 購入案をまとめる 3. 購入案をまとめる際に意見を求められる 4. 関与しない Q7. Q6 で 1 ~ 3 と答えた方にお聞きします。 製品購入の際に参考にする情報源は何ですか。 3 つまでお選びください。 1. 友人・知人からの情報 2. 部下からの意見 3. 自社システム担当部署の意見 4. 専門誌の記事 C MAGAZINE 2001 年 6 月号アンケートはがき ・ 6 月号に対する感想をお聞かせください ( お手数ですが , 以下のすべての項目について該当する番号を選んでご記入ください ) QI ロ Q2 ロ Q3 ロ その他 Q8 ロ Q9 ロ Q 己事ロ記事ロ記事ロ 理由ロ理由ロ理由ロ Q11 ー Q13 ロ Q14 ー ( ニ = ロ その他 その他 その他 ・過去もっとも興味深かった ( もう一度読みたい ) 記事・特集 ・今後希望する記事・特集 ・ご要望・近況など ( どのようなことでもけっこうです )
00 ① ユーサインタフェイス 求めて r¯使いやすい があれば , それを見直してみてください。 ン」を理解すれば , UI をより理解すること の一種ということになります。 従来 , UI の設計は専門家の仕事でした。 が可能になると思われます。ただ , そのた また , ちょっとした欠陥に慣れてしまって めにはコンピュータに関する学問とは異な いて , ふだんから不具合があることを忘れ 機械を作ることのできる人は限られている る分野の理解が必要です。とくに , 行動心 からです。しかしコンヒ。ュータが普及する てしまっていることも意外とあります。ア 理学や認知心理学のような心理学系の知識 プリケーションがどんなに優れた UI を持っ につれ , 少しその様子が変わってきました。 や , 人間の特性を研究する人間工学のよう GUI を設計するのはプログラマや SE ですが ていても , このような環境要因がダメでは そのような人たちが必ずしも UI の専門家で な分野の知識が重要になってきます。もち だいなしです。 あるとは限りません。きわめて簡単な UI の ろん , これらの分野を勉強するのも一案で 基本でさえ知らなければ , どうしようもな すが , 最近では UI だけでもひとつの学問の い画面デザインを作ってしまうこともしば 分野として成立するようになってきました しばあるのです。さらに , コンピュータか そこで UI に関して書かれた書籍を調べてみ 誰でも使える時代になるにつれ , 個人レベ 人間をシステムとしてモデル化する試み るのがわりといいのではないかと思います ルで簡単にプログラムを作ったり web サイ は , かなり昔から行われてきました。みな ただし , そのような分野のべースになって さんが得意分野のはずのコンピュータをモ トを公開する機会が増えました。 いるのは , やはり前述した心理学や人間工 デル化するとわかりやすいと思います。す UI に関する予備知識をまったく持ってい 学なので , そちらの分野の理解もある方が なわち , 入出力 , 演算装置 , 記憶装置とい ないと , 知らないうちに非常に使いにくい 望ましいでしよう。 ものを作って広めてしまう危険性がありま しかし , 今さら研究する暇も時間もない , うようにモデル化すればよいのです。 す。また , ちょっとした工夫でずいぶん使 という人が多いと思います。ある程度「よ 入出力は , 感覚器官からの情報をやりと いやすくなることに気づかず , コミュニケ い UI 」を設計するには , ある程度の専門的 りすることに対応させればよいでしよう な知識があれば , 精通していなくてもそれ 何かを見た結果を行動に反映するには , ま ーションの機会を失ってしまっているかも ず , 目から情報を得る必要があります。 しれません [ 注 1 ] 。 なりに何とかなるものです。本稿が , その UI の知識への重要性は , ますます高くな れは , ビデオカメラからの情報を PC に取り 「ある程度」のおおまかな知識を得るきっか けになれば幸いです。 込むのと同じことです。演算装置は , その りつつあります 刺激に従って , 脳などの神経系が判断を行 [ 注 1 ] 世の中に非常によく広まっている GUI の 中には , 首をかしげざるをえないような設計 ユーサインタフェイスを見直す前に うことに対応させればよいでしよう。記憶 のものが意外とたくさんある。先例が必ずし 装置は , 人間が情報を記憶する機能に対応 も優れているとは限らないことに注意か必要だ。 本論とはあまり関係ないのですが , とく させることになります。 関連する分野 に GUI を見直す前に再考しておいてほしい コンピュータという存在が , ある意味人 間をまねしたものとして解釈されることが ことがあります。それは , 物理的な環境が ありますが , そう思えば対応させやすいの UI を完璧に理解するには , 少なくとも 3 適切であるかということです。 ではないかと思います。つまり , 情報処理 たとえば , 作業環境の明るさ , 静けさ , つのことを理解しなければなりません。す の視点から考えれば , 人間はコンピュータ なわち , 「ユーザを理解すること」「ユーザ 温度 , 湿度などは作業に適した状況になっ に似ているし , コンピュータは人間に似て の操作するオプジェクト ( たとえばコンピ ているでしようか。作業時の姿勢や , いす いるということです ュータ ) を理解すること」そして「インタフ の高さはどうでしようか。机の広さは十分 ェイスそのものを理解すること」です。と でしようか。画面の明るさは十分で , 写り 短期記憶と長期記憶 ころが , この 3 つのどれもが非常に奥が深 込みがなく , フォーカスはちゃんと合って く , 完璧ざを求めるには難しい分野でもあ いるでしようか。キーポードは正常に動作 短期記憶とは , 大ざっぱにいえば , 一瞬 ります。少なくとも , とてもしろうとが手 していますか。押しにくいキーがあをり で忘れてしまうような種類の記憶のことで に負えるものではありません。 しませんか。マウスは思ったとおりに操作 す。あなたはこの文章を読んでいるとき , この記事を読んでいるみなさんは , おそ できるでしようか。ボタンのクリック感が 目で見た文字や言葉を , まずどこかに記憶 らくコンピュータについての理解度は人並 変だったり , ポールが汚れていてひっかか しているはずです。文章を解釈するために み以上だと思います。したがって , ユーザ ったりしないでしようか。 は , 1 文字だけ認識できても無意味で , あ を理解する , すなわち「人間の行動パター このほかにも , 作業に影響しそうな要因 特集 1 使いやすいユーザインタフェイスを求めて 13 人間というシステム
可 OY PerI Programming モジュールを活用はう ・@links = $obj->links; なら , HTML::Filter のサプクラスを自分で タイトルの取得 作る必要はありません。それは , HTML:: HTML::LinkExtor では , コールノヾック関 LinkExtor という専用のモジュールがすで 数を設定して要素を自分で集める方法と , にあるからです。 HTML::LinkExtor が集めてくれた要素をメ title. ソッド links を使って取得する方法のふたっ extor_link. が使えます。 こでは links を使っていま 今度は HTML ファイルのタイトルを取得 List 5 (extor—link. (l) はファイル tomura. h す。 するスクリプトを書いてみましよう。 HT tml に含まれているリンク情報を抽出して このメソッドの戻り値は , ML のタイトルは title 要素の中に書かれて 表示するスクリプトです (Fig. 5 ) 。よけい います。 title 要素は head 要素の中にあるの [ 要素名 , 属性 , 値 , 属性 , 値 , … ] , 複雑になっているようですが , これは HT で , head 要素を取り扱うための HTML::He [ 要素名 , 属性 , 値 , 属性 , 値 , ML::LinkExtor が a 要素だけのリンク情報で adParser を使うと便利です。 [ 要素名 , 属性 , 値 , 属性 , 値 , はなく , img 要素のリンク情報も抽出して List 6 (title. (l) はファイル tomura. html の いるからです。 タイトルを表示するスクリプトです。 のような形式のリストになります。 では , HTML::HeadParser の header メソッ スクリプトの内容 ドを使ってタイトルを取得しています ( Fig. まず , 戻り値のリストの各要素は配列の List5 の内容を解説します。 リファレンスです。そしてその配列のリフ 6 ) 。 ァレンスの最初の要素は , 要素の名前 ( た ・ new HTML::LinkExtor Fig. 5 List 5 の実行例 とえば a や img など ) になります。配列の残 りの要素は , 属性と値の組がその順序で登 HTML::Filter のときと同じように , new C :*WORK> perl extor—l ink. a : href = > http://www.textfile.org/ を使って HTML::LinkExtor のオプジェクト 場するものとなります。 a : href = > http://www.hyuki.com/ を 1 つ生成し , 変数 $ obj に代入します。そし PerI で複雑なデータ構造を構築する場合 a : href = > mai 比 0 : tomura@textfile.org て parse—file メソッドを使ってファイルの解 には , 必ずリファレンスが登場します。間 : src = > smile. gif 析を行います。 違えないようにご注意ください。 リンク情報を表示する (extor 」 ink. pl) use HTML: :LinkExtor; $obj = new HTML: :LinkExtor; $obj->parse—file ("tomura. html") @links = $obj->links; foreach $aref (@links) $tag = shift @$aref; ⅶ e (@$aref ) ー $attr = shift @$aref; $url = shift @$aref; print $tag, , $attr, ←実行 List Fig. 6 List 6 の実行例 C:%WORK> perl title. pl We ー come し 0 Tomura' s home page ←実行 List タイトルの取得 (title.pl) use HTML: :HeadParser; $0bj = new HTML: :HeadParser; $obj->parse—file ("tomura. html") print $obj->header ( 土凵 e ' ) TabIe 2 HTML::Filter の主なメソッドー覧 メソッド declaration($self, $decl) 内容 マークアップの宣言 ( 通常はく ! DOCTYPE … > ) を見つけたときに呼び出される コメント ( く ! -- -- > ) は無視される タグの開始で呼び出される ・・・小文字の要素名 $tag ・ $attr ・ ・・・属性のハッシュのリファレンス $attrseq ・ ・・・属性のキーが登場順に格納された配列のリファレンス $origtext ・・・・・元のテキスト タグの終了で呼び出される ・・・小文字の要素名 $tag ・ $0 「 igtext ・・・・・・元のテキスト テキストを見つけたときに呼び出される コメントを見つけたときに呼び出される 始めと終わりの - - は除去される sta 「 t($self, $tag. $attr, $attrseq, $origtext) end($self. $tag. $origtext) text($self, $text) comment($self, $comment) 89 Enjoy PerI Programming モジュールを活用しよう
れるカーネルを拡張するためのプログラム もありますが , これは「カーネル環境」層に 埋め込むプログラムとして開発します。 Ma c OS X は以前のバージョンと違い , カーネ ル層が Dar ⅲに置き換えられたため , 以前 のバージョンのデバイスドライバや機能拡 張はまったく使えません。それどころか 根本的な考えが違うため , デバイスドライ P A バの設計概念を流用することさえもできま せん。 ポイン うとするプログラムがどの階層やモシュ メラ構造になっている。自分が開発しよ Mac OS X の構造は一枚岩ではなく , キ R ールを利用するのかを認識しておこう。 T 開発環境の準備 標準添付される開発環境 Macintosh でプログラムを開発する際に は , 「情報不足」との戦いを覚悟しないとい けません。というのも , たとえば W1ndows のプログラムを解説した書籍や雑誌は過剰 と言えるほど市場にあふれかえっています。 これに対して Mac ⅲ tosh の場合は , 出版さ れている書籍のほとんどがいわゆる「ユー ザ本」ばかりで , プログラム開発に関する ものはほとんどないか , たまにあっても内 容が古いためにあまり参考にならないかで す。したがって , 必要な情報は必然的にイ ンターネット上で探すハメになります。も ちろん , これらの情報はほとんどが英語で す。以前 , 本誌で Macintosh プログラム講 座が連載されていた時期は , lnside Mac と いう API 解説書があったり , THINK-C や Sy mantecC + + という開発環境があったのです が , これも「遠い」過去の話です。 現状は lnside Mac に相当する API 情報は インターネットの AppIe の開発者サイト ( コ ラム 2 ) を参照しないといけませんし , THIN K-C や Symantec C + + はとっくの昔に新規開 発が中止されています。現状では CodeWar rior が圧倒的なシェアを誇っていますが 3 イ C MAGAZINE 2g1 6 徐々に REALbasic のシェアが増えつつある ようです。 ところが Mac OS X では , 驚くべきことに Developer Tools CD という開発環境の CD - R OM が標準添付されました。以前の Mac OS では HyperCard というツールが標準添付さ れていた時期もありました。しかし , Hype rCard は実行速度が遅く , 期待するほどの パフォーマンスも得られなかったため , い つの間にやらすたれてしまいました。 今回 Mac OSX に標準添付された開発環 App の開発者サイト Macintosh 用のプログラム開発者にとっ て , Apple Developer Connection ( 以下 , A http://developer.apple.com/ja/ は , 必読のサイトと言えます。ここからた どれるべージに , 開発に必要なドキュメン トやツール , サンプルコードが公開されて います。また , ADC 会員になると、ツール の版のダウンロードやいくつかのサービ スを受けられます。詳しくは FAQ のペー http://developer.apple.com/ja/faq/ をご覧ください。 コラム 2 境は , UN Ⅸのコマンドラインツールや NeX TSTEP, OPENSTEP で好評を得た project Builder , lnterface Builder が含まれていま す。 5 つの A 円 現時点で MacOSX 用のプログラム開発 は , おおまかに ( 1 ) アプリケーションプログラムの開発 ( 2 ) テパイスドライバ , Kernel Extention の開発 の 2 パターンが考えられます。 もちろんほかにもプログラムの種類はあ りますが [ 注 3 ] , 現時点でもっとも需要が大き いのは , この 2 つでしよう。 このうち ( 2 ) に関しては今のところ project BuiIder を使って開発することになります し , 利用するインタフェイスも 1 種類しか ないので , 迷う余地はありません。 これに対して , ( 1 ) のアプリケーション 開発は何パターンかに分類できます。それ は「どういう開発ツールを使うか」という分 類と「どの I を使うか」という分類です。 いろんな意見がありそうですが , MacOSX の開発においては , まず「どの API を使うか」 を最初に決めておかないと , 後々大変なこ とになると思われます。というのも , アプ リケーションには , Classic, Carbon, Coc oa, Java, BSD の 5 つの API が利用できます が , これらは , 「お見事 ! 」と言っていいく らい考え方がバラバラなのです。このバラ バラさが , まさにキメラな構造である Mac OSX の内情を表していると言ってもいいほ どです。 以下は 5 つの API について筆者なりの注釈 です。多少 , 皮肉つばい表現で鼻につくか もしれませんがご了承ください。 [ 注 3 ] スクリーンセーバ , フレームワーク , プリンタドライバなど CIassic かって T001b0X という愛称で呼ばれてい たものです。もはや「過去の栄光」であり ,
00 ① ューンタフェイス 求めて I¯使いやすい 東」という表現は文脈上かなりへンです。し にマウスポインタを移動し , マウスポタン 件に遭遇したことはないでしようか ? たがって , 文脈情報を使って , 次の行が を押す , というような一連の操作で実現さ れは , 両者のボタンが小さいうえに近接 「らは」で始まる行であることを判断するこ れています。慣れればこの連携操作はとく していることが原因で , あわてて押したら とができるわけです。 に意識しなくても行えるようになりますが , 実は隣のボタンを押したことになってしま [ 注 9 ] 単語レベルで認識することがある。「単 画面設計によっては非常に使いにくいアプ ったのではないかと , 最初考えていました。 語」という表記を , ( 1 ) 「単」という漢字の認 リケーションにしてしまう危険があります。 この種の誤操作を防ぐアイデアはいろい 識 , ( 2 ) 「語」という漢字の認識 , ( 3 ) 合わせて こで注意すべき点は 2 つあります。誤 ろ考えられますが , 基本的には , 隣のボタ 「単語」という言葉の認識 , という 3 段階では なく , 「単語」というパターンを一度で認識す 操作を少なくすることと , スムーズに操作 ンを間違えて押さないためには , ボタンと る場合である。「少しずつ」という表現は , そ できるように配置することです。 ボタンの間隔を空けてやれば OK です。ポ のことを想定している。 タンの間に空白地帯を置くことは , 誤操作 ・右ぞろえ ・誤操作 を防ぐために重要です。そこを押した場合 右ぞろえの表現と , 右がそろっていない ボタンに限らず , 何か目標になるオプジ にどちらを押したことにもしない , すなわ 表現とでは , どちらが読みやすいでしよう ェクトをポイントするという操作において ち , 何も押さなかったことにすることで = ーザのあいまいな指示を拒絶することカ : か ? Fig. 4 を見てください。英文の場合 は , 目的のオプジェクトをポイントするこ 単語の間隔を調整して左右をそろえること とができない ( 空振り ) 失敗がまず問題にな できるからです。何か避けることができな がよくあります。見栄えに関しては , 右端 ります。さらに , 場合によっては , 間違っ い理由でデザイン上どうしてもボタンが接 がそろっていることが有利に働きます。ま たオプジェクトをポイントしてしまう ( 誤 近してしまう場合 , ボタンの端の境界線や た , 視線の移動を考えてみると , 常に一定 操作 ) の問題が発生することがあります。 その付近を押した場合に無視してもよいく の距離を移動することになるので , そのほ 後者の誤操作に関しては , 主にオプジェ らいだと思います。ただし , その場合は , うが疲労が少なくて済む可能性はあります。 クトが小さすぎたり近接しているために ユーザはボタンを押したつもりなのに実際 ただし , その画面をもし何度も見る性質 隣のオプジェクトを操作してしまうという は押されていないことになるので , ボタン があるなら , 右端がそろっていないという 失敗と , 完全に違ったボタンと間違ってし が押せる状態になっていることをフィ ことは , 目印に慣れるという可能性を持っ まった結果の失敗の 2 種類があります。 バックで示すなどの工夫がいることに , 注 ている点で有利になることがあります。識 隣のオプジェクトを操作する失敗の典型 意が必要です。 別情報としては , 「長い行の近く」とかいっ 的な例は , Windows の典型的なアプリケー ウインドウのクローズボタンは , それに た情報が , 無意識のうちにどこかに記憶さ ションに一般的に見られる , ウインドウの してもよく間違えるので不審に思っていた れて , 後で検索するときに使われているか リサイズボタンとクローズボタンの誤操作 のですが , @ni町r のプログラマズフォーラ もしれないのです。 です (Fig. 5 ) 。シンポジウムの会場のプレ ムの電子会議室で教えてもらった情報で , ゼンテーションやパソコンショップのデモ この疑問が氷解しました。実は , ウインド ボタン配置の方針 ウのクローズボタンの左にある空白部分を ンストレーションで , 開いているウインド ウをなぜかウインドウ右上にある全画面ポ クリックすると , W1ndows はその左のボタ GUI では「ボタンを押す」という操作が多 ンを押したとみなすのです。どういう目的 タンを押して一瞬全画面モードにした後 , 用されます。この操作は , たとえば , ユー でそのような仕様にしたのかわかりません さりげなく隣にあるウインドウを閉じるポ ザが何か目標となるボタンを認識し , そこ が , これではわざわざ空白を空けてあるの タンを押して画面から消去する , という事 Fig. 5 ウインドウのリサイズボタンとクローズボタン① ウインドウのリサイズボタンとクローズボタン② この部分をクリックしたら , 左のボタン をクリックしたことになってしまう 23 特集 1 使いやすいユーザインタフェイスを求めて