yamicha.com's Blog - Presented by yamicha.com
Blog yamicha.com's Blog - 2018/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
実名を出して何になる
2009/11/15(Sun)19:27:16
 光市事件を扱った「(加害者の名前)を殺して何になる」という本について、加害者側が出版差し止めの仮処分を求めていましたが、広島地裁はこれを却下しました。判決では、加害者は犯行当時は少年ではあるものの、書籍発表時点では28歳であること、世論の少年犯罪に対する関心の高さから、この本が公共の利害に関すること、本件はプライバシーの侵害ではあるものの、回復困難とまではいえないこと、また事前に加害者より実名利用の承認を得ていたことを認定し、差し止めを行うまでの違法性はないとされています。なお、加害者側は「著者は原稿を事前に確認させると約束したが、それを反故にして書籍を出版した」と主張しています。
 以前の「僕はパパを殺すことに決めた」の場合もそうでしたが、著者や出版社は一体何が面白くてこのようなことをするのでしょうか。特に本件では、加害者の名前を本のタイトルに含むという極めて挑戦的な暴挙に出ており、何の意味があるのか理解に苦しみます。仮に加害者側の承認があったとしても、実名の使い方に全く意味が見出せません。
 無論、どうしても実名でなくては成り立たない出版物であれば、加害者の承認を得た上で実名を使うのもやむを得ない場合はあるでしょう。しかしながら、実名をタイトルに使ってセンセーショナルな印象をあおる必要はどこにもありません。必要な場面で実名を使うならともかく、それをタイトルに使うなどとは、実名を「ウリ」の1つにしていると批判されても仕方がありません。タブロイド誌でもあるまいし、およそまともなジャーナリストの行為ではありません。
 さらに、仮処分に対する出版社及び著者側の主張にも唖然とさせられます。「加害者の実名や顔写真は過去に雑誌などに掲載された公知の事実であるので、表現の自由に照らして違法性はない」というのです。ひとたび雑誌などに実名や写真が掲載されてしまえば、後は実名などを好き勝手に扱っても構わないと言っているも同然で、著者や出版社といった報道にかかわる人々がこのような考えを持っていることには驚愕を禁じえません。もしこのような言い分が認められてしまえば、あらゆるプライバシーの侵害がなし崩し的に可能となってしまいます。
 世論には、少年法が実名報道を禁じていることに批判的な意見も少なからず見受けられますが、少なくともマスコミが自分勝手な判断で勝手に実名報道を行い、なし崩し的に実名報道を形骸化させるようなことが許されないのは言うまでもありません。ましてや、週刊誌をはじめとする多くの実名・顔写真報道は、そのほとんどが必要性ではなく商業的な理由により行われていると言わざるを得ず、読者の覗き見趣味を満たす以上の価値はありません。
 また、このような暴走が何を生み出すかは、過去の事例を見れば明らかですが、マスコミや自称ジャーナリストらは過去からも学べていないようです。この種のセンセーショナルな報道が平然と行われるようになって、散々特定人物の名誉を毀損した挙句、実はその人が全くの無実であると判明したら、マスコミは一体どのように責任を取る気なのでしょうか。
 本題からは少々脱線しますが、大手新聞社のサイトで報道に関するコラムを見つけました。執筆者は新聞社の人間です。以下に内容の一部を引用します。

 最近、知人から「新聞は役に立たない」と言われた。例の結婚詐欺女の周辺で不審死が相次いでいる事件。「どんな面相の女性か知りたいのに」と言う。確かにほとんどの新聞、テレビは顔写真はもちろん「34歳の女」という仮名扱い。読者のニーズに応えていない。
 立件されるかどうか微妙なところで慎重な紙面なのだと思うが、彼女はすでに詐欺罪で起訴されている。氏名、顔写真の公表で「新証拠(→新展開)」が出てくるかもしれない。どうして新聞は及び腰なのか?

 正直に申し上げて、背筋が寒くなりました。新聞社のお偉いさんが(コラム執筆の時点で)まだ立件もされておらず、今のところ詐欺罪で起訴されているにとどまる被疑者の顔を、「どんな面相か知りたい」という知人の覗き見趣味のニーズにこたえて公開せよと主張しているのです。
 このコラムの執筆者は、以前にインターネットを低級のメディアであるとして散々批判し、新聞の価値を強調したりしていましたが、そうであるならなぜ「新聞がインターネットなどに比べ、情報の広さ、深さ、正確さで劣っているという指摘には、真摯に反省しなければならない。しかし、新聞の報道が被疑者の面相を知りたいなどという下劣な知的好奇心を満たさず、役に立たないというのであれば、それはむしろ新聞の誇りである」と一言反論できないのでしょうか。その後には申し訳のように「新証拠が出てくるかもしれない」としていますが、覗き見趣味を満たすための情報公開と、新証拠・新展開を求めた情報公開では、価値も動機も全く違います。
 この図式は、まさに光市の加害者の実名にも当てはまります。どうしても実名が必要であるというのなら、必ずしも認められないものではないはずですが、タイトルに実名を記して客寄せにしようなどというのは、下劣な覗き見趣味のために顔写真を公開するのと全く同じです。とても認められないどころか、報道や表現の自由の自殺にさえつながりかねません。
 本件に対しては、覗き見趣味を利用するも同然のセンセーショナルなやり口や、著者・出版者らの方の曲解と無茶な論理、報道被害の土壌、報道の自殺の可能性、また本件に通じるものがある「僕はパパを〜」の著者や新聞社のお偉方の言い分など、万感を込めて(本のタイトルに)「実名を出して何になる」の一言が出てくるのみです。

 Internet Explorer 8には「アクセラレータ」なる機能が追加されています。これは「ページ閲覧時」、あるいは「文字列やリンクを選択している時」に呼び出せるもので、ページ内の文字列を選択してそのまま検索が可能なGoogleなどの検索ツールバーを進化させたような機能です。デフォルトでは「Live Search で翻訳」なるものも入っており、場合によってはなかなか使えそうです。文字列選択のたびにいちいちアクセラレータのボタンが表示されるのはいかがなものかという気はしますが、右クリックメニュー項目開発の敷居が下がるのは歓迎できます。
 それで、この機能は一体どうすれば開発できるのでしょうか。以前のIEのツールバーともなると、それなりに面倒なプログラムが必要となったようですが、アクセラレータも面倒な.NETなり何なりの開発が必要なのでしょうか。「Internet Explorer アクセラレータ SDK」なるものが必要であるとすれば大変面倒ですし、それがMSのIDEに組み込むような形式のライブラリであれば、Monoで開発できる見込みはなくなります。果たして何とかなるのでしょうか。
 ところが、とりあえず検索をかけてみたところ、実はXML1つ書けば作れてしまうことが分かりました。見た目からすると難しそうですが、その実態は単にURLを呼び出しているだけらしいのです。呼び出すURLとして、例えばGoogleなど既存のURLを使えば(実際にはGoogleはアクセラレータを提供しており、自分で作る必要はありませんが)、正真正銘XMLを書くだけでアクセラレータが完成します。SDKや開発ツールも不要で、IEAKを使う必要もなければ、レジストリを手動で扱う必要すらなく、かつてないほど簡単です。
 ただ、アクセラレータを使って何らかの独自の機能を作成したいのであれば、呼び出される側のプログラムも作成しなくてはなりません。ちなみに、アクセラレータのデータは標準的なPOSTまたはGET方式で送信されるため、CGIで処理するも、PHPで処理するも、その他何らかの方法で処理するも、全くの自由です。glassfishにEnterprise Applicationを登録し、アクセラレータからServletなりJSPなりを呼び出して使用するという、MSに対する嫌がらせのような行為すら可能です。
 作成可能と分かった以上、作ってみないわけにはいきません。簡単かつそれなりに実用的なものとして、今回は「URL文字列を開くアクセラレータ」を作成してみます。具体的には、

