WordPress + OpenID = wp-dareda

逆 SEO。 WordPress サイトを持つ友達から相談を受けていたのですが、検索エンジンのクローラから WordPress サイトを隠す方法を模索していました。 じゃーってことで、ログイン認証。 以前、ちょっと kohaku さんと盛り上がっていた OpenID の認証をつけてみようって話をしていて、若干ソースを書いてみていたのです。

実は、WP 上での OpenID のセッションの維持の方法をどうしていいか悩んだり、コード書いたらかいたで投稿プレビューにまでログイン画面でて笑ってしまったりの課題山積で、全然できてないわけですが(期待して見に来た方ごめんなさい)、なんとなく OpenID 自体の実装は分かったような気がします。

タイムリーなことに Rauru Blog さんをみていたら OpenID の記事が。

Rauru Blog » Blog Archive » WordPress + OpenID = ???

しかし Chris Messina らは、これを土台に DiSo — Distributed Social networking というあやしげなプロジェクトを広げようと考えてるみたいです。mixi みたいに単一業者サーバの中に囲い込む SNS じゃなくて、ユーザ1人1人が WordPress の blog 持っててそれが緩やかにつながるような形の SNS らしい。XFN とか使って。

以前(もう去年なのか!)、kohaku さんと盛り上がっていたとき、上の DiSO と同様な話をしていたので、ちょっとびっくりしてしまいました。

WordPress OpenID Plugin at orioa

WordPressのプラグインで今一番注目しているのが、OpenID Plugin

つーのも、hiromasaさんから、「この手のプラグインがあれば・・・ウヒヒヒヒ。」なんてことを聞かされて以来ずっと監視状態なわけです。
ウヒヒな場所は御想像に御任せする事にして、このOpenIDってのは面白いらしい。

実はウヒヒな内容がまさに WP の SNS 化の話で。

コアのスリム化をしようとしているWP からブログロールや XFN がプラグインに外にだされず、コア実装されているのは、matt も同様なことを考えているんじゃないかと勘ぐっていたのです。 automatic でつなげてくれる、、みたいなイメージ。 (wordpress.com だと OpenID でなんかできるんでしたっけ?)

これが実現できれば、自由にカスタマイズできる SNS システムって感じになると思いますが、結構需要はあると思います。 (仲間内だけのネットワークサイトつくりたいときありますよね)

とりあえず、WP の OpenIDログイン閲覧制御実装 "wp-dareda" (あいかわらずノリでつけられる名前)をつくろうとして、OpenID についていくつか調べていたので、書いてみます。

  • OpenID の実装実体は、OpenID プロバイダと呼ばれるログイン認証局(サイト)と、それに対応した Web アプリケーションである。
    なにかしらのアプリでログイン制御を実装したいときに、 そのアプリに OpenID API を実装しておけば、ユーザが加入しているどこかしらのログイン認証局で、パスワード認証等して OK/NG やユーザ情報を返してくれる。 アプリ自前でユーザ情報を管理する(される)必要がない。
  • OpenID ログインが実装されているアプリであれば、自分の持っているあるひとつの OpenID のユーザでそれら全てにログインできるため、インターネットで使う、ユーザ ID の一元管理ができる。(OpenID の主目的の一つ、インターネット上でのシングルサインオン) ちなみに、Microsoft Passport も考え方は似たようなもの。
  • 日本だと、openid.ne.jpはてなlivedoor 等で OpenID プロバイダのサービスをしている。 他にもあるかも。 はてな、livedoor はいま持っている、サイト ID を流用して OpenID が発行できる。
  • ユーザがつかうアプリに入力する ユーザID は、OpenID ログイン認証局から発行される URL 形式である。 たとえば、ぼくのはてなの OpenID は、http://www.hatena.ne.jp/h1romas4/ である。ユーザ IDに ドメインを含む URL 形式をつかっているため、インターネット上で一意なユーザ IDとなる。
  • OpenID API の実装されたアプリは、この URL を元にログイン認証局に問い合わせを行う。 画面がいったん OpenID プロバイダサイトに遷移してログイン画面がでる。 終わったらアプリの画面に戻る。
    ログイン認証局では、パスワード入力や、問い合わせのあったアプリへ情報を送って良いかどうかの制御を行う。 また、各アプリへの情報送信の制御を管理する画面がある。
  • アプリからログイン依頼をうけたログイン認証局は、アプリにログイン情報を送信する。 一番基本的なのが、パスワード等でその人と認証できたかどうか。 他にも OpenID プロバイダに登録してあるユーザ情報(ニックネームとかメールアドレスとか)も送信"できる"。 はてな、live はいまのところ認証可否だけしか送らない(れない)様子。
  • OpenID 認証を他に委託する、delegate が使える。
    たとえば、このサーバのURL https://another.maple4ever.net/ に delegate を設定して、本当の認証局(はてな)に委託するようにすれば、OpenID のユーザ ID として、https://another.maple4ever.net/ が使える。
    つまり、自分でとったドメインを OpenID として設定しておけば、そのときつかっている OpenID プロバイダがつぶれようとも、委託先をかえるだけで、OpenID の ユーザID 自体を変更せずに運用できる。
    delegate の設定方法は自分で決めた ユーザID URL の返す HTML に決められた meta タグで委託先の本当の ユーザID URL を書いておくだけ。 リダイレクトされるんね。
  • PHP での OpenID ライブラリは、php-openid というのがある。 wp-openid でもこのライブラリが使われている。 ちなみに結構でかい。 あと、クライアントだけでなく認証局のサーバにもなれるようだ。(ためしてはいない)
    開発時に 2.0 系をWinodws で動かすときは、define(‘Auth_OpenID_RAND_SOURCE’, null); しましょう。 しないと動かないです。(標準はUNIX の乱数生成機使っている)

