データ - みる会図書館


検索対象: UNIX MAGAZINE 2006年1月号
52件見つかりました。

1. UNIX MAGAZINE 2006年1月号

SC 北 好評発売中 ! プログラミング・テクニック 生きたプログラムから学ぶ実践的手法の数々 図 10 CPU とデバイスのキ売 スタック プログラミング テクニック リ N Ⅸコマントのソースコートにみる 録フロクラミンク手法 eat 多物見第和 0 P head inetd ・多治見寿和著 ーれ 0 ′ 0 はうをいうあ 0 産第の第 1 ーい第鵞ををド、・ ( ・ B5 判、 240 ページ をれてをたリットつよ′ tcsh こをを : ・・とい 0 た、を をーに一あり一をこには 70 身 ムををに・な新・と ・ ISBN 4-7561-4389- X , りと・ ) 第れマい第れ vipw 要、 t ′ ・ 1 , 890 円 ( 税込み ) S ロー フリーの CJN Ⅸやアプリケーションのソースコードを 見ながら、プログラミングにおける " 名匠の技 " を学 ぼうというのが本書の目的です。長い年月をかけ、 多くの人の手ですこしすっ改良されてきたソフトウ ェアは洗練の度合いを増し、名匠の手になる工芸品 といった趣があります。そこには、プログラム開発 に必要な技術がどっさりと盛り込まれています。 プログラミングに活かす データ構造と刃レゴリズムの 基礎知識 プログラミングこ活 データ構造とアルゴリズムの 基礎知識 デノヾイスレジスタ メインメモリ リザーブ 物理メモリマップ IOMMU デ / ヾイス アドレス / データ DMA 込 み CPU 図 11 1/O バスを使ったデバイスの当売 割込み / ヾスプリッジ DMA コントローラ CPU デ / ヾイス IOMMU 込 み アドレス乙アータ デ / ヾイス デ / ヾイス デノヾイス ・今泉貴史著 ・ A5 判、 288 ページ ・ ISBN 4-7561-4452-7 ・ 2 , 835 円 ( 税込み ) これからアルゴリズムやデータ構造についての勉 強を始めようと思っている人、数式をみるのは苦 手だけれどもアルゴリズムについて学びたい人、 学校でアルゴリズムの授業を受けたけれど、いま ひとつ理解しきれなかった人、そんな人にお薦め します。 事である。 一方、割込みはデバイスが CPU に対して信号を送るた めのものなので、デバイスと CPU が直結しているとみて もよい。ほとんどの CPU は割込みに優先川頁位をつけてお り、複数の割込みが重なっても処理が混舌けることはない。 こうしてみると、 CPU の割込み入力信号線や IOMMU の DMA 入力信号線など、物理的なリソースが貴重な資源 であることが分かる。ハードウェア設計の世界では、多く のデバイスを接続しようと欲張った挙句、これらのリソー スを喰い潰すことが頻繁に起こる。このような制約を緩和 するために I/O バスが使われる。この場合、デバイスは 図 11 のように接続される。 株式会社アスキー 〒 ] 02 ー 8584 東京都千代田区九段北 1 - ] 3-5 日本地所第一ビル 電話 (03) 6888 ー 5500 ( 営業局 ) 89 UNIX MAGAZINE 2006. 1

2. UNIX MAGAZINE 2006年1月号

