twitter文言解析/文言作成
@~機能の充実を見込む。拡張性を重んじる

・twitterにあるものは、如何なる場合も究極的に140文字の文字列である。
 ⇒あくまでもシリアル化されたデータの中に、さまざまな構造を持つ。
・構造は時とともに変貌し、そしてそれをサポートすることは一定のニーズを見込む。

・言語構造とは・・・?

・構造が持つ機能と、その構造のシリアル化された姿の対応
 ⇒まさしくクラス。以下構造をクラスと呼ぶ。

・シリアル化されたデータに対して、各クラスが出来ることは、
 「クラス自身にとって関心のある部分と、そうでない部分(文字列)との分割」

・ならばTweet全体は常に、単なる文字列と各種クラスがシリアルに並ぶ構造=クラスである。

・構造の例
 以下で大文字はクラスの識別子、小文字は変数的なもの。
 「******」で記述される部分は、クラスが関心を持たない部分。
 「~~~」で記述される部分は、クラスが関心を持つ部分。

・・前置(例: ReTweet)
  ******@RT~~~~~~

・・後置(例: RESponce)
  ~~~~~~@id******

・・包括(現状存在しないので、飽くまで例: PaンチのあるTsuぶやき。PunchTweet)
  ******@PT{~~~@PT}******
  (もう一例: URLリンクTweet。Uniqlo T-shirts)
  ******@UT{~~~ | http://???@UT}******

各クラス内部についてはシリアル化の限りではなく、包括関係や上下関係を伴う可能性もある。

  ******@RT~~~@PT{???@PT}~~~
 構造例:(ただし、以下の例においてSTRとは単なる文字列を示すための便宜上の識別子である)
  ****** = ~~~ = ??? = ~~~

 ⇒ROOT {{
   STR {{ ****** }}
   RT {{
    STR {{ ~~~ }}
    PT {{ ??? }}
    STR {{ ~~~ }}
   }}
  }}

・単一のクラスが、単一の構造を持つとは限らない。
 例:
  @PT~~~~~~、または~~~~~~@PTとした場合、
  Tweet全体がPunchなのだ。

・PT、RTその他は拡張により、その定義を外部から与えることができる ⇒参照: MEF

・構造化する構文は、複雑すぎれば意図的な使用者に混乱を招く。
 単純すぎれば意図しない使用による混乱を招く。

・クラスのインターフェース (仮り名: [TW]

 ・readonly char 識別子;  #「P」⇒「@PT」みたいな。どんと来い混乱。
 ・TW[] 解析( 文字列 );  # 上位のクラスから呼ばれる。

・ルートクラス

 ・プラグインの読み込み、
 ・文字列を各プラグインに噛ませて読ませる。

Documenting Your Code With XML Comments
自分で適当なタグを打ち込んでいいんだよ、っていう話だったけど、
Intellisense に表示してもらえなきゃ使いづらくてしょうがないだろ、っていう話について、
カスタマイズ方法がなかなか見つからなかったが、こんなところにあった・・・。

どうでもいいっちゃいいんですが、MSDN はもっとPerm linkについて真剣に考えるべき。
最近大幅な改修があったみたいで、どこのサイトもリンクが切れてて非常に不愉快。

サーバーでSubversion動かそうと思ったら予想以上の情報量の少なさにやられた。
メモ。

・通常どおりxamppをインストール、各種設定
・Subversionをインストール、各種設定

・Subversion/binディレクトリからmod_authz_svn.soとmod_dav_svn.soをApache/Modules以下に上書コピー。
・Subversion/binディレクトリからintl3_svn.dllとlibapriconv-1.dllとlibaprutil-1.dllとlibdb44.dllをApache/bin以下に上書コピー。
・Apache/conf/httpd.confを開き、
・LoadModule authn_file_module modules/mod_authn_file.so
がコメントアウトされていないことを確認。
・LoadModule dav_module modules/mod_dav.so
を追加。
・LoadModule dav_fs_module modules/mod_dav_fs.so
を追加。
・LoadModule dav_svn_module modules/mod_dav_svn.so
のコメントアウトを外す。
・LoadModule authz_svn_module modules/mod_authz_svn.so
のコメントアウトを外す。
・好きなconfファイルに
<Location /svn>
DAV svn
SVNPath /var/svn-repos
Order deny,allow
Allow from all
</Location>
の様にしてリポジトリを追加。

ただしこのとき、Location /svnは/svn以外では正常動作せず、またSVNPathの差すパスが/…/svnの様に[svn]で終わっていると正常動作せず。
詳細は再度確認の上詰める必要ありか。

[08. 12. 26 修正] Bloggerのエディタ機能でLocation /svnのくだりが変なことになっていたので修正。

[08. 12. 26 追記] xampp 1.7.0以降、Subversion 1.5.3 en-usとの統合がきわめて楽になった。xamppでは標準でsubversionモジュールを読み込むようになっているので、xampp をインストール後、subversionをfor Apache 2.2.xオプションでインストール。

Apacheのconfに

<Location /svn>
DAV svn
SVNPath /var/svn-repos
Order deny,allow
Allow from all
</Location>

の様に、リポジトリのパスを通せばそれだけで使えるようになる。
ただやっぱり、どうも Location /svnは/svn以外だとうまくいかない場合がある。原因はよくわからない。
/svnはエイリアスみたいなもんなんで、Apacheのホームディレクトリ直下(若しくはドライブ直下)に”svn”って名前のディレクトリやファイルは置かないこと。
403かなんかではじかれる。たぶん。

メモ1

ファイルをAjaxを用いてバックグラウンドで送信する方法。prototype.js使用。

html
<input type="file" name="file" id="file">
javascriptのonclickなりなんなりのイベントで
var frame = document.createElement('iframe'); // ダミーのiframeを作成
var bodyobj = document.getElementsByTagName('body')[0]; // bodyを取得
var file = $('file');

// フレームが見えないようにする。
Element.hide(frame);
// フレームをbodyに追加しておく
bodyObj.appendChild(FileSubmittion.frame);
// フレームのID/nameを設定(bodyに追加した後で無いと、IDは割り振れない? @IE7にて)
frame.contentWindow.name =
frame.id = frame.name = “file_submittion_dammy_frame”;

// ダミーフォームを作る
form.action = “hogehoge.php”; // 送信先のCGIなりPHPなりを設定。
form.target = “file_submittion_dammy_frame”; // ダミーフレームに飛ぶように設定。
form.method = “post”;
form.encoding = “multipart/form-data”;
Element.hide(form); // フォームは見えない様に。
bodyObj.appendChild(form);

// ファイル用のinput[type="file"]をダミーのフォームに移動する。
// 元の位置に戻せるように、元の位置にはダミーのdiv要素をつっこんでおく。
var prevObj = file.parentNode.insertBefore(document.createElement(‘div’), file);
// appendChildすると、そこにコピーではなく移動される。
form.appendChild(file);
// 送・信!
form.submit();

/*
ファイルの送信が終わったら、イベントで通知できる。通知し終わったら、Event.stopObservingしないと余計なときまでイベントが発生するかも。(リロードかかったり)
*/
Event.observe(frame, ‘load’, file_submit, false);

// ファイル用のフォームを元に戻す。divと置き換え。
prevObj.parentNode.replaceChild(file, prevObj);

メモ2

イベントに適当な引数渡せないじゃん!⇒

Event.observe(element,
'click',
new Function('function_01(' arg1 + ',' + arg2 + ',' + ... + ')'),
false);

という風に出来るはず。