安冨歩『原発危機と「東大話法」』

 本書には「議論のルール」が書かれている。
 一見、原発問題を扱った本に見えて(あるいは、原発問題を扱った本だからこそ)やはりコミュニケーション論であることが分かる。私は本書を原発問題の面ではなく、コミュニケーション論として見てゆきたいと思う。
 なお、安冨歩「ハラスメントは連鎖する」 - イマココ日記
 を先に読まないと理解しづらいことをことわる。
 
 本書の主張は「コミュニケーションが正常に行われていれば、こんな事態にはならなかったはず」というものである。
「ハラスメントは連鎖する」においてコミュニケーションの異常状態(ハラスメント)と思考停止との関連性を指摘した著者は、思考停止が暴走を生み、ひいてはこのような自体を引き起こした原因であるとする。それは「たられば」であるかぎり、検証はもちろん不可能である。しかし、コミュニケーションをとれないことの恐ろしさと、そこから出てくる無力感を感じたことのある人ならば、この主張にある程度の説得力を感じるものと思う。

 一方で、私は自然な思考停止状態というモノもあるのではないかと思う。いちいち考えていたら、キリがないようなことも確かにある。原発問題に関わる人々の言論の検討に紙幅を割きすぎ、「ハラスメントによる思考停止」と「自然な思考停止」を区別するかの検討がなされていないことが、本書の欠点だと私は思う。

「東大話法」とはいわば、詭弁強弁暴論の類を東大と関連付けたネーミングである。本書の冒頭には20の「詭弁・強弁の技法」が掲げられている(つい、悪用してみたくなる欲求を感じてしまうのは私だけ?)。
 本書では、原発推進派がこの「東大話法」に支配されていたことが「暴走」の原因であるとされる。
 ただし、この「東大話法」は東大にだけあるものではなく、おそらくコミュニケーションのあるところならば、どのような集団でも存在する。上記のような原発推進派の暴走の検討という趣旨が強く出ているため忘れてしまいそうになるが、脱原発・反原発派にもこの種の、無理に自分の仲間に引き入れようとする詭弁強弁の使い手はいくらでもいる。実際、「ハラスメントは連鎖する」にも、ハラスメントとの戦いを強要することは単なるハラスメントだ、とある。そういう場合は、たとえ「立場」が同じでも離れたほうがよいということも、本書の論理的帰結となるはずなのだから、触れて欲しかった。
 
 
 
「東大話法」の一覧を見ていると、「コレどこかで見たことがあるな」という感じがしたのだが、どうやら 永井均「転校生とブラックジャック」第7章談話室 に出てくる「哲学的議論のための要諦」と似ている。というか両者はまさに鏡写しの関係にある。
 
 ググったら、引用に調度良いエントリーが出てきたので、以下にリンクを示す。
転校生とブラックジャック - にっき。
 
 安冨さんがウィトゲンシュタインを引用して「語り得ぬもの」と設定し、(なぜか)直接的に語ることを避けた内容が、ここには簡潔に示されている。
 とはいえ正直、安冨さんにもこのぐらいの文章はかけたのではないかと私は思う。ここに書かれていることは、安冨さんが「ハラスメントは連鎖する」にて「エンターテイメント」「天使」と呼んだあり方と、とても良く似ているからである。
「エンターテイメント」とはいわば「正しいコミュニケーション」=「相互に学習が円滑に行われている状態」であり、当事者の立場から見れば「相手の学習を喚起するコミュニケーション」であり、「受容と提示によるコミュニケーション」である。
 これはまさしく、

「哲学的議論は、あくまでも真理の探求のための手段であり、『共同探求』の場でる。」
「哲学的議論をする者は、真理を求めてアイデアを出し合うのであって、相手の考えを論破して自分の考えを相手に認めさせるための「討論」をするのではない。(哲学的議論は決して「白熱」させてはならない。)」
「議論の場で問題に決着をつけようとしてはならない。議論は、その問題について後で(ひとりで)考えるための単なる素材にすぎない。」

 という要諦と合致する。
 
「エンターテイメント」を描写できる力がおそらくありながら、安冨さんが今回「思考停止状態」の記述に終始し、「エンターテイメント」の記述を強く打ち出さなかったことは非常に残念なことだと思う。全体として池田信夫さんや香山リカさんへの批判が目立ちすぎてしまい、読後そちらの印象が強すぎて、他の部分がボケてしまうように思った。「ハラスメントは連鎖する」では、もうしつこいぐらい同じ概念を繰り返し説明しなおしていたのになぁ。
 
 
 
 ところで、「議論のルールを定める」とは何をすることなのか?