なめらかな コンピューティング 利用制限のない Web サービス 中嶋謙互 Web サービスの利用制限 本誌の読者なら、仕事で開発中のアプリケーションや研 究、あるいは週末ハックのために、 Google API や Ama- zon Web Services API 、 Technorati API 、 Yahoo! Webservice API など、いろいろな会社が提供している Web サービスを利用することも多いのではないだろうか。 最近、私が買った本のなかでは Software Design 編集部 のもの 1 がよくまとまっていたが、このほかにも web サー ビスに関する解説書がたくさん出版されている。 企業カ甘是供するこれらの Web サービスに共通している のは、 API の利用回数 ( 頻度 ) に制限があるということだ。 たとえば、 GoogIeAPI は 1 日に 1 , 000 回という制限 2 が ある。実際に試した人によると、 1 日に数十万回アクセスし たら、、 403 Forbidden" となって、 GoogIe にアクセスでき なくなるそうだ。 Amazon Web Services では、ある回 数以上アクセスしたときは従量制の料金もしくは月額の固 定料金を払うことになっている ( FAQ3 によれば、 1 クエ リーあたり 0.1 セントとなっている ) 。 Yahoo! でも、 API の利用規約の第 11 条 4 に、利用回数や利用形態に任意の制 限をかけると明記されている。 このような制限を設ける理由は、大きく分けて 2 つある。 1 つは、それが収益源になるからである。回数制限がな いと、すべてのデータカ陬り出されてビジネスにただ乗り 1 Software Design 編集部「最新 Web サービス API 工クスプローラ」、 才翅孺第繒土、 2005 年 2 http://www ・ google.com/apis/ 3 http://www.amazon.com/gp/browse.html/ref=sc-fe 」ー1ー 3435361 / ()02 ー 8263882-5520801 ? % 5Fencoding = UTF8 & no de = 3434651 & no = 3435361 & me = A36L942TSJ2AJA 4 http://docs.yahoo.com/info/terms/ UNIX MAGAZINE 2006. 1 されてしまう。もう 1 つは、制限をなくすと、サーバーに 負荷がかかりすぎるからだ。 1 番目の理由は営利企業に特有のことであり、 Wiki- pedia のように、非営利団体によって運営されていて、かっ ライセンス上、データの複製が許諾されているサービスに はあてはまらない。 2 番目の技術的な理由については、既 存の技術を組み合わせれば比較的簡単に解決できる。たと えば、 Wikipedia のデータを P2P 的な方法でミラーリン グしておき、頻繁にデータを呼び出す場合にはミラーをア クセスするようにすればよい。検索エンジン・アグリゲー タ Answers. com5 の例でいえば、 Wikipedia のデータを ミラーし (P2P は用いていない ) 、自社サービスからはそ れを利用しているので、 Wikipedia 本体には負荷をかけな い仕組みになっている。つまり、 1 番目の問題と根っこは 同じで、けっきよくは、、データのオープン性 " が重要という ことになる。 Wikipedia ではデータを複製してもかまわ ないので、データをミラーして負荷を下げる方法で技術的 な制限カ陬り払えるのである。 オープンデータ運動 膨大なデータを保有する営利企業が、データを囲い込ん で小出しにすればするほど、本来は可能なはずの革新的な サービスの登場が遅れてしまう。データをオープンにしな いために競争が阻害され、革新が遅れる。この考え方は、ど こかで見聞きしたことがあるはすだ。そう、オープンソー ス運動である。 現在、、、ソース " を、、データ " に置き換えた、、オープンデ ータ " という運動力起こりつつある。 Six Apart の共同創 立者である Ben Trott 氏は、自身の BIog ページ 6 でオー プンソースよりもオープンデータのほうが重要だと述べて いる。次のように、彼の主張は分かりやすい。 「大事なデータをェクスポートできないソフトウェアは、信 頼して使えない」 これは、まさに GoogIe や Amazon のことではないだ ろうか。 Dave Winer 氏は、データのオープン性について、た 5 http://www.answers.com 6 http://btrott.typepad.corn/typepad/20()5/08/open-data . html 111

3. UNIX MAGAZINE 2006年1月号

ます。 最後に、 OOo の開発に関する話がありました。 OOo は、 開発元である Sun Microsystems と OOo コミュニティ の共同作業で開発が続けられています。情報は公式 Web サイト 2 に集められており、ドキュメント、メーリングリス ト、 IssueTracker ( 不具合管理システム ) などが用意され ています。 今回の勉強会に対する講師の意気込みは相当なもので、 開発環境一式を会場に持ち込みました。そのため、準備 にやや手間どりはしたものの、内容の濃い勉強会になりま 0 なお、 OOo 2.0 は勉強会の約 1 カ月後に無事リリース されました。 0 ) 第 133 回 jus 勉強会報告 2005 年 10 月 14 日におこなった勉強会の模様を報告し ます。講師として KDDI の久保田拓朗さんを迎え、時系 列のグラフを描画する RRDtool 1.2 系について話してい ただきました。 RRDtooI の特徴や歴史、基本的な概念や各コマンド、 RRDtooI の応用方法などについての説明がありました。 RRDtool は MRTG の開発者でもある Tobi Oetiker さんカ乍成している時系列グラフを描画するためのツール です。 MRTG がおもにルータのトラフィックの描画を目 的としていたのに対し、 RRDtool は汎用のグラフ描画ツ ールであり、さまざまな場面で利用することができます。 RRDtooI という名前は、 RRD (Round Robin Data- base) にデータを格納することに由来します。 RRD とは データをオ内する領域を固定的に設定し、領域カ鯉まると 旧いデータを上書きして最新のデータを十内するデータベ ースで、これを利用すればログファイルがどんどん巨大化 するような事態カ魴げます。 次に、 RRDtooI の基本的な概念やコマンドについて 説明していただきました。グラフを描画する基本的な手頂 は、次のようになります。 1. rrdtool create : RRD ファイルの作成 2. rrdtool update : RRD ファイルの更新 3. rrdtool graph : RRD ファイルの情報をグラフ化 2 http://www.openoffice.org/ UNIX MAGAZINE 2006 . 1 はじめに、 RRD ファイルを作成します。このとき、 DS (Data Source) と RRA (Round Robin Archives) の 設定をします。 DS については、記録の対象となるデータ の特性を定します。たとえば、データの最大値や最小値、 値を前回の記録との差分にするか、といった設疋が可能で す。 RRA については、 DS からのデータの保存方法を設 定します。たとえば、、、 1 分ごとの最大値データを 1 週間 保存 " 、、 1 日の最大値を 1 年間保存 " といった設定ができ ます。 RRD ファイルを作成したら、追加したいデータについ て時刻と値の組を指定して RRD ファイルを更新します。 時刻の指定には、いわゆる UNIX 時間や AT 時間形式、 現在時刻カ俐用できます。そして、 RRD ファイルに視覚 化するデータを入力し、グラフを描画します。データを用 いた言 t 算式を定義し、言算結果をグラフとして描画するこ とも可能です。このほかに、塗潰しや積上げといった描画 方法についての説明もありました。 さらに、 RRDtooI の応用方法も紹介されました。たと えば、 RRDtooI のノヾイプモードを利用し、 1 回の起動で複 数回のデータ更新をおこなったり、あるいは、 RRDs. pm や RRDp. pm を使い、 Perl から RRDtool を扱う方法も あります。 最後に、開発メーリングリストで交わされている、今後 のバージョンに関する情報カ齠介されました。 RRDtooI はややクセのあるツールで、使いこなすまで にはすこし時間がかかるかもしれません。今回の勉強会で はコマンドの具体的な利用方法を交えた分かりやすい説明 があり、使い始めるよいきっかけになったのではないでし よう力、。 131