ってな感じだと思います。 どこか間違ってたらごめんなさい。 技術単語は思いつきで書いているので、オフィシャルとは違うかもです。

WP に実装しようとしてくれるグループが現れたので、ぼくがしょぼい実装する必要もないですね。。(笑) でも、面白そうではあるので勉強がてらちょろちょとみてみることにします。

限界を超えるテクニック(ファミコンサウンド編)

前回はファミコンのグラフィック周りについて書いたので、今回は勢いでファミコンサウンド編。 サンプルサウンド付きで知られざるテクニックを紹介してみます。 といっても、PSG はぼくあんまり知らないので人より凄いことは書けません。(笑)

PSG というのは、三角波や矩形波といった簡単な音の波形にたいして、音階や音量等の情報をつけられる音源の総称で、ファミコンもこの PSG タイプの音源がのっています。

ファミコンの場合は主に、3種類の音が出せて、前述の三角波、矩形波、それにノイズをだすことができます。 基本的に三角波は 1 声、矩形波は 2 声、ノイズは 1 声を同時にだすことができます。 (ソフトによってはカセットにカスタムチップをつんでいてもう少しだせるのもある)

要は音となるものは、合計 3 声。 3和音。 シンセを片手で 3つ鍵盤おしたらおしまいという、おそるべきロースペック音源ですが、そんなことを感じさせない名曲がファミコンにはたくさんあります。

まずは三角波を聴いてみましょう。

ぽー。 この音は低くしてベースでよくつかわれる音です。 どうやらファミコンの特性上、波が綺麗な三角ではなくうねるようで、独特の響きがあります。

次はファミコンサウンドの雄、矩形波。

四角い波でおりなされる、いわばピコピコ音です。

これらはもう聴くからに電子音で、ねらってテクノでもつくらない限り、かなり耳障りな音がするわけですが、これを音楽に昇華するテクニックが無数にあります。

一番代表的なのは、形式ばった波形を”音色”にするために音量の変化をつける方法です。 たとえば、ストリングスっぽい音を出したければ、音の立ち上がりの音量を小さくして、いきなり「ぷー」とならすのではなく「ぁぁぁあぷー」(?)とならすとか。

また音のおわりも、残響音の効果をつけるためにボリュームを少しずつ落としていく。 さらにもっとエコーをかけたければ、もう1声同じ音を重ねて、残響音だけを発生させたりするとそれらしくなります。

下のサンプルは、アタック音量をおさえて、かつ2声重ねのリバーブ(残響音)効果をいれてみました。

どっかで聴いた音になりましたね。 🙂 電子音は電子音ですが、案外と耳障りではなくなったと思います。

このころのゲーム音楽はもうこういったテクニックの固まりで、作曲する人自体が、音符をかくと同時に、音源のドライバプログラムを書くこともざらにあったと聞きます。

現在のゲーム機にはもはや、PSG 音源はのっていませんが、昔を懐かしむようにチップチューンというジャンルでこの手の音をふんだんにつかった音楽を聴くことができます。

チップチューン – Wikipedia

チップチューン(chiptune) は音楽ジャンルの一種であり、おもに1980年代に発売されたパーソナルコンピュータや家庭用ゲーム機に搭載されていた内蔵音源チップに代表されるような、制約の多い音源を用いて制作される音楽、またはそうした音源の音色を意識して作られた一連の音楽を指す。

今回のサンプルは、チップチューンで有名な YMCK さんのつくられている、VSTi プラグインを使って PC で鳴らしています。

ぼくもチップチューンとか挑戦したくなるわけですが、古のテクニックをつかいこなせなくてなかなか難しいんですよー。