「議論のルールを定める」というのは難しい問題だ。ソレを定めることによって、議論の流れがある程度方向づけされてしまうからである。いわゆる「言論」は、権力闘争を含んだ(場合によってはそれしかない)議論といえるが、実は「議論のルールを定める」ことは既に「言論ゲーム」の中にあり、権力闘争の中にあるのだ。
 
「言論ゲーム」を通常のゲームと比較してみよう。例としてもう一度将棋を使う。
 ある一手が上手か下手か、ルール違反かどうかはルールによって決められている。ルール違反かどうか自体がルールによって決められている、ということは当たり前ではあるが、普通は意識されないことであり、それに疑問を持たないことでルールが共有され、ルールを共有することが将棋を指すための条件である。
 だが「言論ゲーム」は言論してゆく中でルールを変化させることが出来るゲームなのである。一つ一つの議論の意味も、「〇〇論争とは何だったのか」という言論によって定められてゆく。「言論ゲーム」には「外」がないのだ。
 科学がこの「外」にあたるものとも思えるが、科学には「まだわかっていないこと」「原理はわかっていても技術的には難しいこと」「科学的にはよく知られた現象でも、人間の調査不足で知られていなかったもの」「有りそうだとはわかっていたが見て見ぬふりをしていたもの」が多くあるらしい。「科学」という「物理現象の記述」も、「言論ゲーム」の「外」にあるとは言い切れなさそうなのである。
「言論」はルールが無いわけでもなく、ルールがあるわけでもなく、刻一刻とそのルールを構築してゆくものなのである。
 このような、言論空間でのルールを利用した権力闘争と、そのダイナミズムをすっきりと説明してくれる本というのは私も読んだことがない。安冨さんはそこに一番近い人物のひとりだと思うのだけれども・・・。
 
 
 
 本書のタイトルともなっている「東大話法」というネーミングは、一面真実にしろ、逆に言えば一面にしか真実がないものと思う。この概念を目にしながら本書を読み進めるのは、苦痛とまでは行かないまでも、多少肌触りの悪さを感じた。また、そもそもこういった「議論のルール」を定めることの、ヤヤコシさについても述べた。このような規範を設定することには単にヤヤコシイとか、メンドクサイ以上の「居心地の悪さ」を私は感じる。
「東大話法」という言葉に対する違和感、そして「議論のルール」を定めることへの違和感はなんなのだろうか。

「語り得ぬものについては沈黙せねばならない」は、ウィトゲンシュタインの「論理哲学論考」に出てくる有名な言葉である。これの直前には別の文章がある。以下に引用する。

私を理解する人は、私の命題を通り抜け――その上に立ち――それを乗り越え、最後にそれがナンセンスであると気づく。その様にして私の諸命題は解明を行う(いわば、梯子を登りきったものは梯子を投げ捨てねばならない。)私の諸命題を葬り去ること。そのとき世界を正しく見るだろう。

 禅において「言語道断」という言葉がある。現在では「とんでもない悪行」ぐらいの意味で使われているが、元々は「悟り≒道は、言葉にしてはならない(できない)」というような意味だったらしい。
 おそらく「東大話法」という言葉も、その鏡写しである「哲学的議論の要諦」も「登りきったら捨て去るべき梯子」であり、方便の一種なのではないかと思う。少なくとも、私はこれ以上「東大話法」という言葉を使いたくはない。


 
 著者のTwitter上での発言は、受け入れづらいものが多い。連続ツイートは比較的まともかもしれないが、全体的に「小馬鹿にされている感」、もしくは「小馬鹿にされる可能性」をどうしても感じる語り口だと感じる。少なくとも、自分の主張を認めない人に対して「こういう人が早く死にます」などとは言わないほうがよい。



 追記ウィトゲンシュタイン全集の8巻、届いたのでパラパラとめくっていたら、「人間の身体は、人間の魂の最良の映像である」という言葉に出くわした。ちょっと前後との関連が分からず、どういう意図で言ったのか難しいが、「コンテキストマーカー」や「潜在的メッセージ」の話を簡潔に表現した言葉にも思える。

原発危機と「東大話法」―傍観者の論理・欺瞞の言語―

原発危機と「東大話法」―傍観者の論理・欺瞞の言語―

