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);
という風に出来るはず。