このへんが限界。 お後がよろしいようで。

限界を超えるテクニック(ファミコン編)

おでさん、aka さんと昔懐かしいファミコンソフトの話をしていて、だんだん思い出してきた、古から伝わるコンピュータテクニック。 チープなハードウェアを限界まで叩いて動いていた 8bit 機時代のソフトウェア達。 そんな舞台裏をちょっと紹介してみます。

ファミコン編。

誰でも一回くらいはやったことある、ファミコン。 このハードは設計した人間のおそらく遙かに上に行く使われ方をしたコンピュータの一つでしょう。 ちょっと画面を思い出しつつ読んでください。 🙂

ファミコンの画面は、スプライトと呼ばれる主に自機や敵を動かす画面部品と、BG 面と呼ばれる背景を表示するレイヤーに別れます。 その2つは合成されてテレビに表示されゲームの画面を構成します。 この時期の全てのゲームが小さいキャラ(スプライト)が背景(BG 面)の上をちょこまかしている印象があるは、もともとハードがこのような構成をしているためです。

sp

画面構成要素のひとつ、スプライト。 これはテレビの"垂直同期"に割り込む形で表示するグラフィックの描画の仕方です。

ブラウン管のテレビを写真で撮るとある一定まで描かれて、その下には前のコマが描かれてたりするのを見ることがありますが、これはテレビが上から1ラインずつ描画していくような方式をとっているためです。 写真をとるとその描画の途中がうつるのでこのような現象が発生します。 これが垂直同期で、この1ラインの周期は約 1/30 秒です。

スプライトというのはこの垂直同期がくるタイミングを見計らって、そのラインにキャラクターの画像信号を潜り込ませてで表示させる方式です。 キャラクターが複数あれば、そのぶん何度も割り込ませるわけですが、横にキャラクターが沢山並ぶと 1/30 の時間で信号の割り込みが間に合わなくなり、キャラの一部が消えてしまう現象が発生します。

ファミコンソフトで遊んでいて、キャラが消えたりちらついたりするのを覚えている方もいるとおもいますが、この制約のせいでおきている現象です。 そして、ここに1つのテクニックが隠れています。

実は"ちらつく"という部分。 これはちらついているのではなく、ちらつかせている、というのが正解です。 キャラが全く消えてしまうのは問題があるので、優先順位をくるくるかえて、横に並んだキャラをだしたりださなかったりをソフトウェア的に制御して、ちらつかせてでも、なんとか表示させるようにわざとプログラムされています。

このテクニックを最初に使ったゲームはちょっと覚えていませんが、ハドソンのへクター87は、一部ボス面でこのテクニックをつかっていなくて、いきなり見えない玉にあたって砕ける部分があったのは鮮明に覚えています。。

次。 画面構成要素のもう一つ BG 面。

主に背景を担当するこの面は、PCG とよばれるところに格納された、扱える数に制限のある、小さな画像ブロックを敷き詰めて表示されています。 ドラクエとかでいえば、森の"木" とか、"平地" とかああいったブロック要素をならべて構成されています。 (なのでリアルタイムに任意の線を描くとか、大きな1枚絵を表示するのが非常に難しい)

dq

BG 面はテレビ画面よりも大きくとられており、そのある一定場所を表示することによりいわゆるスクロールを実装しています。

ファミコンのスクロールにはいくつか制限がありますが、特に画面の一部をのこして別の部分をスクロールする分割スクロールが、縦スクロールについてできません。

たとえば、グラディウスではパワーアップゲージが下に配置され、上のゲーム画面は横にスクロールします。 アーケード版の初代グラディウスはゲーム画面が横スクロールしながら、自機の動きによって縦スクロールにもするのですが、ファミコンの分割縦スクロール制約のせいで、ファミコン版ではこの仕様がオミットされています。 縦にスクロールしようとするとパワーアップゲージまで上下しちゃうのです。 🙂

gra

で、できないと思われていた分割立てスクロールですが、ファミコン中期、後期になるとこれができるようになってきます。 ぼくが最初に見たのは、バンダイのドラゴンボール。 マリオ3とかグラディウス2とかもできています。

グラ2はなっている覚えがないのですが、大抵の縦分割スクロールを実装しているゲームで、分割の境目がちらつくような現象が見られます。 ぼくはこの実装をどうやっているのか分からないのですが、なにか涙ぐましいすごいテクニックが潜んでいるに違いありません。。

ああ、長くなってしまった。。 この引き出しをあけてしまうと永遠に続きそうです。。(笑

いまじゃ当然のことも、ほんの 20年前はえらい大変だったんですよ、、、とおじさんは語るのでありました。

続く。