安冨歩「ハラスメントは連鎖する」

 今回は、『原発危機と「東大話法」』について考える前段階として、「ハラスメントは連鎖する」の概要を述べる。
 私はこの本を2,3回読んだ。しかも赤ペンで線を引きながら。1冊しか読んでいないクセと笑われるかもしれないが、いわば「座右の書」としていた。
 
 私としては、「東大話法」は「ハラスメントは連鎖する」を先に読んでいなければ著者の意図を誤解しやすいのではないかと感じた。もちろんその「誤解」は、反対側から見れば不可解なもので、なにか変なものに頭をやられているのではないかと見えるだろう。とはいえ他者の世界は全て想像を通したものであり、実際には「こちら側」を記述することしかできない。私の世界での順番の通り、「東大話法」について考える前段階として「ハラスメントは連鎖する」について概要を述べる。
 
 「ハラスメントは連鎖する」はコミュニケーション論という分野に入る。しかし、多くのコミュニケーション論は、いかに他者とウマいことやっていくか(あるいは、上手いこと利用していくか)のハウツー本であるのに対し、この本は他者とウマいことやっていくこと自体に疑問を差し挟む。このような「他者とウマいことやっていかないといけない」という前提を疑ってかかることは当然のようでありながら、そのような疑問を提示する本というのは驚くほど少ない。さて、このような疑問の提示を(コミュニケーションを通じて)封じるもの、それがタイトルの「ハラスメント」である。
 
 準備段階として、第1章でコミュニケーションのメカニズムが示される。人間同士がコミュニケーションを取るには、何らかの意味を持った「メッセージ」をやり取りする(メッセージは必ずしも言葉に限らない)。強調されるのは、メッセージは単体では意味を持たず、状況により意味が変化することである。言語であれば単語の相互作用によって意味が決まり、ソレが人に使われることで刻一刻と意味が構成、再構成されてゆく。
 ゲームに例えれば、コマ単体では意味を持たず、1.他のコマ、将棋盤との位置関係 2.将棋のルール 3.相手が同じルールを共有していること が、ある一手がゲーム内で意味を持つための条件である。
 このような、メッセージに対して意味を与えるものを「コンテキスト」と呼ぶ。
 
 ゲームであれば、上記のようなものでコンテキストが決まるが、コミュニケーション・ゲームにおいてはどうなるだろうか。すなわち何がコミュニケーションの意味を定めるだろうか。それが誰によって、またどのように定められるべきか、というのが「ハラスメントは連鎖する」の主題となっている。
 
 上記、言語を使う中で言葉の意味が構成されていく、という点に注意して欲しい。なぜ、言葉の意味が変化してゆくか。それは人間がお互いに「学習」を行なっているからである。言葉や身振りの意味は文化や習慣がそれぞれ違う。最初はそれらの習慣を同じと思い込んで話しかけるが、コミュニケーションの中で、習慣の違いを理解してゆき、同時に習慣を共有してゆく。
 
 ものすごく適当な例だが、「暑いですね」「はい、暑いですね」ならば相手が自分と同じ事を思っていると確認できる。「暑いですね」「いや、今日は涼しいですよ」ならば感覚の違っているという認識を共有できる。
 では、「暑いですね」「いや、昨日と比べるとまだマシですよ」ならどうだろう。ここで両者の言葉遣いには微妙な違いがある。前者は単純に今の感覚を表現する言葉として(あと、挨拶がわりとして)「暑い」という言葉を使っているが、後者は「暑さ」は昨日と比較して考えるものである。このとき、「たしかに昨日と比べると暑いですね」といけばコミュニケーション成立である。「いや、昨日は昨日でしょ」と返せば、多分ケンカになる。コミュニケーション失敗。
 
 ハラスメントは、コミュニケーションの異常状態である。それは片方(Aとする)が学習を止め「学習しているフリ」をし、もう片方(Bとする)が一方的に学習を求められることから始まる。Aは学習しているフリをしながら、攻撃的なメッセージを送る。
 コミュニケーションは相手がどのような人間が学習してゆく過程であるといったが、この状態になると、BはAがどのような人間か分からず、安定的なコミュニケーションを取ることができなくなってゆく。やがて、Bは考えても無駄だと悟り、思考状態に陥る。Bが思考停止状態に陥れば、さらにAは自分に都合の良いメッセージを送り、Bを自分の言うことを聞く人間へと変えてゆく。
 このような攻撃が「ハラスメント」である。ハラスメントをするものをハラッサー、ハラスメントを受けるものをハラッシーとよぶ。当然、ひとりの人間がハラッシーかつハラッサーという状況も考えられる。
 
 ハラスメントは「(罰をともなう)命令」と「その命令の解釈(ラベル付け)」という2つのメッセージから成り立つ。前者は「こうしなさい、ああしてはダメ」というような命令であり、後者は「これはあなたのために言っている」というようなものである。
 ハラッシーは後者の解釈を採用しなければ罰される。罰を受けたときに「痛い」といえば更に罰されるので、「痛い」と言わないようになってゆく、そしていつの間にか「痛い」という自分自身の感覚を認めなくなってゆく。この状態が呪縛された状態である。
 この状態にあると、人は自分の感覚を信じられないため、判断がぐらつき、周囲に流されるのみとなる。そして、ハラッシーが増えるほどに「逆らえない空気」が醸成されてゆく。
 「ハラスメントは連鎖する」というタイトルにもあるように、ハラッシーはハラッサー化されてゆきやすいということである。
 
 そして、単にハラッサーを排除してメデタシメデタシとするのでなく、ハラスメントの連鎖の仕組みを解き明かすことで、そのような「逆らえない空気」を払拭してゆきたい、というのが「ハラスメントは連鎖する」の目指すものであった。
 そして、その対策として著者が主張するのが、「自分自身の感覚を信じること」なのである。
 
 もうひとつ、この「自分の感覚のモニタリング」過程において、他者はいったい何ができるのか、というのがこの本のもう一つの論点である。
 ただし、これは次回に持ち越そうと思う。次回書くはずの「議論のルール」というテーマとの関連性が深いためである。

 