4. UNIX MAGAZINE 2006年1月号

いへんおもしろい提言をしている 7 。彼は、現在は Google カ実上の、、一強 " であり、競争はおこなわれていないと考 えている。 Microsoft や Yahoo! などは依然として巨人で あるかのようにみえるが、事実上はすでに GoogIe が一強 となっているという認識は私も同じである。つまり、 Mi- crosoft や Yahoo! は Google を迎え撃っているのではな く、追いかける立場なのだ。 Winer 氏は、 Microsoft や Yahoo! が GoogIe API と 互換性があり、かっ、、利用回数が無制限の " API を提供す るだけで、 GoogIe を競争に巻き込めると考えた。想定さ れているシナリオは、次のようなものだ。 まず、 GoogIe API を使っておもしろいツールを作る。 そして、デモを一殳に公開する。すぐにアクセスカ社曽え、 1 日に 1 , 000 回を超えるようになると GoogIe API の利用 規約虫する。現在は、 こで新しいツールによるサー ビスを停止するか、利用制限をかけなければならない。だ が、互換性があって利用制限のない API さえあれば、この サービスを自由に飛躍させることができる。アプリケーシ ョン開発者は、誰もが制限のないほうを利用するようにな るだろう。革新は明らかに加速する。データのオープン性 を武器にして Google と競うという発想は、きわめて強力 である。 利用制限のない Web サービス API を用いて、大規模 なデータにいくらでもアクセスできる世界は、たしかに現 在よりもはるかになめらかで、気持ちがいい。 しかし、 Microsoft や Yahoo! 、 Amazon などの企業 は、本当に利用回数に制限のない API を提供できるのだろ うか。たとえば、 Arnazon で回数無制限の API がリリー スされたら、 1 時間後には Amazon に蓄積されている数 千万点の商品の変更履歴やメタデータを取得するロボット が開発され、同社がこれまでに溜め込んだすべてのデータ がダウンロードされ始めるだろう。そして、 1 カ月後には、 世界のどこかに Amazon と見分けのつかないサイトが登 場する。結果として事業の機会が減ってしまうから、膨大 なデータをもつ営利企業は利用制限を完全に撤廃すること はできず、 API の使用料をめぐる価格競争に明け暮れるほ かに道はなさそうに思える。もちろん、そうなれば、 W ⅲ er 112 7 http://www.clonethegoogleapi.com/ 氏の考えの半分は実現されたことにはなるが・ オープンソース + オープンデータ オープンソース的な開発手法は、ゲームなどの芸術的作 品を制作するときよりも、既存の使えるツールをそのまま 置き換える場合に最適である。 OS 、 Web プラウザ、 Web サーバー、 RDBMS 、 C コンパイラ、ウインドウ・システ ムなど、これまで成功してきたプロジェクトは枚挙にいと まがない。 今後 5 年間にオープンソース・ソフトウェアのラインア ップに加わるのは、大規模なオープンデータを管理・操作 するためのツールだろう。これまで、オープンソース・プ ロジェクトにはプログラマー以外の人はあまり参加してい なかった。しかし、これから登場するオープンデータ・プ ロジェクトには、プログラマーだけでなく、データ入力や マネージメントに携わる人もあわせ、大勢の人力夏合的に かかわることになるだろう。 Wikipedia の基盤となっている MediaWiki ツール セット 8 は、まさしくこれを実現するためのオープンソー ス・ソフトウェアである。破壊者を効率よく排除する仕組 みや、議論や糸設運営をおこなっていくうえでの工夫など カ眄みに盛り込まれており、他サイトにとってよいお手本 になるだろう。一方、 del. icio. us ではサーノヾーを構成する ソースコードは公開されていないが、 API を利用してすべ てのデータがダウンロードできるようになっている 9 。デ ータさえあればコードを書くのは簡単だから、それでよい ともいえる。 MediaWiki や del. icio. us はオープンソースのオープ ンデータ・エンジンとして、好スタートを切ったといえる だろう。現時点では、全文検索エンジンや製品 / 地図検索な どの実現への道のりは遠そうである。とはいえ、 Web に参 加する人数が増えてコンピュータの性能がさらに向上して いけば、オープンソースの OS や Web プラウザが次々に 登場したように、利用制限のない Web サービス API を 備えたオープンソース製品が登場する日カリ来するかもし れない。 ( なかじま・けんごコミュニティエンジン ) 8 http://www.mediawiki.org/wiki/MediaWiki 9 http://del.icio.us/help/api UNIX MAGAZINE 2006. 1