http://www.google.com/

 この文字列をドラッグして選択し、アクセラレータを呼び出すことで、上記URLが開かれるものとします(当ブログのコメント欄でもそうですが、スパム防止のためにURLの自動リンクを無効にしている掲示板やコメントフォームでは、URLを開くのに若干手間が必要ですので、そのような場合に使用することを想定しています)。
 また、自動的にリンクがなされる掲示板などであっても、リンク化を避けるために

www.google.com
ttp://www.google.com

 あえて以上のような記述がなされる場合も少なくありませんので、プロトコルの指定がない場合には自動的にhttp://を追加して開く(www.google.comであれば、先頭にhttp://を付加して開く。ttp://...に関しては、先頭にhを補間するなどの処理は行わないが、www.google.comの部分だけを選択して開けば問題はない)ものとします。また、URL文字列の選択時によくあるミスとして、選択したURLの末尾に半角スペースが入ってしまうことがありますので、これを見つけた場合は除去します。
 上記の仕様に沿って作成したのが以下のプログラムです。余程Servletで書いてやろうかと考えましたが、アクセラレータの開発を簡素にしたことに免じて、無難にPHPとしました。
<?php
// acc.php
// プロトコル部分と後の部分を切り分ける関数
// 文字列 "://" を境界とみなし、この文字列が見つからない場合は
// プロトコルの指定のない(www.google.com のような) URL とみなす
function split_protocol($url){
	$pos = 0;
	if(($pos = strpos($url , "://")) === false)
		return false;

	return array(substr($url , 0 , $pos) ,
		substr($url , $pos + 3));
}

