2009年02月20日

JavaScript で暗号化

 みなさん、自分のID/Passwordどうやって管理してますか?
「どこも全部同じにしている」なんて言うのはやめた方が良いですね。

私は、
・全ての ID/Password のペアは異なる
・Password はソフトでランダム生成
・ID/Passwordを必要とする場所が200以上
という事になっているので、とてもじゃないが覚えられない状態だ(not 歳のせい)。
もちろん我々は、そういう場合の脳みその機能拡張のためにコンピュータを使っている訳なので、長らくID Managerと言うソフトを便利に使わせてもらってきた(作者さんありがとう!)。

 しかし、Windows で LAN で使っている分には良かったが、クライアントが Mac / Linux と増えたり、それを必要とする場所が LAN 外だったりする事が多くなって、替わりの管理方法を探していた。当然ながら最初に考えたのは「ブラウザのみで使用できるオンラインID管理サービスを使う事」だが、使い勝手や信用を考えると、実際にはどこも使う気が起こらない...(どこか良いところがあったら教えて欲しい!)。こうなると、やっぱり自分で作るしか無い訳だ。


続きを読む


posted by lepton at 17:08| 東京 ☁| Comment(0) | TrackBack(0) | JavaScript | このブログの読者になる | 更新情報をチェックする

2005年12月12日

JavaScript の非同期処理 (2)

 前回のテストでは、処理中に他の処理を呼び出している部分が有ったので、ひたすらCPUを回すように実験コードをちょっと変えて見た。

var result = ""; // 共有される大域変数
function synctest(name,ntimes) {
if ( ntimes>0 ) {
var d1 = new Date();
var s1 = "" + d1;
result += "<br>"+name+" = " + s1;
for (ntimes--;ntimes>0;) {
var d2 = new Date();
var s2 = "" + d2;
if ( s1!=s2 ) {
result += "<br>"+name+" = " + s2;
s1 = s2;
ntimes--;
}
}
}
}

 これは、指定された回数分だけ毎秒メッセージを記録する様なコードだ。JavaScript には sleep() や wait() に類する物が無いので、処理が終了するまでCPUを占有している。
これを使って、
1.setTimeout によって 0.5 秒後から10秒間実行する
2.setTimeout によって 1.0 秒後から10秒間実行する
3.setInterval によって 1.5 秒間隔で3秒間の実行処理を3回実行する
4.button.onclick によって10秒間実行する
5.XmlHttpRequest によってデータが読み込まれた後(約3秒後)から10秒間実行する
と言うイベント処理を設定して実行して見た。
これらの処理は、入り乱れて実行されるのか、シーケンシャルに実行されるのか、どうだろう?...続きを読む
posted by lepton at 14:11| 東京 ☀| Comment(0) | TrackBack(0) | JavaScript | このブログの読者になる | 更新情報をチェックする

2005年12月09日

JavaScript の非同期処理

 コンカレント処理を行った事のある人ならご存知の通り、複数の実行フローが同時に走る場合はリソースの競合が発生する可能性がある。
 あるリソース(メモリでもファイルでもIOでも何でも良い)に対して
1.値を取得する。
2.取得した値に1を足す。
3.足した結果を元に戻す。
と言う処理を行う時、初期値0で3つのプロセスが何の対策もせずにこれらを実行した場合は、最終的な結果として1〜3までのどんな値も取りえる事になる。こういう処理は往々にして何かの数を数える処理なので、この結果は期待通りであるとは言えない。これを期待通りに実行するためには、何らかのロック処理を行って、この一連の処理が同期的に実行される様にする必要がある。

 今まで JavaScript でこういうことを特に気にせず使ってきたが、JavaScript でも非同期処理を良く使う様になってきた。昔からある setInterval/setTimeout 系の定期実行処理、AJAX で使う XmlHttpRequest.onreadychange の処理、ボタンクリック時の処理等である。これらが複雑に組み合わさると、同期機構を持たない JavaScript では厄介な事態になりそうだ。

 しかし、本当にこれらが非同期に実行されるのかを調べて見る必要はあるだろう。かつての Windows の様に、誰かが制御を返さないかぎり他の実行フローは処理されないと言う(確か協調的マルチタスキングと呼んでいた様な...)、本当の擬似マルチタスクである可能性もあるからだ。
...続きを読む
posted by lepton at 16:42| 東京 ☀| Comment(0) | TrackBack(0) | JavaScript | このブログの読者になる | 更新情報をチェックする

2005年12月06日

JavaScript 圧縮

 現在 JavaScript の圧縮 Dojo's compression を使っている。
ソースコードからコメントや余計なスペースを取り除き、ローカル変数も短い名前にしてくれる。またデバッグしやすいように改行はそのまま残すようになっている。
これを使うと自分のスクリプトサイズは半分以下になるのだが、問題がいくつかある。
1.UTF-8 のソースで日本語を含んでいるとエラーになる。
 →一旦 SJIS に変換してから圧縮し UTF-8 に戻さなければならない。
2.eval の評価が正しく行われない。

  function a(obj) {
   obj.f();

   eval('obj.f();');
  }
  ↓
  function a(_1) {
   _1.f();
   eval('obj.f();'); // ここが変わらない...。
  }

 と言う感じになる。仕方が無いので、この部分だけ手で修正している。

やはり、他のソフトを探すかな...
posted by lepton at 06:52| 東京 ☁| Comment(0) | TrackBack(0) | JavaScript | このブログの読者になる | 更新情報をチェックする

2005年12月05日

JavaScript と名前空間

 JavaScript で少し大きなプログラムを書こうとか、人のライブラリを使おうとかし始めると識別子のバッティングに良く出会う。言語仕様にそういう概念が無い言語だから仕方が無いとは思うが、みんな無造作に大域名前空間を使いすぎると思う。せめてネーミングルールで分けている例が見られくらいだ。これはかなり時代に逆行している。

 ここでこの名前のバッティングを避ける良い考えを思いついたので、説明しておこう。
それは大域名前空間におく変数を、名前空間として使うという方法だ。

 例えば MyLibrary と言うライブラリを作ろうとする場合、まず最初に

var MyLibrary = {
version:'1.0.0'
}

 と宣言する。この後はこの MyLibrary の後にライブラリのメンバーを追加していけば良いだけだ。例えば関数を宣言するなら、

MyLibrary.MyFunction = function() {
alert('This is MyLibrary.MyFunction();');
}

 と宣言し、MyLibrary.MyFunction(); でいつでも呼び出すことができる。
これで大域名前空間の競合を気にする事無くライブラリが作れる。
こんな簡単な方法で解決できるんだから、他のライブラリの作者もみんなこの方法を使ってくれれば良いのだけど...
posted by lepton at 20:05| 東京 ☀| Comment(0) | TrackBack(0) | JavaScript | このブログの読者になる | 更新情報をチェックする
プロフィール
名前:lepton
年齢:over 40
ウェブサイトURL:http://www.hmsoft.co.jp/lepton/
メールアドレス:contact@hmsoft.co.jp

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は180日以上新しい記事の投稿がないブログに表示されております。