WindowsでiPhone Applicationを作るには:

7 月 6th, 2010 by 窪田 史朗

ちょっとiPhone ApplicationをWindowsで作る方法を調べておりまして見つけたページを何となく気分が乗ったので、和訳してみました。 技術的な文書って翻訳楽ですよねー(少なくとも大意は…の割りに時間がかかりましたが)。 原文はこのHow To Develop iPhone Apps on Windowsです。 2009/12/03の記事なので、半年前ですから、一部古くなっている部分もあると思われますが、そのまま転載します。 特に「一番簡単で効果的な方法」が使える見込みが事実上ない辺りがなんともはや…。 画像や動画は転載しませんので、元記事をご参照下さい。 翻訳文の文責は全て私にあります。 事実誤認や誤訳等はビシバシコメント下さい。


Not many developers speak Objective C, the Mantra for writing iPhone applications. And majority of the developers don’t own Mac either, so what is the way to go ?
それほど大勢の開発者がObjective C-iPhone アプリケーションを書くための真言[*1]-を操れる訳ではない。さらに開発者の多数派はMacも持っていない[*2]。ではどうすればいいだろうか?

Of course one can buy a macbook and do it. Here’s what will make it possible do all that on Windows, Linux
勿論誰でもmacbookを買って行うことはできる。ここではどうすれば全てをWindowsやLinux上で行えるかを述べる。

Top 5 Ways:

主要5手段:

Method 5. Toolchains: There are several toolchains available (like winChain) that actually lets you write and build iPhone applications on windows.
方法5. Toolchains: 幾つか利用可能なツールチェーン[*3](winChainのような)があり、実際にiPhoneアプリケーションをWindows上で書いて動かすことが出来る
There are several associated tutorials to build the Objective C code on Windows.
幾つかObjective CのコードをWin上でビルドするのに関連したチュートリアルがある。
But there is a problem, the apps hence developed will work on Jailbroken iPhones only.
しかし問題が一つあり、つまり脱獄[*4]したiPhoneでしかアプリケーションが動かない。
We’ve seen few hacks to get over that and make it to App Store, but as Apple keeps on updating SDKs, toolchains need regular updates.
我々は困難を乗り越えてApp Storeにそれを置く裏ワザ知らない訳ではないが、AppleはSDKを更新し続けているので、toolchainもいつも更新が必要である。
It’s a hassle to make it up all the time. That’s why this is the least of the recommended methods.
いつもそうしておくのは大変だ。なので、もっともお勧めできない方法である。

Method 4. Use other Languages instead of Objective-C
方法 4.Objective-Cに代わる他の言語を使う
(i) Code in Java: For Java developers, there is a workaround: XMLVM.
(i) Javaで書く: Javaの開発者向けの迂回策: XMLVM.
XMLVM is an extensible cross-compiler toolchain which instead of cross-compiling on a source code level, XMLVM cross-compiles byte code instructions from Sun’s Java virtual machine and Microsoft’s Common Language Runtime (CLR).
XMLVMは拡張可能なクロスコンパイラ[*5]ツールチェーンで、ソースコードレベルでクロスコンパイルする代わりに、SunのJavaヴァーチャルマシンとMicrosoftのコモンランゲージランタイム(CLR)のバイトコードの命令をクロスコンパイルする。
And the Result: The byte code instructions are easier to cross-compile and the difficult parsing of a high-level programming language is left to a regular compiler and you get to write apps in different language and then compile and convert to a different one.
つまり:バイトコードの命令はクロスコンパイルし易く、高水準プログラミング言語を正規のコンパイラを離れて解釈するのは大変なので、違う言語でアプリケーションを書き、コンパイルし、そして別の言語のものに変換する。
The diagram below shows an abstract idea:
下の図(※転載しません)で概要が分る:
Without laying much stress on it, I`ll share my experience.
強調しないが、経験を書いておこう。
The project is a great piece of Innovation but is still in it’s early phases.
プロジェクトは大変進歩したものの、依然として始まったばかりである。
On one side, I was able to use their API and develop fairly well application (Simple game, Travel app), but when it comes to complex graphics, features, this method looked pretty immature.
そのAPIを使ってまずまず良いアプリケーション(単純なゲーム、旅行アプリ)を開発できたが、一方複雑なグラフィクスや、外見については、この方法は非常に未熟であるようだ。
However, over time this should change and we could see the project doing almost everything the original SDK does.
しかし、時が経てばこれらは変わり、我々はプロジェクトが”本家”のSDKが出来ることはほとんど出来るようになるのを目にするだろう。
And yes, you can test your apps on the Java based simulator and deploy on jailbroken iPhone.
そして勿論、Javaベースのシミュレータでアプリをテストできるし、脱獄したiPhoneに展開できる。

There are several other frameworks (like Appcelerator`s Titanium) that let you code iPhone apps in Java, but the limitations are similar thought they are all worth giving a look for most day-to-day apps.
他にも幾つかiPhoneのアプリをJavaで書けるフレームワークがある(例えばAppceleratorTitanium)が、制限は似たようなものでちょっとしたアプリになら使ってみる価値はあるだろう。
Update: (ii): Code in C/C++
追記: (ii):C/C++で書く
DragonFireSDK: Say no to Objective C, say no to forced-Mac and yes to C/C++, Windows.
DragonFireSDK: Objective CもMac強制はダメ、Windows C/C++がいい。
This founds the base for DragonFireSDK that uses Microsoft Visual C++ to develop, test iPhone apps.
これはMicrosoft C++を使ったDragonFireSDKを元に開発しているようで、iPhoneアプリもテストされている。

Apps, Games created with DragonFireSDK can be completely written and debugged in Windows and are also fully compliant for distribution and sales at the Apple iPhone App Store.
DragonFireSDKで作ったアプリやゲームは完全に書くのもデバッグもウィンドウズで出来て、さらに配布にも完全に対応していてAppleの iPhone App Storeで売られている。

There is a quick Starter Guide available that help you kick start writing your first iPhone app and run it inside the emulator that ships with it.
クイックスタータガイドがあるのであなたの初iPhoneアプリを書いて付属のエミュレータで走らせるのに役立つだろう。
The API is quiet simple to use and is available here.
APIはとても使うのが簡単でここで見られる。
One of the Apps: Un Stacker developed using this SDK is already available on App Store [link].
アプリのひとつ:Un Stackerは開発にこのSDKを使っていて、既にApp Storeから利用可能である[リンク]。
In addition, 5 Sample Apps are demonstrated and explained with code.
加えて、5つのサンプルアプリがあって、コードの解説もついている。

Method 3. Hackintosh: This is one of the effective ways of doing it: Install Mac on PC and then run the Native iPhone SDK.
方法3. ハッキントッシュ: これは最も効果的な方法の一つである:PC[*6]にMacをインストールしてネイティヴのiPhon SDKを走らせる。
This is already a popular practice among OSx86 communities.
これは既にOSx86コミュニティの間で一般的である。
The only limitation is that it could get tricky and time consuming for the newbees.
唯一の制限はトリッキーかつ初心者には時間がかかることだ。
You can refer to our Hackintosh Guides:
我々のハッキントッシュガイドを参照するといいだろう。(表割愛)

Method 2.: Cross compilation of Adobe apps: You can write your apps in Flash Actionscript 2, ActionScript 3 or Adobe AIR, Flex and then cross compile it to ARM binary that is executable on iPhone.
方法2.:アドビのアプリケーションでクロスコンパイル:ActionScript 2、ActionScript3またはAdobe AIR、Flexでアプリを書いてそれをiPhoneで実行可能なARMバイナリにクロスコンパイルすることができる。
This can be done installing Project Sprouts for which sample Flex applications source is available here.
これはプロジェクトスプラウツをインストールすると可能で、サンプルFlexアプリケーションのソースはここで手に入る

Here is a video on how this is done:
やり方のビデオを置いておく(割愛):

Method 1. Flash CS 5: This is in fact the most effective and easiest way to make it to App store doing all the “legal stuff”.
方法1.Flash CS 5: これは実際Appストアに全部”正規の原料”で置ける、最も効果的で簡単な方法である。

Flash CS 5 introduces new Feature that let’s you develop iPhone native applications just like you develop Adobe AIR apps.
Flash CS 5 はAdobe AIRアプリを開発するようにiPhoneのネイティヴアプリケーションを開発する新機能を発表した。
Recently, Adobe announced support for Multitouch, Accelerometer, GPS support in Flash 10.1 for phones.
最近、Adobeはマルチタッチ、加速度センサ、GPSを携帯電話用Flash 10.1でサポートと発表した。
CS5 adds new APIs that lets developers leverage these modern Phone features and hence develop application not just for iPhone but for all Phones that support Flash.
CS5には開発者が新型携帯電話の機能を操作でき、今後iPhoneに限らずFlashをサポートするどんな携帯電話のアプリケーションでも開発できる、新しいAPIが追加された。

So the Horizon is quiet big, and CS5 with ActionScript could find a great way to develop applications on iPhone.
地平は広大で、ActionScriptとCS5はiPhoneのアプリケーションを開発する重要な方法になりうるように思える。
If you are familiar with a scripting language, say, Javascript, learning ActionScript is as easy as an ApplePie.
もしJavaScriptのようなスクリプト言語に親しんでいるなら、ActionScriptを学ぶのはアップルパイと同じくらい簡単である。

Already, App Store has a number of Apps built based on Flash (I believe they are using Crosscompilation): you can checkout few full blown apps here.
既に、App StoreにはいくつかのFlashに基づいてビルドされた(私はクロスコンパイルを使ったものだと思うが)がある: 少ないが本格的なアプリをここで確認できる。

Only bad part of this method is, it’s still unavailable. However This is what Official adobe site has to say about it:
この方法の唯一の欠点は、まだ使えないことである。しかしadobeの公式サイトではこう言っている:

When will the Flash Professional CS5 beta be available for download?
Flash Professional CS5 betaはいつからダウンロードできるようになるか?
The beta will be available for download from Adobe Labs before the end of 2009.
betaは2009年末までにAdobe Labからダウンローできるようになるだろう。

You can develop, build and test in native Flash debugger, however, soon we should see a simulator for mobile devices, especially for the iPhone.
開発し、ビルドし、Flashネイティヴなデバッガでテストできるが、すぐにモバイル機器、特にiPhone用のシミュレータを見られるだろう。

I needed more clarity whether the final step, signing of Apps would be possible on Windows.
私は最終的なWindowsでアプリが作れるかどうかの証拠が、もっと明快に必要だった。
I contacted Adobe on this.
これについてAdobeに尋ねた。
Alexander MacDonald said “Once you have created your content it is compiled into an iphone executable, then signed by our ADT tool and then zipped to create an ipa-the only thing you need from apple is your developer certificate.
アレクサンダー・マクドナルドは「一度iPhoneで実行可能な形にコンパイルしたら、我々のADTツールで署名と圧縮をしてipaを作る。すべきことはAppleから開発者証明を手に入れることだけだ。
The crypto algorithms used by Apple to sign iPhone apps are all industry standard ones which anyone can implement on any platform they wish,” which in the case of Flash CS5, also includes Windows.
iPhoneのアプリの署名にアップルが使っている暗号アルゴリズムは全工業標準のもので、望むなら誰でもどんなプラットフォームでも実行できる」 Flash CS5の場合、Windowsに含まれている。

The app hence created can be installed to iPhone via iTunes for testing to substitute absence of simulator for the mean time.
今後作られるアプリはシミュレータが出来るまで、代わりにテストのためiTunesからiPhoneにインストールできる。
So all in all, everything would be legal, and will work great.
そして概してすべては正規の手続きで、非常に上手く動作する。

However, here is the demo of how applications will be created in Flash CS5:
ここにどのようにFlash CS5でアプリケーションが作られるかのデモを置く(割愛):

Today, it doesn’t support everything SDK supports, but it would soon do.
今はSDKがサポートしているすべてをサポートしてはいないが、すぐそうなるだろう。
With Flash opening up a way to iPhone development, Adobe is adding millions of new developers to the iPhone App store contributors.
FlashによるiPhone開発の道が開かれれば、Adobeは100万人の新しい開発者をiPhone App Storeの貢献者に加えることになる。

Mantra/真言

マントラ、真言とは密教なんかで使う呪文のことです。

Objective C

Objective Cは、Mac OSに付属する開発環境X codeで利用可能な言語です。基本的にはWinでは使えません。Winでは似たような位置にC#が居ます。

Toolchain

Toolchainとは、単機能な複数のツールを組み合わせて作業する事を指すのでしょう。

脱獄/Jail Break

App Storeを通さずに、つまりAppleが規約で認めていないようなアプリケーションをインストールするのに必要な作業で、これ自体も規約に違反する。 が、面白いことが出来るようになるのでやる人は居る。Appleからの保証が受けられなくなる。

クロスコンパイラ/cross-compiler

