Signed-Appletをどういった基準で信頼するか

セキュリティーというよりも雑談です。
2月くらいにSigned-Appletを使ったウェブ部品を作っていました。今でも微妙に作っているのですが、それはいいとして、このSigned-Appletというのがなかなか面白いもので、Javaによる通常のセキュリティー制限を受けずにAppletを実行できます。
もちろん『実行しますか?』的な警告はでますが、これが次のような画面です。
f:id:ultraist:20070610235740p:image
詳細情報↓
f:id:ultraist:20070610235840p:image

結構安心できそうじゃないです? 「信頼できるソースによるデジタル署名の検証に成功しました」「Thawte Freemail Memberはこの内容が安全であることを表明します」「このセキュリティ証明書は、信頼のできる団体によって発行されています。」「このセキュリティ証明書は期限が切れておらず、依然として有効です。」でインフォアイコンだし、Javaも「実行しても大丈夫だから早く実行しろー」と言いたげです。しかも「この発行者からのコンテンツを常に信用します」にチェックが入っているので、一度実行すると、次から許可ダイアログなく実行されるようになります。一般の人はつい実行を押してしまうと思いませんか。僕でもなんらかそのページを見る目的があって、どうもこれを実行しないとそれが見れないようなら気軽に実行しそうです。
でもこれかなり危ない可能性があります。この証明書はネットカフェに行ってフリーメールを使って無料で10分で取れるものだからです。CAは信頼できますが、署名している人が信用できません。だれでも自分の作ったJavaプログラムに好き勝手に署名できます。
仮に僕が悪い人ならWinnyプロトコルの知識を利用して実行したとたんに全ドライブをWinnyネットワークに流出させるプログラムを作って、適当に確保したウェブサーバーに次々にコピペしていき、ウェブページを開いただけで流出事件を発生させまくるかもしれません。そんな危険なものがこんな大丈夫そうなメッセージで実行されるのだから結構怖いと思うんです。
ただ署名した人のメールアドレスやドメインをよく確認してから実行すればいいとは思うのですが、そこまでたどり着くまでが長いので、初心者には難しいんじゃないかなぁという、話でした。

怪しくないページ
なんとウェブページを開いて『実行』してしまい、『録音ボタン』をついうっかり押してしまうと、マイクがハッキングされて環境音が録音されます。しかも誇らしげに再生までされてしまいます! それだけですが。

本題

少しずつですが、この仕組みを使ってなにかやってみようと思います。
でも、JavaAppletは起動が重いーという嫌な点があります。

Signed-Applet

じゃあどうしたらいいのかというと、たぶんこのままでよくて、自分の中の『ウェブページからアプリが実行されるのがそもそも怖い!』という先入観が間違いなのか。
システムに標準でインストールされている信頼できるCAリストの中に、無料で誰でも証明書を取れるところがあるのが気になるけれど、それは保障しなければいけない部分ではないよね。たぶん。
個人的には気軽にSigned-Appletが作れて嬉しいけれど、利用者側になると怖いみたいな。

ここについて

最近ここに書きにくくなっていて、なぜ自分の日記帳を書くのにビビっているのかという謎があります。なにもしていないのにmixi疲れみたいな。前に掲示板がイイと言っていたのも、そのあたりの心境からきています。ちょっとしたことがあっても「いや、わざわざ書くことでもない」なんて考えになっている感じです。その代わり『はてブ』では無駄にえらそうにごちゃごちゃ書いていたり。
たぶん自分で書いている内容が偏ってきているのと他の人を意識しているからアレなんで、ついに方針を打ち出したいと思います。

  • 調べ物をしている人がGoogle検索から偶然訪れて、とりあえず有用な情報だけゲットしてもう二度と来ないようなページ

調べて分かったことなんかをひたすら書いていきます。わたしは一日の3分の1はググっているような気がするググりストなので、なんとなくググるキーワードとかも予想ができます。

  • 作っているものや、していることがあればそのことをひたすら書く宣伝ページ