5. UNIX MAGAZINE 2006年1月号

ロボットのある暮らし 榊正憲 歩行プログラムを作る ( 3 ) 股関節とくるぶしの制御 リスト 1 ま行用サーポを里するための楜当本 ロポットの初期姿勢とサーボの制御ー & 前回は、ジョイスティックを使って、ロボットを横から 見たときのくるぶしの位置を決める動作の制御について解 説した。順番がちょっと前後するが、こでロボットの初 期姿勢について説明しておこう。 今回作成しているプログラムでも、ロポットの初期姿勢 は直立状態で、この姿勢をとるための各関節サーポ用のデ ータは、制御用プロセッサ上にファイルとして用意されて いる。これは、標準で付属する制御プログラム用のものだ が、姿勢は同じなので、自分の作ったオリジナル・プログ ラムでもこのデータを利用しない手はない。以前説明した ように、初期姿勢データは初期状態のサーボの角度を示す データと、組立て誤差などを補正するためのトリムデータ から構成されている。したがって、初期データを読み込ん で各関節の角度を求め、次にトリムデータを読み込んでそ れぞれの角度を補正するかたちになる。ファイルのフォー マットは単純なので、必要な情報を得るのは簡単だ。 ロポットデーモン 1 号プログラム (rdl) は、プログラ ムの起動時にこのファイルを読み込む。プログラムの内部 では、ロボットの各関節の情報は構造体 (JOINT) の配列 として管理されている。この配列は 2 セットあり、 1 つは 直立姿勢の初期データを収めるもの (JointIni 配列 ) 、も う 1 つは現在のサーボの情報を収めるもの (Joint 配列 ) である。 この構造体には、角度情報のほかに回転範囲、トルク率 などの情報も含まれている ( リスト 1 ) 。これらの情報の用 途は明らかだろうから、ここでは回転方向を示す sv-factor UN 工 X MAGAZINE 2006 . 1 typedef struct { int sv_id; short sv—flag ; short sv_factor ; int SV_pos; int sv—torque; int sv_min; int sv_max ; Char *sv_name ; } JOINT; だけ説明しておく。 / * サーポエ D * / / * フラグ * / / * 回転方向 * / / * 角度 * / トルク率 * / / * 最小角度 * / / * 最大角度 * / / * 関節名 * / ロボットの関節にはすべて同じ構造のサーボカ駛われて いる。骨格構造は基本的に左右対称なので、同じ動きをし たときのサーボの回転方向は、右半身と左半身とで逆にな る。たとえは縢を曲げる動作の場合、左右のサーポは逆向 きに回転することになる。 一方、プログラムの関節角度算出口ジックカ引算した角 度は、そのような点は考慮されていない。右膝も左膝も同 じように 30 度回転というかたちになる。この差を吸収す るのが、回転方向を指定する要素 sv-factor である。これ は値として 1 かー 1 をとり、算出された動作角度にこの値 を掛けた結果がサーボに送られる。つまり、左右の膝では、 この値の正負カになっているわけだ。 なお、この処理によって最終的にサーボに指示する角度 を決めるため、構造体に橋内する角度情報 (sv-pos) には、 この方向指定処理をおこなう前の値を収めている。 また、関節の角度を算出するロジックの基本的な動作は、 初期姿勢に対して、関節を何度回転させるかを求めるとい うものになる。そのため、実際にサーポを駆動するときに は、初期姿勢の関節角度に計算で得られた角度を加減算し 145

