K.Sasada's Home Page

Diary - 2004 July

研究日記

文月

_31(Sat)

うーん、眠い。


40分も英語しゃべれねーよ!

って言ったら、「大丈夫、誰も40分なんてしゃべんねー。ディスカッションが入るから」と返された。だから、ディスカッションなんてできねーよ!


懇親会。着席型はだめだよねぇ・・・。


3時間山道を歩いて目的地にたどり着けなかった・・・ orz

3年分くらい歩いた気がする。

_shiro(Sat Jul 31 14:32:09 JST 2004)

 英語の喋りのスキルは素質でも才能でもない、純粋に練習量に比例するので、練習あるのみ。議論は、"Can we talk about it later?" でかわすのだ。

_ささだ(Mon Aug 02 08:06:20 JST 2004)

 壇上に上って一言それを言えばよい、と(違)

_30(Fri)

馬を見ました。


また前田さんと首藤さんにお世話になりました。いつもありがとうございます。木村先生にいろいろといい話を聞けました。ふふふ。


あー、そんなご無体な・・・。見なかったことにしよう。>Matzにっき


では、発表してきます。


うーん、まぁこんなもんか。

_29(Thu)

朝から露天風呂。贅沢すぎ。

朝飯にホタテの刺身が!(3切れ)

 

_28(Wed)

あと4時間だよ・・・。

寝たら起きれなさげ。

ruby-talk, reply したいけど、リプライ元は学校に置いてきてしまったのでできない。すまん。


起きれたので恐山に行ってきます。また来週。


ssh がつながりました。このホテル偉い。

恐山はいおうくさかった。


そうか、俺は正常な人間じゃなかったのか・・・ orz


恐山の温泉2箇所入りました。後から確認してみると、一箇所は実は入っちゃだめだったような感じ(別に女湯に入ったわけではない)