ハラスメントは連鎖する 「しつけ」「教育」という呪縛 (光文社新書)

ハラスメントは連鎖する 「しつけ」「教育」という呪縛 (光文社新書)

超カンタン ゲーム風アプリ

Androidで超カンタンなゲーム風アプリを作ってみました。
ほぼ文字しか表示しませんが、おおよその流れはゲームっぽくなったと思います。

ボタンを押してフィールドを移動すると・・・

一定確率でモンスターに出会って戦闘となります。

敵からダメージ受けないなど、突っ込みどころは多々ありますが、いつものようにソースと野良apkを置いておきます。
BattleGame.apk 直
BattleGame.zip 直

非同期処理、WebAPIの利用、XMLのパース

 非同期処理が自分の中でボトルネックになっていたので、一回やってみた。
 今回作ったものは、ATNDからイベントの情報を取得してリストに表示し、リストの中からイベントを選択すると、詳しい情報を表示するというモノ。

AsyncTaskActivity.java


package com.android.yamaguchi.AsyncTaskActivity;

import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import org.xmlpull.v1.XmlPullParser;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnCancelListener;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.util.Xml;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

//リストを表示するクティビティ 
public class AsyncTaskActivity extends Activity implements OnItemClickListener{
 private Context context=null;
 ProgressDialog dialog;
 
 /** アダプタ */
 private MyArrayAdapter adapter = null;
 
 private static int DATA_NUM=100;
 int n=0;
 
 //別のActivityにデータを渡すための定数
 private static String START="start";
 private static String END="end";
 private static String UPDATE="update";
 private static String TITLE="title";
 private static String DESCRIPTION="description";
 private static String EVENT_URL="event_url";
 private static String OWNER_NICKNAME="owner_nickname";
 private static String ADDRESS="address";
 private static String PLACE="place";
 private static String LIMIT="limit";
 
 public void onCreate(Bundle savedInstanceState) {
	 super.onCreate(savedInstanceState);
	 setContentView(R.layout.main);
	 
	 //リストを表示
     ListView listView=(ListView)findViewById(R.id.list);
     listView.setScrollingCacheEnabled(false);
	 
     //アダプタ作成
     adapter = new MyArrayAdapter(this);
     listView.setOnItemClickListener(this);
     listView.setAdapter(adapter);
     //リストが空のときに表示されるViewを指定
     listView.setEmptyView(findViewById(R.id.empty));
     
     this.context=this;
	 
     //非同期処理を開始
	 new AdapterAsync().execute();
 }
 
 /*************************** AsyncTaskを継承したクラスを、内部クラスとして作成 ***********************/
 class AdapterAsync extends AsyncTask implements OnCancelListener{
	 			   //↑これはdoInBackground、onProgressUpdate、onPostExecuteの
	 			   //引数と同じものを指定、と考えればよさそう。
	 
	 //前処理。ここでプログレスバーの表示などを行う。
	 @Override
	  protected void onPreExecute() {
	    //プログレスバーを表示
	    dialog = new ProgressDialog(context);
	    dialog.setTitle("イベント情報を取得中");
	    dialog.setMessage("もう少しお待ち下さい...");
	    dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
	    dialog.setCancelable(true);
	    dialog.setOnCancelListener(this);
	    dialog.setMax(DATA_NUM);
	    dialog.setProgress(0);
	    dialog.show();
	  }
	 