6. UNIX MAGAZINE 2006年1月号

図 7 レジスタマッフ。列 ヒット 6 3 7 5 4 MASTER MASTER R eady lnte rru pt 0 Reset lNT3-Run lNT2-Run lNT1-Run lNTO-Run lnterru pt Enable lNT3 lNT2 TI TO lNT3 爪 T2 TI TO lnterrupt lnterrupt lnterrupt lnterrupt lnterrupt lnte rru pt lnterru pt lnte rru pt Enable Enable Enable Enable Clear Clea 「 Clear Clear lnterrupt 0 Timeout 2 0 1 1 2 3 オフセット lnterrupt 1 Timeout lnterrupt 2 Timeout 4 lnterrupt 3 Timeout 5 ある、信号線が少ないといった、ホストシステム内部よ ジスタがあるとする。これをソフトウェアとして表現する りも悪い環境において、確実なデータ交換を保証するた には、どうすればよいだろうか。 めの仕組みである。なお、外音闘妾続バスは、たいていは レジスタマップでは、 2 つの表現手法をよくみかける。 1 ホスト内部にプリッジ・コントローラ ( PCI バス接続の つは、以下のように各レジスタのオフセットをマクロで定 SCSI コントローラなど ) を設けて実装される。 義する方法だ。 レジスタへのアクセスは、すべてホスト CPU が主導す Register Offsets る同期アクセスである。つまり、データの読み書きはすべ #define SMPL_CMD_STATUS OX0000 て CPU の仕事であり、データ量が多い (PIO でバルク転 #define SMPL_INTR_ENAB_STAT_CLR 0X0001 送をおこなう ) と相応の負担がかかる。この負担をデバイ #def ine SMPL—INTRO_TIMEOUT OX0002 #define SMPL_INTRI_TIMEOUT 0X0003 ス側で肩代わりしようとするのが DMA である。この場 #define SMPL_INTR2_TIMEOUT 0X0004 合、 CPU は、データがどこにあるかをデバイスの DMA 工 #define SMPL_INTR3_TIMEOUT 0X0005 ンジンに知らせて起動するだけでよい。その後、 DMA 工 レジスタ群の先頭が、、 unsigned char *regp ' ポインタ ンジンがホストメモリ上のデータを読み込むあいだ、 CPU にあるのなら、レジスタには次のようにしてアクセスする。 はほかの作業をすることができる。 * (regp + SMPL—CMD-STATUS) CSR_RESET ; DMA データ転送の終了や回線異常など、デバイス状態 もう 1 つは、レジスタマップを構造体として表現する方 の変化をホスト CPU に通知する仕組みが、、割込み " であ 法である。 る。割込みはデバイス主導で発行され、 CPU の動作とは 非同期になっている。割込みを受け取った CPU は進行中 typedef struct smpl—reg { unsigned char cmd_status ; の作業を保留し、その割込みを処理しなければならない。 unsigned char intr_enab_stat_clr; unsigned char intrO_timeout ; デバイスレジスタのソフトウェア表現 unsigned char intrl_timeout ; unsigned char intr2_timeout ; 上記のハードウェア要素のうち、ドライノヾが直接触らな unsigned char intr3_timeout ; } smpl-reg-t ; ければならないのはレジスタである (DMA と割込みはデ バイスの、、動作 " であり、ドライバカ髞作する、、モノ " では こちらを使う場合は、レジスタ群の先頭を、、 smpl-reg-t ない ) 。たとえば、汎用パス接続デバイスで図 7 のようなレ * regp " に設疋し、以下のようにして各レジスタにアクセス 86 UNIX MAGAZ 工 NE 2006 . 1

7. UNIX MAGAZINE 2006年1月号

