ALGOBIT

2011/05/06

MD5 in JavaScript

Filed under: 離散的な気まぐれ — タグ: , — Kohyama @ 18:02

最近 JavaScript づいてます.
MD5ダイジェストが某用途で必要だったので, 既に公開されている物もあるようですが, あらためて書いときましたので晒しておきます.
jsMD5

2011/04/18

Node.js なら TCP エコーサーバが5行!

Filed under: 離散的な気まぐれ — タグ: , , , — Kohyama @ 13:41

サーバサイドスクリプトをいろいろ試しているところです.

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

Filed under: 離散的な気まぐれ — タグ: — Kohyama @ 20:30

いくつかの用途(オレオレスクリプトの実行環境を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

Filed under: 離散的な気まぐれ — タグ: , , , — Kohyama @ 03:16


HTML5 の canvas の試験ですが, 素材が寂しいので, Flickr からクリエイティブコモンズ画像を借りて来るので, Flickr API も使ってみました.
「Loading…」が終わらない時は検索キーワードを変えてみてください.
Chrome, Opera, Firefox, Safari で動くと思います.
遅いけど iPhone Safari でも一応動いてます.

2009/10/28

srcElement はないのか

Filed under: 離散的な気まぐれ — タグ: , — Kohyama @ 03:12

ウェブ閲覧は主に 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 はどうかしら…

Copyright © 2010 Yoshinori Kohyama All Rights Reserved.