yamicha.com's Blog - Presented by yamicha.com
Blog yamicha.com's Blog - 2017/09 の記事
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30]

yamicha.com's Blog
 諸事情により、現在更新休止中。ご了承ください。もし今後ブログを再開することがあるとすれば、その際にはこのブログスクリプトではなく、新しく開発したものによるかもしれません。
 当ブログ管理者についてはこちらをご参照。
開発魔法(737)
社会問題(733)
お知らせ(11)
質問・バトン回答(15)
ゲスト出演(8)
経済・知的財産(150)
ゲーム開発(182)
[Ada] 勝手に補足
- Note
- 金配りの次の一手


- Endless Ultimate Diary
- 銃世界

漢字バトン
- うるる雑記帳
- 漢字接力棒

ツキアイゲノムバトン
- ブログ@うにうに画像倉庫
- あぶ内閣

縺イ縺セ縺、縺カ縺励ヰ繝医Φ
- 月夜のボヤキ
- 騎士サーラバトン
パスワードを使う
名無し (2012/02/27)


開発者解放裁判
yamicha.com (2010/03/14)
Winnyに関しては、私も「純白」とまでは考えておりませんし、使用し..

開発者解放裁判
通りすがり (2010/03/08)
winnyに関しては「ダウンロードソフト板」なんてところを拠点に開発..

新型インフルエンザの恐怖
いげ太 (2009/11/03)
> C#などの「int Some(int , int)」は、F#では「(int * int) ->..

時効に関する思考
yamicha.com (2009/08/31)
>いげ太さんコメントありがとうございます。手元にドキュメントが少..
Homepage
Blog Top
Normal View
List View
Search
Calendar
Comment List
Trackback List
Blog RSS
Send Trackback
Phone Mode
Administrator
yamicha.com
Blog
るううるる。
Source
法令データ提供システム
FindLaw
Development
Java2 Platform SE 6
Java EE 6 API
MySQL Developer Zone
PHP Reference
MSDN Library
Ada Reference Manual
Objective Caml
Python Documentation
Erlang
Prolog Documents
 垂オ訳ございませんが、現在このブログではトラックバックを受け入れていません。

 この記事に対してリンクされる場合には、こちらのURLをご利用ください。
http://void.yamicha.com/blog/blog.cgi?mode=view&number=776
 上記URLをトリプルクリックされますと、簡単にURL全体の選択が行えます。