0 リスト 2 単語をハイライト表示するスクリプト (highlight ・ user. js) / / ==/UserScript= @exclude http: //pitecan . com/* @include http: / / * / / @description High1ight a specified ord. @namespace http://pitecan.com/High1ight @name High1ight / / ==UserScript= / / highlight . user ・ js http : //QuickML. com/内の「メーリングリスト」という文字列をハイライトする く span onc1ick='hiIight("http://QuickML. com/"." メーリングリスト " ) ・ ) > く /script> location. href = url; location. keyword = keyword ; function hilight (url,keyword){ く script> リスト 3 単語ハイライト・スクリプトの呼出し document . b0dy. innerHTML = b0dy ; body = body. split (keyword) . join(hilighted) ; bOdy = document . bOdy. innerHTML ; + keyword + " く /span>" く span style='background:blue; c010r:ye110w;padding:4px;margin:2px; ) > " hilighted = " if (keyword ! = undefined){ var keyword = location. keyword; (function ( ) { く /span> 図 5 指定した文字列のハイライト表示 QuickML ようこそー鬘嘛に用上ーよ ( 第Ⅱ設嚥報い第飜ー応先 QuickML とは ? - 手転に号料て を作れうサービスですい子きなアドレスの を准でもすぐにつ、第一こはます。 第一リンっリスト ダーリンうリスト メーリンリスト を作 きないので、上記のような情報は得られません。 Grease- できます。ただし、リンクのクリック数の保存や通知はで 対応づければ、クリックされたことをプログラム側で把握 各リンクにおいて onclick に JavaScript プログラムを できそうです。 ンクをいっ参照したかが分かるので、情報検索などに応用 また、クリックしたときの時刻も記録しておけば、どのリ お知らせ を作ったリやめたリできます。 すべての作をメールだけで行えるたガ」やなどの携帯電話だけで一 れます。好きな名前・好さなサブドメイン名に k 川 om のような OuickM [ ては、昇きな名前ゆ叩。。 m にメールを逢るだけで新い 162 monkey には以下の 3 つの関数が用意されており、複数の セッション間でのデータのやりとりが可能になっています。 ・ GM-setValue() : 永続的なデータを書き込む ・ GM-getValue() : データを読み込む ・ GM-xmlhttpRequest ( ) : 他サイトと通信する GM-setValue() と GM-getValue() カ甘及うデータは、 実際にはローカルのプラウザに格納されています。その点 では Cookie と似ていますが、異なるサイトに接続してい る場合も同じ値にアクセスできるところが違います。 末尾のリスト 4 は、クリックされた回数に応じてリンク の背景色を変化させる Greasemonkey スクリプトです。 アクセス状況を背景色に反映させるには、 2003 年 8 月 号で紹介した Web ページの、、鮮度 " を視覚化する手法を使 います。各リンクには、アクセス状況に応じた鮮度が定義 されています。鮮度は、クリック状況と時間経過により変 化していきます。 Web ページへのアクセス履歴をすべて 記録するとデータが膨大になる可能性があるので、以下の UNIX MAGAZINE 2006. 1

8. UNIX MAGAZINE 2006年1月号

0 図 2 大阪弁化された QuickML.com QuickML ようこそいゑに上ー用まは : ヨ関達ほリ里幻 QuickML とは ? Qu ⅸ ML は超お手軽にタダでメーリンゲリストを作れるサービスや。好きなア ドレスのメーリンゲリストをどなたはんでもすぐに作って使うことができまん Ouick M L では、好きな名朝 qu に km に。にメールを送うだけで新しいメーリ ングリストを作れはリます。好きな名前・好きなサドメイン名叩に km に。 m のようなメーリンゲリストも作れはります。 ずうええええええええんぶの據作をメールだけで行えるため、 H ~ やらな んやらの携帯電話だけでメーリンゲリストを作ったリやめたりでさまんねん。 ・ユーザーが人手で呼び出す必要がある ブックマークレットは、、、ブックマーク " などのメニュー から選択し、呼び出して使う必要があります。あるサイ トに対してつねに同じブックマークレットを適用したい 場合も、そのサイトを参照するたびにユーザーカ鮃び出 さなければなりません。 さきほどの例では、、、大阪弁化 " というブックマークを選 んで web ページのテキストを大阪弁に変換しましたが、 別のページに大阪弁化フィルタを適用したい場合は、そ のページを閲覧しているときに同じ作業を繰り返すこと になります。 ・他サイトとの通信ができない 2005 年 5 月号で紹介した Ajax の手法を利用すれば、 同じサイトのサーバーと通信することができます。しか し、閲覧中の Web ページと異なるサイトのサーバーと ・永続的なデータは扱えない の通信は不可能です。 160 ーワードをハイライト表示させたりすることはできません。 ドを指定してから Web ページを呼び出したり、自動的にキ するブックマークレットは書けても、対象となるキーワー ひどく不便です。たとえば、キーワードをハイライト表示 上の制限ですが、おもしろいインターフェイスの開発には これらは、おもにセキュリティのために設定された仕様 ことも不可能です。 きないので、それらのサーバーにデータを蓄積しておく はきわめて困難です。また、外部サーバーとの通信もで ァイルなどのかたちで保存できないため、データの共有 JavaScript プログラムのなかで利用するデータは、フ 一方、 Web プラウザの挙動を変えるプラグインなどを使 えば、このような制限をなくすことができます。たとえば、 Firefox では、、拡張機能 (extensions) " を利用する方法が 考えられます。ただし、拡張機能の作成はブックマークレ ットのスクリプトの場合とくらべてかなり面倒で、手軽に 作って使うというわけにはいきません。 世の中はよくしたもので、 Firefox の拡張機能の 1 つで ある「 Greasemonkey 」を導入すれば、ブックマークレッ トを書くのと同じ程度の手軽さで、前記のような機能が実 現できるようになります。 なお、あとで述べるように、この拡張機能の利用にはた いへん危険な側面もあります。この点を十分に理解したう えで使ってください。 Greasemonkey は Firefox に拡張機能としてインスト ールし、その上で動く JavaScript プログラムを登録して 利用するかたちになります。簡単な JavaScript スクリプ トを作成すれば、 Firefox 上で次のような機能力駛えるよ うになります。 ・ Web ページを開くと同時にスクリプトを実行する。 ・特定のサイト上でスクリプトを実行する。 ・永続的なデータを扱う。 ・他サイトと通信する。 要するに、ブックマークレットの制限がほとんどなくな 、、なんでもあり " 状態になっています。 たとえば、 http://example.com/以下のあらゆるべー ジに対し、 document . b0dy. innerHTML というスクリプトが実行されるように設定すると、 http: / / example. c 。 rn / 以下のページはすべて空白になります。 別のサイトから得た偽の情報をベージに交ぜて表示したり、 ューザーのキー入力をフックして別サイトに送信すること もできます。危険なスクリプトを動かすと、大変なことに なる可能性があるわけです。 もっとも、 Greasemonkey のスクリプトをプラウザに 登録するのはユーザー自身ですし、ページ内容を自由に変 更したり、外部と通信できることによって得られる効果は 絶大です。たしかに危険ではありますが、その点に注意し て正しく使えば、それだけの価値はあると思います。 UNIX MAGAZINE 2006 . 1