	 //非同期処理
	 @Override
	 protected Void doInBackground(Void... params) {
		 //String ornerTwitter="uni_labo";
		 //String kenmei="福井県";
		 final StringBuilder sb_query=new StringBuilder();
		 //final StringBuilder sb_return=new StringBuilder();
		 
		 int eventType;
		 //int eventCount=0;
		 String start=null;
		 String end=null;
		 String update=null;
		 String title=null;
		 String description=null;
		 String event_url=null;
		 String owner_nickname=null;
		 String address=null;
		 String place=null;
		 String limit=null;

		 try {
			 XmlPullParser xmlPullParser = Xml.newPullParser();
				
                         //ATNDのAPIからXMLを取得する
			 sb_query.append("\""+URLEncoder.encode("福井県","UTF-8")+"\"");
			 sb_query.append(",");
			 sb_query.append("\""+URLEncoder.encode("京都府","UTF-8")+"");
			 String urlString="http://api.atnd.org/events/?keyword_or="+
			 new String(sb_query)+"&count="+DATA_NUM;
			 Log.v("XmlPullParserSampleUrl",urlString);
			 URL url = new URL(urlString);
			 URLConnection connection = url.openConnection(); 
			 xmlPullParser.setInput(connection.getInputStream(), "UTF-8");
			 
			 /********************* XMLをパース ********************/
			 while *1 != XmlPullParser.END_DOCUMENT) {
				 //if文で分岐して、XMLから情報を取得。
				 if (eventType == XmlPullParser.START_TAG && "title".equals(xmlPullParser.getName())) {
					 title=xmlPullParser.nextText();
				 }
				 if (eventType == XmlPullParser.START_TAG && "description".equals(xmlPullParser.getName())) {
					 description=xmlPullParser.nextText();
				 }
				 if (eventType == XmlPullParser.START_TAG && "event_url".equals(xmlPullParser.getName())) {
					 event_url=xmlPullParser.nextText();
				 }
				 if (eventType == XmlPullParser.START_TAG && "owner_nickname".equals(xmlPullParser.getName())) {
					 owner_nickname=xmlPullParser.nextText();
				 }
				 if (eventType == XmlPullParser.START_TAG && "address".equals(xmlPullParser.getName())) {
					 address=xmlPullParser.nextText();
				 }
				 if (eventType == XmlPullParser.START_TAG && "place".equals(xmlPullParser.getName())) {
					 place=xmlPullParser.nextText();
				 }
				 if (eventType == XmlPullParser.START_TAG && "started_at".equals(xmlPullParser.getName())) {
					 start=xmlPullParser.nextText();
				 }	
				 if (eventType == XmlPullParser.START_TAG && "ended_at".equals(xmlPullParser.getName())) {
					 end=xmlPullParser.nextText();
				 }
				 if (eventType == XmlPullParser.START_TAG && "updated_at".equals(xmlPullParser.getName())) {
					 update=xmlPullParser.nextText();
				 }
				 if (eventType == XmlPullParser.START_TAG && "limit".equals(xmlPullParser.getName())) {
					 limit=xmlPullParser.nextText();
				 }
				 
				 //eventタグを抜けるときに、リストにアイテムを追加
				 if (eventType == XmlPullParser.END_TAG && "event".equals(xmlPullParser.getName())) {
					 
					 /********** publishProgress()は、onProgressUpdateを呼び出す。onProgressUpdate内で
					  * UIの更新処理(リストへのアイテムの追加や、プログレスバーを更新)を行う。
					  *  *************/
					 publishProgress(title,start,end,description,event_url,
							 owner_nickname,address,place,limit,update);
				 }
			 }
		 } catch (Exception e) {
			 e.printStackTrace();
		 }
		 return null;
	 }
 
	 @Override
	 /**
	  * UIスレッド上で起動
	  * UIの更新処理(リストへのアイテムの追加や、プログレスバーを更新)を行う。
	  */
	 protected void onProgressUpdate(String... item) {
		 			//↑可変長引数
		 //リストに追加するアイテムを作成
		 MyListViewItem myListViewItem = new MyListViewItem();
		 myListViewItem.title=item[0];
		 myListViewItem.started_at=item[1];
		 myListViewItem.ended_at=item[2];
		 myListViewItem.description=item[3];
		 myListViewItem.event_url=item[4];
		 myListViewItem.owner_nickname=item[5];
		 myListViewItem.address=item[6];
		 myListViewItem.place=item[7];
		 myListViewItem.limit=item[8];
		 myListViewItem.updated_at=item[9];
		 addItem(myListViewItem);
		 
		 n++;
		 dialog.setProgress(n);
	 }
	 
	 //後処理、プログレスバーを消したりする。
	 @Override
	 protected void onPostExecute(Void unused) {
		 dialog.dismiss();
	 }
	 @Override
	 public void onCancel(DialogInterface arg0) {
		 // TODO 自動生成されたメソッド・スタブ
		 this.cancel(true);
	 }
	 
	 /*********************************** addItemメソッド **************************************/
	 public void addItem(MyListViewItem item) {
		 //追加
		 adapter.add(item);
	 }
	  