if($_POST["mode"] == ""){
	print <<<EOF
<html>
<head>
<title>(Homepage)</title>
</head>

<body>
(ここは homepageUrl が開かれた際に表示されるページです)
</body>
</html>
EOF;
}else if($_POST["mode"] == "move"){
	// 渡された URL にプロトコルの部分があるかを確認
	// ないなら http:// を付加する
	$url = $_POST["url"];
	if(strpos($url , "://") === false)
		$url = "http://" . $url;

	// 末尾にスペースがあれば除去
	if($url[strlen($url) - 1] == " ")
		$url = substr($url , 0 , strlen($url) - 1);

	header("location: $url");
}

	print <<<EOF
</small>
</body>
</html>
EOF;
}
?>
 「://」を基準に判定・切り分けを行うのは、厳密には必ずしも正しい方法とはいえませんが、現実のWebブラウザでは「xxxx://yyyy」形式のURLを扱うことがほとんどですので、とりあえず問題はないでしょう。なお、今回作成するプログラムでは、SQLなどといったものは扱っていないため、その点はあまり考慮していませんが、もしSQLを使うようなプログラムを作成するのであれば、インジェクションが発生しないように十分注意する必要があります
 MSDNの資料によれば、アクセラレータは以下のようなXMLを使用して登録するようです。ただし、上記PHPファイルを「http://localhost/acc.php」に置いたものとして記述しています。
<?xml version="1.0" encoding="Shift_JIS"?>
<openServiceDescription
  xmlns="http://www.microsoft.com/schemas/openservicedescription/1.0">

  <homepageUrl>http://localhost/acc.php</homepageUrl>

  <display>
    <name>指定 URL への移動</name>
    <description>選択された URL に対する移動を行います。</description>
    <!-- 必要ならアイコン(*.ico)を使用できる
    <icon></icon>
    -->
  </display>

  <activity category="検索">
    <activityAction context="selection">
      <!-- プレビューの処理が必要なら記述
      <preview action="some_url" method="post">
        <parameter name="name1" value="value1" />
        <parameter name="name2" value="value2" />
        ...
      </preview>
      -->

      <execute action="http://localhost/acc.php" method="post">
        <parameter name="mode" value="move" />
        <parameter name="url" value="{selection}" />
      </execute>
    </activityAction>
  </activity>