9. UNIX MAGAZINE 2006年1月号

連載 / ロボットのある暮らし 図 2 ジョイスティック・データ窈列 JOY 31277 30686 29942 30207 ー 1 ー 1 FFFFFFFFFFFFFFFF 写真 2 ゲーム・コントローラの十字ボタン ー 1 がハットスイッチ・データ す操作はしないということだ。 ジョイスティック・データを送る UDP データでは、ハ ットスイッチの角度値が 2 個、ボタンデータが 16 個送ら れている ( 図 2 ) 。しかし実際にコントローラに備えられて いるのは、 1 個のハットスイッチと 12 個のボタンである。 ボタンの数が 4 つ多いのは、左側のハットスイッチから得 られる 1 つの方向情報を、 4 個の各ボタンのオン / オフ情 報の組合せとしても扱っているからだ。また、右側の独立 した 4 個のボタンについては、ハットスイッチとしてみた 場合の方向情報も示している ( ハットスイッチとしてあり えないボタンの組合せについては、押されていないものと スイッチとの違いは、複数のボタンを同時に押せるかどう して扱い、一 1 を示す ) 。このような処理により、 UDP で かという点だ。右側の 4 個のスイッチは、それぞれのボタ 送られる制御情報は、実際の操作要素数よりも多くなって ンをお互いに関係なく、自由に押すことができる。 4 個の いる。 ボタンがあるので、 16 通りのオン / オフのパターンがあり このような処理をおこなったのは、コントローラを左右 うることになる。一方、ハットスイッチは方向を指定する 対羽くに扱いたかったからである。一部のボタンとハットス という性質上、任意の複数のボタンを同時に押すことはで イッチを 2 通りの方法で扱うことで、用途、あるいは方法 きない。可能なのは、隣接するボタンを同時に押し、中間 論に応じて、それぞれのスイッチをハットスイッチとして の方向を指定することだけだ。したがって、 4 個のボタン も独立したボタンとしても扱えるようにしたのだ。もちろ からなるハットスイッチは、 9 通りの情報 ( 8 つの方位とボ ん、受信側のロポットのプログラムで解釈することもでき タンカ甘甲されていない状態 ) しか示せない。 こでは送信側で処理することで、受信側プログラ るが、 このような構造により、どちらも 4 個のボタンが付いて ムをすっきりと杢できるようにしている。 いるにもかかわらず、左のレバー ( ハットスイッチ ) と右の レバー ( 4 個の独立したボタン ) は、同じように使えないこ ハットスイッチによる股関節の制御 とになる。左右対称な制御体系という点を考えると、これ ジョイスティックと異なり、ハットスイッチはアナログ は大きな問題だ。 的な連続値を入力できない。ジョイスティックは各軸につ しかしよく考えてみると ( あるいは実際にスティックを いて 0 ~ 65535 の値を示せるが、ハットスイッチは 8 方位 操作してみると ) 、これはたいした問題ではないことが分か を示す数値だけだ。ハットスイッチの操作だけでは動作量 る。ジョイスティックを操作しながらスティック上の 4 個 を加減することができないので、関節操作に使う場合は、ジ のボタンを操作する場合、これらを親指で押すことになる。 ョイスティックによる操作とはやり方か変わってくる。具 このとき、複数のボタンを個別に押すのは事実上不可能な 体的には、スイッチを押しているあいだは関節カ働き続け、 のだ。 4 個のボタンのうちの 1 個だけを押すか、せいぜい 離すと止まるというものだ。ジョイスティックが倒した角 隣接したボタンを押す程度しかできない。つまり、独立し 度に比例して動作するのに対して、押している時間に比例 た 4 個のボタンであっても、ハットスイッチと同じような して動作するかたちとなる。 押し方しかできないのである。 また、ハットスイッチの構造上、対向した位置にあるポ このような理由から、私は右側の 4 個の独立したボタン タンを同時には押せないので、対向するボタンは互いに排 も、左側と同じようにハットスイッチとして使うことにし 他的な動作、つまり同時におこなうことがありえない動作 た。つまり、対向する位置にある 2 つのボタンを同時に押 147 UNIX MAGAZ 工 NE 2006 . 1