	 @Override
	 protected void onCancelled() {
		 dialog.dismiss();
	 }
 }

 @Override
 public void onItemClick(AdapterView listView, View view, int position, long id) {
	 // TODO 自動生成されたメソッド・スタブ
	 MyListViewItem item = adapter.getItem(position);
	 
	 String startString="設定されていません";
	 if(item.started_at != null){
		 startString=item.started_at.substring(0,9)+":"+item.started_at.substring(11,19);
	 }
	 String endString="設定されていません";
	 Log.v("TEST","ended_at:"+item.ended_at);
	 if(item.ended_at != ""){
		 endString=item.ended_at.substring(0,9)+":"+item.ended_at.substring(11,19);
	 }

	 /******************* 説明文を表示するActivityを呼び出す。 *****************/
	 Intent i = new Intent();
	 //別Actibityに渡すデータを格納
	 i.putExtra(START, startString);	
	 i.putExtra(END, endString);	
	 i.putExtra(UPDATE, item.updated_at);	
	 i.putExtra(TITLE, item.title);
	 i.putExtra(DESCRIPTION, item.description);
	 i.putExtra(EVENT_URL, item.event_url);	
	 i.putExtra(OWNER_NICKNAME, item.owner_nickname);	
	 i.putExtra(ADDRESS, item.address);	
	 i.putExtra(PLACE, item.place);	
	 i.putExtra(LIMIT, item.limit);
	 
	 i.setClassName(
			"com.android.yamaguchi.AsyncTaskActivity",
	 		"com.android.yamaguchi.AsyncTaskActivity.ItemActivity");
	 startActivity(i);
 }


}

イベントの説明文を表示するActivity
ItemActivity.java


package com.android.yamaguchi.AsyncTaskActivity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;


public class ItemActivity extends Activity{
	
	TextView textViewTitle;
	TextView textViewStarted_at;
	TextView textViewEnded_at;
	TextView textViewDescription;
	TextView textViewEvent_url;
	TextView textViewOwner_nickname;
	TextView textViewAddress;
	TextView textViewPlace;
	TextView textViewLimit;
	TextView textViewUpdate_at;

	//別のActivityにデータを渡すための定数
	 private static String START="start";
	 private static String END="end";
	 private static String UPDATE="update";
	 private static String TITLE="title";
	 private static String DESCRIPTION="description";
	 private static String EVENT_URL="event_url";
	 private static String OWNER_NICKNAME="owner_nickname";
	 private static String ADDRESS="address";
	 private static String PLACE="place";
	 private static String LIMIT="limit";
	
	public void onCreate(Bundle savedInstanceState) {
		 super.onCreate(savedInstanceState);
		 setContentView(R.layout.item_activity);
		 
		 textViewTitle=(TextView)findViewById(R.id.title);
		 textViewStarted_at=(TextView)findViewById(R.id.started_at);
		 textViewEnded_at=(TextView)findViewById(R.id.ended_at);
		 textViewDescription=(TextView)findViewById(R.id.description);
		 textViewEvent_url=(TextView)findViewById(R.id.event_url);
		 textViewOwner_nickname=(TextView)findViewById(R.id.owner_nickname);
		 textViewAddress=(TextView)findViewById(R.id.address);
		 textViewPlace=(TextView)findViewById(R.id.place);
		 textViewLimit=(TextView)findViewById(R.id.limit);
		 textViewUpdate_at=(TextView)findViewById(R.id.updated_at);
		 
		 //説明文の取得
		 Intent i=getIntent();
		 textViewTitle.setText(i.getStringExtra(TITLE));
		 textViewOwner_nickname.setText("主催者名:"+i.getStringExtra(OWNER_NICKNAME));
		 textViewEvent_url.setText("イベントURL:"+i.getStringExtra(EVENT_URL));
		 textViewLimit.setText("定員:"+i.getStringExtra(LIMIT)+"\n");
		 textViewStarted_at.setText("開始時間:"+i.getStringExtra(START));
		 textViewEnded_at.setText("終了時間:"+i.getStringExtra(END));
		 textViewPlace.setText("開催場所:"+i.getStringExtra(PLACE));
		 textViewAddress.setText("住所:"+i.getStringExtra(ADDRESS)+"\n");
		 textViewDescription.setText(i.getStringExtra(DESCRIPTION)+"\n");
		 textViewUpdate_at.setText("更新日時:"+i.getStringExtra(UPDATE));
	 }
}

MyArrayAdapter.java


package com.android.yamaguchi.AsyncTaskActivity;