</openServiceDescription>
 まずhomepageUrlは「アクセラレータのホームページURL」を記述するものであるらしく、ここで指定したURLは「アクセラレータの管理」ウィンドウの「ホームページ」欄に記載されます。これは必須の項目で、アクセラレータで使用するすべてのURLは、homepageUrlと同じドメインに所属している必要があるという制限も存在するようです。
 displayノード内のnameは見ての通り「名前」で、アクセラレータにはこの名前で登録されます。descriptionも見ての通りで、機能についての説明書きを行います。アイコンがあるならアイコンも指定できます。
 activityノードのcategoryアトリビュートは、「アクセラレータの管理」における「区分」を設定するものです。また、activityActionノードのcontextアトリビュートでは、いかなる場合にこのアクセラレータを使用し、その際にいかなるURLを呼び出すかを指定します。MSDNの資料によれば、このアトリビュートには次のような値を設定できるようです。

document 文字列やリンクなどを選択していない場合の動作。具体的には、ページのどこかを「右クリック」して「すべてのアクセラレータ」をポイントし、アクセラレータを使用した場合。
selection 文字列を選択した場合の動作。文字列を選択して右クリックし、「すべてのアクセラレータ」をポイントした場合や、アクセラレータボタンを押してメニューを出し、アクセラレータを使用した場合。
link リンクを選択した場合の動作。リンクを右クリックして「すべてのアクセラレータ」をポイントし、アクセラレータを使用した場合。

 これらの場合について、それぞれpreviewやexecuteの動作を記述できます。
 previewノードは、当該アクセラレータをポイントした場合に表示される「ふきだし」のようなメニューについて設定するもので、executeノードはクリックした場合の動作です。actionやmethodアトリビュートはformタグそのままですから、特に説明は不要でしょう。ちなみにenctypeも設定できるようです。
 parameterはそのまま「引数」で、ここで記述したパラメータがPOSTまたはGET方式でactionアトリビュートで指定したURLへと送られます。
 XML内では「変数」なるものが使用でき、中カッコ{...}で囲んで記述します。例えば{selection}は変数です。変数の一覧はMSDNの資料にありますが、使いやすそうなものをいくつか抜き出すと、

{documentUrl} 現在のドキュメントのURL。
{documentTitle} 現在のドキュメントのタイトル。
{selection} 選択している文字列。
{link} 選択しているリンクのhref。
{linkText} 選択しているリンクのテキスト。

 このようなものが存在するようです。
 こうしてXMLを作成できたら、後はそのXMLをアクセラレータに追加するのみです。以下のような記述を含むHTMLを作成し、
<!-- XML を http://localhost/acc.xml に置いた場合のサンプル -->

<!-- リンクの場合 -->
<a href="#" onclick="window.external.addService('http://localhost/acc.xml')">
アクセラレータのインストール</a>

<!-- ボタンの場合 -->
<button onclick="window.external.addService('http://localhost/acc.xml')">
アクセラレータのインストール</button>
 これを実行すると「アクセラレータの追加」ダイアログが表示され、ごく簡単に追加が完了します。
 後は文字列を選択し、アクセラレータボタンなり右クリックなりを使用すれば、このアクセラレータを使用できます。実際の見た目は以下のようになります。



 無論、クリックするとGoogleのホームページが表示されます。

 以上、これで一応の完成とはなりましたが、もし「ttp://www.google.com/」などを選択して移動しようものなら、本当に「ttp://www.google.com/」に飛ばされてしまいます(当然エラー)。また、せっかくアクセラレータを使用するのですから、プレビュー機能も使用してみたいところです。
 そこで、プレビューではプロトコルを選択したり、必要であればURLを修正できるようにしてみます。ひとまずPHPを以下のように修正しまして、