※以下の記事がトラックバックされます。
毎年恒例の先送り表明の日
2010/08/16(Mon)00:08:39
 靖国神社の代替となる無宗教の国立追悼施設の建設構想について、菅氏は「党内外でもかなり議論がある。今すぐどうという結論ではなく、そういう議論の在り方を見ておきたい」と述べ、11年度の予算への調査費計上を見送る考えを示しました。なお、本構想は政権交代前の民主党の政策集にも盛り込まれたものでしたが、昨年の鳩山政権も菅氏と同様の理由で調査費の計上を見送っています。
 鳩山政権ともども、意見が分かれているからと拙速を避けて様子を見るのは結構ですが、それでは一体いつになれば機は熟したと判断されるのでしょうか。中立的な追悼施設の建設に関しては、かねてから構想や議論が存在したはずですが、いつまで経っても同じ言い分の繰り返しで進展が全く見られず、終戦記念日のたびに靖国関連のバカ騒ぎが繰り返されるのには、失望を禁じ得ません
 確かに、中立的な追悼施設の建設は最善の策であるとは言いがたい面があります。現状の「党内外での議論」を見るまでもなく、各立場の人々から様々な異論が出ることは避けられません。しかし、あらゆる意見の人々を納得させる最適解というものがおよそ存在しない以上、本構想は今のおかしな状況を改善するための次善の策として現実的なものですから、下手に引き伸ばすよりも実現を目指すべきです。
 非常に不幸なことに、現状の靖国は完全に政治の道具として用いられています。しかも、中国など一部の諸外国が靖国参拝問題を外交問題化しようと試みるだけならまだしも、日本の自称「保守」政治家が靖国参拝をパフォーマンスや支持固めに利用しており、そのような意味でも靖国参拝は政治問題と化してしまっています。一部外国が勝手に参拝を批判しているだけならまだしも、日本の政治家が「対外強硬」を演出するためにあえて靖国参拝を利用しているのですから、外交問題化に行き着くのは当たり前です。
 そして、「戦没者の追悼」をこのような浅ましいパフォーマンスの道具として利用する者がいるせいで、政治問題とは無関係に以前から靖国参拝を行っていたり、本当に純粋な思想から靖国参拝を希望するような者までもがとばっちりを食い、政治家らの純粋な参拝や戦没者追悼が困難な状況となっています。一部の自称「保守」政治家の軽薄な行動により、純粋な思想の者が不自由し、「追悼」と称して戦没者が政治利用される現状は、極めて嘆かわしいと言わざるを得ません。
 また、靖国神社は「遊就館」なる資料館を持っており、太平洋戦争に対して保守的な主張を展開していますが、実際にはご都合主義にもほどがある、極めていい加減な施設でした。戦後日本の「自虐史観」や外国の干渉を排して「正しい」情報を伝えている施設のはずが、米国から文句がついたと見るや内容を修正してしまい、さらにはダブルスタンダードを避けるためか、後には中国の言い分も受け入れざるを得なくなりました。私は必ずしも同施設の歴史観に賛同する気はありませんが、私個人の思想はどうあれ、同施設の行動にはあきれるしかありません。
 無論、神社がいかなる主張をするもその神社の自由ですし、また外国の指摘に従ってホイホイと主張を変えるのも自由ではありますが、靖国神社の場合は追悼施設としての性質がその主張に権威や注目を持たせてしまい、その上かつて外国から文句がついたように、その行動が時として政治・外交問題化もしかねないという側面があります。同神社がいかなる姿勢の持ち主であるかは前述の通りですが、今後とも同神社に「権威」を持たせ続けることは、果たして適切といえるでしょうか。
 さらに、靖国参拝はすでに政治・外交問題化しており、一部政治家の「参拝」なる利のない行動によって国益を損ねかねない点も問題です。「参拝への文句は内政干渉」との声も聞かれますが、「内政干渉」と言い張るのは主張者の自由ながら、そう言い張ったからといって国益へのダメージを避けられるわけではありません。国の利益を守るためにどうしても譲れない部分がある場合には、外交関係の悪化も辞さずに頑として信念を通すのは大事なことですが、本件に害はあっても利はありません。
 しかも、ある政治家が純粋な信念に基づいて参拝を行い、一部外国がそれに言いがかりをつけているというならまだしも、日本の一部政治家がわざと外交摩擦を作り出して対外強硬を演出する手段として、あえて靖国参拝を行った経緯がある以上、日本の政治家と一部外国の政治家の双方が靖国参拝を外交問題として利用している側面があるわけですから、他国が一方的に言いがかりをつけているともいえません。一部のパフォーマンス政治家が本件を外交摩擦演出の道具に仕立て上げてしまったせいで、政治や外交など無関係に本気で参拝や追悼を望んでいる公人は、どれほど迷惑していることでしょうか。
 これらの問題を解消し、戦没者を政治や人気取りに利用しようとする一部の嘆かわしい政治家にそれをやめさせ、純粋な追悼や参拝を望んでいる公人が何の懸念もなくそれを行えるようにする方法としては、やはり中立的な追悼施設が最も現実的な案でしょう。首相や閣僚がアピールのために参拝したり、議員が徒党を組んで集団で参拝したりといった、戦没者をパフォーマンスに用いる不純で浅ましい参拝をなくし、純粋に参拝・追悼したい公人が静かにそれをできるようにするために、速やかな実現が望まれます。

 Quercusが通常のPHPと異なる点として、JNDIからデータベース接続を取得できましたが、QuercusではJavaのメソッドを用いることもできるようです。また、必要ならPHPの標準出力を受け取ったり、何らかの設定を受け取ったりも可能となっています。
 ドキュメントによれば、Javaのメソッドを使用する際には以下の手順に基づきます。
  1. 使用したい機能を含んだJavaのクラスを作り、それをWEB-INF/classes以下など見える場所に配置。クラスはcom.caucho.quercus.module.AbstractQuercusModuleを継承。
  2. WEB-INF/classes/META-INF/servicesにcom.caucho.quercus.QuercusModuleなるファイルを作成し、用いるJavaクラスを列挙。
  3. PHP上でメソッド名をそのまま書く。
 つまり、Javaの適当なクラスに「hello」なるメソッドを書いたら、PHP側では「hello」という関数として使用できます。何か嫌な予感がしますが、案の定ドキュメントではしっかり(メソッドhello_testのJavaDoc部分)