import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class MyArrayAdapter extends ArrayAdapter {
	public MyArrayAdapter(Context context) {
		super(context, R.layout.listview_item, R.id.item_text01);
		// 第1引数 ... コンテキスト
		// 第2引数 ... 表示するレイアウト
		// 第3引数 ... 第2引数の中のTextView(何もしなければ、このTextViewにListViewItemのtoString()の結果が表示される)
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		//基本的なことは親に任せる
		View view = super.getView(position, convertView, parent);
		
		//この時点でviewにはlistview_itemを生成したものが出来ている。
		//TextViewはListViewItemのtoString()の結果が入っている。
		// ※ここで取得されるViewは、リストのアイテムごとには生成されず、
		//  ListViewへ一度に表示されるアイテム数分のViewを使いまわすことになる点に注意
		
		//アプリ独自の表示内容に書き換えるために、情報を取得。
		MyListViewItem item = getItem(position);
		if (item != null) {
			
			//各コントロールを取得
			TextView textView01 = (TextView) view.findViewById(R.id.item_text01);
			TextView textView02 = (TextView) view.findViewById(R.id.item_text02);
			textView01.setTextColor(Color.WHITE);
			textView02.setTextColor(Color.WHITE);
				
			if (textView01 != null && item.title != null) {
				textView01.setText(item.title);
			}
			if (textView02 != null && item.started_at!= null) {
				textView02.setText(item.started_at.substring(0, 9));
			}
		}
		return view;
	}
}

MyListViewItem.java


package com.android.yamaguchi.AsyncTaskActivity;

public class MyListViewItem {
	public String title = null;
	public String description=null;
	public String event_url=null;
	public String started_at=null;
	public String ended_at=null;
	public String limit=null;
	public String address=null;
	public String place=null;
	public String owner_nickname=null;
	public String owner_twitter_id=null;
	public String updated_at=null;
}


これと、Gmailアカウントを経由してメールを送信するアプリ
参照:http://d.hatena.ne.jp/ttshrk/20110517/1305641955
を組み合わせて、定期的にATNDのイベント情報を通知するアプリを作りたいな、とか考えている。

*1:eventType = xmlPullParser.next(

「ロボジー」の矢口史靖監督と五十嵐信次郎(ミッキー・カーチス)氏、来福!

映画「ロボジー」の矢口史靖監督と主演の五十嵐信次郎ミッキー・カーチス)氏が、私の通っている大学にご講演に来られました。

矢口監督といえば「ウォーターボーイズ」「スウィングガールズ」などで有名な、映画監督です。

早速予告編を見てみましょう。

あらすじ(goo映画より) 家電メーカー、木村電器の窓際社員、小林・太田・長井の3人組は、ワンマン社長から流行の二足歩行ロボットの開発を命じられていた。近く行われるロボット博での企業広告が目的だ。しかし、ロボット博まであと1週間というところで、制作途中のロボット“ニュー潮風”が木っ端微塵に大破!窮地に追い込まれた3人は、ロボットの中に人間を入れて誤魔化す計画を立てる。ロボットの外装にぴったり収まる人間を探すため、架空のオーディションが開かれ、仕事をリタイアして久しい独り暮らしの老人・鈴木重光(73歳)が選ばれる。しかし、この鈴木がとんでもないジジイで……。さらには、“ニュー潮風”に恋をしたロボットオタクの女子学生・葉子も巻き込み、事態は思わぬ方向へ転がり出す……。

予告編をご覧になってもわかるように、シチュエーションからして完全にコメディです。また、主人公が老人という点も非常に特徴的です。

当日、講演会をセッティングした先生たちが映画の中に出てくる「木村電機」にちなみ「木川電気」としてMCを行なっていました。

「木川電気」の面々

ヘッドフォンをした先生は機材などを操作していたので、MCはそれ以外の三人が行なっていました。矢口監督からは「なんか、すごいバッタモンが……。」「昨日から思ってたんですけど、この三人の先生が一番楽しんでるんじゃないですか?」とツッコまれていました。

最初に業務連絡から。「普通、こういう場では写真撮影をしちゃいけないことが多いですが、今日はどんどん撮影して下さい。そのかわり、TwitterFacebook、ブログなどで多くの人に薦めて下さい」

以下、質疑応答での内容(うろおぼえ)です。
「ロボットの皮を着る撮影はかなり過酷で、ほとんど老人虐待になってしまった」(矢口監督)
「2月に北九州で撮影したのですが、九州だから暖かいかなぁと思ったら、寒かった(笑)」(矢口監督)

「ロボットの下はタイツ一枚、ほとんど裸。本当に寒かった」(五十嵐氏)

「撮影中にも、五十嵐さんに合わせてサイズの調整が行われた、これは映画の中のエピソードにも使った」(矢口監督)
「ロボットは一度来たらなかなか脱げないのですが、着てしまってからトイレに行きたいということになって非常に困ったことになった。これもまた映画の中のエピソードに加えた」(矢口監督)

「この撮影のせいで歯が全部抜けました。ウソです」(五十嵐氏)

「五十嵐さんは、こんな過酷な撮影でしかも色々と恥ずかしいこともさせてしまったにも関わらず、むしろそれを楽しむかのようにやってくださった」(矢口監督)

