最近 JavaScript づいてます.
MD5ダイジェストが某用途で必要だったので, 既に公開されている物もあるようですが, あらためて書いときましたので晒しておきます.
jsMD5
2011/05/06
MD5 in JavaScript
2011/04/18
Node.js なら TCP エコーサーバが5行!
サーバサイドスクリプトをいろいろ試しているところです.
Gauche でエコーサーバ
に続き, Node.js 版 TCPエコーサーバものせておきます.
Node.js は JavaScript の処理系です.
var net = require('net'); var server = net.createServer(function (stream) { stream.on('data', function (data) { stream.write(data); }); stream.on('end', function () { stream.end(); }); }); server.listen(1111, 'localhost');
5行!
なんということでしょう.
エコーサーバとしてだけならば,本家にもっと短い例が載ってますが, データを処理するサーバの雛形なので, 送られてきたデータがコード内で変数として見えている最小のコードとしました.
node.js はインストールされているとします.
上記のソースをファイルに保存したら, 第一引数に保存したファイルのパスを指定して, node (Windows なら node.exe) を実行します.
UNIX 系ならば, #!/usr/bin/env node
という行を先頭に追加し, chmod +x してあげれば直接実行できます.
2011/04/15
Interactive CUI in web pages
いくつかの用途(オレオレスクリプトの実行環境をWEBページ上に配置するとか)で, WEBページ上にシェルっぽい環境が欲しかったので, 対話部分だけ分離して実装しました.
readline, rlwrap, jLine の JavaScript 版みたいなもんです.
プロンプト prompt>
に対して入力を編集して Return
キーを押すと,
入力文字列を [
と ]
で挟んで出力します.
編集中の行内のカーソルの移動に ←
, →
, Home
, End
, Ctrl-f
, Ctrl-b
, Ctrl-a
および Ctrl-e
が使えます.
入力履歴を ↑
, ↓
, Ctrl-p
および Ctrl-n
で移動できます.
Backspace
もしくは Ctrl-h
でカーソルの前の文字を削除し, カーソルを一文字前に戻します.
Delete
もしくは Ctrl-d
でカーソル位置の文字を削除します.Ctrl-k
でカーソル位置より後ろを削除します.
同じことをするのにあなたが書くべき JavaScript は 7行.
格納するための HTML ファイル全体で 11行です.
<html><head><title>jsReadLine Demo</title>
<script type="text/javascript" src="ReadLine.js"></script>
<script type="text/javascript">
window.onload = function() {
var rl = new Algobit.ReadLine(80, 24);
var b = document.getElementsByTagName('body')[0];
b.appendChild(rl.textarea);
rl.print("prompt> ");
rl.gets = function(s) { rl.print("[" + s + "]\nprompt> "); };
}
</script></head><body></body></html>
ソースとか詳しい説明はこちら: github.com/kohyama/jsReadLine
次回! jsReadLine を使ったオレオレスクリプトの REPL!
2010/05/25
pFlipFlick
2009/10/28
srcElement はないのか
ウェブ閲覧は主に Chrome を, 場合によって Internet Explorer (以下 IE) を使ってます.
JavaScript は IE で動くように書いてました.
まわりを見回すと Firefox をお使いの方が結構多いようなので, Firefox (現行バージョン 3.5.3) で JavaScript を使う自分の個人ページを確認.
動かないところがあります.
DOMの仕様が違うんだね.
ということで, Firefox 対応の覚書.
IE | Firefox | |
---|---|---|
1 | document.all オブジェクトが存在する | document.all オブジェクトは存在しない |
2 | イベントオブジェクト event の イベント発生元エレメントは event.srcElement |
イベントオブジェクト event の イベント発生元エレメントは event.target |
3 | エレメント element の内部の文字列は element.innerText | エレメント element の内部の文字列は element.textContent |
4 | イベントハンドラに指定する関数に引数として event を明示的に渡さなくても (たとえば onclick=”func()” と書いても) 関数からは外部オブジェクトとして event を参照できる. |
イベントハンドラに指定する関数に引数として event を明示的に渡さないと (たとえば onclick=”func(event)” と書かないと) 関数からは event オブジェクトを参照できない. |
2, 3 のコードの場合分けは 1 を使って
if (document.all)
event.srcElement.innerText = text;
else
event.target.textContent = text;
のように書く.
4 については, Firefox 側にあわせていつでも明示的に渡すようにする.
Chrome や Opera はどちらでも動くようになってるらしいです.
Safari はどうかしら…