<?php
function split_protocol($url){
	$pos = 0;
	if(($pos = strpos($url , "://")) === false)
		return false;

	return array(substr($url , 0 , $pos) ,
		substr($url , $pos + 3));
}

if($_POST["mode"] == ""){
	// プレビューの場合の動作
	$protocoles = array("http" , "ftp" , "mms");

	$protocol = $protocoles[0];
	$wop_url = $_POST["url"];

	if($matches = split_protocol($wop_url))
		list($protocol , $wop_url) = $matches;

	// 末尾にスペースがあれば除去
	if($wop_url[strlen($wop_url) - 1] == " ")
		$wop_url = substr($wop_url , 0 , strlen($wop_url) - 1);

	print <<<EOF
<html>
<head>
<script language="JavaScript">
<!--
function jump(url){
	window.open(url , "_blank");
}
function setProtocol(p){
	jform.jprotocol.value = p;
}
-->
</script>
<title>URL 移動</title>
</head>

<body>
<small>
以下の URL に移動します。
<form name="jform" onsubmit="jump(jform.jprotocol.value + '://' + jform.jurl.value);return false">
<input type="text" name="jprotocol" size="8" value="$protocol"> ://
<input type="text" name="jurl" size="30" value="$wop_url">
<input type="submit" value="移動">
</form>
EOF;

print "プロトコル:<br>";
foreach($protocoles as $p){
	print "<a href="#" onclick="setProtocol('$p')">$p</a> ";
}

	print <<<EOF
</small>
</body>
</html>
EOF;
}else if($_POST["mode"] == "move"){
	// プロトコル部分があるかを確認
	// ないなら http:// を付加する
	$url = $_POST["url"];
	if(strpos($url , "://") === false)
		$url = "http://" . $url;

	// 末尾にスペースがあれば除去
	if($url[strlen($url) - 1] == " ")
		$url = substr($url , 0 , strlen($url) - 1);

	header("location: $url");
}
?>
 XMLにプレビューに関する記述を書き加えます。
<?xml version="1.0" encoding="Shift_JIS"?>
<openServiceDescription
  xmlns="http://www.microsoft.com/schemas/openservicedescription/1.0">

  <homepageUrl>http://localhost/acc.php</homepageUrl>

  <display>
    <name>指定 URL への移動</name>
    <description>選択された URL に対する移動を行います。</description>
    <!--
    <icon></icon>
    -->
  </display>

  <activity category="検索">
    <activityAction context="selection">
      <preview action="http://localhost/acc.php" method="post">
        <parameter name="url" value="{selection}" />
      </preview>

      <execute action="http://localhost/acc.php" method="post">
        <parameter name="mode" value="move" />
        <parameter name="url" value="{selection}" />
      </execute>
    </activityAction>
  </activity>
</openServiceDescription>
 後はこれをアクセラレータに追加すれば、おそらくプレビューが使えるようになるはずです。
 結果、無事にプレビューが使用できました。プレビューの性質上、大変横長の画像となりましたので、別リンクとして記載しておきますが、以下のようになります。

プレビュー画面
 説明するのも野暮ですが、ベルリンの壁崩壊20年を記念して、グラスノスチとグラスフィッシュを、Java Community Processと日本共産党を、またソ連崩壊とSunの買収をかけたジョークです。プロトコルのリンクをクリックすると、プロトコル部分にhttpやftpといった文字が入力されます。この場合であれば「http」をクリックしてから「移動」をクリックすると、正しくGoogleの検索結果が表示されます。なお、プロトコルのリンクは「テキストボックスにプロトコルの文字列を入力する」だけのものですので、これ以外のものを自分で入力することもできます。

 このアクセラレータは割と活用できそうです。
カテゴリ [開発魔法][社会問題] [トラックバック 0][コメント 0]
<- 前の記事を参照 次の記事を参照 ->

- Blog by yamicha.com -