「矢口監督は日本でも数少ない純粋なコメディを作れる人。監督をやって、脚本も書いている人は本当に少ない。以前からファンでした」(五十嵐氏)

会場には、試写会などですでに映画を観た人も何人かいました。「ある場面でウルッときました」という話が出ると監督はサムズアップで大喜びされていました。「今の感想が嬉しすぎて、なんの質問だったか忘れちゃった(笑)」(矢口監督)

質疑応答で質問をすると、裏側がカレンダーになっているポストカード「カレンジー」が頂けました。



見る角度によって見える絵柄が異なります。

最後に花束の贈呈と集合写真Time。右から順に、映画のプロモーション用に紙で作られたロボット「カミジー」、その隣が大学の先生、五十嵐信次郎氏、矢口監督、花束贈呈ガールズです。

映画「ロボジー」は2012年1月14日公開です。

「忘備録」と「備忘録」では、正しいのは「備忘録」らしい。

自分用メモ

BluetoothはUSBハブを使って動作確認済み。とりあえずShakenextが使えたというだけだけれど。

Felica
FlashおよびAIRを用いた開発方法あるみたいなのだけれど、ドキュメントに書いてある例ではFlex Builderを使用している(持ってないし、流石にちょっと買う気がない……)
こちらとかを参照してhttp://blog.mynet.co.jp/hirashima/2008/04/adobe_flex_sdk.htmlNFCSDKについていたサンプルをコマンドラインからコンパイルしようとしたのだけれども何故かエラー。
ちなみに、このリンクに示されているmxmlファイルはコンパイルできた。ただし horizontalAlign="center" verticalAlign="center" の部分でエラーが出たので削除した。

一方Javaでの開発。Javaから.dllを利用することが出来るというJNAはeclipseで動かせた。それについてはこれらを参照。

あめらぼ : [Felica]felicalibを用いた学生証のIDm読み取り for Java

java開発で、eclipseでdllファイルを読み込み方法を教えていた... - Yahoo!知恵袋

しかし、システム開発サンプル: 'PaSoRi'を使用して、FeliCaカード内の'IDm'を読み取るのサンプルを動かそうとしたものの、うまくいかない。
Felicaランチャーはうまく作動しているので、カードの認識自体は出来ているが、サンプルの方にIDが表示されない。
Felicaランチャーの方にメッセージを取られてしまってサンプルプログラムの方まで届いていないのかなとおもって、一旦Felicaランチャーをアンインストールしてみたけれど関係ないっぽい。

基本的にはJavaのほうで開発したいのだが、とりあえずJavaのサンプルプログラムの方にちゃんとカードを認識してもらうにはどうしたらよいものやら。

後記:もうJavaでなくてもいいから、とりあえず動くプログラムを探していたら、こちらのC#のサンプルが動いた。
橋本商会 » C# – FeliCaリーダでIDを読む

もうちょっと色々試してから弱音はくべきだったかも。

結論:本当にやりたいならC#覚えたほうが早道じゃないか?>自分

大学2年時に作成したレポート 

 大学2年時に作成したレポートが出てきた。もう少し推敲したバージョンがあった気がするのだけれども、データが見つからない。

 「性格に関する研究の歴史」というテーマで書いたのだが、自分が読みたいものを書いた、という感じがする。自分で言うのも何だが、結構いいことを書いていると未だに思う。もうちょっとうまく書けないかという気もするが。

レポートの報告書の「趣旨」の欄にはこう書かれている。

「まず1章で性格論(性格に対する考え方)について大まかな解説をする。次に2章で心理学における性格論の流れを追う。3章では医療における人格障害という概念と、より一般的な性格論の関連を見る。4章で対人魅力(他者に好かれるかどうか)と、性格の相性について説明する。5章で性格の検査法について解説する。
心理学の中でも特に、正常と異常、主観と客観の境界線上にある「性格」に対する考え方、捉え方の歴史を追う。特に、1章、3章、5章では性格そのものと言うよりも、それらに対する観点の方を検証する形になった。心理学者の学説のみでなく、一般の人たちが性格というものについて、どういった意味を含ませているのか、なぜ性格論が必要とされるのかも併せて考えた。
 当初は、テーマが大きすぎるため歴史を辿るだけになるかと心配したが、最終的には自分の視点も入れることができたと思う。今回は、ある学説に立った上での性格の検証でなく、学説自体の検証を行ったため、抽象的な記述が多くなった面もある。」

01性格とは何か.docx 直
02心理学での性格論の流れ.docx 直
03人格障害(性格の病).docx 直
04対人魅力と性格の相性.docx 直
05性格の検査法.docx 直
06参考文献.docx 直