次のAMDのチップは一個3.9セント?(AMDがSempronブランドのプロセッサを発表へ

_6(Fri Jul 30 20:40:52 JST 2004)

 イタコに降霊してもらいましたか?

_ささだ(Sat Jul 31 02:02:42 JST 2004)

 残念ながら、すっかり忘れてました。

_27(Tue)

暑い。暑くて眠れない。眠れない。


class C
  def m a, b
    p a,b
  end
end

class CC < C
  def m a,b
    a = 3
    b = 4
    super
  end
end

CC.new.m 1,2
#=> 3,4

これは、十分納得できる。

class C
  def m a, b
    p a,b
  end
end

class CC < C
  def m *args
    args[0] = 100
    super
  end
end

CC.new.m 1,2
#=> 1,2

これは、どうなんだろう。

なんとなくこうなるしかないような気もするし。というか、他に解法は無いか。

で、問題はどうやって実装するか、だよなぁ。

うーん、困った。思いつかない。

callee には引数の数がわからない、というのがいけない。

class C
  def m a, b,c
    p a,b,c
  end
end

class CC < C
  def m a, b, *c
    a = 100
    super
  end
end

CC.new.m 1,2,3
#=> 1,2,3

ということで、謎は解けた。解けたけど、どうやって実装しよう。うーむ。

ちなみに、言語として、どうしなければいけないのか、というのはよくわからない。*args で受けて super したい、というのは普通に思いそうなので、動いてくれたほうが嬉しいと思うんだが。普通の引数は、その引数変数に代入が起こった場合、super しても値を壊されるので、*args も、配列が入っているという前提でいいんじゃなかろうか。え、だめ?

というか、どちらかというと、現状の仕様のほうがまずい気がするんだけど、どうだろう。a,b は保存しないで、*c だけ保存しておけばいいんじゃないかなぁ。

処理的にも c を dup するだけだし。


class C
  def m a,b,c
    p a,b,c
  end
end

class CC < C
  def m a, b,c=300,*d
    a = 100
    # args[0] = 100
    super
  end
end

CC.new.m 1,2
#=>
t.rb:13:in `m': wrong number of arguments (2 for 3) (ArgumentError)
	from t.rb:13:in `m'
	from t.rb:17

さて、これはいいんだろうか。まずいような気がするんだけど。

誰もこんなことしないからいいかなぁ。


さて,バスの予約をしようと思って,はじめて自動音声識別ってのを体験する.音声がしょぼいけど,きちんと稼動してるんだなぁ.

ちなみに,電話代すげーかかってしまった(200円くらい).ネットで全部やればよかった・・・.

これで,明日予約できてなかったら嫌だなぁ.


明日出発なので,出来るだけのことはしておく.


ruby-dev に投げたのに,返って来ない.陰謀だ(違).

私信:http://www.ospn.jp/osc2004/ はどうなりましょうか?


若手の会参加申し込みをする.


retry は例外で処理することにしよう.


というわけで,青森行ってきます.出発は明日の05:30.

寝坊したら洒落にならない.

_26(Mon)

さて、ecma script って、

//1
function func(){
  ...
}
// 2
func = function(){
  ...
}

1,と 2 は等価なんだろうか。処理系内部でなんか違ったりするんだろうか。

統一したほうが当然作りやすいとは思うんだけど。


何度も何度も new Hoge() じゃなくて、Hoge.new() と書いてしまう。


違い発見。

//1

func(); // OK

function func(){
  ...
}


// 2
func(); // NG(何も呼ばれない)

func = function(){
  ...
}

まぁ、当たり前といえば当たり前かもしれず。 Scheme から見ると、 1 が出来るのがスゲェ、ということになるのか。コンパイル時に決定。で、内部状態が違うかどうかは、よくわからない。


ActionScript でクラスを使おうと思ったらえらい面倒だった。ひとつのファイルに1クラスらしい。やってられん。

ちょこっと書くだけなのに、1クラス1ファイルは面倒スギ。困った。しかも、クラスはネストできないらしい。

しょうがないから、全部ファンクションで書くかなあ。


テストがかけないのが苦痛。気軽に試すことが出来ない・・・。

型付のプログラミング久しぶりな気がする。IDEも、いいなぁ。



function Obj(){
	this.x = 10;
	this.f = function(){
		out(this.x);
	}
}

var hoge = new Obj();
hoge.f();
out(hoge.x);
out(hoge);

うーむ。


無名関数は直接呼べないのだろうか。

ちょっと試したけど呼べないぽい。


しかし、ActionScript ばかり触って、全然ムービーの作り方とかわかんない。

まぁ、作れないからいいんだけどさ。


function f(){
	out("1");
};
f();
function f(){
	out("2");
};
f();

f = function(){
	out("3");
}
f();

は、223。

しかし、この辺は notation の問題で、とくに内部状態に関する言及は見つからない、気がする。あ、prototype が使えない? いや、そんなこたないか。

やっぱり、同じものと考えていい感じ。再定義規則は scheme でも同じような処理系はあってもよさそうだけど、spec をあんまり憶えていないのでいいかげんなことはいえません。


無名関数の直接呼出しは、Action Script ではサポートしていないよう。


むぅ、String は immutable なのか。concat でくっつかなかった。


とりあえず、クライアント側はできた。

サーバ側が無いので、テストはしていない。

/**
Components:
	Channles: ch_cmb
	Users   : users_lst
	
	Messages: msg_txt
	out     : out_txt
	
	input   : say_txt
	say btn : say_btn
	
	
XML Format:
nadoka -> fircl
<firclitem>
	<type> [type] </type>
	<prefix>
		<nick> [nick] </nick>
		<user> [user] </user>
		<host> [host] </host>
	</prefix>
	<params>
		<param> [param] </param>
		...
		<param> [param] </param>
	</params>
</firclitem>

fircl -> nadoka
<firclcommand>
	<channel> [channel] </channel>
	<command> [command] </command>
</firclcommand>

[type]:
- privmsg
- notice
- userinfo
- channelinfo
- others...?

FIRCL functions:

- connect to nadoka fircl proxy
- messages pool per channel
- send message or command to nadoka fircl proxy
*/

/* common */

/// for debug
function out(text){
	out_txt.text += text.toString() + "\n";
	out_txt.vPosition  = out_txt.maxVPosition;
}

function include(container, obj){
	for(i in container){
		if(container[i] == obj){
			return true;
		}
	}
	return false;
}
function searchNode(item:XMLNode, word:String){
	var elems:Array = item.childNodes;
	for(i=0; i<elems.length; i++){
		if(elems[i].nodeName == word){
			return elems[i];
		}
	}
}


/* global variables */
var g_host = 'localhost';
var g_port = 10000;

var g_state   = new FirclState();
var xmlsock:XMLSocket = new XMLSocket();


connectProc();

/* retrieve messages or event */


function FirclState(){
	var ch       = "";
	var nick     = "";
	var channels = [];
	var userinfo = {};
	var message_pool = {};
		
	this.dispatch = function(msg){
		//trace(msg.type);
		switch(msg.type){
			case "PRIVMSG":
				addMessage(msg.params[0], msg.nick, 
						   msg.params[1]);
				break;
							
			case "NOTICE":
				addMessage(msg.params[0], "("+msg.nick+")", 
						   msg.params[1]);
				break;
			
			case "userinfo":
				register_userinfo(msg.params);
				break;
			
			case "channelinfo":
				register_channelinfo(msg.nick, msg.params);
				break;
				
			default:
				trace(msg);
				break;
		}
	}

	function addMessage(ch:String, nick:String, msg:String){
		var str = nick + ": " + msg;
		var msgs = message_pool.push(ch, str);
		if(this.ch == ch){
			redrawMsg();
		}
	}
	
	function newelem(xml, tag, text){
		var elem = xml.createElement(tag);
		elem.appendChild(xml.createTextNode(text));
		return elem;
	}
	
	function sendMessage(ch:String, msg:String){
		var xml:XML = new XML();
		var top:XMLNode = xml.createElement("firclcommand");
		top.appendChild(newelem(xml, "channel", ch));
		top.appendChild(newelem(xml, "command", msg));
		xml.appendChild(top);
		trace(xml);
		g_xmlsock.send(xml);
	}
	
	function register_channelinfo(n:String, chs:Array){
		nick     = n;
		channels = chs;
		for(e in channels){
			if(!message_pool[channels[e]]){
				message_pool[channels[e]] = "created\n";
			}
		}
		redrawChannels();
	}
	
	function register_userinfo(params:Array){
		var c = params[0];
		params.shift();
		var users = params;
		userinfo[ch] = users;
		
		if(c == ch){
			redrawUsers();
		}
	}
	
	function redrawMsg(){
		msg_txt.text = this.message_pool[ch];
		msg_txt.vPosition  = msg_txt.maxVPosition;
	}
	
	function redrawChannels(){
		var idx = 0;
		ch_cmb.removeAll();
		for(e in message_pool){
			chs_cmb.addItem(e);
			if(e == ch){
				idx = chs_cmb.length - 1;
			}
		}
		chs_cmb.selectedIndex = idx;
		ch = chs_cmb.selectedItem.label;

		chs_cmb.sortItems(
			function(a,b){
				return a.label.toUpperCase() > b.label.toUpperCase();
			});

		redrawUsers();
		redrawMsg();
	}
	
	function redrawUsers(){
		users_lst.removeAll();
		for(e in userinfo[ch]){
			users_lst.addItem(userinfo[ch][e]);
		}
		users_lst.sortItems(
			function(a,b){
				return a.label.toUpperCase() > b.label.toUpperCase();
			});
	}
	
	function redrawWindow(){
		redrawChannels();
		redrawUsers();
		redrawMsg();
	}
	
	this.sayMessage = function(){
		var msg = say_txt.text;
		if(msg.length <= 0 || nick.length <= 0){
			return;
		}
		this.addMessage(ch, nick, msg);
		
		if(include(channels, ch)){
			sendMessage(ch, msg);
		}
		say_txt.text = "";
	}
}

function msgObj(xml:XML){
	this.type   = itemType  (xml.firstChild);
	this.prefix = itemPrefix(xml.firstChild);
	this.params = itemParams(xml.firstChild);
	this.nick   = this.prefix[0];

	function itemType(item:XMLNode){
		var e = searchNode(item, "type");
		return e.firstChild.nodeValue;
	}
	function itemPrefix(item:XMLNode){
		var prefix:XMLNode = searchNode(item, "prefix");
		return [searchNode(prefix, "nick").firstChild.nodeValue, 
				searchNode(prefix, "user").firstChild.nodeValue, 
				searchNode(prefix, "host").firstChild.nodeValue];
	}
	function itemParams(item:XMLNode){
		var params:XMLNode = searchNode(item, "params");
		var ret:Array = [];
		var elems:Array = params.childNodes;
		for(i=0; i<elems.length; i++){
			if(elems[i].nodeName == 'param'){
				ret.push(elems[i].firstChild.nodeValue);
			}
		}
		return ret;
	}
	
	this.toString = function(){
		return "[" + this.type + "] (" +
				this.prefix.toString() + ") - " +
				this.params.toString();
	}
}

/* connect functions */

function connectProc(){
	xmlsock.onConnect = function(succ){
		if(succ){
			g_connected = true;
			xmlsock.onClose = function(){
				out("Connection closed");
			};
			xmlsock.onXML   = function(xml:XML){
				var msgobj = new msgObj(xml);
				out(msgobj.toString());
				g_state.dispatch(msgobj);
			};
			out("Connect to server");
		}
		else{
			out("Connection failed...");
		}
	}
	if(res = xmlsock.connect(g_host, g_port)){
		//
	}
	else{
		out("Connection(pre) failed: " + res + ", " + xmlsock);	
	}
}

XP祭り,行きたかったなぁということで,どっかで記事が出るのを楽しみにしよう.


Flashの Object の XML へのシリアライザ,デシリアライザがあればいいんだよなぁ.どっかに落ちてないかなぁ.

XMLTools というものを見つけたが,なんか違う気がする.こんなに難しいことをしなくてもいいんだけど.テキストだけ相手にしていれば.

ちょいちょいと作るか.ただの再帰だしな.

む,kind_of? っぽいものは無いのか.どうやればいいんだろう.


今週は ruby-dev への投稿を控えていただけると幸いです(嘘です,ただ単に summary 書くのが大変になっちゃいやん,って)

というか,何時書けばいいんだ.8/1 の夜中に東京に帰ってくるのに.


【一般】研究会登録の勧め **今後 HOKKE,SWoPP等の機会で登録会員を優先的に扱います**

何を優先扱いにするんだろう.まさか,論文採択じゃないだろうし.


ベビースター激辛チリ

辛すぎる.


LLの資料を送る(http://www.atdot.net/yarv/LL_Weekend_2004_sasada_presen.pdf).

何か変なところがあればご指摘ください.

しかし,OOo すごいねー.PPT を食わせて,PDF で export ってやったらさくっとできた.スバラスィ.

_hira(Mon Jul 26 03:19:15 JST 2004)

Schemeに訳すとこうなるのかな。

(define (hoge a)
  (if (> a 10)
      a
      (hoge (+ 1 a)))) ;=> hoge
(hoge 1) ;=> 11

(define hoge2
  (lambda (a)
    (if (> a 10)
        a
        (hoge2 (+ 1 a))))) ;=> hoge2
(hoge2 1) ;=> 11

一瞬、hoge2は再帰できないのでは?と思ったんだけど、できた。 ecmaでも、この再帰くらいしか見所は無いような。 これが同じように動いたら等価ってことで。

_hira(Mon Jul 26 06:29:53 JST 2004)

なるほどー。 >違い発見。

てことは、こんな風には書けないのかな。

func(); //a
function func() { 1; }
func(); //b
function func() { 2; } //再定義。コンパイルエラー?。
func(); //c

エラーになるのだとしたら面倒だなぁ。 リリース用のコードでこれが必要になることは稀だと思うけど、 試行錯誤しながら関数を書いている途中では、よく出てくる形なんだよなあ。 これがコンパイルエラーにならないなら「1 が出来るのがスゲェ」と言うことにしよう。 だめなら「aはunboundエラーでいいやん」てこと。

#a,b,cが全部2を返すのもいやん。1,1,2でないといかん。

_ささだ(Mon Jul 26 08:09:56 JST 2004)

 再定義は上書きされちゃいますねぇ。

_shelarcy(Mon Jul 26 08:10:03 JST 2004)

 無名関数の直接呼び出しについてはこのあたりに書いてあったような……ECMAScript - on Surface of the Depth -

_mput(Mon Jul 26 18:41:22 JST 2004)
(function(n){return n==0?1:n*arguments.callee(n-1)}).call(this, 120);

とか、できないんですか?(ふつうのECMAscriptならできる)

_hira(Mon Jul 26 21:26:53 JST 2004)

 資料、かっちょよすぎです。

_とおる。(Tue Jul 27 01:15:16 JST 2004)

 Flash でもできるよー。ただドキュメント化されてないみたい。http://www.fumiononaka.com/TechNotes/Flash/FN0108010.html

_とおる。(Tue Jul 27 01:19:09 JST 2004)

 ぼくは ActionScript2 の class は使ってないです。クロージャの方が分かりやすい。function の書き方は、クラス定義のときは HogeClass = function () {...} とかかないといけないっぽいよ。

_25(Sun)

Flash、さっぱり作り方がわからん・・・。

ming のほうがわかる。

TextField.onChanged が動かんなぁ。なんでだろう。


スコープがよくわからないなぁ。レイヤーごとに、スコープをもって、その中でまたコンポーネントごとになんかありそう。うーむ、どっかに体系的な説明はないものか。

this.f1_txt.text = 0;
this.f2_txt.text = 0;
this.sum_txt.text = 0;

this.calc_btn.onRelease = function(){
	recalc();
};
this.f1_txt.onChanged = function(txt){
	trace(txt._name + "changed");
};

this.f2_txt.onChanged = function(){
	recalc();
};
function recalc(){
	sum_txt.text = 	Number(f1_txt.text) + Number(f2_txt.text);
}
function enter_ev(){
	recalc();	
}

this.f2_txt.addEventListener("enter", enter_ev);

とりあえずこんなのをダラダラと。

意外と scheme からのトランスレータは簡単に出来そう。

suffix 規則が最高にウザイ。


function newelem(xml, tag, text){
	var elem = xml.createElement(tag);
	elem.appendChild(xml.createTextNode(text));
	return elem;
}

this.out_btn.onRelease = function(){
	var xml = new XML();
	var elems = xml.createElement("items");

	xml.xmlDecl = "<?xml version='1.0' ?>";
	elems.appendChild(newelem(xml, "item", f1_txt.text));
	elems.appendChild(newelem(xml, "item", f2_txt.text));
	elems.appendChild(newelem(xml, "item", f3_txt.text));
	xml.appendChild(elems);
	xmlout_txt.text = xml.toString();
};

ほんとにこんなのでいいんだろうか。

Flash内で XML を1から作る、というよりは、既存のXMLドキュメントがきっちりあることを前提としてるんだろうなぁ。


わざわざ XMLクラスを作らないでも、LoadVars を使えばできるような気がしたけど、やっぱりXMLでやったほうが楽か。


また大量に寝てしまった・・・。

function newelem(xml, tag, text){
	var elem = xml.createElement(tag);
	elem.appendChild(xml.createTextNode(text));
	return elem;
}

function xmlout(){
	var xml = new XML();
	var elems = xml.createElement("items");

	xml.xmlDecl = "<?xml version='1.0' ?>";
	elems.appendChild(newelem(xml, "item", f1_txt.text));
	elems.appendChild(newelem(xml, "item", f2_txt.text));
	elems.appendChild(newelem(xml, "item", f3_txt.text));
	elems.appendChild(newelem(xml, "item", f4_txt.text));
	xml.appendChild(elems);
	xmlout_txt.text = xml.toString();
	return xml;
}

this.f1_txt.addEventListener("enter", xmlout);
this.f2_txt.addEventListener("enter", xmlout);
this.f3_txt.addEventListener("enter", xmlout);
this.f4_txt.addEventListener("enter", xmlout);

this.out_btn.onRelease = function(){
	var xml = xmlout();
	var xmlsock = new XMLSocket();
	xmlsock.onConnect = function(){
		xmlsock.send(xml);
		xmlsock.close();
	}
	if(xmlsock.connect("localhost", 10000)){
		// trace("Connection succeeded!");
	}
	else{
		trace("Connection failed...");
	}
};

サーバ側。

require "socket"

gs = TCPServer.open(10000)
addr = gs.addr
addr.shift
printf("server is on %s\n", addr.join(":"))

STDOUT.sync = true

while true
  Thread.start(gs.accept) do |s|       # save to dynamic variable
    print(s, " is accepted\n")

    open('test.xml','w'){|f| f.puts s.read}
    
    print(s, " is gone\n")
    s.close
  end
end

とりあえずこれで通信は出来た。

		xmlsock.send(xml);
		xmlsock.close();

send は非同期なのに、その後ですぐに close をやっていいのか悩むところだが、動いてるからいいか。多分、close 時には全部 flush してくれるんだろう。


さて、XMLSocket#send なんだが、

メソッド; object パラメータで指定された XML オブジェクトまたはデータをストリングに変換し、その後ろにゼロバイトを付加してサーバーに転送します。

終端は "\x00"。さて、こういうのはどうやって実装すればいいんだろう。read(1) で繰り返していったらたぶん死ぬほど非効率。partial read だっけ? ああいうのがほしいっぽい。

さて、どうやって実装するべきか。

  1. 送るサイズをあらかじめ決める
  2. 送る前に、サイズを sock.gets で取れる形で送る
  3. 今のサンプルのように、送信したらとりあえず close する

2番かなぁ。送るサイズを得るにはどうすればいいのかな。

あ、IO#gets("\x00") にすればいいのか。単純だった。


XMLSocket#close って、何も送らないまま close しても閉じない。うわー。

すまん、嘘。xmlsock という変数の typo で xmlsocket というありもしない変数にメッセージを送っていた。やっぱりエラー処理厳しくしてほしいなあ。

function xmlout(){
	var xml = new XML();
	return xml;
}

var xmlsock;
function disconnectProc(){
	trace("disconnect");
	xmlsock.close();
	onCloseProc();
}

this.xmlsend_btn.onRelease = function(){
	var xml = new XML(send_txt.text);
	xml.xmlDecl = "<?xml version=<<CONT>>quot;1.0<<CONT>>quot; ?>";
	xmlsock.send(xml);
}

function onConnect(status){
	// error
	if(!status){
		trace("connection failure");
		return;
	}
	else{
		trace("connection succeeed");
	}
	connect_btn.label = "Disconnect";
	connect_txt.text  = "Connecting";
	connect_btn.onRelease = disconnectProc;
}

function onCloseProc(){
	trace("onClose");
	connect_btn.label     = "Connect";
	connect_btn.onRelease = connectProc;
	connect_txt.label     = "Disconnect";
	xmlsock = null;
}

function connectProc(){
	var xml = xmlout();
	
	xmlsock = new XMLSocket();
	xmlsock.onConnect = onConnect;
	xmlsock.onClose   = onCloseProc;
	xmlsock.onXML     = function(xml){
		trace("xml キター");
		recv_txt.text = xml.toString();
	};
	connect_btn.text = "Connecting...";
	
	if(xmlsock.connect("localhost", 10000)){
		// trace("Connection succeeded!");
	}
	else{
		trace("Connection failed...");
	}
};
this.connect_btn.onRelease = connectProc;

とても汚いけど、意外とちゃんと動く。

require "socket"
require 'thread'

gs = TCPServer.open(10000)
addr = gs.addr
addr.shift
printf("server is on %s\n", addr.join(":"))

STDOUT.sync = true

while true
  Thread.start(gs.accept) do |s|       # save to dynamic variable
    print(s, " is accepted\n")
    q = Queue.new
    
    st = Thread.new{
      while o = q.pop
        puts '>>>>>>>>>>>>>1'
        puts o
        s.write o + "<<CONT>>00"
        puts '>>>>>>>>>>>>>2'
      end
    }
    rt = Thread.new{
      r = true
      while r
        puts '<<<<<<<<<<<<<1'
        puts r = s.gets("\x00")
        puts '<<<<<<<<<<<<<2'
        q.push r.chomp("<<CONT>>00").downcase if r
      end
    }
    
    rt.join
    st.kill
    print(s, " is gone\n")
    s.close
  end
end

あったらいやなもの:カニクリームソーダ

_とおる。(Sun Jul 25 09:57:32 JST 2004)

 変数のスコープについては、この辺とか参考になるかも→ http://faces.bascule.co.jp/scopechain.html ぼくは読んでないけど。Flash はいろんなものが非同期にうごくので、その辺のタイミングの扱いがむずいです。

_こーのいけ(Sun Jul 25 22:17:25 JST 2004)

 逆にしてメロンクリームコロッケ。

_24(Sat)

昨日の日記を上書きしてしまって消してしまったんだけど、五月雨さんのキャッシュから復元。

バックアップはほしいが、CVSと連携させるのは嫌だ。


うぎゃーー!

                  提出期限  サイズ制限   Webでの公開    紙の配布
Lightening Talk    8/1(日)     なし        8/3(火)        なし

って何。全然聞いてないよそんなの。というか、5分のプレゼンを一週間前に公開してどうする! (lt => 一発芸 => そんなの、先にネタを公開してどうする)

ちょっとわけがわからないので、これについてはきちんと聞いておこう。ちょうど、sicp読書会だしな。えんどうさんいらっしゃるかしらん。

(本音:当日作ろうと思ってたのに、こんな先に出せって言われても無理だってば)


マリア様がどうの。音で源氏名を喋るのは、やっぱりどう聞いても変だ。そもそも、日本語な発音ってのがあれなんだろうなぁ。


FlashMX, 1500円なり。

_nobsun(Sat Jul 24 13:03:05 JST 2004)

 「そんなのは、dummy をだしといて、本番はべつにやるのだよ」(shiro 談)

_ささだ(Sat Jul 24 14:12:04 JST 2004)

 ハワイなんて聞いて無いよー

_6(Sat Jul 24 20:26:19 JST 2004)

 やすっ!>FlashMX, 1500円

_23(Fri)

とても気持ちが悪い.風邪か・・・.吐き気が・・・.


バグを出すほうがかっこ悪いと思います orz...(◆[nadoka] かっこわるい


マックグランを買ってみた.

食いづらい.


というわけで,げんしけん(4),

なんか方向が変わってるような気が・・・.そうでもないのかなぁ.なんかおたくっぽくなってる気がする.


大量の申し込み書類とか見てると,「字が綺麗」であることがとても大きなアドバンテージであることがよくわかった.

少なくとも俺は手書きで書いてはいけない・・・.


そういえば,もう金が無いという言い訳が当分出来なさそうなので,FlashMX 買うか.どこで買うと安いだろう.


というわけで,明日買ってしまおう.


真冬,という名前は聞くけど,真夏って名前は聞かないような気がする.

真春,真秋ってのも聞かないなぁ.

_fukumori(Fri Jul 23 22:32:53 JST 2004)

 「げんしけん」の展開はあれで正しいのです(謎)。ついでにおめでとうございます(ぉぃ)

_A.C.(Sat Jul 24 06:41:50 JST 2004)

 採用おめでとう!

_22(Thu)

(0..100000000000000000000000).each{|i|
  if i > 10
    Fixnum.module_eval{
      undef succ
      def succ
        self - 1
      end
    }
  elsif i < 0
    Fixnum.module_eval{
      undef succ
      def succ
        self + 1
      end
    }
  end
  puts "i => #{i}"
}

だからこんなことしないってば.


OOo から MS-PowerPoint に絵をコピペしたら超巨大な絵が貼り付けられた.嫌がらせだ,きっと.これは.


class Ra
  def initialize x
    @i = x
  end
  def <=> (x)
    @i <=> x.to_int
  end
  def to_int
    @i
  end

  def succ
    @i+=1
    self
  end
end

ra = (st = Ra.new(0) .. Ra.new(100))
def st.succ
  p 'hoge'
end

ra.each{|i|
  p i
}

特異メソッドは見ないのか.なるほど.


わらび餅

今日も贅沢に和菓子.緑ってのに,ちょっとぎょっとする.


今日驚いたこと.

if
  :then
else
  :else
end

が通った.なぜ通ったか気づくまで大変だった.

if
  class C
    ...
  end
else
  ...
end

が通った.


PTT を見た.やっぱり難しい.

しかし,「る」で始まって「ん」で終わるならなんでもいいんだねぇ.そりゃそうか.


キターーーー!!!!


いつもお世話になっております。今回のことも、皆様のおかげかと存じます。

皆様からのご恩に報いるためにも、精一杯力を尽くす所存です。これからも、何卒よろしくお願いいたします。

ささだこういち拝


というわけで、ふもっふ終わり。

ベタなオチだ。

_なかだ(Thu Jul 22 07:02:21 JST 2004)

 ra.equal?(st)では

_ささだ(Thu Jul 22 08:03:25 JST 2004)

 あぁ,ほんとだ.ちゃんと見てくれるんですねぇ>特異メソッド

_hira(Thu Jul 22 21:24:11 JST 2004)

 やったね!

_さかい(Thu Jul 22 23:18:46 JST 2004)

 おめでとうございます

_しなの(Fri Jul 23 00:26:58 JST 2004)

PTT, なんだか簡単な話を,難しく話してしまったようでごめんなさい. 結局,懇親会の後,大学に戻ってきて,今週は火曜日から連泊です. (日曜だけ夜は自宅へ帰ったのですが,3連休も大学でした.大学の 居室の引越しだけは終わらせるつもりだったのですが,..)

夏休みなら時間が取れるので,部屋に来てくれれば厳密解法について はわかるまで説明します.数学セミナーの8月号にも記事を書いてみ たので読んでみてください.

_たかはし(Fri Jul 23 09:16:03 JST 2004)

 おめでとーございます。

_まつだ(Fri Jul 23 09:53:50 JST 2004)

 おめでとうございます。私もがんばらねば。

_ささだ(Fri Jul 23 11:34:59 JST 2004)

 どうもありがとうございます.

_ささだ(Fri Jul 23 11:35:31 JST 2004)

 恐縮です>品野先生

_21(Wed)

JAVA Developer web site - アスペクト指向技術セミナーのご案内

行きたいけどいけない。


メールがめーらに食われた? 昨日0時ごろからのメールがさくっと消えてしまいました。大切な何かがありましたら、申し訳ありませんが再度メールください。


本当に何が起きたのか謎。Maildir から綺麗さっぱり消えた。さっき起動した電信八号が微妙にヘンな挙動をしていたんだが、それだろうと思うんだけど。

何が起きたんだろう。消すという設定は全然してないんだが。POP関連のログって何処に吐くのかな。起動スクリプトを見ても、pop のログはなさげ。


しかし、ショックだ・・・。もう少しバックアップを強化しないといけないかしらん。


orz

原因がわかった.大学のPCでメーラをつけっぱなしにしていて,そいつが食ってた・・・.全然おかしくないよ・・・.ごめんよ電八,疑ったりして・・・.orz

もうだめだ.


 その代わり,柔軟性は減ります.

i = 0
x = 1000

Fixnum.module_eval{
  alias add +
}

while i<x
  i += 1
  if i == 10
    Fixnum.module_eval{
      undef +
      def +(x)
        self - x
      end
    }
  elsif i < 0
    Fixnum.module_eval{
      undef +
      def +(x)
        self.add x
      end
    }
  end
  puts "i => #{i}"
end


みたいなことが,できません,

てゆーか,シネーヨ! こんなこと.

while でカウンタをインクリメントするようなループは,たとえば
条件によってはカウンタを撒き戻したりしたいとき,つまり通常の
each では満足できないときに行うって感じでしょうか.

というのをつなげようとしたんだけど,あまりに関係ないので消した.


\cx なんてはじめて知った.


RPGツクールXPいよいよ登場なんですね.成功するといいですね.


gcc では空ループが消えない.知らんかった.


しまった,XP祭り,定員になっちゃったらしい.しまったなぁ,行こうと思ってたのだけど.ボケボケ.

つうか,今日締め切りだったのか・・・.

orz


CESAデベロッパーズカンファレンス 2004.行ってみようと思ったけど,20,000円なんて払えません.残念.


メモ.

@nifty:@search:瞬!ワード用 bot を,誰か作って.


最近,ひょんなことで見つけた 現代奇談というページを(現実逃避に)見ている.まぁ,夏だし.怖い怖い.

_20(Tue)

今日のししゃもさん。

sixamo: Java とか XMLライブラザーズは略


ぷらっとオンライン - waysmall 400ax オプション付セット

こんなのがあるのかぁ.


The Little LISPer, The Little Schemer,The Little MLer, なのに,A Little Java, A Few Patterns.

The Little Rubyist がいいなぁ.Rubyの手習い.実はちょっと書こうとしてたんだけど.今からでも書くか.のんびりと.


orz.

今日は orz をたくさん書いた。まだまだ書くような気がします。

orz.

_しゅどう(Tue Jul 20 12:56:36 JST 2004)

 うわー、安いのねー>waysmall 400ax

_ささだ(Tue Jul 20 14:19:54 JST 2004)

 WinCE機からディスプレイ,バッテリーを抜いたと思えば.でも商業ベースに乗ってるのが凄いですね.

_(う)(Tue Jul 20 15:07:52 JST 2004)

 今時シリアルポート…… on_

_19(Mon)

がーん、でばっぐしたと思ったらパースエラーのまま放置していた・・・。メールログ空白の時間が出来てしまった。


株式会社アットマークテクノ Armadillo

いいなぁ、これ。ひとつどうですか?


0.6.1。いきなり 0.6.0 でバグ orz。なんとか海の日リリース。

今回もうさせんせいにお世話になりました。


yogurting って、ロゴが凄くかっこいいんだと思う。

_18(Sun)

仮想デスクトップの話で盛り上がったので,VirtuaWin V2.9 というソフトを入れてみる.どうやって使うのかよくわからない.

とりあえず,マウスで移動するのはデュアルデスクトップだとダメダメだったのでやめ.


窓たてというソフトウェアを利用してみたが,デュアルデスクトップだとダメダメだったのでやめ.


そういえば,本学科のウェブサイトが更新されていた.w3m で見てみたら,何もわからない.綺麗になればいいってものではないだろうに.字も小さいし.


ircで聞いたんですが,7 の倍数にマッチする正規表現.やべぇ,すげぇ笑ってしまった.


vm* っていう命令.面白いねぇ〜.


YOMIURI ON-LINE / サイエンス - 博士号取っても定職なし、文科省が「余剰博士」対策へ.

ガクガクブルブル.


ウィンドウの最大化とかできるショートカットはないものか.


ウェブでメール管理のバグ取り.X-Sequence ってこうなってたのか.


「頁」の読み方を今日はじめて知りました.

「こう」とは読まないんだなぁ.


PLEAC-Ruby なんてあるんですね.


ふらふらふらふらー。。。やっぱ安いな俺。

_たむら(Tue Jul 20 12:43:05 JST 2004)

 alt+space, X じゃダメか>最大化。窓使い使う鹿

_17(Sat)

ruby-list は敷居が高い。

  • newbe 用MLを作ろう
  • ruby-list の敷居を下げよう

どっちがいいんだろう。


「他の業種は『俺、絵描くの好きだからこの値段でもやるぜ』とかあるんですが、プログラムって相場が決まってる仕事なんですよね。エロゲ業界ってその相場でももらい過ぎなんですが……。その値段で我慢してやってくれて、融通が利いて、コミュニケーションが取れてというのはある意味奇跡的な人材なんです」

嘘だ。絶対嘘だ。

プログラマーを舐めすぎてるというか、舐めさせた先人というか。というか、プログラマーを知らないだけなんじゃ・・・。

『みんなと同じ給料で仕事できるプログラマー募集!』

こんなこと言ってる時点で、仕事させる気、ないだろう。

ラ(略)は好きなメーカーだったけど(あまりにあまりなので削除)。


それとも、俺が「プログラマ」を過大評価しているだけなのか。


灰羽終わり。


寝坊すぎ。

_hira(Sat Jul 17 07:43:48 JST 2004)

 RubyかLispなら報酬が半額になってもいい、と言って仕事を探してもらったことはあります。結局Javaの仕事しかなかったんだけど。

_ささだ(Sat Jul 17 13:24:59 JST 2004)

 RubyかLisp なら報酬が倍分の働きをします、という方向で。

_(う)(Sat Jul 17 15:54:50 JST 2004)

 そもそも、実際に開発するんじゃない奴が使用する言語を決めてから仕事を出してくるという仕組みが未だに理解できないすね。なんでこうなんだろう。

_新潟のS(Sat Jul 17 20:43:22 JST 2004)

 最近本田健さんの本を読んでたんですが、好きな仕事をして稼ぐのが一番だなぁと思いました。皆さん、独立開業しませんか?http://www.aiueoffice.com/

_16(Fri)

帰室.鈴木さん福岡さんご馳走様でした.

そういえば,はっかーずなんとか(ぼかしたのは,公開していいのかわからなかったため)の邦訳,8月のアレにあわせたいらしい.草稿を見せてもらう.3000円かぁ.とてもほしい.


うさ先生に巫女さんについていろいろと教えてもらう.さすが先生.


動かない動かないと思っていたら,

/* C code */
main{
  return 0;
}

となっていた.そりゃうごかねーよ!

しかし,Class Cast 例外を投げるだけってのも,不親切だよな(責任転嫁).しかし,一番使われてる C でこれなんだから,エラー報告って全然考えなくてもいいのかしらん.それなりにやってきたつもりだったんだが.


机の上においてあったので.

情報処理学会論文誌プログラミング Vol.45 No.SIG 9(PRO 22)

■整数線形計画法を用いた DNAコンピュータ制御コードの生成

阿部 正佳,萩谷 昌己 (東京大学)

阿部さんの本業ってこういうのだったんですねぇ.これ自体は,DNAコンピュータって関係ない気が.ある操作集合をコンパイラ技術を利用して最適化しました,って話だよね.

■A Type System for Verificationof Compiler Optimizations

松野 裕,佐藤 周行 (東京大学)

英語なんでパス.

っていうか,そもそも日本語で書いても私には読めない話っぽい.

■プログラミング環境Nigari - 初学者がJavaを習うまでの案内役

長 慎也 (早稲田大学),甲斐 宗徳 (成蹊大学),川合 晶,日野 孝昭,前島 真一,筧 捷彦 (早稲田大学)

PTT で見せてもらったやつですねぇ.教育向け言語ってこういうふうに論文書くのね.すげぇページ数(pp.25-46).

■豊富な情報を基にしたpointcutを記述できるアスペクト指向言語

中川 清志,千葉 滋 (東京工業大学)

やっぱりアスペクトってよくわからない.(わかろうとしないだけか)

■値番号に基づく部分冗長性除去

大平 怜,平木 敬 (東京大学)

略号が多すぎてよくわかんなぃ・・・.

rubyで部分冗長性って発生するかしらん.すげー限られてるような気がする.


■特定のフォーマットに依存しない文書処理系の設計と実装

高野 保真,岩崎 英哉,河野 健二 (電気通信大学)

はて.これはいったい何をやるのかしらん.論文が読みたいなぁ.


歯医者さん。

麻酔刺されるとき、「ここ痛いんだよね」、とか言いながら刺すのは、正直勘弁してほしかった。


うさ先生にサドとマゾについて語ってもらう。さすがうさ先生。

マゾッホという人がいたんですねぇ。


yogurting というゲーム(MMORPGらしい)のOPムービー(らしいもの)を見たんだけど、スゲー。このムービーはすげぇ。

日本にきたらやっちゃうかも。ハングルを覚えてまでやる気にはならないので。


何もアナウンスがないけど、明日はRHG読書会でいいんですよねぇ。多分。きっと。違ったらどうしよう。


某何のIDとパスワードを素メールでもらう。他の人のID/Passといっしょに。一般のセキュリティ意識ってこんなもんなんだろうか。でも、一般って言うには、it って企業名に入ってるんだけど。まぁこんなもんなのか。

_(う)(Fri Jul 16 10:11:06 JST 2004)

 いや、裏でふつーに<"<"ってただけなんですが……。

_こーのいけ(Sat Jul 17 01:19:57 JST 2004)

 う。それは気になるなぁ。>整数線形計画法を用いた〜

_15(Thu)

トカゲ 5階の窓です.念のため.


私の餌

豪華に和菓子.


一人で大きなプログラムを作るの好くない.

  • コードレビューができない
  • てきとーにサボってしまう
  • 責任が振ってくる
  • 別に人手が足りないわけではない(労力的には一人でも問題ない)

orz... 俺だからかもしれない


ぉ,酒井さんが裏切りだ!(違)

_青木(Thu Jul 15 03:46:19 JST 2004)

 50円引き……

_しょーじ(Thu Jul 15 07:48:19 JST 2004)

お久しぶりです.言語専門家(?)の笹田君に質問です. 最近注目してる言語でOCamlっていうのがあるんですが,これってどうなんですか? 掲示板がないみたいなのでこちらに書いてみました.

_ささだ(Thu Jul 15 10:24:21 JST 2004)

 大変恐れ多いことでございますよ.OCamlはすみません,使ったこと無いです.東工大に OCaml 使いが多いって昔聞いたような気が.

_shiro(Thu Jul 15 12:28:54 JST 2004)

 geckoは、昔いた会社(31F)のはめ殺しのガラス窓の外にへばりついてるのを見たことがあります。

_さかい(Thu Jul 15 18:48:18 JST 2004)

 がーん。ばれてしまった

_ocaml(Thu Jul 15 19:02:06 JST 2004)

 INRIAが開発したML系の言語です.syntaxはsmlとかに慣れてると癖があるように感じます.クラスがあります.そういうことを聞きたいわけじゃないかもしれないですが...

_ささだ(Fri Jul 16 00:13:54 JST 2004)

 私も scheme で出させてもらえないかなぁ(無理)

_しょーじ(Fri Jul 16 07:35:50 JST 2004)

 ありがとうございます.当方,あまり関数型言語を用いた事がないのですが,なんだかバグが出にくいなどの噂を聞いたので,これって本当なのかな?と思い,書き込んでみました.いっちょ,挑戦してみようかな….

_14(Wed)

是政駅。近所に住んでいて、この存在を今初めて知った。orz

なんてこった。

この歳になって近所の最寄駅の存在を知ることになろうとは・・・。


大改造。


Introduction to Object-Oriented System Analysis and Design(jfriends)

読むぞー.

って,今月まだ全然本を読んでいない.まずいなぁ.


http://slashdot.jp/comments.pl?sid=195417&cid=588987 のあたり,大変おもしろい.もうあるYO! とかいう声が多いですが,こういう紹介があると記事にする意義は十分あるよね.


      goto 100
      i = 0
      
      if(1 .EQ. 1) THEN
         i = 1
      else
         i = -1
 100  endif
      end

fortran 的に valid らしいんだが・・・.誰もこんなのかかねぇよなぁ.

      goto 100
      i = 0
      
      if(1 .EQ. 1) THEN
         i = 1
      else
         i = -1
      endif
 100  continue
      end

となるようにすればいいんだろうが・・・.うーむ.どこで処理しよう.

 # _let I=10;
 # _GOTO 100;

 # _IF(1.EQ.1)_THEN;
 @222 _let I=1;
 _ELSE ;
 @333 _let I=-1;
 _ENDIF; @100  _CONTINUE;

こんなふうに逃げる.


スラッシュドット ジャパン | ランドセルに電子タグの実証実験

真剣に,悪用防止の手法が思いつかないんですが,本当にこんなことやっても大丈夫なんでしょうか.

高木浩光さんの日記には,「大丈夫なのか」みたいなことを書いてますが,実際どうなんだろう.専門家のご意見を伺いたいです.マジで.

今家族にこんなもんつける,とか言われたら凄い勢いで拒否するね.

_おだか(Wed Jul 14 02:05:49 JST 2004)

 是政、多摩川近くていいところですよね。

_ささだ(Wed Jul 14 03:31:43 JST 2004)

 むしょうに行ってみたくなった。

_やまだ(Wed Jul 14 06:22:24 JST 2004)

 結構近所に住んでいるのかも(最近是政近辺に家庭教師に行ってました)。

_KM(Wed Jul 14 09:37:28 JST 2004)

 武蔵境駅で「この西武線は何処へ行くのだ」と疑問には思わなかったのか(多摩墓地か競艇場が終点と思ってた?)

_み(Wed Jul 14 10:19:34 JST 2004)

 昔は「西武是政線」が正式名称。多摩川の砂利採取で建設。採取した穴が競艇場。しかし、この近辺にいて多摩川線を知らなかったとは!

_ささだ(Wed Jul 14 14:46:22 JST 2004)

 南武線みたいに多摩川の南に延びてるんだとおもってました.もっと調布のあたりで多摩川越える感じで.地図をまじまじと見たのが今回初めてだったり.

_青木(Wed Jul 14 17:40:37 JST 2004)

 是政、よく走っていったもんです

_ぐ(Wed Jul 14 20:24:49 JST 2004)

 しょせん多摩川、されど多摩川。下流に行けば六郷川。私鉄は川を越えるかは一大決心。川を越えるか、否か、悩ましい…

_13(Tue)

irc で聞いたんですが、gprime.net - video - blindfolded mario pianist take two。すげー。


設定ファイル記述の話とか複数のプログラミング言語の利用の話は langsmithらしくないらしい.


英語なんとかしないとなぁ。

と思って、何年経つんだろう。

とにかく興味がある文献を読み漁るのがいいんだろうか。

_12(Mon)

どきどき.


一年生ひきまくり.


apt-get distupgrade したら,apache2 バージョンがあがった.でも suexec が出来なくなっていた.

・・・suexec のパスが変わっていた.これは,パッケージング時のバグなんだろうか.疲れた.しかし,なぜ suexec のパスくらいコンパイル時に決定しないといけないんだろう.設定ファイルに書かせてくれよ.


喉が痛い.


VOA をずっと聞いているんだけど,宇宙人っぽいエフェクトの,平坦な発音だと聞ける.やっぱり,英語のアクセントになれないだけなんだろうか.


とりあえずトライアル版で試すか、とダウンロードしてみると「評価期間が過ぎています」ってオイ。

で、よく見るとFireworksMX だったので、間違えちゃったなぁ、と FlashMX のほうを落としてみると、アーカイブが展開できません。ファイルが壊れてるっていいます。やってられません。


linux機に持っていったら解凍できた。

で、やっぱり「評価期間が過ぎています」。

もうやってられません。神様がやるなと言ってるんだろうか。

_とおる。(Tue Jul 13 10:23:36 JST 2004)

 なんでだろ。Macromedia もたまにおかしいことがあるな。日本のカスタマーサポートにメールすれば直してくれるかも。

_11(Sun)

いろいろと頭が痛い。物理的にも、精神的にも。


学校にバイクでくる途中,むちゃくちゃ雨に降られた.着いたら小雨に.


lightning talk @ llwe ,少なすぎ.


2時です.って,俺ももう出ないとヤバイ.


iPod mini用レコーダは,作る予定はないでそうです.残念.さよなら,iPod mini(でもホスィ)


今日はケーキとか甘いものばかり食っていた気がする.

抹茶ケーキに和菓子,ティラミス.おいしかった.

お茶を頼んで 1000円.

_hira(Sun Jul 11 12:52:43 JST 2004)

 確かに少ないっすねー。4大LLが8割、その他2割くらいかなーと思っていたんだけど。

_ささだ(Sun Jul 11 21:18:18 JST 2004)

 しかも偏りスギ.

_しゅどう(Tue Jul 13 00:32:28 JST 2004)

 lightweight language weekend なんてイベント自体、今ここ読んで初めて知ったわ。

_10(Sat)

Flashのソフトが作りたくて作りたくて作りたくて作りたくてしょうがないんですが、誰か買ってください。もしくは、Flashのソフト制作バイトさせて。


青森チケット着た。


ペアプロを相互監視による強制的プログラミング、とかにしておくと受けがよくなったりしないだろうか。現場じゃないほうに。

_み(Sat Jul 10 11:55:23 JST 2004)

 Flashソフトのバイトより研究では?いや、もっとマシなバイトはたくさんある

_kjana(Sat Jul 10 13:27:51 JST 2004)

1. Flash で Ruby の VM を書く 2. Ruby スクリプトから Flash のオブジェクトコードを吐くコンパイラを書く

研究の一貫としていかがでしょうか? :-)

_とおる。(Sat Jul 10 14:20:12 JST 2004)

これならやすいよ。 SWF の仕様書はここから。 Perl ですが、これも参考になりそう。 というわけで、Scheme で Flash のアクションがかけるようにしてください。

_ささだ(Sat Jul 10 15:20:18 JST 2004)

 Flash MX 2004 Education 日本語版なら1万円で買えるみたいなんですよね・・・。作りたいソフトは一個だけなんだどなぁ。

_ささだ(Sat Jul 10 15:22:29 JST 2004)

 って、Professionalじゃないと駄目か。1.5万円。うー、今月は辛いので我慢するか・・・。

_とおる。(Sat Jul 10 21:12:51 JST 2004)

 1万円ってやすすぎる!ぼくの分も買ってください。お金出すから。プロフェショナル版にする必要はないよ。

_ささだ(Sat Jul 10 21:31:32 JST 2004)

 XMLによるホストとの連携ってプロフェッショナル版じゃないと駄目なんじゃないんすか?

_とおる。(Mon Jul 12 14:24:45 JST 2004)

 XMLSocket のことかな。そらなら普通版でだいじょぶだよ。Flash Communication Server との連携も普通版でだいじょうぶー。っていうか、ぼくは仕事でネトゲみたいなのつくってますが、普通版つかってます。

_9(Fri)

rss の用意がやっと終わった.6時間ごとに更新.


一生懸命やって,なぜか動かない drb + observable.なぜだー,と小1時間悩んだ結果,changed をしてなかったというオチ.サーバからクライアントにメッセージを送るだけに,observer を使うのが間違ってたんだろうか.でも楽そうだったしなぁ.

でも,エラー処理とかを考えると,自分でディスパッチャを書くのが正しいような気がする.


langsmith,こっそりと無制限指定にする.まだ50人くらいだから,あんまり関係ないけど.

あんまり盛り上がってないなぁ.なにか投稿したいけど,下手なこと言えなさそうな面子なんだよな.すでに下手なこと言ってるって噂もある.


昨日24時間,研究室の建物から出ていないような気がする.研究室から殆ど出ていないような気がする.


64bit マシンだと cons が 128bit になるのか,っていうのを見て笑ってしまった.ruby でやったら Pair 組み込みクラスを利用しても現状 160bit ですよ.(32bitマシンで5word)

しかし,64bitマシンってタグがたくさん作れそうでいいな.


ペプシブルーを混ぜてみました。混ぜ混ぜ(てつたろうせんせいのところより).感動した.


ししゃも先生に要約をお願いしたところ,各地で不評である(RSS).どうしたもんかな.文書要約システムなんて今更作る気にもならないし.


そうか、CVS なり SVN なりに、バーチャルエントリってのがあればいいのか。checkout すると、特定のコマンドの結果をチェックアウト結果として返す。diff はちょっと取りづらいけど、まぁ。


無い頭で要約スキームを考えてみてるんだけど、思いつかない。content[0..500] かなぁ・・・。

_ねる(Fri Jul 09 23:38:29 JST 2004)

 ををっ。RSSありがとうございます。content[0..500]みたいな方法をよく見ますが、べつに全文のっけてもいいですよね...

_8(Thu)

iPod mini ほしいなぁ.学生なら¥26,170.うーむ.4GB のUSBストレージだと考えれば・・・.あぁ・・・.

あれ,USB1.1じゃダメなのかな.

Belkin Voice Recorder for iPod というのが mini に対応したら買ってしまおう.


snip

rss ってこんな感じでいいのかなぁ.

require 'nadoka/tagparts'
require 'time'

#
# items: [
#   {:title => '...',
#    :link => '...',
#    :description => '...',
#    :date => Time object
#   }
#

class SimpleRSS
  include TagParts

  def initialize *args
    @rss = makerss(*args)
  end

  def tag_encoding str
    sjisからutf-8に変換する何か(str)
  end
  
  def to_s
    %Q(<?xml version="1.0" encoding="utf-8" ?>\n\n) +
    tree2string(@rss)
  end
  
  def makerss rss_uri, link_uri, title, desc, items
    _("rdf:RDF",
      { :xmlns       =>"http://purl.org/rss/1.0/",
        :'xmlns:rdf' => "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
        :'xmlns:dc'  => "http://purl.org/dc/elements/1.1/",
        :'xml:lang'  => 'ja'},
      _channel({:'rdf:about' => rss_uri},
        _title(title),
        _link(rss_uri),
        _description(desc),
        _items(
          _('rdf:Seq',
            items.map{|e|
              _('rdf:li', {'rdf:resource' => e[:link]})
            }))),
      items.map{|e|
        _item({'rdf:about' => e[:title]},
          _title(e[:title]),
          _link(e[:link]),
          _description(e[:description]),
          _('dc:date', e[:date].xmlschema))
      }
    )
  end
end

def makeitem title, uri, desc, date
  {:title => title, :link => uri, :description => desc, :date => date}
end

puts SimpleRSS.new(
  'http://www.namikilab.tuat.ac.jp/~sasada/diary/rss',
  'http://www.namikilab.tuat.ac.jp/~sasada/diary/index.html',
  'だ',
  '研究日記',
  [makeitem('てすと1', 'testurl1', 'testです1', Time.now),
   makeitem('てすと2', 'testurl2', 'testです2', Time.now),
   makeitem('てすと3', 'testurl3', 'testです3', Time.now),]).to_s

すまん,正直書きづらかった(ぉ.

xyzzy の ruby-mode がもうちょっとインデントについて賢ければ,そうでもないのかもしんない.でも,ハックする能力は無い.

普通はどうやってかくんだろぅ.

なんか,sxmlで書いたほうが,やっぱりシンプルかなぁ.

(tree2string `(rdf:RDF
 (@ (xmlns "http://purl.org/rss/1.0/")
    (xmlns:rdf' "http://www.w3.org/1999/02/22-rdf-syntax-ns#")
    (xmlns:dc   "http://purl.org/dc/elements/1.1/"))
 (channel
  (@ (rdf:about ,rss-uri))
  (title ,title)
  (link  ,link_uri)
  (description ,desc)
  (items
   (rdf:Seq
    ,@(map ..))))
 ,@(map ...))
)

こんな感じだろうか.あぁ,全然楽.で,テンプレートとか使うとどうなんだろうなぁ.そっちのほうが楽なのかなぁ.


diary.rss.なんとなく作ってみた.~ の変換がうまくいってないっぽい.うーむ.


description を生成してる人はあんまり居ないっぽい.


ちなみに,別にこのRSSを更新し続けるつもりはあんまり無い.フックかけるの面倒だし.cron で一日一回生成ならいいか.


各リーフにたいして,どうやって文字コードのエンコーディングを変更しようか,すげー悩んでたんだけど,別にどかっと作ってから出来た文字列に変換かければいいのね.馬鹿すぎ.無能すぎ.


連載:インターネット事件簿(connect24) うわー.


ゼミ4時間.疲れた.


寝てしまった.涼しいので,また学校にいるやつ.


あり,sixamoさんがダウンロードできない.


--- sixamo.rb.orig      2004-05-09 04:40:44.000000000 +0900
+++ sixamo.rb   2004-07-08 22:43:13.000000000 +0900
@@ -488,7 +488,7 @@
                                        words = split_into_terms(line)
                                        words_all.concat(words)
                                        words.each do |term|
-                                               if @occur[term].empty? || num > @occur[term][-1]
+                                               if @occur && @occur[term] && 
+                                                  (@occur[term].empty? || num > @occur[term][-1])
                                                        @occur[term] << num
                                                end
                                        end
@@ -609,7 +609,11 @@
                        @rel.delete(str)

                        tmp = split_into_terms(str)
-                       tmp.each { |w| @occur[w] = @occur[w].concat(occur).uniq.sort }
+                       tmp.each {|w|
+                          if @occur && @occur[w]
+                            @occur[w] = @occur[w].concat(occur).uniq.sort
+                          end
+                        }
                        weight_update(tmp) if tmp.size > 0
                end

なんかエラーが多発してたので,こんなふうにしてみた.多分,もっと根がある話だとは思うんだけど.

_7(Wed)

w3ml、やっぱり返信機能がほしい・・・。返信フォーマット表示というか。


  include HTMLParts
  def htmlpage query
    ch = query['ch']
    ch = ch && !ch.empty? && @state.channels.include?(ch) && ch
    
    ttl = ch ? (ch = ch.tojis; " : #{ch}") : ''
    
    if ch && msg = query['message'] && !msg.empty?
      msg = msg.tojis + '(from WebA)'
      send_privmsg(ch, msg)
      push_message(ch, nick, msg)
      raise WebARedirect.new(ch)
    end
    
    _html(
      _head(_title("WebA: IRC Web Accessor#{ttl}")),
      _body(
        _h1("WebA: IRC Web Accessor#{ttl}"),
        select_ch(ch),
        view_ch(ch)
      ))
  end

  def select_ch ch
    _form({:method => 'get', :action => '#'},
      _select({:name => 'ch'},
        ch && _option({:value => ch}, ch),
        @state.channels.map{|e|
          if e != ch
            _option({:value => e}, e)
          end
        }),
      _input({:type => 'submit', :name => 'submit', :value => 'ch'})
    )
  end

  def view_ch ch
    return unless ch
    msgs = @messages.find_all{|e|
      e[:ch] == ch
    }
    _div(
      _h2("channel #{ch}"),
      _form({:method => 'get', :action => '#'},
        "message: ",
        _input({:type => 'text',   :name => 'message'}),
        _input({:type => 'submit', :name => 'say', :value => 'say'}),
        _input({:type => 'hidden', :name => 'ch', :value => ch})
      ),
      _div(
        msgs.map{|m|
          _p("#{m[:time].strftime('%H:%M')} - #{m[:nick]}: #{m[:msg]}")
        }.reverse
      )
    )
  end

WEBrick を利用した IRC web proxy の一部。どうでしょうね、こんな書き方は。HTML直書きよりも、見やすいと私は思うんだけど。


体重を計って今日も欝.


第 302 回 PTT のお知らせ - 話題:最長しりとり問題の解法について だそうです.22日かぁ・・・.


class C
  Const = 10
  class CC
  end
end

class D < C::CC
  def m
    p Const
  end
end

D.new.m

何時の間にかこれが通らなくなってたのね.どうしようかな. 昔から通らないそうです.そうだよなぁ.


今日のししゃもさん:

sixamo: 人として、pubyのsvn化実験はいよいよ1.8.0

何の実験をしてるんですか.


延々とVOAを聞いてるんだけど,全然聞けるようにならないなぁ.ぼんやりと単語の区切りが聞こえるようになってきた気がするけど.


え,げんしけんってアニメ化するの?(げんしけん-TOP

_maeda(Wed Jul 07 14:19:27 JST 2004)

 Rubyでなく素直にSXMLで(ry

_ささだ(Wed Jul 07 14:36:49 JST 2004)

 行末に「,」が必要になる以外,あんまり不満はないんですよね.ロジックはrubyで書きたいし.あと,sxml の (@ ...) 記法は嫌い.いや,他にあんまり思いつかないんですけど.

_6(Tue)

りんごジュースを買おうと思ったら,よく似たオレンジジュースを買ってしまった.自動販売機って,undo できないよなぁ.コスト高くなりすぎるのか.


XP祭り 2004があるらしい.ウェブサイトには情報がない.

 XP3年目の開発事例  関将俊 (東芝医用システムエンジニアリング(株))(30分)

ということで,行こうかなぁ.どうしようかなぁ.


apache2 にしたら,今まで hoge/ でアクセスできていた hoge.cgi が,アクセスできなくなった.なぜー? MultiViews にはしてるんだがなぁ.

MultiviewsMatch だった.このキーワードにたどり着くために何時間かけてるんだ俺は.疲れた.


groovy初体験.

sum = 0
(1..100000).each{x|
	sum += x
}

println sum
println "end"

#=>
705082704
end

って,あれ・・・.

java のクラスにコンパイルして実行した結果:

real    0m2.626s
user    0m0.015s
sys     0m0.031s
% time ruby -e "sum=0; (1..100000).each{|x| sum+=x}; puts sum, 'end'"
5000050000
end

real    0m0.389s
user    0m0.015s
sys     0m0.016s

膨大なクラスライブラリを読み込むのに時間がかかってるのかしらん.となると,スクリプトサーバみたいにすると,速くなるのかもしれない.

もうちょっと激しい例を作ってみるか.

// groovy
def fib(n){
  if(n < 2){
    return 1
  }
  else{
    return fib(n-1) + fib(n-2)
  }
}

println fib(30)
# ruby
def fib n
  if n < 2
    1
  else
    fib(n-1) + fib(n-2)
  end
end

p fib(30)
% time java -classpath "..." t
1346269

real    0m14.040s
user    0m0.031s
sys     0m0.030s

% time ruby -v ../rb/t.rb
ruby 1.9.0 (2004-05-10) [i386-mswin32]
1346269

real    0m5.559s
user    0m0.015s
sys     0m0.015s

ruby のほうが速い.ロードとか関係なく.よかった(ぉ

いや,極端な例だろうけどね.

// java
class Fib{
  static int fib(int n){
    if(n<2){
      return 1;
    }
    else{
      return fib(n-1) + fib(n-2);
    }
  }
  public static void main(String args[]){
    System.out.println(fib(30));
  }
}
% time java Fib
1346269

real    0m0.465s
user    0m0.015s
sys     0m0.015s

やっぱはえーなー.


体重計が99円ショップで税抜き99円だったので,つい買ってしまった.そして,のって ブルーになる.


今日のししゃもさん:

sixamo: google> Iconv#iconvだとnilを渡したりというのがオープンソース推進者の人の個性なのか。

どういう個性だ.


今日も歯医者。麻酔が鼻までかかってる。

_mput(Tue Jul 06 07:05:49 JST 2004)

 undoじゃなくてもせめてOKボタンを押さないと買えないようにするとか。

_ささだ(Tue Jul 06 12:13:51 JST 2004)

 多分商品を取り出してはじめて気が付くので,それだとあんまり意味がない気が.

_KM(Tue Jul 06 18:02:39 JST 2004)

 飲料・食料は安全上の理由から絶対に駄目かと.ゆりかもめとか地下鉄の一部無人(遠隔管理)駅で,きっぷを戻せる自動券売機が配備されてるという例はありますが.

_あひる(Tue Jul 06 20:19:34 JST 2004)

 オレンジジュースのほうがおいしぃ

_5(Mon)

ねみゅい。

ruby分を取りすぎた。


さて、今年も冷やし中華の季節がやってまいりました。つまり、マヨネーズが欠かせない季節ですね。


apache2 にしろーという圧力がきたので、1.3 から 2系に変更する。・・・準備をする。めんどうだよう。


久々に授業に出た.眠い

なんというか,小学生か,あいつらは.


飲み.大変,大変有意義な飲み.

_KM(Mon Jul 05 09:41:01 JST 2004)

 2次元コード,わしゃ昔から「すくえあこーど」と呼んでたぞ.誰にも通じないのと,RPGが有名なゲームメーカーの何かみたいなのが難だが.

_ささだ(Mon Jul 05 09:50:17 JST 2004)

 四角じゃないかもしんないじゃん。(あるのかそんなの)

_4(Sun)

スレッドまたぐとやべーじゃん、というご指摘を受けた>$KCODE

うわー、そのとおりだ・・・。どうしたもんじゃろうなぁ。sixamo.rb さんを $KCODE 非依存にしなければならないのか。

でも、soap回りもそうだよな。途中で $KCODE がパカパカ変わるようなアプリケーションでは、非整合が起こる可能性がある。

・・・って、$KCODE をパカパカ変えるなってことですか。ごめんなさい。でも、どうするべきなんだろう。変えるようなシチュエーションって本当に無い?


org が orz 系に見えてしょうがない。

ruby-lang.orz。


星になんとかな最近の季節な何をする。良作。


  def show_char_code str
    case $KCODE
    when 'EUC', 'SJIS'
      str.tojis
    when 'NONE', 'UTF-8'
      begin
        Iconv.conv("EUC-JP", "UTF-8", str).tojis
      rescue => e
        "(char code problem: #{e.class}[#{e.message.dump}])"
      end
    else
      str
    end
  end
  
  def search_char_code str
    case $KCODE
    when 'EUC', 'SJIS'
      str.toeuc
    when 'NONE'
      begin
        Iconv.conv("UTF-8", "EUC-JP", str.toeuc)
      rescue => e
        "(char code problem: #{e.class})"
      end
    when 'UTF-8'
      str
    else
      raise
    end
  end

こんなふうに逃げた。

$KCODEに依存しないライブラリを、$KCODEに依存するライブラリに通すためって話かなぁ。


w3ml のバグをアドホックに直した。ついでにメールアドレスを目に付く範囲でマスクするようにした。

電話番号とかのマスクもしたほうがいいんだろうか。


mla.cgi も更新。

なんとなく、vi デバッグをしている。


バカがいったMLなんてどうだろう。

_3(Sat)

結論:タイトルにメッセージを書いても誰もレスポンスを書かない(書けない)。


ruby の WSDL とかで、google からひっぱってきたデータを iconv に食わせると、いつのまにか、常に失敗するようになった。

なぜだーー、といろいろ調べると $KCODE='e' になったら、googleから帰ってくるデータがeucになっていたらしい。ひでえ。ひどすぎる。

問題はいくつかある。

  • $KCODE を変更する sixamo.rb
  • $KCODE によって動作を変える wsdl 関連の部分(根はどこにあるかしらない)

どう解決するのがいいんだろう。あー、文字コードなんかでなやみたくねー。


def change_kcode kc
  tmp = $KCODE
  $KCODE = kc
  begin
    yield
  ensure
    $KCODE = tmp
  end
end

みたいなのを作ってお茶を濁そう.KCODE に依存したコードを書くのはなんか嫌だなぁ.でも,モデルとしてそういうものだといわれると・・・.うーむ.


コップ割れちゃったウワーン.

これは予約特典をゲットしろとのお告げか!?

多分買わないけどな.

というか,でかいコップがすきなんだけど,どっかにいい感じの,ないかなぁ.


うささんに gmail アカウント貰う.ありがとうございます.さて,何に使おう.


QRコードの仕様をずらずら見ていたんだけど,とりあえず面倒くさいことはわかった.どうしようかなぁ.


組み込みPair の利点は,要するにコスト(速度とメモリ効率)です.でも,配列よりはメモリ効率や構築コストは高いです.シンプルで柔軟なデータ構造を実現できます(中身の無い売り文句).

ものによっては,あるととても便利(コスト的に有利)だと思うんですが,その「もの」がどれくらいあるかどうかが問題なのでしょう.rubyist にとって,それがどれくらい有効に活用されるのか,が.

Rucheme を作るにはあると幸せになるんですが,誰も使わないので却下.

_ょゎ(Sat Jul 03 08:35:16 JST 2004)

 $KCODEを変更するsixamo.rbが悪い ********* 1(100%)

_ささだ(Sat Jul 03 22:38:34 JST 2004)

 でも,内部コードがEUCじゃないと,ししゃもさんちゃんとうごかなそうですよねぇ.

_6(Mon Jul 05 02:33:14 JST 2004)

 虹ロゴの頃のAPPLEのマグカップ。でかくて頑丈よ。>というか,でかいコップがすきなんだけど,どっかにいい感じの,ないかなぁ.

_ささだ(Mon Jul 05 03:54:10 JST 2004)

 どうやって手に入れろと。

_2(Fri)

あちぃ.


Pair,要らないかぁ.unshift が速くなって幸せになることもあると思うんだけど.とか考え出すと,それは LinkedList なのか,とか push は速くなんないのか,とかいろいろ考え出しちゃってダメかも.

速いリスト操作だけがしたいのなら(push/pop/shift/unshift),拡張ライブラリだけで済むんだよな.


あー,寝ちゃった.ヤバイ.


nokadaさんに熱気球について「知りたい」を教えてもらう.こんなふうに競うんだねぇ.


2次元バーコードリーダの価格を調べてみる。

カタログ 価格 パソコン - goo コンピューター

・・・16万。高すぎ。


2次元バーコードつってバーじゃないじゃん、というご指摘を受ける。うーん、たしかに。QRコードとか、2次元コードとか、ちゃんと書くようにしよう。

_おだか(Sat Jul 03 14:29:09 JST 2004)

 僕の携帯で2次元コードを読み取るときは「バーコードリーダー」って機能を呼び出しますよ。

_1(Thu)

F:\ko1\rubycvs\ruby\test>ruby -v test_pathname.rb
ruby 1.9.0 (2004-06-30) [i386-mswin32]
Loaded suite test_pathname
Started
.........F.......
Finished in 0.078 seconds.

  1) Failure:
test_kernel_open(PathnameTest)
    [F:/cygwin/usr/local/lib/ruby/1.9/pathname.rb:1195:in `test_kernel_open'
     F:/cygwin/usr/local/lib/ruby/1.9/pathname.rb:1193:in `open'
     F:/cygwin/usr/local/lib/ruby/1.9/pathname.rb:1193:in `test_kernel_open']:
<5> expected but was
<0>.

17 tests, 165 assertions, 1 failures, 0 errors

なんだろうと見ようとしたけど、テストがライブラリに入ってて追うのが面倒なので止め。きっと偉い人がすでに着手済みに違いない。windowsだからいけないのかな


ko1@lalune:~/rubycvs/build_head$ /usr/local/bin/ruby -v ../ruby/test/openssl/test_ssl.rb
ruby 1.9.0 (2004-06-30) [i686-linux]
Loaded suite ../ruby/test/openssl/test_ssl
Started
.../ruby/test/openssl/ssl_server.rb:49:in `initialize': Address already in use - bind(2) (Errno::EADDRINUSE)
        from ../ruby/test/openssl/ssl_server.rb:49:in `new'
        from ../ruby/test/openssl/ssl_server.rb:49
zsh: terminated  /usr/local/bin/ruby -v ../ruby/test/openssl/test_ssl.rb

よくわからないのでパス。テストが途中で終わっちゃうのは不味いんじゃなかろうか。

popen 先のプロセスが異常終了して、そのまま親プロセスも死んでる?


Pair クラスを T_PAIR==0x0f として作ってみた。

require 'benchmark'

class RBPair
  attr_accessor :car, :cdr
  def initialize car, cdr
    @car = car; @cdr = cdr
  end
end

C = 1000000

rp = RBPair.new(1,2)
np = Pair.new(1,2)


Benchmark::bm{|x|
  x.report{
    C.times{
      rp.car
    }
  }
  x.report{
    C.times{
      np.car
    }
  }
}
      user     system      total        real
  0.625000   0.000000   0.625000 (  0.625000)
  0.563000   0.000000   0.563000 (  0.563000)

おー、car の速度かわんねー。Pair クラスイラネ(ほんとか?)

ちなみに、構築は結構違う。

      user     system      total        real
  0.860000   0.016000   0.876000 (  0.875000)
  0.203000   0.000000   0.203000 (  0.203000)

でも、一番効くのは each だろう。

class RBPair
  attr_accessor :car, :cdr
  def initialize car, cdr
    @car = car; @cdr = cdr
  end

  def each
    pair = self
    while true
      yield(pair.car)
      cdr = pair.cdr
      if cdr == nil
        break
      elsif cdr.kind_of? RBPair
        pair = cdr
      else
        raise
      end
    end
  end
  
end

C = 1000
LN = 5000

rp = RBPair.new(1,2)
np = Pair.new(1,2)
l1 = l2 = nil
LN.times{|i|
  l1 = RBPair.new(i, l1)
}
LN.times{|i|
  l2 = Pair(i, l2)
}

Benchmark::bm{|x|
  x.report{
    C.times{
      l1.each{|e| }
    }
  }
  x.report{
    C.times{
      l2.each{|e| }
    }
  }
  x.report{
    C.times{
      # null loop
    }
  }
}
      user     system      total        real
 17.672000   0.000000  17.672000 ( 17.672000)
  2.109000   0.000000   2.109000 (  2.109000)
  0.000000   0.000000   0.000000 (  0.000000)

で、勢いで作ったはいいが、rubyらしくないといわれて終わりそうだ。

とりあえず marshal 以外はこんなもんかなぁ。

inspect ってこうやって実装するんだね。原理がどうなってるのかは知らないけど。

スレッドローカル変数で inspect な何かをやってるんだねぇ。まぁ、そうするしかないかなぁ。しかし、これ自前の inspect を持ってるとき、おかしくなったりしないんだろうか。うーん。


snip
snip

名前がダメっぽいのでやめとこうかなぁ.たとえば,Pair#map はどうするんだ,みたいな.


なんでこんなに素材集のページって見づらいんだろう.どうしてあんな(自粛)みたいなページが作れるのかわからん・・・.人のところへリンクばっかり張って.


気まぐれ工房 玄関 から素材を借用.こちらのページはとてもいいですね.見やすい.

入り口がわかりづらいのが難点か.


アンケートのデータフォーマットを変更(データ例).もっと前にやっておけばよかった.

_mput(Thu Jul 01 13:14:26 JST 2004)

 [ruby-dev:14392]とか?>原理

_ささだ(Thu Jul 01 20:18:56 JST 2004)

 その辺だねぇ.

Sasada Koichi / sasada@namikilab.tuat.ac.jp
$Date: 2003/04/28 10:27:51 $