実際作らなかったり、途中でこれはダメだと思ってやめることが多いから、完成間近かマジでやる気があるもののことしか書いていないのですが(それでもやめるふしぎ!)、もうなんでも書きます。

  • 疑問に思ったことをメモっておく

詳しくて親切な人や過去に同じ疑問を抱えてすでに解決済みの人が『通りすがり』などの名前で回答してくれることを期待します。

doxygenでUTF-8を使う

少し前までのdoxygenでは『OUTPUT_LANGUAGE=Japanese』に設定にして、ドキュメントのナビゲーションリンクを日本語化するとナビゲーションリンクの文字コードUTF-8にできなかったので、ソースコードのコメントもナビゲーションリンクの文字コードに従わないと文字化けしていました。
2007年4月にリリースされたDoxygen 1.5.2では、『USE_WINDOWS_ENCODING 』が削除されて、『DOXYFILE_ENCODING』と『INPUT_ENCODING』いう設定項目が追加されました。出力文字コードと入力文字コードが指定できるようになっています。この変換はlibiconvが行っているので、UTF-8もサポートされています。

不具合?

dotを有効化してGROUP_GRAPHSを書くと画像内の日本語が化けています。dotはUTF-8で日本語が書けるので、たぶんdotファイルに指定しているフォントが日本語フォントではないのだと思います。
どこかで指定できる?

doxygenのHTMLドキュメントでフッター(footer)とヘッダー(header)を指定する

doxygenが生成するHTMLドキュメントにプロジェクトのURLやGoogle AdSenseなどのアフィリエイトを含めたい場合には、ドキュメントのヘッダーとフッターを指定してその中に記述します。
フッターファイルとヘッダーファイルは、Doxyfileの『HTML_HEADER』『HTML_FOOTER』それぞれにファイルのパスを指定します。

HTML_HEADER

HTML_HEADERで指定するファイルには〜の先頭までが含まれます。
標準のCSSやページタイトルなども記述する必要があります。

HTML_FOOTER

HTML_FOOTERで指定するファイルには〜までが含まれます。
と閉じる必要があります。

キーワード置換

フッターとヘッダーではキーワード置換が行えます。キーワード置換ではドキュメント生成時に特定のキーワードをDoxygenが書き換えてくれます。
ヘッダーに記述するページのタイトル()などは、ページごとに変わるので、この機能を使うことになります。

キーワードには次のものがあります。

キーワード 説明
$projectname Doxyfileの『PROJECT_NAME』 libpiyo
$projectnumber Doxyfileの『PROJECT_NUMBER』 1.0
$title ページのタイトル libpiyo: piyo_initialize
$date doxygen実行日付 10 Jun 2007
$datetime doxygen実行日時 Sun Jun 10 16:36:17 2007
$doxygenversion doxygenのバージョン 1.52

ヘッダーの例

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>APIリファレンス: $title</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<span style="font-size: 0.8em;">
	<a href="http://sourceforge.net/projects/$projectname">$projectname $projectnumber</a>
</span>
<hr/>

フッターの例

<hr/>
<div style="text-align:right;font-size: 0.8em;">
	このドキュメントは
	<a href="http://www.doxygen.org/index.html">Doxygen</a>
	$doxygenversionにより$datetimeに生成されました。<br/>
</div>
</body>
</html>

オープンソースソフトっぽい開発入門

今年に入ってから微妙にはじめています。昨日今日は本格的です。
自分はアルゴリズムやプログラミング言語通信プロトコルやセキュリティは大好きだったのでがんばっていましたが、環境やツールにはあまり興味が無かったので詳しくないです。emacsマンセーしていましたが標準設定で使っていました。環境に拘る人をインストールマニアだと思っていました。
なので、オープンソースソフトっぽい開発をするときにいろいろ困って、地道に調べています。
今のところは、