Notice the careful use of the naming
convention hello_test.  This is done
in order to prevent name collisions
among different libraries.
 と書かれてしまっています。ひとまずPHP関数の命名規則にでも従っておいた方が安全かもしれません。
 なお、com.caucho.quercus.QuercusModuleを配置するのは(project_root)/WEB-INF/classes/META-INF/services(JPAを使う場合にpersistence.xmlを置く場所)でなくてはならず、うっかり展開したQuercusのディレクトリに最初から存在する(MANIFEST.MFが置いてある)(project_root)/META-INFにつられてそこにservicesディレクトリを作り、その中にcom.caucho.quercus.QuercusModuleを置いたとしても、全く動作しません。マヌケな間違いといえばその通りですが、作業している側としては正しいと信じ込んでいるだけに、実際にこれに陥ると非常に迷います
 今回は簡素に、次のような構成で作成しました。
/WEB-INF
 /classes
  /META-INF
   /services
    com.caucho.quercus.QuercusModule
  /com
   /yamicha
    /php
     Test.java
     EnvTest.java
(メソッドを呼び出す適当な.phpファイル)
 com.caucho.quercus.QuercusModuleには使用するJavaクラスを列挙します。ドキュメントのサンプルは1つのクラスのみを使用する例となっていますが、2つ以上の場合は改行区切りで動作しました。
com.yamicha.php.Test
com.yamicha.php.EnvTest
 Test.javaでは、適当な2つのメソッドを記述しています。
package com.yamicha.php;

import com.caucho.quercus.module.AbstractQuercusModule;
import java.util.List;
import java.util.ArrayList;

public class Test extends AbstractQuercusModule{
	public String test_repeat(String str){
		return str + str;
	}
	public List<Long> test_map_plus(
		List<Long> datas , int v){
		List<Long> result =
			new ArrayList<Long>(datas.size());
		for(int i = 0; i < datas.size(); i++)
			result.add(i , datas.get(i) + v);
		return result;
	}
}
 文字列はString型で受け渡しできるとして、問題は整数です。ただ単に普通の整数を受け渡すのであれば、この通りintでも問題はないようですが、Listを使用する場合はList<Integer>ではエラーとなってしまいました。PHPの整数型の大きさはプラットフォーム依存とのことですが、Quercusの内部ではlongが使われているようです。
 EnvTest.javaでは、com.caucho.quercus.env.Envを使用しています。ドキュメントのサンプルからも読み取れる通り、PHP上でのメソッド引数は第一引数のEnvを除いたものとなります。APIリファレンスによれば、Envにはかなり色々な機能があるようです。PHPにかかわる一部機能はともかくとして、HttpServletRequestなども取れてしまうのは何ともメタ的です。
package com.yamicha.php;

import com.caucho.quercus.env.Env;
import com.caucho.quercus.module.AbstractQuercusModule;
import java.util.List;
import java.util.ArrayList;

public class EnvTest extends AbstractQuercusModule{
	public void test_show_list_content(Env env , String color ,
		List<String> label , String[][] sources){
		env.println("<table border=\"1\">");

		env.println("<tr>");
		for(String l : label)
			env.println("<td bgcolor=\"" + color +
			"\">" + l + "</td>");
		env.println("</tr>");

		for(String[] source : sources){
			env.println("<tr>");
			for(String s : source)
				env.println("<td>" + s +
					"</td>");
			env.println("</tr>");
		}

		env.println("</table>");
	}
}
 PHPの配列の受け渡しは配列型でもListでも行えるようですが、多次元となると配列型で行うのが無難そうです。さすがにList<List<String>>は通用しませんでした。
 後はこれらをPHP上から適当に呼び出すのみです。
<html>
<head>
<title>Quercus Java-PHP</title>
</head>
<body>

<?php
print "Eggs Beans" . test_repeat(test_repeat(" Spam"));
print "<br />";

print_r(test_map_plus(array(6 , 22 , 54 , 118 , 246) , 10));

test_show_list_content("#CCDDFF" ,
	array("名称" , "動作環境" , "言語名") ,
	array(
		array("Quercus" , "Java" , "PHP") ,
		array("Jython" , "Java" , "Python") ,
		array("JRuby" , "Java" , "Ruby") ,
		array("A#" , ".NET" , "Ada") ,
		array("IronPython" , ".NET" , "Python")
	)
);
?>

</body>
</html>
 見た目はPHPでも、型に失敗するとClassCastExceptionを投げてきたりするのが何ともJavaです。
カテゴリ [開発魔法][社会問題] [トラックバック 0][コメント 0]
<- 前の記事を参照

- Blog by yamicha.com -