うーん、眠い。
40分も英語しゃべれねーよ!
って言ったら、「大丈夫、誰も40分なんてしゃべんねー。ディスカッションが入るから」と返された。だから、ディスカッションなんてできねーよ!
懇親会。着席型はだめだよねぇ・・・。
3時間山道を歩いて目的地にたどり着けなかった・・・ orz
3年分くらい歩いた気がする。
馬を見ました。
また前田さんと首藤さんにお世話になりました。いつもありがとうございます。木村先生にいろいろといい話を聞けました。ふふふ。
あー、そんなご無体な・・・。見なかったことにしよう。>Matzにっき
では、発表してきます。
うーん、まぁこんなもんか。
あと4時間だよ・・・。
寝たら起きれなさげ。
ruby-talk, reply したいけど、リプライ元は学校に置いてきてしまったのでできない。すまん。
起きれたので恐山に行ってきます。また来週。
ssh がつながりました。このホテル偉い。
恐山はいおうくさかった。
そうか、俺は正常な人間じゃなかったのか・・・ orz
恐山の温泉2箇所入りました。後から確認してみると、一箇所は実は入っちゃだめだったような感じ(別に女湯に入ったわけではない)
次のAMDのチップは一個3.9セント?(AMDがSempronブランドのプロセッサを発表へ)
暑い。暑くて眠れない。眠れない。
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.
寝坊したら洒落にならない.
さて、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 ってやったらさくっとできた.スバラスィ.
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でも、この再帰くらいしか見所は無いような。 これが同じように動いたら等価ってことで。
なるほどー。 >違い発見。
てことは、こんな風には書けないのかな。
func(); //a
function func() { 1; }
func(); //b
function func() { 2; } //再定義。コンパイルエラー?。
func(); //c
エラーになるのだとしたら面倒だなぁ。 リリース用のコードでこれが必要になることは稀だと思うけど、 試行錯誤しながら関数を書いている途中では、よく出てくる形なんだよなあ。 これがコンパイルエラーにならないなら「1 が出来るのがスゲェ」と言うことにしよう。 だめなら「aはunboundエラーでいいやん」てこと。
#a,b,cが全部2を返すのもいやん。1,1,2でないといかん。
再定義は上書きされちゃいますねぇ。
無名関数の直接呼び出しについてはこのあたりに書いてあったような……ECMAScript - on Surface of the Depth -
(function(n){return n==0?1:n*arguments.callee(n-1)}).call(this, 120);
とか、できないんですか?(ふつうのECMAscriptならできる)
資料、かっちょよすぎです。
Flash でもできるよー。ただドキュメント化されてないみたい。http://www.fumiononaka.com/TechNotes/Flash/FN0108010.html
ぼくは ActionScript2 の class は使ってないです。クロージャの方が分かりやすい。function の書き方は、クラス定義のときは HogeClass = function () {...} とかかないといけないっぽいよ。
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 だっけ? ああいうのがほしいっぽい。
さて、どうやって実装するべきか。
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
あったらいやなもの:カニクリームソーダ
昨日の日記を上書きしてしまって消してしまったんだけど、五月雨さんのキャッシュから復元。
バックアップはほしいが、CVSと連携させるのは嫌だ。
うぎゃーー!
提出期限 サイズ制限 Webでの公開 紙の配布
Lightening Talk 8/1(日) なし 8/3(火) なし
って何。全然聞いてないよそんなの。というか、5分のプレゼンを一週間前に公開してどうする! (lt => 一発芸 => そんなの、先にネタを公開してどうする)
ちょっとわけがわからないので、これについてはきちんと聞いておこう。ちょうど、sicp読書会だしな。えんどうさんいらっしゃるかしらん。
(本音:当日作ろうと思ってたのに、こんな先に出せって言われても無理だってば)
マリア様がどうの。音で源氏名を喋るのは、やっぱりどう聞いても変だ。そもそも、日本語な発音ってのがあれなんだろうなぁ。
FlashMX, 1500円なり。
とても気持ちが悪い.風邪か・・・.吐き気が・・・.
バグを出すほうがかっこ悪いと思います orz...(◆[nadoka] かっこわるい)
マックグランを買ってみた.
食いづらい.
というわけで,げんしけん(4),
なんか方向が変わってるような気が・・・.そうでもないのかなぁ.なんかおたくっぽくなってる気がする.
大量の申し込み書類とか見てると,「字が綺麗」であることがとても大きなアドバンテージであることがよくわかった.
少なくとも俺は手書きで書いてはいけない・・・.
そういえば,もう金が無いという言い訳が当分出来なさそうなので,FlashMX 買うか.どこで買うと安いだろう.
というわけで,明日買ってしまおう.
真冬,という名前は聞くけど,真夏って名前は聞かないような気がする.
真春,真秋ってのも聞かないなぁ.
(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 を見た.やっぱり難しい.
しかし,「る」で始まって「ん」で終わるならなんでもいいんだねぇ.そりゃそうか.
キターーーー!!!!
いつもお世話になっております。今回のことも、皆様のおかげかと存じます。
皆様からのご恩に報いるためにも、精一杯力を尽くす所存です。これからも、何卒よろしくお願いいたします。
ささだこういち拝
というわけで、ふもっふ終わり。
ベタなオチだ。
ra.equal?(st)では
あぁ,ほんとだ.ちゃんと見てくれるんですねぇ>特異メソッド
やったね!
おめでとうございます
PTT, なんだか簡単な話を,難しく話してしまったようでごめんなさい. 結局,懇親会の後,大学に戻ってきて,今週は火曜日から連泊です. (日曜だけ夜は自宅へ帰ったのですが,3連休も大学でした.大学の 居室の引越しだけは終わらせるつもりだったのですが,..)
夏休みなら時間が取れるので,部屋に来てくれれば厳密解法について はわかるまで説明します.数学セミナーの8月号にも記事を書いてみ たので読んでみてください.
おめでとーございます。
おめでとうございます。私もがんばらねば。
どうもありがとうございます.
恐縮です>品野先生
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 を,誰か作って.
最近,ひょんなことで見つけた 現代奇談というページを(現実逃避に)見ている.まぁ,夏だし.怖い怖い.
今日のししゃもさん。
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.
がーん、でばっぐしたと思ったらパースエラーのまま放置していた・・・。メールログ空白の時間が出来てしまった。
いいなぁ、これ。ひとつどうですか?
0.6.1。いきなり 0.6.0 でバグ orz。なんとか海の日リリース。
今回もうさせんせいにお世話になりました。
yogurting って、ロゴが凄くかっこいいんだと思う。
仮想デスクトップの話で盛り上がったので,VirtuaWin V2.9 というソフトを入れてみる.どうやって使うのかよくわからない.
とりあえず,マウスで移動するのはデュアルデスクトップだとダメダメだったのでやめ.
窓たてというソフトウェアを利用してみたが,デュアルデスクトップだとダメダメだったのでやめ.
そういえば,本学科のウェブサイトが更新されていた.w3m で見てみたら,何もわからない.綺麗になればいいってものではないだろうに.字も小さいし.
ircで聞いたんですが,7 の倍数にマッチする正規表現.やべぇ,すげぇ笑ってしまった.
vm* っていう命令.面白いねぇ〜.
YOMIURI ON-LINE / サイエンス - 博士号取っても定職なし、文科省が「余剰博士」対策へ.
ガクガクブルブル.
ウィンドウの最大化とかできるショートカットはないものか.
ウェブでメール管理のバグ取り.X-Sequence ってこうなってたのか.
「頁」の読み方を今日はじめて知りました.
「こう」とは読まないんだなぁ.
PLEAC-Ruby なんてあるんですね.
ふらふらふらふらー。。。やっぱ安いな俺。
alt+space, X じゃダメか>最大化。窓使い使う鹿
ruby-list は敷居が高い。
どっちがいいんだろう。
「他の業種は『俺、絵描くの好きだからこの値段でもやるぜ』とかあるんですが、プログラムって相場が決まってる仕事なんですよね。エロゲ業界ってその相場でももらい過ぎなんですが……。その値段で我慢してやってくれて、融通が利いて、コミュニケーションが取れてというのはある意味奇跡的な人材なんです」
嘘だ。絶対嘘だ。
プログラマーを舐めすぎてるというか、舐めさせた先人というか。というか、プログラマーを知らないだけなんじゃ・・・。
『みんなと同じ給料で仕事できるプログラマー募集!』
こんなこと言ってる時点で、仕事させる気、ないだろう。
ラ(略)は好きなメーカーだったけど(あまりにあまりなので削除)。
それとも、俺が「プログラマ」を過大評価しているだけなのか。
灰羽終わり。
寝坊すぎ。
RubyかLispなら報酬が半額になってもいい、と言って仕事を探してもらったことはあります。結局Javaの仕事しかなかったんだけど。
RubyかLisp なら報酬が倍分の働きをします、という方向で。
そもそも、実際に開発するんじゃない奴が使用する言語を決めてから仕事を出してくるという仕組みが未だに理解できないすね。なんでこうなんだろう。
最近本田健さんの本を読んでたんですが、好きな仕事をして稼ぐのが一番だなぁと思いました。皆さん、独立開業しませんか?http://www.aiueoffice.com/
帰室.鈴木さん福岡さんご馳走様でした.
そういえば,はっかーずなんとか(ぼかしたのは,公開していいのかわからなかったため)の邦訳,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 って企業名に入ってるんだけど。まぁこんなもんなのか。
豪華に和菓子.
一人で大きなプログラムを作るの好くない.
orz... 俺だからかもしれない
ぉ,酒井さんが裏切りだ!(違)
50円引き……
お久しぶりです.言語専門家(?)の笹田君に質問です. 最近注目してる言語でOCamlっていうのがあるんですが,これってどうなんですか? 掲示板がないみたいなのでこちらに書いてみました.
大変恐れ多いことでございますよ.OCamlはすみません,使ったこと無いです.東工大に OCaml 使いが多いって昔聞いたような気が.
geckoは、昔いた会社(31F)のはめ殺しのガラス窓の外にへばりついてるのを見たことがあります。
がーん。ばれてしまった
INRIAが開発したML系の言語です.syntaxはsmlとかに慣れてると癖があるように感じます.クラスがあります.そういうことを聞きたいわけじゃないかもしれないですが...
私も scheme で出させてもらえないかなぁ(無理)
ありがとうございます.当方,あまり関数型言語を用いた事がないのですが,なんだかバグが出にくいなどの噂を聞いたので,これって本当なのかな?と思い,書き込んでみました.いっちょ,挑戦してみようかな….
是政駅。近所に住んでいて、この存在を今初めて知った。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;
こんなふうに逃げる.
スラッシュドット ジャパン | ランドセルに電子タグの実証実験
真剣に,悪用防止の手法が思いつかないんですが,本当にこんなことやっても大丈夫なんでしょうか.
高木浩光さんの日記には,「大丈夫なのか」みたいなことを書いてますが,実際どうなんだろう.専門家のご意見を伺いたいです.マジで.
今家族にこんなもんつける,とか言われたら凄い勢いで拒否するね.
是政、多摩川近くていいところですよね。
むしょうに行ってみたくなった。
結構近所に住んでいるのかも(最近是政近辺に家庭教師に行ってました)。
武蔵境駅で「この西武線は何処へ行くのだ」と疑問には思わなかったのか(多摩墓地か競艇場が終点と思ってた?)
昔は「西武是政線」が正式名称。多摩川の砂利採取で建設。採取した穴が競艇場。しかし、この近辺にいて多摩川線を知らなかったとは!
南武線みたいに多摩川の南に延びてるんだとおもってました.もっと調布のあたりで多摩川越える感じで.地図をまじまじと見たのが今回初めてだったり.
是政、よく走っていったもんです
しょせん多摩川、されど多摩川。下流に行けば六郷川。私鉄は川を越えるかは一大決心。川を越えるか、否か、悩ましい…
irc で聞いたんですが、gprime.net - video - blindfolded mario pianist take two。すげー。
設定ファイル記述の話とか複数のプログラミング言語の利用の話は langsmithらしくないらしい.
英語なんとかしないとなぁ。
と思って、何年経つんだろう。
とにかく興味がある文献を読み漁るのがいいんだろうか。
どきどき.
一年生ひきまくり.
apt-get distupgrade したら,apache2 バージョンがあがった.でも suexec が出来なくなっていた.
・・・suexec のパスが変わっていた.これは,パッケージング時のバグなんだろうか.疲れた.しかし,なぜ suexec のパスくらいコンパイル時に決定しないといけないんだろう.設定ファイルに書かせてくれよ.
喉が痛い.
VOA をずっと聞いているんだけど,宇宙人っぽいエフェクトの,平坦な発音だと聞ける.やっぱり,英語のアクセントになれないだけなんだろうか.
とりあえずトライアル版で試すか、とダウンロードしてみると「評価期間が過ぎています」ってオイ。
で、よく見るとFireworksMX だったので、間違えちゃったなぁ、と FlashMX のほうを落としてみると、アーカイブが展開できません。ファイルが壊れてるっていいます。やってられません。
linux機に持っていったら解凍できた。
で、やっぱり「評価期間が過ぎています」。
もうやってられません。神様がやるなと言ってるんだろうか。
なんでだろ。Macromedia もたまにおかしいことがあるな。日本のカスタマーサポートにメールすれば直してくれるかも。
いろいろと頭が痛い。物理的にも、精神的にも。
学校にバイクでくる途中,むちゃくちゃ雨に降られた.着いたら小雨に.
lightning talk @ llwe ,少なすぎ.
2時です.って,俺ももう出ないとヤバイ.
iPod mini用レコーダは,作る予定はないでそうです.残念.さよなら,iPod mini(でもホスィ)
今日はケーキとか甘いものばかり食っていた気がする.
抹茶ケーキに和菓子,ティラミス.おいしかった.
お茶を頼んで 1000円.
Flashのソフトが作りたくて作りたくて作りたくて作りたくてしょうがないんですが、誰か買ってください。もしくは、Flashのソフト制作バイトさせて。
青森チケット着た。
ペアプロを相互監視による強制的プログラミング、とかにしておくと受けがよくなったりしないだろうか。現場じゃないほうに。
Flashソフトのバイトより研究では?いや、もっとマシなバイトはたくさんある
1. Flash で Ruby の VM を書く 2. Ruby スクリプトから Flash のオブジェクトコードを吐くコンパイラを書く
研究の一貫としていかがでしょうか? :-)
これならやすいよ。 SWF の仕様書はここから。 Perl ですが、これも参考になりそう。 というわけで、Scheme で Flash のアクションがかけるようにしてください。
Flash MX 2004 Education 日本語版なら1万円で買えるみたいなんですよね・・・。作りたいソフトは一個だけなんだどなぁ。
って、Professionalじゃないと駄目か。1.5万円。うー、今月は辛いので我慢するか・・・。
1万円ってやすすぎる!ぼくの分も買ってください。お金出すから。プロフェショナル版にする必要はないよ。
XMLによるホストとの連携ってプロフェッショナル版じゃないと駄目なんじゃないんすか?
XMLSocket のことかな。そらなら普通版でだいじょぶだよ。Flash Communication Server との連携も普通版でだいじょうぶー。っていうか、ぼくは仕事でネトゲみたいなのつくってますが、普通版つかってます。
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] かなぁ・・・。
ををっ。RSSありがとうございます。content[0..500]みたいな方法をよく見ますが、べつに全文のっけてもいいですよね...
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
なんかエラーが多発してたので,こんなふうにしてみた.多分,もっと根がある話だとは思うんだけど.
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)
りんごジュースを買おうと思ったら,よく似たオレンジジュースを買ってしまった.自動販売機って,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を渡したりというのがオープンソース推進者の人の個性なのか。
どういう個性だ.
今日も歯医者。麻酔が鼻までかかってる。
undoじゃなくてもせめてOKボタンを押さないと買えないようにするとか。
多分商品を取り出してはじめて気が付くので,それだとあんまり意味がない気が.
飲料・食料は安全上の理由から絶対に駄目かと.ゆりかもめとか地下鉄の一部無人(遠隔管理)駅で,きっぷを戻せる自動券売機が配備されてるという例はありますが.
オレンジジュースのほうがおいしぃ
ねみゅい。
ruby分を取りすぎた。
さて、今年も冷やし中華の季節がやってまいりました。つまり、マヨネーズが欠かせない季節ですね。
apache2 にしろーという圧力がきたので、1.3 から 2系に変更する。・・・準備をする。めんどうだよう。
久々に授業に出た.眠い
なんというか,小学生か,あいつらは.
飲み.大変,大変有意義な飲み.
スレッドまたぐとやべーじゃん、というご指摘を受けた>$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なんてどうだろう。
結論:タイトルにメッセージを書いても誰もレスポンスを書かない(書けない)。
ruby の WSDL とかで、google からひっぱってきたデータを iconv に食わせると、いつのまにか、常に失敗するようになった。
なぜだーー、といろいろ調べると $KCODE='e' になったら、googleから帰ってくるデータがeucになっていたらしい。ひでえ。ひどすぎる。
問題はいくつかある。
どう解決するのがいいんだろう。あー、文字コードなんかでなやみたくねー。
def change_kcode kc
tmp = $KCODE
$KCODE = kc
begin
yield
ensure
$KCODE = tmp
end
end
みたいなのを作ってお茶を濁そう.KCODE に依存したコードを書くのはなんか嫌だなぁ.でも,モデルとしてそういうものだといわれると・・・.うーむ.
コップ割れちゃったウワーン.
これは予約特典をゲットしろとのお告げか!?
多分買わないけどな.
というか,でかいコップがすきなんだけど,どっかにいい感じの,ないかなぁ.
うささんに gmail アカウント貰う.ありがとうございます.さて,何に使おう.
QRコードの仕様をずらずら見ていたんだけど,とりあえず面倒くさいことはわかった.どうしようかなぁ.
組み込みPair の利点は,要するにコスト(速度とメモリ効率)です.でも,配列よりはメモリ効率や構築コストは高いです.シンプルで柔軟なデータ構造を実現できます(中身の無い売り文句).
ものによっては,あるととても便利(コスト的に有利)だと思うんですが,その「もの」がどれくらいあるかどうかが問題なのでしょう.rubyist にとって,それがどれくらい有効に活用されるのか,が.
Rucheme を作るにはあると幸せになるんですが,誰も使わないので却下.
あちぃ.
Pair,要らないかぁ.unshift が速くなって幸せになることもあると思うんだけど.とか考え出すと,それは LinkedList なのか,とか push は速くなんないのか,とかいろいろ考え出しちゃってダメかも.
速いリスト操作だけがしたいのなら(push/pop/shift/unshift),拡張ライブラリだけで済むんだよな.
あー,寝ちゃった.ヤバイ.
nokadaさんに熱気球について「知りたい」を教えてもらう.こんなふうに競うんだねぇ.
2次元バーコードリーダの価格を調べてみる。
・・・16万。高すぎ。
2次元バーコードつってバーじゃないじゃん、というご指摘を受ける。うーん、たしかに。QRコードとか、2次元コードとか、ちゃんと書くようにしよう。
僕の携帯で2次元コードを読み取るときは「バーコードリーダー」って機能を呼び出しますよ。
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 はどうするんだ,みたいな.
なんでこんなに素材集のページって見づらいんだろう.どうしてあんな(自粛)みたいなページが作れるのかわからん・・・.人のところへリンクばっかり張って.
気まぐれ工房 玄関 から素材を借用.こちらのページはとてもいいですね.見やすい.
入り口がわかりづらいのが難点か.
アンケートのデータフォーマットを変更(データ例).もっと前にやっておけばよかった.
英語の喋りのスキルは素質でも才能でもない、純粋に練習量に比例するので、練習あるのみ。議論は、"Can we talk about it later?" でかわすのだ。
壇上に上って一言それを言えばよい、と(違)