10. UNIX MAGAZINE 2006年1月号

を示すようにする。具体的には、サーポモーターを逆方向 に回転させる操作である。 ハットスイッチを使ったこのような操作方法では、手を 離しても関節がニュートラル位置 ( 直立姿勢 ) に戻らない。 もちろん、操作したあと、反対側に動かせばもとの状態に 戻るが、ジョイスティックのように手を離せばすむという 簡単さはない。そこで、別のスイッチを押すとニュートラ ル位置に戻るようにした。 ハットスイッチは 4 個のボタンから構成されるので、 1 組のハットスイッチで 2 個のサーポモーターを制御できる。 具体的な制御の割当ては次のようにした。 ・上下ボタン ( 図 3 ー E ) 上向きのボタンを押すと、脚 ( 腿 ) を外側に向けてひね る。下向きボタンを押すと内側に向けてひねる。これ は、方向車奐の際に必要な動きである。 ・左右ボタン ( 図 3 下 ) 右スティック側と左スティック側で操作は逆になる。ど ちらも、外側向きのボタンを押すと、脚を側方に向けて 持ち上げる。内側向きのボタンを押すともとの位置に戻 る方向に動く。これは、重心位置を移動させるために必 要な動作である。 ・ L3 / R3 ボタン 両側の 4 個のボタンの下に、 L3 、 R3 というボタンがある (PIayStation の純正コントローラでは、ジョイスティ ックを押す操作に対応するボタンだ ) 。これを押すと、股 関節のひねり、左右方向の角度がニュートラル位置値 立姿勢の状態 ) に戻る。 股関節のひねりと左右への動作は、ロボットデーモン・ プログラムがコントローラの状態を示すバケットを受け取 るたびにおこなわれる。データを受け取ったときに、これ らのハットスイッチの状態を示すデータ ( 具体的にはボタ ン扱いのデータ ) をチェックし、ボタンが押されていたら、 該当する関節の角度情報を更新する。そして、実際にサー ボを動作させる。具体的には、ボタンカされていたら関 節をたとえば 10 度回転させ、押されていなかったら何も しないといったものだ。このような処理により、ハットス イッチのボタンが押されているあいだ、関節カ働き続ける 動作が実現される。 これらの関節は、オペレータの意思で任意の角度まで動 148 図 3 股行とくるぶしの ハットスイッチの上下のボタンで、大腿を回転させる かせなければならない。速すぎると細かな操作ができない し、遅くても扱いにくい。たとえば制御データが 100 ミリ 秒間隔で送信され、ボタン情報をチェックするたびにサー ボの角度を 10 度すっ動かすのであれば、ボタンを 1 秒押 し続けると関節は 100 度回転する。この動作速度は、ロポ ットを動かしながら調整することにする。 くるぶしの制御 Speecys ロボットのくるぶしは自由度 2 で、前後方向と 左右方向へ傾けることができる。前回紹介したジョイステ イックによる脚の制御では、くるぶしの前後方向の傾きを 制御し、脚の前後 / 上下方向の動きに対して、つねに足の裏 が水平を維持するようにした。同じように考えると、くる ぶしの左右方向の傾きは、脚を側方に動かしたときに、足 の裏を水平に保つように動かすことになる ( 図 3 昭 ) : イ・ハ、、 0 具体的には、脚を側方に上げたときに、同じ角度だけく るぶしを逆方向に傾けるのである。こうすることで、脚を ハットスイッチの左右のボタンで、脚を側方に動かす。 このとき、くるぶしの関節も動き、足の裏を水平に保つ UNIX MAGAZINE 2006 . 1