autotools
configure→make installするアレ。すごくややこしくてメンドイ。
doxygen
ドキュメント自動生成ツール。とても便利でカッコイイ。
subversion
バージョン管理環境。慣れると良さげ。
mingw
シェルやコンパイラのセット。Windowsで少しだけLinuxっぽい環境。

なんかを試しています。
当分はこれがネタになると思います。

ソースコードのインデントはタブかスペースか

自分はタブ派です。TAB。0x09。移動が楽だし。
スペース派の人はエディタによって表示違うから云々言いますが、それは『このプロジェクトではソースコードのインデントはタブとし、タブ幅は4とする』と決めて、それに従えばいいだけでしょ、と思っていました。昨日まで。
昨日GNUのコーディング規約を読んでいて気づいたのは、UNIX系の環境ではlessなどのコマンド出力も考慮してインデントの文字を議論しているということです。タブ幅は-xオプションで指定できますが標準は8です。最近のプログラミング言語は8タブで書くとインデントが深くなりすぎるので、4や2が多いと思います。この辺の違いが混乱を招くのかなあと。


2ちゃんねるのCGI評価スレにソースコードを投稿したことがあって、そのときに「この妙なインデントはなんだ!」という指摘ばかりされました。インデント別におかしくないだろ? と思っていたので、何が変なんだーとかいろいろとお話をして、原因はemacsで書いていたことだと気づきました。emacsは8タブとスペースが混ざったインデントを自動補完しています。4文字分ならスペース4つですが、8文字分ならタブ1つという感じ。これに気づいて、なんだこの糞仕様は! と思ったのものですが、UNIX系ではタブ8という常識みたいなものがあるのでしょうか。


でもWindowsならタブでしょーと思います。今でも。

MinGW環境からLinux用のソフトをcommitする際に気をつけること

パーミッション。msysのsh.exeだとスクリプトに実行権限がついてなくても動きますが、Linuxだと動きません。svn初心者のわたしはこれに気づかずにどんどんcommitしていって、最終的にLinuxユーザの知人にコンパイルを試してもらったらconfigureが動かねえええと言われました。
チェックアウトしたconfigureスクリプトなどを実行可能にするには、svnからのチェックアウト時に実行権限が付くようにファイルの属性を設定値する必要があります。
次のようにします。

c:\projects\libpiyo> svn propset svn:executable ON ./configure

sourceforgeでsubversionを使う

subversionはメンドイに違いない! と思っていました。特にWindowsから使うにはputtysshをトンネルするソフトを常駐させたり鍵をサーバーに登録したりいろいろとメンドイに違いないと。
しかし、実際やってみると簡単でした。sourceforge.netはWebDAVが使えるので、プロジェクト管理からsubversionを有効にして、Windows用のsubversionをローカルにインストールするだけで使えます。

checkout

libpiyoというプロジェクトをpiyoというユーザーで使う場合、

c:\projects> svn checkout https://libpiyo.svn.sourceforge.net/svnroot/libpiyo --username piyo

一度目はパスワードを聞かれます。
そのあとは、

c:\projects\libpiyo> svn add piyo.c
c:\projects\libpiyo> svn commit -m "piyo piyo"

など、普通に使えます。

autoconf,automake入門で気をつけること

autoconfは、version 2.5以降で仕様が変わっています。ウェブ上で見つかる『autoconf入門』的なページの多くは2.5以前の古いものなので、そのまま試してもうまくいきません。
調べる際には見ている資料と自分の環境で、使っているソフトのバージョンがあっている確認してください。

タブ幅の標準化

タブ幅を設定したいディレクトリに.tabというファイルを作って

tabsize    4

とか書いておいて、TABを表示するソフトはブラウザがfaviconを探すのと同じ要領で.tabファイルを探していって、ファイルと一番近い位置にある.tabのタブ幅で表示するみたいな仕様があったらー。
それで、それに対応してないソフトは「えー、マジ未対応!? .tab未対応が許されるのはメモ帳くらいだよねー」みたいな雰囲気で追い込んでいけばー。

と思いつきましたよ。