ソーシャルソフトウェアは「分人」をサポートするか?


私とは何か 「個人」から「分人」へから続く。

4798115819仮に「分人」という考え方がいいと思っても、それをテクノロジーでサポートしようとすると、いろいろ難しい問題を具体的に解決しなければならなくなります。Joel Spolsky編『BEST SOFTWARE WRITING』(翔泳社, 2008)から、そのような話題を2つ紹介しましょう。(参考文献リストなし。索引あり。)

1. サポートすることはできない思わせる話(ダナ・ボイドの2004年6月の講演「自閉的ソーシャルソフトウェア」から)

知ってのとおり、インターネットは社会的なアイデンティティがもはや問題とならない世界という幻想を満たしてはいなかった。「チューリングゲーム」(http://turing.gatech.edu/)と呼ばれるプロジェクトで、エイミー・ブルックマンは、ペルソナを通じて他人を演じようとする場合でも、その人の普段のアイデンティティが表れてしまうことを示した。現在、(Microsoft Passportのような)連携アイデンティティを作らせるようなシステムを持つことと、新しいシステムごとにユーザに新しいアイデンティティを作らせるようなシステムを構築し続けることの間には、技術的な緊張関係がある。(p.35)

2. サポートすべきではないと思わせる話(クライ・シャーキーの2003年4月の講演を編集した「グループにとって最悪の的は自分自身である」(原文)より)

ソーシャルソフトウェアの設計では、次の4つを目標にしなければならないそうです。

  • ハンドル名を用意すること
  • よい行いが認識されるしくみを作ること
  • グループへの参加には障壁を設けること
  • グループをスケールの問題から逃れさせる方法を見つけること

以下は、第1の目標の説明に使われた話です(http://en.wikipedia.org/wiki/Kaycee_Nicoleも参照)。

カンザスに住むある女性が、高校生ケイシー・ニコールという別なペルソナとしてオンラインで生活していたが、その作られた高校生に対して夢中になる人が出てくるようになったため、その女性はペルソナを捨てることに決め、ケイシー・ニコールとしての彼女は、自分が不治の病に冒されていると言い始めた。

(中略)

何十人という人が、何百時間もかけて、いったい何が起こったのか解明しようとした。それは分散的探偵活動みたいになった。最後には彼らはニコールのさまざまな投稿をつなぎ合わせ、でっち上げを明らかにした。

多くの人がこれを見て、「ほら、言ったとおり。オンラインではアイデンティティはとても流動的なものなんだ!」と言うことだろう。しかしそれはケイシー・ニコールの話の教訓ではない。本当の教訓は、自分のアイデンティティを変えるというのは、とても変なことなのだということだ。そしてあなたがアイデンティティを変えてでっち上げていたということにコミュニティが気付くと、それは大きな甚だしい罪であるように見なされる。(p.192)

ソーシャルソフトウェアが「分人」のようなものをどうサポートするかは、10年以上前から議論されている、難しい問題です。

R for Windowsのビルド方法


統計やデータマイニングのためのソフトウェアのデファクトになりつつあるR。久しぶりにメジャーバージョンアップしたそうです(3.0.0)。いい機会なので、Windows上でRをビルドする方法を書いておきましょう。Linuxだと何の苦労もなくビルドできるのですが、Windowsだとちょっと作業が必要です。

R 3.0.0を例に説明します。

  1. コマンドtarが無い場合のみ:ビルドするためのツールを集めたRtoolsをインストールします。ビルドしたいRのバージョンにあったものを選んでください(ここではRtools30.exe)。
  2. Rのソースコード(ここではR-3.0.0.tar.gz)をダウンロードします。
  3. ソースコードを適当なディレクトリに保存し、コマンドプロンプトをそのディレクトリで開きます(ディレクトリを右クリックするのが簡単ですが、コマンドプロンプトを起動してからそのディレクトリに移動してもかまいません)。
  4. ソースコードを展開します。ここでは「tar xf R-3.0.0.tar.gz」です。展開してできるディレクトリ(ここではR-3.0.0)がSource Home Directoryになります。
  5. Rtoolsを再インストールします。途中でExtras to build 32 bit Rを選択し、Source Home Directoryも適切に指定してください。
  6. とりあえず「set LC_ALL=C」として、Cロケールにしておきます(正解がよくわかりませんが、何も指定しないとビルドの途中でエラーになります。src/library/tools/R/translations.Rに非アスキー文字があるのがいけないようです。実体参照?で書けばいい?)。
  7. set TMPDIR=C:\tmp」として作業ディレクトリを設定します(書き込み可能なディレクトリを指定してください)。
  8. make all recommended

bin/i386/Rgui.exeをダブルクリックするとRが起動します。

OpenCLに対応するデバイスの列挙(C言語・Mathematica)


GPUをグラフィック処理ではなく汎用計算に利用しようというGPGPUのためには、CUDAかOpenCLを利用するのが一般的です。NVIDIA的には、CUDAはGPGPUの開発環境であり、プログラミング言語としてC for CUDAかOpenCLを選べる、つまりCUDAはOpenCLの上位概念らしいのですが、一般にはCUDAとOpenCLは対立するものとして認識されているような気がします。

CUDAはNVIDIAのGPUにしか対応していないのに対して、OpenCLはNVIDIAのGPUとAMDのGPU、IntelとAMDのCPUにも対応しているので便利です(対応していないGPUやCPUもあります)。

IntelのCPUとHD GraphicsでOpenCLを利用できるようにする、Intel SDK for OpenCL Applicationsの新版(2013)が出たので、ちょっと使ってみます。

OpenCLに対応したデバイスを列挙することで、複数のデバイスに対応しているというOpenCLの特徴を確認してみましょう。規格で定まっているわけではないようですが、複数のOpenCL環境をインストールしているときには、複数のOpenCLプラットフォームがOpenCLのAPIから認識できるようになるようです(後述の参考書p.71)。

実行するためには、以下のいずれかが必要です。

4844331728開発は、WindowsとGNU/Linux、Macのいずれでも可能です。株式会社フィックスターズ『OpenCL入門 1.2対応 マルチコアCPU・GPUのための並列プログラミング』(インプレスジャパン, 改訂新版, 2012)サポートサイト)などを参考にすると、開発環境を比較的簡単に構築できます。(参考:Visual Studio + Intel SDK for OpenCL

適当な開発環境を用意したら、以下のプログラムをビルド・実行します(RSSリーダーでは見られないかもしれません)。

OpenCLの実装は複数のプラットフォームを認識できるものになっているので、上のコードでは、プラットフォームを列挙しつつ、各プラットフォームが持つデバイスを列挙しています。

私のデスクトップPCでの実行結果はこんな感じです。プラットフォーム毎にデバイスが1つあるというわかりやすい構成です。

Platform: NVIDIA CUDA
CL_PLATFORM_VERSION: OpenCL 1.1 CUDA 4.2.1

  Device: GeForce GTX 580
  CL_DEVICE_VERSION: OpenCL 1.1 CUDA
------------------------------------------------------------------------------
Platform: Intel(R) OpenCL
CL_PLATFORM_VERSION: OpenCL 1.2

  Device: Intel(R) Core(TM) i7 CPU         950  @ 3.07GHz
  CL_DEVICE_VERSION: OpenCL 1.2 (Build 63463)
------------------------------------------------------------------------------

私のノートPCでの実行結果はこんな感じです。2番目のプラットフォームにはデバイスが2つあり、そのうち1つは1番目のプラットフォームのデバイスと同じという、わかりにくい構成になっています。

Platform: AMD Accelerated Parallel Processing
CL_PLATFORM_VERSION: OpenCL 1.2 AMD-APP (923.1)

  Device:       Intel(R) Core(TM) i7-3612QM CPU @ 2.10GHz
  CL_DEVICE_VERSION: OpenCL 1.2 AMD-APP (923.1)
------------------------------------------------------------------------------
Platform: Intel(R) OpenCL
CL_PLATFORM_VERSION: OpenCL 1.2

  Device:       Intel(R) Core(TM) i7-3612QM CPU @ 2.10GHz
  CL_DEVICE_VERSION: OpenCL 1.2 (Build 63463)

  Device: Intel(R) HD Graphics 4000
  CL_DEVICE_VERSION: OpenCL 1.1
------------------------------------------------------------------------------

プラットフォームについて得られる情報は、http://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/clGetPlatformInfo.htmlにまとまっています。

デバイスについて得られる情報は、http://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/clGetDeviceInfo.htmlにまとまっています。

Mathematicaなら、すべての情報を以下の2行で得られて便利です(参考:OpenCLInformation)。

Needs["OpenCLLink`"]
OpenCLInformation[]

Visual Studio + Intel SDK for OpenCL


IntelのCPUおよびHD GraphicsでOpenCLを利用するためのIntel SDK for OpenCL Applicationsの新版(2013)が出ました。

Windows上でのOpenCL開発には、Visual Studioを使うのが簡単です。手元のVisual Studioで試したところ、

Visual Studio 2010 Professional
高価なのが問題のVisual Studio 2010 Professionalが最も簡単でした。Visual Studio 2010 Professionalをインストールした後でSDKをインストールすると、OpenCL専用のプロジェクトを作成できるようになり、そのプロジェクトの中でCのコードを書いて、そのままビルド・実行することができました。
Visual Studio Express 2012 for Windows Desktop
無料で使えるVisual Studio Express 2012 for Windows Desktopはちょっと面倒でした。Visual Studio Express 2012 for Windows Desktopをインストールした後でSDKをインストールするときには、「Integrate with Visual Studio 2012 Software」は無効にした方がよいようです。デフォルトは有効ですが、そのままではSDKをインストールできませんでした。OpenCL専用のプロジェクトは作れませんが、ふつうのWin32コンソールアプリケーションを作成して、以下の準備をすることで、ビルド・実行できました。

  1. Cのコードを書く。
  2. プロジェクトのプロパティ→構成プロパティ→C/C++→追加のインクルード ディレクトリの欄に「$(INTELOCLSDKROOT)\include\」と入力する。
  3. リンカー→全般→追加のライブラリ ディレクトリの欄に「$(INTELOCLSDKROOT)\lib\x86\」と入力する。
  4. 入力→追加の依存ファイルの欄に「OpenCL.lib」と入力する。

ちなみに、Intel SDKではなくCUDA Toolkitを使う場合、追加のインクルード ディレクトリは「$(CUDA_PATH)include」、追加のライブラリ ディレクトリは「$(CUDA_PATH)lib\Win32」などになります。

Visual C++ 2010 Express
無料で使えるVisual C++ 2010 Expressはだめでした。上述のExpress 2012と同様にSDKをインストールしてプロジェクトのプロパティを設定しても、ビルドすることができませんでした。(SP1が入っていなかったのが原因かもしれませんが、SP1を入れようとしてもエラーが発生してだめでした。2012があるので、それ以上追求せずにあっさりあきらめました。)

4844331728株式会社フィックスターズ『OpenCL入門』(インプレスジャパン, 改訂新版, 2012)を参考にしました。

適当なサンプルを後で紹介します。

PECL/oauthの導入方法


PHPでOAuth認証をするクライアントを実装するための最も標準的な方法であるはずの、PECL/oauthの導入方法を紹介します。

Ubuntuの場合

まず、以下のコマンドで必要なパッケージをインストールします。

sudo apt-get install apache2 php5 php5-dev php-pear libpcre3-dev make
sudo pecl install oauth

次に、/etc/php5/apache2/php.iniに「extension=oauth.so」を追記し、Apacheを再起動します。

phpinfo()の結果に「OAuth」があれば準備完了です。

Windows(XAMPP)の場合

  1. http://windows.php.net/downloads/pecl/releases/oauth/からバイナリ(XAMPP 1.8.1ならphp_oauth-1.2.3-5.4-ts-vc9-x86.zip)をダウンロード・展開して、php_oauth.dllc:/xampp/php/extにコピーする。
  2. c:/xampp/php/php.iniに「extension=php_oauth.dll」を追記する。
  3. Apacheを再起動する。
  4. phpinfo()の結果に「OAuth」があることを確認する。

Mac OS X

「mac pecl oauth」でググればいいかと思います。

このあたりの詳細については、拙著『Webアプリケーション』などを参照してください。