ソースコード、つまり人間が読める命令文を機械が処理する命令に変換する作業をコンパイルと言います。普通しないような、ソースコードと命令セットでの変換をクロスコンパイルと言います。例えば通常MacならMac用の命令に、WinならWin用の命令に変換されます。それをWinでMac用の命令セットに変換したりします。

PC

ここでの”PC”が指しているのは、Parsonal Computer一般ではなく、IBMのPC/AT互換機のこと。

カオスラウンジに行ってきた、が。

5 月 23rd, 2010 by 窪田 史朗

分らなかった。 分らなかったことが分った…のか?

これだけだとナニガナニヤラなので、少ないが私が見て取ったことを書いて置こう。 何を感じたか、はとても纏めきれないので、知りたければ言葉選びからなんとなく推測して欲しい。 丸投げだな。 ナニガナニヤラがそのまま感じたことか?余り間違っていないだろう。 それでも敢えて一つだけ書くとすれば、そこそこ劇的BeforeAfter

  • Before「カメラを持ってくるべきだった。」
  • After「やっぱり持って来なくて良かったかな。静止画で伝わらない部分が多過ぎる。」
であろうか。蛇足だが要するに「行かないと分りませんね」である。 おやおや。行っても分らないのに行かないと分らないとはこれ如何に。

ま、折角私が行ったその日(※注:私は寝るまで次の日になったとは認めないぞ)に感想なぞ書いているからには、 読んだ人の一人でも訪ってくれれば大変嬉しいのである。 会期最終日でもあるから、さぞ込んでいるだろうけど…。

それは兎も角、私が何を見たか。 先ず最初にカオス*ラウンジと言う単語に触れたのは、Twitter経由だった。5/10だから、二週間ほど前だ。 色々あったり忘れていたりしたため、今日に至るまで結局行かず終いだったのだが、 朝アルバイトに出かける時にふと思い出したので、帰りに寄ってみることにしたのである。 決心したのは会期が終る直前だったのも非常に大きい。 感想を書くと人に言ってしまった手前、行かずに書くのはまずかろう(オイ)。 地図を頭に染み込ませ、バイト明けの新宿をふらふらと出発したのであった。 殆どサイトも読まず、全然予備知識なしで行ったのであった。

渋谷駅で降りて、迷子になる自分を想像して戦々恐々しつつ(私は屋外で基本的に通信手段がないので迷子は結構致命的なのだ)、 びくびくしながらカオスラウンジがあるはずの場所に向かった。 詳しい場所等は百聞は一見に若かず。カオス*ラウンジの公式ページを見て欲しい。 かなり分りにくい場所にあるので途中かなりヒヤヒヤしたが、何とか着。

会場(B1F)に着いて先ず目に付いたのが、予想外の面積だった。 元々そう広くない-25㎡くらいだろうか?-空間にかなりの人とモノが詰め込まれている。 更に会場中央を占領しているジャンクPCの高さ2mを越すタワーから、四方八方の壁に毛糸が渡され、 その糸に様々な紙を千切ったり塗ったり張ったりした合成物が端から端まで垂らしてあり、視界と行動を制限している。 足元にも似たような紙の混合物が散乱していて、少し怖い。 確認しただけで3台-多分もっとあった-のプロジェクタがてんでバラバラな映像を流し続け、 よく分からない音楽や聴いたことある音楽のリミックス-DJ2人がその場で色々やっていたようだ-と思しきものが大音量で流れ続け、 誰が見せる側で誰が見る側なのか判然とせず、 座り込んでPCに向かっている人や、 寝袋の中に入っている人や、 ポップンをハイレベルにプレイし続ける人や、 酒飲んでる人や、 写真撮ってる人や、 ただ呆然と立ちすくんでいる人-私など-や、 踊り狂ってる人や、 同人誌を破って合成物を作ったり自分の体に貼り付けたりしている人や、 もう各人が思い思いの場所で思い思いに行動しており、 情報が飽和している空間だった。 正確にはこれらが全て同時に起きた訳ではないが、だいたいあってる。 正に-原義の意味で-カオスである。 経験を分りやすく圧縮しようとしても圧縮できないと言うことは秩序がないということな訳だ。 つまりこの空間を伝えられなくても私の表現力不足ではな(ry

無理を承知であの空間の雰囲気を伝えようとするなら、こんな感じだろう。 まず、ゲームセンターを想像して欲しい。 薄暗く、様々な音、しかも大音量、に溢れている。 それなりの人口密度で、各人は自分の好きなことをしている。 お互いの交流は距離が近ければあるが、遠くだとあまりはっきりしない。 そんな空間がまずある。 それとは別に、オタク-ギークと言うべきか-の部屋を想像して欲しい。 個人的な空間で、好きなものばかりが並べてある。 本人には分るが余人には分らない基準と法則でものが選ばれ、配置されている。 “非実在青少年”が一杯出てくるような同人誌の割合が高かったりする。 そして欠かせないのがPCとプロジェクタetc. そんなオタクの部屋が複数人で共同利用されている。 面積は個人の部屋よりは大分大きくて、オタクの溜まり場と言うほうが的確か。 利用者各人のテリトリーは余りはっきりしている訳ではなくて、 私室の規模が大きくなって、より混沌を深めた、そんな部屋である。

さて、この二つ-ゲームセンターとオタクの溜まり場-を強引に結合して欲しい。 具体的には、ゲームセンターの真ん中のゲーム機を何台か撤去して、 そこに四角いスペースを間仕切り、その内側をオタクの溜まり場にしてみて欲しい。 出来ただろうか? これがカオス*ラウンジを私の能力でまとめられる限度である。 全然パブリック・スペースらしさがないって所が秩序と言えば秩序なのか?

さて、分らなかったでしょう? もっと分からなくなりたかったら、是非会場に足を運んでみて欲しい。 最後に一つだけ注意事項だが、”非実在青少年”規制大賛成とか言う人は行かない方が良いだろう。 何か義理があるわけではないけれど、珍しい体験をしたのだから、宣伝しても罰は当たるまい。 文章を書いていたら今日が随分遠くに行ってしまったが、 私の思考も遠くに飛んで行きかけているので、そろそろ今日を終らせたい。 皆様良い明日を。

笑止千万

11 月 3rd, 2009 by 窪田 史朗

偶には技術とは関係のない、思索的な内容も書いてみようか。と思ったので、書く。 今回のお題は「笑い」である。笑いについての言説は、木許さんの記事で挙がっていた例に限らず、 数多く存在する。笑いというのは、実感として我々「ヒト」を大きく特徴付けているものだし、 人間関係の中で笑いにまつわるエピソードも多い。 どうでもいいが、タイトル「笑止千万」は不可思議な単語である。「笑が止まること甚だしい」と言う字面だが、どう考えても(あざ)笑う時に使うだろコレ。

事の起こりは先学期のゼミにまで(!)遡る。誰か(ごめんなさいどなたか忘れました…。)が、 「下ネタはナゼ可笑しいのか」をいろんな人に聞いて回ってはどうか、という企画を提案した。 この企画自体は特段進むことはなかったのだが、私の中に素朴な「笑?」という疑問符が残った。 特に私が注目したのは、洒落と駄洒落である。 洒落と駄洒落は構造的にまったく同一であっても、面白かったり面白くなかったりする。 その差はどこから来ているのか、があまり自明ではない。 いったい何がそれを決定するのか気になりませんか?皆さん。

そして時々考えること約1月。ふっと思いついたのが5/20前後だったと思う。 んで以下思いついた後、ゼミ長とSkypeしたときのログである。

※この前になんか私が駄洒落を発している [2009/05/23 0:45:50] ゼミ長: ギャグ好きだよね
[2009/05/23 0:46:01] 私: 駄洒落は人類の基本です(嘘
[2009/05/23 0:46:23] 私: まぁマジメな話、最近何故しゃれは面白く、かつ駄洒落はつまらないのかについて考察しているのだ。
[2009/05/23 0:46:28] 私: 面白いモデルが出来つつある。
[2009/05/23 0:46:48] 私: きっとポイントは不安なんだ。
[2009/05/23 0:46:51] ゼミ長: ほう?
[2009/05/23 0:47:44] 私: とっさに理解できない→不安や困惑→理解→不安・困惑の解消→緊張の緩和→群れの仲間への伝達
[2009/05/23 0:47:53] 私: って流れなのかなーと。
[2009/05/23 0:48:08] 私: で、「瞬間的に理解できる」駄洒落は、不安にいたらないので笑いを生まない
[2009/05/23 0:48:25] 私: また、「使い古したギャグ」も先の展開が予想できているので不安にならない
[2009/05/23 0:48:35] ゼミ長: おもしろいじゃない。
[2009/05/23 0:48:47] 私: 笑ってやっぱり本来は群れの仲間への伝達でしょ?
[2009/05/23 0:49:26] ゼミ長: 何年か前の東大ぶんさん後期試験で「何故笑うのか」みたいな問題あったよね
[2009/05/23 0:49:32] 私: へーしらねーや
[2009/05/23 0:50:07] ゼミ長: おれは「不条理」って書いたんだけど
[2009/05/23 0:50:18] 私: 何らかのギャップが存在するのは明らかだよね
[2009/05/23 0:50:24] 私: ズレ
[2009/05/23 0:50:29] ゼミ長: うん。
[2009/05/23 0:50:43] 私: でもそのズレが、一足飛びに笑いにつながるとは思えないんだな
[2009/05/23 0:50:58] 私: あと笑ってなによって話ね
[2009/05/23 0:51:12] ゼミ長: 水木しげるが戦争から帰ったとき
[2009/05/23 0:51:26] ゼミ長: 近所をまわったんだって
[2009/05/23 0:51:30] 私: ふむ
[2009/05/23 0:51:33] ゼミ長: そのとき
[2009/05/23 0:51:48] ゼミ長: 近所の家の息子とかは戦死しているわけで
[2009/05/23 0:51:52] 私: だよなぁ
[2009/05/23 0:52:01] 私: あの人も片腕吹っ飛ばされて帰ってきたわけだし
[2009/05/23 0:52:10] ゼミ長: 「なぜだか知らないがいつも笑ってしまった」って語ってる。
[2009/05/23 0:52:16] 私: なるほど
[2009/05/23 0:52:29] ゼミ長: 冗談も
[2009/05/23 0:52:40] ゼミ長: 戦争での生死の運
[2009/05/23 0:52:41] ゼミ長: も
[2009/05/23 0:52:45] 私: 「箸が転がってもおかしい」ってやつね
[2009/05/23 0:52:58] ゼミ長: うーん?うん
[2009/05/23 0:53:04] 私: うーん?だなw
とまぁこの様に、夜な夜な正しくchatをしたりしなかったりして夜が消えていく日常を送っているのだが、それは兎も角として、私のアイディアはほぼここに収束しているので紹介した。

一応まとめておくと、出発点は以下の二つである。

  1. 笑いにはシグナルとしての性質が強く存在する
  2. 笑いの源泉は「変」言い換えれば「異常」である
詳しく書けば、前者は笑いという感情とその表現についての分析であり、他の感情、例えば怒りや悲しみ、喜びなどと比べて、笑いというものには、それを表現する動作が密接に結びついている、ということである。涙を伴わない悲しみや、発露されない怒りというのは有触れているが、笑いを押し殺した笑いというのは存在自体が難しい。「笑い」という言葉それ自体も、感情と動作が区別されていない。これ以上説明しようとするとドツボにはまりそうなのでこの辺で切り上げる。
後者は笑いを引き起こすものについての考察で、パターンとその逸脱が必要である。パターンという言葉は範囲が広すぎて嫌なのだが、範囲が広すぎて便利だ。変な顔にしても、ピエロにしても、お笑い芸人の動作にしても、ギャグにしても、”お道化る”ことは、一般的なその場に期待あるいは予想されるコンテキストからの逸脱を、意図的に、そして第三者に意図が明確であるように行うことだと言って良かろう。
飛躍するが、一般にコンテキストからの逸脱があった時、対象が期待される振る舞いをしなかったときに、人間に起きる原初的な感情は、「恐怖」ないし「嫌悪」だということに、あまり異論はないと思う。
形式的には、笑いがこみ上げてくる対象と嫌悪や恐怖を掻き立てられる対象に違いはないのではないか?なぜそのとき笑いがこみ上げてくるのか?
笑いが起きる場合と不安が起きる場合で異なるのは、笑いの場合、そのコンテキストからの逸脱は自分にとって脅威ではないことが重要だろう。実際には存在しない脅威に対して、いちいち防御反応の準備をしていては身が保たないからだ。この辺りまでが、後者の説明である。
そしてここから両者を合流させて飛躍していくのでご注意を。形式的な不安要素が実質的な脅威ではないことを判定して、防御反応が単に起きないにとどまらず、笑いという質的に異なる反応が惹起されるのは、もう一歩踏み込んだ何かが必要だろう。ここで、先ほどの「笑いのシグナル性」に再び触れることになる。笑いは、他者への伝達の手段だ。さらに笑いは「脅威の誤認と訂正」から生まれるとすれば、即ち「笑いとは、脅威が存在しないことを仲間に伝達するための手段だ」ということになりはしないか。
この仮定が正しいなら、笑いが伝染することの説明も容易だ。つまり、自分自身が直接に不安を覚えなくても、自身を伝令役にして、群全体に「脅威が実際には存在しない」メッセージを伝えることには意味がある。
またユーモアがしばしば危機に対処するとき重要だとされるのも頷ける。つまり過剰な不安を取り除き、冷静な反応を取り戻すために「笑い」というシグナルが効果的だということだろう。そしてそれは群全体に共有される。
更に続ければ、ブラックユーモアや風刺がしばしば「全く笑えない話」にもかかわらず可笑しいことも、なんとなく説明できそうではある。

この、(笑い)=(脅威不在を伝達するメッセージ)の図式から見ると、駄洒落のつまらなさはどこから来るのだろうか。
もう先ほどのchat logに書いてあることだが、駄洒落があまりに自明な構造を持つために、不安を引き起こすに至らないのではないだろうか。面白い洒落には、理解するまでに「間」が存在することがほとんどだ、ということもこの説を支持する傍証になる。つまり、この間に構造から不安が発生しているのだ、ということだ。

…とかようなことをせっせと考えて早幾月、先月予てから読みたかったV.S.ラマチャンドランの『脳の中の幽霊』(原題”Phantoms in the Brain”)を読んだら、ほとんど同じことが書いてあった。推論の原点は彼の場合「笑顔は真顔から威嚇の表情へ変化する途中で止まったものだ」というところにあるのだが。
なんにせよ、それほど大それたアイディアではなさそうだ、というのは嬉しいと共に寂しいものである。以上、笑いの起源と言うアプローチから、笑を分析してみたのだが、皆さんはどんなアイディアをお持ちですか?

ブラウザの壁

10 月 15th, 2009 by 窪田 史朗

さてさて今回は久しぶりのcodingネタですよ。
最近何やっているかというと、なんか再びPHPに戻ってます。
というのものページ作成を例によって某氏と一緒にやっていたから。 いや正確にはやっているから。でも一通り完成といったところですね。見た目は。

今回主に私が書いたのは、WordPressのインストールディレクトリ配下にない場所に置いたPHPファイルから、WordPressの情報を取り出す、という作業。 最初はworpressの関数群を呼び出す必要があるかと思ってたんだけど、よく考えたら(いや考えるまでもなく)自分でQuery発行する気があるなら、データベースに直接クエリ発行してしまった方がいろんな意味で早いんでね?と気づいた訳です。
どの道、書き込みをする気はなかったのでWordPressのデータベースの情報を整合性を破壊する心配はないし。
DBへの負荷はむしろ減るかも知れないし(笑)。

さて私がやったこと、そして躓いたことを。
まず第一に、自分の使っているサーバのDBへアクセスするために必要な以下の情報を確認。
ホスト名、ユーザ名、パスワード
次に、WordPressが利用しているデータベースのDB名。
最後に、WordPress(MU)が利用しているテーブルに着く、データベース接頭辞。
WordPressの関数群を利用するなら、WPDBオブジェクトのインスタンスglobal $wpdbのメンバbase_prefixを参照すれば分かります。
そうでなくとも、phpMyadminするなり、MySQLに接続するなりすれば、分かると思いますが…。
あとはそもそもconfig.phpをみれば丸わかりですな。上記全て。

とりあえず、単純にDBに接続するテスト。mysql_connectを呼んで、適当なテーブルから情報を読み出してみる。
成功。次に、後々使うに決まってるからmysql_な関数たちのごく一部、使いそうなやつだけラッパーを書いた。
ここで、クエリを発行するためにmysql_real_escape_stringをしようとしてハマった。
ただの勘違いでしかないんだけど、echo mysql_real_escape_string($string);すると、文字化けするんだよね。
ちなみに$stringはUTF-8で書いてる。そもそも文字化けして当然だということをよく理解せずに、「何で文字化けしてるんだー!」とあっちゃこっちゃのQ&AやらTipsやらリファレンスやらを読み漁るも、解決できず(出来る訳がない)。

ようやっとescapeしているのがシングルクォートや\r\nだということを理解し、なんか徒労感に襲われる(実際徒労なんだが)。
んでクエリにreal_escapeした文字列をぶち込んで成功。
そしてクエリ丸ごとescapeして失敗(そりゃそうだわな)。
やっぱり駄目か…と思いつつ、クエリを渡すとシングルクォートでexplodeして、シングルクォートに挟まれた文字列だけをescapeして再結合するルーチンを追加。シングルクォートがいくつでも今のところ動いているようだ。
やったことは単純で、explodeした後の配列を$stringsとすると、for($i=1;$i SQL文はシングルクォートから始まったりしないという知識を利用しているのであんまりよろしくない気もするが、正しくないクエリーは何れどこかで弾かれるので、まぁ問題ない気もする。

ここまでできれば後は簡単で(といいつつエラーを出しまくったが)、WordPress CODEXのデータベース概要を見ながら、欲しい情報を取り出すクエリを書き、ラッパー関数からクエリの結果をもらい、整形するのみ。
こっから後で出したエラーは行末の;忘れたとか文字列結合演算子.を飛ばしてたとかそんなんばっか。
SQLのWHERE句の中でのNOTを使おうとして詰まったが、!=に書き直したらあっさり動いたので満足している。

もうひとつ微妙なエラーがあったのを思い出した。
if($array[x]=query($query_strings)){}の形式でif文を構成した時、queryの結果がNULLだと、 if文の中は実行されないが、変数にFALSEが入るなんでorz
結局elseの中でunset($array[x]);しましたよ。妙な仕様だなぁ。
たしか$array[]だとちゃんと代入されないんですよねー。
添え字を指定するとミョーなことが起きるorz
ご注意ください(誰が?)。

さて次に私が請け負った作業がCSSの調整。ページの大枠と素材は某氏が既に完成させていて、私は調整だけ。
とはいえクロスブラウザにまつわる問題…と言うよりIE7とIE6で表示が崩れるのを何とかする、つー話だったので、辛かった。
何しろCSSの何がどう影響を与えているのか見当もつかなんだ。
真IE6の挙動は奇怪です…。(と言いつつ我が家のデスクトップのIEはver6ですが)
今回初めてIE8を見直しましたよ。ええ。標準準拠は素晴らしい。
結局どんなところで躓いていたかと言うと、

  • XHTMLのxml宣言がひっかっかっていた。
  • CSSでfloat指定したセレクタに、widthとpaddingを同時指定するとバグ、に引っかかっていた。
詳しくは、前者はDOCTYPE宣言がブラウザに与える影響と言う話で、 原因が分からないので兎に角ggrks状態だった私が、ヤケクソでIE opera firefox css 崩れるとかそんなワードで 検索してたどり着いたページにあったのをみつけて、藁にすがってみたらこれだった、と言うもの。
これを修正するまでIE6では絶望的にレイアウトが崩壊していた。いわゆる互換モードだったわけ。
互換モードだとそれこそCSS Hackでもしない限り、まともな表示は望めない。
後者は、IE6 float CSS 上下 崩れるとかで検索して出てきたページで見つけたもの。
ほかのサイトでも見てた内容のような気はするけど(IE6はバグのワンダーランドなので解説サイトは山ほどある)、 この時点まで作ってるサイトのCSSが引っかかってるとは気づいてなかった訳です。
どういうことかといえば、aタグにIDを割振ってあって、CSSの中でaタグすべてについてpaddingを設定しており、 あるIDの要素についてwidthを設定してあった為に、ぱっと見分からないけれども特定の要素に対してどちらも設定されていた、と言う話。
widthがないといかんともし難いので、paddingを削除。
書いてしまえばこれだけなんだけど、なにしろどこで何が起きてるのかさっぱり予想がつかないので、先が見えない。
先の見えないデバッグは心に傷を残します(笑)。
自分で書いたコードならどこでエラーが起きてるか見当が付くし、テストコード挟めばハッキリ分かるので良いんですが…。

JavaScriptもそうですが、ブラウザの非互換性は本当にもうどうしようか、と途方にくれてしまいますね。
もうブラウザなんて一種類で良いよ!!!とか思いましたとも(危険発言)。
そういう私がメインで使っているブラウザはOpera(シェア2%以下)だったりするんですが。
IE6のシェアも今年夏時点でまだ24%あると言うことですから、決して疎かには出来ない…。


クロスブラウザ問題は、永遠に、不滅です。

NINSシンポジウム08事前レポート

9 月 23rd, 2009 by 窪田 史朗

遅くなってごめんなさい。
また本記事は大変読みにくい超長い構成になっていますので、 直下に設けました目次をご利用下さい。

前書き-という名の言い訳-

NINSシンポジウムの取材記を書く時、常に考えるのは「どこまでネタバレをすべきか?」という事である。
そして次に悩むのは、「一体どこまで短くすべきか」という事である。
「情報の密度の高い文章を書けないだけ」と言えばそれまでだが、長くなることなること。 という訳で今回も大変長い。個人blog部分に書けるからといって、自重しないモード全開である。どーでもいい話もかなり混じっているので、注意されたい。
上の目次及び各記事先頭についているナビゲータでは、取材記事部分本体へ直接飛び、前と後にあるどーでもいい話は飛ばされるので、活用されたい。
何か冷静に読み返すと、後の記事ほど暴走が加速している気がする。気のせいだといいなぁ。

朝九時ごろに自宅を出、一路京都を目指す。無事予定通りの時刻に新祝園に着く。バス停で何気なくバスを待っていたのだが…隣に居るのは遠藤氏ではないか!ってか先に移動しているはずの”交通の便がいい組(内藤氏/朝倉氏/西田氏)”はどこへ?
とにかく二人で先にATRまでバスで移動してしまうことに。
遠藤氏のiPhoneが活躍し、”先行しているはず組”とも連絡が取れた。敷地の外、看板の前あたりで待つ。間もなく合流。時間があったので、道路の向かい側のけいはんなプラザになんとなく移動し、残りのメンバーを待つ。日時計が巨大だった。
無事合流を果たし、いざ取材へ。

その1-川人 光男氏-

前の記事|目次へ|次の記事

@ATR研究所 2009/08/26
今回の取材で最初にお話を伺うのは、ATR脳情報研究所所長の川人光男(かわと みつお)氏。

計算論的神経科学を打ち立てようではないか、というお話だった。

AIやロボット工学が生まれてから幾星霜(は言い過ぎだが)、私達の知っているロボットはアトムやドラえもんから程遠い。四次元ポケットや超小型原子炉は置いて置くとしても、人間くらいのサイズで人間並みの運動能力を持つロボット、あるいは人間大で人間のような思考が出来る人工頭脳、どちらもまだまだ夢のような話だ。
もちろん、人間は1GFLOPSなんて計算速度は持ってないし、人間には出来ない運動が出来るロボットだって存在する。しかし、「人間を模倣する」ことはどちらについてもとても難しい。ここから、従来の(広義の)人工知能研究やロボット工学、あるいは生理学や脳神経科学の路線をそのまま延長しても、「人の理解」あるいは「人の再現」は難しいのではないか?と氏は言う。
その立場から氏が提唱するのが、計算論的神経科学である。計算論的神経科学が如何なるものであるか、は講演を聴いて頂くとして(講演終了後に追記するかも)、そのための強力なツールになるのがBMI:Brain Machine Interfaceである。

BMIは様々な方法で脳から直接に情報を取り出し、それを機械などへの入力に用いる技術の総称である。この場合”直接に”とは、筋肉の運動を介さなくても良い、という意味で、必ずしも「脳に電極を刺す」という意味ではない。脳の情報を取り出す方法にはいくつかある。つまるところ脳の物理的な状態変化を測定する訳であるが、fMRI、NIRS、MEG、EEG、といった代表的な方法がある。しかしいずれも一長一短あり、どれか一つだけで何でも出来る、とは行かない。その為複数の方法-と統計的手法-を組み合わせることで、機能を補完し、空間時間分解能の双方を高める研究が行われている。BMIの直接的な応用として、医療で障害を持つ方の機能を代償する装置(例えば義手)やリハビリテーションを支援するシステムの構築が期待されている。

とは言え、氏が何度か強調されていたのは、氏の興味は「人間の理解、脳の理解」にある、という事である。
氏が「脳を創る」アプローチにこだわっているのは、「脳に関する生理学的な、あるいは神経科学的な記述の蓄積のみで脳を理解したといえるだろうか」という疑問と、「脳ができるのと同じ作業を別のアルゴリズムによって解いたとしても、それは脳の理解とは言えない」という信念からだ。
であるが故に、脳型の情報処理と、人間型の出力装置とを組み合わせて研究していらっしゃるのである。

さてその他にも面白かったお話を雑多に書いて行こうと思う。
まずはCB-iの話。CB-iは敢えてモーターではなく油圧と空気圧で動かしている。
これは「人間らしいロボット」を実現するためのコダワリで、これによって「柔らかい」ロボットを実現している。
一般的なヒューマノイドロボットは、電動である。しかしモーターの回転は直接関節の駆動に使うにはパワー(トルク)がない。その為、減速ギアがどうしても必要になる。しかし梃子の原理で増幅されているから、逆に関節に外から力を加えてもモーターはほとんど回らない。
つまり、人間のように外からの力に合わせて筋肉や関節が曲がることはなく、大きな力が加わればロボットは壊れてしまう。また人間と一緒に活動することを考えると、人間が加えた力に対してロボットが変形しなければ、人間が怪我をする。(もちろんソフトウェア的に実現する方法もあるだろうけど)構造的に実現しましょう、という話でした。

従来の脳科学と、BMIと、これからの脳科学についての話。
脳科学では、普通、外に現れた肉体的な動作や、情報処理活動、あるいは認知的な処理などをする時、脳のどんな部位が活動するのか、ということを調べる。そうやって、脳どんな部位がどんな機能を負っているかを特定する。逆にBMIでは、ある脳活動を測定した時、それはどんな行動や思考を惹き起こすかを予想しようとする。そうやって、脳活動から行動を推定しようとするのである。
外から観察して分かること、あるいは被験者の申告によって分かること、をYとする。
そして脳活動をXとしよう。
前者、従来型の脳科学は、Yを見てそれと同時に起きるXを調べることで、脳を調べている。
後者、BMIを利用した研究は、Xを見て、意図したYを推定しようとしている。
前者と後者は丁度鏡に映したように反対なのがお分かり頂けるだろう。
さてここで、同じXとYの組について、両方のアプローチで導かれる脳の活動部位を比較してみると、驚くべきことに25%も一致していない、とのことである。
つまりXからYでも、YからXでも、どちらでも不完全な結果しか得られないのだ。そこで氏は、これからの脳科学はXとYの相互作用を問題にしなくてはいけないのだ、と主張するのである。

ここからは私の感想である。
実は森本淳BRI研究室長と佐藤雅昭計算イメージング研究室長にもお話を伺ったのだが、省略します。ご免なさい。佐藤氏は複数の方法での脳測定を組み合わせる統計解析手法の研究者、森本氏はロボットの制御アルゴリズムなどの研究者でCB-iの解説等をしていただいた。
去年の夏にもお会いしたのだが、川人氏は飄々としたカッコイイオジサンである。
結構キツイこともさらっと言ったりする。「もう私も年だからこんなこと(脳科学の新パラダイムの提唱)なんかが言える」などと笑っていた。
言葉遣いの所々に出身分野の物理を感じさせる人だった。今回、こういった研究者の方の出身分野を感じることが多々あった。
脳の分野が、今生まれつつある分野であり、言わば脳科学出身の人がいないからということと、脳が極めて難しい対象で、様々な視点とアプローチから切り込んでいる人たちがいることを反映しているのだろう。

ATRを19時前にお暇し、東京帰還組と分かれ千里中央へ移動。
ホテルへチェックインして荷物を置き、夕食へ。
うろうろして定食屋さんへ入る。その後コンビニに寄ってからホテルへ戻る。
なぜか四人揃ってようつべで面白動画を見る。何でだろう…。
そんなこんなで夜も更け、みんな元気がなくなってきたところで解散。
二日目は阪大である。ホテルから近いので朝は遅め。バイキングをつめこみ、更に途中サンドイッチを買ったりしつつ、モノレールに揺られて阪大へ移動する。
途中太陽の塔を眺める。実物を見たのは初めて。
取材を始める前になにやら立花さんが電話をしている…。え?後で激光が見られるかもしれない?ほんとですかそれ。
何はともあれ時間が迫っているのでまずは予定通り取材に伺う。お邪魔したナノバイオロジー棟は新しい綺麗な建物で、エントランスに置かれたDNAを意識したタイルとソファが印象的だった。

その2-柳田 敏雄氏-

@大阪大学 2009/08/27
柳田氏は、エネルギーの切り口から、話を始められた。
あなたがこの記事を見ているPCは何Wだろうか?因みに我が家のPCは135Wだそうだ。もちろんピーク電力だと思うけど…。
対して、人間の脳は1Wである!!もっと少ないかもしれないとか。
成人男性の一日の消費カロリーは一般に2500kcalなんて数字が良く出てくる。これから単純計算すると、消費エネルギーは121Wである。これだけでもPCより少ない。
当然、これは全身である。ので、通説にしたがって考えると脳の消費エネルギーは25Wぐらい。とはいえこれは生命維持、つまり細胞の代謝に費やされているエネルギーであって、計算に使っているエネルギーはもっと少ないはず。
で、脳内の思考活動に伴ってどれだけ温度が変化するか(なんでも最後は廃熱になります)をMRIで測定してみた所…。先述の通り1Wとかそれ以下とか、まぁそんなスケールになっちゃうらしい。

言うまでもなく、人間の脳は”超”複雑系だ。想像しがたいが、50兆のシナプスがある。
さてこのシナプスがOnとOffしかないとして、パターンの数はざっと2^50e12=(2^50)^1e12≒(1.12*10^15)^1e12≒10^(15兆)だ。うーんすごい。
柳田氏が情報系の人に単純にこれと同じだけのパターンを実現する電子回路の消費電力を聞いた所、「兆になったらもう一緒だから10^(15兆)Wだね」とのこと。
宇宙のエネルギー総量は10^70Jだそうなので、なんというか桁違いもいいとこである。

ここから氏は、生物の神経系が問題を解くためのシステムは、エネルギーの観点から見て、全く既存のストアドプログラム方式のコンピューターとは異なるものである、と結論付ける。チューリングマシンや、他の形式システムのような、アルゴリズミックなものではない、もっと「いい加減」で「間違える」けど「省エネ」で「行き当たりばったり」なシステムなのだと。

そこで氏が提案するのが、「ゆらぎ」を取り入れる、というアイディアである。ノイズを除去するのではなく、その存在を受け容れ、さらにノイズを入力の一部として活用し、探索的な方法で解を見つけ出すようなシステムが、動物の脳内では使われているのではないか、というのである。
そのためにマクロスケールでは信号に対して小さくなりがちなノイズを「積極的に」作ることさえしているらしい。

具体的な揺らぎを使ったプロセスの紹介や応用例は講演でお聞きいただくとして、以下また興味深かった話など。

まず一つは、生体システムは群知能的というか、多数のエージェントが集団として機能を実現している。そして面白いのは、「誰かがサボっても他の誰かが頑張れば全体としては上手く行く」という氏の指摘である。冗長で非効率的だけどロバストというか、頑丈なシステムが実現される鍵は、正にその”いい加減さ”にあるという。関西弁の”ええ加減”の方が近いかもしれない。
氏が加えて指摘するのは、単に超並列的に多数の要素がてんでバラバラに振舞ってもダメで、階層的に下位の要素群が上位の指示、というよりも”好み”を実現するような動作をすることで、全体として目標を実現するシステムなのではないか、とのことである。
この上位が提示する目標を、下位のシステムが探索的に求める訳だが、全部が全部上手く行かなくても、下位のシステムのどれか一つでも目標を達成してくれればそれで十分、とできるある種の余裕が、生体システムの頑丈さを生んでいると言うことだろうか。

別のトピックで、かなり微妙かつ難しいのだが、データと情報の違いって何だろうか。
一般に情報処理といえば、この二つは基本的に区別されない。私が「”記号”とその上に載っている”意味”の違いですか」と質問した所、「人によって定義は違うが、データから情報を区別する要件として、受け手に”意味が取れる”とか、”好ましい”とか、”重み付けがある”ことが挙げられることが多い」とのこと。どうやら、情報にはある種の主観性が伴う、ということらしい。認識する主体が必要、といった方が適切かもしれない。
翻れば、データは記号列の様な、客観的なある程度実体を持つものだと考えてよさそうだ。
この辺は私の解釈がかなり入っているので正確性は保証できないが…。分かってない人による不適切な例かもしれないが一応書いておくと、
例1.二つの言語で同じ意味の文を書けば、記号としては異なるがそれから受け取れるメッセージは同一である。
例2.あるドット絵を縦横それぞれ2倍に拡大しても人間には同じ絵にしか見えないが、ファイルサイズは変わる。
人間は形式的な表現からそれとある程度分離した情報を取り出せるのだ、というニュアンスがお分かりいただけただろうか。

もしデータではなく情報を直接処理することができるアーキテクチャを見出せれば、今のコンピュータにとっては難しい問題も、巧みに解く全く新しい情報処理装置が生まれるかもしれない。ただ生命型の情報処理と、機械型のデータ処理はトレードオフの関係でどっちもと言うのは贅沢らしい。

感想。エネルギー論という切り口は極めて新鮮だった。
氏曰く、「生物系の人は複雑さに慣れ過ぎている、工学系の人は複雑さを諦めすぎている」とのこと。関西弁を操る関西人であり、タイガースファンらしい。
切り口からしてそうだが、電子デバイスと生体素子をアナロジーとして、あるいは抽象的な機能を抽出して比較するのではなく、物理的実体のスケールやエネルギー、ノイズといった”役者”が登場する辺りにエレクトロニクスのバックボーンを感じる。

私も何だかんだで情報とデータを混同する傾向があるので、その辺も興味深かった、というのはもう書いたか。この「データと情報」の議論は延長の仕方によっては「普遍的な情報の表現」とかいう話が出てきそうであるが、今回の話を聞いた限りでは、個から切り離せない”主観”や”価値判断”が関連してくるので、そうではなさそうである。
ん?自分で書いた文章を読み返してみると、”情報”を処理するシステムには何らかの”主体性”が必要ということに…なるのだろうか。

人工物と比較するといつも思うことではあるけれど、自然の造形はなんというか偉大である。

取材の後、同キャンパス内の大阪大学レーザーエネルギー学研究センター(ILE-OU)の慣性核融合実験棟にお邪魔する。その話については番外編に書きました。
かなり長時間何だかんだと見て周り、結局この日も大阪大学を出たのは19時を回っていたような…(ちゃんと覚えてません)。
昨日に引き続いての泊組4名は、「折角大阪来たんだし」とよく分からない理由から道頓堀をぶらぶらした。なんなんだあの観覧車は。なんなんだあのギター?ヴァイオリン?エレベータ?フリーフォール?とか思いつつ、お疲れ気味だったので割とさっさと寝ました。てか潰れました。
前日午前に栄田さん提案で購入した正規格安切符(…切符ではないらしいが)で新幹線に乗り、名古屋へ移動。そこからは名鉄で東岡崎へ。
久しぶりのNINS岡崎共通キャンパスへ歩く。残暑が厳しい日だったのか、夏が暑い岡崎だからか、暑い暑い。日陰が恋しい炎天下を歩く。後で伊佐氏から聞いたがこの辺ではミカンを作っているらしい。そりゃ暑いわ。このキャンパスには中に橋があるんですよね。門を入って入構手続きをし、生理研へ。

その3-伊佐 正氏-

@生理学研究所 2009/08/28
伊佐氏の話では”盲視”という現象が重要な役割を持つ。孟子ではない。
読んで字の如く、”見えないのに見えている”現象である。

人間はモノをどこで見ているだろうか。勿論眼球であり、網膜である。しかし、ある意味で「見ているのは脳」なのだ。脳がなければ当然何も”見えない”。網膜に像が映っていても、である。さて通常眼球に入ってきた光は、網膜上の細胞の働きで神経の信号に変換される。それが視神経を伝わって一旦交わり、右視野と左視野に分かれて左視野の情報は右脳に、右視野の情報は左脳に、それぞれ送られる。
右視野と左視野に分かれた後、途中で左右の脳の間にある視床に寄り道をして、脳の一番後ろ辺りにある一次視覚野に入る。多くの基本的な視覚情報処理は一次視覚野(V1)で行われると考えられている。
この後、視覚情報はより”高次の”視覚野へと受け渡され、更に高度な処理をされて、その結果が意識に上ることになる。
事故や病気(典型的には脳梗塞など)によってV1を損傷すると、当然ながら視覚に障害が出る。例えば片側のV1が破壊されてしまえば、破壊されたのと反対側の視野が失われる。(反対になるのは眼球で像が逆転しているから)

盲視とは、このようにV1を損傷した患者の中には、不思議なことに、見えていないにもかかわらず”見えている”人がいる、という現象のことである。
より正確に書けば、「視覚的な情報は受け取っているが、それを意識することができない」ことのようだ。
どうやってそんなことを調べるのか?といえば、例えば患者に選択肢を提示した上で、見えないはずの視野に何かを見せ、選択肢からどんな刺激だったかを選んでもらう、といった方法が使われる。驚くべきことに、見えていないのに偶然とは言えない正解率で正解する、というのが盲視現象である。

ここでこういった症状を呈する人にも、「全く何にも見えていない」と言う人と、視野に稀には「何か感じる」けれどもそれは”見える”とは違う、と言う人と二種類いるらしい。
いずれにしろ、通常の視覚体験を伴わずに、「見えている」としか思えない行動、つまり視覚的な情報を元に起こしているとしか思えない行動、を起こす事が可能な人がいるのである。

どうやらこれには視神経からの情報を受け取って、眼球運動に関連しているような脳の領域、上丘が関わっているらしい。V1を介さずに、高次の処理系へ視覚情報を渡す別経路が存在するのだ。
別経路からの情報を使って、視覚的な情報に基づいた行動を起こすことはできる、 しかしその視覚情報を認識していることを意識できない。そう、「意識」できない。では意識とは何で、どのように生じ、どんな意味や機能を持っているのだろうか。
氏は、盲視はそんな疑問に答える鍵になるかもしれない、と言う。
以下詳しい話は講演をお聞き頂くとして、そのほか面白い話とか。

上丘は進化的に古い領野で、両生類や爬虫類、魚類は結構ここをメインに使っているらしい。ネコはV1が壊れても、行動的には余り変化がないそうだ。つまり、V1を通さない経路が発達していて、余り困らないらしい。びっくりだ。
それに対して霊長類になると、明らかにV1の損傷は行動に変化をもたらす。
視覚処理から行動への間に、意識とか、そういった高次脳機能が関わるようになっていると言うことだろうか。

意識についての氏の補足。
「最近の脳科学が明らかにしてきたのは、どちらかと言えば意識に上るような処理の比重は小さく、意識は後付と言っていいくらい」かもしれないそうで、「盲視のような現象は特殊に見えるけれども、例えばプロ野球選手のように、意識してからでは間に合わない行動は結構あって、そういった行動では”知覚した”という意識は行動に遅れて起きているはずだ」とのこと。そういう話はしばしば聞くけれども、この体を動かしているのは”私”ではないのかもしれない。

さてでは、「意識に意味はない」のだろうか?「結構そういう意見の人も多い」とのこと。もちろん、限定が入って、「行動には意識が必要ない」と言う意味である。意識は、後から環境と自分の行動を解釈し、理由付けを行うのであって、行動そのものには意識は介入していない、とする人たちが結構多いらしい。直感には反するけれども、実験的に「意識を通さない行動」を取り出すことは結構可能で、そこから単純に結論付ければ「意識は行動を統御しない」と言うことになる訳だ。
しかし、氏は「この議論は、意識を介さずに行動できることは証明しているが、全ての行動で意識の介入がないとは言えない」ことを指摘していた。日常感覚からすれば、あくまでも行動は意識的決定に伴うものなので、私にはこちらの方がしっくり来る。
因みにこの議論に出てくる”意識する/している”は「報告可能な内容を持つこと:reportability」だそうだ。

また川人氏の項では触れられなかったが、伊佐氏の研究室では、ATRや東京大学などと共同で、シート型の皮質表面電極(電極自体の開発は東京大学の鈴木氏の研究室だそうだ)の研究も行っているとのこと。これは川人氏の言であるが、やはり皮質表面からの方が、頭蓋や脳脊髄液や皮膚を通すよりもS/N比が100倍くらい良くなるとのこと。 また、電気的変動の部位を推定する精度が上がる、というのも大きな魅力の一つだそうだ。
当然侵襲度も頭皮に貼り付ける電極より遥かに高いので、より慎重さが求められる方法ではある。将来的には、より侵襲度の高い剣山型電極と組み合わせて、ECoGによる脳内電流源推定の精度を高めることを狙っているとのこと。
こういった複数の方法で採取したデータを組み合わせることで、より低侵襲でも、より正確な脳活動の推定を行えるようにすることを目指している。

またここから下は感想など。
予定のプレゼンテーションの後、研究室を見せていただいた。
入口には遺伝子改変動物を扱っているバイオハザードマークが。

お話の中では意識と無意識みたいな非常に高次の脳機能の話が出てきたが、実験室で扱っている対象や手法はかなりバリバリの生物系と言うか神経科学だった。とはいえサルの実験なんかだと、心理学っぽい部分も結構あるが。
そういった研究内容自体の多様性を反映してか、この研究室に来る人の出身分野も様々で、理学系工学系体育系心理学系と色々な方がいるそう。やはり脳の分野は魅力がありますね。
そういえば氏自身は医学出身ですが、現在研究室で医学出身なのは氏だけだそうで、これはこれで珍しい気もする。

サルでは先程もちょっと触れたがATRなんかと協力して、サルの把持運動のモーションキャプチャと、筋電と、より中枢の神経活動を同時に全部とって、デコーディングの研究をしていたり、力覚とかの研究をしていたりするらしい。
こういった実験系は全部コンピュータ制御で、どっかからシステムを買ってくるのではなく、アンプやコンピュータなどの要素を用意して、自分たちでシステムを組んでいるんだそうだ。PCの筐体にIPアドレス書いた紙が貼ってあったのが大変印象的だった。

他にマウスでの研究をしていて、こちらはモロに神経科学。
上丘のスライスを作って、電気生理的な実験や、細胞の解剖学的な形態分類などをしているとのこと。最近では遺伝子工学的な手法が随分進んでおり、抑制性ニューロンだけにGFPを発現させたり、チャンネルロドプシンという藻類が持つ光刺激に反応するチャンネル蛋白を発現させたり出来るとか。
他にも光刺激でグルタミン酸を遊離する、ケージドグルタミン酸(籠入りグルタミン酸とでも訳せましょうか)と言う物質を用いたり、などの工夫によって特定範囲の神経だけを、選択的かつ高速に刺激したり出来るようになってきており、局所的な神経回路網の機能を、局所的にコントロールすることで、よりはっきりと、「その部位」が何をしているのか、を明確に述べられるようになってきている。

前二つの研究室が、と言うよりもそこで伺った内容がソフトウェアよりと言うか、概念的な話が結構多かったのに対して、この研究室は生々しく生物系だったので、大分雰囲気が異なる感じだった。勿論どの方も理論系ではないので、実験・実践はしている。
とは言え究極的なゴールは同じ(人の理解)にしても、入口と切り口が大分違うので、その違い自体が大変興味深い。

東岡崎で名古屋からバスで帰る組(+実家組)と、豊橋から新幹線組に分かれる。
私は新幹線組なので、名鉄で豊橋へ移動。豊橋経由組は東岡崎まで車に乗せて頂きました。ありがとうございます。
しかし小田原経由で帰ろうとしたら小田原に止まる電車が…ああ。これも新横浜行きか…。
結局こだまで各停でございますよ。
名古屋組がそろそろ夜行バスに乗り込もうか、と言う時間帯に家に帰り着く。
帰った後のことは余り覚えていないが、夕食を作ったような気はする。
流石に5時台に家を出るとか無理なので、前日24時20分横浜発の夜行バスで名古屋へ移動。
寝るのは得意(オイ)なので、夜行バスでも結構良く寝る。
ただ、飲み物を買い忘れたため、途中大変のどが渇いてSAで補給。
午前6時台前半に名古屋に着く。寒かったので朝マックした。まんまと策略にはまってるぜ。あの位置(名古屋駅のバスが停まる側入口そば)は戦略的なんだろうなぁ…。他の店が開いている時間ではないので、私以外の降車客も足を向けていたようだ。
余り時間をつぶすアイテムを持っているわけでもなかったので、さっさと電車に乗る。
名鉄で一路犬山を目指す。犬山に来るのは一昨年以来二度目である。
予定よりかなり早く犬山着。以降徒歩で霊長類研究所へ移動。
しかし地図を持っていったら迷うこともなくアッサリ着き、かなり待つことに。猫の親子を見て待つ。炎天下立っていたので午前8時前と言えど結構暑かった。うっかりにも程があることに時計を忘れたので、拳で太陽高度を測りつつ、なんか視界が開けているところから風景を見たりしてた。
ちょっと心配になってきたので通行人(?)に時間を聞く。まだ8:30だった。誤差20分くらいか。もう敷地内に入ってもいいかな、と言う気分になったので門を入り建物に向かって歩いている…と後ろからタクシーが。駐車場で合流。他のメンバーの皆さん、どうもご心配をおかけしたようですみません。
まもなく松沢氏が車で駐車場にやってきた。挨拶をして建物の中へ。

その4-松沢 哲郎氏-

@京大霊長類研究所 2009/09/02

まずはチンパンジーの「勉強部屋」に案内していただいた。
入る時には靴を履き替え、マスクをし、体温を測り、名簿に名前を書いた。人からチンパンジーへの感染を防ぐための措置だ。これは当然チンパンジーのためでもあるけれども、人間のためでもある。

さて勉強部屋に到着し、チンパンジーがやってくるのを待つ。今回会ったのはアイ・アユムの親子である。
因みに、これとほぼ同じ勉強部屋が6箇所程度用意され、それぞれの場所で違った”勉強”を行っている。後で松沢氏が「教師が動かずに生徒が動く学校の授業」みたいな感じだ、と例えていた。なるほど。

先にアイが来た。声の大きさと運動能力の高さに驚く。正直な所、原初的な力に対する恐怖を感じた。あとで伺った松沢氏の説明によれば、あの一連の行動は「挨拶」であるらしい。人間で例えれば、長年会っていなかった人同士の感動の再会、を毎日会ってるのに毎日繰り返すのだそうだ。今思い返せば、彼らの時間に対する感覚(後述)とリンクしている話のようにも聞こえる。

挨拶が済むと、勉強用のブースにアイがやってくる。毛を逆立てているのは、人間で言う鳥肌で、緊張・警戒しているらしい。どうやら我々は不審者だと見なされたようです。暫く観察した後、「害はなさそうだ」と判断したのか、アイは落ち着いた。後で聞いた話だが、1週間に一度くらいは見学者がやってくるそうなので、それなりに慣れてはいるらしい。
その後アユムがやってきて、アイが行ったのと似たような挨拶行動をしていた。実験の様子については、私が言を尽くすよりも、研究所サイト内で紹介されている実験の様子を見て頂く方が、誤解や漏れもなく良いと思う。一つ付け加えるとすれば、ブースを囲っているアクリルがかなり不透明に見えるが、カメラと光の加減であって、実際には肉眼で見るとずっと透明だった。

映像を見ていただければ分かるが、チンパンジーが問題を解く速度は速い速い。「目にも留まらぬ」そのもので、問題を全部認識する暇もないほどである。フラッシュ暗算を出来ない人が(私は出来ません)傍からあれを見ているのに似ている。人間でもチンパンジーでも、単純な記憶能力であれば子供の方が高いが、学習や訓練で習得する記号の判別などでは、チンパンジーでも大人、というか学習の長い個体の方が成績がいいようだ。

勉強の後、アイは爪切りや体重測定などを行っていた。体重計には指示されると自分で乗って大人しくしている。注射も拒まない。当然ながら、こういった行為は両者の間にかなり深い信頼関係が築かれていないと出来ない。信頼関係がなければ、体重測定一つでも、麻酔をかけなくてはいけないが、それにしても近づけないので吹き矢でも使うしかない。素人目にも、信頼関係を築くことは人とチンパンジーの双方にとって良いことに思われた。

簡単な身体測定の後、アイは落花生を一個もらっていた。殻を剥き、驚いたことに唇で薄皮を剥ぎ取って食べていた。後で聞いた所、樹上生活者であるチンパンジーの手はごついので、薄皮を剥くと言った繊細な作業になると、感覚が鋭く器用な唇を上手に使うそうだ。

一通り勉強を見た後、上の階へ移動し、ベランダみたいな所からチンパンジーのタワーを眺める。なんか犬山城の方角に輸送機が旋回していたのが気になって仕方がない。
チンパンジーを飼育する区画は大きく二つに分かれていて、片方がタワーのあるエリアで、もう片方がタワーはないが水が多いエリアのようだった。二つのエリアの間の行き来は自由ではないようだ。これは、一つの群れであっても空間的に広がりを持って暮らすチンパンジーの生態を模したものであるそうだ。一つの群れの中でも、人間のようにしょっちゅう接触があるわけではないらしい。

チンパンジーの食事についても独特で、勿論決まった食事時間はあるのだが、それ以外にも木の葉やイネ科の植物など、区画の中に植えられた植物を食べることも出来るようにしてあるとのこと。チンパンジーは当然人間とは生活の仕方が異なり、朝から昼にかけて活動し、真昼は日差しを避けて昼寝、日が少し陰るとまた活動期に入り、日没前後で寝る、といったスタイルだそうだ。そして活動期の間は結構ずっと食べていて、おおよそ人間の食事時に相当するような時間は一日に6-7回ある。人間の食事サイクルに合わせることはチンパンジーにとって快適とはいえなかろう、と言うことであった。
加えて、氏は自分で能動的に働きかけて採集を行うことも意味があるとも言っていた。
関連しているのでここで述べておくと、実は勉強でもらえる「報酬」は、別にチンパンジーの食べられる量を増やす訳ではないそうだ。
つまり、勉強で頑張ってもその分通常の食事に回る量は減るのである。トータルの量は変化しないのだ。氏の解釈では、チンパンジーはこのことを理解していないのではなく、「分かっていても単に与えられるのではなく自分で努力して手に入れる方を好んでいる」らしい。

なんだか全然本題に入れないのだが、この後も昼食中を含め、色々面白いお話があった。が、それはひとまず飛ばす。

さて本題に入ると、氏が行っているのはチンパンジーと言う種を通して、人間を相対化すること、とまとめられるだろうか。
万物の霊長たる人、ではなく、動物としての人(あえて漢字)、類人猿としての人を知るために、最も近縁の種であるチンパンジーを知る。それも実験室のみではなく、野生生態の研究も行う。そのため氏は年に一度はアフリカでフィールドワークを行っている。そうして人間らしさを、翻ればチンパンジーらしさを研究している、と言うことのようだ。

チンパンジーの”足”は、彼らが樹上生活者であるが故にものを掴む機能がある。他の類人猿もほぼ同様だ。ここから氏は、「人間が手を持ったのではなく寧ろ平坦な地面を歩くための足を持ったのだ」と言う。確かに言われてみれば、人に特異的なのは歩くことであって掴むことではない。

そして更に面白いのは、人の手の器用さ、制御の巧みさは、二足歩行ではなく、人が子育てを共同して行うこと、それが複数の子供を同時に育てることを可能にしたこと、の帰結だと論じるのである。詳細については講演を聞いて欲しい。(場合によっては追記するかも。)

既に上の三項からは大分型が崩れてしまったが、もう一つだけ面白い話を。京大霊長類研では、所長は選挙で選ばれるのだが、その選挙権を持っているのが教授会のメンバーだけではなく、院生学生や一般職員(食堂の人まで!)も、なのだという。しかも三選までと再選の制限まである。びっくりする話である。
「文化が辺境に残る例ですね」とは氏の言であるが、なんとも面白い制度だ。

ほかにもシンボルの話とか体脂肪の話とかチンパンジーの文化の話とか、話題は沢山あるのだが、ちょっと書ききれない。

一つだけ書いておくと、氏が霊長類研究所で研究を始めた頃は、PDP-8なんてものを使っていたらしい!だから機械語で直接プログラミングをして学習のソフトを書いていたそうだ。「チンパンジーの学習はどんどん先に進みますから、次々ソフトが必要で、当時はプログラム書いていた時間の方が長いくらい」だったとか。PDP-8は12bitアーキテクチャだそうで、この中途半端な数字が、メモリや半導体の高さを物語っていて、すごく時代を感じた。

氏の印象は一言で言えば「静かな革命家」とでも言った所だろうか。
穏やかながら、かなり”アツイ”人である。また、昨今の学生にはフィールドワークが出来るような頑丈さがないと嘆いておられた。へなちょこの代表例ですみません。
特に印象に残ったのが、「51勝49敗」という言葉であり、氏のモットーのようであった。何を指して「51勝49敗」かと言えば、野生動物保護と実験・飼育動物福祉の活動についての話である。どちらも容易ならざる問題で、一朝一夕に解決する話ではない。しかし、漸近的にでも改善していくべきだ、という氏の信念には心を打たれるものがあった。
私自身は伊佐氏の所で行われていたような侵襲を伴う実験から得られる知見や、それにまつわる技術的な話を聞いてもワクワクするし、そうやって知識を集めること自体に魅力を感じる人間である。(別に動物実験が好きと言う意味ではない)だが、当然侵襲的、あるいは死を伴う実験が行われていることを研究者としてよく知っていて、しかもそれでもなおこういった行動を起こしている、ということに感じ入ったのであった。

今回の取材は立花ゼミ史上でも最長クラスであり、9時前に集合して18時を過ぎて解散した。流石に皆さん疲労が見え隠れでございますね。名古屋に着いた時点で19時台中盤。
名鉄名古屋改札前で時刻表を西田氏に借りて調べると、今から直帰しても結構遅くなりそうなので、ここで他の面子と分かれました。
お握りと赤福を買い(何故)、新幹線に乗りました。帰宅コースは東岡崎からの帰りとほぼ同じでござる。
今回は本郷なので余裕があります。
定期が切れているので、珍しくJRを利用して移動。
赤門前で待っていると、超久しぶりに高校の同級生と再会。暫く立ち話。
をしている内に遠藤氏登場。ついで立花さんも来たので、そのへんで同級生とは別れる。特に混乱もなく医学部本館に移動。結構セキュリティ厳重ですね…。
アルミ製のイスとテーブルが眩しい休憩コーナーの壁にかけてあるのは円周率ではないか。ざっと200桁ぐらいありましたね。左上の3.14を見つけないとナゾの数列でしかないね。

その5-宮下 保司氏-

@東京大学 2009/09/07
氏の話は、「脳科学とはどんな学問領域で、何が出来て何が出来ないのか」といった話から始まった。
そこから話は視覚の方へ。物理的刺激が、分解され、そこから”情報”が取り出され、”情報”が再構成されて私たちの意識に上る主観が形成されている。さて、この情報を取り出す過程では、脳の様々な部位が、それぞれ部位特異的に決まった種類の作業を行っており、例えば色に関する領域は色の処理だけをしている、と言ったことが分かってきている。
目の前にリンゴがあったとして、その色を処理している領域と形を処理している領域は別で、どこかでその情報をつき合わせて「リンゴ」という認識が生まれているのだ。そして意味あるものとして「それが何か」を知るには、記憶との照合が不可欠だ。リンゴが食べ物だと言うことだって、我々は記憶しているから知っているのだから。

以下、記憶が如何なる内部表現で保持されているか?とか、記憶の照合のメカニズムは?と言った話が続く。この辺は講演本編をご覧いただきたい。

そして話はFOK、Feeling Of Knowingへと向かう。氏の訳では「何か知ってるかんじ」だそうである。人間は、何かを提示された時、それを「知っているか」、「知らないか」、あるいは「覚えているか」、「覚えていないか」を、実際にその内容を思い出せるかどうかと別に認識することが出来る。
この、「知っている」ことを「知っている」といった、自己の認識に関する認識を、メタ認知と呼ぶ。この場合はメタ記憶だ。
動物はこういった認知能力をもっている(ものもいる)が、機械はそうではない。氏の言うように「コンピューターはメモリの中にヒットしなければ、記憶がないと推定するしかない」のだ。この、メタ記憶の能力を科学のフレームの上に載せるにはどうすればいいか?氏の取った方法は、「知っている感じがするかしないか」をFOKとしてその度合いを被験者に提示してもらい、それと相関をもって活動する脳領域を調べる、というものだ。

これまたどんな結果が出たのかは講演をご覧いただくとして、付け加えておくと、FOKに信頼性があるかどうかは、問われた知識に関する選択問題を提示することで、正答率とFOKの間に関連があるかないかを調べれば、確かめることが出来る。
テキトーに答えていたり、こういったFOKのような直感は実際の記憶と無関係なのであれば、正答率とFOKも無関係になるはずである。実際にはそんなことはないそうだ。

とは言え、直感であるので、特殊な直感に反する答えの課題などを用意すれば、FOKと正答率の相関を壊すことも出来るらしい。
なんにせよ、このFOKもまた、人間の「なんだかよく分からない能力」である意識とか直感といった、高次の機能のメカニズムや正体を明らかにするための一つの武器である。やはり人のココロというのは摩訶不思議かつとても魅力的な対象だ。

以下興味深かった話等。
例えばAという記号と全く違うBという記号の二つを結びつける、そういった記憶の素を探るような実験が登場するのだが、この”AとBの関連”をコードしている、つまりこの組を選択的に「記憶」しているニューロンが存在すると言うのだ。私が、「その方式で記憶すると脳細胞の数足りなくなりませんか」と質問した所、「別の状況下では全然別の反応を示したりするから全く問題ない」とのこと。それこそが、超多層、超多重入力されている脳の神経系のなせる技だと言う。コンピュータのメモリのような、厳密な一対一対応性を保持する必要は全くないのだ。
しかしやっぱりある状況下である関係を”表現”しているのはニューロンレベルの極めて局限的な実体らしい。この辺の理解については、脳科学に携わる人の中でも、随分と認識に差があるらしい。実際に、特に侵襲的な実験を直接行っている人や、神経のモデルを作ったりしている理論系の人は、機能の局在っぷりと、状況依存性の両方を認識しているそうなのだが、心理学系の人などとは認識に温度差があるそうだ。

また、「電極刺してニューロンの電気信号が取れたとして、他の部分の機能じゃないと言えますか」という質問には、十年前には答えるのが難しかったけれども、MRIが使えるようになったことで、よりはっきり、強くそういった主張をすることが出来るようになったそうな。
とは言え、十年たって、現在のMRIによる実験手法の限界の見えてきた部分もあるという。
現在MRIの実験では、ある機能に特有な脳活動なのか、と言うことを、その機能を使っていない時のMRIでのデータと「引き算」して残った部分を見る、と言う方法で調べている。
例えば質問に対して声で答える課題にしても、その課題を考える脳活動以外に、発声のための筋肉の制御など、必ずしも直接知りたい脳機能と関連のない能部位が活動する。
そこで問題を考えずに発話しているだけの時の脳活動もMRIでデータを採り、その差分を取ることで問題の領域を明らかにする、となるわけだ。

感想。氏は真面目かつ厳密な人物だった。
私は「おばあちゃん細胞」的な極端な機能局在論は余り好きではないのだが、
今回お話を伺って納得した。確かに機能はニューロンレベルで局在しているようだ。
それを、超多重の入力を持つことで様々な機能を一つの細胞に”重ねて”持たせる、というシステムを、生物は採用しているらしい。氏の話の中にも出てきたのだが、「そのコンテクストの切り替えはどんな時にどんな風に起きるのか?また何がおこすのか?」は、非常に面白いテーマだと思う。私にはどうやって調べるのか見当もつかないが。

またメタ認知の類の話はやっぱり面白い。この記事を書きながら、AIのフレーム問題などにも繋がる話ではないだろうか、などと考えて一人で喜んでいる。しかし考えれば考えるほど、一体どんなメカニズムで記憶そのものではなくその有無を調べるのか、一体全体どうなっているのか不思議でしょうがない。

昼飯食べ損なっていたので他のメンバーと別れ、なぜか立花さんと緑さんと本郷の食堂へ。
数日前から猛烈にラーメンが食べたかったのでラーメンを食う。
帰りは時間があるので千代田線から帰りました。特筆事項はなし。

番外-大阪大学レーザーエネルギー学研究センター-

前の記事|目次へ|次の記事
この項目は番外なので、全部この色で行きます。
@大阪大学 2009/08/27
ご免なさい…時間が無いので追記します…。

取材記と見せかけて

9 月 1st, 2009 by 窪田 史朗

ダウト。見せかけてって自分で最初からバラしてますけど。
-2009/9/2追記-作例のFlashが見られなかったのは、kenbundenをkebundenと間違えていたから+ブログ名指定(Fumiaki_KUBOTA)をしないとアップロードディレクトリにアクセスできないから、でしたorz
objectタグの対応状況も知りたいので、時計が見られなかったとか、時計が動いていないとか気付かれた方は、是非ブラウザなどの環境情報と共にコメント欄に書き込んでください。参考にします。
あ、あとコメントに何箇所かウソ書いてたのに気付いたので直しました。

取材記はこの次に来る予定です。…予定です。
一応、例の記事で宣言したとおり、今まで交互に書くのを何とか維持しているので、折角だから続けよう。
今回はFlashに手を出しました、って話です。タイトルからは欠片も読み取れませんが。
内容と関係ないタイトルをつける癖(?)はどうにかした方がいいと思うよ、自分。
真・タイトルはMTASCで始めるActionScript2.0とでもして置きましょうか。

目次

  1. 言わずと知れたFlash
  2. 微妙にマイナなActionScript
  3. MTASC
  4. 作例
  5. 気付いたこと&参考ページ等

言わずと知れたFlash
えー言わずもがなですが、皆さんAdobe Flash Playerはご存知かと思います。
ご存知、ないのですか?コレですよコレ。
皆さんもゲームとかゲームとかゲームとか、Youtubeとかニコニコ動画とか、時々アップローダとか、お世話になってると思いますが、そんな技術の話です。
ゲームばっかりだな。でもリンクしたサイトはお勧めなので、遊んでみてね(オイ)。
その昔はMacromedia Flash Playerと言いまして、Macromediaという会社が扱っていたのですが、今は昔の話です。
正確にはFlashは動画規格とそれを作るためのソフト、Flash Playerが動画を再生するためのソフト、なんですが、あんまり区別しませんね。

微妙にマイナなActionScript
そのFlashの中で、処理手順なんかを記述するためのスクリプト言語がActionScriptな訳です。
Flashは有名だけれどもActionScriptとなるとグンと知名度が下がりますよね。Google先生に拠れば、Flash->17,200,000件に対してActionScript->1,880,000と検索結果が一桁違いますね。
ベクターデータをアニメーションさせる機能と、それをボタンのように扱って次の処理を行う機能が組み合わさることで、Flashは非常に高い表現力を実現している訳ですねー。
その処理を記述するための言語がActionScriptで、ECMAScriptの拡張なので、JavaScriptの親戚と言って良いでしょう。実際瓜二つです。
とはいえ、大分違う所もあります。当然ながらグラフィック関連とか(JavaScriptの場合は基本的にグラフィカルな機能はありませんので)。
どちらにしろ、このテの言語にあまり馴染みがないので戸惑う所は多々ありますが…。
単純な処理能力は十分すぎるほどあるようです。しばしばASと略されますが、某陸戦用機動兵器とは無関係です。多分。

MTASC
普通、FlashはAdobeのAdobe Flash CS3とかCS4なんてソフトを使って作ります。
とは言えFlashの仕様は公開されているので、そこまでメジャーではないもののFlashを作成するためのツールはAdobe以外からもリリースされています。
Windows限定で良ければParaFla!とかSuzukaが開発者が日本人(つまり主要なドキュメントが日本語!)、完全フリーといった理由で日本では割とメジャーだと思います。
これらはGUIベースの開発環境で、どちらかと言えばAdobe Flashを触ったことがある人が乗り換えるような使い方を意図して開発されていると思われます。
それに対して、CUIのActionScriptコンパイラのMTASC(Motion-Twin ActionScript 2 Compiler)つーものがありまして、私はこちらを使い始めた所です。
なんていうか、やっぱりGUIは使い方を覚えるだけでも一苦労な面があるので、今回は(も?)敢えてCUIでActionScript入門してみました。
因みに、名前の通りMTASCはAS2.0対応ですが3.0対応ではありません。reademeを見ると、MTASCでAS3.0に対応する予定はないが、3.0相当なhaXeという言語を開発中なので、3.0が利用したい人はそちらをどうぞとのこと。
うーんでも折角だからActionScriptをやりたいじゃないですか。更に新しい言語に手を出すのー?みたいな。
haXe自体は謳い文句を聞く限りかなり魅力的なんだけどね…。かなり。
勿論CUI&ActionScript2.0のみの使い方では、限界も多いので、そこは他のソフトと併用することでカバーしましょう。
swf->XML->swfなんてことができる、swfmillとかそんなソフトもあるらしいです。
声を大にして言いたいのは、「Flashと言えどAdobeにお金を払う以外の選択肢もあるのだ!!!!」という事でしょうか。
Adobeに恨みはありませんが、ポイントは”金”です。…ソフトウェアベンダがどうやって開発費を賄うのかとか冷静に考えると怖くなりますが。
MTASCは特にインストールと言った手続きは必要なく、バイナリを解凍してパスを通せばもう使えます。
こういう手間の掛らないソフトってステキ。当然レジストリにも無痕跡(だと思う)。

作例
実際作ってみたよ、ということで、時計です。何の変哲もないアナログクロック。

でもワタクシ、この埋め込みタグのブラウザ互換性って所でまた詰まったり…。ここを参考に(つーかコピペ)いたしました。
ほんとブラウザブラザーズ(血縁ないだろ)には悩まされてばかりです。ふぅ。
欲しい人がいるか分かりませんが、一応ソース掲載。たったの60行余り。
あ、AS2.0はJavaScriptらしくなく(?)、割と型チェックが厳密です。あとvarは常に要ります。

class Clock{
	private var R:Number=80;//Radious-別にprivateにする意味は全くないんですが、気分の問題です。
	private var x_size:Number=240;//書き出し時のサイズ
	private var y_size:Number=160;
	private var dialPlate:MovieClip;
	private var hands:MovieClip;
	private var PI:Number=Math.PI;//単なる別名
	function Clock(){//コンストラクタ。
		var t = this;
		dialPlate=_root.createEmptyMovieClip('dP',100);//文字盤
		hands=_root.createEmptyMovieClip('h',200);//針-実はここで定義する意味はなかった
		dialPlate._x=x_size/2;
		dialPlate._y=y_size/2;
		setDialPlate(dialPlate);
		var intervalID:Number=setInterval(this,'redraw',500);
	}
	public function setDialPlate(mc:MovieClip):Void{//文字盤を作る。
		mc._visible=false;
		var texts:Array=new Array();
		var tf:TextFormat=new TextFormat('_sans',15,0x000000,false,false,false);
		for(var i:Number=1;i<13;i++){
			texts[i]=mc.createTextField(''+i,10+i,0,0,30,30);
			texts[i]._x=R*0.7*Math.sin(i*PI/6)-((i>9)?10:6);
			texts[i]._y=-R*0.7*Math.cos(i*PI/6)-10;
			texts[i].setNewTextFormat(tf);
			texts[i].text=''+i;
		}
		mc.beginFill(0xcc9966,100);//茶色の塗り色
		mc.lineStyle(5,0x333333,100);//灰色の線色
		mc.moveTo(0.9*R*Math.cos(0),0.9*R*Math.sin(0));
		var cos_N:Number=1/Math.cos(PI/8);
		for(var i:Number=0;i<8;i++){//八分割円の描画
			mc.curveTo(0.9*R*Math.cos((2*i+1)*PI/8)*cos_N,0.9*R*Math.sin((2*i+1)*PI/8)*cos_N,0.9*R*Math.cos((i+1)*Math.PI/4),0.9*R*Math.sin((i+1)*Math.PI/4));
		}
		mc.endFill();
		mc._visible=true;
	}
	public function redraw():Void{//実際に針を描画するヤツ。
		if(hands){hands.removeMovieClip()}
		var hands:MovieClip=_root.createEmptyMovieClip('hands',200);
		hands._x=x_size/2;
		hands._y=y_size/2;
		var now:Date=new Date();
		var h:Number=now.getHours();
		var m:Number=now.getMinutes();
		var s:Number=now.getSeconds();
		var theta:Array=new Array();
		h%=12;//12で正規化…というのだろうか
		theta[3]=h+m/60+s/3600;//PI/6-つまり文字の間隔-を単位とする
		theta[4]=m/5+s/300;
		theta[5]=s/5;
		for(var i:Number=3;i<6;i++){
			hands.lineStyle(7-i,0x000000,100);
			hands.moveTo(0,0);
			hands.lineTo(i*R*Math.sin(PI*theta[i]/6)/8,-i*R*Math.cos(PI*theta[i]/6)/8);
		}
	}
	static function main():Void{//エントリポイント。Clockのインスタンスを作るだけ。
		var c=new Clock();
	}
}
色々と実用性皆無な書き方をしていますね。
あんまり褒められたコードじゃありませんな。

気付いたこと&参考サイト
やーこういう短いコードだと、はっきり言って全くオブジェクト指向の意味ありませんね。
私そこまでOOP好きじゃないし。ある程度より複雑だったり大きかったりすれば確かに便利ですけど。
でもそこまで大きなコード滅多に書きませんしね。
今回は参考文献にAdobeのリファレンスは余り使いませんでした。別にAdobeに含みがあるわけではなく、MSDNもそうですがああいうサイト構成はちょっと見難いと思う。
やっぱり最後はコレを見るしかないのではありますが。
そもそもMTASCに出会う切欠になったのは、この記事です。なんか気まぐれで"actionscript コンパイラ"って打ってみたんですよね。
よく考えれば(るまでもなく)、SuzukaやParaFla!はコンパイラではないわけで…。
所詮Webの世界はテキストベースですから、MTASCって名前が分かるか分からないかで手に入る情報が全然違いますね。
MTASCと入力して一番上に出てくるのがこのサイトですね。サンプルも参考になります。
実質一クラスの極めて限られたコードしかコンパイルできませんが、swf server side compilerなんてものも公開されていますので、お試しにはいいかも。
最も、普通はパス通すだけの方が寧ろ簡単だと思いますが。出先からとか職場のPCでパス変えられなくて不便とか、そう言う時にはいいかも。
最初はいつも通りサクラエディタ使ってたんですが、良いキーワードファイルとかを探せなかったので、偶然見つけたひまわりとサクラで有名な、クジラ飛行机さんのas2editを使っています。御免なさいWindows専用です。
結構便利です。でも検索機能は実質機能してないみたい。設定が足りないか?
ASのサンプルスクリプト類は、こんな所とか、こことかを参考にしました。
ここではビルトインクラスのメソッドとプロパティの一覧がありますが、メニューにはないので、前の記事に戻って見て下さいw
ちょっとしたときに便利です。最も、引数とか分からないので、それは別個に確認する必要がありますが。そういう意味でもas2editを入れて、stdフォルダを指定する方が楽ですね。
順番が逆になりましたが、気付いたこととか。
描画用の関数群なんですが、AS2だと二次Bezierとか直線しか描画できないので、正円ですら近似して描かないといけません。
実験した所、6分割だとまだ不自然ですね。8分割だとかなり拡大しても違和感ないです。これもどっかのサイトに書いてありましたが。
直線や曲線、面それ自体をオブジェクトとして扱う機能はAS2にはありません。多分3でもないでしょう。
MovieClipよりも下の階層については、直接触るAPIは用意されていないようです。
拡大縮小してもジャギーが出ませんので、内部的にはベクトルデータが保持されているに違いないのですが、そのレベルには触れません。
識別子が尽きるからでしょうか…。
そのため、一度書いた線を消すには基本的にMovieClipごと削除するしかない、のはちょっと不便。
やはりアニメーションを提示する、といった使い方を想定されたプログラムだということでしょう。
ある程度まとまった単位で描画や変形、修正を行うことまでしか想定していません。
同一MovieClipに描いた図形は、当然同じ深度(Depth.画面垂直方向にレイヤが積み重なるイメージですね)を持つ訳ですが、実際には新しく描画されたものが単純に上書きしていく、という仕様のようです。
おそらく内部的なDepthを持っているのでしょう。また線を増やすと明確に動作が重くなりますので、生成された線一本一本についてデータが保持されているみたい。
ビットマップへの変換などは基本的に行っていない様子。Flash8以降だとそういう機能(BitMap処理)もあるようですが。
ああ、時が足りぬ…。
残念ながら出かける時間が迫っております。これにて一旦お別れでござるー。

取材日記0:出発前

8 月 26th, 2009 by 窪田 史朗

今朝午前4時前に目が覚めた。激痛で。
午前0時ごろから、ソファで仮眠していたのだが、足が攣って目が覚めた。
目覚め方としてはかなり質の低い部類に入るだろう。因みに左脚。よく攣る。ミネラル不足って事はないと思うのだが…。
以下、私の思考をなるべく正確に記述しようと思う。

あ、いてー。 攣った。足攣った。 伸ばす伸ばす。 あー伸ばし過ぎて逆に悪化したー。 取り敢えず横向きじゃ辛いから座らないと。(注:ソファに寝そべってます) でも足から手が離せないからどうやって座る? 強引に回転!!(なんかいろいろやって右足で着地) ふはー。
痛みと戦いながら約5分待機…。

まぁなんだ、出かける日の朝の目覚めとしては悪い部類ではないだろう。
寝過ごすよりよっぽどマシ。(よくやる)
さぁ取材に出撃だ!

全くの余談であるが、「初日から書くネタに困らないな」と思ったことを付記しておく。
いざ取材が始まれば書きたいことだらけになるのは目に見えているのだが、
敢えて言おう、出だしは順調だ。

8 月 13th, 2009 by 窪田 史朗

暫く前から見聞伝本家はAtahualpa342で動いている。のだが…。
Atahualpa342導入時、私は大いに期待していた。
特に「CSSとJavaScriptの外部化」にはちょー心躍ったのだ。
CSSを外部化するコードをatahualpaのheader.phpに書き込む、なんて邪道は要らなくなるぜ!
と無邪気に喜んだのだが…。
糠喜びでしたorz

まぁ導入する時にちゃんと調べて置けよ、って話ですけどねー。
とりあえず動作確認しただけで安心しちゃったんですよ。
気付いたのは、8/6に朝倉氏の指摘があってでした。
「何かAtahualpa新しくなってから動作遅くね?」@駒場図書館
うーんマジで?それは困るな…。と思いつつとりあえずSafariのWebInspectorを起動。
確かにどう考えても遅くなっている。しかもリロードしても殆ど速度が上がらない。
その上遅いのは件のCSSとJSっぽい。ナゼ?
というかリロードして速くならないのだから一々生成しているとしか思えないが…。
先ずはここから、とページソースを見てみれば外部CSSの記述には?bfa_ata_file=cssの文字が。
モロまんまクエリじゃねーか!
これでアクセスの度生成している疑いは濃厚を超えて限りなく黒に近いグレーに。
しかし未だ逮捕状は降りない。物証主義だから。
wpmu/?bfa_ata_file=cssにもアクセスしてみるが、圧縮(空白文字を除去)されたCSSが表示される。
アクセスにかかるラグからするとやはり生成が行われている気配が濃厚だが、詳しく調べる時間が無かった。
続きは家に帰ってから、という事でバイトに出撃する。

さて帰宅して第二ラウンド。手始めにatahualpa342の配下でbfa_ata_fileを含むファイルを洗う。
functions.phpが何かやっているので見てみる。
思えばここで道を踏み外した…。
190行目付近の記述に引っかかり、add_filter()の動作を追うべくWPMU本体のソースコードの山へ…。
この期に及んでもfilter_hookとaction_hookの辺りが良く分かってないんです。
やっぱ使ってないからかなぁ…。
なんて愚痴?はともかく、ソースを掻き分け、query_varsにbfa_ata_fileを登録しているらしい、ということは分かった。
しかしその登録されたクエリがどうやって解釈されるのかが良く分からない…。
そういうコードはどこから見つければいいんだ???などとよく分からない悩み。
この辺で8/8位ですね。この後煮詰まり感からしばし中断。

第三し…おっとっと。こんな所でゼミ長を喜ばせている場合ではないのだ(そこ?
第三ラウンドはなんと今朝から始まった。アレだけ煮詰まってたのに…。
解決する時は案外あっさり解決するものである。
今日はなんだか朝っぱらからこの間近所の図書館で借りたJavaScriptの参考書を眺めていたのだが、そしたらなんだか当たり前のことに気付いたのだ。
余談だが、私がこの手の参考書を読むのは珍しい。
大変いい世の中になったもので、大抵の言語(※もちろんコンピュータ言語デスヨ)のリファレンスやサンプルは、Webだけで手に入ってしまう。
話を戻すと、気付いたのは「結局CSSを出力する部分はAtahualpaと同じタイミングでインストールされたはずである」、つまりatahualpa342の配下に最終的に出力するためのコードが含まれているはず。
当たり前の話なんですがねぇ…。ここのところゲームとかゲームとかゲームとかに現を抜かしていたせいか、頭があんまり動いていなかったらしい。
でatahualpa342でgrepしたら「CSS」という語を含んだファイルが見つかる見つかる。
やっぱり怪しいのでfunctions.phpをあけようとフォルダを開くと…。
css.phpってファイルがあるじゃーありませんか。どう見てもこいつだろw
ナゼ最初に気付かない自分。
開けて見るとやっぱりコイツデスヨ。セットでjs.phpってヤツも居るしね…。
さてどこからこれが呼び出されているのかなーとgrepすると、functionsの私が捕まってた行から30行も下じゃない所にあったし。
細かい経緯は不明だけどbfa_css_js_redirect()って関数がtemplate_redirectってアクションにフックされているので、こいつのせいだろ。
さて結局の所、atahualpa342はCSS/JSの外部化はするが外部ファイル化はしないということが判明したわけです。
なんというか中途半端な機能だな…。これじゃーヘッダを見栄えよくする以上の意味は無いではないか。

つまるところ、旧Atahualpaとほぼ同等の手続きをとってCSSをファイルとして保存せにゃなるまい、というのが結論。
CSS関連だけ一ファイルにまとまっているのは改造しやすいけど…。Atahualpaが更新されるたびにこれをやるのかと思うとちょっと気が重いぜorz
さて改造しますか…。ついでにzip圧縮も試してみようかな…。でも圧縮ファイルが受け取れるブラウザかどうかってどうやって判別するんでしょうか?
投げっ放しでとりあえず完。

CW and CCW

7 月 18th, 2009 by 窪田 史朗

ClockWise&CounterClockWiseでゴザイマス。
さてさて、またも日記を書こうとしていたら日付が変わってしまいましたが、今回は今日の昼間にボーっとしていたら思いついたこと。
当初はLong and Winding Roadって題名で過去を振り返ろうという予定だったんですが、流れました。楽な方に。
んで図形科学2の課題でジェネバ歯車作ってるんですが、それだけだとオモシロミが無いので、折角だから適当な歯車と針を加えて時計モドキでもつくろーか、とえっちらおっちらやってます。
意外に歯車を作るというのが大変でして、針は一本になりました。
しかも減速比を間違えていて、歯車から作り直さなくてはいけないことに今日作業を終えて気付いたorz
愚痴はともかく、作業をすべく学校へ移動する前に家でボーっとしていたら、ふと、「時計回りって新しい言葉だよなぁ」と思ったんですよ。

ガリレオっていつの人でしたっけ?まぁいいや。とにかく、針が回る機械式の時計が登場するのは、大雑把に言えば16世紀以降ですよね。多分。
たしか振り子時計の発明者はガリレオの弟子のホイヘンスでしょー?
まぁ彼の発明した振り子時計に今のような針と文字盤があったかは知りませんが。
それから、ヴェルサイユ宮殿なんかに部屋ごとにやたら華美な時計が置いてあるのは、あの時代(17世紀)にもまだ機械式の時計は決して一般的とは言えないものだった、逆に言えば富と権力の象徴足りえた、ということでしょう。
じゃあ時計回りっていつから時計回りになったんだろーか。そして時計回りはどうやってde facto standardが決まったのだろうか。
論理的には、どっち回りでも同一の機能のものが作れますよね?
少なくともメカニカルにはどちらでも良い筈でしょう。

ぼーっと思考は飛躍します。
機械式の時計が登場する以前の時計といえば…蝋燭や線香を使った火時計とか水が落ちる速度を使った水時計ですか。
んーでも回転あー日時計を忘れていたw
おお。そうか北半球では日時計の針(影)は時計回りだなぁー。
と言う事は、初期の機械時計の製作者達は、較正を日時計を使ってやっていて、だからきっと機械時計の針の回転も「日時計周り」が「時計回り」になったのに違いない。
そうするとClockWiseに相当する言葉は古代ギリシャローマぐらいからあっても不思議ではないなぁ。

となんか一人で納得したのでした。
南半球では日時計の回転が逆になるってのをきちんと意識したのは初めてで、何か新鮮。
まぁ、普段からこんなカンジで私はボーっと思考しているのか、していないのか。
貴方の清き一票が私の思考を動かすとか動かさないとか。

WPMU覚書1

7 月 16th, 2009 by 窪田 史朗

さて今回から数回のシリーズで、私が知る限りの知識範囲ではあるが、WordPressMUの構造と動作について書いて行きたいと思う。
今回は概要と、データベース構造くらいで。まぁ9割方自分用覚書ですが。

    目次
  1. でWordPressMUって何よ
  2. 概要
  3. データベース構成

でWordPressMUって何よ

まずはここから(しつこいね)。
まぁ公式(系)を見ましょうか。
WordPress MU、WordPressµ とは、ブログアプリケーション WordPress の複数ユーザ版(multi-user version)です。
ほうほう。つまりWordPressを複数ユーザ対応にしたものなのね。でWordPressは?
WordPress (ワードプレス) は、オープンソースのブログ/CMS プラットフォームです。
CMSはContent Management Systemだから、まとめると、複数ユーザで使う、ブログ/Webコンテンツを作成&管理するための土台のアプリケーションと言った所?プラットフォームって日本語にし難いですねぇ。
とにかく、今現在の見聞伝はこのシステムを利用しています。
便宜的に私が”本家”と呼んでいる部分ではCMSとして、他の個人ブログ(このブログとか)ではブログプラットフォームアプリケーションとして、ですね。
うーん英語をカタカナで表現すると、やたら長くなるよなー。Blog Platform Applicationだもんなー。
戯言は置いといて、次行きましょうか。
WordPressの何がいいのかと言えば、Webページの作成や編集がお手軽にできる(一応強調しておきますが、これでもかなりお手軽ですよ!)ので、グループでやる時にページ作成の負担を分担できる、というのが見聞伝で採用している理由、だと思います。
と言う訳で、皆さんがんがん記事を作って下さい(お前もな)。
あとは開発者(特にサードパーティ)が非常に多いので、様々な機能がプラグインの形で公開されており、それを利用できる、と言うのも大きな魅力でした。
とはいえ、大抵のプラグインはMUではなくて、ただのWordPress向けに作られて居るので、そのままでは動かないこともしばしばですが、それでも0から作るのに比べれば、遥かに省力です。
あとは基本的に内容とデザインが分離されているため、デザインの改造がやり易いとか、サイト全体的なデザイン設計/更新が簡単だ、と言ったことが上げられるでしょうか。
このサイト全体のデザイン設計をWordPressテーマと呼んでいる訳ですね。
そうそう、大事なことを忘れていましたが、WordPressはGPLです。改変や再配布も自由なライセンスです。そしてタダ!うーん素晴らしい。
(GPLは必ずしもタダであることは意味しません…ほとんどの場合はそうですが。)

概要

さてそんなWordPressMUですが、

  • Apache:Webサーバ
  • MySQL:RDBMS
  • PHP:CGI
が動作する環境が必要です。
これらのソフトのバージョンですが基本的には新しい方がいいです。しかしWPMUのバージョンによってこまごまと違う様なので、お気をつけ下さい(だれが?)。
ものすごーくおおざっぱに言うと、WordPressMUは、HTTPリクエストを受けると、
  1. Apacheのmod_rewriteの機能を利用して、あるディレクトリ以下へのアクセスを、全てwp-content/index.phpに集める
  2. 当初のリクエストURIから、どのブログにアクセスしているか判定
  3. 当初のURI(パーマリンク)をブログ毎に設定されたrewrite_rulesに基づいてクエリ形式(?year=2009&month=5&day=13&name=…とかそんなの)に変換
  4. クエリに基づいて、SQL文を生成し、データベースから表示する情報を取り出す(複数の投稿やページの時もある)
  5. 取り出して来た情報を、整形をして表示
と言うことをやっているらしい。細かい所把握してないことも多いけど、どうもこんな感じみたいですハイ。
今後も出てくると思うので、ここでWordPressで使う用語についてちょっと書いて置きます。
極めて誤解を招き易いことに、WordPressではややこしい用語を使います。言わばWordPress用語ですね。
投稿(Post)
WordPressで使われる、最も一般的な記事の形式。主に時事性があること-時とともに価値を減ずる様な情報とか-を記述することを意図している。メインページに表示される。
ページ(Page)
WordPressでは、通常の意味とは異なり静的な情報を保持しておくための記事の形式。階層性を持たせることも出来る。
テーマ(Theme)
サイト全体のデザインを決定するもの。各投稿やページのデータはデータベースに保持されているので、それをWebページとして表示するために使われる。
カテゴリ(Category)
記事などが所属するグループ。階層性を持たせられる。二重に所属することも可能。
タグ(Tag)
記事などに付けるキーワード。カテゴリと異なり、階層性を持たせることは出来ない。幾らでも付けられるのはカテゴリと同じ。
なんか記述がちぐはぐですが、まぁこんな所でご勘弁を。

データベース構成

WPMUのデータベース構成ですが、基本的には以下の様になっています。

  • 以下のテーブルはブログ毎に存在
    • comments::コメントを保存
    • links::リンクを保存?よく見てない
    • options::ブログの設定情報を保存している。超重要
    • postmeta::投稿のメタデータ
    • posts::投稿そのもの。実際はページも投稿も添付ファイルの情報も一緒にここに保存されている。
    • terms::タグやカテゴリーに使われた単語を保持してIDを振っている
    • term_relationships::termsに保存された単語が、どの投稿やページと関連を持っているかを保持している
    • term_taxonomy::termsに保存された単語を分類する、分類法を保持している。categoryなのか、tagなのか、とか。
  • 以下のテーブルはサイト全体で一つ
    • users::サイトに登録されたユーザの情報を保持しているテーブル
    • usermeta::ユーザの権限や、ブログではなくユーザに属する設定情報が保持されている
    • site::ドメインが保持されている。用途がいまいち分からない
    • sitemeta::サイト全体の設定。アップロード可能なファイルタイプとか、最大アップロード容量とか、利用可能テーマとか、過去のrss?とかを保持しているようだ
    • blogs::サイトにどんなブログがあるかを保持している
    • signups::良く分からない。使われていない?
    • registration_log::ユーザが承認されたことが記録されている
    • blog_versions::良く分からない。使われていない?
    • sitecategories::サイト全体で使ったtermが保持されている。実際にはcategoryに分類されないものも全部入っているので、この名前はどうかと
あ、あと前にも紹介しましたが、WordPressのデータベース構成はここを参照しましょう。なにしろコードの99%同じと言うだけあって、ほとんど同じです。
WPのデータの保存の仕方は、user friendlyというか、administrator friendlyと言うか、かなり「そのまま」です。フィールド名やキー名は見れば大体意味が分かりますし、保持されているデータも、人間の可読性を意識したものがほとんどです。
ちょこちょことデータベースから直接データをいじることを想定してあるんでしょうか。
まぁコーディングし易いってのが一番の理由ですよね…。

今回はこんな所で。既に十二分に長いし。次回からはリクエスト処理-というか呼び出し関係-を順番に辿って行きましょうか。自分のためにもなりそうだし。